pci: cleanup config.h
[seabios.git] / src / smbios.h
1 #ifndef __SMBIOS_H
2 #define __SMBIOS_H
3
4 // smbios.c
5 void smbios_init(void);
6
7 /* SMBIOS entry point -- must be written to a 16-bit aligned address
8    between 0xf0000 and 0xfffff.
9  */
10 struct smbios_entry_point {
11     char anchor_string[4];
12     u8 checksum;
13     u8 length;
14     u8 smbios_major_version;
15     u8 smbios_minor_version;
16     u16 max_structure_size;
17     u8 entry_point_revision;
18     u8 formatted_area[5];
19     char intermediate_anchor_string[5];
20     u8 intermediate_checksum;
21     u16 structure_table_length;
22     u32 structure_table_address;
23     u16 number_of_structures;
24     u8 smbios_bcd_revision;
25 } PACKED;
26
27 /* This goes at the beginning of every SMBIOS structure. */
28 struct smbios_structure_header {
29     u8 type;
30     u8 length;
31     u16 handle;
32 } PACKED;
33
34 /* SMBIOS type 0 - BIOS Information */
35 struct smbios_type_0 {
36     struct smbios_structure_header header;
37     u8 vendor_str;
38     u8 bios_version_str;
39     u16 bios_starting_address_segment;
40     u8 bios_release_date_str;
41     u8 bios_rom_size;
42     u8 bios_characteristics[8];
43     u8 bios_characteristics_extension_bytes[2];
44     u8 system_bios_major_release;
45     u8 system_bios_minor_release;
46     u8 embedded_controller_major_release;
47     u8 embedded_controller_minor_release;
48 } PACKED;
49
50 /* SMBIOS type 1 - System Information */
51 struct smbios_type_1 {
52     struct smbios_structure_header header;
53     u8 manufacturer_str;
54     u8 product_name_str;
55     u8 version_str;
56     u8 serial_number_str;
57     u8 uuid[16];
58     u8 wake_up_type;
59     u8 sku_number_str;
60     u8 family_str;
61 } PACKED;
62
63 /* SMBIOS type 3 - System Enclosure (v2.3) */
64 struct smbios_type_3 {
65     struct smbios_structure_header header;
66     u8 manufacturer_str;
67     u8 type;
68     u8 version_str;
69     u8 serial_number_str;
70     u8 asset_tag_number_str;
71     u8 boot_up_state;
72     u8 power_supply_state;
73     u8 thermal_state;
74     u8 security_status;
75     u32 oem_defined;
76     u8 height;
77     u8 number_of_power_cords;
78     u8 contained_element_count;
79     // contained elements follow
80 } PACKED;
81
82 /* SMBIOS type 4 - Processor Information (v2.0) */
83 struct smbios_type_4 {
84     struct smbios_structure_header header;
85     u8 socket_designation_str;
86     u8 processor_type;
87     u8 processor_family;
88     u8 processor_manufacturer_str;
89     u32 processor_id[2];
90     u8 processor_version_str;
91     u8 voltage;
92     u16 external_clock;
93     u16 max_speed;
94     u16 current_speed;
95     u8 status;
96     u8 processor_upgrade;
97     u16 l1_cache_handle;
98     u16 l2_cache_handle;
99     u16 l3_cache_handle;
100 } PACKED;
101
102 /* SMBIOS type 16 - Physical Memory Array
103  *   Associated with one type 17 (Memory Device).
104  */
105 struct smbios_type_16 {
106     struct smbios_structure_header header;
107     u8 location;
108     u8 use;
109     u8 error_correction;
110     u32 maximum_capacity;
111     u16 memory_error_information_handle;
112     u16 number_of_memory_devices;
113 } PACKED;
114
115 /* SMBIOS type 17 - Memory Device
116  *   Associated with one type 19
117  */
118 struct smbios_type_17 {
119     struct smbios_structure_header header;
120     u16 physical_memory_array_handle;
121     u16 memory_error_information_handle;
122     u16 total_width;
123     u16 data_width;
124     u16 size;
125     u8 form_factor;
126     u8 device_set;
127     u8 device_locator_str;
128     u8 bank_locator_str;
129     u8 memory_type;
130     u16 type_detail;
131 } PACKED;
132
133 /* SMBIOS type 19 - Memory Array Mapped Address */
134 struct smbios_type_19 {
135     struct smbios_structure_header header;
136     u32 starting_address;
137     u32 ending_address;
138     u16 memory_array_handle;
139     u8 partition_width;
140 } PACKED;
141
142 /* SMBIOS type 20 - Memory Device Mapped Address */
143 struct smbios_type_20 {
144     struct smbios_structure_header header;
145     u32 starting_address;
146     u32 ending_address;
147     u16 memory_device_handle;
148     u16 memory_array_mapped_address_handle;
149     u8 partition_row_position;
150     u8 interleave_position;
151     u8 interleaved_data_depth;
152 } PACKED;
153
154 /* SMBIOS type 32 - System Boot Information */
155 struct smbios_type_32 {
156     struct smbios_structure_header header;
157     u8 reserved[6];
158     u8 boot_status;
159 } PACKED;
160
161 /* SMBIOS type 127 -- End-of-table */
162 struct smbios_type_127 {
163     struct smbios_structure_header header;
164 } PACKED;
165
166 #endif // smbios.h