Commit 493c5201 authored by Ondrej Zary's avatar Ondrej Zary Committed by Martin K. Petersen

atp870u: Untangle tmport #6

Untangle the tmport crap so it becomes obvious what ports are accessed.
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 3b30acf6
...@@ -2264,7 +2264,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2264,7 +2264,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, tmport, error,n; unsigned int base_io, error,n;
unsigned char host_id; unsigned char host_id;
struct Scsi_Host *shpnt = NULL; struct Scsi_Host *shpnt = NULL;
struct atp_unit *atpdev, *p; struct atp_unit *atpdev, *p;
...@@ -2322,12 +2322,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2322,12 +2322,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
atpdev->dev_id = ent->device; atpdev->dev_id = ent->device;
atpdev->host_id[0] = host_id; atpdev->host_id[0] = host_id;
tmport = base_io + 0x22; atpdev->scam_on = inb(base_io + 0x22);
atpdev->scam_on = inb(tmport); atpdev->global_map[0] = inb(base_io + 0x35);
tmport += 0x13; atpdev->ultra_map[0] = inw(base_io + 0x3c);
atpdev->global_map[0] = inb(tmport);
tmport += 0x07;
atpdev->ultra_map[0] = inw(tmport);
n = 0x3f09; n = 0x3f09;
next_fblk_880: next_fblk_880:
...@@ -2402,37 +2399,26 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2402,37 +2399,26 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
} }
spin_lock_irqsave(shpnt->host_lock, flags); spin_lock_irqsave(shpnt->host_lock, flags);
tmport = base_io + 0x38; k = inb(base_io + 0x38) & 0x80;
k = inb(tmport) & 0x80; outb(k, base_io + 0x38);
outb(k, tmport); outb(0x20, base_io + 0x3b);
tmport += 0x03;
outb(0x20, tmport);
mdelay(32); mdelay(32);
outb(0, tmport); outb(0, base_io + 0x3b);
mdelay(32); mdelay(32);
tmport = base_io + 0x5b; inb(base_io + 0x5b);
inb(tmport); inb(base_io + 0x57);
tmport -= 0x04; outb((host_id | 0x08), base_io + 0x40);
inb(tmport); outb(0, base_io + 0x58);
tmport = base_io + 0x40; while ((inb(base_io + 0x5f) & 0x80) == 0)
outb((host_id | 0x08), tmport);
tmport += 0x18;
outb(0, tmport);
tmport += 0x07;
while ((inb(tmport) & 0x80) == 0)
mdelay(1); mdelay(1);
tmport -= 0x08; inb(base_io + 0x57);
inb(tmport); outb(8, base_io + 0x41);
tmport = base_io + 0x41; outb(0x7f, base_io + 0x42);
outb(8, tmport++); outb(0x20, base_io + 0x51);
outb(0x7f, tmport);
tmport = base_io + 0x51;
outb(0x20, tmport);
tscam(shpnt); tscam(shpnt);
is880(p, base_io); is880(p, base_io);
tmport = base_io + 0x38; outb(0xb0, base_io + 0x38);
outb(0xb0, tmport);
shpnt->max_id = 16; shpnt->max_id = 16;
shpnt->this_id = host_id; shpnt->this_id = host_id;
shpnt->unique_id = base_io; shpnt->unique_id = base_io;
...@@ -2546,47 +2532,35 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2546,47 +2532,35 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
inb(base_io + 0x97); inb(base_io + 0x97);
inb(base_io + 0xdb); inb(base_io + 0xdb);
inb(base_io + 0xd7); inb(base_io + 0xd7);
tmport = base_io + 0x80;
k=p->host_id[0]; k=p->host_id[0];
if (k > 7) if (k > 7)
k = (k & 0x07) | 0x40; k = (k & 0x07) | 0x40;
k |= 0x08; k |= 0x08;
outb(k, tmport); outb(k, base_io + 0x80);
tmport += 0x18; outb(0, base_io + 0x98);
outb(0, tmport);
tmport += 0x07;
while ((inb(tmport) & 0x80) == 0) while ((inb(base_io + 0x9f) & 0x80) == 0)
cpu_relax(); cpu_relax();
tmport -= 0x08; inb(base_io + 0x97);
inb(tmport); outb(8, base_io + 0x81);
tmport = base_io + 0x81; outb(0x7f, base_io + 0x82);
outb(8, tmport++); outb(0x20, base_io + 0x91);
outb(0x7f, tmport);
tmport = base_io + 0x91;
outb(0x20, tmport);
tmport = base_io + 0xc0;
k=p->host_id[1]; k=p->host_id[1];
if (k > 7) if (k > 7)
k = (k & 0x07) | 0x40; k = (k & 0x07) | 0x40;
k |= 0x08; k |= 0x08;
outb(k, tmport); outb(k, base_io + 0xc0);
tmport += 0x18; outb(0, base_io + 0xd8);
outb(0, tmport);
tmport += 0x07;
while ((inb(tmport) & 0x80) == 0) while ((inb(base_io + 0xdf) & 0x80) == 0)
cpu_relax(); cpu_relax();
tmport -= 0x08; inb(base_io + 0xd7);
inb(tmport); outb(8, base_io + 0xc1);
tmport = base_io + 0xc1; outb(0x7f, base_io + 0xc2);
outb(8, tmport++); outb(0x20, base_io + 0xd1);
outb(0x7f, tmport);
tmport = base_io + 0xd1;
outb(0x20, tmport);
tscam_885(); tscam_885();
printk(KERN_INFO " Scanning Channel A SCSI Device ...\n"); printk(KERN_INFO " Scanning Channel A SCSI Device ...\n");
...@@ -2624,11 +2598,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2624,11 +2598,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
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;
tmport = base_io + 0x22; atpdev->scam_on = inb(base_io + 0x22);
atpdev->scam_on = inb(tmport); atpdev->global_map[0] = inb(base_io + 0x2d);
tmport += 0x0b; atpdev->ultra_map[0] = inw(base_io + 0x2e);
atpdev->global_map[0] = inb(tmport++);
atpdev->ultra_map[0] = inw(tmport);
if (atpdev->ultra_map[0] == 0) { if (atpdev->ultra_map[0] == 0) {
atpdev->scam_on = 0x00; atpdev->scam_on = 0x00;
...@@ -2656,39 +2628,29 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2656,39 +2628,29 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
spin_lock_irqsave(shpnt->host_lock, flags); spin_lock_irqsave(shpnt->host_lock, flags);
if (atpdev->chip_ver > 0x07) { /* check if atp876 chip then enable terminator */ if (atpdev->chip_ver > 0x07) { /* check if atp876 chip then enable terminator */
tmport = base_io + 0x3e; outb(0x00, base_io + 0x3e);
outb(0x00, tmport);
} }
tmport = base_io + 0x3a; k = (inb(base_io + 0x3a) & 0xf3) | 0x10;
k = (inb(tmport) & 0xf3) | 0x10; outb(k, base_io + 0x3a);
outb(k, tmport); outb((k & 0xdf), base_io + 0x3a);
outb((k & 0xdf), tmport);
mdelay(32); mdelay(32);
outb(k, tmport); outb(k, base_io + 0x3a);
mdelay(32); mdelay(32);
tmport = base_io; outb((host_id | 0x08), base_io + 0);
outb((host_id | 0x08), tmport); outb(0, base_io + 0x18);
tmport += 0x18; while ((inb(base_io + 0x1f) & 0x80) == 0)
outb(0, tmport);
tmport += 0x07;
while ((inb(tmport) & 0x80) == 0)
mdelay(1); mdelay(1);
tmport -= 0x08; inb(base_io + 0x17);
inb(tmport); outb(8, base_io + 1);
tmport = base_io + 1; outb(0x7f, base_io + 2);
outb(8, tmport++); outb(0x20, base_io + 0x11);
outb(0x7f, tmport);
tmport = base_io + 0x11;
outb(0x20, tmport);
tscam(shpnt); tscam(shpnt);
is870(p, base_io); is870(p, base_io);
tmport = base_io + 0x3a; outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
outb((inb(tmport) & 0xef), tmport); outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
tmport++;
outb((inb(tmport) | 0x20), tmport);
if (atpdev->chip_ver == 4) if (atpdev->chip_ver == 4)
shpnt->max_id = 16; shpnt->max_id = 16;
else else
......
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