From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E728C21CF3B6A for ; Tue, 4 Jul 2017 01:22:22 -0700 (PDT) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Jul 2017 01:24:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,307,1496127600"; d="scan'208";a="122069462" Received: from shwdeopenpsi011.ccr.corp.intel.com (HELO SHWDEOPENPSI011.local) ([10.239.9.5]) by fmsmga005.fm.intel.com with SMTP; 04 Jul 2017 01:23:59 -0700 Date: Tue, 4 Jul 2017 16:24:00 +0800 From: lushifex CC: david.wei@intel.com; Sender: lushifex To: edk2-devel@lists.01.org Message-ID: <273c1371-5111-4204-aa90-dfe149e1abb3@SHWDEOPENPSI011.local> X-Mailer: TortoiseGit MIME-Version: 1.0 Subject: [Patch][edk2-platforms] Vlv2TbltDevicePkg: Add SMBIOS Type 19. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Jul 2017 08:22:23 -0000 Content-Type: text/plain; Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: lushifex --- .../SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni | Bin 0 -> 1318 bytes .../MiscMemoryArrayMappedAddressData.c | 29 ++++ .../MiscMemoryArrayMappedAddressFunction.c | 146 +++++++++++++++++++++ .../SmBiosMiscDxe/MiscSubclassDriverDataTable.c | 4 +- Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf | 5 +- 5 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni create mode 100644 Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c create mode 100644 Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressFunction.c diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni new file mode 100644 index 0000000000000000000000000000000000000000..27d298a2d858de029b581553f069002872d0e8ea GIT binary patch literal 1318 zcmZvcU2oG+42FG;#D6#{H-NSlb~AwxqNN2Q*iyBb2AAo_x=8()k}}wzhdr;;G-*Lm zj(u#O*YB~N{Qc9hjs@PAJi$KLjb*m9xjnTfSmhhqtvy(QeQGJbU>EpTwy_+0ur4yk zBmDw-$1}H?duGU-UBT1FGA5#Dk;Q1iwwzIHu-Enmf0eV6!9J4Zj;NgM3wUgaeGZQo z$TNGzxihrW{qEdO&?8$DId`r?$idK>V$IOj&ZUcAx2drU--+!U>pkm?$agRv+57*n zOJI}{9l+1QU3iWa`;;82z?KNzFNO1zh!v6YJ#cPKe83`B%9o)nL91_{V%6y-zA4(; znF+VT*Xh|V!#%osm)e9?=YBd1Vb@H`Tq|c?p@^CIX8Zc+P8(*SKG&mTefHlDxYS&K zc`c@_|K2u(jSy9hvR=wnu-C08@ND))RTcXi>}7|<`8P4goDS2bA*`43)Dj-JN zMqM>WTRQR9CtMR&)>iSkSGvvZbNbUcs(pcF0`nO&cbL5m$}Mj_#i5Zgu`f1&*^o(! z?K5kaFF}(!X6?I7utv<n3k9AFRFN`$%(5nsoEh_NHbX!;hlwvfUVdJEa} zy>=%JPS^N_8hgfI*F=q+*(LS}RAI!PeZ)@OWmC?CSj8x78TE-+W&eTvibu@#Ee>{B z%3BQV`yQu8kEq3v$x_aKqk{Ex>F?BW?y~89M*TIv3!i^Ys(N_JU4+{LNj~+cpf4>y P6Yw-2;WYQhdX?)D9Tmic literal 0 HcmV?d00001 diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c new file mode 100644 index 0000000..f71b548 --- /dev/null +++ b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c @@ -0,0 +1,29 @@ +/** @file + Static data of Physical Memory Array Mapped Address. SMBIOS Type 19. + + Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "CommonHeader.h" +#include "MiscSubclassDriver.h" + +// +// Static (possibly build generated) Physical Memory Array Mapped Address Data. +// +MISC_SMBIOS_TABLE_DATA(EFI_MEMORY_ARRAY_START_ADDRESS_DATA, MiscMemoryArrayMappedAddress) = +{ + 0, //< StartingAddress + 0, //< EndingAddress + 0, //< MemoryArrayHandle + 0x00 //< Partition Width +}; + diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressFunction.c b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressFunction.c new file mode 100644 index 0000000..27d0ab7 --- /dev/null +++ b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressFunction.c @@ -0,0 +1,146 @@ +/** @file + Dynamic data of Physical Memory Array Mapped Address. SMBIOS Type 19. + + Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "CommonHeader.h" +#include "MiscSubclassDriver.h" +#include +#include +#include + +#define MAX_SOCKETS 2 +#define SMBIOS_TYPE19_USE_EXTENDED_ADDRESSES 0xFFFFFFFF + + +VOID +GetType16Handle ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + OUT EFI_SMBIOS_HANDLE *Handle + ) +{ + EFI_STATUS Status; + EFI_SMBIOS_TYPE RecordType; + EFI_SMBIOS_TABLE_HEADER *Buffer; + + *Handle = 0; + RecordType = EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY; + + Status = Smbios->GetNext ( + Smbios, + Handle, + &RecordType, + &Buffer, + NULL + ); + if (!EFI_ERROR (Status)) { + return; + } + + *Handle = 0xFFFF; +} + + +/** + This function installs SMBIOS Type 19 Table(Physical Memory Array). + + @param RecordData Pointer to copy of RecordData from the Data Table. + + @retval EFI_SUCCESS All parameters were valid. + @retval EFI_UNSUPPORTED Unexpected RecordType value. + @retval EFI_INVALID_PARAMETER Invalid parameter was found. + +**/ +MISC_SMBIOS_TABLE_FUNCTION (MiscMemoryArrayMappedAddress) +{ + EFI_STATUS Status; + UINT64 TotalMemorySizeInKB; + UINT8 Dimm; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_MEMORY_ARRAY_START_ADDRESS_DATA *ForType19InputData; + SMBIOS_TABLE_TYPE19 *SmbiosRecord; + MEM_INFO_PROTOCOL *MemInfoHob; + UINT16 Type16Handle = 0; + + TotalMemorySizeInKB = 0; + + // + // First check for invalid parameters. + // + if (RecordData == NULL) { + return EFI_INVALID_PARAMETER; + } + ForType19InputData = (EFI_MEMORY_ARRAY_START_ADDRESS_DATA *)RecordData; + + // + // Two zeros following the last string. + // + SmbiosRecord = AllocatePool (sizeof (SMBIOS_TABLE_TYPE19) + 1); + ZeroMem (SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE19) + 1); + + SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS; + SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE19); + + // + // Make handle chosen by smbios protocol.add automatically. + // + SmbiosRecord->Hdr.Handle = 0; + + // + // Get Memory size parameters for each rank from the chipset registers + // + Status = gBS->LocateProtocol ( + &gMemInfoProtocolGuid, + NULL, + (void **) &MemInfoHob + ); + ASSERT_EFI_ERROR (Status); + + // + // Calculate the TotalMemorySizeInKB by adding the size of all populated sockets + // + for (Dimm = 0; Dimm < MAX_SOCKETS; Dimm++) { + TotalMemorySizeInKB += LShiftU64 (MemInfoHob->MemInfoData.dimmSize[Dimm], 10); + } + + if (TotalMemorySizeInKB > SMBIOS_TYPE19_USE_EXTENDED_ADDRESSES) { + SmbiosRecord->StartingAddress = SMBIOS_TYPE19_USE_EXTENDED_ADDRESSES; + SmbiosRecord->EndingAddress = SMBIOS_TYPE19_USE_EXTENDED_ADDRESSES; + SmbiosRecord->ExtendedEndingAddress = TotalMemorySizeInKB - 1; + } else { + SmbiosRecord->EndingAddress = (UINT32) (TotalMemorySizeInKB - 1); + } + + // + // Memory Array Handle will be the 3rd optional string following the formatted structure. + // + GetType16Handle(Smbios, &Type16Handle); + SmbiosRecord->MemoryArrayHandle = Type16Handle; + SmbiosRecord->PartitionWidth = MAX_SOCKETS; + + // + // Now we have got the full smbios record, call smbios protocol to add this record. + // Generate Memory Array Mapped Address info (Type 19) + // + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; + Status = Smbios-> Add ( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord + ); + FreePool (SmbiosRecord); + + return Status; +} + diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c index 3b77a75..36c31c0 100644 --- a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c +++ b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License that accompanies this distribution. @@ -39,6 +39,7 @@ MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufac MISC_SMBIOS_TABLE_EXTERNS(EFI_CACHE_VARIABLE_RECORD, 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, MiscPhysicalMemoryArray,MiscPhysicalMemoryArray); +MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_START_ADDRESS_DATA, MiscMemoryArrayMappedAddress, MiscMemoryArrayMappedAddress); //type 19 MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LINK_DATA, MiscMemoryDevice, MiscMemoryDevice); MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA, MiscPortIde1, MiscPortInternalConnectorDesignator); @@ -72,6 +73,7 @@ EFI_MISC_SMBIOS_DATA_TABLE mMiscSubclassDataTable[] = { MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscProcessorInformation, MiscProcessorInformation), //type 4 MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscPhysicalMemoryArray, MiscPhysicalMemoryArray), //Type 16 MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscMemoryDevice, MiscMemoryDevice), //Type 17 + MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscMemoryArrayMappedAddress, MiscMemoryArrayMappedAddress), //Type 19 MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscPortIde1, MiscPortInternalConnectorDesignator), MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscPortIde2, MiscPortInternalConnectorDesignator), MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(MiscPortAtxPower, MiscPortInternalConnectorDesignator), diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf b/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf index f88dcbe..b17e5b7 100644 --- a/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf +++ b/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf @@ -2,7 +2,7 @@ # Component name for module MiscSubclass # # FIX ME! -# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials are licensed and made available under # the terms and conditions of the BSD License that accompanies this distribution. @@ -88,6 +88,9 @@ MiscMemoryDevice.uni MiscMemoryDeviceData.c MiscMemoryDeviceFunction.c + MiscMemoryArrayMappedAddress.uni + MiscMemoryArrayMappedAddressData.c + MiscMemoryArrayMappedAddressFunction.c [Packages] MdeModulePkg/MdeModulePkg.dec -- 2.7.0.windows.1