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