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