This patch is sent in behalf of Nickle Wang who is the author of this change.
Reviewed-by: Abner Chang <abner.ch...@hpe.com> > -----Original Message----- > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of > Abner Chang > Sent: Friday, October 29, 2021 9:45 AM > To: devel@edk2.groups.io > Cc: Wang, Nickle (HPS SW) <nickle.w...@hpe.com>; Liming Gao > <gaolim...@byosoft.com.cn>; Andrew Fish <af...@apple.com>; Ray Ni > <ray...@intel.com> > Subject: [edk2-devel] [PATCH] edk2-staging/EmulatorPkg: Add a sample > memory configuration HII driver > > This is an HII sample driver of memory configuration. This demonstrates > the communication between platform configuration (EDK2/HII) and Redfish > service (Memory resource) base on RedfishClientPkg. > > The language ("x-uef-redfish-*") defined in the Redfish-specific uni file is > the connection between HII configuration and the Redfish schema. > > e.g. > #langdef x-uefi-redfish-Memory.v1_7_1 "Memory.v1_7_1" > > The HII option strings those applied with "x-uef-redfish-* HII language > are connected to the corresponding Redfish properties. > > e.g. > #string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType" > > The changes made on BIOS setup page or remote (OOB to Redfish service) > will be > sync-up each other through EDKII Redfish feature driver using the transport > (REST_EX) provided by RedfishPkg. > > On EDK2, HTTP based REST EX protocol instance is used to consume and > update > the Redfish properties. > > Check this for the RedfishClientPkg design architecture, > https://github.com/tianocore/edk2-staging/blob/edk2-redfish- > client/RedfishClientPkg/Readme.md > > Below for RedfishPkg design architecture, > https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md > > Signed-off-by: Nickle Wang <nickle.w...@hpe.com> > Cc: Abner Chang <abner.ch...@hpe.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Andrew Fish <af...@apple.com> > Cc: Ray Ni <ray...@intel.com> > --- > .../Hii2RedfishMemoryDxe.inf | 55 ++++ > .../Hii2RedfishMemoryData.h | 71 +++++ > .../Hii2RedfishMemoryDxe.h | 44 +++ > .../Hii2RedfishMemoryVfr.vfr | 219 +++++++++++++ > .../Hii2RedfishMemoryDxe.c | 294 ++++++++++++++++++ > .../Hii2RedfishMemoryDxeMap.uni | 38 +++ > .../Hii2RedfishMemoryDxeStrings.uni | 68 ++++ > 7 files changed, 789 insertions(+) > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni > create mode 100644 > EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni > > diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > new file mode 100644 > index 00000000000..3376f7e7b49 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf > @@ -0,0 +1,55 @@ > +## @file > +# HII-to-Redfish memory driver. > +# > +# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = Hii2RedfishMemoryDxe > + FILE_GUID = 58134796-EB3A-4635-9664-6B7F68A8A9A1 > + MODULE_TYPE = UEFI_DRIVER > + VERSION_STRING = 1.0 > + ENTRY_POINT = Hii2RedfishMemoryDxeDriverEntryPoint > + UNLOAD_IMAGE = Hii2RedfishMemoryDxeDriverUnload > + > +[Sources] > + Hii2RedfishMemoryDxe.c > + Hii2RedfishMemoryDxe.h > + Hii2RedfishMemoryData.h > + Hii2RedfishMemoryVfr.vfr > + Hii2RedfishMemoryDxeStrings.uni > + Hii2RedfishMemoryDxeMap.uni > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + EmulatorPkg/EmulatorPkg.dec > + > +[LibraryClasses] > + UefiDriverEntryPoint > + BaseLib > + BaseMemoryLib > + DebugLib > + PcdLib > + MemoryAllocationLib > + UefiBootServicesTableLib > + UefiRuntimeServicesTableLib > + UefiLib > + PrintLib > + HiiLib > + > +[Protocols] > + gEfiDevicePathProtocolGuid > + gEfiHiiConfigAccessProtocolGuid > + > + > +[Guids] > + gHii2RedfishMemoryFormsetGuid > + > +[Depex] > + gEfiHiiDatabaseProtocolGuid > + > diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h > new file mode 100644 > index 00000000000..f5ffaaec631 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h > @@ -0,0 +1,71 @@ > +/** @file > + The header file of HII-to-Redfish memory driver. > + > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef HII_2_REDFISH_MEMORY_DATA_H_ > +#define HII_2_REDFISH_MEMORY_DATA_H_ > + > +#include <Uefi/UefiMultiPhase.h> > +#include <Guid/HiiPlatformSetupFormset.h> > + > +#define HII_2_REDFISH_MEMORY_FORMSET_GUID \ > + { \ > + 0xC2BE579E, 0x3C57, 0x499C, { 0xA9, 0xDF, 0xE6, 0x23, 0x8A, 0x49, 0x64, > 0xF8 } \ > + } > + > +extern EFI_GUID gHii2RedfishMemoryFormsetGuid; > + > +#define FORM_ID 0x001 > +#define FROM_ID_MEMORY_1 0x002 > +#define FROM_ID_MEMORY_2 0x003 > +#define FROM_ID_MEMORY_3 0x004 > +#define FROM_ID_MEMORY_4 0x005 > + > +#define QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE 0x100 > +#define QUESTION_ID_MEMORY_1_BUS_WIDTH_BITS 0x101 > +#define QUESTION_ID_MEMORY_1_CONFIGURATION_LOCKED 0x102 > + > +#define QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE 0x200 > +#define QUESTION_ID_MEMORY_2_BUS_WIDTH_BITS 0x201 > +#define QUESTION_ID_MEMORY_2_CONFIGURATION_LOCKED 0x202 > + > +#define QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE 0x300 > +#define QUESTION_ID_MEMORY_3_BUS_WIDTH_BITS 0x301 > +#define QUESTION_ID_MEMORY_3_CONFIGURATION_LOCKED 0x302 > + > +#define QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE 0x400 > +#define QUESTION_ID_MEMORY_4_BUS_WIDTH_BITS 0x401 > +#define QUESTION_ID_MEMORY_4_CONFIGURATION_LOCKED 0x402 > + > +#define MEMORY_MAX_NO 0x04 > +#define ID_STRING_MIN 0 > +#define ID_STRING_MAX 15 > +#define ID_STRING_MAX_WITH_TERMINATOR 16 > + > +#pragma pack(1) > +// > +// Definiton of HII_2_REDFISH_MEMORY_SET > +// > +typedef struct { > + CHAR16 ModuleProductId[ID_STRING_MAX_WITH_TERMINATOR]; > + UINT8 BaseModuleType; > + UINT8 BusWidthBits; > + UINT8 ConfigurationLocked; > + UINT8 Reserved; // for 16 bit boundary of ModuleProductId > +} HII_2_REDFISH_MEMORY_SET; > + > +// > +// Definiton of HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA > +// > +typedef struct { > + HII_2_REDFISH_MEMORY_SET Memory[MEMORY_MAX_NO]; > +} HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA; > + > +#pragma pack() > + > +#endif > diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h > new file mode 100644 > index 00000000000..98bfd7246a4 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h > @@ -0,0 +1,44 @@ > +/** @file > + HII-to-Redfish memory driver header file. > + > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef HII_2_REDFISH_MEMORY_DXE_H_ > +#define HII_2_REDFISH_MEMORY_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 <Protocol/HiiConfigAccess.h> > +#include <Guid/VariableFormat.h> > + > +#include "Hii2RedfishMemoryData.h" > + > +extern UINT8 Hii2RedfishMemoryVfrBin[]; > + > +#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 > \ No newline at end of file > diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr > new file mode 100644 > index 00000000000..288686f8303 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.vfr > @@ -0,0 +1,219 @@ > +/** @file > + HII-to-Redfish memory driver VFR file. > + > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > + > +#include "Hii2RedfishMemoryData.h" > + > +formset > + guid = HII_2_REDFISH_MEMORY_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_MEMORY_EFI_VARSTORE_DATA, > + attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | > EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures > + name = Hii2RedfishMemoryEfiVar, > + guid = HII_2_REDFISH_MEMORY_FORMSET_GUID; > + > + // > + // Define a Form (EFI_IFR_FORM) > + // > + form formid = FORM_ID, // Form ID > + title = STRING_TOKEN(STR_FORM_TITLE); // Form title > + > + goto FROM_ID_MEMORY_1, // Destination Form > ID > + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1), // Prompt > string > + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_1); // Help string > + > + goto FROM_ID_MEMORY_2, // Destination Form > ID > + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2), // Prompt > string > + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_2); // Help string > + > + goto FROM_ID_MEMORY_3, // Destination Form > ID > + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3), // Prompt > string > + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_3); // Help string > + > + goto FROM_ID_MEMORY_4, // Destination Form > ID > + prompt = STRING_TOKEN(STR_FORM_TITLE_MEMORY_4), // Prompt > string > + help = STRING_TOKEN(STR_FORM_HELP_MEMORY_4); // Help string > + > + endform; > + > + form formid = FROM_ID_MEMORY_1, // Form ID > + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_1); // Form title > + > + oneof varid = Hii2RedfishMemoryEfiVar.Memory[0].BaseModuleType, > + questionid = QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE, > + prompt = > STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_HELP), > + flags = INTERACTIVE | NUMERIC_SIZE_1, > + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), > value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT; > + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), > value = STR_MEMORY_UDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), > value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), > value = STR_MEMORY_LRDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), > value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0; > + option text = > STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = > STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0; > + endoneof; > + > + string varid = Hii2RedfishMemoryEfiVar.Memory[0].ModuleProductId, > + prompt = > STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_HELP), > + flags = READ_ONLY, > + minsize = ID_STRING_MIN, > + maxsize = ID_STRING_MAX, > + endstring; > + > + numeric varid = Hii2RedfishMemoryEfiVar.Memory[0].BusWidthBits, > + prompt = > STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT), > + help = STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_HELP), > + minimum = 0, > + maximum = 0xff, > + step = 1, > + default = 20, > + endnumeric; > + > + checkbox varid = > Hii2RedfishMemoryEfiVar.Memory[0].ConfigurationLocked, > + prompt = > STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_HELP), > + flags = CHECKBOX_DEFAULT, > + default = TRUE, > + endcheckbox; > + > + endform; > + > + form formid = FROM_ID_MEMORY_2, // Form ID > + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_2); // Form title > + > + oneof varid = Hii2RedfishMemoryEfiVar.Memory[1].BaseModuleType, > + questionid = QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE, > + prompt = > STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_HELP), > + flags = INTERACTIVE | NUMERIC_SIZE_1, > + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), > value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT; > + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), > value = STR_MEMORY_UDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), > value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), > value = STR_MEMORY_LRDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), > value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0; > + option text = > STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = > STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0; > + endoneof; > + > + string varid = Hii2RedfishMemoryEfiVar.Memory[1].ModuleProductId, > + prompt = > STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_HELP), > + flags = READ_ONLY, > + minsize = ID_STRING_MIN, > + maxsize = ID_STRING_MAX, > + endstring; > + > + numeric varid = Hii2RedfishMemoryEfiVar.Memory[1].BusWidthBits, > + prompt = > STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT), > + help = STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_HELP), > + minimum = 0, > + maximum = 0xff, > + step = 1, > + default = 20, > + endnumeric; > + > + checkbox varid = > Hii2RedfishMemoryEfiVar.Memory[1].ConfigurationLocked, > + prompt = > STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_HELP), > + flags = CHECKBOX_DEFAULT, > + default = TRUE, > + endcheckbox; > + > + endform; > + > + form formid = FROM_ID_MEMORY_3, // Form ID > + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title > + > + oneof varid = Hii2RedfishMemoryEfiVar.Memory[2].BaseModuleType, > + questionid = QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE, > + prompt = > STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_HELP), > + flags = INTERACTIVE | NUMERIC_SIZE_1, > + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), > value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT; > + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), > value = STR_MEMORY_UDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), > value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), > value = STR_MEMORY_LRDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), > value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0; > + option text = > STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = > STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0; > + endoneof; > + > + string varid = Hii2RedfishMemoryEfiVar.Memory[2].ModuleProductId, > + prompt = > STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_HELP), > + flags = READ_ONLY, > + minsize = ID_STRING_MIN, > + maxsize = ID_STRING_MAX, > + endstring; > + > + numeric varid = Hii2RedfishMemoryEfiVar.Memory[2].BusWidthBits, > + prompt = > STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT), > + help = STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_HELP), > + minimum = 0, > + maximum = 0xff, > + step = 1, > + default = 20, > + endnumeric; > + > + checkbox varid = > Hii2RedfishMemoryEfiVar.Memory[2].ConfigurationLocked, > + prompt = > STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_HELP), > + flags = CHECKBOX_DEFAULT, > + default = TRUE, > + endcheckbox; > + > + endform; > + > + form formid = FROM_ID_MEMORY_4, // Form ID > + title = STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title > + > + oneof varid = Hii2RedfishMemoryEfiVar.Memory[3].BaseModuleType, > + questionid = QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE, > + prompt = > STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_HELP), > + flags = INTERACTIVE | NUMERIC_SIZE_1, > + option text = STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), > value = STR_MEMORY_RDIMM_PROMPT, flags = DEFAULT; > + option text = STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), > value = STR_MEMORY_UDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), > value = STR_MEMORY_SO_DIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), > value = STR_MEMORY_LRDIMM_PROMPT, flags = 0; > + option text = STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), > value = STR_MEMORY_MINI_RDIMM_PROMPT, flags = 0; > + option text = > STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), value = > STR_MEMORY_MINI_UDIMM_PROMPT, flags = 0; > + endoneof; > + > + string varid = Hii2RedfishMemoryEfiVar.Memory[3].ModuleProductId, > + prompt = > STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_HELP), > + flags = READ_ONLY, > + minsize = ID_STRING_MIN, > + maxsize = ID_STRING_MAX, > + endstring; > + > + numeric varid = Hii2RedfishMemoryEfiVar.Memory[3].BusWidthBits, > + prompt = > STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT), > + help = STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_HELP), > + minimum = 0, > + maximum = 0xff, > + step = 1, > + default = 20, > + endnumeric; > + > + checkbox varid = > Hii2RedfishMemoryEfiVar.Memory[3].ConfigurationLocked, > + prompt = > STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT), > + help = > STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_HELP), > + flags = CHECKBOX_DEFAULT, > + default = TRUE, > + endcheckbox; > + > + endform; > + > +endformset; > \ No newline at end of file > diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c > new file mode 100644 > index 00000000000..4c13a197fa4 > --- /dev/null > +++ b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c > @@ -0,0 +1,294 @@ > +/** @file > + HII-to-Redfish memory driver. > + > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "Hii2RedfishMemoryDxe.h" > + > +EFI_GUID mHii2RedfishMemoryGuid = > HII_2_REDFISH_MEMORY_FORMSET_GUID; > +EFI_HII_HANDLE mHiiHandle; > +EFI_HANDLE DriverHandle; > +CHAR16 Hii2RedfishEfiVar[] = L"Hii2RedfishMemoryEfiVar"; > + > +/// > +/// 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_MEMORY_FORMSET_GUID > + }, > + { > + END_DEVICE_PATH_TYPE, > + END_ENTIRE_DEVICE_PATH_SUBTYPE, > + { > + (UINT8) (END_DEVICE_PATH_LENGTH), > + (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) > + } > + } > +}; > + > +/** > + 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_MEMORY_EFI_VARSTORE_DATA Hii2RedfishMemoryVar; > + UINTN Index; > + > + // > + // Get Buffer Storage data from EFI variable. > + // Try to get the current setting from variable. > + // > + BufferSize = sizeof (HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA); > + Status = gRT->GetVariable ( > + Hii2RedfishEfiVar, > + &gHii2RedfishMemoryFormsetGuid, > + NULL, > + &BufferSize, > + &Hii2RedfishMemoryVar > + ); > + if (!EFI_ERROR (Status)) { > + return EFI_SUCCESS; > + } > + > + // > + // Initialization > + // > + for (Index = 0; Index < MEMORY_MAX_NO; Index++) { > + Hii2RedfishMemoryVar.Memory[Index].BaseModuleType = > STR_MEMORY_RDIMM_PROMPT; > + Hii2RedfishMemoryVar.Memory[Index].BusWidthBits = 20; > + Hii2RedfishMemoryVar.Memory[Index].ConfigurationLocked = TRUE; > + StrCpyS (Hii2RedfishMemoryVar.Memory[Index].ModuleProductId, > ID_STRING_MAX_WITH_TERMINATOR, L"1234"); > + } > + > + Status = gRT->SetVariable ( > + Hii2RedfishEfiVar, > + &gHii2RedfishMemoryFormsetGuid, > + VARIABLE_ATTRIBUTE_NV_BS, > + BufferSize, > + &Hii2RedfishMemoryVar > + ); > + > + 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 > +Hii2RedfishMemoryExtractConfig ( > + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, > + IN CONST EFI_STRING Request, > + OUT EFI_STRING *Progress, > + OUT EFI_STRING *Results > + ) > +{ > + if (Progress == NULL || Results == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + 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, &gHii2RedfishMemoryFormsetGuid, > L"Hii2RedfishMemoryEfiVar")) { > + return EFI_UNSUPPORTED; > + } > + > + 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 > +Hii2RedfishMemoryRouteConfig ( > + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, > + IN CONST EFI_STRING Configuration, > + OUT EFI_STRING *Progress > + ) > +{ > + DEBUG ((DEBUG_INFO, "%a, unsupported\n", __FUNCTION__)); > + > + return EFI_UNSUPPORTED; > +} > + > + > +/** > + 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 > +Hii2RedfishMemoryDriverCallback ( > + 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)); > + > + return EFI_UNSUPPORTED; > +} > + > +EFI_HII_CONFIG_ACCESS_PROTOCOL mHii2RedfishConfigAccess = { > + Hii2RedfishMemoryExtractConfig, > + Hii2RedfishMemoryRouteConfig, > + Hii2RedfishMemoryDriverCallback > +}; > + > +/** > + 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 > +Hii2RedfishMemoryDxeDriverEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + DriverHandle = NULL; > + Status = gBS->InstallMultipleProtocolInterfaces ( > + &DriverHandle, > + &gEfiDevicePathProtocolGuid, > + &mHiiVendorDevicePath, > + &gEfiHiiConfigAccessProtocolGuid, > + &mHii2RedfishConfigAccess, > + NULL > + ); > + > + // > + // Publish our HII data > + // > + mHiiHandle = HiiAddPackages ( > + &mHii2RedfishMemoryGuid, > + DriverHandle, > + Hii2RedfishMemoryDxeStrings, > + Hii2RedfishMemoryVfrBin, > + 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)); > + } > + > + 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 > +Hii2RedfishMemoryDxeDriverUnload ( > + IN EFI_HANDLE ImageHandle > + ) > +{ > + if (mHiiHandle != NULL) { > + HiiRemovePackages (mHiiHandle); > + } > + > + return EFI_SUCCESS; > +} > diff --git > a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni > new file mode 100644 > index 00000000000..66e2ece21f5 > --- /dev/null > +++ > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMap.uni > @@ -0,0 +1,38 @@ > +/** @file > + HII-to-Redfish memory driver. > + > + (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +/=# > +#langdef x-uefi-redfish-Memory.v1_7_1 "Memory.v1_7_1" > + > +#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType" > +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{1}/BusWidthBits" > +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ConfigurationLocked" > +#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{1}/ModuleProductID" > + > +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{2}/BaseModuleType" > +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{2}/BusWidthBits" > +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ConfigurationLocked" > +#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{2}/ModuleProductID" > + > +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{3}/BaseModuleType" > +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{3}/BusWidthBits" > +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ConfigurationLocked" > +#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{3}/ModuleProductID" > + > +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{5}/BaseModuleType" > +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language x- > uefi-redfish-Memory.v1_7_1 "/Memory/{5}/BusWidthBits" > +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ConfigurationLocked" > +#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language > x-uefi-redfish-Memory.v1_7_1 "/Memory/{5}/ModuleProductID" > + > +#string STR_MEMORY_RDIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "RDIMM" > +#string STR_MEMORY_UDIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "UDIMM" > +#string STR_MEMORY_SO_DIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "SO_DIMM" > +#string STR_MEMORY_LRDIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "LRDIMM" > +#string STR_MEMORY_MINI_RDIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "Mini_RDIMM" > +#string STR_MEMORY_MINI_UDIMM_PROMPT #language x-uefi- > redfish-Memory.v1_7_1 "Mini_UDIMM" > \ No newline at end of file > diff --git > a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni > new file mode 100644 > index 00000000000..92e8b8b5f3d > --- /dev/null > +++ > b/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.uni > @@ -0,0 +1,68 @@ > +/** @file > + HII-to-Redfish memory driver. > + > + (C) Copyright 2021 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 > (Memory)" > +#string STR_FORM_SET_TITLE_HELP #language en-US "HII to > Redfish (Memory)" > +#string STR_FORM_TITLE #language en-US "HII to > Redfish > Memory properties" > + > +#string STR_FORM_TITLE_MEMORY_1 #language en-US "Memory > 1" > +#string STR_FORM_HELP_MEMORY_1 #language en-US "Memory > 1" > +#string STR_FORM_TITLE_MEMORY_2 #language en-US "Memory > 2" > +#string STR_FORM_HELP_MEMORY_2 #language en-US "Memory > 2" > +#string STR_FORM_TITLE_MEMORY_3 #language en-US "Memory > 3" > +#string STR_FORM_HELP_MEMORY_3 #language en-US "Memory > 3" > +#string STR_FORM_TITLE_MEMORY_4 #language en-US "Memory > 5" > +#string STR_FORM_HELP_MEMORY_4 #language en-US "Memory > 5" > + > + > +#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language en- > US "Base module type" > +#string STR_MEMORY_1_BASE_MODULE_TYPE_HELP #language en-US > "The value of this property shall be the base module type of Memory" > +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language en-US > "Bus Width in bits" > +#string STR_MEMORY_1_BUS_WIDTH_BITS_HELP #language en-US > "The value of this property shall be the bus width in bits" > +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language > en-US "Configuration Locked" > +#string STR_MEMORY_1_CONFIGURATION_LOCKED_HELP #language en- > US "The value of this property shall be the current configuration lock state > of this memory. True shall indicate that the configuration is locked and > cannot be altered. False shall indicate that the configuration is not locked > and > may be altered" > +#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language en- > US "Module Product ID" > +#string STR_MEMORY_1_MODULE_PRODUCT_ID_HELP #language en-US > "The product ID of this memory module." > + > +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language en- > US "Base module type" > +#string STR_MEMORY_2_BASE_MODULE_TYPE_HELP #language en-US > "The value of this property shall be the base module type of Memory" > +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language en-US > "Bus Width in bits" > +#string STR_MEMORY_2_BUS_WIDTH_BITS_HELP #language en-US > "The value of this property shall be the bus width in bits" > +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language > en-US "Configuration Locked" > +#string STR_MEMORY_2_CONFIGURATION_LOCKED_HELP #language en- > US "The value of this property shall be the current configuration lock state > of this memory. True shall indicate that the configuration is locked and > cannot be altered. False shall indicate that the configuration is not locked > and > may be altered" > +#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language en- > US "Module Product ID" > +#string STR_MEMORY_2_MODULE_PRODUCT_ID_HELP #language en-US > "The product ID of this memory module." > + > +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language en- > US "Base module type" > +#string STR_MEMORY_3_BASE_MODULE_TYPE_HELP #language en-US > "The value of this property shall be the base module type of Memory" > +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language en-US > "Bus Width in bits" > +#string STR_MEMORY_3_BUS_WIDTH_BITS_HELP #language en-US > "The value of this property shall be the bus width in bits" > +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language > en-US "Configuration Locked" > +#string STR_MEMORY_3_CONFIGURATION_LOCKED_HELP #language en- > US "The value of this property shall be the current configuration lock state > of this memory. True shall indicate that the configuration is locked and > cannot be altered. False shall indicate that the configuration is not locked > and > may be altered" > +#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language en- > US "Module Product ID" > +#string STR_MEMORY_3_MODULE_PRODUCT_ID_HELP #language en-US > "The product ID of this memory module." > + > +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language en- > US "Base module type" > +#string STR_MEMORY_4_BASE_MODULE_TYPE_HELP #language en-US > "The value of this property shall be the base module type of Memory" > +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language en-US > "Bus Width in bits" > +#string STR_MEMORY_4_BUS_WIDTH_BITS_HELP #language en-US > "The value of this property shall be the bus width in bits" > +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language > en-US "Configuration Locked" > +#string STR_MEMORY_4_CONFIGURATION_LOCKED_HELP #language en- > US "The value of this property shall be the current configuration lock state > of this memory. True shall indicate that the configuration is locked and > cannot be altered. False shall indicate that the configuration is not locked > and > may be altered" > +#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language en- > US "Module Product ID" > +#string STR_MEMORY_4_MODULE_PRODUCT_ID_HELP #language en-US > "The product ID of this memory module." > + > +#string STR_MEMORY_RDIMM_PROMPT #language en-US > "RDIMM" > +#string STR_MEMORY_UDIMM_PROMPT #language en-US > "UDIMM" > +#string STR_MEMORY_SO_DIMM_PROMPT #language en-US > "SO_DIMM" > +#string STR_MEMORY_LRDIMM_PROMPT #language en-US > "LRDIMM" > +#string STR_MEMORY_MINI_RDIMM_PROMPT #language en-US > "Mini_RDIMM" > +#string STR_MEMORY_MINI_UDIMM_PROMPT #language en-US > "Mini_UDIMM" > -- > 2.21.0.windows.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#82924): https://edk2.groups.io/g/devel/message/82924 Mute This Topic: https://groups.io/mt/86667770/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-