Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fedc4a2 authored by Matthew Garrett's avatar Matthew Garrett Committed by Linus Torvalds
Browse files

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: default avatarMatthew Garrett <mjg@redhat.com>
Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4de85cd6
Loading
Loading
Loading
Loading
+25 −19
Original line number Diff line number Diff line
@@ -107,6 +107,14 @@ enum si_type {
};
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"

static struct platform_driver ipmi_driver = {
@@ -188,7 +196,7 @@ struct smi_info {
	int (*irq_setup)(struct smi_info *info);
	void (*irq_cleanup)(struct smi_info *info);
	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_data;

@@ -1755,7 +1763,7 @@ static int hotmod_handler(const char *val, struct kernel_param *kp)
				goto out;
			}

			info->addr_source = "hotmod";
			info->addr_source = SI_HOTMOD;
			info->si_type = si_type;
			info->io.addr_data = addr;
			info->io.addr_type = addr_space;
@@ -1813,7 +1821,7 @@ static __devinit void hardcode_find_bmc(void)
		if (!info)
			return;

		info->addr_source = "hardcoded";
		info->addr_source = SI_HARDCODED;

		if (!si_type[i] || strcmp(si_type[i], "kcs") == 0) {
			info->si_type = SI_KCS;
@@ -2004,7 +2012,7 @@ static __devinit int try_init_spmi(struct SPMITable *spmi)
		return -ENOMEM;
	}

	info->addr_source = "SPMI";
	info->addr_source = SI_SPMI;

	/* Figure out the interface type. */
	switch (spmi->InterfaceType) {
@@ -2105,7 +2113,7 @@ static int __devinit ipmi_pnp_probe(struct pnp_dev *dev,
	if (!info)
		return -ENOMEM;

	info->addr_source = "ACPI";
	info->addr_source = SI_ACPI;

	handle = acpi_dev->handle;

@@ -2269,7 +2277,7 @@ static __devinit void try_init_dmi(struct dmi_ipmi_data *ipmi_data)
		return;
	}

	info->addr_source = "SMBIOS";
	info->addr_source = SI_SMBIOS;

	switch (ipmi_data->type) {
	case 0x01: /* KCS */
@@ -2368,7 +2376,7 @@ static int __devinit ipmi_pci_probe(struct pci_dev *pdev,
	if (!info)
		return -ENOMEM;

	info->addr_source = "PCI";
	info->addr_source = SI_PCI;

	switch (class_type) {
	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->addr_source	= "device-tree";
	info->addr_source	= SI_DEVICETREE;
	info->irq_setup		= std_irq_setup;

	if (resource.flags & IORESOURCE_IO) {
@@ -2951,7 +2959,7 @@ static __devinit void default_find_bmc(void)
		if (!info)
			return;

		info->addr_source = NULL;
		info->addr_source = SI_DEFAULT;

		info->si_type = ipmi_defaults[i].type;
		info->io_setup = port_setup;
@@ -2994,16 +3002,14 @@ static int try_smi_init(struct smi_info *new_smi)
	int rv;
	int i;

	if (new_smi->addr_source) {
	printk(KERN_INFO "ipmi_si: Trying %s-specified %s state"
	       " machine at %s address 0x%lx, slave address 0x%x,"
	       " irq %d\n",
		       new_smi->addr_source,
	       ipmi_addr_src_to_str[new_smi->addr_source],
	       si_to_str[new_smi->si_type],
	       addr_space_to_str[new_smi->io.addr_type],
	       new_smi->io.addr_data,
	       new_smi->slave_addr, new_smi->irq);
	}

	mutex_lock(&smi_infos_lock);
	if (!is_new_interface(new_smi)) {