1 1.1 jakllsch /* $NetBSD: libsmbios.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _LIB_SMBIOS_H 4 1.1 jakllsch #define _LIB_SMBIOS_H 5 1.1 jakllsch /*++ 6 1.1 jakllsch 7 1.1 jakllsch Copyright (c) 2000 Intel Corporation 8 1.1 jakllsch 9 1.1 jakllsch Module Name: 10 1.1 jakllsch 11 1.1 jakllsch LibSmbios.h 12 1.1.1.2 jmcneill 13 1.1 jakllsch Abstract: 14 1.1 jakllsch 15 1.1 jakllsch Lib include for SMBIOS services. Used to get system serial number and GUID 16 1.1 jakllsch 17 1.1 jakllsch Revision History 18 1.1 jakllsch 19 1.1 jakllsch --*/ 20 1.1 jakllsch 21 1.1 jakllsch // 22 1.1 jakllsch // Define SMBIOS tables. 23 1.1 jakllsch // 24 1.1 jakllsch #pragma pack(1) 25 1.1 jakllsch typedef struct { 26 1.1 jakllsch UINT8 AnchorString[4]; 27 1.1 jakllsch UINT8 EntryPointStructureChecksum; 28 1.1 jakllsch UINT8 EntryPointLength; 29 1.1 jakllsch UINT8 MajorVersion; 30 1.1 jakllsch UINT8 MinorVersion; 31 1.1 jakllsch UINT16 MaxStructureSize; 32 1.1 jakllsch UINT8 EntryPointRevision; 33 1.1 jakllsch UINT8 FormattedArea[5]; 34 1.1 jakllsch UINT8 IntermediateAnchorString[5]; 35 1.1 jakllsch UINT8 IntermediateChecksum; 36 1.1 jakllsch UINT16 TableLength; 37 1.1 jakllsch UINT32 TableAddress; 38 1.1 jakllsch UINT16 NumberOfSmbiosStructures; 39 1.1 jakllsch UINT8 SmbiosBcdRevision; 40 1.1 jakllsch } SMBIOS_STRUCTURE_TABLE; 41 1.1 jakllsch 42 1.1.1.2 jmcneill typedef struct { 43 1.1.1.2 jmcneill UINT8 AnchorString[5]; 44 1.1.1.2 jmcneill UINT8 EntryPointStructureChecksum; 45 1.1.1.2 jmcneill UINT8 EntryPointLength; 46 1.1.1.2 jmcneill UINT8 MajorVersion; 47 1.1.1.2 jmcneill UINT8 MinorVersion; 48 1.1.1.2 jmcneill UINT8 DocRev; 49 1.1.1.2 jmcneill UINT8 EntryPointRevision; 50 1.1.1.2 jmcneill UINT8 Reserved; 51 1.1.1.2 jmcneill UINT32 TableMaximumSize; 52 1.1.1.2 jmcneill UINT64 TableAddress; 53 1.1.1.2 jmcneill } SMBIOS3_STRUCTURE_TABLE; 54 1.1.1.2 jmcneill 55 1.1 jakllsch // 56 1.1 jakllsch // Please note that SMBIOS structures can be odd byte aligned since the 57 1.1 jakllsch // unformated section of each record is a set of arbitrary size strings. 58 1.1 jakllsch // 59 1.1 jakllsch 60 1.1 jakllsch typedef struct { 61 1.1 jakllsch UINT8 Type; 62 1.1 jakllsch UINT8 Length; 63 1.1 jakllsch UINT8 Handle[2]; 64 1.1 jakllsch } SMBIOS_HEADER; 65 1.1 jakllsch 66 1.1 jakllsch typedef UINT8 SMBIOS_STRING; 67 1.1 jakllsch 68 1.1 jakllsch typedef struct { 69 1.1 jakllsch SMBIOS_HEADER Hdr; 70 1.1 jakllsch SMBIOS_STRING Vendor; 71 1.1 jakllsch SMBIOS_STRING BiosVersion; 72 1.1 jakllsch UINT8 BiosSegment[2]; 73 1.1 jakllsch SMBIOS_STRING BiosReleaseDate; 74 1.1 jakllsch UINT8 BiosSize; 75 1.1 jakllsch UINT8 BiosCharacteristics[8]; 76 1.1 jakllsch } SMBIOS_TYPE0; 77 1.1 jakllsch 78 1.1 jakllsch typedef struct { 79 1.1 jakllsch SMBIOS_HEADER Hdr; 80 1.1 jakllsch SMBIOS_STRING Manufacturer; 81 1.1 jakllsch SMBIOS_STRING ProductName; 82 1.1 jakllsch SMBIOS_STRING Version; 83 1.1 jakllsch SMBIOS_STRING SerialNumber; 84 1.1 jakllsch 85 1.1 jakllsch // 86 1.1 jakllsch // always byte copy this data to prevent alignment faults! 87 1.1 jakllsch // 88 1.1 jakllsch EFI_GUID Uuid; 89 1.1.1.2 jmcneill 90 1.1 jakllsch UINT8 WakeUpType; 91 1.1 jakllsch } SMBIOS_TYPE1; 92 1.1 jakllsch 93 1.1 jakllsch typedef struct { 94 1.1 jakllsch SMBIOS_HEADER Hdr; 95 1.1 jakllsch SMBIOS_STRING Manufacturer; 96 1.1 jakllsch SMBIOS_STRING ProductName; 97 1.1 jakllsch SMBIOS_STRING Version; 98 1.1 jakllsch SMBIOS_STRING SerialNumber; 99 1.1 jakllsch } SMBIOS_TYPE2; 100 1.1 jakllsch 101 1.1 jakllsch typedef struct { 102 1.1 jakllsch SMBIOS_HEADER Hdr; 103 1.1 jakllsch SMBIOS_STRING Manufacturer; 104 1.1 jakllsch UINT8 Type; 105 1.1 jakllsch SMBIOS_STRING Version; 106 1.1 jakllsch SMBIOS_STRING SerialNumber; 107 1.1 jakllsch SMBIOS_STRING AssetTag; 108 1.1 jakllsch UINT8 BootupState; 109 1.1 jakllsch UINT8 PowerSupplyState; 110 1.1 jakllsch UINT8 ThermalState; 111 1.1 jakllsch UINT8 SecurityStatus; 112 1.1 jakllsch UINT8 OemDefined[4]; 113 1.1 jakllsch } SMBIOS_TYPE3; 114 1.1 jakllsch 115 1.1 jakllsch typedef struct { 116 1.1 jakllsch SMBIOS_HEADER Hdr; 117 1.1 jakllsch UINT8 Socket; 118 1.1 jakllsch UINT8 ProcessorType; 119 1.1 jakllsch UINT8 ProcessorFamily; 120 1.1 jakllsch SMBIOS_STRING ProcessorManufacture; 121 1.1 jakllsch UINT8 ProcessorId[8]; 122 1.1 jakllsch SMBIOS_STRING ProcessorVersion; 123 1.1 jakllsch UINT8 Voltage; 124 1.1 jakllsch UINT8 ExternalClock[2]; 125 1.1 jakllsch UINT8 MaxSpeed[2]; 126 1.1 jakllsch UINT8 CurrentSpeed[2]; 127 1.1 jakllsch UINT8 Status; 128 1.1 jakllsch UINT8 ProcessorUpgrade; 129 1.1 jakllsch UINT8 L1CacheHandle[2]; 130 1.1 jakllsch UINT8 L2CacheHandle[2]; 131 1.1 jakllsch UINT8 L3CacheHandle[2]; 132 1.1 jakllsch } SMBIOS_TYPE4; 133 1.1 jakllsch 134 1.1 jakllsch typedef union { 135 1.1 jakllsch SMBIOS_HEADER *Hdr; 136 1.1 jakllsch SMBIOS_TYPE0 *Type0; 137 1.1 jakllsch SMBIOS_TYPE1 *Type1; 138 1.1 jakllsch SMBIOS_TYPE2 *Type2; 139 1.1 jakllsch SMBIOS_TYPE3 *Type3; 140 1.1 jakllsch SMBIOS_TYPE4 *Type4; 141 1.1 jakllsch UINT8 *Raw; 142 1.1 jakllsch } SMBIOS_STRUCTURE_POINTER; 143 1.1 jakllsch #pragma pack() 144 1.1 jakllsch 145 1.1 jakllsch #endif 146