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
This commit is contained in:
lzeng14 2011-11-21 08:56:48 +00:00
parent 49975acb39
commit 7ee85aa2ff
15 changed files with 88 additions and 109 deletions

View File

@ -402,7 +402,7 @@ LogSmbiosData (
EFI_STATUS Status; EFI_STATUS Status;
EFI_SMBIOS_HANDLE SmbiosHandle; EFI_SMBIOS_HANDLE SmbiosHandle;
SmbiosHandle = 0; SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
Status = Smbios->Add ( Status = Smbios->Add (
Smbios, Smbios,
NULL, NULL,

View File

@ -2,7 +2,7 @@
BaseBoard manufacturer information boot time changes. BaseBoard manufacturer information boot time changes.
SMBIOS type 2. SMBIOS type 2.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;

View File

@ -3,7 +3,7 @@
Misc. subclass type 2. Misc. subclass type 2.
SMBIOS type 0. SMBIOS type 0.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;

View File

@ -2,7 +2,7 @@
boot information boot time changes. boot information boot time changes.
SMBIOS type 32. SMBIOS type 32.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -2,7 +2,7 @@
Chassis manufacturer information boot time changes. Chassis manufacturer information boot time changes.
SMBIOS type 3. SMBIOS type 3.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;

View File

@ -1,6 +1,6 @@
/** @file /** @file
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -2,7 +2,7 @@
boot information boot time changes. boot information boot time changes.
SMBIOS type 11. SMBIOS type 11.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -2,7 +2,7 @@
ResetCapabilities. ResetCapabilities.
SMBIOS type 23. SMBIOS type 23.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -102,15 +102,27 @@ extern UINTN mMiscSubclassDataTableEntries;
extern UINT8 MiscSubclassStrings[]; extern UINT8 MiscSubclassStrings[];
extern EFI_HII_HANDLE mHiiHandle; extern EFI_HII_HANDLE mHiiHandle;
//
// Prototypes
//
EFI_STATUS
MiscSubclassDriverEntryPoint (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/**
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
);
#endif /* _MISC_SUBCLASS_DRIVER_H */ #endif /* _MISC_SUBCLASS_DRIVER_H */

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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) // Generate Memory Array Mapped Address info (TYPE 19)
// //
MemArrayMappedAddrSmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &MemArrayMappedAddrSmbiosHandle, (EFI_SMBIOS_TABLE_HEADER*) Type19Record);
Status = Smbios->Add (Smbios, NULL, &MemArrayMappedAddrSmbiosHandle, (EFI_SMBIOS_TABLE_HEADER*) Type19Record);
FreePool(Type19Record); FreePool(Type19Record);
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
@ -168,3 +168,34 @@ Returns:
EfiStatus = LogMemorySmbiosRecord(); EfiStatus = LogMemorySmbiosRecord();
return EfiStatus; 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
);
}

View File

@ -1,6 +1,6 @@
/** @file /** @file
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -1,6 +1,6 @@
/**@file /**@file
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }

View File

@ -2,7 +2,7 @@
BIOS system option string boot time changes. BIOS system option string boot time changes.
SMBIOS type 12. SMBIOS type 12.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;

View File

@ -2,7 +2,7 @@
BIOS system slot designator information boot time changes. BIOS system slot designator information boot time changes.
SMBIOS type 9. SMBIOS type 9.
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 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. // Now we have got the full smbios record, call smbios protocol to add this record.
// //
SmbiosHandle = 0; Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);
Status = Smbios-> Add(
Smbios,
NULL,
&SmbiosHandle,
(EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
);
FreePool(SmbiosRecord); FreePool(SmbiosRecord);
return Status; return Status;
} }