mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 06:52:16 +00:00 
			
		
		
		
	The Section 6.1.3, SMBIOS specification version 3.6.0 describes the
handling of test strings in SMBIOS tables.
Text strings are added at the end of the formatted portion of the SMBIOS
structure and are referenced by index in the SMBIOS structure.
Therefore, introduce a SmbiosStringTableLib to simplify the publishing
of the string set.
SmbiosStringTableLib introduces a concept of string table which records
the references to the SMBIOS strings as they are added and returns an
string reference which is then assigned to the string field in the
formatted portion of the SMBIOS structure. Once all strings are added,
the library provides an interface to get the required size for the string
set. This allows sufficient memory to be allocated for the SMBIOS table.
The library also provides an interface to publish the string set in
accordance with the SMBIOS specification.
Example:
EFI_STATUS
BuildSmbiosType17Table () {
  STRING_TABLE         StrTable;
  UINT8                DevLocatorRef;
  UINT8                BankLocatorRef;
  SMBIOS_TABLE_TYPE17  *SmbiosRecord;
  CHAR8                *StringSet;
  ...
  // Initialize string table for 7 strings
  StringTableInitialize (&StrTable, 7);
  StringTableAddString (&StrTable, "SIMM 3", &DevLocatorRef);
  StringTableAddString (&StrTable, "Bank 0", &BankLocatorRef);
  ...
  SmbiosRecord = AllocateZeroPool (
                   sizeof (SMBIOS_TABLE_TYPE17) +
                     StringTableGetStringSetSize (&StrTable)
                   );
  ...
  SmbiosRecord->DeviceLocator = DevLocatorRef;
  SmbiosRecord->BankLocator = BankLocatorRef;
  ...
  // get the string set area
  StringSet = (CHAR8*)(SmbiosRecord + 1);
  // publish the string set
  StringTablePublishStringSet (
    &StrTable,
    StringSet,
    StringTableGetStringSetSize (&StrTable)
    );
  // free string table
  StringTableFree (&StrTable);
  return EFI_SUCCESS;
}
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
Cc: Alexei Fedorov <Alexei.Fedorov@arm.com>
Cc: Pierre Gondois <pierre.gondois@arm.com>
Cc: Girish Mahadevan <gmahadevan@nvidia.com>
Cc: Jeff Brasen <jbrasen@nvidia.com>
Cc: Ashish Singhal <ashishsingha@nvidia.com>
Cc: Nick Ramirez <nramirez@nvidia.com>
Cc: William Watson <wwatson@nvidia.com>
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
		
	
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
## @file
 | 
						|
# dec file for Dynamic Tables Framework.
 | 
						|
#
 | 
						|
# Copyright (c) 2017 - 2022, Arm Limited. All rights reserved.<BR>
 | 
						|
#
 | 
						|
# SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
#
 | 
						|
##
 | 
						|
 | 
						|
[Defines]
 | 
						|
  DEC_SPECIFICATION              = 0x00010005
 | 
						|
  PACKAGE_NAME                   = DynamicTablesPkg
 | 
						|
  PACKAGE_GUID                   = 188EB346-8ABA-460E-A105-0F9D76F7324A
 | 
						|
  PACKAGE_VERSION                = 1.0
 | 
						|
 | 
						|
[Includes]
 | 
						|
  Include
 | 
						|
 | 
						|
[LibraryClasses]
 | 
						|
  ##  @libraryclass  Defines a set of Acpi helper methods
 | 
						|
  #   independent from the Dynamic Tables Framework.
 | 
						|
  AcpiHelperLib|Include/Library/AcpiHelperLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of APIs for Dynamic AML generation.
 | 
						|
  AmlLib|Include/Library/AmlLib/AmlLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of APIs to handle dynamically created CmObj.
 | 
						|
  DynamicPlatRepoLib|Include/Library/DynamicPlatRepoLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of APIs to a hardware information parser.
 | 
						|
  HwInfoParserLib|Include/Library/HwInfoParserLib.h
 | 
						|
 | 
						|
  ##  @libraryclass Defines functions for customizing the generation of _OSC and slot info.
 | 
						|
  SsdtPcieSupportLib|Include/Library/SsdtPcieSupportLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of methods for fixing up a SSDT Serial Port.
 | 
						|
  SsdtSerialPortFixupLib|Include/Library/SsdtSerialPortFixupLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of helper methods.
 | 
						|
  TableHelperLib|Include/Library/TableHelperLib.h
 | 
						|
 | 
						|
  ##  @libraryclass  Defines a set of SMBIOS string helper methods.
 | 
						|
  SmbiosStringTableLib|Include/Library/SmbiosStringTableLib.h
 | 
						|
 | 
						|
[Protocols]
 | 
						|
  # Configuration Manager Protocol GUID
 | 
						|
  gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }
 | 
						|
 | 
						|
  # Dynamic Table Factory Protocol GUID
 | 
						|
  gEdkiiDynamicTableFactoryProtocolGuid = { 0x91d1e327, 0xfe5a, 0x49b8, { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } }
 | 
						|
 | 
						|
[PcdsFixedAtBuild]
 | 
						|
 | 
						|
  # Maximum number of Custom ACPI Generators
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdMaxCustomACPIGenerators|1|UINT16|0xC0000001
 | 
						|
 | 
						|
  # Maximum number of Custom SMBIOS Generators
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdMaxCustomSMBIOSGenerators|1|UINT16|0xC0000002
 | 
						|
 | 
						|
  # Maximum number of Custom DT Generators
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdMaxCustomDTGenerators|1|UINT16|0xC0000003
 | 
						|
 | 
						|
  # Non BSA Compliant 16550 Serial HID
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdNonBsaCompliant16550SerialHid|""|VOID*|0x40000008
 | 
						|
 | 
						|
  # Use PCI segment numbers as UID
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid|FALSE|BOOLEAN|0x40000009
 | 
						|
 | 
						|
[Guids]
 | 
						|
  gEdkiiDynamicTablesPkgTokenSpaceGuid = { 0xab226e66, 0x31d8, 0x4613, { 0x87, 0x9d, 0xd2, 0xfa, 0xb6, 0x10, 0x26, 0x3c } }
 |