/** @file Smbios basic entry point. Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "SmbiosBasic.h" EFI_STATUS EFIAPI BiosVendorFunction( IN EFI_SMBIOS_PROTOCOL *Smbios ); EFI_STATUS EFIAPI SystemManufacturerFunction( IN EFI_SMBIOS_PROTOCOL *Smbios ); EFI_STATUS EFIAPI BaseBoardManufacturerFunction( IN EFI_SMBIOS_PROTOCOL *Smbios ); EFI_STATUS EFIAPI ChassisManufacturerFunction( IN EFI_SMBIOS_PROTOCOL *Smbios ); EFI_STATUS EFIAPI BootInfoStatusFunction( IN EFI_SMBIOS_PROTOCOL *Smbios ); typedef EFI_STATUS (EFIAPI EFI_BASIC_SMBIOS_DATA_FUNCTION) ( IN EFI_SMBIOS_PROTOCOL *Smbios ); typedef struct { EFI_BASIC_SMBIOS_DATA_FUNCTION *Function; } EFI_BASIC_SMBIOS_DATA; EFI_BASIC_SMBIOS_DATA mSmbiosBasicDataFuncTable[] = { {&BiosVendorFunction}, {&SystemManufacturerFunction}, {&BaseBoardManufacturerFunction}, {&ChassisManufacturerFunction}, {&BootInfoStatusFunction}, }; /** Standard EFI driver point. This driver parses the mSmbiosMiscDataTable structure and reports any generated data using SMBIOS protocol. @param ImageHandle Handle for the image of this driver @param SystemTable Pointer to the EFI System Table @retval EFI_SUCCESS The data was successfully stored. **/ EFI_STATUS EFIAPI SmbiosBasicEntryPoint( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { UINTN Index; EFI_STATUS EfiStatus; EFI_SMBIOS_PROTOCOL *Smbios; EfiStatus = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, (VOID**)&Smbios); if (EFI_ERROR(EfiStatus)) { DEBUG((DEBUG_ERROR, "Could not locate SMBIOS protocol. %r\n", EfiStatus)); return EfiStatus; } for (Index = 0; Index < sizeof(mSmbiosBasicDataFuncTable)/sizeof(mSmbiosBasicDataFuncTable[0]); ++Index) { EfiStatus = (*mSmbiosBasicDataFuncTable[Index].Function) (Smbios); if (EFI_ERROR(EfiStatus)) { DEBUG((DEBUG_ERROR, "Basic smbios store error. Index=%d, ReturnStatus=%r\n", Index, EfiStatus)); 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 ); }