15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef QEMU_SMBIOS_H 25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QEMU_SMBIOS_H 35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * SMBIOS Support 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2009 Hewlett-Packard Development Company, L.P. 75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Authors: 95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Alex Williamson <alex.williamson@hp.com> 105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This work is licensed under the terms of the GNU GPL, version 2. See 125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * the COPYING file in the top-level directory. 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint smbios_entry_add(const char *t); 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid smbios_add_field(int type, int offset, int len, void *data); 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turneruint8_t *smbios_get_table(size_t *length); 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * SMBIOS spec defined tables 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* This goes at the beginning of every SMBIOS structure. */ 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_structure_header { 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t length; 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 0 - BIOS Information */ 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_0 { 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t vendor_str; 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bios_version_str; 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t bios_starting_address_segment; 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bios_release_date_str; 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bios_rom_size; 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bios_characteristics[8]; 405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bios_characteristics_extension_bytes[2]; 415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t system_bios_major_release; 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t system_bios_minor_release; 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t embedded_controller_major_release; 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t embedded_controller_minor_release; 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 1 - System Information */ 485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_1 { 495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t manufacturer_str; 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t product_name_str; 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t version_str; 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t serial_number_str; 545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t uuid[16]; 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t wake_up_type; 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t sku_number_str; 575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t family_str; 585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 3 - System Enclosure (v2.3) */ 615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_3 { 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t manufacturer_str; 645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t version_str; 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t serial_number_str; 675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t asset_tag_number_str; 685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t boot_up_state; 695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t power_supply_state; 705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t thermal_state; 715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t security_status; 725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t oem_defined; 735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t height; 745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t number_of_power_cords; 755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t contained_element_count; 765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner // contained elements follow 775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 4 - Processor Information (v2.0) */ 805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_4 { 815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t socket_designation_str; 835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t processor_type; 845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t processor_family; 855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t processor_manufacturer_str; 865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t processor_id[2]; 875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t processor_version_str; 885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t voltage; 895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t external_clock; 905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_speed; 915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t current_speed; 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t processor_upgrade; 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t l1_cache_handle; 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t l2_cache_handle; 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t l3_cache_handle; 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 16 - Physical Memory Array 1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Associated with one type 17 (Memory Device). 1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_16 { 1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t location; 1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t use; 1065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t error_correction; 1075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t maximum_capacity; 1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t memory_error_information_handle; 1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t number_of_memory_devices; 1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 17 - Memory Device 1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Associated with one type 19 1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_17 { 1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t physical_memory_array_handle; 1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t memory_error_information_handle; 1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t total_width; 1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t data_width; 1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t size; 1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t form_factor; 1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t device_set; 1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t device_locator_str; 1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t bank_locator_str; 1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t memory_type; 1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t type_detail; 1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 19 - Memory Array Mapped Address */ 1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_19 { 1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t starting_address; 1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t ending_address; 1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t memory_array_handle; 1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t partition_width; 1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 20 - Memory Device Mapped Address */ 1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_20 { 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t starting_address; 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t ending_address; 1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t memory_device_handle; 1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t memory_array_mapped_address_handle; 1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t partition_row_position; 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t interleave_position; 1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t interleaved_data_depth; 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 32 - System Boot Information */ 1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_32 { 1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reserved[6]; 1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t boot_status; 1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* SMBIOS type 127 -- End-of-table */ 1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct smbios_type_127 { 1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct smbios_structure_header header; 1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((__packed__)); 1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif /*QEMU_SMBIOS_H */ 163