/** @file
  Callbacks required by the HII of the Opal UEFI Driver to help display
  Opal device information.

Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include "OpalHii.h"

/**
  Get the driver image handle.

  @retval  the driver image handle.

**/
EFI_HANDLE
HiiGetDriverImageHandleCB (
  VOID
  )
{
  return gImageHandle;
}

/**
  Returns the opaque pointer to a physical disk context.

  @param  DiskIndex       Input the disk index.

  @retval The device pointer.

**/
VOID *
HiiGetDiskContextCB (
  UINT8  DiskIndex
  )
{
  OPAL_DRIVER_DEVICE  *Dev;
  UINT8               CurrentDisk;

  Dev         = OpalDriverGetDeviceList ();
  CurrentDisk = 0;

  if (DiskIndex >= GetDeviceCount ()) {
    return NULL;
  }

  while (Dev != NULL) {
    if (CurrentDisk == DiskIndex) {
      return Dev;
    } else {
      Dev = Dev->Next;
      CurrentDisk++;
    }
  }

  return NULL;
}

/**
  Returns the opaque pointer to a physical disk context.

  @param  DiskIndex       Input the disk index.

  @retval The device pointer.

**/
OPAL_DISK *
HiiGetOpalDiskCB (
  UINT8  DiskIndex
  )
{
  VOID                *Ctx;
  OPAL_DRIVER_DEVICE  *Tmp;

  Ctx = HiiGetDiskContextCB (DiskIndex);

  if (Ctx == NULL) {
    return NULL;
  }

  Tmp = (OPAL_DRIVER_DEVICE *)Ctx;

  return &Tmp->OpalDisk;
}

/**
  Returns the disk name.

  @param  DiskIndex       Input the disk index.

  @retval Returns the disk name.

**/
CHAR8 *
HiiDiskGetNameCB (
  UINT8  DiskIndex
  )
{
  OPAL_DRIVER_DEVICE  *Ctx;

  Ctx = (OPAL_DRIVER_DEVICE *)HiiGetDiskContextCB (DiskIndex);

  if (Ctx != NULL) {
    if (Ctx->NameZ == NULL) {
      OpalDriverGetDriverDeviceName (Ctx);
    }

    return Ctx->NameZ;
  }

  return NULL;
}
