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 168