windows-nt/Source/XPSP1/NT/base/ntos/inc/smbios.h
2020-09-26 16:20:57 +08:00

336 lines
8.2 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
smbios.h
Abstract:
This module contains definitions that describe SMBIOS
Author:
Alan Warwick (AlanWar) 12-Feb-1998
Revision History:
--*/
#ifndef _SMBIOS_
#define _SMBIOS_
//
// SMBIOS error codes
#define DMI_SUCCESS 0x00
#define DMI_UNKNOWN_FUNCTION 0x81
#define DMI_FUNCTION_NOT_SUPPORTED 0x82
#define DMI_INVALID_HANDLE 0x83
#define DMI_BAD_PARAMETER 0x84
#define DMI_INVALID_SUBFUNCTION 0x85
#define DMI_NO_CHANGE 0x86
#define DMI_ADD_STRUCTURE_FAILED 0x87
// @@BEGIN_DDKSPLIT
//
// SMBIOS registry values
#define SMBIOSPARENTKEYNAME L"\\Registry\\Machine\\Hardware\\Description\\System\\MultifunctionAdapter"
#define SMBIOSIDENTIFIERVALUENAME L"Identifier"
#ifdef _IA64_
#define SMBIOSIDENTIFIERVALUEDATA L"SMBIOS"
#else
#define SMBIOSIDENTIFIERVALUEDATA L"PNP BIOS"
#endif
#define SMBIOSDATAVALUENAME L"Configuration Data"
#define MAXSMBIOSKEYNAMESIZE 256
// @@END_DDKSPLIT
//
// SMBIOS table search
#define SMBIOS_EPS_SEARCH_SIZE 0x10000
#define SMBIOS_EPS_SEARCH_START 0x000f0000
#define SMBIOS_EPS_SEARCH_INCREMENT 0x10
#include <pshpack1.h>
typedef struct _SMBIOS_TABLE_HEADER
{
UCHAR Signature[4]; // _SM_ (ascii)
UCHAR Checksum;
UCHAR Length;
UCHAR MajorVersion;
UCHAR MinorVersion;
USHORT MaximumStructureSize;
UCHAR EntryPointRevision;
UCHAR Reserved[5];
UCHAR Signature2[5]; // _DMI_ (ascii)
UCHAR IntermediateChecksum;
USHORT StructureTableLength;
ULONG StructureTableAddress;
USHORT NumberStructures;
UCHAR Revision;
} SMBIOS_EPS_HEADER, *PSMBIOS_EPS_HEADER;
#define SMBIOS_EPS_SIGNATURE '_MS_'
#define DMI_EPS_SIGNATURE 'IMD_'
typedef struct _SMBIOS_STRUCT_HEADER
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR Data[];
} SMBIOS_STRUCT_HEADER, *PSMBIOS_STRUCT_HEADER;
typedef struct _DMIBIOS_TABLE_HEADER
{
UCHAR Signature2[5]; // _DMI_ (ascii)
UCHAR IntermediateChecksum;
USHORT StructureTableLength;
ULONG StructureTableAddress;
USHORT NumberStructures;
UCHAR Revision;
} DMIBIOS_EPS_HEADER, *PDMIBIOS_EPS_HEADER;
//
// Definitions for the SMBIOS table BIOS INFORMATION
//
#define SMBIOS_BIOS_INFORMATION_TYPE 0
typedef struct _SMBIOS_BIOS_INFORMATION_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR Vendor;
UCHAR Version;
USHORT StartingAddressSegment;
UCHAR ReleaseDate;
UCHAR RomSize;
ULONG Characteristics0;
ULONG Characteristics1;
UCHAR CharacteristicsExtension;
} SMBIOS_BIOS_INFORMATION_STRUCT, *PSMBIOS_BIOS_INFORMATION_STRUCT;
//
// Definitions for the SMBIOS table SYSTEM INFORMATION STRUCTURE
//
#define SMBIOS_SYSTEM_INFORMATION 1
typedef struct _SMBIOS_SYSTEM_INFORMATION_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR Manufacturer; // string
UCHAR ProductName; // string
UCHAR Version; // string
UCHAR SerialNumber; // string
UCHAR Uuid[16]; // SMBIOS 2.1+
UCHAR WakeupType; // SMBIOS 2.1+
} SMBIOS_SYSTEM_INFORMATION_STRUCT, *PSMBIOS_SYSTEM_INFORMATION_STRUCT;
#define SMBIOS_SYSTEM_INFORMATION_LENGTH_20 8
//
// Definitions for the SMBIOS table BASE BOARD INFORMATION
//
#define SMBIOS_BASE_BOARD_INFORMATION_TYPE 2
typedef struct _SMBIOS_BASE_BOARD_INFORMATION_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR Manufacturer;
UCHAR Product;
UCHAR Version;
UCHAR SerialNumber;
} SMBIOS_BASE_BOARD_INFORMATION_STRUCT, *PSMBIOS_BASE_BOARD_INFORMATION_STRUCT;
//
// Definitions for the SMBIOS table BASE BOARD INFORMATION
//
#define SMBIOS_SYSTEM_CHASIS_INFORMATION_TYPE 3
typedef struct _SMBIOS_SYSTEM_CHASIS_INFORMATION_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR Manufacturer;
UCHAR ChasisType;
UCHAR Version;
UCHAR SerialNumber;
UCHAR AssetTagNumber;
UCHAR BootUpState;
UCHAR PowerSupplyState;
UCHAR ThernalState;
UCHAR SecurityStatus;
ULONG OEMDefined;
} SMBIOS_SYSTEM_CHASIS_INFORMATION_STRUCT, *PSMBIOS_SYSTEM_CHASIS_INFORMATION_STRUCT;
//
// Definitions for the SMBIOS table PROCESSOR INFORMATION
//
#define SMBIOS_PROCESSOR_INFORMATION_TYPE 4
typedef struct _SMBIOS_PROCESSOR_INFORMATION_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
UCHAR SocketDesignation;
UCHAR ProcessorType;
UCHAR ProcessorFamily;
UCHAR ProcessorManufacturer;
ULONG ProcessorID0;
ULONG ProcessorID1;
UCHAR ProcessorVersion;
UCHAR Voltage;
USHORT ExternalClock;
USHORT MaxSpeed;
USHORT CurrentSpeed;
UCHAR Status;
UCHAR ProcessorUpgrade;
USHORT L1CacheHandle;
USHORT L2CacheHandle;
USHORT L3CacheHandle;
UCHAR SerialNumber;
UCHAR AssetTag;
} SMBIOS_PROCESSOR_INFORMATION_STRUCT, *PSMBIOS_PROCESSOR_INFORMATION_STRUCT;
//
// Definitions for the SMBIOS table SYSTEM EVENTLOG STRUCTURE
#define SMBIOS_SYSTEM_EVENTLOG 15
//
// ENUM for AccessMethod
//
#define ACCESS_METHOD_INDEXIO_1 0
#define ACCESS_METHOD_INDEXIO_2 1
#define ACCESS_METHOD_INDEXIO_3 2
#define ACCESS_METHOD_MEMMAP 3
#define ACCESS_METHOD_GPNV 4
typedef struct _LOGTYPEDESCRIPTOR
{
UCHAR LogType;
UCHAR DataFormatType;
} LOGTYPEDESCRIPTOR, *PLOGTYPEDESCRIPTOR;
typedef struct _ACCESS_METHOD_ADDRESS
{
union
{
struct
{
USHORT IndexAddr;
USHORT DataAddr;
} IndexIo;
ULONG PhysicalAddress32;
USHORT GPNVHandle;
} AccessMethodAddress;
} ACCESS_METHOD_ADDRESS, *PACCESS_METHOD_ADDRESS;
typedef struct _SMBIOS_SYSTEM_EVENTLOG_STRUCT
{
UCHAR Type;
UCHAR Length;
USHORT Handle;
USHORT LogAreaLength;
USHORT LogHeaderStartOffset;
USHORT LogDataStartOffset;
UCHAR AccessMethod;
UCHAR LogStatus;
ULONG LogChangeToken;
ACCESS_METHOD_ADDRESS AccessMethodAddress;
UCHAR LogHeaderFormat;
UCHAR NumLogTypeDescriptors;
UCHAR LenLogTypeDescriptors;
LOGTYPEDESCRIPTOR LogTypeDescriptor[1];
} SMBIOS_SYSTEM_EVENTLOG_STRUCT, *PSMBIOS_SYSTEM_EVENTLOG_STRUCT;
#define SMBIOS_SYSTEM_EVENTLOG_LENGTH_20 0x14
#define SMBIOS_SYSTEM_EVENTLOG_LENGTH (FIELD_OFFSET(SMBIOS_SYSTEM_EVENTLOG_STRUCT, LogTypeDescriptor))
//
// SYSID table search
//
#define SYSID_EPS_SEARCH_SIZE 0x20000
#define SYSID_EPS_SEARCH_START 0x000e0000
#define SYSID_EPS_SEARCH_INCREMENT 0x10
#define SYSID_EPS_SIGNATURE 'SYS_'
#define SYSID_EPS_SIGNATURE2 'DI'
typedef struct _SYSID_EPS_HEADER
{
UCHAR Signature[7]; // _SYSID_ (ascii)
UCHAR Checksum;
USHORT Length; // Length of SYSID_EPS_HEADER
ULONG SysIdTableAddress; // Physical Address of SYSID table
USHORT SysIdCount; // Count of SYSIDs in table
UCHAR BiosRev; // SYSID Bios revision
} SYSID_EPS_HEADER, *PSYSID_EPS_HEADER;
typedef struct _SYSID_TABLE_ENTRY
{
UCHAR Type[6]; // _UUID_ or _1394_ (ascii)
UCHAR Checksum;
USHORT Length; // Length of this table
UCHAR Data[1]; // Variable length UUID/1394 data
} SYSID_TABLE_ENTRY, *PSYSID_TABLE_ENTRY;
#define SYSID_UUID_DATA_SIZE 16
typedef struct _SYSID_UUID_ENTRY
{
UCHAR Type[6]; // _UUID_ (ascii)
UCHAR Checksum;
USHORT Length; // Length of this table
UCHAR UUID[SYSID_UUID_DATA_SIZE]; // UUID
} SYSID_UUID_ENTRY, *PSYSID_UUID_ENTRY;
#define SYSID_1394_DATA_SIZE 8
typedef struct _SYSID_1394_ENTRY
{
UCHAR Type[6]; // _1394_ (ascii)
UCHAR Checksum;
USHORT Length; // Length of this table
UCHAR x1394Id[SYSID_1394_DATA_SIZE]; // 1394 ID
} SYSID_1394_ENTRY, *PSYSID_1394_ENTRY;
#define LARGEST_SYSID_TABLE_ENTRY (sizeof(SYSID_UUID_ENTRY))
#define SYSID_TYPE_UUID "_UUID_"
#define SYSID_TYPE_1394 "_1394_"
#include <poppack.h>
#endif