From: Corey Minyard <[email protected]> Add an IPMI table entry to the SMBIOS.
Signed-off-by: Corey Minyard <[email protected]> --- hw/ipmi/isa_ipmi.c | 23 +++++++++++++++++++++++ include/hw/i386/smbios.h | 12 ++++++++++++ 2 files changed, 35 insertions(+) diff --git a/hw/ipmi/isa_ipmi.c b/hw/ipmi/isa_ipmi.c index 92afb88..706cc2c 100644 --- a/hw/ipmi/isa_ipmi.c +++ b/hw/ipmi/isa_ipmi.c @@ -29,6 +29,7 @@ #include "qemu/timer.h" #include "sysemu/char.h" #include "sysemu/sysemu.h" +#include "hw/i386/smbios.h" #include "ipmi.h" /* This is the type the user specifies on the -device command line */ @@ -162,6 +163,27 @@ ipmi_encode_acpi(ISAIPMIDevice *info) acpi_append_to_table("DSDT", ipmitable, rc, &err); } +static void ipmi_encode_smbios(ISAIPMIDevice *info) +{ + struct smbios_type_38 smb38; + + smb38.header.type = 38; + smb38.header.length = sizeof(smb38); + smb38.header.handle = cpu_to_le16(0x3000); + smb38.interface_type = info->intftype; + smb38.ipmi_spec_revision = 0x20; + smb38.i2c_slave_address = info->slave_addr; + smb38.nv_storage_device_address = 0; + + /* or 1 to set it to I/O space */ + smb38.base_address = cpu_to_le64(info->iobase | 1); + + /* 1-byte boundaries, addr bit0=0, level triggered irq */ + smb38.base_address_modifier = 1; + smb38.interrupt_number = info->isairq; + smbios_table_entry_add((struct smbios_structure_header *) &smb38); +} + static int ipmi_isa_initfn(ISADevice *dev) { ISAIPMIDevice *isa = ISA_IPMI(dev); @@ -233,6 +255,7 @@ static int ipmi_isa_initfn(ISADevice *dev) isa_register_ioport(dev, &intf->io, intf->io_base); ipmi_encode_acpi(isa); + ipmi_encode_smbios(isa); return 0; } diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h index d92fa88..fb79d5a 100644 --- a/include/hw/i386/smbios.h +++ b/include/hw/i386/smbios.h @@ -156,6 +156,18 @@ struct smbios_type_32 { uint8_t boot_status; } QEMU_PACKED; +/* SMBIOS type 38 - IPMI */ +struct smbios_type_38 { + struct smbios_structure_header header; + uint8_t interface_type; + uint8_t ipmi_spec_revision; + uint8_t i2c_slave_address; + uint8_t nv_storage_device_address; + uint64_t base_address; + uint8_t base_address_modifier; + uint8_t interrupt_number; +} QEMU_PACKED; + /* SMBIOS type 127 -- End-of-table */ struct smbios_type_127 { struct smbios_structure_header header; -- 1.7.9.5 ------------------------------------------------------------------------------ Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET Get 100% visibility into your production application - at no cost. Code-level diagnostics for performance bottlenecks with <2% overhead Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap1 _______________________________________________ Openipmi-developer mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openipmi-developer
