summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlushifex <shifeix.a.lu@intel.com>2017-06-28 11:37:41 +0800
committerGuo Mang <mang.guo@intel.com>2017-07-05 15:55:47 +0800
commit72570a1b4d81880b7316fc5f3200ed0db032f1e5 (patch)
tree2aaf99fe90875fbaaa8756172041bb1b6bb725ad
parentfd6510974d21282b9f8c1ff003c05b92a464bca6 (diff)
downloadedk2-platforms-72570a1b4d81880b7316fc5f3200ed0db032f1e5.tar.xz
Vlv2TbltDevicePkg: Add SMBIOS Type 19.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: lushifex <shifeix.a.lu@intel.com>
-rw-r--r--Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.unibin0 -> 1318 bytes
-rw-r--r--Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c29
-rw-r--r--Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressFunction.c146
-rw-r--r--Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c4
-rw-r--r--Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf5
5 files changed, 182 insertions, 2 deletions
diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni
new file mode 100644
index 0000000000..27d298a2d8
--- /dev/null
+++ b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddress.uni
Binary files differ
diff --git a/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c b/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryArrayMappedAddressData.c
new file mode 100644
index 0000000000..f71b548732
--- /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.<BR>
+
+ 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 0000000000..27d0ab7f52
--- /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.<BR>
+
+ 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 <Protocol/DataHub.h>
+#include <Guid/DataHubRecords.h>
+#include <Protocol/MemInfo.h>
+
+#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 3b77a75443..36c31c0117 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.<BR>
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
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 f88dcbea74..b17e5b72d8 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.<BR>
+# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
#
# 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