/**@file
Copyright (c) 2006 - 2011, Intel Corporation. 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
Module Name:
SmbiosMisc.h
Abstract:
Header file for the SmbiosMisc Driver.
Based on files under Nt32Pkg/MiscSubClassPlatformDxe/
**/
#ifndef _SMBIOS_MISC_DRIVER_H
#define _SMBIOS_MISC_DRIVER_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//
// Data table entry update function.
//
typedef EFI_STATUS (EFIAPI EFI_MISC_SMBIOS_DATA_FUNCTION) (
IN VOID *RecordData,
IN EFI_SMBIOS_PROTOCOL *Smbios
);
//
// Data table entry definition.
//
typedef struct {
//
// intermediat input data for SMBIOS record
//
VOID *RecordData;
EFI_MISC_SMBIOS_DATA_FUNCTION *Function;
} EFI_MISC_SMBIOS_DATA_TABLE;
//
// Data Table extern definitions.
//
#define MISC_SMBIOS_TABLE_EXTERNS(NAME1, NAME2, NAME3) \
extern NAME1 NAME2 ## Data; \
extern EFI_MISC_SMBIOS_DATA_FUNCTION NAME3 ## Function;
//
// Data Table entries
//
#define MISC_SMBIOS_TABLE_ENTRY_DATA_AND_FUNCTION(NAME1, NAME2) \
{ \
& NAME1 ## Data, \
NAME2 ## Function \
}
//
// Global definition macros.
//
#define MISC_SMBIOS_TABLE_DATA(NAME1, NAME2) \
NAME1 NAME2 ## Data
#define MISC_SMBIOS_TABLE_FUNCTION(NAME2) \
EFI_STATUS EFIAPI NAME2 ## Function( \
IN VOID *RecordData, \
IN EFI_SMBIOS_PROTOCOL *Smbios \
)
//
// Data Table Array Entries
//
extern EFI_HII_HANDLE mHiiHandle;
typedef struct _EFI_TYPE11_OEM_STRING{
UINT8 Offset;
EFI_STRING_ID RefOemDefineString;
} EFI_TYPE11_OEM_STRING;
typedef struct _EFI_TYPE12_SYSTEM_CONFIGURATION_OPTIONS_STRING{
UINT8 Offset;
EFI_STRING_ID RefType12SystemConfigurationOptionsString;
} EFI_TYPE12_SYSTEM_CONFIGURATION_OPTIONS_STRING;
typedef struct _EFI_TYPE13_BIOS_LANGUAGE_INFORMATION_STRING{
UINT8 *LanguageSignature;
EFI_STRING_ID InstallableLanguageLongString;
EFI_STRING_ID InstallableLanguageAbbreviateString;
} EFI_TYPE13_BIOS_LANGUAGE_INFORMATION_STRING;
typedef struct _EFI_TYPE40_ADDITIONAL_INFORMATION_ENTRY{
UINT8 RefType;
UINT8 RefOffset;
EFI_STRING_ID RefString;
UINT8 Value;
} EFI_TYPE40_ADDITIONAL_INFORMATION_ENTRY;
typedef enum {
STRING,
DATA,
} OEM_DEFINE_TYPE;
typedef struct {
OEM_DEFINE_TYPE Type;
UINTN Token;
UINTN DataSize;
} OEM_DEFINE_INFO_STRING;
typedef struct {
OEM_DEFINE_TYPE Type;
UINTN DataAddress;
UINTN DataSize;
} OEM_DEFINE_INFO_DATA;
typedef union {
OEM_DEFINE_INFO_STRING DefineString;
OEM_DEFINE_INFO_DATA DefineData;
} EFI_OEM_DEFINE_ARRAY;
typedef struct _DMI_STRING_STRUCTURE {
UINT8 Type;
UINT8 Offset;
UINT8 Valid;
UINT16 Length;
UINT8 String[1]; // Variable length field
} DMI_STRING_STRUCTURE;
typedef struct {
UINT8 Type; // The SMBIOS structure type
UINT8 FixedOffset; // The offset of the string reference
// within the structure's fixed data.
} DMI_UPDATABLE_STRING;
EFI_STATUS
FindString (
IN UINT8 Type,
IN UINT8 Offset,
IN EFI_STRING_ID TokenToUpdate
);
EFI_STATUS
FindUuid (
EFI_GUID *Uuid
);
EFI_STATUS
StringToBiosVeriosn (
IN EFI_STRING_ID BiosVersionToken,
OUT UINT8 *MajorVersion,
OUT UINT8 *MinorVersion
);
/**
Logs SMBIOS record.
@param [in] Buffer Pointer to the data buffer.
@param [in] SmbiosHandle Pointer for retrieve handle.
**/
EFI_STATUS
LogSmbiosData (
IN UINT8 *Buffer,
IN OUT EFI_SMBIOS_HANDLE *SmbiosHandle
);
/**
Get Link Type Handle.
@param [in] SmbiosType Get this Type from SMBIOS table
@param [out] HandleArray Pointer to Hadndler array with has been free by caller
@param [out] HandleCount Pointer to Hadndler Counter
**/
VOID
GetLinkTypeHandle(
IN UINT8 SmbiosType,
OUT UINT16 **HandleArray,
OUT UINTN *HandleCount
);
typedef enum {
ProductNameType01,
SerialNumType01,
UuidType01,
SystemManufacturerType01,
AssertTagType02,
SrNumType02,
BoardManufacturerType02,
AssetTagType03,
SrNumType03,
VersionType03,
ChassisTypeType03 ,
ManufacturerType03,
} GET_INFO_BMC_OFFSET;
VOID UpdateSmbiosInfo (IN EFI_HII_HANDLE mHiiHandle, IN EFI_STRING_ID TokenToUpdate, IN UINT8 Offset);
EFI_STATUS GetUuidType1 (IN OUT EFI_GUID *Uuid);
EFI_STATUS IpmiGetChassisType (IN OUT UINT8 *Type);
#endif