public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chang, Abner" <abner.chang@amd.com>
To: Nickle Wang <nickle.wang@hpe.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Andrew Fish <afish@apple.com>, Ray Ni <ray.ni@intel.com>,
	"Yang, Atom" <Atom.Yang@amd.com>,
	Nick Ramirez <nramirez@nvidia.com>
Subject: Re: [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce Hii2RedfishBootDxe driver
Date: Mon, 25 Jul 2022 14:31:32 +0000	[thread overview]
Message-ID: <MN2PR12MB3966D16803CBA0F4C2089AEFEA959@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20220725013540.1699-1-nickle.wang@hpe.com>

[AMD Official Use Only - General]

Reviewed-by: Abner Chang <abner.chang@amd.com>

> -----Original Message-----
> From: Nickle Wang <nickle.wang@hpe.com>
> Sent: Monday, July 25, 2022 9:36 AM
> To: devel@edk2.groups.io
> Cc: Andrew Fish <afish@apple.com>; Ray Ni <ray.ni@intel.com>; Chang,
> Abner <Abner.Chang@amd.com>; Yang, Atom <Atom.Yang@amd.com>;
> Nick Ramirez <nramirez@nvidia.com>
> Subject: [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce
> Hii2RedfishBootDxe driver
> 
> [CAUTION: External Email]
> 
> Add Hii2RedfishBootDxe driver with configure language defined in UNI file in
> order to demonstrate the use of Redfish Platform Config Protocol. Feature
> drivers under RedfishClientPkg will work with this driver and provide the
> REST data to Redfish service.
> 
> Signed-off-by: Nickle Wang <nickle.wang@hpe.com>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Yang Atom <Atom.Yang@amd.com>
> Cc: Nick Ramirez <nramirez@nvidia.com>
> ---
>  EmulatorPkg/EmulatorPkg.dec                   |   5 +-
>  EmulatorPkg/EmulatorPkg.dsc                   |   3 +-
>  EmulatorPkg/EmulatorPkg.fdf                   |   3 +-
>  .../Hii2RedfishBootDxe/Hii2RedfishBootData.h  |  60 ++
>  .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.c   | 702 ++++++++++++++++++
>  .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.h   |  53 ++
>  .../Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf |  60 ++
>  .../Hii2RedfishBootDxeMap.uni                 |  28 +
>  .../Hii2RedfishBootDxeStrings.uni             |  41 +
>  .../Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr |  83 +++
>  10 files changed, 1034 insertions(+), 4 deletions(-)  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h
>  create mode 100644 EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c
>  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h
>  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
>  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni
>  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni
>  create mode 100644
> EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr
> 
> diff --git a/EmulatorPkg/EmulatorPkg.dec b/EmulatorPkg/EmulatorPkg.dec
> index 9e87b50afc..52a62c09c9 100644
> --- a/EmulatorPkg/EmulatorPkg.dec
> +++ b/EmulatorPkg/EmulatorPkg.dec
> @@ -4,7 +4,7 @@
>  #
>  # Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>  #
> Portions copyright (c) 2011, Apple Inc. All rights reserved.
> -# (C) Copyright 2020-2021 Hewlett Packard Enterprise Development LP<BR>
> +# (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP<BR>
>  #
>  #    SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
> @@ -47,7 +47,8 @@
>    gEmuVirtualDisksGuid       = { 0xf2ba331a, 0x8985, 0x11db, { 0xa4, 0x06, 0x00,
> 0x40, 0xd0, 0x2b, 0x18, 0x35 } }
>    gEmuPhysicalDisksGuid      = { 0xf2bdcc96, 0x8985, 0x11db, { 0x87, 0x19, 0x00,
> 0x40, 0xd0, 0x2b, 0x18, 0x35 } }
>    gEmuRedfishServiceGuid     = { 0x3fb208ac, 0x2185, 0x498c, { 0xbf, 0x46,
> 0xdc, 0x23, 0xda, 0x58, 0x7b, 0x55 } }
> -  gHii2RedfishMemoryFormsetGuid  = { 0XC2BE579E, 0X3C57, 0X499C, { 0XA9,
> 0XDF, 0XE6, 0X23, 0X8A, 0X49, 0X64, 0XF8 }}
> +  gHii2RedfishMemoryFormsetGuid  = { 0xC2BE579E, 0x3C57, 0x499C, {
> + 0xA9, 0xDF, 0xE6, 0x23, 0x8A, 0x49, 0x64, 0xF8 }}
> + gHii2RedfishBootFormsetGuid  = { 0x8399a787, 0x108e, 0x4e53, { 0x9e,
> + 0xde, 0x4b, 0x18, 0xcc, 0x9e, 0xab, 0x3b }}
> 
>  [PcdsFeatureFlag]
>    ## If TRUE, if symbols only load on breakpoints and gdb entry diff --git
> a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc index
> e5cb3c3d8d..1d59b4a1dd 100644
> --- a/EmulatorPkg/EmulatorPkg.dsc
> +++ b/EmulatorPkg/EmulatorPkg.dsc
> @@ -7,7 +7,7 @@
>  # Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>  #
> Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.<BR>  #
> Copyright (c) Microsoft Corporation.
> -# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
>  #
>  # SPDX-License-Identifier: BSD-2-Clause-Patent  # @@ -490,6 +490,7 @@
> 
>  !if $(REDFISH_ENABLE) == TRUE
>    EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> +  EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
>  !endif
>  !include RedfishPkg/Redfish.dsc.inc
>  !include RedfishClientPkg/RedfishClient.dsc.inc
> diff --git a/EmulatorPkg/EmulatorPkg.fdf b/EmulatorPkg/EmulatorPkg.fdf
> index 5e770af186..f9ff4320d9 100644
> --- a/EmulatorPkg/EmulatorPkg.fdf
> +++ b/EmulatorPkg/EmulatorPkg.fdf
> @@ -3,7 +3,7 @@
>  #
>  # Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>  #
> Portions copyright (c) 2009 - 2011, Apple Inc. All rights reserved.<BR> -# (C)
> Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
> +# (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
>  #
>  # SPDX-License-Identifier: BSD-2-Clause-Patent  # @@ -214,6 +214,7 @@
> INF  EmulatorPkg/EmuSnpDxe/EmuSnpDxe.inf
>  #
>  !if $(REDFISH_ENABLE) == TRUE
>    INF EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf
> +  INF EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
>  !endif
>  !include RedfishPkg/Redfish.fdf.inc
>  !include RedfishClientPkg/RedfishClient.fdf.inc
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h
> new file mode 100644
> index 0000000000..0da28a5032
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootData.h
> @@ -0,0 +1,60 @@
> +/** @file
> +  The header file of HII-to-Redfish boot driver.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef HII_2_REDFISH_BOOT_DATA_H_
> +#define HII_2_REDFISH_BOOT_DATA_H_
> +
> +#include <Uefi/UefiMultiPhase.h>
> +#include <Guid/HiiPlatformSetupFormset.h>
> +
> +#define HII_2_REDFISH_BOOT_FORMSET_GUID \
> +  { \
> +    0x8399a787, 0x108e, 0x4e53, { 0x9e, 0xde, 0x4b, 0x18, 0xcc, 0x9e,
> +0xab, 0x3b } \
> +  }
> +
> +extern EFI_GUID gHii2RedfishBootFormsetGuid;
> +
> +#define FORM_ID                                     0x001
> +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED    0x100
> +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_MODE       0x101
> +#define QUESTION_ID_BOOT_SOURCE_OVERRIDE_TARGET     0x102
> +#define LABEL_BOOT_OPTION                           0x200
> +#define LABEL_BOOT_OPTION_END                       0x201
> +#define BOOT_ORDER_LIST                             0x300
> +#define MAX_BOOT_OPTIONS                            100
> +#define BOOT_OPTION_VAR_STORE_ID                    0x800
> +//
> +// VarOffset that will be used to create question // all these values
> +are computed from the structure // defined below //
> +#define VAR_OFFSET(Field)              ((UINT16) ((UINTN)
> &(((HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA *) 0)->Field)))
> +
> +#pragma pack(1)
> +
> +//
> +// Definiton of HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA
> +//
> +typedef struct {
> +  UINT8   BootSourceOverrideEnabled;
> +  UINT8   BootSourceOverrideMode;
> +  UINT8   BootSourceOverrideTarget;
> +  UINT8   Reversed;
> +} HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA;
> +
> +//
> +// Definiton of HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA
> +//
> +typedef struct {
> +  UINT32  BootOptionOrder[MAX_BOOT_OPTIONS];
> +} HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA;
> +
> +#pragma pack()
> +
> +#endif
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c
> new file mode 100644
> index 0000000000..203fd8e1ef
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.c
> @@ -0,0 +1,702 @@
> +/** @file
> +  HII-to-Redfish boot driver.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include "Hii2RedfishBootDxe.h"
> +
> +EFI_GUID        mHii2RedfishBootGuid =
> HII_2_REDFISH_BOOT_FORMSET_GUID;
> +EFI_HII_HANDLE  mHiiHandle;
> +EFI_HANDLE      mDriverHandle;
> +EFI_EVENT       mEvent = NULL;
> +CHAR16          mHii2RedfishEfiVar[] = L"Hii2RedfishBootEfiVar";
> +HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA mBootOptionsVarData;
> +
> +///
> +/// HII specific Vendor Device Path definition.
> +///
> +HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath = {
> +  {
> +    {
> +      HARDWARE_DEVICE_PATH,
> +      HW_VENDOR_DP,
> +      {
> +        (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
> +        (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
> +      }
> +    },
> +    HII_2_REDFISH_BOOT_FORMSET_GUID
> +  },
> +  {
> +    END_DEVICE_PATH_TYPE,
> +    END_ENTIRE_DEVICE_PATH_SUBTYPE,
> +    {
> +      (UINT8) (END_DEVICE_PATH_LENGTH),
> +      (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
> +    }
> +  }
> +};
> +
> +/**
> +  This function add 'x-uefi-' configuration language to given string ID.
> +
> +  @param[in] HiiHandle                HII handle
> +  @param[in] StringId                 String token ID
> +  @param[in] ConfigLang               Configure language of question
> +
> +  @retval EFI_STATUS
> +
> +**/
> +EFI_STATUS
> +UpdateConfigLanguageToQuestion (
> +  IN  EFI_HII_HANDLE                HiiHandle,
> +  IN  EFI_STRING_ID                 StringId,
> +  IN  EFI_STRING                    ConfigLang
> +  )
> +{
> +  CHAR16  ConfigLanguage[32];
> +
> +  if (HiiHandle == NULL || StringId == 0 || ConfigLang == NULL) {
> +    return EFI_INVALID_LANGUAGE;
> +  }
> +
> +  UnicodeSPrint (ConfigLanguage, sizeof (ConfigLanguage), ConfigLang);
> +
> +  DEBUG ((DEBUG_INFO, "%a, add config-language for string(%d): %s\n",
> + __FUNCTION__, StringId, ConfigLanguage));
> +
> +  HiiSetString (
> +    HiiHandle,
> +    StringId,
> +    ConfigLanguage,
> +    COMPUTER_SYSTEM_SECHEMA_VERSION
> +    );
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  This function add 'x-uefi-' configuration language to given string ID.
> +
> +  @param[in] HiiHandle                HII handle
> +  @param[in] StringId                 String token ID
> +  @param[in] Index                    The index of boot option
> +  @param[in] BootOption               Boot option context
> +
> +  @retval EFI_STATUS
> +
> +**/
> +EFI_STATUS
> +UpdateConfigLanguageToValues (
> +  IN  EFI_HII_HANDLE                HiiHandle,
> +  IN  EFI_STRING_ID                 StringId,
> +  IN  UINTN                         Index,
> +  IN  EFI_BOOT_MANAGER_LOAD_OPTION  *BootOption
> +  )
> +{
> +  CHAR16  ConfigLanguage[10];
> +
> +  if (HiiHandle == NULL || StringId == 0 || BootOption == NULL) {
> +    return EFI_INVALID_LANGUAGE;
> +  }
> +
> +  UnicodeSPrint (ConfigLanguage, sizeof (ConfigLanguage), L"Boot%04x",
> + BootOption->OptionNumber);
> +
> +  DEBUG ((DEBUG_INFO, "%a, add config-language for string(%d): %s\n",
> + __FUNCTION__, StringId, ConfigLanguage));
> +
> +  HiiSetString (
> +    HiiHandle,
> +    StringId,
> +    ConfigLanguage,
> +    COMPUTER_SYSTEM_SECHEMA_VERSION
> +    );
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  This function creates boot order with ordered-list op-codes in runtime.
> +
> +  @retval EFI_STATUS
> +
> +**/
> +EFI_STATUS
> +RefreshBootOrderList (
> +  VOID
> +  )
> +{
> +  UINTN                         Index;
> +  EFI_BOOT_MANAGER_LOAD_OPTION  *BootOption;
> +  UINTN                         BootOptionCount;
> +  EFI_STRING_ID                 Token;
> +  VOID                          *StartOpCodeHandle;
> +  VOID                          *EndOpCodeHandle;
> +  EFI_IFR_GUID_LABEL            *StartLabel;
> +  EFI_IFR_GUID_LABEL            *EndLabel;
> +  BOOLEAN                       IsLegacyOption;
> +  VOID                          *OptionsOpCodeHandle;
> +  UINTN                         OptionIndex;
> +
> +  //
> +  // for better user experience
> +  // 1. User changes HD configuration (e.g.: unplug HDD), here we have
> + a chance to remove the HDD boot option  // 2. User enables/disables
> + UEFI PXE, here we have a chance to add/remove EFI Network boot option
> + //  EfiBootManagerRefreshAllBootOption ();
> +
> +  BootOption = EfiBootManagerGetLoadOptions (&BootOptionCount,
> + LoadOptionTypeBoot);
> +
> +  if (BootOptionCount == 0) {
> +    return EFI_NOT_FOUND;
> +  }
> +
> +  //
> +  // Initial var store
> +  //
> +  ZeroMem (&mBootOptionsVarData, sizeof
> + (HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA));
> +
> +  //
> +  // Allocate space for creation of UpdateData Buffer  //
> + StartOpCodeHandle = HiiAllocateOpCodeHandle ();  ASSERT
> + (StartOpCodeHandle != NULL);
> +
> +  EndOpCodeHandle = HiiAllocateOpCodeHandle ();  ASSERT
> + (EndOpCodeHandle != NULL);
> +
> +  //
> +  // Create Hii Extend Label OpCode as the start opcode  //  StartLabel
> + = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle,
> + &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));  StartLabel-
> >ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
> +  StartLabel->Number       = LABEL_BOOT_OPTION;
> +
> +  //
> +  // Create Hii Extend Label OpCode as the end opcode  //  EndLabel =
> + (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle,
> + &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));  EndLabel-
> >ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
> +  EndLabel->Number       = LABEL_BOOT_OPTION_END;
> +
> +
> +  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();  ASSERT
> + (OptionsOpCodeHandle != NULL);
> +
> +  for (Index = 0, OptionIndex = 0; Index < BootOptionCount; Index++) {
> +    //
> +    // Don't display hidden boot options, but retain inactive ones.
> +    //
> +    if ((BootOption[Index].Attributes & LOAD_OPTION_HIDDEN) != 0) {
> +      continue;
> +    }
> +
> +    //
> +    // Group the legacy boot option in the sub title created dynamically
> +    //
> +    IsLegacyOption = (BOOLEAN) (
> +                       (DevicePathType (BootOption[Index].FilePath) ==
> BBS_DEVICE_PATH) &&
> +                       (DevicePathSubType (BootOption[Index].FilePath) ==
> BBS_BBS_DP)
> +                       );
> +
> +    //
> +    // Don't display legacy boot options
> +    //
> +    if (IsLegacyOption) {
> +      continue;
> +    }
> +
> +    mBootOptionsVarData.BootOptionOrder[OptionIndex++] =
> + (UINT32)BootOption[Index].OptionNumber;
> +
> +    ASSERT (BootOption[Index].Description != NULL);
> +
> +    Token = HiiSetString (mHiiHandle, 0, BootOption[Index].Description,
> + NULL);
> +
> +    //
> +    // Add boot option
> +    //
> +    HiiCreateOneOfOptionOpCode (
> +      OptionsOpCodeHandle,
> +      Token,
> +      0,
> +      EFI_IFR_TYPE_NUM_SIZE_32,
> +      BootOption[Index].OptionNumber
> +      );
> +
> +    //
> +    // Add x-uefi configure language for boot options.
> +    //
> +    UpdateConfigLanguageToValues (mHiiHandle, Token, OptionIndex,
> + &BootOption[Index]);  }
> +
> +  //
> +  // Create ordered list op-code
> +  //
> +  HiiCreateOrderedListOpCode (
> +    StartOpCodeHandle,                        // Container for dynamic created
> opcodes
> +    BOOT_ORDER_LIST,                          // Question ID
> +    BOOT_OPTION_VAR_STORE_ID,                 // VarStore ID
> +    (UINT16)VAR_OFFSET (BootOptionOrder),             // Offset in Buffer
> Storage
> +    STRING_TOKEN (STR_BOOT_ORDER_LIST),       // Question prompt text
> +    STRING_TOKEN (STR_BOOT_ORDER_LIST_HELP),  // Question help text
> +    0,                                        // Question flag
> +    EFI_IFR_UNIQUE_SET,                       // Ordered list flag, e.g.
> EFI_IFR_UNIQUE_SET
> +    EFI_IFR_TYPE_NUM_SIZE_32,                 // Data type of Question value
> +    MAX_BOOT_OPTIONS,                         // Maximum container
> +    OptionsOpCodeHandle,                      // Option Opcode list
> +    NULL                                      // Default Opcode is NULL
> +    );
> +
> +  //
> +  // Add x-uefi configure language for boot order.
> +  //
> +  UpdateConfigLanguageToQuestion (mHiiHandle, STRING_TOKEN
> + (STR_BOOT_ORDER_LIST), COMPUTER_SYSTEM_BOOT_BOOTORDER);
> +
> +  //
> +  // Update HII form
> +  //
> +  HiiUpdateForm (
> +    mHiiHandle,
> +    &mHii2RedfishBootGuid,
> +    FORM_ID,
> +    StartOpCodeHandle,
> +    EndOpCodeHandle
> +    );
> +
> +  HiiFreeOpCodeHandle (StartOpCodeHandle);  HiiFreeOpCodeHandle
> + (EndOpCodeHandle);  HiiFreeOpCodeHandle (OptionsOpCodeHandle);
> +
> +  EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount);
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  This function update the "BootOrder" EFI Variable based on
> +  BMM Formset's NV map. It then refresh BootOptionMenu
> +  with the new "BootOrder" list.
> +
> +  @param[in] BootOptionVar    Boot option NV data
> +
> +  @retval EFI_SUCCESS             The function complete successfully.
> +  @retval EFI_OUT_OF_RESOURCES    Not enough memory to complete the
> function.
> +  @return The EFI variable can not be saved. See gRT->SetVariable for detail
> return information.
> +
> +**/
> +EFI_STATUS
> +UpdateBootorderList (
> +  IN HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA  *BootOptionVar
> +  )
> +{
> +  EFI_STATUS  Status;
> +  UINT16      Index;
> +  UINT16      OrderIndex;
> +  UINT16      *BootOrder;
> +  UINTN       BootOrderSize;
> +  UINT16      OptionNumber;
> +
> +  if (BootOptionVar == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  //
> +  // First check whether BootOrder is present in current configuration
> + //
> +  GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder,
> + &BootOrderSize);  if (BootOrder == NULL) {
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +
> +  //
> +  // OptionOrder is subset of BootOrder  //  for (OrderIndex = 0;
> + (OrderIndex < MAX_BOOT_OPTIONS) && (BootOptionVar-
> >BootOptionOrder[OrderIndex] != 0); OrderIndex++) {
> +    for (Index = OrderIndex; Index < BootOrderSize / sizeof (UINT16);
> Index++) {
> +      if ((BootOrder[Index] == (UINT16)BootOptionVar-
> >BootOptionOrder[OrderIndex]) && (OrderIndex != Index)) {
> +        OptionNumber = BootOrder[Index];
> +        CopyMem (&BootOrder[OrderIndex + 1], &BootOrder[OrderIndex],
> (Index - OrderIndex) * sizeof (UINT16));
> +        BootOrder[OrderIndex] = OptionNumber;
> +      }
> +    }
> +  }
> +
> +  Status = gRT->SetVariable (
> +                  L"BootOrder",
> +                  &gEfiGlobalVariableGuid,
> +                  EFI_VARIABLE_BOOTSERVICE_ACCESS |
> EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
> +                  BootOrderSize,
> +                  BootOrder
> +                  );
> +  FreePool (BootOrder);
> +
> +  return Status;
> +}
> +
> +/**
> +  Initial HII variable if it does not exist.
> +
> +  @retval EFI_SUCESS     HII variable is initialized.
> +
> +**/
> +EFI_STATUS
> +InitialHiiVairable (
> +  VOID
> +  )
> +{
> +  EFI_STATUS Status;
> +  UINTN      BufferSize;
> +  HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA Hii2RedfishBootVar;
> +
> +  //
> +  // Get Buffer Storage data from EFI variable.
> +  // Try to get the current setting from variable.
> +  //
> +  BufferSize = sizeof (HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA);
> +  Status = gRT->GetVariable (
> +            mHii2RedfishEfiVar,
> +            &gHii2RedfishBootFormsetGuid,
> +            NULL,
> +            &BufferSize,
> +            &Hii2RedfishBootVar
> +            );
> +  if (!EFI_ERROR (Status)) {
> +    return EFI_SUCCESS;
> +  }
> +
> +  //
> +  // Initialization
> +  //
> +  Hii2RedfishBootVar.BootSourceOverrideEnabled = STR_DISABLED;
> + Hii2RedfishBootVar.BootSourceOverrideMode = STR_UEFI;
> + Hii2RedfishBootVar.BootSourceOverrideTarget = STR_TARGET_NONE;
> + Hii2RedfishBootVar.Reversed = 0x00;
> +
> +  Status = gRT->SetVariable (
> +                  mHii2RedfishEfiVar,
> +                  &gHii2RedfishBootFormsetGuid,
> +                  VARIABLE_ATTRIBUTE_NV_BS,
> +                  BufferSize,
> +                  &Hii2RedfishBootVar
> +                  );
> +
> +  //
> +  // Initial var store
> +  //
> +  ZeroMem (&mBootOptionsVarData, sizeof
> + (HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA));
> +
> +  return Status;
> +}
> +
> +/**
> +  This function allows a caller to extract the current configuration
> +for one
> +  or more named elements from the target driver.
> +
> +  @param[in]  This               Points to the
> EFI_HII_CONFIG_ACCESS_PROTOCOL.
> +  @param[in]  Request            A null-terminated Unicode string in
> +                                 <ConfigRequest> format.
> +  @param[out]  Progress          On return, points to a character in the Request
> +                                 string. Points to the string's null terminator if
> +                                 request was successful. Points to the most recent
> +                                 '&' before the first failing name/value pair (or
> +                                 the beginning of the string if the failure is in
> +                                 the first name/value pair) if the request was not
> +                                 successful.
> +  @param[out]  Results           A null-terminated Unicode string in
> +                                 <ConfigAltResp> format which has all values filled
> +                                 in for the names in the Request string. String to
> +                                 be allocated by the called function.
> +
> +  @retval EFI_SUCCESS            The Results is filled with the requested values.
> +  @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the
> results.
> +  @retval EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown
> name.
> +  @retval EFI_NOT_FOUND          Routing data doesn't match any storage in
> this
> +                                 driver.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishBootExtractConfig (
> +  IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
> +  IN  CONST EFI_STRING                       Request,
> +  OUT EFI_STRING                             *Progress,
> +  OUT EFI_STRING                             *Results
> +  )
> +{
> +  EFI_STATUS Status;
> +
> +  if (Progress == NULL || Results == NULL) {
> +    return EFI_INVALID_PARAMETER;
> +  }
> +
> +  *Progress = Request;
> +
> +  if (Request == NULL) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  // Check whether request for EFI Varstore. EFI varstore get data  //
> + through hii database, not support in this path.
> +  //
> +  if (HiiIsConfigHdrMatch(Request, &gHii2RedfishBootFormsetGuid,
> L"Hii2RedfishBootEfiVar")) {
> +      return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  // Handle boot order list
> +  //
> +  if (HiiIsConfigHdrMatch(Request, &gHii2RedfishBootFormsetGuid,
> L"Hii2RedfishBootOptionVar")) {
> +    Status = gHiiConfigRouting->BlockToConfig (
> +                                gHiiConfigRouting,
> +                                Request,
> +                                (UINT8 *) &mBootOptionsVarData,
> +                                sizeof (HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA),
> +                                Results,
> +                                Progress
> +                                );
> +
> +    //
> +    // Set Progress string to the original request string.
> +    //
> +    if (Request == NULL) {
> +      *Progress = NULL;
> +    } else if (StrStr (Request, L"OFFSET") == NULL) {
> +      *Progress = Request + StrLen (Request);
> +    }
> +
> +    return EFI_SUCCESS;
> +  }
> +
> +  return EFI_NOT_FOUND;
> +}
> +
> +
> +/**
> +  This function processes the results of changes in configuration.
> +
> +  @param[in]  This               Points to the
> EFI_HII_CONFIG_ACCESS_PROTOCOL.
> +  @param[in]  Configuration      A null-terminated Unicode string in
> <ConfigResp>
> +                                 format.
> +  @param[out] Progress           A pointer to a string filled in with the offset of
> +                                 the most recent '&' before the first failing
> +                                 name/value pair (or the beginning of the string if
> +                                 the failure is in the first name/value pair) or
> +                                 the terminating NULL if all was successful.
> +
> +  @retval EFI_SUCCESS            The Results is processed successfully.
> +  @retval EFI_INVALID_PARAMETER  Configuration is NULL.
> +  @retval EFI_NOT_FOUND          Routing data doesn't match any storage in
> this
> +                                 driver.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishBootRouteConfig (
> +  IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
> +  IN  CONST EFI_STRING                       Configuration,
> +  OUT EFI_STRING                             *Progress
> +  )
> +{
> +  EFI_STATUS Status;
> +  UINTN      BufferSize;
> +  HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA BootOptionsVar;
> +
> +  *Progress = Configuration;
> +
> +  //
> +  // Check whether request for EFI Varstore. EFI varstore get data  //
> + through hii database, not support in this path.
> +  //
> +  if (HiiIsConfigHdrMatch(Configuration, &gHii2RedfishBootFormsetGuid,
> L"Hii2RedfishBootEfiVar")) {
> +      return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  // Handle boot order list
> +  //
> +  if (HiiIsConfigHdrMatch(Configuration, &gHii2RedfishBootFormsetGuid,
> L"Hii2RedfishBootOptionVar")) {
> +    BufferSize = sizeof(HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA);
> +    ZeroMem (&BootOptionsVar,
> sizeof(HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA));
> +    Status = gHiiConfigRouting->ConfigToBlock (
> +                                  gHiiConfigRouting,
> +                                  Configuration,
> +                                  (UINT8 *)&BootOptionsVar,
> +                                  &BufferSize,
> +                                  Progress
> +                                  );
> +
> +    if (CompareMem (BootOptionsVar.BootOptionOrder,
> mBootOptionsVarData.BootOptionOrder, (sizeof (UINT32) *
> MAX_BOOT_OPTIONS))) {
> +      Status = UpdateBootorderList (&BootOptionsVar);
> +      if (!EFI_ERROR (Status)) {
> +        //
> +        // Boot order update successed. Copy it to local copy.
> +        //
> +        CopyMem (mBootOptionsVarData.BootOptionOrder,
> BootOptionsVar.BootOptionOrder, (sizeof (UINT32) *
> MAX_BOOT_OPTIONS));
> +      }
> +    }
> +
> +    return EFI_SUCCESS;
> +  }
> +
> +  return EFI_NOT_FOUND;
> +}
> +
> +
> +/**
> +  This function processes the results of changes in configuration.
> +
> +  @param[in]  This               Points to the
> EFI_HII_CONFIG_ACCESS_PROTOCOL.
> +  @param[in]  Action             Specifies the type of action taken by the browser.
> +  @param[in]  QuestionId         A unique value which is sent to the original
> +                                 exporting driver so that it can identify the type
> +                                 of data to expect.
> +  @param[in]  Type               The type of value for the question.
> +  @param[in]  Value              A pointer to the data being sent to the original
> +                                 exporting driver.
> +  @param[out] ActionRequest      On return, points to the action requested
> by the
> +                                 callback function.
> +
> +  @retval EFI_SUCCESS            The callback successfully handled the action.
> +  @retval EFI_OUT_OF_RESOURCES   Not enough storage is available to hold
> the
> +                                 variable and its data.
> +  @retval EFI_DEVICE_ERROR       The variable could not be saved.
> +  @retval EFI_UNSUPPORTED        The specified Action is not supported by
> the
> +                                 callback.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishBootDriverCallback (
> +  IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
> +  IN  EFI_BROWSER_ACTION                     Action,
> +  IN  EFI_QUESTION_ID                        QuestionId,
> +  IN  UINT8                                  Type,
> +  IN  EFI_IFR_TYPE_VALUE                     *Value,
> +  OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
> +  )
> +{
> +  DEBUG ((DEBUG_INFO, "%a, action: 0x%x QID: 0x%x\n", __FUNCTION__,
> +Action, QuestionId));
> +
> +  if (QuestionId == QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED &&
> Action == EFI_BROWSER_ACTION_FORM_OPEN) {
> +    RefreshBootOrderList ();
> +
> +    return EFI_SUCCESS;
> +  }
> +
> +  return EFI_UNSUPPORTED;
> +}
> +
> +EFI_HII_CONFIG_ACCESS_PROTOCOL  mHii2RedfishConfigAccess = {
> +  Hii2RedfishBootExtractConfig,
> +  Hii2RedfishBootRouteConfig,
> +  Hii2RedfishBootDriverCallback
> +};
> +
> +/**
> +  Callback function executed when the ready-to-provisioning event group is
> signaled.
> +
> +  @param[in]   Event    Event whose notification function is being invoked.
> +  @param[out]  Context  Pointer to the Context buffer
> +
> +**/
> +VOID
> +EFIAPI
> +Hii2RedfishBootReadyToProvisioning (
> +  IN  EFI_EVENT  Event,
> +  OUT VOID       *Context
> +  )
> +{
> +  //
> +  // Refresh boot order and create configure language
> +  //
> +  RefreshBootOrderList ();
> +}
> +
> +/**
> +  Main entry for this driver.
> +
> +  @param[in] ImageHandle     Image handle this driver.
> +  @param[in] SystemTable     Pointer to SystemTable.
> +
> +  @retval EFI_SUCESS     This function always complete successfully.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishBootDxeDriverEntryPoint (
> +  IN EFI_HANDLE         ImageHandle,
> +  IN EFI_SYSTEM_TABLE   *SystemTable
> +  )
> +{
> +  EFI_STATUS  Status;
> +
> +  mDriverHandle = NULL;
> +  Status = gBS->InstallMultipleProtocolInterfaces (
> +                  &mDriverHandle,
> +                  &gEfiDevicePathProtocolGuid,
> +                  &mHiiVendorDevicePath,
> +                  &gEfiHiiConfigAccessProtocolGuid,
> +                  &mHii2RedfishConfigAccess,
> +                  NULL
> +                  );
> +
> +  //
> +  // Publish our HII data
> +  //
> +  mHiiHandle = HiiAddPackages (
> +                 &mHii2RedfishBootGuid,
> +                 mDriverHandle,
> +                 Hii2RedfishBootDxeStrings,
> +                 Hii2RedfishBootVfrBin,
> +                 NULL
> +                 );
> +  if (mHiiHandle == NULL) {
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +
> +  Status = InitialHiiVairable ();
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a, failed to initial variable: %r\n",
> + __FUNCTION__, Status));  }
> +
> +  //
> +  // Register read-to-provisioning event  //  Status =
> + CreateReadyToProvisioningEvent (
> +             Hii2RedfishBootReadyToProvisioning,
> +             NULL,
> +             &mEvent
> +             );
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((DEBUG_ERROR, "%a, failed to register ready-to-provisioning
> + event: %r\n", __FUNCTION__, Status));  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
> +  Unloads the application and its installed protocol.
> +
> +  @param[in]  ImageHandle       Handle that identifies the image to be
> unloaded.
> +
> +  @retval EFI_SUCCESS           The image has been unloaded.
> +**/
> +EFI_STATUS
> +EFIAPI
> +Hii2RedfishBootDxeDriverUnload (
> +  IN EFI_HANDLE  ImageHandle
> +  )
> +{
> +  if (mHiiHandle != NULL) {
> +    HiiRemovePackages (mHiiHandle);
> +  }
> +
> +  if (mEvent != NULL) {
> +    gBS->CloseEvent (mEvent);
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h
> new file mode 100644
> index 0000000000..58e6d33f0f
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.h
> @@ -0,0 +1,53 @@
> +/** @file
> +  HII-to-Redfish memory driver header file.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef HII_2_REDFISH_BOOT_DXE_H_
> +#define HII_2_REDFISH_BOOT_DXE_H_
> +
> +#include <Uefi.h>
> +
> +#include <Library/BaseLib.h>
> +#include <Library/UefiLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/MemoryAllocationLib.h> #include
> +<Library/UefiBootServicesTableLib.h>
> +#include <Library/UefiRuntimeServicesTableLib.h>
> +#include <Library/PrintLib.h>
> +#include <Library/HiiLib.h>
> +#include <Library/DevicePathLib.h>
> +#include <Library/UefiBootManagerLib.h> #include
> +<Library/UefiHiiServicesLib.h> #include <Library/RedfishEventLib.h>
> +
> +#include <Protocol/HiiConfigAccess.h>
> +
> +#include <Guid/VariableFormat.h>
> +#include <Guid/MdeModuleHii.h>
> +
> +#include "Hii2RedfishBootData.h"
> +
> +extern UINT8 Hii2RedfishBootVfrBin[];
> +
> +#define COMPUTER_SYSTEM_SECHEMA_VERSION "x-uefi-redfish-
> ComputerSystem.v1_5_0"
> +#define COMPUTER_SYSTEM_BOOT_BOOTORDER
> L"/Systems/{1}/Boot/BootOrder"
> +
> +#pragma pack(1)
> +
> +///
> +/// HII specific Vendor Device Path definition.
> +///
> +typedef struct {
> +  VENDOR_DEVICE_PATH             VendorDevicePath;
> +  EFI_DEVICE_PATH_PROTOCOL       End;
> +} HII_VENDOR_DEVICE_PATH;
> +
> +#pragma pack()
> +
> +#endif
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
> new file mode 100644
> index 0000000000..8d40885904
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxe.inf
> @@ -0,0 +1,60 @@
> +## @file
> +#  HII-to-Redfish boot driver.
> +#
> +#  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR> # #
> +SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> +
> +[Defines]
> +  INF_VERSION                    = 0x00010005
> +  BASE_NAME                      = Hii2RedfishBootDxe
> +  FILE_GUID                      = F9BA69BD-1EDB-4334-9D57-7E974ADF1361
> +  MODULE_TYPE                    = UEFI_DRIVER
> +  VERSION_STRING                 = 1.0
> +  ENTRY_POINT                    = Hii2RedfishBootDxeDriverEntryPoint
> +  UNLOAD_IMAGE                   = Hii2RedfishBootDxeDriverUnload
> +
> +[Sources]
> +  Hii2RedfishBootDxe.c
> +  Hii2RedfishBootDxe.h
> +  Hii2RedfishBootData.h
> +  Hii2RedfishBootVfr.vfr
> +  Hii2RedfishBootDxeStrings.uni
> +  Hii2RedfishBootDxeMap.uni
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  EmulatorPkg/EmulatorPkg.dec
> +  RedfishClientPkg/RedfishClientPkg.dec
> +
> +[LibraryClasses]
> +  UefiDriverEntryPoint
> +  BaseLib
> +  BaseMemoryLib
> +  DebugLib
> +  PcdLib
> +  MemoryAllocationLib
> +  UefiBootServicesTableLib
> +  UefiRuntimeServicesTableLib
> +  UefiLib
> +  PrintLib
> +  HiiLib
> +  UefiBootManagerLib
> +  UefiHiiServicesLib
> +  RedfishEventLib
> +
> +[Protocols]
> +  gEfiDevicePathProtocolGuid
> +  gEfiHiiConfigAccessProtocolGuid
> +
> +
> +[Guids]
> +  gHii2RedfishBootFormsetGuid
> +  gEfiIfrTianoGuid
> +
> +[Depex]
> +  gEfiHiiDatabaseProtocolGuid
> +
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni
> new file mode 100644
> index 0000000000..0589c90df5
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeMap.uni
> @@ -0,0 +1,28 @@
> +/** @file
> +  HII-to-Redfish memory driver.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +#langdef   x-uefi-redfish-ComputerSystem.v1_5_0
> "ComputerSystem.v1_5_0"
> +
> +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED       #language x-uefi-
> redfish-ComputerSystem.v1_5_0
> "/Systems/{1}/Boot/BootSourceOverrideEnabled"
> +#string STR_BOOT_SOURCE_OVERRIDE_MODE          #language x-uefi-
> redfish-ComputerSystem.v1_5_0
> "/Systems/{1}/Boot/BootSourceOverrideMode"
> +#string STR_BOOT_SOURCE_OVERRIDE_TARGET        #language x-uefi-
> redfish-ComputerSystem.v1_5_0
> "/Systems/{1}/Boot/BootSourceOverrideTarget"
> +
> +#string STR_DISABLED                           #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Disabled"
> +#string STR_ONCE                               #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Once"
> +#string STR_CONTINUOUS                         #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Continuous"
> +#string STR_UEFI                               #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "UEFI"
> +#string STR_LEGACY                             #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Legacy"
> +#string STR_TARGET_NONE                        #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "None"
> +#string STR_TARGET_PXE                         #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Pxe"
> +#string STR_TARGET_USB                         #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Usb"
> +#string STR_TARGET_HDD                         #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "Hdd"
> +#string STR_TARGET_BIOS_SETUP                  #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "BiosSetup"
> +#string STR_TARGET_UEFI                        #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "UefiTarget"
> +#string STR_TARGET_UEFI_HTTP                   #language x-uefi-redfish-
> ComputerSystem.v1_5_0   "UefiHttp"
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni
> new file mode 100644
> index 0000000000..c2057633c2
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootDxeStrings.uni
> @@ -0,0 +1,41 @@
> +/** @file
> +  HII-to-Redfish memory driver.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +/=#
> +#langdef   en-US "English"
> +
> +#string STR_FORM_SET_TITLE                     #language en-US    "HII to Redfish
> (Boot)"
> +#string STR_FORM_SET_TITLE_HELP                #language en-US    "HII to
> Redfish (Boot)"
> +#string STR_FORM_TITLE                         #language en-US    "HII to Redfish
> Boot properties"
> +
> +#string STR_BOOT_ORDER                         #language en-US    "Boot Order"
> +#string STR_BOOT_ORDER_LIST                    #language en-US    "Boot Order
> List"
> +#string STR_BOOT_ORDER_LIST_HELP               #language en-US    "Boot
> Order List"
> +
> +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED       #language en-US
> "Boot Source Override Enabled"
> +#string STR_BOOT_SOURCE_OVERRIDE_ENABLED_HELP  #language en-US
> "Describes the state of the Boot Source Override feature."
> +
> +#string STR_BOOT_SOURCE_OVERRIDE_MODE          #language en-US
> "Boot Source Override Mode"
> +#string STR_BOOT_SOURCE_OVERRIDE_MODE_HELP     #language en-US
> "The BIOS Boot Mode (either Legacy or UEFI) to be used when
> BootSourceOverrideTarget boot source is booted from."
> +
> +#string STR_BOOT_SOURCE_OVERRIDE_TARGET        #language en-US
> "Boot Source Override Target"
> +#string STR_BOOT_SOURCE_OVERRIDE_TARGET_HELP   #language en-US
> "The current boot source to be used at next boot instead of the normal boot
> device, if BootSourceOverrideEnabled is true."
> +
> +#string STR_DISABLED                           #language en-US   "Disabled"
> +#string STR_ONCE                               #language en-US   "Once"
> +#string STR_CONTINUOUS                         #language en-US   "Continuous"
> +#string STR_UEFI                               #language en-US   "UEFI"
> +#string STR_LEGACY                             #language en-US   "Legacy"
> +#string STR_TARGET_NONE                        #language en-US   "None"
> +#string STR_TARGET_PXE                         #language en-US   "Pxe"
> +#string STR_TARGET_USB                         #language en-US   "Usb"
> +#string STR_TARGET_HDD                         #language en-US   "Hdd"
> +#string STR_TARGET_BIOS_SETUP                  #language en-US   "Bios Setup
> Menu"
> +#string STR_TARGET_UEFI                        #language en-US   "Uefi Target"
> +#string STR_TARGET_UEFI_HTTP                   #language en-US   "Uefi Http"
> diff --git a/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr
> b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr
> new file mode 100644
> index 0000000000..3758de6bfd
> --- /dev/null
> +++ b/EmulatorPkg/Hii2RedfishBootDxe/Hii2RedfishBootVfr.vfr
> @@ -0,0 +1,83 @@
> +/** @file
> +  HII-to-Redfish boot driver VFR file.
> +
> +  (C) Copyright 2022 Hewlett Packard Enterprise Development LP<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +
> +#include "Hii2RedfishBootData.h"
> +
> +formset
> +  guid      = HII_2_REDFISH_BOOT_FORMSET_GUID,
> +  title     = STRING_TOKEN(STR_FORM_SET_TITLE),
> +  help      = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
> +  classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,
> +
> +  //
> +  // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)  //
> + efivarstore HII_2_REDFISH_BOOT_EFI_VARSTORE_DATA,
> +    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS |
> EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
> +    name  = Hii2RedfishBootEfiVar,
> +    guid  = HII_2_REDFISH_BOOT_FORMSET_GUID;
> +
> +  //
> +  // Define a variable Storage for boot order  //  varstore
> + HII_2_REDFISH_BOOT_OPTION_VARSTORE_DATA,
> +    varid = BOOT_OPTION_VAR_STORE_ID,
> +    name = Hii2RedfishBootOptionVar,
> +    guid = HII_2_REDFISH_BOOT_FORMSET_GUID;
> +
> +  //
> +  // Define a Form (EFI_IFR_FORM)
> +  //
> +  form formid = FORM_ID,                          // Form ID
> +       title  = STRING_TOKEN(STR_FORM_TITLE);     // Form title
> +
> +    oneof varid = Hii2RedfishBootEfiVar.BootSourceOverrideEnabled,
> +          questionid = QUESTION_ID_BOOT_SOURCE_OVERRIDE_ENABLED,
> +          prompt = STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_ENABLED),
> +          help   =
> STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_ENABLED_HELP),
> +          flags  = INTERACTIVE | NUMERIC_SIZE_1,
> +          option text = STRING_TOKEN(STR_DISABLED),         value =
> STR_DISABLED,   flags = DEFAULT;
> +          option text = STRING_TOKEN(STR_ONCE),             value = STR_ONCE,
> flags = 0;
> +          option text = STRING_TOKEN(STR_CONTINUOUS),       value =
> STR_CONTINUOUS, flags = 0;
> +    endoneof;
> +
> +    oneof varid = Hii2RedfishBootEfiVar.BootSourceOverrideMode,
> +          questionid = QUESTION_ID_BOOT_SOURCE_OVERRIDE_MODE,
> +          prompt = STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_MODE),
> +          help   = STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_MODE_HELP),
> +          flags  = INTERACTIVE | NUMERIC_SIZE_1,
> +          option text = STRING_TOKEN(STR_UEFI),             value = STR_UEFI,
> flags = DEFAULT;
> +          option text = STRING_TOKEN(STR_LEGACY),           value = STR_LEGACY,
> flags = 0;
> +    endoneof;
> +
> +    oneof varid = Hii2RedfishBootEfiVar.BootSourceOverrideTarget,
> +          questionid = QUESTION_ID_BOOT_SOURCE_OVERRIDE_TARGET,
> +          prompt = STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_TARGET),
> +          help   =
> STRING_TOKEN(STR_BOOT_SOURCE_OVERRIDE_TARGET_HELP),
> +          flags  = INTERACTIVE | NUMERIC_SIZE_1,
> +          option text = STRING_TOKEN(STR_TARGET_NONE),          value =
> STR_TARGET_NONE,        flags = DEFAULT;
> +          option text = STRING_TOKEN(STR_TARGET_PXE),           value =
> STR_TARGET_PXE,         flags = 0;
> +          option text = STRING_TOKEN(STR_TARGET_USB),           value =
> STR_TARGET_USB,         flags = 0;
> +          option text = STRING_TOKEN(STR_TARGET_HDD),           value =
> STR_TARGET_HDD,         flags = 0;
> +          option text = STRING_TOKEN(STR_TARGET_BIOS_SETUP),    value =
> STR_TARGET_BIOS_SETUP,  flags = 0;
> +          option text = STRING_TOKEN(STR_TARGET_UEFI),          value =
> STR_TARGET_UEFI,        flags = 0;
> +          option text = STRING_TOKEN(STR_TARGET_UEFI_HTTP),     value =
> STR_TARGET_UEFI_HTTP,   flags = 0;
> +    endoneof;
> +
> +    subtitle text = STRING_TOKEN(STR_BOOT_ORDER);
> +
> +    //
> +    // This is where we will dynamically add choices for the Boot Manager
> +    //
> +    label LABEL_BOOT_OPTION;
> +    label LABEL_BOOT_OPTION_END;
> +
> +  endform;
> +endformset;
> --
> 2.32.0.windows.2

      parent reply	other threads:[~2022-07-25 14:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-25  1:35 [edk2-staging][PATCH v2 1/2] edk2-staging/EmulatorPkg: Introduce Hii2RedfishBootDxe driver Nickle Wang
2022-07-25  1:35 ` [edk2-staging][PATCH v2 2/2] edk2-staging/EmulatorPkg: Introduce Hii2RedfishBiosDxe driver Nickle Wang
2022-07-25 14:45   ` Chang, Abner
2022-07-25 14:31 ` Chang, Abner [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MN2PR12MB3966D16803CBA0F4C2089AEFEA959@MN2PR12MB3966.namprd12.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox