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:
parent
bd66bcfca5
commit
90b6180500
@ -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;
|
||||
}
|
||||
|
@ -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__)
|
||||
|
Loading…
Reference in New Issue
Block a user