In some scenarios, the information of Bios Version, Bios Release and Embedded Controller Firmware Release are fetched during UEFI booting. This patch supports updating those fields dynamically when the PCDs are empty. Signed-off-by: Nhi Pham <nhi@os.amperecomputing.com> Reviewed-by: Rebecca Cran <rebecca@quicinc.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Acked-by: Ard Biesheuvel <ardb@kernel.org>
		
			
				
	
	
		
			272 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
*
 | 
						|
*  Copyright (c) 2022, Ampere Computing LLC. All rights reserved.
 | 
						|
*  Copyright (c) 2021, NUVIA Inc. All rights reserved.
 | 
						|
*  Copyright (c) 2015, Hisilicon Limited. All rights reserved.
 | 
						|
*  Copyright (c) 2015, Linaro Limited. All rights reserved.
 | 
						|
*
 | 
						|
*  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
*
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef OEM_MISC_LIB_H_
 | 
						|
#define OEM_MISC_LIB_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
#include <IndustryStandard/SmBios.h>
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  CpuCacheL1 = 1,
 | 
						|
  CpuCacheL2,
 | 
						|
  CpuCacheL3,
 | 
						|
  CpuCacheL4,
 | 
						|
  CpuCacheL5,
 | 
						|
  CpuCacheL6,
 | 
						|
  CpuCacheL7,
 | 
						|
  CpuCacheLevelMax
 | 
						|
} OEM_MISC_CPU_CACHE_LEVEL;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT8     Voltage;       ///< Processor voltage
 | 
						|
  UINT16    CurrentSpeed;  ///< Current clock speed in MHz
 | 
						|
  UINT16    MaxSpeed;      ///< Maximum clock speed in MHz
 | 
						|
  UINT16    ExternalClock; ///< External clock speed in MHz
 | 
						|
  UINT16    CoreCount;     ///< Number of cores available
 | 
						|
  UINT16    CoresEnabled;  ///< Number of cores enabled
 | 
						|
  UINT16    ThreadCount;   ///< Number of threads per processor
 | 
						|
} OEM_MISC_PROCESSOR_DATA;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  BiosVersionType00,
 | 
						|
  ProductNameType01,
 | 
						|
  SerialNumType01,
 | 
						|
  UuidType01,
 | 
						|
  SystemManufacturerType01,
 | 
						|
  VersionType01,
 | 
						|
  SkuNumberType01,
 | 
						|
  FamilyType01,
 | 
						|
  AssetTagType02,
 | 
						|
  SerialNumberType02,
 | 
						|
  BoardManufacturerType02,
 | 
						|
  ProductNameType02,
 | 
						|
  VersionType02,
 | 
						|
  SkuNumberType02,
 | 
						|
  ChassisLocationType02,
 | 
						|
  AssetTagType03,
 | 
						|
  SerialNumberType03,
 | 
						|
  VersionType03,
 | 
						|
  ChassisTypeType03,
 | 
						|
  ManufacturerType03,
 | 
						|
  SkuNumberType03,
 | 
						|
  ProcessorPartNumType04,
 | 
						|
  ProcessorSerialNumType04,
 | 
						|
  ProcessorVersionType04,
 | 
						|
  SmbiosHiiStringFieldMax
 | 
						|
} OEM_MISC_SMBIOS_HII_STRING_FIELD;
 | 
						|
 | 
						|
/*
 | 
						|
 * The following are functions that the each platform needs to
 | 
						|
 * implement in its OemMiscLib library.
 | 
						|
 */
 | 
						|
 | 
						|
/** Gets the CPU frequency of the specified processor.
 | 
						|
 | 
						|
  @param ProcessorIndex Index of the processor to get the frequency for.
 | 
						|
 | 
						|
  @return               CPU frequency in Hz
 | 
						|
**/
 | 
						|
UINTN
 | 
						|
EFIAPI
 | 
						|
OemGetCpuFreq (
 | 
						|
  IN UINT8  ProcessorIndex
 | 
						|
  );
 | 
						|
 | 
						|
