From 7ee85aa2ff751ce2420649bbb6f7db2d823dbd40 Mon Sep 17 00:00:00 2001 From: lzeng14 Date: Mon, 21 Nov 2011 08:56:48 +0000 Subject: [PATCH] According to PI errata 0000654 and 000811, we need use 0xFFFE to instead of 0 for EFI_SMBIOS_PROTOCOL.Add() SmbiosHandle parameter to assign a unique handle to the SMBIOS record, and for EFI_SMBIOS_PROTOCOL.GetNext() SmbiosHandle parameter to get the first matched SMBIOS handle or indicate no more SMBIOS record. Signed-off-by: lzeng14 Reviewed-by: li-elvin git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12751 6f19259b-4bc3-4df7-8a09-765794883524 --- Nt32Pkg/CpuRuntimeDxe/Cpu.c | 2 +- .../MiscBaseBoardManufacturerFunction.c | 10 +---- .../MiscBiosVendorFunction.c | 10 +---- .../MiscBootInformationFunction.c | 11 ++---- .../MiscChassisManufacturerFunction.c | 10 +---- ...MiscNumberOfInstallableLanguagesFunction.c | 11 ++---- .../MiscOemStringFunction.c | 11 ++---- ...cPortInternalConnectorDesignatorFunction.c | 11 ++---- .../MiscResetCapabilitiesFunction.c | 11 ++---- .../MiscSubclassDriver.h | 28 ++++++++++---- .../MiscSubclassDriverEntryPoint.c | 37 +++++++++++++++++-- .../MiscSystemLanguageStringFunction.c | 11 ++---- .../MiscSystemManufacturerFunction.c | 11 ++---- .../MiscSystemOptionStringFunction.c | 10 +---- .../MiscSystemSlotDesignationFunction.c | 11 ++---- 15 files changed, 87 insertions(+), 108 deletions(-) diff --git a/Nt32Pkg/CpuRuntimeDxe/Cpu.c b/Nt32Pkg/CpuRuntimeDxe/Cpu.c index 4ac12a4e1e..d15ac989ea 100644 --- a/Nt32Pkg/CpuRuntimeDxe/Cpu.c +++ b/Nt32Pkg/CpuRuntimeDxe/Cpu.c @@ -402,7 +402,7 @@ LogSmbiosData ( EFI_STATUS Status; EFI_SMBIOS_HANDLE SmbiosHandle; - SmbiosHandle = 0; + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; Status = Smbios->Add ( Smbios, NULL, diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c index 6076e93b8e..303726c3fd 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBaseBoardManufacturerFunction.c @@ -2,7 +2,7 @@ BaseBoard manufacturer information boot time changes. SMBIOS type 2. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -154,13 +154,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); FreePool(SmbiosRecord); return Status; diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c index eb11765316..415a8cab3a 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBiosVendorFunction.c @@ -3,7 +3,7 @@ Misc. subclass type 2. SMBIOS type 0. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -189,13 +189,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); FreePool(SmbiosRecord); return Status; diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c index 25105c3e41..0b916f2db2 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscBootInformationFunction.c @@ -2,7 +2,7 @@ boot information boot time changes. SMBIOS type 32. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -61,13 +61,8 @@ MISC_SMBIOS_TABLE_FUNCTION(BootInformationStatus) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c index 586e2535c0..c7f65ea830 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscChassisManufacturerFunction.c @@ -2,7 +2,7 @@ Chassis manufacturer information boot time changes. SMBIOS type 3. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -124,13 +124,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscChassisManufacturer) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); FreePool(SmbiosRecord); return Status; diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c index 0b4d78875d..5be7444b31 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscNumberOfInstallableLanguagesFunction.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -224,13 +224,8 @@ MISC_SMBIOS_TABLE_FUNCTION(NumberOfInstallableLanguages) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c index 67d5979351..077660257a 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscOemStringFunction.c @@ -2,7 +2,7 @@ boot information boot time changes. SMBIOS type 11. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -69,13 +69,8 @@ MISC_SMBIOS_TABLE_FUNCTION(OemString) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c index 6d2274f8a3..1636abc4fa 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c @@ -1,6 +1,6 @@ /**@file -Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -161,13 +161,8 @@ Returns: // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c index 52d5e4e67e..7c1ffabe5c 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscResetCapabilitiesFunction.c @@ -2,7 +2,7 @@ ResetCapabilities. SMBIOS type 23. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -64,13 +64,8 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscResetCapabilities) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriver.h b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriver.h index 2e87031e23..179a015dea 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriver.h +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriver.h @@ -1,6 +1,6 @@ /**@file -Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -102,16 +102,28 @@ extern UINTN mMiscSubclassDataTableEntries; extern UINT8 MiscSubclassStrings[]; extern EFI_HII_HANDLE mHiiHandle; -// -// Prototypes -// + +/** + Add an SMBIOS record. + + @param Smbios The EFI_SMBIOS_PROTOCOL instance. + @param SmbiosHandle A unique handle will be assigned to the SMBIOS record. + @param Record The data for the fixed portion of the SMBIOS record. The format of the record is + determined by EFI_SMBIOS_TABLE_HEADER.Type. The size of the formatted area is defined + by EFI_SMBIOS_TABLE_HEADER.Length and either followed by a double-null (0x0000) or + a set of null terminated strings and a null. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of system resources. + +**/ EFI_STATUS -MiscSubclassDriverEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable +AddSmbiosRecord ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + OUT EFI_SMBIOS_HANDLE *SmbiosHandle, + IN EFI_SMBIOS_TABLE_HEADER *Record ); - #endif /* _MISC_SUBCLASS_DRIVER_H */ /* eof - MiscSubclassDriver.h */ diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c index 9c901d82b9..95e050f323 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c @@ -1,6 +1,6 @@ /**@file -Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -90,8 +90,8 @@ LogMemorySmbiosRecord ( // // Generate Memory Array Mapped Address info (TYPE 19) // - MemArrayMappedAddrSmbiosHandle = 0; - Status = Smbios->Add (Smbios, NULL, &MemArrayMappedAddrSmbiosHandle, (EFI_SMBIOS_TABLE_HEADER*) Type19Record); + Status = AddSmbiosRecord (Smbios, &MemArrayMappedAddrSmbiosHandle, (EFI_SMBIOS_TABLE_HEADER*) Type19Record); + FreePool(Type19Record); ASSERT_EFI_ERROR (Status); @@ -168,3 +168,34 @@ Returns: EfiStatus = LogMemorySmbiosRecord(); return EfiStatus; } + +/** + Add an SMBIOS record. + + @param Smbios The EFI_SMBIOS_PROTOCOL instance. + @param SmbiosHandle A unique handle will be assigned to the SMBIOS record. + @param Record The data for the fixed portion of the SMBIOS record. The format of the record is + determined by EFI_SMBIOS_TABLE_HEADER.Type. The size of the formatted area is defined + by EFI_SMBIOS_TABLE_HEADER.Length and either followed by a double-null (0x0000) or + a set of null terminated strings and a null. + + @retval EFI_SUCCESS Record was added. + @retval EFI_OUT_OF_RESOURCES Record was not added due to lack of system resources. + +**/ +EFI_STATUS +AddSmbiosRecord ( + IN EFI_SMBIOS_PROTOCOL *Smbios, + OUT EFI_SMBIOS_HANDLE *SmbiosHandle, + IN EFI_SMBIOS_TABLE_HEADER *Record + ) +{ + *SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; + return Smbios->Add ( + Smbios, + NULL, + SmbiosHandle, + Record + ); +} + diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c index 2cdbfda108..f033d1145e 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemLanguageStringFunction.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -70,13 +70,8 @@ MISC_SMBIOS_TABLE_FUNCTION(SystemLanguageString) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerFunction.c index 55c85e9e65..9f3d5fe267 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemManufacturerFunction.c @@ -1,6 +1,6 @@ /**@file -Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, 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 @@ -126,13 +126,8 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscSystemManufacturer) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c index 1f70266823..b9ce708f82 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemOptionStringFunction.c @@ -2,7 +2,7 @@ BIOS system option string boot time changes. SMBIOS type 12. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -70,13 +70,7 @@ MISC_SMBIOS_TABLE_FUNCTION(SystemOptionString) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); FreePool(SmbiosRecord); return Status; diff --git a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c index 026ef2493e..daf597039e 100644 --- a/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c +++ b/Nt32Pkg/MiscSubClassPlatformDxe/MiscSystemSlotDesignationFunction.c @@ -2,7 +2,7 @@ BIOS system slot designator information boot time changes. SMBIOS type 9. -Copyright (c) 2009, Intel Corporation. All rights reserved.
+Copyright (c) 2009 - 2011, 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 @@ -85,13 +85,8 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscSystemSlotDesignation) // // Now we have got the full smbios record, call smbios protocol to add this record. // - SmbiosHandle = 0; - Status = Smbios-> Add( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord - ); + Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord); + FreePool(SmbiosRecord); return Status; } -- 2.39.2