All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

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)
{
unsigned char k, m, c;
unsigned long flags;
unsigned int base_io, error,n;
unsigned int error,n;
unsigned char host_id;
struct Scsi_Host *shpnt = NULL;
struct atp_unit *atpdev;
......@@ -1278,21 +1278,24 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atpdev->pdev = pdev;
pci_set_drvdata(pdev, atpdev);
base_io = pci_resource_start(pdev, 0);
base_io &= 0xfffffff8;
atpdev->baseport = base_io;
shpnt->io_port = pci_resource_start(pdev, 0);
shpnt->io_port &= 0xfffffff8;
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)) {
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
atpdev->ioport[0] = base_io + 0x40;
atpdev->pciport[0] = base_io + 0x28;
atpdev->ioport[0] = shpnt->io_port + 0x40;
atpdev->pciport[0] = shpnt->io_port + 0x28;
host_id = atp_readb_base(atpdev, 0x39);
host_id >>= 0x04;
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->host_id[0] = host_id;
......@@ -1358,9 +1361,9 @@ flash_ok_880:
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) {
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;
}
......@@ -1381,20 +1384,16 @@ flash_ok_880:
atp_writeb_base(atpdev, 0x38, 0xb0);
shpnt->max_id = 16;
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) {
printk(KERN_INFO " ACARD AEC-67162 PCI Ultra3 LVD Host Adapter: IO:%x, IRQ:%d.\n"
, base_io, pdev->irq);
printk(KERN_INFO " ACARD AEC-67162 PCI Ultra3 LVD Host Adapter: IO:%lx, IRQ:%d.\n"
, shpnt->io_port, shpnt->irq);
atpdev->pdev = pdev;
atpdev->dev_id = ent->device;
atpdev->ioport[0] = base_io + 0x80;
atpdev->ioport[1] = base_io + 0xc0;
atpdev->pciport[0] = base_io + 0x40;
atpdev->pciport[1] = base_io + 0x50;
atpdev->ioport[0] = shpnt->io_port + 0x80;
atpdev->ioport[1] = shpnt->io_port + 0xc0;
atpdev->pciport[0] = shpnt->io_port + 0x40;
atpdev->pciport[1] = shpnt->io_port + 0x50;
if (atp870u_init_tables(shpnt) < 0) {
err = -ENOMEM;
......@@ -1404,7 +1403,7 @@ flash_ok_880:
#ifdef ED_DBGP
printk("request_irq() shpnt %p hostdata %p\n", shpnt, atpdev);
#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) {
printk(KERN_ERR "Unable to allocate IRQ for Acard controller.\n");
goto free_tables;
......@@ -1516,11 +1515,6 @@ flash_ok_885:
shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1;
shpnt->max_channel = 1;
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 {
bool wide_chip =
(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
......@@ -1530,10 +1524,10 @@ flash_ok_885:
error = pci_read_config_byte(pdev, 0x49, &host_id);
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->pciport[0] = base_io + 0x20;
atpdev->ioport[0] = shpnt->io_port;
atpdev->pciport[0] = shpnt->io_port + 0x20;
atpdev->dev_id = ent->device;
host_id &= 0x07;
atpdev->host_id[0] = host_id;
......@@ -1553,9 +1547,9 @@ flash_ok_885:
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) {
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;
}
......@@ -1579,13 +1573,10 @@ flash_ok_885:
atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
shpnt->max_id = wide_chip ? 16 : 8;
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);
if (!request_region(base_io, shpnt->n_io_port, "atp870u")) {
if (!request_region(shpnt->io_port, shpnt->n_io_port, "atp870u")) {
err = -EBUSY;
goto request_io_fail;
}
......@@ -1600,10 +1591,10 @@ flash_ok_885:
scsi_add_fail:
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:
printk("atp870u_prob:request_io_fail\n");
free_irq(pdev->irq, shpnt);
free_irq(shpnt->irq, shpnt);
free_tables:
printk("atp870u_prob:free_table\n");
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