#ifndef _SYS_SMBIOS_H
#define _SYS_SMBIOS_H
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum smbios_entry_point_type {
SMBIOS_ENTRY_POINT_21,
SMBIOS_ENTRY_POINT_30
} smbios_entry_point_t;
#pragma pack(1)
typedef struct smbios_21_entry {
char smbe_eanchor[4];
uint8_t smbe_ecksum;
uint8_t smbe_elen;
uint8_t smbe_major;
uint8_t smbe_minor;
uint16_t smbe_maxssize;
uint8_t smbe_revision;
uint8_t smbe_format[5];
char smbe_ianchor[5];
uint8_t smbe_icksum;
uint16_t smbe_stlen;
uint32_t smbe_staddr;
uint16_t smbe_stnum;
uint8_t smbe_bcdrev;
} smbios_21_entry_t;
typedef struct smbios_30_entry {
char smbe_eanchor[5];
uint8_t smbe_ecksum;
uint8_t smbe_elen;
uint8_t smbe_major;
uint8_t smbe_minor;
uint8_t smbe_docrev;
uint8_t smbe_revision;
uint8_t smbe_reserved;
uint32_t smbe_stlen;
uint64_t smbe_staddr;
} smbios_30_entry_t;
typedef union {
smbios_21_entry_t ep21;
smbios_30_entry_t ep30;
} smbios_entry_t;
#pragma pack()
#define SMB_ENTRY_EANCHOR "_SM_"
#define SMB_ENTRY_EANCHORLEN 4
#define SMB3_ENTRY_EANCHOR "_SM3_"
#define SMB3_ENTRY_EANCHORLEN 5
#define SMB_ENTRY_IANCHOR "_DMI_"
#define SMB_ENTRY_IANCHORLEN 5
#define SMB_ENTRY_MAXLEN 255
#define SMB_TYPE_BIOS 0
#define SMB_TYPE_SYSTEM 1
#define SMB_TYPE_BASEBOARD 2
#define SMB_TYPE_CHASSIS 3
#define SMB_TYPE_PROCESSOR 4
#define SMB_TYPE_MEMCTL 5
#define SMB_TYPE_MEMMOD 6
#define SMB_TYPE_CACHE 7
#define SMB_TYPE_PORT 8
#define SMB_TYPE_SLOT 9
#define SMB_TYPE_OBDEVS 10
#define SMB_TYPE_OEMSTR 11
#define SMB_TYPE_SYSCONFSTR 12
#define SMB_TYPE_LANG 13
#define SMB_TYPE_GROUP 14
#define SMB_TYPE_EVENTLOG 15
#define SMB_TYPE_MEMARRAY 16
#define SMB_TYPE_MEMDEVICE 17
#define SMB_TYPE_MEMERR32 18
#define SMB_TYPE_MEMARRAYMAP 19
#define SMB_TYPE_MEMDEVICEMAP 20
#define SMB_TYPE_POINTDEV 21
#define SMB_TYPE_BATTERY 22
#define SMB_TYPE_RESET 23
#define SMB_TYPE_SECURITY 24
#define SMB_TYPE_POWERCTL 25
#define SMB_TYPE_VPROBE 26
#define SMB_TYPE_COOLDEV 27
#define SMB_TYPE_TPROBE 28
#define SMB_TYPE_IPROBE 29
#define SMB_TYPE_OOBRA 30
#define SMB_TYPE_BIS 31
#define SMB_TYPE_BOOT 32
#define SMB_TYPE_MEMERR64 33
#define SMB_TYPE_MGMTDEV 34
#define SMB_TYPE_MGMTDEVCP 35
#define SMB_TYPE_MGMTDEVDATA 36
#define SMB_TYPE_MEMCHAN 37
#define SMB_TYPE_IPMIDEV 38
#define SMB_TYPE_POWERSUP 39
#define SMB_TYPE_ADDINFO 40
#define SMB_TYPE_OBDEVEXT 41
#define SMB_TYPE_MCHI 42
#define SMB_TYPE_TPM 43
#define SMB_TYPE_PROCESSOR_INFO 44
#define SMB_TYPE_FWINFO 45
#define SMB_TYPE_STRPROP 46
#define SMB_TYPE_INACTIVE 126
#define SMB_TYPE_EOT 127
#define SMB_TYPE_OEM_LO 128
#define SUN_OEM_EXT_PROCESSOR 132
#define SUN_OEM_EXT_PORT 136
#define SUN_OEM_PCIEXRC 138
#define SUN_OEM_EXT_MEMARRAY 144
#define SUN_OEM_EXT_MEMDEVICE 145
#define SMB_TYPE_OEM_HI 256
#define SMB_PRMS1 "SUNW-PRMS-1"
#define SMB_DEFAULT1 "To Be Filled By O.E.M."
#define SMB_DEFAULT2 "Not Available"
#define SMB_DEFAULT3 "Default string"
typedef struct smbios_info {
const char *smbi_manufacturer;
const char *smbi_product;
const char *smbi_version;
const char *smbi_serial;
const char *smbi_asset;
const char *smbi_location;
const char *smbi_part;
} smbios_info_t;
typedef struct smbios_version {
uint8_t smbv_major;
uint8_t smbv_minor;
} smbios_version_t;
#define SMB_CONT_MAX 255
typedef struct smbios_bios {
const char *smbb_vendor;
const char *smbb_version;
const char *smbb_reldate;
uint32_t smbb_segment;
uint32_t smbb_romsize;
uint32_t smbb_runsize;
uint64_t smbb_cflags;
const uint8_t *smbb_xcflags;
size_t smbb_nxcflags;
smbios_version_t smbb_biosv;
smbios_version_t smbb_ecfwv;
uint64_t smbb_extromsize;
} smbios_bios_t;
#define SMB_BIOSFL_RSV0 0x00000001
#define SMB_BIOSFL_RSV1 0x00000002
#define SMB_BIOSFL_UNKNOWN 0x00000004
#define SMB_BIOSFL_BCNOTSUP 0x00000008
#define SMB_BIOSFL_ISA 0x00000010
#define SMB_BIOSFL_MCA 0x00000020
#define SMB_BIOSFL_EISA 0x00000040
#define SMB_BIOSFL_PCI 0x00000080
#define SMB_BIOSFL_PCMCIA 0x00000100
#define SMB_BIOSFL_PLUGNPLAY 0x00000200
#define SMB_BIOSFL_APM 0x00000400
#define SMB_BIOSFL_FLASH 0x00000800
#define SMB_BIOSFL_SHADOW 0x00001000
#define SMB_BIOSFL_VLVESA 0x00002000
#define SMB_BIOSFL_ESCD 0x00004000
#define SMB_BIOSFL_CDBOOT 0x00008000
#define SMB_BIOSFL_SELBOOT 0x00010000
#define SMB_BIOSFL_ROMSOCK 0x00020000
#define SMB_BIOSFL_PCMBOOT 0x00040000
#define SMB_BIOSFL_EDD 0x00080000
#define SMB_BIOSFL_NEC9800 0x00100000
#define SMB_BIOSFL_TOSHIBA 0x00200000
#define SMB_BIOSFL_525_360K 0x00400000
#define SMB_BIOSFL_525_12M 0x00800000
#define SMB_BIOSFL_35_720K 0x01000000
#define SMB_BIOSFL_35_288M 0x02000000
#define SMB_BIOSFL_I5_PRINT 0x04000000
#define SMB_BIOSFL_I9_KBD 0x08000000
#define SMB_BIOSFL_I14_SER 0x10000000
#define SMB_BIOSFL_I17_PRINTER 0x20000000
#define SMB_BIOSFL_I10_CGA 0x40000000
#define SMB_BIOSFL_NEC_PC98 0x80000000
#define SMB_BIOSXB_1 0
#define SMB_BIOSXB_2 1
#define SMB_BIOSXB_BIOS_MAJ 2
#define SMB_BIOSXB_BIOS_MIN 3
#define SMB_BIOSXB_ECFW_MAJ 4
#define SMB_BIOSXB_ECFW_MIN 5
#define SMB_BIOSXB1_ACPI 0x01
#define SMB_BIOSXB1_USBL 0x02
#define SMB_BIOSXB1_AGP 0x04
#define SMB_BIOSXB1_I20 0x08
#define SMB_BIOSXB1_LS120 0x10
#define SMB_BIOSXB1_ATZIP 0x20
#define SMB_BIOSXB1_1394 0x40
#define SMB_BIOSXB1_SMBAT 0x80
#define SMB_BIOSXB2_BBOOT 0x01
#define SMB_BIOSXB2_FKNETSVC 0x02
#define SMB_BIOSXB2_ETCDIST 0x04
#define SMB_BIOSXB2_UEFI 0x08
#define SMB_BIOSXB2_VM 0x10
#define SMB_BIOSXB2_MFG_MODE 0x20
#define SMB_BIOSXB2_MFG_EN 0x40
typedef struct smbios_system {
const uint8_t *smbs_uuid;
uint8_t smbs_uuidlen;
uint8_t smbs_wakeup;
const char *smbs_sku;
const char *smbs_family;
} smbios_system_t;
#define SMB_WAKEUP_RSV0 0x00
#define SMB_WAKEUP_OTHER 0x01
#define SMB_WAKEUP_UNKNOWN 0x02
#define SMB_WAKEUP_APM 0x03
#define SMB_WAKEUP_MODEM 0x04
#define SMB_WAKEUP_LAN 0x05
#define SMB_WAKEUP_SWITCH 0x06
#define SMB_WAKEUP_PCIPME 0x07
#define SMB_WAKEUP_AC 0x08
typedef struct smbios_bboard {
id_t smbb_chassis;
uint8_t smbb_flags;
uint8_t smbb_type;
uint8_t smbb_contn;
} smbios_bboard_t;
#define SMB_BBFL_MOTHERBOARD 0x01
#define SMB_BBFL_NEEDAUX 0x02
#define SMB_BBFL_REMOVABLE 0x04
#define SMB_BBFL_REPLACABLE 0x08
#define SMB_BBFL_HOTSWAP 0x10
#define SMB_BBT_UNKNOWN 0x1
#define SMB_BBT_OTHER 0x2
#define SMB_BBT_SBLADE 0x3
#define SMB_BBT_CSWITCH 0x4
#define SMB_BBT_SMM 0x5
#define SMB_BBT_PROC 0x6
#define SMB_BBT_IO 0x7
#define SMB_BBT_MEM 0x8
#define SMB_BBT_DAUGHTER 0x9
#define SMB_BBT_MOTHER 0xA
#define SMB_BBT_PROCMEM 0xB
#define SMB_BBT_PROCIO 0xC
#define SMB_BBT_INTER 0xD
typedef struct smbios_chassis {
uint32_t smbc_oemdata;
uint8_t smbc_lock;
uint8_t smbc_type;
uint8_t smbc_bustate;
uint8_t smbc_psstate;
uint8_t smbc_thstate;
uint8_t smbc_security;
uint8_t smbc_uheight;
uint8_t smbc_cords;
uint8_t smbc_elems;
uint8_t smbc_elemlen;
const char *smbc_sku;
uint8_t smbc_rtype;
uint32_t smbc_rheight;
} smbios_chassis_t;
#define SMB_CHT_OTHER 0x01
#define SMB_CHT_UNKNOWN 0x02
#define SMB_CHT_DESKTOP 0x03
#define SMB_CHT_LPDESKTOP 0x04
#define SMB_CHT_PIZZA 0x05
#define SMB_CHT_MINITOWER 0x06
#define SMB_CHT_TOWER 0x07
#define SMB_CHT_PORTABLE 0x08
#define SMB_CHT_LAPTOP 0x09
#define SMB_CHT_NOTEBOOK 0x0A
#define SMB_CHT_HANDHELD 0x0B
#define SMB_CHT_DOCK 0x0C
#define SMB_CHT_ALLIN1 0x0D
#define SMB_CHT_SUBNOTE 0x0E
#define SMB_CHT_SPACESAVE 0x0F
#define SMB_CHT_LUNCHBOX 0x10
#define SMB_CHT_MAIN 0x11
#define SMB_CHT_EXPANSION 0x12
#define SMB_CHT_SUB 0x13
#define SMB_CHT_BUS 0x14
#define SMB_CHT_PERIPHERAL 0x15
#define SMB_CHT_RAID 0x16
#define SMB_CHT_RACK 0x17
#define SMB_CHT_SEALED 0x18
#define SMB_CHT_MULTI 0x19
#define SMB_CHT_CPCI 0x1A
#define SMB_CHT_ATCA 0x1B
#define SMB_CHT_BLADE 0x1C
#define SMB_CHT_BLADEENC 0x1D
#define SMB_CHT_TABLET 0x1E
#define SMB_CHT_CONVERTIBLE 0x1F
#define SMB_CHT_DETACHABLE 0x20
#define SMB_CHT_IOTGW 0x21
#define SMB_CHT_EMBEDPC 0x22
#define SMB_CHT_MINIPC 0x23
#define SMB_CHT_STICKPC 0x24
#define SMB_CHST_OTHER 0x01
#define SMB_CHST_UNKNOWN 0x02
#define SMB_CHST_SAFE 0x03
#define SMB_CHST_WARNING 0x04
#define SMB_CHST_CRITICAL 0x05
#define SMB_CHST_NONREC 0x06
#define SMB_CHSC_OTHER 0x01
#define SMB_CHSC_UNKNOWN 0x02
#define SMB_CHSC_NONE 0x03
#define SMB_CHSC_EILOCK 0x04
#define SMB_CHSC_EIENAB 0x05
#define SMB_CRT_OU 0x01
typedef struct smbios_chassis_entry {
uint8_t smbce_type;
uint8_t smbce_elt;
uint8_t smbce_min;
uint8_t smbce_max;
} smbios_chassis_entry_t;
#define SMB_CELT_BBOARD 0
#define SMB_CELT_SMBIOS 1
typedef struct smbios_processor {
uint64_t smbp_cpuid;
uint32_t smbp_family;
uint8_t smbp_type;
uint8_t smbp_voltage;
uint8_t smbp_status;
uint8_t smbp_upgrade;
uint32_t smbp_clkspeed;
uint32_t smbp_maxspeed;
uint32_t smbp_curspeed;
id_t smbp_l1cache;
id_t smbp_l2cache;
id_t smbp_l3cache;
uint32_t smbp_corecount;
uint32_t smbp_coresenabled;
uint32_t smbp_threadcount;
uint16_t smbp_cflags;
uint32_t smbp_threadsenabled;
const char *smbp_socktype;
} smbios_processor_t;
#define SMB_PRT_OTHER 0x01
#define SMB_PRT_UNKNOWN 0x02
#define SMB_PRT_CENTRAL 0x03
#define SMB_PRT_MATH 0x04
#define SMB_PRT_DSP 0x05
#define SMB_PRT_VIDEO 0x06
#define SMB_PRV_LEGACY(v) (!((v) & 0x80))
#define SMB_PRV_FIXED(v) ((v) & 0x80)
#define SMB_PRV_5V 0x01
#define SMB_PRV_33V 0x02
#define SMB_PRV_29V 0x04
#define SMB_PRV_VOLTAGE(v) ((v) & 0x7f)
#define SMB_PRSTATUS_PRESENT(s) ((s) & 0x40)
#define SMB_PRSTATUS_STATUS(s) ((s) & 0x07)
#define SMB_PRS_UNKNOWN 0x0
#define SMB_PRS_ENABLED 0x1
#define SMB_PRS_BDISABLED 0x2
#define SMB_PRS_PDISABLED 0x3
#define SMB_PRS_IDLE 0x4
#define SMB_PRS_OTHER 0x7
#define SMB_PRU_OTHER 0x01
#define SMB_PRU_UNKNOWN 0x02
#define SMB_PRU_DAUGHTER 0x03
#define SMB_PRU_ZIF 0x04
#define SMB_PRU_PIGGY 0x05
#define SMB_PRU_NONE 0x06
#define SMB_PRU_LIF 0x07
#define SMB_PRU_SLOT1 0x08
#define SMB_PRU_SLOT2 0x09
#define SMB_PRU_370PIN 0x0A
#define SMB_PRU_SLOTA 0x0B
#define SMB_PRU_SLOTM 0x0C
#define SMB_PRU_423 0x0D
#define SMB_PRU_A 0x0E
#define SMB_PRU_478 0x0F
#define SMB_PRU_754 0x10
#define SMB_PRU_940 0x11
#define SMB_PRU_939 0x12
#define SMB_PRU_MPGA604 0x13
#define SMB_PRU_LGA771 0x14
#define SMB_PRU_LGA775 0x15
#define SMB_PRU_S1 0x16
#define SMB_PRU_AM2 0x17
#define SMB_PRU_F 0x18
#define SMB_PRU_LGA1366 0x19
#define SMB_PRU_G34 0x1A
#define SMB_PRU_AM3 0x1B
#define SMB_PRU_C32 0x1C
#define SMB_PRU_LGA1156 0x1D
#define SMB_PRU_LGA1567 0x1E
#define SMB_PRU_PGA988A 0x1F
#define SMB_PRU_BGA1288 0x20
#define SMB_PRU_RPGA988B 0x21
#define SMB_PRU_BGA1023 0x22
#define SMB_PRU_BGA1224 0x23
#define SMB_PRU_LGA1155 0x24
#define SMB_PRU_LGA1356 0x25
#define SMB_PRU_LGA2011 0x26
#define SMB_PRU_FS1 0x27
#define SMB_PRU_FS2 0x28
#define SMB_PRU_FM1 0x29
#define SMB_PRU_FM2 0x2A
#define SMB_PRU_LGA20113 0x2B
#define SMB_PRU_LGA13563 0x2C
#define SMB_PRU_LGA1150 0x2D
#define SMB_PRU_BGA1168 0x2E
#define SMB_PRU_BGA1234 0x2F
#define SMB_PRU_BGA1364 0x30
#define SMB_PRU_AM4 0x31
#define SMB_PRU_LGA1151 0x32
#define SMB_PRU_BGA1356 0x33
#define SMB_PRU_BGA1440 0x34
#define SMB_PRU_BGA1515 0x35
#define SMB_PRU_LGA36471 0x36
#define SMB_PRU_SP3 0x37
#define SMB_PRU_SP3r2 0x38
#define SMB_PRU_LGA2066 0x39
#define SMB_PRU_BGA1392 0x3A
#define SMB_PRU_BGA1510 0x3B
#define SMB_PRU_BGA1528 0x3C
#define SMB_PRU_LGA4189 0x3D
#define SMB_PRU_LGA1200 0x3E
#define SMB_PRU_LGA4677 0x3F
#define SMB_PRU_LGA1700 0x40
#define SMB_PRU_BGA1744 0x41
#define SMB_PRU_BGA1781 0x42
#define SMB_PRU_BGA1211 0x43
#define SMB_PRU_BGA2422 0x44
#define SMB_PRU_LGA1211 0x45
#define SMB_PRU_LGA2422 0x46
#define SMB_PRU_LGA5773 0x47
#define SMB_PRU_BGA5773 0x48
#define SMB_PRU_AM5 0x49
#define SMB_PRU_SP5 0x4A
#define SMB_PRU_SP6 0x4B
#define SMB_PRU_BGA883 0x4C
#define SMB_PRU_BGA1190 0x4D
#define SMB_PRU_BGA4129 0x4E
#define SMB_PRU_LGA4710 0x4F
#define SMB_PRU_LGA7529 0x50
#define SMB_PRU_BGA1964 0x51
#define SMB_PRU_BGA1792 0x52
#define SMB_PRU_BGA2049 0x53
#define SMB_PRU_BGA2551 0x54
#define SMB_PRU_LGA1851 0x55
#define SMB_PRU_BGA2114 0x56
#define SMB_PRU_BGA2883 0x57
#define SMB_PRC_RESERVED 0x0001
#define SMB_PRC_UNKNOWN 0x0002
#define SMB_PRC_64BIT 0x0004
#define SMB_PRC_MC 0x0008
#define SMB_PRC_HT 0x0010
#define SMB_PRC_NX 0x0020
#define SMB_PRC_VT 0x0040
#define SMB_PRC_PM 0x0080
#define SMB_PRC_128BIT 0x0100
#define SMB_PRF_OTHER 0x01
#define SMB_PRF_UNKNOWN 0x02
#define SMB_PRF_8086 0x03
#define SMB_PRF_80286 0x04
#define SMB_PRF_I386 0x05
#define SMB_PRF_I486 0x06
#define SMB_PRF_8087 0x07
#define SMB_PRF_80287 0x08
#define SMB_PRF_80387 0x09
#define SMB_PRF_80487 0x0A
#define SMB_PRF_PENTIUM 0x0B
#define SMB_PRF_PENTIUMPRO 0x0C
#define SMB_PRF_PENTIUMII 0x0D
#define SMB_PRF_PENTIUM_MMX 0x0E
#define SMB_PRF_CELERON 0x0F
#define SMB_PRF_PENTIUMII_XEON 0x10
#define SMB_PRF_PENTIUMIII 0x11
#define SMB_PRF_M1 0x12
#define SMB_PRF_M2 0x13
#define SMB_PRF_CELERON_M 0x14
#define SMB_PRF_PENTIUMIV_HT 0x15
#define SMB_PRF_INTC_PROC 0x16
#define SMB_PRF_DURON 0x18
#define SMB_PRF_K5 0x19
#define SMB_PRF_K6 0x1A
#define SMB_PRF_K6_2 0x1B
#define SMB_PRF_K6_3 0x1C
#define SMB_PRF_ATHLON 0x1D
#define SMB_PRF_2900 0x1E
#define SMB_PRF_K6_2PLUS 0x1F
#define SMB_PRF_PPC 0x20
#define SMB_PRF_PPC_601 0x21
#define SMB_PRF_PPC_603 0x22
#define SMB_PRF_PPC_603PLUS 0x23
#define SMB_PRF_PPC_604 0x24
#define SMB_PRF_PPC_620 0x25
#define SMB_PRF_PPC_704 0x26
#define SMB_PRF_PPC_750 0x27
#define SMB_PRF_CORE_DUO 0x28
#define SMB_PRF_CORE_DUO_M 0x29
#define SMB_PRF_CORE_SOLO_M 0x2A
#define SMB_PRF_ATOM 0x2B
#define SMB_PRF_CORE_M 0x2C
#define SMB_PRF_CORE_M3 0x2D
#define SMB_PRF_CORE_M5 0x2E
#define SMB_PRF_CORE_M7 0x2F
#define SMB_PRF_ALPHA 0x30
#define SMB_PRF_ALPHA_21064 0x31
#define SMB_PRF_ALPHA_21066 0x32
#define SMB_PRF_ALPHA_21164 0x33
#define SMB_PRF_ALPHA_21164PC 0x34
#define SMB_PRF_ALPHA_21164A 0x35
#define SMB_PRF_ALPHA_21264 0x36
#define SMB_PRF_ALPHA_21364 0x37
#define SMB_PRF_TURION2U_2C_MM 0x38
#define SMB_PRF_TURION2_2C_MM 0x39
#define SMB_PRF_ATHLON2_2C_M 0x3A
#define SMB_PRF_OPTERON_6100 0x3B
#define SMB_PRF_OPTERON_4100 0x3C
#define SMB_PRF_OPTERON_6200 0x3D
#define SMB_PRF_OPTERON_4200 0x3E
#define SMB_PRF_AMD_FX 0x3F
#define SMB_PRF_MIPS 0x40
#define SMB_PRF_MIPS_R4000 0x41
#define SMB_PRF_MIPS_R4200 0x42
#define SMB_PRF_MIPS_R4400 0x43
#define SMB_PRF_MIPS_R4600 0x44
#define SMB_PRF_MIPS_R10000 0x45
#define SMB_PRF_AMD_C 0x46
#define SMB_PRF_AMD_E 0x47
#define SMB_PRF_AMD_A 0x48
#define SMB_PRF_AMD_G 0x49
#define SMB_PRF_AMD_Z 0x4A
#define SMB_PRF_AMD_R 0x4B
#define SMB_PRF_OPTERON_4300 0x4C
#define SMB_PRF_OPTERON_6300 0x4D
#define SMB_PRF_OPTERON_3300 0x4E
#define SMB_PRF_AMD_FIREPRO 0x4F
#define SMB_PRF_SPARC 0x50
#define SMB_PRF_SUPERSPARC 0x51
#define SMB_PRF_MICROSPARCII 0x52
#define SMB_PRF_MICROSPARCIIep 0x53
#define SMB_PRF_ULTRASPARC 0x54
#define SMB_PRF_USII 0x55
#define SMB_PRF_USIIi 0x56
#define SMB_PRF_USIII 0x57
#define SMB_PRF_USIIIi 0x58
#define SMB_PRF_68040 0x60
#define SMB_PRF_68XXX 0x61
#define SMB_PRF_68000 0x62
#define SMB_PRF_68010 0x63
#define SMB_PRF_68020 0x64
#define SMB_PRF_68030 0x65
#define SMB_PRF_ATHLON_X4 0x66
#define SMB_PRF_OPTERON_X1K 0x67
#define SMB_PRF_OPTERON_X2K 0x68
#define SMB_PRF_OPTERON_A 0x69
#define SMB_PRF_OPTERON_X3K 0x6A
#define SMB_PRF_ZEN 0x6B
#define SMB_PRF_HOBBIT 0x70
#define SMB_PRF_TM5000 0x78
#define SMB_PRF_TM3000 0x79
#define SMB_PRF_TM8000 0x7A
#define SMB_PRF_WEITEK 0x80
#define SMB_PRF_ITANIC 0x82
#define SMB_PRF_ATHLON64 0x83
#define SMB_PRF_OPTERON 0x84
#define SMB_PRF_SEMPRON 0x85
#define SMB_PRF_TURION64_M 0x86
#define SMB_PRF_OPTERON_2C 0x87
#define SMB_PRF_ATHLON64_X2_2C 0x88
#define SMB_PRF_TURION64_X2_M 0x89
#define SMB_PRF_OPTERON_4C 0x8A
#define SMB_PRF_OPTERON_3G 0x8B
#define SMB_PRF_PHENOM_FX_4C 0x8C
#define SMB_PRF_PHENOM_X4_4C 0x8D
#define SMB_PRF_PHENOM_X2_2C 0x8E
#define SMB_PRF_ATHLON_X2_2C 0x8F
#define SMB_PRF_PA 0x90
#define SMB_PRF_PA8500 0x91
#define SMB_PRF_PA8000 0x92
#define SMB_PRF_PA7300LC 0x93
#define SMB_PRF_PA7200 0x94
#define SMB_PRF_PA7100LC 0x95
#define SMB_PRF_PA7100 0x96
#define SMB_PRF_V30 0xA0
#define SMB_PRF_XEON_4C_3200 0xA1
#define SMB_PRF_XEON_2C_3000 0xA2
#define SMB_PRF_XEON_4C_5300 0xA3
#define SMB_PRF_XEON_2C_5100 0xA4
#define SMB_PRF_XEON_2C_5000 0xA5
#define SMB_PRF_XEON_2C_LV 0xA6
#define SMB_PRF_XEON_2C_ULV 0xA7
#define SMB_PRF_XEON_2C_7100 0xA8
#define SMB_PRF_XEON_4C_5400 0xA9
#define SMB_PRF_XEON_4C 0xAA
#define SMB_PRF_XEON_2C_5200 0xAB
#define SMB_PRF_XEON_2C_7200 0xAC
#define SMB_PRF_XEON_4C_7300 0xAD
#define SMB_PRF_XEON_4C_7400 0xAE
#define SMB_PRF_XEON_XC_7400 0xAF
#define SMB_PRF_PENTIUMIII_XEON 0xB0
#define SMB_PRF_PENTIUMIII_SS 0xB1
#define SMB_PRF_P4 0xB2
#define SMB_PRF_XEON 0xB3
#define SMB_PRF_AS400 0xB4
#define SMB_PRF_XEON_MP 0xB5
#define SMB_PRF_ATHLON_XP 0xB6
#define SMB_PRF_ATHLON_MP 0xB7
#define SMB_PRF_ITANIC2 0xB8
#define SMB_PRF_PENTIUM_M 0xB9
#define SMB_PRF_CELERON_D 0xBA
#define SMB_PRF_PENTIUM_D 0xBB
#define SMB_PRF_PENTIUM_EE 0xBC
#define SMB_PRF_CORE_SOLO 0xBD
#define SMB_PRF_CORE2_DUO 0xBF
#define SMB_PRF_CORE2_SOLO 0xC0
#define SMB_PRF_CORE2_EX 0xC1
#define SMB_PRF_CORE2_QUAD 0xC2
#define SMB_PRF_CORE2_EX_M 0xC3
#define SMB_PRF_CORE2_DUO_M 0xC4
#define SMB_PRF_CORE2_SOLO_M 0xC5
#define SMB_PRF_CORE_I7 0xC6
#define SMB_PRF_CELERON_2C 0xC7
#define SMB_PRF_IBM390 0xC8
#define SMB_PRF_G4 0xC9
#define SMB_PRF_G5 0xCA
#define SMB_PRF_ESA390 0xCB
#define SMB_PRF_ZARCH 0xCC
#define SMB_PRF_CORE_I5 0xCD
#define SMB_PRF_CORE_I3 0xCE
#define SMB_PRF_CORE_I9 0xCF
#define SMD_PRF_XEON_D 0xD0
#define SMB_PRF_C7M 0xD2
#define SMB_PRF_C7D 0xD3
#define SMB_PRF_C7 0xD4
#define SMB_PRF_EDEN 0xD5
#define SMB_PRF_XEON_XC 0xD6
#define SMB_PRF_XEON_2C_3XXX 0xD7
#define SMB_PRF_XEON_4C_3XXX 0xD8
#define SMB_PRF_VIA_NANO 0xD9
#define SMB_PRF_XEON_2C_5XXX 0xDA
#define SMB_PRF_XEON_4C_5XXX 0xDB
#define SMB_PRF_XEON_2C_7XXX 0xDD
#define SMB_PRF_XEON_4C_7XXX 0xDE
#define SMB_PRF_XEON_XC_7XXX 0xDF
#define SMB_PRF_XEON_XC_3400 0xE0
#define SMB_PRF_OPTERON_3000 0xE4
#define SMB_PRF_SEMPRON_II 0xE5
#define SMB_PRF_OPTERON_4C_EM 0xE6
#define SMB_PRF_PHENOM_3C 0xE7
#define SMB_PRF_TURIONU_2C_M 0xE8
#define SMB_PRF_TURION_2C_M 0xE9
#define SMB_PRF_ATHLON_2C 0xEA
#define SMB_PRF_SEMPRON_SI 0xEB
#define SMB_PRF_PHENOM_II 0xEC
#define SMB_PRF_ATHLON_II 0xED
#define SMB_PRF_OPTERON_6C 0xEE
#define SMB_PRF_SEMPRON_M 0xEF
#define SMB_PRF_I860 0xFA
#define SMB_PRF_I960 0xFB
#define SMB_PRF_ARMv7 0x100
#define SMB_PRF_ARMv8 0x101
#define SMB_PRF_ARMv9 0x102
#define SMB_PRF_SH3 0x104
#define SMB_PRF_SH4 0x105
#define SMB_PRF_ARM 0x118
#define SMB_PRF_SARM 0x119
#define SMB_PRF_6X86 0x12C
#define SMB_PRF_MEDIAGX 0x12D
#define SMB_PRF_MII 0x12E
#define SMB_PRF_WINCHIP 0x140
#define SMB_PRF_DSP 0x15E
#define SMB_PRF_VIDEO 0x1F4
#define SMB_PRF_RV32 0x200
#define SMB_PRF_RV64 0x201
#define SMB_PRF_RV128 0x202
#define SMG_PRF_LOONG_ARCH 0x258
#define SMG_PRF_LOONG_1 0x259
#define SMG_PRF_LOONG_2 0x25A
#define SMG_PRF_LOONG_3 0x25B
#define SMG_PRF_LOONG_2K 0x25C
#define SMG_PRF_LOONG_3A 0x25D
#define SMG_PRF_LOONG_3B 0x25E
#define SMG_PRF_LOONG_3C 0x25F
#define SMG_PRF_LOONG_3D 0x260
#define SMG_PRF_LOONG_E3 0x261
#define SMG_PRF_LOONG_2K_DC 0x262
#define SMG_PRF_LOONG_3A_QC 0x26C
#define SMG_PRF_LOONG_3A_MC 0x26D
#define SMG_PRF_LOONG_3B_QC 0x26E
#define SMG_PRF_LOONG_3B_MC 0x26F
#define SMG_PRF_LOONG_3C_MC 0x270
#define SMG_PRF_LOONG_3D_MC 0x271
#define SMG_PRF_CORE_3 0x300
#define SMG_PRF_CORE_5 0x301
#define SMG_PRF_CORE_7 0x302
#define SMG_PRF_CORE_9 0x303
#define SMG_PRF_CORE_ULT_3 0x304
#define SMG_PRF_CORE_ULT_5 0x305
#define SMG_PRF_CORE_ULT_7 0x306
#define SMG_PRF_CORE_ULT_9 0x307
typedef struct smbios_cache {
uint32_t smba_maxsize;
uint32_t smba_size;
uint16_t smba_stype;
uint16_t smba_ctype;
uint8_t smba_speed;
uint8_t smba_etype;
uint8_t smba_ltype;
uint8_t smba_assoc;
uint8_t smba_level;
uint8_t smba_mode;
uint8_t smba_location;
uint8_t smba_flags;
uint64_t smba_maxsize2;
uint64_t smba_size2;
} smbios_cache_t;
#define SMB_CAT_OTHER 0x0001
#define SMB_CAT_UNKNOWN 0x0002
#define SMB_CAT_NONBURST 0x0004
#define SMB_CAT_BURST 0x0008
#define SMB_CAT_PBURST 0x0010
#define SMB_CAT_SYNC 0x0020
#define SMB_CAT_ASYNC 0x0040
#define SMB_CAE_OTHER 0x01
#define SMB_CAE_UNKNOWN 0x02
#define SMB_CAE_NONE 0x03
#define SMB_CAE_PARITY 0x04
#define SMB_CAE_SBECC 0x05
#define SMB_CAE_MBECC 0x06
#define SMB_CAG_OTHER 0x01
#define SMB_CAG_UNKNOWN 0x02
#define SMB_CAG_INSTR 0x03
#define SMB_CAG_DATA 0x04
#define SMB_CAG_UNIFIED 0x05
#define SMB_CAA_OTHER 0x01
#define SMB_CAA_UNKNOWN 0x02
#define SMB_CAA_DIRECT 0x03
#define SMB_CAA_2WAY 0x04
#define SMB_CAA_4WAY 0x05
#define SMB_CAA_FULL 0x06
#define SMB_CAA_8WAY 0x07
#define SMB_CAA_16WAY 0x08
#define SMB_CAA_12WAY 0x09
#define SMB_CAA_24WAY 0x0A
#define SMB_CAA_32WAY 0x0B
#define SMB_CAA_48WAY 0x0C
#define SMB_CAA_64WAY 0x0D
#define SMB_CAA_20WAY 0x0E
#define SMB_CAM_WT 0x00
#define SMB_CAM_WB 0x01
#define SMB_CAM_VARY 0x02
#define SMB_CAM_UNKNOWN 0x03
#define SMB_CAL_INTERNAL 0x00
#define SMB_CAL_EXTERNAL 0x01
#define SMB_CAL_RESERVED 0x02
#define SMB_CAL_UNKNOWN 0x03
#define SMB_CAF_ENABLED 0x01
#define SMB_CAF_SOCKETED 0x02
typedef struct smbios_port {
const char *smbo_iref;
const char *smbo_eref;
uint8_t smbo_itype;
uint8_t smbo_etype;
uint8_t smbo_ptype;
uint8_t smbo_pad;
} smbios_port_t;
#define SMB_POC_NONE 0x00
#define SMB_POC_CENT 0x01
#define SMB_POC_MINICENT 0x02
#define SMB_POC_PROPRIETARY 0x03
#define SMB_POC_DB25M 0x04
#define SMB_POC_DB25F 0x05
#define SMB_POC_DB15M 0x06
#define SMB_POC_DB15F 0x07
#define SMB_POC_DB9M 0x08
#define SMB_POC_DB9F 0x09
#define SMB_POC_RJ11 0x0A
#define SMB_POC_RJ45 0x0B
#define SMB_POC_MINISCSI 0x0C
#define SMB_POC_MINIDIN 0x0D
#define SMB_POC_MICRODIN 0x0E
#define SMB_POC_PS2 0x0F
#define SMB_POC_IR 0x10
#define SMB_POC_HPHIL 0x11
#define SMB_POC_USB 0x12
#define SMB_POC_SSA 0x13
#define SMB_POC_DIN8M 0x14
#define SMB_POC_DIN8F 0x15
#define SMB_POC_OBIDE 0x16
#define SMB_POC_OBFLOPPY 0x17
#define SMB_POC_DI9 0x18
#define SMB_POC_DI25 0x19
#define SMB_POC_DI50 0x1A
#define SMB_POC_DI68 0x1B
#define SMB_POC_CDROM 0x1C
#define SMB_POC_MINI14 0x1D
#define SMB_POC_MINI26 0x1E
#define SMB_POC_MINIJACK 0x1F
#define SMB_POC_BNC 0x20
#define SMB_POC_1394 0x21
#define SMB_POC_SATA 0x22
#define SMB_POC_USB_C 0x23
#define SMB_POC_PC98 0xA0
#define SMB_POC_PC98HR 0xA1
#define SMB_POC_PCH98 0xA2
#define SMB_POC_PC98NOTE 0xA3
#define SMB_POC_PC98FULL 0xA4
#define SMB_POC_OTHER 0xFF
#define SMB_POT_NONE 0x00
#define SMB_POT_PP_XTAT 0x01
#define SMB_POT_PP_PS2 0x02
#define SMB_POT_PP_ECP 0x03
#define SMB_POT_PP_EPP 0x04
#define SMB_POT_PP_ECPEPP 0x05
#define SMB_POT_SP_XTAT 0x06
#define SMB_POT_SP_16450 0x07
#define SMB_POT_SP_16550 0x08
#define SMB_POT_SP_16550A 0x09
#define SMB_POT_SCSI 0x0A
#define SMB_POT_MIDI 0x0B
#define SMB_POT_JOYSTICK 0x0C
#define SMB_POT_KEYBOARD 0x0D
#define SMB_POT_MOUSE 0x0E
#define SMB_POT_SSA 0x0F
#define SMB_POT_USB 0x10
#define SMB_POT_FIREWIRE 0x11
#define SMB_POT_PCMII 0x12
#define SMB_POT_PCMIIa 0x13
#define SMB_POT_PCMIII 0x14
#define SMB_POT_CARDBUS 0x15
#define SMB_POT_ACCESS 0x16
#define SMB_POT_SCSI2 0x17
#define SMB_POT_SCSIW 0x18
#define SMB_POT_PC98 0x19
#define SMB_POT_PC98HR 0x1A
#define SMB_POT_PCH98 0x1B
#define SMB_POT_VIDEO 0x1C
#define SMB_POT_AUDIO 0x1D
#define SMB_POT_MODEM 0x1E
#define SMB_POT_NETWORK 0x1F
#define SMB_POT_SATA 0x20
#define SMB_POT_SAS 0x21
#define SMB_POT_MFDP 0x22
#define SMB_POT_THUNDERBOLT 0x23
#define SMB_POT_8251 0xA0
#define SMB_POT_8251F 0xA1
#define SMB_POT_OTHER 0xFF
typedef struct smbios_slot {
const char *smbl_name;
uint8_t smbl_type;
uint8_t smbl_width;
uint8_t smbl_usage;
uint8_t smbl_length;
uint16_t smbl_id;
uint8_t smbl_ch1;
uint8_t smbl_ch2;
uint16_t smbl_sg;
uint8_t smbl_bus;
uint8_t smbl_df;
uint8_t smbl_dbw;
uint8_t smbl_npeers;
uint8_t smbl_info;
uint8_t smbl_pwidth;
uint32_t smbl_pitch;
uint8_t smbl_height;
} smbios_slot_t;
#define SMB_SLT_OTHER 0x01
#define SMB_SLT_UNKNOWN 0x02
#define SMB_SLT_ISA 0x03
#define SMB_SLT_MCA 0x04
#define SMB_SLT_EISA 0x05
#define SMB_SLT_PCI 0x06
#define SMB_SLT_PCMCIA 0x07
#define SMB_SLT_VLVESA 0x08
#define SMB_SLT_PROPRIETARY 0x09
#define SMB_SLT_PROC 0x0A
#define SMB_SLT_MEM 0x0B
#define SMB_SLT_IOR 0x0C
#define SMB_SLT_NUBUS 0x0D
#define SMB_SLT_PCI66 0x0E
#define SMB_SLT_AGP 0x0F
#define SMB_SLT_AGP2X 0x10
#define SMB_SLT_AGP4X 0x11
#define SMB_SLT_PCIX 0x12
#define SMB_SLT_AGP8X 0x13
#define SMB_SLT_M2_1DP 0x14
#define SMB_SLT_M2_1SD 0x15
#define SMB_SLT_M2_2 0x16
#define SMB_SLT_M2_3 0x17
#define SMB_SLT_MXM_I 0x18
#define SMB_SLT_MXM_II 0x19
#define SMB_SLT_MXM_III 0x1A
#define SMB_SLT_MXM_III_HE 0x1B
#define SMB_SLT_MXM_V 0x1C
#define SMB_SLT_MXM3_A 0x1D
#define SMB_SLT_MXM3_B 0x1E
#define SMB_SLT_PCIEG2_SFF 0x1F
#define SMB_SLT_PCIEG3_SFF 0x20
#define SMB_SLT_PCIE_M52_WBSKO 0x21
#define SMB_SLT_PCIE_M52_WOBSKO 0x22
#define SMB_SLT_PCIE_M76 0x23
#define SMB_SLT_PCIEG4_SFF 0x24
#define SMB_SLT_PCIEG5_SFF 0x25
#define SMB_SLT_OCP3_SFF 0x26
#define SMB_SLT_OCP3_LFF 0x27
#define SMB_SLT_OCP_PRE 0x28
#define SMB_SLT_CXL1 0x30
#define SMB_SLT_PC98_C20 0xA0
#define SMB_SLT_PC98_C24 0xA1
#define SMB_SLT_PC98_E 0xA2
#define SMB_SLT_PC98_LB 0xA3
#define SMB_SLT_PC98_C 0xA4
#define SMB_SLT_PCIE 0xA5
#define SMB_SLT_PCIE1 0xA6
#define SMB_SLT_PCIE2 0xA7
#define SMB_SLT_PCIE4 0xA8
#define SMB_SLT_PCIE8 0xA9
#define SMB_SLT_PCIE16 0xAA
#define SMB_SLT_PCIE2G 0xAB
#define SMB_SLT_PCIE2G1 0xAC
#define SMB_SLT_PCIE2G2 0xAD
#define SMB_SLT_PCIE2G4 0xAE
#define SMB_SLT_PCIE2G8 0xAF
#define SMB_SLT_PCIE2G16 0xB0
#define SMB_SLT_PCIE3G 0xB1
#define SMB_SLT_PCIE3G1 0xB2
#define SMB_SLT_PCIE3G2 0xB3
#define SMB_SLT_PCIE3G4 0xB4
#define SMB_SLT_PCIE3G8 0xB5
#define SMB_SLT_PCIE3G16 0xB6
#define SMB_SLT_PCIE4G 0xB8
#define SMB_SLT_PCIE4G1 0xB9
#define SMB_SLT_PCIE4G2 0xBA
#define SMB_SLT_PCIE4G4 0xBB
#define SMB_SLT_PCIE4G8 0xBC
#define SMB_SLT_PCIE4G16 0xBD
#define SMB_SLT_PCIE5G 0xBE
#define SMB_SLT_PCIE5G1 0xBF
#define SMB_SLT_PCIE5G2 0xC0
#define SMB_SLT_PCIE5G4 0xC1
#define SMB_SLT_PCIE5G8 0xC2
#define SMB_SLT_PCIE5G16 0xC3
#define SMB_SLT_PCIEG6P 0xC4
#define SMB_SLT_EDSFF_E1 0xC5
#define SMB_SLT_EDSFF_E3 0xC6
#define SMB_SLW_OTHER 0x01
#define SMB_SLW_UNKNOWN 0x02
#define SMB_SLW_8 0x03
#define SMB_SLW_16 0x04
#define SMB_SLW_32 0x05
#define SMB_SLW_64 0x06
#define SMB_SLW_128 0x07
#define SMB_SLW_1X 0x08
#define SMB_SLW_2X 0x09
#define SMB_SLW_4X 0x0A
#define SMB_SLW_8X 0x0B
#define SMB_SLW_12X 0x0C
#define SMB_SLW_16X 0x0D
#define SMB_SLW_32X 0x0E
#define SMB_SLU_OTHER 0x01
#define SMB_SLU_UNKNOWN 0x02
#define SMB_SLU_AVAIL 0x03
#define SMB_SLU_INUSE 0x04
#define SMB_SLL_OTHER 0x01
#define SMB_SLL_UNKNOWN 0x02
#define SMB_SLL_SHORT 0x03
#define SMB_SLL_LONG 0x04
#define SMB_SLL_2IN5 0x05
#define SMB_SLL_3IN5 0x06
#define SMB_SLCH1_UNKNOWN 0x01
#define SMB_SLCH1_5V 0x02
#define SMB_SLCH1_33V 0x04
#define SMB_SLCH1_SHARED 0x08
#define SMB_SLCH1_PC16 0x10
#define SMB_SLCH1_PCCB 0x20
#define SMB_SLCH1_PCZV 0x40
#define SMB_SLCH1_PCMRR 0x80
#define SMB_SLCH2_PME 0x01
#define SMB_SLCH2_HOTPLUG 0x02
#define SMB_SLCH2_SMBUS 0x04
#define SMB_SLCH2_BIFUR 0x08
#define SMB_SLCH2_SURPREM 0x10
#define SMB_SLCH2_CXL1 0x20
#define SMB_SLCH2_CXL2 0x40
#define SMB_SLCH2_CXL3 0x80
#define SMB_SLHT_NA 0x00
#define SMB_SLHT_OTHER 0x01
#define SMB_SLHT_UNKNOWN 0x02
#define SMB_SLHT_FULL 0x03
#define SMB_SLHT_LP 0x04
typedef struct smbios_slot_peer {
uint16_t smblp_group;
uint8_t smblp_bus;
uint8_t smblp_device;
uint8_t smblp_function;
uint8_t smblp_data_width;
} smbios_slot_peer_t;
typedef struct smbios_obdev {
const char *smbd_name;
uint8_t smbd_type;
uint8_t smbd_enabled;
} smbios_obdev_t;
#define SMB_OBT_OTHER 0x01
#define SMB_OBT_UNKNOWN 0x02
#define SMB_OBT_VIDEO 0x03
#define SMB_OBT_SCSI 0x04
#define SMB_OBT_ETHERNET 0x05
#define SMB_OBT_TOKEN 0x06
#define SMB_OBT_SOUND 0x07
#define SMB_OBT_PATA 0x08
#define SMB_OBT_SATA 0x09
#define SMB_OBT_SAS 0x0A
typedef struct smbios_lang {
const char *smbla_cur;
uint_t smbla_fmt;
uint_t smbla_num;
} smbios_lang_t;
#define SMB_LFMT_LONG 0
#define SMB_LFMT_SHORT 1
typedef struct smbios_evtype {
uint8_t smbevt_ltype;
uint8_t smbevt_dtype;
} smbios_evtype_t;
typedef struct smbios_evlog {
size_t smbev_size;
size_t smbev_hdr;
size_t smbev_data;
uint8_t smbev_method;
uint8_t smbev_flags;
uint8_t smbev_format;
uint8_t smbev_pad;
uint32_t smbev_token;
union {
struct {
uint16_t evi_iaddr;
uint16_t evi_daddr;
} eva_io;
uint32_t eva_addr;
uint16_t eva_gpnv;
} smbev_addr;
uint32_t smbev_typec;
const smbios_evtype_t *smbev_typev;
} smbios_evlog_t;
#define SMB_EVM_1x1i_1x1d 0
#define SMB_EVM_2x1i_1x1d 1
#define SMB_EVM_1x2i_1x1d 2
#define SMB_EVM_MEM32 3
#define SMB_EVM_GPNV 4
#define SMB_EVFL_VALID 0x1
#define SMB_EVFL_FULL 0x2
#define SMB_EVHF_NONE 0
#define SMB_EVHF_F1 1
typedef struct smbios_memarray {
uint8_t smbma_location;
uint8_t smbma_use;
uint8_t smbma_ecc;
uint8_t smbma_pad0;
uint32_t smbma_pad1;
uint32_t smbma_ndevs;
id_t smbma_err;
uint64_t smbma_size;
} smbios_memarray_t;
#define SMB_MAL_OTHER 0x01
#define SMB_MAL_UNKNOWN 0x02
#define SMB_MAL_SYSMB 0x03
#define SMB_MAL_ISA 0x04
#define SMB_MAL_EISA 0x05
#define SMB_MAL_PCI 0x06
#define SMB_MAL_MCA 0x07
#define SMB_MAL_PCMCIA 0x08
#define SMB_MAL_PROP 0x09
#define SMB_MAL_NUBUS 0x0A
#define SMB_MAL_PC98C20 0xA0
#define SMB_MAL_PC98C24 0xA1
#define SMB_MAL_PC98E 0xA2
#define SMB_MAL_PC98LB 0xA3
#define SMB_MAL_CXL1 0xA4
#define SMB_MAU_OTHER 0x01
#define SMB_MAU_UNKNOWN 0x02
#define SMB_MAU_SYSTEM 0x03
#define SMB_MAU_VIDEO 0x04
#define SMB_MAU_FLASH 0x05
#define SMB_MAU_NVRAM 0x06
#define SMB_MAU_CACHE 0x07
#define SMB_MAE_OTHER 0x01
#define SMB_MAE_UNKNOWN 0x02
#define SMB_MAE_NONE 0x03
#define SMB_MAE_PARITY 0x04
#define SMB_MAE_SECC 0x05
#define SMB_MAE_MECC 0x06
#define SMB_MAE_CRC 0x07
typedef struct smbios_memdevice {
id_t smbmd_array;
id_t smbmd_error;
uint32_t smbmd_twidth;
uint32_t smbmd_dwidth;
uint64_t smbmd_size;
uint8_t smbmd_form;
uint8_t smbmd_set;
uint8_t smbmd_type;
uint8_t smbmd_pad;
uint32_t smbmd_flags;
uint32_t smbmd_speed;
const char *smbmd_dloc;
const char *smbmd_bloc;
uint8_t smbmd_rank;
uint16_t smbmd_clkspeed;
uint16_t smbmd_minvolt;
uint16_t smbmd_maxvolt;
uint16_t smbmd_confvolt;
uint8_t smbmd_memtech;
uint32_t smbmd_opcap_flags;
const char *smbmd_firmware_rev;
uint16_t smbmd_modmfg_id;
uint16_t smbmd_modprod_id;
uint16_t smbmd_cntrlmfg_id;
uint16_t smbmd_cntrlprod_id;
uint64_t smbmd_nvsize;
uint64_t smbmd_volatile_size;
uint64_t smbmd_cache_size;
uint64_t smbmd_logical_size;
uint64_t smbmd_extspeed;
uint64_t smbmd_extclkspeed;
uint16_t smbmd_pmic0_mfgid;
uint16_t smbmd_pmic0_rev;
uint16_t smbmd_rcd_mfgid;
uint16_t smbmd_rcd_rev;
} smbios_memdevice_t;
#define SMB_MD_MFG_UNKNOWN 0x0000
#define SMB_MD_REV_UNKNOWN 0xff00
#define SMB_MDFF_OTHER 0x01
#define SMB_MDFF_UNKNOWN 0x02
#define SMB_MDFF_SIMM 0x03
#define SMB_MDFF_SIP 0x04
#define SMB_MDFF_CHIP 0x05
#define SMB_MDFF_DIP 0x06
#define SMB_MDFF_ZIP 0x07
#define SMB_MDFF_PROP 0x08
#define SMB_MDFF_DIMM 0x09
#define SMB_MDFF_TSOP 0x0A
#define SMB_MDFF_CHIPROW 0x0B
#define SMB_MDFF_RIMM 0x0C
#define SMB_MDFF_SODIMM 0x0D
#define SMB_MDFF_SRIMM 0x0E
#define SMB_MDFF_FBDIMM 0x0F
#define SMB_MDFF_DIE 0x10
#define SMB_MDFF_CAMM 0x11
#define SMB_MDFF_CUDIMM 0x12
#define SMB_MDFF_CSODIMM 0x13
#define SMB_MDT_OTHER 0x01
#define SMB_MDT_UNKNOWN 0x02
#define SMB_MDT_DRAM 0x03
#define SMB_MDT_EDRAM 0x04
#define SMB_MDT_VRAM 0x05
#define SMB_MDT_SRAM 0x06
#define SMB_MDT_RAM 0x07
#define SMB_MDT_ROM 0x08
#define SMB_MDT_FLASH 0x09
#define SMB_MDT_EEPROM 0x0A
#define SMB_MDT_FEPROM 0x0B
#define SMB_MDT_EPROM 0x0C
#define SMB_MDT_CDRAM 0x0D
#define SMB_MDT_3DRAM 0x0E
#define SMB_MDT_SDRAM 0x0F
#define SMB_MDT_SGRAM 0x10
#define SMB_MDT_RDRAM 0x11
#define SMB_MDT_DDR 0x12
#define SMB_MDT_DDR2 0x13
#define SMB_MDT_DDR2FBDIMM 0x14
#define SMB_MDT_DDR3 0x18
#define SMB_MDT_FBD2 0x19
#define SMB_MDT_DDR4 0x1A
#define SMB_MDT_LPDDR 0x1B
#define SMB_MDT_LPDDR2 0x1C
#define SMB_MDT_LPDDR3 0x1D
#define SMB_MDT_LPDDR4 0x1E
#define SMB_MDT_LOGNV 0x1F
#define SMB_MDT_HBM 0x20
#define SMB_MDT_HBM2 0x21
#define SMB_MDT_DDR5 0x22
#define SMB_MDT_LPDDR5 0x23
#define SMB_MDT_HBM3 0x24
#define SMB_MDT_MRDIMM 0x25
#define SMB_MDF_OTHER 0x0002
#define SMB_MDF_UNKNOWN 0x0004
#define SMB_MDF_FASTPG 0x0008
#define SMB_MDF_STATIC 0x0010
#define SMB_MDF_PSTATIC 0x0020
#define SMB_MDF_RAMBUS 0x0040
#define SMB_MDF_SYNC 0x0080
#define SMB_MDF_CMOS 0x0100
#define SMB_MDF_EDO 0x0200
#define SMB_MDF_WDRAM 0x0400
#define SMB_MDF_CDRAM 0x0800
#define SMB_MDF_NV 0x1000
#define SMB_MDF_REG 0x2000
#define SMB_MDF_UNREG 0x4000
#define SMB_MDF_LRDIMM 0x8000
#define SMB_MDR_SINGLE 0x01
#define SMB_MDR_DUAL 0x02
#define SMB_MDR_QUAD 0x04
#define SMB_MDR_OCTAL 0x08
#define SMB_MTECH_OTHER 0x01
#define SMB_MTECH_UNKNOWN 0x02
#define SMB_MTECH_DRAM 0x03
#define SMB_MTECH_NVDIMM_N 0x04
#define SMB_MTECH_NVDIMM_F 0x05
#define SMB_MTECH_NVDIMM_P 0x06
#define SMB_MTECH_INTCPM 0x07
#define SMB_MOMC_RESERVED 0x01
#define SMB_MOMC_OTHER 0x02
#define SMB_MOMC_UNKNOWN 0x04
#define SMB_MOMC_VOLATILE 0x08
#define SMB_MOMC_BYTE_PM 0x10
#define SMB_MOMC_BLOCK_PM 0x20
typedef struct smbios_memarrmap {
id_t smbmam_array;
uint32_t smbmam_width;
uint64_t smbmam_addr;
uint64_t smbmam_size;
} smbios_memarrmap_t;
typedef struct smbios_memdevmap {
id_t smbmdm_device;
id_t smbmdm_arrmap;
uint64_t smbmdm_addr;
uint64_t smbmdm_size;
uint8_t smbmdm_rpos;
uint8_t smbmdm_ipos;
uint8_t smbmdm_idepth;
} smbios_memdevmap_t;
typedef struct smbios_pointdev {
uint16_t smbpd_type;
uint16_t smbpd_iface;
uint8_t smbpd_nbuttons;
} smbios_pointdev_t;
#define SMB_PDT_OTHER 0x01
#define SMB_PDT_UNKNOWN 0x02
#define SMB_PDT_MOUSE 0x03
#define SMB_PDT_TRBALL 0x04
#define SMB_PDT_TRPOINT 0x05
#define SMB_PDT_GLPOINT 0x06
#define SMB_PDT_TOPAD 0x07
#define SMB_PDT_TOSCREEN 0x08
#define SMB_PDT_OPTSENSE 0x09
#define SMB_PDI_OTHER 0x01
#define SMB_PDI_UNKNOWN 0x02
#define SMB_PDI_SERIAL 0x03
#define SMB_PDI_PS2 0x04
#define SMB_PDI_INFRARED 0x05
#define SMB_PDI_HPHIL 0x06
#define SMB_PDI_BUSM 0x07
#define SMB_PDI_ADB 0x08
#define SMB_PDI_BUSM_DB9 0xA0
#define SMB_PDI_BUSM_UDIN 0xA1
#define SMB_PDI_USB 0xA2
#define SMB_PDI_I2C 0xA3
#define SMB_PDI_SPI 0xA4
typedef struct smbios_battery {
const char *smbb_date;
const char *smbb_serial;
uint8_t smbb_chem;
uint32_t smbb_cap;
uint16_t smbb_volt;
const char *smbb_version;
uint8_t smbb_err;
uint16_t smbb_ssn;
uint16_t smbb_syear;
uint8_t smbb_smonth;
uint8_t smbb_sday;
const char *smbb_schem;
uint32_t smbb_oemdata;
} smbios_battery_t;
#define SMB_BDC_OTHER 0x01
#define SMB_BDC_UNKNOWN 0x02
#define SMB_BDC_LEADACID 0x03
#define SMB_BDC_NICD 0x04
#define SMB_BDC_NIMH 0x05
#define SMB_BDC_LIB 0x06
#define SMB_BDC_ZINCAIR 0x07
#define SMB_BDC_LIPO 0x08
typedef struct smbios_hwsec {
uint8_t smbh_pwr_ps;
uint8_t smbh_kbd_ps;
uint8_t smbh_adm_ps;
uint8_t smbh_pan_ps;
} smbios_hwsec_t;
#define SMB_HWSEC_PS_DISABLED 0x00
#define SMB_HWSEC_PS_ENABLED 0x01
#define SMB_HWSEC_PS_NOTIMPL 0x02
#define SMB_HWSEC_PS_UNKNOWN 0x03
#define SMB_PROBE_UNKNOWN_VALUE 0x8000
typedef struct smbios_vprobe {
const char *smbvp_description;
uint8_t smbvp_location;
uint8_t smbvp_status;
uint16_t smbvp_maxval;
uint16_t smbvp_minval;
uint16_t smbvp_resolution;
uint16_t smbvp_tolerance;
uint16_t smbvp_accuracy;
uint32_t smbvp_oem;
uint16_t smbvp_nominal;
} smbios_vprobe_t;
#define SMB_VPROBE_S_OTHER 0x01
#define SMB_VPROBE_S_UNKNOWN 0x02
#define SMB_VPROBE_S_OK 0x03
#define SMB_VPROBE_S_NONCRIT 0x04
#define SMB_VPROBE_S_CRIT 0x05
#define SMB_VPROBE_S_NONRECOV 0x06
#define SMB_VPROBE_L_OTHER 0x01
#define SMB_VPROBE_L_UNKNOWN 0x02
#define SMB_VPROBE_L_PROC 0x03
#define SMB_VPROBE_L_DISK 0x04
#define SMB_VPROBE_L_PBAY 0x05
#define SMB_VPROBE_L_MGMT 0x06
#define SMB_VPROBE_L_MOBO 0x07
#define SMB_VPROBE_L_MEMMOD 0x08
#define SMB_VPROBE_L_PROCMOD 0x09
#define SMB_VPROBE_L_POWER 0x0a
#define SMB_VPROBE_L_AIC 0x0b
typedef struct smbios_cooldev {
id_t smbcd_tprobe;
uint8_t smbcd_type;
uint8_t smbcd_status;
uint8_t smbcd_group;
uint32_t smbcd_oem;
uint16_t smbcd_nominal;
const char *smbcd_descr;
} smbios_cooldev_t;
#define SMB_COOLDEV_S_OTHER 0x01
#define SMB_COOLDEV_S_UNKNOWN 0x02
#define SMB_COOLDEV_S_OK 0x03
#define SMB_COOLDEV_S_NONCRIT 0x04
#define SMB_COOLDEV_S_CRIT 0x05
#define SMB_COOLDEV_S_NONRECOV 0x06
#define SMB_COOLDEV_T_OTHER 0x01
#define SMB_COOLDEV_T_UNKNOWN 0x02
#define SMB_COOLDEV_T_FAN 0x03
#define SMB_COOLDEV_T_BLOWER 0x04
#define SMB_COOLDEV_T_CHIPFAN 0x05
#define SMB_COOLDEV_T_CABFAN 0x06
#define SMB_COOLDEV_T_PSFAN 0x07
#define SMB_COOLDEV_T_HEATPIPE 0x08
#define SMB_COOLDEV_T_IREFRIG 0x09
#define SMB_COOLDEV_T_ACTCOOL 0x10
#define SMB_COOLDEV_T_PASSCOOL 0x11
typedef struct smbios_tprobe {
const char *smbtp_description;
uint8_t smbtp_location;
uint8_t smbtp_status;
uint16_t smbtp_maxval;
uint16_t smbtp_minval;
uint16_t smbtp_resolution;
uint16_t smbtp_tolerance;
uint16_t smbtp_accuracy;
uint32_t smbtp_oem;
uint16_t smbtp_nominal;
} smbios_tprobe_t;
#define SMB_TPROBE_S_OTHER 0x01
#define SMB_TPROBE_S_UNKNOWN 0x02
#define SMB_TPROBE_S_OK 0x03
#define SMB_TPROBE_S_NONCRIT 0x04
#define SMB_TPROBE_S_CRIT 0x05
#define SMB_TPROBE_S_NONRECOV 0x06
#define SMB_TPROBE_L_OTHER 0x01
#define SMB_TPROBE_L_UNKNOWN 0x02
#define SMB_TPROBE_L_PROC 0x03
#define SMB_TPROBE_L_DISK 0x04
#define SMB_TPROBE_L_PBAY 0x05
#define SMB_TPROBE_L_MGMT 0x06
#define SMB_TPROBE_L_MOBO 0x07
#define SMB_TPROBE_L_MEMMOD 0x08
#define SMB_TPROBE_L_PROCMOD 0x09
#define SMB_TPROBE_L_POWER 0x0a
#define SMB_TPROBE_L_AIC 0x0b
#define SMB_TPROBE_L_FPBOARD 0x0c
#define SMB_TPROBE_L_BPBOARD 0x0d
#define SMB_TPROBE_L_PSBOARD 0x0e
#define SMB_TPROBE_L_DBPANE 0x0f
typedef struct smbios_iprobe {
const char *smbip_description;
uint8_t smbip_location;
uint8_t smbip_status;
uint16_t smbip_maxval;
uint16_t smbip_minval;
uint16_t smbip_resolution;
uint16_t smbip_tolerance;
uint16_t smbip_accuracy;
uint32_t smbip_oem;
uint16_t smbip_nominal;
} smbios_iprobe_t;
#define SMB_IPROBE_S_OTHER 0x01
#define SMB_IPROBE_S_UNKNOWN 0x02
#define SMB_IPROBE_S_OK 0x03
#define SMB_IPROBE_S_NONCRIT 0x04
#define SMB_IPROBE_S_CRIT 0x05
#define SMB_IPROBE_S_NONRECOV 0x06
#define SMB_IPROBE_L_OTHER 0x01
#define SMB_IPROBE_L_UNKNOWN 0x02
#define SMB_IPROBE_L_PROC 0x03
#define SMB_IPROBE_L_DISK 0x04
#define SMB_IPROBE_L_PBAY 0x05
#define SMB_IPROBE_L_MGMT 0x06
#define SMB_IPROBE_L_MOBO 0x07
#define SMB_IPROBE_L_MEMMOD 0x08
#define SMB_IPROBE_L_PROCMOD 0x09
#define SMB_IPROBE_L_POWER 0x0a
#define SMB_IPROBE_L_AIC 0x0b
typedef struct smbios_boot {
uint8_t smbt_status;
const void *smbt_data;
size_t smbt_size;
} smbios_boot_t;
#define SMB_BOOT_NORMAL 0
#define SMB_BOOT_NOMEDIA 1
#define SMB_BOOT_OSFAIL 2
#define SMB_BOOT_FWHWFAIL 3
#define SMB_BOOT_OSHWFAIL 4
#define SMB_BOOT_USERREQ 5
#define SMB_BOOT_SECURITY 6
#define SMB_BOOT_PREVREQ 7
#define SMB_BOOT_WATCHDOG 8
#define SMB_BOOT_RESV_LO 9
#define SMB_BOOT_RESV_HI 127
#define SMB_BOOT_OEM_LO 128
#define SMB_BOOT_OEM_HI 191
#define SMB_BOOT_PROD_LO 192
#define SMB_BOOT_PROD_HI 255
typedef struct smbios_mgmtdev {
const char *smbmd_desc;
uint16_t smbmd_dtype;
uint16_t smbmd_atype;
uint32_t smbmd_addr;
} smbios_mgmtdev_t;
#define SMB_MGMTDEV_DT_OTHER 0x1
#define SMB_MGMTDEV_DT_UNKNOWN 0x2
#define SMB_MGMTDEV_DT_LM75 0x3
#define SMB_MGMTDEV_DT_LM78 0x4
#define SMB_MGMTDEV_DT_LM79 0x5
#define SMB_MGMTDEV_DT_LM80 0x6
#define SMB_MGMTDEV_DT_LM81 0x7
#define SMB_MGMTDEV_DT_ADM9240 0x8
#define SMB_MGMTDEV_DT_DS1780 0x9
#define SMB_MGMTDEV_DT_MAX1617 0xa
#define SMB_MGMTDEV_DT_GL518SM 0xb
#define SMB_MGMTDEV_DT_W83781D 0xc
#define SMB_MGMTDEV_DT_HT82H791 0xd
#define SMB_MGMTDEV_AT_OTHER 0x1
#define SMB_MGMTDEV_AT_UNKNOWN 0x2
#define SMB_MGMTDEV_AT_IO 0x3
#define SMB_MGMTDEV_AT_MEM 0x4
#define SMB_MGMTDEV_AT_SMBUS 0x5
typedef struct smbios_mgmtcomp {
const char *smbmc_desc;
id_t smbmc_mgmtdev;
id_t smbmc_comp;
id_t smbmc_thresh;
} smbios_mgmtcomp_t;
typedef struct smbios_ipmi {
uint_t smbip_type;
smbios_version_t smbip_vers;
uint32_t smbip_i2c;
uint32_t smbip_bus;
uint64_t smbip_addr;
uint32_t smbip_flags;
uint16_t smbip_intr;
uint16_t smbip_regspacing;
} smbios_ipmi_t;
#define SMB_IPMI_T_UNKNOWN 0x00
#define SMB_IPMI_T_KCS 0x01
#define SMB_IPMI_T_SMIC 0x02
#define SMB_IPMI_T_BT 0x03
#define SMB_IPMI_T_SSIF 0x04
#define SMB_IPMI_F_IOADDR 0x01
#define SMB_IPMI_F_INTRSPEC 0x02
#define SMB_IPMI_F_INTRHIGH 0x04
#define SMB_IPMI_F_INTREDGE 0x08
typedef struct smbios_powersup {
uint32_t smbps_group;
uint64_t smbps_maxout;
uint32_t smbps_flags;
uint8_t smbps_ivrs;
uint8_t smbps_status;
uint8_t smbps_pstype;
id_t smbps_vprobe;
id_t smbps_cooldev;
id_t smbps_iprobe;
} smbios_powersup_t;
#define SMB_POWERSUP_F_HOT 0x01
#define SMB_POWERSUP_F_PRESENT 0x02
#define SMB_POWERSUP_F_UNPLUG 0x04
#define SMB_POWERSUP_I_OTHER 0x01
#define SMB_POWERSUP_I_UNKNOWN 0x02
#define SMB_POWERSUP_I_MANUAL 0x03
#define SMB_POWERSUP_I_AUTO 0x04
#define SMB_POWERSUP_I_WIDE 0x05
#define SMB_POWERSUP_I_NA 0x06
#define SMB_POWERSUP_S_OTHER 0x01
#define SMB_POWERSUP_S_UNKNOWN 0x02
#define SMB_POWERSUP_S_OK 0x03
#define SMB_POWERSUP_S_NONCRIT 0x04
#define SMB_POWERSUP_S_CRIT 0x05
#define SMB_POWERSUP_T_OTHER 0x01
#define SMB_POWERSUP_T_UNKNOWN 0x02
#define SMB_POWERSUP_T_LINEAR 0x03
#define SMB_POWERSUP_T_SWITCH 0x04
#define SMB_POWERSUP_T_BAT 0x05
#define SMB_POWERSUP_T_UPS 0x06
#define SMB_POWERSUP_T_CONV 0x07
#define SMB_POWERSUP_T_REGL 0x08
typedef struct smbios_addinfo_ent {
id_t smbai_ref;
uint32_t smbai_ref_off;
const char *smbai_str;
uint32_t smbai_dlen;
void *smbai_data;
} smbios_addinfo_ent_t;
typedef struct smbios_obdev_ext {
const char *smboe_name;
uint8_t smboe_dtype;
uint8_t smboe_dti;
uint16_t smboe_sg;
uint8_t smboe_bus;
uint8_t smboe_df;
} smbios_obdev_ext_t;
#define SMB_OBET_OTHER 0x01
#define SMB_OBET_UNKNOWN 0x02
#define SMB_OBET_VIDEO 0x03
#define SMB_OBET_SCSI 0x04
#define SMB_OBET_ETHERNET 0x05
#define SMB_OBET_TOKEN 0x06
#define SMB_OBET_SOUND 0x07
#define SMB_OBET_PATA 0x08
#define SMB_OBET_SATA 0x09
#define SMB_OBET_SAS 0x0A
#define SMB_OBET_WLAN 0x0B
#define SMB_OBET_BT 0x0C
#define SMB_OBET_WWAN 0x0D
#define SMB_OBET_EMMC 0x0E
#define SMB_OBET_NVME 0x0F
#define SMB_OBET_UFS 0x10
typedef struct smbios_tpm {
const char *smbtpm_desc;
uint8_t smbtpm_vid[4];
uint8_t smbtpm_major;
uint8_t smbtpm_minor;
uint32_t smbtpm_fwv1;
uint32_t smbtpm_fwv2;
uint64_t smbtpm_chars;
uint32_t smbtpm_oem;
} smbios_tpm_t;
#define SMB_TPMC_NODC (1 << 2)
#define SMB_TPMC_FWUPD (1 << 3)
#define SMB_TPMC_PLATSW (1 << 4)
#define SMB_TPMC_OEM (1 << 5)
typedef struct smbios_processor_info {
id_t smbpi_processor;
uint32_t smbpi_ptype;
} smbios_processor_info_t;
#define SMB_PROCINFO_T_RESERVED 0x00
#define SMB_PROCINFO_T_IA32 0x01
#define SMB_PROCINFO_T_AMD64 0x02
#define SMB_PROCINFO_T_IA 0x03
#define SMB_PROCINFO_T_AARCH32 0x04
#define SMB_PROCINFO_T_AARCH64 0x05
#define SMB_PROCINFO_T_RV32 0x06
#define SMB_PROCINFO_T_RV64 0x07
#define SMB_PROCINFO_T_RV128 0x08
#define SMB_PROCINFO_T_LA32 0x09
#define SMB_PROCINFO_T_LA64 0x0A
typedef struct smbios_processor_info_riscv {
uint8_t smbpirv_hartid[16];
uint8_t smbpirv_vendid[16];
uint8_t smbpirv_archid[16];
uint8_t smbpirv_machid[16];
uint8_t smbpirv_metdi[16];
uint8_t smbpirv_mitdi[16];
uint64_t smbpirv_isa;
uint32_t smbpirv_privlvl;
uint8_t smbpirv_boothart;
uint8_t smbpirv_xlen;
uint8_t smbpirv_mxlen;
uint8_t smbpirv_sxlen;
uint8_t smbpirv_uxlen;
} smbios_processor_info_riscv_t;
#define SMB_RV_PRIV_M (1 << 0)
#define SMB_RV_PRIV_S (1 << 2)
#define SMB_RV_PRIV_U (1 << 3)
#define SMB_RV_PRIV_DBG (1 << 7)
#define SMB_RV_WIDTH_UNSUP 0x00
#define SMB_RV_WIDTH_32B 0x01
#define SMB_RV_WIDTH_64B 0x02
#define SMB_RV_WIDTH_128B 0x03
#define SMB_RV_ISA_A (1 << 0)
#define SMB_RV_ISA_B (1 << 1)
#define SMB_RV_ISA_C (1 << 2)
#define SMB_RV_ISA_D (1 << 3)
#define SMB_RV_ISA_E (1 << 4)
#define SMB_RV_ISA_F (1 << 5)
#define SMB_RV_ISA_G (1 << 6)
#define SMB_RV_ISA_H (1 << 7)
#define SMB_RV_ISA_I (1 << 8)
#define SMB_RV_ISA_J (1 << 9)
#define SMB_RV_ISA_K (1 << 10)
#define SMB_RV_ISA_L (1 << 11)
#define SMB_RV_ISA_M (1 << 12)
#define SMB_RV_ISA_N (1 << 13)
#define SMB_RV_ISA_O (1 << 14)
#define SMB_RV_ISA_P (1 << 15)
#define SMB_RV_ISA_Q (1 << 16)
#define SMB_RV_ISA_R (1 << 17)
#define SMB_RV_ISA_S (1 << 18)
#define SMB_RV_ISA_T (1 << 19)
#define SMB_RV_ISA_U (1 << 20)
#define SMB_RV_ISA_V (1 << 21)
#define SMB_RV_ISA_W (1 << 22)
#define SMB_RV_ISA_X (1 << 23)
#define SMB_RV_ISA_Y (1 << 24)
#define SMB_RV_ISA_Z (1 << 25)
typedef struct smbios_fwinfo {
const char *smbfw_name;
const char *smbfw_id;
const char *smbfw_reldate;
const char *smbfw_lsv;
uint64_t smbfw_imgsz;
uint16_t smbfw_chars;
uint16_t smbfw_state;
uint16_t smbfw_ncomps;
uint8_t smbfw_vers_fmt;
uint8_t smbfw_id_fmt;
} smbios_fwinfo_t;
typedef struct smbios_fwinfo_comp {
id_t smbfwe_id;
} smbios_fwinfo_comp_t;
#define SMB_FWV_FF 0x00
#define SMB_FWV_MM 0x01
#define SMB_FWV_HEX32 0x02
#define SMB_FWV_HEX64 0x03
#define SMB_FWI_FF 0x00
#define SMB_FWI_UEFI 0x01
#define SMB_FWC_UPDATE 0x01
#define SMB_FWC_WP 0x02
#define SMB_FWS_OTHER 0x01
#define SMB_FWS_UNKNOWN 0x02
#define SMB_FWS_DISABLED 0x03
#define SMB_FWS_ENABLED 0x04
#define SMB_FWS_ABSENT 0x05
#define SMB_FWS_STB_OFFLINE 0x06
#define SMB_FWS_STB_SPARE 0x07
#define SMB_FWS_UA_OFFLINE 0x08
typedef struct smbios_strprop {
uint32_t smbsp_prop_id;
const char *smbsp_prop_val;
id_t smbsp_parent;
} smbios_strprop_t;
#define SMB_STRP_RESERVED 0x00
#define SMB_STRP_UEFI_DEVPATH 0x01
typedef struct smbios_processor_ext {
uint16_t smbpe_processor;
uint8_t smbpe_fru;
uint8_t smbpe_n;
uint16_t *smbpe_apicid;
} smbios_processor_ext_t;
typedef struct smbios_port_ext {
uint16_t smbporte_chassis;
uint16_t smbporte_port;
uint8_t smbporte_dtype;
uint16_t smbporte_devhdl;
uint8_t smbporte_phy;
} smbios_port_ext_t;
typedef struct smbios_pciexrc {
uint16_t smbpcie_bb;
uint16_t smbpcie_bdf;
} smbios_pciexrc_t;
typedef struct smbios_memarray_ext {
uint16_t smbmae_ma;
uint16_t smbmae_comp;
uint16_t smbmae_bdf;
} smbios_memarray_ext_t;
typedef struct smbios_memdevice_ext {
uint16_t smbmdeve_md;
uint8_t smbmdeve_drch;
uint8_t smbmdeve_ncs;
} smbios_memdevice_ext_t;
#define SMB_VERSION_23 0x0203
#define SMB_VERSION_24 0x0204
#define SMB_VERSION_25 0x0205
#define SMB_VERSION_26 0x0206
#define SMB_VERSION_27 0x0207
#define SMB_VERSION_28 0x0208
#define SMB_VERSION_30 0x0300
#define SMB_VERSION_31 0x0301
#define SMB_VERSION_32 0x0302
#define SMB_VERSION_33 0x0303
#define SMB_VERSION_34 0x0304
#define SMB_VERSION_35 0x0305
#define SMB_VERSION_36 0x0306
#define SMB_VERSION_37 0x0307
#define SMB_VERSION_38 0x0308
#define SMB_VERSION_39 0x0309
#define SMB_VERSION SMB_VERSION_39
#define SMB_O_NOCKSUM 0x1
#define SMB_O_NOVERS 0x2
#define SMB_O_ZIDS 0x4
#define SMB_O_MASK 0x7
#define SMB_ID_NOTSUP 0xFFFE
#define SMB_ID_NONE 0xFFFF
#define SMB_ERR (-1)
typedef struct smbios_hdl smbios_hdl_t;
typedef struct smbios_struct {
id_t smbstr_id;
uint_t smbstr_type;
const void *smbstr_data;
size_t smbstr_size;
} smbios_struct_t;
typedef int smbios_struct_f(smbios_hdl_t *,
const smbios_struct_t *, void *);
extern smbios_hdl_t *smbios_open(const char *, int, int, int *);
extern smbios_hdl_t *smbios_fdopen(int, int, int, int *);
extern smbios_hdl_t *smbios_bufopen(const smbios_entry_t *,
const void *, size_t, int, int, int *);
extern const void *smbios_buf(smbios_hdl_t *);
extern size_t smbios_buflen(smbios_hdl_t *);
extern void smbios_checksum(smbios_hdl_t *, smbios_entry_t *);
extern int smbios_write(smbios_hdl_t *, int);
extern void smbios_close(smbios_hdl_t *);
extern boolean_t smbios_truncated(smbios_hdl_t *);
extern int smbios_errno(smbios_hdl_t *);
extern const char *smbios_errmsg(int);
extern int smbios_lookup_id(smbios_hdl_t *, id_t, smbios_struct_t *);
extern int smbios_lookup_type(smbios_hdl_t *, uint_t, smbios_struct_t *);
extern int smbios_iter(smbios_hdl_t *, smbios_struct_f *, void *);
extern smbios_entry_point_t smbios_info_smbios(smbios_hdl_t *,
smbios_entry_t *);
extern void smbios_info_smbios_version(smbios_hdl_t *, smbios_version_t *);
extern int smbios_info_common(smbios_hdl_t *, id_t, smbios_info_t *);
extern int smbios_info_contains(smbios_hdl_t *, id_t, uint_t, id_t *);
extern id_t smbios_info_bios(smbios_hdl_t *, smbios_bios_t *);
extern id_t smbios_info_system(smbios_hdl_t *, smbios_system_t *);
extern int smbios_info_bboard(smbios_hdl_t *, id_t, smbios_bboard_t *);
extern int smbios_info_chassis(smbios_hdl_t *, id_t, smbios_chassis_t *);
extern int smbios_info_chassis_elts(smbios_hdl_t *, id_t, uint_t *,
smbios_chassis_entry_t **);
extern void smbios_info_chassis_elts_free(smbios_hdl_t *, uint_t,
smbios_chassis_entry_t *);
extern int smbios_info_processor(smbios_hdl_t *, id_t, smbios_processor_t *);
extern int smbios_info_extprocessor(smbios_hdl_t *, id_t,
smbios_processor_ext_t *);
extern int smbios_info_cache(smbios_hdl_t *, id_t, smbios_cache_t *);
extern int smbios_info_pointdev(smbios_hdl_t *, id_t, smbios_pointdev_t *);
extern int smbios_info_battery(smbios_hdl_t *, id_t, smbios_battery_t *);
extern int smbios_info_port(smbios_hdl_t *, id_t, smbios_port_t *);
extern int smbios_info_extport(smbios_hdl_t *, id_t, smbios_port_ext_t *);
extern int smbios_info_slot(smbios_hdl_t *, id_t, smbios_slot_t *);
extern int smbios_info_slot_peers(smbios_hdl_t *, id_t, uint_t *,
smbios_slot_peer_t **);
extern void smbios_info_slot_peers_free(smbios_hdl_t *, uint_t,
smbios_slot_peer_t *);
extern int smbios_info_obdevs(smbios_hdl_t *, id_t, int, smbios_obdev_t *);
extern int smbios_info_obdevs_ext(smbios_hdl_t *, id_t, smbios_obdev_ext_t *);
extern int smbios_info_strtab(smbios_hdl_t *, id_t, int, const char *[]);
extern id_t smbios_info_lang(smbios_hdl_t *, smbios_lang_t *);
extern id_t smbios_info_eventlog(smbios_hdl_t *, smbios_evlog_t *);
extern int smbios_info_memarray(smbios_hdl_t *, id_t, smbios_memarray_t *);
extern int smbios_info_extmemarray(smbios_hdl_t *, id_t,
smbios_memarray_ext_t *);
extern int smbios_info_memarrmap(smbios_hdl_t *, id_t, smbios_memarrmap_t *);
extern int smbios_info_memdevice(smbios_hdl_t *, id_t, smbios_memdevice_t *);
extern int smbios_info_extmemdevice(smbios_hdl_t *, id_t,
smbios_memdevice_ext_t *);
extern int smbios_info_extmemdevice_cs(smbios_hdl_t *, id_t, uint_t *,
uint8_t **);
extern void smbios_info_extmemdevice_cs_free(smbios_hdl_t *, uint_t, uint8_t *);
extern int smbios_info_memdevmap(smbios_hdl_t *, id_t, smbios_memdevmap_t *);
extern id_t smbios_info_hwsec(smbios_hdl_t *, smbios_hwsec_t *);
extern int smbios_info_vprobe(smbios_hdl_t *, id_t, smbios_vprobe_t *);
extern int smbios_info_cooldev(smbios_hdl_t *, id_t, smbios_cooldev_t *);
extern int smbios_info_tprobe(smbios_hdl_t *, id_t, smbios_tprobe_t *);
extern int smbios_info_iprobe(smbios_hdl_t *, id_t, smbios_iprobe_t *);
extern id_t smbios_info_boot(smbios_hdl_t *, smbios_boot_t *);
extern int smbios_info_mgmtdev(smbios_hdl_t *, id_t, smbios_mgmtdev_t *);
extern int smbios_info_mgmtcomp(smbios_hdl_t *, id_t, smbios_mgmtcomp_t *);
extern id_t smbios_info_ipmi(smbios_hdl_t *, smbios_ipmi_t *);
extern int smbios_info_powersup(smbios_hdl_t *, id_t, smbios_powersup_t *);
extern int smbios_info_addinfo_nents(smbios_hdl_t *, id_t, uint_t *);
extern int smbios_info_addinfo_ent(smbios_hdl_t *, id_t, uint_t,
smbios_addinfo_ent_t **);
extern void smbios_info_addinfo_ent_free(smbios_hdl_t *,
smbios_addinfo_ent_t *);
extern int smbios_info_pciexrc(smbios_hdl_t *, id_t, smbios_pciexrc_t *);
extern int smbios_info_processor_info(smbios_hdl_t *, id_t,
smbios_processor_info_t *);
extern int smbios_info_processor_riscv(smbios_hdl_t *, id_t,
smbios_processor_info_riscv_t *);
extern int smbios_info_tpm(smbios_hdl_t *, id_t, smbios_tpm_t *);
extern int smbios_info_strprop(smbios_hdl_t *, id_t, smbios_strprop_t *);
extern int smbios_info_fwinfo(smbios_hdl_t *, id_t, smbios_fwinfo_t *);
extern int smbios_info_fwinfo_comps(smbios_hdl_t *, id_t, uint_t *,
smbios_fwinfo_comp_t **);
extern void smbios_info_fwinfo_comps_free(smbios_hdl_t *, uint_t,
smbios_fwinfo_comp_t *);
extern const char *smbios_psn(smbios_hdl_t *);
extern const char *smbios_csn(smbios_hdl_t *);
#ifndef _KERNEL
extern const char *smbios_battery_chem_desc(uint_t);
extern const char *smbios_bboard_flag_desc(uint_t);
extern const char *smbios_bboard_flag_name(uint_t);
extern const char *smbios_bboard_type_desc(uint_t);
extern const char *smbios_bios_flag_desc(uint64_t);
extern const char *smbios_bios_flag_name(uint64_t);
extern const char *smbios_bios_xb1_desc(uint_t);
extern const char *smbios_bios_xb1_name(uint_t);
extern const char *smbios_bios_xb2_desc(uint_t);
extern const char *smbios_bios_xb2_name(uint_t);
extern const char *smbios_boot_desc(uint_t);
extern const char *smbios_cache_assoc_desc(uint_t);
extern const char *smbios_cache_ctype_desc(uint_t);
extern const char *smbios_cache_ctype_name(uint_t);
extern const char *smbios_cache_ecc_desc(uint_t);
extern const char *smbios_cache_flag_desc(uint_t);
extern const char *smbios_cache_flag_name(uint_t);
extern const char *smbios_cache_loc_desc(uint_t);
extern const char *smbios_cache_logical_desc(uint_t);
extern const char *smbios_cache_mode_desc(uint_t);
extern const char *smbios_chassis_state_desc(uint_t);
extern const char *smbios_chassis_type_desc(uint_t);
extern const char *smbios_chassis_rack_type_desc(uint_t);
extern const char *smbios_evlog_flag_desc(uint_t);
extern const char *smbios_evlog_flag_name(uint_t);
extern const char *smbios_evlog_format_desc(uint_t);
extern const char *smbios_evlog_method_desc(uint_t);
extern const char *smbios_fwinfo_ch_name(uint_t);
extern const char *smbios_fwinfo_ch_desc(uint_t);
extern const char *smbios_fwinfo_id_desc(uint_t);
extern const char *smbios_fwinfo_state_desc(uint_t);
extern const char *smbios_fwinfo_vers_desc(uint_t);
extern const char *smbios_vprobe_loc_desc(uint_t);
extern const char *smbios_vprobe_status_desc(uint_t);
extern const char *smbios_cooldev_status_desc(uint_t);
extern const char *smbios_cooldev_type_desc(uint_t);
extern const char *smbios_tprobe_loc_desc(uint_t);
extern const char *smbios_tprobe_status_desc(uint_t);
extern const char *smbios_iprobe_loc_desc(uint_t);
extern const char *smbios_iprobe_status_desc(uint_t);
extern const char *smbios_ipmi_flag_name(uint_t);
extern const char *smbios_ipmi_flag_desc(uint_t);
extern const char *smbios_ipmi_type_desc(uint_t);
extern const char *smbios_powersup_flag_name(uint_t);
extern const char *smbios_powersup_flag_desc(uint_t);
extern const char *smbios_powersup_input_desc(uint_t);
extern const char *smbios_powersup_status_desc(uint_t);
extern const char *smbios_powersup_type_desc(uint_t);
extern const char *smbios_hwsec_desc(uint_t);
extern const char *smbios_memarray_loc_desc(uint_t);
extern const char *smbios_memarray_use_desc(uint_t);
extern const char *smbios_memarray_ecc_desc(uint_t);
extern const char *smbios_memdevice_form_desc(uint_t);
extern const char *smbios_memdevice_type_desc(uint_t);
extern const char *smbios_memdevice_flag_name(uint_t);
extern const char *smbios_memdevice_flag_desc(uint_t);
extern const char *smbios_memdevice_rank_desc(uint_t);
extern const char *smbios_memdevice_memtech_desc(uint_t);
extern const char *smbios_memdevice_op_capab_name(uint_t);
extern const char *smbios_memdevice_op_capab_desc(uint_t);
extern const char *smbios_onboard_type_desc(uint_t);
extern const char *smbios_onboard_ext_type_desc(uint_t);
extern const char *smbios_pointdev_iface_desc(uint_t);
extern const char *smbios_pointdev_type_desc(uint_t);
extern const char *smbios_port_conn_desc(uint_t);
extern const char *smbios_port_type_desc(uint_t);
extern const char *smbios_processor_family_desc(uint_t);
extern const char *smbios_processor_status_desc(uint_t);
extern const char *smbios_processor_type_desc(uint_t);
extern const char *smbios_processor_upgrade_desc(uint_t);
extern const char *smbios_processor_core_flag_name(uint_t);
extern const char *smbios_processor_core_flag_desc(uint_t);
extern const char *smbios_processor_info_type_desc(uint_t);
extern const char *smbios_riscv_isa_desc(uint64_t);
extern const char *smbios_riscv_isa_name(uint64_t);
extern const char *smbios_riscv_priv_desc(uint_t);
extern const char *smbios_riscv_priv_name(uint_t);
extern const char *smbios_riscv_width_desc(uint_t);
extern const char *smbios_slot_type_desc(uint_t);
extern const char *smbios_slot_width_desc(uint_t);
extern const char *smbios_slot_usage_desc(uint_t);
extern const char *smbios_slot_length_desc(uint_t);
extern const char *smbios_slot_ch1_desc(uint_t);
extern const char *smbios_slot_ch1_name(uint_t);
extern const char *smbios_slot_ch2_desc(uint_t);
extern const char *smbios_slot_ch2_name(uint_t);
extern const char *smbios_slot_height_desc(uint_t);
extern const char *smbios_strprop_id_desc(uint_t);
extern const char *smbios_type_desc(uint_t);
extern const char *smbios_type_name(uint_t);
extern const char *smbios_system_wakeup_desc(uint_t);
extern const char *smbios_tpm_char_desc(uint64_t);
extern const char *smbios_tpm_char_name(uint64_t);
extern const char *smbios_mgmtdev_atype_desc(uint_t);
extern const char *smbios_mgmtdev_dtype_desc(uint_t);
#endif
#ifdef _KERNEL
extern smbios_hdl_t *ksmbios;
extern int ksmbios_flags;
#endif
#ifdef __cplusplus
}
#endif
#endif