Skip to content

Commit

Permalink
[Cherry-Pick] Add Standalone Mm BiosIdLib and format code with Uncrus…
Browse files Browse the repository at this point in the history
…tify.

Cc: Eric Dong <[email protected]>
Reviewed-by: Nate DeSimone <[email protected]>

Signed-off-by: Lixia Huang <[email protected]>
  • Loading branch information
huanglx729 authored and apop5 committed Oct 17, 2024
1 parent 01d8a8b commit 3614c2b
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 202 deletions.
1 change: 1 addition & 0 deletions BoardModulePkg/BoardModulePkg.dsc
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,5 @@

BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
BoardModulePkg/Library/BiosIdLib/PeiBiosIdLib.inf
BoardModulePkg/Library/BiosIdLib/StandaloneMmBiosIdLib.inf

96 changes: 96 additions & 0 deletions BoardModulePkg/Library/BiosIdLib/BiosIdCommon.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/** @file
Boot service common BIOS ID library implementation.
These functions in this file can be called during DXE and cannot be called during runtime
or in SMM which should use a RT or SMM library.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#include <PiDxe.h>
#include <Library/BaseMemoryLib.h>
#include <Library/BiosIdLib.h>
#include <Guid/BiosId.h>

/**
This function returns the BIOS Version & Release Date and Time by getting and converting BIOS ID.
@param[out] BiosVersion The Bios Version out of the conversion.
@param[out] BiosReleaseDate The Bios Release Date out of the conversion.
@param[out] BiosReleaseTime The Bios Release Time out of the conversion.
@retval EFI_SUCCESS BIOS Version & Release Date and Time have been got successfully.
@retval EFI_NOT_FOUND BIOS ID image is not found, and no parameter will be modified.
@retval EFI_INVALID_PARAMETER All the parameters are NULL.
**/
EFI_STATUS
EFIAPI
GetBiosVersionDateTime (
OUT CHAR16 *BiosVersion OPTIONAL,
OUT CHAR16 *BiosReleaseDate OPTIONAL,
OUT CHAR16 *BiosReleaseTime OPTIONAL
)
{
EFI_STATUS Status;
BIOS_ID_IMAGE BiosIdImage;

if ((BiosVersion == NULL) && (BiosReleaseDate == NULL) && (BiosReleaseTime == NULL)) {
return EFI_INVALID_PARAMETER;
}

Status = GetBiosId (&BiosIdImage);
if (EFI_ERROR (Status)) {
return EFI_NOT_FOUND;
}

if (BiosVersion != NULL) {
//
// Fill the BiosVersion data from the BIOS ID.
//
CopyMem (BiosVersion, &(BiosIdImage.BiosIdString), sizeof (BIOS_ID_STRING));
}

if (BiosReleaseDate != NULL) {
//
// Fill the build timestamp date from the BIOS ID in the "MM/DD/YY" format.
//
BiosReleaseDate[0] = BiosIdImage.BiosIdString.TimeStamp[2];
BiosReleaseDate[1] = BiosIdImage.BiosIdString.TimeStamp[3];
BiosReleaseDate[2] = (CHAR16)((UINT8)('/'));

BiosReleaseDate[3] = BiosIdImage.BiosIdString.TimeStamp[4];
BiosReleaseDate[4] = BiosIdImage.BiosIdString.TimeStamp[5];
BiosReleaseDate[5] = (CHAR16)((UINT8)('/'));

//
// Add 20 for SMBIOS table
// Current Linux kernel will misjudge 09 as year 0, so using 2009 for SMBIOS table
//
BiosReleaseDate[6] = '2';
BiosReleaseDate[7] = '0';
BiosReleaseDate[8] = BiosIdImage.BiosIdString.TimeStamp[0];
BiosReleaseDate[9] = BiosIdImage.BiosIdString.TimeStamp[1];

BiosReleaseDate[10] = (CHAR16)((UINT8)('\0'));
}

if (BiosReleaseTime != NULL) {
//
// Fill the build timestamp time from the BIOS ID in the "HH:MM" format.
//
BiosReleaseTime[0] = BiosIdImage.BiosIdString.TimeStamp[6];
BiosReleaseTime[1] = BiosIdImage.BiosIdString.TimeStamp[7];
BiosReleaseTime[2] = (CHAR16)((UINT8)(':'));

BiosReleaseTime[3] = BiosIdImage.BiosIdString.TimeStamp[8];
BiosReleaseTime[4] = BiosIdImage.BiosIdString.TimeStamp[9];

BiosReleaseTime[5] = (CHAR16)((UINT8)('\0'));
}

return EFI_SUCCESS;
}
111 changes: 14 additions & 97 deletions BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
or in SMM which should use a RT or SMM library.
Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015 - 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
Expand All @@ -15,7 +15,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/HobLib.h>
#include <Library/DxeServicesLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/HobLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h>
#include <Library/BiosIdLib.h>
Expand All @@ -36,16 +35,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
GetBiosId (
OUT BIOS_ID_IMAGE *BiosIdImage OPTIONAL
OUT BIOS_ID_IMAGE *BiosIdImage OPTIONAL
)
{
EFI_STATUS Status;
BIOS_ID_IMAGE TempBiosIdImage;
VOID *Address;
UINTN Size;
EFI_STATUS Status;
BIOS_ID_IMAGE TempBiosIdImage;
VOID *Address;
UINTN Size;

Address = NULL;
Size = 0;
Size = 0;

if (BiosIdImage == NULL) {
//
Expand All @@ -58,10 +57,10 @@ GetBiosId (
Address = GetFirstGuidHob (&gBiosIdGuid);
if (Address != NULL) {
Size = sizeof (BIOS_ID_IMAGE);
CopyMem ((VOID *) BiosIdImage, GET_GUID_HOB_DATA (Address), Size);
CopyMem ((VOID *)BiosIdImage, GET_GUID_HOB_DATA (Address), Size);

DEBUG ((EFI_D_INFO, "DXE get BIOS ID from HOB successfully\n"));
DEBUG ((EFI_D_INFO, "BIOS ID: %s\n", (CHAR16 *) (&(BiosIdImage->BiosIdString))));
DEBUG ((DEBUG_INFO, "DXE get BIOS ID from HOB successfully\n"));
DEBUG ((DEBUG_INFO, "BIOS ID: %s\n", (CHAR16 *)(&(BiosIdImage->BiosIdString))));
return EFI_SUCCESS;
}

Expand All @@ -77,99 +76,17 @@ GetBiosId (
// BIOS ID image is present in FV.
//
Size = sizeof (BIOS_ID_IMAGE);
CopyMem ((VOID *) BiosIdImage, Address, Size);
CopyMem ((VOID *)BiosIdImage, Address, Size);
//
// GetSectionFromAnyFv () allocated buffer for Address, now free it.
//
FreePool (Address);

DEBUG ((EFI_D_INFO, "DXE get BIOS ID from FV successfully\n"));
DEBUG ((EFI_D_INFO, "BIOS ID: %s\n", (CHAR16 *) (&(BiosIdImage->BiosIdString))));
DEBUG ((DEBUG_INFO, "DXE get BIOS ID from FV successfully\n"));
DEBUG ((DEBUG_INFO, "BIOS ID: %s\n", (CHAR16 *)(&(BiosIdImage->BiosIdString))));
return EFI_SUCCESS;
}

DEBUG ((EFI_D_ERROR, "DXE get BIOS ID failed: %r\n", EFI_NOT_FOUND));
DEBUG ((DEBUG_ERROR, "DXE get BIOS ID failed: %r\n", EFI_NOT_FOUND));
return EFI_NOT_FOUND;
}

/**
This function returns the BIOS Version & Release Date and Time by getting and converting BIOS ID.
@param[out] BiosVersion The Bios Version out of the conversion.
@param[out] BiosReleaseDate The Bios Release Date out of the conversion.
@param[out] BiosReleaseTime The Bios Release Time out of the conversion.
@retval EFI_SUCCESS BIOS Version & Release Date and Time have been got successfully.
@retval EFI_NOT_FOUND BIOS ID image is not found, and no parameter will be modified.
@retval EFI_INVALID_PARAMETER All the parameters are NULL.
**/
EFI_STATUS
EFIAPI
GetBiosVersionDateTime (
OUT CHAR16 *BiosVersion, OPTIONAL
OUT CHAR16 *BiosReleaseDate, OPTIONAL
OUT CHAR16 *BiosReleaseTime OPTIONAL
)
{
EFI_STATUS Status;
BIOS_ID_IMAGE BiosIdImage;

if ((BiosVersion == NULL) && (BiosReleaseDate == NULL) && (BiosReleaseTime == NULL)) {
return EFI_INVALID_PARAMETER;
}

Status = GetBiosId (&BiosIdImage);
if (EFI_ERROR (Status)) {
return EFI_NOT_FOUND;
}

if (BiosVersion != NULL) {
//
// Fill the BiosVersion data from the BIOS ID.
//
CopyMem (BiosVersion, &(BiosIdImage.BiosIdString), sizeof (BIOS_ID_STRING));
}

if (BiosReleaseDate != NULL) {
//
// Fill the build timestamp date from the BIOS ID in the "MM/DD/YY" format.
//
BiosReleaseDate[0] = BiosIdImage.BiosIdString.TimeStamp[2];
BiosReleaseDate[1] = BiosIdImage.BiosIdString.TimeStamp[3];
BiosReleaseDate[2] = (CHAR16) ((UINT8) ('/'));

BiosReleaseDate[3] = BiosIdImage.BiosIdString.TimeStamp[4];
BiosReleaseDate[4] = BiosIdImage.BiosIdString.TimeStamp[5];
BiosReleaseDate[5] = (CHAR16) ((UINT8) ('/'));

//
// Add 20 for SMBIOS table
// Current Linux kernel will misjudge 09 as year 0, so using 2009 for SMBIOS table
//
BiosReleaseDate[6] = '2';
BiosReleaseDate[7] = '0';
BiosReleaseDate[8] = BiosIdImage.BiosIdString.TimeStamp[0];
BiosReleaseDate[9] = BiosIdImage.BiosIdString.TimeStamp[1];

BiosReleaseDate[10] = (CHAR16) ((UINT8) ('\0'));
}

if (BiosReleaseTime != NULL) {

//
// Fill the build timestamp time from the BIOS ID in the "HH:MM" format.
//
BiosReleaseTime[0] = BiosIdImage.BiosIdString.TimeStamp[6];
BiosReleaseTime[1] = BiosIdImage.BiosIdString.TimeStamp[7];
BiosReleaseTime[2] = (CHAR16) ((UINT8) (':'));

BiosReleaseTime[3] = BiosIdImage.BiosIdString.TimeStamp[8];
BiosReleaseTime[4] = BiosIdImage.BiosIdString.TimeStamp[9];

BiosReleaseTime[5] = (CHAR16) ((UINT8) ('\0'));
}

return EFI_SUCCESS;
}

5 changes: 3 additions & 2 deletions BoardModulePkg/Library/BiosIdLib/DxeBiosIdLib.inf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
### @file
# DXE BIOS ID library.
#
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2015 - 2024, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
Expand All @@ -22,10 +22,11 @@

[Sources.common]
DxeBiosIdLib.c
BiosIdCommon.c

[Packages]
MdePkg/MdePkg.dec
BoardModulePkg/BoardModulePkg.dec
BoardModulePkg/BoardModulePkg.dec

[LibraryClasses]
BaseLib
Expand Down
Loading

0 comments on commit 3614c2b

Please sign in to comment.