]> git.proxmox.com Git - mirror_edk2.git/blame - IntelSiliconPkg/Library/DxeSmbiosDataHobLib/DxeSmbiosDataHobLib.c
IntelSiliconPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / IntelSiliconPkg / Library / DxeSmbiosDataHobLib / DxeSmbiosDataHobLib.c
CommitLineData
04683038
GM
1/** @file\r
2 Library to add SMBIOS data records from HOB to SMBIOS table.\r
3\r
4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
5\r
8f7a05e1 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
04683038
GM
7\r
8 @par Specification Reference:\r
9 System Management BIOS (SMBIOS) Reference Specification v3.0.0\r
10 dated 2015-Feb-12 (DSP0134)\r
11 http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf\r
12\r
13**/\r
14#include <IndustryStandard/SmBios.h>\r
15#include <Library/UefiLib.h>\r
16#include <Library/BaseLib.h>\r
17#include <Library/BaseMemoryLib.h>\r
18#include <Library/MemoryAllocationLib.h>\r
19#include <Library/DebugLib.h>\r
20#include <Library/HobLib.h>\r
21#include <Library/UefiBootServicesTableLib.h>\r
22#include <Protocol/Smbios.h>\r
23\r
04683038
GM
24\r
25/**\r
26 Adds SMBIOS records to tables\r
27\r
28 @param[in] ImageHandle Image handle of this driver.\r
29 @param[in] SystemTable Global system service table.\r
30\r
31 @retval EFI_UNSUPPORTED - Could not locate SMBIOS protocol\r
32 @retval EFI_OUT_OF_RESOURCES - Failed to allocate memory for SMBIOS HOB type.\r
33 @retval EFI_SUCCESS - Successfully added SMBIOS records based on HOB.\r
34**/\r
35EFI_STATUS\r
36EFIAPI\r
37DxeSmbiosDataHobLibConstructor (\r
38 IN EFI_HANDLE ImageHandle,\r
39 IN EFI_SYSTEM_TABLE *SystemTable\r
40 )\r
41{\r
42 EFI_PEI_HOB_POINTERS Hob;\r
43 EFI_SMBIOS_HANDLE SmbiosHandle;\r
44 EFI_SMBIOS_PROTOCOL *Smbios;\r
45 EFI_STATUS Status;\r
04683038
GM
46 UINT8 *RecordPtr;\r
47 UINT16 RecordCount;\r
04683038
GM
48\r
49 RecordCount = 0;\r
50\r
51 DEBUG ((DEBUG_INFO, "Adding SMBIOS records from HOB..\n"));\r
52\r
53 Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **)&Smbios);\r
54 if (Smbios == NULL) {\r
f0c1e9ae 55 DEBUG ((DEBUG_WARN, "Can't locate SMBIOS protocol\n"));\r
04683038
GM
56 return EFI_UNSUPPORTED;\r
57 }\r
58\r
59 ///\r
f0c1e9ae 60 /// Get SMBIOS HOB data (each hob contains one SMBIOS record)\r
04683038
GM
61 ///\r
62 for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
63 if ((GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_GUID_EXTENSION) && (CompareGuid (&Hob.Guid->Name, &gIntelSmbiosDataHobGuid))) {\r
f0c1e9ae
CA
64 RecordPtr = GET_GUID_HOB_DATA (Hob.Raw);\r
65\r
66 ///\r
67 /// Add generic SMBIOS HOB to SMBIOS table\r
68 ///\r
69 DEBUG ((DEBUG_VERBOSE, "Add SMBIOS record type: %x\n", ((EFI_SMBIOS_TABLE_HEADER *) RecordPtr)->Type));\r
70 SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
71 Status = Smbios->Add (Smbios, NULL, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) RecordPtr);\r
72 if (!EFI_ERROR (Status)) {\r
73 RecordCount++;\r
74 }\r
04683038
GM
75 }\r
76 }\r
f0c1e9ae 77 DEBUG ((DEBUG_INFO, "Found %d Records and added to SMBIOS table.\n", RecordCount));\r
04683038
GM
78\r
79 return EFI_SUCCESS;\r
80}\r
81\r