enum ipmi_addr_space addr_space;
unsigned long addr_data;
enum ipmi_addr_src addr_source; /* ACPI, PCI, SMBIOS, hardcode, etc. */
- void (*addr_source_cleanup)(struct si_sm_io *io);
- void *addr_source_data;
union ipmi_smi_info_union addr_info;
int (*io_setup)(struct si_sm_io *info);
if (smi_info->handlers)
smi_info->handlers->cleanup(smi_info->si_sm);
- if (smi_info->io.addr_source_cleanup) {
- smi_info->io.addr_source_cleanup(&smi_info->io);
- smi_info->io.addr_source_cleanup = NULL;
- }
if (smi_info->io.io_cleanup) {
smi_info->io.io_cleanup(&smi_info->io);
smi_info->io.io_cleanup = NULL;
#define PCI_DEVICE_ID_HP_MMC 0x121A
-static void ipmi_pci_cleanup(struct si_sm_io *io)
-{
- struct pci_dev *pdev = io->addr_source_data;
-
- pci_disable_device(pdev);
-}
-
static int ipmi_pci_probe_regspacing(struct si_sm_io *io)
{
if (io->si_type == SI_KCS) {
return -ENOMEM;
}
- rv = pci_enable_device(pdev);
+ rv = pcim_enable_device(pdev);
if (rv) {
dev_err(&pdev->dev, "couldn't enable PCI device\n");
return rv;
}
- io.addr_source_cleanup = ipmi_pci_cleanup;
- io.addr_source_data = pdev;
-
if (pci_resource_flags(pdev, 0) & IORESOURCE_IO) {
io.addr_space = IPMI_IO_ADDR_SPACE;
io.io_setup = ipmi_si_port_setup;
dev_info(&pdev->dev, "%pR regsize %d spacing %d irq %d\n",
&pdev->resource[0], io.regsize, io.regspacing, io.irq);
- rv = ipmi_si_add_smi(&io);
- if (rv)
- pci_disable_device(pdev);
-
- return rv;
+ return ipmi_si_add_smi(&io);
}
static void ipmi_pci_remove(struct pci_dev *pdev)