diff options
author | Ondrej Zary <linux@rainbow-software.org> | 2015-11-17 19:23:41 +0100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2015-11-25 22:08:29 -0500 |
commit | 1940ed62f9ca6d0b1f4c10afef3960f4f8a7d327 (patch) | |
tree | ca2b440172dff46eed22a775daf1eed4ddfe7c5d /drivers/scsi/atp870u.c | |
parent | 3b836464809aff2795c22ba2a97f3b148e70282e (diff) | |
download | linux-1940ed62f9ca6d0b1f4c10afef3960f4f8a7d327.tar.bz2 |
atp870u: Untangle tmport #3
Untangle the tmport crap so it becomes obvious what ports are accessed.
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Reviewed-by: Hannes Reinicke <hare@suse.de>
Acked-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/atp870u.c')
-rw-r--r-- | drivers/scsi/atp870u.c | 118 |
1 files changed, 49 insertions, 69 deletions
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c index 71123372e52b..a23f38717d90 100644 --- a/drivers/scsi/atp870u.c +++ b/drivers/scsi/atp870u.c @@ -933,38 +933,36 @@ oktosend: static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val) { - unsigned int tmport; unsigned short int i, k; unsigned char j; - tmport = dev->ioport[0] + 0x1c; - outw(*val, tmport); + outw(*val, dev->ioport[0] + 0x1c); FUN_D7: for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ - k = inw(tmport); + k = inw(dev->ioport[0] + 0x1c); j = (unsigned char) (k >> 8); if ((k & 0x8000) != 0) { /* DB7 all release? */ goto FUN_D7; } } *val |= 0x4000; /* assert DB6 */ - outw(*val, tmport); + outw(*val, dev->ioport[0] + 0x1c); *val &= 0xdfff; /* assert DB5 */ - outw(*val, tmport); + outw(*val, dev->ioport[0] + 0x1c); FUN_D5: for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ - if ((inw(tmport) & 0x2000) != 0) { /* DB5 all release? */ + if ((inw(dev->ioport[0] + 0x1c) & 0x2000) != 0) { /* DB5 all release? */ goto FUN_D5; } } *val |= 0x8000; /* no DB4-0, assert DB7 */ *val &= 0xe0ff; - outw(*val, tmport); + outw(*val, dev->ioport[0] + 0x1c); *val &= 0xbfff; /* release DB6 */ - outw(*val, tmport); + outw(*val, dev->ioport[0] + 0x1c); FUN_D6: for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ - if ((inw(tmport) & 0x4000) != 0) { /* DB6 all release? */ + if ((inw(dev->ioport[0] + 0x1c) & 0x4000) != 0) { /* DB6 all release? */ goto FUN_D6; } } @@ -975,7 +973,6 @@ FUN_D6: static void tscam(struct Scsi_Host *host) { - unsigned int tmport; unsigned char i, j, k; unsigned long n; unsigned short int m, assignid_map, val; @@ -992,11 +989,9 @@ static void tscam(struct Scsi_Host *host) } */ - tmport = dev->ioport[0] + 1; - outb(0x08, tmport++); - outb(0x7f, tmport); - tmport = dev->ioport[0] + 0x11; - outb(0x20, tmport); + outb(0x08, dev->ioport[0] + 1); + outb(0x7f, dev->ioport[0] + 2); + outb(0x20, dev->ioport[0] + 0x11); if ((dev->scam_on & 0x40) == 0) { return; @@ -1009,14 +1004,13 @@ static void tscam(struct Scsi_Host *host) j = 8; } assignid_map = m; - tmport = dev->ioport[0] + 0x02; - outb(0x02, tmport++); /* 2*2=4ms,3EH 2/32*3E=3.9ms */ - outb(0, tmport++); - outb(0, tmport++); - outb(0, tmport++); - outb(0, tmport++); - outb(0, tmport++); - outb(0, tmport++); + outb(0x02, dev->ioport[0] + 0x02); /* 2*2=4ms,3EH 2/32*3E=3.9ms */ + outb(0, dev->ioport[0] + 0x03); + outb(0, dev->ioport[0] + 0x04); + outb(0, dev->ioport[0] + 0x05); + outb(0, dev->ioport[0] + 0x06); + outb(0, dev->ioport[0] + 0x07); + outb(0, dev->ioport[0] + 0x08); for (i = 0; i < j; i++) { m = 1; @@ -1024,79 +1018,69 @@ static void tscam(struct Scsi_Host *host) if ((m & assignid_map) != 0) { continue; } - tmport = dev->ioport[0] + 0x0f; - outb(0, tmport++); - tmport += 0x02; - outb(0, tmport++); - outb(0, tmport++); - outb(0, tmport++); + outb(0, dev->ioport[0] + 0x0f); + outb(0, dev->ioport[0] + 0x12); + outb(0, dev->ioport[0] + 0x13); + outb(0, dev->ioport[0] + 0x14); if (i > 7) { k = (i & 0x07) | 0x40; } else { k = i; } - outb(k, tmport++); - tmport = dev->ioport[0] + 0x1b; + outb(k, dev->ioport[0] + 0x15); if (dev->chip_ver == 4) { - outb(0x01, tmport); + outb(0x01, dev->ioport[0] + 0x1b); } else { - outb(0x00, tmport); + outb(0x00, dev->ioport[0] + 0x1b); } wait_rdyok: - tmport = dev->ioport[0] + 0x18; - outb(0x09, tmport); - tmport += 0x07; + outb(0x09, dev->ioport[0] + 0x18); - while ((inb(tmport) & 0x80) == 0x00) + while ((inb(dev->ioport[0] + 0x1f) & 0x80) == 0x00) cpu_relax(); - tmport -= 0x08; - k = inb(tmport); + k = inb(dev->ioport[0] + 0x17); if (k != 0x16) { if ((k == 0x85) || (k == 0x42)) { continue; } - tmport = dev->ioport[0] + 0x10; - outb(0x41, tmport); + outb(0x41, dev->ioport[0] + 0x10); goto wait_rdyok; } assignid_map |= m; } - tmport = dev->ioport[0] + 0x02; - outb(0x7f, tmport); - tmport = dev->ioport[0] + 0x1b; - outb(0x02, tmport); + outb(0x7f, dev->ioport[0] + 0x02); + outb(0x02, dev->ioport[0] + 0x1b); outb(0, 0x80); val = 0x0080; /* bsy */ - tmport = dev->ioport[0] + 0x1c; - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); val |= 0x0040; /* sel */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); val |= 0x0004; /* msg */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); inb(0x80); /* 2 deskew delay(45ns*2=90ns) */ val &= 0x007f; /* no bsy */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); mdelay(128); val &= 0x00fb; /* after 1ms no msg */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); wait_nomsg: - if ((inb(tmport) & 0x04) != 0) { + if ((inb(dev->ioport[0] + 0x1c) & 0x04) != 0) { goto wait_nomsg; } outb(1, 0x80); udelay(100); for (n = 0; n < 0x30000; n++) { - if ((inb(tmport) & 0x80) != 0) { /* bsy ? */ + if ((inb(dev->ioport[0] + 0x1c) & 0x80) != 0) { /* bsy ? */ goto wait_io; } } goto TCM_SYNC; wait_io: for (n = 0; n < 0x30000; n++) { - if ((inb(tmport) & 0x81) == 0x0081) { + if ((inb(dev->ioport[0] + 0x1c) & 0x81) == 0x0081) { goto wait_io1; } } @@ -1104,10 +1088,10 @@ wait_io: wait_io1: inb(0x80); val |= 0x8003; /* io,cd,db7 */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); inb(0x80); val &= 0x00bf; /* no sel */ - outw(val, tmport); + outw(val, dev->ioport[0] + 0x1c); outb(2, 0x80); TCM_SYNC: /* @@ -1120,18 +1104,14 @@ TCM_SYNC: */ mdelay(2); udelay(48); - if ((inb(tmport) & 0x80) == 0x00) { /* bsy ? */ - outw(0, tmport--); - outb(0, tmport); - tmport = dev->ioport[0] + 0x15; - outb(0, tmport); - tmport += 0x03; - outb(0x09, tmport); - tmport += 0x07; - while ((inb(tmport) & 0x80) == 0) + if ((inb(dev->ioport[0] + 0x1c) & 0x80) == 0x00) { /* bsy ? */ + outw(0, dev->ioport[0] + 0x1c); + outb(0, dev->ioport[0] + 0x1b); + outb(0, dev->ioport[0] + 0x15); + outb(0x09, dev->ioport[0] + 0x18); + while ((inb(dev->ioport[0] + 0x1f) & 0x80) == 0) cpu_relax(); - tmport -= 0x08; - inb(tmport); + inb(dev->ioport[0] + 0x17); return; } val &= 0x00ff; /* synchronization */ @@ -1145,7 +1125,7 @@ TCM_SYNC: i = 8; j = 0; TCM_ID: - if ((inw(tmport) & 0x2000) == 0) { + if ((inw(dev->ioport[0] + 0x1c) & 0x2000) == 0) { goto TCM_ID; } outb(5, 0x80); |