From 4659816a419a5c0231ba1cfb4467b6e414bb0edf Mon Sep 17 00:00:00 2001 From: lzeng14 Date: Mon, 21 Nov 2011 08:50:41 +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@12746 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c index b39ea23a8f..053e7a4984 100644 --- a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c +++ b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c @@ -264,7 +264,7 @@ GetAvailableSmbiosHandle ( Private = SMBIOS_INSTANCE_FROM_THIS (This); Head = &Private->AllocatedHandleListHead; - for (AvailableHandle = 1; AvailableHandle < MaxSmbiosHandle; AvailableHandle++) { + for (AvailableHandle = 0; AvailableHandle < MaxSmbiosHandle; AvailableHandle++) { if (!CheckSmbiosHandleExistance(Head, AvailableHandle)) { *Handle = AvailableHandle; return EFI_SUCCESS; @@ -281,8 +281,8 @@ GetAvailableSmbiosHandle ( @param This The EFI_SMBIOS_PROTOCOL instance. @param ProducerHandle The handle of the controller or driver associated with the SMBIOS information. NULL means no handle. - @param SmbiosHandle On entry, if non-zero, the handle of the SMBIOS record. If zero, then a unique handle - will be assigned to the SMBIOS record. If the SMBIOS handle is already in use + @param SmbiosHandle On entry, the handle of the SMBIOS record to add. If FFFEh, then a unique handle + will be assigned to the SMBIOS record. If the SMBIOS handle is already in use, EFI_ALREADY_STARTED is returned and the SMBIOS record is not updated. @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 @@ -325,14 +325,14 @@ SmbiosAdd ( // Check whether SmbiosHandle is already in use // Head = &Private->AllocatedHandleListHead; - if (*SmbiosHandle != 0 && CheckSmbiosHandleExistance(Head, *SmbiosHandle)) { + if (*SmbiosHandle != SMBIOS_HANDLE_PI_RESERVED && CheckSmbiosHandleExistance(Head, *SmbiosHandle)) { return EFI_ALREADY_STARTED; } // - // when SmbiosHandle is zero, an available handle will be assigned + // when SmbiosHandle is 0xFFFE, an available handle will be assigned // - if (*SmbiosHandle == 0) { + if (*SmbiosHandle == SMBIOS_HANDLE_PI_RESERVED) { Status = GetAvailableSmbiosHandle(This, SmbiosHandle); if (EFI_ERROR(Status)) { return Status; @@ -434,7 +434,7 @@ SmbiosAdd ( @retval EFI_SUCCESS SmbiosHandle had its StringNumber String updated. @retval EFI_INVALID_PARAMETER SmbiosHandle does not exist. - @retval EFI_UNSUPPORTED String was not added since it's longer than 64 significant characters. + @retval EFI_UNSUPPORTED String was not added because it is longer than the SMBIOS Table supports. @retval EFI_NOT_FOUND The StringNumber.is not valid for this SMBIOS record. **/ @@ -711,8 +711,8 @@ SmbiosRemove ( @param This The EFI_SMBIOS_PROTOCOL instance. @param SmbiosHandle On entry, points to the previous handle of the SMBIOS record. On exit, points to the - next SMBIOS record handle. If it is zero on entry, then the first SMBIOS record - handle will be returned. If it returns zero on exit, then there are no more SMBIOS records. + next SMBIOS record handle. If it is FFFEh on entry, then the first SMBIOS record + handle will be returned. If it returns FFFEh on exit, then there are no more SMBIOS records. @param Type On entry it means return the next SMBIOS record of type Type. If a NULL is passed in this functionally it ignored. Type is not modified by the GetNext() function. @param Record On exit, points to the SMBIOS Record consisting of the formatted area followed by @@ -753,9 +753,9 @@ SmbiosGetNext ( SmbiosTableHeader = (EFI_SMBIOS_TABLE_HEADER*)(SmbiosEntry->RecordHeader + 1); // - // If SmbiosHandle is zero, the first matched SMBIOS record handle will be returned + // If SmbiosHandle is 0xFFFE, the first matched SMBIOS record handle will be returned // - if (*SmbiosHandle == 0) { + if (*SmbiosHandle == SMBIOS_HANDLE_PI_RESERVED) { if ((Type != NULL) && (*Type != SmbiosTableHeader->Type)) { continue; } @@ -791,7 +791,7 @@ SmbiosGetNext ( } } - *SmbiosHandle = 0; + *SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; return EFI_NOT_FOUND; } -- 2.39.2