/** Gets information about the specified processor and stores it in
 | 
						|
    the structures provided.
 | 
						|
 | 
						|
  @param ProcessorIndex  Index of the processor to get the information for.
 | 
						|
  @param ProcessorStatus Processor status.
 | 
						|
  @param ProcessorCharacteristics Processor characteritics.
 | 
						|
  @param MiscProcessorData        Miscellaneous processor information.
 | 
						|
 | 
						|
  @return  TRUE on success, FALSE on failure.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
OemGetProcessorInformation (
 | 
						|
  IN UINTN                               ProcessorIndex,
 | 
						|
  IN OUT PROCESSOR_STATUS_DATA           *ProcessorStatus,
 | 
						|
  IN OUT PROCESSOR_CHARACTERISTIC_FLAGS  *ProcessorCharacteristics,
 | 
						|
  IN OUT OEM_MISC_PROCESSOR_DATA         *MiscProcessorData
 | 
						|
  );
 | 
						|
 | 
						|
/** Gets information about the cache at the specified cache level.
 | 
						|
 | 
						|
  @param ProcessorIndex The processor to get information for.
 | 
						|
  @param CacheLevel     The cache level to get information for.
 | 
						|
  @param DataCache  Whether the cache is a data cache.
 | 
						|
  @param UnifiedCache Whether the cache is a unified cache.
 | 
						|
  @param SmbiosCacheTable The SMBIOS Type7 cache information structure.
 | 
						|
 | 
						|
  @return TRUE on success, FALSE on failure.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
OemGetCacheInformation (
 | 
						|
  IN UINT8                   ProcessorIndex,
 | 
						|
  IN UINT8                   CacheLevel,
 | 
						|
  IN BOOLEAN                 DataCache,
 | 
						|
  IN BOOLEAN                 UnifiedCache,
 | 
						|
  IN OUT SMBIOS_TABLE_TYPE7  *SmbiosCacheTable
 | 
						|
  );
 | 
						|
 | 
						|
/** Gets the maximum number of processors supported by the platform.
 | 
						|
 | 
						|
  @return The maximum number of processors.
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
EFIAPI
 | 
						|
OemGetMaxProcessors (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Gets the type of chassis for the system.
 | 
						|
 | 
						|
  @retval The type of the chassis.
 | 
						|
**/
 | 
						|
MISC_CHASSIS_TYPE
 | 
						|
EFIAPI
 | 
						|
OemGetChassisType (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Returns whether the specified processor is present or not.
 | 
						|
 | 
						|
  @param ProcessIndex The processor index to check.
 | 
						|
 | 
						|
  @return TRUE is the processor is present, FALSE otherwise.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
EFIAPI
 | 
						|
OemIsProcessorPresent (
 | 
						|
  IN UINTN  ProcessorIndex
 | 
						|
  );
 | 
						|
 | 
						|
/** Updates the HII string for the specified field.
 | 
						|
 | 
						|
  @param HiiHandle     The HII handle.
 | 
						|
  @param TokenToUpdate The string to update.
 | 
						|
  @param Field         The field to get information about.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
OemUpdateSmbiosInfo (
 | 
						|
  IN EFI_HII_HANDLE                    HiiHandle,
 | 
						|
  IN EFI_STRING_ID                     TokenToUpdate,
 | 
						|
  IN OEM_MISC_SMBIOS_HII_STRING_FIELD  Field
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the Type 32 boot information status.
 | 
						|
 | 
						|
  @return Boot status.
 | 
						|
**/
 | 
						|
MISC_BOOT_INFORMATION_STATUS_DATA_TYPE
 | 
						|
EFIAPI
 | 
						|
OemGetBootStatus (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the chassis status when it was last booted.
 | 
						|
 | 
						|
 @return Chassis status.
 | 
						|
**/
 | 
						|
MISC_CHASSIS_STATE
 | 
						|
EFIAPI
 | 
						|
OemGetChassisBootupState (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the chassis power supply/supplies status when last booted.
 | 
						|
 | 
						|
 @return Chassis power supply/supplies status.
 | 
						|
**/
 | 
						|
MISC_CHASSIS_STATE
 | 
						|
EFIAPI
 | 
						|
OemGetChassisPowerSupplyState (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the chassis thermal status when last booted.
 | 
						|
 | 
						|
 @return Chassis thermal status.
 | 
						|
**/
 | 
						|
MISC_CHASSIS_STATE
 | 
						|
EFIAPI
 | 
						|
OemGetChassisThermalState (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the chassis security status when last booted.
 | 
						|
 | 
						|
 @return Chassis security status.
 | 
						|
**/
 | 
						|
MISC_CHASSIS_SECURITY_STATE
 | 
						|
EFIAPI
 | 
						|
OemGetChassisSecurityStatus (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the chassis height in RMUs (Rack Mount Units).
 | 
						|
 | 
						|
  @return The height of the chassis.
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
EFIAPI
 | 
						|
OemGetChassisHeight (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the number of power cords.
 | 
						|
 | 
						|
  @return The number of power cords.
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
EFIAPI
 | 
						|
OemGetChassisNumPowerCords (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Fetches the system UUID.
 | 
						|
 | 
						|
  @param[out] SystemUuid     The pointer to the buffer to store the System UUID.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
OemGetSystemUuid (
 | 
						|
  OUT GUID  *SystemUuid
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the BIOS release.
 | 
						|
 | 
						|
  @return The BIOS release.
 | 
						|
**/
 | 
						|
UINT16
 | 
						|
EFIAPI
 | 
						|
OemGetBiosRelease (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/** Fetches the embedded controller firmware release.
 | 
						|
 | 
						|
  @return The embedded controller firmware release.
 | 
						|
**/
 | 
						|
UINT16
 | 
						|
EFIAPI
 | 
						|
OemGetEmbeddedControllerFirmwareRelease (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
#endif // OEM_MISC_LIB_H_
 |