Commit 6c9b9c55 authored by Ondrej Zary's avatar Ondrej Zary Committed by Martin K. Petersen

atp870u: Simplify _probe()

Move shpnt common code to the top, remove base_io, use pci_resource_len.
Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
Reviewed-by: default avatarHannes Reinicke <hare@suse.de>
Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent dd5a5f79
...@@ -1245,7 +1245,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1245,7 +1245,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{ {
unsigned char k, m, c; unsigned char k, m, c;
unsigned long flags; unsigned long flags;
unsigned int base_io, error,n; unsigned int error,n;
unsigned char host_id; unsigned char host_id;
struct Scsi_Host *shpnt = NULL; struct Scsi_Host *shpnt = NULL;
struct atp_unit *atpdev; struct atp_unit *atpdev;
...@@ -1278,21 +1278,24 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1278,21 +1278,24 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atpdev->pdev = pdev; atpdev->pdev = pdev;
pci_set_drvdata(pdev, atpdev); pci_set_drvdata(pdev, atpdev);
base_io = pci_resource_start(pdev, 0); shpnt->io_port = pci_resource_start(pdev, 0);
base_io &= 0xfffffff8; shpnt->io_port &= 0xfffffff8;
atpdev->baseport = base_io; shpnt->n_io_port = pci_resource_len(pdev, 0);
atpdev->baseport = shpnt->io_port;
shpnt->unique_id = shpnt->io_port;
shpnt->irq = pdev->irq;
if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) { if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) {
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
atpdev->ioport[0] = base_io + 0x40; atpdev->ioport[0] = shpnt->io_port + 0x40;
atpdev->pciport[0] = base_io + 0x28; atpdev->pciport[0] = shpnt->io_port + 0x28;
host_id = atp_readb_base(atpdev, 0x39); host_id = atp_readb_base(atpdev, 0x39);
host_id >>= 0x04; host_id >>= 0x04;
printk(KERN_INFO " ACARD AEC-67160 PCI Ultra3 LVD Host Adapter:" printk(KERN_INFO " ACARD AEC-67160 PCI Ultra3 LVD Host Adapter:"
" IO:%x, IRQ:%d.\n", base_io, pdev->irq); " IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
atpdev->dev_id = ent->device; atpdev->dev_id = ent->device;
atpdev->host_id[0] = host_id; atpdev->host_id[0] = host_id;
...@@ -1358,9 +1361,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1358,9 +1361,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto unregister; goto unregister;
} }
err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp880i", shpnt); err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp880i", shpnt);
if (err) { if (err) {
printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", pdev->irq); printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", shpnt->irq);
goto free_tables; goto free_tables;
} }
...@@ -1381,20 +1384,16 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1381,20 +1384,16 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atp_writeb_base(atpdev, 0x38, 0xb0); atp_writeb_base(atpdev, 0x38, 0xb0);
shpnt->max_id = 16; shpnt->max_id = 16;
shpnt->this_id = host_id; shpnt->this_id = host_id;
shpnt->unique_id = base_io;
shpnt->io_port = base_io;
shpnt->n_io_port = 0x60; /* Number of bytes of I/O space used */
shpnt->irq = pdev->irq;
} else if (ent->device == ATP885_DEVID) { } else if (ent->device == ATP885_DEVID) {
printk(KERN_INFO " ACARD AEC-67162 PCI Ultra3 LVD Host Adapter: IO:%x, IRQ:%d.\n" printk(KERN_INFO " ACARD AEC-67162 PCI Ultra3 LVD Host Adapter: IO:%lx, IRQ:%d.\n"
, base_io, pdev->irq); , shpnt->io_port, shpnt->irq);
atpdev->pdev = pdev; atpdev->pdev = pdev;
atpdev->dev_id = ent->device; atpdev->dev_id = ent->device;
atpdev->ioport[0] = base_io + 0x80; atpdev->ioport[0] = shpnt->io_port + 0x80;
atpdev->ioport[1] = base_io + 0xc0; atpdev->ioport[1] = shpnt->io_port + 0xc0;
atpdev->pciport[0] = base_io + 0x40; atpdev->pciport[0] = shpnt->io_port + 0x40;
atpdev->pciport[1] = base_io + 0x50; atpdev->pciport[1] = shpnt->io_port + 0x50;
if (atp870u_init_tables(shpnt) < 0) { if (atp870u_init_tables(shpnt) < 0) {
err = -ENOMEM; err = -ENOMEM;
...@@ -1404,7 +1403,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1404,7 +1403,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
#ifdef ED_DBGP #ifdef ED_DBGP
printk("request_irq() shpnt %p hostdata %p\n", shpnt, atpdev); printk("request_irq() shpnt %p hostdata %p\n", shpnt, atpdev);
#endif #endif
err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt); err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt);
if (err) { if (err) {
printk(KERN_ERR "Unable to allocate IRQ for Acard controller.\n"); printk(KERN_ERR "Unable to allocate IRQ for Acard controller.\n");
goto free_tables; goto free_tables;
...@@ -1516,11 +1515,6 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1516,11 +1515,6 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1; shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1;
shpnt->max_channel = 1; shpnt->max_channel = 1;
shpnt->this_id = atpdev->host_id[0]; shpnt->this_id = atpdev->host_id[0];
shpnt->unique_id = base_io;
shpnt->io_port = base_io;
shpnt->n_io_port = 0xff; /* Number of bytes of I/O space used */
shpnt->irq = pdev->irq;
} else { } else {
bool wide_chip = bool wide_chip =
(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 && (ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
...@@ -1530,10 +1524,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1530,10 +1524,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
error = pci_read_config_byte(pdev, 0x49, &host_id); error = pci_read_config_byte(pdev, 0x49, &host_id);
printk(KERN_INFO " ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: " printk(KERN_INFO " ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
"IO:%x, IRQ:%d.\n", base_io, pdev->irq); "IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
atpdev->ioport[0] = base_io; atpdev->ioport[0] = shpnt->io_port;
atpdev->pciport[0] = base_io + 0x20; atpdev->pciport[0] = shpnt->io_port + 0x20;
atpdev->dev_id = ent->device; atpdev->dev_id = ent->device;
host_id &= 0x07; host_id &= 0x07;
atpdev->host_id[0] = host_id; atpdev->host_id[0] = host_id;
...@@ -1553,9 +1547,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1553,9 +1547,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto unregister; goto unregister;
} }
err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870i", shpnt); err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp870i", shpnt);
if (err) { if (err) {
printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", pdev->irq); printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", shpnt->irq);
goto free_tables; goto free_tables;
} }
...@@ -1579,13 +1573,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1579,13 +1573,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20); atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
shpnt->max_id = wide_chip ? 16 : 8; shpnt->max_id = wide_chip ? 16 : 8;
shpnt->this_id = host_id; shpnt->this_id = host_id;
shpnt->unique_id = base_io;
shpnt->io_port = base_io;
shpnt->n_io_port = 0x40; /* Number of bytes of I/O space used */
shpnt->irq = pdev->irq;
} }
spin_unlock_irqrestore(shpnt->host_lock, flags); spin_unlock_irqrestore(shpnt->host_lock, flags);
if (!request_region(base_io, shpnt->n_io_port, "atp870u")) { if (!request_region(shpnt->io_port, shpnt->n_io_port, "atp870u")) {
err = -EBUSY; err = -EBUSY;
goto request_io_fail; goto request_io_fail;
} }
...@@ -1600,10 +1591,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1600,10 +1591,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
scsi_add_fail: scsi_add_fail:
printk("atp870u_prob:scsi_add_fail\n"); printk("atp870u_prob:scsi_add_fail\n");
release_region(base_io, shpnt->n_io_port); release_region(shpnt->io_port, shpnt->n_io_port);
request_io_fail: request_io_fail:
printk("atp870u_prob:request_io_fail\n"); printk("atp870u_prob:request_io_fail\n");
free_irq(pdev->irq, shpnt); free_irq(shpnt->irq, shpnt);
free_tables: free_tables:
printk("atp870u_prob:free_table\n"); printk("atp870u_prob:free_table\n");
atp870u_free_tables(shpnt); atp870u_free_tables(shpnt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment