|
@@ -483,7 +483,7 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)
|
|
|
unsigned long dma_size = pci_resource_len(dev, 1);
|
|
|
void __iomem *ctl_addr;
|
|
|
void __iomem *dma_addr;
|
|
|
- int i;
|
|
|
+ int i, ret;
|
|
|
|
|
|
for (i = 0; i < MAX_HWIFS; i++) {
|
|
|
if (scc_ports[i].ctl == 0)
|
|
@@ -492,21 +492,17 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)
|
|
|
if (i >= MAX_HWIFS)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- if (!request_mem_region(ctl_base, ctl_size, name)) {
|
|
|
- printk(KERN_WARNING "%s: IDE controller MMIO ports not available.\n", SCC_PATA_NAME);
|
|
|
- goto fail_0;
|
|
|
- }
|
|
|
-
|
|
|
- if (!request_mem_region(dma_base, dma_size, name)) {
|
|
|
- printk(KERN_WARNING "%s: IDE controller MMIO ports not available.\n", SCC_PATA_NAME);
|
|
|
- goto fail_1;
|
|
|
+ ret = pci_request_selected_regions(dev, (1 << 2) - 1, name);
|
|
|
+ if (ret < 0) {
|
|
|
+ printk(KERN_ERR "%s: can't reserve resources\n", name);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
if ((ctl_addr = ioremap(ctl_base, ctl_size)) == NULL)
|
|
|
- goto fail_2;
|
|
|
+ goto fail_0;
|
|
|
|
|
|
if ((dma_addr = ioremap(dma_base, dma_size)) == NULL)
|
|
|
- goto fail_3;
|
|
|
+ goto fail_1;
|
|
|
|
|
|
pci_set_master(dev);
|
|
|
scc_ports[i].ctl = (unsigned long)ctl_addr;
|
|
@@ -515,12 +511,8 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
- fail_3:
|
|
|
- iounmap(ctl_addr);
|
|
|
- fail_2:
|
|
|
- release_mem_region(dma_base, dma_size);
|
|
|
fail_1:
|
|
|
- release_mem_region(ctl_base, ctl_size);
|
|
|
+ iounmap(ctl_addr);
|
|
|
fail_0:
|
|
|
return -ENOMEM;
|
|
|
}
|
|
@@ -757,10 +749,6 @@ static void __devexit scc_remove(struct pci_dev *dev)
|
|
|
{
|
|
|
struct scc_ports *ports = pci_get_drvdata(dev);
|
|
|
ide_hwif_t *hwif = ports->hwif;
|
|
|
- unsigned long ctl_base = pci_resource_start(dev, 0);
|
|
|
- unsigned long dma_base = pci_resource_start(dev, 1);
|
|
|
- unsigned long ctl_size = pci_resource_len(dev, 0);
|
|
|
- unsigned long dma_size = pci_resource_len(dev, 1);
|
|
|
|
|
|
if (hwif->dmatable_cpu) {
|
|
|
pci_free_consistent(dev, PRD_ENTRIES * PRD_BYTES,
|
|
@@ -773,8 +761,7 @@ static void __devexit scc_remove(struct pci_dev *dev)
|
|
|
hwif->chipset = ide_unknown;
|
|
|
iounmap((void*)ports->dma);
|
|
|
iounmap((void*)ports->ctl);
|
|
|
- release_mem_region(dma_base, dma_size);
|
|
|
- release_mem_region(ctl_base, ctl_size);
|
|
|
+ pci_release_selected_regions(dev, (1 << 2) - 1);
|
|
|
memset(ports, 0, sizeof(*ports));
|
|
|
}
|
|
|
|