Add automatic SMBIOS table generation
[coreboot.git] / src / include / smbios.h
diff --git a/src/include/smbios.h b/src/include/smbios.h
new file mode 100644 (file)
index 0000000..f13d621
--- /dev/null
@@ -0,0 +1,197 @@
+#ifndef SMBIOS_H
+#define SMBIOS_H
+
+#include <types.h>
+
+unsigned long smbios_write_tables(unsigned long start);
+int smbios_add_string(char *start, const char *str);
+int smbios_string_table_len(char *start);
+
+#define BIOS_CHARACTERISTICS_PCI_SUPPORTED  (1 << 7)
+#define BIOS_CHARACTERISTICS_PC_CARD  (1 << 8)
+#define BIOS_CHARACTERISTICS_PNP  (1 << 9)
+#define BIOS_CHARACTERISTICS_APM (1 << 10)
+#define BIOS_CHARACTERISTICS_UPGRADEABLE      (1 << 11)
+#define BIOS_CHARACTERISTICS_SHADOW           (1 << 12)
+#define BIOS_CHARACTERISTICS_BOOT_FROM_CD     (1 << 15)
+#define BIOS_CHARACTERISTICS_SELECTABLE_BOOT  (1 << 16)
+#define BIOS_CHARACTERISTICS_BIOS_SOCKETED    (1 << 17)
+
+#define BIOS_EXT1_CHARACTERISTICS_ACPI    (1 << 0)
+#define BIOS_EXT2_CHARACTERISTICS_TARGET  (1 << 2)
+
+#define SMBIOS_STATE_SAFE 3
+typedef enum {
+       SMBIOS_BIOS_INFORMATION=0,
+       SMBIOS_SYSTEM_INFORMATION=1,
+       SMBIOS_SYSTEM_ENCLOSURE=3,
+       SMBIOS_PROCESSOR_INFORMATION=4,
+       SMBIOS_CACHE_INFORMATION=7,
+       SMBIOS_SYSTEM_SLOTS=9,
+       SMBIOS_PHYS_MEMORY_ARRAY=16,
+       SMBIOS_MEMORY_DEVICE=17,
+       SMBIOS_MEMORY_ARRAY_MAPPED_ADDRESS=19,
+       SMBIOS_SYSTEM_BOOT_INFORMATION=32,
+       SMBIOS_END_OF_TABLE=127,
+} smbios_struct_type_t;
+
+struct smbios_entry {
+       u8 anchor[4];
+       u8 checksum;
+       u8 length;
+       u8 major_version;
+       u8 minor_version;
+       u16 max_struct_size;
+       u8 entry_point_rev;
+       u8 formwatted_area[5];
+       u8 intermediate_anchor_string[5];
+       u8 intermediate_checksum;
+       u16 struct_table_length;
+       u32 struct_table_address;
+       u16 struct_count;
+       u8 smbios_bcd_revision;
+} __attribute__((packed));
+
+struct smbios_type0 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 vendor;
+       u8 bios_version;
+       u16 bios_start_segment;
+       u8 bios_release_date;
+       u8 bios_rom_size;
+       u64 bios_characteristics;
+       u8 bios_characteristics_ext1;
+       u8 bios_characteristics_ext2;
+       u8 system_bios_major_release;
+       u8 system_bios_minor_release;
+       u8 ec_major_release;
+       u8 ec_minor_release;
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type1 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 manufacturer;
+       u8 product_name;
+       u8 version;
+       u8 serial_number;
+       u8 uuid[16];
+       u8 wakeup_type;
+       u8 sku;
+       u8 family;
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type3 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 manufacturer;
+       u8 _type;
+       u8 version;
+       u8 serial_number;
+       u8 asset_tag_number;
+       u8 bootup_state;
+       u8 power_supply_state;
+       u8 thermal_state;
+       u8 security_status;
+       u32 oem_defined;
+       u8 height;
+       u8 number_of_power_cords;
+       u8 element_count;
+       u8 element_record_length;
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type4 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 socket_designation;
+       u8 processor_type;
+       u8 processor_family;
+       u8 processor_manufacturer;
+       u32 processor_id[2];
+       u8 processor_version;
+       u8 voltage;
+       u16 external_clock;
+       u16 max_speed;
+       u16 current_speed;
+       u8 status;
+       u8 processor_upgrade;
+       u16 l1_cache_handle;
+       u16 l2_cache_handle;
+       u16 l3_cache_handle;
+       u8 serial_number;
+       u8 asset_tag;
+       u8 part_number;
+       u8 core_count;
+       u8 core_enabled;
+       u8 thread_count;
+       u16 processor_characteristics;
+       u16 processor_family2;
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type16 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 location;
+       u8 use;
+       u8 memory_error_correction;
+       u32 maximum_capacity;
+       u16 memory_error_information_handle;
+       u16 number_of_memory_devices;
+       u64 extended_maximum_capacity;
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type17 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u16 phys_memory_array_handle;
+       u16 memory_error_information_handle;
+       u16 total_width;
+       u16 data_width;
+       u16 size;
+       u8 form_factor;
+       u8 device_set;
+       u8 device_locator;
+       u8 bank_locator;
+       u8 memory_type;
+       u16 type_detail;
+       u16 speed;
+       u8 manufacturer;
+       u8 serial_number;
+       u8 asset_tag;
+       u8 part_number;
+       u8 attributes;
+       u16 extended_size;
+       u16 clock_speed;
+
+       char eos[2];
+} __attribute__((packed));
+
+struct smbios_type32 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 reserved[6];
+       u8 boot_status;
+       u8 eos[2];
+} __attribute__((packed));
+
+struct smbios_type127 {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u8 eos[2];
+} __attribute__((packed));
+
+#endif