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

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
Loading
Loading
Loading
Loading
+28 −37
Original line number Diff line number Diff line
@@ -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);