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)
|
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);
|
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
|
#ifdef IPMI_DEBUG
|
||||||
#define ipmi_debug(fs, ...) \
|
#define ipmi_debug(fs, ...) \
|
||||||
fprintf(stderr, "IPMI (%s): " fs, __func__, ##__VA_ARGS__)
|
fprintf(stderr, "IPMI (%s): " fs, __func__, ##__VA_ARGS__)
|
||||||
|
|
Loading…
Reference in New Issue