## @file
# Redfish Package
#
# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
##

[Defines]
  DEC_SPECIFICATION = 0x0001001b
  PACKAGE_NAME      = RedfishPkg
  PACKAGE_GUID      = c432b76e-5232-11e7-9010-005056c00008
  PACKAGE_VERSION   = 1.0

[Includes]
  Include

[Includes.Common.Private]
  PrivateInclude                # Private header files for C RTL.
  PrivateInclude/Crt            # Private header files for C RTL.
  Library/JsonLib               # Private header files for jansson
                                # configuration files.
                                #  - jansson_config.h
                                #  - jansson_private_config.h
                                # jansson.h refers to above two configuration
                                # files for building platform jansson library.
  Library/JsonLib/jansson/src   # For referring to jannson.h

[LibraryClasses]
  ##  @libraryclass Platform Redfish Host Interface Library
  #   Platform implementation-specific Redfish Host Interface.
  RedfishPlatformHostInterfaceLib|Include/Library/RedfishHostInterfaceLib.h

  ##  @libraryclass  This library provides UCS2 to UTF8 manipulation
  #   functions.
  #
  Ucs2Utf8Lib|Include/Library/BaseUcs2Utf8Lib.h

  ##  @libraryclass Platform Redfish Credential Library
  #   Platform implementation-specific Redfish Credential Interface.
  RedfishPlatformCredentialLib|Include/Library/RedfishCredentialLib.h

  ##  @libraryclass  The helper routines to access REST EX service.
  #   This library is only intended to be used by UEFI network stack modules.
  RestExLib|Include/Library/RestExLib.h

  ##  @libraryclass  Provides the library functions based on third party
  #  jansson library to manipulate JSON data structure.
  #
  JsonLib|Include/Library/JsonLib.h

  ##  @libraryclass  Provides the library functions to encode/decode
  #   Redfish packet.
  #
  RedfishContentCodingLib|Include/Library/RedfishContentCodingLib.h

[LibraryClasses.Common.Private]
  ##  @libraryclass  Provides the private C runtime library functions.
  #   CRT library is currently used by edk2 JsonLib (open source
  #   jansson project) and edk2 RedfishLib (libredfish open source
  #   project).
  RedfishCrtLib|PrivateInclude/Library/RedfishCrtLib.h

  ##  @libraryclass Redfish Helper Library
  #   Library provides Redfish helper functions.
  RedfishLib|PrivateInclude/Library/RedfishLib.h

[Protocols]
  ## Include/Protocol/EdkIIRedfishCredential.h
  gEdkIIRedfishCredentialProtocolGuid = { 0x8804377, 0xaf7a, 0x4496, { 0x8a, 0x7b, 0x17, 0x59, 0x0, 0xe9, 0xab, 0x46 } }

  ## Include/Protocol/Edk2RedfishConfigHandler.h
  gEdkIIRedfishConfigHandlerProtocolGuid = { 0xbc0fe6bb, 0x2cc9, 0x463e, { 0x90, 0x82, 0xfa, 0x11, 0x76, 0xfc, 0x67, 0xde } }

[Guids]
  gEfiRedfishPkgTokenSpaceGuid      = { 0x4fdbccb7, 0xe829, 0x4b4c, { 0x88, 0x87, 0xb2, 0x3f, 0xd7, 0x25, 0x4b, 0x85 }}

[PcdsFixedAtBuild, PcdsPatchableInModule]
  #
  # This PCD is the UEFI device path which is used as the Redfish host interface.
  #
  gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceDevicePath|{0x0}|REST_EX_SERVICE_DEVICE_PATH_DATA|0x00001000 {
  <HeaderFiles>
    Pcd/RestExServiceDevicePath.h
  <Packages>
    MdePkg/MdePkg.dec
    MdeModulePkg/MdeModulePkg.dec
    RedfishPkg/RedfishPkg.dec
  }
  #
  # This PCD indicates the EFI REST EX access mode to Redfish service.
  # Default is set to out of band access.
  #
  gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand|FALSE|BOOLEAN|0x00001001
  #
  # This PCD indicates the access mode EFI Discover protocol uses to look for the proper EFI REST EX
  # protocol instance.
  #
  gEfiRedfishPkgTokenSpaceGuid.PcdRedfishDiscoverAccessModeInBand|FALSE|BOOLEAN|0x00001002
