From nobody Fri May 3 12:28:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+82884+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+82884+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=hpe.com ARC-Seal: i=1; a=rsa-sha256; t=1635471927; cv=none; d=zohomail.com; s=zohoarc; b=WqaG94G5qXaejDeOPYcbUf95RCwbwbrRTlTL+am1wolif5fcOd3ZhM6wJkvaharnKsnoVb4Cqz/SFNgGoQg0rVn2GBUVA7BwVvn7Rt5SxxyKD5Zn6x7QtASSuLbvztT275gGKm7a5mSqlbhpf3s33OjHc55K52n9Q9i2PJUJ3yk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1635471927; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=XNUu1gOuqpFvmGEIkXy6B9neyM3I4xUx47ZtR4biTL0=; b=a6E4aqMa9cg4GZkpyCYzfplRikpfD+yHNGfbnBpIxT8Xm8SydZhLGNXLgEblRGfSaKqOaXFluO7pjn5IsaACg3+gYcrnPLZohmA6OZ0lPCp4u85ocCESsaw10XeYG6hKMKxJBW+OCTXpGHAW0qNY2HJFXAA/SCVYM6zIPFs7Obo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+82884+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1635471927628477.1243853762278; Thu, 28 Oct 2021 18:45:27 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id AjEwYY1788612xDRXRtu8724; Thu, 28 Oct 2021 18:45:27 -0700 X-Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web12.3199.1635471918301556350 for ; Thu, 28 Oct 2021 18:45:26 -0700 X-Received: from pps.filterd (m0148663.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 19SN1vAh022412; Fri, 29 Oct 2021 01:45:12 GMT X-Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0a-002e3701.pphosted.com with ESMTP id 3byskp6n08-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 29 Oct 2021 01:45:11 +0000 X-Received: from g4t3433.houston.hpecorp.net (g4t3433.houston.hpecorp.net [16.208.49.245]) by g4t3427.houston.hpe.com (Postfix) with ESMTP id CFFCE5C; Fri, 29 Oct 2021 01:45:10 +0000 (UTC) X-Received: from SAC2XFT1JT.asiapacific.hpqcorp.net (unknown [10.43.62.133]) by g4t3433.houston.hpecorp.net (Postfix) with ESMTP id 7DD3849; Fri, 29 Oct 2021 01:45:09 +0000 (UTC) From: "Abner Chang" To: devel@edk2.groups.io Cc: nickle.wang@hpe.com, Liming Gao , Andrew Fish , Ray Ni Subject: [edk2-devel] [PATCH] edk2-staging/EmulatorPkg: Add a sample memory configuration HII driver Date: Fri, 29 Oct 2021 09:45:07 +0800 Message-Id: <20211029014507.136260-1-abner.chang@hpe.com> X-Proofpoint-GUID: -geFWZGAZvFAUyWkZSm8I4IgCX1z5DdF X-Proofpoint-ORIG-GUID: -geFWZGAZvFAUyWkZSm8I4IgCX1z5DdF X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,abner.chang@hpe.com X-Gm-Message-State: unM7hks2P3HhvpazjBeO5zmax1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1635471927; bh=xiCbCKT8K0j0FCkVDwlIkSKBEaKMG8V1duAD3ELn5LE=; h=Cc:Date:From:Reply-To:Subject:To; b=D6FHLYTyijB55+85ty7wGKfUpGHazZ7/7NCadvPhO7Iljsmntbv9jA+e+6nbjlerjSY QToQYXhrmBYmPnkzSKEfqKftxFQqke742cGkfQZVZZQtzroFpOLDNJIVTRcy/qFfmvUF5 GWBF4DtmYpBDPkpiklU/9utds6nf48xG1es= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1635471928466100001 Content-Type: text/plain; charset="utf-8" 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-Memor= y.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/RedfishC= lientPkg/Readme.md Below for RedfishPkg design architecture, https://github.com/tianocore/edk2/blob/master/RedfishPkg/Readme.md Signed-off-by: Nickle Wang Cc: Abner Chang Cc: Liming Gao Cc: Andrew Fish Cc: Ray Ni --- .../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.i= nf create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryData.h create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.h create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryVfr.v= fr create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeMa= p.uni create mode 100644 EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeSt= rings.uni diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.inf b/Em= ulatorPkg/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
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D Hii2RedfishMemoryDxe + FILE_GUID =3D 58134796-EB3A-4635-9664-6B7F68A8A9A1 + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D Hii2RedfishMemoryDxeDriverEntryPoint + UNLOAD_IMAGE =3D 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/Emu= latorPkg/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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef HII_2_REDFISH_MEMORY_DATA_H_ +#define HII_2_REDFISH_MEMORY_DATA_H_ + +#include +#include + +#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 ModuleProduc= tId +} 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/Emul= atorPkg/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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef HII_2_REDFISH_MEMORY_DXE_H_ +#define HII_2_REDFISH_MEMORY_DXE_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#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/Em= ulatorPkg/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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + + +#include "Hii2RedfishMemoryData.h" + +formset + guid =3D HII_2_REDFISH_MEMORY_FORMSET_GUID, + title =3D STRING_TOKEN(STR_FORM_SET_TITLE), + help =3D STRING_TOKEN(STR_FORM_SET_TITLE_HELP), + classguid =3D EFI_HII_PLATFORM_SETUP_FORMSET_GUID, + + // + // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI) + // + efivarstore HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA, + attribute =3D EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLAT= ILE, // EFI variable attribures + name =3D Hii2RedfishMemoryEfiVar, + guid =3D HII_2_REDFISH_MEMORY_FORMSET_GUID; + + // + // Define a Form (EFI_IFR_FORM) + // + form formid =3D FORM_ID, // Form ID + title =3D STRING_TOKEN(STR_FORM_TITLE); // Form title + + goto FROM_ID_MEMORY_1, // Destination For= m ID + prompt =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_1), // Prompt string + help =3D STRING_TOKEN(STR_FORM_HELP_MEMORY_1); // Help string + + goto FROM_ID_MEMORY_2, // Destination For= m ID + prompt =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_2), // Prompt string + help =3D STRING_TOKEN(STR_FORM_HELP_MEMORY_2); // Help string + + goto FROM_ID_MEMORY_3, // Destination For= m ID + prompt =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_3), // Prompt string + help =3D STRING_TOKEN(STR_FORM_HELP_MEMORY_3); // Help string + + goto FROM_ID_MEMORY_4, // Destination For= m ID + prompt =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_4), // Prompt string + help =3D STRING_TOKEN(STR_FORM_HELP_MEMORY_4); // Help string + + endform; + + form formid =3D FROM_ID_MEMORY_1, // Form ID + title =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_1); // Form title + + oneof varid =3D Hii2RedfishMemoryEfiVar.Memory[0].BaseModuleType, + questionid =3D QUESTION_ID_MEMORY_1_BASE_MODULE_TYPE, + prompt =3D STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_1_BASE_MODULE_TYPE_HELP), + flags =3D INTERACTIVE | NUMERIC_SIZE_1, + option text =3D STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), v= alue =3D STR_MEMORY_RDIMM_PROMPT, flags =3D DEFAULT; + option text =3D STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), v= alue =3D STR_MEMORY_UDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), v= alue =3D STR_MEMORY_SO_DIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), v= alue =3D STR_MEMORY_LRDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_RDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_UDIMM_PROMPT, flags =3D 0; + endoneof; + + string varid =3D Hii2RedfishMemoryEfiVar.Memory[0].ModuleProductId, + prompt =3D STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_1_MODULE_PRODUCT_ID_HELP), + flags =3D READ_ONLY, + minsize =3D ID_STRING_MIN, + maxsize =3D ID_STRING_MAX, + endstring; + + numeric varid =3D Hii2RedfishMemoryEfiVar.Memory[0].BusWidthBits, + prompt =3D STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_1_BUS_WIDTH_BITS_HELP), + minimum =3D 0, + maximum =3D 0xff, + step =3D 1, + default =3D 20, + endnumeric; + + checkbox varid =3D Hii2RedfishMemoryEfiVar.Memory[0].ConfigurationLo= cked, + prompt =3D STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_P= ROMPT), + help =3D STRING_TOKEN(STR_MEMORY_1_CONFIGURATION_LOCKED_H= ELP), + flags =3D CHECKBOX_DEFAULT, + default =3D TRUE, + endcheckbox; + + endform; + + form formid =3D FROM_ID_MEMORY_2, // Form ID + title =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_2); // Form title + + oneof varid =3D Hii2RedfishMemoryEfiVar.Memory[1].BaseModuleType, + questionid =3D QUESTION_ID_MEMORY_2_BASE_MODULE_TYPE, + prompt =3D STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_2_BASE_MODULE_TYPE_HELP), + flags =3D INTERACTIVE | NUMERIC_SIZE_1, + option text =3D STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), v= alue =3D STR_MEMORY_RDIMM_PROMPT, flags =3D DEFAULT; + option text =3D STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), v= alue =3D STR_MEMORY_UDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), v= alue =3D STR_MEMORY_SO_DIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), v= alue =3D STR_MEMORY_LRDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_RDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_UDIMM_PROMPT, flags =3D 0; + endoneof; + + string varid =3D Hii2RedfishMemoryEfiVar.Memory[1].ModuleProductId, + prompt =3D STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_2_MODULE_PRODUCT_ID_HELP), + flags =3D READ_ONLY, + minsize =3D ID_STRING_MIN, + maxsize =3D ID_STRING_MAX, + endstring; + + numeric varid =3D Hii2RedfishMemoryEfiVar.Memory[1].BusWidthBits, + prompt =3D STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_2_BUS_WIDTH_BITS_HELP), + minimum =3D 0, + maximum =3D 0xff, + step =3D 1, + default =3D 20, + endnumeric; + + checkbox varid =3D Hii2RedfishMemoryEfiVar.Memory[1].ConfigurationLo= cked, + prompt =3D STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_P= ROMPT), + help =3D STRING_TOKEN(STR_MEMORY_2_CONFIGURATION_LOCKED_H= ELP), + flags =3D CHECKBOX_DEFAULT, + default =3D TRUE, + endcheckbox; + + endform; + + form formid =3D FROM_ID_MEMORY_3, // Form ID + title =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title + + oneof varid =3D Hii2RedfishMemoryEfiVar.Memory[2].BaseModuleType, + questionid =3D QUESTION_ID_MEMORY_3_BASE_MODULE_TYPE, + prompt =3D STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_3_BASE_MODULE_TYPE_HELP), + flags =3D INTERACTIVE | NUMERIC_SIZE_1, + option text =3D STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), v= alue =3D STR_MEMORY_RDIMM_PROMPT, flags =3D DEFAULT; + option text =3D STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), v= alue =3D STR_MEMORY_UDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), v= alue =3D STR_MEMORY_SO_DIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), v= alue =3D STR_MEMORY_LRDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_RDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_UDIMM_PROMPT, flags =3D 0; + endoneof; + + string varid =3D Hii2RedfishMemoryEfiVar.Memory[2].ModuleProductId, + prompt =3D STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_3_MODULE_PRODUCT_ID_HELP), + flags =3D READ_ONLY, + minsize =3D ID_STRING_MIN, + maxsize =3D ID_STRING_MAX, + endstring; + + numeric varid =3D Hii2RedfishMemoryEfiVar.Memory[2].BusWidthBits, + prompt =3D STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_3_BUS_WIDTH_BITS_HELP), + minimum =3D 0, + maximum =3D 0xff, + step =3D 1, + default =3D 20, + endnumeric; + + checkbox varid =3D Hii2RedfishMemoryEfiVar.Memory[2].ConfigurationLo= cked, + prompt =3D STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_P= ROMPT), + help =3D STRING_TOKEN(STR_MEMORY_3_CONFIGURATION_LOCKED_H= ELP), + flags =3D CHECKBOX_DEFAULT, + default =3D TRUE, + endcheckbox; + + endform; + + form formid =3D FROM_ID_MEMORY_4, // Form ID + title =3D STRING_TOKEN(STR_FORM_TITLE_MEMORY_3); // Form title + + oneof varid =3D Hii2RedfishMemoryEfiVar.Memory[3].BaseModuleType, + questionid =3D QUESTION_ID_MEMORY_4_BASE_MODULE_TYPE, + prompt =3D STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_4_BASE_MODULE_TYPE_HELP), + flags =3D INTERACTIVE | NUMERIC_SIZE_1, + option text =3D STRING_TOKEN(STR_MEMORY_RDIMM_PROMPT), v= alue =3D STR_MEMORY_RDIMM_PROMPT, flags =3D DEFAULT; + option text =3D STRING_TOKEN(STR_MEMORY_UDIMM_PROMPT), v= alue =3D STR_MEMORY_UDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_SO_DIMM_PROMPT), v= alue =3D STR_MEMORY_SO_DIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_LRDIMM_PROMPT), v= alue =3D STR_MEMORY_LRDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_RDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_RDIMM_PROMPT, flags =3D 0; + option text =3D STRING_TOKEN(STR_MEMORY_MINI_UDIMM_PROMPT), v= alue =3D STR_MEMORY_MINI_UDIMM_PROMPT, flags =3D 0; + endoneof; + + string varid =3D Hii2RedfishMemoryEfiVar.Memory[3].ModuleProductId, + prompt =3D STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_4_MODULE_PRODUCT_ID_HELP), + flags =3D READ_ONLY, + minsize =3D ID_STRING_MIN, + maxsize =3D ID_STRING_MAX, + endstring; + + numeric varid =3D Hii2RedfishMemoryEfiVar.Memory[3].BusWidthBits, + prompt =3D STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT), + help =3D STRING_TOKEN(STR_MEMORY_4_BUS_WIDTH_BITS_HELP), + minimum =3D 0, + maximum =3D 0xff, + step =3D 1, + default =3D 20, + endnumeric; + + checkbox varid =3D Hii2RedfishMemoryEfiVar.Memory[3].ConfigurationLo= cked, + prompt =3D STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_P= ROMPT), + help =3D STRING_TOKEN(STR_MEMORY_4_CONFIGURATION_LOCKED_H= ELP), + flags =3D CHECKBOX_DEFAULT, + default =3D TRUE, + endcheckbox; + + endform; + +endformset; \ No newline at end of file diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxe.c b/Emul= atorPkg/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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "Hii2RedfishMemoryDxe.h" + +EFI_GUID mHii2RedfishMemoryGuid =3D HII_2_REDFISH_MEMORY_FORMSET_GU= ID; +EFI_HII_HANDLE mHiiHandle; +EFI_HANDLE DriverHandle; +CHAR16 Hii2RedfishEfiVar[] =3D L"Hii2RedfishMemoryEfiVar"; + +/// +/// HII specific Vendor Device Path definition. +/// +HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath =3D { + { + { + 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 =3D sizeof (HII_2_REDFISH_MEMORY_EFI_VARSTORE_DATA); + Status =3D gRT->GetVariable ( + Hii2RedfishEfiVar, + &gHii2RedfishMemoryFormsetGuid, + NULL, + &BufferSize, + &Hii2RedfishMemoryVar + ); + if (!EFI_ERROR (Status)) { + return EFI_SUCCESS; + } + + // + // Initialization + // + for (Index =3D 0; Index < MEMORY_MAX_NO; Index++) { + Hii2RedfishMemoryVar.Memory[Index].BaseModuleType =3D STR_MEMORY_RDIMM= _PROMPT; + Hii2RedfishMemoryVar.Memory[Index].BusWidthBits =3D 20; + Hii2RedfishMemoryVar.Memory[Index].ConfigurationLocked =3D TRUE; + StrCpyS (Hii2RedfishMemoryVar.Memory[Index].ModuleProductId, ID_STRING= _MAX_WITH_TERMINATOR, L"1234"); + } + + Status =3D gRT->SetVariable ( + Hii2RedfishEfiVar, + &gHii2RedfishMemoryFormsetGuid, + VARIABLE_ATTRIBUTE_NV_BS, + BufferSize, + &Hii2RedfishMemoryVar + ); + + return Status; +} + +/** + This function allows a caller to extract the current configuration for o= ne + or more named elements from the target driver. + + @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTO= COL. + @param[in] Request A null-terminated Unicode string in + format. + @param[out] Progress On return, points to a character in the R= equest + string. Points to the string's null termi= nator if + request was successful. Points to the mos= t recent + '&' before the first failing name/value p= air (or + the beginning of the string if the failur= e is in + the first name/value pair) if the request= was not + successful. + @param[out] Results A null-terminated Unicode string in + format which has all valu= es filled + in for the names in the Request string. S= tring 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 nam= e. + @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 =3D=3D NULL || Results =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + if (Request =3D=3D 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"Hii2R= edfishMemoryEfiVar")) { + 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_PROTO= COL. + @param[in] Configuration A null-terminated Unicode string in + format. + @param[out] Progress A pointer to a string filled in with the = offset of + the most recent '&' before the first fail= ing + name/value pair (or the beginning of the = string if + the failure is in the first name/value pa= ir) or + the terminating NULL if all was successfu= l. + + @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_PROTO= COL. + @param[in] Action Specifies the type of action taken by the= browser. + @param[in] QuestionId A unique value which is sent to the origi= nal + 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 o= riginal + exporting driver. + @param[out] ActionRequest On return, points to the action requested= by the + callback function. + + @retval EFI_SUCCESS The callback successfully handled the act= ion. + @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold t= he + 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 =3D { + 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 =3D NULL; + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &DriverHandle, + &gEfiDevicePathProtocolGuid, + &mHiiVendorDevicePath, + &gEfiHiiConfigAccessProtocolGuid, + &mHii2RedfishConfigAccess, + NULL + ); + + // + // Publish our HII data + // + mHiiHandle =3D HiiAddPackages ( + &mHii2RedfishMemoryGuid, + DriverHandle, + Hii2RedfishMemoryDxeStrings, + Hii2RedfishMemoryVfrBin, + NULL + ); + if (mHiiHandle =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D InitialHiiVairable (); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a, failed to initial variable: %r\n", __FUNCTIO= N__, Status)); + } + + return EFI_SUCCESS; +} + +/** + Unloads the application and its installed protocol. + + @param[in] ImageHandle Handle that identifies the image to be unl= oaded. + + @retval EFI_SUCCESS The image has been unloaded. +**/ +EFI_STATUS +EFIAPI +Hii2RedfishMemoryDxeDriverUnload ( + IN EFI_HANDLE ImageHandle + ) +{ + if (mHiiHandle !=3D 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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# +#langdef x-uefi-redfish-Memory.v1_7_1 "Memory.v1_7_1" + +#string STR_MEMORY_1_BASE_MODULE_TYPE_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{1}/BaseModuleType" +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{1}/BusWidthBits" +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{1}/ConfigurationLocked" +#string STR_MEMORY_1_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{1}/ModuleProductID" + +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{2}/BaseModuleType" +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{2}/BusWidthBits" +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{2}/ConfigurationLocked" +#string STR_MEMORY_2_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{2}/ModuleProductID" + +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{3}/BaseModuleType" +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{3}/BusWidthBits" +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{3}/ConfigurationLocked" +#string STR_MEMORY_3_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{3}/ModuleProductID" + +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{5}/BaseModuleType" +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{5}/BusWidthBits" +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{5}/ConfigurationLocked" +#string STR_MEMORY_4_MODULE_PRODUCT_ID_PROMPT #language x-uefi-redf= ish-Memory.v1_7_1 "/Memory/{5}/ModuleProductID" + +#string STR_MEMORY_RDIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "RDIMM" +#string STR_MEMORY_UDIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "UDIMM" +#string STR_MEMORY_SO_DIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "SO_DIMM" +#string STR_MEMORY_LRDIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "LRDIMM" +#string STR_MEMORY_MINI_RDIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "Mini_RDIMM" +#string STR_MEMORY_MINI_UDIMM_PROMPT #language x-uefi-redfi= sh-Memory.v1_7_1 "Mini_UDIMM" \ No newline at end of file diff --git a/EmulatorPkg/Hii2RedfishMemoryDxe/Hii2RedfishMemoryDxeStrings.u= ni 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
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +/=3D# +#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 m= odule type" +#string STR_MEMORY_1_BASE_MODULE_TYPE_HELP #language en-US "The va= lue of this property shall be the base module type of Memory" +#string STR_MEMORY_1_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Wi= dth in bits" +#string STR_MEMORY_1_BUS_WIDTH_BITS_HELP #language en-US "The va= lue of this property shall be the bus width in bits" +#string STR_MEMORY_1_CONFIGURATION_LOCKED_PROMPT #language en-US "Config= uration Locked" +#string STR_MEMORY_1_CONFIGURATION_LOCKED_HELP #language en-US "The va= lue 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 pr= oduct ID of this memory module." + +#string STR_MEMORY_2_BASE_MODULE_TYPE_PROMPT #language en-US "Base m= odule type" +#string STR_MEMORY_2_BASE_MODULE_TYPE_HELP #language en-US "The va= lue of this property shall be the base module type of Memory" +#string STR_MEMORY_2_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Wi= dth in bits" +#string STR_MEMORY_2_BUS_WIDTH_BITS_HELP #language en-US "The va= lue of this property shall be the bus width in bits" +#string STR_MEMORY_2_CONFIGURATION_LOCKED_PROMPT #language en-US "Config= uration Locked" +#string STR_MEMORY_2_CONFIGURATION_LOCKED_HELP #language en-US "The va= lue 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 pr= oduct ID of this memory module." + +#string STR_MEMORY_3_BASE_MODULE_TYPE_PROMPT #language en-US "Base m= odule type" +#string STR_MEMORY_3_BASE_MODULE_TYPE_HELP #language en-US "The va= lue of this property shall be the base module type of Memory" +#string STR_MEMORY_3_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Wi= dth in bits" +#string STR_MEMORY_3_BUS_WIDTH_BITS_HELP #language en-US "The va= lue of this property shall be the bus width in bits" +#string STR_MEMORY_3_CONFIGURATION_LOCKED_PROMPT #language en-US "Config= uration Locked" +#string STR_MEMORY_3_CONFIGURATION_LOCKED_HELP #language en-US "The va= lue 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 pr= oduct ID of this memory module." + +#string STR_MEMORY_4_BASE_MODULE_TYPE_PROMPT #language en-US "Base m= odule type" +#string STR_MEMORY_4_BASE_MODULE_TYPE_HELP #language en-US "The va= lue of this property shall be the base module type of Memory" +#string STR_MEMORY_4_BUS_WIDTH_BITS_PROMPT #language en-US "Bus Wi= dth in bits" +#string STR_MEMORY_4_BUS_WIDTH_BITS_HELP #language en-US "The va= lue of this property shall be the bus width in bits" +#string STR_MEMORY_4_CONFIGURATION_LOCKED_PROMPT #language en-US "Config= uration Locked" +#string STR_MEMORY_4_CONFIGURATION_LOCKED_HELP #language en-US "The va= lue 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 pr= oduct 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_DIM= M" +#string STR_MEMORY_LRDIMM_PROMPT #language en-US "LRDIMM" +#string STR_MEMORY_MINI_RDIMM_PROMPT #language en-US "Mini_R= DIMM" +#string STR_MEMORY_MINI_UDIMM_PROMPT #language en-US "Mini_U= DIMM" --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#82884): https://edk2.groups.io/g/devel/message/82884 Mute This Topic: https://groups.io/mt/86667770/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-