/** @file
  EFI_DEVICE_PATH_TO_TEXT_PROTOCOL as defined in UEFI 2.0.
  This protocol provides service to convert device nodes and paths to text.

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

**/

#ifndef __DEVICE_PATH_TO_TEXT_PROTOCOL_H__
#define __DEVICE_PATH_TO_TEXT_PROTOCOL_H__

///
/// Device Path To Text protocol
///
#define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \
  { \
    0x8b843e20, 0x8132, 0x4852, {0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c } \
  }

/**
  Convert a device node to its text representation.

  @param  DeviceNode     Points to the device node to be converted.
  @param  DisplayOnly    If DisplayOnly is TRUE, then the shorter text representation
                         of the display node is used, where applicable. If DisplayOnly
                         is FALSE, then the longer text representation of the display node
                         is used.
  @param  AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
                         representation for a device node can be used, where applicable.

  @retval a_pointer      a pointer to the allocated text representation of the device node data
  @retval NULL           if DeviceNode is NULL or there was insufficient memory.

**/
typedef
CHAR16 *
(EFIAPI *EFI_DEVICE_PATH_TO_TEXT_NODE)(
  IN CONST EFI_DEVICE_PATH_PROTOCOL   *DeviceNode,
  IN BOOLEAN                          DisplayOnly,
  IN BOOLEAN                          AllowShortcuts
  );

/**
  Convert a device path to its text representation.

  @param  DevicePath     Points to the device path to be converted.
  @param  DisplayOnly    If DisplayOnly is TRUE, then the shorter text representation
                         of the display node is used, where applicable. If DisplayOnly
                         is FALSE, then the longer text representation of the display node
                         is used.
  @param  AllowShortcuts The AllowShortcuts is FALSE, then the shortcut forms of
                         text representation for a device node cannot be used.

  @retval a_pointer      a pointer to the allocated text representation of the device node.
  @retval NULL           if DevicePath is NULL or there was insufficient memory.

**/
typedef
CHAR16 *
(EFIAPI *EFI_DEVICE_PATH_TO_TEXT_PATH)(
  IN CONST EFI_DEVICE_PATH_PROTOCOL   *DevicePath,
  IN BOOLEAN                          DisplayOnly,
  IN BOOLEAN                          AllowShortcuts
  );

///
/// This protocol converts device paths and device nodes to text.
///
typedef struct {
  EFI_DEVICE_PATH_TO_TEXT_NODE    ConvertDeviceNodeToText;
  EFI_DEVICE_PATH_TO_TEXT_PATH    ConvertDevicePathToText;
} EFI_DEVICE_PATH_TO_TEXT_PROTOCOL;

extern EFI_GUID  gEfiDevicePathToTextProtocolGuid;

#endif
