184ab085aSmws /* 284ab085aSmws * CDDL HEADER START 384ab085aSmws * 484ab085aSmws * The contents of this file are subject to the terms of the 580ab886dSwesolows * Common Development and Distribution License (the "License"). 680ab886dSwesolows * You may not use this file except in compliance with the License. 784ab085aSmws * 884ab085aSmws * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 984ab085aSmws * or http://www.opensolaris.org/os/licensing. 1084ab085aSmws * See the License for the specific language governing permissions 1184ab085aSmws * and limitations under the License. 1284ab085aSmws * 1384ab085aSmws * When distributing Covered Code, include this CDDL HEADER in each 1484ab085aSmws * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1584ab085aSmws * If applicable, add the following below this CDDL HEADER, with the 1684ab085aSmws * fields enclosed by brackets "[]" replaced with your own identifying 1784ab085aSmws * information: Portions Copyright [yyyy] [name of copyright owner] 1884ab085aSmws * 1984ab085aSmws * CDDL HEADER END 2084ab085aSmws */ 2184ab085aSmws 2284ab085aSmws /* 234e901881SDale Ghent * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved. 248522c52aSRob Johnston * Copyright (c) 2018, Joyent, Inc. 25*064d431aSRobert Mustacchi * Copyright 2024 Oxide Computer Company 2603f9f63dSTom Pothier * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 2784ab085aSmws * Use is subject to license terms. 2884ab085aSmws */ 2984ab085aSmws 3084ab085aSmws /* 3184ab085aSmws * This header file defines the interfaces available from the SMBIOS access 3284ab085aSmws * library, libsmbios, and an equivalent kernel module. This API can be used 3384ab085aSmws * to access DMTF SMBIOS data from a device, file, or raw memory buffer. 3484ab085aSmws * 354e901881SDale Ghent * This is NOT a Public interface, and should be considered Unstable, as it is 364e901881SDale Ghent * subject to change without notice as the DMTF SMBIOS specification evolves. 374e901881SDale Ghent * Therefore, be aware that any program linked with this API in this 384e901881SDale Ghent * instance of illumos is almost guaranteed to break in the next release. 3984ab085aSmws */ 4084ab085aSmws 4184ab085aSmws #ifndef _SYS_SMBIOS_H 4284ab085aSmws #define _SYS_SMBIOS_H 4384ab085aSmws 4484ab085aSmws #include <sys/types.h> 4584ab085aSmws 4684ab085aSmws #ifdef __cplusplus 4784ab085aSmws extern "C" { 4884ab085aSmws #endif 4984ab085aSmws 501951a933SToomas Soome typedef enum smbios_entry_point_type { 511951a933SToomas Soome SMBIOS_ENTRY_POINT_21, 521951a933SToomas Soome SMBIOS_ENTRY_POINT_30 531951a933SToomas Soome } smbios_entry_point_t; 541951a933SToomas Soome 5584ab085aSmws /* 564e901881SDale Ghent * SMBIOS Structure Table Entry Point. See DSP0134 5.2.1 for more information. 5784ab085aSmws * The structure table entry point is located by searching for the anchor. 5884ab085aSmws */ 59e4586ebfSmws #pragma pack(1) 60e4586ebfSmws 611951a933SToomas Soome typedef struct smbios_21_entry { 6284ab085aSmws char smbe_eanchor[4]; /* anchor tag (SMB_ENTRY_EANCHOR) */ 6384ab085aSmws uint8_t smbe_ecksum; /* checksum of entry point structure */ 6484ab085aSmws uint8_t smbe_elen; /* length in bytes of entry point */ 6584ab085aSmws uint8_t smbe_major; /* major version of the SMBIOS spec */ 6684ab085aSmws uint8_t smbe_minor; /* minor version of the SMBIOS spec */ 6784ab085aSmws uint16_t smbe_maxssize; /* maximum size in bytes of a struct */ 6884ab085aSmws uint8_t smbe_revision; /* entry point structure revision */ 6984ab085aSmws uint8_t smbe_format[5]; /* entry point revision-specific data */ 7084ab085aSmws char smbe_ianchor[5]; /* intermed. tag (SMB_ENTRY_IANCHOR) */ 7184ab085aSmws uint8_t smbe_icksum; /* intermed. checksum */ 7284ab085aSmws uint16_t smbe_stlen; /* length in bytes of structure table */ 7384ab085aSmws uint32_t smbe_staddr; /* physical addr of structure table */ 7484ab085aSmws uint16_t smbe_stnum; /* number of structure table entries */ 7584ab085aSmws uint8_t smbe_bcdrev; /* BCD value representing DMI version */ 761951a933SToomas Soome } smbios_21_entry_t; 771951a933SToomas Soome 781951a933SToomas Soome /* 791951a933SToomas Soome * The 64-bit SMBIOS 3.0 Entry Point. See DSP0134 5.2.2 for more information. 801951a933SToomas Soome * The structure table entry point is located by searching for the anchor. 811951a933SToomas Soome */ 821951a933SToomas Soome 831951a933SToomas Soome typedef struct smbios_30_entry { 841951a933SToomas Soome char smbe_eanchor[5]; /* anchor tag (SMB3_ENTRY_EANCHOR) */ 851951a933SToomas Soome uint8_t smbe_ecksum; /* checksum of entry point structure */ 861951a933SToomas Soome uint8_t smbe_elen; /* length in bytes of entry point */ 871951a933SToomas Soome uint8_t smbe_major; /* major version of the SMBIOS spec */ 881951a933SToomas Soome uint8_t smbe_minor; /* minor version of the SMBIOS spec */ 891951a933SToomas Soome uint8_t smbe_docrev; /* specification docrev */ 901951a933SToomas Soome uint8_t smbe_revision; /* entry point structure revision */ 911951a933SToomas Soome uint8_t smbe_reserved; 921951a933SToomas Soome uint32_t smbe_stlen; /* length in bytes of structure table */ 931951a933SToomas Soome uint64_t smbe_staddr; /* physical addr of structure table */ 941951a933SToomas Soome } smbios_30_entry_t; 951951a933SToomas Soome 961951a933SToomas Soome typedef union { 971951a933SToomas Soome smbios_21_entry_t ep21; 981951a933SToomas Soome smbios_30_entry_t ep30; 9984ab085aSmws } smbios_entry_t; 10084ab085aSmws 101e4586ebfSmws #pragma pack() 102e4586ebfSmws 10384ab085aSmws #define SMB_ENTRY_EANCHOR "_SM_" /* structure table entry point anchor */ 10484ab085aSmws #define SMB_ENTRY_EANCHORLEN 4 /* length of entry point anchor */ 1051951a933SToomas Soome #define SMB3_ENTRY_EANCHOR "_SM3_" /* structure table entry point anchor */ 1061951a933SToomas Soome #define SMB3_ENTRY_EANCHORLEN 5 /* length of entry point anchor */ 10784ab085aSmws #define SMB_ENTRY_IANCHOR "_DMI_" /* intermediate anchor string */ 10884ab085aSmws #define SMB_ENTRY_IANCHORLEN 5 /* length of intermediate anchor */ 10980ab886dSwesolows #define SMB_ENTRY_MAXLEN 255 /* maximum length of entry point */ 11084ab085aSmws 11184ab085aSmws /* 11284ab085aSmws * Structure type codes. The comments next to each type include an (R) note to 1134e901881SDale Ghent * indicate a structure that is required as of SMBIOS v2.8 and an (O) note to 1144e901881SDale Ghent * indicate a structure that is obsolete as of SMBIOS v2.8. 11584ab085aSmws */ 11684ab085aSmws #define SMB_TYPE_BIOS 0 /* BIOS information (R) */ 11784ab085aSmws #define SMB_TYPE_SYSTEM 1 /* system information (R) */ 11884ab085aSmws #define SMB_TYPE_BASEBOARD 2 /* base board */ 11984ab085aSmws #define SMB_TYPE_CHASSIS 3 /* system enclosure or chassis (R) */ 12084ab085aSmws #define SMB_TYPE_PROCESSOR 4 /* processor (R) */ 12184ab085aSmws #define SMB_TYPE_MEMCTL 5 /* memory controller (O) */ 12284ab085aSmws #define SMB_TYPE_MEMMOD 6 /* memory module (O) */ 12384ab085aSmws #define SMB_TYPE_CACHE 7 /* processor cache (R) */ 12484ab085aSmws #define SMB_TYPE_PORT 8 /* port connector */ 12584ab085aSmws #define SMB_TYPE_SLOT 9 /* upgradeable system slot (R) */ 1264e901881SDale Ghent #define SMB_TYPE_OBDEVS 10 /* on-board devices (O) */ 12784ab085aSmws #define SMB_TYPE_OEMSTR 11 /* OEM string table */ 12884ab085aSmws #define SMB_TYPE_SYSCONFSTR 12 /* system configuration string table */ 12984ab085aSmws #define SMB_TYPE_LANG 13 /* BIOS language information */ 13084ab085aSmws #define SMB_TYPE_GROUP 14 /* group associations */ 13184ab085aSmws #define SMB_TYPE_EVENTLOG 15 /* system event log */ 13284ab085aSmws #define SMB_TYPE_MEMARRAY 16 /* physical memory array (R) */ 13384ab085aSmws #define SMB_TYPE_MEMDEVICE 17 /* memory device (R) */ 13484ab085aSmws #define SMB_TYPE_MEMERR32 18 /* 32-bit memory error information */ 13584ab085aSmws #define SMB_TYPE_MEMARRAYMAP 19 /* memory array mapped address (R) */ 1364e901881SDale Ghent #define SMB_TYPE_MEMDEVICEMAP 20 /* memory device mapped address */ 13784ab085aSmws #define SMB_TYPE_POINTDEV 21 /* built-in pointing device */ 13884ab085aSmws #define SMB_TYPE_BATTERY 22 /* portable battery */ 13984ab085aSmws #define SMB_TYPE_RESET 23 /* system reset settings */ 14084ab085aSmws #define SMB_TYPE_SECURITY 24 /* hardware security settings */ 14184ab085aSmws #define SMB_TYPE_POWERCTL 25 /* system power controls */ 14284ab085aSmws #define SMB_TYPE_VPROBE 26 /* voltage probe */ 14384ab085aSmws #define SMB_TYPE_COOLDEV 27 /* cooling device */ 14484ab085aSmws #define SMB_TYPE_TPROBE 28 /* temperature probe */ 14584ab085aSmws #define SMB_TYPE_IPROBE 29 /* current probe */ 14684ab085aSmws #define SMB_TYPE_OOBRA 30 /* out-of-band remote access facility */ 14784ab085aSmws #define SMB_TYPE_BIS 31 /* boot integrity services */ 14884ab085aSmws #define SMB_TYPE_BOOT 32 /* system boot status (R) */ 14984ab085aSmws #define SMB_TYPE_MEMERR64 33 /* 64-bit memory error information */ 15084ab085aSmws #define SMB_TYPE_MGMTDEV 34 /* management device */ 15184ab085aSmws #define SMB_TYPE_MGMTDEVCP 35 /* management device component */ 15284ab085aSmws #define SMB_TYPE_MGMTDEVDATA 36 /* management device threshold data */ 15384ab085aSmws #define SMB_TYPE_MEMCHAN 37 /* memory channel */ 15484ab085aSmws #define SMB_TYPE_IPMIDEV 38 /* IPMI device information */ 15584ab085aSmws #define SMB_TYPE_POWERSUP 39 /* system power supply */ 1564e901881SDale Ghent #define SMB_TYPE_ADDINFO 40 /* additional information */ 15703f9f63dSTom Pothier #define SMB_TYPE_OBDEVEXT 41 /* on-board device extended info */ 1584e901881SDale Ghent #define SMB_TYPE_MCHI 42 /* mgmt controller host interface */ 159e5cce96fSRobert Mustacchi #define SMB_TYPE_TPM 43 /* TPM device */ 160176a9270SRobert Mustacchi #define SMB_TYPE_PROCESSOR_INFO 44 /* Processor Additional Information */ 161d53cdfabSRobert Mustacchi #define SMB_TYPE_FWINFO 45 /* Firmware Inventory Information */ 162d53cdfabSRobert Mustacchi #define SMB_TYPE_STRPROP 46 /* String Property */ 16384ab085aSmws #define SMB_TYPE_INACTIVE 126 /* inactive table entry */ 16484ab085aSmws #define SMB_TYPE_EOT 127 /* end of table */ 16584ab085aSmws 16684ab085aSmws #define SMB_TYPE_OEM_LO 128 /* start of OEM-specific type range */ 167074bb90dSTom Pothier #define SUN_OEM_EXT_PROCESSOR 132 /* processor extended info */ 168d53cdfabSRobert Mustacchi #define SUN_OEM_EXT_PORT 136 /* port extended info */ 169074bb90dSTom Pothier #define SUN_OEM_PCIEXRC 138 /* PCIE RootComplex/RootPort info */ 170074bb90dSTom Pothier #define SUN_OEM_EXT_MEMARRAY 144 /* phys memory array extended info */ 171074bb90dSTom Pothier #define SUN_OEM_EXT_MEMDEVICE 145 /* memory device extended info */ 17284ab085aSmws #define SMB_TYPE_OEM_HI 256 /* end of OEM-specific type range */ 17384ab085aSmws 1749c94f155SCheng Sean Ye /* 1759c94f155SCheng Sean Ye * OEM string indicating "Platform Resource Management Specification" 1769c94f155SCheng Sean Ye * compliance. 1779c94f155SCheng Sean Ye */ 1789c94f155SCheng Sean Ye #define SMB_PRMS1 "SUNW-PRMS-1" 1799c94f155SCheng Sean Ye 1809c94f155SCheng Sean Ye /* 1819c94f155SCheng Sean Ye * Some default values set by BIOS vendor 1829c94f155SCheng Sean Ye */ 1839c94f155SCheng Sean Ye #define SMB_DEFAULT1 "To Be Filled By O.E.M." 1849c94f155SCheng Sean Ye #define SMB_DEFAULT2 "Not Available" 1858522c52aSRob Johnston #define SMB_DEFAULT3 "Default string" 1869c94f155SCheng Sean Ye 18784ab085aSmws /* 18884ab085aSmws * SMBIOS Common Information. These structures do not correspond to anything 18984ab085aSmws * in the SMBIOS specification, but allow library clients to more easily read 19084ab085aSmws * information that is frequently encoded into the various SMBIOS structures. 19184ab085aSmws */ 19284ab085aSmws typedef struct smbios_info { 19384ab085aSmws const char *smbi_manufacturer; /* manufacturer */ 19484ab085aSmws const char *smbi_product; /* product name */ 19584ab085aSmws const char *smbi_version; /* version */ 19684ab085aSmws const char *smbi_serial; /* serial number */ 19784ab085aSmws const char *smbi_asset; /* asset tag */ 19884ab085aSmws const char *smbi_location; /* location tag */ 19984ab085aSmws const char *smbi_part; /* part number */ 20084ab085aSmws } smbios_info_t; 20184ab085aSmws 20284ab085aSmws typedef struct smbios_version { 20384ab085aSmws uint8_t smbv_major; /* version major number */ 20484ab085aSmws uint8_t smbv_minor; /* version minor number */ 20584ab085aSmws } smbios_version_t; 20684ab085aSmws 207074bb90dSTom Pothier #define SMB_CONT_MAX 255 /* maximum contained objects */ 208074bb90dSTom Pothier 20984ab085aSmws /* 2104e901881SDale Ghent * SMBIOS Bios Information. See DSP0134 Section 7.1 for more information. 211e5cce96fSRobert Mustacchi * smbb_romsize is converted from the implementation format into bytes. Note, if 212e5cce96fSRobert Mustacchi * we do not have an extended BIOS ROM size, it is filled in with the default 213e5cce96fSRobert Mustacchi * BIOS ROM size. 21484ab085aSmws */ 21584ab085aSmws typedef struct smbios_bios { 21684ab085aSmws const char *smbb_vendor; /* bios vendor string */ 21784ab085aSmws const char *smbb_version; /* bios version string */ 21884ab085aSmws const char *smbb_reldate; /* bios release date */ 21984ab085aSmws uint32_t smbb_segment; /* bios address segment location */ 22084ab085aSmws uint32_t smbb_romsize; /* bios rom size in bytes */ 22184ab085aSmws uint32_t smbb_runsize; /* bios image size in bytes */ 22284ab085aSmws uint64_t smbb_cflags; /* bios characteristics */ 22384ab085aSmws const uint8_t *smbb_xcflags; /* bios characteristics extensions */ 22484ab085aSmws size_t smbb_nxcflags; /* number of smbb_xcflags[] bytes */ 22584ab085aSmws smbios_version_t smbb_biosv; /* bios version */ 22684ab085aSmws smbios_version_t smbb_ecfwv; /* bios embedded ctrl f/w version */ 227e5cce96fSRobert Mustacchi uint64_t smbb_extromsize; /* Extended bios ROM Size */ 22884ab085aSmws } smbios_bios_t; 22984ab085aSmws 23084ab085aSmws #define SMB_BIOSFL_RSV0 0x00000001 /* reserved bit zero */ 23184ab085aSmws #define SMB_BIOSFL_RSV1 0x00000002 /* reserved bit one */ 23284ab085aSmws #define SMB_BIOSFL_UNKNOWN 0x00000004 /* unknown */ 23384ab085aSmws #define SMB_BIOSFL_BCNOTSUP 0x00000008 /* BIOS chars not supported */ 23484ab085aSmws #define SMB_BIOSFL_ISA 0x00000010 /* ISA is supported */ 23584ab085aSmws #define SMB_BIOSFL_MCA 0x00000020 /* MCA is supported */ 23684ab085aSmws #define SMB_BIOSFL_EISA 0x00000040 /* EISA is supported */ 23784ab085aSmws #define SMB_BIOSFL_PCI 0x00000080 /* PCI is supported */ 23884ab085aSmws #define SMB_BIOSFL_PCMCIA 0x00000100 /* PCMCIA is supported */ 23984ab085aSmws #define SMB_BIOSFL_PLUGNPLAY 0x00000200 /* Plug and Play is supported */ 24084ab085aSmws #define SMB_BIOSFL_APM 0x00000400 /* APM is supported */ 24184ab085aSmws #define SMB_BIOSFL_FLASH 0x00000800 /* BIOS is Flash Upgradeable */ 24284ab085aSmws #define SMB_BIOSFL_SHADOW 0x00001000 /* BIOS shadowing is allowed */ 24384ab085aSmws #define SMB_BIOSFL_VLVESA 0x00002000 /* VL-VESA is supported */ 24484ab085aSmws #define SMB_BIOSFL_ESCD 0x00004000 /* ESCD support is available */ 24584ab085aSmws #define SMB_BIOSFL_CDBOOT 0x00008000 /* Boot from CD is supported */ 24684ab085aSmws #define SMB_BIOSFL_SELBOOT 0x00010000 /* Selectable Boot supported */ 24784ab085aSmws #define SMB_BIOSFL_ROMSOCK 0x00020000 /* BIOS ROM is socketed */ 24884ab085aSmws #define SMB_BIOSFL_PCMBOOT 0x00040000 /* Boot from PCMCIA supported */ 24984ab085aSmws #define SMB_BIOSFL_EDD 0x00080000 /* EDD Spec is supported */ 25084ab085aSmws #define SMB_BIOSFL_NEC9800 0x00100000 /* int 0x13 NEC 9800 floppy */ 25184ab085aSmws #define SMB_BIOSFL_TOSHIBA 0x00200000 /* int 0x13 Toshiba floppy */ 25284ab085aSmws #define SMB_BIOSFL_525_360K 0x00400000 /* int 0x13 5.25" 360K floppy */ 25384ab085aSmws #define SMB_BIOSFL_525_12M 0x00800000 /* int 0x13 5.25" 1.2M floppy */ 25484ab085aSmws #define SMB_BIOSFL_35_720K 0x01000000 /* int 0x13 3.5" 720K floppy */ 25584ab085aSmws #define SMB_BIOSFL_35_288M 0x02000000 /* int 0x13 3.5" 2.88M floppy */ 25684ab085aSmws #define SMB_BIOSFL_I5_PRINT 0x04000000 /* int 0x5 print screen svcs */ 25784ab085aSmws #define SMB_BIOSFL_I9_KBD 0x08000000 /* int 0x9 8042 keyboard svcs */ 25884ab085aSmws #define SMB_BIOSFL_I14_SER 0x10000000 /* int 0x14 serial svcs */ 25984ab085aSmws #define SMB_BIOSFL_I17_PRINTER 0x20000000 /* int 0x17 printer svcs */ 26084ab085aSmws #define SMB_BIOSFL_I10_CGA 0x40000000 /* int 0x10 CGA svcs */ 26184ab085aSmws #define SMB_BIOSFL_NEC_PC98 0x80000000 /* NEC PC-98 */ 26284ab085aSmws 263e5cce96fSRobert Mustacchi /* 264e5cce96fSRobert Mustacchi * These values are used to allow consumers to have raw access to the extended 265e5cce96fSRobert Mustacchi * characteristic flags. We explicitly don't include the extended BIOS 266e5cce96fSRobert Mustacchi * information from section 3.1 as part of this as it has its own member. 267e5cce96fSRobert Mustacchi */ 2684e901881SDale Ghent #define SMB_BIOSXB_1 0 /* bios extension byte 1 (7.1.2.1) */ 2694e901881SDale Ghent #define SMB_BIOSXB_2 1 /* bios extension byte 2 (7.1.2.2) */ 27084ab085aSmws #define SMB_BIOSXB_BIOS_MAJ 2 /* bios major version */ 27184ab085aSmws #define SMB_BIOSXB_BIOS_MIN 3 /* bios minor version */ 27284ab085aSmws #define SMB_BIOSXB_ECFW_MAJ 4 /* extended ctlr f/w major version */ 27384ab085aSmws #define SMB_BIOSXB_ECFW_MIN 5 /* extended ctlr f/w minor version */ 27484ab085aSmws 27584ab085aSmws #define SMB_BIOSXB1_ACPI 0x01 /* ACPI is supported */ 27684ab085aSmws #define SMB_BIOSXB1_USBL 0x02 /* USB legacy is supported */ 27784ab085aSmws #define SMB_BIOSXB1_AGP 0x04 /* AGP is supported */ 27884ab085aSmws #define SMB_BIOSXB1_I20 0x08 /* I2O boot is supported */ 27984ab085aSmws #define SMB_BIOSXB1_LS120 0x10 /* LS-120 boot is supported */ 28084ab085aSmws #define SMB_BIOSXB1_ATZIP 0x20 /* ATAPI ZIP drive boot is supported */ 28184ab085aSmws #define SMB_BIOSXB1_1394 0x40 /* 1394 boot is supported */ 28284ab085aSmws #define SMB_BIOSXB1_SMBAT 0x80 /* Smart Battery is supported */ 28384ab085aSmws 28484ab085aSmws #define SMB_BIOSXB2_BBOOT 0x01 /* BIOS Boot Specification supported */ 28584ab085aSmws #define SMB_BIOSXB2_FKNETSVC 0x02 /* F-key Network Svc boot supported */ 28684ab085aSmws #define SMB_BIOSXB2_ETCDIST 0x04 /* Enable Targeted Content Distrib. */ 2874e901881SDale Ghent #define SMB_BIOSXB2_UEFI 0x08 /* UEFI Specification supported */ 2884e901881SDale Ghent #define SMB_BIOSXB2_VM 0x10 /* SMBIOS table describes a VM */ 289d53cdfabSRobert Mustacchi #define SMB_BIOSXB2_MFG_MODE 0x20 /* Manufacturing mode is supported */ 290d53cdfabSRobert Mustacchi #define SMB_BIOSXB2_MFG_EN 0x40 /* Manufacturing mode is enabled */ 29184ab085aSmws 29284ab085aSmws /* 2934e901881SDale Ghent * SMBIOS System Information. See DSP0134 Section 7.2 for more information. 29484ab085aSmws * The current set of smbs_wakeup values is defined after the structure. 29584ab085aSmws */ 29684ab085aSmws typedef struct smbios_system { 29784ab085aSmws const uint8_t *smbs_uuid; /* UUID byte array */ 29884ab085aSmws uint8_t smbs_uuidlen; /* UUID byte array length */ 29984ab085aSmws uint8_t smbs_wakeup; /* wake-up event */ 30084ab085aSmws const char *smbs_sku; /* SKU number */ 30184ab085aSmws const char *smbs_family; /* family */ 30284ab085aSmws } smbios_system_t; 30384ab085aSmws 30484ab085aSmws #define SMB_WAKEUP_RSV0 0x00 /* reserved */ 30584ab085aSmws #define SMB_WAKEUP_OTHER 0x01 /* other */ 30684ab085aSmws #define SMB_WAKEUP_UNKNOWN 0x02 /* unknown */ 30784ab085aSmws #define SMB_WAKEUP_APM 0x03 /* APM timer */ 30884ab085aSmws #define SMB_WAKEUP_MODEM 0x04 /* modem ring */ 30984ab085aSmws #define SMB_WAKEUP_LAN 0x05 /* LAN remote */ 31084ab085aSmws #define SMB_WAKEUP_SWITCH 0x06 /* power switch */ 31184ab085aSmws #define SMB_WAKEUP_PCIPME 0x07 /* PCI PME# */ 31284ab085aSmws #define SMB_WAKEUP_AC 0x08 /* AC power restored */ 31384ab085aSmws 31484ab085aSmws /* 3154e901881SDale Ghent * SMBIOS Base Board description. See DSP0134 Section 7.3 for more 31684ab085aSmws * information. smbb_flags and smbb_type definitions are below. 31784ab085aSmws */ 31884ab085aSmws typedef struct smbios_bboard { 31984ab085aSmws id_t smbb_chassis; /* chassis containing this board */ 32084ab085aSmws uint8_t smbb_flags; /* flags (see below) */ 32184ab085aSmws uint8_t smbb_type; /* board type (see below) */ 322074bb90dSTom Pothier uint8_t smbb_contn; /* number of contained object hdls */ 32384ab085aSmws } smbios_bboard_t; 32484ab085aSmws 32584ab085aSmws #define SMB_BBFL_MOTHERBOARD 0x01 /* board is a motherboard */ 32684ab085aSmws #define SMB_BBFL_NEEDAUX 0x02 /* auxiliary card or daughter req'd */ 32784ab085aSmws #define SMB_BBFL_REMOVABLE 0x04 /* board is removable */ 328d53cdfabSRobert Mustacchi #define SMB_BBFL_REPLACABLE 0x08 /* board is field-replaceable */ 32984ab085aSmws #define SMB_BBFL_HOTSWAP 0x10 /* board is hot-swappable */ 33084ab085aSmws 33184ab085aSmws #define SMB_BBT_UNKNOWN 0x1 /* unknown */ 33284ab085aSmws #define SMB_BBT_OTHER 0x2 /* other */ 33384ab085aSmws #define SMB_BBT_SBLADE 0x3 /* server blade */ 33484ab085aSmws #define SMB_BBT_CSWITCH 0x4 /* connectivity switch */ 33584ab085aSmws #define SMB_BBT_SMM 0x5 /* system management module */ 33684ab085aSmws #define SMB_BBT_PROC 0x6 /* processor module */ 33784ab085aSmws #define SMB_BBT_IO 0x7 /* i/o module */ 33884ab085aSmws #define SMB_BBT_MEM 0x8 /* memory module */ 33984ab085aSmws #define SMB_BBT_DAUGHTER 0x9 /* daughterboard */ 34084ab085aSmws #define SMB_BBT_MOTHER 0xA /* motherboard */ 34184ab085aSmws #define SMB_BBT_PROCMEM 0xB /* processor/memory module */ 34284ab085aSmws #define SMB_BBT_PROCIO 0xC /* processor/i/o module */ 34384ab085aSmws #define SMB_BBT_INTER 0xD /* interconnect board */ 34484ab085aSmws 34584ab085aSmws /* 3464e901881SDale Ghent * SMBIOS Chassis description. See DSP0134 Section 7.4 for more information. 34784ab085aSmws * We move the lock bit of the type field into smbc_lock for easier processing. 34884ab085aSmws */ 34984ab085aSmws typedef struct smbios_chassis { 35084ab085aSmws uint32_t smbc_oemdata; /* OEM-specific data */ 35184ab085aSmws uint8_t smbc_lock; /* lock present? */ 35284ab085aSmws uint8_t smbc_type; /* type */ 35384ab085aSmws uint8_t smbc_bustate; /* boot-up state */ 35484ab085aSmws uint8_t smbc_psstate; /* power supply state */ 35584ab085aSmws uint8_t smbc_thstate; /* thermal state */ 35684ab085aSmws uint8_t smbc_security; /* security status */ 35784ab085aSmws uint8_t smbc_uheight; /* enclosure height in U's */ 35884ab085aSmws uint8_t smbc_cords; /* number of power cords */ 359074bb90dSTom Pothier uint8_t smbc_elems; /* number of element records (n) */ 360074bb90dSTom Pothier uint8_t smbc_elemlen; /* length of contained element (m) */ 361d53cdfabSRobert Mustacchi const char *smbc_sku; /* SKU number (as a string) */ 36284ab085aSmws } smbios_chassis_t; 36384ab085aSmws 36484ab085aSmws #define SMB_CHT_OTHER 0x01 /* other */ 36584ab085aSmws #define SMB_CHT_UNKNOWN 0x02 /* unknown */ 36684ab085aSmws #define SMB_CHT_DESKTOP 0x03 /* desktop */ 36784ab085aSmws #define SMB_CHT_LPDESKTOP 0x04 /* low-profile desktop */ 36884ab085aSmws #define SMB_CHT_PIZZA 0x05 /* pizza box */ 36984ab085aSmws #define SMB_CHT_MINITOWER 0x06 /* mini-tower */ 37084ab085aSmws #define SMB_CHT_TOWER 0x07 /* tower */ 37184ab085aSmws #define SMB_CHT_PORTABLE 0x08 /* portable */ 37284ab085aSmws #define SMB_CHT_LAPTOP 0x09 /* laptop */ 37384ab085aSmws #define SMB_CHT_NOTEBOOK 0x0A /* notebook */ 37484ab085aSmws #define SMB_CHT_HANDHELD 0x0B /* hand-held */ 37584ab085aSmws #define SMB_CHT_DOCK 0x0C /* docking station */ 37684ab085aSmws #define SMB_CHT_ALLIN1 0x0D /* all-in-one */ 37784ab085aSmws #define SMB_CHT_SUBNOTE 0x0E /* sub-notebook */ 37884ab085aSmws #define SMB_CHT_SPACESAVE 0x0F /* space-saving */ 37984ab085aSmws #define SMB_CHT_LUNCHBOX 0x10 /* lunchbox */ 38084ab085aSmws #define SMB_CHT_MAIN 0x11 /* main server chassis */ 38184ab085aSmws #define SMB_CHT_EXPANSION 0x12 /* expansion chassis */ 38284ab085aSmws #define SMB_CHT_SUB 0x13 /* sub-chassis */ 38384ab085aSmws #define SMB_CHT_BUS 0x14 /* bus expansion chassis */ 38484ab085aSmws #define SMB_CHT_PERIPHERAL 0x15 /* peripheral chassis */ 38584ab085aSmws #define SMB_CHT_RAID 0x16 /* raid chassis */ 38684ab085aSmws #define SMB_CHT_RACK 0x17 /* rack mount chassis */ 38784ab085aSmws #define SMB_CHT_SEALED 0x18 /* sealed case pc */ 38884ab085aSmws #define SMB_CHT_MULTI 0x19 /* multi-system chassis */ 38942a58d9dSsethg #define SMB_CHT_CPCI 0x1A /* compact PCI */ 39042a58d9dSsethg #define SMB_CHT_ATCA 0x1B /* advanced TCA */ 39142a58d9dSsethg #define SMB_CHT_BLADE 0x1C /* blade */ 39242a58d9dSsethg #define SMB_CHT_BLADEENC 0x1D /* blade enclosure */ 3936734c4b0SRobert Mustacchi #define SMB_CHT_TABLET 0x1E /* tablet */ 3946734c4b0SRobert Mustacchi #define SMB_CHT_CONVERTIBLE 0x1F /* convertible */ 3956734c4b0SRobert Mustacchi #define SMB_CHT_DETACHABLE 0x20 /* detachable */ 396e5cce96fSRobert Mustacchi #define SMB_CHT_IOTGW 0x21 /* IoT Gateway */ 397e5cce96fSRobert Mustacchi #define SMB_CHT_EMBEDPC 0x22 /* Embedded PC */ 398e5cce96fSRobert Mustacchi #define SMB_CHT_MINIPC 0x23 /* Mini PC */ 399e5cce96fSRobert Mustacchi #define SMB_CHT_STICKPC 0x24 /* Stick PC */ 40084ab085aSmws 40184ab085aSmws #define SMB_CHST_OTHER 0x01 /* other */ 40284ab085aSmws #define SMB_CHST_UNKNOWN 0x02 /* unknown */ 40384ab085aSmws #define SMB_CHST_SAFE 0x03 /* safe */ 40484ab085aSmws #define SMB_CHST_WARNING 0x04 /* warning */ 40584ab085aSmws #define SMB_CHST_CRITICAL 0x05 /* critical */ 40684ab085aSmws #define SMB_CHST_NONREC 0x06 /* non-recoverable */ 40784ab085aSmws 40884ab085aSmws #define SMB_CHSC_OTHER 0x01 /* other */ 40984ab085aSmws #define SMB_CHSC_UNKNOWN 0x02 /* unknown */ 41084ab085aSmws #define SMB_CHSC_NONE 0x03 /* none */ 41184ab085aSmws #define SMB_CHSC_EILOCK 0x04 /* external interface locked out */ 41284ab085aSmws #define SMB_CHSC_EIENAB 0x05 /* external interface enabled */ 41384ab085aSmws 414d53cdfabSRobert Mustacchi /* 415d53cdfabSRobert Mustacchi * Chassis element record types 416d53cdfabSRobert Mustacchi */ 417d53cdfabSRobert Mustacchi typedef struct smbios_chassis_entry { 418d53cdfabSRobert Mustacchi uint8_t smbce_type; /* Type of elt */ 419d53cdfabSRobert Mustacchi uint8_t smbce_elt; /* Containing Element */ 420d53cdfabSRobert Mustacchi uint8_t smbce_min; /* minimum number of elt */ 421d53cdfabSRobert Mustacchi uint8_t smbce_max; /* minimum number of elt */ 422d53cdfabSRobert Mustacchi } smbios_chassis_entry_t; 423d53cdfabSRobert Mustacchi 424d53cdfabSRobert Mustacchi #define SMB_CELT_BBOARD 0 /* smbce_elt is a base board type */ 425d53cdfabSRobert Mustacchi #define SMB_CELT_SMBIOS 1 /* smbce_elt is an smbios type */ 426d53cdfabSRobert Mustacchi 42784ab085aSmws /* 4284e901881SDale Ghent * SMBIOS Processor description. See DSP0134 Section 7.5 for more details. 42984ab085aSmws * If the L1, L2, or L3 cache handle is -1, the cache information is unknown. 43084ab085aSmws * If the handle refers to something of size 0, that type of cache is absent. 43184ab085aSmws * 43284ab085aSmws * NOTE: Although SMBIOS exports a 64-bit CPUID result, this value should not 4334e901881SDale Ghent * be used for any purpose other than BIOS debugging. illumos itself computes 43484ab085aSmws * its own CPUID value and applies knowledge of additional errata and processor 43584ab085aSmws * specific CPUID variations, so this value should not be used for anything. 43684ab085aSmws */ 43784ab085aSmws typedef struct smbios_processor { 43884ab085aSmws uint64_t smbp_cpuid; /* processor cpuid information */ 43984ab085aSmws uint32_t smbp_family; /* processor family */ 44084ab085aSmws uint8_t smbp_type; /* processor type (SMB_PRT_*) */ 44184ab085aSmws uint8_t smbp_voltage; /* voltage (SMB_PRV_*) */ 44284ab085aSmws uint8_t smbp_status; /* status (SMB_PRS_*) */ 44384ab085aSmws uint8_t smbp_upgrade; /* upgrade (SMB_PRU_*) */ 44484ab085aSmws uint32_t smbp_clkspeed; /* external clock speed in MHz */ 44584ab085aSmws uint32_t smbp_maxspeed; /* maximum speed in MHz */ 44684ab085aSmws uint32_t smbp_curspeed; /* current speed in MHz */ 44784ab085aSmws id_t smbp_l1cache; /* L1 cache handle */ 44884ab085aSmws id_t smbp_l2cache; /* L2 cache handle */ 44984ab085aSmws id_t smbp_l3cache; /* L3 cache handle */ 4506734c4b0SRobert Mustacchi uint32_t smbp_corecount; 4516734c4b0SRobert Mustacchi /* number of cores per processor socket */ 4526734c4b0SRobert Mustacchi uint32_t smbp_coresenabled; 4534e901881SDale Ghent /* number of enabled cores per processor socket */ 4546734c4b0SRobert Mustacchi uint32_t smbp_threadcount; 4554e901881SDale Ghent /* number of threads per processor socket */ 4564e901881SDale Ghent uint16_t smbp_cflags; 4574e901881SDale Ghent /* processor characteristics (SMB_PRC_*) */ 4581d1fc316SRobert Mustacchi uint32_t smbp_threadsenabled; /* number of enabled threads */ 45984ab085aSmws } smbios_processor_t; 46084ab085aSmws 46184ab085aSmws #define SMB_PRT_OTHER 0x01 /* other */ 46284ab085aSmws #define SMB_PRT_UNKNOWN 0x02 /* unknown */ 46384ab085aSmws #define SMB_PRT_CENTRAL 0x03 /* central processor */ 46484ab085aSmws #define SMB_PRT_MATH 0x04 /* math processor */ 46584ab085aSmws #define SMB_PRT_DSP 0x05 /* DSP processor */ 46684ab085aSmws #define SMB_PRT_VIDEO 0x06 /* video processor */ 46784ab085aSmws 46884ab085aSmws #define SMB_PRV_LEGACY(v) (!((v) & 0x80)) /* legacy voltage mode */ 46984ab085aSmws #define SMB_PRV_FIXED(v) ((v) & 0x80) /* fixed voltage mode */ 47084ab085aSmws 47184ab085aSmws #define SMB_PRV_5V 0x01 /* 5V is supported */ 47284ab085aSmws #define SMB_PRV_33V 0x02 /* 3.3V is supported */ 47384ab085aSmws #define SMB_PRV_29V 0x04 /* 2.9V is supported */ 47484ab085aSmws 47584ab085aSmws #define SMB_PRV_VOLTAGE(v) ((v) & 0x7f) 47684ab085aSmws 47784ab085aSmws #define SMB_PRSTATUS_PRESENT(s) ((s) & 0x40) /* socket is populated */ 47884ab085aSmws #define SMB_PRSTATUS_STATUS(s) ((s) & 0x07) /* status (see below) */ 47984ab085aSmws 48084ab085aSmws #define SMB_PRS_UNKNOWN 0x0 /* unknown */ 48184ab085aSmws #define SMB_PRS_ENABLED 0x1 /* enabled */ 48284ab085aSmws #define SMB_PRS_BDISABLED 0x2 /* disabled in bios user setup */ 48384ab085aSmws #define SMB_PRS_PDISABLED 0x3 /* disabled in bios from post error */ 48484ab085aSmws #define SMB_PRS_IDLE 0x4 /* waiting to be enabled */ 48584ab085aSmws #define SMB_PRS_OTHER 0x7 /* other */ 48684ab085aSmws 48784ab085aSmws #define SMB_PRU_OTHER 0x01 /* other */ 48884ab085aSmws #define SMB_PRU_UNKNOWN 0x02 /* unknown */ 48984ab085aSmws #define SMB_PRU_DAUGHTER 0x03 /* daughter board */ 49084ab085aSmws #define SMB_PRU_ZIF 0x04 /* ZIF socket */ 49184ab085aSmws #define SMB_PRU_PIGGY 0x05 /* replaceable piggy back */ 49284ab085aSmws #define SMB_PRU_NONE 0x06 /* none */ 49384ab085aSmws #define SMB_PRU_LIF 0x07 /* LIF socket */ 49484ab085aSmws #define SMB_PRU_SLOT1 0x08 /* slot 1 */ 49584ab085aSmws #define SMB_PRU_SLOT2 0x09 /* slot 2 */ 49684ab085aSmws #define SMB_PRU_370PIN 0x0A /* 370-pin socket */ 49784ab085aSmws #define SMB_PRU_SLOTA 0x0B /* slot A */ 49884ab085aSmws #define SMB_PRU_SLOTM 0x0C /* slot M */ 49984ab085aSmws #define SMB_PRU_423 0x0D /* socket 423 */ 50084ab085aSmws #define SMB_PRU_A 0x0E /* socket A (socket 462) */ 50184ab085aSmws #define SMB_PRU_478 0x0F /* socket 478 */ 50284ab085aSmws #define SMB_PRU_754 0x10 /* socket 754 */ 50384ab085aSmws #define SMB_PRU_940 0x11 /* socket 940 */ 50442a58d9dSsethg #define SMB_PRU_939 0x12 /* socket 939 */ 50542a58d9dSsethg #define SMB_PRU_MPGA604 0x13 /* mPGA604 */ 50642a58d9dSsethg #define SMB_PRU_LGA771 0x14 /* LGA771 */ 50742a58d9dSsethg #define SMB_PRU_LGA775 0x15 /* LGA775 */ 50842a58d9dSsethg #define SMB_PRU_S1 0x16 /* socket S1 */ 50942a58d9dSsethg #define SMB_PRU_AM2 0x17 /* socket AM2 */ 51042a58d9dSsethg #define SMB_PRU_F 0x18 /* socket F */ 5114e901881SDale Ghent #define SMB_PRU_LGA1366 0x19 /* LGA1366 */ 5124e901881SDale Ghent #define SMB_PRU_G34 0x1A /* socket G34 */ 5134e901881SDale Ghent #define SMB_PRU_AM3 0x1B /* socket AM3 */ 5144e901881SDale Ghent #define SMB_PRU_C32 0x1C /* socket C32 */ 5154e901881SDale Ghent #define SMB_PRU_LGA1156 0x1D /* LGA1156 */ 5164e901881SDale Ghent #define SMB_PRU_LGA1567 0x1E /* LGA1567 */ 5174e901881SDale Ghent #define SMB_PRU_PGA988A 0x1F /* PGA988A */ 5184e901881SDale Ghent #define SMB_PRU_BGA1288 0x20 /* BGA1288 */ 5194e901881SDale Ghent #define SMB_PRU_RPGA988B 0x21 /* rPGA988B */ 5204e901881SDale Ghent #define SMB_PRU_BGA1023 0x22 /* BGA1023 */ 5214e901881SDale Ghent #define SMB_PRU_BGA1224 0x23 /* BGA1224 */ 5224e901881SDale Ghent #define SMB_PRU_LGA1155 0x24 /* LGA1155 */ 5234e901881SDale Ghent #define SMB_PRU_LGA1356 0x25 /* LGA1356 */ 5244e901881SDale Ghent #define SMB_PRU_LGA2011 0x26 /* LGA2011 */ 5254e901881SDale Ghent #define SMB_PRU_FS1 0x27 /* socket FS1 */ 5264e901881SDale Ghent #define SMB_PRU_FS2 0x28 /* socket FS2 */ 5274e901881SDale Ghent #define SMB_PRU_FM1 0x29 /* socket FM1 */ 5284e901881SDale Ghent #define SMB_PRU_FM2 0x2A /* socket FM2 */ 5294e901881SDale Ghent #define SMB_PRU_LGA20113 0x2B /* LGA2011-3 */ 5304e901881SDale Ghent #define SMB_PRU_LGA13563 0x2C /* LGA1356-3 */ 5316734c4b0SRobert Mustacchi #define SMB_PRU_LGA1150 0x2D /* LGA1150 */ 5326734c4b0SRobert Mustacchi #define SMB_PRU_BGA1168 0x2E /* BGA1168 */ 5336734c4b0SRobert Mustacchi #define SMB_PRU_BGA1234 0x2F /* BGA1234 */ 5346734c4b0SRobert Mustacchi #define SMB_PRU_BGA1364 0x30 /* BGA1364 */ 535e5cce96fSRobert Mustacchi #define SMB_PRU_AM4 0x31 /* socket AM4 */ 536e5cce96fSRobert Mustacchi #define SMB_PRU_LGA1151 0x32 /* LGA1151 */ 537e5cce96fSRobert Mustacchi #define SMB_PRU_BGA1356 0x33 /* BGA1356 */ 538e5cce96fSRobert Mustacchi #define SMB_PRU_BGA1440 0x34 /* BGA1440 */ 539e5cce96fSRobert Mustacchi #define SMB_PRU_BGA1515 0x35 /* BGA1515 */ 540e5cce96fSRobert Mustacchi #define SMB_PRU_LGA36471 0x36 /* LGA3647-1 */ 541e5cce96fSRobert Mustacchi #define SMB_PRU_SP3 0x37 /* socket SP3 */ 542da0a6884SRobert Mustacchi #define SMB_PRU_SP3r2 0x38 /* socket SP3r2 */ 5431566bc34SRobert Mustacchi #define SMB_PRU_LGA2066 0x39 /* Socket LGA2066 */ 5441566bc34SRobert Mustacchi #define SMB_PRU_BGA1392 0x3A /* Socket BGA1392 */ 5451566bc34SRobert Mustacchi #define SMB_PRU_BGA1510 0x3B /* Socket BGA1510 */ 5461566bc34SRobert Mustacchi #define SMB_PRU_BGA1528 0x3C /* Socket BGA1528 */ 547c6795799SRobert Mustacchi #define SMB_PRU_LGA4189 0x3D /* Socket LGA4189 */ 548c6795799SRobert Mustacchi #define SMB_PRU_LGA1200 0x3E /* Socket LGA1200 */ 549d53cdfabSRobert Mustacchi #define SMB_PRU_LGA4677 0x3F /* Socket LGA4677 */ 5501d1fc316SRobert Mustacchi #define SMB_PRU_LGA1700 0x40 /* Socket LGA1700 */ 5511d1fc316SRobert Mustacchi #define SMB_PRU_BGA1744 0x41 /* Socket BGA1744 */ 5521d1fc316SRobert Mustacchi #define SMB_PRU_BGA1781 0x42 /* Socket BGA1781 */ 5531d1fc316SRobert Mustacchi #define SMB_PRU_BGA1211 0x43 /* Socket BGA1211 */ 5541d1fc316SRobert Mustacchi #define SMB_PRU_BGA2422 0x44 /* Socket BGA2422 */ 5551d1fc316SRobert Mustacchi #define SMB_PRU_LGA1211 0x45 /* Socket LGA1211 */ 5561d1fc316SRobert Mustacchi #define SMB_PRU_LGA2422 0x46 /* Socket LGA2422 */ 5571d1fc316SRobert Mustacchi #define SMB_PRU_LGA5773 0x47 /* Socket LGA5773 */ 5581d1fc316SRobert Mustacchi #define SMB_PRU_BGA5773 0x48 /* Socket BGA5773 */ 5596bc074b1SRobert Mustacchi #define SMB_PRU_AM5 0x49 /* Socket AM5 */ 5606bc074b1SRobert Mustacchi #define SMB_PRU_SP5 0x4A /* Socket SP5 */ 5616bc074b1SRobert Mustacchi #define SMB_PRU_SP6 0x4B /* Socket SP6 */ 5626bc074b1SRobert Mustacchi #define SMB_PRU_BGA883 0x4C /* Socket BGA883 */ 5636bc074b1SRobert Mustacchi #define SMB_PRU_BGA1190 0x4D /* Socket BGA1190 */ 5646bc074b1SRobert Mustacchi #define SMB_PRU_BGA4129 0x4E /* Socket BGA4129 */ 5656bc074b1SRobert Mustacchi #define SMB_PRU_LGA4710 0x4F /* Socket LBA4710 */ 5666bc074b1SRobert Mustacchi #define SMB_PRU_LGA7529 0x50 /* Socket LBA7529 */ 5674e901881SDale Ghent 5684e901881SDale Ghent #define SMB_PRC_RESERVED 0x0001 /* reserved */ 5694e901881SDale Ghent #define SMB_PRC_UNKNOWN 0x0002 /* unknown */ 5704e901881SDale Ghent #define SMB_PRC_64BIT 0x0004 /* 64-bit capable */ 5714e901881SDale Ghent #define SMB_PRC_MC 0x0008 /* multi-core */ 5724e901881SDale Ghent #define SMB_PRC_HT 0x0010 /* hardware thread */ 5734e901881SDale Ghent #define SMB_PRC_NX 0x0020 /* execution protection */ 5744e901881SDale Ghent #define SMB_PRC_VT 0x0040 /* enhanced virtualization */ 5754e901881SDale Ghent #define SMB_PRC_PM 0x0080 /* power/performance control */ 576176a9270SRobert Mustacchi #define SMB_PRC_128BIT 0x0100 /* 128-bit capable */ 57784ab085aSmws 57884ab085aSmws #define SMB_PRF_OTHER 0x01 /* other */ 57984ab085aSmws #define SMB_PRF_UNKNOWN 0x02 /* unknown */ 58084ab085aSmws #define SMB_PRF_8086 0x03 /* 8086 */ 58184ab085aSmws #define SMB_PRF_80286 0x04 /* 80286 */ 58284ab085aSmws #define SMB_PRF_I386 0x05 /* Intel 386 */ 58384ab085aSmws #define SMB_PRF_I486 0x06 /* Intel 486 */ 58484ab085aSmws #define SMB_PRF_8087 0x07 /* 8087 */ 58584ab085aSmws #define SMB_PRF_80287 0x08 /* 80287 */ 58684ab085aSmws #define SMB_PRF_80387 0x09 /* 80387 */ 58784ab085aSmws #define SMB_PRF_80487 0x0A /* 80487 */ 58884ab085aSmws #define SMB_PRF_PENTIUM 0x0B /* Pentium Family */ 58984ab085aSmws #define SMB_PRF_PENTIUMPRO 0x0C /* Pentium Pro */ 59084ab085aSmws #define SMB_PRF_PENTIUMII 0x0D /* Pentium II */ 59184ab085aSmws #define SMB_PRF_PENTIUM_MMX 0x0E /* Pentium w/ MMX */ 59284ab085aSmws #define SMB_PRF_CELERON 0x0F /* Celeron */ 59384ab085aSmws #define SMB_PRF_PENTIUMII_XEON 0x10 /* Pentium II Xeon */ 59484ab085aSmws #define SMB_PRF_PENTIUMIII 0x11 /* Pentium III */ 59584ab085aSmws #define SMB_PRF_M1 0x12 /* M1 */ 59684ab085aSmws #define SMB_PRF_M2 0x13 /* M2 */ 5974e901881SDale Ghent #define SMB_PRF_CELERON_M 0x14 /* Celeron M */ 5984e901881SDale Ghent #define SMB_PRF_PENTIUMIV_HT 0x15 /* Pentium 4 HT */ 5996bc074b1SRobert Mustacchi #define SMB_PRF_INTC_PROC 0x16 /* Intel Processor */ 60084ab085aSmws #define SMB_PRF_DURON 0x18 /* AMD Duron */ 60184ab085aSmws #define SMB_PRF_K5 0x19 /* K5 */ 60284ab085aSmws #define SMB_PRF_K6 0x1A /* K6 */ 60384ab085aSmws #define SMB_PRF_K6_2 0x1B /* K6-2 */ 60484ab085aSmws #define SMB_PRF_K6_3 0x1C /* K6-3 */ 60584ab085aSmws #define SMB_PRF_ATHLON 0x1D /* Athlon */ 60684ab085aSmws #define SMB_PRF_2900 0x1E /* AMD 2900 */ 60784ab085aSmws #define SMB_PRF_K6_2PLUS 0x1F /* K6-2+ */ 60884ab085aSmws #define SMB_PRF_PPC 0x20 /* PowerPC */ 60984ab085aSmws #define SMB_PRF_PPC_601 0x21 /* PowerPC 601 */ 61084ab085aSmws #define SMB_PRF_PPC_603 0x22 /* PowerPC 603 */ 61184ab085aSmws #define SMB_PRF_PPC_603PLUS 0x23 /* PowerPC 603+ */ 61284ab085aSmws #define SMB_PRF_PPC_604 0x24 /* PowerPC 604 */ 61384ab085aSmws #define SMB_PRF_PPC_620 0x25 /* PowerPC 620 */ 61484ab085aSmws #define SMB_PRF_PPC_704 0x26 /* PowerPC x704 */ 61584ab085aSmws #define SMB_PRF_PPC_750 0x27 /* PowerPC 750 */ 6164e901881SDale Ghent #define SMB_PRF_CORE_DUO 0x28 /* Core Duo */ 6174e901881SDale Ghent #define SMB_PRF_CORE_DUO_M 0x29 /* Core Duo mobile */ 6184e901881SDale Ghent #define SMB_PRF_CORE_SOLO_M 0x2A /* Core Solo mobile */ 6194e901881SDale Ghent #define SMB_PRF_ATOM 0x2B /* Intel Atom */ 6206734c4b0SRobert Mustacchi #define SMB_PRF_CORE_M 0x2C /* Intel Core M */ 621e5cce96fSRobert Mustacchi #define SMB_PRF_CORE_M3 0x2D /* Intel Core m3 */ 622e5cce96fSRobert Mustacchi #define SMB_PRF_CORE_M5 0x2E /* Intel Core m5 */ 623e5cce96fSRobert Mustacchi #define SMB_PRF_CORE_M7 0x2F /* Intel Core m7 */ 62484ab085aSmws #define SMB_PRF_ALPHA 0x30 /* Alpha */ 62584ab085aSmws #define SMB_PRF_ALPHA_21064 0x31 /* Alpha 21064 */ 62684ab085aSmws #define SMB_PRF_ALPHA_21066 0x32 /* Alpha 21066 */ 62784ab085aSmws #define SMB_PRF_ALPHA_21164 0x33 /* Alpha 21164 */ 62884ab085aSmws #define SMB_PRF_ALPHA_21164PC 0x34 /* Alpha 21164PC */ 62984ab085aSmws #define SMB_PRF_ALPHA_21164A 0x35 /* Alpha 21164a */ 63084ab085aSmws #define SMB_PRF_ALPHA_21264 0x36 /* Alpha 21264 */ 63184ab085aSmws #define SMB_PRF_ALPHA_21364 0x37 /* Alpha 21364 */ 6324e901881SDale Ghent #define SMB_PRF_TURION2U_2C_MM 0x38 6334e901881SDale Ghent /* AMD Turion II Ultra Dual-Core Mobile M */ 6344e901881SDale Ghent #define SMB_PRF_TURION2_2C_MM 0x39 /* AMD Turion II Dual-Core Mobile M */ 6354e901881SDale Ghent #define SMB_PRF_ATHLON2_2C_M 0x3A /* AMD Athlon II Dual-Core M */ 6364e901881SDale Ghent #define SMB_PRF_OPTERON_6100 0x3B /* AMD Opteron 6100 series */ 6374e901881SDale Ghent #define SMB_PRF_OPTERON_4100 0x3C /* AMD Opteron 4100 series */ 6384e901881SDale Ghent #define SMB_PRF_OPTERON_6200 0x3D /* AMD Opteron 6200 series */ 6394e901881SDale Ghent #define SMB_PRF_OPTERON_4200 0x3E /* AMD Opteron 4200 series */ 6404e901881SDale Ghent #define SMB_PRF_AMD_FX 0x3F /* AMD FX series */ 64184ab085aSmws #define SMB_PRF_MIPS 0x40 /* MIPS */ 64284ab085aSmws #define SMB_PRF_MIPS_R4000 0x41 /* MIPS R4000 */ 64384ab085aSmws #define SMB_PRF_MIPS_R4200 0x42 /* MIPS R4200 */ 64484ab085aSmws #define SMB_PRF_MIPS_R4400 0x43 /* MIPS R4400 */ 64584ab085aSmws #define SMB_PRF_MIPS_R4600 0x44 /* MIPS R4600 */ 64684ab085aSmws #define SMB_PRF_MIPS_R10000 0x45 /* MIPS R10000 */ 6474e901881SDale Ghent #define SMB_PRF_AMD_C 0x46 /* AMD C-series */ 6484e901881SDale Ghent #define SMB_PRF_AMD_E 0x47 /* AMD E-series */ 6494e901881SDale Ghent #define SMB_PRF_AMD_A 0x48 /* AMD A-series */ 6504e901881SDale Ghent #define SMB_PRF_AMD_G 0x49 /* AMD G-series */ 6514e901881SDale Ghent #define SMB_PRF_AMD_Z 0x4A /* AMD Z-series */ 6524e901881SDale Ghent #define SMB_PRF_AMD_R 0x4B /* AMD R-series */ 6534e901881SDale Ghent #define SMB_PRF_OPTERON_4300 0x4C /* AMD Opteron 4300 series */ 6544e901881SDale Ghent #define SMB_PRF_OPTERON_6300 0x4D /* AMD Opteron 6300 series */ 6554e901881SDale Ghent #define SMB_PRF_OPTERON_3300 0x4E /* AMD Opteron 3300 series */ 6564e901881SDale Ghent #define SMB_PRF_AMD_FIREPRO 0x4F /* AMD FirePro series */ 65784ab085aSmws #define SMB_PRF_SPARC 0x50 /* SPARC */ 65884ab085aSmws #define SMB_PRF_SUPERSPARC 0x51 /* SuperSPARC */ 65984ab085aSmws #define SMB_PRF_MICROSPARCII 0x52 /* microSPARC II */ 66084ab085aSmws #define SMB_PRF_MICROSPARCIIep 0x53 /* microSPARC IIep */ 66184ab085aSmws #define SMB_PRF_ULTRASPARC 0x54 /* UltraSPARC */ 66284ab085aSmws #define SMB_PRF_USII 0x55 /* UltraSPARC II */ 66384ab085aSmws #define SMB_PRF_USIIi 0x56 /* UltraSPARC IIi */ 66484ab085aSmws #define SMB_PRF_USIII 0x57 /* UltraSPARC III */ 66584ab085aSmws #define SMB_PRF_USIIIi 0x58 /* UltraSPARC IIIi */ 66684ab085aSmws #define SMB_PRF_68040 0x60 /* 68040 */ 66784ab085aSmws #define SMB_PRF_68XXX 0x61 /* 68XXX */ 66884ab085aSmws #define SMB_PRF_68000 0x62 /* 68000 */ 66984ab085aSmws #define SMB_PRF_68010 0x63 /* 68010 */ 67084ab085aSmws #define SMB_PRF_68020 0x64 /* 68020 */ 67184ab085aSmws #define SMB_PRF_68030 0x65 /* 68030 */ 6726734c4b0SRobert Mustacchi #define SMB_PRF_ATHLON_X4 0x66 /* AMD Athlon X4 Quad-Core */ 6736734c4b0SRobert Mustacchi #define SMB_PRF_OPTERON_X1K 0x67 /* AMD Opteron X1000 */ 6746734c4b0SRobert Mustacchi #define SMB_PRF_OPTERON_X2K 0x68 /* AMD Opteron X2000 APU */ 675e5cce96fSRobert Mustacchi #define SMB_PRF_OPTERON_A 0x69 /* AMD Opteron A Series */ 6763934d9d6SRobert Mustacchi #define SMB_PRF_OPTERON_X3K 0x6A /* AMD Opteron X3000 APU */ 677da0a6884SRobert Mustacchi #define SMB_PRF_ZEN 0x6B /* AMD Zen Processor Family */ 67884ab085aSmws #define SMB_PRF_HOBBIT 0x70 /* Hobbit */ 67984ab085aSmws #define SMB_PRF_TM5000 0x78 /* Crusoe TM5000 */ 68084ab085aSmws #define SMB_PRF_TM3000 0x79 /* Crusoe TM3000 */ 68184ab085aSmws #define SMB_PRF_TM8000 0x7A /* Efficeon TM8000 */ 68284ab085aSmws #define SMB_PRF_WEITEK 0x80 /* Weitek */ 68384ab085aSmws #define SMB_PRF_ITANIC 0x82 /* Itanium */ 68484ab085aSmws #define SMB_PRF_ATHLON64 0x83 /* Athlon64 */ 68584ab085aSmws #define SMB_PRF_OPTERON 0x84 /* Opteron */ 6864e901881SDale Ghent #define SMB_PRF_SEMPRON 0x85 /* Sempron */ 6874e901881SDale Ghent #define SMB_PRF_TURION64_M 0x86 /* Turion 64 Mobile */ 6884e901881SDale Ghent #define SMB_PRF_OPTERON_2C 0x87 /* AMD Opteron Dual-Core */ 6894e901881SDale Ghent #define SMB_PRF_ATHLON64_X2_2C 0x88 /* AMD Athlon 64 X2 Dual-Core */ 6904e901881SDale Ghent #define SMB_PRF_TURION64_X2_M 0x89 /* AMD Turion 64 X2 Mobile */ 6914e901881SDale Ghent #define SMB_PRF_OPTERON_4C 0x8A /* AMD Opteron Quad-Core */ 6924e901881SDale Ghent #define SMB_PRF_OPTERON_3G 0x8B /* AMD Opteron 3rd Generation */ 6934e901881SDale Ghent #define SMB_PRF_PHENOM_FX_4C 0x8C /* AMD Phenom FX Quad-Core */ 6944e901881SDale Ghent #define SMB_PRF_PHENOM_X4_4C 0x8D /* AMD Phenom X4 Quad-Core */ 6954e901881SDale Ghent #define SMB_PRF_PHENOM_X2_2C 0x8E /* AMD Phenom X2 Dual-Core */ 6964e901881SDale Ghent #define SMB_PRF_ATHLON_X2_2C 0x8F /* AMD Athlon X2 Dual-Core */ 69784ab085aSmws #define SMB_PRF_PA 0x90 /* PA-RISC */ 69884ab085aSmws #define SMB_PRF_PA8500 0x91 /* PA-RISC 8500 */ 69984ab085aSmws #define SMB_PRF_PA8000 0x92 /* PA-RISC 8000 */ 70084ab085aSmws #define SMB_PRF_PA7300LC 0x93 /* PA-RISC 7300LC */ 70184ab085aSmws #define SMB_PRF_PA7200 0x94 /* PA-RISC 7200 */ 70284ab085aSmws #define SMB_PRF_PA7100LC 0x95 /* PA-RISC 7100LC */ 70384ab085aSmws #define SMB_PRF_PA7100 0x96 /* PA-RISC 7100 */ 70484ab085aSmws #define SMB_PRF_V30 0xA0 /* V30 */ 7054e901881SDale Ghent #define SMB_PRF_XEON_4C_3200 0xA1 /* Xeon Quad Core 3200 */ 7064e901881SDale Ghent #define SMB_PRF_XEON_2C_3000 0xA2 /* Xeon Dual Core 3000 */ 7074e901881SDale Ghent #define SMB_PRF_XEON_4C_5300 0xA3 /* Xeon Quad Core 5300 */ 7084e901881SDale Ghent #define SMB_PRF_XEON_2C_5100 0xA4 /* Xeon Dual Core 5100 */ 7094e901881SDale Ghent #define SMB_PRF_XEON_2C_5000 0xA5 /* Xeon Dual Core 5000 */ 7104e901881SDale Ghent #define SMB_PRF_XEON_2C_LV 0xA6 /* Xeon Dual Core LV */ 7114e901881SDale Ghent #define SMB_PRF_XEON_2C_ULV 0xA7 /* Xeon Dual Core ULV */ 7124e901881SDale Ghent #define SMB_PRF_XEON_2C_7100 0xA8 /* Xeon Dual Core 7100 */ 7134e901881SDale Ghent #define SMB_PRF_XEON_4C_5400 0xA9 /* Xeon Quad Core 5400 */ 7144e901881SDale Ghent #define SMB_PRF_XEON_4C 0xAA /* Xeon Quad Core */ 7154e901881SDale Ghent #define SMB_PRF_XEON_2C_5200 0xAB /* Xeon Dual Core 5200 */ 7164e901881SDale Ghent #define SMB_PRF_XEON_2C_7200 0xAC /* Xeon Dual Core 7200 */ 7174e901881SDale Ghent #define SMB_PRF_XEON_4C_7300 0xAD /* Xeon Quad Core 7300 */ 7184e901881SDale Ghent #define SMB_PRF_XEON_4C_7400 0xAE /* Xeon Quad Core 7400 */ 7194e901881SDale Ghent #define SMB_PRF_XEON_XC_7400 0xAF /* Xeon Multi Core 7400 */ 72084ab085aSmws #define SMB_PRF_PENTIUMIII_XEON 0xB0 /* Pentium III Xeon */ 72184ab085aSmws #define SMB_PRF_PENTIUMIII_SS 0xB1 /* Pentium III with SpeedStep */ 72284ab085aSmws #define SMB_PRF_P4 0xB2 /* Pentium 4 */ 72384ab085aSmws #define SMB_PRF_XEON 0xB3 /* Intel Xeon */ 72484ab085aSmws #define SMB_PRF_AS400 0xB4 /* AS400 */ 72584ab085aSmws #define SMB_PRF_XEON_MP 0xB5 /* Intel Xeon MP */ 72684ab085aSmws #define SMB_PRF_ATHLON_XP 0xB6 /* AMD Athlon XP */ 72742a58d9dSsethg #define SMB_PRF_ATHLON_MP 0xB7 /* AMD Athlon MP */ 72884ab085aSmws #define SMB_PRF_ITANIC2 0xB8 /* Itanium 2 */ 72984ab085aSmws #define SMB_PRF_PENTIUM_M 0xB9 /* Pentium M */ 73042a58d9dSsethg #define SMB_PRF_CELERON_D 0xBA /* Celeron D */ 73142a58d9dSsethg #define SMB_PRF_PENTIUM_D 0xBB /* Pentium D */ 73242a58d9dSsethg #define SMB_PRF_PENTIUM_EE 0xBC /* Pentium Extreme Edition */ 7334e901881SDale Ghent #define SMB_PRF_CORE_SOLO 0xBD /* Intel Core Solo */ 7344e901881SDale Ghent #define SMB_PRF_CORE2_DUO 0xBF /* Intel Core 2 Duo */ 7354e901881SDale Ghent #define SMB_PRF_CORE2_SOLO 0xC0 /* Intel Core 2 Solo */ 7364e901881SDale Ghent #define SMB_PRF_CORE2_EX 0xC1 /* Intel Core 2 Extreme */ 7374e901881SDale Ghent #define SMB_PRF_CORE2_QUAD 0xC2 /* Intel Core 2 Quad */ 7384e901881SDale Ghent #define SMB_PRF_CORE2_EX_M 0xC3 /* Intel Core 2 Extreme mobile */ 7394e901881SDale Ghent #define SMB_PRF_CORE2_DUO_M 0xC4 /* Intel Core 2 Duo mobile */ 7404e901881SDale Ghent #define SMB_PRF_CORE2_SOLO_M 0xC5 /* Intel Core 2 Solo mobile */ 7414e901881SDale Ghent #define SMB_PRF_CORE_I7 0xC6 /* Intel Core i7 */ 7424e901881SDale Ghent #define SMB_PRF_CELERON_2C 0xC7 /* Celeron Dual-Core */ 74384ab085aSmws #define SMB_PRF_IBM390 0xC8 /* IBM 390 */ 74484ab085aSmws #define SMB_PRF_G4 0xC9 /* G4 */ 74584ab085aSmws #define SMB_PRF_G5 0xCA /* G5 */ 74642a58d9dSsethg #define SMB_PRF_ESA390 0xCB /* ESA390 */ 74742a58d9dSsethg #define SMB_PRF_ZARCH 0xCC /* z/Architecture */ 7484e901881SDale Ghent #define SMB_PRF_CORE_I5 0xCD /* Intel Core i5 */ 7494e901881SDale Ghent #define SMB_PRF_CORE_I3 0xCE /* Intel Core i3 */ 7501566bc34SRobert Mustacchi #define SMB_PRF_CORE_I9 0xCF /* Intel Core i9 */ 75142a58d9dSsethg #define SMB_PRF_C7M 0xD2 /* VIA C7-M */ 75242a58d9dSsethg #define SMB_PRF_C7D 0xD3 /* VIA C7-D */ 75342a58d9dSsethg #define SMB_PRF_C7 0xD4 /* VIA C7 */ 75442a58d9dSsethg #define SMB_PRF_EDEN 0xD5 /* VIA Eden */ 7554e901881SDale Ghent #define SMB_PRF_XEON_XC 0xD6 /* Intel Xeon Multi-Core */ 7564e901881SDale Ghent #define SMB_PRF_XEON_2C_3XXX 0xD7 /* Intel Xeon Dual-Core 3xxx */ 7574e901881SDale Ghent #define SMB_PRF_XEON_4C_3XXX 0xD8 /* Intel Xeon Quad-Core 3xxx */ 7584e901881SDale Ghent #define SMB_PRF_VIA_NANO 0xD9 /* VIA Nano */ 7594e901881SDale Ghent #define SMB_PRF_XEON_2C_5XXX 0xDA /* Intel Xeon Dual-Core 5xxx */ 7604e901881SDale Ghent #define SMB_PRF_XEON_4C_5XXX 0xDB /* Intel Xeon Quad-Core 5xxx */ 7614e901881SDale Ghent #define SMB_PRF_XEON_2C_7XXX 0xDD /* Intel Xeon Dual-Core 7xxx */ 7624e901881SDale Ghent #define SMB_PRF_XEON_4C_7XXX 0xDE /* Intel Xeon Quad-Core 7xxx */ 7634e901881SDale Ghent #define SMB_PRF_XEON_XC_7XXX 0xDF /* Intel Xeon Multi-Core 7xxx */ 7644e901881SDale Ghent #define SMB_PRF_XEON_XC_3400 0xE0 /* Intel Xeon Multi-Core 3400 */ 7654e901881SDale Ghent #define SMB_PRF_OPTERON_3000 0xE4 /* AMD Opteron 3000 */ 7664e901881SDale Ghent #define SMB_PRF_SEMPRON_II 0xE5 /* AMD Sempron II */ 7674e901881SDale Ghent #define SMB_PRF_OPTERON_4C_EM 0xE6 /* AMD Opteron Quad-Core embedded */ 7684e901881SDale Ghent #define SMB_PRF_PHENOM_3C 0xE7 /* AMD Phenom Triple-Core */ 7694e901881SDale Ghent #define SMB_PRF_TURIONU_2C_M 0xE8 /* AMD Turion Ultra Dual-Core mobile */ 7704e901881SDale Ghent #define SMB_PRF_TURION_2C_M 0xE9 /* AMD Turion Dual-Core mobile */ 7714e901881SDale Ghent #define SMB_PRF_ATHLON_2C 0xEA /* AMD Athlon Dual-Core */ 7724e901881SDale Ghent #define SMB_PRF_SEMPRON_SI 0xEB /* AMD Sempron SI */ 7734e901881SDale Ghent #define SMB_PRF_PHENOM_II 0xEC /* AMD Phenom II */ 7744e901881SDale Ghent #define SMB_PRF_ATHLON_II 0xED /* AMD Athlon II */ 7754e901881SDale Ghent #define SMB_PRF_OPTERON_6C 0xEE /* AMD Opteron Six-Core */ 7764e901881SDale Ghent #define SMB_PRF_SEMPRON_M 0xEF /* AMD Sempron M */ 77784ab085aSmws #define SMB_PRF_I860 0xFA /* i860 */ 77884ab085aSmws #define SMB_PRF_I960 0xFB /* i960 */ 779e5cce96fSRobert Mustacchi #define SMB_PRF_ARMv7 0x100 /* ARMv7 */ 780e5cce96fSRobert Mustacchi #define SMB_PRF_ARMv8 0x101 /* ARMv8 */ 7811d1fc316SRobert Mustacchi #define SMB_PRF_ARMv9 0x102 /* ARMv9 */ 78242a58d9dSsethg #define SMB_PRF_SH3 0x104 /* SH-3 */ 78342a58d9dSsethg #define SMB_PRF_SH4 0x105 /* SH-4 */ 78442a58d9dSsethg #define SMB_PRF_ARM 0x118 /* ARM */ 78542a58d9dSsethg #define SMB_PRF_SARM 0x119 /* StrongARM */ 78642a58d9dSsethg #define SMB_PRF_6X86 0x12C /* 6x86 */ 78742a58d9dSsethg #define SMB_PRF_MEDIAGX 0x12D /* MediaGX */ 78842a58d9dSsethg #define SMB_PRF_MII 0x12E /* MII */ 78942a58d9dSsethg #define SMB_PRF_WINCHIP 0x140 /* WinChip */ 79042a58d9dSsethg #define SMB_PRF_DSP 0x15E /* DSP */ 79142a58d9dSsethg #define SMB_PRF_VIDEO 0x1F4 /* Video Processor */ 792176a9270SRobert Mustacchi #define SMB_PRF_RV32 0x200 /* RISC-V RV32 */ 793176a9270SRobert Mustacchi #define SMB_PRF_RV64 0x201 /* RISC-V RV64 */ 794176a9270SRobert Mustacchi #define SMB_PRF_RV128 0x202 /* RISC-V RV128 */ 7951d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_ARCH 0x258 /* LoongArch */ 7961d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_1 0x259 /* Loongson 1 Processor Family */ 7971d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_2 0x25A /* Loongson 1 Processor Family */ 7981d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3 0x25B /* Loongson 3 Processor Family */ 7991d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_2K 0x25C /* Loongson 2K Processor Family */ 8001d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3A 0x25D /* Loongson 3A Processor Family */ 8011d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3B 0x25E /* Loongson 3B Processor Family */ 8021d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3C 0x25F /* Loongson 3C Processor Family */ 8031d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3D 0x260 /* Loongson 3E Processor Family */ 8041d1fc316SRobert Mustacchi /* BEGIN CSTYLED */ 8051d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_2K_DC 0x261 /* Dual-Core Loongson 2K Processor 2xxx Series */ 8061d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3A_QC 0x26C /* Quad-Core Loongson 3A Processor 5xxx Series */ 8071d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3A_MC 0x26D /* Multi-Core Loongson 3A Processor 5xxx Series */ 8081d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3B_QC 0x26E /* Quad-Core Loongson 3B Processor 5xxx Series */ 8091d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3B_MC 0x26F /* Multi-Core Loongson 3B Processor 5xxx Series */ 8101d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3C_MC 0x270 /* Multi-Core Loongson 3C Processor 5xxx Series */ 8111d1fc316SRobert Mustacchi #define SMG_PRF_LOONG_3D_MC 0x271 /* Multi-Core Loongson 3D Processor 5xxx Series */ 8121d1fc316SRobert Mustacchi /* END CSTYLED */ 81384ab085aSmws 81484ab085aSmws /* 8154e901881SDale Ghent * SMBIOS Cache Information. See DSP0134 Section 7.8 for more information. 81684ab085aSmws * If smba_size is zero, this indicates the specified cache is not present. 817e5cce96fSRobert Mustacchi * 818e5cce96fSRobert Mustacchi * SMBIOS 3.1 added extended cache sizes. Unfortunately, we had already baked in 819e5cce96fSRobert Mustacchi * the uint32_t sizes, so we added extended uint64_t's that correspond to the 820e5cce96fSRobert Mustacchi * new fields. To make life easier for consumers, we always make sure that the 821e5cce96fSRobert Mustacchi * _maxsize2 and _size2 members are filled in with the old value if no other 822e5cce96fSRobert Mustacchi * value is present. 82384ab085aSmws */ 82484ab085aSmws typedef struct smbios_cache { 82584ab085aSmws uint32_t smba_maxsize; /* maximum installed size in bytes */ 82684ab085aSmws uint32_t smba_size; /* installed size in bytes */ 82784ab085aSmws uint16_t smba_stype; /* supported SRAM types (SMB_CAT_*) */ 82884ab085aSmws uint16_t smba_ctype; /* current SRAM type (SMB_CAT_*) */ 82984ab085aSmws uint8_t smba_speed; /* speed in nanoseconds */ 83084ab085aSmws uint8_t smba_etype; /* error correction type (SMB_CAE_*) */ 83184ab085aSmws uint8_t smba_ltype; /* logical cache type (SMB_CAG_*) */ 83284ab085aSmws uint8_t smba_assoc; /* associativity (SMB_CAA_*) */ 83384ab085aSmws uint8_t smba_level; /* cache level */ 83484ab085aSmws uint8_t smba_mode; /* cache mode (SMB_CAM_*) */ 83584ab085aSmws uint8_t smba_location; /* cache location (SMB_CAL_*) */ 83684ab085aSmws uint8_t smba_flags; /* cache flags (SMB_CAF_*) */ 837e5cce96fSRobert Mustacchi uint64_t smba_maxsize2; /* maximum installed size in bytes */ 838e5cce96fSRobert Mustacchi uint64_t smba_size2; /* installed size in bytes */ 83984ab085aSmws } smbios_cache_t; 84084ab085aSmws 84184ab085aSmws #define SMB_CAT_OTHER 0x0001 /* other */ 84284ab085aSmws #define SMB_CAT_UNKNOWN 0x0002 /* unknown */ 84384ab085aSmws #define SMB_CAT_NONBURST 0x0004 /* non-burst */ 84484ab085aSmws #define SMB_CAT_BURST 0x0008 /* burst */ 84584ab085aSmws #define SMB_CAT_PBURST 0x0010 /* pipeline burst */ 84684ab085aSmws #define SMB_CAT_SYNC 0x0020 /* synchronous */ 84784ab085aSmws #define SMB_CAT_ASYNC 0x0040 /* asynchronous */ 84884ab085aSmws 84984ab085aSmws #define SMB_CAE_OTHER 0x01 /* other */ 85084ab085aSmws #define SMB_CAE_UNKNOWN 0x02 /* unknown */ 85184ab085aSmws #define SMB_CAE_NONE 0x03 /* none */ 85284ab085aSmws #define SMB_CAE_PARITY 0x04 /* parity */ 85384ab085aSmws #define SMB_CAE_SBECC 0x05 /* single-bit ECC */ 85484ab085aSmws #define SMB_CAE_MBECC 0x06 /* multi-bit ECC */ 85584ab085aSmws 85684ab085aSmws #define SMB_CAG_OTHER 0x01 /* other */ 85784ab085aSmws #define SMB_CAG_UNKNOWN 0x02 /* unknown */ 85884ab085aSmws #define SMB_CAG_INSTR 0x03 /* instruction */ 85984ab085aSmws #define SMB_CAG_DATA 0x04 /* data */ 86084ab085aSmws #define SMB_CAG_UNIFIED 0x05 /* unified */ 86184ab085aSmws 86284ab085aSmws #define SMB_CAA_OTHER 0x01 /* other */ 86384ab085aSmws #define SMB_CAA_UNKNOWN 0x02 /* unknown */ 86484ab085aSmws #define SMB_CAA_DIRECT 0x03 /* direct mapped */ 86584ab085aSmws #define SMB_CAA_2WAY 0x04 /* 2-way set associative */ 86684ab085aSmws #define SMB_CAA_4WAY 0x05 /* 4-way set associative */ 86784ab085aSmws #define SMB_CAA_FULL 0x06 /* fully associative */ 86884ab085aSmws #define SMB_CAA_8WAY 0x07 /* 8-way set associative */ 86984ab085aSmws #define SMB_CAA_16WAY 0x08 /* 16-way set associative */ 8704e901881SDale Ghent #define SMB_CAA_12WAY 0x09 /* 12-way set associative */ 8714e901881SDale Ghent #define SMB_CAA_24WAY 0x0A /* 24-way set associative */ 8724e901881SDale Ghent #define SMB_CAA_32WAY 0x0B /* 32-way set associative */ 8734e901881SDale Ghent #define SMB_CAA_48WAY 0x0C /* 48-way set associative */ 8744e901881SDale Ghent #define SMB_CAA_64WAY 0x0D /* 64-way set associative */ 8754e901881SDale Ghent #define SMB_CAA_20WAY 0x0E /* 20-way set associative */ 87684ab085aSmws 87784ab085aSmws #define SMB_CAM_WT 0x00 /* write-through */ 87884ab085aSmws #define SMB_CAM_WB 0x01 /* write-back */ 87984ab085aSmws #define SMB_CAM_VARY 0x02 /* varies by address */ 88084ab085aSmws #define SMB_CAM_UNKNOWN 0x03 /* unknown */ 88184ab085aSmws 88284ab085aSmws #define SMB_CAL_INTERNAL 0x00 /* internal */ 88384ab085aSmws #define SMB_CAL_EXTERNAL 0x01 /* external */ 88484ab085aSmws #define SMB_CAL_RESERVED 0x02 /* reserved */ 88584ab085aSmws #define SMB_CAL_UNKNOWN 0x03 /* unknown */ 88684ab085aSmws 88784ab085aSmws #define SMB_CAF_ENABLED 0x01 /* enabled at boot time */ 88884ab085aSmws #define SMB_CAF_SOCKETED 0x02 /* cache is socketed */ 88984ab085aSmws 89084ab085aSmws /* 8914e901881SDale Ghent * SMBIOS Port Information. See DSP0134 Section 7.9 for more information. 89284ab085aSmws * The internal reference designator string is also mapped to the location. 89384ab085aSmws */ 89484ab085aSmws typedef struct smbios_port { 89584ab085aSmws const char *smbo_iref; /* internal reference designator */ 89684ab085aSmws const char *smbo_eref; /* external reference designator */ 89784ab085aSmws uint8_t smbo_itype; /* internal connector type (SMB_POC_*) */ 89884ab085aSmws uint8_t smbo_etype; /* external connector type (SMB_POC_*) */ 89984ab085aSmws uint8_t smbo_ptype; /* port type (SMB_POT_*) */ 90084ab085aSmws uint8_t smbo_pad; /* padding */ 90184ab085aSmws } smbios_port_t; 90284ab085aSmws 90384ab085aSmws #define SMB_POC_NONE 0x00 /* none */ 90484ab085aSmws #define SMB_POC_CENT 0x01 /* Centronics */ 90584ab085aSmws #define SMB_POC_MINICENT 0x02 /* Mini-Centronics */ 90684ab085aSmws #define SMB_POC_PROPRIETARY 0x03 /* proprietary */ 90784ab085aSmws #define SMB_POC_DB25M 0x04 /* DB-25 pin male */ 90884ab085aSmws #define SMB_POC_DB25F 0x05 /* DB-25 pin female */ 90984ab085aSmws #define SMB_POC_DB15M 0x06 /* DB-15 pin male */ 91084ab085aSmws #define SMB_POC_DB15F 0x07 /* DB-15 pin female */ 91184ab085aSmws #define SMB_POC_DB9M 0x08 /* DB-9 pin male */ 91284ab085aSmws #define SMB_POC_DB9F 0x09 /* DB-9 pin female */ 91384ab085aSmws #define SMB_POC_RJ11 0x0A /* RJ-11 */ 91484ab085aSmws #define SMB_POC_RJ45 0x0B /* RJ-45 */ 91584ab085aSmws #define SMB_POC_MINISCSI 0x0C /* 50-pin MiniSCSI */ 91684ab085aSmws #define SMB_POC_MINIDIN 0x0D /* Mini-DIN */ 91784ab085aSmws #define SMB_POC_MICRODIN 0x0E /* Micro-DIN */ 91884ab085aSmws #define SMB_POC_PS2 0x0F /* PS/2 */ 91984ab085aSmws #define SMB_POC_IR 0x10 /* Infrared */ 92084ab085aSmws #define SMB_POC_HPHIL 0x11 /* HP-HIL */ 92184ab085aSmws #define SMB_POC_USB 0x12 /* USB */ 92284ab085aSmws #define SMB_POC_SSA 0x13 /* SSA SCSI */ 92384ab085aSmws #define SMB_POC_DIN8M 0x14 /* Circular DIN-8 male */ 92484ab085aSmws #define SMB_POC_DIN8F 0x15 /* Circular DIN-8 female */ 92584ab085aSmws #define SMB_POC_OBIDE 0x16 /* on-board IDE */ 92684ab085aSmws #define SMB_POC_OBFLOPPY 0x17 /* on-board floppy */ 92784ab085aSmws #define SMB_POC_DI9 0x18 /* 9p dual inline (p10 cut) */ 92884ab085aSmws #define SMB_POC_DI25 0x19 /* 25p dual inline (p26 cut) */ 92984ab085aSmws #define SMB_POC_DI50 0x1A /* 50p dual inline */ 93084ab085aSmws #define SMB_POC_DI68 0x1B /* 68p dual inline */ 93184ab085aSmws #define SMB_POC_CDROM 0x1C /* on-board sound from CDROM */ 93284ab085aSmws #define SMB_POC_MINI14 0x1D /* Mini-Centronics Type 14 */ 93384ab085aSmws #define SMB_POC_MINI26 0x1E /* Mini-Centronics Type 26 */ 93484ab085aSmws #define SMB_POC_MINIJACK 0x1F /* Mini-jack (headphones) */ 93584ab085aSmws #define SMB_POC_BNC 0x20 /* BNC */ 93684ab085aSmws #define SMB_POC_1394 0x21 /* 1394 */ 9374e901881SDale Ghent #define SMB_POC_SATA 0x22 /* SAS/SATA plug receptacle */ 9381566bc34SRobert Mustacchi #define SMB_POC_USB_C 0x23 /* USB Type-C receptacle */ 93984ab085aSmws #define SMB_POC_PC98 0xA0 /* PC-98 */ 94084ab085aSmws #define SMB_POC_PC98HR 0xA1 /* PC-98Hireso */ 94184ab085aSmws #define SMB_POC_PCH98 0xA2 /* PC-H98 */ 94284ab085aSmws #define SMB_POC_PC98NOTE 0xA3 /* PC-98Note */ 94384ab085aSmws #define SMB_POC_PC98FULL 0xA4 /* PC-98Full */ 94484ab085aSmws #define SMB_POC_OTHER 0xFF /* other */ 94584ab085aSmws 94684ab085aSmws #define SMB_POT_NONE 0x00 /* none */ 94784ab085aSmws #define SMB_POT_PP_XTAT 0x01 /* Parallel Port XT/AT compat */ 94884ab085aSmws #define SMB_POT_PP_PS2 0x02 /* Parallel Port PS/2 */ 94984ab085aSmws #define SMB_POT_PP_ECP 0x03 /* Parallel Port ECP */ 95084ab085aSmws #define SMB_POT_PP_EPP 0x04 /* Parallel Port EPP */ 95184ab085aSmws #define SMB_POT_PP_ECPEPP 0x05 /* Parallel Port ECP/EPP */ 95284ab085aSmws #define SMB_POT_SP_XTAT 0x06 /* Serial Port XT/AT compat */ 95384ab085aSmws #define SMB_POT_SP_16450 0x07 /* Serial Port 16450 compat */ 95484ab085aSmws #define SMB_POT_SP_16550 0x08 /* Serial Port 16550 compat */ 95584ab085aSmws #define SMB_POT_SP_16550A 0x09 /* Serial Port 16550A compat */ 95684ab085aSmws #define SMB_POT_SCSI 0x0A /* SCSI port */ 95784ab085aSmws #define SMB_POT_MIDI 0x0B /* MIDI port */ 95884ab085aSmws #define SMB_POT_JOYSTICK 0x0C /* Joystick port */ 95984ab085aSmws #define SMB_POT_KEYBOARD 0x0D /* Keyboard port */ 96084ab085aSmws #define SMB_POT_MOUSE 0x0E /* Mouse port */ 96184ab085aSmws #define SMB_POT_SSA 0x0F /* SSA SCSI */ 96284ab085aSmws #define SMB_POT_USB 0x10 /* USB */ 96384ab085aSmws #define SMB_POT_FIREWIRE 0x11 /* FireWrite (IEEE P1394) */ 96484ab085aSmws #define SMB_POT_PCMII 0x12 /* PCMCIA Type II */ 96584ab085aSmws #define SMB_POT_PCMIIa 0x13 /* PCMCIA Type II (alternate) */ 96684ab085aSmws #define SMB_POT_PCMIII 0x14 /* PCMCIA Type III */ 96784ab085aSmws #define SMB_POT_CARDBUS 0x15 /* Cardbus */ 96884ab085aSmws #define SMB_POT_ACCESS 0x16 /* Access Bus Port */ 96984ab085aSmws #define SMB_POT_SCSI2 0x17 /* SCSI II */ 97084ab085aSmws #define SMB_POT_SCSIW 0x18 /* SCSI Wide */ 97184ab085aSmws #define SMB_POT_PC98 0x19 /* PC-98 */ 97284ab085aSmws #define SMB_POT_PC98HR 0x1A /* PC-98Hireso */ 97384ab085aSmws #define SMB_POT_PCH98 0x1B /* PC-H98 */ 97484ab085aSmws #define SMB_POT_VIDEO 0x1C /* Video port */ 97584ab085aSmws #define SMB_POT_AUDIO 0x1D /* Audio port */ 97684ab085aSmws #define SMB_POT_MODEM 0x1E /* Modem port */ 97784ab085aSmws #define SMB_POT_NETWORK 0x1F /* Network port */ 97842a58d9dSsethg #define SMB_POT_SATA 0x20 /* SATA */ 97942a58d9dSsethg #define SMB_POT_SAS 0x21 /* SAS */ 9801566bc34SRobert Mustacchi #define SMB_POT_MFDP 0x22 /* MFDP (Multi-Function Display Port) */ 9811566bc34SRobert Mustacchi #define SMB_POT_THUNDERBOLT 0x23 /* Thunderbolt */ 98284ab085aSmws #define SMB_POT_8251 0xA0 /* 8251 compatible */ 98384ab085aSmws #define SMB_POT_8251F 0xA1 /* 8251 FIFO compatible */ 98484ab085aSmws #define SMB_POT_OTHER 0xFF /* other */ 98584ab085aSmws 98684ab085aSmws /* 9874e901881SDale Ghent * SMBIOS Slot Information. See DSP0134 Section 7.10 for more information. 9884e901881SDale Ghent * See DSP0134 7.10.5 for how to interpret the value of smbl_id. 98984ab085aSmws */ 99084ab085aSmws typedef struct smbios_slot { 99184ab085aSmws const char *smbl_name; /* reference designation */ 99284ab085aSmws uint8_t smbl_type; /* slot type */ 99384ab085aSmws uint8_t smbl_width; /* slot data bus width */ 99484ab085aSmws uint8_t smbl_usage; /* current usage */ 99584ab085aSmws uint8_t smbl_length; /* slot length */ 99684ab085aSmws uint16_t smbl_id; /* slot ID */ 99784ab085aSmws uint8_t smbl_ch1; /* slot characteristics 1 */ 99884ab085aSmws uint8_t smbl_ch2; /* slot characteristics 2 */ 99903f9f63dSTom Pothier uint16_t smbl_sg; /* segment group number */ 100003f9f63dSTom Pothier uint8_t smbl_bus; /* bus number */ 100103f9f63dSTom Pothier uint8_t smbl_df; /* device/function number */ 10021566bc34SRobert Mustacchi uint8_t smbl_dbw; /* data bus width */ 10031566bc34SRobert Mustacchi uint8_t smbl_npeers; /* PCIe bifurcation peers */ 1004c6795799SRobert Mustacchi uint8_t smbl_info; /* slot info */ 1005c6795799SRobert Mustacchi uint8_t smbl_pwidth; /* slot physical width */ 1006c6795799SRobert Mustacchi uint32_t smbl_pitch; /* slot pitch in 10um */ 1007d53cdfabSRobert Mustacchi uint8_t smbl_height; /* slot height */ 100884ab085aSmws } smbios_slot_t; 100984ab085aSmws 101084ab085aSmws #define SMB_SLT_OTHER 0x01 /* other */ 101184ab085aSmws #define SMB_SLT_UNKNOWN 0x02 /* unknown */ 101284ab085aSmws #define SMB_SLT_ISA 0x03 /* ISA */ 101384ab085aSmws #define SMB_SLT_MCA 0x04 /* MCA */ 101484ab085aSmws #define SMB_SLT_EISA 0x05 /* EISA */ 101584ab085aSmws #define SMB_SLT_PCI 0x06 /* PCI */ 101684ab085aSmws #define SMB_SLT_PCMCIA 0x07 /* PCMCIA */ 101784ab085aSmws #define SMB_SLT_VLVESA 0x08 /* VL-VESA */ 101884ab085aSmws #define SMB_SLT_PROPRIETARY 0x09 /* proprietary */ 101984ab085aSmws #define SMB_SLT_PROC 0x0A /* processor card slot */ 102084ab085aSmws #define SMB_SLT_MEM 0x0B /* proprietary memory card slot */ 102184ab085aSmws #define SMB_SLT_IOR 0x0C /* I/O riser card slot */ 102284ab085aSmws #define SMB_SLT_NUBUS 0x0D /* NuBus */ 102384ab085aSmws #define SMB_SLT_PCI66 0x0E /* PCI (66MHz capable) */ 102484ab085aSmws #define SMB_SLT_AGP 0x0F /* AGP */ 102584ab085aSmws #define SMB_SLT_AGP2X 0x10 /* AGP 2X */ 102684ab085aSmws #define SMB_SLT_AGP4X 0x11 /* AGP 4X */ 102784ab085aSmws #define SMB_SLT_PCIX 0x12 /* PCI-X */ 102884ab085aSmws #define SMB_SLT_AGP8X 0x13 /* AGP 8X */ 10296734c4b0SRobert Mustacchi #define SMB_SLT_M2_1DP 0x14 /* M.2 Socket 1-DP (Mechanical Key A) */ 10306734c4b0SRobert Mustacchi #define SMB_SLT_M2_1SD 0x15 /* M.2 Socket 1-SD (Mechanical Key E) */ 10316734c4b0SRobert Mustacchi #define SMB_SLT_M2_2 0x16 /* M.2 Socket 2 (Mechanical Key B) */ 10326734c4b0SRobert Mustacchi #define SMB_SLT_M2_3 0x17 /* M.2 Socket 3 (Mechanical Key M) */ 10336734c4b0SRobert Mustacchi #define SMB_SLT_MXM_I 0x18 /* MXM Type I */ 10346734c4b0SRobert Mustacchi #define SMB_SLT_MXM_II 0x19 /* MXM Type II */ 10356734c4b0SRobert Mustacchi #define SMB_SLT_MXM_III 0x1A /* MXM Type III (standard connector) */ 10366734c4b0SRobert Mustacchi #define SMB_SLT_MXM_III_HE 0x1B /* MXM Type III (HE connector) */ 10376734c4b0SRobert Mustacchi #define SMB_SLT_MXM_V 0x1C /* MXM Type IV */ 10386734c4b0SRobert Mustacchi #define SMB_SLT_MXM3_A 0x1D /* MXM 3.0 Type A */ 10396734c4b0SRobert Mustacchi #define SMB_SLT_MXM3_B 0x1E /* MXM 3.0 Type B */ 1040c6795799SRobert Mustacchi #define SMB_SLT_PCIEG2_SFF 0x1F /* PCI Express Gen 2 SFF-8639 (U.2) */ 1041c6795799SRobert Mustacchi #define SMB_SLT_PCIEG3_SFF 0x20 /* PCI Express Gen 3 SFF-8639 (U.2) */ 1042e5cce96fSRobert Mustacchi /* 1043e5cce96fSRobert Mustacchi * These lines must be on one line for the string generating code. 1044e5cce96fSRobert Mustacchi */ 1045e5cce96fSRobert Mustacchi /* BEGIN CSTYLED */ 1046e5cce96fSRobert Mustacchi #define SMB_SLT_PCIE_M52_WBSKO 0x21 /* PCI Express Mini 52-pin with bottom-side keep-outs */ 1047e5cce96fSRobert Mustacchi #define SMB_SLT_PCIE_M52_WOBSKO 0x22 /* PCI Express Mini 52-pin without bottom-side keep-outs */ 1048e5cce96fSRobert Mustacchi /* END CSTYLED */ 1049e5cce96fSRobert Mustacchi #define SMB_SLT_PCIE_M76 0x23 /* PCI Express Mini 72-pin */ 1050c6795799SRobert Mustacchi #define SMB_SLT_PCIEG4_SFF 0x24 /* PCI Express Gen 4 SFF-8639 (U.2) */ 1051c6795799SRobert Mustacchi #define SMB_SLT_PCIEG5_SFF 0x25 /* PCI Express Gen 5 SFF-8639 (U.2) */ 1052c6795799SRobert Mustacchi #define SMB_SLT_OCP3_SFF 0x26 /* OCP NIC 3.0 Small Form Factor */ 1053c6795799SRobert Mustacchi #define SMB_SLT_OCP3_LFF 0x27 /* OCP NIC 3.0 Large Form Factor */ 1054c6795799SRobert Mustacchi #define SMB_SLT_OCP_PRE 0x28 /* OCP NIC prior to 3.0 */ 1055176a9270SRobert Mustacchi #define SMB_SLT_CXL1 0x30 /* CXL Flexbus 1.0 */ 105684ab085aSmws #define SMB_SLT_PC98_C20 0xA0 /* PC-98/C20 */ 105784ab085aSmws #define SMB_SLT_PC98_C24 0xA1 /* PC-98/C24 */ 105884ab085aSmws #define SMB_SLT_PC98_E 0xA2 /* PC-98/E */ 105984ab085aSmws #define SMB_SLT_PC98_LB 0xA3 /* PC-98/Local Bus */ 106084ab085aSmws #define SMB_SLT_PC98_C 0xA4 /* PC-98/Card */ 106184ab085aSmws #define SMB_SLT_PCIE 0xA5 /* PCI Express */ 106242a58d9dSsethg #define SMB_SLT_PCIE1 0xA6 /* PCI Express x1 */ 106342a58d9dSsethg #define SMB_SLT_PCIE2 0xA7 /* PCI Express x2 */ 106442a58d9dSsethg #define SMB_SLT_PCIE4 0xA8 /* PCI Express x4 */ 106542a58d9dSsethg #define SMB_SLT_PCIE8 0xA9 /* PCI Express x8 */ 106642a58d9dSsethg #define SMB_SLT_PCIE16 0xAA /* PCI Express x16 */ 10674e901881SDale Ghent #define SMB_SLT_PCIE2G 0xAB /* PCI Exp. Gen 2 */ 10684e901881SDale Ghent #define SMB_SLT_PCIE2G1 0xAC /* PCI Exp. Gen 2 x1 */ 10694e901881SDale Ghent #define SMB_SLT_PCIE2G2 0xAD /* PCI Exp. Gen 2 x2 */ 10704e901881SDale Ghent #define SMB_SLT_PCIE2G4 0xAE /* PCI Exp. Gen 2 x4 */ 10714e901881SDale Ghent #define SMB_SLT_PCIE2G8 0xAF /* PCI Exp. Gen 2 x8 */ 10724e901881SDale Ghent #define SMB_SLT_PCIE2G16 0xB0 /* PCI Exp. Gen 2 x16 */ 10734e901881SDale Ghent #define SMB_SLT_PCIE3G 0xB1 /* PCI Exp. Gen 3 */ 10744e901881SDale Ghent #define SMB_SLT_PCIE3G1 0xB2 /* PCI Exp. Gen 3 x1 */ 10754e901881SDale Ghent #define SMB_SLT_PCIE3G2 0xB3 /* PCI Exp. Gen 3 x2 */ 10764e901881SDale Ghent #define SMB_SLT_PCIE3G4 0xB4 /* PCI Exp. Gen 3 x4 */ 10774e901881SDale Ghent #define SMB_SLT_PCIE3G8 0xB5 /* PCI Exp. Gen 3 x8 */ 10784e901881SDale Ghent #define SMB_SLT_PCIE3G16 0xB6 /* PCI Exp. Gen 3 x16 */ 1079176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G 0xB8 /* PCI Exp. Gen 4 */ 1080176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G1 0xB9 /* PCI Exp. Gen 4 x1 */ 1081176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G2 0xBA /* PCI Exp. Gen 4 x2 */ 1082176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G4 0xBB /* PCI Exp. Gen 4 x4 */ 1083176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G8 0xBC /* PCI Exp. Gen 4 x8 */ 1084176a9270SRobert Mustacchi #define SMB_SLT_PCIE4G16 0xBD /* PCI Exp. Gen 4 x16 */ 1085c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G 0xBE /* PCI Exp. Gen 5 */ 1086c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G1 0xBF /* PCI Exp. Gen 5 x1 */ 1087c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G2 0xC0 /* PCI Exp. Gen 5 x2 */ 1088c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G4 0xC1 /* PCI Exp. Gen 5 x4 */ 1089c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G8 0xC2 /* PCI Exp. Gen 5 x8 */ 1090c6795799SRobert Mustacchi #define SMB_SLT_PCIE5G16 0xC3 /* PCI Exp. Gen 5 x16 */ 1091c6795799SRobert Mustacchi #define SMB_SLT_PCIEG6P 0xC4 /* PCI Exp. Gen 6+ */ 1092c6795799SRobert Mustacchi #define SMB_SLT_EDSFF_E1 0xC5 /* Ent. and DC 1U E1 Form Factor */ 1093c6795799SRobert Mustacchi #define SMB_SLT_EDSFF_E3 0xC6 /* Ent. and DC 3" E3 Form Factor */ 109484ab085aSmws 109584ab085aSmws #define SMB_SLW_OTHER 0x01 /* other */ 109684ab085aSmws #define SMB_SLW_UNKNOWN 0x02 /* unknown */ 109784ab085aSmws #define SMB_SLW_8 0x03 /* 8 bit */ 109884ab085aSmws #define SMB_SLW_16 0x04 /* 16 bit */ 109984ab085aSmws #define SMB_SLW_32 0x05 /* 32 bit */ 110084ab085aSmws #define SMB_SLW_64 0x06 /* 64 bit */ 110184ab085aSmws #define SMB_SLW_128 0x07 /* 128 bit */ 110284ab085aSmws #define SMB_SLW_1X 0x08 /* 1x or x1 */ 110384ab085aSmws #define SMB_SLW_2X 0x09 /* 2x or x2 */ 110484ab085aSmws #define SMB_SLW_4X 0x0A /* 4x or x4 */ 110584ab085aSmws #define SMB_SLW_8X 0x0B /* 8x or x8 */ 110684ab085aSmws #define SMB_SLW_12X 0x0C /* 12x or x12 */ 110784ab085aSmws #define SMB_SLW_16X 0x0D /* 16x or x16 */ 110884ab085aSmws #define SMB_SLW_32X 0x0E /* 32x or x32 */ 110984ab085aSmws 111084ab085aSmws #define SMB_SLU_OTHER 0x01 /* other */ 111184ab085aSmws #define SMB_SLU_UNKNOWN 0x02 /* unknown */ 111284ab085aSmws #define SMB_SLU_AVAIL 0x03 /* available */ 111384ab085aSmws #define SMB_SLU_INUSE 0x04 /* in use */ 111484ab085aSmws 111584ab085aSmws #define SMB_SLL_OTHER 0x01 /* other */ 111684ab085aSmws #define SMB_SLL_UNKNOWN 0x02 /* unknown */ 111784ab085aSmws #define SMB_SLL_SHORT 0x03 /* short length */ 111884ab085aSmws #define SMB_SLL_LONG 0x04 /* long length */ 1119c6795799SRobert Mustacchi #define SMB_SLL_2IN5 0x05 /* 2.5" drive form factor */ 1120c6795799SRobert Mustacchi #define SMB_SLL_3IN5 0x06 /* 3.5" drive form factor */ 112184ab085aSmws 112284ab085aSmws #define SMB_SLCH1_UNKNOWN 0x01 /* characteristics unknown */ 112384ab085aSmws #define SMB_SLCH1_5V 0x02 /* provides 5.0V */ 112484ab085aSmws #define SMB_SLCH1_33V 0x04 /* provides 3.3V */ 112584ab085aSmws #define SMB_SLCH1_SHARED 0x08 /* opening shared with other slot */ 112684ab085aSmws #define SMB_SLCH1_PC16 0x10 /* slot supports PC Card-16 */ 112784ab085aSmws #define SMB_SLCH1_PCCB 0x20 /* slot supports CardBus */ 112884ab085aSmws #define SMB_SLCH1_PCZV 0x40 /* slot supports Zoom Video */ 112984ab085aSmws #define SMB_SLCH1_PCMRR 0x80 /* slot supports Modem Ring Resume */ 113084ab085aSmws 113184ab085aSmws #define SMB_SLCH2_PME 0x01 /* slot supports PME# signal */ 113284ab085aSmws #define SMB_SLCH2_HOTPLUG 0x02 /* slot supports hot-plug devices */ 113384ab085aSmws #define SMB_SLCH2_SMBUS 0x04 /* slot supports SMBus signal */ 11341566bc34SRobert Mustacchi #define SMB_SLCH2_BIFUR 0x08 /* slot supports PCIe bifurcation */ 1135c6795799SRobert Mustacchi #define SMB_SLCH2_SURPREM 0x10 /* slot supports surprise removal */ 1136c6795799SRobert Mustacchi #define SMB_SLCH2_CXL1 0x20 /* Flexbus slot, CXL 1.0 capable */ 1137c6795799SRobert Mustacchi #define SMB_SLCH2_CXL2 0x40 /* Flexbus slot, CXL 2.0 capable */ 11386bc074b1SRobert Mustacchi #define SMB_SLCH2_CXL3 0x80 /* Flexbus slot, CXL 3.0 capable */ 11391566bc34SRobert Mustacchi 1140d53cdfabSRobert Mustacchi #define SMB_SLHT_NA 0x00 /* not applicable */ 1141d53cdfabSRobert Mustacchi #define SMB_SLHT_OTHER 0x01 /* other */ 1142d53cdfabSRobert Mustacchi #define SMB_SLHT_UNKNOWN 0x02 /* unknown */ 1143d53cdfabSRobert Mustacchi #define SMB_SLHT_FULL 0x03 /* full height */ 1144d53cdfabSRobert Mustacchi #define SMB_SLHT_LP 0x04 /* low profile */ 1145d53cdfabSRobert Mustacchi 11461566bc34SRobert Mustacchi /* 11471566bc34SRobert Mustacchi * SMBIOS 7.10.9 Slot Peer Devices 11481566bc34SRobert Mustacchi * 11491566bc34SRobert Mustacchi * This structure represents an optional peer device that may be part of an 11501566bc34SRobert Mustacchi * SMBIOS 3.2 slot. 11511566bc34SRobert Mustacchi */ 11521566bc34SRobert Mustacchi typedef struct smbios_slot_peer { 11531566bc34SRobert Mustacchi uint16_t smblp_group; /* peer segment group number */ 11541566bc34SRobert Mustacchi uint8_t smblp_bus; /* peer bus number */ 11551566bc34SRobert Mustacchi uint8_t smblp_device; /* peer device number */ 11561566bc34SRobert Mustacchi uint8_t smblp_function; /* peer function number */ 11571566bc34SRobert Mustacchi uint8_t smblp_data_width; /* peer data bus width */ 11581566bc34SRobert Mustacchi } smbios_slot_peer_t; 115984ab085aSmws 116084ab085aSmws /* 11614e901881SDale Ghent * SMBIOS On-Board Device Information. See DSP0134 Section 7.11 for more 116284ab085aSmws * information. Any number of on-board device sections may be present, each 116384ab085aSmws * containing one or more records. The smbios_info_obdevs() function permits 116484ab085aSmws * the caller to retrieve one or more of the records from a given section. 116584ab085aSmws */ 116684ab085aSmws typedef struct smbios_obdev { 116784ab085aSmws const char *smbd_name; /* description string for this device */ 116884ab085aSmws uint8_t smbd_type; /* type code (SMB_OBT_*) */ 116984ab085aSmws uint8_t smbd_enabled; /* boolean (device is enabled) */ 117084ab085aSmws } smbios_obdev_t; 117184ab085aSmws 117284ab085aSmws #define SMB_OBT_OTHER 0x01 /* other */ 117384ab085aSmws #define SMB_OBT_UNKNOWN 0x02 /* unknown */ 117484ab085aSmws #define SMB_OBT_VIDEO 0x03 /* video */ 117584ab085aSmws #define SMB_OBT_SCSI 0x04 /* scsi */ 117684ab085aSmws #define SMB_OBT_ETHERNET 0x05 /* ethernet */ 117784ab085aSmws #define SMB_OBT_TOKEN 0x06 /* token ring */ 117884ab085aSmws #define SMB_OBT_SOUND 0x07 /* sound */ 117942a58d9dSsethg #define SMB_OBT_PATA 0x08 /* pata */ 118042a58d9dSsethg #define SMB_OBT_SATA 0x09 /* sata */ 118142a58d9dSsethg #define SMB_OBT_SAS 0x0A /* sas */ 118284ab085aSmws 118384ab085aSmws /* 11844e901881SDale Ghent * SMBIOS BIOS Language Information. See DSP0134 Section 7.14 for more 118584ab085aSmws * information. The smbios_info_strtab() function can be applied using a 118684ab085aSmws * count of smbla_num to retrieve the other possible language settings. 118784ab085aSmws */ 118884ab085aSmws typedef struct smbios_lang { 118984ab085aSmws const char *smbla_cur; /* current language setting */ 119084ab085aSmws uint_t smbla_fmt; /* language name format (see below) */ 119184ab085aSmws uint_t smbla_num; /* number of installed languages */ 119284ab085aSmws } smbios_lang_t; 119384ab085aSmws 119484ab085aSmws #define SMB_LFMT_LONG 0 /* <ISO639>|<ISO3166>|Encoding Method */ 119584ab085aSmws #define SMB_LFMT_SHORT 1 /* <ISO930><ISO3166> */ 119684ab085aSmws 119784ab085aSmws /* 11984e901881SDale Ghent * SMBIOS System Event Log Information. See DSP0134 Section 7.16 for more 119984ab085aSmws * information. Accessing the event log itself requires additional interfaces. 120084ab085aSmws */ 120184ab085aSmws typedef struct smbios_evtype { 120284ab085aSmws uint8_t smbevt_ltype; /* log type */ 120384ab085aSmws uint8_t smbevt_dtype; /* variable data format type */ 120484ab085aSmws } smbios_evtype_t; 120584ab085aSmws 120684ab085aSmws typedef struct smbios_evlog { 120784ab085aSmws size_t smbev_size; /* size in bytes of log area */ 120884ab085aSmws size_t smbev_hdr; /* offset or index of header */ 120984ab085aSmws size_t smbev_data; /* offset or index of data */ 121084ab085aSmws uint8_t smbev_method; /* data access method (see below) */ 121184ab085aSmws uint8_t smbev_flags; /* flags (see below) */ 121284ab085aSmws uint8_t smbev_format; /* log header format (see below) */ 121384ab085aSmws uint8_t smbev_pad; /* padding */ 121484ab085aSmws uint32_t smbev_token; /* data update change token */ 121584ab085aSmws union { 121684ab085aSmws struct { 121784ab085aSmws uint16_t evi_iaddr; /* index address */ 121884ab085aSmws uint16_t evi_daddr; /* data address */ 121984ab085aSmws } eva_io; /* i/o address for SMB_EVM_XxY */ 122084ab085aSmws uint32_t eva_addr; /* address for SMB_EVM_MEM32 */ 122184ab085aSmws uint16_t eva_gpnv; /* handle for SMB_EVM_GPNV */ 122284ab085aSmws } smbev_addr; 122384ab085aSmws uint32_t smbev_typec; /* number of type descriptors */ 122484ab085aSmws const smbios_evtype_t *smbev_typev; /* type descriptor array */ 122584ab085aSmws } smbios_evlog_t; 122684ab085aSmws 122784ab085aSmws #define SMB_EVM_1x1i_1x1d 0 /* I/O: 1 1b idx port, 1 1b data port */ 122884ab085aSmws #define SMB_EVM_2x1i_1x1d 1 /* I/O: 2 1b idx port, 1 1b data port */ 122984ab085aSmws #define SMB_EVM_1x2i_1x1d 2 /* I/O: 1 2b idx port, 1 1b data port */ 123084ab085aSmws #define SMB_EVM_MEM32 3 /* Memory-Mapped 32-bit Physical Addr */ 123184ab085aSmws #define SMB_EVM_GPNV 4 /* GP Non-Volatile API Access */ 123284ab085aSmws 123384ab085aSmws #define SMB_EVFL_VALID 0x1 /* log area valid */ 123484ab085aSmws #define SMB_EVFL_FULL 0x2 /* log area full */ 123584ab085aSmws 123684ab085aSmws #define SMB_EVHF_NONE 0 /* no log headers used */ 123784ab085aSmws #define SMB_EVHF_F1 1 /* DMTF log header type 1 */ 123884ab085aSmws 123984ab085aSmws /* 12404e901881SDale Ghent * SMBIOS Physical Memory Array Information. See DSP0134 Section 7.17 for 124184ab085aSmws * more information. This describes a collection of physical memory devices. 124284ab085aSmws */ 124384ab085aSmws typedef struct smbios_memarray { 124484ab085aSmws uint8_t smbma_location; /* physical device location */ 124584ab085aSmws uint8_t smbma_use; /* physical device functional purpose */ 124684ab085aSmws uint8_t smbma_ecc; /* error detect/correct mechanism */ 124784ab085aSmws uint8_t smbma_pad0; /* padding */ 124884ab085aSmws uint32_t smbma_pad1; /* padding */ 124984ab085aSmws uint32_t smbma_ndevs; /* number of slots or sockets */ 125084ab085aSmws id_t smbma_err; /* handle of error (if any) */ 125184ab085aSmws uint64_t smbma_size; /* maximum capacity in bytes */ 125284ab085aSmws } smbios_memarray_t; 125384ab085aSmws 125484ab085aSmws #define SMB_MAL_OTHER 0x01 /* other */ 125584ab085aSmws #define SMB_MAL_UNKNOWN 0x02 /* unknown */ 125684ab085aSmws #define SMB_MAL_SYSMB 0x03 /* system board or motherboard */ 125784ab085aSmws #define SMB_MAL_ISA 0x04 /* ISA add-on card */ 125884ab085aSmws #define SMB_MAL_EISA 0x05 /* EISA add-on card */ 125984ab085aSmws #define SMB_MAL_PCI 0x06 /* PCI add-on card */ 126084ab085aSmws #define SMB_MAL_MCA 0x07 /* MCA add-on card */ 126184ab085aSmws #define SMB_MAL_PCMCIA 0x08 /* PCMCIA add-on card */ 126284ab085aSmws #define SMB_MAL_PROP 0x09 /* proprietary add-on card */ 126384ab085aSmws #define SMB_MAL_NUBUS 0x0A /* NuBus */ 126484ab085aSmws #define SMB_MAL_PC98C20 0xA0 /* PC-98/C20 add-on card */ 126584ab085aSmws #define SMB_MAL_PC98C24 0xA1 /* PC-98/C24 add-on card */ 126684ab085aSmws #define SMB_MAL_PC98E 0xA2 /* PC-98/E add-on card */ 126784ab085aSmws #define SMB_MAL_PC98LB 0xA3 /* PC-98/Local bus add-on card */ 1268c6795799SRobert Mustacchi #define SMB_MAL_CXL1 0xA4 /* CXL add-on card */ 126984ab085aSmws 127084ab085aSmws #define SMB_MAU_OTHER 0x01 /* other */ 127184ab085aSmws #define SMB_MAU_UNKNOWN 0x02 /* unknown */ 127284ab085aSmws #define SMB_MAU_SYSTEM 0x03 /* system memory */ 127384ab085aSmws #define SMB_MAU_VIDEO 0x04 /* video memory */ 127484ab085aSmws #define SMB_MAU_FLASH 0x05 /* flash memory */ 127584ab085aSmws #define SMB_MAU_NVRAM 0x06 /* non-volatile RAM */ 127684ab085aSmws #define SMB_MAU_CACHE 0x07 /* cache memory */ 127784ab085aSmws 127884ab085aSmws #define SMB_MAE_OTHER 0x01 /* other */ 127984ab085aSmws #define SMB_MAE_UNKNOWN 0x02 /* unknown */ 128084ab085aSmws #define SMB_MAE_NONE 0x03 /* none */ 128184ab085aSmws #define SMB_MAE_PARITY 0x04 /* parity */ 128284ab085aSmws #define SMB_MAE_SECC 0x05 /* single-bit ECC */ 128384ab085aSmws #define SMB_MAE_MECC 0x06 /* multi-bit ECC */ 128484ab085aSmws #define SMB_MAE_CRC 0x07 /* CRC */ 128584ab085aSmws 128684ab085aSmws /* 12874e901881SDale Ghent * SMBIOS Memory Device Information. See DSP0134 Section 7.18 for more 128884ab085aSmws * information. One or more of these structures are associated with each 128984ab085aSmws * smbios_memarray_t. A structure is present even for unpopulated sockets. 129084ab085aSmws * Unknown values are set to -1. A smbmd_size of 0 indicates unpopulated. 129184ab085aSmws * WARNING: Some BIOSes appear to export the *maximum* size of the device 129284ab085aSmws * that can appear in the corresponding socket as opposed to the current one. 129384ab085aSmws */ 129484ab085aSmws typedef struct smbios_memdevice { 129584ab085aSmws id_t smbmd_array; /* handle of physical memory array */ 129684ab085aSmws id_t smbmd_error; /* handle of memory error data */ 129784ab085aSmws uint32_t smbmd_twidth; /* total width in bits including ecc */ 129884ab085aSmws uint32_t smbmd_dwidth; /* data width in bits */ 129984ab085aSmws uint64_t smbmd_size; /* size in bytes (see note above) */ 130084ab085aSmws uint8_t smbmd_form; /* form factor */ 130184ab085aSmws uint8_t smbmd_set; /* set (0x00=none, 0xFF=unknown) */ 130284ab085aSmws uint8_t smbmd_type; /* memory type */ 130384ab085aSmws uint8_t smbmd_pad; /* padding */ 130484ab085aSmws uint32_t smbmd_flags; /* flags (see below) */ 1305e5cce96fSRobert Mustacchi uint32_t smbmd_speed; /* speed in MT/s */ 130684ab085aSmws const char *smbmd_dloc; /* physical device locator string */ 130784ab085aSmws const char *smbmd_bloc; /* physical bank locator string */ 13084e901881SDale Ghent uint8_t smbmd_rank; /* rank */ 13094e901881SDale Ghent uint16_t smbmd_clkspeed; /* configured clock speed */ 13104e901881SDale Ghent uint16_t smbmd_minvolt; /* minimum voltage */ 13114e901881SDale Ghent uint16_t smbmd_maxvolt; /* maximum voltage */ 13124e901881SDale Ghent uint16_t smbmd_confvolt; /* configured voltage */ 13131566bc34SRobert Mustacchi uint8_t smbmd_memtech; /* memory technology */ 13141566bc34SRobert Mustacchi uint32_t smbmd_opcap_flags; /* operating mode capability */ 13151566bc34SRobert Mustacchi const char *smbmd_firmware_rev; /* firmware rev */ 13161566bc34SRobert Mustacchi uint16_t smbmd_modmfg_id; /* JEDEC module mfg id */ 13171566bc34SRobert Mustacchi uint16_t smbmd_modprod_id; /* JEDEC module product id */ 13181566bc34SRobert Mustacchi uint16_t smbmd_cntrlmfg_id; /* JEDEC controller mfg id */ 13191566bc34SRobert Mustacchi uint16_t smbmd_cntrlprod_id; /* JEDEC controller prod id */ 13201566bc34SRobert Mustacchi uint64_t smbmd_nvsize; /* non-volatile size in bytes */ 13211566bc34SRobert Mustacchi uint64_t smbmd_volatile_size; /* volatile size in bytes */ 13221566bc34SRobert Mustacchi uint64_t smbmd_cache_size; /* cache size in bytes */ 13231566bc34SRobert Mustacchi uint64_t smbmd_logical_size; /* logical size in bytes */ 1324176a9270SRobert Mustacchi uint64_t smbmd_extspeed; /* extended device speed */ 1325176a9270SRobert Mustacchi uint64_t smbmd_extclkspeed; /* extended configured speed */ 13266bc074b1SRobert Mustacchi uint16_t smbmd_pmic0_mfgid; /* JEDEC PMIC0 mfg id */ 13276bc074b1SRobert Mustacchi uint16_t smbmd_pmic0_rev; /* JEDEC PMIC0 revision id */ 13286bc074b1SRobert Mustacchi uint16_t smbmd_rcd_mfgid; /* JEDEC RCD mfg id */ 13296bc074b1SRobert Mustacchi uint16_t smbmd_rcd_rev; /* JEDEC RCD revision id */ 133084ab085aSmws } smbios_memdevice_t; 133184ab085aSmws 13326bc074b1SRobert Mustacchi #define SMB_MD_MFG_UNKNOWN 0x0000 13336bc074b1SRobert Mustacchi #define SMB_MD_REV_UNKNOWN 0xff00 13346bc074b1SRobert Mustacchi 133584ab085aSmws #define SMB_MDFF_OTHER 0x01 /* other */ 133684ab085aSmws #define SMB_MDFF_UNKNOWN 0x02 /* unknown */ 133784ab085aSmws #define SMB_MDFF_SIMM 0x03 /* SIMM */ 133884ab085aSmws #define SMB_MDFF_SIP 0x04 /* SIP */ 133984ab085aSmws #define SMB_MDFF_CHIP 0x05 /* chip */ 134084ab085aSmws #define SMB_MDFF_DIP 0x06 /* DIP */ 134184ab085aSmws #define SMB_MDFF_ZIP 0x07 /* ZIP */ 134284ab085aSmws #define SMB_MDFF_PROP 0x08 /* proprietary card */ 134384ab085aSmws #define SMB_MDFF_DIMM 0x09 /* DIMM */ 134484ab085aSmws #define SMB_MDFF_TSOP 0x0A /* TSOP */ 134584ab085aSmws #define SMB_MDFF_CHIPROW 0x0B /* row of chips */ 134684ab085aSmws #define SMB_MDFF_RIMM 0x0C /* RIMM */ 134784ab085aSmws #define SMB_MDFF_SODIMM 0x0D /* SODIMM */ 134884ab085aSmws #define SMB_MDFF_SRIMM 0x0E /* SRIMM */ 134942a58d9dSsethg #define SMB_MDFF_FBDIMM 0x0F /* FBDIMM */ 1350176a9270SRobert Mustacchi #define SMB_MDFF_DIE 0x10 /* die */ 135184ab085aSmws 135284ab085aSmws #define SMB_MDT_OTHER 0x01 /* other */ 135384ab085aSmws #define SMB_MDT_UNKNOWN 0x02 /* unknown */ 135484ab085aSmws #define SMB_MDT_DRAM 0x03 /* DRAM */ 135584ab085aSmws #define SMB_MDT_EDRAM 0x04 /* EDRAM */ 135684ab085aSmws #define SMB_MDT_VRAM 0x05 /* VRAM */ 135784ab085aSmws #define SMB_MDT_SRAM 0x06 /* SRAM */ 135884ab085aSmws #define SMB_MDT_RAM 0x07 /* RAM */ 135984ab085aSmws #define SMB_MDT_ROM 0x08 /* ROM */ 136084ab085aSmws #define SMB_MDT_FLASH 0x09 /* FLASH */ 136184ab085aSmws #define SMB_MDT_EEPROM 0x0A /* EEPROM */ 136284ab085aSmws #define SMB_MDT_FEPROM 0x0B /* FEPROM */ 136384ab085aSmws #define SMB_MDT_EPROM 0x0C /* EPROM */ 136484ab085aSmws #define SMB_MDT_CDRAM 0x0D /* CDRAM */ 136584ab085aSmws #define SMB_MDT_3DRAM 0x0E /* 3DRAM */ 136684ab085aSmws #define SMB_MDT_SDRAM 0x0F /* SDRAM */ 136784ab085aSmws #define SMB_MDT_SGRAM 0x10 /* SGRAM */ 136884ab085aSmws #define SMB_MDT_RDRAM 0x11 /* RDRAM */ 136984ab085aSmws #define SMB_MDT_DDR 0x12 /* DDR */ 137084ab085aSmws #define SMB_MDT_DDR2 0x13 /* DDR2 */ 137142a58d9dSsethg #define SMB_MDT_DDR2FBDIMM 0x14 /* DDR2 FBDIMM */ 13724e901881SDale Ghent #define SMB_MDT_DDR3 0x18 /* DDR3 */ 13734e901881SDale Ghent #define SMB_MDT_FBD2 0x19 /* FBD2 */ 13746734c4b0SRobert Mustacchi #define SMB_MDT_DDR4 0x1A /* DDR4 */ 13756734c4b0SRobert Mustacchi #define SMB_MDT_LPDDR 0x1B /* LPDDR */ 13766734c4b0SRobert Mustacchi #define SMB_MDT_LPDDR2 0x1C /* LPDDR2 */ 13776734c4b0SRobert Mustacchi #define SMB_MDT_LPDDR3 0x1D /* LPDDR3 */ 13786734c4b0SRobert Mustacchi #define SMB_MDT_LPDDR4 0x1E /* LPDDR4 */ 13791566bc34SRobert Mustacchi #define SMB_MDT_LOGNV 0x1F /* Logical non-volatile device */ 1380176a9270SRobert Mustacchi #define SMB_MDT_HBM 0x20 /* High Bandwidth Memory */ 1381176a9270SRobert Mustacchi #define SMB_MDT_HBM2 0x21 /* High Bandwidth Memory 2 */ 1382c6795799SRobert Mustacchi #define SMB_MDT_DDR5 0x22 /* DDR5 */ 1383c6795799SRobert Mustacchi #define SMB_MDT_LPDDR5 0x23 /* LPDDR5 */ 13841d1fc316SRobert Mustacchi #define SMB_MDT_HBM3 0x24 /* HBM3 */ 138584ab085aSmws 138684ab085aSmws #define SMB_MDF_OTHER 0x0002 /* other */ 138784ab085aSmws #define SMB_MDF_UNKNOWN 0x0004 /* unknown */ 138884ab085aSmws #define SMB_MDF_FASTPG 0x0008 /* fast-paged */ 138984ab085aSmws #define SMB_MDF_STATIC 0x0010 /* static column */ 139084ab085aSmws #define SMB_MDF_PSTATIC 0x0020 /* pseudo-static */ 139184ab085aSmws #define SMB_MDF_RAMBUS 0x0040 /* RAMBUS */ 139284ab085aSmws #define SMB_MDF_SYNC 0x0080 /* synchronous */ 139384ab085aSmws #define SMB_MDF_CMOS 0x0100 /* CMOS */ 139484ab085aSmws #define SMB_MDF_EDO 0x0200 /* EDO */ 139584ab085aSmws #define SMB_MDF_WDRAM 0x0400 /* Window DRAM */ 139684ab085aSmws #define SMB_MDF_CDRAM 0x0800 /* Cache DRAM */ 139784ab085aSmws #define SMB_MDF_NV 0x1000 /* non-volatile */ 13984e901881SDale Ghent #define SMB_MDF_REG 0x2000 /* Registered (Buffered) */ 13994e901881SDale Ghent #define SMB_MDF_UNREG 0x4000 /* Unregistered (Unbuffered) */ 14004e901881SDale Ghent #define SMB_MDF_LRDIMM 0x8000 /* LRDIMM */ 14014e901881SDale Ghent 14024e901881SDale Ghent #define SMB_MDR_SINGLE 0x01 /* single */ 14034e901881SDale Ghent #define SMB_MDR_DUAL 0x02 /* dual */ 14044e901881SDale Ghent #define SMB_MDR_QUAD 0x04 /* quad */ 14054e901881SDale Ghent #define SMB_MDR_OCTAL 0x08 /* octal */ 140684ab085aSmws 14071566bc34SRobert Mustacchi #define SMB_MTECH_OTHER 0x01 /* other */ 14081566bc34SRobert Mustacchi #define SMB_MTECH_UNKNOWN 0x02 /* unknown */ 14091566bc34SRobert Mustacchi #define SMB_MTECH_DRAM 0x03 /* DRAM */ 14101566bc34SRobert Mustacchi #define SMB_MTECH_NVDIMM_N 0x04 /* NVDIMM-N */ 14111566bc34SRobert Mustacchi #define SMB_MTECH_NVDIMM_F 0x05 /* NVDIMM-F */ 14121566bc34SRobert Mustacchi #define SMB_MTECH_NVDIMM_P 0x06 /* NVDIMM-P */ 1413c6795799SRobert Mustacchi #define SMB_MTECH_INTCPM 0x07 /* Intel Optane persistent memory */ 14141566bc34SRobert Mustacchi 14159f9cceb6SRobert Mustacchi #define SMB_MOMC_RESERVED 0x01 /* reserved */ 14169f9cceb6SRobert Mustacchi #define SMB_MOMC_OTHER 0x02 /* other */ 14179f9cceb6SRobert Mustacchi #define SMB_MOMC_UNKNOWN 0x04 /* unknown */ 14189f9cceb6SRobert Mustacchi #define SMB_MOMC_VOLATILE 0x08 /* Volatile memory */ 14199f9cceb6SRobert Mustacchi #define SMB_MOMC_BYTE_PM 0x10 /* Byte-accessible persistent memory */ 14209f9cceb6SRobert Mustacchi #define SMB_MOMC_BLOCK_PM 0x20 /* Block-accessible persistent memory */ 14211566bc34SRobert Mustacchi 142284ab085aSmws /* 14234e901881SDale Ghent * SMBIOS Memory Array Mapped Address. See DSP0134 Section 7.20 for more 142484ab085aSmws * information. We convert start/end addresses into addr/size for convenience. 142584ab085aSmws */ 142684ab085aSmws typedef struct smbios_memarrmap { 142784ab085aSmws id_t smbmam_array; /* physical memory array handle */ 142884ab085aSmws uint32_t smbmam_width; /* number of devices that form a row */ 142984ab085aSmws uint64_t smbmam_addr; /* physical address of mapping */ 143084ab085aSmws uint64_t smbmam_size; /* size in bytes of address range */ 143184ab085aSmws } smbios_memarrmap_t; 143284ab085aSmws 143384ab085aSmws /* 14344e901881SDale Ghent * SMBIOS Memory Device Mapped Address. See DSP0134 Section 7.21 for more 143584ab085aSmws * information. We convert start/end addresses into addr/size for convenience. 143684ab085aSmws */ 143784ab085aSmws typedef struct smbios_memdevmap { 143884ab085aSmws id_t smbmdm_device; /* memory device handle */ 143984ab085aSmws id_t smbmdm_arrmap; /* memory array mapped address handle */ 144084ab085aSmws uint64_t smbmdm_addr; /* physical address of mapping */ 144184ab085aSmws uint64_t smbmdm_size; /* size in bytes of address range */ 144284ab085aSmws uint8_t smbmdm_rpos; /* partition row position */ 144384ab085aSmws uint8_t smbmdm_ipos; /* interleave position */ 144484ab085aSmws uint8_t smbmdm_idepth; /* interleave data depth */ 144584ab085aSmws } smbios_memdevmap_t; 144684ab085aSmws 14471d77dcdaSRobert Mustacchi /* 14481d77dcdaSRobert Mustacchi * SMBIOS Builtin Pointing Device (SMB_TYPE_POINTDEV). See DSP0134 Sectin 7.22 14491d77dcdaSRobert Mustacchi * for more information. 14501d77dcdaSRobert Mustacchi */ 14511d77dcdaSRobert Mustacchi typedef struct smbios_pointdev { 14521d77dcdaSRobert Mustacchi uint16_t smbpd_type; /* device type */ 14531d77dcdaSRobert Mustacchi uint16_t smbpd_iface; /* device information */ 14541d77dcdaSRobert Mustacchi uint8_t smbpd_nbuttons; /* number of buttons */ 14551d77dcdaSRobert Mustacchi } smbios_pointdev_t; 14561d77dcdaSRobert Mustacchi 14571d77dcdaSRobert Mustacchi #define SMB_PDT_OTHER 0x01 /* Other */ 14581d77dcdaSRobert Mustacchi #define SMB_PDT_UNKNOWN 0x02 /* Unknown */ 14591d77dcdaSRobert Mustacchi #define SMB_PDT_MOUSE 0x03 /* Mouse */ 14601d77dcdaSRobert Mustacchi #define SMB_PDT_TRBALL 0x04 /* Track Ball */ 14611d77dcdaSRobert Mustacchi #define SMB_PDT_TRPOINT 0x05 /* Track Point */ 14621d77dcdaSRobert Mustacchi #define SMB_PDT_GLPOINT 0x06 /* Glide Point */ 14631d77dcdaSRobert Mustacchi #define SMB_PDT_TOPAD 0x07 /* Touch Pad */ 14641d77dcdaSRobert Mustacchi #define SMB_PDT_TOSCREEN 0x08 /* Touch Screen */ 14651d77dcdaSRobert Mustacchi #define SMB_PDT_OPTSENSE 0x09 /* Optical Sensor */ 14661d77dcdaSRobert Mustacchi 14671d77dcdaSRobert Mustacchi #define SMB_PDI_OTHER 0x01 /* Other */ 14681d77dcdaSRobert Mustacchi #define SMB_PDI_UNKNOWN 0x02 /* Unknown */ 14691d77dcdaSRobert Mustacchi #define SMB_PDI_SERIAL 0x03 /* Serial */ 14701d77dcdaSRobert Mustacchi #define SMB_PDI_PS2 0x04 /* PS/2 */ 14711d77dcdaSRobert Mustacchi #define SMB_PDI_INFRARED 0x05 /* Infrared */ 14721d77dcdaSRobert Mustacchi #define SMB_PDI_HPHIL 0x06 /* HP-HIL */ 14731d77dcdaSRobert Mustacchi #define SMB_PDI_BUSM 0x07 /* Bus mouse */ 14741d77dcdaSRobert Mustacchi #define SMB_PDI_ADB 0x08 /* ADB (Apple Desktop Bus) */ 14751d77dcdaSRobert Mustacchi #define SMB_PDI_BUSM_DB9 0xA0 /* Bus mouse DB-9 */ 14761d77dcdaSRobert Mustacchi #define SMB_PDI_BUSM_UDIN 0xA1 /* Bus mouse micro-DIN */ 1477d53cdfabSRobert Mustacchi #define SMB_PDI_USB 0xA2 /* USB */ 1478d53cdfabSRobert Mustacchi #define SMB_PDI_I2C 0xA3 /* I2C */ 1479d53cdfabSRobert Mustacchi #define SMB_PDI_SPI 0xA4 /* SPI */ 14801d77dcdaSRobert Mustacchi 148146782190SRobert Mustacchi /* 148246782190SRobert Mustacchi * SMBIOS Portable Battery. See DSP0134 Section 7.23 for more information. 148346782190SRobert Mustacchi */ 148446782190SRobert Mustacchi typedef struct smbios_battery { 148546782190SRobert Mustacchi const char *smbb_date; /* Manufacture date */ 148646782190SRobert Mustacchi const char *smbb_serial; /* Serial number */ 148746782190SRobert Mustacchi uint8_t smbb_chem; /* Device Chemistry */ 148846782190SRobert Mustacchi uint32_t smbb_cap; /* Design Capacity */ 148946782190SRobert Mustacchi uint16_t smbb_volt; /* Design Voltage */ 149046782190SRobert Mustacchi const char *smbb_version; /* Smart Battery version */ 149146782190SRobert Mustacchi uint8_t smbb_err; /* Maximum error */ 149246782190SRobert Mustacchi uint16_t smbb_ssn; /* SBDS serial number */ 149346782190SRobert Mustacchi uint16_t smbb_syear; /* SBDS manufacture year */ 149446782190SRobert Mustacchi uint8_t smbb_smonth; /* SBDS manufacture month */ 149546782190SRobert Mustacchi uint8_t smbb_sday; /* SBDS manufacture day */ 149646782190SRobert Mustacchi const char *smbb_schem; /* SBDS chemistry */ 149746782190SRobert Mustacchi uint32_t smbb_oemdata; /* OEM data */ 149846782190SRobert Mustacchi } smbios_battery_t; 149946782190SRobert Mustacchi 150046782190SRobert Mustacchi #define SMB_BDC_OTHER 0x01 /* Other */ 150146782190SRobert Mustacchi #define SMB_BDC_UNKNOWN 0x02 /* Unknown */ 150246782190SRobert Mustacchi #define SMB_BDC_LEADACID 0x03 /* Lead Acid */ 150346782190SRobert Mustacchi #define SMB_BDC_NICD 0x04 /* Nickel Cadmium */ 150446782190SRobert Mustacchi #define SMB_BDC_NIMH 0x05 /* Nickel Metal hydride */ 150546782190SRobert Mustacchi #define SMB_BDC_LIB 0x06 /* Lithium-ion */ 150646782190SRobert Mustacchi #define SMB_BDC_ZINCAIR 0x07 /* Zinc air */ 150746782190SRobert Mustacchi #define SMB_BDC_LIPO 0x08 /* Lithium Polymer */ 150846782190SRobert Mustacchi 150984ab085aSmws /* 15104e901881SDale Ghent * SMBIOS Hardware Security Settings. See DSP0134 Section 7.25 for more 151184ab085aSmws * information. Only one such record will be present in the SMBIOS. 151284ab085aSmws */ 151384ab085aSmws typedef struct smbios_hwsec { 151484ab085aSmws uint8_t smbh_pwr_ps; /* power-on password status */ 151584ab085aSmws uint8_t smbh_kbd_ps; /* keyboard password status */ 151684ab085aSmws uint8_t smbh_adm_ps; /* administrator password status */ 151784ab085aSmws uint8_t smbh_pan_ps; /* front panel reset status */ 151884ab085aSmws } smbios_hwsec_t; 151984ab085aSmws 152084ab085aSmws #define SMB_HWSEC_PS_DISABLED 0x00 /* password disabled */ 152184ab085aSmws #define SMB_HWSEC_PS_ENABLED 0x01 /* password enabled */ 152284ab085aSmws #define SMB_HWSEC_PS_NOTIMPL 0x02 /* password not implemented */ 152384ab085aSmws #define SMB_HWSEC_PS_UNKNOWN 0x03 /* password status unknown */ 152484ab085aSmws 1525f44a1392SRobert Mustacchi /* 1526f44a1392SRobert Mustacchi * This value is used to represent a probe that has an unknown value. 1527f44a1392SRobert Mustacchi */ 1528f44a1392SRobert Mustacchi #define SMB_PROBE_UNKNOWN_VALUE 0x8000 1529f44a1392SRobert Mustacchi 1530f44a1392SRobert Mustacchi /* 1531f44a1392SRobert Mustacchi * SMBIOS Voltage Probe. See DSP0134 Section 7.27 for more information. 1532f44a1392SRobert Mustacchi * Please see the specification for the units of each value. 1533f44a1392SRobert Mustacchi */ 1534f44a1392SRobert Mustacchi typedef struct smbios_vprobe { 1535f44a1392SRobert Mustacchi const char *smbvp_description; /* description information */ 1536f44a1392SRobert Mustacchi uint8_t smbvp_location; /* probe location */ 1537f44a1392SRobert Mustacchi uint8_t smbvp_status; /* probe status */ 1538f44a1392SRobert Mustacchi uint16_t smbvp_maxval; /* maximum voltage */ 1539f44a1392SRobert Mustacchi uint16_t smbvp_minval; /* minimum voltage */ 1540f44a1392SRobert Mustacchi uint16_t smbvp_resolution; /* probe resolution */ 1541f44a1392SRobert Mustacchi uint16_t smbvp_tolerance; /* probe tolerance */ 1542f44a1392SRobert Mustacchi uint16_t smbvp_accuracy; /* probe accuracy */ 1543f44a1392SRobert Mustacchi uint32_t smbvp_oem; /* vendor-specific data */ 1544f44a1392SRobert Mustacchi uint16_t smbvp_nominal; /* nominal value */ 1545f44a1392SRobert Mustacchi } smbios_vprobe_t; 1546f44a1392SRobert Mustacchi 1547f44a1392SRobert Mustacchi #define SMB_VPROBE_S_OTHER 0x01 /* other */ 1548f44a1392SRobert Mustacchi #define SMB_VPROBE_S_UNKNOWN 0x02 /* unknown */ 1549f44a1392SRobert Mustacchi #define SMB_VPROBE_S_OK 0x03 /* OK */ 1550f44a1392SRobert Mustacchi #define SMB_VPROBE_S_NONCRIT 0x04 /* non-critical */ 1551f44a1392SRobert Mustacchi #define SMB_VPROBE_S_CRIT 0x05 /* critical */ 1552f44a1392SRobert Mustacchi #define SMB_VPROBE_S_NONRECOV 0x06 /* non-recoverable */ 1553f44a1392SRobert Mustacchi 1554f44a1392SRobert Mustacchi #define SMB_VPROBE_L_OTHER 0x01 /* other */ 1555f44a1392SRobert Mustacchi #define SMB_VPROBE_L_UNKNOWN 0x02 /* unknown */ 1556f44a1392SRobert Mustacchi #define SMB_VPROBE_L_PROC 0x03 /* processor */ 1557f44a1392SRobert Mustacchi #define SMB_VPROBE_L_DISK 0x04 /* disk */ 1558f44a1392SRobert Mustacchi #define SMB_VPROBE_L_PBAY 0x05 /* peripheral bay */ 1559f44a1392SRobert Mustacchi #define SMB_VPROBE_L_MGMT 0x06 /* system management module */ 1560f44a1392SRobert Mustacchi #define SMB_VPROBE_L_MOBO 0x07 /* motherboard */ 1561f44a1392SRobert Mustacchi #define SMB_VPROBE_L_MEMMOD 0x08 /* memory module */ 1562f44a1392SRobert Mustacchi #define SMB_VPROBE_L_PROCMOD 0x09 /* processor module */ 1563f44a1392SRobert Mustacchi #define SMB_VPROBE_L_POWER 0x0a /* power unit */ 1564f44a1392SRobert Mustacchi #define SMB_VPROBE_L_AIC 0x0b /* add-in card */ 1565f44a1392SRobert Mustacchi 1566f44a1392SRobert Mustacchi /* 1567f44a1392SRobert Mustacchi * SMBIOS Cooling Device. See DSP0134 Section 7.28 for more information. 1568f44a1392SRobert Mustacchi * Please see the specification for the units of each value. 1569f44a1392SRobert Mustacchi */ 1570f44a1392SRobert Mustacchi typedef struct smbios_cooldev { 1571f44a1392SRobert Mustacchi id_t smbcd_tprobe; /* temperature probe handle */ 1572f44a1392SRobert Mustacchi uint8_t smbcd_type; /* cooling device type */ 1573f44a1392SRobert Mustacchi uint8_t smbcd_status; /* status */ 1574f44a1392SRobert Mustacchi uint8_t smbcd_group; /* group ID */ 1575f44a1392SRobert Mustacchi uint32_t smbcd_oem; /* vendor-specific data */ 1576f44a1392SRobert Mustacchi uint16_t smbcd_nominal; /* nominal speed */ 1577f44a1392SRobert Mustacchi const char *smbcd_descr; /* device description */ 1578f44a1392SRobert Mustacchi } smbios_cooldev_t; 1579f44a1392SRobert Mustacchi 1580f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_OTHER 0x01 /* other */ 1581f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_UNKNOWN 0x02 /* unknown */ 1582f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_OK 0x03 /* OK */ 1583f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_NONCRIT 0x04 /* non-critical */ 1584f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_CRIT 0x05 /* critical */ 1585f44a1392SRobert Mustacchi #define SMB_COOLDEV_S_NONRECOV 0x06 /* non-recoverable */ 1586f44a1392SRobert Mustacchi 1587f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_OTHER 0x01 /* other */ 1588f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_UNKNOWN 0x02 /* unknown */ 1589f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_FAN 0x03 /* fan */ 1590f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_BLOWER 0x04 /* centrifugal blower */ 1591f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_CHIPFAN 0x05 /* chip fan */ 1592f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_CABFAN 0x06 /* cabinet fan */ 1593f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_PSFAN 0x07 /* power supply fan */ 1594f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_HEATPIPE 0x08 /* head pipe */ 1595f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_IREFRIG 0x09 /* integrated refrigeration */ 1596f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_ACTCOOL 0x10 /* active cooling */ 1597f44a1392SRobert Mustacchi #define SMB_COOLDEV_T_PASSCOOL 0x11 /* passive cooling */ 1598f44a1392SRobert Mustacchi 1599f44a1392SRobert Mustacchi /* 1600f44a1392SRobert Mustacchi * SMBIOS Temperature Probe. See DSP0134 Section 7.29 for more information. 1601f44a1392SRobert Mustacchi * Please see the specification for the units of each value. 1602f44a1392SRobert Mustacchi */ 1603f44a1392SRobert Mustacchi typedef struct smbios_tprobe { 1604f44a1392SRobert Mustacchi const char *smbtp_description; /* description information */ 1605f44a1392SRobert Mustacchi uint8_t smbtp_location; /* probe location */ 1606f44a1392SRobert Mustacchi uint8_t smbtp_status; /* probe status */ 1607f44a1392SRobert Mustacchi uint16_t smbtp_maxval; /* maximum temperature */ 1608f44a1392SRobert Mustacchi uint16_t smbtp_minval; /* minimum temperature */ 1609f44a1392SRobert Mustacchi uint16_t smbtp_resolution; /* probe resolution */ 1610f44a1392SRobert Mustacchi uint16_t smbtp_tolerance; /* probe tolerance */ 1611f44a1392SRobert Mustacchi uint16_t smbtp_accuracy; /* probe accuracy */ 1612f44a1392SRobert Mustacchi uint32_t smbtp_oem; /* vendor-specific data */ 1613f44a1392SRobert Mustacchi uint16_t smbtp_nominal; /* nominal value */ 1614f44a1392SRobert Mustacchi } smbios_tprobe_t; 1615f44a1392SRobert Mustacchi 1616f44a1392SRobert Mustacchi #define SMB_TPROBE_S_OTHER 0x01 /* other */ 1617f44a1392SRobert Mustacchi #define SMB_TPROBE_S_UNKNOWN 0x02 /* unknown */ 1618f44a1392SRobert Mustacchi #define SMB_TPROBE_S_OK 0x03 /* OK */ 1619f44a1392SRobert Mustacchi #define SMB_TPROBE_S_NONCRIT 0x04 /* non-critical */ 1620f44a1392SRobert Mustacchi #define SMB_TPROBE_S_CRIT 0x05 /* critical */ 1621f44a1392SRobert Mustacchi #define SMB_TPROBE_S_NONRECOV 0x06 /* non-recoverable */ 1622f44a1392SRobert Mustacchi 1623f44a1392SRobert Mustacchi #define SMB_TPROBE_L_OTHER 0x01 /* other */ 1624f44a1392SRobert Mustacchi #define SMB_TPROBE_L_UNKNOWN 0x02 /* unknown */ 1625f44a1392SRobert Mustacchi #define SMB_TPROBE_L_PROC 0x03 /* processor */ 1626f44a1392SRobert Mustacchi #define SMB_TPROBE_L_DISK 0x04 /* disk */ 1627f44a1392SRobert Mustacchi #define SMB_TPROBE_L_PBAY 0x05 /* peripheral bay */ 1628f44a1392SRobert Mustacchi #define SMB_TPROBE_L_MGMT 0x06 /* system management module */ 1629f44a1392SRobert Mustacchi #define SMB_TPROBE_L_MOBO 0x07 /* motherboard */ 1630f44a1392SRobert Mustacchi #define SMB_TPROBE_L_MEMMOD 0x08 /* memory module */ 1631f44a1392SRobert Mustacchi #define SMB_TPROBE_L_PROCMOD 0x09 /* processor module */ 1632f44a1392SRobert Mustacchi #define SMB_TPROBE_L_POWER 0x0a /* power unit */ 1633f44a1392SRobert Mustacchi #define SMB_TPROBE_L_AIC 0x0b /* add-in card */ 1634f44a1392SRobert Mustacchi #define SMB_TPROBE_L_FPBOARD 0x0c /* front panel board */ 1635f44a1392SRobert Mustacchi #define SMB_TPROBE_L_BPBOARD 0x0d /* rear panel board */ 1636f44a1392SRobert Mustacchi #define SMB_TPROBE_L_PSBOARD 0x0e /* power system board */ 1637f44a1392SRobert Mustacchi #define SMB_TPROBE_L_DBPANE 0x0f /* drive back plane */ 1638f44a1392SRobert Mustacchi 1639f44a1392SRobert Mustacchi /* 1640f44a1392SRobert Mustacchi * SMBIOS Current Probe. See DSP0134 Section 7.30 for more information. 1641f44a1392SRobert Mustacchi * Please see the specification for the units of each value. 1642f44a1392SRobert Mustacchi */ 1643f44a1392SRobert Mustacchi typedef struct smbios_iprobe { 1644f44a1392SRobert Mustacchi const char *smbip_description; /* description information */ 1645f44a1392SRobert Mustacchi uint8_t smbip_location; /* probe location */ 1646f44a1392SRobert Mustacchi uint8_t smbip_status; /* probe status */ 1647f44a1392SRobert Mustacchi uint16_t smbip_maxval; /* maximum current */ 1648f44a1392SRobert Mustacchi uint16_t smbip_minval; /* minimum current */ 1649f44a1392SRobert Mustacchi uint16_t smbip_resolution; /* probe resolution */ 1650f44a1392SRobert Mustacchi uint16_t smbip_tolerance; /* probe tolerance */ 1651f44a1392SRobert Mustacchi uint16_t smbip_accuracy; /* probe accuracy */ 1652f44a1392SRobert Mustacchi uint32_t smbip_oem; /* vendor-specific data */ 1653f44a1392SRobert Mustacchi uint16_t smbip_nominal; /* nominal value */ 1654f44a1392SRobert Mustacchi } smbios_iprobe_t; 1655f44a1392SRobert Mustacchi 1656f44a1392SRobert Mustacchi #define SMB_IPROBE_S_OTHER 0x01 /* other */ 1657f44a1392SRobert Mustacchi #define SMB_IPROBE_S_UNKNOWN 0x02 /* unknown */ 1658f44a1392SRobert Mustacchi #define SMB_IPROBE_S_OK 0x03 /* OK */ 1659f44a1392SRobert Mustacchi #define SMB_IPROBE_S_NONCRIT 0x04 /* non-critical */ 1660f44a1392SRobert Mustacchi #define SMB_IPROBE_S_CRIT 0x05 /* critical */ 1661f44a1392SRobert Mustacchi #define SMB_IPROBE_S_NONRECOV 0x06 /* non-recoverable */ 1662f44a1392SRobert Mustacchi 1663f44a1392SRobert Mustacchi #define SMB_IPROBE_L_OTHER 0x01 /* other */ 1664f44a1392SRobert Mustacchi #define SMB_IPROBE_L_UNKNOWN 0x02 /* unknown */ 1665f44a1392SRobert Mustacchi #define SMB_IPROBE_L_PROC 0x03 /* processor */ 1666f44a1392SRobert Mustacchi #define SMB_IPROBE_L_DISK 0x04 /* disk */ 1667f44a1392SRobert Mustacchi #define SMB_IPROBE_L_PBAY 0x05 /* peripheral bay */ 1668f44a1392SRobert Mustacchi #define SMB_IPROBE_L_MGMT 0x06 /* system management module */ 1669f44a1392SRobert Mustacchi #define SMB_IPROBE_L_MOBO 0x07 /* motherboard */ 1670f44a1392SRobert Mustacchi #define SMB_IPROBE_L_MEMMOD 0x08 /* memory module */ 1671f44a1392SRobert Mustacchi #define SMB_IPROBE_L_PROCMOD 0x09 /* processor module */ 1672f44a1392SRobert Mustacchi #define SMB_IPROBE_L_POWER 0x0a /* power unit */ 1673f44a1392SRobert Mustacchi #define SMB_IPROBE_L_AIC 0x0b /* add-in card */ 1674f44a1392SRobert Mustacchi 167584ab085aSmws /* 16764e901881SDale Ghent * SMBIOS System Boot Information. See DSP0134 Section 7.33 for more 167784ab085aSmws * information. The contents of the data varies by type and is undocumented 167884ab085aSmws * from the perspective of DSP0134 -- it seems to be left as vendor-specific. 167984ab085aSmws * The (D) annotation next to SMB_BOOT_* below indicates possible data payload. 168084ab085aSmws */ 168184ab085aSmws typedef struct smbios_boot { 168284ab085aSmws uint8_t smbt_status; /* boot status code (see below) */ 168384ab085aSmws const void *smbt_data; /* data buffer specific to status */ 168484ab085aSmws size_t smbt_size; /* size of smbt_data buffer in bytes */ 168584ab085aSmws } smbios_boot_t; 168684ab085aSmws 168784ab085aSmws #define SMB_BOOT_NORMAL 0 /* no errors detected */ 168884ab085aSmws #define SMB_BOOT_NOMEDIA 1 /* no bootable media */ 168984ab085aSmws #define SMB_BOOT_OSFAIL 2 /* normal o/s failed to load */ 169084ab085aSmws #define SMB_BOOT_FWHWFAIL 3 /* firmware-detected hardware failure */ 169184ab085aSmws #define SMB_BOOT_OSHWFAIL 4 /* o/s-detected hardware failure */ 169284ab085aSmws #define SMB_BOOT_USERREQ 5 /* user-requested boot (keystroke) */ 169384ab085aSmws #define SMB_BOOT_SECURITY 6 /* system security violation */ 169484ab085aSmws #define SMB_BOOT_PREVREQ 7 /* previously requested image (D) */ 169584ab085aSmws #define SMB_BOOT_WATCHDOG 8 /* watchdog initiated reboot */ 169684ab085aSmws #define SMB_BOOT_RESV_LO 9 /* low end of reserved range */ 169784ab085aSmws #define SMB_BOOT_RESV_HI 127 /* high end of reserved range */ 169884ab085aSmws #define SMB_BOOT_OEM_LO 128 /* low end of OEM-specific range */ 169984ab085aSmws #define SMB_BOOT_OEM_HI 191 /* high end of OEM-specific range */ 170084ab085aSmws #define SMB_BOOT_PROD_LO 192 /* low end of product-specific range */ 170184ab085aSmws #define SMB_BOOT_PROD_HI 255 /* high end of product-specific range */ 170284ab085aSmws 170384ab085aSmws /* 17044e901881SDale Ghent * SMBIOS IPMI Device Information. See DSP0134 Section 7.39 and also 170584ab085aSmws * Appendix C1 of the IPMI specification for more information on this record. 170684ab085aSmws */ 170784ab085aSmws typedef struct smbios_ipmi { 170884ab085aSmws uint_t smbip_type; /* BMC interface type */ 170984ab085aSmws smbios_version_t smbip_vers; /* BMC's IPMI specification version */ 171084ab085aSmws uint32_t smbip_i2c; /* BMC I2C bus slave address */ 171184ab085aSmws uint32_t smbip_bus; /* bus ID of NV storage device, or -1 */ 171284ab085aSmws uint64_t smbip_addr; /* BMC base address */ 171384ab085aSmws uint32_t smbip_flags; /* flags (see below) */ 171484ab085aSmws uint16_t smbip_intr; /* interrupt number (or zero if none) */ 171584ab085aSmws uint16_t smbip_regspacing; /* i/o space register spacing (bytes) */ 171684ab085aSmws } smbios_ipmi_t; 171784ab085aSmws 171884ab085aSmws #define SMB_IPMI_T_UNKNOWN 0x00 /* unknown */ 171984ab085aSmws #define SMB_IPMI_T_KCS 0x01 /* KCS: Keyboard Controller Style */ 172084ab085aSmws #define SMB_IPMI_T_SMIC 0x02 /* SMIC: Server Mgmt Interface Chip */ 172184ab085aSmws #define SMB_IPMI_T_BT 0x03 /* BT: Block Transfer */ 172284ab085aSmws #define SMB_IPMI_T_SSIF 0x04 /* SSIF: SMBus System Interface */ 172384ab085aSmws 172484ab085aSmws #define SMB_IPMI_F_IOADDR 0x01 /* base address is in i/o space */ 172584ab085aSmws #define SMB_IPMI_F_INTRSPEC 0x02 /* intr information is specified */ 172684ab085aSmws #define SMB_IPMI_F_INTRHIGH 0x04 /* intr active high (else low) */ 172784ab085aSmws #define SMB_IPMI_F_INTREDGE 0x08 /* intr is edge triggered (else lvl) */ 172884ab085aSmws 172932ece1f9SRobert Mustacchi /* 173032ece1f9SRobert Mustacchi * SMBIOS System Power Supply Information. See DSP0134 7.40 for more 173132ece1f9SRobert Mustacchi * information. 173232ece1f9SRobert Mustacchi */ 173332ece1f9SRobert Mustacchi typedef struct smbios_powersup { 173432ece1f9SRobert Mustacchi uint32_t smbps_group; /* group ID */ 173532ece1f9SRobert Mustacchi uint64_t smbps_maxout; /* max output in milliwatts */ 173632ece1f9SRobert Mustacchi uint32_t smbps_flags; /* see below */ 173732ece1f9SRobert Mustacchi uint8_t smbps_ivrs; /* input voltage range switching type */ 173832ece1f9SRobert Mustacchi uint8_t smbps_status; /* PSU status */ 173932ece1f9SRobert Mustacchi uint8_t smbps_pstype; /* PSU type */ 174032ece1f9SRobert Mustacchi id_t smbps_vprobe; /* voltage probe handle */ 174132ece1f9SRobert Mustacchi id_t smbps_cooldev; /* cooling device handle */ 174232ece1f9SRobert Mustacchi id_t smbps_iprobe; /* current probe handle */ 174332ece1f9SRobert Mustacchi } smbios_powersup_t; 174432ece1f9SRobert Mustacchi 174532ece1f9SRobert Mustacchi /* smbpfs_flags */ 174632ece1f9SRobert Mustacchi #define SMB_POWERSUP_F_HOT 0x01 /* PSU is hot-replaceable */ 174732ece1f9SRobert Mustacchi #define SMB_POWERSUP_F_PRESENT 0x02 /* PSU is present */ 174832ece1f9SRobert Mustacchi #define SMB_POWERSUP_F_UNPLUG 0x04 /* PSU is unplugged from outlet */ 174932ece1f9SRobert Mustacchi 175032ece1f9SRobert Mustacchi /* Values for smbps_ivrs */ 175132ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_OTHER 0x01 /* other */ 175232ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_UNKNOWN 0x02 /* unknown */ 175332ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_MANUAL 0x03 /* manual */ 175432ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_AUTO 0x04 /* auto-switch */ 175532ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_WIDE 0x05 /* wide range */ 175632ece1f9SRobert Mustacchi #define SMB_POWERSUP_I_NA 0x06 /* not applicable */ 175732ece1f9SRobert Mustacchi 175832ece1f9SRobert Mustacchi #define SMB_POWERSUP_S_OTHER 0x01 /* other */ 175932ece1f9SRobert Mustacchi #define SMB_POWERSUP_S_UNKNOWN 0x02 /* unknown */ 176032ece1f9SRobert Mustacchi #define SMB_POWERSUP_S_OK 0x03 /* OK */ 176132ece1f9SRobert Mustacchi #define SMB_POWERSUP_S_NONCRIT 0x04 /* non-critical */ 176232ece1f9SRobert Mustacchi #define SMB_POWERSUP_S_CRIT 0x05 /* critical; PSU failed */ 176332ece1f9SRobert Mustacchi 176432ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_OTHER 0x01 /* other */ 176532ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_UNKNOWN 0x02 /* unknown */ 176632ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_LINEAR 0x03 /* linear */ 176732ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_SWITCH 0x04 /* switching */ 176832ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_BAT 0x05 /* battery */ 176932ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_UPS 0x06 /* UPS */ 177032ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_CONV 0x07 /* converter */ 177132ece1f9SRobert Mustacchi #define SMB_POWERSUP_T_REGL 0x08 /* regulator */ 177232ece1f9SRobert Mustacchi 1773*064d431aSRobert Mustacchi /* 1774*064d431aSRobert Mustacchi * SMBIOS Additional Information. The top level structure defines a number of 1775*064d431aSRobert Mustacchi * additional information entries, each of which is variable length and intended 1776*064d431aSRobert Mustacchi * to augment some existing field in the system. Therefore we have a single 1777*064d431aSRobert Mustacchi * function to get the number of additional entries present and then a different 1778*064d431aSRobert Mustacchi * one that retrieves each entity function. 1779*064d431aSRobert Mustacchi */ 1780*064d431aSRobert Mustacchi typedef struct smbios_addinfo_ent { 1781*064d431aSRobert Mustacchi id_t smbai_ref; /* referenced handle */ 1782*064d431aSRobert Mustacchi uint32_t smbai_ref_off; /* offset into referenced handle */ 1783*064d431aSRobert Mustacchi const char *smbai_str; /* optional string description */ 1784*064d431aSRobert Mustacchi uint32_t smbai_dlen; /* optional data length */ 1785*064d431aSRobert Mustacchi void *smbai_data; /* optional data */ 1786*064d431aSRobert Mustacchi } smbios_addinfo_ent_t; 1787*064d431aSRobert Mustacchi 178803f9f63dSTom Pothier /* 17894e901881SDale Ghent * SMBIOS Onboard Devices Extended Information. See DSP0134 Section 7.42 179003f9f63dSTom Pothier * for more information. 179103f9f63dSTom Pothier */ 179203f9f63dSTom Pothier typedef struct smbios_obdev_ext { 179303f9f63dSTom Pothier const char *smboe_name; /* reference designation */ 179403f9f63dSTom Pothier uint8_t smboe_dtype; /* device type */ 179503f9f63dSTom Pothier uint8_t smboe_dti; /* device type instance */ 179603f9f63dSTom Pothier uint16_t smboe_sg; /* segment group number */ 179703f9f63dSTom Pothier uint8_t smboe_bus; /* bus number */ 179803f9f63dSTom Pothier uint8_t smboe_df; /* device/function number */ 179903f9f63dSTom Pothier } smbios_obdev_ext_t; 180003f9f63dSTom Pothier 1801d53cdfabSRobert Mustacchi #define SMB_OBET_OTHER 0x01 /* Other */ 1802d53cdfabSRobert Mustacchi #define SMB_OBET_UNKNOWN 0x02 /* Unknown */ 1803d53cdfabSRobert Mustacchi #define SMB_OBET_VIDEO 0x03 /* video */ 1804d53cdfabSRobert Mustacchi #define SMB_OBET_SCSI 0x04 /* SCSI */ 1805d53cdfabSRobert Mustacchi #define SMB_OBET_ETHERNET 0x05 /* Ethernet */ 1806d53cdfabSRobert Mustacchi #define SMB_OBET_TOKEN 0x06 /* Token Ring */ 1807d53cdfabSRobert Mustacchi #define SMB_OBET_SOUND 0x07 /* Sound */ 1808d53cdfabSRobert Mustacchi #define SMB_OBET_PATA 0x08 /* PATA */ 1809d53cdfabSRobert Mustacchi #define SMB_OBET_SATA 0x09 /* SATA */ 1810d53cdfabSRobert Mustacchi #define SMB_OBET_SAS 0x0A /* SAS */ 1811d53cdfabSRobert Mustacchi #define SMB_OBET_WLAN 0x0B /* Wireless LAN */ 1812d53cdfabSRobert Mustacchi #define SMB_OBET_BT 0x0C /* Bluetooth */ 1813d53cdfabSRobert Mustacchi #define SMB_OBET_WWAN 0x0D /* WWAN */ 1814d53cdfabSRobert Mustacchi #define SMB_OBET_EMMC 0x0E /* eMMC */ 1815d53cdfabSRobert Mustacchi #define SMB_OBET_NVME 0x0F /* NVMe */ 1816d53cdfabSRobert Mustacchi #define SMB_OBET_UFS 0x10 /* UFS */ 1817d53cdfabSRobert Mustacchi 1818176a9270SRobert Mustacchi /* 1819d53cdfabSRobert Mustacchi * SMBIOS Processor Additional Information (Type 44). See section 7.45 for more 1820176a9270SRobert Mustacchi * information. 1821176a9270SRobert Mustacchi */ 1822176a9270SRobert Mustacchi typedef struct smbios_processor_info { 1823176a9270SRobert Mustacchi id_t smbpi_processor; /* processor handle */ 1824176a9270SRobert Mustacchi uint32_t smbpi_ptype; /* processor type */ 1825176a9270SRobert Mustacchi } smbios_processor_info_t; 1826176a9270SRobert Mustacchi 1827176a9270SRobert Mustacchi /* BEGIN CSTYLED */ 1828176a9270SRobert Mustacchi #define SMB_PROCINFO_T_RESERVED 0x00 /* reserved */ 1829176a9270SRobert Mustacchi #define SMB_PROCINFO_T_IA32 0x01 /* IA32 (x86) */ 1830176a9270SRobert Mustacchi #define SMB_PROCINFO_T_AMD64 0x02 /* X64 (x86-64, Intel64, AMD64, EMT64) */ 1831176a9270SRobert Mustacchi #define SMB_PROCINFO_T_IA 0x03 /* Intel Itanium architecture */ 1832176a9270SRobert Mustacchi #define SMB_PROCINFO_T_AARCH32 0x04 /* 32-bit ARM (aarch32) */ 1833176a9270SRobert Mustacchi #define SMB_PROCINFO_T_AARCH64 0x05 /* 64-bit ARM (aarch64) */ 1834176a9270SRobert Mustacchi #define SMB_PROCINFO_T_RV32 0x06 /* 32-bit RISC-V (RV32) */ 1835176a9270SRobert Mustacchi #define SMB_PROCINFO_T_RV64 0x07 /* 64-bit RISC-V (RV64) */ 1836176a9270SRobert Mustacchi #define SMB_PROCINFO_T_RV128 0x08 /* 128-bit RISC-V (RV128) */ 18371d1fc316SRobert Mustacchi #define SMB_PROCINFO_T_LA32 0x09 /* 32-bit LoongArch */ 18381d1fc316SRobert Mustacchi #define SMB_PROCINFO_T_LA64 0x0A /* 64-bit LoongArch */ 1839176a9270SRobert Mustacchi /* END CSTYLED */ 1840176a9270SRobert Mustacchi 1841176a9270SRobert Mustacchi typedef struct smbios_processor_info_riscv { 1842176a9270SRobert Mustacchi uint8_t smbpirv_hartid[16]; /* HART ID */ 1843176a9270SRobert Mustacchi uint8_t smbpirv_vendid[16]; /* Vendor ID */ 1844176a9270SRobert Mustacchi uint8_t smbpirv_archid[16]; /* Architecture ID */ 1845176a9270SRobert Mustacchi uint8_t smbpirv_machid[16]; /* Machine ID */ 1846176a9270SRobert Mustacchi uint8_t smbpirv_metdi[16]; /* Machine exception delegation */ 1847176a9270SRobert Mustacchi uint8_t smbpirv_mitdi[16]; /* Machine interrupt delegation */ 1848176a9270SRobert Mustacchi uint64_t smbpirv_isa; /* Supported ISA */ 1849176a9270SRobert Mustacchi uint32_t smbpirv_privlvl; /* Privilege Level */ 1850176a9270SRobert Mustacchi uint8_t smbpirv_boothart; /* Indicates if boot processor */ 1851176a9270SRobert Mustacchi uint8_t smbpirv_xlen; /* Default register width */ 1852176a9270SRobert Mustacchi uint8_t smbpirv_mxlen; /* Machine register width */ 1853176a9270SRobert Mustacchi uint8_t smbpirv_sxlen; /* Supervisor register width */ 1854176a9270SRobert Mustacchi uint8_t smbpirv_uxlen; /* User register width */ 1855176a9270SRobert Mustacchi } smbios_processor_info_riscv_t; 1856176a9270SRobert Mustacchi 1857176a9270SRobert Mustacchi /* 1858176a9270SRobert Mustacchi * RISC-V Supported Privilege Levels 1859176a9270SRobert Mustacchi */ 1860176a9270SRobert Mustacchi #define SMB_RV_PRIV_M (1 << 0) /* Machine Mode */ 1861176a9270SRobert Mustacchi #define SMB_RV_PRIV_S (1 << 2) /* Supervisor Mode */ 1862176a9270SRobert Mustacchi #define SMB_RV_PRIV_U (1 << 3) /* User Mode */ 1863176a9270SRobert Mustacchi #define SMB_RV_PRIV_DBG (1 << 7) /* Debug Mode */ 1864176a9270SRobert Mustacchi 1865176a9270SRobert Mustacchi /* 1866176a9270SRobert Mustacchi * Values used to define the various XLEN Values. 1867176a9270SRobert Mustacchi */ 1868176a9270SRobert Mustacchi #define SMB_RV_WIDTH_UNSUP 0x00 /* Unsupported */ 1869176a9270SRobert Mustacchi #define SMB_RV_WIDTH_32B 0x01 /* 32-bit */ 1870176a9270SRobert Mustacchi #define SMB_RV_WIDTH_64B 0x02 /* 64-bit */ 1871176a9270SRobert Mustacchi #define SMB_RV_WIDTH_128B 0x03 /* 128-bit */ 1872176a9270SRobert Mustacchi 1873176a9270SRobert Mustacchi /* 1874176a9270SRobert Mustacchi * RISC-V ISA extensions 1875176a9270SRobert Mustacchi */ 1876176a9270SRobert Mustacchi /* BEGIN CSTYLED */ 1877176a9270SRobert Mustacchi #define SMB_RV_ISA_A (1 << 0) /* Atomic */ 1878176a9270SRobert Mustacchi #define SMB_RV_ISA_B (1 << 1) /* Reserved */ 1879176a9270SRobert Mustacchi #define SMB_RV_ISA_C (1 << 2) /* Compressed */ 1880176a9270SRobert Mustacchi #define SMB_RV_ISA_D (1 << 3) /* Double-precision floating-point */ 1881176a9270SRobert Mustacchi #define SMB_RV_ISA_E (1 << 4) /* RV32E base */ 1882176a9270SRobert Mustacchi #define SMB_RV_ISA_F (1 << 5) /* Single-precision floating-point */ 1883176a9270SRobert Mustacchi #define SMB_RV_ISA_G (1 << 6) /* Additional standard extensions present */ 1884176a9270SRobert Mustacchi #define SMB_RV_ISA_H (1 << 7) /* Hypervisor */ 1885176a9270SRobert Mustacchi #define SMB_RV_ISA_I (1 << 8) /* Integer base ISA */ 1886176a9270SRobert Mustacchi #define SMB_RV_ISA_J (1 << 9) /* Reserved */ 1887176a9270SRobert Mustacchi #define SMB_RV_ISA_K (1 << 10) /* Reserved */ 1888176a9270SRobert Mustacchi #define SMB_RV_ISA_L (1 << 11) /* Reserved */ 1889176a9270SRobert Mustacchi #define SMB_RV_ISA_M (1 << 12) /* Integer Multiply/Divide */ 1890176a9270SRobert Mustacchi #define SMB_RV_ISA_N (1 << 13) /* User-level interrupts */ 1891176a9270SRobert Mustacchi #define SMB_RV_ISA_O (1 << 14) /* Reserved */ 1892176a9270SRobert Mustacchi #define SMB_RV_ISA_P (1 << 15) /* Reserved */ 1893d53cdfabSRobert Mustacchi #define SMB_RV_ISA_Q (1 << 16) /* Quad-precision floating-point */ 1894176a9270SRobert Mustacchi #define SMB_RV_ISA_R (1 << 17) /* Reserved */ 1895176a9270SRobert Mustacchi #define SMB_RV_ISA_S (1 << 18) /* Supervisor mode */ 1896176a9270SRobert Mustacchi #define SMB_RV_ISA_T (1 << 19) /* Reserved */ 1897176a9270SRobert Mustacchi #define SMB_RV_ISA_U (1 << 20) /* User mode */ 1898176a9270SRobert Mustacchi #define SMB_RV_ISA_V (1 << 21) /* Reserved */ 1899176a9270SRobert Mustacchi #define SMB_RV_ISA_W (1 << 22) /* Reserved */ 1900176a9270SRobert Mustacchi #define SMB_RV_ISA_X (1 << 23) /* Non-standard extensions */ 1901176a9270SRobert Mustacchi #define SMB_RV_ISA_Y (1 << 24) /* Reserved */ 1902176a9270SRobert Mustacchi #define SMB_RV_ISA_Z (1 << 25) /* Reserved */ 1903176a9270SRobert Mustacchi /* END CSTYLED */ 190403f9f63dSTom Pothier 1905d53cdfabSRobert Mustacchi /* 1906d53cdfabSRobert Mustacchi * SMBIOS Firmware Inventory Information (Type 45). 1907d53cdfabSRobert Mustacchi */ 1908d53cdfabSRobert Mustacchi typedef struct smbios_fwinfo { 1909d53cdfabSRobert Mustacchi const char *smbfw_name; /* Firmware component name */ 1910d53cdfabSRobert Mustacchi const char *smbfw_id; /* Firmware ID */ 1911d53cdfabSRobert Mustacchi const char *smbfw_reldate; /* Release date */ 1912d53cdfabSRobert Mustacchi const char *smbfw_lsv; /* Lowest supported version */ 1913d53cdfabSRobert Mustacchi uint64_t smbfw_imgsz; /* Image size */ 1914d53cdfabSRobert Mustacchi uint16_t smbfw_chars; /* Characteristics */ 1915d53cdfabSRobert Mustacchi uint16_t smbfw_state; /* State */ 1916d53cdfabSRobert Mustacchi uint16_t smbfw_ncomps; /* Number of associated components */ 1917d53cdfabSRobert Mustacchi uint8_t smbfw_vers_fmt; /* Firmware version format */ 1918d53cdfabSRobert Mustacchi uint8_t smbfw_id_fmt; /* Firmware ID format */ 1919d53cdfabSRobert Mustacchi } smbios_fwinfo_t; 1920d53cdfabSRobert Mustacchi 1921d53cdfabSRobert Mustacchi typedef struct smbios_fwinfo_comp { 1922d53cdfabSRobert Mustacchi id_t smbfwe_id; /* Contained element ID */ 1923d53cdfabSRobert Mustacchi } smbios_fwinfo_comp_t; 1924d53cdfabSRobert Mustacchi 1925d53cdfabSRobert Mustacchi /* 1926d53cdfabSRobert Mustacchi * Firmware version format constants. 1927d53cdfabSRobert Mustacchi */ 1928d53cdfabSRobert Mustacchi #define SMB_FWV_FF 0x00 /* free-form */ 1929d53cdfabSRobert Mustacchi #define SMB_FWV_MM 0x01 /* major.minor */ 1930d53cdfabSRobert Mustacchi #define SMB_FWV_HEX32 0x02 /* 32-bit hex */ 1931d53cdfabSRobert Mustacchi #define SMB_FWV_HEX64 0x03 /* 64-bit hex */ 1932d53cdfabSRobert Mustacchi 1933d53cdfabSRobert Mustacchi /* 1934d53cdfabSRobert Mustacchi * Firmware ID format constants. 1935d53cdfabSRobert Mustacchi */ 1936d53cdfabSRobert Mustacchi #define SMB_FWI_FF 0x00 /* free-form */ 1937d53cdfabSRobert Mustacchi #define SMB_FWI_UEFI 0x01 /* UEFI GUID */ 1938d53cdfabSRobert Mustacchi 1939d53cdfabSRobert Mustacchi /* 1940d53cdfabSRobert Mustacchi * Firmware characteristic bitfields. 1941d53cdfabSRobert Mustacchi */ 1942d53cdfabSRobert Mustacchi #define SMB_FWC_UPDATE 0x01 /* updatable */ 1943d53cdfabSRobert Mustacchi #define SMB_FWC_WP 0x02 /* write-protect */ 1944d53cdfabSRobert Mustacchi 1945d53cdfabSRobert Mustacchi /* 1946d53cdfabSRobert Mustacchi * Firmware state constants. 1947d53cdfabSRobert Mustacchi */ 1948d53cdfabSRobert Mustacchi #define SMB_FWS_OTHER 0x01 /* other */ 1949d53cdfabSRobert Mustacchi #define SMB_FWS_UNKNOWN 0x02 /* unknown */ 1950d53cdfabSRobert Mustacchi #define SMB_FWS_DISABLED 0x03 /* disabled */ 1951d53cdfabSRobert Mustacchi #define SMB_FWS_ENABLED 0x04 /* enabled */ 1952d53cdfabSRobert Mustacchi #define SMB_FWS_ABSENT 0x05 /* absent */ 1953d53cdfabSRobert Mustacchi #define SMB_FWS_STB_OFFLINE 0x06 /* standby offline */ 1954d53cdfabSRobert Mustacchi #define SMB_FWS_STB_SPARE 0x07 /* standby spare */ 1955d53cdfabSRobert Mustacchi #define SMB_FWS_UA_OFFLINE 0x08 /* unavailable offline */ 1956d53cdfabSRobert Mustacchi 1957d53cdfabSRobert Mustacchi /* 1958d53cdfabSRobert Mustacchi * SMBIOS String Property (Type 46). See section 7.47 for more information. 1959d53cdfabSRobert Mustacchi */ 1960d53cdfabSRobert Mustacchi typedef struct smbios_strprop { 1961d53cdfabSRobert Mustacchi uint32_t smbsp_prop_id; /* property ID */ 1962d53cdfabSRobert Mustacchi const char *smbsp_prop_val; /* property Value */ 1963d53cdfabSRobert Mustacchi id_t smbsp_parent; /* parent handle */ 1964d53cdfabSRobert Mustacchi } smbios_strprop_t; 1965d53cdfabSRobert Mustacchi 1966d53cdfabSRobert Mustacchi /* 1967d53cdfabSRobert Mustacchi * String Property IDs 1968d53cdfabSRobert Mustacchi */ 1969d53cdfabSRobert Mustacchi #define SMB_STRP_RESERVED 0x00 /* reserved */ 1970d53cdfabSRobert Mustacchi #define SMB_STRP_UEFI_DEVPATH 0x01 /* UEFI device path */ 1971d53cdfabSRobert Mustacchi 1972074bb90dSTom Pothier /* 1973074bb90dSTom Pothier * SMBIOS OEM-specific (Type 132) Processor Extended Information. 1974074bb90dSTom Pothier */ 1975074bb90dSTom Pothier typedef struct smbios_processor_ext { 1976074bb90dSTom Pothier uint16_t smbpe_processor; /* extending processor handle */ 1977d53cdfabSRobert Mustacchi uint8_t smbpe_fru; /* FRU indicator */ 1978074bb90dSTom Pothier uint8_t smbpe_n; /* number of APIC IDs */ 1979074bb90dSTom Pothier uint16_t *smbpe_apicid; /* strand Inital APIC IDs */ 1980074bb90dSTom Pothier } smbios_processor_ext_t; 1981074bb90dSTom Pothier 198203f9f63dSTom Pothier /* 198303f9f63dSTom Pothier * SMBIOS OEM-specific (Type 136) Port Extended Information. 198403f9f63dSTom Pothier */ 198503f9f63dSTom Pothier typedef struct smbios_port_ext { 198603f9f63dSTom Pothier uint16_t smbporte_chassis; /* chassis handle */ 198703f9f63dSTom Pothier uint16_t smbporte_port; /* port connector handle */ 198803f9f63dSTom Pothier uint8_t smbporte_dtype; /* device type */ 198903f9f63dSTom Pothier uint16_t smbporte_devhdl; /* device handle */ 199003f9f63dSTom Pothier uint8_t smbporte_phy; /* PHY number */ 199103f9f63dSTom Pothier } smbios_port_ext_t; 199203f9f63dSTom Pothier 1993074bb90dSTom Pothier /* 1994074bb90dSTom Pothier * SMBIOS OEM-specific (Type 138) PCI-Express RC/RP Information. 1995074bb90dSTom Pothier */ 1996074bb90dSTom Pothier typedef struct smbios_pciexrc { 1997074bb90dSTom Pothier uint16_t smbpcie_bb; /* base board handle */ 1998074bb90dSTom Pothier uint16_t smbpcie_bdf; /* Bus/Dev/Funct (PCI) */ 1999074bb90dSTom Pothier } smbios_pciexrc_t; 2000074bb90dSTom Pothier 2001074bb90dSTom Pothier /* 2002074bb90dSTom Pothier * SMBIOS OEM-specific (Type 144) Memory Array Extended Information. 2003074bb90dSTom Pothier */ 2004074bb90dSTom Pothier typedef struct smbios_memarray_ext { 2005074bb90dSTom Pothier uint16_t smbmae_ma; /* memory array handle */ 2006074bb90dSTom Pothier uint16_t smbmae_comp; /* component parent handle */ 2007074bb90dSTom Pothier uint16_t smbmae_bdf; /* Bus/Dev/Funct (PCI) */ 2008074bb90dSTom Pothier } smbios_memarray_ext_t; 2009074bb90dSTom Pothier 2010074bb90dSTom Pothier /* 2011074bb90dSTom Pothier * SMBIOS OEM-specific (Type 145) Memory Device Extended Information. 2012074bb90dSTom Pothier */ 2013074bb90dSTom Pothier typedef struct smbios_memdevice_ext { 2014074bb90dSTom Pothier uint16_t smbmdeve_md; /* memory device handle */ 2015074bb90dSTom Pothier uint8_t smbmdeve_drch; /* DRAM channel */ 2016074bb90dSTom Pothier uint8_t smbmdeve_ncs; /* number of chip selects */ 2017074bb90dSTom Pothier } smbios_memdevice_ext_t; 2018074bb90dSTom Pothier 201984ab085aSmws /* 202084ab085aSmws * SMBIOS Interfaces. An SMBIOS image can be opened by either providing a file 202184ab085aSmws * pathname, device pathname, file descriptor, or raw memory buffer. Once an 202284ab085aSmws * image is opened the functions below can be used to iterate over the various 202384ab085aSmws * structures and convert the underlying data representation into the simpler 202484ab085aSmws * data structures described earlier in this header file. The SMB_VERSION 202584ab085aSmws * constant specified when opening an image indicates the version of the ABI 202684ab085aSmws * the caller expects and the DMTF SMBIOS version the client can understand. 202784ab085aSmws * The library will then map older or newer data structures to that as needed. 202884ab085aSmws */ 202984ab085aSmws 203084ab085aSmws #define SMB_VERSION_23 0x0203 /* SMBIOS encoding for DMTF spec 2.3 */ 203184ab085aSmws #define SMB_VERSION_24 0x0204 /* SMBIOS encoding for DMTF spec 2.4 */ 20324e901881SDale Ghent #define SMB_VERSION_25 0x0205 /* SMBIOS encoding for DMTF spec 2.5 */ 20334e901881SDale Ghent #define SMB_VERSION_26 0x0206 /* SMBIOS encoding for DMTF spec 2.6 */ 20344e901881SDale Ghent #define SMB_VERSION_27 0x0207 /* SMBIOS encoding for DMTF spec 2.7 */ 20354e901881SDale Ghent #define SMB_VERSION_28 0x0208 /* SMBIOS encoding for DMTF spec 2.8 */ 20366734c4b0SRobert Mustacchi #define SMB_VERSION_30 0x0300 /* SMBIOS encoding for DMTF spec 3.0 */ 2037e5cce96fSRobert Mustacchi #define SMB_VERSION_31 0x0301 /* SMBIOS encoding for DMTF spec 3.1 */ 20381566bc34SRobert Mustacchi #define SMB_VERSION_32 0x0302 /* SMBIOS encoding for DMTF spec 3.2 */ 2039176a9270SRobert Mustacchi #define SMB_VERSION_33 0x0303 /* SMBIOS encoding for DMTF spec 3.3 */ 2040c6795799SRobert Mustacchi #define SMB_VERSION_34 0x0304 /* SMBIOS encoding for DMTF spec 3.4 */ 2041d53cdfabSRobert Mustacchi #define SMB_VERSION_35 0x0305 /* SMBIOS encoding for DMTF spec 3.5 */ 20421d1fc316SRobert Mustacchi #define SMB_VERSION_36 0x0306 /* SMBIOS encoding for DMTF spec 3.6 */ 20436bc074b1SRobert Mustacchi #define SMB_VERSION_37 0x0307 /* SMBIOS encoding for DMTF spec 3.7 */ 20446bc074b1SRobert Mustacchi #define SMB_VERSION SMB_VERSION_37 /* SMBIOS latest version definitions */ 204584ab085aSmws 204684ab085aSmws #define SMB_O_NOCKSUM 0x1 /* do not verify header checksums */ 204784ab085aSmws #define SMB_O_NOVERS 0x2 /* do not verify header versions */ 204884ab085aSmws #define SMB_O_ZIDS 0x4 /* strip out identification numbers */ 204984ab085aSmws #define SMB_O_MASK 0x7 /* mask of valid smbios_*open flags */ 205084ab085aSmws 205184ab085aSmws #define SMB_ID_NOTSUP 0xFFFE /* structure is not supported by BIOS */ 205284ab085aSmws #define SMB_ID_NONE 0xFFFF /* structure is a null reference */ 205384ab085aSmws 205484ab085aSmws #define SMB_ERR (-1) /* id_t value indicating error */ 205584ab085aSmws 205684ab085aSmws typedef struct smbios_hdl smbios_hdl_t; 205784ab085aSmws 205884ab085aSmws typedef struct smbios_struct { 205984ab085aSmws id_t smbstr_id; /* structure ID handle */ 206084ab085aSmws uint_t smbstr_type; /* structure type */ 206184ab085aSmws const void *smbstr_data; /* structure data */ 206284ab085aSmws size_t smbstr_size; /* structure size */ 206384ab085aSmws } smbios_struct_t; 206484ab085aSmws 206584ab085aSmws typedef int smbios_struct_f(smbios_hdl_t *, 206684ab085aSmws const smbios_struct_t *, void *); 206784ab085aSmws 206884ab085aSmws extern smbios_hdl_t *smbios_open(const char *, int, int, int *); 206984ab085aSmws extern smbios_hdl_t *smbios_fdopen(int, int, int, int *); 207084ab085aSmws extern smbios_hdl_t *smbios_bufopen(const smbios_entry_t *, 207184ab085aSmws const void *, size_t, int, int, int *); 207284ab085aSmws 207384ab085aSmws extern const void *smbios_buf(smbios_hdl_t *); 207484ab085aSmws extern size_t smbios_buflen(smbios_hdl_t *); 207584ab085aSmws 207684ab085aSmws extern void smbios_checksum(smbios_hdl_t *, smbios_entry_t *); 207784ab085aSmws extern int smbios_write(smbios_hdl_t *, int); 207884ab085aSmws extern void smbios_close(smbios_hdl_t *); 207984ab085aSmws 2080516627f3SJonathan Matthew extern boolean_t smbios_truncated(smbios_hdl_t *); 208184ab085aSmws extern int smbios_errno(smbios_hdl_t *); 208284ab085aSmws extern const char *smbios_errmsg(int); 208384ab085aSmws 208484ab085aSmws extern int smbios_lookup_id(smbios_hdl_t *, id_t, smbios_struct_t *); 2085074bb90dSTom Pothier extern int smbios_lookup_type(smbios_hdl_t *, uint_t, smbios_struct_t *); 208684ab085aSmws extern int smbios_iter(smbios_hdl_t *, smbios_struct_f *, void *); 208784ab085aSmws 20881951a933SToomas Soome extern smbios_entry_point_t smbios_info_smbios(smbios_hdl_t *, 20891951a933SToomas Soome smbios_entry_t *); 20901951a933SToomas Soome extern void smbios_info_smbios_version(smbios_hdl_t *, smbios_version_t *); 209184ab085aSmws extern int smbios_info_common(smbios_hdl_t *, id_t, smbios_info_t *); 2092074bb90dSTom Pothier extern int smbios_info_contains(smbios_hdl_t *, id_t, uint_t, id_t *); 209384ab085aSmws extern id_t smbios_info_bios(smbios_hdl_t *, smbios_bios_t *); 209484ab085aSmws extern id_t smbios_info_system(smbios_hdl_t *, smbios_system_t *); 209584ab085aSmws extern int smbios_info_bboard(smbios_hdl_t *, id_t, smbios_bboard_t *); 209684ab085aSmws extern int smbios_info_chassis(smbios_hdl_t *, id_t, smbios_chassis_t *); 2097d53cdfabSRobert Mustacchi extern int smbios_info_chassis_elts(smbios_hdl_t *, id_t, uint_t *, 2098d53cdfabSRobert Mustacchi smbios_chassis_entry_t **); 2099d53cdfabSRobert Mustacchi extern void smbios_info_chassis_elts_free(smbios_hdl_t *, uint_t, 2100d53cdfabSRobert Mustacchi smbios_chassis_entry_t *); 210184ab085aSmws extern int smbios_info_processor(smbios_hdl_t *, id_t, smbios_processor_t *); 2102074bb90dSTom Pothier extern int smbios_info_extprocessor(smbios_hdl_t *, id_t, 2103074bb90dSTom Pothier smbios_processor_ext_t *); 210484ab085aSmws extern int smbios_info_cache(smbios_hdl_t *, id_t, smbios_cache_t *); 21051d77dcdaSRobert Mustacchi extern int smbios_info_pointdev(smbios_hdl_t *, id_t, smbios_pointdev_t *); 210646782190SRobert Mustacchi extern int smbios_info_battery(smbios_hdl_t *, id_t, smbios_battery_t *); 210784ab085aSmws extern int smbios_info_port(smbios_hdl_t *, id_t, smbios_port_t *); 210803f9f63dSTom Pothier extern int smbios_info_extport(smbios_hdl_t *, id_t, smbios_port_ext_t *); 210984ab085aSmws extern int smbios_info_slot(smbios_hdl_t *, id_t, smbios_slot_t *); 21101566bc34SRobert Mustacchi extern int smbios_info_slot_peers(smbios_hdl_t *, id_t, uint_t *, 21111566bc34SRobert Mustacchi smbios_slot_peer_t **); 21121566bc34SRobert Mustacchi extern void smbios_info_slot_peers_free(smbios_hdl_t *, uint_t, 21131566bc34SRobert Mustacchi smbios_slot_peer_t *); 211484ab085aSmws extern int smbios_info_obdevs(smbios_hdl_t *, id_t, int, smbios_obdev_t *); 211503f9f63dSTom Pothier extern int smbios_info_obdevs_ext(smbios_hdl_t *, id_t, smbios_obdev_ext_t *); 211684ab085aSmws extern int smbios_info_strtab(smbios_hdl_t *, id_t, int, const char *[]); 211784ab085aSmws extern id_t smbios_info_lang(smbios_hdl_t *, smbios_lang_t *); 211884ab085aSmws extern id_t smbios_info_eventlog(smbios_hdl_t *, smbios_evlog_t *); 211984ab085aSmws extern int smbios_info_memarray(smbios_hdl_t *, id_t, smbios_memarray_t *); 2120074bb90dSTom Pothier extern int smbios_info_extmemarray(smbios_hdl_t *, id_t, 2121074bb90dSTom Pothier smbios_memarray_ext_t *); 212284ab085aSmws extern int smbios_info_memarrmap(smbios_hdl_t *, id_t, smbios_memarrmap_t *); 212384ab085aSmws extern int smbios_info_memdevice(smbios_hdl_t *, id_t, smbios_memdevice_t *); 2124074bb90dSTom Pothier extern int smbios_info_extmemdevice(smbios_hdl_t *, id_t, 2125074bb90dSTom Pothier smbios_memdevice_ext_t *); 2126679a141eSToomas Soome extern int smbios_info_extmemdevice_cs(smbios_hdl_t *, id_t, uint_t *, 2127679a141eSToomas Soome uint8_t **); 2128679a141eSToomas Soome extern void smbios_info_extmemdevice_cs_free(smbios_hdl_t *, uint_t, uint8_t *); 212984ab085aSmws extern int smbios_info_memdevmap(smbios_hdl_t *, id_t, smbios_memdevmap_t *); 213084ab085aSmws extern id_t smbios_info_hwsec(smbios_hdl_t *, smbios_hwsec_t *); 2131f44a1392SRobert Mustacchi extern int smbios_info_vprobe(smbios_hdl_t *, id_t, smbios_vprobe_t *); 2132f44a1392SRobert Mustacchi extern int smbios_info_cooldev(smbios_hdl_t *, id_t, smbios_cooldev_t *); 2133f44a1392SRobert Mustacchi extern int smbios_info_tprobe(smbios_hdl_t *, id_t, smbios_tprobe_t *); 2134f44a1392SRobert Mustacchi extern int smbios_info_iprobe(smbios_hdl_t *, id_t, smbios_iprobe_t *); 213584ab085aSmws extern id_t smbios_info_boot(smbios_hdl_t *, smbios_boot_t *); 213684ab085aSmws extern id_t smbios_info_ipmi(smbios_hdl_t *, smbios_ipmi_t *); 213732ece1f9SRobert Mustacchi extern int smbios_info_powersup(smbios_hdl_t *, id_t, smbios_powersup_t *); 2138*064d431aSRobert Mustacchi extern int smbios_info_addinfo_nents(smbios_hdl_t *, id_t, uint_t *); 2139*064d431aSRobert Mustacchi extern int smbios_info_addinfo_ent(smbios_hdl_t *, id_t, uint_t, 2140*064d431aSRobert Mustacchi smbios_addinfo_ent_t **); 2141*064d431aSRobert Mustacchi extern void smbios_info_addinfo_ent_free(smbios_hdl_t *, 2142*064d431aSRobert Mustacchi smbios_addinfo_ent_t *); 2143074bb90dSTom Pothier extern int smbios_info_pciexrc(smbios_hdl_t *, id_t, smbios_pciexrc_t *); 2144176a9270SRobert Mustacchi extern int smbios_info_processor_info(smbios_hdl_t *, id_t, 2145176a9270SRobert Mustacchi smbios_processor_info_t *); 2146176a9270SRobert Mustacchi extern int smbios_info_processor_riscv(smbios_hdl_t *, id_t, 2147176a9270SRobert Mustacchi smbios_processor_info_riscv_t *); 2148d53cdfabSRobert Mustacchi extern int smbios_info_strprop(smbios_hdl_t *, id_t, smbios_strprop_t *); 2149d53cdfabSRobert Mustacchi extern int smbios_info_fwinfo(smbios_hdl_t *, id_t, smbios_fwinfo_t *); 2150d53cdfabSRobert Mustacchi extern int smbios_info_fwinfo_comps(smbios_hdl_t *, id_t, uint_t *, 2151d53cdfabSRobert Mustacchi smbios_fwinfo_comp_t **); 2152d53cdfabSRobert Mustacchi extern void smbios_info_fwinfo_comps_free(smbios_hdl_t *, uint_t, 2153d53cdfabSRobert Mustacchi smbios_fwinfo_comp_t *); 2154f44a1392SRobert Mustacchi 21559c94f155SCheng Sean Ye extern const char *smbios_psn(smbios_hdl_t *); 21569c94f155SCheng Sean Ye extern const char *smbios_csn(smbios_hdl_t *); 21579c94f155SCheng Sean Ye 215884ab085aSmws #ifndef _KERNEL 215984ab085aSmws /* 216084ab085aSmws * The smbios_*_desc() and smbios_*_name() interfaces can be used for utilities 2161bbf21555SRichard Lowe * such as smbios(8) that wish to decode SMBIOS fields for humans. The _desc 216284ab085aSmws * functions return the comment string next to the #defines listed above, and 216384ab085aSmws * the _name functions return the appropriate #define identifier itself. 216484ab085aSmws */ 216546782190SRobert Mustacchi extern const char *smbios_battery_chem_desc(uint_t); 216646782190SRobert Mustacchi 216784ab085aSmws extern const char *smbios_bboard_flag_desc(uint_t); 216884ab085aSmws extern const char *smbios_bboard_flag_name(uint_t); 216984ab085aSmws extern const char *smbios_bboard_type_desc(uint_t); 217084ab085aSmws 217184ab085aSmws extern const char *smbios_bios_flag_desc(uint64_t); 217284ab085aSmws extern const char *smbios_bios_flag_name(uint64_t); 217384ab085aSmws 217484ab085aSmws extern const char *smbios_bios_xb1_desc(uint_t); 217584ab085aSmws extern const char *smbios_bios_xb1_name(uint_t); 217684ab085aSmws extern const char *smbios_bios_xb2_desc(uint_t); 217784ab085aSmws extern const char *smbios_bios_xb2_name(uint_t); 217884ab085aSmws 217984ab085aSmws extern const char *smbios_boot_desc(uint_t); 218084ab085aSmws 218184ab085aSmws extern const char *smbios_cache_assoc_desc(uint_t); 218284ab085aSmws extern const char *smbios_cache_ctype_desc(uint_t); 218384ab085aSmws extern const char *smbios_cache_ctype_name(uint_t); 218484ab085aSmws extern const char *smbios_cache_ecc_desc(uint_t); 218584ab085aSmws extern const char *smbios_cache_flag_desc(uint_t); 218684ab085aSmws extern const char *smbios_cache_flag_name(uint_t); 218784ab085aSmws extern const char *smbios_cache_loc_desc(uint_t); 218884ab085aSmws extern const char *smbios_cache_logical_desc(uint_t); 218984ab085aSmws extern const char *smbios_cache_mode_desc(uint_t); 219084ab085aSmws 219184ab085aSmws extern const char *smbios_chassis_state_desc(uint_t); 219284ab085aSmws extern const char *smbios_chassis_type_desc(uint_t); 219384ab085aSmws 219484ab085aSmws extern const char *smbios_evlog_flag_desc(uint_t); 219584ab085aSmws extern const char *smbios_evlog_flag_name(uint_t); 219684ab085aSmws extern const char *smbios_evlog_format_desc(uint_t); 219784ab085aSmws extern const char *smbios_evlog_method_desc(uint_t); 219884ab085aSmws 2199d53cdfabSRobert Mustacchi extern const char *smbios_fwinfo_ch_name(uint_t); 2200d53cdfabSRobert Mustacchi extern const char *smbios_fwinfo_ch_desc(uint_t); 2201d53cdfabSRobert Mustacchi extern const char *smbios_fwinfo_id_desc(uint_t); 2202d53cdfabSRobert Mustacchi extern const char *smbios_fwinfo_state_desc(uint_t); 2203d53cdfabSRobert Mustacchi extern const char *smbios_fwinfo_vers_desc(uint_t); 2204d53cdfabSRobert Mustacchi 2205f44a1392SRobert Mustacchi extern const char *smbios_vprobe_loc_desc(uint_t); 2206f44a1392SRobert Mustacchi extern const char *smbios_vprobe_status_desc(uint_t); 2207f44a1392SRobert Mustacchi 2208f44a1392SRobert Mustacchi extern const char *smbios_cooldev_status_desc(uint_t); 2209f44a1392SRobert Mustacchi extern const char *smbios_cooldev_type_desc(uint_t); 2210f44a1392SRobert Mustacchi 2211f44a1392SRobert Mustacchi extern const char *smbios_tprobe_loc_desc(uint_t); 2212f44a1392SRobert Mustacchi extern const char *smbios_tprobe_status_desc(uint_t); 2213f44a1392SRobert Mustacchi 2214f44a1392SRobert Mustacchi extern const char *smbios_iprobe_loc_desc(uint_t); 2215f44a1392SRobert Mustacchi extern const char *smbios_iprobe_status_desc(uint_t); 2216f44a1392SRobert Mustacchi 221784ab085aSmws extern const char *smbios_ipmi_flag_name(uint_t); 221884ab085aSmws extern const char *smbios_ipmi_flag_desc(uint_t); 221984ab085aSmws extern const char *smbios_ipmi_type_desc(uint_t); 222084ab085aSmws 222132ece1f9SRobert Mustacchi extern const char *smbios_powersup_flag_name(uint_t); 222232ece1f9SRobert Mustacchi extern const char *smbios_powersup_flag_desc(uint_t); 222332ece1f9SRobert Mustacchi extern const char *smbios_powersup_input_desc(uint_t); 222432ece1f9SRobert Mustacchi extern const char *smbios_powersup_status_desc(uint_t); 222532ece1f9SRobert Mustacchi extern const char *smbios_powersup_type_desc(uint_t); 222632ece1f9SRobert Mustacchi 222784ab085aSmws extern const char *smbios_hwsec_desc(uint_t); 222884ab085aSmws 222984ab085aSmws extern const char *smbios_memarray_loc_desc(uint_t); 223084ab085aSmws extern const char *smbios_memarray_use_desc(uint_t); 223184ab085aSmws extern const char *smbios_memarray_ecc_desc(uint_t); 223284ab085aSmws 223384ab085aSmws extern const char *smbios_memdevice_form_desc(uint_t); 223484ab085aSmws extern const char *smbios_memdevice_type_desc(uint_t); 223584ab085aSmws extern const char *smbios_memdevice_flag_name(uint_t); 223684ab085aSmws extern const char *smbios_memdevice_flag_desc(uint_t); 22374e901881SDale Ghent extern const char *smbios_memdevice_rank_desc(uint_t); 22381566bc34SRobert Mustacchi extern const char *smbios_memdevice_memtech_desc(uint_t); 22391566bc34SRobert Mustacchi extern const char *smbios_memdevice_op_capab_name(uint_t); 22401566bc34SRobert Mustacchi extern const char *smbios_memdevice_op_capab_desc(uint_t); 224184ab085aSmws 22426734c4b0SRobert Mustacchi extern const char *smbios_onboard_type_desc(uint_t); 2243d53cdfabSRobert Mustacchi extern const char *smbios_onboard_ext_type_desc(uint_t); 22446734c4b0SRobert Mustacchi 22451d77dcdaSRobert Mustacchi extern const char *smbios_pointdev_iface_desc(uint_t); 22461d77dcdaSRobert Mustacchi extern const char *smbios_pointdev_type_desc(uint_t); 22471d77dcdaSRobert Mustacchi 224884ab085aSmws extern const char *smbios_port_conn_desc(uint_t); 224984ab085aSmws extern const char *smbios_port_type_desc(uint_t); 225084ab085aSmws 225184ab085aSmws extern const char *smbios_processor_family_desc(uint_t); 225284ab085aSmws extern const char *smbios_processor_status_desc(uint_t); 225384ab085aSmws extern const char *smbios_processor_type_desc(uint_t); 225484ab085aSmws extern const char *smbios_processor_upgrade_desc(uint_t); 22554e901881SDale Ghent extern const char *smbios_processor_core_flag_name(uint_t); 22564e901881SDale Ghent extern const char *smbios_processor_core_flag_desc(uint_t); 225784ab085aSmws 2258176a9270SRobert Mustacchi extern const char *smbios_processor_info_type_desc(uint_t); 2259176a9270SRobert Mustacchi extern const char *smbios_riscv_isa_desc(uint64_t); 2260176a9270SRobert Mustacchi extern const char *smbios_riscv_isa_name(uint64_t); 2261176a9270SRobert Mustacchi extern const char *smbios_riscv_priv_desc(uint_t); 2262176a9270SRobert Mustacchi extern const char *smbios_riscv_priv_name(uint_t); 2263176a9270SRobert Mustacchi extern const char *smbios_riscv_width_desc(uint_t); 2264176a9270SRobert Mustacchi 226584ab085aSmws extern const char *smbios_slot_type_desc(uint_t); 226684ab085aSmws extern const char *smbios_slot_width_desc(uint_t); 226784ab085aSmws extern const char *smbios_slot_usage_desc(uint_t); 226884ab085aSmws extern const char *smbios_slot_length_desc(uint_t); 226984ab085aSmws extern const char *smbios_slot_ch1_desc(uint_t); 227084ab085aSmws extern const char *smbios_slot_ch1_name(uint_t); 227184ab085aSmws extern const char *smbios_slot_ch2_desc(uint_t); 227284ab085aSmws extern const char *smbios_slot_ch2_name(uint_t); 2273d53cdfabSRobert Mustacchi extern const char *smbios_slot_height_desc(uint_t); 2274d53cdfabSRobert Mustacchi 2275d53cdfabSRobert Mustacchi extern const char *smbios_strprop_id_desc(uint_t); 227684ab085aSmws 227784ab085aSmws extern const char *smbios_type_desc(uint_t); 227884ab085aSmws extern const char *smbios_type_name(uint_t); 227984ab085aSmws 228084ab085aSmws extern const char *smbios_system_wakeup_desc(uint_t); 228184ab085aSmws #endif /* !_KERNEL */ 228284ab085aSmws 228384ab085aSmws #ifdef _KERNEL 228484ab085aSmws /* 228584ab085aSmws * For SMBIOS clients within the kernel itself, ksmbios is used to refer to 228684ab085aSmws * the kernel's current snapshot of the SMBIOS, if one exists, and the 228784ab085aSmws * ksmbios_flags tunable is the set of flags for use with smbios_open(). 228884ab085aSmws */ 228984ab085aSmws extern smbios_hdl_t *ksmbios; 229084ab085aSmws extern int ksmbios_flags; 229184ab085aSmws #endif /* _KERNEL */ 229284ab085aSmws 229384ab085aSmws #ifdef __cplusplus 229484ab085aSmws } 229584ab085aSmws #endif 229684ab085aSmws 229784ab085aSmws #endif /* _SYS_SMBIOS_H */ 2298