xref: /illumos-gate/usr/src/uts/common/sys/smbios.h (revision 064d431a)
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