mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 12:54:17 +00:00 
			
		
		
		
	Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Chiu, Chasel <chasel.chiu@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chan, Amy <amy.chan@intel.com> System test: Smbios tables are correctly published on an intel internal platform. .../DxeSmbiosDataHobLib/DxeSmbiosDataHobLib.c | 134 +++------------------ 1 file changed, 14 insertions(+), 120 deletions(-)
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Library to add SMBIOS data records from HOB to SMBIOS table.
 | 
						|
 | 
						|
  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
  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
 | 
						|
  http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
  @par Specification Reference:
 | 
						|
  System Management BIOS (SMBIOS) Reference Specification v3.0.0
 | 
						|
  dated 2015-Feb-12 (DSP0134)
 | 
						|
  http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
 | 
						|
 | 
						|
**/
 | 
						|
#include <IndustryStandard/SmBios.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Protocol/Smbios.h>
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Adds SMBIOS records to tables
 | 
						|
 | 
						|
  @param[in] ImageHandle          Image handle of this driver.
 | 
						|
  @param[in] SystemTable          Global system service table.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED      -  Could not locate SMBIOS protocol
 | 
						|
  @retval EFI_OUT_OF_RESOURCES -  Failed to allocate memory for SMBIOS HOB type.
 | 
						|
  @retval EFI_SUCCESS          -  Successfully added SMBIOS records based on HOB.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DxeSmbiosDataHobLibConstructor (
 | 
						|
  IN EFI_HANDLE                ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE          *SystemTable
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_PEI_HOB_POINTERS         Hob;
 | 
						|
  EFI_SMBIOS_HANDLE            SmbiosHandle;
 | 
						|
  EFI_SMBIOS_PROTOCOL          *Smbios;
 | 
						|
  EFI_STATUS                   Status;
 | 
						|
  UINT8                        *RecordPtr;
 | 
						|
  UINT16                       RecordCount;
 | 
						|
 | 
						|
  RecordCount = 0;
 | 
						|
 | 
						|
  DEBUG ((DEBUG_INFO, "Adding SMBIOS records from HOB..\n"));
 | 
						|
 | 
						|
  Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **)&Smbios);
 | 
						|
  if (Smbios == NULL) {
 | 
						|
    DEBUG ((DEBUG_WARN, "Can't locate SMBIOS protocol\n"));
 | 
						|
    return EFI_UNSUPPORTED;
 | 
						|
  }
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Get SMBIOS HOB data (each hob contains one SMBIOS record)
 | 
						|
  ///
 | 
						|
  for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
 | 
						|
    if ((GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_GUID_EXTENSION) && (CompareGuid (&Hob.Guid->Name, &gIntelSmbiosDataHobGuid))) {
 | 
						|
      RecordPtr = GET_GUID_HOB_DATA (Hob.Raw);
 | 
						|
 | 
						|
      ///
 | 
						|
      /// Add generic SMBIOS HOB to SMBIOS table
 | 
						|
      ///
 | 
						|
      DEBUG ((DEBUG_VERBOSE, "Add SMBIOS record type: %x\n", ((EFI_SMBIOS_TABLE_HEADER *) RecordPtr)->Type));
 | 
						|
      SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
 | 
						|
      Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) RecordPtr);
 | 
						|
      if (!EFI_ERROR (Status)) {
 | 
						|
        RecordCount++;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  DEBUG ((DEBUG_INFO, "Found %d Records and added to SMBIOS table.\n", RecordCount));
 | 
						|
 | 
						|
  return EFI_SUCCESS;
 | 
						|
}
 | 
						|
 |