Annotation of sys/arch/i386/include/smbiosvar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: smbiosvar.h,v 1.3 2006/07/17 20:34:31 fgsch Exp $ */
2: /*
3: * Copyright (c) 2006 Gordon Willem Klok <gklok@cogeco.ca>
4: * Copyright (c) 2005 Jordan Hargrave
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
17: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
20: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26: * SUCH DAMAGE.
27: */
28: #ifndef _I386_SMBIOSVAR_
29: #define _I386_SMBIOSVAR_
30:
31: #define SMBIOS_START 0xf0000
32: #define SMBIOS_END 0xfffff
33:
34: #define SMBIOS_UUID_NPRESENT 0x1
35: #define SMBIOS_UUID_NSET 0x2
36:
37: /*
38: * Section 3.5 of "UUIDs and GUIDs" found at
39: * http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
40: * specifies the string repersentation of a UUID.
41: */
42: #define SMBIOS_UUID_REP "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
43: #define SMBIOS_UUID_REPLEN 37 /* 16 zero padded values, 4 hyphens, 1 null */
44:
45: struct smbios_entry {
46: u_int8_t mjr;
47: u_int8_t min;
48: u_int8_t *addr;
49: u_int16_t len;
50: u_int16_t count;
51: };
52:
53: struct smbhdr {
54: u_int32_t sig; /* "_SM_" */
55: u_int8_t checksum; /* Entry point checksum */
56: u_int8_t len; /* Entry point structure length */
57: u_int8_t majrev; /* Specification major revision */
58: u_int8_t minrev; /* Specification minor revision */
59: u_int16_t mss; /* Maximum Structure Size */
60: u_int8_t epr; /* Entry Point Revision */
61: u_int8_t fa[5]; /* value determined by EPR */
62: u_int8_t sasig[5]; /* Secondary Anchor "_DMI_" */
63: u_int8_t sachecksum; /* Secondary Checksum */
64: u_int16_t size; /* Length of structure table in bytes */
65: u_int32_t addr; /* Structure table address */
66: u_int16_t count; /* Number of SMBIOS structures */
67: u_int8_t rev; /* BCD revision */
68: } __packed;
69:
70: struct smbtblhdr {
71: u_int8_t type;
72: u_int8_t size;
73: u_int16_t handle;
74: } __packed;
75:
76: struct smbtable {
77: struct smbtblhdr *hdr;
78: void *tblhdr;
79: u_int32_t cookie;
80: };
81:
82: #define SMBIOS_TYPE_BIOS 0
83: #define SMBIOS_TYPE_SYSTEM 1
84: #define SMBIOS_TYPE_BASEBOARD 2
85: #define SMBIOS_TYPE_ENCLOSURE 3
86: #define SMBIOS_TYPE_PROCESSOR 4
87: #define SMBIOS_TYPE_MEMCTRL 5
88: #define SMBIOS_TYPE_MEMMOD 6
89: #define SMBIOS_TYPE_CACHE 7
90: #define SMBIOS_TYPE_PORT 8
91: #define SMBIOS_TYPE_SLOTS 9
92: #define SMBIOS_TYPE_OBD 10
93: #define SMBIOS_TYPE_OEM 11
94: #define SMBIOS_TYPE_SYSCONFOPT 12
95: #define SMBIOS_TYPE_BIOSLANG 13
96: #define SMBIOS_TYPE_GROUPASSOC 14
97: #define SMBIOS_TYPE_SYSEVENTLOG 15
98: #define SMBIOS_TYPE_PHYMEM 16
99: #define SMBIOS_TYPE_MEMDEV 17
100: #define SMBIOS_TYPE_ECCINFO32 18
101: #define SMBIOS_TYPE_MEMMAPARRAYADDR 19
102: #define SMBIOS_TYPE_MEMMAPDEVADDR 20
103: #define SMBIOS_TYPE_INBUILTPOINT 21
104: #define SMBIOS_TYPE_PORTBATT 22
105: #define SMBIOS_TYPE_SYSRESET 23
106: #define SMBIOS_TYPE_HWSECUIRTY 24
107: #define SMBIOS_TYPE_PWRCTRL 25
108: #define SMBIOS_TYPE_VOLTPROBE 26
109: #define SMBIOS_TYPE_COOLING 27
110: #define SMBIOS_TYPE_TEMPPROBE 28
111: #define SMBIOS_TYPE_CURRENTPROBE 29
112: #define SMBIOS_TYPE_OOB_REMOTEACCESS 30
113: #define SMBIOS_TYPE_BIS 31
114: #define SMBIOS_TYPE_SBI 32
115: #define SMBIOS_TYPE_ECCINFO64 33
116: #define SMBIOS_TYPE_MGMTDEV 34
117: #define SMBIOS_TYPE_MGTDEVCOMP 35
118: #define SMBIOS_TYPE_MGTDEVTHRESH 36
119: #define SMBIOS_TYPE_MEMCHANNEL 37
120: #define SMBIOS_TYPE_IPMIDEV 38
121: #define SMBIOS_TYPE_SPS 39
122: #define SMBIOS_TYPE_INACTIVE 126
123: #define SMBIOS_TYPE_EOT 127
124:
125: /*
126: * SMBIOS Structure Type 0 "BIOS Information"
127: * DMTF Specification DSP0134 Section: 3.3.1 p.g. 34
128: */
129: struct smbios_struct_bios {
130: u_int8_t vendor; /* string */
131: u_int8_t version; /* string */
132: u_int16_t startaddr;
133: u_int8_t release; /* string */
134: u_int8_t romsize;
135: u_int64_t characteristics;
136: u_int32_t charext;
137: u_int8_t major_rel;
138: u_int8_t minor_rel;
139: u_int8_t ecf_mjr_rel; /* embedded controler firmware */
140: u_int8_t ecf_min_rel; /* embedded controler firmware */
141: } __packed;
142:
143: /*
144: * SMBIOS Structure Type 1 "System Information"
145: * DMTF Specification DSP0134 Section 3.3.2 p.g. 35
146: */
147:
148: struct smbios_sys {
149: /* SMBIOS spec 2.0+ */
150: u_int8_t vendor; /* string */
151: u_int8_t product; /* string */
152: u_int8_t version; /* string */
153: u_int8_t serial; /* string */
154: /* SMBIOS spec 2.1+ */
155: u_int8_t uuid[16];
156: u_int8_t wakeup;
157: /* SMBIOS spec 2.4+ */
158: u_int8_t sku; /* string */
159: u_int8_t family; /* string */
160: } __packed;
161:
162: /*
163: * SMBIOS Structure Type 2 "Base Board (Module) Information"
164: * DMTF Specification DSP0134 Section 3.3.3 p.g. 37
165: */
166: struct smbios_board {
167: u_int8_t vendor; /* string */
168: u_int8_t product; /* string */
169: u_int8_t version; /* string */
170: u_int8_t serial; /* string */
171: u_int8_t asset; /* stirng */
172: u_int8_t feature; /* feature flags */
173: u_int8_t location; /* location in chassis */
174: u_int16_t handle; /* chassis handle */
175: u_int8_t type; /* board type */
176: u_int8_t noc; /* number of contained objects */
177: } __packed;
178:
179: /*
180: * SMBIOS Structure Type 38 "IPMI Information"
181: * DMTF Specification DSP0134 Section 3.3.39 p.g. 91
182: */
183: struct smbios_ipmi {
184: u_int8_t smipmi_if_type; /* IPMI Interface Type */
185: u_int8_t smipmi_if_rev; /* BCD IPMI Revision */
186: u_int8_t smipmi_i2c_address; /* I2C address of BMC */
187: u_int8_t smipmi_nvram_address; /* I2C address of NVRAM
188: * storage */
189: u_int64_t smipmi_base_address; /* Base address of BMC (BAR
190: * format */
191: u_int8_t smipmi_base_flags; /* Flags field:
192: * bit 7:6 : register spacing
193: * 00 = byte
194: * 01 = dword
195: * 02 = word
196: * bit 4 : Lower bit BAR
197: * bit 3 : IRQ valid
198: * bit 2 : N/A
199: * bit 1 : Interrupt polarity
200: * bit 0 : Interrupt trigger */
201: u_int8_t smipmi_irq; /* IRQ if applicable */
202: } __packed;
203:
204: int smbios_find_table(u_int8_t, struct smbtable *);
205: char *smbios_get_string(struct smbtable *, u_int8_t, char *, size_t);
206:
207: #endif
CVSweb