From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: zailiang.sun@intel.com) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Sun, 30 Jun 2019 21:08:15 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Jun 2019 21:08:14 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,437,1557212400"; d="scan'208";a="165692831" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 30 Jun 2019 21:08:13 -0700 Received: from fmsmsx151.amr.corp.intel.com (10.18.125.4) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 30 Jun 2019 21:08:13 -0700 Received: from shsmsx106.ccr.corp.intel.com (10.239.4.159) by FMSMSX151.amr.corp.intel.com (10.18.125.4) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 30 Jun 2019 21:08:06 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.110]) by SHSMSX106.ccr.corp.intel.com ([169.254.10.240]) with mapi id 14.03.0439.000; Mon, 1 Jul 2019 12:08:04 +0800 From: "Sun, Zailiang" To: "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Qian, Yi" Subject: Re: [edk2-devel] [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol Thread-Topic: [edk2-devel] [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol Thread-Index: AQHVL7ia9PUAU6X67kSGos2bQr2cE6a1JbMQ Date: Mon, 1 Jul 2019 04:08:03 +0000 Message-ID: <7CB7EF03E15B5D48981329A508747A9850C9055D@SHSMSX104.ccr.corp.intel.com> References: <20190701025553.18596-1-michael.d.kinney@intel.com> <20190701025553.18596-9-michael.d.kinney@intel.com> In-Reply-To: <20190701025553.18596-9-michael.d.kinney@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: zailiang.sun@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-By: Zailiang Sun -----Original Message----- From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Mich= ael D Kinney Sent: Monday, July 01, 2019 10:56 AM To: devel@edk2.groups.io Cc: Sun, Zailiang ; Qian, Yi Subject: [edk2-devel] [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remo= ve use of Data Hub Protocol Update all platform code to stop using the Data Hub Protocol from the IntelFrameworkPkg. Cc: Zailiang Sun Cc: Yi Qian Signed-off-by: Michael D Kinney --- .../Vlv2TbltDevicePkg/Include/Guid/IdccData.h | 104 - .../Vlv2TbltDevicePkg/Include/Guid/ItkData.h | 18 +- .../Vlv2TbltDevicePkg/PlatformDxe/BoardId.c | 45 +- .../PlatformDxe/ClockControl.c | 80 +- .../Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c | 72 - .../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 1 - .../PlatformDxe/PlatformDxe.h | 2 - .../PlatformDxe/PlatformDxe.inf | 2 - .../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 - .../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 6 - .../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 1 - .../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 6 - .../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 7 - .../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 7 - .../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 7 - .../PlatformSetupDxe/PlatformSetupDxe.h | 2 - .../PlatformSetupDxe/SetupFunctions.c | 38 +- .../PlatformSetupDxe/SetupInfoRecords.c | 477 +-- .../SmBiosMiscDxe/CommonHeader.h | 10 +- .../SmBiosMiscDxe/DataHubRecords.h | 2934 +++++++++++++++++ .../SmBiosMiscDxe/MiscMemoryDeviceFunction.c | 318 +- .../SmBiosMiscDxe/MiscOemType0x94Function.c | 1 - .../SmBiosMiscDxe/MiscProcessorCacheData.c | 11 +- .../MiscProcessorCacheFunction.c | 273 +- .../MiscProcessorInformationFunction.c | 203 +- .../MiscSubclassDriverDataTable.c | 14 +- .../MiscSubclassDriverEntryPoint.c | 13 +- .../SmBiosMiscDxe/SmBiosMiscDxe.inf | 3 +- .../VlvPlatformInitDxe/IgdOpRegion.c | 3 - .../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 6 +- 30 files changed, 3458 insertions(+), 1207 deletions(-) delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData= .h delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.= c create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHub= Records.h diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h b/Pl= atform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h deleted file mode 100644 index 7e3b965666..0000000000 --- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h +++ /dev/null @@ -1,104 +0,0 @@ -/*++ - - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 - SPDX-License-Identifier: BSD-2-Clause-Patent - - = =20 - - -Module Name: - - IdccData.h - -Abstract: - ---*/ - -#ifndef _IDCCDATAHUB_GUID_H_ -#define _IDCCDATAHUB_GUID_H_ - -// -// This GUID is for the IDCC related data found in the Data Hub. -// -#define IDCC_DATA_HUB_GUID \ - { 0x788e1d9f, 0x1eab, 0x47d2, 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60,= 0x12 } - -extern EFI_GUID gIdccDataHubGuid; - -#pragma pack(1) - -typedef struct { - UINT32 Type; - UINT32 RecordLength; -} EFI_IDCC_DATA_HEADER; - -typedef struct { - EFI_IDCC_DATA_HEADER IdccHeader; - UINT32 Tcontrol; -} EFI_IDCC_TCONTROL; - -typedef struct { - UINT32 EntryCount; -} EFI_IDCC_CLOCK_COMMON; - -typedef struct { - UINT8 Polarity; - UINT8 Percent; - UINT32 FpValue; -} EFI_IDCC_TYPE_2_DATA; - -typedef struct { - UINT8 SetupVal; - UINT32 FpValue; -} EFI_IDCC_TYPE_3_4_DATA; - -typedef struct { - EFI_IDCC_DATA_HEADER IdccHeader; - UINT32 ProcessorRatio; -} EFI_IDCC_PROCESSOR_RATIO; - -typedef struct { - EFI_IDCC_DATA_HEADER IdccHeader; - UINT32 BoardFormFactor; -} EFI_IDCC_BOARD_FORM_FACTOR; - -typedef struct { - EFI_IDCC_DATA_HEADER IdccHeader; - UINT32 ProcessorInfo; -} EFI_IDCC_PROCESSOR_INFO; - -#define EFI_IDCC_PROCESSOR_UNCON (1 << 0) // Bit 0: UnCon CPU -#define EFI_IDCC_PROCESSOR_UNLOCK (1 << 1) // Bit 1: UnLock CPU -#define EFI_IDCC_PROCESSOR_CNR (1 << 2) // Bit 2: CNR CPU -#define EFI_IDCC_PROCESSOR_KNF (1 << 3) // Bit 3: KNF CPU - -typedef struct { - EFI_IDCC_DATA_HEADER IdccHeader; - UINT32 MinFSB; - UINT32 MaxFSB; - UINT8 StepFSB; -} EFI_IDCC_FSB_DATA; - -#pragma pack() - -#define EFI_IDCC_POSITIVE 0 -#define EFI_IDCC_NEGATIVE 1 - -// -// Board Form Factor equates. -// -#define ATX_FORM_FACTOR =090x00 -#define BTX_FORM_FACTOR =090x01 - - -#define EFI_IDCC_TCONTROL_TYPE 1 -#define EFI_IDCC_FSB_TYPE 2 -#define EFI_IDCC_PCI_TYPE 3 -#define EFI_IDCC_PCIE_TYPE 4 -#define EFI_IDCC_PROC_RATIO_TYPE 5 -#define EFI_IDCC_BOARD_FORM_FACTOR_TYPE 6 -#define EFI_IDCC_PROC_INFO_TYPE 7 -#define EFI_IDCC_FSB_DATA_TYPE 8 - -#endif diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h b/Pla= tform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h index e7bd29e6e4..2dcaac15f3 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h +++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h @@ -1,11 +1,9 @@ /*++ =20 - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 + Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - Module Name: =20 ItkData.h @@ -14,16 +12,8 @@ Abstract: =20 --*/ =20 -#ifndef _ITKDATAHUB_GUID_H_ -#define _ITKDATAHUB_GUID_H_ - -// -// This GUID is for the ITK related data found in the Data Hub {E7060843-= A336-4d5b-9598-13402F5D7375} -// -#define ITK_DATA_HUB_GUID \ - { 0xe7060843, 0xa336, 0x4d5b, 0x95, 0x98, 0x13, 0x40, 0x2f, 0x5d, 0x73,= 0x75 } - -extern EFI_GUID gItkDataHubGuid; +#ifndef _ITKDATA_GUID_H_ +#define _ITKDATA_GUID_H_ =20 // // This GUID is for the ITK related data found in a Variable {3812723D-7= E48-4e29-BC27-F5A39AC94EF1} diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c b/Plat= form/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c index 7d774568e3..66c76453a8 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c @@ -1,11 +1,9 @@ /** @file =20 - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 + Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - Module Name: =20 =20 @@ -23,13 +21,9 @@ Abstract: =20 #include "PchRegs.h" #include "PlatformDxe.h" -#include #include -#include =20 =20 -extern EFI_GUID mPlatformDriverGuid; - // // Global module data // @@ -52,8 +46,6 @@ InitializeBoardId ( { =20 UINT32 BoardIdBufferSize; - EFI_IDCC_BOARD_FORM_FACTOR IdccBoardFormFactor; - EFI_DATA_HUB_PROTOCOL *DataHub; EFI_STATUS Status; DMI_DATA DmiDataVariable; UINTN Size; @@ -186,38 +178,5 @@ InitializeBoardId ( BoardIdBufferSize, &mBoardFeatures ); - - // - // Get the Data Hub protocol - // - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (VOID **) &DataHub - ); - if (!(EFI_ERROR(Status))) { - // - // Fill out data - // - IdccBoardFormFactor.IdccHeader.Type =3D EFI_IDCC_BOARD_FORM_FACTOR_TY= PE; - IdccBoardFormFactor.IdccHeader.RecordLength =3D sizeof(EFI_IDCC_BOARD= _FORM_FACTOR); - if ((mBoardFeatures & B_BOARD_FEATURES_FORM_FACTOR_ATX) || (mBoardFea= tures & B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX)) { - IdccBoardFormFactor.BoardFormFactor =3D ATX_FORM_FACTOR; // ATX - } else { - IdccBoardFormFactor.BoardFormFactor =3D BTX_FORM_FACTOR; // BTX - } - - // - // Publish the Board Form Factor value for IDCC - // - Status =3D DataHub->LogData ( - DataHub, - &gIdccDataHubGuid, - &mPlatformDriverGuid, - EFI_DATA_RECORD_CLASS_DATA, - &IdccBoardFormFactor, - sizeof(EFI_IDCC_BOARD_FORM_FACTOR) - ); - } } =20 diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c b= /Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c index 1669f0357f..596f55bcbe 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c @@ -1,11 +1,9 @@ /** @file =20 - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 + Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - Module Name: =20 =20 @@ -75,71 +73,6 @@ EFI_CLOCK_PLATFORM_INFO mAtxClockSettings =3D { sizeof(mAtxSxClocks) / sizeof(mAtxSxClocks[0]) }; =20 -#if defined( RVP_SUPPORT ) && RVP_SUPPORT -// -// RVP Clock Settings -// -// Static clock table. -// This should be used to define any clock settings that are static -// (Always On or Always Off). Dynamic clocks should be set to enabled -// in this table. -// -//UPSD_TBD Check with Jan if any porting required. -// -EFI_STATIC_SIGNALS mRvpStaticClocks[] =3D { - {SrcClk11, Enabled, All}, // Not used/not present but leave codin= g enabled - {SrcClk10, Enabled, All}, // Not used/not present but leave codin= g enabled - {SrcClk9, Enabled, All}, // Not used/not present but leave codin= g enabled - {SrcClk8, Enabled, All}, // ICHSATAII - {SrcClk7, Enabled, All}, // DPL_REFSSCLKIN - {SrcClk6, Enabled, All}, // 100M_MCH - {SrcClk5, Enabled, All}, // Mini-PCIe //TODO PNV: Need to check= ICH GPIO38: - // 0: turn on; 1: turn of= f - {SrcClk4, Enabled, All}, // ICHSATA - {SrcClk3, Enabled, All}, // 100M_ICH - {SrcClk2, Enabled, All}, // 100M_LAN - {SrcClk1, Enabled, All}, // 25M_LAN - {SrcClk0, Enabled, All}, // 96M_DREF - {Ref0, Enabled, All}, - {Dot96, Enabled, All}, - {Usb48, Enabled, All}, - {PciClkF5, Enabled, All}, // 33M_ICH - {PciClk0, Enabled, All}, // 33M_RISER - {PciClk1, Enabled, All}, // 33M_RISER - {PciClk2, Enabled, All}, // VDD_Clock - {PciClk3, Enabled, All}, // 33M_S1 - {PciClk4, Enabled, All}, // 33M_PA -}; - -// -// Dynamic clock table -// This is used to determine if a clock should be left on or turned off b= ased -// on the presence of a device. The bridge information is used so the bu= s -// number for the device to be detected can be found. -// - -// -// ClockSxInfo Table -// This is a list of clocks that need to be set to a known state when the -// system enters S4 or S5. -// -EFI_STATIC_SIGNALS mRvpSxClocks[] =3D { - {SaveClockConfiguration, Disabled, All} -}; - -// -// RVP settings structure -// -EFI_CLOCK_PLATFORM_INFO mRvpClockSettings =3D { - mRvpStaticClocks, - sizeof(mRvpStaticClocks) / sizeof(mRvpStaticClocks[0]), - 0, // No clocks will be turned off mRvpDynamicClocks, - 0, // No clocks will be turned off sizeof(mRvpDynamicClocks) / sizeof(m= RvpDynamicClocks[0]), - mRvpSxClocks, - sizeof(mRvpSxClocks) / sizeof(mRvpSxClocks[0]) -}; -#endif - VOID InitializeClockRouting( ) @@ -165,12 +98,6 @@ InitializeClockRouting( ); if (!EFI_ERROR (Status)) { =20 -#if defined( RVP_SUPPORT ) && RVP_SUPPORT - if (BoardIdVar & B_BOARD_FEATURES_RVP) { - ClockPolicy =3D &mRvpClockSettings; - } -#else - // // Isolate board type information // @@ -183,9 +110,6 @@ InitializeClockRouting( BoardIdVar =3D=3D B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX) { ClockPolicy =3D &mAtxClockSettings; } - -#endif - } =20 Handle =3D NULL; diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c b/Pla= tform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c deleted file mode 100644 index 3b3e4b4c82..0000000000 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c +++ /dev/null @@ -1,72 +0,0 @@ -/** @file - - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 - SPDX-License-Identifier: BSD-2-Clause-Patent - - = =20 - -Module Name: - - - IdccInfo.c - -Abstract: - - Platform information used by IDCC. - -Revision History - ---*/ - -#include "PlatformDxe.h" - -#include - -extern EFI_GUID mPlatformDriverGuid; - - -EFI_STATUS -WriteIdccInfo ( - ) -{ - EFI_STATUS Status; - EFI_DATA_HUB_PROTOCOL *DataHub; - UINT8 Ratio; - EFI_IDCC_PROCESSOR_RATIO ProcRatio; - - // - // Locate the data hub protocol - // - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (VOID **) &DataHub - ); - - // - // Find processor actual ratio - // - Ratio =3D 15; //Temporary - some dummy value. - - // - // Fill in IDCC Type 5 structure - // - ProcRatio.IdccHeader.Type =3D EFI_IDCC_PROC_RATIO_TYPE; - ProcRatio.IdccHeader.RecordLength =3D sizeof(EFI_IDCC_PROCESSOR_RATIO); - ProcRatio.ProcessorRatio =3D Ratio; - - // - // Write data to the data hub - // - Status =3D DataHub->LogData ( - DataHub, - &gIdccDataHubGuid, - &mPlatformDriverGuid, - EFI_DATA_RECORD_CLASS_DATA, - &ProcRatio, - sizeof(EFI_IDCC_PROCESSOR_RATIO) - ); - - return Status; -} diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Pla= tform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c index 7e083e3933..0bc3f44c49 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c @@ -55,7 +55,6 @@ GPIO_CONF_PAD_INIT mTB_BL_GpioInitData_SC_TRI_Exit_boot_= Service[] =3D =20 =20 EFI_GUID mSystemHiiExportDatabase =3D EFI_HII_EXPORT_DATABASE_GUID; -EFI_GUID mPlatformDriverGuid =3D EFI_PLATFORM_DRIVER_GUID; SYSTEM_CONFIGURATION mSystemConfiguration; EFI_HANDLE mImageHandle; BOOLEAN mMfgMode =3D FALSE; diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/= Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h index 5c60f823de..f2f0097efc 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h @@ -43,8 +43,6 @@ Abstract: #include #include #include -#include -#include #include #include #include diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf = b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf index 0c432642e4..a9ef744ef7 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf @@ -35,7 +35,6 @@ [sources.common] ClockControl.c Platform.c IchRegTable.c - IdccInfo.c IchPlatformPolicy.c PciDevice.c SlotConfig.c @@ -80,7 +79,6 @@ [Guids] gEfiBoardFeaturesGuid gItkDataVarGuid gDmiDataGuid - gIdccDataHubGuid gEfiPciLanInfoGuid gEfiNormalSetupGuid gEfiGlobalVariableGuid diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/I= ntel/Vlv2TbltDevicePkg/PlatformPkg.dec index bfde7be398..5b255f4b05 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec @@ -41,7 +41,6 @@ [Guids] gEfiBoardFeaturesGuid =3D { 0x94b9e8ae, 0x8877, 0x479= a, { 0x98, 0x42, 0xf5, 0x97, 0x4b, 0x82, 0xce, 0xd3 } } gItkDataVarGuid =3D { 0x3812723d, 0x7e48, 0x4e2= 9, { 0xbc, 0x27, 0xf5, 0xa3, 0x9a, 0xc9, 0x4e, 0xf1 } } gDmiDataGuid =3D { 0x70e56c5e, 0x280c, 0x44b= 0, { 0xa4, 0x97, 0x09, 0x68, 0x1a, 0xbc, 0x37, 0x5e } } - gIdccDataHubGuid =3D { 0x788e1d9f, 0x1eab, 0x47d= 2, { 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60, 0x12 } } gEfiSetupVariableGuid =3D { 0xec87d643, 0xeba4, 0x4bb= 5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } } gEfiPlatformInfoGuid =3D { 0x1e2acc41, 0xe26a, 0x483= d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } } gMfgModeVariableGuid =3D { 0xEF14FD78, 0x0793, 0x4e2= b, { 0xAC, 0x6D, 0x06, 0x28, 0x47, 0xE0, 0x17, 0x91 } } diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/I= ntel/Vlv2TbltDevicePkg/PlatformPkg.fdf index 4c60d0a0f2..15a4251cf8 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf @@ -430,9 +430,6 @@ [FV.FVMAIN] =20 INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf =20 -!if $(DATAHUB_ENABLE) =3D=3D TRUE -INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf -!endif INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe= .inf =20 INF RuleOverride =3D BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(= DXE_ARCHITECTURE)/Dptf.inf @@ -584,9 +581,6 @@ [FV.FVMAIN] INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf =20 -INF RuleOverride =3D BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(= DXE_ARCHITECTURE)/SmbiosMemory.inf - - # # FAT file system # diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc b/Plat= form/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc index d5068b514c..7b48d7b44e 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc @@ -48,7 +48,6 @@ DEFINE MICOCODE_CAPSULE_ENABLE =3D TRUE =20 DEFINE GOP_DRIVER_ENABLE =3D TRUE -DEFINE DATAHUB_ENABLE =3D TRUE DEFINE USB_ENABLE =3D TRUE =20 DEFINE ISA_SERIAL_STATUS_CODE_ENABLE =3D TRUE diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platfor= m/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf index 61e1adcd14..b8ac61d710 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf @@ -376,9 +376,6 @@ [FV.FVMAIN] =20 INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf =20 -!if $(DATAHUB_ENABLE) =3D=3D TRUE -INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf -!endif INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe= .inf =20 INF RuleOverride =3D BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(= DXE_ARCHITECTURE)/Dptf.inf @@ -530,9 +527,6 @@ [FV.FVMAIN] INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf =20 -INF RuleOverride =3D BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(= DXE_ARCHITECTURE)/SmbiosMemory.inf - - # # FAT file system # diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Plat= form/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc index 25d1beb400..b16883e98c 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc @@ -984,12 +984,6 @@ [Components.X64] =20 Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf =20 -!if $(DATAHUB_ENABLE) =3D=3D TRUE - IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf { - - gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0 - } -!endif MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.i= nf Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3Sup= portDxe.inf PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf @@ -1212,7 +1206,6 @@ [Components.X64] MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf =20 - Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMe= mory.inf # # CPU/FW Microde # diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platfo= rm/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc index 8a5c42577d..c9335a98c8 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc @@ -968,12 +968,6 @@ [Components.IA32] =20 Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf =20 -!if $(DATAHUB_ENABLE) =3D=3D TRUE - IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf { - - gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0 - } -!endif MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.i= nf Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3Sup= portDxe.inf PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf @@ -1196,7 +1190,6 @@ [Components.IA32] MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf =20 - Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMe= mory.inf # # CPU/FW Microde # diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platfor= m/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc index c0fe0892ac..fd9ddebfd9 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc @@ -983,12 +983,6 @@ [Components.X64] =20 Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf =20 -!if $(DATAHUB_ENABLE) =3D=3D TRUE - IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf { - - gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0 - } -!endif MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.i= nf Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3Sup= portDxe.inf PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf @@ -1211,7 +1205,6 @@ [Components.X64] MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf =20 - Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMe= mory.inf # # CPU/FW Microde # diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSet= upDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDx= e.h index 1ba75175e1..b4a30511ac 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h @@ -25,10 +25,8 @@ #include #include #include -#include #include #include -#include =20 #include #include diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFuncti= ons.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c index a84b425826..f3bc823056 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c @@ -1,12 +1,9 @@ /** @file =20 - Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 + Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 SetupFunctions.c @@ -52,34 +49,3 @@ SwapEntries ( =20 return; } - -UINT32 -ConvertBase10ToRaw ( - IN EFI_EXP_BASE10_DATA *Data) -{ - UINTN Index; - UINT32 RawData; - - RawData =3D Data->Value; - for (Index =3D 0; Index < (UINTN) Data->Exponent; Index++) { - RawData *=3D 10; - } - - return RawData; -} - -UINT32 -ConvertBase2ToRaw ( - IN EFI_EXP_BASE2_DATA *Data) -{ - UINTN Index; - UINT32 RawData; - - RawData =3D Data->Value; - for (Index =3D 0; Index < (UINTN) Data->Exponent; Index++) { - RawData <<=3D 1; - } - - return RawData; -} - diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRe= cords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecord= s.c index c767021aed..efd4a723e1 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c @@ -79,9 +79,6 @@ SB_REV SBRevisionTable[] =3D { =20 BOOLEAN mSetupInfoDone =3D FALSE; UINT8 mUseProductKey =3D 0; -EFI_EXP_BASE10_DATA mProcessorFrequency; -EFI_EXP_BASE10_DATA mProcessorFsbFrequency; - EFI_GUID mProcessorProducerGuid; EFI_HII_HANDLE mHiiHandle; EFI_PLATFORM_CPU_INFO mPlatformCpuInfo; @@ -91,50 +88,7 @@ EFI_PLATFORM_INFO_HOB *mPlatformInfo; =20 #define memset SetMem =20 -UINT16 mMemorySpeed =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot0 =3D 0; -UINT16 mMemorySpeedChannelASlot0 =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot1 =3D 0; -UINT16 mMemorySpeedChannelASlot1 =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot0 =3D 0; -UINT16 mMemorySpeedChannelBSlot0 =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot1 =3D 0; -UINT16 mMemorySpeedChannelBSlot1 =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot0 =3D 0; -UINT16 mMemorySpeedChannelCSlot0 =3D 0xffff; -EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot1 =3D 0; -UINT16 mMemorySpeedChannelCSlot1 =3D 0xffff; -UINTN mMemoryMode =3D 0xff; - #define CHARACTER_NUMBER_FOR_VALUE 30 - typedef struct { - EFI_STRING_TOKEN MemoryDeviceLocator; - EFI_STRING_TOKEN MemoryBankLocator; - EFI_STRING_TOKEN MemoryManufacturer; - EFI_STRING_TOKEN MemorySerialNumber; - EFI_STRING_TOKEN MemoryAssetTag; - EFI_STRING_TOKEN MemoryPartNumber; - EFI_INTER_LINK_DATA MemoryArrayLink; - EFI_INTER_LINK_DATA MemorySubArrayLink; - UINT16 MemoryTotalWidth; - UINT16 MemoryDataWidth; - UINT64 MemoryDeviceSize; - EFI_MEMORY_FORM_FACTOR MemoryFormFactor; - UINT8 MemoryDeviceSet; - EFI_MEMORY_ARRAY_TYPE MemoryType; - EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail; - UINT16 MemorySpeed; - EFI_MEMORY_STATE MemoryState; -} EFI_MEMORY_ARRAY_LINK; - - -typedef struct { - EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress; - EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress; - EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; - UINT16 MemoryArrayPartitionWidth; -} EFI_MEMORY_ARRAY_START_ADDRESS; - =20 typedef enum { PCH_SATA_MODE_IDE =3D 0, @@ -421,73 +375,6 @@ VOID UpdateLatestBootTime() { HiiSetString(mHiiHandle,STRING_TOKEN(STR_LOG_BOOT_TIME_VALUE), Buffer, = NULL); } =20 -/** - Get Cache Type for the specified Cache. This function is invoked when t= here is data records - available in the Data Hub. - - Get Cache Type function arguments: - - @param Instance The instance number of the subclass with the sa= me ProducerName.. - @param SubInstance The instance number of the RecordType for the s= ame Instance. - @param CacheType Cache type, see definition of EFI_CACHE_TYPE_DA= TA. - - @retval EFI_STATUS - -**/ -EFI_STATUS -GetCacheType( - IN UINT16 Instance, - IN UINT16 SubInstance, - IN EFI_CACHE_TYPE_DATA* CacheType) -{ - EFI_STATUS Status; - EFI_DATA_HUB_PROTOCOL *DataHub; - EFI_DATA_RECORD_HEADER *Record; - UINT64 MonotonicCount; - EFI_CACHE_VARIABLE_RECORD* CacheVariableRecord; - EFI_SUBCLASS_TYPE1_HEADER *DataHeader; - - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (void **)&DataHub - ); - ASSERT_EFI_ERROR(Status); - - // - // Get all available data records from data hub - // - MonotonicCount =3D 0; - Record =3D NULL; - - do { - Status =3D DataHub->GetNextRecord ( - DataHub, - =09 =09 =09&MonotonicCount, - =09 =09 =09NULL, - =09 =09 =09&Record - =09 =09 =09); - if (!EFI_ERROR(Status)) { - if (Record->DataRecordClass =3D=3D EFI_DATA_RECORD_CLASS_DATA) { - DataHeader =3D (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1); - - if(CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) &= & - (DataHeader->RecordType =3D=3D CacheTypeRecordType) && - (DataHeader->Instance =3D=3D Instance) && - (DataHeader->SubInstance =3D=3D SubInstance)) { - CacheVariableRecord =3D (EFI_CACHE_VARIABLE_RECORD *)(Data= Header + 1); - if(CacheType){ - *CacheType =3D CacheVariableRecord->CacheType; - return EFI_SUCCESS; - } - } - } - } - } while(!EFI_ERROR(Status) && (MonotonicCount !=3D 0)); - - return EFI_NOT_FOUND; -} - /** Setup data filter function. This function is invoked when there is data= records available in the Data Hub. @@ -504,230 +391,23 @@ VOID PrepareSetupInformation ( ) { - EFI_STATUS Status; - EFI_DATA_HUB_PROTOCOL *DataHub; - EFI_DATA_RECORD_HEADER *Record; - UINT8 *SrcData; - EFI_SUBCLASS_TYPE1_HEADER *DataHeader; CHAR16 *NewString; - CHAR16 *NewString2; - CHAR16 *NewStringToken; STRING_REF TokenToUpdate; - EFI_PROCESSOR_VERSION_DATA *ProcessorVersion; - UINTN Index; - UINTN DataOutput; - - EFI_PROCESSOR_MICROCODE_REVISION_DATA *CpuUcodeRevisionData; - EFI_MEMORY_ARRAY_START_ADDRESS *MemoryArray; - EFI_MEMORY_ARRAY_LINK *MemoryArrayLink; - UINT64 MonotonicCount; - CHAR16 Version[100]; //Assuming that strin= gs are < 100 UCHAR CHAR16 ReleaseDate[100]; //Assuming that strin= gs are < 100 UCHAR CHAR16 ReleaseTime[100]; //Assuming that strin= gs are < 100 UCHAR =20 NewString =3D AllocateZeroPool (0x100); - NewString2 =3D AllocateZeroPool (0x100); SetMem(Version, sizeof(Version), 0); SetMem(ReleaseDate, sizeof(ReleaseDate), 0); SetMem(ReleaseTime, sizeof(ReleaseTime), 0); =20 - // - // Get the Data Hub Protocol. Assume only one instance - // - Status =3D gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (void *= *)&DataHub); - ASSERT_EFI_ERROR(Status); - - // - // Get all available data records from data hub - // - MonotonicCount =3D 0; - Record =3D NULL; - - do { - Status =3D DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &R= ecord); - if (!EFI_ERROR(Status)) { - if (Record->DataRecordClass =3D=3D EFI_DATA_RECORD_CLASS_DATA) { - DataHeader =3D (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1); - SrcData =3D (UINT8 *)(DataHeader + 1); - - // - // Processor - // - if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubClassGu= id)) { - CopyMem (&mProcessorProducerGuid, &Record->ProducerName, sizeof= (EFI_GUID)); - switch (DataHeader->RecordType) { - case ProcessorCoreFrequencyRecordType: - CopyMem(&mProcessorFrequency, SrcData, sizeof(EFI_EXP_BASE1= 0_DATA)); - Index =3D EfiValueToString ( - =09 NewString, - =09 =09 =09ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)/100000000= 0, - =09 =09 =09PREFIX_ZERO, - =09 =09 =090 - =09 =09 =09); - StrCat (NewString, L"."); - EfiValueToString ( - =09 NewString + Index + 1, - =09 =09((ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)%1000000000)= /10000000), - =09 =09PREFIX_ZERO, - =09 =090 - =09 =09); - StrCat (NewString, L" GHz"); - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_SPEED_VALUE; - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - break; - - case ProcessorVersionRecordType: - ProcessorVersion =3D (EFI_PROCESSOR_VERSION_DATA *)SrcData; - NewStringToken =3D HiiGetPackageString(&mProcessorProducerG= uid, *ProcessorVersion, NULL); - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_VERSION_VALUE; - HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken, NUL= L); - break; - case CpuUcodeRevisionDataRecordType: - CpuUcodeRevisionData =3D (EFI_PROCESSOR_MICROCODE_REVISION_= DATA *) SrcData; - if (CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber = !=3D 0) { - EfiValueToHexStr ( - =09 =09 NewString, - CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber, - PREFIX_ZERO, - 8 - =09 =09 ); - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_MICROCODE_VAL= UE; - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - } - break; - default: - break; - } - - // - // Cache - // - } else if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClas= sGuid) && - (DataHeader->RecordType =3D=3D CacheSizeRecordType)) { - if (DataHeader->SubInstance =3D=3D EFI_CACHE_L1) { - EFI_CACHE_TYPE_DATA CacheType; - if (EFI_SUCCESS =3D=3D GetCacheType(DataHeader->Instance, Dat= aHeader->SubInstance,&CacheType)){ - if (CacheType =3D=3D EfiCacheTypeData) { - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_L1_DATA_CACHE= _VALUE; - } else if (CacheType =3D=3D EfiCacheTypeInstruction) { - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_L1_INSTR_CA= CHE_VALUE; - } else { - continue; - } - } else { - continue; - } - } - else if (DataHeader->SubInstance =3D=3D EFI_CACHE_L2) { - TokenToUpdate =3D (STRING_REF)STR_PROCESSOR_L2_CACHE_VALUE; - } else { - continue; - } - if (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData)) { - DataOutput =3D ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcDat= a) >> 10; - EfiValueToString (NewString, DataOutput, PREFIX_ZERO, 0); - - StrCat (NewString, L" KB"); - if (DataHeader->SubInstance =3D=3D EFI_CACHE_L3) { - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - } else if(DataHeader->SubInstance =3D=3D EFI_CACHE_L2 && mPla= tformCpuInfo.CpuPackage.CoresPerPhysicalPackage > 1){ - =09 // - // Show XxL2 string - =09 // - EfiValueToString ( - =09 NewString2, - mPlatformCpuInfo.CpuPackage.CoresPerPhysicalPackage, - PREFIX_ZERO, - 0 - =09 =09); - StrCat(NewString2, L"x "); - StrCat(NewString2, NewString); - HiiSetString(mHiiHandle, TokenToUpdate, NewString2, NULL); - } else { - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - } - } - - // - // Memory - // - } else if (CompareGuid(&Record->DataRecordGuid, &gEfiMemorySubCla= ssGuid)) { - switch (DataHeader->RecordType) { - case EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER: - MemoryArrayLink =3D (EFI_MEMORY_ARRAY_LINK *)SrcData; - - if (MemoryArrayLink->MemorySpeed > 0) { - // - // Save the lowest speed memory module - // - if (MemoryArrayLink->MemorySpeed < mMemorySpeed) { - mMemorySpeed =3D MemoryArrayLink->MemorySpeed; - } - switch (DataHeader->SubInstance) { - case 1: - mMemorySpeedChannelASlot0 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelASlot0 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - case 2: - mMemorySpeedChannelASlot1 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelASlot1 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - case 3: - mMemorySpeedChannelBSlot0 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelBSlot0 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - case 4: - mMemorySpeedChannelBSlot1 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelBSlot1 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - case 5: - mMemorySpeedChannelCSlot0 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelCSlot0 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - case 6: - mMemorySpeedChannelCSlot1 =3D MemoryArrayLink->Memory= Speed; - mMemorySizeChannelCSlot1 =3D MemoryArrayLink->MemoryD= eviceSize; - break; - default: - break; - } - } - break; - - case EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER: - MemoryArray =3D (EFI_MEMORY_ARRAY_START_ADDRESS *)SrcData; - if (MemoryArray->MemoryArrayEndAddress - MemoryArray->Memor= yArrayStartAddress) { - DataOutput =3D (UINTN)RShiftU64((MemoryArray->MemoryArrayE= ndAddress - MemoryArray->MemoryArrayStartAddress + 1), 20); - EfiValueToString (NewString, DataOutput / 1024, PREFIX_ZER= O, 0); - if(DataOutput % 1024) { - StrCat (NewString, L"."); - DataOutput =3D ((DataOutput % 1024) * 1000) / 1024; - while(!(DataOutput % 10)) - DataOutput =3D DataOutput / 10; - EfiValueToString (NewString2, DataOutput, PREFIX_ZERO, = 0); - StrCat (NewString, NewString2); - } - StrCat (NewString, L" GB"); - TokenToUpdate =3D (STRING_REF)STR_TOTAL_MEMORY_SIZE_VALUE= ; - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - } - break; - - default: - break; - } - } - } - } - } while (!EFI_ERROR(Status) && (MonotonicCount !=3D 0)); - Status =3D GetBiosVersionDateTime ( Version, - =09 ReleaseDate, - =09 ReleaseTime - =09 ); + ReleaseDate, + ReleaseTime + ); =20 DEBUG ((EFI_D_ERROR, "GetBiosVersionDateTime :%s %s %s \n", Version, Re= leaseDate, ReleaseTime)); if (!EFI_ERROR (Status)) { @@ -750,24 +430,7 @@ PrepareSetupInformation ( HiiSetString(mHiiHandle, TokenToUpdate, BuildDateTime, NULL); } =20 - // - // Calculate and update memory speed display in Main Page - // - // - // Update the overall memory speed - // - if (mMemorySpeed !=3D 0xffff) { - EfiValueToString (NewString, mMemorySpeed, PREFIX_ZERO, 0); - StrCat (NewString, L" MHz"); - - TokenToUpdate =3D (STRING_REF)STR_SYSTEM_MEMORY_SPEED_VALUE; - HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL); - } - gBS->FreePool(NewString); - gBS->FreePool(NewString2); - - return; } =20 /** @@ -782,65 +445,23 @@ UpdateAdditionalInformation ( ) { EFI_STATUS Status; - UINT64 MonotonicCount; - EFI_DATA_HUB_PROTOCOL *DataHub; - EFI_DATA_RECORD_HEADER *Record; - EFI_SUBCLASS_TYPE1_HEADER *DataHeader; EFI_SMBIOS_PROTOCOL *Smbios; EFI_SMBIOS_HANDLE SmbiosHandle; EFI_SMBIOS_TABLE_HEADER *SmbiosRecord; SMBIOS_TABLE_TYPE0 *Type0Record; + SMBIOS_TABLE_TYPE4 *Type4Record; + SMBIOS_TABLE_TYPE7 *Type7Record; + SMBIOS_TABLE_TYPE17 *Type17Record; UINT8 StrIndex; CHAR16 *BiosVersion =3D NULL; + CHAR16 *ProcessorVersion =3D NULL; CHAR16 *IfwiVersion =3D NULL; UINT16 SearchIndex; EFI_STRING_ID TokenToUpdate; -#if defined( RVP_SUPPORT ) && RVP_SUPPORT - EFI_MISC_SYSTEM_MANUFACTURER *SystemManufacturer; -#endif - - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (void **)&DataHub - ); - - ASSERT_EFI_ERROR(Status); - - MonotonicCount =3D 0; - Record =3D NULL; - do { - Status =3D DataHub->GetNextRecord ( - DataHub, - &MonotonicCount, - NULL, - &Record - ); - if (Record->DataRecordClass =3D=3D EFI_DATA_RECORD_CLASS_DATA) { - DataHeader =3D (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1); - - if (CompareGuid(&Record->DataRecordGuid, &gEfiMiscSubClassGuid) && - (DataHeader->RecordType =3D=3D EFI_MISC_SYSTEM_MANUFACTURER_REC= ORD_NUMBER)) { -#if defined( RVP_SUPPORT ) && RVP_SUPPORT - // - // System Information - // - SystemManufacturer =3D (EFI_MISC_SYSTEM_MANUFACTURER *)(DataHeade= r + 1); - - // - // UUID (System Information) - // - SMBIOSString =3D EfiLibAllocateZeroPool (0x100); - GuidToString ( &SystemManufacturer->SystemUuid, SMBIOSString, 0x0= 0 ); - - TokenToUpdate =3D (STRING_REF)STR_SYSTEM_UUID_VALUE; - HiiSetString(mHiiHandle, TokenToUpdate, SMBIOSString, NULL); - - gBS->FreePool(SMBIOSString); -#endif - } - } - } while (!EFI_ERROR(Status) && (MonotonicCount !=3D 0)); + UINT32 MicrocodeRevision; + CHAR16 NewString[0x100]; + UINTN TotalMemorySize; + UINT16 MemorySpeed; =20 Status =3D gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, @@ -850,6 +471,8 @@ UpdateAdditionalInformation ( ASSERT_EFI_ERROR (Status); =20 SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + TotalMemorySize =3D 0; + MemorySpeed =3D 0xffff; do { Status =3D Smbios->GetNext ( Smbios, @@ -858,6 +481,70 @@ UpdateAdditionalInformation ( &SmbiosRecord, NULL ); + + + if (SmbiosRecord->Type =3D=3D EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) = { + Type4Record =3D (SMBIOS_TABLE_TYPE4 *) SmbiosRecord; + UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GHz", + Type4Record->CurrentSpeed / 1000, + Type4Record->CurrentSpeed % 1000 + ); + HiiSetString (mHiiHandle, STR_PROCESSOR_SPEED_VALUE, NewString, NUL= L); + + StrIndex =3D Type4Record->ProcessorVersion; + GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Recor= d->Hdr.Length), StrIndex, &ProcessorVersion); + HiiSetString (mHiiHandle, STR_PROCESSOR_VERSION_VALUE, ProcessorVer= sion, NULL); + + MicrocodeRevision =3D (UINT32) RShiftU64 (AsmReadMsr64 (EFI_MSR_IA3= 2_BIOS_SIGN_ID), 32); + UnicodeSPrint (NewString, sizeof (NewString), L"%8x", MicrocodeRevi= sion); + HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString,= NULL); + } + if (SmbiosRecord->Type =3D=3D SMBIOS_TYPE_CACHE_INFORMATION) { + Type7Record =3D (SMBIOS_TABLE_TYPE7 *) SmbiosRecord; + UnicodeSPrint (NewString, sizeof (NewString), L"%d KB", Type7Record= ->InstalledSize); + switch (Type7Record->CacheConfiguration & 0x03) { + case 0: + // + // Level 1 Cache + // + if (Type7Record->SystemCacheType =3D=3D CacheTypeInstruction) { + HiiSetString (mHiiHandle, STR_PROCESSOR_L1_INSTR_CACHE_VALUE, N= ewString, NULL); + } + if (Type7Record->SystemCacheType =3D=3D CacheTypeData) { + HiiSetString (mHiiHandle, STR_PROCESSOR_L1_DATA_CACHE_VALUE, Ne= wString, NULL); + } + break; + case 1: + // + // Level 2 Cache + // + HiiSetString (mHiiHandle, STR_PROCESSOR_L2_CACHE_VALUE, NewString= , NULL); + break; + default: + break; + } + HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString,= NULL); + } + if (SmbiosRecord->Type =3D=3D EFI_SMBIOS_TYPE_MEMORY_DEVICE) { + Type17Record =3D (SMBIOS_TABLE_TYPE17 *) SmbiosRecord; + if (Type17Record->Size > 0) { + if ((Type17Record->Size & BIT15) !=3D 0) { + // + // Size is in KB + // + TotalMemorySize =3D TotalMemorySize + Type17Record->Size; + } else { + // + // Size is in MB + // + TotalMemorySize =3D TotalMemorySize + (UINTN)LShiftU64 (Type17R= ecord->Size, 10); + } + if (Type17Record->Speed < MemorySpeed) { + MemorySpeed =3D Type17Record->Speed; + } + } + } + if (SmbiosRecord->Type =3D=3D EFI_SMBIOS_TYPE_BIOS_INFORMATION) { Type0Record =3D (SMBIOS_TABLE_TYPE0 *) SmbiosRecord; StrIndex =3D Type0Record->BiosVersion; @@ -884,6 +571,16 @@ UpdateAdditionalInformation ( } } while (!EFI_ERROR(Status)); =20 + if ((TotalMemorySize % 1024) !=3D 0) { + UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GB", TotalMemor= ySize / 1024, ((TotalMemorySize % 1024) * 100) / 1024); + } else { + UnicodeSPrint (NewString, sizeof (NewString), L"%d GB", TotalMemorySi= ze / 1024); + } + HiiSetString (mHiiHandle, STR_TOTAL_MEMORY_SIZE_VALUE, NewString, NULL)= ; + + UnicodeSPrint (NewString, sizeof (NewString), L"%d MHz", MemorySpeed); + HiiSetString(mHiiHandle, STR_SYSTEM_MEMORY_SPEED_VALUE, NewString, NULL= ); + UpdateLatestBootTime(); =20 return EFI_SUCCESS; diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h= b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h index e339b31065..f95e6bbc2d 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h @@ -3,11 +3,10 @@ =20 This file includes package header files, library classes and protocol, = PPI & GUID definitions. =20 - Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
- = =20 + Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 **/ =20 #ifndef __COMMON_HEADER_H_ @@ -15,11 +14,10 @@ =20 =20 =20 -#include +#include #include #include =20 -#include #include =20 #include @@ -36,4 +34,6 @@ #include #include =20 +#include "DataHubRecords.h" + #endif diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords= .h b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h new file mode 100644 index 0000000000..f57a5a8c0f --- /dev/null +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h @@ -0,0 +1,2934 @@ +/** @file + DataHubRecord.h includes all data hub subclass GUID definitions. + + This file includes all data hub sub class defitions from + Cache subclass specification 0.9, DataHub SubClass specification 0.9, M= emory SubClass Spec 0.9, + Processor Subclass specification 0.9, and Misc SubClass specification 0= .9. + +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ +#ifndef _DATAHUB_RECORDS_GUID_H_ +#define _DATAHUB_RECORDS_GUID_H_ + +// +// Local defintion of STRING_REF +// +typedef UINT16 STRING_REF; + +// +// The include is required to retrieve type EFI_EXP_BASE10_DATA +// +#include + +#define EFI_PROCESSOR_SUBCLASS_GUID \ + { 0x26fdeb7e, 0xb8af, 0x4ccf, {0xaa, 0x97, 0x02, 0x63, 0x3c, 0xe4, 0x8c= , 0xa7 } } + +extern EFI_GUID gEfiProcessorSubClassGuid; + + +#define EFI_CACHE_SUBCLASS_GUID \ + { 0x7f0013a7, 0xdc79, 0x4b22, {0x80, 0x99, 0x11, 0xf7, 0x5f, 0xdc, 0x82= , 0x9d } } + +extern EFI_GUID gEfiCacheSubClassGuid; + +/// +/// The memory subclass belongs to the data class and is identified as th= e memory +/// subclass by the GUID. +/// +#define EFI_MEMORY_SUBCLASS_GUID \ + {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50,= 0x97} } + +extern EFI_GUID gEfiMemorySubClassGuid; + +#define EFI_MISC_SUBCLASS_GUID \ + { 0x772484B2, 0x7482, 0x4b91, {0x9F, 0x9A, 0xAD, 0x43, 0xF8, 0x1C, 0x58= , 0x81 } } + +extern EFI_GUID gEfiMiscSubClassGuid; + + +/// +/// Inconsistent with specification here: +/// In ProcSubclass specification 0.9, the value is 0x0100. +/// Keep it unchanged from the perspective of binary consistency. +/// +#define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000 + +#pragma pack(1) + +typedef struct _USB_PORT_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH PciBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} USB_PORT_DEVICE_PATH; + +// +// IDE +// +typedef struct _IDE_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH PciBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} IDE_DEVICE_PATH; + +// +// RMC Connector +// +typedef struct _RMC_CONN_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH PciBridgeDevicePath; + PCI_DEVICE_PATH PciBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} RMC_CONN_DEVICE_PATH; + +// +// RIDE +// +typedef struct _RIDE_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH PciBridgeDevicePath; + PCI_DEVICE_PATH PciBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} RIDE_DEVICE_PATH; + +// +// Gigabit NIC +// +typedef struct _GB_NIC_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH PciBridgeDevicePath; + PCI_DEVICE_PATH PciXBridgeDevicePath; + PCI_DEVICE_PATH PciXBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} GB_NIC_DEVICE_PATH; + +// +// P/S2 Connector +// +typedef struct _PS2_CONN_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH LpcBridgeDevicePath; + ACPI_HID_DEVICE_PATH LpcBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} PS2_CONN_DEVICE_PATH; + +// +// Serial Port Connector +// +typedef struct _SERIAL_CONN_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH LpcBridgeDevicePath; + ACPI_HID_DEVICE_PATH LpcBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} SERIAL_CONN_DEVICE_PATH; + +// +// Parallel Port Connector +// +typedef struct _PARALLEL_CONN_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH LpcBridgeDevicePath; + ACPI_HID_DEVICE_PATH LpcBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} PARALLEL_CONN_DEVICE_PATH; + +// +// Floopy Connector +// +typedef struct _FLOOPY_CONN_DEVICE_PATH { + ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath; + PCI_DEVICE_PATH LpcBridgeDevicePath; + ACPI_HID_DEVICE_PATH LpcBusDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} FLOOPY_CONN_DEVICE_PATH; + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, this data structure and corrspondi= ng fields are NOT defined. +/// It's implementation-specific to simplify the code logic. +/// +typedef union _EFI_MISC_PORT_DEVICE_PATH { + USB_PORT_DEVICE_PATH UsbDevicePath; + IDE_DEVICE_PATH IdeDevicePath; + RMC_CONN_DEVICE_PATH RmcConnDevicePath; + RIDE_DEVICE_PATH RideDevicePath; + GB_NIC_DEVICE_PATH GbNicDevicePath; + PS2_CONN_DEVICE_PATH Ps2ConnDevicePath; + SERIAL_CONN_DEVICE_PATH SerialConnDevicePath; + PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath; + FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath; +} EFI_MISC_PORT_DEVICE_PATH; + +#pragma pack() + +/// +/// String Token Definition +/// +/// Inconsistent with specification here: +/// The macro isn't defined by any specification. +/// Keep it unchanged for backward compatibility. +/// +#define EFI_STRING_TOKEN UINT16 + +/// +/// Each data record that is a member of some subclass starts with a stan= dard +/// header of type EFI_SUBCLASS_TYPE1_HEADER. +/// This header is only a guideline and applicable only to a data +/// subclass that is producing SMBIOS data records. A subclass can start = with a +/// different header if needed. +/// +typedef struct { + /// + /// The version of the specification to which a specific subclass data = record adheres. + /// + UINT32 Version; + /// + /// The size in bytes of this data class header. + /// + UINT32 HeaderSize; + /// + /// The instance number of the subclass with the same ProducerName. Thi= s number is + /// applicable in cases where multiple subclass instances that were pro= duced by the same + /// driver exist in the system. This entry is 1 based; 0 means Reserved= and -1 means Not + /// Applicable. All data consumer drivers should be able to handle all = the possible values + /// of Instance, including Not Applicable and Reserved. + /// + UINT16 Instance; + /// + /// The instance number of the RecordType for the same Instance. This n= umber is + /// applicable in cases where multiple instances of the RecordType exis= t for a specific + /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not = Applicable. + /// All data consumer drivers should be able to handle all the possible= values of + /// SubInstance, including Not Applicable and Reserved. + /// + UINT16 SubInstance; + /// + /// The record number for the data record being specified. The numberin= g scheme and + /// definition is defined in the specific subclass specification. + /// + UINT32 RecordType; +} EFI_SUBCLASS_TYPE1_HEADER; + +/// +/// This structure is used to link data records in the same subclasses. A= data record is +/// defined as a link to another data record in the same subclass using t= his structure. +/// +typedef struct { + /// + /// An EFI_GUID that identifies the component that produced this data r= ecord. Type + /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 S= pecification. + /// + EFI_GUID ProducerName; + /// + /// The instance number of the subclass with the same ProducerName. Thi= s number is + /// applicable in cases where multiple subclass instances that were pro= duced by the same + /// driver exist in the system. This entry is 1 based; 0 means Reserved= and -1 means Not + /// Applicable. All data consumer drivers should be able to handle all = the possible values + /// of Instance, including Not Applicable and Reserved. + /// + UINT16 Instance; + /// The instance number of the RecordType for the same Instance. This n= umber is + /// applicable in cases where multiple instances of the RecordType exis= t for a specific + /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not = Applicable. + /// All data consumer drivers should be able to handle all the possible= values of + /// SubInstance, including Not Applicable and Reserved. + UINT16 SubInstance; +} EFI_INTER_LINK_DATA; + +// +// EXP data +// +/// +/// This macro provides a calculation for base-10 representations. Value = and Exponent are each +/// INT16. It is signed to cover negative values and is 16 bits wide (15 = bits for data and 1 bit +/// for the sign). +/// +typedef struct { + /// + /// The INT16 number by which to multiply the base-10 representation. + /// + UINT16 Value; + /// + /// The INT16 number by which to raise the base-10 calculation. + /// + UINT16 Exponent; +} EFI_EXP_BASE2_DATA; + +typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA; +typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA; +typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA; + +/// +/// This data record refers to the list of frequencies that the processor= core supports. The list of +/// supported frequencies is determined by the firmware based on hardware= capabilities--for example, +/// it could be a common subset of all processors and the chipset. The un= it of measurement of this data +/// record is in Hertz. For asynchronous processors, the content of this = data record is zero. +/// The list is terminated by -1 in the Value field of the last element. = A Value field of zero means +/// that the processor/driver supports automatic frequency selection. +/// +/// Inconsistent with specification here: +/// According to MiscSubclass 0.9 specification, it should be a pointer s= ince it refers to a list of frequencies. +/// +typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DAT= A; + +/// +/// This data record refers to the list of supported frequencies of the p= rocessor external bus. The list of +/// supported frequencies is determined by the firmware based on hardware= capabilities--for example, +/// it could be a common subset of all processors and the chipset. The un= it of measurement of this data +/// record is in Hertz. For asynchronous processors, the content of this = data record is NULL. +/// The list is terminated by -1 in the Value field of the last element. = A Value field of zero means +/// that the processor/driver supports automatic frequency selection. +/// +typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA= ; +typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA; +typedef STRING_REF EFI_PROCESSOR_VERSION_DATA; +typedef STRING_REF EFI_PROCESSOR_MANUFACTURER_DATA; +typedef STRING_REF EFI_PROCESSOR_SERIAL_NUMBER_DATA; +typedef STRING_REF EFI_PROCESSOR_ASSET_TAG_DATA; +typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA; + +typedef struct { + UINT32 ProcessorSteppingId:4; + UINT32 ProcessorModel: 4; + UINT32 ProcessorFamily: 4; + UINT32 ProcessorType: 2; + UINT32 ProcessorReserved1: 2; + UINT32 ProcessorXModel: 4; + UINT32 ProcessorXFamily: 8; + UINT32 ProcessorReserved2: 4; +} EFI_PROCESSOR_SIGNATURE; + + +/// +/// Inconsistent with specification here: +/// The name of third field in ProcSubClass specification 0.9 is LogicalP= rocessorCount. +/// Keep it unchanged for backward compatibility. +/// +typedef struct { + UINT32 ProcessorBrandIndex :8; + UINT32 ProcessorClflush :8; + UINT32 ProcessorReserved :8; + UINT32 ProcessorDfltApicId :8; +} EFI_PROCESSOR_MISC_INFO; + +typedef struct { + UINT32 ProcessorFpu: 1; + UINT32 ProcessorVme: 1; + UINT32 ProcessorDe: 1; + UINT32 ProcessorPse: 1; + UINT32 ProcessorTsc: 1; + UINT32 ProcessorMsr: 1; + UINT32 ProcessorPae: 1; + UINT32 ProcessorMce: 1; + UINT32 ProcessorCx8: 1; + UINT32 ProcessorApic: 1; + UINT32 ProcessorReserved1: 1; + UINT32 ProcessorSep: 1; + UINT32 ProcessorMtrr: 1; + UINT32 ProcessorPge: 1; + UINT32 ProcessorMca: 1; + UINT32 ProcessorCmov: 1; + UINT32 ProcessorPat: 1; + UINT32 ProcessorPse36: 1; + UINT32 ProcessorPsn: 1; + UINT32 ProcessorClfsh: 1; + UINT32 ProcessorReserved2: 1; + UINT32 ProcessorDs: 1; + UINT32 ProcessorAcpi: 1; + UINT32 ProcessorMmx: 1; + UINT32 ProcessorFxsr: 1; + UINT32 ProcessorSse: 1; + UINT32 ProcessorSse2: 1; + UINT32 ProcessorSs: 1; + UINT32 ProcessorReserved3: 1; + UINT32 ProcessorTm: 1; + UINT32 ProcessorReserved4: 2; +} EFI_PROCESSOR_FEATURE_FLAGS; + +/// +/// This data record refers to the unique ID that identifies a set of pro= cessors. This data record is 16 +/// bytes in length. The data in this structure is processor specific and= reserved values can be defined +/// for future use. The consumer of this data should not make any assumpt= ion and should use this data +/// with respect to the processor family defined in the Family record num= ber. +/// +typedef struct { + /// + /// Identifies the processor. + /// + EFI_PROCESSOR_SIGNATURE Signature; + /// + /// Provides additional processor information. + /// + EFI_PROCESSOR_MISC_INFO MiscInfo; + /// + /// Reserved for future use. + /// + UINT32 Reserved; + /// + /// Provides additional processor information. + /// + EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags; +} EFI_PROCESSOR_ID_DATA; + +/// +/// This data record refers to the general classification of the processo= r. This data record is 4 bytes in +/// length. +/// +typedef enum { + EfiProcessorOther =3D 1, + EfiProcessorUnknown =3D 2, + EfiCentralProcessor =3D 3, + EfiMathProcessor =3D 4, + EfiDspProcessor =3D 5, + EfiVideoProcessor =3D 6 +} EFI_PROCESSOR_TYPE_DATA; + +/// +/// This data record refers to the family of the processor as defined by = the DMTF. +/// This data record is 4 bytes in length. +/// +typedef enum { + EfiProcessorFamilyOther =3D 0x01, + EfiProcessorFamilyUnknown =3D 0x02, + EfiProcessorFamily8086 =3D 0x03, + EfiProcessorFamily80286 =3D 0x04, + EfiProcessorFamilyIntel386 =3D 0x05, + EfiProcessorFamilyIntel486 =3D 0x06, + EfiProcessorFamily8087 =3D 0x07, + EfiProcessorFamily80287 =3D 0x08, + EfiProcessorFamily80387 =3D 0x09, + EfiProcessorFamily80487 =3D 0x0A, + EfiProcessorFamilyPentium =3D 0x0B, + EfiProcessorFamilyPentiumPro =3D 0x0C, + EfiProcessorFamilyPentiumII =3D 0x0D, + EfiProcessorFamilyPentiumMMX =3D 0x0E, + EfiProcessorFamilyCeleron =3D 0x0F, + EfiProcessorFamilyPentiumIIXeon =3D 0x10, + EfiProcessorFamilyPentiumIII =3D 0x11, + EfiProcessorFamilyM1 =3D 0x12, + EfiProcessorFamilyM2 =3D 0x13, + EfiProcessorFamilyM1Reserved2 =3D 0x14, + EfiProcessorFamilyM1Reserved3 =3D 0x15, + EfiProcessorFamilyM1Reserved4 =3D 0x16, + EfiProcessorFamilyM1Reserved5 =3D 0x17, + EfiProcessorFamilyAmdDuron =3D 0x18, + EfiProcessorFamilyK5 =3D 0x19, + EfiProcessorFamilyK6 =3D 0x1A, + EfiProcessorFamilyK6_2 =3D 0x1B, + EfiProcessorFamilyK6_3 =3D 0x1C, + EfiProcessorFamilyAmdAthlon =3D 0x1D, + EfiProcessorFamilyAmd29000 =3D 0x1E, + EfiProcessorFamilyK6_2Plus =3D 0x1F, + EfiProcessorFamilyPowerPC =3D 0x20, + EfiProcessorFamilyPowerPC601 =3D 0x21, + EfiProcessorFamilyPowerPC603 =3D 0x22, + EfiProcessorFamilyPowerPC603Plus =3D 0x23, + EfiProcessorFamilyPowerPC604 =3D 0x24, + EfiProcessorFamilyPowerPC620 =3D 0x25, + EfiProcessorFamilyPowerPCx704 =3D 0x26, + EfiProcessorFamilyPowerPC750 =3D 0x27, + EfiProcessorFamilyAlpha3 =3D 0x30, + EfiProcessorFamilyAlpha21064 =3D 0x31, + EfiProcessorFamilyAlpha21066 =3D 0x32, + EfiProcessorFamilyAlpha21164 =3D 0x33, + EfiProcessorFamilyAlpha21164PC =3D 0x34, + EfiProcessorFamilyAlpha21164a =3D 0x35, + EfiProcessorFamilyAlpha21264 =3D 0x36, + EfiProcessorFamilyAlpha21364 =3D 0x37, + EfiProcessorFamilyMips =3D 0x40, + EfiProcessorFamilyMIPSR4000 =3D 0x41, + EfiProcessorFamilyMIPSR4200 =3D 0x42, + EfiProcessorFamilyMIPSR4400 =3D 0x43, + EfiProcessorFamilyMIPSR4600 =3D 0x44, + EfiProcessorFamilyMIPSR10000 =3D 0x45, + EfiProcessorFamilySparc =3D 0x50, + EfiProcessorFamilySuperSparc =3D 0x51, + EfiProcessorFamilymicroSparcII =3D 0x52, + EfiProcessorFamilymicroSparcIIep =3D 0x53, + EfiProcessorFamilyUltraSparc =3D 0x54, + EfiProcessorFamilyUltraSparcII =3D 0x55, + EfiProcessorFamilyUltraSparcIIi =3D 0x56, + EfiProcessorFamilyUltraSparcIII =3D 0x57, + /// + /// Inconsistent with specification here: + /// This field in ProcSubClass specification 0.9 is defined as EfiProce= ssorFamilyUltraSparcIIi. + /// Change it to EfiProcessorFamilyUltraSparcIIIi to avoid build break. + /// + EfiProcessorFamilyUltraSparcIIIi =3D 0x58, + EfiProcessorFamily68040 =3D 0x60, + EfiProcessorFamily68xxx =3D 0x61, + EfiProcessorFamily68000 =3D 0x62, + EfiProcessorFamily68010 =3D 0x63, + EfiProcessorFamily68020 =3D 0x64, + EfiProcessorFamily68030 =3D 0x65, + EfiProcessorFamilyHobbit =3D 0x70, + EfiProcessorFamilyCrusoeTM5000 =3D 0x78, + EfiProcessorFamilyCrusoeTM3000 =3D 0x79, + EfiProcessorFamilyEfficeonTM8000 =3D 0x7A, + EfiProcessorFamilyWeitek =3D 0x80, + EfiProcessorFamilyItanium =3D 0x82, + EfiProcessorFamilyAmdAthlon64 =3D 0x83, + EfiProcessorFamilyAmdOpteron =3D 0x84, + EfiProcessorFamilyAmdSempron =3D 0x85, + EfiProcessorFamilyAmdTurion64Mobile =3D 0x86, + EfiProcessorFamilyDualCoreAmdOpteron =3D 0x87, + EfiProcessorFamilyAmdAthlon64X2DualCore =3D 0x88, + EfiProcessorFamilyAmdTurion64X2Mobile =3D 0x89, + EfiProcessorFamilyPARISC =3D 0x90, + EfiProcessorFamilyPaRisc8500 =3D 0x91, + EfiProcessorFamilyPaRisc8000 =3D 0x92, + EfiProcessorFamilyPaRisc7300LC =3D 0x93, + EfiProcessorFamilyPaRisc7200 =3D 0x94, + EfiProcessorFamilyPaRisc7100LC =3D 0x95, + EfiProcessorFamilyPaRisc7100 =3D 0x96, + EfiProcessorFamilyV30 =3D 0xA0, + EfiProcessorFamilyPentiumIIIXeon =3D 0xB0, + EfiProcessorFamilyPentiumIIISpeedStep =3D 0xB1, + EfiProcessorFamilyPentium4 =3D 0xB2, + EfiProcessorFamilyIntelXeon =3D 0xB3, + EfiProcessorFamilyAS400 =3D 0xB4, + EfiProcessorFamilyIntelXeonMP =3D 0xB5, + EfiProcessorFamilyAMDAthlonXP =3D 0xB6, + EfiProcessorFamilyAMDAthlonMP =3D 0xB7, + EfiProcessorFamilyIntelItanium2 =3D 0xB8, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelPentiumM =3D 0xB9, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelCeleronD =3D 0xBA, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelPentiumD =3D 0xBB, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelPentiumEx =3D 0xBC, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelCoreSolo =3D 0xBD, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyReserved =3D 0xBE, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIntelCore2 =3D 0xBF, + EfiProcessorFamilyIBM390 =3D 0xC8, + EfiProcessorFamilyG4 =3D 0xC9, + EfiProcessorFamilyG5 =3D 0xCA, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's = introduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyG6 =3D 0xCB, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyzArchitectur =3D 0xCC, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyViaC7M =3D 0xD2, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyViaC7D =3D 0xD3, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyViaC7 =3D 0xD4, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyViaEden =3D 0xD5, + EfiProcessorFamilyi860 =3D 0xFA, + EfiProcessorFamilyi960 =3D 0xFB, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyIndicatorFamily2 =3D 0xFE, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorFamilyReserved1 =3D 0xFF +} EFI_PROCESSOR_FAMILY_DATA; + +typedef enum { + EfiProcessorFamilySh3 =3D 0x104, + EfiProcessorFamilySh4 =3D 0x105, + EfiProcessorFamilyArm =3D 0x118, + EfiProcessorFamilyStrongArm =3D 0x119, + EfiProcessorFamily6x86 =3D 0x12C, + EfiProcessorFamilyMediaGx =3D 0x12D, + EfiProcessorFamilyMii =3D 0x12E, + EfiProcessorFamilyWinChip =3D 0x140, + EfiProcessorFamilyDsp =3D 0x15E, + EfiProcessorFamilyVideo =3D 0x1F4 +} EFI_PROCESSOR_FAMILY2_DATA; + +/// +/// This data record refers to the core voltage of the processor being de= fined. The unit of measurement +/// of this data record is in volts. +/// +typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA; + +/// +/// This data record refers to the base address of the APIC of the proces= sor being defined. This data +/// record is a physical address location. +/// +typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA; + +/// +/// This data record refers to the ID of the APIC of the processor being = defined. This data record is a +/// 4-byte entry. +/// +typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA; + +/// +/// This data record refers to the version number of the APIC of the proc= essor being defined. This data +/// record is a 4-byte entry. +/// +typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DAT= A; + +typedef enum { + EfiProcessorIa32Microcode =3D 1, + EfiProcessorIpfPalAMicrocode =3D 2, + EfiProcessorIpfPalBMicrocode =3D 3 +} EFI_PROCESSOR_MICROCODE_TYPE; + +/// +/// This data record refers to the revision of the processor microcode th= at is loaded in the processor. +/// This data record is a 4-byte entry. +/// +typedef struct { + /// + /// Identifies what type of microcode the data is. + /// + EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType; + /// + /// Indicates the revision number of this microcode. + /// + UINT32 ProcessorMicrocodeRevisionNumber; +} EFI_PROCESSOR_MICROCODE_REVISION_DATA; + +/// +/// This data record refers to the status of the processor. +/// +typedef struct { + UINT32 CpuStatus :3; ///< Indicates the status of= the processor. + UINT32 Reserved1 :3; ///< Reserved for future use= . Should be set to zero. + UINT32 SocketPopulated :1; ///< Indicates if the proces= sor is socketed or not. + UINT32 Reserved2 :1; ///< Reserved for future use= . Should be set to zero. + UINT32 ApicEnable :1; ///< Indicates if the APIC i= s enabled or not. + UINT32 BootApplicationProcessor :1; ///< Indicates if this proce= ssor is the boot processor. + UINT32 Reserved3 :22;///< Reserved for future use= . Should be set to zero. +} EFI_PROCESSOR_STATUS_DATA; + +typedef enum { + EfiCpuStatusUnknown =3D 0, + EfiCpuStatusEnabled =3D 1, + EfiCpuStatusDisabledByUser =3D 2, + EfiCpuStatusDisabledbyBios =3D 3, + EfiCpuStatusIdle =3D 4, + EfiCpuStatusOther =3D 7 +} EFI_CPU_STATUS; + +typedef enum { + EfiProcessorSocketOther =3D 1, + EfiProcessorSocketUnknown =3D 2, + EfiProcessorSocketDaughterBoard =3D 3, + EfiProcessorSocketZIF =3D 4, + EfiProcessorSocketReplacePiggyBack =3D 5, + EfiProcessorSocketNone =3D 6, + EfiProcessorSocketLIF =3D 7, + EfiProcessorSocketSlot1 =3D 8, + EfiProcessorSocketSlot2 =3D 9, + EfiProcessorSocket370Pin =3D 0xA, + EfiProcessorSocketSlotA =3D 0xB, + EfiProcessorSocketSlotM =3D 0xC, + EfiProcessorSocket423 =3D 0xD, + EfiProcessorSocketA462 =3D 0xE, + EfiProcessorSocket478 =3D 0xF, + EfiProcessorSocket754 =3D 0x10, + EfiProcessorSocket940 =3D 0x11, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorSocket939 =3D 0x12, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorSocketmPGA604 =3D 0x13, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorSocketLGA771 =3D 0x14, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in ProcSubClass specification 0.9. It's i= ntroduced for SMBIOS2.6 specification. + /// + EfiProcessorSocketLGA775 =3D 0x15 + +} EFI_PROCESSOR_SOCKET_TYPE_DATA; + +typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA; + +/// +/// Inconsistent with specification here: +/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_CACHE_= ASSOCIATION_DATA. +/// Keep it unchanged for backward compatibilty. +/// +typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA; + +/// +/// This data record refers to the health status of the processor. +/// +/// Inconsistent with specification here: +/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_HEALTH= _STATUS_DATA. +/// Keep it unchanged for backward compatibilty. +/// +typedef enum { + EfiProcessorHealthy =3D 1, + EfiProcessorPerfRestricted =3D 2, + EfiProcessorFuncRestricted =3D 3 +} EFI_PROCESSOR_HEALTH_STATUS; + +/// +/// This data record refers to the package number of this processor. Mult= iple logical processors can +/// exist in a system and each logical processor can be correlated to the= physical processor using this +/// record type. +/// +typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA; + +typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA; +typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA= ; +typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA; + +typedef struct { + UINT16 Reserved :1; + UINT16 Unknown :1; + UINT16 Capable64Bit :1; + UINT16 Reserved2 :13; +} EFI_PROCESSOR_CHARACTERISTICS_DATA; + +/// +/// Inconsistent with specification here: +/// In ProcSubclass specification 0.9, the enumeration type data structur= e is NOT defined. +/// The equivalent in specification is +/// #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x000000= 01 +/// #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x000000= 02 +/// #define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x000000= 03 +/// #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x000000= 04 +/// #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x000000= 05 +/// #define EFI_PROCESSOR_ID_RECORD_NUMBER 0x000000= 06 +/// #define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x000000= 07 +/// #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x000000= 08 +/// #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x000000= 09 +/// #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x000000= 0A +/// #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x000000= 0B +/// #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x000000= 0C +/// #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x000000= 0D +/// #define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x000000= 0E +/// #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x000000= 0F +/// #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x000000= 10 +/// #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x000000= 11 +/// #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x000000= 12 +/// #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x000000= 13 +/// #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x000000= 14 +/// #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x000000= 15 +/// #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x000000= 16 +/// #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x000000= 17 +/// #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x000000= 18 +/// +/// Keep the definition unchanged for backward compatibility. +typedef enum { + ProcessorCoreFrequencyRecordType =3D 1, + ProcessorFsbFrequencyRecordType =3D 2, + ProcessorVersionRecordType =3D 3, + ProcessorManufacturerRecordType =3D 4, + ProcessorSerialNumberRecordType =3D 5, + ProcessorIdRecordType =3D 6, + ProcessorTypeRecordType =3D 7, + ProcessorFamilyRecordType =3D 8, + ProcessorVoltageRecordType =3D 9, + ProcessorApicBaseAddressRecordType =3D 10, + ProcessorApicIdRecordType =3D 11, + ProcessorApicVersionNumberRecordType =3D 12, + CpuUcodeRevisionDataRecordType =3D 13, + ProcessorStatusRecordType =3D 14, + ProcessorSocketTypeRecordType =3D 15, + ProcessorSocketNameRecordType =3D 16, + CacheAssociationRecordType =3D 17, + ProcessorMaxCoreFrequencyRecordType =3D 18, + ProcessorAssetTagRecordType =3D 19, + ProcessorMaxFsbFrequencyRecordType =3D 20, + ProcessorPackageNumberRecordType =3D 21, + ProcessorCoreFrequencyListRecordType =3D 22, + ProcessorFsbFrequencyListRecordType =3D 23, + ProcessorHealthStatusRecordType =3D 24, + ProcessorCoreCountRecordType =3D 25, + ProcessorEnabledCoreCountRecordType =3D 26, + ProcessorThreadCountRecordType =3D 27, + ProcessorCharacteristicsRecordType =3D 28, + ProcessorFamily2RecordType =3D 29, + ProcessorPartNumberRecordType =3D 30, +} EFI_CPU_VARIABLE_RECORD_TYPE; + +/// +/// Inconsistent with specification here: +/// In ProcSubclass specification 0.9, the union type data structure is N= OT defined. +/// It's implementation-specific to simplify the code logic. +/// +typedef union { + EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList; + EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA ProcessorFsbFrequencyList; + EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber; + EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency; + EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency; + EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency; + EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA ProcessorMaxFsbFrequency; + EFI_PROCESSOR_VERSION_DATA ProcessorVersion; + EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer; + EFI_PROCESSOR_ID_DATA ProcessorId; + EFI_PROCESSOR_TYPE_DATA ProcessorType; + EFI_PROCESSOR_FAMILY_DATA ProcessorFamily; + EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage; + EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA ProcessorApicBase; + EFI_PROCESSOR_APIC_ID_DATA ProcessorApicId; + EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA ProcessorApicVersionNumber; + EFI_PROCESSOR_MICROCODE_REVISION_DATA CpuUcodeRevisionData; + EFI_PROCESSOR_STATUS_DATA ProcessorStatus; + EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType; + EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName; + EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag; + EFI_PROCESSOR_PART_NUMBER_DATA ProcessorPartNumber; + EFI_PROCESSOR_HEALTH_STATUS ProcessorHealthStatus; + EFI_PROCESSOR_PACKAGE_NUMBER_DATA ProcessorPackageNumber; + EFI_PROCESSOR_CORE_COUNT_DATA ProcessorCoreCount; + EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA ProcessorEnabledCoreCount; + EFI_PROCESSOR_THREAD_COUNT_DATA ProcessorThreadCount; + EFI_PROCESSOR_CHARACTERISTICS_DATA ProcessorCharacteristics; + EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2; +} EFI_CPU_VARIABLE_RECORD; + +typedef struct { + EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader; + EFI_CPU_VARIABLE_RECORD VariableRecord; +} EFI_CPU_DATA_RECORD; + +#define EFI_CACHE_SUBCLASS_VERSION 0x00010000 + +typedef EFI_EXP_BASE2_DATA EFI_CACHE_SIZE_DATA; +/// +/// Inconsistent with specification here: +/// In CacheSubclass specification 0.9, the naming is EFI_CACHE_MAXIMUM_S= IZE_DATA. +/// Keep it unchanged for backward compatibilty. +/// +typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA; +typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA; +typedef STRING_REF EFI_CACHE_SOCKET_DATA; + +typedef struct { + UINT32 Other :1; + UINT32 Unknown :1; + UINT32 NonBurst :1; + UINT32 Burst :1; + UINT32 PipelineBurst :1; + /// + /// Inconsistent between CacheSubclass 0.9 and SMBIOS specifications he= re: + /// In CacheSubclass specification 0.9, the sequence of Asynchronous an= d Synchronous fileds + /// are opposite to SMBIOS specification. + /// + UINT32 Asynchronous :1; + UINT32 Synchronous :1; + UINT32 Reserved :25; +} EFI_CACHE_SRAM_TYPE_DATA; + +typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA; + +typedef enum { + EfiCacheErrorOther =3D 1, + EfiCacheErrorUnknown =3D 2, + EfiCacheErrorNone =3D 3, + EfiCacheErrorParity =3D 4, + EfiCacheErrorSingleBit =3D 5, + EfiCacheErrorMultiBit =3D 6 +} EFI_CACHE_ERROR_TYPE_DATA; + +typedef enum { + EfiCacheTypeOther =3D 1, + EfiCacheTypeUnknown =3D 2, + EfiCacheTypeInstruction =3D 3, + EfiCacheTypeData =3D 4, + EfiCacheTypeUnified =3D 5 +} EFI_CACHE_TYPE_DATA; + +typedef enum { + EfiCacheAssociativityOther =3D 1, + EfiCacheAssociativityUnknown =3D 2, + EfiCacheAssociativityDirectMapped =3D 3, + EfiCacheAssociativity2Way =3D 4, + EfiCacheAssociativity4Way =3D 5, + EfiCacheAssociativityFully =3D 6, + EfiCacheAssociativity8Way =3D 7, + EfiCacheAssociativity16Way =3D 8 +} EFI_CACHE_ASSOCIATIVITY_DATA; + +/// +/// Inconsistent with specification here: +/// In CacheSubclass 0.9 specification. It defines the field type as UINT= 16. +/// In fact, it should be UINT32 type because it refers to a 32bit width = data. +/// +typedef struct { + UINT32 Level :3; + UINT32 Socketed :1; + UINT32 Reserved2 :1; + UINT32 Location :2; + UINT32 Enable :1; + UINT32 OperationalMode :2; + UINT32 Reserved1 :22; +} EFI_CACHE_CONFIGURATION_DATA; + +#define EFI_CACHE_L1 1 +#define EFI_CACHE_L2 2 +#define EFI_CACHE_L3 3 +#define EFI_CACHE_L4 4 +#define EFI_CACHE_LMAX EFI_CACHE_L4 + +#define EFI_CACHE_SOCKETED 1 +#define EFI_CACHE_NOT_SOCKETED 0 + +typedef enum { + EfiCacheInternal =3D 0, + EfiCacheExternal =3D 1, + EfiCacheReserved =3D 2, + EfiCacheUnknown =3D 3 +} EFI_CACHE_LOCATION; + +#define EFI_CACHE_ENABLED 1 +#define EFI_CACHE_DISABLED 0 + +typedef enum { + EfiCacheWriteThrough =3D 0, + EfiCacheWriteBack =3D 1, + EfiCacheDynamicMode =3D 2, + EfiCacheUnknownMode =3D 3 +} EFI_CACHE_OPERATIONAL_MODE; + + +/// +/// Inconsistent with specification here: +/// In CacheSubclass specification 0.9, the enumeration type data structu= re is NOT defined. +/// The equivalent in specification is +/// #define EFI_CACHE_SIZE_RECORD_NUMBER 0x000000= 01 +/// #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x000000= 02 +/// #define EFI_CACHE_SPEED_RECORD_NUMBER 0x000000= 03 +/// #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x000000= 04 +/// #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x000000= 05 +/// #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x000000= 06 +/// #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x000000= 07 +/// #define EFI_CACHE_TYPE_RECORD_NUMBER 0x000000= 08 +/// #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x000000= 09 +/// #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x000000= 0A +/// Keep the definition unchanged for backward compatibility. +/// +typedef enum { + CacheSizeRecordType =3D 1, + MaximumSizeCacheRecordType =3D 2, + CacheSpeedRecordType =3D 3, + CacheSocketRecordType =3D 4, + CacheSramTypeRecordType =3D 5, + CacheInstalledSramTypeRecordType =3D 6, + CacheErrorTypeRecordType =3D 7, + CacheTypeRecordType =3D 8, + CacheAssociativityRecordType =3D 9, + CacheConfigRecordType =3D 10 +} EFI_CACHE_VARIABLE_RECORD_TYPE; + +/// +/// Inconsistent with specification here: +/// In CacheSubclass specification 0.9, the union type data structure is = NOT defined. +/// It's implementation-specific to simplify the code logic. +/// +typedef union { + EFI_CACHE_SIZE_DATA CacheSize; + EFI_MAXIMUM_CACHE_SIZE_DATA MaximumCacheSize; + EFI_CACHE_SPEED_DATA CacheSpeed; + EFI_CACHE_SOCKET_DATA CacheSocket; + EFI_CACHE_SRAM_TYPE_DATA CacheSramType; + EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType; + EFI_CACHE_ERROR_TYPE_DATA CacheErrorType; + EFI_CACHE_TYPE_DATA CacheType; + EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity; + EFI_CACHE_CONFIGURATION_DATA CacheConfig; + EFI_CACHE_ASSOCIATION_DATA CacheAssociation; +} EFI_CACHE_VARIABLE_RECORD; + +typedef struct { + EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader; + EFI_CACHE_VARIABLE_RECORD VariableRecord; +} EFI_CACHE_DATA_RECORD; + +#define EFI_MEMORY_SUBCLASS_VERSION 0x0100 +#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001 + +typedef enum _EFI_MEMORY_REGION_TYPE { + EfiMemoryRegionMemory =3D 0x01, + EfiMemoryRegionReserved =3D 0x02, + EfiMemoryRegionAcpi =3D 0x03, + EfiMemoryRegionNvs =3D 0x04 +} EFI_MEMORY_REGION_TYPE; + +/// +/// This data record refers to the size of a memory region. The regions t= hat are +/// described can refer to physical memory, memory-mapped I/O, or reserve= d BIOS memory regions. +/// The unit of measurement of this data record is in bytes. +/// +typedef struct { + /// + /// A zero-based value that indicates which processor(s) can access the= memory region. + /// A value of 0xFFFF indicates the region is accessible by all process= ors. + /// + UINT32 ProcessorNumber; + /// + /// A zero-based value that indicates the starting bus that can access = the memory region. + /// + UINT16 StartBusNumber; + /// + /// A zero-based value that indicates the ending bus that can access th= e memory region. + /// A value of 0xFF for a PCI system indicates the region is accessible= by all buses and + /// is global in scope. An example of the EndBusNumber not being 0xFF i= s a system + /// with two or more peer-to-host PCI bridges. + /// + UINT16 EndBusNumber; + /// + /// The type of memory region from the operating system's point of view= . + /// MemoryRegionType values are equivalent to the legacy INT 15 AX =3D = E820 BIOS + /// command values. + /// + EFI_MEMORY_REGION_TYPE MemoryRegionType; + /// + /// The size of the memory region in bytes. + /// + EFI_EXP_BASE2_DATA MemorySize; + /// + /// The starting physical address of the memory region. + /// + EFI_PHYSICAL_ADDRESS MemoryStartAddress; +} EFI_MEMORY_SIZE_DATA; + + +#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002 + +typedef enum _EFI_MEMORY_ARRAY_LOCATION { + EfiMemoryArrayLocationOther =3D 0x01, + EfiMemoryArrayLocationUnknown =3D 0x02, + EfiMemoryArrayLocationSystemBoard =3D 0x03, + EfiMemoryArrayLocationIsaAddonCard =3D 0x04, + EfiMemoryArrayLocationEisaAddonCard =3D 0x05, + EfiMemoryArrayLocationPciAddonCard =3D 0x06, + EfiMemoryArrayLocationMcaAddonCard =3D 0x07, + EfiMemoryArrayLocationPcmciaAddonCard =3D 0x08, + EfiMemoryArrayLocationProprietaryAddonCard =3D 0x09, + EfiMemoryArrayLocationNuBus =3D 0x0A, + EfiMemoryArrayLocationPc98C20AddonCard =3D 0xA0, + EfiMemoryArrayLocationPc98C24AddonCard =3D 0xA1, + EfiMemoryArrayLocationPc98EAddonCard =3D 0xA2, + EfiMemoryArrayLocationPc98LocalBusAddonCard =3D 0xA3 +} EFI_MEMORY_ARRAY_LOCATION; + +typedef enum _EFI_MEMORY_ARRAY_USE { + EfiMemoryArrayUseOther =3D 0x01, + EfiMemoryArrayUseUnknown =3D 0x02, + EfiMemoryArrayUseSystemMemory =3D 0x03, + EfiMemoryArrayUseVideoMemory =3D 0x04, + EfiMemoryArrayUseFlashMemory =3D 0x05, + EfiMemoryArrayUseNonVolatileRam =3D 0x06, + EfiMemoryArrayUseCacheMemory =3D 0x07 +} EFI_MEMORY_ARRAY_USE; + +typedef enum _EFI_MEMORY_ERROR_CORRECTION { + EfiMemoryErrorCorrectionOther =3D 0x01, + EfiMemoryErrorCorrectionUnknown =3D 0x02, + EfiMemoryErrorCorrectionNone =3D 0x03, + EfiMemoryErrorCorrectionParity =3D 0x04, + EfiMemoryErrorCorrectionSingleBitEcc =3D 0x05, + EfiMemoryErrorCorrectionMultiBitEcc =3D 0x06, + EfiMemoryErrorCorrectionCrc =3D 0x07 +} EFI_MEMORY_ERROR_CORRECTION; + +/// +/// This data record refers to the physical memory array. This data recor= d is a structure. +/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is i= n SMBIOS 2.3.4: +/// - Table 3.3.17.1, Type 16, Offset 0x4 +/// - Table 3.3.17.2, Type 16, Offset 0x5 +/// - Table 3.3.17.3, Type 16, with the following offsets: +/// -- Offset 0x6 +/// -- Offset 0x7 +/// -- Offset 0xB +/// -- Offset 0xD +/// +typedef struct { + /// + /// The physical location of the memory array. + /// + EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation; + /// + /// The memory array usage. + /// + EFI_MEMORY_ARRAY_USE MemoryArrayUse; + /// + /// The primary error correction or detection supported by this memory = array. + /// + EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection; + /// + /// The maximum memory capacity size in kilobytes. If capacity is unkno= wn, then + /// values of MaximumMemoryCapacity.Value =3D 0x00 and + /// MaximumMemoryCapacity.Exponent =3D 0x8000 are used. + /// + EFI_EXP_BASE2_DATA MaximumMemoryCapacity; + /// + /// The number of memory slots or sockets that are available for memory= devices + /// in this array. + /// + UINT16 NumberMemoryDevices; +} EFI_MEMORY_ARRAY_LOCATION_DATA; + + +#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003 + +typedef enum _EFI_MEMORY_FORM_FACTOR { + EfiMemoryFormFactorOther =3D 0x01, + EfiMemoryFormFactorUnknown =3D 0x02, + EfiMemoryFormFactorSimm =3D 0x03, + EfiMemoryFormFactorSip =3D 0x04, + EfiMemoryFormFactorChip =3D 0x05, + EfiMemoryFormFactorDip =3D 0x06, + EfiMemoryFormFactorZip =3D 0x07, + EfiMemoryFormFactorProprietaryCard =3D 0x08, + EfiMemoryFormFactorDimm =3D 0x09, + EfiMemoryFormFactorTsop =3D 0x0A, + EfiMemoryFormFactorRowOfChips =3D 0x0B, + EfiMemoryFormFactorRimm =3D 0x0C, + EfiMemoryFormFactorSodimm =3D 0x0D, + EfiMemoryFormFactorSrimm =3D 0x0E, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in MemSubClass specification 0.9. It's in= troduced for SMBIOS2.6 specification. + /// + EfiMemoryFormFactorFbDimm =3D 0x0F +} EFI_MEMORY_FORM_FACTOR; + +typedef enum _EFI_MEMORY_ARRAY_TYPE { + EfiMemoryTypeOther =3D 0x01, + EfiMemoryTypeUnknown =3D 0x02, + EfiMemoryTypeDram =3D 0x03, + EfiMemoryTypeEdram =3D 0x04, + EfiMemoryTypeVram =3D 0x05, + EfiMemoryTypeSram =3D 0x06, + EfiMemoryTypeRam =3D 0x07, + EfiMemoryTypeRom =3D 0x08, + EfiMemoryTypeFlash =3D 0x09, + EfiMemoryTypeEeprom =3D 0x0A, + EfiMemoryTypeFeprom =3D 0x0B, + EfiMemoryTypeEprom =3D 0x0C, + EfiMemoryTypeCdram =3D 0x0D, + EfiMemoryType3Dram =3D 0x0E, + EfiMemoryTypeSdram =3D 0x0F, + EfiMemoryTypeSgram =3D 0x10, + EfiMemoryTypeRdram =3D 0x11, + EfiMemoryTypeDdr =3D 0x12, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in MemSubClass specification 0.9. It's in= troduced for SMBIOS2.6 specification. + /// + EfiMemoryTypeDdr2 =3D 0x13, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in MemSubClass specification 0.9. It's in= troduced for SMBIOS2.6 specification. + /// + EfiMemoryTypeDdr2FbDimm =3D 0x14 +} EFI_MEMORY_ARRAY_TYPE; + +typedef struct { + UINT32 Reserved :1; + UINT32 Other :1; + UINT32 Unknown :1; + UINT32 FastPaged :1; + UINT32 StaticColumn :1; + UINT32 PseudoStatic :1; + UINT32 Rambus :1; + UINT32 Synchronous :1; + UINT32 Cmos :1; + UINT32 Edo :1; + UINT32 WindowDram :1; + UINT32 CacheDram :1; + UINT32 Nonvolatile :1; + UINT32 Reserved1 :19; +} EFI_MEMORY_TYPE_DETAIL; + +typedef enum { + EfiMemoryStateEnabled =3D 0, + EfiMemoryStateUnknown =3D 1, + EfiMemoryStateUnsupported =3D 2, + EfiMemoryStateError =3D 3, + EfiMemoryStateAbsent =3D 4, + EfiMemoryStateDisabled =3D 5, + /// + /// Inconsistent with specification here: + /// This field is NOT defined in MemSubClass specification 0.9. It's in= troduced for SMBIOS2.6 specification. + /// + EfiMemoryStatePartial =3D 6 +} EFI_MEMORY_STATE; + +/// +/// This data record describes a memory device. This data record is a str= ucture. +/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SM= BIOS 2.3.4. +/// +typedef struct { + /// + /// A string that identifies the physically labeled socket or board pos= ition where the + /// memory device is located. + /// + STRING_REF MemoryDeviceLocator; + /// + /// A string denoting the physically labeled bank where the memory devi= ce is located. + /// + STRING_REF MemoryBankLocator; + /// + /// A string denoting the memory manufacturer. + /// + STRING_REF MemoryManufacturer; + /// + /// A string denoting the serial number of the memory device. + /// + STRING_REF MemorySerialNumber; + /// + /// The asset tag of the memory device. + /// + STRING_REF MemoryAssetTag; + /// + /// A string denoting the part number of the memory device. + /// + STRING_REF MemoryPartNumber; + /// + /// A link to a memory array structure set. + /// + EFI_INTER_LINK_DATA MemoryArrayLink; + /// + /// A link to a memory array structure set. + /// + EFI_INTER_LINK_DATA MemorySubArrayLink; + /// + /// The total width in bits of this memory device. If there are no erro= r correcting bits, + /// then the total width equals the data width. If the width is unknown= , then set the field + /// to 0xFFFF. + /// + UINT16 MemoryTotalWidth; + /// + /// The data width in bits of the memory device. A data width of 0x00 a= nd a total width + /// of 0x08 indicate that the device is used solely for error correctio= n. + /// + UINT16 MemoryDataWidth; + /// + /// The size in bytes of the memory device. A value of 0x00 denotes tha= t no device is + /// installed, while a value of all Fs denotes that the size is not kno= wn. + /// + EFI_EXP_BASE2_DATA MemoryDeviceSize; + /// + /// The form factor of the memory device. + /// + EFI_MEMORY_FORM_FACTOR MemoryFormFactor; + /// + /// A memory device set that must be populated with all devices of the = same type and + /// size. A value of 0x00 indicates that the device is not part of any = set. A value of 0xFF + /// indicates that the attribute is unknown. Any other value denotes th= e set number. + /// + UINT8 MemoryDeviceSet; + /// + /// The memory type in the socket. + /// + EFI_MEMORY_ARRAY_TYPE MemoryType; + /// + /// The memory type details. + /// + EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail; + /// + /// The memory speed in megahertz (MHz). A value of 0x00 denotes that + /// the speed is unknown. + /// Inconsistent with specification here: + /// In MemSubclass specification 0.9, the naming is MemoryTypeSpeed. + /// Keep it unchanged for backward compatibilty. + /// + EFI_EXP_BASE10_DATA MemorySpeed; + /// + /// The memory state. + /// + EFI_MEMORY_STATE MemoryState; +} EFI_MEMORY_ARRAY_LINK_DATA; + + +#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004 + +/// +/// This data record refers to a specified physical memory array associat= ed with +/// a given memory range. +/// +typedef struct { + /// + /// The starting physical address in bytes of memory mapped to a specif= ied physical + /// memory array. + /// + EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress; + /// + /// The last physical address in bytes of memory mapped to a specified = physical memory + /// array. + /// + EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress; + /// + /// See Physical Memory Array (Type 16) for physical memory array struc= tures. + /// + EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; + /// + /// The number of memory devices that form a single row of memory for t= he address + /// partition. + /// + UINT16 MemoryArrayPartitionWidth; +} EFI_MEMORY_ARRAY_START_ADDRESS_DATA; + + +#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005 + +/// +/// This data record refers to a physical memory device that is associate= d with +/// a given memory range. +/// +typedef struct { + /// + /// The starting physical address that is associated with the device. + /// + EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress; + /// + /// The ending physical address that is associated with the device. + /// + EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress; + /// + /// A link to the memory device data structure. + /// + EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink; + /// + /// A link to the memory array data structure. + /// + EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; + /// + /// The position of the memory device in a row. A value of 0x00 is rese= rved and a value + /// of 0xFF indicates that the position is unknown. + /// + UINT8 MemoryDevicePartitionRowPosition; + /// + /// The position of the device in an interleave. + /// + UINT8 MemoryDeviceInterleavePosition; + /// + /// The maximum number of consecutive rows from the device that are acc= essed in a + /// single interleave transfer. A value of 0x00 indicates that the devi= ce is not interleaved + /// and a value of 0xFF indicates that the interleave configuration is = unknown. + /// + UINT8 MemoryDeviceInterleaveDataDepth; +} EFI_MEMORY_DEVICE_START_ADDRESS_DATA; + + +// +// Memory. Channel Device Type - SMBIOS Type 37 +// + +#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006 + +typedef enum _EFI_MEMORY_CHANNEL_TYPE { + EfiMemoryChannelTypeOther =3D 1, + EfiMemoryChannelTypeUnknown =3D 2, + EfiMemoryChannelTypeRambus =3D 3, + EfiMemoryChannelTypeSyncLink =3D 4 +} EFI_MEMORY_CHANNEL_TYPE; + +/// +/// This data record refers the type of memory that is associated with th= e channel. This data record is a +/// structure. +/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in = SMBIOS 2.3.4, +/// Table 3.3.38, Type 37, with the following offsets: +/// - Offset 0x4 +/// - Offset 0x5 +/// - Offset 0x6 +/// +typedef struct { + /// + /// The type of memory that is associated with the channel. + /// + EFI_MEMORY_CHANNEL_TYPE MemoryChannelType; + /// + /// The maximum load that is supported by the channel. + /// + UINT8 MemoryChannelMaximumLoad; + /// + /// The number of memory devices on this channel. + /// + UINT8 MemoryChannelDeviceCount; +} EFI_MEMORY_CHANNEL_TYPE_DATA; + +#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007 + +/// +/// This data record refers to the memory device that is associated with = the memory channel. This data +/// record is a structure. +/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is i= n SMBIOS 2.3.4, +/// Table 3.3.38, Type 37, with the following offsets: +/// - Offset 0x7 +/// - Offset 0x8 +/// +typedef struct { + /// + /// A number between one and MemoryChannelDeviceCount plus an arbitrary= base. + /// + UINT8 DeviceId; + /// + /// The Link of the associated memory device. See Memory Device (Type 1= 7) for + /// memory devices. + /// + EFI_INTER_LINK_DATA DeviceLink; + /// + /// The number of load units that this device consumes. + /// + UINT8 MemoryChannelDeviceLoad; +} EFI_MEMORY_CHANNEL_DEVICE_DATA; + +// +// Memory. Controller Information - SMBIOS Type 5 +// +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008 + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef enum { + EfiErrorDetectingMethodOther =3D 1, + EfiErrorDetectingMethodUnknown =3D 2, + EfiErrorDetectingMethodNone =3D 3, + EfiErrorDetectingMethodParity =3D 4, + EfiErrorDetectingMethod32Ecc =3D 5, + EfiErrorDetectingMethod64Ecc =3D 6, + EfiErrorDetectingMethod128Ecc =3D 7, + EfiErrorDetectingMethodCrc =3D 8 +} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + UINT8 Other :1; + UINT8 Unknown :1; + UINT8 None :1; + UINT8 SingleBitErrorCorrect :1; + UINT8 DoubleBitErrorCorrect :1; + UINT8 ErrorScrubbing :1; + UINT8 Reserved :2; +} EFI_MEMORY_ERROR_CORRECT_CAPABILITY; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef enum { + EfiMemoryInterleaveOther =3D 1, + EfiMemoryInterleaveUnknown =3D 2, + EfiMemoryInterleaveOneWay =3D 3, + EfiMemoryInterleaveTwoWay =3D 4, + EfiMemoryInterleaveFourWay =3D 5, + EfiMemoryInterleaveEightWay =3D 6, + EfiMemoryInterleaveSixteenWay =3D 7 +} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 SeventyNs:1; + UINT16 SixtyNs :1; + UINT16 FiftyNs :1; + UINT16 Reserved :11; +} EFI_MEMORY_SPEED_TYPE; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + UINT16 Other :1; + UINT16 Unknown :1; + UINT16 Standard :1; + UINT16 FastPageMode:1; + UINT16 EDO :1; + UINT16 Parity :1; + UINT16 ECC :1; + UINT16 SIMM :1; + UINT16 DIMM :1; + UINT16 BurstEdo :1; + UINT16 SDRAM :1; + UINT16 Reserved :5; +} EFI_MEMORY_SUPPORTED_TYPE; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + UINT8 Five :1; + UINT8 Three :1; + UINT8 Two :1; + UINT8 Reserved:5; +} EFI_MEMORY_MODULE_VOLTAGE_TYPE; + +/// +/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete +/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod; + EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability; + EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave; + EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave; + UINT8 MaxMemoryModuleSize; + EFI_MEMORY_SPEED_TYPE MemorySpeedType; + EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType; + EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage; + UINT8 NumberofMemorySlot; + EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability; + UINT16 *MemoryModuleConfigHandles; +} EFI_MEMORY_CONTROLLER_INFORMATION; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 5. +/// +typedef struct { + EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod; + EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability; + EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave; + EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave; + UINT8 MaxMemoryModuleSize; + EFI_MEMORY_SPEED_TYPE MemorySpeedType; + EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType; + EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage; + UINT8 NumberofMemorySlot; + EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability; + EFI_INTER_LINK_DATA MemoryModuleConfig[1]; +} EFI_MEMORY_CONTROLLER_INFORMATION_DATA; + +/// +/// Memory. Error Information - SMBIOS Type 18 +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 18. +/// +#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009 +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 18. +/// +typedef enum { + EfiMemoryErrorOther =3D 1, + EfiMemoryErrorUnknown =3D 2, + EfiMemoryErrorOk =3D 3, + EfiMemoryErrorBadRead =3D 4, + EfiMemoryErrorParity =3D 5, + EfiMemoryErrorSigleBit =3D 6, + EfiMemoryErrorDoubleBit =3D 7, + EfiMemoryErrorMultiBit =3D 8, + EfiMemoryErrorNibble =3D 9, + EfiMemoryErrorChecksum =3D 10, + EfiMemoryErrorCrc =3D 11, + EfiMemoryErrorCorrectSingleBit =3D 12, + EfiMemoryErrorCorrected =3D 13, + EfiMemoryErrorUnCorrectable =3D 14 +} EFI_MEMORY_ERROR_TYPE; +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 18. +/// +typedef enum { + EfiMemoryGranularityOther =3D 1, + EfiMemoryGranularityOtherUnknown =3D 2, + EfiMemoryGranularityDeviceLevel =3D 3, + EfiMemoryGranularityMemPartitionLevel =3D 4 +} EFI_MEMORY_ERROR_GRANULARITY_TYPE; +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 18. +/// +typedef enum { + EfiMemoryErrorOperationOther =3D 1, + EfiMemoryErrorOperationUnknown =3D 2, + EfiMemoryErrorOperationRead =3D 3, + EfiMemoryErrorOperationWrite =3D 4, + EfiMemoryErrorOperationPartialWrite =3D 5 +} EFI_MEMORY_ERROR_OPERATION_TYPE; +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 18. +/// +typedef struct { + EFI_MEMORY_ERROR_TYPE MemoryErrorType; + EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity; + EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation; + UINT32 VendorSyndrome; + UINT32 MemoryArrayErrorAddress; + UINT32 DeviceErrorAddress; + UINT32 DeviceErrorResolution; +} EFI_MEMORY_32BIT_ERROR_INFORMATION; + +/// +/// Memory. Error Information - SMBIOS Type 33. +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 33. +/// +#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It's introduced for SmBios 2.6 type 33. +/// +typedef struct { + EFI_MEMORY_ERROR_TYPE MemoryErrorType; + EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity; + EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation; + UINT32 VendorSyndrome; + UINT64 MemoryArrayErrorAddress; + UINT64 DeviceErrorAddress; + UINT32 DeviceErrorResolution; +} EFI_MEMORY_64BIT_ERROR_INFORMATION; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It is implementation-specific to simplify the code logic. +/// +typedef union _EFI_MEMORY_SUBCLASS_RECORDS { + EFI_MEMORY_SIZE_DATA SizeData; + EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData; + EFI_MEMORY_ARRAY_LINK_DATA ArrayLink; + EFI_MEMORY_ARRAY_START_ADDRESS_DATA ArrayStartAddress; + EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress; + EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData; + EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData; + EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo; + EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo; + EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo; +} EFI_MEMORY_SUBCLASS_RECORDS; + +typedef struct { + EFI_SUBCLASS_TYPE1_HEADER Header; + EFI_MEMORY_SUBCLASS_RECORDS Record; +} EFI_MEMORY_SUBCLASS_DRIVER_DATA; + +#define EFI_MISC_SUBCLASS_VERSION 0x0100 + +#pragma pack(1) + +// +// Last PCI Bus Number +// +#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001 + +typedef struct { + UINT8 LastPciBus; +} EFI_MISC_LAST_PCI_BUS_DATA; + +// +// Misc. BIOS Vendor - SMBIOS Type 0 +// +#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002 + +typedef struct { + UINT64 Reserved1 :2; + UINT64 Unknown :1; + UINT64 BiosCharacteristicsNotSupported :1; + UINT64 IsaIsSupported :1; + UINT64 McaIsSupported :1; + UINT64 EisaIsSupported :1; + UINT64 PciIsSupported :1; + UINT64 PcmciaIsSupported :1; + UINT64 PlugAndPlayIsSupported :1; + UINT64 ApmIsSupported :1; + UINT64 BiosIsUpgradable :1; + UINT64 BiosShadowingAllowed :1; + UINT64 VlVesaIsSupported :1; + UINT64 EscdSupportIsAvailable :1; + UINT64 BootFromCdIsSupported :1; + UINT64 SelectableBootIsSupported :1; + UINT64 RomBiosIsSocketed :1; + UINT64 BootFromPcmciaIsSupported :1; + UINT64 EDDSpecificationIsSupported :1; + UINT64 JapaneseNecFloppyIsSupported :1; + UINT64 JapaneseToshibaFloppyIsSupported :1; + UINT64 Floppy525_360IsSupported :1; + UINT64 Floppy525_12IsSupported :1; + UINT64 Floppy35_720IsSupported :1; + UINT64 Floppy35_288IsSupported :1; + UINT64 PrintScreenIsSupported :1; + UINT64 Keyboard8042IsSupported :1; + UINT64 SerialIsSupported :1; + UINT64 PrinterIsSupported :1; + UINT64 CgaMonoIsSupported :1; + UINT64 NecPc98 :1; + UINT64 AcpiIsSupported :1; + UINT64 UsbLegacyIsSupported :1; + UINT64 AgpIsSupported :1; + UINT64 I20BootIsSupported :1; + UINT64 Ls120BootIsSupported :1; + UINT64 AtapiZipDriveBootIsSupported :1; + UINT64 Boot1394IsSupported :1; + UINT64 SmartBatteryIsSupported :1; + UINT64 BiosBootSpecIsSupported :1; + UINT64 FunctionKeyNetworkBootIsSupported :1; + UINT64 Reserved :22= ; +} EFI_MISC_BIOS_CHARACTERISTICS; + +typedef struct { + UINT64 BiosReserved :16; + UINT64 SystemReserved:16; + UINT64 Reserved :32; +} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION; + +typedef struct { + STRING_REF BiosVendor; + STRING_REF BiosVersion; + STRING_REF BiosReleaseDate; + EFI_PHYSICAL_ADDRESS BiosStartingAddress; + EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize; + EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1; + EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION + BiosCharacteristics2; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 0. + /// + UINT8 BiosMajorRelease; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 0. + /// + UINT8 BiosMinorRelease; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 0. + /// + UINT8 BiosEmbeddedFirmwareMajorRelease; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 0. + /// + UINT8 BiosEmbeddedFirmwareMinorRelease; +} EFI_MISC_BIOS_VENDOR_DATA; + +// +// Misc. System Manufacturer - SMBIOS Type 1 +// +#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003 + +typedef enum { + EfiSystemWakeupTypeReserved =3D 0, + EfiSystemWakeupTypeOther =3D 1, + EfiSystemWakeupTypeUnknown =3D 2, + EfiSystemWakeupTypeApmTimer =3D 3, + EfiSystemWakeupTypeModemRing =3D 4, + EfiSystemWakeupTypeLanRemote =3D 5, + EfiSystemWakeupTypePowerSwitch =3D 6, + EfiSystemWakeupTypePciPme =3D 7, + EfiSystemWakeupTypeAcPowerRestored =3D 8 +} EFI_MISC_SYSTEM_WAKEUP_TYPE; + +typedef struct { + STRING_REF SystemManufacturer; + STRING_REF SystemProductName; + STRING_REF SystemVersion; + STRING_REF SystemSerialNumber; + EFI_GUID SystemUuid; + EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 1. + /// + STRING_REF SystemSKUNumber; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this data structure and corrspon= ding fields are NOT defined. + /// It's introduced for SmBios 2.6 specification type 1. + /// + STRING_REF SystemFamily; +} EFI_MISC_SYSTEM_MANUFACTURER_DATA; + +// +// Misc. Base Board Manufacturer - SMBIOS Type 2 +// +#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004 + +typedef struct { + UINT32 Motherboard :1; + UINT32 RequiresDaughterCard :1; + UINT32 Removable :1; + UINT32 Replaceable :1; + UINT32 HotSwappable :1; + UINT32 Reserved :27; +} EFI_BASE_BOARD_FEATURE_FLAGS; + +typedef enum { + EfiBaseBoardTypeUnknown =3D 1, + EfiBaseBoardTypeOther =3D 2, + EfiBaseBoardTypeServerBlade =3D 3, + EfiBaseBoardTypeConnectivitySwitch =3D 4, + EfiBaseBoardTypeSystemManagementModule =3D 5, + EfiBaseBoardTypeProcessorModule =3D 6, + EfiBaseBoardTypeIOModule =3D 7, + EfiBaseBoardTypeMemoryModule =3D 8, + EfiBaseBoardTypeDaughterBoard =3D 9, + EfiBaseBoardTypeMotherBoard =3D 0xA, + EfiBaseBoardTypeProcessorMemoryModule =3D 0xB, + EfiBaseBoardTypeProcessorIOModule =3D 0xC, + EfiBaseBoardTypeInterconnectBoard =3D 0xD +} EFI_BASE_BOARD_TYPE; + +typedef struct { + STRING_REF BaseBoardManufacturer; + STRING_REF BaseBoardProductName; + STRING_REF BaseBoardVersion; + STRING_REF BaseBoardSerialNumber; + STRING_REF BaseBoardAssetTag; + STRING_REF BaseBoardChassisLocation; + EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags; + EFI_BASE_BOARD_TYPE BaseBoardType; + EFI_INTER_LINK_DATA BaseBoardChassisLink; + UINT32 BaseBoardNumberLinks; + EFI_INTER_LINK_DATA LinkN; +} EFI_MISC_BASE_BOARD_MANUFACTURER_DATA; + +// +// Misc. System/Chassis Enclosure - SMBIOS Type 3 +// +#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005 + +typedef enum { + EfiMiscChassisTypeOther =3D 0x1, + EfiMiscChassisTypeUnknown =3D 0x2, + EfiMiscChassisTypeDeskTop =3D 0x3, + EfiMiscChassisTypeLowProfileDesktop =3D 0x4, + EfiMiscChassisTypePizzaBox =3D 0x5, + EfiMiscChassisTypeMiniTower =3D 0x6, + EfiMiscChassisTypeTower =3D 0x7, + EfiMiscChassisTypePortable =3D 0x8, + EfiMiscChassisTypeLapTop =3D 0x9, + EfiMiscChassisTypeNotebook =3D 0xA, + EfiMiscChassisTypeHandHeld =3D 0xB, + EfiMiscChassisTypeDockingStation =3D 0xC, + EfiMiscChassisTypeAllInOne =3D 0xD, + EfiMiscChassisTypeSubNotebook =3D 0xE, + EfiMiscChassisTypeSpaceSaving =3D 0xF, + EfiMiscChassisTypeLunchBox =3D 0x10, + EfiMiscChassisTypeMainServerChassis =3D 0x11, + EfiMiscChassisTypeExpansionChassis =3D 0x12, + EfiMiscChassisTypeSubChassis =3D 0x13, + EfiMiscChassisTypeBusExpansionChassis =3D 0x14, + EfiMiscChassisTypePeripheralChassis =3D 0x15, + EfiMiscChassisTypeRaidChassis =3D 0x16, + EfiMiscChassisTypeRackMountChassis =3D 0x17, + EfiMiscChassisTypeSealedCasePc =3D 0x18, + EfiMiscChassisMultiSystemChassis =3D 0x19 +} EFI_MISC_CHASSIS_TYPE; + +typedef struct { + /// + /// Inconsistent with specification here: + /// In MiscSubclass 0.9 specification, it has the incorrect field name = "EFI_MISC_CHASSIS_TYPE". + /// Change it to "ChassisType" to pass build. + /// + UINT32 ChassisType :16; + UINT32 ChassisLockPresent:1; + UINT32 Reserved :15; +} EFI_MISC_CHASSIS_STATUS; + +typedef enum { + EfiChassisStateOther =3D 0x01, + EfiChassisStateUnknown =3D 0x02, + EfiChassisStateSafe =3D 0x03, + EfiChassisStateWarning =3D 0x04, + EfiChassisStateCritical =3D 0x05, + EfiChassisStateNonRecoverable =3D 0x06 +} EFI_MISC_CHASSIS_STATE; + +typedef enum { + EfiChassisSecurityStatusOther =3D 0x01, + EfiChassisSecurityStatusUnknown =3D 0x02, + EfiChassisSecurityStatusNone =3D 0x03, + EfiChassisSecurityStatusExternalInterfaceLockedOut =3D 0x04, + EfiChassisSecurityStatusExternalInterfaceLockedEnabled =3D 0x05 +} EFI_MISC_CHASSIS_SECURITY_STATE; + +typedef struct { + UINT32 RecordType :1; + UINT32 Type :7; + UINT32 Reserved :24; +} EFI_MISC_ELEMENT_TYPE; + +typedef struct { + EFI_MISC_ELEMENT_TYPE ChassisElementType; + EFI_INTER_LINK_DATA ChassisElementStructure; + EFI_BASE_BOARD_TYPE ChassisBaseBoard; + UINT32 ChassisElementMinimum; + UINT32 ChassisElementMaximum; +} EFI_MISC_ELEMENTS; + +typedef struct { + STRING_REF ChassisManufacturer; + STRING_REF ChassisVersion; + STRING_REF ChassisSerialNumber; + STRING_REF ChassisAssetTag; + EFI_MISC_CHASSIS_STATUS ChassisType; + EFI_MISC_CHASSIS_STATE ChassisBootupState; + EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState; + EFI_MISC_CHASSIS_STATE ChassisThermalState; + EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState; + UINT32 ChassisOemDefined; + UINT32 ChassisHeight; + UINT32 ChassisNumberPowerCords; + UINT32 ChassisElementCount; + UINT32 ChassisElementRecordLength; + EFI_MISC_ELEMENTS ChassisElements; +} EFI_MISC_CHASSIS_MANUFACTURER_DATA; + +// +// Misc. Port Connector Information - SMBIOS Type 8 +// +#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00= 000006 + +typedef enum { + EfiPortConnectorTypeNone =3D 0x00, + EfiPortConnectorTypeCentronics =3D 0x01, + EfiPortConnectorTypeMiniCentronics =3D 0x02, + EfiPortConnectorTypeProprietary =3D 0x03, + EfiPortConnectorTypeDB25Male =3D 0x04, + EfiPortConnectorTypeDB25Female =3D 0x05, + EfiPortConnectorTypeDB15Male =3D 0x06, + EfiPortConnectorTypeDB15Female =3D 0x07, + EfiPortConnectorTypeDB9Male =3D 0x08, + EfiPortConnectorTypeDB9Female =3D 0x09, + EfiPortConnectorTypeRJ11 =3D 0x0A, + EfiPortConnectorTypeRJ45 =3D 0x0B, + EfiPortConnectorType50PinMiniScsi =3D 0x0C, + EfiPortConnectorTypeMiniDin =3D 0x0D, + EfiPortConnectorTypeMicriDin =3D 0x0E, + EfiPortConnectorTypePS2 =3D 0x0F, + EfiPortConnectorTypeInfrared =3D 0x10, + EfiPortConnectorTypeHpHil =3D 0x11, + EfiPortConnectorTypeUsb =3D 0x12, + EfiPortConnectorTypeSsaScsi =3D 0x13, + EfiPortConnectorTypeCircularDin8Male =3D 0x14, + EfiPortConnectorTypeCircularDin8Female =3D 0x15, + EfiPortConnectorTypeOnboardIde =3D 0x16, + EfiPortConnectorTypeOnboardFloppy =3D 0x17, + EfiPortConnectorType9PinDualInline =3D 0x18, + EfiPortConnectorType25PinDualInline =3D 0x19, + EfiPortConnectorType50PinDualInline =3D 0x1A, + EfiPortConnectorType68PinDualInline =3D 0x1B, + EfiPortConnectorTypeOnboardSoundInput =3D 0x1C, + EfiPortConnectorTypeMiniCentronicsType14 =3D 0x1D, + EfiPortConnectorTypeMiniCentronicsType26 =3D 0x1E, + EfiPortConnectorTypeHeadPhoneMiniJack =3D 0x1F, + EfiPortConnectorTypeBNC =3D 0x20, + EfiPortConnectorType1394 =3D 0x21, + EfiPortConnectorTypePC98 =3D 0xA0, + EfiPortConnectorTypePC98Hireso =3D 0xA1, + EfiPortConnectorTypePCH98 =3D 0xA2, + EfiPortConnectorTypePC98Note =3D 0xA3, + EfiPortConnectorTypePC98Full =3D 0xA4, + EfiPortConnectorTypeOther =3D 0xFF +} EFI_MISC_PORT_CONNECTOR_TYPE; + +typedef enum { + EfiPortTypeNone =3D 0x00, + EfiPortTypeParallelXtAtCompatible =3D 0x01, + EfiPortTypeParallelPortPs2 =3D 0x02, + EfiPortTypeParallelPortEcp =3D 0x03, + EfiPortTypeParallelPortEpp =3D 0x04, + EfiPortTypeParallelPortEcpEpp =3D 0x05, + EfiPortTypeSerialXtAtCompatible =3D 0x06, + EfiPortTypeSerial16450Compatible =3D 0x07, + EfiPortTypeSerial16550Compatible =3D 0x08, + EfiPortTypeSerial16550ACompatible =3D 0x09, + EfiPortTypeScsi =3D 0x0A, + EfiPortTypeMidi =3D 0x0B, + EfiPortTypeJoyStick =3D 0x0C, + EfiPortTypeKeyboard =3D 0x0D, + EfiPortTypeMouse =3D 0x0E, + EfiPortTypeSsaScsi =3D 0x0F, + EfiPortTypeUsb =3D 0x10, + EfiPortTypeFireWire =3D 0x11, + EfiPortTypePcmciaTypeI =3D 0x12, + EfiPortTypePcmciaTypeII =3D 0x13, + EfiPortTypePcmciaTypeIII =3D 0x14, + EfiPortTypeCardBus =3D 0x15, + EfiPortTypeAccessBusPort =3D 0x16, + EfiPortTypeScsiII =3D 0x17, + EfiPortTypeScsiWide =3D 0x18, + EfiPortTypePC98 =3D 0x19, + EfiPortTypePC98Hireso =3D 0x1A, + EfiPortTypePCH98 =3D 0x1B, + EfiPortTypeVideoPort =3D 0x1C, + EfiPortTypeAudioPort =3D 0x1D, + EfiPortTypeModemPort =3D 0x1E, + EfiPortTypeNetworkPort =3D 0x1F, + EfiPortType8251Compatible =3D 0xA0, + EfiPortType8251FifoCompatible =3D 0xA1, + EfiPortTypeOther =3D 0xFF +} EFI_MISC_PORT_TYPE; + +typedef struct { + STRING_REF PortInternalConnectorDesignator; + STRING_REF PortExternalConnectorDesignator; + EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType; + EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType; + EFI_MISC_PORT_TYPE PortType; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this type of field is defined as= EFI_DEVICE_PATH_PROTOCOL, + /// which causes the implementation some complexity. Keep it unchanged = for backward + /// compatibility. + /// + EFI_MISC_PORT_DEVICE_PATH PortPath; +} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA; + +// +// Misc. System Slots - SMBIOS Type 9 +// +#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007 + +typedef enum { + EfiSlotTypeOther =3D 0x01, + EfiSlotTypeUnknown =3D 0x02, + EfiSlotTypeIsa =3D 0x03, + EfiSlotTypeMca =3D 0x04, + EfiSlotTypeEisa =3D 0x05, + EfiSlotTypePci =3D 0x06, + EfiSlotTypePcmcia =3D 0x07, + EfiSlotTypeVlVesa =3D 0x08, + EfiSlotTypeProprietary =3D 0x09, + EfiSlotTypeProcessorCardSlot =3D 0x0A, + EfiSlotTypeProprietaryMemoryCardSlot =3D 0x0B, + EfiSlotTypeIORiserCardSlot =3D 0x0C, + EfiSlotTypeNuBus =3D 0x0D, + EfiSlotTypePci66MhzCapable =3D 0x0E, + EfiSlotTypeAgp =3D 0x0F, + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, its naming should be EfiSlotType= Agp2X + /// rather than EfiSlotTypeApg2X. + /// + EfiSlotTypeAgp2X =3D 0x10, + EfiSlotTypeAgp4X =3D 0x11, + EfiSlotTypePciX =3D 0x12, + EfiSlotTypeAgp8x =3D 0x13, + EfiSlotTypePC98C20 =3D 0xA0, + EfiSlotTypePC98C24 =3D 0xA1, + EfiSlotTypePC98E =3D 0xA2, + EfiSlotTypePC98LocalBus =3D 0xA3, + EfiSlotTypePC98Card =3D 0xA4, + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, these fields aren't defined. + /// They're introduced for SmBios 2.6 specification type 9. + /// + EfiSlotTypePciExpress =3D 0xA5, + EfiSlotTypePciExpressX1 =3D 0xA6, + EfiSlotTypePciExpressX2 =3D 0xA7, + EfiSlotTypePciExpressX4 =3D 0xA8, + EfiSlotTypePciExpressX8 =3D 0xA9, + EfiSlotTypePciExpressX16 =3D 0xAA +} EFI_MISC_SLOT_TYPE; + +typedef enum { + EfiSlotDataBusWidthOther =3D 0x01, + EfiSlotDataBusWidthUnknown =3D 0x02, + EfiSlotDataBusWidth8Bit =3D 0x03, + EfiSlotDataBusWidth16Bit =3D 0x04, + EfiSlotDataBusWidth32Bit =3D 0x05, + EfiSlotDataBusWidth64Bit =3D 0x06, + EfiSlotDataBusWidth128Bit =3D 0x07, + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, these fields aren't defined. + /// They're introduced for SmBios 2.6 specification type 9. + /// + EfiSlotDataBusWidth1xOrx1 =3D 0x8, + EfiSlotDataBusWidth2xOrx2 =3D 0x9, + EfiSlotDataBusWidth4xOrx4 =3D 0xA, + EfiSlotDataBusWidth8xOrx8 =3D 0xB, + EfiSlotDataBusWidth12xOrx12 =3D 0xC, + EfiSlotDataBusWidth16xOrx16 =3D 0xD, + EfiSlotDataBusWidth32xOrx32 =3D 0xE +} EFI_MISC_SLOT_DATA_BUS_WIDTH; + +typedef enum { + EfiSlotUsageOther =3D 1, + EfiSlotUsageUnknown =3D 2, + EfiSlotUsageAvailable =3D 3, + EfiSlotUsageInUse =3D 4 +} EFI_MISC_SLOT_USAGE; + +typedef enum { + EfiSlotLengthOther =3D 1, + EfiSlotLengthUnknown =3D 2, + EfiSlotLengthShort =3D 3, + EfiSlotLengthLong =3D 4 +} EFI_MISC_SLOT_LENGTH; + +typedef struct { + UINT32 CharacteristicsUnknown :1; + UINT32 Provides50Volts :1; + UINT32 Provides33Volts :1; + UINT32 SharedSlot :1; + UINT32 PcCard16Supported :1; + UINT32 CardBusSupported :1; + UINT32 ZoomVideoSupported :1; + UINT32 ModemRingResumeSupported:1; + UINT32 PmeSignalSupported :1; + UINT32 HotPlugDevicesSupported :1; + UINT32 SmbusSignalSupported :1; + UINT32 Reserved :21; +} EFI_MISC_SLOT_CHARACTERISTICS; + +typedef struct { + STRING_REF SlotDesignation; + EFI_MISC_SLOT_TYPE SlotType; + EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth; + EFI_MISC_SLOT_USAGE SlotUsage; + EFI_MISC_SLOT_LENGTH SlotLength; + UINT16 SlotId; + EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics; + EFI_DEVICE_PATH_PROTOCOL SlotDevicePath; +} EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA; + +// +// Misc. Onboard Device - SMBIOS Type 10 +// +#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008 + +typedef enum { + EfiOnBoardDeviceTypeOther =3D 1, + EfiOnBoardDeviceTypeUnknown =3D 2, + EfiOnBoardDeviceTypeVideo =3D 3, + EfiOnBoardDeviceTypeScsiController =3D 4, + EfiOnBoardDeviceTypeEthernet =3D 5, + EfiOnBoardDeviceTypeTokenRing =3D 6, + EfiOnBoardDeviceTypeSound =3D 7 +} EFI_MISC_ONBOARD_DEVICE_TYPE; + +typedef struct { + UINT32 DeviceType :16; + UINT32 DeviceEnabled :1; + UINT32 Reserved :15; +} EFI_MISC_ONBOARD_DEVICE_STATUS; + +typedef struct { + STRING_REF OnBoardDeviceDescription; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, the name is OnBoardDeviceType. + /// Keep it unchanged for backward compatibilty. + /// + EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus; + EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath; +} EFI_MISC_ONBOARD_DEVICE_DATA; + +// +// Misc. BIOS Language Information - SMBIOS Type 11 +// +#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009 + +typedef struct { + STRING_REF OemStringRef[1]; +} EFI_MISC_OEM_STRING_DATA; + +// +// Misc. System Options - SMBIOS Type 12 +// +typedef struct { + STRING_REF SystemOptionStringRef[1]; +} EFI_MISC_SYSTEM_OPTION_STRING_DATA; + +#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A + +// +// Misc. Number of Installable Languages - SMBIOS Type 13 +// +#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x00000= 00B + +typedef struct { + UINT32 AbbreviatedLanguageFormat :1; + UINT32 Reserved :31; +} EFI_MISC_LANGUAGE_FLAGS; + +typedef struct { + UINT16 NumberOfInstallableLanguages; + EFI_MISC_LANGUAGE_FLAGS LanguageFlags; + UINT16 CurrentLanguageNumber; +} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA; + +// +// Misc. System Language String +// +#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C + +typedef struct { + UINT16 LanguageId; + STRING_REF SystemLanguageString; +} EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA; + +// +// Group Associations - SMBIOS Type 14 +// +#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D + +typedef struct { + STRING_REF GroupName; + UINT16 NumberGroupItems; + UINT16 GroupId; +} EFI_MISC_GROUP_NAME_DATA; + +// +// Group Item Set Element +// +#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E + +typedef struct { + EFI_GUID SubClass; + EFI_INTER_LINK_DATA GroupLink; + UINT16 GroupId; + UINT16 GroupElementId; +} EFI_MISC_GROUP_ITEM_SET_DATA; + +// +// Misc. Pointing Device Type - SMBIOS Type 21 +// +#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F + +typedef enum { + EfiPointingDeviceTypeOther =3D 0x01, + EfiPointingDeviceTypeUnknown =3D 0x02, + EfiPointingDeviceTypeMouse =3D 0x03, + EfiPointingDeviceTypeTrackBall =3D 0x04, + EfiPointingDeviceTypeTrackPoint =3D 0x05, + EfiPointingDeviceTypeGlidePoint =3D 0x06, + EfiPointingDeviceTouchPad =3D 0x07, + EfiPointingDeviceTouchScreen =3D 0x08, + EfiPointingDeviceOpticalSensor =3D 0x09 +} EFI_MISC_POINTING_DEVICE_TYPE; + +typedef enum { + EfiPointingDeviceInterfaceOther =3D 0x01, + EfiPointingDeviceInterfaceUnknown =3D 0x02, + EfiPointingDeviceInterfaceSerial =3D 0x03, + EfiPointingDeviceInterfacePs2 =3D 0x04, + EfiPointingDeviceInterfaceInfrared =3D 0x05, + EfiPointingDeviceInterfaceHpHil =3D 0x06, + EfiPointingDeviceInterfaceBusMouse =3D 0x07, + EfiPointingDeviceInterfaceADB =3D 0x08, + EfiPointingDeviceInterfaceBusMouseDB9 =3D 0xA0, + EfiPointingDeviceInterfaceBusMouseMicroDin =3D 0xA1, + EfiPointingDeviceInterfaceUsb =3D 0xA2 +} EFI_MISC_POINTING_DEVICE_INTERFACE; + +typedef struct { + EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType; + EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface; + UINT16 NumberPointingDeviceButtons; + EFI_DEVICE_PATH_PROTOCOL PointingDevicePath; +} EFI_MISC_POINTING_DEVICE_TYPE_DATA; + +// +// Portable Battery - SMBIOS Type 22 +// +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the name is EFI_MISC_BATTERY_LOCAT= ION_RECORD_NUMBER. +/// Keep it unchanged for backward compatibilty. +/// +#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010 + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BAT= TERY_DEVICE_CHEMISTRY. +/// And all field namings are also different with specification. +/// Keep it unchanged for backward compatibilty. +/// +typedef enum { + EfiPortableBatteryDeviceChemistryOther =3D 1, + EfiPortableBatteryDeviceChemistryUnknown =3D 2, + EfiPortableBatteryDeviceChemistryLeadAcid =3D 3, + EfiPortableBatteryDeviceChemistryNickelCadmium =3D 4, + EfiPortableBatteryDeviceChemistryNickelMetalHydride =3D 5, + EfiPortableBatteryDeviceChemistryLithiumIon =3D 6, + EfiPortableBatteryDeviceChemistryZincAir =3D 7, + EfiPortableBatteryDeviceChemistryLithiumPolymer =3D 8 +} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY; + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BAT= TERY_LOCATION_DATA. +/// Also, the name and the order of the fields vary with specifications. +/// Keep it unchanged for backward compatibilty. +/// +typedef struct { + STRING_REF Location; + STRING_REF Manufacturer; + STRING_REF ManufactureDate; + STRING_REF SerialNumber; + STRING_REF DeviceName; + EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY + DeviceChemistry; + UINT16 DesignCapacity; + UINT16 DesignVoltage; + STRING_REF SBDSVersionNumber; + UINT8 MaximumError; + UINT16 SBDSSerialNumber; + UINT16 SBDSManufactureDate; + STRING_REF SBDSDeviceChemistry; + UINT8 DesignCapacityMultiplier; + UINT32 OEMSpecific; + UINT8 BatteryNumber; // Temporary + BOOLEAN Valid; // Is entry valid - Temporary +} EFI_MISC_PORTABLE_BATTERY; + + +// +// Misc. Reset Capabilities - SMBIOS Type 23 +// +#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011 + +typedef struct { + UINT32 Status :1; + UINT32 BootOption :2; + UINT32 BootOptionOnLimit :2; + UINT32 WatchdogTimerPresent:1; + UINT32 Reserved :26; +} EFI_MISC_RESET_CAPABILITIES_TYPE; + +typedef struct { + EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities; + UINT16 ResetCount; + UINT16 ResetLimit; + UINT16 ResetTimerInterval; + UINT16 ResetTimeout; +} EFI_MISC_RESET_CAPABILITIES; + +typedef struct { + EFI_MISC_RESET_CAPABILITIES ResetCapabilities; + UINT16 ResetCount; + UINT16 ResetLimit; + UINT16 ResetTimerInterval; + UINT16 ResetTimeout; +} EFI_MISC_RESET_CAPABILITIES_DATA; + +// +// Misc. Hardware Security - SMBIOS Type 24 +// +#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000= 012 + +/// +/// Inconsistent with specification here: +/// The MiscSubclass specification 0.9 only mentions the possible value o= f each field in +/// EFI_MISC_HARDWARE_SECURITY_SETTINGS. +/// It's implementation-specific in order to to simplify the code logic. +/// +typedef enum { + EfiHardwareSecurityStatusDisabled =3D 0, + EfiHardwareSecurityStatusEnabled =3D 1, + EfiHardwareSecurityStatusNotImplemented =3D 2, + EfiHardwareSecurityStatusUnknown =3D 3 +} EFI_MISC_HARDWARE_SECURITY_STATUS; + +typedef struct { + UINT32 FrontPanelResetStatus :2; + UINT32 AdministratorPasswordStatus :2; + UINT32 KeyboardPasswordStatus :2; + UINT32 PowerOnPasswordStatus :2; + UINT32 Reserved :24; +} EFI_MISC_HARDWARE_SECURITY_SETTINGS; + +typedef struct { + EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings; +} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA; + +// +// System Power Controls - SMBIOS Type 25 +// +#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013 + +typedef struct { + UINT16 ScheduledPoweronMonth; + UINT16 ScheduledPoweronDayOfMonth; + UINT16 ScheduledPoweronHour; + UINT16 ScheduledPoweronMinute; + UINT16 ScheduledPoweronSecond; +} EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA; + +// +// Voltage Probe - SMBIOS Type 26 +// +#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014 + +typedef struct { + UINT32 VoltageProbeSite :5; + UINT32 VoltageProbeStatus :3; + UINT32 Reserved :24; +} EFI_MISC_VOLTAGE_PROBE_LOCATION; + +typedef struct { + STRING_REF VoltageProbeDescription; + EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation; + EFI_EXP_BASE10_DATA VoltageProbeMaximumValue; + EFI_EXP_BASE10_DATA VoltageProbeMinimumValue; + EFI_EXP_BASE10_DATA VoltageProbeResolution; + EFI_EXP_BASE10_DATA VoltageProbeTolerance; + EFI_EXP_BASE10_DATA VoltageProbeAccuracy; + EFI_EXP_BASE10_DATA VoltageProbeNominalValue; + EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold; + EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold; + EFI_EXP_BASE10_DATA MDLowerCriticalThreshold; + EFI_EXP_BASE10_DATA MDUpperCriticalThreshold; + EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold; + EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold; + UINT32 VoltageProbeOemDefined; +} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA; + +// +// Cooling Device - SMBIOS Type 27 +// +#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015 + +typedef struct { + UINT32 CoolingDevice :5; + UINT32 CoolingDeviceStatus :3; + UINT32 Reserved :24; +} EFI_MISC_COOLING_DEVICE_TYPE; + +typedef struct { + EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType; + EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink; + UINT8 CoolingDeviceUnitGroup; + UINT16 CoolingDeviceNominalSpeed; + UINT32 CoolingDeviceOemDefined; +} EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA; + +// +// Temperature Probe - SMBIOS Type 28 +// +#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x0000001= 6 + +typedef struct { + UINT32 TemperatureProbeSite :5; + UINT32 TemperatureProbeStatus :3; + UINT32 Reserved :24; +} EFI_MISC_TEMPERATURE_PROBE_LOCATION; + +typedef struct { + STRING_REF TemperatureProbeDescription; + EFI_MISC_TEMPERATURE_PROBE_LOCATION + TemperatureProbeLocation; + /// + /// Inconsistent with specification here: + /// MiscSubclass 0.9 specification defines the fields type as EFI_EXP_B= ASE10_DATA. + /// In fact, they should be UINT16 type because they refer to 16bit wid= th data. + /// Keeping this inconsistency for backward compatibility. + /// + UINT16 TemperatureProbeMaximumValue; + UINT16 TemperatureProbeMinimumValue; + UINT16 TemperatureProbeResolution; + UINT16 TemperatureProbeTolerance; + UINT16 TemperatureProbeAccuracy; + UINT16 TemperatureProbeNominalValue; + UINT16 MDLowerNoncriticalThreshold; + UINT16 MDUpperNoncriticalThreshold; + UINT16 MDLowerCriticalThreshold; + UINT16 MDUpperCriticalThreshold; + UINT16 MDLowerNonrecoverableThreshold; + UINT16 MDUpperNonrecoverableThreshold; + UINT32 TemperatureProbeOemDefined; +} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA; + +// +// Electrical Current Probe - SMBIOS Type 29 +// + +#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x= 00000017 + +typedef struct { + UINT32 ElectricalCurrentProbeSite :5; + UINT32 ElectricalCurrentProbeStatus :3; + UINT32 Reserved :24; +} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION; + +typedef struct { + STRING_REF ElectricalCurrentProbeDescription; + EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION + ElectricalCurrentProbeLocation; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy; + EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue; + EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold; + EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold; + EFI_EXP_BASE10_DATA MDLowerCriticalThreshold; + EFI_EXP_BASE10_DATA MDUpperCriticalThreshold; + EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold; + EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold; + UINT32 ElectricalCurrentProbeOemDefined; +} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA; + +// +// Out-of-Band Remote Access - SMBIOS Type 30 +// + +#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER = 0x00000018 + +typedef struct { + UINT32 InboundConnectionEnabled :1; + UINT32 OutboundConnectionEnabled :1; + UINT32 Reserved :30; +} EFI_MISC_REMOTE_ACCESS_CONNECTIONS; + +typedef struct { + STRING_REF RemoteAccessManufacturerNameDescript= ion; + EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections; +} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA; + +// +// Misc. BIS Entry Point - SMBIOS Type 31 +// +#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019 + +typedef struct { + EFI_PHYSICAL_ADDRESS BisEntryPoint; +} EFI_MISC_BIS_ENTRY_POINT_DATA; + +// +// Misc. Boot Information - SMBIOS Type 32 +// +#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BOO= T_INFORMATION_STATUS_TYPE. +/// Keep it unchanged for backward compatibilty. +/// +typedef enum { + EfiBootInformationStatusNoError =3D 0x00, + EfiBootInformationStatusNoBootableMedia =3D 0x01, + EfiBootInformationStatusNormalOSFailedLoading =3D 0x02, + EfiBootInformationStatusFirmwareDetectedFailure =3D 0x03, + EfiBootInformationStatusOSDetectedFailure =3D 0x04, + EfiBootInformationStatusUserRequestedBoot =3D 0x05, + EfiBootInformationStatusSystemSecurityViolation =3D 0x06, + EfiBootInformationStatusPreviousRequestedImage =3D 0x07, + EfiBootInformationStatusWatchdogTimerExpired =3D 0x08, + EfiBootInformationStatusStartReserved =3D 0x09, + EfiBootInformationStatusStartOemSpecific =3D 0x80, + EfiBootInformationStatusStartProductSpecific =3D 0xC0 +} EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE; + +typedef struct { + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, the field name is EFI_MISC_BOOT_= INFORMATION_STATUS_TYPE. + /// Keep it unchanged for backward compatibilty. + /// + EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus; + UINT8 BootInformationData[9]; +} EFI_MISC_BOOT_INFORMATION_STATUS_DATA; + +// +// Management Device - SMBIOS Type 34 +// +#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001= B + +typedef enum { + EfiManagementDeviceTypeOther =3D 0x01, + EfiManagementDeviceTypeUnknown =3D 0x02, + EfiManagementDeviceTypeLm75 =3D 0x03, + EfiManagementDeviceTypeLm78 =3D 0x04, + EfiManagementDeviceTypeLm79 =3D 0x05, + EfiManagementDeviceTypeLm80 =3D 0x06, + EfiManagementDeviceTypeLm81 =3D 0x07, + EfiManagementDeviceTypeAdm9240 =3D 0x08, + EfiManagementDeviceTypeDs1780 =3D 0x09, + EfiManagementDeviceTypeMaxim1617 =3D 0x0A, + EfiManagementDeviceTypeGl518Sm =3D 0x0B, + EfiManagementDeviceTypeW83781D =3D 0x0C, + EfiManagementDeviceTypeHt82H791 =3D 0x0D +} EFI_MISC_MANAGEMENT_DEVICE_TYPE; + +typedef enum { + EfiManagementDeviceAddressTypeOther =3D 1, + EfiManagementDeviceAddressTypeUnknown =3D 2, + EfiManagementDeviceAddressTypeIOPort =3D 3, + EfiManagementDeviceAddressTypeMemory =3D 4, + EfiManagementDeviceAddressTypeSmbus =3D 5 +} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE; + +typedef struct { + STRING_REF ManagementDeviceDescription; + EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType; + UINTN ManagementDeviceAddress; + EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE + ManagementDeviceAddressType; +} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA; + +// +// Management Device Component - SMBIOS Type 35 +// + +#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER = 0x0000001C + +typedef struct { + STRING_REF ManagementDeviceComponentDescription; + EFI_INTER_LINK_DATA ManagementDeviceLink; + EFI_INTER_LINK_DATA ManagementDeviceComponentLink; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this field is NOT defined. + /// It's introduced for SmBios 2.6 specification type 35. + /// + EFI_INTER_LINK_DATA ManagementDeviceThresholdLink; + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, this field is NOT defined. + /// It's implementation-specific to simplify the code logic. + /// + UINT8 ComponentType; +} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA; + +// +// IPMI Data Record - SMBIOS Type 38 +// +typedef enum { + EfiIpmiOther =3D 0, + EfiIpmiKcs =3D 1, + EfiIpmiSmic =3D 2, + EfiIpmiBt =3D 3 +} EFI_MISC_IPMI_INTERFACE_TYPE; + +typedef struct { + UINT16 IpmiSpecLeastSignificantDigit:4; + UINT16 IpmiSpecMostSignificantDigit: 4; + UINT16 Reserved: 8; +} EFI_MISC_IPMI_SPECIFICATION_REVISION; + +typedef struct { + EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType; + EFI_MISC_IPMI_SPECIFICATION_REVISION + IpmiSpecificationRevision; + UINT16 IpmiI2CSlaveAddress; + UINT16 IpmiNvDeviceAddress; + UINT64 IpmiBaseAddress; + EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath; +} EFI_MISC_IPMI_INTERFACE_TYPE_DATA; + +#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D +/// +/// The definition above is *NOT* defined in MiscSubclass specifications = 0.9. +/// It's defined for backward compatibility. +/// +#define EFI_MISC_IPMI_INTERFACE_TYPE_DATA_RECORD_NUMBER EFI_MISC_IPMI_INT= ERFACE_TYPE_RECORD_NUMBER + +/// +/// System Power supply Record - SMBIOS Type 39 +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the type of all fields are UINT32. +/// Keep it unchanged for backward compatibilty. +/// +typedef struct { + UINT16 PowerSupplyHotReplaceable:1; + UINT16 PowerSupplyPresent :1; + UINT16 PowerSupplyUnplugged :1; + UINT16 InputVoltageRangeSwitch :4; + UINT16 PowerSupplyStatus :3; + UINT16 PowerSupplyType :4; + UINT16 Reserved :2; +} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS; + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_POW= ER_SUPPLY_UNIT_GROUP_DATA. +/// Keep it unchanged for backward compatibilty. +/// +typedef struct { + UINT16 PowerUnitGroup; + STRING_REF PowerSupplyLocation; + STRING_REF PowerSupplyDeviceName; + STRING_REF PowerSupplyManufacturer; + STRING_REF PowerSupplySerialNumber; + STRING_REF PowerSupplyAssetTagNumber; + STRING_REF PowerSupplyModelPartNumber; + STRING_REF PowerSupplyRevisionLevel; + UINT16 PowerSupplyMaxPowerCapacity; + EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics; + EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink= ; + EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink; + EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink= ; +} EFI_MISC_SYSTEM_POWER_SUPPLY_DATA; + +#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E + +/// +/// OEM Data Record - SMBIOS Type 0x80-0xFF +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the structure name is EFI_SMBIOS_S= TRUCTURE_HDR. +/// Due to this, the structure is commonly used by vendors to construct S= mBios type 0x80~0xFF table, +/// Keep it unchanged for backward compatibilty. +/// +typedef struct { + UINT8 Type; + UINT8 Length; + UINT16 Handle; +} SMBIOS_STRUCTURE_HDR; + +typedef struct { + /// + /// Inconsistent with specification here: + /// In MiscSubclass specification 0.9, the field name is EFI_SMBIOS_STR= UCTURE_HDR. + /// Keep it unchanged for backward compatibilty. + /// + SMBIOS_STRUCTURE_HDR Header; + UINT8 RawData[1]; +} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA; + +#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F + +/// +/// Misc. System Event Log - SMBIOS Type 15 +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the following data structures are = NOT defined. +/// It's introduced for SmBios 2.6 specification type 15. +/// +#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020 + +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the following data structures are = NOT defined. +/// It's introduced for SmBios 2.6 specification type 15. +/// +typedef struct { + UINT16 LogAreaLength; + UINT16 LogHeaderStartOffset; + UINT16 LogDataStartOffset; + UINT8 AccessMethod; + UINT8 LogStatus; + UINT32 LogChangeToken; + UINT32 AccessMethodAddress; + UINT8 LogHeaderFormat; + UINT8 NumberOfSupportedLogType; + UINT8 LengthOfLogDescriptor; +} EFI_MISC_SYSTEM_EVENT_LOG_DATA; + +// +// Access Method. +// 0x00~0x04: as following definition +// 0x05~0x7f: Available for future assignment. +// 0x80~0xff: BIOS Vendor/OEM-specific. +// +#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00 +#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01 +#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02 +#define ACCESS_MEMORY_MAPPED 0x03 +#define ACCESS_GPNV 0x04 + +/// +/// Management Device Threshold Data Record - SMBIOS Type 36 +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the following data structures are = NOT defined. +/// It's introduced for SmBios 2.6 specification type 36. +/// +#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021 +/// +/// Inconsistent with specification here: +/// In MiscSubclass specification 0.9, the following data structures are = NOT defined. +/// It's introduced for SmBios 2.6 specification type 36. +/// +typedef struct { + UINT16 LowerThresNonCritical; + UINT16 UpperThresNonCritical; + UINT16 LowerThresCritical; + UINT16 UpperThresCritical; + UINT16 LowerThresNonRecover; + UINT16 UpperThresNonRecover; +} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD; + +// +// Declare the following strutures alias to use them more conviniently. +// +typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_P= CI_BUS; +typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_V= ENDOR; +typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM= _MANUFACTURER; +typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_B= OARD_MANUFACTURER; +typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSI= S_MANUFACTURER; +typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_I= NTERNAL_CONNECTOR_DESIGNATOR; +typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM= _SLOT_DESIGNATION; +typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOAR= D_DEVICE; +typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOAR= D_DEVICE_TYPE_DATA; +typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_ST= RING; +typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM= _OPTION_STRING; +typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER= _OF_INSTALLABLE_LANGUAGES; +typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM= _LANGUAGE_STRING; +typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM= _EVENT_LOG; +typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_EN= TRY_POINT; +typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_I= NFORMATION_STATUS; +typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA EFI_MISC_SYSTEM= _POWER_SUPPLY; +typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS= _STRUCT_ENCAPSULATION; +typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDU= LED_POWER_ON_MONTH; +typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAG= E_PROBE_DESCRIPTION; +typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLIN= G_DEVICE_TEMP_LINK; +typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPER= ATURE_PROBE_DESCRIPTION; +typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA + EFI_MISC_REMOTE= _ACCESS_MANUFACTURER_DESCRIPTION; +typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGE= MENT_DEVICE_DESCRIPTION; +typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECT= RICAL_CURRENT_PROBE_DESCRIPTION; +typedef EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA + EFI_MISC_MANAGE= MENT_DEVICE_COMPONENT_DESCRIPTION; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It is implementation-specific to simplify the code logic. +/// +typedef union { + EFI_MISC_LAST_PCI_BUS_DATA LastPciBus; + EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor; + EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufactur= er; + EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufac= turer; + EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufactu= rer; + EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConn= ectorDesignator; + EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesign= ation; + EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice; + EFI_MISC_OEM_STRING_DATA MiscOemString; + EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString; + EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableL= anguages; + EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageSt= ring; + EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog; + EFI_MISC_GROUP_NAME_DATA MiscGroupNameData; + EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData= ; + EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTy= peData; + EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapabliliti= esData; + EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecurity= SettingsData; + EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOn= MonthData; + EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDesc= riptionData; + EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTem= pLinkData; + EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbe= DescriptionData; + EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurren= tProbeDescriptionData; + EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA + MiscRemoteAccessManu= facturerDescriptionData; + EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint; + EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationS= tatus; + EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceD= escriptionData; + EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA + MiscmangementDeviceC= omponentDescriptionData; + EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTyp= eData; + EFI_MISC_SYSTEM_POWER_SUPPLY_DATA MiscPowerSupplyInfo; + EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEnca= psulation; + EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDevice= Threshold; +} EFI_MISC_SUBCLASS_RECORDS; + +/// +/// Inconsistent with specification here: +/// In MemSubclass specification 0.9, the following data structures are N= OT defined. +/// It is implementation-specific to simplify the code logic. +/// +typedef struct { + EFI_SUBCLASS_TYPE1_HEADER Header; + EFI_MISC_SUBCLASS_RECORDS Record; +} EFI_MISC_SUBCLASS_DRIVER_DATA; +#pragma pack() + +/// +/// Inconsistent with specification here: +/// In DataHubSubclass specification 0.9 page 16, the following symbol is= NOT defined. +/// But value is meaningful, 0 means Reserved. +/// +#define EFI_SUBCLASS_INSTANCE_RESERVED 0 +/// +/// Inconsistent with specification here: +/// In DataHubSubclass specification 0.9 page 16, the following symbol is= NOT defined. +/// But value is meaningful, -1 means Not Applicable. +/// +#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF + +#endif diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDevi= ceFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDev= iceFunction.c index 3872312c30..3e74ec31db 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunct= ion.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunct= ion.c @@ -1,12 +1,9 @@ /*++ =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscMemoryDeviceFunction.c @@ -22,8 +19,6 @@ Abstract: =20 #include "CommonHeader.h" #include "MiscSubclassDriver.h" -#include -#include #include =20 =20 @@ -46,13 +41,6 @@ enum { }; =20 =20 -typedef struct { - EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress; - EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress; - EFI_INTER_LINK_DATA PhysicalMemoryArrayLink; - UINT16 MemoryArrayPartitionWidth; -} EFI_MEMORY_ARRAY_START_ADDRESS; - /** This function makes boot time changes to the contents of the MiscBiosVendor (Type 0). @@ -108,6 +96,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice ) EFI_STATUS Status; STRING_REF TokenToGet; SMBIOS_TABLE_TYPE17 *SmbiosRecord; + SMBIOS_TABLE_TYPE19 *SmbiosRecord19; EFI_SMBIOS_HANDLE SmbiosHandle; EFI_MEMORY_ARRAY_LINK_DATA *ForType17InputData; UINT16 DdrFreq=3D0; @@ -117,6 +106,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice ) =20 UINT8 Dimm; UINT8 NumSlots; + UINT64 TotalMemorySize; STRING_REF DevLocator[] =3D { STRING_TOKEN(STR_MISC_MEM_DEV_LOCATOR0), STRING_TOKEN(STR_MISC_MEM_= DEV_LOCATOR1) }; @@ -183,137 +173,193 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice ) break; } =20 - for (Dimm =3D 0; Dimm < NumSlots; Dimm++) { - // - // Memory Device Locator - // - TokenToGet =3D DevLocator[Dimm]; - MemDevice =3D SmbiosMiscGetString (TokenToGet); - MemDeviceStrLen =3D StrLen(MemDevice); - if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - TokenToGet =3D DevLocator[Dimm]; - MemDevice =3D SmbiosMiscGetString (TokenToGet); - MemDeviceStrLen =3D StrLen(MemDevice); - if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Memory Bank Locator - // - TokenToGet =3D BankLocator[Dimm]; - MemBankLocator =3D SmbiosMiscGetString (TokenToGet); - MemBankLocatorStrLen =3D StrLen(MemBankLocator); - if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Memory Manufacturer - // - TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_MANUFACTURER); - MemManufacturer =3D SmbiosMiscGetString (TokenToGet); - MemManufacturerStrLen =3D StrLen(MemManufacturer); - if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Memory Serial Number - // - TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_SERIAL_NO); - MemSerialNumber =3D SmbiosMiscGetString (TokenToGet); - MemSerialNumberStrLen =3D StrLen(MemSerialNumber); - if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Memory Asset Tag Number - // - TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_ASSET_TAG); - MemAssetTag =3D SmbiosMiscGetString (TokenToGet); - MemAssetTagStrLen =3D StrLen(MemAssetTag); - if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Memory Part Number - // - TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_PART_NUMBER); - MemPartNumber =3D SmbiosMiscGetString (TokenToGet); - MemPartNumberStrLen =3D StrLen(MemPartNumber); - if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; - } - - // - // Two zeros following the last string. - // - SmbiosRecord =3D AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDevic= eStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSer= ialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1); - ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen= + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumb= erStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1); - - SmbiosRecord->Hdr.Type =3D EFI_SMBIOS_TYPE_MEMORY_DEVICE; - SmbiosRecord->Hdr.Length =3D sizeof (SMBIOS_TABLE_TYPE17); - - // - // Make handle chosen by smbios protocol.add automatically. - // - SmbiosRecord->Hdr.Handle =3D 0; - - // - // Memory Array Handle will be the 3rd optional string following the = formatted structure. - // GetType16Hndl( Smbios, &Type16Handle); - SmbiosRecord->MemoryArrayHandle =3D Type16Handle; + TotalMemorySize =3D 0; + for (Dimm =3D 0; Dimm < NumSlots; Dimm++) { + // + // Memory Device Locator + // + TokenToGet =3D DevLocator[Dimm]; + MemDevice =3D SmbiosMiscGetString (TokenToGet); + MemDeviceStrLen =3D StrLen(MemDevice); + if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } =20 - // - // Memory Size - // - if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=3D0){ - SmbiosRecord->TotalWidth =3D 32; - SmbiosRecord->DataWidth =3D 32; - SmbiosRecord->Size =3D MemInfoHob->MemInfoData.dimmSize[Dimm]; - SmbiosRecord->Speed =3D DdrFreq; - SmbiosRecord->ConfiguredMemoryClockSpeed =3D DdrFreq; - SmbiosRecord->FormFactor =3D EfiMemoryFormFactorDimm; - } + TokenToGet =3D DevLocator[Dimm]; + MemDevice =3D SmbiosMiscGetString (TokenToGet); + MemDeviceStrLen =3D StrLen(MemDevice); + if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Memory Bank Locator + // + TokenToGet =3D BankLocator[Dimm]; + MemBankLocator =3D SmbiosMiscGetString (TokenToGet); + MemBankLocatorStrLen =3D StrLen(MemBankLocator); + if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Memory Manufacturer + // + TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_MANUFACTURER); + MemManufacturer =3D SmbiosMiscGetString (TokenToGet); + MemManufacturerStrLen =3D StrLen(MemManufacturer); + if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Memory Serial Number + // + TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_SERIAL_NO); + MemSerialNumber =3D SmbiosMiscGetString (TokenToGet); + MemSerialNumberStrLen =3D StrLen(MemSerialNumber); + if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Memory Asset Tag Number + // + TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_ASSET_TAG); + MemAssetTag =3D SmbiosMiscGetString (TokenToGet); + MemAssetTagStrLen =3D StrLen(MemAssetTag); + if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Memory Part Number + // + TokenToGet =3D STRING_TOKEN (STR_MISC_MEM_PART_NUMBER); + MemPartNumber =3D SmbiosMiscGetString (TokenToGet); + MemPartNumberStrLen =3D StrLen(MemPartNumber); + if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) { + return EFI_UNSUPPORTED; + } + + // + // Two zeros following the last string. + // + SmbiosRecord =3D AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDev= iceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemS= erialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1); + ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrL= en + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNu= mberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1); + + SmbiosRecord->Hdr.Type =3D EFI_SMBIOS_TYPE_MEMORY_DEVICE; + SmbiosRecord->Hdr.Length =3D sizeof (SMBIOS_TABLE_TYPE17); + + // + // Make handle chosen by smbios protocol.add automatically. + // + SmbiosRecord->Hdr.Handle =3D 0; + + // + // Memory Array Handle will be the 3rd optional string following th= e formatted structure. + // + SmbiosRecord->MemoryArrayHandle =3D Type16Handle; + + // + // Memory Size + // + if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=3D0){ + SmbiosRecord->TotalWidth =3D 32; + SmbiosRecord->DataWidth =3D 32; + SmbiosRecord->Size =3D MemInfoHob->MemInfoData.dimmSize[Dimm]; + SmbiosRecord->Speed =3D DdrFreq; + SmbiosRecord->ConfiguredMemoryClockSpeed =3D DdrFreq; + SmbiosRecord->FormFactor =3D EfiMemoryFormFactorDimm; + } =20 - SmbiosRecord->DeviceSet =3D(UINT8) ForType17InputData->MemoryDeviceSe= t; - SmbiosRecord->DeviceLocator=3D 1; - SmbiosRecord->BankLocator =3D 2; + SmbiosRecord->DeviceSet =3D(UINT8) ForType17InputData->MemoryDevice= Set; + SmbiosRecord->DeviceLocator=3D 1; + SmbiosRecord->BankLocator =3D 2; =20 =20 - SmbiosRecord->Manufacturer =3D 3; - SmbiosRecord->SerialNumber=3D 4; - SmbiosRecord->AssetTag=3D 5; - SmbiosRecord->PartNumber=3D 6; - SmbiosRecord->Attributes =3D (UINT8) ForType17InputData->MemoryState; - SmbiosRecord->MemoryType =3D MemoryType; + SmbiosRecord->Manufacturer =3D 3; + SmbiosRecord->SerialNumber=3D 4; + SmbiosRecord->AssetTag=3D 5; + SmbiosRecord->PartNumber=3D 6; + SmbiosRecord->Attributes =3D (UINT8) ForType17InputData->MemoryStat= e; + SmbiosRecord->MemoryType =3D MemoryType; =20 - OptionalStrStart =3D (CHAR8 *)(SmbiosRecord + 1); - UnicodeStrToAsciiStr(MemDevice, OptionalStrStart); - UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceStrL= en + 1); - UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceStr= Len + 1 + MemBankLocatorStrLen + 1); - UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceStr= Len + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1); - UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLen = + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumbe= rStrLen + 1); - UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStrLe= n + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNum= berStrLen + 1+ MemAssetTagStrLen+1 ); + OptionalStrStart =3D (CHAR8 *)(SmbiosRecord + 1); + UnicodeStrToAsciiStr(MemDevice, OptionalStrStart); + UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceSt= rLen + 1); + UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceS= trLen + 1 + MemBankLocatorStrLen + 1); + UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceS= trLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1); + UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLe= n + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNum= berStrLen + 1); + UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStr= Len + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialN= umberStrLen + 1+ MemAssetTagStrLen+1 ); + + // + // Now we have got the full smbios record, call smbios protocol to = add this record. + // + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + Status =3D Smbios-> Add( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord + ); + + if ((SmbiosRecord->Size & BIT15) !=3D 0) { + // + // Size is in KB + // + TotalMemorySize =3D TotalMemorySize + LShiftU64 (SmbiosRecord->Si= ze, 10); + } else { + // + // Size is in MB + // + TotalMemorySize =3D TotalMemorySize + LShiftU64 (SmbiosRecord->Si= ze, 20); + } + + FreePool(SmbiosRecord); + } + + // + // Allocate and zero SMBIOS TYPE 19 Record + // + SmbiosRecord19 =3D AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE19)); + ASSERT (SmbiosRecord19 !=3D NULL); + + // + // Fill in SMBIOS type 19 information + // + SmbiosRecord19->Hdr.Type =3D SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS; + SmbiosRecord19->Hdr.Length =3D (UINT8) sizeof (SMBIOS_TABLE_TYPE19); + SmbiosRecord19->Hdr.Handle =3D 0; + + SmbiosRecord19->MemoryArrayHandle =3D Type16Handle; + SmbiosRecord19->PartitionWidth =3D NumSlots; + if (TotalMemorySize <=3D SIZE_4TB) { + SmbiosRecord19->StartingAddress =3D 0x0; + // + // Convert bytes to KB + // + SmbiosRecord19->EndingAddress =3D (UINT32)RShiftU64 (Tota= lMemorySize, 10) - 1; + SmbiosRecord19->ExtendedStartingAddress =3D 0; + SmbiosRecord19->ExtendedEndingAddress =3D 0; + } else { + SmbiosRecord19->StartingAddress =3D 0xffffffff; + SmbiosRecord19->EndingAddress =3D 0xffffffff; + SmbiosRecord19->ExtendedStartingAddress =3D 0; + SmbiosRecord19->ExtendedEndingAddress =3D TotalMemorySize - 1; + } =20 // - // Now we have got the full smbios record, call smbios protocol to ad= d this record. + // Add SMBIOS type 19 record to SMBIOS table. // SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; - Status =3D Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); - FreePool(SmbiosRecord); - } + Smbios->Add( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord19 + ); + return Status; } diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x9= 4Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x9= 4Function.c index 2f25ab802b..97a782e362 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Functi= on.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Functi= on.c @@ -17,7 +17,6 @@ Abstract: #include "CommonHeader.h" =20 #include "MiscSubclassDriver.h" -#include #include #include #include diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorC= acheData.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCa= cheData.c index 6af7f56107..44f2530ac3 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheDat= a.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheDat= a.c @@ -1,12 +1,9 @@ /*++ =20 -Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscBiosProcessorCache.c @@ -28,6 +25,4 @@ Abstract: // // Static (possibly build generated) Processor cache data. // -MISC_SMBIOS_TABLE_DATA(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache) =3D= { -0 -}; +MISC_SMBIOS_TABLE_DATA(UINTN, MiscProcessorCache) =3D 0; diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorC= acheFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcess= orCacheFunction.c index ca121525a0..c64e87e20b 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFun= ction.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFun= ction.c @@ -1,12 +1,9 @@ /*++ =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscProcessorCacheFunction.c @@ -20,170 +17,144 @@ Abstract: --*/ #include "CommonHeader.h" #include "MiscSubclassDriver.h" -#include -#include - -UINT32 -ConvertBase2ToRaw ( - IN EFI_EXP_BASE2_DATA *Data) -{ - UINTN Index; - UINT32 RawData; - - RawData =3D Data->Value; - for (Index =3D 0; Index < (UINTN) Data->Exponent; Index++) { - RawData <<=3D 1; - } - - return RawData; -} - +#include =20 MISC_SMBIOS_TABLE_FUNCTION(MiscProcessorCache) { =09EFI_SMBIOS_HANDLE SmbiosHandle; - SMBIOS_TABLE_TYPE7 *SmbiosRecordL1; - SMBIOS_TABLE_TYPE7 *SmbiosRecordL2; + SMBIOS_TABLE_TYPE7 *SmbiosRecord; =20 =09EFI_CACHE_SRAM_TYPE_DATA CacheSramType; =09CHAR16 *SocketDesignation; =09CHAR8 *OptionalStrStart; =09UINTN SocketStrLen; =09STRING_REF TokenToGet; - EFI_DATA_HUB_PROTOCOL *DataHub; - UINT64 MonotonicCount; - EFI_DATA_RECORD_HEADER *Record; - EFI_SUBCLASS_TYPE1_HEADER *DataHeader; - UINT8 *SrcData; - EFI_STATUS Status; + UINT32 SubIndex; + CPUID_CACHE_PARAMS_EAX CacheParamsEax; + CPUID_CACHE_PARAMS_EBX CacheParamsEbx; + UINT32 RegisterEcx; + CPUID_CACHE_PARAMS_EDX CacheParamsEdx; + UINT8 SystemCacheType; + UINTN Size; =20 =09// - // Memory Device LOcator + // Memory Device Locator =09// - DEBUG ((EFI_D_ERROR, "type 7\n")); - =09TokenToGet =3D STRING_TOKEN (STR_SOCKET_DESIGNATION); =09SocketDesignation =3D SmbiosMiscGetString (TokenToGet); =09SocketStrLen =3D StrLen(SocketDesignation); =09if (SocketStrLen > SMBIOS_STRING_MAX_LENGTH) { - return EFI_UNSUPPORTED; + return EFI_UNSUPPORTED; =09} =20 - SmbiosRecordL1 =3D AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1)= ; - ASSERT (SmbiosRecordL1 !=3D NULL); - ZeroMem(SmbiosRecordL1, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1); - - SmbiosRecordL2 =3D AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1)= ; - ASSERT (SmbiosRecordL2 !=3D NULL); - ZeroMem(SmbiosRecordL2, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1); - - // - // Get the Data Hub Protocol. Assume only one instance - // - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (VOID **)&DataHub - ); - ASSERT_EFI_ERROR(Status); - - MonotonicCount =3D 0; - Record =3D NULL; - - do { - Status =3D DataHub->GetNextRecord ( - DataHub, - &MonotonicCount, - NULL, - &Record - ); - =09if (!EFI_ERROR(Status)) { - =09 if (Record->DataRecordClass =3D=3D EFI_DATA_RECORD_CLASS_DATA) { - =09 =09DataHeader =3D (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1); - =09 =09SrcData =3D (UINT8 *)(DataHeader + 1); - =09 =09if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) = && (DataHeader->RecordType =3D=3D CacheSizeRecordType)) { - =09 if (DataHeader->SubInstance =3D=3D EFI_CACHE_L1) { - =09 =09 =09SmbiosRecordL1->InstalledSize +=3D (UINT16) (ConvertBase2ToRa= w((EFI_EXP_BASE2_DATA *)SrcData) >> 10); - =09 =09 =09SmbiosRecordL1->MaximumCacheSize =3D SmbiosRecordL1->Installe= dSize; - =09 } - =09 =09 else if (DataHeader->SubInstance =3D=3D EFI_CACHE_L2) { - =09 =09 =09SmbiosRecordL2->InstalledSize +=3D (UINT16) (ConvertBase2ToRa= w((EFI_EXP_BASE2_DATA *)SrcData) >> 10); - =09 =09 =09SmbiosRecordL2->MaximumCacheSize =3D SmbiosRecordL2->Installe= dSize; - =09 } else { - =09 =09 continue; - =09 } - =09 =09} - =09} - } - } while (!EFI_ERROR(Status) && (MonotonicCount !=3D 0)); - - // - //Filling SMBIOS type 7 information for different cache levels. - // - - SmbiosRecordL1->Hdr.Type =3D EFI_SMBIOS_TYPE_CACHE_INFORMATION; - SmbiosRecordL1->Hdr.Length =3D (UINT8) sizeof (SMBIOS_TABLE_TYPE7); - SmbiosRecordL1->Hdr.Handle =3D 0; - - SmbiosRecordL1->Associativity =3D CacheAssociativity8Way; - SmbiosRecordL1->SystemCacheType =3D CacheTypeUnknown; - SmbiosRecordL1->SocketDesignation =3D 0x01; - SmbiosRecordL1->CacheSpeed =3D 0; - SmbiosRecordL1->CacheConfiguration =3D 0x0180; - ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA)); - CacheSramType.Synchronous =3D 1; - CopyMem(&SmbiosRecordL1->SupportedSRAMType, &CacheSramType, 2); - CopyMem(&SmbiosRecordL1->CurrentSRAMType, &CacheSramType, 2); - SmbiosRecordL1->ErrorCorrectionType =3D EfiCacheErrorSingleBit; - - - SmbiosRecordL2->Hdr.Type =3D EFI_SMBIOS_TYPE_CACHE_INFORMATION; - SmbiosRecordL2->Hdr.Length =3D (UINT8) sizeof (SMBIOS_TABLE_TYPE7); - SmbiosRecordL2->Hdr.Handle =3D 0; - - SmbiosRecordL2->Associativity =3D CacheAssociativity16Way; - SmbiosRecordL2->SystemCacheType =3D CacheTypeInstruction; - SmbiosRecordL2->SocketDesignation =3D 0x01; - SmbiosRecordL2->CacheSpeed =3D 0; - SmbiosRecordL2->CacheConfiguration =3D 0x0281; - ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA)); - CacheSramType.Synchronous =3D 1; - CopyMem(&SmbiosRecordL2->SupportedSRAMType, &CacheSramType, 2); - CopyMem(&SmbiosRecordL2->CurrentSRAMType, &CacheSramType, 2); - SmbiosRecordL2->ErrorCorrectionType =3D EfiCacheErrorSingleBit; - - - - // - //Adding SMBIOS type 7 records to SMBIOS table. - // - SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; - OptionalStrStart =3D (CHAR8 *)(SmbiosRecordL1 + 1); - UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart); - - Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL1 - ); - - // - //VLV2 incorporates two SLM modules (quad cores) in the SoC. 2 cores sha= re BIU/L2 cache - // - SmbiosRecordL2->InstalledSize =3D (SmbiosRecordL2->InstalledSize)/2; - SmbiosRecordL2->MaximumCacheSize =3D SmbiosRecordL2->InstalledSize; - SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; - - OptionalStrStart =3D (CHAR8 *)(SmbiosRecordL2 + 1); - UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart); - - Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL2 - ); - + // + // Retrieve cache level information using CPUID + // + for (SubIndex =3D 0; ; SubIndex++) { + AsmCpuidEx ( + CPUID_CACHE_PARAMS, + SubIndex, + &CacheParamsEax.Uint32, + &CacheParamsEbx.Uint32, + &RegisterEcx, + &CacheParamsEdx.Uint32 + ); + // + // Terminate loop when CacheType is CPUID_CACHE_PARAMS_CACHE_TYPE_NUL= L + // + if (CacheParamsEax.Bits.CacheType =3D=3D CPUID_CACHE_PARAMS_CACHE_TYP= E_NULL) { + break; + } + + // + // Allocate and zero SMBIOS TYPE 7 Record + // + SmbiosRecord =3D AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1= + 1); + ASSERT (SmbiosRecord !=3D NULL); + + // + // Compute cache size in bytes + // + Size =3D (CacheParamsEbx.Bits.Ways + 1) * + (CacheParamsEbx.Bits.LinePartitions + 1) * + (CacheParamsEbx.Bits.LineSize + 1) * + (RegisterEcx + 1); + DEBUG ((DEBUG_INFO, "MiscProcessorCache(): Cache Type =3D %d Cache L= evel =3D %d Size =3D %x\n", CacheParamsEax.Bits.CacheType, CacheParamsEax.= Bits.CacheLevel, Size)); + + // + // Determine SMBIOS SystemCacheType + // + switch (CacheParamsEax.Bits.CacheType) { + case 1: + SystemCacheType =3D CacheTypeData; + break; + case 2: + SystemCacheType =3D CacheTypeInstruction; + break; + case 3: + SystemCacheType =3D CacheTypeUnified; + break; + default: + SystemCacheType =3D CacheTypeUnknown; + } + + // + // Update cache sizes in KB + // + switch (CacheParamsEax.Bits.CacheLevel) { + case 1: + SmbiosRecord->InstalledSize =3D (UINT16)(Size >> 10); + SmbiosRecord->MaximumCacheSize =3D SmbiosRecord->InstalledSize; + SmbiosRecord->SystemCacheType =3D SystemCacheType; + SmbiosRecord->Associativity =3D CacheAssociativity8Way; + SmbiosRecord->CacheConfiguration =3D 0x0180; + break; + case 2: + SmbiosRecord->InstalledSize =3D (UINT16)(Size >> 10); + SmbiosRecord->MaximumCacheSize =3D SmbiosRecord->InstalledSize; + SmbiosRecord->SystemCacheType =3D SystemCacheType; + SmbiosRecord->Associativity =3D CacheAssociativity16Way; + SmbiosRecord->CacheConfiguration =3D 0x0281; + // + //VLV2 incorporates two SLM modules (quad cores) in the SoC. + // 2 cores share BIU/L2 cache + // + SmbiosRecord->InstalledSize =3D SmbiosRecord->InstalledSize / 2; + SmbiosRecord->MaximumCacheSize =3D SmbiosRecord->InstalledSize; + break; + default: + DEBUG ((DEBUG_ERROR, "MiscProcessorCache(): Unexpected cache level = %d\n", CacheParamsEax.Bits.CacheLevel)); + break; + } + + // + //Filling SMBIOS type 7 information for different cache levels. + // + SmbiosRecord->Hdr.Type =3D EFI_SMBIOS_TYPE_CACHE_INFORMATION; + SmbiosRecord->Hdr.Length =3D (UINT8) sizeof (SMBIOS_TABLE_TYPE7); + SmbiosRecord->Hdr.Handle =3D 0; + + SmbiosRecord->SocketDesignation =3D 0x01; + SmbiosRecord->CacheSpeed =3D 0; + ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA)); + CacheSramType.Synchronous =3D 1; + CopyMem(&SmbiosRecord->SupportedSRAMType, &CacheSramType, 2); + CopyMem(&SmbiosRecord->CurrentSRAMType, &CacheSramType, 2); + SmbiosRecord->ErrorCorrectionType =3D EfiCacheErrorSingleBit; + + // + // Adding SMBIOS type 7 records to SMBIOS table. + // + SmbiosHandle =3D SMBIOS_HANDLE_PI_RESERVED; + OptionalStrStart =3D (CHAR8 *)(SmbiosRecord + 1); + UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart); + + Smbios->Add( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord + ); + } =09return EFI_SUCCESS; } diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorI= nformationFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscP= rocessorInformationFunction.c index e01693ede7..e71a03ceac 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformat= ionFunction.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformat= ionFunction.c @@ -1,12 +1,9 @@ /*++ =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscProcessorInformationFunction.c @@ -23,9 +20,9 @@ Abstract: #include "MiscSubclassDriver.h" =20 #include -#include -#include #include +#include +#include =20 #define EfiProcessorFamilyIntelAtomProcessor 0x2B =20 @@ -75,33 +72,6 @@ GetCacheHandle ( *Handle =3D 0xFFFF; } =20 - -/** - This function makes boot time changes to the contents of the - MiscProcessorInformation (Type 4). - - @param RecordData Pointer to copy of RecordData from t= he Data Table. - - @retval EFI_SUCCESS All parameters were valid. - @retval EFI_UNSUPPORTED Unexpected RecordType value. - @retval EFI_INVALID_PARAMETER Invalid parameter was found. - -**/ -UINT32 -ConvertBase10ToRaw ( - IN EFI_EXP_BASE10_DATA *Data) -{ - UINTN Index; - UINT32 RawData; - - RawData =3D Data->Value; - for (Index =3D 0; Index < (UINTN) Data->Exponent; Index++) { - RawData *=3D 10; - } - - return RawData; -} - #define BSEL_CR_OVERCLOCK_CONTROL 0xCD #define FUSE_BSEL_MASK =09 =090x03 =20 @@ -137,6 +107,96 @@ DetermineiFsbFromMsr ( =20 } =20 +CHAR16 * +CpuidSocVendorBrandString ( + VOID + ) +{ + UINT32 MaximumExtendedFunction; + // + // Array to store brand string from 3 brand string leafs with + // 4 32-bit brand string values per leaf and an extra value to + // null terminate the string. + // + UINT32 BrandString[3 * 4 + 1]; + CHAR8 *AsciiBrandString; + CHAR16 *UnicodeBrandString; + UINTN Length; + + AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaximumExtendedFunction, NULL, NULL= , NULL); + + ZeroMem (&BrandString, sizeof (BrandString)); + if (CPUID_BRAND_STRING1 <=3D MaximumExtendedFunction) { + AsmCpuid ( + CPUID_BRAND_STRING1, + &BrandString[0], + &BrandString[1], + &BrandString[2], + &BrandString[3] + ); + } + if (CPUID_BRAND_STRING2 <=3D MaximumExtendedFunction) { + AsmCpuid ( + CPUID_BRAND_STRING2, + &BrandString[4], + &BrandString[5], + &BrandString[6], + &BrandString[7] + ); + } + if (CPUID_BRAND_STRING3 <=3D MaximumExtendedFunction) { + AsmCpuid ( + CPUID_BRAND_STRING3, + &BrandString[8], + &BrandString[9], + &BrandString[10], + &BrandString[11] + ); + } + + // + // Skip spaces at the beginning of the brand string + // + for (AsciiBrandString =3D (CHAR8 *)BrandString; *AsciiBrandString =3D= =3D ' '; AsciiBrandString++); + + DEBUG ((DEBUG_INFO, "Processor Brand String =3D %a\n", AsciiBrandString= )); + + // + // Convert ASCII brand string to an allocated Unicode brand string + // + Length =3D AsciiStrLen (AsciiBrandString) + 1; + UnicodeBrandString =3D AllocatePool (Length * sizeof (CHAR16)); + AsciiStrToUnicodeStrS (AsciiBrandString, UnicodeBrandString, Length); + + DEBUG ((DEBUG_INFO, "Processor Unicode Brand String =3D %s\n", UnicodeB= randString)); + + return UnicodeBrandString; +} + +UINT64 +MeasureTscFrequency ( + VOID + ) +{ + EFI_TPL CurrentTpl; + UINT64 BeginValue; + UINT64 EndValue; + UINT64 Frequency; + + // + // Wait for 10000us =3D 10ms for the calculation + // It needs a precise timer to calculate the ticks + // + CurrentTpl =3D gBS->RaiseTPL (TPL_HIGH_LEVEL); + BeginValue =3D AsmReadTsc (); + MicroSecondDelay (10000); + EndValue =3D AsmReadTsc (); + gBS->RestoreTPL (CurrentTpl); + Frequency =3D MultU64x32 (EndValue - BeginValue, 1000); + Frequency =3D DivU64x32 (Frequency, 10); + return Frequency; +} + MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation) { CHAR8 *OptionalStrStart; @@ -152,7 +212,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation) UINTN SocketStrLen=3D0; UINTN AssetTagStrLen=3D0; UINTN PartNumberStrLen=3D0; - UINTN ProcessorVoltage=3D0xAE; + UINTN ProcessorVoltage=3D(BIT7 | 9); UINT32 Eax01; UINT32 Ebx01; UINT32 Ecx01; @@ -169,17 +229,8 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation) UINTN NumberOfProcessors=3D0; UINT64 Frequency =3D 0; EFI_MP_SERVICES_PROTOCOL *MpService; - EFI_DATA_HUB_PROTOCOL *DataHub; - UINT64 MonotonicCount; - EFI_DATA_RECORD_HEADER *Record; - EFI_SUBCLASS_TYPE1_HEADER *DataHeader; - UINT8 *SrcData; - EFI_PROCESSOR_VERSION_DATA *ProcessorVersion; - CHAR16 *NewStringToken; - STRING_REF TokenToUpdate; PROCESSOR_ID_DATA *ProcessorId =3D NULL; =20 - // // First check for invalid parameters. // @@ -194,59 +245,6 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation) return EFI_INVALID_PARAMETER; } =20 - // - // Get the Data Hub Protocol. Assume only one instance - // - Status =3D gBS->LocateProtocol ( - &gEfiDataHubProtocolGuid, - NULL, - (VOID **)&DataHub - ); - ASSERT_EFI_ERROR(Status); - - MonotonicCount =3D 0; - Record =3D NULL; - - do { - Status =3D DataHub->GetNextRecord ( - DataHub, - &MonotonicCount, - NULL, - &Record - ); - if (!EFI_ERROR(Status)) { - if (Record->DataRecordClass =3D=3D EFI_DATA_RECORD_CLASS_DATA) { - - DataHeader =3D (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1); - SrcData =3D (UINT8 *)(DataHeader + 1); - - // - // Processor - // - if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubCla= ssGuid)) { - CopyMem (&mProcessorProducerGuid, &Record->ProducerName, si= zeof(EFI_GUID)); - switch (DataHeader->RecordType) { - case ProcessorVoltageRecordType: - ProcessorVoltage =3D (((EFI_EXP_BASE10_DATA *)SrcData)-= >Value)/100 + 0x80; - break; - case ProcessorCoreFrequencyRecordType: - DEBUG ((EFI_D_ERROR, "ProcessorCoreFrequencyRecordType = SrcData1 =3D%d\n", ConvertBase10ToRaw((EFI_EXP_BASE10_DATA *)SrcData)/10000= 00)); - Frequency =3D (ConvertBase10ToRaw((EFI_EXP_BASE10_DATA = *)SrcData)/1000000); - break; - case ProcessorVersionRecordType: - ProcessorVersion =3D (EFI_PROCESSOR_VERSION_DATA *)SrcD= ata; - NewStringToken =3D HiiGetPackageString(&mProcessorProdu= cerGuid, *ProcessorVersion, NULL); - TokenToUpdate =3D (STRING_REF)STR_MISC_PROCESSOR_VERSIO= N; - HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken,= NULL); - break; - default: - break; - } - } - } - } - } while (!EFI_ERROR(Status) && (MonotonicCount !=3D 0)); - // // Token to get for Socket Name // @@ -270,8 +268,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation) // // Token to get for Processor Version // - TokenToGet =3D STRING_TOKEN (STR_MISC_PROCESSOR_VERSION); - Version =3D SmbiosMiscGetString (TokenToGet); + Version =3D CpuidSocVendorBrandString (); VersionStrLen =3D StrLen(Version); if (VersionStrLen > SMBIOS_STRING_MAX_LENGTH) { return EFI_UNSUPPORTED; @@ -372,10 +369,12 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation= ) SmbiosRecord -> ProcessorFamily2 =3D ForType4InputData-> VariableReco= rd.ProcessorFamily; =20 // - // Processor speed + // Processor speed in MHz // - SmbiosRecord-> CurrentSpeed =3D *(UINT16*) & Frequency; - SmbiosRecord-> MaxSpeed =3D *(UINT16*) & Frequency; + Frequency =3D MeasureTscFrequency (); + Frequency =3D DivU64x32 (Frequency, 1000000); + SmbiosRecord-> CurrentSpeed =3D (UINT16)Frequency; + SmbiosRecord-> MaxSpeed =3D (UINT16)Frequency; =20 // // Processor Characteristics diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDr= iverDataTable.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubcla= ssDriverDataTable.c index 93347a1a04..4c8e00801f 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDat= aTable.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDat= aTable.c @@ -1,21 +1,17 @@ /** @file =20 -Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscSubclassDriverDataTable.c =20 Abstract: =20 - Create the mMiscSubclassDataTable structure, and it is used to report - any generate data to the DataHub. - + Create the mMiscSubclassDataTable structure used to produce + SMBIOS records. =20 **/ =20 @@ -31,7 +27,7 @@ MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BIOS_VENDOR_DATA, Mis= cBiosVendor, MiscBiosVen MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemMa= nufacturer, MiscSystemManufacturer); MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBase= BoardManufacturer, MiscBaseBoardManufacturer); MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassis= Manufacturer, MiscChassisManufacturer); -MISC_SMBIOS_TABLE_EXTERNS(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache, = MiscProcessorCache); //type 7 +MISC_SMBIOS_TABLE_EXTERNS(UINTN, MiscProcessorCache, MiscProcessorCache);= //type 7 MISC_SMBIOS_TABLE_EXTERNS(EFI_CPU_DATA_RECORD, MiscProcessorInformation, = MiscProcessorInformation); //type 4 MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LOCATION_DATA, MiscPhysicalMem= oryArray,MiscPhysicalMemoryArray); MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LINK_DATA, MiscMemoryDevice, M= iscMemoryDevice); diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDr= iverEntryPoint.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubcl= assDriverEntryPoint.c index e70732f5c2..cb677a0aa6 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEnt= ryPoint.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEnt= ryPoint.c @@ -1,20 +1,17 @@ /** @file =20 -Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
- = =20 +Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent =20 - = =20 - - Module Name: =20 MiscSubclassDriverEntryPoint.c =20 Abstract: =20 - This driver parses the mMiscSubclassDataTable structure and reports - any generated data to the DataHub. + This driver parses the mMiscSubclassDataTable structure to + produce SMBIOS records. =20 =20 **/ @@ -99,7 +96,7 @@ Error: =20 /** Standard EFI driver point. This driver parses the mMiscSubclassDataTab= le - structure and reports any generated data to the DataHub. + structure to produce SMBIOS records. =20 @param ImageHandle - Handle for the image of this driver @param SystemTable - Pointer to the EFI System Table diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.= inf b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf index 99b1a18185..92b51b1743 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf +++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf @@ -86,6 +86,7 @@ [Packages] MdePkg/MdePkg.dec Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec NetworkPkg/NetworkPkg.dec + UefiCpuPkg/UefiCpuPkg.dec =20 [LibraryClasses] HiiLib @@ -105,6 +106,7 @@ [LibraryClasses] PchPlatformLib NetLib HobLib + TimerLib =20 [Guids] gEfiNormalSetupGuid @@ -114,7 +116,6 @@ [Guids] [Protocols] gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUME= D gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL ALWAYS_CONSUME= D - gEfiDataHubProtocolGuid gEfiMpServiceProtocolGuid gMemInfoProtocolGuid gEfiTdtOperationProtocolGuid diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegi= on.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c index 99db5490b6..dad27f130d 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c +++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c @@ -35,8 +35,6 @@ Abstract: #include #include =20 -#include - #include #include #include @@ -66,7 +64,6 @@ extern DXE_VLV_PLATFORM_POLICY_PROTOCOL *DxePlatformSaP= olicy; // =20 IGD_OPREGION_PROTOCOL mIgdOpRegion; -EFI_GUID mMiscSubClass =3D EFI_MISC_SUBCLASS_GUID; EFI_EVENT mConOutEvent; EFI_EVENT mSetGOPverEvent; VOID *mConOutReg; diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatfo= rmInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlat= formInitDxe.inf index fe81a6e3bd..2aec0d1a9a 100644 --- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitD= xe.inf +++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitD= xe.inf @@ -3,9 +3,8 @@ #/*++ # # Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved -# = - -# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# SPDX-License-Identifier: BSD-2-Clause-Patent # # Module Name: # @@ -65,7 +64,6 @@ [Depex] gDxeVlvPlatformPolicyGuid AND gEfiPciRootBridgeIoProtocolGuid AND gEfiCpuIo2ProtocolGuid AND - gEfiDataHubProtocolGuid AND gEfiGlobalNvsAreaProtocolGuid AND gEfiFirmwareVolume2ProtocolGuid AND gEfiHiiDatabaseProtocolGuid --=20 2.21.0.windows.1