1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
* Copyright (c) 2017, Joyent, Inc.
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* This header file defines the interfaces available from the SMBIOS access
* library, libsmbios, and an equivalent kernel module. This API can be used
* to access DMTF SMBIOS data from a device, file, or raw memory buffer.
*
* This is NOT a Public interface, and should be considered Unstable, as it is
* subject to change without notice as the DMTF SMBIOS specification evolves.
* Therefore, be aware that any program linked with this API in this
* instance of illumos is almost guaranteed to break in the next release.
*/
#ifndef _SYS_SMBIOS_H
#define _SYS_SMBIOS_H
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum smbios_entry_point_type {
SMBIOS_ENTRY_POINT_21,
SMBIOS_ENTRY_POINT_30
} smbios_entry_point_t;
/*
* SMBIOS Structure Table Entry Point. See DSP0134 5.2.1 for more information.
* The structure table entry point is located by searching for the anchor.
*/
#pragma pack(1)
typedef struct smbios_21_entry {
char smbe_eanchor[4]; /* anchor tag (SMB_ENTRY_EANCHOR) */
uint8_t smbe_ecksum; /* checksum of entry point structure */
uint8_t smbe_elen; /* length in bytes of entry point */
uint8_t smbe_major; /* major version of the SMBIOS spec */
uint8_t smbe_minor; /* minor version of the SMBIOS spec */
uint16_t smbe_maxssize; /* maximum size in bytes of a struct */
uint8_t smbe_revision; /* entry point structure revision */
uint8_t smbe_format[5]; /* entry point revision-specific data */
char smbe_ianchor[5]; /* intermed. tag (SMB_ENTRY_IANCHOR) */
uint8_t smbe_icksum; /* intermed. checksum */
uint16_t smbe_stlen; /* length in bytes of structure table */
uint32_t smbe_staddr; /* physical addr of structure table */
uint16_t smbe_stnum; /* number of structure table entries */
uint8_t smbe_bcdrev; /* BCD value representing DMI version */
} smbios_21_entry_t;
/*
* The 64-bit SMBIOS 3.0 Entry Point. See DSP0134 5.2.2 for more information.
* The structure table entry point is located by searching for the anchor.
*/
typedef struct smbios_30_entry {
char smbe_eanchor[5]; /* anchor tag (SMB3_ENTRY_EANCHOR) */
uint8_t smbe_ecksum; /* checksum of entry point structure */
uint8_t smbe_elen; /* length in bytes of entry point */
uint8_t smbe_major; /* major version of the SMBIOS spec */
uint8_t smbe_minor; /* minor version of the SMBIOS spec */
uint8_t smbe_docrev; /* specification docrev */
uint8_t smbe_revision; /* entry point structure revision */
uint8_t smbe_reserved;
uint32_t smbe_stlen; /* length in bytes of structure table */
uint64_t smbe_staddr; /* physical addr of structure table */
} smbios_30_entry_t;
typedef union {
smbios_21_entry_t ep21;
smbios_30_entry_t ep30;
} smbios_entry_t;
#pragma pack()
#define SMB_ENTRY_EANCHOR "_SM_" /* structure table entry point anchor */
#define SMB_ENTRY_EANCHORLEN 4 /* length of entry point anchor */
#define SMB3_ENTRY_EANCHOR "_SM3_" /* structure table entry point anchor */
#define SMB3_ENTRY_EANCHORLEN 5 /* length of entry point anchor */
#define SMB_ENTRY_IANCHOR "_DMI_" /* intermediate anchor string */
#define SMB_ENTRY_IANCHORLEN 5 /* length of intermediate anchor */
#define SMB_ENTRY_MAXLEN 255 /* maximum length of entry point */
/*
* Structure type codes. The comments next to each type include an (R) note to
* indicate a structure that is required as of SMBIOS v2.8 and an (O) note to
* indicate a structure that is obsolete as of SMBIOS v2.8.
*/
#define SMB_TYPE_BIOS 0 /* BIOS information (R) */
#define SMB_TYPE_SYSTEM 1 /* system information (R) */
#define SMB_TYPE_BASEBOARD 2 /* base board */
#define SMB_TYPE_CHASSIS 3 /* system enclosure or chassis (R) */
#define SMB_TYPE_PROCESSOR 4 /* processor (R) */
#define SMB_TYPE_MEMCTL 5 /* memory controller (O) */
#define SMB_TYPE_MEMMOD 6 /* memory module (O) */
#define SMB_TYPE_CACHE 7 /* processor cache (R) */
#define SMB_TYPE_PORT 8 /* port connector */
#define SMB_TYPE_SLOT 9 /* upgradeable system slot (R) */
#define SMB_TYPE_OBDEVS 10 /* on-board devices (O) */
#define SMB_TYPE_OEMSTR 11 /* OEM string table */
#define SMB_TYPE_SYSCONFSTR 12 /* system configuration string table */
#define SMB_TYPE_LANG 13 /* BIOS language information */
#define SMB_TYPE_GROUP 14 /* group associations */
#define SMB_TYPE_EVENTLOG 15 /* system event log */
#define SMB_TYPE_MEMARRAY 16 /* physical memory array (R) */
#define SMB_TYPE_MEMDEVICE 17 /* memory device (R) */
#define SMB_TYPE_MEMERR32 18 /* 32-bit memory error information */
#define SMB_TYPE_MEMARRAYMAP 19 /* memory array mapped address (R) */
#define SMB_TYPE_MEMDEVICEMAP 20 /* memory device mapped address */
#define SMB_TYPE_POINTDEV 21 /* built-in pointing device */
#define SMB_TYPE_BATTERY 22 /* portable battery */
#define SMB_TYPE_RESET 23 /* system reset settings */
#define SMB_TYPE_SECURITY 24 /* hardware security settings */
#define SMB_TYPE_POWERCTL 25 /* system power controls */
#define SMB_TYPE_VPROBE 26 /* voltage probe */
#define SMB_TYPE_COOLDEV 27 /* cooling device */
#define SMB_TYPE_TPROBE 28 /* temperature probe */
#define SMB_TYPE_IPROBE 29 /* current probe */
#define SMB_TYPE_OOBRA 30 /* out-of-band remote access facility */
#define SMB_TYPE_BIS 31 /* boot integrity services */
#define SMB_TYPE_BOOT 32 /* system boot status (R) */
#define SMB_TYPE_MEMERR64 33 /* 64-bit memory error information */
#define SMB_TYPE_MGMTDEV 34 /* management device */
#define SMB_TYPE_MGMTDEVCP 35 /* management device component */
#define SMB_TYPE_MGMTDEVDATA 36 /* management device threshold data */
#define SMB_TYPE_MEMCHAN 37 /* memory channel */
#define SMB_TYPE_IPMIDEV 38 /* IPMI device information */
#define SMB_TYPE_POWERSUP 39 /* system power supply */
#define SMB_TYPE_ADDINFO 40 /* additional information */
#define SMB_TYPE_OBDEVEXT 41 /* on-board device extended info */
#define SMB_TYPE_MCHI 42 /* mgmt controller host interface */
#define SMB_TYPE_TPM 43 /* TPM device */
#define SMB_TYPE_INACTIVE 126 /* inactive table entry */
#define SMB_TYPE_EOT 127 /* end of table */
#define SMB_TYPE_OEM_LO 128 /* start of OEM-specific type range */
#define SUN_OEM_EXT_PROCESSOR 132 /* processor extended info */
#define SUN_OEM_EXT_PORT 136 /* port exteded info */
#define SUN_OEM_PCIEXRC 138 /* PCIE RootComplex/RootPort info */
#define SUN_OEM_EXT_MEMARRAY 144 /* phys memory array extended info */
#define SUN_OEM_EXT_MEMDEVICE 145 /* memory device extended info */
#define SMB_TYPE_OEM_HI 256 /* end of OEM-specific type range */
/*
* OEM string indicating "Platform Resource Management Specification"
* compliance.
*/
#define SMB_PRMS1 "SUNW-PRMS-1"
/*
* Some default values set by BIOS vendor
*/
#define SMB_DEFAULT1 "To Be Filled By O.E.M."
#define SMB_DEFAULT2 "Not Available"
/*
* SMBIOS Common Information. These structures do not correspond to anything
* in the SMBIOS specification, but allow library clients to more easily read
* information that is frequently encoded into the various SMBIOS structures.
*/
typedef struct smbios_info {
const char *smbi_manufacturer; /* manufacturer */
const char *smbi_product; /* product name */
const char *smbi_version; /* version */
const char *smbi_serial; /* serial number */
const char *smbi_asset; /* asset tag */
const char *smbi_location; /* location tag */
const char *smbi_part; /* part number */
} smbios_info_t;
typedef struct smbios_version {
uint8_t smbv_major; /* version major number */
uint8_t smbv_minor; /* version minor number */
} smbios_version_t;
#define SMB_CONT_BYTE 1 /* contained elements are byte size */
#define SMB_CONT_WORD 2 /* contained elements are word size */
#define SMB_CONT_MAX 255 /* maximum contained objects */
/*
* SMBIOS Bios Information. See DSP0134 Section 7.1 for more information.
* smbb_romsize is converted from the implementation format into bytes. Note, if
* we do not have an extended BIOS ROM size, it is filled in with the default
* BIOS ROM size.
*/
typedef struct smbios_bios {
const char *smbb_vendor; /* bios vendor string */
const char *smbb_version; /* bios version string */
const char *smbb_reldate; /* bios release date */
uint32_t smbb_segment; /* bios address segment location */
uint32_t smbb_romsize; /* bios rom size in bytes */
uint32_t smbb_runsize; /* bios image size in bytes */
uint64_t smbb_cflags; /* bios characteristics */
const uint8_t *smbb_xcflags; /* bios characteristics extensions */
size_t smbb_nxcflags; /* number of smbb_xcflags[] bytes */
smbios_version_t smbb_biosv; /* bios version */
smbios_version_t smbb_ecfwv; /* bios embedded ctrl f/w version */
uint64_t smbb_extromsize; /* Extended bios ROM Size */
} smbios_bios_t;
#define SMB_BIOSFL_RSV0 0x00000001 /* reserved bit zero */
#define SMB_BIOSFL_RSV1 0x00000002 /* reserved bit one */
#define SMB_BIOSFL_UNKNOWN 0x00000004 /* unknown */
#define SMB_BIOSFL_BCNOTSUP 0x00000008 /* BIOS chars not supported */
#define SMB_BIOSFL_ISA 0x00000010 /* ISA is supported */
#define SMB_BIOSFL_MCA 0x00000020 /* MCA is supported */
#define SMB_BIOSFL_EISA 0x00000040 /* EISA is supported */
#define SMB_BIOSFL_PCI 0x00000080 /* PCI is supported */
#define SMB_BIOSFL_PCMCIA 0x00000100 /* PCMCIA is supported */
#define SMB_BIOSFL_PLUGNPLAY 0x00000200 /* Plug and Play is supported */
#define SMB_BIOSFL_APM 0x00000400 /* APM is supported */
#define SMB_BIOSFL_FLASH 0x00000800 /* BIOS is Flash Upgradeable */
#define SMB_BIOSFL_SHADOW 0x00001000 /* BIOS shadowing is allowed */
#define SMB_BIOSFL_VLVESA 0x00002000 /* VL-VESA is supported */
#define SMB_BIOSFL_ESCD 0x00004000 /* ESCD support is available */
#define SMB_BIOSFL_CDBOOT 0x00008000 /* Boot from CD is supported */
#define SMB_BIOSFL_SELBOOT 0x00010000 /* Selectable Boot supported */
#define SMB_BIOSFL_ROMSOCK 0x00020000 /* BIOS ROM is socketed */
#define SMB_BIOSFL_PCMBOOT 0x00040000 /* Boot from PCMCIA supported */
#define SMB_BIOSFL_EDD 0x00080000 /* EDD Spec is supported */
#define SMB_BIOSFL_NEC9800 0x00100000 /* int 0x13 NEC 9800 floppy */
#define SMB_BIOSFL_TOSHIBA 0x00200000 /* int 0x13 Toshiba floppy */
#define SMB_BIOSFL_525_360K 0x00400000 /* int 0x13 5.25" 360K floppy */
#define SMB_BIOSFL_525_12M 0x00800000 /* int 0x13 5.25" 1.2M floppy */
#define SMB_BIOSFL_35_720K 0x01000000 /* int 0x13 3.5" 720K floppy */
#define SMB_BIOSFL_35_288M 0x02000000 /* int 0x13 3.5" 2.88M floppy */
#define SMB_BIOSFL_I5_PRINT 0x04000000 /* int 0x5 print screen svcs */
#define SMB_BIOSFL_I9_KBD 0x08000000 /* int 0x9 8042 keyboard svcs */
#define SMB_BIOSFL_I14_SER 0x10000000 /* int 0x14 serial svcs */
#define SMB_BIOSFL_I17_PRINTER 0x20000000 /* int 0x17 printer svcs */
#define SMB_BIOSFL_I10_CGA 0x40000000 /* int 0x10 CGA svcs */
#define SMB_BIOSFL_NEC_PC98 0x80000000 /* NEC PC-98 */
/*
* These values are used to allow consumers to have raw access to the extended
* characteristic flags. We explicitly don't include the extended BIOS
* information from section 3.1 as part of this as it has its own member.
*/
#define SMB_BIOSXB_1 0 /* bios extension byte 1 (7.1.2.1) */
#define SMB_BIOSXB_2 1 /* bios extension byte 2 (7.1.2.2) */
#define SMB_BIOSXB_BIOS_MAJ 2 /* bios major version */
#define SMB_BIOSXB_BIOS_MIN 3 /* bios minor version */
#define SMB_BIOSXB_ECFW_MAJ 4 /* extended ctlr f/w major version */
#define SMB_BIOSXB_ECFW_MIN 5 /* extended ctlr f/w minor version */
#define SMB_BIOSXB1_ACPI 0x01 /* ACPI is supported */
#define SMB_BIOSXB1_USBL 0x02 /* USB legacy is supported */
#define SMB_BIOSXB1_AGP 0x04 /* AGP is supported */
#define SMB_BIOSXB1_I20 0x08 /* I2O boot is supported */
#define SMB_BIOSXB1_LS120 0x10 /* LS-120 boot is supported */
#define SMB_BIOSXB1_ATZIP 0x20 /* ATAPI ZIP drive boot is supported */
#define SMB_BIOSXB1_1394 0x40 /* 1394 boot is supported */
#define SMB_BIOSXB1_SMBAT 0x80 /* Smart Battery is supported */
#define SMB_BIOSXB2_BBOOT 0x01 /* BIOS Boot Specification supported */
#define SMB_BIOSXB2_FKNETSVC 0x02 /* F-key Network Svc boot supported */
#define SMB_BIOSXB2_ETCDIST 0x04 /* Enable Targeted Content Distrib. */
#define SMB_BIOSXB2_UEFI 0x08 /* UEFI Specification supported */
#define SMB_BIOSXB2_VM 0x10 /* SMBIOS table describes a VM */
/*
* SMBIOS System Information. See DSP0134 Section 7.2 for more information.
* The current set of smbs_wakeup values is defined after the structure.
*/
typedef struct smbios_system {
const uint8_t *smbs_uuid; /* UUID byte array */
uint8_t smbs_uuidlen; /* UUID byte array length */
uint8_t smbs_wakeup; /* wake-up event */
const char *smbs_sku; /* SKU number */
const char *smbs_family; /* family */
} smbios_system_t;
#define SMB_WAKEUP_RSV0 0x00 /* reserved */
#define SMB_WAKEUP_OTHER 0x01 /* other */
#define SMB_WAKEUP_UNKNOWN 0x02 /* unknown */
#define SMB_WAKEUP_APM 0x03 /* APM timer */
#define SMB_WAKEUP_MODEM 0x04 /* modem ring */
#define SMB_WAKEUP_LAN 0x05 /* LAN remote */
#define SMB_WAKEUP_SWITCH 0x06 /* power switch */
#define SMB_WAKEUP_PCIPME 0x07 /* PCI PME# */
#define SMB_WAKEUP_AC 0x08 /* AC power restored */
/*
* SMBIOS Base Board description. See DSP0134 Section 7.3 for more
* information. smbb_flags and smbb_type definitions are below.
*/
typedef struct smbios_bboard {
id_t smbb_chassis; /* chassis containing this board */
uint8_t smbb_flags; /* flags (see below) */
uint8_t smbb_type; /* board type (see below) */
uint8_t smbb_contn; /* number of contained object hdls */
} smbios_bboard_t;
#define SMB_BBFL_MOTHERBOARD 0x01 /* board is a motherboard */
#define SMB_BBFL_NEEDAUX 0x02 /* auxiliary card or daughter req'd */
#define SMB_BBFL_REMOVABLE 0x04 /* board is removable */
#define SMB_BBFL_REPLACABLE 0x08 /* board is field-replacable */
#define SMB_BBFL_HOTSWAP 0x10 /* board is hot-swappable */
#define SMB_BBT_UNKNOWN 0x1 /* unknown */
#define SMB_BBT_OTHER 0x2 /* other */
#define SMB_BBT_SBLADE 0x3 /* server blade */
#define SMB_BBT_CSWITCH 0x4 /* connectivity switch */
#define SMB_BBT_SMM 0x5 /* system management module */
#define SMB_BBT_PROC 0x6 /* processor module */
#define SMB_BBT_IO 0x7 /* i/o module */
#define SMB_BBT_MEM 0x8 /* memory module */
#define SMB_BBT_DAUGHTER 0x9 /* daughterboard */
#define SMB_BBT_MOTHER 0xA /* motherboard */
#define SMB_BBT_PROCMEM 0xB /* processor/memory module */
#define SMB_BBT_PROCIO 0xC /* processor/i/o module */
#define SMB_BBT_INTER 0xD /* interconnect board */
/*
* SMBIOS Chassis description. See DSP0134 Section 7.4 for more information.
* We move the lock bit of the type field into smbc_lock for easier processing.
*/
typedef struct smbios_chassis {
uint32_t smbc_oemdata; /* OEM-specific data */
uint8_t smbc_lock; /* lock present? */
uint8_t smbc_type; /* type */
uint8_t smbc_bustate; /* boot-up state */
uint8_t smbc_psstate; /* power supply state */
uint8_t smbc_thstate; /* thermal state */
uint8_t smbc_security; /* security status */
uint8_t smbc_uheight; /* enclosure height in U's */
uint8_t smbc_cords; /* number of power cords */
uint8_t smbc_elems; /* number of element records (n) */
uint8_t smbc_elemlen; /* length of contained element (m) */
char smbc_sku[256]; /* SKU number (as a string) */
} smbios_chassis_t;
#define SMB_CHT_OTHER 0x01 /* other */
#define SMB_CHT_UNKNOWN 0x02 /* unknown */
#define SMB_CHT_DESKTOP 0x03 /* desktop */
#define SMB_CHT_LPDESKTOP 0x04 /* low-profile desktop */
#define SMB_CHT_PIZZA 0x05 /* pizza box */
#define SMB_CHT_MINITOWER 0x06 /* mini-tower */
#define SMB_CHT_TOWER 0x07 /* tower */
#define SMB_CHT_PORTABLE 0x08 /* portable */
#define SMB_CHT_LAPTOP 0x09 /* laptop */
#define SMB_CHT_NOTEBOOK 0x0A /* notebook */
#define SMB_CHT_HANDHELD 0x0B /* hand-held */
#define SMB_CHT_DOCK 0x0C /* docking station */
#define SMB_CHT_ALLIN1 0x0D /* all-in-one */
#define SMB_CHT_SUBNOTE 0x0E /* sub-notebook */
#define SMB_CHT_SPACESAVE 0x0F /* space-saving */
#define SMB_CHT_LUNCHBOX 0x10 /* lunchbox */
#define SMB_CHT_MAIN 0x11 /* main server chassis */
#define SMB_CHT_EXPANSION 0x12 /* expansion chassis */
#define SMB_CHT_SUB 0x13 /* sub-chassis */
#define SMB_CHT_BUS 0x14 /* bus expansion chassis */
#define SMB_CHT_PERIPHERAL 0x15 /* peripheral chassis */
#define SMB_CHT_RAID 0x16 /* raid chassis */
#define SMB_CHT_RACK 0x17 /* rack mount chassis */
#define SMB_CHT_SEALED 0x18 /* sealed case pc */
#define SMB_CHT_MULTI 0x19 /* multi-system chassis */
#define SMB_CHT_CPCI 0x1A /* compact PCI */
#define SMB_CHT_ATCA 0x1B /* advanced TCA */
#define SMB_CHT_BLADE 0x1C /* blade */
#define SMB_CHT_BLADEENC 0x1D /* blade enclosure */
#define SMB_CHT_TABLET 0x1E /* tablet */
#define SMB_CHT_CONVERTIBLE 0x1F /* convertible */
#define SMB_CHT_DETACHABLE 0x20 /* detachable */
#define SMB_CHT_IOTGW 0x21 /* IoT Gateway */
#define SMB_CHT_EMBEDPC 0x22 /* Embedded PC */
#define SMB_CHT_MINIPC 0x23 /* Mini PC */
#define SMB_CHT_STICKPC 0x24 /* Stick PC */
#define SMB_CHST_OTHER 0x01 /* other */
#define SMB_CHST_UNKNOWN 0x02 /* unknown */
#define SMB_CHST_SAFE 0x03 /* safe */
#define SMB_CHST_WARNING 0x04 /* warning */
#define SMB_CHST_CRITICAL 0x05 /* critical */
#define SMB_CHST_NONREC 0x06 /* non-recoverable */
#define SMB_CHSC_OTHER 0x01 /* other */
#define SMB_CHSC_UNKNOWN 0x02 /* unknown */
#define SMB_CHSC_NONE 0x03 /* none */
#define SMB_CHSC_EILOCK 0x04 /* external interface locked out */
#define SMB_CHSC_EIENAB 0x05 /* external interface enabled */
/*
* SMBIOS Processor description. See DSP0134 Section 7.5 for more details.
* If the L1, L2, or L3 cache handle is -1, the cache information is unknown.
* If the handle refers to something of size 0, that type of cache is absent.
*
* NOTE: Although SMBIOS exports a 64-bit CPUID result, this value should not
* be used for any purpose other than BIOS debugging. illumos itself computes
* its own CPUID value and applies knowledge of additional errata and processor
* specific CPUID variations, so this value should not be used for anything.
*/
typedef struct smbios_processor {
uint64_t smbp_cpuid; /* processor cpuid information */
uint32_t smbp_family; /* processor family */
uint8_t smbp_type; /* processor type (SMB_PRT_*) */
uint8_t smbp_voltage; /* voltage (SMB_PRV_*) */
uint8_t smbp_status; /* status (SMB_PRS_*) */
uint8_t smbp_upgrade; /* upgrade (SMB_PRU_*) */
uint32_t smbp_clkspeed; /* external clock speed in MHz */
uint32_t smbp_maxspeed; /* maximum speed in MHz */
uint32_t smbp_curspeed; /* current speed in MHz */
id_t smbp_l1cache; /* L1 cache handle */
id_t smbp_l2cache; /* L2 cache handle */
id_t smbp_l3cache; /* L3 cache handle */
uint32_t smbp_corecount;
/* number of cores per processor socket */
uint32_t smbp_coresenabled;
/* number of enabled cores per processor socket */
uint32_t smbp_threadcount;
/* number of threads per processor socket */
uint16_t smbp_cflags;
/* processor characteristics (SMB_PRC_*) */
uint16_t smbp_family2; /* processor family 2 */
uint16_t smbp_corecount2; /* core count 2 */
uint16_t smbp_coresenabled2; /* cores enabled 2 */
uint16_t smbp_threadcount2; /* thread count 2 */
} smbios_processor_t;
#define SMB_PRT_OTHER 0x01 /* other */
#define SMB_PRT_UNKNOWN 0x02 /* unknown */
#define SMB_PRT_CENTRAL 0x03 /* central processor */
#define SMB_PRT_MATH 0x04 /* math processor */
#define SMB_PRT_DSP 0x05 /* DSP processor */
#define SMB_PRT_VIDEO 0x06 /* video processor */
#define SMB_PRV_LEGACY(v) (!((v) & 0x80)) /* legacy voltage mode */
#define SMB_PRV_FIXED(v) ((v) & 0x80) /* fixed voltage mode */
#define SMB_PRV_5V 0x01 /* 5V is supported */
#define SMB_PRV_33V 0x02 /* 3.3V is supported */
#define SMB_PRV_29V 0x04 /* 2.9V is supported */
#define SMB_PRV_VOLTAGE(v) ((v) & 0x7f)
#define SMB_PRSTATUS_PRESENT(s) ((s) & 0x40) /* socket is populated */
#define SMB_PRSTATUS_STATUS(s) ((s) & 0x07) /* status (see below) */
#define SMB_PRS_UNKNOWN 0x0 /* unknown */
#define SMB_PRS_ENABLED 0x1 /* enabled */
#define SMB_PRS_BDISABLED 0x2 /* disabled in bios user setup */
#define SMB_PRS_PDISABLED 0x3 /* disabled in bios from post error */
#define SMB_PRS_IDLE 0x4 /* waiting to be enabled */
#define SMB_PRS_OTHER 0x7 /* other */
#define SMB_PRU_OTHER 0x01 /* other */
#define SMB_PRU_UNKNOWN 0x02 /* unknown */
#define SMB_PRU_DAUGHTER 0x03 /* daughter board */
#define SMB_PRU_ZIF 0x04 /* ZIF socket */
#define SMB_PRU_PIGGY 0x05 /* replaceable piggy back */
#define SMB_PRU_NONE 0x06 /* none */
#define SMB_PRU_LIF 0x07 /* LIF socket */
#define SMB_PRU_SLOT1 0x08 /* slot 1 */
#define SMB_PRU_SLOT2 0x09 /* slot 2 */
#define SMB_PRU_370PIN 0x0A /* 370-pin socket */
#define SMB_PRU_SLOTA 0x0B /* slot A */
#define SMB_PRU_SLOTM 0x0C /* slot M */
#define SMB_PRU_423 0x0D /* socket 423 */
#define SMB_PRU_A 0x0E /* socket A (socket 462) */
#define SMB_PRU_478 0x0F /* socket 478 */
#define SMB_PRU_754 0x10 /* socket 754 */
#define SMB_PRU_940 0x11 /* socket 940 */
#define SMB_PRU_939 0x12 /* socket 939 */
#define SMB_PRU_MPGA604 0x13 /* mPGA604 */
#define SMB_PRU_LGA771 0x14 /* LGA771 */
#define SMB_PRU_LGA775 0x15 /* LGA775 */
#define SMB_PRU_S1 0x16 /* socket S1 */
#define SMB_PRU_AM2 0x17 /* socket AM2 */
#define SMB_PRU_F 0x18 /* socket F */
#define SMB_PRU_LGA1366 0x19 /* LGA1366 */
#define SMB_PRU_G34 0x1A /* socket G34 */
#define SMB_PRU_AM3 0x1B /* socket AM3 */
#define SMB_PRU_C32 0x1C /* socket C32 */
#define SMB_PRU_LGA1156 0x1D /* LGA1156 */
#define SMB_PRU_LGA1567 0x1E /* LGA1567 */
#define SMB_PRU_PGA988A 0x1F /* PGA988A */
#define SMB_PRU_BGA1288 0x20 /* BGA1288 */
#define SMB_PRU_RPGA988B 0x21 /* rPGA988B */
#define SMB_PRU_BGA1023 0x22 /* BGA1023 */
#define SMB_PRU_BGA1224 0x23 /* BGA1224 */
#define SMB_PRU_LGA1155 0x24 /* LGA1155 */
#define SMB_PRU_LGA1356 0x25 /* LGA1356 */
#define SMB_PRU_LGA2011 0x26 /* LGA2011 */
#define SMB_PRU_FS1 0x27 /* socket FS1 */
#define SMB_PRU_FS2 0x28 /* socket FS2 */
#define SMB_PRU_FM1 0x29 /* socket FM1 */
#define SMB_PRU_FM2 0x2A /* socket FM2 */
#define SMB_PRU_LGA20113 0x2B /* LGA2011-3 */
#define SMB_PRU_LGA13563 0x2C /* LGA1356-3 */
#define SMB_PRU_LGA1150 0x2D /* LGA1150 */
#define SMB_PRU_BGA1168 0x2E /* BGA1168 */
#define SMB_PRU_BGA1234 0x2F /* BGA1234 */
#define SMB_PRU_BGA1364 0x30 /* BGA1364 */
#define SMB_PRU_AM4 0x31 /* socket AM4 */
#define SMB_PRU_LGA1151 0x32 /* LGA1151 */
#define SMB_PRU_BGA1356 0x33 /* BGA1356 */
#define SMB_PRU_BGA1440 0x34 /* BGA1440 */
#define SMB_PRU_BGA1515 0x35 /* BGA1515 */
#define SMB_PRU_LGA36471 0x36 /* LGA3647-1 */
#define SMB_PRU_SP3 0x37 /* socket SP3 */
#define SMB_PRU_SP3r2 0x38 /* socket SP3r2 */
#define SMB_PRC_RESERVED 0x0001 /* reserved */
#define SMB_PRC_UNKNOWN 0x0002 /* unknown */
#define SMB_PRC_64BIT 0x0004 /* 64-bit capable */
#define SMB_PRC_MC 0x0008 /* multi-core */
#define SMB_PRC_HT 0x0010 /* hardware thread */
#define SMB_PRC_NX 0x0020 /* execution protection */
#define SMB_PRC_VT 0x0040 /* enhanced virtualization */
#define SMB_PRC_PM 0x0080 /* power/performance control */
#define SMB_PRF_OTHER 0x01 /* other */
#define SMB_PRF_UNKNOWN 0x02 /* unknown */
#define SMB_PRF_8086 0x03 /* 8086 */
#define SMB_PRF_80286 0x04 /* 80286 */
#define SMB_PRF_I386 0x05 /* Intel 386 */
#define SMB_PRF_I486 0x06 /* Intel 486 */
#define SMB_PRF_8087 0x07 /* 8087 */
#define SMB_PRF_80287 0x08 /* 80287 */
#define SMB_PRF_80387 0x09 /* 80387 */
#define SMB_PRF_80487 0x0A /* 80487 */
#define SMB_PRF_PENTIUM 0x0B /* Pentium Family */
#define SMB_PRF_PENTIUMPRO 0x0C /* Pentium Pro */
#define SMB_PRF_PENTIUMII 0x0D /* Pentium II */
#define SMB_PRF_PENTIUM_MMX 0x0E /* Pentium w/ MMX */
#define SMB_PRF_CELERON 0x0F /* Celeron */
#define SMB_PRF_PENTIUMII_XEON 0x10 /* Pentium II Xeon */
#define SMB_PRF_PENTIUMIII 0x11 /* Pentium III */
#define SMB_PRF_M1 0x12 /* M1 */
#define SMB_PRF_M2 0x13 /* M2 */
#define SMB_PRF_CELERON_M 0x14 /* Celeron M */
#define SMB_PRF_PENTIUMIV_HT 0x15 /* Pentium 4 HT */
#define SMB_PRF_DURON 0x18 /* AMD Duron */
#define SMB_PRF_K5 0x19 /* K5 */
#define SMB_PRF_K6 0x1A /* K6 */
#define SMB_PRF_K6_2 0x1B /* K6-2 */
#define SMB_PRF_K6_3 0x1C /* K6-3 */
#define SMB_PRF_ATHLON 0x1D /* Athlon */
#define SMB_PRF_2900 0x1E /* AMD 2900 */
#define SMB_PRF_K6_2PLUS 0x1F /* K6-2+ */
#define SMB_PRF_PPC 0x20 /* PowerPC */
#define SMB_PRF_PPC_601 0x21 /* PowerPC 601 */
#define SMB_PRF_PPC_603 0x22 /* PowerPC 603 */
#define SMB_PRF_PPC_603PLUS 0x23 /* PowerPC 603+ */
#define SMB_PRF_PPC_604 0x24 /* PowerPC 604 */
#define SMB_PRF_PPC_620 0x25 /* PowerPC 620 */
#define SMB_PRF_PPC_704 0x26 /* PowerPC x704 */
#define SMB_PRF_PPC_750 0x27 /* PowerPC 750 */
#define SMB_PRF_CORE_DUO 0x28 /* Core Duo */
#define SMB_PRF_CORE_DUO_M 0x29 /* Core Duo mobile */
#define SMB_PRF_CORE_SOLO_M 0x2A /* Core Solo mobile */
#define SMB_PRF_ATOM 0x2B /* Intel Atom */
#define SMB_PRF_CORE_M 0x2C /* Intel Core M */
#define SMB_PRF_CORE_M3 0x2D /* Intel Core m3 */
#define SMB_PRF_CORE_M5 0x2E /* Intel Core m5 */
#define SMB_PRF_CORE_M7 0x2F /* Intel Core m7 */
#define SMB_PRF_ALPHA 0x30 /* Alpha */
#define SMB_PRF_ALPHA_21064 0x31 /* Alpha 21064 */
#define SMB_PRF_ALPHA_21066 0x32 /* Alpha 21066 */
#define SMB_PRF_ALPHA_21164 0x33 /* Alpha 21164 */
#define SMB_PRF_ALPHA_21164PC 0x34 /* Alpha 21164PC */
#define SMB_PRF_ALPHA_21164A 0x35 /* Alpha 21164a */
#define SMB_PRF_ALPHA_21264 0x36 /* Alpha 21264 */
#define SMB_PRF_ALPHA_21364 0x37 /* Alpha 21364 */
#define SMB_PRF_TURION2U_2C_MM 0x38
/* AMD Turion II Ultra Dual-Core Mobile M */
#define SMB_PRF_TURION2_2C_MM 0x39 /* AMD Turion II Dual-Core Mobile M */
#define SMB_PRF_ATHLON2_2C_M 0x3A /* AMD Athlon II Dual-Core M */
#define SMB_PRF_OPTERON_6100 0x3B /* AMD Opteron 6100 series */
#define SMB_PRF_OPTERON_4100 0x3C /* AMD Opteron 4100 series */
#define SMB_PRF_OPTERON_6200 0x3D /* AMD Opteron 6200 series */
#define SMB_PRF_OPTERON_4200 0x3E /* AMD Opteron 4200 series */
#define SMB_PRF_AMD_FX 0x3F /* AMD FX series */
#define SMB_PRF_MIPS 0x40 /* MIPS */
#define SMB_PRF_MIPS_R4000 0x41 /* MIPS R4000 */
#define SMB_PRF_MIPS_R4200 0x42 /* MIPS R4200 */
#define SMB_PRF_MIPS_R4400 0x43 /* MIPS R4400 */
#define SMB_PRF_MIPS_R4600 0x44 /* MIPS R4600 */
#define SMB_PRF_MIPS_R10000 0x45 /* MIPS R10000 */
#define SMB_PRF_AMD_C 0x46 /* AMD C-series */
#define SMB_PRF_AMD_E 0x47 /* AMD E-series */
#define SMB_PRF_AMD_A 0x48 /* AMD A-series */
#define SMB_PRF_AMD_G 0x49 /* AMD G-series */
#define SMB_PRF_AMD_Z 0x4A /* AMD Z-series */
#define SMB_PRF_AMD_R 0x4B /* AMD R-series */
#define SMB_PRF_OPTERON_4300 0x4C /* AMD Opteron 4300 series */
#define SMB_PRF_OPTERON_6300 0x4D /* AMD Opteron 6300 series */
#define SMB_PRF_OPTERON_3300 0x4E /* AMD Opteron 3300 series */
#define SMB_PRF_AMD_FIREPRO 0x4F /* AMD FirePro series */
#define SMB_PRF_SPARC 0x50 /* SPARC */
#define SMB_PRF_SUPERSPARC 0x51 /* SuperSPARC */
#define SMB_PRF_MICROSPARCII 0x52 /* microSPARC II */
#define SMB_PRF_MICROSPARCIIep 0x53 /* microSPARC IIep */
#define SMB_PRF_ULTRASPARC 0x54 /* UltraSPARC */
#define SMB_PRF_USII 0x55 /* UltraSPARC II */
#define SMB_PRF_USIIi 0x56 /* UltraSPARC IIi */
#define SMB_PRF_USIII 0x57 /* UltraSPARC III */
#define SMB_PRF_USIIIi 0x58 /* UltraSPARC IIIi */
#define SMB_PRF_68040 0x60 /* 68040 */
#define SMB_PRF_68XXX 0x61 /* 68XXX */
#define SMB_PRF_68000 0x62 /* 68000 */
#define SMB_PRF_68010 0x63 /* 68010 */
#define SMB_PRF_68020 0x64 /* 68020 */
#define SMB_PRF_68030 0x65 /* 68030 */
#define SMB_PRF_ATHLON_X4 0x66 /* AMD Athlon X4 Quad-Core */
#define SMB_PRF_OPTERON_X1K 0x67 /* AMD Opteron X1000 */
#define SMB_PRF_OPTERON_X2K 0x68 /* AMD Opteron X2000 APU */
#define SMB_PRF_OPTERON_A 0x69 /* AMD Opteron A Series */
#define SMB_PRF_OPTERON_X3K 0x6A /* AMD Opteron X3000 APU */
#define SMB_PRF_ZEN 0x6B /* AMD Zen Processor Family */
#define SMB_PRF_HOBBIT 0x70 /* Hobbit */
#define SMB_PRF_TM5000 0x78 /* Crusoe TM5000 */
#define SMB_PRF_TM3000 0x79 /* Crusoe TM3000 */
#define SMB_PRF_TM8000 0x7A /* Efficeon TM8000 */
#define SMB_PRF_WEITEK 0x80 /* Weitek */
#define SMB_PRF_ITANIC 0x82 /* Itanium */
#define SMB_PRF_ATHLON64 0x83 /* Athlon64 */
#define SMB_PRF_OPTERON 0x84 /* Opteron */
#define SMB_PRF_SEMPRON 0x85 /* Sempron */
#define SMB_PRF_TURION64_M 0x86 /* Turion 64 Mobile */
#define SMB_PRF_OPTERON_2C 0x87 /* AMD Opteron Dual-Core */
#define SMB_PRF_ATHLON64_X2_2C 0x88 /* AMD Athlon 64 X2 Dual-Core */
#define SMB_PRF_TURION64_X2_M 0x89 /* AMD Turion 64 X2 Mobile */
#define SMB_PRF_OPTERON_4C 0x8A /* AMD Opteron Quad-Core */
#define SMB_PRF_OPTERON_3G 0x8B /* AMD Opteron 3rd Generation */
#define SMB_PRF_PHENOM_FX_4C 0x8C /* AMD Phenom FX Quad-Core */
#define SMB_PRF_PHENOM_X4_4C 0x8D /* AMD Phenom X4 Quad-Core */
#define SMB_PRF_PHENOM_X2_2C 0x8E /* AMD Phenom X2 Dual-Core */
#define SMB_PRF_ATHLON_X2_2C 0x8F /* AMD Athlon X2 Dual-Core */
#define SMB_PRF_PA 0x90 /* PA-RISC */
#define SMB_PRF_PA8500 0x91 /* PA-RISC 8500 */
#define SMB_PRF_PA8000 0x92 /* PA-RISC 8000 */
#define SMB_PRF_PA7300LC 0x93 /* PA-RISC 7300LC */
#define SMB_PRF_PA7200 0x94 /* PA-RISC 7200 */
#define SMB_PRF_PA7100LC 0x95 /* PA-RISC 7100LC */
#define SMB_PRF_PA7100 0x96 /* PA-RISC 7100 */
#define SMB_PRF_V30 0xA0 /* V30 */
#define SMB_PRF_XEON_4C_3200 0xA1 /* Xeon Quad Core 3200 */
#define SMB_PRF_XEON_2C_3000 0xA2 /* Xeon Dual Core 3000 */
#define SMB_PRF_XEON_4C_5300 0xA3 /* Xeon Quad Core 5300 */
#define SMB_PRF_XEON_2C_5100 0xA4 /* Xeon Dual Core 5100 */
#define SMB_PRF_XEON_2C_5000 0xA5 /* Xeon Dual Core 5000 */
#define SMB_PRF_XEON_2C_LV 0xA6 /* Xeon Dual Core LV */
#define SMB_PRF_XEON_2C_ULV 0xA7 /* Xeon Dual Core ULV */
#define SMB_PRF_XEON_2C_7100 0xA8 /* Xeon Dual Core 7100 */
#define SMB_PRF_XEON_4C_5400 0xA9 /* Xeon Quad Core 5400 */
#define SMB_PRF_XEON_4C 0xAA /* Xeon Quad Core */
#define SMB_PRF_XEON_2C_5200 0xAB /* Xeon Dual Core 5200 */
#define SMB_PRF_XEON_2C_7200 0xAC /* Xeon Dual Core 7200 */
#define SMB_PRF_XEON_4C_7300 0xAD /* Xeon Quad Core 7300 */
#define SMB_PRF_XEON_4C_7400 0xAE /* Xeon Quad Core 7400 */
#define SMB_PRF_XEON_XC_7400 0xAF /* Xeon Multi Core 7400 */
#define SMB_PRF_PENTIUMIII_XEON 0xB0 /* Pentium III Xeon */
#define SMB_PRF_PENTIUMIII_SS 0xB1 /* Pentium III with SpeedStep */
#define SMB_PRF_P4 0xB2 /* Pentium 4 */
#define SMB_PRF_XEON 0xB3 /* Intel Xeon */
#define SMB_PRF_AS400 0xB4 /* AS400 */
#define SMB_PRF_XEON_MP 0xB5 /* Intel Xeon MP */
#define SMB_PRF_ATHLON_XP 0xB6 /* AMD Athlon XP */
#define SMB_PRF_ATHLON_MP 0xB7 /* AMD Athlon MP */
#define SMB_PRF_ITANIC2 0xB8 /* Itanium 2 */
#define SMB_PRF_PENTIUM_M 0xB9 /* Pentium M */
#define SMB_PRF_CELERON_D 0xBA /* Celeron D */
#define SMB_PRF_PENTIUM_D 0xBB /* Pentium D */
#define SMB_PRF_PENTIUM_EE 0xBC /* Pentium Extreme Edition */
#define SMB_PRF_CORE_SOLO 0xBD /* Intel Core Solo */
#define SMB_PRF_CORE2_DUO 0xBF /* Intel Core 2 Duo */
#define SMB_PRF_CORE2_SOLO 0xC0 /* Intel Core 2 Solo */
#define SMB_PRF_CORE2_EX 0xC1 /* Intel Core 2 Extreme */
#define SMB_PRF_CORE2_QUAD 0xC2 /* Intel Core 2 Quad */
#define SMB_PRF_CORE2_EX_M 0xC3 /* Intel Core 2 Extreme mobile */
#define SMB_PRF_CORE2_DUO_M 0xC4 /* Intel Core 2 Duo mobile */
#define SMB_PRF_CORE2_SOLO_M 0xC5 /* Intel Core 2 Solo mobile */
#define SMB_PRF_CORE_I7 0xC6 /* Intel Core i7 */
#define SMB_PRF_CELERON_2C 0xC7 /* Celeron Dual-Core */
#define SMB_PRF_IBM390 0xC8 /* IBM 390 */
#define SMB_PRF_G4 0xC9 /* G4 */
#define SMB_PRF_G5 0xCA /* G5 */
#define SMB_PRF_ESA390 0xCB /* ESA390 */
#define SMB_PRF_ZARCH 0xCC /* z/Architecture */
#define SMB_PRF_CORE_I5 0xCD /* Intel Core i5 */
#define SMB_PRF_CORE_I3 0xCE /* Intel Core i3 */
#define SMB_PRF_C7M 0xD2 /* VIA C7-M */
#define SMB_PRF_C7D 0xD3 /* VIA C7-D */
#define SMB_PRF_C7 0xD4 /* VIA C7 */
#define SMB_PRF_EDEN 0xD5 /* VIA Eden */
#define SMB_PRF_XEON_XC 0xD6 /* Intel Xeon Multi-Core */
#define SMB_PRF_XEON_2C_3XXX 0xD7 /* Intel Xeon Dual-Core 3xxx */
#define SMB_PRF_XEON_4C_3XXX 0xD8 /* Intel Xeon Quad-Core 3xxx */
#define SMB_PRF_VIA_NANO 0xD9 /* VIA Nano */
#define SMB_PRF_XEON_2C_5XXX 0xDA /* Intel Xeon Dual-Core 5xxx */
#define SMB_PRF_XEON_4C_5XXX 0xDB /* Intel Xeon Quad-Core 5xxx */
#define SMB_PRF_XEON_2C_7XXX 0xDD /* Intel Xeon Dual-Core 7xxx */
#define SMB_PRF_XEON_4C_7XXX 0xDE /* Intel Xeon Quad-Core 7xxx */
#define SMB_PRF_XEON_XC_7XXX 0xDF /* Intel Xeon Multi-Core 7xxx */
#define SMB_PRF_XEON_XC_3400 0xE0 /* Intel Xeon Multi-Core 3400 */
#define SMB_PRF_OPTERON_3000 0xE4 /* AMD Opteron 3000 */
#define SMB_PRF_SEMPRON_II 0xE5 /* AMD Sempron II */
#define SMB_PRF_OPTERON_4C_EM 0xE6 /* AMD Opteron Quad-Core embedded */
#define SMB_PRF_PHENOM_3C 0xE7 /* AMD Phenom Triple-Core */
#define SMB_PRF_TURIONU_2C_M 0xE8 /* AMD Turion Ultra Dual-Core mobile */
#define SMB_PRF_TURION_2C_M 0xE9 /* AMD Turion Dual-Core mobile */
#define SMB_PRF_ATHLON_2C 0xEA /* AMD Athlon Dual-Core */
#define SMB_PRF_SEMPRON_SI 0xEB /* AMD Sempron SI */
#define SMB_PRF_PHENOM_II 0xEC /* AMD Phenom II */
#define SMB_PRF_ATHLON_II 0xED /* AMD Athlon II */
#define SMB_PRF_OPTERON_6C 0xEE /* AMD Opteron Six-Core */
#define SMB_PRF_SEMPRON_M 0xEF /* AMD Sempron M */
#define SMB_PRF_I860 0xFA /* i860 */
#define SMB_PRF_I960 0xFB /* i960 */
#define SMB_PRF_ARMv7 0x100 /* ARMv7 */
#define SMB_PRF_ARMv8 0x101 /* ARMv8 */
#define SMB_PRF_SH3 0x104 /* SH-3 */
#define SMB_PRF_SH4 0x105 /* SH-4 */
#define SMB_PRF_ARM 0x118 /* ARM */
#define SMB_PRF_SARM 0x119 /* StrongARM */
#define SMB_PRF_6X86 0x12C /* 6x86 */
#define SMB_PRF_MEDIAGX 0x12D /* MediaGX */
#define SMB_PRF_MII 0x12E /* MII */
#define SMB_PRF_WINCHIP 0x140 /* WinChip */
#define SMB_PRF_DSP 0x15E /* DSP */
#define SMB_PRF_VIDEO 0x1F4 /* Video Processor */
/*
* SMBIOS Cache Information. See DSP0134 Section 7.8 for more information.
* If smba_size is zero, this indicates the specified cache is not present.
*
* SMBIOS 3.1 added extended cache sizes. Unfortunately, we had already baked in
* the uint32_t sizes, so we added extended uint64_t's that correspond to the
* new fields. To make life easier for consumers, we always make sure that the
* _maxsize2 and _size2 members are filled in with the old value if no other
* value is present.
*/
typedef struct smbios_cache {
uint32_t smba_maxsize; /* maximum installed size in bytes */
uint32_t smba_size; /* installed size in bytes */
uint16_t smba_stype; /* supported SRAM types (SMB_CAT_*) */
uint16_t smba_ctype; /* current SRAM type (SMB_CAT_*) */
uint8_t smba_speed; /* speed in nanoseconds */
uint8_t smba_etype; /* error correction type (SMB_CAE_*) */
uint8_t smba_ltype; /* logical cache type (SMB_CAG_*) */
uint8_t smba_assoc; /* associativity (SMB_CAA_*) */
uint8_t smba_level; /* cache level */
uint8_t smba_mode; /* cache mode (SMB_CAM_*) */
uint8_t smba_location; /* cache location (SMB_CAL_*) */
uint8_t smba_flags; /* cache flags (SMB_CAF_*) */
uint64_t smba_maxsize2; /* maximum installed size in bytes */
uint64_t smba_size2; /* installed size in bytes */
} smbios_cache_t;
#define SMB_CAT_OTHER 0x0001 /* other */
#define SMB_CAT_UNKNOWN 0x0002 /* unknown */
#define SMB_CAT_NONBURST 0x0004 /* non-burst */
#define SMB_CAT_BURST 0x0008 /* burst */
#define SMB_CAT_PBURST 0x0010 /* pipeline burst */
#define SMB_CAT_SYNC 0x0020 /* synchronous */
#define SMB_CAT_ASYNC 0x0040 /* asynchronous */
#define SMB_CAE_OTHER 0x01 /* other */
#define SMB_CAE_UNKNOWN 0x02 /* unknown */
#define SMB_CAE_NONE 0x03 /* none */
#define SMB_CAE_PARITY 0x04 /* parity */
#define SMB_CAE_SBECC 0x05 /* single-bit ECC */
#define SMB_CAE_MBECC 0x06 /* multi-bit ECC */
#define SMB_CAG_OTHER 0x01 /* other */
#define SMB_CAG_UNKNOWN 0x02 /* unknown */
#define SMB_CAG_INSTR 0x03 /* instruction */
#define SMB_CAG_DATA 0x04 /* data */
#define SMB_CAG_UNIFIED 0x05 /* unified */
#define SMB_CAA_OTHER 0x01 /* other */
#define SMB_CAA_UNKNOWN 0x02 /* unknown */
#define SMB_CAA_DIRECT 0x03 /* direct mapped */
#define SMB_CAA_2WAY 0x04 /* 2-way set associative */
#define SMB_CAA_4WAY 0x05 /* 4-way set associative */
#define SMB_CAA_FULL 0x06 /* fully associative */
#define SMB_CAA_8WAY 0x07 /* 8-way set associative */
#define SMB_CAA_16WAY 0x08 /* 16-way set associative */
#define SMB_CAA_12WAY 0x09 /* 12-way set associative */
#define SMB_CAA_24WAY 0x0A /* 24-way set associative */
#define SMB_CAA_32WAY 0x0B /* 32-way set associative */
#define SMB_CAA_48WAY 0x0C /* 48-way set associative */
#define SMB_CAA_64WAY 0x0D /* 64-way set associative */
#define SMB_CAA_20WAY 0x0E /* 20-way set associative */
#define SMB_CAM_WT 0x00 /* write-through */
#define SMB_CAM_WB 0x01 /* write-back */
#define SMB_CAM_VARY 0x02 /* varies by address */
#define SMB_CAM_UNKNOWN 0x03 /* unknown */
#define SMB_CAL_INTERNAL 0x00 /* internal */
#define SMB_CAL_EXTERNAL 0x01 /* external */
#define SMB_CAL_RESERVED 0x02 /* reserved */
#define SMB_CAL_UNKNOWN 0x03 /* unknown */
#define SMB_CAF_ENABLED 0x01 /* enabled at boot time */
#define SMB_CAF_SOCKETED 0x02 /* cache is socketed */
/*
* SMBIOS Port Information. See DSP0134 Section 7.9 for more information.
* The internal reference designator string is also mapped to the location.
*/
typedef struct smbios_port {
const char *smbo_iref; /* internal reference designator */
const char *smbo_eref; /* external reference designator */
uint8_t smbo_itype; /* internal connector type (SMB_POC_*) */
uint8_t smbo_etype; /* external connector type (SMB_POC_*) */
uint8_t smbo_ptype; /* port type (SMB_POT_*) */
uint8_t smbo_pad; /* padding */
} smbios_port_t;
#define SMB_POC_NONE 0x00 /* none */
#define SMB_POC_CENT 0x01 /* Centronics */
#define SMB_POC_MINICENT 0x02 /* Mini-Centronics */
#define SMB_POC_PROPRIETARY 0x03 /* proprietary */
#define SMB_POC_DB25M 0x04 /* DB-25 pin male */
#define SMB_POC_DB25F 0x05 /* DB-25 pin female */
#define SMB_POC_DB15M 0x06 /* DB-15 pin male */
#define SMB_POC_DB15F 0x07 /* DB-15 pin female */
#define SMB_POC_DB9M 0x08 /* DB-9 pin male */
#define SMB_POC_DB9F 0x09 /* DB-9 pin female */
#define SMB_POC_RJ11 0x0A /* RJ-11 */
#define SMB_POC_RJ45 0x0B /* RJ-45 */
#define SMB_POC_MINISCSI 0x0C /* 50-pin MiniSCSI */
#define SMB_POC_MINIDIN 0x0D /* Mini-DIN */
#define SMB_POC_MICRODIN 0x0E /* Micro-DIN */
#define SMB_POC_PS2 0x0F /* PS/2 */
#define SMB_POC_IR 0x10 /* Infrared */
#define SMB_POC_HPHIL 0x11 /* HP-HIL */
#define SMB_POC_USB 0x12 /* USB */
#define SMB_POC_SSA 0x13 /* SSA SCSI */
#define SMB_POC_DIN8M 0x14 /* Circular DIN-8 male */
#define SMB_POC_DIN8F 0x15 /* Circular DIN-8 female */
#define SMB_POC_OBIDE 0x16 /* on-board IDE */
#define SMB_POC_OBFLOPPY 0x17 /* on-board floppy */
#define SMB_POC_DI9 0x18 /* 9p dual inline (p10 cut) */
#define SMB_POC_DI25 0x19 /* 25p dual inline (p26 cut) */
#define SMB_POC_DI50 0x1A /* 50p dual inline */
#define SMB_POC_DI68 0x1B /* 68p dual inline */
#define SMB_POC_CDROM 0x1C /* on-board sound from CDROM */
#define SMB_POC_MINI14 0x1D /* Mini-Centronics Type 14 */
#define SMB_POC_MINI26 0x1E /* Mini-Centronics Type 26 */
#define SMB_POC_MINIJACK 0x1F /* Mini-jack (headphones) */
#define SMB_POC_BNC 0x20 /* BNC */
#define SMB_POC_1394 0x21 /* 1394 */
#define SMB_POC_SATA 0x22 /* SAS/SATA plug receptacle */
#define SMB_POC_PC98 0xA0 /* PC-98 */
#define SMB_POC_PC98HR 0xA1 /* PC-98Hireso */
#define SMB_POC_PCH98 0xA2 /* PC-H98 */
#define SMB_POC_PC98NOTE 0xA3 /* PC-98Note */
#define SMB_POC_PC98FULL 0xA4 /* PC-98Full */
#define SMB_POC_OTHER 0xFF /* other */
#define SMB_POT_NONE 0x00 /* none */
#define SMB_POT_PP_XTAT 0x01 /* Parallel Port XT/AT compat */
#define SMB_POT_PP_PS2 0x02 /* Parallel Port PS/2 */
#define SMB_POT_PP_ECP 0x03 /* Parallel Port ECP */
#define SMB_POT_PP_EPP 0x04 /* Parallel Port EPP */
#define SMB_POT_PP_ECPEPP 0x05 /* Parallel Port ECP/EPP */
#define SMB_POT_SP_XTAT 0x06 /* Serial Port XT/AT compat */
#define SMB_POT_SP_16450 0x07 /* Serial Port 16450 compat */
#define SMB_POT_SP_16550 0x08 /* Serial Port 16550 compat */
#define SMB_POT_SP_16550A 0x09 /* Serial Port 16550A compat */
#define SMB_POT_SCSI 0x0A /* SCSI port */
#define SMB_POT_MIDI 0x0B /* MIDI port */
#define SMB_POT_JOYSTICK 0x0C /* Joystick port */
#define SMB_POT_KEYBOARD 0x0D /* Keyboard port */
#define SMB_POT_MOUSE 0x0E /* Mouse port */
#define SMB_POT_SSA 0x0F /* SSA SCSI */
#define SMB_POT_USB 0x10 /* USB */
#define SMB_POT_FIREWIRE 0x11 /* FireWrite (IEEE P1394) */
#define SMB_POT_PCMII 0x12 /* PCMCIA Type II */
#define SMB_POT_PCMIIa 0x13 /* PCMCIA Type II (alternate) */
#define SMB_POT_PCMIII 0x14 /* PCMCIA Type III */
#define SMB_POT_CARDBUS 0x15 /* Cardbus */
#define SMB_POT_ACCESS 0x16 /* Access Bus Port */
#define SMB_POT_SCSI2 0x17 /* SCSI II */
#define SMB_POT_SCSIW 0x18 /* SCSI Wide */
#define SMB_POT_PC98 0x19 /* PC-98 */
#define SMB_POT_PC98HR 0x1A /* PC-98Hireso */
#define SMB_POT_PCH98 0x1B /* PC-H98 */
#define SMB_POT_VIDEO 0x1C /* Video port */
#define SMB_POT_AUDIO 0x1D /* Audio port */
#define SMB_POT_MODEM 0x1E /* Modem port */
#define SMB_POT_NETWORK 0x1F /* Network port */
#define SMB_POT_SATA 0x20 /* SATA */
#define SMB_POT_SAS 0x21 /* SAS */
#define SMB_POT_8251 0xA0 /* 8251 compatible */
#define SMB_POT_8251F 0xA1 /* 8251 FIFO compatible */
#define SMB_POT_OTHER 0xFF /* other */
/*
* SMBIOS Slot Information. See DSP0134 Section 7.10 for more information.
* See DSP0134 7.10.5 for how to interpret the value of smbl_id.
*/
typedef struct smbios_slot {
const char *smbl_name; /* reference designation */
uint8_t smbl_type; /* slot type */
uint8_t smbl_width; /* slot data bus width */
uint8_t smbl_usage; /* current usage */
uint8_t smbl_length; /* slot length */
uint16_t smbl_id; /* slot ID */
uint8_t smbl_ch1; /* slot characteristics 1 */
uint8_t smbl_ch2; /* slot characteristics 2 */
uint16_t smbl_sg; /* segment group number */
uint8_t smbl_bus; /* bus number */
uint8_t smbl_df; /* device/function number */
} smbios_slot_t;
#define SMB_SLT_OTHER 0x01 /* other */
#define SMB_SLT_UNKNOWN 0x02 /* unknown */
#define SMB_SLT_ISA 0x03 /* ISA */
#define SMB_SLT_MCA 0x04 /* MCA */
#define SMB_SLT_EISA 0x05 /* EISA */
#define SMB_SLT_PCI 0x06 /* PCI */
#define SMB_SLT_PCMCIA 0x07 /* PCMCIA */
#define SMB_SLT_VLVESA 0x08 /* VL-VESA */
#define SMB_SLT_PROPRIETARY 0x09 /* proprietary */
#define SMB_SLT_PROC 0x0A /* processor card slot */
#define SMB_SLT_MEM 0x0B /* proprietary memory card slot */
#define SMB_SLT_IOR 0x0C /* I/O riser card slot */
#define SMB_SLT_NUBUS 0x0D /* NuBus */
#define SMB_SLT_PCI66 0x0E /* PCI (66MHz capable) */
#define SMB_SLT_AGP 0x0F /* AGP */
#define SMB_SLT_AGP2X 0x10 /* AGP 2X */
#define SMB_SLT_AGP4X 0x11 /* AGP 4X */
#define SMB_SLT_PCIX 0x12 /* PCI-X */
#define SMB_SLT_AGP8X 0x13 /* AGP 8X */
#define SMB_SLT_M2_1DP 0x14 /* M.2 Socket 1-DP (Mechanical Key A) */
#define SMB_SLT_M2_1SD 0x15 /* M.2 Socket 1-SD (Mechanical Key E) */
#define SMB_SLT_M2_2 0x16 /* M.2 Socket 2 (Mechanical Key B) */
#define SMB_SLT_M2_3 0x17 /* M.2 Socket 3 (Mechanical Key M) */
#define SMB_SLT_MXM_I 0x18 /* MXM Type I */
#define SMB_SLT_MXM_II 0x19 /* MXM Type II */
#define SMB_SLT_MXM_III 0x1A /* MXM Type III (standard connector) */
#define SMB_SLT_MXM_III_HE 0x1B /* MXM Type III (HE connector) */
#define SMB_SLT_MXM_V 0x1C /* MXM Type IV */
#define SMB_SLT_MXM3_A 0x1D /* MXM 3.0 Type A */
#define SMB_SLT_MXM3_B 0x1E /* MXM 3.0 Type B */
#define SMB_SLT_PCIEG2_SFF 0x1F /* PCI Express Gen 2 SFF-8639 */
#define SMB_SLT_PCIEG3_SFF 0x20 /* PCI Express Gen 3 SFF-8639 */
/*
* These lines must be on one line for the string generating code.
*/
/* BEGIN CSTYLED */
#define SMB_SLT_PCIE_M52_WBSKO 0x21 /* PCI Express Mini 52-pin with bottom-side keep-outs */
#define SMB_SLT_PCIE_M52_WOBSKO 0x22 /* PCI Express Mini 52-pin without bottom-side keep-outs */
/* END CSTYLED */
#define SMB_SLT_PCIE_M76 0x23 /* PCI Express Mini 72-pin */
#define SMB_SLT_PC98_C20 0xA0 /* PC-98/C20 */
#define SMB_SLT_PC98_C24 0xA1 /* PC-98/C24 */
#define SMB_SLT_PC98_E 0xA2 /* PC-98/E */
#define SMB_SLT_PC98_LB 0xA3 /* PC-98/Local Bus */
#define SMB_SLT_PC98_C 0xA4 /* PC-98/Card */
#define SMB_SLT_PCIE 0xA5 /* PCI Express */
#define SMB_SLT_PCIE1 0xA6 /* PCI Express x1 */
#define SMB_SLT_PCIE2 0xA7 /* PCI Express x2 */
#define SMB_SLT_PCIE4 0xA8 /* PCI Express x4 */
#define SMB_SLT_PCIE8 0xA9 /* PCI Express x8 */
#define SMB_SLT_PCIE16 0xAA /* PCI Express x16 */
#define SMB_SLT_PCIE2G 0xAB /* PCI Exp. Gen 2 */
#define SMB_SLT_PCIE2G1 0xAC /* PCI Exp. Gen 2 x1 */
#define SMB_SLT_PCIE2G2 0xAD /* PCI Exp. Gen 2 x2 */
#define SMB_SLT_PCIE2G4 0xAE /* PCI Exp. Gen 2 x4 */
#define SMB_SLT_PCIE2G8 0xAF /* PCI Exp. Gen 2 x8 */
#define SMB_SLT_PCIE2G16 0xB0 /* PCI Exp. Gen 2 x16 */
#define SMB_SLT_PCIE3G 0xB1 /* PCI Exp. Gen 3 */
#define SMB_SLT_PCIE3G1 0xB2 /* PCI Exp. Gen 3 x1 */
#define SMB_SLT_PCIE3G2 0xB3 /* PCI Exp. Gen 3 x2 */
#define SMB_SLT_PCIE3G4 0xB4 /* PCI Exp. Gen 3 x4 */
#define SMB_SLT_PCIE3G8 0xB5 /* PCI Exp. Gen 3 x8 */
#define SMB_SLT_PCIE3G16 0xB6 /* PCI Exp. Gen 3 x16 */
#define SMB_SLW_OTHER 0x01 /* other */
#define SMB_SLW_UNKNOWN 0x02 /* unknown */
#define SMB_SLW_8 0x03 /* 8 bit */
#define SMB_SLW_16 0x04 /* 16 bit */
#define SMB_SLW_32 0x05 /* 32 bit */
#define SMB_SLW_64 0x06 /* 64 bit */
#define SMB_SLW_128 0x07 /* 128 bit */
#define SMB_SLW_1X 0x08 /* 1x or x1 */
#define SMB_SLW_2X 0x09 /* 2x or x2 */
#define SMB_SLW_4X 0x0A /* 4x or x4 */
#define SMB_SLW_8X 0x0B /* 8x or x8 */
#define SMB_SLW_12X 0x0C /* 12x or x12 */
#define SMB_SLW_16X 0x0D /* 16x or x16 */
#define SMB_SLW_32X 0x0E /* 32x or x32 */
#define SMB_SLU_OTHER 0x01 /* other */
#define SMB_SLU_UNKNOWN 0x02 /* unknown */
#define SMB_SLU_AVAIL 0x03 /* available */
#define SMB_SLU_INUSE 0x04 /* in use */
#define SMB_SLL_OTHER 0x01 /* other */
#define SMB_SLL_UNKNOWN 0x02 /* unknown */
#define SMB_SLL_SHORT 0x03 /* short length */
#define SMB_SLL_LONG 0x04 /* long length */
#define SMB_SLCH1_UNKNOWN 0x01 /* characteristics unknown */
#define SMB_SLCH1_5V 0x02 /* provides 5.0V */
#define SMB_SLCH1_33V 0x04 /* provides 3.3V */
#define SMB_SLCH1_SHARED 0x08 /* opening shared with other slot */
#define SMB_SLCH1_PC16 0x10 /* slot supports PC Card-16 */
#define SMB_SLCH1_PCCB 0x20 /* slot supports CardBus */
#define SMB_SLCH1_PCZV 0x40 /* slot supports Zoom Video */
#define SMB_SLCH1_PCMRR 0x80 /* slot supports Modem Ring Resume */
#define SMB_SLCH2_PME 0x01 /* slot supports PME# signal */
#define SMB_SLCH2_HOTPLUG 0x02 /* slot supports hot-plug devices */
#define SMB_SLCH2_SMBUS 0x04 /* slot supports SMBus signal */
/*
* SMBIOS On-Board Device Information. See DSP0134 Section 7.11 for more
* information. Any number of on-board device sections may be present, each
* containing one or more records. The smbios_info_obdevs() function permits
* the caller to retrieve one or more of the records from a given section.
*/
typedef struct smbios_obdev {
const char *smbd_name; /* description string for this device */
uint8_t smbd_type; /* type code (SMB_OBT_*) */
uint8_t smbd_enabled; /* boolean (device is enabled) */
} smbios_obdev_t;
#define SMB_OBT_OTHER 0x01 /* other */
#define SMB_OBT_UNKNOWN 0x02 /* unknown */
#define SMB_OBT_VIDEO 0x03 /* video */
#define SMB_OBT_SCSI 0x04 /* scsi */
#define SMB_OBT_ETHERNET 0x05 /* ethernet */
#define SMB_OBT_TOKEN 0x06 /* token ring */
#define SMB_OBT_SOUND 0x07 /* sound */
#define SMB_OBT_PATA 0x08 /* pata */
#define SMB_OBT_SATA 0x09 /* sata */
#define SMB_OBT_SAS 0x0A /* sas */
/*
* SMBIOS BIOS Language Information. See DSP0134 Section 7.14 for more
* information. The smbios_info_strtab() function can be applied using a
* count of smbla_num to retrieve the other possible language settings.
*/
typedef struct smbios_lang {
const char *smbla_cur; /* current language setting */
uint_t smbla_fmt; /* language name format (see below) */
uint_t smbla_num; /* number of installed languages */
} smbios_lang_t;
#define SMB_LFMT_LONG 0 /* <ISO639>|<ISO3166>|Encoding Method */
#define SMB_LFMT_SHORT 1 /* <ISO930><ISO3166> */
/*
* SMBIOS System Event Log Information. See DSP0134 Section 7.16 for more
* information. Accessing the event log itself requires additional interfaces.
*/
typedef struct smbios_evtype {
uint8_t smbevt_ltype; /* log type */
uint8_t smbevt_dtype; /* variable data format type */
} smbios_evtype_t;
typedef struct smbios_evlog {
size_t smbev_size; /* size in bytes of log area */
size_t smbev_hdr; /* offset or index of header */
size_t smbev_data; /* offset or index of data */
uint8_t smbev_method; /* data access method (see below) */
uint8_t smbev_flags; /* flags (see below) */
uint8_t smbev_format; /* log header format (see below) */
uint8_t smbev_pad; /* padding */
uint32_t smbev_token; /* data update change token */
union {
struct {
uint16_t evi_iaddr; /* index address */
uint16_t evi_daddr; /* data address */
} eva_io; /* i/o address for SMB_EVM_XxY */
uint32_t eva_addr; /* address for SMB_EVM_MEM32 */
uint16_t eva_gpnv; /* handle for SMB_EVM_GPNV */
} smbev_addr;
uint32_t smbev_typec; /* number of type descriptors */
const smbios_evtype_t *smbev_typev; /* type descriptor array */
} smbios_evlog_t;
#define SMB_EVM_1x1i_1x1d 0 /* I/O: 1 1b idx port, 1 1b data port */
#define SMB_EVM_2x1i_1x1d 1 /* I/O: 2 1b idx port, 1 1b data port */
#define SMB_EVM_1x2i_1x1d 2 /* I/O: 1 2b idx port, 1 1b data port */
#define SMB_EVM_MEM32 3 /* Memory-Mapped 32-bit Physical Addr */
#define SMB_EVM_GPNV 4 /* GP Non-Volatile API Access */
#define SMB_EVFL_VALID 0x1 /* log area valid */
#define SMB_EVFL_FULL 0x2 /* log area full */
#define SMB_EVHF_NONE 0 /* no log headers used */
#define SMB_EVHF_F1 1 /* DMTF log header type 1 */
/*
* SMBIOS Physical Memory Array Information. See DSP0134 Section 7.17 for
* more information. This describes a collection of physical memory devices.
*/
typedef struct smbios_memarray {
uint8_t smbma_location; /* physical device location */
uint8_t smbma_use; /* physical device functional purpose */
uint8_t smbma_ecc; /* error detect/correct mechanism */
uint8_t smbma_pad0; /* padding */
uint32_t smbma_pad1; /* padding */
uint32_t smbma_ndevs; /* number of slots or sockets */
id_t smbma_err; /* handle of error (if any) */
uint64_t smbma_size; /* maximum capacity in bytes */
} smbios_memarray_t;
#define SMB_MAL_OTHER 0x01 /* other */
#define SMB_MAL_UNKNOWN 0x02 /* unknown */
#define SMB_MAL_SYSMB 0x03 /* system board or motherboard */
#define SMB_MAL_ISA 0x04 /* ISA add-on card */
#define SMB_MAL_EISA 0x05 /* EISA add-on card */
#define SMB_MAL_PCI 0x06 /* PCI add-on card */
#define SMB_MAL_MCA 0x07 /* MCA add-on card */
#define SMB_MAL_PCMCIA 0x08 /* PCMCIA add-on card */
#define SMB_MAL_PROP 0x09 /* proprietary add-on card */
#define SMB_MAL_NUBUS 0x0A /* NuBus */
#define SMB_MAL_PC98C20 0xA0 /* PC-98/C20 add-on card */
#define SMB_MAL_PC98C24 0xA1 /* PC-98/C24 add-on card */
#define SMB_MAL_PC98E 0xA2 /* PC-98/E add-on card */
#define SMB_MAL_PC98LB 0xA3 /* PC-98/Local bus add-on card */
#define SMB_MAU_OTHER 0x01 /* other */
#define SMB_MAU_UNKNOWN 0x02 /* unknown */
#define SMB_MAU_SYSTEM 0x03 /* system memory */
#define SMB_MAU_VIDEO 0x04 /* video memory */
#define SMB_MAU_FLASH 0x05 /* flash memory */
#define SMB_MAU_NVRAM 0x06 /* non-volatile RAM */
#define SMB_MAU_CACHE 0x07 /* cache memory */
#define SMB_MAE_OTHER 0x01 /* other */
#define SMB_MAE_UNKNOWN 0x02 /* unknown */
#define SMB_MAE_NONE 0x03 /* none */
#define SMB_MAE_PARITY 0x04 /* parity */
#define SMB_MAE_SECC 0x05 /* single-bit ECC */
#define SMB_MAE_MECC 0x06 /* multi-bit ECC */
#define SMB_MAE_CRC 0x07 /* CRC */
/*
* SMBIOS Memory Device Information. See DSP0134 Section 7.18 for more
* information. One or more of these structures are associated with each
* smbios_memarray_t. A structure is present even for unpopulated sockets.
* Unknown values are set to -1. A smbmd_size of 0 indicates unpopulated.
* WARNING: Some BIOSes appear to export the *maximum* size of the device
* that can appear in the corresponding socket as opposed to the current one.
*/
typedef struct smbios_memdevice {
id_t smbmd_array; /* handle of physical memory array */
id_t smbmd_error; /* handle of memory error data */
uint32_t smbmd_twidth; /* total width in bits including ecc */
uint32_t smbmd_dwidth; /* data width in bits */
uint64_t smbmd_size; /* size in bytes (see note above) */
uint8_t smbmd_form; /* form factor */
uint8_t smbmd_set; /* set (0x00=none, 0xFF=unknown) */
uint8_t smbmd_type; /* memory type */
uint8_t smbmd_pad; /* padding */
uint32_t smbmd_flags; /* flags (see below) */
uint32_t smbmd_speed; /* speed in MT/s */
const char *smbmd_dloc; /* physical device locator string */
const char *smbmd_bloc; /* physical bank locator string */
uint8_t smbmd_rank; /* rank */
uint16_t smbmd_clkspeed; /* configured clock speed */
uint16_t smbmd_minvolt; /* minimum voltage */
uint16_t smbmd_maxvolt; /* maximum voltage */
uint16_t smbmd_confvolt; /* configured voltage */
} smbios_memdevice_t;
#define SMB_MDFF_OTHER 0x01 /* other */
#define SMB_MDFF_UNKNOWN 0x02 /* unknown */
#define SMB_MDFF_SIMM 0x03 /* SIMM */
#define SMB_MDFF_SIP 0x04 /* SIP */
#define SMB_MDFF_CHIP 0x05 /* chip */
#define SMB_MDFF_DIP 0x06 /* DIP */
#define SMB_MDFF_ZIP 0x07 /* ZIP */
#define SMB_MDFF_PROP 0x08 /* proprietary card */
#define SMB_MDFF_DIMM 0x09 /* DIMM */
#define SMB_MDFF_TSOP 0x0A /* TSOP */
#define SMB_MDFF_CHIPROW 0x0B /* row of chips */
#define SMB_MDFF_RIMM 0x0C /* RIMM */
#define SMB_MDFF_SODIMM 0x0D /* SODIMM */
#define SMB_MDFF_SRIMM 0x0E /* SRIMM */
#define SMB_MDFF_FBDIMM 0x0F /* FBDIMM */
#define SMB_MDT_OTHER 0x01 /* other */
#define SMB_MDT_UNKNOWN 0x02 /* unknown */
#define SMB_MDT_DRAM 0x03 /* DRAM */
#define SMB_MDT_EDRAM 0x04 /* EDRAM */
#define SMB_MDT_VRAM 0x05 /* VRAM */
#define SMB_MDT_SRAM 0x06 /* SRAM */
#define SMB_MDT_RAM 0x07 /* RAM */
#define SMB_MDT_ROM 0x08 /* ROM */
#define SMB_MDT_FLASH 0x09 /* FLASH */
#define SMB_MDT_EEPROM 0x0A /* EEPROM */
#define SMB_MDT_FEPROM 0x0B /* FEPROM */
#define SMB_MDT_EPROM 0x0C /* EPROM */
#define SMB_MDT_CDRAM 0x0D /* CDRAM */
#define SMB_MDT_3DRAM 0x0E /* 3DRAM */
#define SMB_MDT_SDRAM 0x0F /* SDRAM */
#define SMB_MDT_SGRAM 0x10 /* SGRAM */
#define SMB_MDT_RDRAM 0x11 /* RDRAM */
#define SMB_MDT_DDR 0x12 /* DDR */
#define SMB_MDT_DDR2 0x13 /* DDR2 */
#define SMB_MDT_DDR2FBDIMM 0x14 /* DDR2 FBDIMM */
#define SMB_MDT_DDR3 0x18 /* DDR3 */
#define SMB_MDT_FBD2 0x19 /* FBD2 */
#define SMB_MDT_DDR4 0x1A /* DDR4 */
#define SMB_MDT_LPDDR 0x1B /* LPDDR */
#define SMB_MDT_LPDDR2 0x1C /* LPDDR2 */
#define SMB_MDT_LPDDR3 0x1D /* LPDDR3 */
#define SMB_MDT_LPDDR4 0x1E /* LPDDR4 */
#define SMB_MDF_OTHER 0x0002 /* other */
#define SMB_MDF_UNKNOWN 0x0004 /* unknown */
#define SMB_MDF_FASTPG 0x0008 /* fast-paged */
#define SMB_MDF_STATIC 0x0010 /* static column */
#define SMB_MDF_PSTATIC 0x0020 /* pseudo-static */
#define SMB_MDF_RAMBUS 0x0040 /* RAMBUS */
#define SMB_MDF_SYNC 0x0080 /* synchronous */
#define SMB_MDF_CMOS 0x0100 /* CMOS */
#define SMB_MDF_EDO 0x0200 /* EDO */
#define SMB_MDF_WDRAM 0x0400 /* Window DRAM */
#define SMB_MDF_CDRAM 0x0800 /* Cache DRAM */
#define SMB_MDF_NV 0x1000 /* non-volatile */
#define SMB_MDF_REG 0x2000 /* Registered (Buffered) */
#define SMB_MDF_UNREG 0x4000 /* Unregistered (Unbuffered) */
#define SMB_MDF_LRDIMM 0x8000 /* LRDIMM */
#define SMB_MDR_SINGLE 0x01 /* single */
#define SMB_MDR_DUAL 0x02 /* dual */
#define SMB_MDR_QUAD 0x04 /* quad */
#define SMB_MDR_OCTAL 0x08 /* octal */
/*
* SMBIOS Memory Array Mapped Address. See DSP0134 Section 7.20 for more
* information. We convert start/end addresses into addr/size for convenience.
*/
typedef struct smbios_memarrmap {
id_t smbmam_array; /* physical memory array handle */
uint32_t smbmam_width; /* number of devices that form a row */
uint64_t smbmam_addr; /* physical address of mapping */
uint64_t smbmam_size; /* size in bytes of address range */
} smbios_memarrmap_t;
/*
* SMBIOS Memory Device Mapped Address. See DSP0134 Section 7.21 for more
* information. We convert start/end addresses into addr/size for convenience.
*/
typedef struct smbios_memdevmap {
id_t smbmdm_device; /* memory device handle */
id_t smbmdm_arrmap; /* memory array mapped address handle */
uint64_t smbmdm_addr; /* physical address of mapping */
uint64_t smbmdm_size; /* size in bytes of address range */
uint8_t smbmdm_rpos; /* partition row position */
uint8_t smbmdm_ipos; /* interleave position */
uint8_t smbmdm_idepth; /* interleave data depth */
} smbios_memdevmap_t;
/*
* SMBIOS Hardware Security Settings. See DSP0134 Section 7.25 for more
* information. Only one such record will be present in the SMBIOS.
*/
typedef struct smbios_hwsec {
uint8_t smbh_pwr_ps; /* power-on password status */
uint8_t smbh_kbd_ps; /* keyboard password status */
uint8_t smbh_adm_ps; /* administrator password status */
uint8_t smbh_pan_ps; /* front panel reset status */
} smbios_hwsec_t;
#define SMB_HWSEC_PS_DISABLED 0x00 /* password disabled */
#define SMB_HWSEC_PS_ENABLED 0x01 /* password enabled */
#define SMB_HWSEC_PS_NOTIMPL 0x02 /* password not implemented */
#define SMB_HWSEC_PS_UNKNOWN 0x03 /* password status unknown */
/*
* This value is used to represent a probe that has an unknown value.
*/
#define SMB_PROBE_UNKNOWN_VALUE 0x8000
/*
* SMBIOS Voltage Probe. See DSP0134 Section 7.27 for more information.
* Please see the specification for the units of each value.
*/
typedef struct smbios_vprobe {
const char *smbvp_description; /* description information */
uint8_t smbvp_location; /* probe location */
uint8_t smbvp_status; /* probe status */
uint16_t smbvp_maxval; /* maximum voltage */
uint16_t smbvp_minval; /* minimum voltage */
uint16_t smbvp_resolution; /* probe resolution */
uint16_t smbvp_tolerance; /* probe tolerance */
uint16_t smbvp_accuracy; /* probe accuracy */
uint32_t smbvp_oem; /* vendor-specific data */
uint16_t smbvp_nominal; /* nominal value */
} smbios_vprobe_t;
#define SMB_VPROBE_S_OTHER 0x01 /* other */
#define SMB_VPROBE_S_UNKNOWN 0x02 /* unknown */
#define SMB_VPROBE_S_OK 0x03 /* OK */
#define SMB_VPROBE_S_NONCRIT 0x04 /* non-critical */
#define SMB_VPROBE_S_CRIT 0x05 /* critical */
#define SMB_VPROBE_S_NONRECOV 0x06 /* non-recoverable */
#define SMB_VPROBE_L_OTHER 0x01 /* other */
#define SMB_VPROBE_L_UNKNOWN 0x02 /* unknown */
#define SMB_VPROBE_L_PROC 0x03 /* processor */
#define SMB_VPROBE_L_DISK 0x04 /* disk */
#define SMB_VPROBE_L_PBAY 0x05 /* peripheral bay */
#define SMB_VPROBE_L_MGMT 0x06 /* system management module */
#define SMB_VPROBE_L_MOBO 0x07 /* motherboard */
#define SMB_VPROBE_L_MEMMOD 0x08 /* memory module */
#define SMB_VPROBE_L_PROCMOD 0x09 /* processor module */
#define SMB_VPROBE_L_POWER 0x0a /* power unit */
#define SMB_VPROBE_L_AIC 0x0b /* add-in card */
/*
* SMBIOS Cooling Device. See DSP0134 Section 7.28 for more information.
* Please see the specification for the units of each value.
*/
typedef struct smbios_cooldev {
id_t smbcd_tprobe; /* temperature probe handle */
uint8_t smbcd_type; /* cooling device type */
uint8_t smbcd_status; /* status */
uint8_t smbcd_group; /* group ID */
uint32_t smbcd_oem; /* vendor-specific data */
uint16_t smbcd_nominal; /* nominal speed */
const char *smbcd_descr; /* device description */
} smbios_cooldev_t;
#define SMB_COOLDEV_S_OTHER 0x01 /* other */
#define SMB_COOLDEV_S_UNKNOWN 0x02 /* unknown */
#define SMB_COOLDEV_S_OK 0x03 /* OK */
#define SMB_COOLDEV_S_NONCRIT 0x04 /* non-critical */
#define SMB_COOLDEV_S_CRIT 0x05 /* critical */
#define SMB_COOLDEV_S_NONRECOV 0x06 /* non-recoverable */
#define SMB_COOLDEV_T_OTHER 0x01 /* other */
#define SMB_COOLDEV_T_UNKNOWN 0x02 /* unknown */
#define SMB_COOLDEV_T_FAN 0x03 /* fan */
#define SMB_COOLDEV_T_BLOWER 0x04 /* centrifugal blower */
#define SMB_COOLDEV_T_CHIPFAN 0x05 /* chip fan */
#define SMB_COOLDEV_T_CABFAN 0x06 /* cabinet fan */
#define SMB_COOLDEV_T_PSFAN 0x07 /* power supply fan */
#define SMB_COOLDEV_T_HEATPIPE 0x08 /* head pipe */
#define SMB_COOLDEV_T_IREFRIG 0x09 /* integrated refrigeration */
#define SMB_COOLDEV_T_ACTCOOL 0x10 /* active cooling */
#define SMB_COOLDEV_T_PASSCOOL 0x11 /* passive cooling */
/*
* SMBIOS Temperature Probe. See DSP0134 Section 7.29 for more information.
* Please see the specification for the units of each value.
*/
typedef struct smbios_tprobe {
const char *smbtp_description; /* description information */
uint8_t smbtp_location; /* probe location */
uint8_t smbtp_status; /* probe status */
uint16_t smbtp_maxval; /* maximum temperature */
uint16_t smbtp_minval; /* minimum temperature */
uint16_t smbtp_resolution; /* probe resolution */
uint16_t smbtp_tolerance; /* probe tolerance */
uint16_t smbtp_accuracy; /* probe accuracy */
uint32_t smbtp_oem; /* vendor-specific data */
uint16_t smbtp_nominal; /* nominal value */
} smbios_tprobe_t;
#define SMB_TPROBE_S_OTHER 0x01 /* other */
#define SMB_TPROBE_S_UNKNOWN 0x02 /* unknown */
#define SMB_TPROBE_S_OK 0x03 /* OK */
#define SMB_TPROBE_S_NONCRIT 0x04 /* non-critical */
#define SMB_TPROBE_S_CRIT 0x05 /* critical */
#define SMB_TPROBE_S_NONRECOV 0x06 /* non-recoverable */
#define SMB_TPROBE_L_OTHER 0x01 /* other */
#define SMB_TPROBE_L_UNKNOWN 0x02 /* unknown */
#define SMB_TPROBE_L_PROC 0x03 /* processor */
#define SMB_TPROBE_L_DISK 0x04 /* disk */
#define SMB_TPROBE_L_PBAY 0x05 /* peripheral bay */
#define SMB_TPROBE_L_MGMT 0x06 /* system management module */
#define SMB_TPROBE_L_MOBO 0x07 /* motherboard */
#define SMB_TPROBE_L_MEMMOD 0x08 /* memory module */
#define SMB_TPROBE_L_PROCMOD 0x09 /* processor module */
#define SMB_TPROBE_L_POWER 0x0a /* power unit */
#define SMB_TPROBE_L_AIC 0x0b /* add-in card */
#define SMB_TPROBE_L_FPBOARD 0x0c /* front panel board */
#define SMB_TPROBE_L_BPBOARD 0x0d /* rear panel board */
#define SMB_TPROBE_L_PSBOARD 0x0e /* power system board */
#define SMB_TPROBE_L_DBPANE 0x0f /* drive back plane */
/*
* SMBIOS Current Probe. See DSP0134 Section 7.30 for more information.
* Please see the specification for the units of each value.
*/
typedef struct smbios_iprobe {
const char *smbip_description; /* description information */
uint8_t smbip_location; /* probe location */
uint8_t smbip_status; /* probe status */
uint16_t smbip_maxval; /* maximum current */
uint16_t smbip_minval; /* minimum current */
uint16_t smbip_resolution; /* probe resolution */
uint16_t smbip_tolerance; /* probe tolerance */
uint16_t smbip_accuracy; /* probe accuracy */
uint32_t smbip_oem; /* vendor-specific data */
uint16_t smbip_nominal; /* nominal value */
} smbios_iprobe_t;
#define SMB_IPROBE_S_OTHER 0x01 /* other */
#define SMB_IPROBE_S_UNKNOWN 0x02 /* unknown */
#define SMB_IPROBE_S_OK 0x03 /* OK */
#define SMB_IPROBE_S_NONCRIT 0x04 /* non-critical */
#define SMB_IPROBE_S_CRIT 0x05 /* critical */
#define SMB_IPROBE_S_NONRECOV 0x06 /* non-recoverable */
#define SMB_IPROBE_L_OTHER 0x01 /* other */
#define SMB_IPROBE_L_UNKNOWN 0x02 /* unknown */
#define SMB_IPROBE_L_PROC 0x03 /* processor */
#define SMB_IPROBE_L_DISK 0x04 /* disk */
#define SMB_IPROBE_L_PBAY 0x05 /* peripheral bay */
#define SMB_IPROBE_L_MGMT 0x06 /* system management module */
#define SMB_IPROBE_L_MOBO 0x07 /* motherboard */
#define SMB_IPROBE_L_MEMMOD 0x08 /* memory module */
#define SMB_IPROBE_L_PROCMOD 0x09 /* processor module */
#define SMB_IPROBE_L_POWER 0x0a /* power unit */
#define SMB_IPROBE_L_AIC 0x0b /* add-in card */
/*
* SMBIOS System Boot Information. See DSP0134 Section 7.33 for more
* information. The contents of the data varies by type and is undocumented
* from the perspective of DSP0134 -- it seems to be left as vendor-specific.
* The (D) annotation next to SMB_BOOT_* below indicates possible data payload.
*/
typedef struct smbios_boot {
uint8_t smbt_status; /* boot status code (see below) */
const void *smbt_data; /* data buffer specific to status */
size_t smbt_size; /* size of smbt_data buffer in bytes */
} smbios_boot_t;
#define SMB_BOOT_NORMAL 0 /* no errors detected */
#define SMB_BOOT_NOMEDIA 1 /* no bootable media */
#define SMB_BOOT_OSFAIL 2 /* normal o/s failed to load */
#define SMB_BOOT_FWHWFAIL 3 /* firmware-detected hardware failure */
#define SMB_BOOT_OSHWFAIL 4 /* o/s-detected hardware failure */
#define SMB_BOOT_USERREQ 5 /* user-requested boot (keystroke) */
#define SMB_BOOT_SECURITY 6 /* system security violation */
#define SMB_BOOT_PREVREQ 7 /* previously requested image (D) */
#define SMB_BOOT_WATCHDOG 8 /* watchdog initiated reboot */
#define SMB_BOOT_RESV_LO 9 /* low end of reserved range */
#define SMB_BOOT_RESV_HI 127 /* high end of reserved range */
#define SMB_BOOT_OEM_LO 128 /* low end of OEM-specific range */
#define SMB_BOOT_OEM_HI 191 /* high end of OEM-specific range */
#define SMB_BOOT_PROD_LO 192 /* low end of product-specific range */
#define SMB_BOOT_PROD_HI 255 /* high end of product-specific range */
/*
* SMBIOS IPMI Device Information. See DSP0134 Section 7.39 and also
* Appendix C1 of the IPMI specification for more information on this record.
*/
typedef struct smbios_ipmi {
uint_t smbip_type; /* BMC interface type */
smbios_version_t smbip_vers; /* BMC's IPMI specification version */
uint32_t smbip_i2c; /* BMC I2C bus slave address */
uint32_t smbip_bus; /* bus ID of NV storage device, or -1 */
uint64_t smbip_addr; /* BMC base address */
uint32_t smbip_flags; /* flags (see below) */
uint16_t smbip_intr; /* interrupt number (or zero if none) */
uint16_t smbip_regspacing; /* i/o space register spacing (bytes) */
} smbios_ipmi_t;
#define SMB_IPMI_T_UNKNOWN 0x00 /* unknown */
#define SMB_IPMI_T_KCS 0x01 /* KCS: Keyboard Controller Style */
#define SMB_IPMI_T_SMIC 0x02 /* SMIC: Server Mgmt Interface Chip */
#define SMB_IPMI_T_BT 0x03 /* BT: Block Transfer */
#define SMB_IPMI_T_SSIF 0x04 /* SSIF: SMBus System Interface */
#define SMB_IPMI_F_IOADDR 0x01 /* base address is in i/o space */
#define SMB_IPMI_F_INTRSPEC 0x02 /* intr information is specified */
#define SMB_IPMI_F_INTRHIGH 0x04 /* intr active high (else low) */
#define SMB_IPMI_F_INTREDGE 0x08 /* intr is edge triggered (else lvl) */
/*
* SMBIOS System Power Supply Information. See DSP0134 7.40 for more
* information.
*/
typedef struct smbios_powersup {
uint32_t smbps_group; /* group ID */
uint64_t smbps_maxout; /* max output in milliwatts */
uint32_t smbps_flags; /* see below */
uint8_t smbps_ivrs; /* input voltage range switching type */
uint8_t smbps_status; /* PSU status */
uint8_t smbps_pstype; /* PSU type */
id_t smbps_vprobe; /* voltage probe handle */
id_t smbps_cooldev; /* cooling device handle */
id_t smbps_iprobe; /* current probe handle */
} smbios_powersup_t;
/* smbpfs_flags */
#define SMB_POWERSUP_F_HOT 0x01 /* PSU is hot-replaceable */
#define SMB_POWERSUP_F_PRESENT 0x02 /* PSU is present */
#define SMB_POWERSUP_F_UNPLUG 0x04 /* PSU is unplugged from outlet */
/* Values for smbps_ivrs */
#define SMB_POWERSUP_I_OTHER 0x01 /* other */
#define SMB_POWERSUP_I_UNKNOWN 0x02 /* unknown */
#define SMB_POWERSUP_I_MANUAL 0x03 /* manual */
#define SMB_POWERSUP_I_AUTO 0x04 /* auto-switch */
#define SMB_POWERSUP_I_WIDE 0x05 /* wide range */
#define SMB_POWERSUP_I_NA 0x06 /* not applicable */
#define SMB_POWERSUP_S_OTHER 0x01 /* other */
#define SMB_POWERSUP_S_UNKNOWN 0x02 /* unknown */
#define SMB_POWERSUP_S_OK 0x03 /* OK */
#define SMB_POWERSUP_S_NONCRIT 0x04 /* non-critical */
#define SMB_POWERSUP_S_CRIT 0x05 /* critical; PSU failed */
#define SMB_POWERSUP_T_OTHER 0x01 /* other */
#define SMB_POWERSUP_T_UNKNOWN 0x02 /* unknown */
#define SMB_POWERSUP_T_LINEAR 0x03 /* linear */
#define SMB_POWERSUP_T_SWITCH 0x04 /* switching */
#define SMB_POWERSUP_T_BAT 0x05 /* battery */
#define SMB_POWERSUP_T_UPS 0x06 /* UPS */
#define SMB_POWERSUP_T_CONV 0x07 /* converter */
#define SMB_POWERSUP_T_REGL 0x08 /* regulator */
/*
* SMBIOS Onboard Devices Extended Information. See DSP0134 Section 7.42
* for more information.
*/
typedef struct smbios_obdev_ext {
const char *smboe_name; /* reference designation */
uint8_t smboe_dtype; /* device type */
uint8_t smboe_dti; /* device type instance */
uint16_t smboe_sg; /* segment group number */
uint8_t smboe_bus; /* bus number */
uint8_t smboe_df; /* device/function number */
} smbios_obdev_ext_t;
/*
* SMBIOS OEM-specific (Type 132) Processor Extended Information.
*/
typedef struct smbios_processor_ext {
uint16_t smbpe_processor; /* extending processor handle */
uint8_t smbpe_fru; /* FRU indicaor */
uint8_t smbpe_n; /* number of APIC IDs */
uint16_t *smbpe_apicid; /* strand Inital APIC IDs */
} smbios_processor_ext_t;
/*
* SMBIOS OEM-specific (Type 136) Port Extended Information.
*/
typedef struct smbios_port_ext {
uint16_t smbporte_chassis; /* chassis handle */
uint16_t smbporte_port; /* port connector handle */
uint8_t smbporte_dtype; /* device type */
uint16_t smbporte_devhdl; /* device handle */
uint8_t smbporte_phy; /* PHY number */
} smbios_port_ext_t;
/*
* SMBIOS OEM-specific (Type 138) PCI-Express RC/RP Information.
*/
typedef struct smbios_pciexrc {
uint16_t smbpcie_bb; /* base board handle */
uint16_t smbpcie_bdf; /* Bus/Dev/Funct (PCI) */
} smbios_pciexrc_t;
/*
* SMBIOS OEM-specific (Type 144) Memory Array Extended Information.
*/
typedef struct smbios_memarray_ext {
uint16_t smbmae_ma; /* memory array handle */
uint16_t smbmae_comp; /* component parent handle */
uint16_t smbmae_bdf; /* Bus/Dev/Funct (PCI) */
} smbios_memarray_ext_t;
/*
* SMBIOS OEM-specific (Type 145) Memory Device Extended Information.
*/
typedef struct smbios_memdevice_ext {
uint16_t smbmdeve_md; /* memory device handle */
uint8_t smbmdeve_drch; /* DRAM channel */
uint8_t smbmdeve_ncs; /* number of chip selects */
uint8_t *smbmdeve_cs; /* array of chip select numbers */
} smbios_memdevice_ext_t;
/*
* SMBIOS Interfaces. An SMBIOS image can be opened by either providing a file
* pathname, device pathname, file descriptor, or raw memory buffer. Once an
* image is opened the functions below can be used to iterate over the various
* structures and convert the underlying data representation into the simpler
* data structures described earlier in this header file. The SMB_VERSION
* constant specified when opening an image indicates the version of the ABI
* the caller expects and the DMTF SMBIOS version the client can understand.
* The library will then map older or newer data structures to that as needed.
*/
#define SMB_VERSION_23 0x0203 /* SMBIOS encoding for DMTF spec 2.3 */
#define SMB_VERSION_24 0x0204 /* SMBIOS encoding for DMTF spec 2.4 */
#define SMB_VERSION_25 0x0205 /* SMBIOS encoding for DMTF spec 2.5 */
#define SMB_VERSION_26 0x0206 /* SMBIOS encoding for DMTF spec 2.6 */
#define SMB_VERSION_27 0x0207 /* SMBIOS encoding for DMTF spec 2.7 */
#define SMB_VERSION_28 0x0208 /* SMBIOS encoding for DMTF spec 2.8 */
#define SMB_VERSION_30 0x0300 /* SMBIOS encoding for DMTF spec 3.0 */
#define SMB_VERSION_31 0x0301 /* SMBIOS encoding for DMTF spec 3.1 */
#define SMB_VERSION SMB_VERSION_31 /* SMBIOS latest version definitions */
#define SMB_O_NOCKSUM 0x1 /* do not verify header checksums */
#define SMB_O_NOVERS 0x2 /* do not verify header versions */
#define SMB_O_ZIDS 0x4 /* strip out identification numbers */
#define SMB_O_MASK 0x7 /* mask of valid smbios_*open flags */
#define SMB_ID_NOTSUP 0xFFFE /* structure is not supported by BIOS */
#define SMB_ID_NONE 0xFFFF /* structure is a null reference */
#define SMB_ERR (-1) /* id_t value indicating error */
typedef struct smbios_hdl smbios_hdl_t;
typedef struct smbios_struct {
id_t smbstr_id; /* structure ID handle */
uint_t smbstr_type; /* structure type */
const void *smbstr_data; /* structure data */
size_t smbstr_size; /* structure size */
} smbios_struct_t;
typedef int smbios_struct_f(smbios_hdl_t *,
const smbios_struct_t *, void *);
extern smbios_hdl_t *smbios_open(const char *, int, int, int *);
extern smbios_hdl_t *smbios_fdopen(int, int, int, int *);
extern smbios_hdl_t *smbios_bufopen(const smbios_entry_t *,
const void *, size_t, int, int, int *);
extern const void *smbios_buf(smbios_hdl_t *);
extern size_t smbios_buflen(smbios_hdl_t *);
extern void smbios_checksum(smbios_hdl_t *, smbios_entry_t *);
extern int smbios_write(smbios_hdl_t *, int);
extern void smbios_close(smbios_hdl_t *);
extern boolean_t smbios_truncated(smbios_hdl_t *);
extern int smbios_errno(smbios_hdl_t *);
extern const char *smbios_errmsg(int);
extern int smbios_lookup_id(smbios_hdl_t *, id_t, smbios_struct_t *);
extern int smbios_lookup_type(smbios_hdl_t *, uint_t, smbios_struct_t *);
extern int smbios_iter(smbios_hdl_t *, smbios_struct_f *, void *);
extern smbios_entry_point_t smbios_info_smbios(smbios_hdl_t *,
smbios_entry_t *);
extern void smbios_info_smbios_version(smbios_hdl_t *, smbios_version_t *);
extern int smbios_info_common(smbios_hdl_t *, id_t, smbios_info_t *);
extern int smbios_info_contains(smbios_hdl_t *, id_t, uint_t, id_t *);
extern id_t smbios_info_bios(smbios_hdl_t *, smbios_bios_t *);
extern id_t smbios_info_system(smbios_hdl_t *, smbios_system_t *);
extern int smbios_info_bboard(smbios_hdl_t *, id_t, smbios_bboard_t *);
extern int smbios_info_chassis(smbios_hdl_t *, id_t, smbios_chassis_t *);
extern int smbios_info_processor(smbios_hdl_t *, id_t, smbios_processor_t *);
extern int smbios_info_extprocessor(smbios_hdl_t *, id_t,
smbios_processor_ext_t *);
extern int smbios_info_cache(smbios_hdl_t *, id_t, smbios_cache_t *);
extern int smbios_info_port(smbios_hdl_t *, id_t, smbios_port_t *);
extern int smbios_info_extport(smbios_hdl_t *, id_t, smbios_port_ext_t *);
extern int smbios_info_slot(smbios_hdl_t *, id_t, smbios_slot_t *);
extern int smbios_info_obdevs(smbios_hdl_t *, id_t, int, smbios_obdev_t *);
extern int smbios_info_obdevs_ext(smbios_hdl_t *, id_t, smbios_obdev_ext_t *);
extern int smbios_info_strtab(smbios_hdl_t *, id_t, int, const char *[]);
extern id_t smbios_info_lang(smbios_hdl_t *, smbios_lang_t *);
extern id_t smbios_info_eventlog(smbios_hdl_t *, smbios_evlog_t *);
extern int smbios_info_memarray(smbios_hdl_t *, id_t, smbios_memarray_t *);
extern int smbios_info_extmemarray(smbios_hdl_t *, id_t,
smbios_memarray_ext_t *);
extern int smbios_info_memarrmap(smbios_hdl_t *, id_t, smbios_memarrmap_t *);
extern int smbios_info_memdevice(smbios_hdl_t *, id_t, smbios_memdevice_t *);
extern int smbios_info_extmemdevice(smbios_hdl_t *, id_t,
smbios_memdevice_ext_t *);
extern int smbios_info_memdevmap(smbios_hdl_t *, id_t, smbios_memdevmap_t *);
extern id_t smbios_info_hwsec(smbios_hdl_t *, smbios_hwsec_t *);
extern int smbios_info_vprobe(smbios_hdl_t *, id_t, smbios_vprobe_t *);
extern int smbios_info_cooldev(smbios_hdl_t *, id_t, smbios_cooldev_t *);
extern int smbios_info_tprobe(smbios_hdl_t *, id_t, smbios_tprobe_t *);
extern int smbios_info_iprobe(smbios_hdl_t *, id_t, smbios_iprobe_t *);
extern id_t smbios_info_boot(smbios_hdl_t *, smbios_boot_t *);
extern id_t smbios_info_ipmi(smbios_hdl_t *, smbios_ipmi_t *);
extern int smbios_info_powersup(smbios_hdl_t *, id_t, smbios_powersup_t *);
extern int smbios_info_pciexrc(smbios_hdl_t *, id_t, smbios_pciexrc_t *);
extern const char *smbios_psn(smbios_hdl_t *);
extern const char *smbios_csn(smbios_hdl_t *);
#ifndef _KERNEL
/*
* The smbios_*_desc() and smbios_*_name() interfaces can be used for utilities
* such as smbios(1M) that wish to decode SMBIOS fields for humans. The _desc
* functions return the comment string next to the #defines listed above, and
* the _name functions return the appropriate #define identifier itself.
*/
extern const char *smbios_bboard_flag_desc(uint_t);
extern const char *smbios_bboard_flag_name(uint_t);
extern const char *smbios_bboard_type_desc(uint_t);
extern const char *smbios_bios_flag_desc(uint64_t);
extern const char *smbios_bios_flag_name(uint64_t);
extern const char *smbios_bios_xb1_desc(uint_t);
extern const char *smbios_bios_xb1_name(uint_t);
extern const char *smbios_bios_xb2_desc(uint_t);
extern const char *smbios_bios_xb2_name(uint_t);
extern const char *smbios_boot_desc(uint_t);
extern const char *smbios_cache_assoc_desc(uint_t);
extern const char *smbios_cache_ctype_desc(uint_t);
extern const char *smbios_cache_ctype_name(uint_t);
extern const char *smbios_cache_ecc_desc(uint_t);
extern const char *smbios_cache_flag_desc(uint_t);
extern const char *smbios_cache_flag_name(uint_t);
extern const char *smbios_cache_loc_desc(uint_t);
extern const char *smbios_cache_logical_desc(uint_t);
extern const char *smbios_cache_mode_desc(uint_t);
extern const char *smbios_chassis_state_desc(uint_t);
extern const char *smbios_chassis_type_desc(uint_t);
extern const char *smbios_evlog_flag_desc(uint_t);
extern const char *smbios_evlog_flag_name(uint_t);
extern const char *smbios_evlog_format_desc(uint_t);
extern const char *smbios_evlog_method_desc(uint_t);
extern const char *smbios_vprobe_loc_desc(uint_t);
extern const char *smbios_vprobe_status_desc(uint_t);
extern const char *smbios_cooldev_status_desc(uint_t);
extern const char *smbios_cooldev_type_desc(uint_t);
extern const char *smbios_tprobe_loc_desc(uint_t);
extern const char *smbios_tprobe_status_desc(uint_t);
extern const char *smbios_iprobe_loc_desc(uint_t);
extern const char *smbios_iprobe_status_desc(uint_t);
extern const char *smbios_ipmi_flag_name(uint_t);
extern const char *smbios_ipmi_flag_desc(uint_t);
extern const char *smbios_ipmi_type_desc(uint_t);
extern const char *smbios_powersup_flag_name(uint_t);
extern const char *smbios_powersup_flag_desc(uint_t);
extern const char *smbios_powersup_input_desc(uint_t);
extern const char *smbios_powersup_status_desc(uint_t);
extern const char *smbios_powersup_type_desc(uint_t);
extern const char *smbios_hwsec_desc(uint_t);
extern const char *smbios_memarray_loc_desc(uint_t);
extern const char *smbios_memarray_use_desc(uint_t);
extern const char *smbios_memarray_ecc_desc(uint_t);
extern const char *smbios_memdevice_form_desc(uint_t);
extern const char *smbios_memdevice_type_desc(uint_t);
extern const char *smbios_memdevice_flag_name(uint_t);
extern const char *smbios_memdevice_flag_desc(uint_t);
extern const char *smbios_memdevice_rank_desc(uint_t);
extern const char *smbios_onboard_type_desc(uint_t);
extern const char *smbios_port_conn_desc(uint_t);
extern const char *smbios_port_type_desc(uint_t);
extern const char *smbios_processor_family_desc(uint_t);
extern const char *smbios_processor_status_desc(uint_t);
extern const char *smbios_processor_type_desc(uint_t);
extern const char *smbios_processor_upgrade_desc(uint_t);
extern const char *smbios_processor_core_flag_name(uint_t);
extern const char *smbios_processor_core_flag_desc(uint_t);
extern const char *smbios_slot_type_desc(uint_t);
extern const char *smbios_slot_width_desc(uint_t);
extern const char *smbios_slot_usage_desc(uint_t);
extern const char *smbios_slot_length_desc(uint_t);
extern const char *smbios_slot_ch1_desc(uint_t);
extern const char *smbios_slot_ch1_name(uint_t);
extern const char *smbios_slot_ch2_desc(uint_t);
extern const char *smbios_slot_ch2_name(uint_t);
extern const char *smbios_type_desc(uint_t);
extern const char *smbios_type_name(uint_t);
extern const char *smbios_system_wakeup_desc(uint_t);
#endif /* !_KERNEL */
#ifdef _KERNEL
/*
* For SMBIOS clients within the kernel itself, ksmbios is used to refer to
* the kernel's current snapshot of the SMBIOS, if one exists, and the
* ksmbios_flags tunable is the set of flags for use with smbios_open().
*/
extern smbios_hdl_t *ksmbios;
extern int ksmbios_flags;
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SMBIOS_H */
|