提交 5fedc4a2 编写于 作者: M Matthew Garrett 提交者: Linus Torvalds

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: NMatthew Garrett <mjg@redhat.com>
Signed-off-by: NCorey Minyard <cminyard@mvista.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 4de85cd6
...@@ -107,6 +107,14 @@ enum si_type { ...@@ -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 { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册