ipmi: Add a firmware configuration repository

Add a way for IPMI devices to register their firmware information
with the IPMI subsystem so that various firmware entities can pull
that information later for adding to firmware tables.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Corey Minyard 2015-12-17 12:50:12 -06:00 committed by Michael S. Tsirkin
parent bd66bcfca5
commit 90b6180500
2 changed files with 62 additions and 0 deletions

View File

@ -123,3 +123,30 @@ static void ipmi_register_types(void)
}
type_init(ipmi_register_types)
static IPMIFwInfo *ipmi_fw_info;
static unsigned int ipmi_fw_info_len;
static uint32_t current_uuid = 1;
void ipmi_add_fwinfo(IPMIFwInfo *info, Error **errp)
{
info->uuid = current_uuid++;
ipmi_fw_info = g_realloc(ipmi_fw_info,
sizeof(*ipmi_fw_info) * (ipmi_fw_info_len + 1));
ipmi_fw_info[ipmi_fw_info_len] = *info;
}
IPMIFwInfo *ipmi_first_fwinfo(void)
{
return ipmi_fw_info;
}
IPMIFwInfo *ipmi_next_fwinfo(IPMIFwInfo *current)
{
current++;
if (current >= &ipmi_fw_info[ipmi_fw_info_len]) {
return NULL;
}
return current;
}

View File

@ -168,6 +168,41 @@ typedef struct IPMIBmcClass {
*/
void ipmi_bmc_find_and_link(Object *obj, Object **bmc);
/*
* Used for transferring information to interfaces that add
* entries to firmware tables.
*/
typedef struct IPMIFwInfo {
const char *interface_name;
int interface_type;
uint8_t ipmi_spec_major_revision;
uint8_t ipmi_spec_minor_revision;
uint8_t i2c_slave_address;
uint32_t uuid;
uint64_t base_address;
uint64_t register_length;
uint8_t register_spacing;
enum {
IPMI_MEMSPACE_IO,
IPMI_MEMSPACE_MEM32,
IPMI_MEMSPACE_MEM64,
IPMI_MEMSPACE_SMBUS
} memspace;
int interrupt_number;
enum {
IPMI_LEVEL_IRQ,
IPMI_EDGE_IRQ
} irq_type;
const char *acpi_parent;
} IPMIFwInfo;
void ipmi_add_fwinfo(IPMIFwInfo *info, Error **errp);
IPMIFwInfo *ipmi_first_fwinfo(void);
IPMIFwInfo *ipmi_next_fwinfo(IPMIFwInfo *current);
#ifdef IPMI_DEBUG
#define ipmi_debug(fs, ...) \
fprintf(stderr, "IPMI (%s): " fs, __func__, ##__VA_ARGS__)