ipmi: change addr_source to an enum rather than strings
Switch from a char* to an enum to identify the address source of SIs, making it easier to handle them appropriately during registration. Signed-off-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Corey Minyard <cminyard@mvista.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4de85cd6d6
commit
5fedc4a282
1 changed files with 25 additions and 19 deletions
|
@ -107,6 +107,14 @@ enum si_type {
|
||||||
};
|
};
|
||||||
static char *si_to_str[] = { "kcs", "smic", "bt" };
|
static char *si_to_str[] = { "kcs", "smic", "bt" };
|
||||||
|
|
||||||
|
enum ipmi_addr_src {
|
||||||
|
SI_INVALID = 0, SI_HOTMOD, SI_HARDCODED, SI_SPMI, SI_ACPI, SI_SMBIOS,
|
||||||
|
SI_PCI, SI_DEVICETREE, SI_DEFAULT
|
||||||
|
};
|
||||||
|
static char *ipmi_addr_src_to_str[] = { NULL, "hotmod", "hardcoded", "SPMI",
|
||||||
|
"ACPI", "SMBIOS", "PCI",
|
||||||
|
"device-tree", "default" };
|
||||||
|
|
||||||
#define DEVICE_NAME "ipmi_si"
|
#define DEVICE_NAME "ipmi_si"
|
||||||
|
|
||||||
static struct platform_driver ipmi_driver = {
|
static struct platform_driver ipmi_driver = {
|
||||||
|
@ -188,7 +196,7 @@ struct smi_info {
|
||||||
int (*irq_setup)(struct smi_info *info);
|
int (*irq_setup)(struct smi_info *info);
|
||||||
void (*irq_cleanup)(struct smi_info *info);
|
void (*irq_cleanup)(struct smi_info *info);
|
||||||
unsigned int io_size;
|
unsigned int io_size;
|
||||||
char *addr_source; /* ACPI, PCI, SMBIOS, hardcode, default. */
|
enum ipmi_addr_src addr_source; /* ACPI, PCI, SMBIOS, hardcode, etc. */
|
||||||
void (*addr_source_cleanup)(struct smi_info *info);
|
void (*addr_source_cleanup)(struct smi_info *info);
|
||||||
void *addr_source_data;
|
void *addr_source_data;
|
||||||
|
|
||||||
|
@ -1755,7 +1763,7 @@ static int hotmod_handler(const char *val, struct kernel_param *kp)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->addr_source = "hotmod";
|
info->addr_source = SI_HOTMOD;
|
||||||
info->si_type = si_type;
|
info->si_type = si_type;
|
||||||
info->io.addr_data = addr;
|
info->io.addr_data = addr;
|
||||||
info->io.addr_type = addr_space;
|
info->io.addr_type = addr_space;
|
||||||
|
@ -1813,7 +1821,7 @@ static __devinit void hardcode_find_bmc(void)
|
||||||
if (!info)
|
if (!info)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
info->addr_source = "hardcoded";
|
info->addr_source = SI_HARDCODED;
|
||||||
|
|
||||||
if (!si_type[i] || strcmp(si_type[i], "kcs") == 0) {
|
if (!si_type[i] || strcmp(si_type[i], "kcs") == 0) {
|
||||||
info->si_type = SI_KCS;
|
info->si_type = SI_KCS;
|
||||||
|
@ -2004,7 +2012,7 @@ static __devinit int try_init_spmi(struct SPMITable *spmi)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->addr_source = "SPMI";
|
info->addr_source = SI_SPMI;
|
||||||
|
|
||||||
/* Figure out the interface type. */
|
/* Figure out the interface type. */
|
||||||
switch (spmi->InterfaceType) {
|
switch (spmi->InterfaceType) {
|
||||||
|
@ -2105,7 +2113,7 @@ static int __devinit ipmi_pnp_probe(struct pnp_dev *dev,
|
||||||
if (!info)
|
if (!info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
info->addr_source = "ACPI";
|
info->addr_source = SI_ACPI;
|
||||||
|
|
||||||
handle = acpi_dev->handle;
|
handle = acpi_dev->handle;
|
||||||
|
|
||||||
|
@ -2269,7 +2277,7 @@ static __devinit void try_init_dmi(struct dmi_ipmi_data *ipmi_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->addr_source = "SMBIOS";
|
info->addr_source = SI_SMBIOS;
|
||||||
|
|
||||||
switch (ipmi_data->type) {
|
switch (ipmi_data->type) {
|
||||||
case 0x01: /* KCS */
|
case 0x01: /* KCS */
|
||||||
|
@ -2368,7 +2376,7 @@ static int __devinit ipmi_pci_probe(struct pci_dev *pdev,
|
||||||
if (!info)
|
if (!info)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
info->addr_source = "PCI";
|
info->addr_source = SI_PCI;
|
||||||
|
|
||||||
switch (class_type) {
|
switch (class_type) {
|
||||||
case PCI_ERMC_CLASSCODE_TYPE_SMIC:
|
case PCI_ERMC_CLASSCODE_TYPE_SMIC:
|
||||||
|
@ -2508,7 +2516,7 @@ static int __devinit ipmi_of_probe(struct of_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
info->si_type = (enum si_type) match->data;
|
info->si_type = (enum si_type) match->data;
|
||||||
info->addr_source = "device-tree";
|
info->addr_source = SI_DEVICETREE;
|
||||||
info->irq_setup = std_irq_setup;
|
info->irq_setup = std_irq_setup;
|
||||||
|
|
||||||
if (resource.flags & IORESOURCE_IO) {
|
if (resource.flags & IORESOURCE_IO) {
|
||||||
|
@ -2951,7 +2959,7 @@ static __devinit void default_find_bmc(void)
|
||||||
if (!info)
|
if (!info)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
info->addr_source = NULL;
|
info->addr_source = SI_DEFAULT;
|
||||||
|
|
||||||
info->si_type = ipmi_defaults[i].type;
|
info->si_type = ipmi_defaults[i].type;
|
||||||
info->io_setup = port_setup;
|
info->io_setup = port_setup;
|
||||||
|
@ -2994,16 +3002,14 @@ static int try_smi_init(struct smi_info *new_smi)
|
||||||
int rv;
|
int rv;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (new_smi->addr_source) {
|
printk(KERN_INFO "ipmi_si: Trying %s-specified %s state"
|
||||||
printk(KERN_INFO "ipmi_si: Trying %s-specified %s state"
|
" machine at %s address 0x%lx, slave address 0x%x,"
|
||||||
" machine at %s address 0x%lx, slave address 0x%x,"
|
" irq %d\n",
|
||||||
" irq %d\n",
|
ipmi_addr_src_to_str[new_smi->addr_source],
|
||||||
new_smi->addr_source,
|
si_to_str[new_smi->si_type],
|
||||||
si_to_str[new_smi->si_type],
|
addr_space_to_str[new_smi->io.addr_type],
|
||||||
addr_space_to_str[new_smi->io.addr_type],
|
new_smi->io.addr_data,
|
||||||
new_smi->io.addr_data,
|
new_smi->slave_addr, new_smi->irq);
|
||||||
new_smi->slave_addr, new_smi->irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_lock(&smi_infos_lock);
|
mutex_lock(&smi_infos_lock);
|
||||||
if (!is_new_interface(new_smi)) {
|
if (!is_new_interface(new_smi)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue