All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/52] [resend] atp870u: Major rework
@ 2015-11-17 18:23 Ondrej Zary
  2015-11-17 18:23 ` [PATCH 01/52] atp870u: Remove workport Ondrej Zary
                   ` (52 more replies)
  0 siblings, 53 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

This patch series removes the first level of crap from atp870u - the worst
(in-tree) SCSI driver [1] and then cleans up the code a bit.

First the driver is converted to C from something that looks like a (bad)
assembler code: use of tmport for all I/O accesses and gotos all over the
code.
Then I/O access wrappers are introduced.
Finally, is870, is880 and is885 are unified and two of them removed.

After that, some cleanups are done. There's still a lot of work left to do.

Tested on AEC-6710D (ATP870IU-C).

[1] http://www.spinics.net/lists/linux-scsi/msg81142.html

 atp870u.c | 3707 +++++++++++++++++---------------------------------------------
 atp870u.h |    4
 2 files changed, 1064 insertions(+), 2647 deletions(-)

Reviewed-by: Hannes Reinecke <hare@suse.com>
Acked-by: Christoph Hellwig <hch@lst.de>


^ permalink raw reply	[flat|nested] 55+ messages in thread

* [PATCH 01/52] atp870u: Remove workport
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 02/52] atp870u: Remove tmport1 Ondrej Zary
                   ` (51 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Remove workport temporary variable to simplify the code.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   59 +++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 31 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 05301bc..3db9d0c 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -51,7 +51,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	unsigned char i, j, c, target_id, lun,cmdp;
 	unsigned char *prd;
 	struct scsi_cmnd *workreq;
-	unsigned int workport, tmport, tmport1;
+	unsigned int tmport, tmport1;
 	unsigned long adrcnt, k;
 #ifdef ED_DBGP
 	unsigned long l;
@@ -76,10 +76,9 @@ ch_sel:
 #endif	
 	dev->in_int[c] = 1;
 	cmdp = inb(dev->ioport[c] + 0x10);
-	workport = dev->ioport[c];
 	if (dev->working[c] != 0) {
 		if (dev->dev_id == ATP885_DEVID) {
-			tmport1 = workport + 0x16;
+			tmport1 = dev->ioport[c] + 0x16;
 			if ((inb(tmport1) & 0x80) == 0)
 				outb((inb(tmport1) | 0x80), tmport1);
 		}		
@@ -160,7 +159,7 @@ stop_dma:
 			 *      Flip wide
 			 */			
 			if (dev->wide_id[c] != 0) {
-				tmport = workport + 0x1b;
+				tmport = dev->ioport[c] + 0x1b;
 				outb(0x01, tmport);
 				while ((inb(tmport) & 0x01) != 0x01) {
 					outb(0x01, tmport);
@@ -276,9 +275,9 @@ stop_dma:
 			if (dev->dev_id == ATP885_DEVID) {
 				j = inb(dev->baseport + 0x29) & 0xfe;
 				outb(j, dev->baseport + 0x29);
-				tmport = workport + 0x16;
+				tmport = dev->ioport[c] + 0x16;
 			} else {
-				tmport = workport + 0x10;
+				tmport = dev->ioport[c] + 0x10;
 				outb(0x45, tmport);
 				tmport += 0x06;				
 			}
@@ -293,7 +292,7 @@ stop_dma:
 				target_id &= 0x07;
 			}
 			if (dev->dev_id == ATP885_DEVID) {
-				tmport = workport + 0x10;
+				tmport = dev->ioport[c] + 0x10;
 				outb(0x45, tmport);
 			}
 			workreq = dev->id[c][target_id].curr_req;
@@ -304,7 +303,7 @@ stop_dma:
 			printk("\n");
 #endif	
 			
-			tmport = workport + 0x0f;
+			tmport = dev->ioport[c] + 0x0f;
 			outb(lun, tmport);
 			tmport += 0x02;
 			outb(dev->id[c][target_id].devsp, tmport++);
@@ -338,21 +337,21 @@ stop_dma:
 				outb(i,tmpcip);		    		    		
 			} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    		    	   (dev->dev_id == ATP880_DEVID2) ) {
-				tmport = workport - 0x05;
+				tmport = dev->ioport[c] - 0x05;
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 					outb((unsigned char) ((inb(tmport) & 0x3f) | 0xc0), tmport);
 				} else {
 					outb((unsigned char) (inb(tmport) & 0x3f), tmport);
 				}
 			} else {				
-				tmport = workport + 0x3a;
+				tmport = dev->ioport[c] + 0x3a;
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 					outb((unsigned char) ((inb(tmport) & 0xf3) | 0x08), tmport);
 				} else {
 					outb((unsigned char) (inb(tmport) & 0xf3), tmport);
 				}														
 			}	
-			tmport = workport + 0x1b;
+			tmport = dev->ioport[c] + 0x1b;
 			j = 0;
 			id = 1;
 			id = id << target_id;
@@ -367,7 +366,7 @@ stop_dma:
 				outb(j,tmport);
 			}
 			if (dev->id[c][target_id].last_len == 0) {
-				tmport = workport + 0x18;
+				tmport = dev->ioport[c] + 0x18;
 				outb(0x08, tmport);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
@@ -414,7 +413,7 @@ stop_dma:
 				outb(0x00, tmpcip);
 				tmpcip -= 0x02;
 			}
-			tmport = workport + 0x18;
+			tmport = dev->ioport[c] + 0x18;
 			/*
 			 *	Check transfer direction
 			 */
@@ -488,7 +487,7 @@ go_42:
 			 *      Take it back wide
 			 */
 			if (dev->wide_id[c] != 0) {
-				tmport = workport + 0x1b;
+				tmport = dev->ioport[c] + 0x1b;
 				outb(0x01, tmport);
 				while ((inb(tmport) & 0x01) != 0x01) {
 					outb(0x01, tmport);
@@ -523,7 +522,7 @@ go_42:
 			outb(0x06, tmpcip);
 			outb(0x00, tmpcip);
 			tmpcip = tmpcip - 2;
-			tmport = workport + 0x10;
+			tmport = dev->ioport[c] + 0x10;
 			outb(0x41, tmport);
 			if (dev->dev_id == ATP885_DEVID) {
 				tmport += 2;
@@ -549,7 +548,7 @@ go_42:
 			outb(0x06, tmpcip);
 			outb(0x00, tmpcip);
 			tmpcip = tmpcip - 2;
-			tmport = workport + 0x10;
+			tmport = dev->ioport[c] + 0x10;
 			outb(0x41, tmport);
 			if (dev->dev_id == ATP885_DEVID) {		
 				tmport += 2;
@@ -584,7 +583,7 @@ go_42:
 		dev->in_int[c] = 0;
 		goto handled;
 	} else {
-//		tmport = workport + 0x17;
+//		tmport = dev->ioport[c] + 0x17;
 //		inb(tmport);
 //		dev->working[c] = 0;
 		dev->in_int[c] = 0;
@@ -713,7 +712,6 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	unsigned char *prd;
 	unsigned short int tmpcip, w;
 	unsigned long l, bttl = 0;
-	unsigned int workport;
 	unsigned long  sg_count;
 
 	if (dev->in_snd[c] != 0) {
@@ -759,12 +757,11 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	dev->in_snd[c] = 0;
 	return;
 cmd_subp:
-	workport = dev->ioport[c];
-	tmport = workport + 0x1f;
+	tmport = dev->ioport[c] + 0x1f;
 	if ((inb(tmport) & 0xb0) != 0) {
 		goto abortsnd;
 	}
-	tmport = workport + 0x1c;
+	tmport = dev->ioport[c] + 0x1c;
 	if (inb(tmport) == 0) {
 		goto oktosend;
 	}
@@ -800,7 +797,7 @@ oktosend:
 		l = 0;
 	}
 
-	tmport = workport + 0x1b;
+	tmport = dev->ioport[c] + 0x1b;
 	j = 0;
 	target_id = scmd_id(workreq);
 
@@ -823,7 +820,7 @@ oktosend:
 	 *	Write the command
 	 */
 
-	tmport = workport;
+	tmport = dev->ioport[c];
 	outb(workreq->cmd_len, tmport++);
 	outb(0x2c, tmport++);
 	if (dev->dev_id == ATP885_DEVID) {
@@ -834,7 +831,7 @@ oktosend:
 	for (i = 0; i < workreq->cmd_len; i++) {
 		outb(workreq->cmnd[i], tmport++);
 	}
-	tmport = workport + 0x0f;
+	tmport = dev->ioport[c] + 0x0f;
 	outb(workreq->device->lun, tmport);
 	tmport += 0x02;
 	/*
@@ -874,11 +871,11 @@ oktosend:
 	}
 	outb((unsigned char) (inb(tmport) | 0x80), tmport);
 	outb(0x80, tmport);
-	tmport = workport + 0x1c;
+	tmport = dev->ioport[c] + 0x1c;
 	dev->id[c][target_id].dirct = 0;
 	if (l == 0) {
 		if (inb(tmport) == 0) {
-			tmport = workport + 0x18;
+			tmport = dev->ioport[c] + 0x18;
 #ifdef ED_DBGP
 			printk("change SCSI_CMD_REG 0x08\n");	
 #endif				
@@ -947,7 +944,7 @@ oktosend:
 	} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    	   (dev->dev_id == ATP880_DEVID2)) {
 		tmpcip =tmpcip -2;	
-		tmport = workport - 0x05;
+		tmport = dev->ioport[c] - 0x05;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 			outb((unsigned char) ((inb(tmport) & 0x3f) | 0xc0), tmport);
 		} else {
@@ -955,19 +952,19 @@ oktosend:
 		}		
 	} else {		
 		tmpcip =tmpcip -2;
-		tmport = workport + 0x3a;
+		tmport = dev->ioport[c] + 0x3a;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 			outb((inb(tmport) & 0xf3) | 0x08, tmport);
 		} else {
 			outb(inb(tmport) & 0xf3, tmport);
 		}		
 	}	
-	tmport = workport + 0x1c;
+	tmport = dev->ioport[c] + 0x1c;
 
 	if(workreq->sc_data_direction == DMA_TO_DEVICE) {
 		dev->id[c][target_id].dirct = 0x20;
 		if (inb(tmport) == 0) {
-			tmport = workport + 0x18;
+			tmport = dev->ioport[c] + 0x18;
 			outb(0x08, tmport);
 			outb(0x01, tmpcip);
 #ifdef ED_DBGP		
@@ -980,7 +977,7 @@ oktosend:
 		return;
 	}
 	if (inb(tmport) == 0) {		
-		tmport = workport + 0x18;
+		tmport = dev->ioport[c] + 0x18;
 		outb(0x08, tmport);
 		outb(0x09, tmpcip);
 #ifdef ED_DBGP		
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 02/52] atp870u: Remove tmport1
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
  2015-11-17 18:23 ` [PATCH 01/52] atp870u: Remove workport Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 03/52] atp870u: Untangle tmport Ondrej Zary
                   ` (50 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Remove tmport1 temporary variable to simplify the code.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 3db9d0c..aac7d47 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -51,7 +51,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	unsigned char i, j, c, target_id, lun,cmdp;
 	unsigned char *prd;
 	struct scsi_cmnd *workreq;
-	unsigned int tmport, tmport1;
+	unsigned int tmport;
 	unsigned long adrcnt, k;
 #ifdef ED_DBGP
 	unsigned long l;
@@ -78,9 +78,8 @@ ch_sel:
 	cmdp = inb(dev->ioport[c] + 0x10);
 	if (dev->working[c] != 0) {
 		if (dev->dev_id == ATP885_DEVID) {
-			tmport1 = dev->ioport[c] + 0x16;
-			if ((inb(tmport1) & 0x80) == 0)
-				outb((inb(tmport1) | 0x80), tmport1);
+			if ((inb(dev->ioport[c] + 0x16) & 0x80) == 0)
+				outb((inb(dev->ioport[c] + 0x16) | 0x80), dev->ioport[c] + 0x16);
 		}		
 		tmpcip = dev->pciport[c];
 		if ((inb(tmpcip) & 0x08) != 0)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 03/52] atp870u: Untangle tmport
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
  2015-11-17 18:23 ` [PATCH 01/52] atp870u: Remove workport Ondrej Zary
  2015-11-17 18:23 ` [PATCH 02/52] atp870u: Remove tmport1 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 04/52] atp870u: Untangle tmport #2 Ondrej Zary
                   ` (49 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  186 ++++++++++++++++++------------------------------
 1 file changed, 71 insertions(+), 115 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index aac7d47..a25a300 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -51,7 +51,6 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	unsigned char i, j, c, target_id, lun,cmdp;
 	unsigned char *prd;
 	struct scsi_cmnd *workreq;
-	unsigned int tmport;
 	unsigned long adrcnt, k;
 #ifdef ED_DBGP
 	unsigned long l;
@@ -61,8 +60,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	struct atp_unit *dev = (struct atp_unit *)&host->hostdata;
 
 	for (c = 0; c < 2; c++) {
-		tmport = dev->ioport[c] + 0x1f;
-		j = inb(tmport);
+		j = inb(dev->ioport[c] + 0x1f);
 		if ((j & 0x80) != 0)
 		{			
 	   		goto ch_sel;
@@ -97,9 +95,8 @@ ch_sel:
 stop_dma:
 		tmpcip = dev->pciport[c];
 		outb(0x00, tmpcip);
-		tmport -= 0x08;
 		
-		i = inb(tmport);
+		i = inb(dev->ioport[c] + 0x17);
 		
 		if (dev->dev_id == ATP885_DEVID) {
 			tmpcip += 2;
@@ -107,9 +104,7 @@ stop_dma:
 			tmpcip -= 2;
 		}
 
-		tmport -= 0x02;
-		target_id = inb(tmport);
-		tmport += 0x02;
+		target_id = inb(dev->ioport[c] + 0x15);
 
 		/*
 		 *	Remap wide devices onto id numbers
@@ -137,11 +132,10 @@ stop_dma:
 			   dev->last_cmd[c] = 0xff;
 			}
 			if (dev->dev_id == ATP885_DEVID) {
-				tmport -= 0x05;
 				adrcnt = 0;
-				((unsigned char *) &adrcnt)[2] = inb(tmport++);
-				((unsigned char *) &adrcnt)[1] = inb(tmport++);
-				((unsigned char *) &adrcnt)[0] = inb(tmport);
+				((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
+				((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
+				((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
 				if (dev->id[c][target_id].last_len != adrcnt)
 				{
 			   		k = dev->id[c][target_id].last_len;
@@ -150,7 +144,7 @@ stop_dma:
 			   	dev->id[c][target_id].last_len = adrcnt;			   
 				}
 #ifdef ED_DBGP
-				printk("tmport = %x dev->id[c][target_id].last_len = %d dev->id[c][target_id].tran_len = %d\n",tmport,dev->id[c][target_id].last_len,dev->id[c][target_id].tran_len);
+				printk("dev->id[c][target_id].last_len = %d dev->id[c][target_id].tran_len = %d\n",dev->id[c][target_id].last_len,dev->id[c][target_id].tran_len);
 #endif		
 			}
 
@@ -158,10 +152,9 @@ stop_dma:
 			 *      Flip wide
 			 */			
 			if (dev->wide_id[c] != 0) {
-				tmport = dev->ioport[c] + 0x1b;
-				outb(0x01, tmport);
-				while ((inb(tmport) & 0x01) != 0x01) {
-					outb(0x01, tmport);
+				outb(0x01, dev->ioport[c] + 0x1b);
+				while ((inb(dev->ioport[c] + 0x1b) & 0x01) != 0x01) {
+					outb(0x01, dev->ioport[c] + 0x1b);
 				}
 			}		
 			/*
@@ -196,19 +189,16 @@ stop_dma:
 			if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 			   dev->last_cmd[c] = 0xff;
 			}
-			tmport -= 0x05;
 			adrcnt = 0;
-			((unsigned char *) &adrcnt)[2] = inb(tmport++);
-			((unsigned char *) &adrcnt)[1] = inb(tmport++);
-			((unsigned char *) &adrcnt)[0] = inb(tmport);
+			((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
+			((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
+			((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
 			k = dev->id[c][target_id].last_len;
 			k -= adrcnt;
 			dev->id[c][target_id].tran_len = k;
 			dev->id[c][target_id].last_len = adrcnt;
-			tmport -= 0x04;
-			outb(0x41, tmport);
-			tmport += 0x08;
-			outb(0x08, tmport);
+			outb(0x41, dev->ioport[c] + 0x10);
+			outb(0x08, dev->ioport[c] + 0x18);
 			dev->in_int[c] = 0;
 			goto handled;
 		}
@@ -227,10 +217,8 @@ stop_dma:
 			printk(KERN_DEBUG "Device reselect\n");
 #endif			
 			lun = 0;
-			tmport -= 0x07;
 			if (cmdp == 0x44 || i==0x80) {
-				tmport += 0x0d;
-				lun = inb(tmport) & 0x07;
+				lun = inb(dev->ioport[c] + 0x1d) & 0x07;
 			} else {
 				if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 				   dev->last_cmd[c] = 0xff;
@@ -239,31 +227,27 @@ stop_dma:
 #ifdef ED_DBGP
 					printk("cmdp = 0x41\n");
 #endif						
-					tmport += 0x02;
 					adrcnt = 0;
-					((unsigned char *) &adrcnt)[2] = inb(tmport++);
-					((unsigned char *) &adrcnt)[1] = inb(tmport++);
-					((unsigned char *) &adrcnt)[0] = inb(tmport);
+					((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
+					((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
+					((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
 					k = dev->id[c][target_id].last_len;
 					k -= adrcnt;
 					dev->id[c][target_id].tran_len = k;
 					dev->id[c][target_id].last_len = adrcnt;
-					tmport += 0x04;
-					outb(0x08, tmport);
+					outb(0x08, dev->ioport[c] + 0x18);
 					dev->in_int[c] = 0;
 					goto handled;
 				} else {
 #ifdef ED_DBGP
 					printk("cmdp != 0x41\n");
 #endif						
-					outb(0x46, tmport);
+					outb(0x46, dev->ioport[c] + 0x10);
 					dev->id[c][target_id].dirct = 0x00;
-					tmport += 0x02;
-					outb(0x00, tmport++);
-					outb(0x00, tmport++);
-					outb(0x00, tmport++);
-					tmport += 0x03;
-					outb(0x08, tmport);
+					outb(0x00, dev->ioport[c] + 0x12);
+					outb(0x00, dev->ioport[c] + 0x13);
+					outb(0x00, dev->ioport[c] + 0x14);
+					outb(0x08, dev->ioport[c] + 0x18);
 					dev->in_int[c] = 0;
 					goto handled;
 				}
@@ -274,14 +258,10 @@ stop_dma:
 			if (dev->dev_id == ATP885_DEVID) {
 				j = inb(dev->baseport + 0x29) & 0xfe;
 				outb(j, dev->baseport + 0x29);
-				tmport = dev->ioport[c] + 0x16;
-			} else {
-				tmport = dev->ioport[c] + 0x10;
-				outb(0x45, tmport);
-				tmport += 0x06;				
-			}
-			
-			target_id = inb(tmport);
+			} else
+				outb(0x45, dev->ioport[c] + 0x10);
+
+			target_id = inb(dev->ioport[c] + 0x16);
 			/*
 			 *	Remap wide identifiers
 			 */
@@ -290,10 +270,8 @@ stop_dma:
 			} else {
 				target_id &= 0x07;
 			}
-			if (dev->dev_id == ATP885_DEVID) {
-				tmport = dev->ioport[c] + 0x10;
-				outb(0x45, tmport);
-			}
+			if (dev->dev_id == ATP885_DEVID)
+				outb(0x45, dev->ioport[c] + 0x10);
 			workreq = dev->id[c][target_id].curr_req;
 #ifdef ED_DBGP			
 			scmd_printk(KERN_DEBUG, workreq, "CDB");
@@ -302,18 +280,16 @@ stop_dma:
 			printk("\n");
 #endif	
 			
-			tmport = dev->ioport[c] + 0x0f;
-			outb(lun, tmport);
-			tmport += 0x02;
-			outb(dev->id[c][target_id].devsp, tmport++);
+			outb(lun, dev->ioport[c] + 0x0f);
+			outb(dev->id[c][target_id].devsp, dev->ioport[c] + 0x11);
 			adrcnt = dev->id[c][target_id].tran_len;
 			k = dev->id[c][target_id].last_len;
 
-			outb(((unsigned char *) &k)[2], tmport++);
-			outb(((unsigned char *) &k)[1], tmport++);
-			outb(((unsigned char *) &k)[0], tmport++);
+			outb(((unsigned char *) &k)[2], dev->ioport[c] + 0x12);
+			outb(((unsigned char *) &k)[1], dev->ioport[c] + 0x13);
+			outb(((unsigned char *) &k)[0], dev->ioport[c] + 0x14);
 #ifdef ED_DBGP			
-			printk("k %x, k[0] 0x%x k[1] 0x%x k[2] 0x%x\n", k, inb(tmport-1), inb(tmport-2), inb(tmport-3));
+			printk("k %x, k[0] 0x%x k[1] 0x%x k[2] 0x%x\n", k, inb(dev->ioport[c] + 0x14), inb(dev->ioport[c] + 0x13), inb(dev->ioport[c] + 0x12));
 #endif			
 			/* Remap wide */
 			j = target_id;
@@ -322,8 +298,8 @@ stop_dma:
 			}
 			/* Add direction */
 			j |= dev->id[c][target_id].dirct;
-			outb(j, tmport++);
-			outb(0x80,tmport);
+			outb(j, dev->ioport[c] + 0x15);
+			outb(0x80, dev->ioport[c] + 0x16);
 			
 			/* enable 32 bit fifo transfer */	
 			if (dev->dev_id == ATP885_DEVID) {
@@ -336,21 +312,18 @@ stop_dma:
 				outb(i,tmpcip);		    		    		
 			} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    		    	   (dev->dev_id == ATP880_DEVID2) ) {
-				tmport = dev->ioport[c] - 0x05;
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-					outb((unsigned char) ((inb(tmport) & 0x3f) | 0xc0), tmport);
+					outb((unsigned char) ((inb(dev->ioport[c] - 0x05) & 0x3f) | 0xc0), dev->ioport[c] - 0x05);///minus 0x05???
 				} else {
-					outb((unsigned char) (inb(tmport) & 0x3f), tmport);
+					outb((unsigned char) (inb(dev->ioport[c] - 0x05) & 0x3f), dev->ioport[c] - 0x05);///minus 0x05???
 				}
 			} else {				
-				tmport = dev->ioport[c] + 0x3a;
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-					outb((unsigned char) ((inb(tmport) & 0xf3) | 0x08), tmport);
+					outb((unsigned char) ((inb(dev->ioport[c] + 0x3a) & 0xf3) | 0x08), dev->ioport[c] + 0x3a);
 				} else {
-					outb((unsigned char) (inb(tmport) & 0xf3), tmport);
+					outb((unsigned char) (inb(dev->ioport[c] + 0x3a) & 0xf3), dev->ioport[c] + 0x3a);
 				}														
 			}	
-			tmport = dev->ioport[c] + 0x1b;
 			j = 0;
 			id = 1;
 			id = id << target_id;
@@ -360,13 +333,12 @@ stop_dma:
 			if ((id & dev->wide_id[c]) != 0) {
 				j |= 0x01;
 			}
-			outb(j, tmport);
-			while ((inb(tmport) & 0x01) != j) {
-				outb(j,tmport);
+			outb(j, dev->ioport[c] + 0x1b);
+			while ((inb(dev->ioport[c] + 0x1b) & 0x01) != j) {
+				outb(j,dev->ioport[c] + 0x1b);
 			}
 			if (dev->id[c][target_id].last_len == 0) {
-				tmport = dev->ioport[c] + 0x18;
-				outb(0x08, tmport);
+				outb(0x08, dev->ioport[c] + 0x18);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
 				printk("dev->id[c][target_id].last_len = 0\n");
@@ -412,12 +384,11 @@ stop_dma:
 				outb(0x00, tmpcip);
 				tmpcip -= 0x02;
 			}
-			tmport = dev->ioport[c] + 0x18;
 			/*
 			 *	Check transfer direction
 			 */
 			if (dev->id[c][target_id].dirct != 0) {
-				outb(0x08, tmport);
+				outb(0x08, dev->ioport[c] + 0x18);
 				outb(0x01, tmpcip);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
@@ -425,7 +396,7 @@ stop_dma:
 #endif				
 				goto handled;
 			}
-			outb(0x08, tmport);
+			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x09, tmpcip);
 			dev->in_int[c] = 0;
 #ifdef ED_DBGP
@@ -454,8 +425,7 @@ stop_dma:
 			   dev->last_cmd[c] = 0xff;
 			}
 			errstus = 0;
-			tmport -= 0x08;
-			errstus = inb(tmport);
+			errstus = inb(dev->ioport[c] + 0x0f);
 			if (((dev->r1f[c][target_id] & 0x10) != 0)&&(dev->dev_id==ATP885_DEVID)) {
 			   printk(KERN_WARNING "AEC67162 CRC ERROR !\n");
 			   errstus = 0x02;
@@ -486,10 +456,9 @@ go_42:
 			 *      Take it back wide
 			 */
 			if (dev->wide_id[c] != 0) {
-				tmport = dev->ioport[c] + 0x1b;
-				outb(0x01, tmport);
-				while ((inb(tmport) & 0x01) != 0x01) {
-					outb(0x01, tmport);
+				outb(0x01, dev->ioport[c] + 0x1b);
+				while ((inb(dev->ioport[c] + 0x1b) & 0x01) != 0x01) {
+					outb(0x01, dev->ioport[c] + 0x1b);
 				}       
 			} 
 			/*
@@ -521,21 +490,17 @@ go_42:
 			outb(0x06, tmpcip);
 			outb(0x00, tmpcip);
 			tmpcip = tmpcip - 2;
-			tmport = dev->ioport[c] + 0x10;
-			outb(0x41, tmport);
+			outb(0x41, dev->ioport[c] + 0x10);
 			if (dev->dev_id == ATP885_DEVID) {
-				tmport += 2;
 				k = dev->id[c][target_id].last_len;
-				outb((unsigned char) (((unsigned char *) (&k))[2]), tmport++);
-				outb((unsigned char) (((unsigned char *) (&k))[1]), tmport++);
-				outb((unsigned char) (((unsigned char *) (&k))[0]), tmport);
+				outb((unsigned char) (((unsigned char *) (&k))[2]), dev->ioport[c] + 0x12);
+				outb((unsigned char) (((unsigned char *) (&k))[1]), dev->ioport[c] + 0x13);
+				outb((unsigned char) (((unsigned char *) (&k))[0]), dev->ioport[c] + 0x14);
 				dev->id[c][target_id].dirct = 0x00;
-				tmport += 0x04;
 			} else {
 				dev->id[c][target_id].dirct = 0x00;
-				tmport += 0x08;				
 			}
-			outb(0x08, tmport);
+			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x09, tmpcip);
 			dev->in_int[c] = 0;
 			goto handled;
@@ -547,43 +512,34 @@ go_42:
 			outb(0x06, tmpcip);
 			outb(0x00, tmpcip);
 			tmpcip = tmpcip - 2;
-			tmport = dev->ioport[c] + 0x10;
-			outb(0x41, tmport);
+			outb(0x41, dev->ioport[c] + 0x10);
 			if (dev->dev_id == ATP885_DEVID) {		
-				tmport += 2;
 				k = dev->id[c][target_id].last_len;
-				outb((unsigned char) (((unsigned char *) (&k))[2]), tmport++);
-				outb((unsigned char) (((unsigned char *) (&k))[1]), tmport++);
-				outb((unsigned char) (((unsigned char *) (&k))[0]), tmport++);
-			} else {
-				tmport += 5;
+				outb((unsigned char) (((unsigned char *) (&k))[2]), dev->ioport[c] + 0x12);
+				outb((unsigned char) (((unsigned char *) (&k))[1]), dev->ioport[c] + 0x13);
+				outb((unsigned char) (((unsigned char *) (&k))[0]), dev->ioport[c] + 0x14);
 			}
-			outb((unsigned char) (inb(tmport) | 0x20), tmport);
+			outb((unsigned char) (inb(dev->ioport[c] + 0x15) | 0x20), dev->ioport[c] + 0x15);
 			dev->id[c][target_id].dirct = 0x20;
-			tmport += 0x03;
-			outb(0x08, tmport);
+			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x01, tmpcip);
 			dev->in_int[c] = 0;
 			goto handled;
 		}
-		tmport -= 0x07;
 		if (i == 0x0a) {
-			outb(0x30, tmport);
+			outb(0x30, dev->ioport[c] + 0x10);
 		} else {
-			outb(0x46, tmport);
+			outb(0x46, dev->ioport[c] + 0x10);
 		}
 		dev->id[c][target_id].dirct = 0x00;
-		tmport += 0x02;
-		outb(0x00, tmport++);
-		outb(0x00, tmport++);
-		outb(0x00, tmport++);
-		tmport += 0x03;
-		outb(0x08, tmport);
+		outb(0x00, dev->ioport[c] + 0x12);
+		outb(0x00, dev->ioport[c] + 0x13);
+		outb(0x00, dev->ioport[c] + 0x14);
+		outb(0x08, dev->ioport[c] + 0x18);
 		dev->in_int[c] = 0;
 		goto handled;
 	} else {
-//		tmport = dev->ioport[c] + 0x17;
-//		inb(tmport);
+//		inb(dev->ioport[c] + 0x17);
 //		dev->working[c] = 0;
 		dev->in_int[c] = 0;
 		goto handled;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 04/52] atp870u: Untangle tmport #2
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (2 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 03/52] atp870u: Untangle tmport Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 05/52] atp870u: Untangle tmport #3 Ondrej Zary
                   ` (48 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   79 ++++++++++++++++++++----------------------------
 1 file changed, 32 insertions(+), 47 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index a25a300..7112337 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -562,7 +562,7 @@ static int atp870u_queuecommand_lck(struct scsi_cmnd *req_p,
 			 void (*done) (struct scsi_cmnd *))
 {
 	unsigned char c;
-	unsigned int tmport,m;	
+	unsigned int m;
 	struct atp_unit *dev;
 	struct Scsi_Host *host;
 
@@ -631,11 +631,10 @@ static int atp870u_queuecommand_lck(struct scsi_cmnd *req_p,
 		return 0;
 	}
 	dev->quereq[c][dev->quend[c]] = req_p;
-	tmport = dev->ioport[c] + 0x1c;
 #ifdef ED_DBGP	
-	printk("dev->ioport[c] = %x inb(tmport) = %x dev->in_int[%d] = %d dev->in_snd[%d] = %d\n",dev->ioport[c],inb(tmport),c,dev->in_int[c],c,dev->in_snd[c]);
+	printk("dev->ioport[c] = %x inb(dev->ioport[c] + 0x1c) = %x dev->in_int[%d] = %d dev->in_snd[%d] = %d\n",dev->ioport[c],inb(dev->ioport[c] + 0x1c),c,dev->in_int[c],c,dev->in_snd[c]);
 #endif
-	if ((inb(tmport) == 0) && (dev->in_int[c] == 0) && (dev->in_snd[c] == 0)) {
+	if ((inb(dev->ioport[c] + 0x1c) == 0) && (dev->in_int[c] == 0) && (dev->in_snd[c] == 0)) {
 #ifdef ED_DBGP
 		printk("Call sent_s870(atp870u_queuecommand)\n");
 #endif		
@@ -660,7 +659,6 @@ static DEF_SCSI_QCMD(atp870u_queuecommand)
  */
 static void send_s870(struct atp_unit *dev,unsigned char c)
 {
-	unsigned int tmport;
 	struct scsi_cmnd *workreq;
 	unsigned int i;//,k;
 	unsigned char  j, target_id;
@@ -712,12 +710,10 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	dev->in_snd[c] = 0;
 	return;
 cmd_subp:
-	tmport = dev->ioport[c] + 0x1f;
-	if ((inb(tmport) & 0xb0) != 0) {
+	if ((inb(dev->ioport[c] + 0x1f) & 0xb0) != 0) {
 		goto abortsnd;
 	}
-	tmport = dev->ioport[c] + 0x1c;
-	if (inb(tmport) == 0) {
+	if (inb(dev->ioport[c] + 0x1c) == 0) {
 		goto oktosend;
 	}
 abortsnd:
@@ -752,7 +748,6 @@ oktosend:
 		l = 0;
 	}
 
-	tmport = dev->ioport[c] + 0x1b;
 	j = 0;
 	target_id = scmd_id(workreq);
 
@@ -764,9 +759,9 @@ oktosend:
 	if ((w & dev->wide_id[c]) != 0) {
 		j |= 0x01;
 	}
-	outb(j, tmport);
-	while ((inb(tmport) & 0x01) != j) {
-		outb(j,tmport);
+	outb(j, dev->ioport[c] + 0x1b);
+	while ((inb(dev->ioport[c] + 0x1b) & 0x01) != j) {
+		outb(j,dev->ioport[c] + 0x1b);
 #ifdef ED_DBGP
 		printk("send_s870 while loop 1\n");
 #endif
@@ -775,24 +770,21 @@ oktosend:
 	 *	Write the command
 	 */
 
-	tmport = dev->ioport[c];
-	outb(workreq->cmd_len, tmport++);
-	outb(0x2c, tmport++);
+	outb(workreq->cmd_len, dev->ioport[c] + 0x00);
+	outb(0x2c, dev->ioport[c] + 0x01);
 	if (dev->dev_id == ATP885_DEVID) {
-		outb(0x7f, tmport++);
+		outb(0x7f, dev->ioport[c] + 0x02);
 	} else {
-		outb(0xcf, tmport++); 	
+		outb(0xcf, dev->ioport[c] + 0x02);
 	}	
 	for (i = 0; i < workreq->cmd_len; i++) {
-		outb(workreq->cmnd[i], tmport++);
+		outb(workreq->cmnd[i], dev->ioport[c] + 0x03 + i);
 	}
-	tmport = dev->ioport[c] + 0x0f;
-	outb(workreq->device->lun, tmport);
-	tmport += 0x02;
+	outb(workreq->device->lun, dev->ioport[c] + 0x0f);
 	/*
 	 *	Write the target
 	 */
-	outb(dev->id[c][target_id].devsp, tmport++);	 
+	outb(dev->id[c][target_id].devsp, dev->ioport[c] + 0x11);
 #ifdef ED_DBGP	
 	printk("dev->id[%d][%d].devsp = %2x\n",c,target_id,dev->id[c][target_id].devsp);
 #endif
@@ -801,9 +793,9 @@ oktosend:
 	/*
 	 *	Write transfer size
 	 */
-	outb((unsigned char) (((unsigned char *) (&l))[2]), tmport++);
-	outb((unsigned char) (((unsigned char *) (&l))[1]), tmport++);
-	outb((unsigned char) (((unsigned char *) (&l))[0]), tmport++);
+	outb((unsigned char) (((unsigned char *) (&l))[2]), dev->ioport[c] + 0x12);
+	outb((unsigned char) (((unsigned char *) (&l))[1]), dev->ioport[c] + 0x13);
+	outb((unsigned char) (((unsigned char *) (&l))[0]), dev->ioport[c] + 0x14);
 	j = target_id;	
 	dev->id[c][j].last_len = l;
 	dev->id[c][j].tran_len = 0;
@@ -820,21 +812,19 @@ oktosend:
 	 *	Check transfer direction
 	 */
 	if (workreq->sc_data_direction == DMA_TO_DEVICE) {
-		outb((unsigned char) (j | 0x20), tmport++);
+		outb((unsigned char) (j | 0x20), dev->ioport[c] + 0x15);
 	} else {
-		outb(j, tmport++);
+		outb(j, dev->ioport[c] + 0x15);
 	}
-	outb((unsigned char) (inb(tmport) | 0x80), tmport);
-	outb(0x80, tmport);
-	tmport = dev->ioport[c] + 0x1c;
+	outb((unsigned char) (inb(dev->ioport[c] + 0x16) | 0x80), dev->ioport[c] + 0x16);
+	outb(0x80, dev->ioport[c] + 0x16);
 	dev->id[c][target_id].dirct = 0;
 	if (l == 0) {
-		if (inb(tmport) == 0) {
-			tmport = dev->ioport[c] + 0x18;
+		if (inb(dev->ioport[c] + 0x1c) == 0) {
 #ifdef ED_DBGP
 			printk("change SCSI_CMD_REG 0x08\n");	
 #endif				
-			outb(0x08, tmport);
+			outb(0x08, dev->ioport[c] + 0x18);
 		} else {
 			dev->last_cmd[c] |= 0x40;
 		}
@@ -899,28 +889,24 @@ oktosend:
 	} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    	   (dev->dev_id == ATP880_DEVID2)) {
 		tmpcip =tmpcip -2;	
-		tmport = dev->ioport[c] - 0x05;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-			outb((unsigned char) ((inb(tmport) & 0x3f) | 0xc0), tmport);
+			outb((unsigned char) ((inb(dev->ioport[c] - 0x05) & 0x3f) | 0xc0), dev->ioport[c] - 0x05);
 		} else {
-			outb((unsigned char) (inb(tmport) & 0x3f), tmport);
+			outb((unsigned char) (inb(dev->ioport[c] - 0x05) & 0x3f), dev->ioport[c] - 0x05);
 		}		
 	} else {		
 		tmpcip =tmpcip -2;
-		tmport = dev->ioport[c] + 0x3a;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-			outb((inb(tmport) & 0xf3) | 0x08, tmport);
+			outb((inb(dev->ioport[c] + 0x3a) & 0xf3) | 0x08, dev->ioport[c] + 0x3a);
 		} else {
-			outb(inb(tmport) & 0xf3, tmport);
+			outb(inb(dev->ioport[c] + 0x3a) & 0xf3, dev->ioport[c] + 0x3a);
 		}		
 	}	
-	tmport = dev->ioport[c] + 0x1c;
 
 	if(workreq->sc_data_direction == DMA_TO_DEVICE) {
 		dev->id[c][target_id].dirct = 0x20;
-		if (inb(tmport) == 0) {
-			tmport = dev->ioport[c] + 0x18;
-			outb(0x08, tmport);
+		if (inb(dev->ioport[c] + 0x1c) == 0) {
+			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x01, tmpcip);
 #ifdef ED_DBGP		
 		printk( "start DMA(to target)\n");
@@ -931,9 +917,8 @@ oktosend:
 		dev->in_snd[c] = 0;
 		return;
 	}
-	if (inb(tmport) == 0) {		
-		tmport = dev->ioport[c] + 0x18;
-		outb(0x08, tmport);
+	if (inb(dev->ioport[c] + 0x1c) == 0) {
+		outb(0x08, dev->ioport[c] + 0x18);
 		outb(0x09, tmpcip);
 #ifdef ED_DBGP		
 		printk( "start DMA(to host)\n");
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 05/52] atp870u: Untangle tmport #3
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (3 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 04/52] atp870u: Untangle tmport #2 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 06/52] atp870u: Untangle tmport #4 Ondrej Zary
                   ` (47 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  118 ++++++++++++++++++++----------------------------
 1 file changed, 49 insertions(+), 69 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 7112337..a23f387 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);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 06/52] atp870u: Untangle tmport #4
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (4 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 05/52] atp870u: Untangle tmport #3 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 07/52] atp870u: Untangle tmport #5 Ondrej Zary
                   ` (46 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  370 ++++++++++++++++++------------------------------
 1 file changed, 138 insertions(+), 232 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index a23f387..3e3a68b 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1207,7 +1207,6 @@ G2Q_QUIN:		/* k=binID#,       */
 
 static void is870(struct atp_unit *dev, unsigned int wkport)
 {
-	unsigned int tmport;
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
 	static unsigned char mbuf[512];
@@ -1218,8 +1217,7 @@ static void is870(struct atp_unit *dev, unsigned int wkport)
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	
-	tmport = wkport + 0x3a;
-	outb((unsigned char) (inb(tmport) | 0x10), tmport);
+	outb((unsigned char) (inb(wkport + 0x3a) | 0x10), wkport + 0x3a);
 
 	for (i = 0; i < 16; i++) {
 		if ((dev->chip_ver != 4) && (i > 7)) {
@@ -1234,135 +1232,105 @@ static void is870(struct atp_unit *dev, unsigned int wkport)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[0]);
 			continue;
 		}
-		tmport = wkport + 0x1b;
 		if (dev->chip_ver == 4) {
-			outb(0x01, tmport);
+			outb(0x01, wkport + 0x1b);
 		} else {
-			outb(0x00, tmport);
-		}
-		tmport = wkport + 1;
-		outb(0x08, tmport++);
-		outb(0x7f, tmport++);
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
+			outb(0x00, wkport + 0x1b);
+		}
+		outb(0x08, wkport + 1);
+		outb(0x7f, wkport + 2);
+		outb(satn[0], wkport + 3);
+		outb(satn[1], wkport + 4);
+		outb(satn[2], wkport + 5);
+		outb(satn[3], wkport + 6);
+		outb(satn[4], wkport + 7);
+		outb(satn[5], wkport + 8);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[0][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, tmport);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
+		outb(j, wkport + 0x15);
+		outb(satn[8], wkport + 0x18);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 
 		dev->active_id[0] |= m;
 
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
-		tmport = wkport + 0x04;
-		outb(0x00, tmport);
+		outb(0x30, wkport + 0x10);
+		outb(0x00, wkport + 0x04);
 
 phase_cmd:
-		tmport = wkport + 0x18;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
-			tmport = wkport + 0x10;
-			outb(0x41, tmport);
+			outb(0x41, wkport + 0x10);
 			goto phase_cmd;
 		}
 sel_ok:
-		tmport = wkport + 3;
-		outb(inqd[0], tmport++);
-		outb(inqd[1], tmport++);
-		outb(inqd[2], tmport++);
-		outb(inqd[3], tmport++);
-		outb(inqd[4], tmport++);
-		outb(inqd[5], tmport);
-		tmport += 0x07;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(inqd[6], tmport++);
-		outb(inqd[7], tmport++);
-		tmport += 0x03;
-		outb(inqd[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(inqd[0], wkport + 3);
+		outb(inqd[1], wkport + 4);
+		outb(inqd[2], wkport + 5);
+		outb(inqd[3], wkport + 6);
+		outb(inqd[4], wkport + 7);
+		outb(inqd[5], wkport + 8);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[0][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(inqd[6], wkport + 0x13);
+		outb(inqd[7], wkport + 0x14);
+		outb(inqd[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 			
-		tmport = wkport + 0x1b;
 		if (dev->chip_ver == 4)
-			outb(0x00, tmport);
+			outb(0x00, wkport + 0x1b);
 
-		tmport = wkport + 0x18;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x08, wkport + 0x18);
 		j = 0;
 rd_inq_data:
-		k = inb(tmport);
+		k = inb(wkport + 0x1f);
 		if ((k & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[j++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[j++] = inb(wkport + 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		tmport = wkport + 0x10;
-		outb(0x46, tmport);
-		tmport += 0x02;
-		outb(0, tmport++);
-		outb(0, tmport++);
-		outb(0, tmport++);
-		tmport += 0x03;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x46, wkport + 0x10);
+		outb(0, wkport + 0x12);
+		outb(0, wkport + 0x13);
+		outb(0, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x16) {
+		if (inb(wkport + 0x17) != 0x16) {
 			goto sel_ok;
 		}
 inq_ok:
@@ -1380,57 +1348,43 @@ inq_ok:
 		if ((dev->global_map[0] & 0x20) == 0) {
 			goto not_wide;
 		}
-		tmport = wkport + 0x1b;
-		outb(0x01, tmport);
-		tmport = wkport + 3;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x01, wkport + 0x1b);
+		outb(satn[0], wkport + 3);
+		outb(satn[1], wkport + 4);
+		outb(satn[2], wkport + 5);
+		outb(satn[3], wkport + 6);
+		outb(satn[4], wkport + 7);
+		outb(satn[5], wkport + 8);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[0][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
+		outb(satn[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 			
 try_wide:
 		j = 0;
-		tmport = wkport + 0x14;
-		outb(0x05, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x05, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(wide[j++], tmport);
-				tmport += 0x06;
-			}
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(wide[j++], wkport + 0x19);
 		}
-		tmport -= 0x08;
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1442,18 +1396,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		tmport = wkport + 0x18;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(0, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(0, wkport + 0x19);
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1465,25 +1413,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		tmport = wkport + 0x14;
-		outb(0xff, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0xff, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 		k = 0;
 widep_in1:
-		j = inb(tmport);
+		j = inb(wkport + 0x1f);
 		if ((j & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1495,19 +1437,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x30, wkport + 0x10);
+		outb(0x00, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -1535,69 +1472,56 @@ not_wide:
 		}
 		continue;
 set_sync:
-		tmport = wkport + 0x1b;
 		j = 0;
 		if ((m & dev->wide_id[0]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, tmport);
-		tmport = wkport + 3;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(j, wkport + 0x1b);
+		outb(satn[0], wkport + 3);
+		outb(satn[1], wkport + 4);
+		outb(satn[2], wkport + 5);
+		outb(satn[3], wkport + 6);
+		outb(satn[4], wkport + 7);
+		outb(satn[5], wkport + 8);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[0][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
+		outb(satn[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 			
 try_sync:
 		j = 0;
-		tmport = wkport + 0x14;
-		outb(0x06, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x06, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[0]) != 0) {
-					outb(synw[j++], tmport);
+					outb(synw[j++], wkport + 0x19);
 				} else {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synu[j++], tmport);
+						outb(synu[j++], wkport + 0x19);
 					} else {
-						outb(synn[j++], tmport);
+						outb(synn[j++], wkport + 0x19);
 					}
 				}
-				tmport += 0x06;
 			}
 		}
-		tmport -= 0x08;
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -1609,18 +1533,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		tmport = wkport + 0x18;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00) {
-			if ((inb(tmport) & 0x01) != 0x00) {
-				tmport -= 0x06;
-				outb(0x00, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0x00)
+				outb(0x00, wkport + 0x19);
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1636,29 +1554,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		tmport = wkport + 0x14;
-		outb(0xff, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0xff, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 		k = 0;
 phase_ins1:
-		j = inb(tmport);
+		j = inb(wkport + 0x1f);
 		if ((j & 0x01) != 0x00) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
-		tmport -= 0x08;
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1674,20 +1586,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
+		outb(0x30, wkport + 0x10);
 tar_dcons:
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x00, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -1727,8 +1634,7 @@ tar_dcons:
 set_syn_ok:
 		dev->id[0][i].devsp = (dev->id[0][i].devsp & 0x0f) | j;
 	}
-	tmport = wkport + 0x3a;
-	outb((unsigned char) (inb(tmport) & 0xef), tmport);
+	outb((unsigned char) (inb(wkport + 0x3a) & 0xef), wkport + 0x3a);
 }
 
 static void is880(struct atp_unit *dev, unsigned int wkport)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 07/52] atp870u: Untangle tmport #5
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (5 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 06/52] atp870u: Untangle tmport #4 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 08/52] atp870u: Untangle tmport #6 Ondrej Zary
                   ` (45 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  470 ++++++++++++++++++------------------------------
 1 file changed, 173 insertions(+), 297 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 3e3a68b..3bf01fc 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1639,7 +1639,6 @@ set_syn_ok:
 
 static void is880(struct atp_unit *dev, unsigned int wkport)
 {
-	unsigned int tmport;
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
 	static unsigned char mbuf[512];
@@ -1664,130 +1663,100 @@ static void is880(struct atp_unit *dev, unsigned int wkport)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[0]);
 			continue;
 		}
-		tmport = wkport + 0x5b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x41;
-		outb(0x08, tmport++);
-		outb(0x7f, tmport++);
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
+		outb(0x01, wkport + 0x5b);
+		outb(0x08, wkport + 0x41);
+		outb(0x7f, wkport + 0x42);
+		outb(satn[0], wkport + 0x43);
+		outb(satn[1], wkport + 0x44);
+		outb(satn[2], wkport + 0x45);
+		outb(satn[3], wkport + 0x46);
+		outb(satn[4], wkport + 0x47);
+		outb(satn[5], wkport + 0x48);
+		outb(0, wkport + 0x4f);
+		outb(dev->id[0][i].devsp, wkport + 0x51);
+		outb(0, wkport + 0x52);
+		outb(satn[6], wkport + 0x53);
+		outb(satn[7], wkport + 0x54);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, tmport);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
+		outb(j, wkport + 0x55);
+		outb(satn[8], wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x57) != 0x8e)
 			cpu_relax();
 			
 		dev->active_id[0] |= m;
 
-		tmport = wkport + 0x50;
-		outb(0x30, tmport);
-		tmport = wkport + 0x54;
-		outb(0x00, tmport);
+		outb(0x30, wkport + 0x50);
+		outb(0x00, wkport + 0x54);
 
 phase_cmd:
-		tmport = wkport + 0x58;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x08, wkport + 0x58);
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j != 0x16) {
-			tmport = wkport + 0x50;
-			outb(0x41, tmport);
+			outb(0x41, wkport + 0x50);
 			goto phase_cmd;
 		}
 sel_ok:
-		tmport = wkport + 0x43;
-		outb(inqd[0], tmport++);
-		outb(inqd[1], tmport++);
-		outb(inqd[2], tmport++);
-		outb(inqd[3], tmport++);
-		outb(inqd[4], tmport++);
-		outb(inqd[5], tmport);
-		tmport += 0x07;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(inqd[6], tmport++);
-		outb(inqd[7], tmport++);
-		tmport += 0x03;
-		outb(inqd[8], tmport);
-		tmport += 0x07;
+		outb(inqd[0], wkport + 0x43);
+		outb(inqd[1], wkport + 0x44);
+		outb(inqd[2], wkport + 0x45);
+		outb(inqd[3], wkport + 0x46);
+		outb(inqd[4], wkport + 0x47);
+		outb(inqd[5], wkport + 0x48);
+		outb(0, wkport + 0x4f);
+		outb(dev->id[0][i].devsp, wkport + 0x51);
+		outb(0, wkport + 0x52);
+		outb(inqd[6], wkport + 0x53);
+		outb(inqd[7], wkport + 0x54);
+		outb(inqd[8], wkport + 0x58);
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x57) != 0x8e)
 			cpu_relax();
 			
-		tmport = wkport + 0x5b;
-		outb(0x00, tmport);
-		tmport = wkport + 0x58;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x00, wkport + 0x5b);
+		outb(0x08, wkport + 0x58);
 		j = 0;
 rd_inq_data:
-		k = inb(tmport);
+		k = inb(wkport + 0x5f);
 		if ((k & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[j++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[j++] = inb(wkport + 0x59);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		tmport = wkport + 0x50;
-		outb(0x46, tmport);
-		tmport += 0x02;
-		outb(0, tmport++);
-		outb(0, tmport++);
-		outb(0, tmport++);
-		tmport += 0x03;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x46, wkport + 0x50);
+		outb(0, wkport + 0x52);
+		outb(0, wkport + 0x53);
+		outb(0, wkport + 0x54);
+		outb(0x08, wkport + 0x58);
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x16)
+		if (inb(wkport + 0x57) != 0x16)
 			goto sel_ok;
 
 inq_ok:
@@ -1810,58 +1779,43 @@ inq_ok:
 			goto chg_wide;
 		}
 
-		tmport = wkport + 0x5b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x43;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x01, wkport + 0x5b);
+		outb(satn[0], wkport + 0x43);
+		outb(satn[1], wkport + 0x44);
+		outb(satn[2], wkport + 0x45);
+		outb(satn[3], wkport + 0x46);
+		outb(satn[4], wkport + 0x47);
+		outb(satn[5], wkport + 0x48);
+		outb(0, wkport + 0x4f);
+		outb(dev->id[0][i].devsp, wkport + 0x51);
+		outb(0, wkport + 0x52);
+		outb(satn[6], wkport + 0x53);
+		outb(satn[7], wkport + 0x54);
+		outb(satn[8], wkport + 0x58);
+
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x57) != 0x8e)
 			cpu_relax();
 
 try_u3:
 		j = 0;
-		tmport = wkport + 0x54;
-		outb(0x09, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x09, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(u3[j++], tmport);
-				tmport += 0x06;
-			}
+		while ((inb(wkport + 0x5f) & 0x80) == 0) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0)
+				outb(u3[j++], wkport + 0x59);
 		}
-		tmport -= 0x08;
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x57) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1873,18 +1827,12 @@ try_u3:
 		}
 		continue;
 u3p_out:
-		tmport = wkport + 0x58;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(0, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x58);
+		while ((inb(wkport + 0x5f) & 0x80) == 0) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0)
+				outb(0, wkport + 0x59);
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1896,25 +1844,19 @@ u3p_out:
 		}
 		continue;
 u3p_in:
-		tmport = wkport + 0x54;
-		outb(0x09, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x09, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 		k = 0;
 u3p_in1:
-		j = inb(tmport);
+		j = inb(wkport + 0x5f);
 		if ((j & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x59);
 			goto u3p_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto u3p_in1;
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1926,19 +1868,14 @@ u3p_in1:
 		}
 		continue;
 u3p_cmd:
-		tmport = wkport + 0x50;
-		outb(0x30, tmport);
-		tmport = wkport + 0x54;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x30, wkport + 0x50);
+		outb(0x00, wkport + 0x54);
+		outb(0x08, wkport + 0x58);
 		
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto u3p_out;
@@ -1962,56 +1899,42 @@ u3p_cmd:
 			continue;
 		}
 chg_wide:
-		tmport = wkport + 0x5b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x43;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x01, wkport + 0x5b);
+		outb(satn[0], wkport + 0x43);
+		outb(satn[1], wkport + 0x44);
+		outb(satn[2], wkport + 0x45);
+		outb(satn[3], wkport + 0x46);
+		outb(satn[4], wkport + 0x47);
+		outb(satn[5], wkport + 0x48);
+		outb(0, wkport + 0x4f);
+		outb(dev->id[0][i].devsp, wkport + 0x51);
+		outb(0, wkport + 0x52);
+		outb(satn[6], wkport + 0x53);
+		outb(satn[7], wkport + 0x54);
+		outb(satn[8], wkport + 0x58);
+
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		tmport -= 0x08;
-		if (inb(tmport) != 0x11 && inb(tmport) != 0x8e)
+		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
 			continue;
 
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x57) != 0x8e)
 			cpu_relax();
 			
 try_wide:
 		j = 0;
-		tmport = wkport + 0x54;
-		outb(0x05, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x05, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(wide[j++], tmport);
-				tmport += 0x06;
-			}
+		while ((inb(wkport + 0x5f) & 0x80) == 0) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0)
+				outb(wide[j++], wkport + 0x59);
 		}
-		tmport -= 0x08;
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x57) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -2023,18 +1946,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		tmport = wkport + 0x58;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(0, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x58);
+		while ((inb(wkport + 0x5f) & 0x80) == 0) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0)
+				outb(0, wkport + 0x59);
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -2046,25 +1963,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		tmport = wkport + 0x54;
-		outb(0xff, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0xff, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 		k = 0;
 widep_in1:
-		j = inb(tmport);
+		j = inb(wkport + 0x5f);
 		if ((j & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x59);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -2076,19 +1987,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		tmport = wkport + 0x50;
-		outb(0x30, tmport);
-		tmport = wkport + 0x54;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x30, wkport + 0x50);
+		outb(0x00, wkport + 0x54);
+		outb(0x08, wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -2129,73 +2035,60 @@ set_sync:
 				synuw[4] = 0x0a;
 			}
 		}
-		tmport = wkport + 0x5b;
 		j = 0;
 		if ((m & dev->wide_id[0]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, tmport);
-		tmport = wkport + 0x43;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[0][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(j, wkport + 0x5b);
+		outb(satn[0], wkport + 0x43);
+		outb(satn[1], wkport + 0x44);
+		outb(satn[2], wkport + 0x45);
+		outb(satn[3], wkport + 0x46);
+		outb(satn[4], wkport + 0x47);
+		outb(satn[5], wkport + 0x48);
+		outb(0, wkport + 0x4f);
+		outb(dev->id[0][i].devsp, wkport + 0x51);
+		outb(0, wkport + 0x52);
+		outb(satn[6], wkport + 0x53);
+		outb(satn[7], wkport + 0x54);
+		outb(satn[8], wkport + 0x58);
+
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x57) != 0x11) && (inb(wkport + 0x57) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x57) != 0x8e)
 			cpu_relax();
 
 try_sync:
 		j = 0;
-		tmport = wkport + 0x54;
-		outb(0x06, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x06, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
+		while ((inb(wkport + 0x5f) & 0x80) == 0) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0) {
 				if ((m & dev->wide_id[0]) != 0) {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synuw[j++], tmport);
+						outb(synuw[j++], wkport + 0x59);
 					} else {
-						outb(synw[j++], tmport);
+						outb(synw[j++], wkport + 0x59);
 					}
 				} else {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synu[j++], tmport);
+						outb(synu[j++], wkport + 0x59);
 					} else {
-						outb(synn[j++], tmport);
+						outb(synn[j++], wkport + 0x59);
 					}
 				}
-				tmport += 0x06;
 			}
 		}
-		tmport -= 0x08;
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x57) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x57) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -2207,18 +2100,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		tmport = wkport + 0x58;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00) {
-			if ((inb(tmport) & 0x01) != 0x00) {
-				tmport -= 0x06;
-				outb(0x00, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x58);
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00) {
+			if ((inb(wkport + 0x5f) & 0x01) != 0x00)
+				outb(0x00, wkport + 0x59);
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2234,29 +2121,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		tmport = wkport + 0x54;
-		outb(0x06, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x06, wkport + 0x54);
+		outb(0x20, wkport + 0x58);
 		k = 0;
 phase_ins1:
-		j = inb(tmport);
+		j = inb(wkport + 0x5f);
 		if ((j & 0x01) != 0x00) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x59);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
-		tmport -= 0x08;
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x57) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2272,20 +2153,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		tmport = wkport + 0x50;
-		outb(0x30, tmport);
+		outb(0x30, wkport + 0x50);
 tar_dcons:
-		tmport = wkport + 0x54;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x00, wkport + 0x54);
+		outb(0x08, wkport + 0x58);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
 			cpu_relax();
 
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x57);
 		if (j != 0x16) {
 			continue;
 		}
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 08/52] atp870u: Untangle tmport #6
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (6 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 07/52] atp870u: Untangle tmport #5 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 09/52] atp870u: Untangle tmport #7 Ondrej Zary
                   ` (44 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  136 +++++++++++++++++-------------------------------
 1 file changed, 49 insertions(+), 87 deletions(-)

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


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 09/52] atp870u: Untangle tmport #7
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (7 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 08/52] atp870u: Untangle tmport #6 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 10/52] atp870u: Untangle tmport #8 Ondrej Zary
                   ` (43 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index e398ea5..f5a11f4 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -2716,7 +2716,6 @@ static int atp870u_abort(struct scsi_cmnd * SCpnt)
 {
 	unsigned char  j, k, c;
 	struct scsi_cmnd *workrequ;
-	unsigned int tmport;
 	struct atp_unit *dev;	
 	struct Scsi_Host *host;
 	host = SCpnt->device->host;
@@ -2726,18 +2725,13 @@ static int atp870u_abort(struct scsi_cmnd * SCpnt)
 	printk(" atp870u: abort Channel = %x \n", c);
 	printk("working=%x last_cmd=%x ", dev->working[c], dev->last_cmd[c]);
 	printk(" quhdu=%x quendu=%x ", dev->quhd[c], dev->quend[c]);
-	tmport = dev->ioport[c];
 	for (j = 0; j < 0x18; j++) {
-		printk(" r%2x=%2x", j, inb(tmport++));
+		printk(" r%2x=%2x", j, inb(dev->ioport[c] + j));
 	}
-	tmport += 0x04;
-	printk(" r1c=%2x", inb(tmport));
-	tmport += 0x03;
-	printk(" r1f=%2x in_snd=%2x ", inb(tmport), dev->in_snd[c]);
-	tmport= dev->pciport[c];
-	printk(" d00=%2x", inb(tmport));
-	tmport += 0x02;
-	printk(" d02=%2x", inb(tmport));
+	printk(" r1c=%2x", inb(dev->ioport[c] + 0x1c));
+	printk(" r1f=%2x in_snd=%2x ", inb(dev->ioport[c] + 0x1f), dev->in_snd[c]);
+	printk(" d00=%2x", inb(dev->pciport[c]));
+	printk(" d02=%2x", inb(dev->pciport[c] + 0x02));
 	for(j=0;j<16;j++) {
 	   if (dev->id[c][j].curr_req != NULL) {
 		workrequ = dev->id[c][j].curr_req;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 10/52] atp870u: Untangle tmport #8
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (8 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 09/52] atp870u: Untangle tmport #7 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 11/52] atp870u: Untangle tmpcip Ondrej Zary
                   ` (42 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmport crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  478 ++++++++++++++++++------------------------------
 1 file changed, 177 insertions(+), 301 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index f5a11f4..993442d 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -2870,7 +2870,6 @@ static void tscam_885(void)
 
 static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c)
 {
-	unsigned int tmport;
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
 	static unsigned char mbuf[512];
@@ -2895,123 +2894,93 @@ static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
-		tmport = wkport + 0x1b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x01;
-		outb(0x08, tmport++);
-		outb(0x7f, tmport++);
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[c][i].devsp, tmport++);
+		outb(0x01, wkport + 0x1b);
+		outb(0x08, wkport + 0x01);
+		outb(0x7f, wkport + 0x02);
+		outb(satn[0], wkport + 0x03);
+		outb(satn[1], wkport + 0x04);
+		outb(satn[2], wkport + 0x05);
+		outb(satn[3], wkport + 0x06);
+		outb(satn[4], wkport + 0x07);
+		outb(satn[5], wkport + 0x08);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[c][i].devsp, wkport + 0x11);
 		
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, tmport);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
+		outb(j, wkport + 0x15);
+		outb(satn[8], wkport + 0x18);
 
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 		dev->active_id[c] |= m;
 
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
+		outb(0x30, wkport + 0x10);
+		outb(0x00, wkport + 0x14);
 
 phase_cmd:
-		tmport = wkport + 0x18;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
-			tmport = wkport + 0x10;
-			outb(0x41, tmport);
+			outb(0x41, wkport + 0x10);
 			goto phase_cmd;
 		}
 sel_ok:
-		tmport = wkport + 0x03;
-		outb(inqd[0], tmport++);
-		outb(inqd[1], tmport++);
-		outb(inqd[2], tmport++);
-		outb(inqd[3], tmport++);
-		outb(inqd[4], tmport++);
-		outb(inqd[5], tmport);
-		tmport += 0x07;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[c][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(inqd[6], tmport++);
-		outb(inqd[7], tmport++);
-		tmport += 0x03;
-		outb(inqd[8], tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(inqd[0], wkport + 0x03);
+		outb(inqd[1], wkport + 0x04);
+		outb(inqd[2], wkport + 0x05);
+		outb(inqd[3], wkport + 0x06);
+		outb(inqd[4], wkport + 0x07);
+		outb(inqd[5], wkport + 0x08);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[c][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(inqd[6], wkport + 0x13);
+		outb(inqd[7], wkport + 0x14);
+		outb(inqd[8], wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
-		tmport = wkport + 0x1b;
-		outb(0x00, tmport);
-		tmport = wkport + 0x18;
-		outb(0x08, tmport);
-		tmport += 0x07;
+		outb(0x00, wkport + 0x1b);
+		outb(0x08, wkport + 0x18);
 		j = 0;
 rd_inq_data:
-		k = inb(tmport);
+		k = inb(wkport + 0x1f);
 		if ((k & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[j++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[j++] = inb(wkport + 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		tmport = wkport + 0x10;
-		outb(0x46, tmport);
-		tmport += 0x02;
-		outb(0, tmport++);
-		outb(0, tmport++);
-		outb(0, tmport++);
-		tmport += 0x03;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x46, wkport + 0x10);
+		outb(0, wkport + 0x12);
+		outb(0, wkport + 0x13);
+		outb(0, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if (inb(tmport) != 0x16) {
+		if (inb(wkport + 0x17) != 0x16) {
 			goto sel_ok;
 		}
 inq_ok:
@@ -3033,54 +3002,40 @@ inq_ok:
 		   goto chg_wide;
 		}
 
-		tmport = wkport + 0x1b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x03;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[c][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x01, wkport + 0x1b);
+		outb(satn[0], wkport + 0x03);
+		outb(satn[1], wkport + 0x04);
+		outb(satn[2], wkport + 0x05);
+		outb(satn[3], wkport + 0x06);
+		outb(satn[4], wkport + 0x07);
+		outb(satn[5], wkport + 0x08);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[c][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
+		outb(satn[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 try_u3:
 		j = 0;
-		tmport = wkport + 0x14;
-		outb(0x09, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(u3[j++], tmport);
-				tmport += 0x06;
-			}
+		outb(0x09, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(u3[j++], wkport + 0x19);
 			cpu_relax();
 		}
-		tmport -= 0x08;
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3092,19 +3047,13 @@ try_u3:
 		}
 		continue;
 u3p_out:
-		tmport = wkport + 0x18;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(0, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(0, wkport + 0x19);
 			cpu_relax();
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3116,25 +3065,19 @@ u3p_out:
 		}
 		continue;
 u3p_in:
-		tmport = wkport + 0x14;
-		outb(0x09, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x09, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 		k = 0;
 u3p_in1:
-		j = inb(tmport);
+		j = inb(wkport + 0x1f);
 		if ((j & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x19);
 			goto u3p_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto u3p_in1;
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3146,16 +3089,11 @@ u3p_in1:
 		}
 		continue;
 u3p_cmd:
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00);
-		tmport -= 0x08;
-		j = inb(tmport);
+		outb(0x30, wkport + 0x10);
+		outb(0x00, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto u3p_out;
@@ -3182,54 +3120,40 @@ u3p_cmd:
 			continue;
 		}
 chg_wide:
-		tmport = wkport + 0x1b;
-		outb(0x01, tmport);
-		tmport = wkport + 0x03;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[c][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x01, wkport + 0x1b);
+		outb(satn[0], wkport + 0x03);
+		outb(satn[1], wkport + 0x04);
+		outb(satn[2], wkport + 0x05);
+		outb(satn[3], wkport + 0x06);
+		outb(satn[4], wkport + 0x07);
+		outb(satn[5], wkport + 0x08);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[c][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
+		outb(satn[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 try_wide:
 		j = 0;
-		tmport = wkport + 0x14;
-		outb(0x05, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(wide[j++], tmport);
-				tmport += 0x06;
-			}
+		outb(0x05, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(wide[j++], wkport + 0x19);
 			cpu_relax();
 		}
-		tmport -= 0x08;
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3241,19 +3165,13 @@ try_wide:
 		}
 		continue;
 widep_out:
-		tmport = wkport + 0x18;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
-				outb(0, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0)
+				outb(0, wkport + 0x19);
 			cpu_relax();
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3265,25 +3183,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		tmport = wkport + 0x14;
-		outb(0xff, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0xff, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 		k = 0;
 widep_in1:
-		j = inb(tmport);
+		j = inb(wkport + 0x1f);
 		if ((j & 0x01) != 0) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		tmport -= 0x08;
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3295,17 +3207,12 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x30, wkport + 0x10);
+		outb(0x00, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -3347,69 +3254,56 @@ set_sync:
 		      synuw[4]=0x0a;
 		   }
 		}
-		tmport = wkport + 0x1b;
 		j = 0;
 		if ((m & dev->wide_id[c]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, tmport);
-		tmport = wkport + 0x03;
-		outb(satn[0], tmport++);
-		outb(satn[1], tmport++);
-		outb(satn[2], tmport++);
-		outb(satn[3], tmport++);
-		outb(satn[4], tmport++);
-		outb(satn[5], tmport++);
-		tmport += 0x06;
-		outb(0, tmport);
-		tmport += 0x02;
-		outb(dev->id[c][i].devsp, tmport++);
-		outb(0, tmport++);
-		outb(satn[6], tmport++);
-		outb(satn[7], tmport++);
-		tmport += 0x03;
-		outb(satn[8], tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(j, wkport + 0x1b);
+		outb(satn[0], wkport + 0x03);
+		outb(satn[1], wkport + 0x04);
+		outb(satn[2], wkport + 0x05);
+		outb(satn[3], wkport + 0x06);
+		outb(satn[4], wkport + 0x07);
+		outb(satn[5], wkport + 0x08);
+		outb(0, wkport + 0x0f);
+		outb(dev->id[c][i].devsp, wkport + 0x11);
+		outb(0, wkport + 0x12);
+		outb(satn[6], wkport + 0x13);
+		outb(satn[7], wkport + 0x14);
+		outb(satn[8], wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(tmport) != 0x8e)
+		while (inb(wkport + 0x17) != 0x8e)
 			cpu_relax();
 try_sync:
 		j = 0;
-		tmport = wkport + 0x14;
-		outb(0x06, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
-
-		while ((inb(tmport) & 0x80) == 0) {
-			if ((inb(tmport) & 0x01) != 0) {
-				tmport -= 0x06;
+		outb(0x06, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
+
+		while ((inb(wkport + 0x1f) & 0x80) == 0) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[c]) != 0) {
 					if ((m & dev->ultra_map[c]) != 0) {
-						outb(synuw[j++], tmport);
+						outb(synuw[j++], wkport + 0x19);
 					} else {
-						outb(synw[j++], tmport);
+						outb(synw[j++], wkport + 0x19);
 					}
 				} else {
 					if ((m & dev->ultra_map[c]) != 0) {
-						outb(synu[j++], tmport);
+						outb(synu[j++], wkport + 0x19);
 					} else {
-						outb(synn[j++], tmport);
+						outb(synn[j++], wkport + 0x19);
 					}
 				}
-				tmport += 0x06;
 			}
 		}
-		tmport -= 0x08;
-		while ((inb(tmport) & 0x80) == 0x00)
+		while ((inb(wkport + 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(tmport) & 0x0f;
+		j = inb(wkport + 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -3421,19 +3315,13 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		tmport = wkport + 0x18;
-		outb(0x20, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00) {
-			if ((inb(tmport) & 0x01) != 0x00) {
-				tmport -= 0x06;
-				outb(0x00, tmport);
-				tmport += 0x06;
-			}
+		outb(0x20, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00) {
+			if ((inb(wkport + 0x1f) & 0x01) != 0x00)
+				outb(0x00, wkport + 0x19);
 			cpu_relax();
 		}
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -3449,26 +3337,20 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		tmport = wkport + 0x14;
-		outb(0x06, tmport);
-		tmport += 0x04;
-		outb(0x20, tmport);
-		tmport += 0x07;
+		outb(0x06, wkport + 0x14);
+		outb(0x20, wkport + 0x18);
 		k = 0;
 phase_ins1:
-		j = inb(tmport);
+		j = inb(wkport + 0x1f);
 		if ((j & 0x01) != 0x00) {
-			tmport -= 0x06;
-			mbuf[k++] = inb(tmport);
-			tmport += 0x06;
+			mbuf[k++] = inb(wkport + 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
-		tmport -= 0x08;
-		while ((inb(tmport) & 0x80) == 0x00);
-		j = inb(tmport);
+		while ((inb(wkport + 0x17) & 0x80) == 0x00);
+		j = inb(wkport + 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -3484,18 +3366,13 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		tmport = wkport + 0x10;
-		outb(0x30, tmport);
+		outb(0x30, wkport + 0x10);
 tar_dcons:
-		tmport = wkport + 0x14;
-		outb(0x00, tmport);
-		tmport += 0x04;
-		outb(0x08, tmport);
-		tmport += 0x07;
-		while ((inb(tmport) & 0x80) == 0x00)
+		outb(0x00, wkport + 0x14);
+		outb(0x08, wkport + 0x18);
+		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		tmport -= 0x08;
-		j = inb(tmport);
+		j = inb(wkport + 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -3542,8 +3419,7 @@ tar_dcons:
 		printk("dev->id[%2d][%2d].devsp = %2x\n",c,i,dev->id[c][i].devsp);
 #endif
 	}
-	tmport = wkport + 0x16;
-	outb(0x80, tmport);
+	outb(0x80, wkport + 0x16);
 }
 
 module_init(atp870u_init);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 11/52] atp870u: Untangle tmpcip
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (9 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 10/52] atp870u: Untangle tmport #8 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 12/52] atp870u: Untangle tmpcip #2 Ondrej Zary
                   ` (41 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmpcip crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   64 +++++++++++++++++-------------------------------
 1 file changed, 23 insertions(+), 41 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 993442d..32544bb 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -47,7 +47,7 @@ static void tscam_885(void);
 static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 {
 	unsigned long flags;
-	unsigned short int tmpcip, id;
+	unsigned short int id;
 	unsigned char i, j, c, target_id, lun,cmdp;
 	unsigned char *prd;
 	struct scsi_cmnd *workreq;
@@ -79,30 +79,24 @@ ch_sel:
 			if ((inb(dev->ioport[c] + 0x16) & 0x80) == 0)
 				outb((inb(dev->ioport[c] + 0x16) | 0x80), dev->ioport[c] + 0x16);
 		}		
-		tmpcip = dev->pciport[c];
-		if ((inb(tmpcip) & 0x08) != 0)
+		if ((inb(dev->pciport[c]) & 0x08) != 0)
 		{
-			tmpcip += 0x2;
 			for (k=0; k < 1000; k++) {
-				if ((inb(tmpcip) & 0x08) == 0) {
+				if ((inb(dev->pciport[c] + 2) & 0x08) == 0) {
 					goto stop_dma;
 				}
-				if ((inb(tmpcip) & 0x01) == 0) {
+				if ((inb(dev->pciport[c] + 2) & 0x01) == 0) {
 					goto stop_dma;
 				}
 			}
 		}
 stop_dma:
-		tmpcip = dev->pciport[c];
-		outb(0x00, tmpcip);
+		outb(0x00, dev->pciport[c]);
 		
 		i = inb(dev->ioport[c] + 0x17);
 		
-		if (dev->dev_id == ATP885_DEVID) {
-			tmpcip += 2;
-			outb(0x06, tmpcip);
-			tmpcip -= 2;
-		}
+		if (dev->dev_id == ATP885_DEVID)
+			outb(0x06, dev->pciport[c] + 2);
 
 		target_id = inb(dev->ioport[c] + 0x15);
 
@@ -303,13 +297,12 @@ stop_dma:
 			
 			/* enable 32 bit fifo transfer */	
 			if (dev->dev_id == ATP885_DEVID) {
-				tmpcip = dev->pciport[c] + 1;
-				i=inb(tmpcip) & 0xf3;
+				i=inb(dev->pciport[c] + 1) & 0xf3;
 				//j=workreq->cmnd[0];	    		    	
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 				   i |= 0x0c;
 				}
-				outb(i,tmpcip);		    		    		
+				outb(i, dev->pciport[c] + 1);
 			} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    		    	   (dev->dev_id == ATP880_DEVID2) ) {
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
@@ -371,25 +364,20 @@ stop_dma:
 					}
 				}				
 			}
-			tmpcip = dev->pciport[c] + 0x04;
-			outl(dev->id[c][target_id].prdaddr, tmpcip);
+			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 0x04);
 #ifdef ED_DBGP
 			printk("dev->id[%d][%d].prdaddr 0x%8x\n", c, target_id, dev->id[c][target_id].prdaddr);
 #endif
-			if (dev->dev_id == ATP885_DEVID) {
-				tmpcip -= 0x04;
-			} else {
-				tmpcip -= 0x02;
-				outb(0x06, tmpcip);
-				outb(0x00, tmpcip);
-				tmpcip -= 0x02;
+			if (dev->dev_id != ATP885_DEVID) {
+				outb(0x06, dev->pciport[c] + 2);
+				outb(0x00, dev->pciport[c] + 2);
 			}
 			/*
 			 *	Check transfer direction
 			 */
 			if (dev->id[c][target_id].dirct != 0) {
 				outb(0x08, dev->ioport[c] + 0x18);
-				outb(0x01, tmpcip);
+				outb(0x01, dev->pciport[c]);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
 				printk("status 0x80 return dirct != 0\n");
@@ -397,7 +385,7 @@ stop_dma:
 				goto handled;
 			}
 			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x09, tmpcip);
+			outb(0x09, dev->pciport[c]);
 			dev->in_int[c] = 0;
 #ifdef ED_DBGP
 			printk("status 0x80 return dirct = 0\n");
@@ -484,12 +472,9 @@ go_42:
 		}
 		i &= 0x0f;
 		if (i == 0x09) {
-			tmpcip += 4;
-			outl(dev->id[c][target_id].prdaddr, tmpcip);
-			tmpcip = tmpcip - 2;
-			outb(0x06, tmpcip);
-			outb(0x00, tmpcip);
-			tmpcip = tmpcip - 2;
+			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
+			outb(0x06, dev->pciport[c] + 2);
+			outb(0x00, dev->pciport[c] + 2);
 			outb(0x41, dev->ioport[c] + 0x10);
 			if (dev->dev_id == ATP885_DEVID) {
 				k = dev->id[c][target_id].last_len;
@@ -501,17 +486,14 @@ go_42:
 				dev->id[c][target_id].dirct = 0x00;
 			}
 			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x09, tmpcip);
+			outb(0x09, dev->pciport[c]);
 			dev->in_int[c] = 0;
 			goto handled;
 		}
 		if (i == 0x08) {
-			tmpcip += 4;
-			outl(dev->id[c][target_id].prdaddr, tmpcip);
-			tmpcip = tmpcip - 2;
-			outb(0x06, tmpcip);
-			outb(0x00, tmpcip);
-			tmpcip = tmpcip - 2;
+			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
+			outb(0x06, dev->pciport[c] + 2);
+			outb(0x00, dev->pciport[c] + 2);
 			outb(0x41, dev->ioport[c] + 0x10);
 			if (dev->dev_id == ATP885_DEVID) {		
 				k = dev->id[c][target_id].last_len;
@@ -522,7 +504,7 @@ go_42:
 			outb((unsigned char) (inb(dev->ioport[c] + 0x15) | 0x20), dev->ioport[c] + 0x15);
 			dev->id[c][target_id].dirct = 0x20;
 			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x01, tmpcip);
+			outb(0x01, dev->pciport[c]);
 			dev->in_int[c] = 0;
 			goto handled;
 		}
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 12/52] atp870u: Untangle tmpcip #2
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (10 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 11/52] atp870u: Untangle tmpcip Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 13/52] atp870u: Remove ugly gotos Ondrej Zary
                   ` (40 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Untangle the tmpcip crap so it becomes obvious what ports are accessed.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 32544bb..4d840a5 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -645,7 +645,7 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	unsigned int i;//,k;
 	unsigned char  j, target_id;
 	unsigned char *prd;
-	unsigned short int tmpcip, w;
+	unsigned short int w;
 	unsigned long l, bttl = 0;
 	unsigned long  sg_count;
 
@@ -813,7 +813,6 @@ oktosend:
 		dev->in_snd[c] = 0;
 		return;
 	}
-	tmpcip = dev->pciport[c];
 	prd = dev->id[c][target_id].prd_table;
 	dev->id[c][target_id].prd_pos = prd;
 
@@ -850,34 +849,28 @@ oktosend:
 		printk("2. bttl %x, l %x\n",bttl, l);
 #endif			
 	}
-	tmpcip += 4;
 #ifdef ED_DBGP		
-	printk("send_s870: prdaddr_2 0x%8x tmpcip %x target_id %d\n", dev->id[c][target_id].prdaddr,tmpcip,target_id);
+	printk("send_s870: prdaddr_2 0x%8x target_id %d\n", dev->id[c][target_id].prdaddr,target_id);
 #endif	
 	dev->id[c][target_id].prdaddr = dev->id[c][target_id].prd_bus;
-	outl(dev->id[c][target_id].prdaddr, tmpcip);
-	tmpcip = tmpcip - 2;
-	outb(0x06, tmpcip);
-	outb(0x00, tmpcip);
+	outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
+	outb(0x06, dev->pciport[c] + 2);
+	outb(0x00, dev->pciport[c] + 2);
 	if (dev->dev_id == ATP885_DEVID) {
-		tmpcip--;
-		j=inb(tmpcip) & 0xf3;
+		j = inb(dev->pciport[c] + 1) & 0xf3;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) ||
 	    	(workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 	   		j |= 0x0c;
 		}
-		outb(j,tmpcip);
-		tmpcip--;	    	
+		outb(j, dev->pciport[c] + 1);
 	} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    	   (dev->dev_id == ATP880_DEVID2)) {
-		tmpcip =tmpcip -2;	
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 			outb((unsigned char) ((inb(dev->ioport[c] - 0x05) & 0x3f) | 0xc0), dev->ioport[c] - 0x05);
 		} else {
 			outb((unsigned char) (inb(dev->ioport[c] - 0x05) & 0x3f), dev->ioport[c] - 0x05);
 		}		
 	} else {		
-		tmpcip =tmpcip -2;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 			outb((inb(dev->ioport[c] + 0x3a) & 0xf3) | 0x08, dev->ioport[c] + 0x3a);
 		} else {
@@ -889,7 +882,7 @@ oktosend:
 		dev->id[c][target_id].dirct = 0x20;
 		if (inb(dev->ioport[c] + 0x1c) == 0) {
 			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x01, tmpcip);
+			outb(0x01, dev->pciport[c]);
 #ifdef ED_DBGP		
 		printk( "start DMA(to target)\n");
 #endif				
@@ -901,7 +894,7 @@ oktosend:
 	}
 	if (inb(dev->ioport[c] + 0x1c) == 0) {
 		outb(0x08, dev->ioport[c] + 0x18);
-		outb(0x09, tmpcip);
+		outb(0x09, dev->pciport[c]);
 #ifdef ED_DBGP		
 		printk( "start DMA(to host)\n");
 #endif			
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 13/52] atp870u: Remove ugly gotos
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (11 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 12/52] atp870u: Untangle tmpcip #2 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 14/52] atp870u: Remove ugly gotos #2 Ondrej Zary
                   ` (39 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   84 +++++++++++++++++-------------------------------
 1 file changed, 30 insertions(+), 54 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 4d840a5..886e54b 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -55,20 +55,17 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 #ifdef ED_DBGP
 	unsigned long l;
 #endif
-	int errstus;
 	struct Scsi_Host *host = dev_id;
 	struct atp_unit *dev = (struct atp_unit *)&host->hostdata;
 
 	for (c = 0; c < 2; c++) {
 		j = inb(dev->ioport[c] + 0x1f);
 		if ((j & 0x80) != 0)
-		{			
-	   		goto ch_sel;
-		}
+			break;
 		dev->in_int[c] = 0;
 	}
-	return IRQ_NONE;
-ch_sel:
+	if ((j & 0x80) == 0)
+		return IRQ_NONE;
 #ifdef ED_DBGP	
 	printk("atp870u_intr_handle enter\n");
 #endif	
@@ -82,15 +79,12 @@ ch_sel:
 		if ((inb(dev->pciport[c]) & 0x08) != 0)
 		{
 			for (k=0; k < 1000; k++) {
-				if ((inb(dev->pciport[c] + 2) & 0x08) == 0) {
-					goto stop_dma;
-				}
-				if ((inb(dev->pciport[c] + 2) & 0x01) == 0) {
-					goto stop_dma;
-				}
+				if ((inb(dev->pciport[c] + 2) & 0x08) == 0)
+					break;
+				if ((inb(dev->pciport[c] + 2) & 0x01) == 0)
+					break;
 			}
 		}
-stop_dma:
 		outb(0x00, dev->pciport[c]);
 		
 		i = inb(dev->ioport[c] + 0x17);
@@ -170,13 +164,13 @@ stop_dma:
 #ifdef ED_DBGP
 				printk("Status 0x85 return\n");
 #endif				
-			goto handled;
+			return IRQ_HANDLED;
 		}
 
 		if (i == 0x40) {
 		     dev->last_cmd[c] |= 0x40;
 		     dev->in_int[c] = 0;
-		     goto handled;
+		     return IRQ_HANDLED;
 		}
 
 		if (i == 0x21) {
@@ -194,7 +188,7 @@ stop_dma:
 			outb(0x41, dev->ioport[c] + 0x10);
 			outb(0x08, dev->ioport[c] + 0x18);
 			dev->in_int[c] = 0;
-			goto handled;
+			return IRQ_HANDLED;
 		}
 
 		if (dev->dev_id == ATP885_DEVID) {
@@ -231,7 +225,7 @@ stop_dma:
 					dev->id[c][target_id].last_len = adrcnt;
 					outb(0x08, dev->ioport[c] + 0x18);
 					dev->in_int[c] = 0;
-					goto handled;
+					return IRQ_HANDLED;
 				} else {
 #ifdef ED_DBGP
 					printk("cmdp != 0x41\n");
@@ -243,7 +237,7 @@ stop_dma:
 					outb(0x00, dev->ioport[c] + 0x14);
 					outb(0x08, dev->ioport[c] + 0x18);
 					dev->in_int[c] = 0;
-					goto handled;
+					return IRQ_HANDLED;
 				}
 			}
 			if (dev->last_cmd[c] != 0xff) {
@@ -336,7 +330,7 @@ stop_dma:
 #ifdef ED_DBGP
 				printk("dev->id[c][target_id].last_len = 0\n");
 #endif					
-				goto handled;
+				return IRQ_HANDLED;
 			}
 #ifdef ED_DBGP
 			printk("target_id = %d adrcnt = %d\n",target_id,adrcnt);
@@ -382,7 +376,7 @@ stop_dma:
 #ifdef ED_DBGP
 				printk("status 0x80 return dirct != 0\n");
 #endif				
-				goto handled;
+				return IRQ_HANDLED;
 			}
 			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x09, dev->pciport[c]);
@@ -390,7 +384,7 @@ stop_dma:
 #ifdef ED_DBGP
 			printk("status 0x80 return dirct = 0\n");
 #endif			
-			goto handled;
+			return IRQ_HANDLED;
 		}
 
 		/*
@@ -399,27 +393,19 @@ stop_dma:
 
 		workreq = dev->id[c][target_id].curr_req;
 
-		if (i == 0x42) {
-			if ((dev->last_cmd[c] & 0xf0) != 0x40)
-			{
-			   dev->last_cmd[c] = 0xff;
-			}
-			errstus = 0x02;
-			workreq->result = errstus;
-			goto go_42;
-		}
-		if (i == 0x16) {
+		if (i == 0x42 || i == 0x16) {
 			if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 			   dev->last_cmd[c] = 0xff;
 			}
-			errstus = 0;
-			errstus = inb(dev->ioport[c] + 0x0f);
-			if (((dev->r1f[c][target_id] & 0x10) != 0)&&(dev->dev_id==ATP885_DEVID)) {
-			   printk(KERN_WARNING "AEC67162 CRC ERROR !\n");
-			   errstus = 0x02;
-			}
-			workreq->result = errstus;
-go_42:
+			if (i == 0x16) {
+				workreq->result = inb(dev->ioport[c] + 0x0f);
+				if (((dev->r1f[c][target_id] & 0x10) != 0)&&(dev->dev_id==ATP885_DEVID)) {
+					printk(KERN_WARNING "AEC67162 CRC ERROR !\n");
+					workreq->result = 0x02;
+				}
+			} else
+				workreq->result = 0x02;
+
 			if (dev->dev_id == ATP885_DEVID) {		
 				j = inb(dev->baseport + 0x29) | 0x01;
 				outb(j, dev->baseport + 0x29);
@@ -462,7 +448,7 @@ go_42:
 			}
 			spin_unlock_irqrestore(dev->host->host_lock, flags);
 			dev->in_int[c] = 0;
-			goto handled;
+			return IRQ_HANDLED;
 		}
 		if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 		   dev->last_cmd[c] = 0xff;
@@ -488,7 +474,7 @@ go_42:
 			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x09, dev->pciport[c]);
 			dev->in_int[c] = 0;
-			goto handled;
+			return IRQ_HANDLED;
 		}
 		if (i == 0x08) {
 			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
@@ -506,7 +492,7 @@ go_42:
 			outb(0x08, dev->ioport[c] + 0x18);
 			outb(0x01, dev->pciport[c]);
 			dev->in_int[c] = 0;
-			goto handled;
+			return IRQ_HANDLED;
 		}
 		if (i == 0x0a) {
 			outb(0x30, dev->ioport[c] + 0x10);
@@ -518,19 +504,9 @@ go_42:
 		outb(0x00, dev->ioport[c] + 0x13);
 		outb(0x00, dev->ioport[c] + 0x14);
 		outb(0x08, dev->ioport[c] + 0x18);
-		dev->in_int[c] = 0;
-		goto handled;
-	} else {
-//		inb(dev->ioport[c] + 0x17);
-//		dev->working[c] = 0;
-		dev->in_int[c] = 0;
-		goto handled;
 	}
-	
-handled:
-#ifdef ED_DBGP
-	printk("atp870u_intr_handle exit\n");
-#endif			
+	dev->in_int[c] = 0;
+
 	return IRQ_HANDLED;
 }
 /**
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 14/52] atp870u: Remove ugly gotos #2
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (12 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 13/52] atp870u: Remove ugly gotos Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 15/52] atp870u: Remove ugly gotos #3 Ondrej Zary
                   ` (38 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   68 +++++++++++++++++++++---------------------------
 1 file changed, 30 insertions(+), 38 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 886e54b..999bf74 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -617,7 +617,7 @@ static DEF_SCSI_QCMD(atp870u_queuecommand)
  */
 static void send_s870(struct atp_unit *dev,unsigned char c)
 {
-	struct scsi_cmnd *workreq;
+	struct scsi_cmnd *workreq = NULL;
 	unsigned int i;//,k;
 	unsigned char  j, target_id;
 	unsigned char *prd;
@@ -638,50 +638,42 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	if ((dev->last_cmd[c] != 0xff) && ((dev->last_cmd[c] & 0x40) != 0)) {
 		dev->last_cmd[c] &= 0x0f;
 		workreq = dev->id[c][dev->last_cmd[c]].curr_req;
-		if (workreq != NULL) {	/* check NULL pointer */
-		   goto cmd_subp;
-		}
-		dev->last_cmd[c] = 0xff;	
-		if (dev->quhd[c] == dev->quend[c]) {
-		   	dev->in_snd[c] = 0;
-		   	return ;
+		if (!workreq) {
+			dev->last_cmd[c] = 0xff;
+			if (dev->quhd[c] == dev->quend[c]) {
+				dev->in_snd[c] = 0;
+				return;
+			}
 		}
 	}
-	if ((dev->last_cmd[c] != 0xff) && (dev->working[c] != 0)) {
-	     	dev->in_snd[c] = 0;
-	     	return ;
-	}
-	dev->working[c]++;
-	j = dev->quhd[c];
-	dev->quhd[c]++;
-	if (dev->quhd[c] >= qcnt) {
-		dev->quhd[c] = 0;
-	}
-	workreq = dev->quereq[c][dev->quhd[c]];
-	if (dev->id[c][scmd_id(workreq)].curr_req == NULL) {
+	if (!workreq) {
+		if ((dev->last_cmd[c] != 0xff) && (dev->working[c] != 0)) {
+			dev->in_snd[c] = 0;
+			return;
+		}
+		dev->working[c]++;
+		j = dev->quhd[c];
+		dev->quhd[c]++;
+		if (dev->quhd[c] >= qcnt)
+			dev->quhd[c] = 0;
+		workreq = dev->quereq[c][dev->quhd[c]];
+		if (dev->id[c][scmd_id(workreq)].curr_req != NULL) {
+			dev->quhd[c] = j;
+			dev->working[c]--;
+			dev->in_snd[c] = 0;
+			return;
+		}
 		dev->id[c][scmd_id(workreq)].curr_req = workreq;
 		dev->last_cmd[c] = scmd_id(workreq);
-		goto cmd_subp;
-	}	
-	dev->quhd[c] = j;
-	dev->working[c]--;
-	dev->in_snd[c] = 0;
-	return;
-cmd_subp:
-	if ((inb(dev->ioport[c] + 0x1f) & 0xb0) != 0) {
-		goto abortsnd;
-	}
-	if (inb(dev->ioport[c] + 0x1c) == 0) {
-		goto oktosend;
 	}
-abortsnd:
+	if ((inb(dev->ioport[c] + 0x1f) & 0xb0) != 0 || inb(dev->ioport[c] + 0x1c) != 0) {
 #ifdef ED_DBGP
-	printk("Abort to Send\n");
+		printk("Abort to Send\n");
 #endif
-	dev->last_cmd[c] |= 0x40;
-	dev->in_snd[c] = 0;
-	return;
-oktosend:
+		dev->last_cmd[c] |= 0x40;
+		dev->in_snd[c] = 0;
+		return;
+	}
 #ifdef ED_DBGP
 	printk("OK to Send\n");
 	scmd_printk(KERN_DEBUG, workreq, "CDB");
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 15/52] atp870u: Remove ugly gotos #3
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (13 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 14/52] atp870u: Remove ugly gotos #2 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 16/52] atp870u: Remove ugly gotos #4 Ondrej Zary
                   ` (37 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 999bf74..b3d4e9d 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -880,34 +880,28 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val)
 	unsigned char j;
 
 	outw(*val, dev->ioport[0] + 0x1c);
-FUN_D7:
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
 		k = inw(dev->ioport[0] + 0x1c);
 		j = (unsigned char) (k >> 8);
-		if ((k & 0x8000) != 0) {	/* DB7 all release?    */
-			goto FUN_D7;
-		}
+		if ((k & 0x8000) != 0)	/* DB7 all release?    */
+			i = 0;
 	}
 	*val |= 0x4000;		/* assert DB6           */
 	outw(*val, dev->ioport[0] + 0x1c);
 	*val &= 0xdfff;		/* assert DB5           */
 	outw(*val, dev->ioport[0] + 0x1c);
-FUN_D5:
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns) */
-		if ((inw(dev->ioport[0] + 0x1c) & 0x2000) != 0) {	/* DB5 all release?       */
-			goto FUN_D5;
-		}
+		if ((inw(dev->ioport[0] + 0x1c) & 0x2000) != 0)	/* DB5 all release?       */
+			i = 0;
 	}
 	*val |= 0x8000;		/* no DB4-0, assert DB7    */
 	*val &= 0xe0ff;
 	outw(*val, dev->ioport[0] + 0x1c);
 	*val &= 0xbfff;		/* release DB6             */
 	outw(*val, dev->ioport[0] + 0x1c);
-FUN_D6:
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
-		if ((inw(dev->ioport[0] + 0x1c) & 0x4000) != 0) {	/* DB6 all release?  */
-			goto FUN_D6;
-		}
+		if ((inw(dev->ioport[0] + 0x1c) & 0x4000) != 0)	/* DB6 all release?  */
+			i = 0;
 	}
 
 	return j;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 16/52] atp870u: Remove ugly gotos #4
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (14 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 15/52] atp870u: Remove ugly gotos #3 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 17/52] atp870u: Remove ugly gotos #5 Ondrej Zary
                   ` (36 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   32 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index b3d4e9d..68afe11 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -970,19 +970,19 @@ static void tscam(struct Scsi_Host *host)
 		} else {
 			outb(0x00, dev->ioport[0] + 0x1b);
 		}
-wait_rdyok:
-		outb(0x09, dev->ioport[0] + 0x18);
-
-		while ((inb(dev->ioport[0] + 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-		k = inb(dev->ioport[0] + 0x17);
-		if (k != 0x16) {
-			if ((k == 0x85) || (k == 0x42)) {
-				continue;
-			}
-			outb(0x41, dev->ioport[0] + 0x10);
-			goto wait_rdyok;
-		}
+		do {
+			outb(0x09, dev->ioport[0] + 0x18);
+
+			while ((inb(dev->ioport[0] + 0x1f) & 0x80) == 0x00)
+				cpu_relax();
+			k = inb(dev->ioport[0] + 0x17);
+			if ((k == 0x85) || (k == 0x42))
+				break;
+			if (k != 0x16)
+				outb(0x41, dev->ioport[0] + 0x10);
+		} while (k != 0x16);
+		if ((k == 0x85) || (k == 0x42))
+			continue;
 		assignid_map |= m;
 
 	}
@@ -1003,10 +1003,8 @@ wait_rdyok:
 	mdelay(128);
 	val &= 0x00fb;		/* after 1ms no msg */
 	outw(val, dev->ioport[0] + 0x1c);
-wait_nomsg:
-	if ((inb(dev->ioport[0] + 0x1c) & 0x04) != 0) {
-		goto wait_nomsg;
-	}
+	while ((inb(dev->ioport[0] + 0x1c) & 0x04) != 0)
+		;
 	outb(1, 0x80);
 	udelay(100);
 	for (n = 0; n < 0x30000; n++) {
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 17/52] atp870u: Remove ugly gotos #5
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (15 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 16/52] atp870u: Remove ugly gotos #4 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 18/52] atp870u: Introduce HW access wrappers Ondrej Zary
                   ` (35 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  134 ++++++++++++++++++++++--------------------------
 1 file changed, 62 insertions(+), 72 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 68afe11..fd2bb6f 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1007,28 +1007,22 @@ static void tscam(struct Scsi_Host *host)
 		;
 	outb(1, 0x80);
 	udelay(100);
-	for (n = 0; n < 0x30000; n++) {
-		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(dev->ioport[0] + 0x1c) & 0x81) == 0x0081) {
-			goto wait_io1;
-		}
-	}
-	goto TCM_SYNC;
-wait_io1:
-	inb(0x80);
-	val |= 0x8003;		/* io,cd,db7  */
-	outw(val, dev->ioport[0] + 0x1c);
-	inb(0x80);
-	val &= 0x00bf;		/* no sel     */
-	outw(val, dev->ioport[0] + 0x1c);
-	outb(2, 0x80);
-TCM_SYNC:
+	for (n = 0; n < 0x30000; n++)
+		if ((inb(dev->ioport[0] + 0x1c) & 0x80) != 0)	/* bsy ? */
+			break;
+	if (n < 0x30000)
+		for (n = 0; n < 0x30000; n++)
+			if ((inb(dev->ioport[0] + 0x1c) & 0x81) == 0x0081) {
+				inb(0x80);
+				val |= 0x8003;		/* io,cd,db7  */
+				outw(val, dev->ioport[0] + 0x1c);
+				inb(0x80);
+				val &= 0x00bf;		/* no sel     */
+				outw(val, dev->ioport[0] + 0x1c);
+				outb(2, 0x80);
+				break;
+			}
+	while (1) {
 	/*
 	 * The funny division into multiple delays is to accomodate
 	 * arches like ARM where udelay() multiplies its argument by
@@ -1059,31 +1053,28 @@ TCM_SYNC:
 	outb(4, 0x80);
 	i = 8;
 	j = 0;
-TCM_ID:
-	if ((inw(dev->ioport[0] + 0x1c) & 0x2000) == 0) {
-		goto TCM_ID;
-	}
-	outb(5, 0x80);
-	val &= 0x00ff;		/* get ID_STRING */
-	val |= 0x2000;
-	k = fun_scam(dev, &val);
-	if ((k & 0x03) == 0) {
-		goto TCM_5;
-	}
-	mbuf[j] <<= 0x01;
-	mbuf[j] &= 0xfe;
-	if ((k & 0x02) != 0) {
-		mbuf[j] |= 0x01;
-	}
-	i--;
-	if (i > 0) {
-		goto TCM_ID;
+
+	while (1) {
+		if ((inw(dev->ioport[0] + 0x1c) & 0x2000) == 0)
+			continue;
+		outb(5, 0x80);
+		val &= 0x00ff;		/* get ID_STRING */
+		val |= 0x2000;
+		k = fun_scam(dev, &val);
+		if ((k & 0x03) == 0)
+			break;
+		mbuf[j] <<= 0x01;
+		mbuf[j] &= 0xfe;
+		if ((k & 0x02) != 0)
+			mbuf[j] |= 0x01;
+		i--;
+		if (i > 0)
+			continue;
+		j++;
+		i = 8;
 	}
-	j++;
-	i = 8;
-	goto TCM_ID;
 
-TCM_5:			/* isolation complete..  */
+	/* isolation complete..  */
 /*    mbuf[32]=0;
 	printk(" \n%x %x %x %s\n ",assignid_map,mbuf[0],mbuf[1],&mbuf[2]); */
 	i = 15;
@@ -1091,33 +1082,33 @@ TCM_5:			/* isolation complete..  */
 	if ((j & 0x20) != 0) {	/* bit5=1:ID up to 7      */
 		i = 7;
 	}
-	if ((j & 0x06) == 0) {	/* IDvalid?             */
-		goto G2Q5;
-	}
-	k = mbuf[1];
-small_id:
-	m = 1;
-	m <<= k;
-	if ((m & assignid_map) == 0) {
-		goto G2Q_QUIN;
-	}
-	if (k > 0) {
-		k--;
-		goto small_id;
-	}
-G2Q5:			/* srch from max acceptable ID#  */
-	k = i;			/* max acceptable ID#            */
-G2Q_LP:
-	m = 1;
-	m <<= k;
-	if ((m & assignid_map) == 0) {
-		goto G2Q_QUIN;
+	if ((j & 0x06) != 0) {	/* IDvalid?             */
+		k = mbuf[1];
+		while (1) {
+			m = 1;
+			m <<= k;
+			if ((m & assignid_map) == 0)
+				break;
+			if (k > 0)
+				k--;
+			else
+				break;
+		}
 	}
-	if (k > 0) {
-		k--;
-		goto G2Q_LP;
+	if ((m & assignid_map) != 0) {	/* srch from max acceptable ID#  */
+		k = i;			/* max acceptable ID#            */
+		while (1) {
+			m = 1;
+			m <<= k;
+			if ((m & assignid_map) == 0)
+				break;
+			if (k > 0)
+				k--;
+			else
+				break;
+		}
 	}
-G2Q_QUIN:		/* k=binID#,       */
+	/* k=binID#,       */
 	assignid_map |= m;
 	if (k < 8) {
 		quintet[0] = 0x38;	/* 1st dft ID<8    */
@@ -1136,8 +1127,7 @@ G2Q_QUIN:		/* k=binID#,       */
 	val |= m;
 	fun_scam(dev, &val);
 
-	goto TCM_SYNC;
-
+	}
 }
 
 static void is870(struct atp_unit *dev, unsigned int wkport)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 18/52] atp870u: Introduce HW access wrappers
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (16 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 17/52] atp870u: Remove ugly gotos #5 Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 19/52] atp870u: Convert is870() to use wrappers Ondrej Zary
                   ` (34 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Introduce *_read? and *_write? wrappers to improve code readability.
Also make sure that baseport is always initialized, not only for ATP880.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  472 ++++++++++++++++++++++++++----------------------
 1 file changed, 252 insertions(+), 220 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index fd2bb6f..07b50ac 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -44,6 +44,51 @@ static void send_s870(struct atp_unit *dev,unsigned char c);
 static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c);
 static void tscam_885(void);
 
+static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
+{
+	outb(val, atp->baseport + reg);
+}
+
+static inline void atp_writeb_io(struct atp_unit *atp, u8 channel, u8 reg, u8 val)
+{
+	outb(val, atp->ioport[channel] + reg);
+}
+
+static inline void atp_writew_io(struct atp_unit *atp, u8 channel, u8 reg, u16 val)
+{
+	outw(val, atp->ioport[channel] + reg);
+}
+
+static inline void atp_writeb_pci(struct atp_unit *atp, u8 channel, u8 reg, u8 val)
+{
+	outb(val, atp->pciport[channel] + reg);
+}
+
+static inline void atp_writel_pci(struct atp_unit *atp, u8 channel, u8 reg, u32 val)
+{
+	outl(val, atp->pciport[channel] + reg);
+}
+
+static inline u8 atp_readb_base(struct atp_unit *atp, u8 reg)
+{
+	return inb(atp->baseport + reg);
+}
+
+static inline u8 atp_readb_io(struct atp_unit *atp, u8 channel, u8 reg)
+{
+	return inb(atp->ioport[channel] + reg);
+}
+
+static inline u16 atp_readw_io(struct atp_unit *atp, u8 channel, u8 reg)
+{
+	return inw(atp->ioport[channel] + reg);
+}
+
+static inline u8 atp_readb_pci(struct atp_unit *atp, u8 channel, u8 reg)
+{
+	return inb(atp->pciport[channel] + reg);
+}
+
 static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 {
 	unsigned long flags;
@@ -59,7 +104,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	struct atp_unit *dev = (struct atp_unit *)&host->hostdata;
 
 	for (c = 0; c < 2; c++) {
-		j = inb(dev->ioport[c] + 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x80) != 0)
 			break;
 		dev->in_int[c] = 0;
@@ -70,29 +115,29 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	printk("atp870u_intr_handle enter\n");
 #endif	
 	dev->in_int[c] = 1;
-	cmdp = inb(dev->ioport[c] + 0x10);
+	cmdp = atp_readb_io(dev, c, 0x10);
 	if (dev->working[c] != 0) {
 		if (dev->dev_id == ATP885_DEVID) {
-			if ((inb(dev->ioport[c] + 0x16) & 0x80) == 0)
-				outb((inb(dev->ioport[c] + 0x16) | 0x80), dev->ioport[c] + 0x16);
+			if ((atp_readb_io(dev, c, 0x16) & 0x80) == 0)
+				atp_writeb_io(dev, c, 0x16, (atp_readb_io(dev, c, 0x16) | 0x80));
 		}		
-		if ((inb(dev->pciport[c]) & 0x08) != 0)
+		if ((atp_readb_pci(dev, c, 0x00) & 0x08) != 0)
 		{
 			for (k=0; k < 1000; k++) {
-				if ((inb(dev->pciport[c] + 2) & 0x08) == 0)
+				if ((atp_readb_pci(dev, c, 2) & 0x08) == 0)
 					break;
-				if ((inb(dev->pciport[c] + 2) & 0x01) == 0)
+				if ((atp_readb_pci(dev, c, 2) & 0x01) == 0)
 					break;
 			}
 		}
-		outb(0x00, dev->pciport[c]);
+		atp_writeb_pci(dev, c, 0, 0x00);
 		
-		i = inb(dev->ioport[c] + 0x17);
+		i = atp_readb_io(dev, c, 0x17);
 		
 		if (dev->dev_id == ATP885_DEVID)
-			outb(0x06, dev->pciport[c] + 2);
+			atp_writeb_pci(dev, c, 2, 0x06);
 
-		target_id = inb(dev->ioport[c] + 0x15);
+		target_id = atp_readb_io(dev, c, 0x15);
 
 		/*
 		 *	Remap wide devices onto id numbers
@@ -121,9 +166,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			}
 			if (dev->dev_id == ATP885_DEVID) {
 				adrcnt = 0;
-				((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
-				((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
-				((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
+				((unsigned char *) &adrcnt)[2] = atp_readb_io(dev, c, 0x12);
+				((unsigned char *) &adrcnt)[1] = atp_readb_io(dev, c, 0x13);
+				((unsigned char *) &adrcnt)[0] = atp_readb_io(dev, c, 0x14);
 				if (dev->id[c][target_id].last_len != adrcnt)
 				{
 			   		k = dev->id[c][target_id].last_len;
@@ -140,10 +185,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			 *      Flip wide
 			 */			
 			if (dev->wide_id[c] != 0) {
-				outb(0x01, dev->ioport[c] + 0x1b);
-				while ((inb(dev->ioport[c] + 0x1b) & 0x01) != 0x01) {
-					outb(0x01, dev->ioport[c] + 0x1b);
-				}
+				atp_writeb_io(dev, c, 0x1b, 0x01);
+				while ((atp_readb_io(dev, c, 0x1b) & 0x01) != 0x01)
+					atp_writeb_io(dev, c, 0x1b, 0x01);
 			}		
 			/*
 			 *	Issue more commands
@@ -178,15 +222,15 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			   dev->last_cmd[c] = 0xff;
 			}
 			adrcnt = 0;
-			((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
-			((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
-			((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
+			((unsigned char *) &adrcnt)[2] = atp_readb_io(dev, c, 0x12);
+			((unsigned char *) &adrcnt)[1] = atp_readb_io(dev, c, 0x13);
+			((unsigned char *) &adrcnt)[0] = atp_readb_io(dev, c, 0x14);
 			k = dev->id[c][target_id].last_len;
 			k -= adrcnt;
 			dev->id[c][target_id].tran_len = k;
 			dev->id[c][target_id].last_len = adrcnt;
-			outb(0x41, dev->ioport[c] + 0x10);
-			outb(0x08, dev->ioport[c] + 0x18);
+			atp_writeb_io(dev, c, 0x10, 0x41);
+			atp_writeb_io(dev, c, 0x18, 0x08);
 			dev->in_int[c] = 0;
 			return IRQ_HANDLED;
 		}
@@ -205,9 +249,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			printk(KERN_DEBUG "Device reselect\n");
 #endif			
 			lun = 0;
-			if (cmdp == 0x44 || i==0x80) {
-				lun = inb(dev->ioport[c] + 0x1d) & 0x07;
-			} else {
+			if (cmdp == 0x44 || i == 0x80)
+				lun = atp_readb_io(dev, c, 0x1d) & 0x07;
+			else {
 				if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 				   dev->last_cmd[c] = 0xff;
 				}
@@ -216,26 +260,26 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 					printk("cmdp = 0x41\n");
 #endif						
 					adrcnt = 0;
-					((unsigned char *) &adrcnt)[2] = inb(dev->ioport[c] + 0x12);
-					((unsigned char *) &adrcnt)[1] = inb(dev->ioport[c] + 0x13);
-					((unsigned char *) &adrcnt)[0] = inb(dev->ioport[c] + 0x14);
+					((unsigned char *) &adrcnt)[2] = atp_readb_io(dev, c, 0x12);
+					((unsigned char *) &adrcnt)[1] = atp_readb_io(dev, c, 0x13);
+					((unsigned char *) &adrcnt)[0] = atp_readb_io(dev, c, 0x14);
 					k = dev->id[c][target_id].last_len;
 					k -= adrcnt;
 					dev->id[c][target_id].tran_len = k;
 					dev->id[c][target_id].last_len = adrcnt;
-					outb(0x08, dev->ioport[c] + 0x18);
+					atp_writeb_io(dev, c, 0x18, 0x08);
 					dev->in_int[c] = 0;
 					return IRQ_HANDLED;
 				} else {
 #ifdef ED_DBGP
 					printk("cmdp != 0x41\n");
 #endif						
-					outb(0x46, dev->ioport[c] + 0x10);
+					atp_writeb_io(dev, c, 0x10, 0x46);
 					dev->id[c][target_id].dirct = 0x00;
-					outb(0x00, dev->ioport[c] + 0x12);
-					outb(0x00, dev->ioport[c] + 0x13);
-					outb(0x00, dev->ioport[c] + 0x14);
-					outb(0x08, dev->ioport[c] + 0x18);
+					atp_writeb_io(dev, c, 0x12, 0x00);
+					atp_writeb_io(dev, c, 0x13, 0x00);
+					atp_writeb_io(dev, c, 0x14, 0x00);
+					atp_writeb_io(dev, c, 0x18, 0x08);
 					dev->in_int[c] = 0;
 					return IRQ_HANDLED;
 				}
@@ -244,12 +288,12 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			   dev->last_cmd[c] |= 0x40;
 			}
 			if (dev->dev_id == ATP885_DEVID) {
-				j = inb(dev->baseport + 0x29) & 0xfe;
-				outb(j, dev->baseport + 0x29);
+				j = atp_readb_base(dev, 0x29) & 0xfe;
+				atp_writeb_base(dev, 0x29, j);
 			} else
-				outb(0x45, dev->ioport[c] + 0x10);
+				atp_writeb_io(dev, c, 0x10, 0x45);
 
-			target_id = inb(dev->ioport[c] + 0x16);
+			target_id = atp_readb_io(dev, c, 0x16);
 			/*
 			 *	Remap wide identifiers
 			 */
@@ -259,7 +303,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 				target_id &= 0x07;
 			}
 			if (dev->dev_id == ATP885_DEVID)
-				outb(0x45, dev->ioport[c] + 0x10);
+				atp_writeb_io(dev, c, 0x10, 0x45);
 			workreq = dev->id[c][target_id].curr_req;
 #ifdef ED_DBGP			
 			scmd_printk(KERN_DEBUG, workreq, "CDB");
@@ -268,16 +312,16 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			printk("\n");
 #endif	
 			
-			outb(lun, dev->ioport[c] + 0x0f);
-			outb(dev->id[c][target_id].devsp, dev->ioport[c] + 0x11);
+			atp_writeb_io(dev, c, 0x0f, lun);
+			atp_writeb_io(dev, c, 0x11, dev->id[c][target_id].devsp);
 			adrcnt = dev->id[c][target_id].tran_len;
 			k = dev->id[c][target_id].last_len;
 
-			outb(((unsigned char *) &k)[2], dev->ioport[c] + 0x12);
-			outb(((unsigned char *) &k)[1], dev->ioport[c] + 0x13);
-			outb(((unsigned char *) &k)[0], dev->ioport[c] + 0x14);
+			atp_writeb_io(dev, c, 0x12, ((unsigned char *) &k)[2]);
+			atp_writeb_io(dev, c, 0x13, ((unsigned char *) &k)[1]);
+			atp_writeb_io(dev, c, 0x14, ((unsigned char *) &k)[0]);
 #ifdef ED_DBGP			
-			printk("k %x, k[0] 0x%x k[1] 0x%x k[2] 0x%x\n", k, inb(dev->ioport[c] + 0x14), inb(dev->ioport[c] + 0x13), inb(dev->ioport[c] + 0x12));
+			printk("k %x, k[0] 0x%x k[1] 0x%x k[2] 0x%x\n", k, atp_readb_io(dev, c, 0x14), atp_readb_io(dev, c, 0x13), atp_readb_io(dev, c, 0x12));
 #endif			
 			/* Remap wide */
 			j = target_id;
@@ -286,30 +330,28 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			}
 			/* Add direction */
 			j |= dev->id[c][target_id].dirct;
-			outb(j, dev->ioport[c] + 0x15);
-			outb(0x80, dev->ioport[c] + 0x16);
+			atp_writeb_io(dev, c, 0x15, j);
+			atp_writeb_io(dev, c, 0x16, 0x80);
 			
 			/* enable 32 bit fifo transfer */	
 			if (dev->dev_id == ATP885_DEVID) {
-				i=inb(dev->pciport[c] + 1) & 0xf3;
+				i = atp_readb_pci(dev, c, 1) & 0xf3;
 				//j=workreq->cmnd[0];	    		    	
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 				   i |= 0x0c;
 				}
-				outb(i, dev->pciport[c] + 1);
+				atp_writeb_pci(dev, c, 1, i);
 			} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    		    	   (dev->dev_id == ATP880_DEVID2) ) {
-				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-					outb((unsigned char) ((inb(dev->ioport[c] - 0x05) & 0x3f) | 0xc0), dev->ioport[c] - 0x05);///minus 0x05???
-				} else {
-					outb((unsigned char) (inb(dev->ioport[c] - 0x05) & 0x3f), dev->ioport[c] - 0x05);///minus 0x05???
-				}
+				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
+					atp_writeb_base(dev, 0x3b, (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0);
+				else
+					atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
 			} else {				
-				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-					outb((unsigned char) ((inb(dev->ioport[c] + 0x3a) & 0xf3) | 0x08), dev->ioport[c] + 0x3a);
-				} else {
-					outb((unsigned char) (inb(dev->ioport[c] + 0x3a) & 0xf3), dev->ioport[c] + 0x3a);
-				}														
+				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
+					atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+				else
+					atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
 			}	
 			j = 0;
 			id = 1;
@@ -320,12 +362,11 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			if ((id & dev->wide_id[c]) != 0) {
 				j |= 0x01;
 			}
-			outb(j, dev->ioport[c] + 0x1b);
-			while ((inb(dev->ioport[c] + 0x1b) & 0x01) != j) {
-				outb(j,dev->ioport[c] + 0x1b);
-			}
+			atp_writeb_io(dev, c, 0x1b, j);
+			while ((atp_readb_io(dev, c, 0x1b) & 0x01) != j)
+				atp_writeb_io(dev, c, 0x1b, j);
 			if (dev->id[c][target_id].last_len == 0) {
-				outb(0x08, dev->ioport[c] + 0x18);
+				atp_writeb_io(dev, c, 0x18, 0x08);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
 				printk("dev->id[c][target_id].last_len = 0\n");
@@ -358,28 +399,28 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 					}
 				}				
 			}
-			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 0x04);
+			atp_writel_pci(dev, c, 0x04, dev->id[c][target_id].prdaddr);
 #ifdef ED_DBGP
 			printk("dev->id[%d][%d].prdaddr 0x%8x\n", c, target_id, dev->id[c][target_id].prdaddr);
 #endif
 			if (dev->dev_id != ATP885_DEVID) {
-				outb(0x06, dev->pciport[c] + 2);
-				outb(0x00, dev->pciport[c] + 2);
+				atp_writeb_pci(dev, c, 2, 0x06);
+				atp_writeb_pci(dev, c, 2, 0x00);
 			}
 			/*
 			 *	Check transfer direction
 			 */
 			if (dev->id[c][target_id].dirct != 0) {
-				outb(0x08, dev->ioport[c] + 0x18);
-				outb(0x01, dev->pciport[c]);
+				atp_writeb_io(dev, c, 0x18, 0x08);
+				atp_writeb_pci(dev, c, 0, 0x01);
 				dev->in_int[c] = 0;
 #ifdef ED_DBGP
 				printk("status 0x80 return dirct != 0\n");
 #endif				
 				return IRQ_HANDLED;
 			}
-			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x09, dev->pciport[c]);
+			atp_writeb_io(dev, c, 0x18, 0x08);
+			atp_writeb_pci(dev, c, 0, 0x09);
 			dev->in_int[c] = 0;
 #ifdef ED_DBGP
 			printk("status 0x80 return dirct = 0\n");
@@ -398,7 +439,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			   dev->last_cmd[c] = 0xff;
 			}
 			if (i == 0x16) {
-				workreq->result = inb(dev->ioport[c] + 0x0f);
+				workreq->result = atp_readb_io(dev, c, 0x0f);
 				if (((dev->r1f[c][target_id] & 0x10) != 0)&&(dev->dev_id==ATP885_DEVID)) {
 					printk(KERN_WARNING "AEC67162 CRC ERROR !\n");
 					workreq->result = 0x02;
@@ -407,8 +448,8 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 				workreq->result = 0x02;
 
 			if (dev->dev_id == ATP885_DEVID) {		
-				j = inb(dev->baseport + 0x29) | 0x01;
-				outb(j, dev->baseport + 0x29);
+				j = atp_readb_base(dev, 0x29) | 0x01;
+				atp_writeb_base(dev, 0x29, j);
 			}
 			/*
 			 *	Complete the command
@@ -430,10 +471,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			 *      Take it back wide
 			 */
 			if (dev->wide_id[c] != 0) {
-				outb(0x01, dev->ioport[c] + 0x1b);
-				while ((inb(dev->ioport[c] + 0x1b) & 0x01) != 0x01) {
-					outb(0x01, dev->ioport[c] + 0x1b);
-				}       
+				atp_writeb_io(dev, c, 0x1b, 0x01);
+				while ((atp_readb_io(dev, c, 0x1b) & 0x01) != 0x01)
+					atp_writeb_io(dev, c, 0x1b, 0x01);
 			} 
 			/*
 			 *	If there is stuff to send and nothing going then send it
@@ -458,52 +498,51 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 		}
 		i &= 0x0f;
 		if (i == 0x09) {
-			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
-			outb(0x06, dev->pciport[c] + 2);
-			outb(0x00, dev->pciport[c] + 2);
-			outb(0x41, dev->ioport[c] + 0x10);
+			atp_writel_pci(dev, c, 4, dev->id[c][target_id].prdaddr);
+			atp_writeb_pci(dev, c, 2, 0x06);
+			atp_writeb_pci(dev, c, 2, 0x00);
+			atp_writeb_io(dev, c, 0x10, 0x41);
 			if (dev->dev_id == ATP885_DEVID) {
 				k = dev->id[c][target_id].last_len;
-				outb((unsigned char) (((unsigned char *) (&k))[2]), dev->ioport[c] + 0x12);
-				outb((unsigned char) (((unsigned char *) (&k))[1]), dev->ioport[c] + 0x13);
-				outb((unsigned char) (((unsigned char *) (&k))[0]), dev->ioport[c] + 0x14);
+				atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&k))[2]);
+				atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&k))[1]);
+				atp_writeb_io(dev, c, 0x14, ((unsigned char *) (&k))[0]);
 				dev->id[c][target_id].dirct = 0x00;
 			} else {
 				dev->id[c][target_id].dirct = 0x00;
 			}
-			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x09, dev->pciport[c]);
+			atp_writeb_io(dev, c, 0x18, 0x08);
+			atp_writeb_pci(dev, c, 0, 0x09);
 			dev->in_int[c] = 0;
 			return IRQ_HANDLED;
 		}
 		if (i == 0x08) {
-			outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
-			outb(0x06, dev->pciport[c] + 2);
-			outb(0x00, dev->pciport[c] + 2);
-			outb(0x41, dev->ioport[c] + 0x10);
+			atp_writel_pci(dev, c, 4, dev->id[c][target_id].prdaddr);
+			atp_writeb_pci(dev, c, 2, 0x06);
+			atp_writeb_pci(dev, c, 2, 0x00);
+			atp_writeb_io(dev, c, 0x10, 0x41);
 			if (dev->dev_id == ATP885_DEVID) {		
 				k = dev->id[c][target_id].last_len;
-				outb((unsigned char) (((unsigned char *) (&k))[2]), dev->ioport[c] + 0x12);
-				outb((unsigned char) (((unsigned char *) (&k))[1]), dev->ioport[c] + 0x13);
-				outb((unsigned char) (((unsigned char *) (&k))[0]), dev->ioport[c] + 0x14);
+				atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&k))[2]);
+				atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&k))[1]);
+				atp_writeb_io(dev, c, 0x14, ((unsigned char *) (&k))[0]);
 			}
-			outb((unsigned char) (inb(dev->ioport[c] + 0x15) | 0x20), dev->ioport[c] + 0x15);
+			atp_writeb_io(dev, c, 0x15, atp_readb_io(dev, c, 0x15) | 0x20);
 			dev->id[c][target_id].dirct = 0x20;
-			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x01, dev->pciport[c]);
+			atp_writeb_io(dev, c, 0x18, 0x08);
+			atp_writeb_pci(dev, c, 0, 0x01);
 			dev->in_int[c] = 0;
 			return IRQ_HANDLED;
 		}
-		if (i == 0x0a) {
-			outb(0x30, dev->ioport[c] + 0x10);
-		} else {
-			outb(0x46, dev->ioport[c] + 0x10);
-		}
+		if (i == 0x0a)
+			atp_writeb_io(dev, c, 0x10, 0x30);
+		else
+			atp_writeb_io(dev, c, 0x10, 0x46);
 		dev->id[c][target_id].dirct = 0x00;
-		outb(0x00, dev->ioport[c] + 0x12);
-		outb(0x00, dev->ioport[c] + 0x13);
-		outb(0x00, dev->ioport[c] + 0x14);
-		outb(0x08, dev->ioport[c] + 0x18);
+		atp_writeb_io(dev, c, 0x12, 0x00);
+		atp_writeb_io(dev, c, 0x13, 0x00);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 	}
 	dev->in_int[c] = 0;
 
@@ -590,9 +629,9 @@ static int atp870u_queuecommand_lck(struct scsi_cmnd *req_p,
 	}
 	dev->quereq[c][dev->quend[c]] = req_p;
 #ifdef ED_DBGP	
-	printk("dev->ioport[c] = %x inb(dev->ioport[c] + 0x1c) = %x dev->in_int[%d] = %d dev->in_snd[%d] = %d\n",dev->ioport[c],inb(dev->ioport[c] + 0x1c),c,dev->in_int[c],c,dev->in_snd[c]);
+	printk("dev->ioport[c] = %x atp_readb_io(dev, c, 0x1c) = %x dev->in_int[%d] = %d dev->in_snd[%d] = %d\n",dev->ioport[c],atp_readb_io(dev, c, 0x1c),c,dev->in_int[c],c,dev->in_snd[c]);
 #endif
-	if ((inb(dev->ioport[c] + 0x1c) == 0) && (dev->in_int[c] == 0) && (dev->in_snd[c] == 0)) {
+	if ((atp_readb_io(dev, c, 0x1c) == 0) && (dev->in_int[c] == 0) && (dev->in_snd[c] == 0)) {
 #ifdef ED_DBGP
 		printk("Call sent_s870(atp870u_queuecommand)\n");
 #endif		
@@ -666,7 +705,7 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 		dev->id[c][scmd_id(workreq)].curr_req = workreq;
 		dev->last_cmd[c] = scmd_id(workreq);
 	}
-	if ((inb(dev->ioport[c] + 0x1f) & 0xb0) != 0 || inb(dev->ioport[c] + 0x1c) != 0) {
+	if ((atp_readb_io(dev, c, 0x1f) & 0xb0) != 0 || atp_readb_io(dev, c, 0x1c) != 0) {
 #ifdef ED_DBGP
 		printk("Abort to Send\n");
 #endif
@@ -685,8 +724,8 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	l = scsi_bufflen(workreq);
 
 	if (dev->dev_id == ATP885_DEVID) {
-		j = inb(dev->baseport + 0x29) & 0xfe;
-		outb(j, dev->baseport + 0x29);
+		j = atp_readb_base(dev, 0x29) & 0xfe;
+		atp_writeb_base(dev, 0x29, j);
 		dev->r1f[c][scmd_id(workreq)] = 0;
 	}
 	
@@ -709,9 +748,9 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	if ((w & dev->wide_id[c]) != 0) {
 		j |= 0x01;
 	}
-	outb(j, dev->ioport[c] + 0x1b);
-	while ((inb(dev->ioport[c] + 0x1b) & 0x01) != j) {
-		outb(j,dev->ioport[c] + 0x1b);
+	atp_writeb_io(dev, c, 0x1b, j);
+	while ((atp_readb_io(dev, c, 0x1b) & 0x01) != j) {
+		atp_writeb_pci(dev, c, 0x1b, j);
 #ifdef ED_DBGP
 		printk("send_s870 while loop 1\n");
 #endif
@@ -720,21 +759,19 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	 *	Write the command
 	 */
 
-	outb(workreq->cmd_len, dev->ioport[c] + 0x00);
-	outb(0x2c, dev->ioport[c] + 0x01);
-	if (dev->dev_id == ATP885_DEVID) {
-		outb(0x7f, dev->ioport[c] + 0x02);
-	} else {
-		outb(0xcf, dev->ioport[c] + 0x02);
-	}	
-	for (i = 0; i < workreq->cmd_len; i++) {
-		outb(workreq->cmnd[i], dev->ioport[c] + 0x03 + i);
-	}
-	outb(workreq->device->lun, dev->ioport[c] + 0x0f);
+	atp_writeb_io(dev, c, 0x00, workreq->cmd_len);
+	atp_writeb_io(dev, c, 0x01, 0x2c);
+	if (dev->dev_id == ATP885_DEVID)
+		atp_writeb_io(dev, c, 0x02, 0x7f);
+	else
+		atp_writeb_io(dev, c, 0x02, 0xcf);
+	for (i = 0; i < workreq->cmd_len; i++)
+		atp_writeb_io(dev, c, 0x03 + i, workreq->cmnd[i]);
+	atp_writeb_io(dev, c, 0x0f, workreq->device->lun);
 	/*
 	 *	Write the target
 	 */
-	outb(dev->id[c][target_id].devsp, dev->ioport[c] + 0x11);
+	atp_writeb_io(dev, c, 0x11, dev->id[c][target_id].devsp);
 #ifdef ED_DBGP	
 	printk("dev->id[%d][%d].devsp = %2x\n",c,target_id,dev->id[c][target_id].devsp);
 #endif
@@ -743,9 +780,9 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	/*
 	 *	Write transfer size
 	 */
-	outb((unsigned char) (((unsigned char *) (&l))[2]), dev->ioport[c] + 0x12);
-	outb((unsigned char) (((unsigned char *) (&l))[1]), dev->ioport[c] + 0x13);
-	outb((unsigned char) (((unsigned char *) (&l))[0]), dev->ioport[c] + 0x14);
+	atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&l))[2]);
+	atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&l))[1]);
+	atp_writeb_io(dev, c, 0x14, ((unsigned char *) (&l))[0]);
 	j = target_id;	
 	dev->id[c][j].last_len = l;
 	dev->id[c][j].tran_len = 0;
@@ -761,23 +798,21 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	/*
 	 *	Check transfer direction
 	 */
-	if (workreq->sc_data_direction == DMA_TO_DEVICE) {
-		outb((unsigned char) (j | 0x20), dev->ioport[c] + 0x15);
-	} else {
-		outb(j, dev->ioport[c] + 0x15);
-	}
-	outb((unsigned char) (inb(dev->ioport[c] + 0x16) | 0x80), dev->ioport[c] + 0x16);
-	outb(0x80, dev->ioport[c] + 0x16);
+	if (workreq->sc_data_direction == DMA_TO_DEVICE)
+		atp_writeb_io(dev, c, 0x15, j | 0x20);
+	else
+		atp_writeb_io(dev, c, 0x15, j);
+	atp_writeb_io(dev, c, 0x16, atp_readb_io(dev, c, 0x16) | 0x80);
+	atp_writeb_io(dev, c, 0x16, 0x80);
 	dev->id[c][target_id].dirct = 0;
 	if (l == 0) {
-		if (inb(dev->ioport[c] + 0x1c) == 0) {
+		if (atp_readb_io(dev, c, 0x1c) == 0) {
 #ifdef ED_DBGP
 			printk("change SCSI_CMD_REG 0x08\n");	
 #endif				
-			outb(0x08, dev->ioport[c] + 0x18);
-		} else {
+			atp_writeb_io(dev, c, 0x18, 0x08);
+		} else
 			dev->last_cmd[c] |= 0x40;
-		}
 		dev->in_snd[c] = 0;
 		return;
 	}
@@ -821,36 +856,34 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	printk("send_s870: prdaddr_2 0x%8x target_id %d\n", dev->id[c][target_id].prdaddr,target_id);
 #endif	
 	dev->id[c][target_id].prdaddr = dev->id[c][target_id].prd_bus;
-	outl(dev->id[c][target_id].prdaddr, dev->pciport[c] + 4);
-	outb(0x06, dev->pciport[c] + 2);
-	outb(0x00, dev->pciport[c] + 2);
+	atp_writel_pci(dev, c, 4, dev->id[c][target_id].prdaddr);
+	atp_writeb_pci(dev, c, 2, 0x06);
+	atp_writeb_pci(dev, c, 2, 0x00);
 	if (dev->dev_id == ATP885_DEVID) {
-		j = inb(dev->pciport[c] + 1) & 0xf3;
+		j = atp_readb_pci(dev, c, 1) & 0xf3;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) ||
 	    	(workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 	   		j |= 0x0c;
 		}
-		outb(j, dev->pciport[c] + 1);
+		atp_writeb_pci(dev, c, 1, j);
 	} else if ((dev->dev_id == ATP880_DEVID1) ||
 	    	   (dev->dev_id == ATP880_DEVID2)) {
-		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-			outb((unsigned char) ((inb(dev->ioport[c] - 0x05) & 0x3f) | 0xc0), dev->ioport[c] - 0x05);
-		} else {
-			outb((unsigned char) (inb(dev->ioport[c] - 0x05) & 0x3f), dev->ioport[c] - 0x05);
-		}		
+		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
+			atp_writeb_base(dev, 0x3b, (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0);
+		else
+			atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
 	} else {		
-		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
-			outb((inb(dev->ioport[c] + 0x3a) & 0xf3) | 0x08, dev->ioport[c] + 0x3a);
-		} else {
-			outb(inb(dev->ioport[c] + 0x3a) & 0xf3, dev->ioport[c] + 0x3a);
-		}		
+		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
+			atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+		else
+			atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
 	}	
 
 	if(workreq->sc_data_direction == DMA_TO_DEVICE) {
 		dev->id[c][target_id].dirct = 0x20;
-		if (inb(dev->ioport[c] + 0x1c) == 0) {
-			outb(0x08, dev->ioport[c] + 0x18);
-			outb(0x01, dev->pciport[c]);
+		if (atp_readb_io(dev, c, 0x1c) == 0) {
+			atp_writeb_io(dev, c, 0x18, 0x08);
+			atp_writeb_pci(dev, c, 0, 0x01);
 #ifdef ED_DBGP		
 		printk( "start DMA(to target)\n");
 #endif				
@@ -860,9 +893,9 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 		dev->in_snd[c] = 0;
 		return;
 	}
-	if (inb(dev->ioport[c] + 0x1c) == 0) {
-		outb(0x08, dev->ioport[c] + 0x18);
-		outb(0x09, dev->pciport[c]);
+	if (atp_readb_io(dev, c, 0x1c) == 0) {
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		atp_writeb_pci(dev, c, 0, 0x09);
 #ifdef ED_DBGP		
 		printk( "start DMA(to host)\n");
 #endif			
@@ -879,28 +912,28 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val)
 	unsigned short int i, k;
 	unsigned char j;
 
-	outw(*val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, *val);
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
-		k = inw(dev->ioport[0] + 0x1c);
+		k = atp_readw_io(dev, 0, 0x1c);
 		j = (unsigned char) (k >> 8);
 		if ((k & 0x8000) != 0)	/* DB7 all release?    */
 			i = 0;
 	}
 	*val |= 0x4000;		/* assert DB6           */
-	outw(*val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, *val);
 	*val &= 0xdfff;		/* assert DB5           */
-	outw(*val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, *val);
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns) */
-		if ((inw(dev->ioport[0] + 0x1c) & 0x2000) != 0)	/* DB5 all release?       */
+		if ((atp_readw_io(dev, 0, 0x1c) & 0x2000) != 0)	/* DB5 all release?       */
 			i = 0;
 	}
 	*val |= 0x8000;		/* no DB4-0, assert DB7    */
 	*val &= 0xe0ff;
-	outw(*val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, *val);
 	*val &= 0xbfff;		/* release DB6             */
-	outw(*val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, *val);
 	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
-		if ((inw(dev->ioport[0] + 0x1c) & 0x4000) != 0)	/* DB6 all release?  */
+		if ((atp_readw_io(dev, 0, 0x1c) & 0x4000) != 0)	/* DB6 all release?  */
 			i = 0;
 	}
 
@@ -926,9 +959,9 @@ static void tscam(struct Scsi_Host *host)
 	}
  */
 
-	outb(0x08, dev->ioport[0] + 1);
-	outb(0x7f, dev->ioport[0] + 2);
-	outb(0x20, dev->ioport[0] + 0x11);
+	atp_writeb_io(dev, 0, 1, 0x08);
+	atp_writeb_io(dev, 0, 2, 0x7f);
+	atp_writeb_io(dev, 0, 0x11, 0x20);
 
 	if ((dev->scam_on & 0x40) == 0) {
 		return;
@@ -941,13 +974,13 @@ static void tscam(struct Scsi_Host *host)
 		j = 8;
 	}
 	assignid_map = m;
-	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);
+	atp_writeb_io(dev, 0, 0x02, 0x02);	/* 2*2=4ms,3EH 2/32*3E=3.9ms */
+	atp_writeb_io(dev, 0, 0x03, 0);
+	atp_writeb_io(dev, 0, 0x04, 0);
+	atp_writeb_io(dev, 0, 0x05, 0);
+	atp_writeb_io(dev, 0, 0x06, 0);
+	atp_writeb_io(dev, 0, 0x07, 0);
+	atp_writeb_io(dev, 0, 0x08, 0);
 
 	for (i = 0; i < j; i++) {
 		m = 1;
@@ -955,70 +988,69 @@ static void tscam(struct Scsi_Host *host)
 		if ((m & assignid_map) != 0) {
 			continue;
 		}
-		outb(0, dev->ioport[0] + 0x0f);
-		outb(0, dev->ioport[0] + 0x12);
-		outb(0, dev->ioport[0] + 0x13);
-		outb(0, dev->ioport[0] + 0x14);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, 0);
+		atp_writeb_io(dev, 0, 0x14, 0);
 		if (i > 7) {
 			k = (i & 0x07) | 0x40;
 		} else {
 			k = i;
 		}
-		outb(k, dev->ioport[0] + 0x15);
-		if (dev->chip_ver == 4) {
-			outb(0x01, dev->ioport[0] + 0x1b);
-		} else {
-			outb(0x00, dev->ioport[0] + 0x1b);
-		}
+		atp_writeb_io(dev, 0, 0x15, k);
+		if (dev->chip_ver == 4)
+			atp_writeb_io(dev, 0, 0x1b, 0x01);
+		else
+			atp_writeb_io(dev, 0, 0x1b, 0x00);
 		do {
-			outb(0x09, dev->ioport[0] + 0x18);
+			atp_writeb_io(dev, 0, 0x18, 0x09);
 
-			while ((inb(dev->ioport[0] + 0x1f) & 0x80) == 0x00)
+			while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 				cpu_relax();
-			k = inb(dev->ioport[0] + 0x17);
+			k = atp_readb_io(dev, 0, 0x17);
 			if ((k == 0x85) || (k == 0x42))
 				break;
 			if (k != 0x16)
-				outb(0x41, dev->ioport[0] + 0x10);
+				atp_writeb_io(dev, 0, 0x10, 0x41);
 		} while (k != 0x16);
 		if ((k == 0x85) || (k == 0x42))
 			continue;
 		assignid_map |= m;
 
 	}
-	outb(0x7f, dev->ioport[0] + 0x02);
-	outb(0x02, dev->ioport[0] + 0x1b);
+	atp_writeb_io(dev, 0, 0x02, 0x7f);
+	atp_writeb_io(dev, 0, 0x1b, 0x02);
 
 	outb(0, 0x80);
 
 	val = 0x0080;		/* bsy  */
-	outw(val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, val);
 	val |= 0x0040;		/* sel  */
-	outw(val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, val);
 	val |= 0x0004;		/* msg  */
-	outw(val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, val);
 	inb(0x80);		/* 2 deskew delay(45ns*2=90ns) */
 	val &= 0x007f;		/* no bsy  */
-	outw(val, dev->ioport[0] + 0x1c);
+	atp_writew_io(dev, 0, 0x1c, val);
 	mdelay(128);
 	val &= 0x00fb;		/* after 1ms no msg */
-	outw(val, dev->ioport[0] + 0x1c);
-	while ((inb(dev->ioport[0] + 0x1c) & 0x04) != 0)
+	atp_writew_io(dev, 0, 0x1c, val);
+	while ((atp_readb_io(dev, 0, 0x1c) & 0x04) != 0)
 		;
 	outb(1, 0x80);
 	udelay(100);
 	for (n = 0; n < 0x30000; n++)
-		if ((inb(dev->ioport[0] + 0x1c) & 0x80) != 0)	/* bsy ? */
+		if ((atp_readb_io(dev, 0, 0x1c) & 0x80) != 0)	/* bsy ? */
 			break;
 	if (n < 0x30000)
 		for (n = 0; n < 0x30000; n++)
-			if ((inb(dev->ioport[0] + 0x1c) & 0x81) == 0x0081) {
+			if ((atp_readb_io(dev, 0, 0x1c) & 0x81) == 0x0081) {
 				inb(0x80);
 				val |= 0x8003;		/* io,cd,db7  */
-				outw(val, dev->ioport[0] + 0x1c);
+				atp_writew_io(dev, 0, 0x1c, val);
 				inb(0x80);
 				val &= 0x00bf;		/* no sel     */
-				outw(val, dev->ioport[0] + 0x1c);
+				atp_writew_io(dev, 0, 0x1c, val);
 				outb(2, 0x80);
 				break;
 			}
@@ -1033,14 +1065,14 @@ static void tscam(struct Scsi_Host *host)
 	 */
 	mdelay(2);
 	udelay(48);
-	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)
+	if ((atp_readb_io(dev, 0, 0x1c) & 0x80) == 0x00) {	/* bsy ? */
+		atp_writew_io(dev, 0, 0x1c, 0);
+		atp_writeb_io(dev, 0, 0x1b, 0);
+		atp_writeb_io(dev, 0, 0x15, 0);
+		atp_writeb_io(dev, 0, 0x18, 0x09);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0)
 			cpu_relax();
-		inb(dev->ioport[0] + 0x17);
+		atp_readb_io(dev, 0, 0x17);
 		return;
 	}
 	val &= 0x00ff;		/* synchronization  */
@@ -1055,7 +1087,7 @@ static void tscam(struct Scsi_Host *host)
 	j = 0;
 
 	while (1) {
-		if ((inw(dev->ioport[0] + 0x1c) & 0x2000) == 0)
+		if ((atp_readw_io(dev, 0, 0x1c) & 0x2000) == 0)
 			continue;
 		outb(5, 0x80);
 		val &= 0x00ff;		/* get ID_STRING */
@@ -2232,6 +2264,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	}
 	base_io = pci_resource_start(pdev, 0);
 	base_io &= 0xfffffff8;
+	atpdev->baseport = base_io;
 
 	if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) {
 		atpdev->chip_ver = pdev->revision;
@@ -2356,7 +2389,6 @@ flash_ok_880:
         	
 		atpdev->pdev = pdev;
 		atpdev->dev_id  = ent->device;
-		atpdev->baseport = base_io;
 		atpdev->ioport[0] = base_io + 0x80;
 		atpdev->ioport[1] = base_io + 0xc0;
 		atpdev->pciport[0] = base_io + 0x40;
@@ -2651,12 +2683,12 @@ static int atp870u_abort(struct scsi_cmnd * SCpnt)
 	printk("working=%x last_cmd=%x ", dev->working[c], dev->last_cmd[c]);
 	printk(" quhdu=%x quendu=%x ", dev->quhd[c], dev->quend[c]);
 	for (j = 0; j < 0x18; j++) {
-		printk(" r%2x=%2x", j, inb(dev->ioport[c] + j));
+		printk(" r%2x=%2x", j, atp_readb_io(dev, c, j));
 	}
-	printk(" r1c=%2x", inb(dev->ioport[c] + 0x1c));
-	printk(" r1f=%2x in_snd=%2x ", inb(dev->ioport[c] + 0x1f), dev->in_snd[c]);
-	printk(" d00=%2x", inb(dev->pciport[c]));
-	printk(" d02=%2x", inb(dev->pciport[c] + 0x02));
+	printk(" r1c=%2x", atp_readb_io(dev, c, 0x1c));
+	printk(" r1f=%2x in_snd=%2x ", atp_readb_io(dev, c, 0x1f), dev->in_snd[c]);
+	printk(" d00=%2x", atp_readb_pci(dev, c, 0x00));
+	printk(" d02=%2x", atp_readb_pci(dev, c, 0x02));
 	for(j=0;j<16;j++) {
 	   if (dev->id[c][j].curr_req != NULL) {
 		workrequ = dev->id[c][j].curr_req;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 19/52] atp870u: Convert is870() to use wrappers
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (17 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 18/52] atp870u: Introduce HW access wrappers Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 20/52] atp870u: Convert is880() " Ondrej Zary
                   ` (33 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  276 ++++++++++++++++++++++++------------------------
 1 file changed, 138 insertions(+), 138 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 07b50ac..305eda8 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1162,7 +1162,7 @@ static void tscam(struct Scsi_Host *host)
 	}
 }
 
-static void is870(struct atp_unit *dev, unsigned int wkport)
+static void is870(struct atp_unit *dev)
 {
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
@@ -1174,7 +1174,7 @@ static void is870(struct atp_unit *dev, unsigned int wkport)
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	
-	outb((unsigned char) (inb(wkport + 0x3a) | 0x10), wkport + 0x3a);
+	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) | 0x10);
 
 	for (i = 0; i < 16; i++) {
 		if ((dev->chip_ver != 4) && (i > 7)) {
@@ -1190,104 +1190,104 @@ static void is870(struct atp_unit *dev, unsigned int wkport)
 			continue;
 		}
 		if (dev->chip_ver == 4) {
-			outb(0x01, wkport + 0x1b);
+			atp_writeb_io(dev, 0, 0x1b, 0x01);
 		} else {
-			outb(0x00, wkport + 0x1b);
-		}
-		outb(0x08, wkport + 1);
-		outb(0x7f, wkport + 2);
-		outb(satn[0], wkport + 3);
-		outb(satn[1], wkport + 4);
-		outb(satn[2], wkport + 5);
-		outb(satn[3], wkport + 6);
-		outb(satn[4], wkport + 7);
-		outb(satn[5], wkport + 8);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[0][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
+			atp_writeb_io(dev, 0, 0x1b, 0x00);
+		}
+		atp_writeb_io(dev, 0, 1, 0x08);
+		atp_writeb_io(dev, 0, 2, 0x7f);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, wkport + 0x15);
-		outb(satn[8], wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x15, j);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 
 		dev->active_id[0] |= m;
 
-		outb(0x30, wkport + 0x10);
-		outb(0x00, wkport + 0x04);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, 0, 0x04, 0x00);
 
 phase_cmd:
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x18, 0x08);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
-			outb(0x41, wkport + 0x10);
+			atp_writeb_io(dev, 0, 0x10, 0x41);
 			goto phase_cmd;
 		}
 sel_ok:
-		outb(inqd[0], wkport + 3);
-		outb(inqd[1], wkport + 4);
-		outb(inqd[2], wkport + 5);
-		outb(inqd[3], wkport + 6);
-		outb(inqd[4], wkport + 7);
-		outb(inqd[5], wkport + 8);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[0][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(inqd[6], wkport + 0x13);
-		outb(inqd[7], wkport + 0x14);
-		outb(inqd[8], wkport + 0x18);
+		atp_writeb_io(dev, 0, 3, inqd[0]);
+		atp_writeb_io(dev, 0, 4, inqd[1]);
+		atp_writeb_io(dev, 0, 5, inqd[2]);
+		atp_writeb_io(dev, 0, 6, inqd[3]);
+		atp_writeb_io(dev, 0, 7, inqd[4]);
+		atp_writeb_io(dev, 0, 8, inqd[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, inqd[6]);
+		atp_writeb_io(dev, 0, 0x14, inqd[7]);
+		atp_writeb_io(dev, 0, 0x18, inqd[8]);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
 		if (dev->chip_ver == 4)
-			outb(0x00, wkport + 0x1b);
+			atp_writeb_io(dev, 0, 0x1b, 0x00);
 
-		outb(0x08, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
-		k = inb(wkport + 0x1f);
+		k = atp_readb_io(dev, 0, 0x1f);
 		if ((k & 0x01) != 0) {
-			mbuf[j++] = inb(wkport + 0x19);
+			mbuf[j++] = atp_readb_io(dev, 0, 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		outb(0x46, wkport + 0x10);
-		outb(0, wkport + 0x12);
-		outb(0, wkport + 0x13);
-		outb(0, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x10, 0x46);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, 0);
+		atp_writeb_io(dev, 0, 0x14, 0);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x17) != 0x16) {
+		if (atp_readb_io(dev, 0, 0x17) != 0x16) {
 			goto sel_ok;
 		}
 inq_ok:
@@ -1305,43 +1305,43 @@ inq_ok:
 		if ((dev->global_map[0] & 0x20) == 0) {
 			goto not_wide;
 		}
-		outb(0x01, wkport + 0x1b);
-		outb(satn[0], wkport + 3);
-		outb(satn[1], wkport + 4);
-		outb(satn[2], wkport + 5);
-		outb(satn[3], wkport + 6);
-		outb(satn[4], wkport + 7);
-		outb(satn[5], wkport + 8);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[0][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
-		outb(satn[8], wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x1b, 0x01);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
 try_wide:
 		j = 0;
-		outb(0x05, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x14, 0x05);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(wide[j++], wkport + 0x19);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, wide[j++]);
 		}
 		
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1353,12 +1353,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		outb(0x20, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(0, wkport + 0x19);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, 0);
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1370,19 +1370,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		outb(0xff, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x14, 0xff);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 		k = 0;
 widep_in1:
-		j = inb(wkport + 0x1f);
+		j = atp_readb_io(dev, 0, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = inb(wkport + 0x19);
+			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1394,14 +1394,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		outb(0x30, wkport + 0x10);
-		outb(0x00, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
-		
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
+
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -1433,52 +1433,52 @@ set_sync:
 		if ((m & dev->wide_id[0]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, wkport + 0x1b);
-		outb(satn[0], wkport + 3);
-		outb(satn[1], wkport + 4);
-		outb(satn[2], wkport + 5);
-		outb(satn[3], wkport + 6);
-		outb(satn[4], wkport + 7);
-		outb(satn[5], wkport + 8);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[0][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
-		outb(satn[8], wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x1b, j);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x17) != 0x11 && inb(wkport + 0x17) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
 try_sync:
 		j = 0;
-		outb(0x06, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x14, 0x06);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0) {
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[0]) != 0) {
-					outb(synw[j++], wkport + 0x19);
+					atp_writeb_io(dev, 0, 0x19, synw[j++]);
 				} else {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synu[j++], wkport + 0x19);
+						atp_writeb_io(dev, 0, 0x19, synu[j++]);
 					} else {
-						outb(synn[j++], wkport + 0x19);
+						atp_writeb_io(dev, 0, 0x19, synn[j++]);
 					}
 				}
 			}
 		}
 		
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -1490,12 +1490,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		outb(0x20, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0x00)
-				outb(0x00, wkport + 0x19);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0x00)
+				atp_writeb_io(dev, 0, 0x19, 0x00);
 		}
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1511,23 +1511,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		outb(0xff, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x14, 0xff);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 		k = 0;
 phase_ins1:
-		j = inb(wkport + 0x1f);
+		j = atp_readb_io(dev, 0, 0x1f);
 		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = inb(wkport + 0x19);
+			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
 
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1543,15 +1543,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		outb(0x30, wkport + 0x10);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
 tar_dcons:
-		outb(0x00, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 		
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -1591,7 +1591,7 @@ tar_dcons:
 set_syn_ok:
 		dev->id[0][i].devsp = (dev->id[0][i].devsp & 0x0f) | j;
 	}
-	outb((unsigned char) (inb(wkport + 0x3a) & 0xef), wkport + 0x3a);
+	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) & 0xef);
 }
 
 static void is880(struct atp_unit *dev, unsigned int wkport)
@@ -2605,7 +2605,7 @@ flash_ok_885:
 		outb(0x20, base_io + 0x11);
 
 		tscam(shpnt);
-		is870(p, base_io);
+		is870(p);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
 		if (atpdev->chip_ver == 4)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 20/52] atp870u: Convert is880() to use wrappers
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (18 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 19/52] atp870u: Convert is870() to use wrappers Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 21/52] atp870u: Convert is885() " Ondrej Zary
                   ` (32 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Subtract 0x40 to use _io access wrappers.
Now it's obvious that is870() and is880() are very similar.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  352 ++++++++++++++++++++++++------------------------
 1 file changed, 176 insertions(+), 176 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 305eda8..1b9276f 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1594,7 +1594,7 @@ set_syn_ok:
 	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) & 0xef);
 }
 
-static void is880(struct atp_unit *dev, unsigned int wkport)
+static void is880(struct atp_unit *dev)
 {
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
@@ -1608,7 +1608,7 @@ static void is880(struct atp_unit *dev, unsigned int wkport)
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
 
-	lvdmode = inb(wkport + 0x3f) & 0x40;
+	lvdmode = atp_readb_base(dev, 0x3f) & 0x40;
 
 	for (i = 0; i < 16; i++) {
 		m = 1;
@@ -1620,100 +1620,100 @@ static void is880(struct atp_unit *dev, unsigned int wkport)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[0]);
 			continue;
 		}
-		outb(0x01, wkport + 0x5b);
-		outb(0x08, wkport + 0x41);
-		outb(0x7f, wkport + 0x42);
-		outb(satn[0], wkport + 0x43);
-		outb(satn[1], wkport + 0x44);
-		outb(satn[2], wkport + 0x45);
-		outb(satn[3], wkport + 0x46);
-		outb(satn[4], wkport + 0x47);
-		outb(satn[5], wkport + 0x48);
-		outb(0, wkport + 0x4f);
-		outb(dev->id[0][i].devsp, wkport + 0x51);
-		outb(0, wkport + 0x52);
-		outb(satn[6], wkport + 0x53);
-		outb(satn[7], wkport + 0x54);
+		atp_writeb_io(dev, 0, 0x1b, 0x01);
+		atp_writeb_io(dev, 0, 1, 0x08);
+		atp_writeb_io(dev, 0, 2, 0x7f);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, wkport + 0x55);
-		outb(satn[8], wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x15, j);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x57) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
 		dev->active_id[0] |= m;
 
-		outb(0x30, wkport + 0x50);
-		outb(0x00, wkport + 0x54);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
 
 phase_cmd:
-		outb(0x08, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 		
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
-			outb(0x41, wkport + 0x50);
+			atp_writeb_io(dev, 0, 0x10, 0x41);
 			goto phase_cmd;
 		}
 sel_ok:
-		outb(inqd[0], wkport + 0x43);
-		outb(inqd[1], wkport + 0x44);
-		outb(inqd[2], wkport + 0x45);
-		outb(inqd[3], wkport + 0x46);
-		outb(inqd[4], wkport + 0x47);
-		outb(inqd[5], wkport + 0x48);
-		outb(0, wkport + 0x4f);
-		outb(dev->id[0][i].devsp, wkport + 0x51);
-		outb(0, wkport + 0x52);
-		outb(inqd[6], wkport + 0x53);
-		outb(inqd[7], wkport + 0x54);
-		outb(inqd[8], wkport + 0x58);
+		atp_writeb_io(dev, 0, 3, inqd[0]);
+		atp_writeb_io(dev, 0, 4, inqd[1]);
+		atp_writeb_io(dev, 0, 5, inqd[2]);
+		atp_writeb_io(dev, 0, 6, inqd[3]);
+		atp_writeb_io(dev, 0, 7, inqd[4]);
+		atp_writeb_io(dev, 0, 8, inqd[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, inqd[6]);
+		atp_writeb_io(dev, 0, 0x14, inqd[7]);
+		atp_writeb_io(dev, 0, 0x18, inqd[8]);
 		
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x57) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
-		outb(0x00, wkport + 0x5b);
-		outb(0x08, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x1b, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
-		k = inb(wkport + 0x5f);
+		k = atp_readb_io(dev, 0, 0x1f);
 		if ((k & 0x01) != 0) {
-			mbuf[j++] = inb(wkport + 0x59);
+			mbuf[j++] = atp_readb_io(dev, 0, 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		outb(0x46, wkport + 0x50);
-		outb(0, wkport + 0x52);
-		outb(0, wkport + 0x53);
-		outb(0, wkport + 0x54);
-		outb(0x08, wkport + 0x58);
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x10, 0x46);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, 0);
+		atp_writeb_io(dev, 0, 0x14, 0);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x57) != 0x16)
+		if (atp_readb_io(dev, 0, 0x17) != 0x16)
 			goto sel_ok;
 
 inq_ok:
@@ -1736,43 +1736,43 @@ inq_ok:
 			goto chg_wide;
 		}
 
-		outb(0x01, wkport + 0x5b);
-		outb(satn[0], wkport + 0x43);
-		outb(satn[1], wkport + 0x44);
-		outb(satn[2], wkport + 0x45);
-		outb(satn[3], wkport + 0x46);
-		outb(satn[4], wkport + 0x47);
-		outb(satn[5], wkport + 0x48);
-		outb(0, wkport + 0x4f);
-		outb(dev->id[0][i].devsp, wkport + 0x51);
-		outb(0, wkport + 0x52);
-		outb(satn[6], wkport + 0x53);
-		outb(satn[7], wkport + 0x54);
-		outb(satn[8], wkport + 0x58);
-
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x1b, 0x01);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x57) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 
 try_u3:
 		j = 0;
-		outb(0x09, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x09);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0)
-				outb(u3[j++], wkport + 0x59);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, u3[j++]);
 		}
 
-		while ((inb(wkport + 0x57) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1784,12 +1784,12 @@ try_u3:
 		}
 		continue;
 u3p_out:
-		outb(0x20, wkport + 0x58);
-		while ((inb(wkport + 0x5f) & 0x80) == 0) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0)
-				outb(0, wkport + 0x59);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, 0);
 		}
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1801,19 +1801,19 @@ u3p_out:
 		}
 		continue;
 u3p_in:
-		outb(0x09, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x09);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 		k = 0;
 u3p_in1:
-		j = inb(wkport + 0x5f);
+		j = atp_readb_io(dev, 0, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = inb(wkport + 0x59);
+			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
 			goto u3p_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto u3p_in1;
 		}
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1825,14 +1825,14 @@ u3p_in1:
 		}
 		continue;
 u3p_cmd:
-		outb(0x30, wkport + 0x50);
-		outb(0x00, wkport + 0x54);
-		outb(0x08, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 		
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto u3p_out;
@@ -1856,42 +1856,42 @@ u3p_cmd:
 			continue;
 		}
 chg_wide:
-		outb(0x01, wkport + 0x5b);
-		outb(satn[0], wkport + 0x43);
-		outb(satn[1], wkport + 0x44);
-		outb(satn[2], wkport + 0x45);
-		outb(satn[3], wkport + 0x46);
-		outb(satn[4], wkport + 0x47);
-		outb(satn[5], wkport + 0x48);
-		outb(0, wkport + 0x4f);
-		outb(dev->id[0][i].devsp, wkport + 0x51);
-		outb(0, wkport + 0x52);
-		outb(satn[6], wkport + 0x53);
-		outb(satn[7], wkport + 0x54);
-		outb(satn[8], wkport + 0x58);
-
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x1b, 0x01);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 			
-		if (inb(wkport + 0x57) != 0x11 && inb(wkport + 0x57) != 0x8e)
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
-		while (inb(wkport + 0x57) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 			
 try_wide:
 		j = 0;
-		outb(0x05, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x05);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0)
-				outb(wide[j++], wkport + 0x59);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, wide[j++]);
 		}
-		while ((inb(wkport + 0x57) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 			
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1903,12 +1903,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		outb(0x20, wkport + 0x58);
-		while ((inb(wkport + 0x5f) & 0x80) == 0) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0)
-				outb(0, wkport + 0x59);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, 0, 0x19, 0);
 		}
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1920,19 +1920,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		outb(0xff, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0xff);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 		k = 0;
 widep_in1:
-		j = inb(wkport + 0x5f);
+		j = atp_readb_io(dev, 0, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = inb(wkport + 0x59);
+			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1944,14 +1944,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		outb(0x30, wkport + 0x50);
-		outb(0x00, wkport + 0x54);
-		outb(0x08, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -1996,56 +1996,56 @@ set_sync:
 		if ((m & dev->wide_id[0]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, wkport + 0x5b);
-		outb(satn[0], wkport + 0x43);
-		outb(satn[1], wkport + 0x44);
-		outb(satn[2], wkport + 0x45);
-		outb(satn[3], wkport + 0x46);
-		outb(satn[4], wkport + 0x47);
-		outb(satn[5], wkport + 0x48);
-		outb(0, wkport + 0x4f);
-		outb(dev->id[0][i].devsp, wkport + 0x51);
-		outb(0, wkport + 0x52);
-		outb(satn[6], wkport + 0x53);
-		outb(satn[7], wkport + 0x54);
-		outb(satn[8], wkport + 0x58);
-
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		atp_writeb_io(dev, 0, 0x1b, j);
+		atp_writeb_io(dev, 0, 3, satn[0]);
+		atp_writeb_io(dev, 0, 4, satn[1]);
+		atp_writeb_io(dev, 0, 5, satn[2]);
+		atp_writeb_io(dev, 0, 6, satn[3]);
+		atp_writeb_io(dev, 0, 7, satn[4]);
+		atp_writeb_io(dev, 0, 8, satn[5]);
+		atp_writeb_io(dev, 0, 0x0f, 0);
+		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
+		atp_writeb_io(dev, 0, 0x12, 0);
+		atp_writeb_io(dev, 0, 0x13, satn[6]);
+		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, 0, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if ((inb(wkport + 0x57) != 0x11) && (inb(wkport + 0x57) != 0x8e)) {
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e) {
 			continue;
 		}
-		while (inb(wkport + 0x57) != 0x8e)
+		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 
 try_sync:
 		j = 0;
-		outb(0x06, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x06);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0) {
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[0]) != 0) {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synuw[j++], wkport + 0x59);
+						atp_writeb_io(dev, 0, 0x19, synuw[j++]);
 					} else {
-						outb(synw[j++], wkport + 0x59);
+						atp_writeb_io(dev, 0, 0x19, synw[j++]);
 					}
 				} else {
 					if ((m & dev->ultra_map[0]) != 0) {
-						outb(synu[j++], wkport + 0x59);
+						atp_writeb_io(dev, 0, 0x19, synu[j++]);
 					} else {
-						outb(synn[j++], wkport + 0x59);
+						atp_writeb_io(dev, 0, 0x19, synn[j++]);
 					}
 				}
 			}
 		}
 
-		while ((inb(wkport + 0x57) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x57) & 0x0f;
+		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -2057,12 +2057,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		outb(0x20, wkport + 0x58);
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00) {
-			if ((inb(wkport + 0x5f) & 0x01) != 0x00)
-				outb(0x00, wkport + 0x59);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00) {
+			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0x00)
+				atp_writeb_io(dev, 0, 0x19, 0x00);
 		}
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2078,23 +2078,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		outb(0x06, wkport + 0x54);
-		outb(0x20, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x06);
+		atp_writeb_io(dev, 0, 0x18, 0x20);
 		k = 0;
 phase_ins1:
-		j = inb(wkport + 0x5f);
+		j = atp_readb_io(dev, 0, 0x1f);
 		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = inb(wkport + 0x59);
+			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
 
-		while ((inb(wkport + 0x57) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2110,15 +2110,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		outb(0x30, wkport + 0x50);
+		atp_writeb_io(dev, 0, 0x10, 0x30);
 tar_dcons:
-		outb(0x00, wkport + 0x54);
-		outb(0x08, wkport + 0x58);
+		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, 0, 0x18, 0x08);
 
-		while ((inb(wkport + 0x5f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = inb(wkport + 0x57);
+		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -2375,7 +2375,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is880(p, base_io);
+		is880(p);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 21/52] atp870u: Convert is885() to use wrappers
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (19 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 20/52] atp870u: Convert is880() " Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 22/52] atp870u: Unify code format in is870(), is880() and is885() Ondrej Zary
                   ` (31 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  358 ++++++++++++++++++++++++------------------------
 1 file changed, 179 insertions(+), 179 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 1b9276f..ad7af54 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -41,7 +41,7 @@
 
 static struct scsi_host_template atp870u_template;
 static void send_s870(struct atp_unit *dev,unsigned char c);
-static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c);
+static void is885(struct atp_unit *dev, unsigned char c);
 static void tscam_885(void);
 
 static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
@@ -2521,9 +2521,9 @@ flash_ok_885:
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		is885(p, base_io + 0x80, 0);
+		is885(p, 0);
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		is885(p, base_io + 0xc0, 1);
+		is885(p, 1);
 
 		k = inb(base_io + 0x28) & 0xcf;
 		k |= 0xc0;
@@ -2825,7 +2825,7 @@ static void tscam_885(void)
 
 
 
-static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c)
+static void is885(struct atp_unit *dev, unsigned char c)
 {
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
@@ -2839,7 +2839,7 @@ static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c)
 	static unsigned char wide[6] =	{0x80, 1, 2, 3, 1, 0};
 	static unsigned char u3[9] = { 0x80,1,6,4,0x09,00,0x0e,0x01,0x02 };
 
-	lvdmode=inb(wkport + 0x1b) >> 7;
+	lvdmode=atp_readb_io(dev, c, 0x1b) >> 7;
 
 	for (i = 0; i < 16; i++) {
 		m = 1;
@@ -2851,93 +2851,93 @@ static void is885(struct atp_unit *dev, unsigned int wkport,unsigned char c)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
-		outb(0x01, wkport + 0x1b);
-		outb(0x08, wkport + 0x01);
-		outb(0x7f, wkport + 0x02);
-		outb(satn[0], wkport + 0x03);
-		outb(satn[1], wkport + 0x04);
-		outb(satn[2], wkport + 0x05);
-		outb(satn[3], wkport + 0x06);
-		outb(satn[4], wkport + 0x07);
-		outb(satn[5], wkport + 0x08);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[c][i].devsp, wkport + 0x11);
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 1, 0x08);
+		atp_writeb_io(dev, c, 2, 0x7f);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
 		
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		outb(j, wkport + 0x15);
-		outb(satn[8], wkport + 0x18);
+		atp_writeb_io(dev, c, 0x15, j);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
+		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 		dev->active_id[c] |= m;
 
-		outb(0x30, wkport + 0x10);
-		outb(0x00, wkport + 0x14);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
 
 phase_cmd:
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
-			outb(0x41, wkport + 0x10);
+			atp_writeb_io(dev, c, 0x10, 0x41);
 			goto phase_cmd;
 		}
 sel_ok:
-		outb(inqd[0], wkport + 0x03);
-		outb(inqd[1], wkport + 0x04);
-		outb(inqd[2], wkport + 0x05);
-		outb(inqd[3], wkport + 0x06);
-		outb(inqd[4], wkport + 0x07);
-		outb(inqd[5], wkport + 0x08);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[c][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(inqd[6], wkport + 0x13);
-		outb(inqd[7], wkport + 0x14);
-		outb(inqd[8], wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 3, inqd[0]);
+		atp_writeb_io(dev, c, 4, inqd[1]);
+		atp_writeb_io(dev, c, 5, inqd[2]);
+		atp_writeb_io(dev, c, 6, inqd[3]);
+		atp_writeb_io(dev, c, 7, inqd[4]);
+		atp_writeb_io(dev, c, 8, inqd[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, inqd[6]);
+		atp_writeb_io(dev, c, 0x14, inqd[7]);
+		atp_writeb_io(dev, c, 0x18, inqd[8]);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
+		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
-		outb(0x00, wkport + 0x1b);
-		outb(0x08, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x1b, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
-		k = inb(wkport + 0x1f);
+		k = atp_readb_io(dev, c, 0x1f);
 		if ((k & 0x01) != 0) {
-			mbuf[j++] = inb(wkport + 0x19);
+			mbuf[j++] = atp_readb_io(dev, c, 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		outb(0x46, wkport + 0x10);
-		outb(0, wkport + 0x12);
-		outb(0, wkport + 0x13);
-		outb(0, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x10, 0x46);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, 0);
+		atp_writeb_io(dev, c, 0x14, 0);
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if (inb(wkport + 0x17) != 0x16) {
+		if (atp_readb_io(dev, c, 0x17) != 0x16) {
 			goto sel_ok;
 		}
 inq_ok:
@@ -2959,40 +2959,40 @@ inq_ok:
 		   goto chg_wide;
 		}
 
-		outb(0x01, wkport + 0x1b);
-		outb(satn[0], wkport + 0x03);
-		outb(satn[1], wkport + 0x04);
-		outb(satn[2], wkport + 0x05);
-		outb(satn[3], wkport + 0x06);
-		outb(satn[4], wkport + 0x07);
-		outb(satn[5], wkport + 0x08);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[c][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
-		outb(satn[8], wkport + 0x18);
-
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
+		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 try_u3:
 		j = 0;
-		outb(0x09, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0x09);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(u3[j++], wkport + 0x19);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, u3[j++]);
 			cpu_relax();
 		}
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3004,13 +3004,13 @@ try_u3:
 		}
 		continue;
 u3p_out:
-		outb(0x20, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(0, wkport + 0x19);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, 0);
 			cpu_relax();
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3022,19 +3022,19 @@ u3p_out:
 		}
 		continue;
 u3p_in:
-		outb(0x09, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0x09);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 u3p_in1:
-		j = inb(wkport + 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = inb(wkport + 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto u3p_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto u3p_in1;
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -3046,11 +3046,11 @@ u3p_in1:
 		}
 		continue;
 u3p_cmd:
-		outb(0x30, wkport + 0x10);
-		outb(0x00, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00);
-		j = inb(wkport + 0x17);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto u3p_out;
@@ -3077,40 +3077,40 @@ u3p_cmd:
 			continue;
 		}
 chg_wide:
-		outb(0x01, wkport + 0x1b);
-		outb(satn[0], wkport + 0x03);
-		outb(satn[1], wkport + 0x04);
-		outb(satn[2], wkport + 0x05);
-		outb(satn[3], wkport + 0x06);
-		outb(satn[4], wkport + 0x07);
-		outb(satn[5], wkport + 0x08);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[c][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
-		outb(satn[8], wkport + 0x18);
-
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
+		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 try_wide:
 		j = 0;
-		outb(0x05, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0x05);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(wide[j++], wkport + 0x19);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, wide[j++]);
 			cpu_relax();
 		}
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3122,13 +3122,13 @@ try_wide:
 		}
 		continue;
 widep_out:
-		outb(0x20, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0)
-				outb(0, wkport + 0x19);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, 0);
 			cpu_relax();
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3140,19 +3140,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		outb(0xff, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0xff);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 widep_in1:
-		j = inb(wkport + 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = inb(wkport + 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -3164,12 +3164,12 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		outb(0x30, wkport + 0x10);
-		outb(0x00, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -3215,52 +3215,52 @@ set_sync:
 		if ((m & dev->wide_id[c]) != 0) {
 			j |= 0x01;
 		}
-		outb(j, wkport + 0x1b);
-		outb(satn[0], wkport + 0x03);
-		outb(satn[1], wkport + 0x04);
-		outb(satn[2], wkport + 0x05);
-		outb(satn[3], wkport + 0x06);
-		outb(satn[4], wkport + 0x07);
-		outb(satn[5], wkport + 0x08);
-		outb(0, wkport + 0x0f);
-		outb(dev->id[c][i].devsp, wkport + 0x11);
-		outb(0, wkport + 0x12);
-		outb(satn[6], wkport + 0x13);
-		outb(satn[7], wkport + 0x14);
-		outb(satn[8], wkport + 0x18);
-
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x1b, j);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
+
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((inb(wkport + 0x17) != 0x11) && (inb(wkport + 0x17) != 0x8e)) {
+		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
 			continue;
 		}
-		while (inb(wkport + 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 try_sync:
 		j = 0;
-		outb(0x06, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0x06);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((inb(wkport + 0x1f) & 0x80) == 0) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0) {
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[c]) != 0) {
 					if ((m & dev->ultra_map[c]) != 0) {
-						outb(synuw[j++], wkport + 0x19);
+						atp_writeb_io(dev, c, 0x19, synuw[j++]);
 					} else {
-						outb(synw[j++], wkport + 0x19);
+						atp_writeb_io(dev, c, 0x19, synw[j++]);
 					}
 				} else {
 					if ((m & dev->ultra_map[c]) != 0) {
-						outb(synu[j++], wkport + 0x19);
+						atp_writeb_io(dev, c, 0x19, synu[j++]);
 					} else {
-						outb(synn[j++], wkport + 0x19);
+						atp_writeb_io(dev, c, 0x19, synn[j++]);
 					}
 				}
 			}
 		}
-		while ((inb(wkport + 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -3272,13 +3272,13 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		outb(0x20, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00) {
-			if ((inb(wkport + 0x1f) & 0x01) != 0x00)
-				outb(0x00, wkport + 0x19);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00)
+				atp_writeb_io(dev, c, 0x19, 0x00);
 			cpu_relax();
 		}
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -3294,20 +3294,20 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		outb(0x06, wkport + 0x14);
-		outb(0x20, wkport + 0x18);
+		atp_writeb_io(dev, c, 0x14, 0x06);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 phase_ins1:
-		j = inb(wkport + 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = inb(wkport + 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
-		while ((inb(wkport + 0x17) & 0x80) == 0x00);
-		j = inb(wkport + 0x17);
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -3323,13 +3323,13 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		outb(0x30, wkport + 0x10);
+		atp_writeb_io(dev, c, 0x10, 0x30);
 tar_dcons:
-		outb(0x00, wkport + 0x14);
-		outb(0x08, wkport + 0x18);
-		while ((inb(wkport + 0x1f) & 0x80) == 0x00)
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		j = inb(wkport + 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -3376,7 +3376,7 @@ tar_dcons:
 		printk("dev->id[%2d][%2d].devsp = %2x\n",c,i,dev->id[c][i].devsp);
 #endif
 	}
-	outb(0x80, wkport + 0x16);
+	atp_writeb_io(dev, c, 0x16, 0x80);
 }
 
 module_init(atp870u_init);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 22/52] atp870u: Unify code format in is870(), is880() and is885()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (20 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 21/52] atp870u: Convert is885() " Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:23 ` [PATCH 23/52] atp870u: Add channel parameter to is870() and is880() Ondrej Zary
                   ` (30 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Unify code formatting in is870(), is880() and is885() functions to simplify
comparing them.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  170 ++++++++++++++++++++++++++++--------------------
 1 file changed, 101 insertions(+), 69 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index ad7af54..595c5c5 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1173,7 +1173,7 @@ static void is870(struct atp_unit *dev)
 	static unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0c, 0x0e };
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
-	
+
 	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) | 0x10);
 
 	for (i = 0; i < 16; i++) {
@@ -1230,8 +1230,10 @@ static void is870(struct atp_unit *dev)
 
 phase_cmd:
 		atp_writeb_io(dev, 0, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			atp_writeb_io(dev, 0, 0x10, 0x41);
@@ -1253,13 +1255,13 @@ sel_ok:
 
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 		if (dev->chip_ver == 4)
 			atp_writeb_io(dev, 0, 0x1b, 0x00);
 
@@ -1286,10 +1288,10 @@ rd_inq_data:
 
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
-		if (atp_readb_io(dev, 0, 0x17) != 0x16) {
+
+		if (atp_readb_io(dev, 0, 0x17) != 0x16)
 			goto sel_ok;
-		}
+
 inq_ok:
 		mbuf[36] = 0;
 		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
@@ -1321,13 +1323,13 @@ inq_ok:
 
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 try_wide:
 		j = 0;
 		atp_writeb_io(dev, 0, 0x14, 0x05);
@@ -1337,10 +1339,10 @@ try_wide:
 			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
 				atp_writeb_io(dev, 0, 0x19, wide[j++]);
 		}
-		
+
 		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
@@ -1449,13 +1451,13 @@ set_sync:
 
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 try_sync:
 		j = 0;
 		atp_writeb_io(dev, 0, 0x14, 0x06);
@@ -1474,10 +1476,10 @@ try_sync:
 				}
 			}
 		}
-		
+
 		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
@@ -1526,7 +1528,7 @@ phase_ins1:
 
 		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
@@ -1547,10 +1549,10 @@ phase_cmds:
 tar_dcons:
 		atp_writeb_io(dev, 0, 0x14, 0x00);
 		atp_writeb_io(dev, 0, 0x18, 0x08);
-		
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			continue;
@@ -1649,7 +1651,7 @@ static void is880(struct atp_unit *dev)
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 		dev->active_id[0] |= m;
 
 		atp_writeb_io(dev, 0, 0x10, 0x30);
@@ -1657,7 +1659,7 @@ static void is880(struct atp_unit *dev)
 
 phase_cmd:
 		atp_writeb_io(dev, 0, 0x18, 0x08);
-		
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
@@ -1679,16 +1681,16 @@ sel_ok:
 		atp_writeb_io(dev, 0, 0x13, inqd[6]);
 		atp_writeb_io(dev, 0, 0x14, inqd[7]);
 		atp_writeb_io(dev, 0, 0x18, inqd[8]);
-		
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 		atp_writeb_io(dev, 0, 0x1b, 0x00);
 		atp_writeb_io(dev, 0, 0x18, 0x08);
 		j = 0;
@@ -1710,9 +1712,10 @@ rd_inq_data:
 		atp_writeb_io(dev, 0, 0x13, 0);
 		atp_writeb_io(dev, 0, 0x14, 0);
 		atp_writeb_io(dev, 0, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x16)
 			goto sel_ok;
 
@@ -1771,7 +1774,7 @@ try_u3:
 
 		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
@@ -1828,10 +1831,10 @@ u3p_cmd:
 		atp_writeb_io(dev, 0, 0x10, 0x30);
 		atp_writeb_io(dev, 0, 0x14, 0x00);
 		atp_writeb_io(dev, 0, 0x18, 0x08);
-		
+
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
@@ -1872,13 +1875,13 @@ chg_wide:
 
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
 
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
-			
+
 try_wide:
 		j = 0;
 		atp_writeb_io(dev, 0, 0x14, 0x05);
@@ -1888,9 +1891,10 @@ try_wide:
 			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
 				atp_writeb_io(dev, 0, 0x19, wide[j++]);
 		}
+
 		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
 			cpu_relax();
-			
+
 		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
@@ -2013,9 +2017,9 @@ set_sync:
 		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e) {
+		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
 			cpu_relax();
 
@@ -2830,16 +2834,16 @@ static void is885(struct atp_unit *dev, unsigned char c)
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
 	static unsigned char mbuf[512];
-	static unsigned char satn[9] =	{0, 0, 0, 0, 0, 0, 0, 6, 6};
-	static unsigned char inqd[9] =	{0x12, 0, 0, 0, 0x24, 0, 0, 0x24, 6};
-	static unsigned char synn[6] =	{0x80, 1, 3, 1, 0x19, 0x0e};
-	unsigned char synu[6] =  {0x80, 1, 3, 1, 0x0a, 0x0e};
-	static unsigned char synw[6] =	{0x80, 1, 3, 1, 0x19, 0x0e};
-	unsigned char synuw[6] =  {0x80, 1, 3, 1, 0x0a, 0x0e};
-	static unsigned char wide[6] =	{0x80, 1, 2, 3, 1, 0};
-	static unsigned char u3[9] = { 0x80,1,6,4,0x09,00,0x0e,0x01,0x02 };
+	static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 };
+	static unsigned char inqd[9] = { 0x12, 0, 0, 0, 0x24, 0, 0, 0x24, 6 };
+	static unsigned char synn[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
+	unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
+	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
+	unsigned char synuw[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
+	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
+	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
 
-	lvdmode=atp_readb_io(dev, c, 0x1b) >> 7;
+	lvdmode = atp_readb_io(dev, c, 0x1b) >> 7;
 
 	for (i = 0; i < 16; i++) {
 		m = 1;
@@ -2862,7 +2866,6 @@ static void is885(struct atp_unit *dev, unsigned char c)
 		atp_writeb_io(dev, c, 8, satn[5]);
 		atp_writeb_io(dev, c, 0x0f, 0);
 		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		
 		atp_writeb_io(dev, c, 0x12, 0);
 		atp_writeb_io(dev, c, 0x13, satn[6]);
 		atp_writeb_io(dev, c, 0x14, satn[7]);
@@ -2875,11 +2878,13 @@ static void is885(struct atp_unit *dev, unsigned char c)
 
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
+
 		dev->active_id[c] |= m;
 
 		atp_writeb_io(dev, c, 0x10, 0x30);
@@ -2887,8 +2892,10 @@ static void is885(struct atp_unit *dev, unsigned char c)
 
 phase_cmd:
 		atp_writeb_io(dev, c, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			atp_writeb_io(dev, c, 0x10, 0x41);
@@ -2907,13 +2914,16 @@ sel_ok:
 		atp_writeb_io(dev, c, 0x13, inqd[6]);
 		atp_writeb_io(dev, c, 0x14, inqd[7]);
 		atp_writeb_io(dev, c, 0x18, inqd[8]);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
+
 		atp_writeb_io(dev, c, 0x1b, 0x00);
 		atp_writeb_io(dev, c, 0x18, 0x08);
 		j = 0;
@@ -2935,14 +2945,16 @@ rd_inq_data:
 		atp_writeb_io(dev, c, 0x13, 0);
 		atp_writeb_io(dev, c, 0x14, 0);
 		atp_writeb_io(dev, c, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if (atp_readb_io(dev, c, 0x17) != 0x16) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x16)
 			goto sel_ok;
-		}
+
 inq_ok:
 		mbuf[36] = 0;
-		printk( KERN_INFO"         ID: %2d  %s\n", i, &mbuf[8]);
+		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
 		dev->id[c][i].devtype = mbuf[0];
 		rmb = mbuf[1];
 		n = mbuf[7];
@@ -2953,10 +2965,11 @@ inq_ok:
 			goto not_wide;
 		}
 		if (lvdmode == 0) {
-		   goto chg_wide;
+			goto chg_wide;
 		}
-		if (dev->sp[c][i] != 0x04) {	// force u2
-		   goto chg_wide;
+		if (dev->sp[c][i] != 0x04)	// force u2
+		{
+			goto chg_wide;
 		}
 
 		atp_writeb_io(dev, c, 0x1b, 0x01);
@@ -2975,11 +2988,13 @@ inq_ok:
 
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
+
 try_u3:
 		j = 0;
 		atp_writeb_io(dev, c, 0x14, 0x09);
@@ -2990,8 +3005,10 @@ try_u3:
 				atp_writeb_io(dev, c, 0x19, u3[j++]);
 			cpu_relax();
 		}
+
 		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
@@ -3049,7 +3066,9 @@ u3p_cmd:
 		atp_writeb_io(dev, c, 0x10, 0x30);
 		atp_writeb_io(dev, c, 0x14, 0x00);
 		atp_writeb_io(dev, c, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00);
+
 		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
@@ -3093,11 +3112,13 @@ chg_wide:
 
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
+
 try_wide:
 		j = 0;
 		atp_writeb_io(dev, c, 0x14, 0x05);
@@ -3108,8 +3129,10 @@ try_wide:
 				atp_writeb_io(dev, c, 0x19, wide[j++]);
 			cpu_relax();
 		}
+
 		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
@@ -3167,8 +3190,10 @@ widep_cmd:
 		atp_writeb_io(dev, c, 0x10, 0x30);
 		atp_writeb_io(dev, c, 0x14, 0x00);
 		atp_writeb_io(dev, c, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
@@ -3192,24 +3217,23 @@ widep_cmd:
 		m = m << i;
 		dev->wide_id[c] |= m;
 not_wide:
-		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) ||
-		    ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
+		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) || ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
 			m = 1;
 			m = m << i;
 			if ((dev->async[c] & m) != 0) {
-			   goto set_sync;
+				goto set_sync;
 			}
 		}
 		continue;
 set_sync:
 		if (dev->sp[c][i] == 0x02) {
-		   synu[4]=0x0c;
-		   synuw[4]=0x0c;
+			synu[4] = 0x0c;
+			synuw[4] = 0x0c;
 		} else {
-		   if (dev->sp[c][i] >= 0x03) {
-		      synu[4]=0x0a;
-		      synuw[4]=0x0a;
-		   }
+			if (dev->sp[c][i] >= 0x03) {
+				synu[4] = 0x0a;
+				synuw[4] = 0x0a;
+			}
 		}
 		j = 0;
 		if ((m & dev->wide_id[c]) != 0) {
@@ -3231,11 +3255,13 @@ set_sync:
 
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
-		if ((atp_readb_io(dev, c, 0x17) != 0x11) && (atp_readb_io(dev, c, 0x17) != 0x8e)) {
+
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
-		}
+
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
+
 try_sync:
 		j = 0;
 		atp_writeb_io(dev, c, 0x14, 0x06);
@@ -3258,8 +3284,10 @@ try_sync:
 				}
 			}
 		}
+
 		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
@@ -3306,7 +3334,9 @@ phase_ins1:
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
+
 		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00);
+
 		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
@@ -3327,8 +3357,10 @@ phase_cmds:
 tar_dcons:
 		atp_writeb_io(dev, c, 0x14, 0x00);
 		atp_writeb_io(dev, c, 0x18, 0x08);
+
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
+
 		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			continue;
@@ -3349,7 +3381,7 @@ tar_dcons:
 			mbuf[4] = 0x0e;
 		}
 		dev->id[c][i].devsp = mbuf[4];
-		if (mbuf[3] < 0x0c){
+		if (mbuf[3] < 0x0c) {
 			j = 0xb0;
 			goto set_syn_ok;
 		}
@@ -3370,9 +3402,9 @@ tar_dcons:
 			goto set_syn_ok;
 		}
 		j = 0x60;
-	      set_syn_ok:
+set_syn_ok:
 		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
-#ifdef ED_DBGP		
+#ifdef ED_DBGP
 		printk("dev->id[%2d][%2d].devsp = %2x\n",c,i,dev->id[c][i].devsp);
 #endif
 	}
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 23/52] atp870u: Add channel parameter to is870() and is880()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (21 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 22/52] atp870u: Unify code format in is870(), is880() and is885() Ondrej Zary
@ 2015-11-17 18:23 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 24/52] atp870u: Move chip-specific lines out of is880() and is885() Ondrej Zary
                   ` (29 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:23 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Add channel parameter to is870() and is880() functions to simplify comparing
them with is885().

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  684 ++++++++++++++++++++++++------------------------
 1 file changed, 342 insertions(+), 342 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 595c5c5..ec61902 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1162,7 +1162,7 @@ static void tscam(struct Scsi_Host *host)
 	}
 }
 
-static void is870(struct atp_unit *dev)
+static void is870(struct atp_unit *dev, unsigned char c)
 {
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
@@ -1174,7 +1174,7 @@ static void is870(struct atp_unit *dev)
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 
-	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) | 0x10);
+	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) | 0x10);
 
 	for (i = 0; i < 16; i++) {
 		if ((dev->chip_ver != 4) && (i > 7)) {
@@ -1182,120 +1182,120 @@ static void is870(struct atp_unit *dev)
 		}
 		m = 1;
 		m = m << i;
-		if ((m & dev->active_id[0]) != 0) {
+		if ((m & dev->active_id[c]) != 0) {
 			continue;
 		}
-		if (i == dev->host_id[0]) {
-			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[0]);
+		if (i == dev->host_id[c]) {
+			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
 		if (dev->chip_ver == 4) {
-			atp_writeb_io(dev, 0, 0x1b, 0x01);
+			atp_writeb_io(dev, c, 0x1b, 0x01);
 		} else {
-			atp_writeb_io(dev, 0, 0x1b, 0x00);
+			atp_writeb_io(dev, c, 0x1b, 0x00);
 		}
-		atp_writeb_io(dev, 0, 1, 0x08);
-		atp_writeb_io(dev, 0, 2, 0x7f);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 1, 0x08);
+		atp_writeb_io(dev, c, 2, 0x7f);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		atp_writeb_io(dev, 0, 0x15, j);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x15, j);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
-		dev->active_id[0] |= m;
+		dev->active_id[c] |= m;
 
-		atp_writeb_io(dev, 0, 0x10, 0x30);
-		atp_writeb_io(dev, 0, 0x04, 0x00);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x04, 0x00);
 
 phase_cmd:
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
-			atp_writeb_io(dev, 0, 0x10, 0x41);
+			atp_writeb_io(dev, c, 0x10, 0x41);
 			goto phase_cmd;
 		}
 sel_ok:
-		atp_writeb_io(dev, 0, 3, inqd[0]);
-		atp_writeb_io(dev, 0, 4, inqd[1]);
-		atp_writeb_io(dev, 0, 5, inqd[2]);
-		atp_writeb_io(dev, 0, 6, inqd[3]);
-		atp_writeb_io(dev, 0, 7, inqd[4]);
-		atp_writeb_io(dev, 0, 8, inqd[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, inqd[6]);
-		atp_writeb_io(dev, 0, 0x14, inqd[7]);
-		atp_writeb_io(dev, 0, 0x18, inqd[8]);
+		atp_writeb_io(dev, c, 3, inqd[0]);
+		atp_writeb_io(dev, c, 4, inqd[1]);
+		atp_writeb_io(dev, c, 5, inqd[2]);
+		atp_writeb_io(dev, c, 6, inqd[3]);
+		atp_writeb_io(dev, c, 7, inqd[4]);
+		atp_writeb_io(dev, c, 8, inqd[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, inqd[6]);
+		atp_writeb_io(dev, c, 0x14, inqd[7]);
+		atp_writeb_io(dev, c, 0x18, inqd[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 		if (dev->chip_ver == 4)
-			atp_writeb_io(dev, 0, 0x1b, 0x00);
+			atp_writeb_io(dev, c, 0x1b, 0x00);
 
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
-		k = atp_readb_io(dev, 0, 0x1f);
+		k = atp_readb_io(dev, c, 0x1f);
 		if ((k & 0x01) != 0) {
-			mbuf[j++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[j++] = atp_readb_io(dev, c, 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		atp_writeb_io(dev, 0, 0x10, 0x46);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, 0);
-		atp_writeb_io(dev, 0, 0x14, 0);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x10, 0x46);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, 0);
+		atp_writeb_io(dev, c, 0x14, 0);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x16)
+		if (atp_readb_io(dev, c, 0x17) != 0x16)
 			goto sel_ok;
 
 inq_ok:
 		mbuf[36] = 0;
 		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
-		dev->id[0][i].devtype = mbuf[0];
+		dev->id[c][i].devtype = mbuf[0];
 		rmb = mbuf[1];
 		n = mbuf[7];
 		if (dev->chip_ver != 4) {
@@ -1304,46 +1304,46 @@ inq_ok:
 		if ((mbuf[7] & 0x60) == 0) {
 			goto not_wide;
 		}
-		if ((dev->global_map[0] & 0x20) == 0) {
+		if ((dev->global_map[c] & 0x20) == 0) {
 			goto not_wide;
 		}
-		atp_writeb_io(dev, 0, 0x1b, 0x01);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 try_wide:
 		j = 0;
-		atp_writeb_io(dev, 0, 0x14, 0x05);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x05);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, wide[j++]);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, wide[j++]);
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1355,12 +1355,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, 0);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, 0);
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1372,19 +1372,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		atp_writeb_io(dev, 0, 0x14, 0xff);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0xff);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 widep_in1:
-		j = atp_readb_io(dev, 0, 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1396,14 +1396,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		atp_writeb_io(dev, 0, 0x10, 0x30);
-		atp_writeb_io(dev, 0, 0x14, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -1424,63 +1424,63 @@ widep_cmd:
 		}
 		m = 1;
 		m = m << i;
-		dev->wide_id[0] |= m;
+		dev->wide_id[c] |= m;
 not_wide:
-		if ((dev->id[0][i].devtype == 0x00) || (dev->id[0][i].devtype == 0x07) || ((dev->id[0][i].devtype == 0x05) && ((n & 0x10) != 0))) {
+		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) || ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
 			goto set_sync;
 		}
 		continue;
 set_sync:
 		j = 0;
-		if ((m & dev->wide_id[0]) != 0) {
+		if ((m & dev->wide_id[c]) != 0) {
 			j |= 0x01;
 		}
-		atp_writeb_io(dev, 0, 0x1b, j);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x1b, j);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 try_sync:
 		j = 0;
-		atp_writeb_io(dev, 0, 0x14, 0x06);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x06);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0) {
-				if ((m & dev->wide_id[0]) != 0) {
-					atp_writeb_io(dev, 0, 0x19, synw[j++]);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
+				if ((m & dev->wide_id[c]) != 0) {
+					atp_writeb_io(dev, c, 0x19, synw[j++]);
 				} else {
-					if ((m & dev->ultra_map[0]) != 0) {
-						atp_writeb_io(dev, 0, 0x19, synu[j++]);
+					if ((m & dev->ultra_map[c]) != 0) {
+						atp_writeb_io(dev, c, 0x19, synu[j++]);
 					} else {
-						atp_writeb_io(dev, 0, 0x19, synn[j++]);
+						atp_writeb_io(dev, c, 0x19, synn[j++]);
 					}
 				}
 			}
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -1492,12 +1492,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0x00)
-				atp_writeb_io(dev, 0, 0x19, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00)
+				atp_writeb_io(dev, c, 0x19, 0x00);
 		}
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1513,23 +1513,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		atp_writeb_io(dev, 0, 0x14, 0xff);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0xff);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 phase_ins1:
-		j = atp_readb_io(dev, 0, 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -1545,15 +1545,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x10, 0x30);
 tar_dcons:
-		atp_writeb_io(dev, 0, 0x14, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -1572,7 +1572,7 @@ tar_dcons:
 		if (mbuf[4] > 0x0c) {
 			mbuf[4] = 0x0c;
 		}
-		dev->id[0][i].devsp = mbuf[4];
+		dev->id[c][i].devsp = mbuf[4];
 		if ((mbuf[3] < 0x0d) && (rmb == 0)) {
 			j = 0xa0;
 			goto set_syn_ok;
@@ -1591,12 +1591,12 @@ tar_dcons:
 		}
 		j = 0x60;
 set_syn_ok:
-		dev->id[0][i].devsp = (dev->id[0][i].devsp & 0x0f) | j;
+		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
 	}
-	atp_writeb_io(dev, 0, 0x3a, atp_readb_io(dev, 0, 0x3a) & 0xef);
+	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xef);
 }
 
-static void is880(struct atp_unit *dev)
+static void is880(struct atp_unit *dev, unsigned char c)
 {
 	unsigned char i, j, k, rmb, n, lvdmode;
 	unsigned short int m;
@@ -1615,167 +1615,167 @@ static void is880(struct atp_unit *dev)
 	for (i = 0; i < 16; i++) {
 		m = 1;
 		m = m << i;
-		if ((m & dev->active_id[0]) != 0) {
+		if ((m & dev->active_id[c]) != 0) {
 			continue;
 		}
-		if (i == dev->host_id[0]) {
-			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[0]);
+		if (i == dev->host_id[c]) {
+			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
-		atp_writeb_io(dev, 0, 0x1b, 0x01);
-		atp_writeb_io(dev, 0, 1, 0x08);
-		atp_writeb_io(dev, 0, 2, 0x7f);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 1, 0x08);
+		atp_writeb_io(dev, c, 2, 0x7f);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
 		j = i;
 		if ((j & 0x08) != 0) {
 			j = (j & 0x07) | 0x40;
 		}
-		atp_writeb_io(dev, 0, 0x15, j);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x15, j);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
-		dev->active_id[0] |= m;
+		dev->active_id[c] |= m;
 
-		atp_writeb_io(dev, 0, 0x10, 0x30);
-		atp_writeb_io(dev, 0, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
 
 phase_cmd:
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
-			atp_writeb_io(dev, 0, 0x10, 0x41);
+			atp_writeb_io(dev, c, 0x10, 0x41);
 			goto phase_cmd;
 		}
 sel_ok:
-		atp_writeb_io(dev, 0, 3, inqd[0]);
-		atp_writeb_io(dev, 0, 4, inqd[1]);
-		atp_writeb_io(dev, 0, 5, inqd[2]);
-		atp_writeb_io(dev, 0, 6, inqd[3]);
-		atp_writeb_io(dev, 0, 7, inqd[4]);
-		atp_writeb_io(dev, 0, 8, inqd[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, inqd[6]);
-		atp_writeb_io(dev, 0, 0x14, inqd[7]);
-		atp_writeb_io(dev, 0, 0x18, inqd[8]);
+		atp_writeb_io(dev, c, 3, inqd[0]);
+		atp_writeb_io(dev, c, 4, inqd[1]);
+		atp_writeb_io(dev, c, 5, inqd[2]);
+		atp_writeb_io(dev, c, 6, inqd[3]);
+		atp_writeb_io(dev, c, 7, inqd[4]);
+		atp_writeb_io(dev, c, 8, inqd[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, inqd[6]);
+		atp_writeb_io(dev, c, 0x14, inqd[7]);
+		atp_writeb_io(dev, c, 0x18, inqd[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
-		atp_writeb_io(dev, 0, 0x1b, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x1b, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
-		k = atp_readb_io(dev, 0, 0x1f);
+		k = atp_readb_io(dev, c, 0x1f);
 		if ((k & 0x01) != 0) {
-			mbuf[j++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[j++] = atp_readb_io(dev, c, 0x19);
 			goto rd_inq_data;
 		}
 		if ((k & 0x80) == 0) {
 			goto rd_inq_data;
 		}
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x16) {
 			goto inq_ok;
 		}
-		atp_writeb_io(dev, 0, 0x10, 0x46);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, 0);
-		atp_writeb_io(dev, 0, 0x14, 0);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x10, 0x46);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, 0);
+		atp_writeb_io(dev, c, 0x14, 0);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x16)
+		if (atp_readb_io(dev, c, 0x17) != 0x16)
 			goto sel_ok;
 
 inq_ok:
 		mbuf[36] = 0;
 		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
-		dev->id[0][i].devtype = mbuf[0];
+		dev->id[c][i].devtype = mbuf[0];
 		rmb = mbuf[1];
 		n = mbuf[7];
 		if ((mbuf[7] & 0x60) == 0) {
 			goto not_wide;
 		}
-		if ((i < 8) && ((dev->global_map[0] & 0x20) == 0)) {
+		if ((i < 8) && ((dev->global_map[c] & 0x20) == 0)) {
 			goto not_wide;
 		}
 		if (lvdmode == 0) {
 			goto chg_wide;
 		}
-		if (dev->sp[0][i] != 0x04)	// force u2
+		if (dev->sp[c][i] != 0x04)	// force u2
 		{
 			goto chg_wide;
 		}
 
-		atp_writeb_io(dev, 0, 0x1b, 0x01);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 try_u3:
 		j = 0;
-		atp_writeb_io(dev, 0, 0x14, 0x09);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x09);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, u3[j++]);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, u3[j++]);
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1787,12 +1787,12 @@ try_u3:
 		}
 		continue;
 u3p_out:
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, 0);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, 0);
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1804,19 +1804,19 @@ u3p_out:
 		}
 		continue;
 u3p_in:
-		atp_writeb_io(dev, 0, 0x14, 0x09);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x09);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 u3p_in1:
-		j = atp_readb_io(dev, 0, 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto u3p_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto u3p_in1;
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto u3p_in;
 		}
@@ -1828,14 +1828,14 @@ u3p_in1:
 		}
 		continue;
 u3p_cmd:
-		atp_writeb_io(dev, 0, 0x10, 0x30);
-		atp_writeb_io(dev, 0, 0x14, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto u3p_out;
@@ -1854,48 +1854,48 @@ u3p_cmd:
 		if (mbuf[3] == 0x09) {
 			m = 1;
 			m = m << i;
-			dev->wide_id[0] |= m;
-			dev->id[0][i].devsp = 0xce;
+			dev->wide_id[c] |= m;
+			dev->id[c][i].devsp = 0xce;
 			continue;
 		}
 chg_wide:
-		atp_writeb_io(dev, 0, 0x1b, 0x01);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 try_wide:
 		j = 0;
-		atp_writeb_io(dev, 0, 0x14, 0x05);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x05);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, wide[j++]);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, wide[j++]);
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1907,12 +1907,12 @@ try_wide:
 		}
 		continue;
 widep_out:
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, 0, 0x19, 0);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
+				atp_writeb_io(dev, c, 0x19, 0);
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1924,19 +1924,19 @@ widep_out:
 		}
 		continue;
 widep_in:
-		atp_writeb_io(dev, 0, 0x14, 0xff);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0xff);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 widep_in1:
-		j = atp_readb_io(dev, 0, 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto widep_in1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto widep_in1;
 		}
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto widep_in;
 		}
@@ -1948,14 +1948,14 @@ widep_in1:
 		}
 		continue;
 widep_cmd:
-		atp_writeb_io(dev, 0, 0x10, 0x30);
-		atp_writeb_io(dev, 0, 0x14, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			if (j == 0x4e) {
 				goto widep_out;
@@ -1976,80 +1976,80 @@ widep_cmd:
 		}
 		m = 1;
 		m = m << i;
-		dev->wide_id[0] |= m;
+		dev->wide_id[c] |= m;
 not_wide:
-		if ((dev->id[0][i].devtype == 0x00) || (dev->id[0][i].devtype == 0x07) || ((dev->id[0][i].devtype == 0x05) && ((n & 0x10) != 0))) {
+		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) || ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
 			m = 1;
 			m = m << i;
-			if ((dev->async[0] & m) != 0) {
+			if ((dev->async[c] & m) != 0) {
 				goto set_sync;
 			}
 		}
 		continue;
 set_sync:
-		if (dev->sp[0][i] == 0x02) {
+		if (dev->sp[c][i] == 0x02) {
 			synu[4] = 0x0c;
 			synuw[4] = 0x0c;
 		} else {
-			if (dev->sp[0][i] >= 0x03) {
+			if (dev->sp[c][i] >= 0x03) {
 				synu[4] = 0x0a;
 				synuw[4] = 0x0a;
 			}
 		}
 		j = 0;
-		if ((m & dev->wide_id[0]) != 0) {
+		if ((m & dev->wide_id[c]) != 0) {
 			j |= 0x01;
 		}
-		atp_writeb_io(dev, 0, 0x1b, j);
-		atp_writeb_io(dev, 0, 3, satn[0]);
-		atp_writeb_io(dev, 0, 4, satn[1]);
-		atp_writeb_io(dev, 0, 5, satn[2]);
-		atp_writeb_io(dev, 0, 6, satn[3]);
-		atp_writeb_io(dev, 0, 7, satn[4]);
-		atp_writeb_io(dev, 0, 8, satn[5]);
-		atp_writeb_io(dev, 0, 0x0f, 0);
-		atp_writeb_io(dev, 0, 0x11, dev->id[0][i].devsp);
-		atp_writeb_io(dev, 0, 0x12, 0);
-		atp_writeb_io(dev, 0, 0x13, satn[6]);
-		atp_writeb_io(dev, 0, 0x14, satn[7]);
-		atp_writeb_io(dev, 0, 0x18, satn[8]);
+		atp_writeb_io(dev, c, 0x1b, j);
+		atp_writeb_io(dev, c, 3, satn[0]);
+		atp_writeb_io(dev, c, 4, satn[1]);
+		atp_writeb_io(dev, c, 5, satn[2]);
+		atp_writeb_io(dev, c, 6, satn[3]);
+		atp_writeb_io(dev, c, 7, satn[4]);
+		atp_writeb_io(dev, c, 8, satn[5]);
+		atp_writeb_io(dev, c, 0x0f, 0);
+		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
+		atp_writeb_io(dev, c, 0x12, 0);
+		atp_writeb_io(dev, c, 0x13, satn[6]);
+		atp_writeb_io(dev, c, 0x14, satn[7]);
+		atp_writeb_io(dev, c, 0x18, satn[8]);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		if (atp_readb_io(dev, 0, 0x17) != 0x11 && atp_readb_io(dev, 0, 0x17) != 0x8e)
+		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
 			continue;
 
-		while (atp_readb_io(dev, 0, 0x17) != 0x8e)
+		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
 try_sync:
 		j = 0;
-		atp_writeb_io(dev, 0, 0x14, 0x06);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0) {
-				if ((m & dev->wide_id[0]) != 0) {
-					if ((m & dev->ultra_map[0]) != 0) {
-						atp_writeb_io(dev, 0, 0x19, synuw[j++]);
+		atp_writeb_io(dev, c, 0x14, 0x06);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
+				if ((m & dev->wide_id[c]) != 0) {
+					if ((m & dev->ultra_map[c]) != 0) {
+						atp_writeb_io(dev, c, 0x19, synuw[j++]);
 					} else {
-						atp_writeb_io(dev, 0, 0x19, synw[j++]);
+						atp_writeb_io(dev, c, 0x19, synw[j++]);
 					}
 				} else {
-					if ((m & dev->ultra_map[0]) != 0) {
-						atp_writeb_io(dev, 0, 0x19, synu[j++]);
+					if ((m & dev->ultra_map[c]) != 0) {
+						atp_writeb_io(dev, c, 0x19, synu[j++]);
 					} else {
-						atp_writeb_io(dev, 0, 0x19, synn[j++]);
+						atp_writeb_io(dev, c, 0x19, synn[j++]);
 					}
 				}
 			}
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17) & 0x0f;
+		j = atp_readb_io(dev, c, 0x17) & 0x0f;
 		if (j == 0x0f) {
 			goto phase_ins;
 		}
@@ -2061,12 +2061,12 @@ try_sync:
 		}
 		continue;
 phase_outs:
-		atp_writeb_io(dev, 0, 0x18, 0x20);
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00) {
-			if ((atp_readb_io(dev, 0, 0x1f) & 0x01) != 0x00)
-				atp_writeb_io(dev, 0, 0x19, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x20);
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) {
+			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00)
+				atp_writeb_io(dev, c, 0x19, 0x00);
 		}
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2082,23 +2082,23 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		atp_writeb_io(dev, 0, 0x14, 0x06);
-		atp_writeb_io(dev, 0, 0x18, 0x20);
+		atp_writeb_io(dev, c, 0x14, 0x06);
+		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 phase_ins1:
-		j = atp_readb_io(dev, 0, 0x1f);
+		j = atp_readb_io(dev, c, 0x1f);
 		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = atp_readb_io(dev, 0, 0x19);
+			mbuf[k++] = atp_readb_io(dev, c, 0x19);
 			goto phase_ins1;
 		}
 		if ((j & 0x80) == 0x00) {
 			goto phase_ins1;
 		}
 
-		while ((atp_readb_io(dev, 0, 0x17) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j == 0x85) {
 			goto tar_dcons;
 		}
@@ -2114,15 +2114,15 @@ phase_ins1:
 		}
 		continue;
 phase_cmds:
-		atp_writeb_io(dev, 0, 0x10, 0x30);
+		atp_writeb_io(dev, c, 0x10, 0x30);
 tar_dcons:
-		atp_writeb_io(dev, 0, 0x14, 0x00);
-		atp_writeb_io(dev, 0, 0x18, 0x08);
+		atp_writeb_io(dev, c, 0x14, 0x00);
+		atp_writeb_io(dev, c, 0x18, 0x08);
 
-		while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00)
+		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
 			cpu_relax();
 
-		j = atp_readb_io(dev, 0, 0x17);
+		j = atp_readb_io(dev, c, 0x17);
 		if (j != 0x16) {
 			continue;
 		}
@@ -2141,7 +2141,7 @@ tar_dcons:
 		if (mbuf[4] > 0x0e) {
 			mbuf[4] = 0x0e;
 		}
-		dev->id[0][i].devsp = mbuf[4];
+		dev->id[c][i].devsp = mbuf[4];
 		if (mbuf[3] < 0x0c) {
 			j = 0xb0;
 			goto set_syn_ok;
@@ -2164,7 +2164,7 @@ tar_dcons:
 		}
 		j = 0x60;
 set_syn_ok:
-		dev->id[0][i].devsp = (dev->id[0][i].devsp & 0x0f) | j;
+		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
 	}
 }
 
@@ -2379,7 +2379,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is880(p);
+		is880(p, 0);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
@@ -2609,7 +2609,7 @@ flash_ok_885:
 		outb(0x20, base_io + 0x11);
 
 		tscam(shpnt);
-		is870(p);
+		is870(p, 0);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
 		if (atpdev->chip_ver == 4)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 24/52] atp870u: Move chip-specific lines out of is880() and is885()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (22 preceding siblings ...)
  2015-11-17 18:23 ` [PATCH 23/52] atp870u: Add channel parameter to is870() and is880() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 25/52] atp870u: Remove is880() Ondrej Zary
                   ` (28 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move few chip-specifis lines out of is880() and is885() so they become
almost identical.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   24 ++++++++++--------------
 1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index ec61902..1c4b1f9 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -41,7 +41,7 @@
 
 static struct scsi_host_template atp870u_template;
 static void send_s870(struct atp_unit *dev,unsigned char c);
-static void is885(struct atp_unit *dev, unsigned char c);
+static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode);
 static void tscam_885(void);
 
 static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
@@ -1596,9 +1596,9 @@ set_syn_ok:
 	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xef);
 }
 
-static void is880(struct atp_unit *dev, unsigned char c)
+static void is880(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
 {
-	unsigned char i, j, k, rmb, n, lvdmode;
+	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
 	static unsigned char mbuf[512];
 	static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 };
@@ -1610,8 +1610,6 @@ static void is880(struct atp_unit *dev, unsigned char c)
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
 
-	lvdmode = atp_readb_base(dev, 0x3f) & 0x40;
-
 	for (i = 0; i < 16; i++) {
 		m = 1;
 		m = m << i;
@@ -2379,7 +2377,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is880(p, 0);
+		is880(p, 0, atp_readb_base(p, 0x3f) & 0x40);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
@@ -2525,10 +2523,11 @@ flash_ok_885:
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		is885(p, 0);
+		is885(p, 0, atp_readb_io(p, 0, 0x1b) >> 7);
+		atp_writeb_io(p, 0, 0x16, 0x80);
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		is885(p, 1);
-
+		is885(p, 1, atp_readb_io(p, 1, 0x1b) >> 7);
+		atp_writeb_io(p, 1, 0x16, 0x80);
 		k = inb(base_io + 0x28) & 0xcf;
 		k |= 0xc0;
 		outb(k, base_io + 0x28);
@@ -2829,9 +2828,9 @@ static void tscam_885(void)
 
 
 
-static void is885(struct atp_unit *dev, unsigned char c)
+static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
 {
-	unsigned char i, j, k, rmb, n, lvdmode;
+	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
 	static unsigned char mbuf[512];
 	static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 };
@@ -2843,8 +2842,6 @@ static void is885(struct atp_unit *dev, unsigned char c)
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
 
-	lvdmode = atp_readb_io(dev, c, 0x1b) >> 7;
-
 	for (i = 0; i < 16; i++) {
 		m = 1;
 		m = m << i;
@@ -3408,7 +3405,6 @@ set_syn_ok:
 		printk("dev->id[%2d][%2d].devsp = %2x\n",c,i,dev->id[c][i].devsp);
 #endif
 	}
-	atp_writeb_io(dev, c, 0x16, 0x80);
 }
 
 module_init(atp870u_init);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 25/52] atp870u: Remove is880()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (23 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 24/52] atp870u: Move chip-specific lines out of is880() and is885() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 26/52] atp870u: Add wide_chip parameter to is870() and is885() Ondrej Zary
                   ` (27 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Now that is880() and is885() are almost identical (except for some cpu_relax()
calls and debug printks), remove is880() and use is885() instead.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  572 +-----------------------------------------------
 1 file changed, 1 insertion(+), 571 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 1c4b1f9..d10026a 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1596,576 +1596,6 @@ set_syn_ok:
 	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xef);
 }
 
-static void is880(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
-{
-	unsigned char i, j, k, rmb, n;
-	unsigned short int m;
-	static unsigned char mbuf[512];
-	static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 };
-	static unsigned char inqd[9] = { 0x12, 0, 0, 0, 0x24, 0, 0, 0x24, 6 };
-	static unsigned char synn[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
-	unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
-	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
-	unsigned char synuw[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
-	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
-	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
-
-	for (i = 0; i < 16; i++) {
-		m = 1;
-		m = m << i;
-		if ((m & dev->active_id[c]) != 0) {
-			continue;
-		}
-		if (i == dev->host_id[c]) {
-			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
-			continue;
-		}
-		atp_writeb_io(dev, c, 0x1b, 0x01);
-		atp_writeb_io(dev, c, 1, 0x08);
-		atp_writeb_io(dev, c, 2, 0x7f);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		j = i;
-		if ((j & 0x08) != 0) {
-			j = (j & 0x07) | 0x40;
-		}
-		atp_writeb_io(dev, c, 0x15, j);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-		dev->active_id[c] |= m;
-
-		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x14, 0x00);
-
-phase_cmd:
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			atp_writeb_io(dev, c, 0x10, 0x41);
-			goto phase_cmd;
-		}
-sel_ok:
-		atp_writeb_io(dev, c, 3, inqd[0]);
-		atp_writeb_io(dev, c, 4, inqd[1]);
-		atp_writeb_io(dev, c, 5, inqd[2]);
-		atp_writeb_io(dev, c, 6, inqd[3]);
-		atp_writeb_io(dev, c, 7, inqd[4]);
-		atp_writeb_io(dev, c, 8, inqd[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, inqd[6]);
-		atp_writeb_io(dev, c, 0x14, inqd[7]);
-		atp_writeb_io(dev, c, 0x18, inqd[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-		atp_writeb_io(dev, c, 0x1b, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-		j = 0;
-rd_inq_data:
-		k = atp_readb_io(dev, c, 0x1f);
-		if ((k & 0x01) != 0) {
-			mbuf[j++] = atp_readb_io(dev, c, 0x19);
-			goto rd_inq_data;
-		}
-		if ((k & 0x80) == 0) {
-			goto rd_inq_data;
-		}
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x16) {
-			goto inq_ok;
-		}
-		atp_writeb_io(dev, c, 0x10, 0x46);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, 0);
-		atp_writeb_io(dev, c, 0x14, 0);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x16)
-			goto sel_ok;
-
-inq_ok:
-		mbuf[36] = 0;
-		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
-		dev->id[c][i].devtype = mbuf[0];
-		rmb = mbuf[1];
-		n = mbuf[7];
-		if ((mbuf[7] & 0x60) == 0) {
-			goto not_wide;
-		}
-		if ((i < 8) && ((dev->global_map[c] & 0x20) == 0)) {
-			goto not_wide;
-		}
-		if (lvdmode == 0) {
-			goto chg_wide;
-		}
-		if (dev->sp[c][i] != 0x04)	// force u2
-		{
-			goto chg_wide;
-		}
-
-		atp_writeb_io(dev, c, 0x1b, 0x01);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-try_u3:
-		j = 0;
-		atp_writeb_io(dev, c, 0x14, 0x09);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, u3[j++]);
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto u3p_in;
-		}
-		if (j == 0x0a) {
-			goto u3p_cmd;
-		}
-		if (j == 0x0e) {
-			goto try_u3;
-		}
-		continue;
-u3p_out:
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, 0);
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto u3p_in;
-		}
-		if (j == 0x0a) {
-			goto u3p_cmd;
-		}
-		if (j == 0x0e) {
-			goto u3p_out;
-		}
-		continue;
-u3p_in:
-		atp_writeb_io(dev, c, 0x14, 0x09);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		k = 0;
-u3p_in1:
-		j = atp_readb_io(dev, c, 0x1f);
-		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, c, 0x19);
-			goto u3p_in1;
-		}
-		if ((j & 0x80) == 0x00) {
-			goto u3p_in1;
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto u3p_in;
-		}
-		if (j == 0x0a) {
-			goto u3p_cmd;
-		}
-		if (j == 0x0e) {
-			goto u3p_out;
-		}
-		continue;
-u3p_cmd:
-		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x14, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			if (j == 0x4e) {
-				goto u3p_out;
-			}
-			continue;
-		}
-		if (mbuf[0] != 0x01) {
-			goto chg_wide;
-		}
-		if (mbuf[1] != 0x06) {
-			goto chg_wide;
-		}
-		if (mbuf[2] != 0x04) {
-			goto chg_wide;
-		}
-		if (mbuf[3] == 0x09) {
-			m = 1;
-			m = m << i;
-			dev->wide_id[c] |= m;
-			dev->id[c][i].devsp = 0xce;
-			continue;
-		}
-chg_wide:
-		atp_writeb_io(dev, c, 0x1b, 0x01);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-try_wide:
-		j = 0;
-		atp_writeb_io(dev, c, 0x14, 0x05);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, wide[j++]);
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto try_wide;
-		}
-		continue;
-widep_out:
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, 0);
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto widep_out;
-		}
-		continue;
-widep_in:
-		atp_writeb_io(dev, c, 0x14, 0xff);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		k = 0;
-widep_in1:
-		j = atp_readb_io(dev, c, 0x1f);
-		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, c, 0x19);
-			goto widep_in1;
-		}
-		if ((j & 0x80) == 0x00) {
-			goto widep_in1;
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto widep_out;
-		}
-		continue;
-widep_cmd:
-		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x14, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			if (j == 0x4e) {
-				goto widep_out;
-			}
-			continue;
-		}
-		if (mbuf[0] != 0x01) {
-			goto not_wide;
-		}
-		if (mbuf[1] != 0x02) {
-			goto not_wide;
-		}
-		if (mbuf[2] != 0x03) {
-			goto not_wide;
-		}
-		if (mbuf[3] != 0x01) {
-			goto not_wide;
-		}
-		m = 1;
-		m = m << i;
-		dev->wide_id[c] |= m;
-not_wide:
-		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) || ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
-			m = 1;
-			m = m << i;
-			if ((dev->async[c] & m) != 0) {
-				goto set_sync;
-			}
-		}
-		continue;
-set_sync:
-		if (dev->sp[c][i] == 0x02) {
-			synu[4] = 0x0c;
-			synuw[4] = 0x0c;
-		} else {
-			if (dev->sp[c][i] >= 0x03) {
-				synu[4] = 0x0a;
-				synuw[4] = 0x0a;
-			}
-		}
-		j = 0;
-		if ((m & dev->wide_id[c]) != 0) {
-			j |= 0x01;
-		}
-		atp_writeb_io(dev, c, 0x1b, j);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-try_sync:
-		j = 0;
-		atp_writeb_io(dev, c, 0x14, 0x06);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
-				if ((m & dev->wide_id[c]) != 0) {
-					if ((m & dev->ultra_map[c]) != 0) {
-						atp_writeb_io(dev, c, 0x19, synuw[j++]);
-					} else {
-						atp_writeb_io(dev, c, 0x19, synw[j++]);
-					}
-				} else {
-					if ((m & dev->ultra_map[c]) != 0) {
-						atp_writeb_io(dev, c, 0x19, synu[j++]);
-					} else {
-						atp_writeb_io(dev, c, 0x19, synn[j++]);
-					}
-				}
-			}
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto try_sync;
-		}
-		continue;
-phase_outs:
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00)
-				atp_writeb_io(dev, c, 0x19, 0x00);
-		}
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x85) {
-			goto tar_dcons;
-		}
-		j &= 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto phase_outs;
-		}
-		continue;
-phase_ins:
-		atp_writeb_io(dev, c, 0x14, 0x06);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		k = 0;
-phase_ins1:
-		j = atp_readb_io(dev, c, 0x1f);
-		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = atp_readb_io(dev, c, 0x19);
-			goto phase_ins1;
-		}
-		if ((j & 0x80) == 0x00) {
-			goto phase_ins1;
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x85) {
-			goto tar_dcons;
-		}
-		j &= 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto phase_outs;
-		}
-		continue;
-phase_cmds:
-		atp_writeb_io(dev, c, 0x10, 0x30);
-tar_dcons:
-		atp_writeb_io(dev, c, 0x14, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			continue;
-		}
-		if (mbuf[0] != 0x01) {
-			continue;
-		}
-		if (mbuf[1] != 0x03) {
-			continue;
-		}
-		if (mbuf[4] == 0x00) {
-			continue;
-		}
-		if (mbuf[3] > 0x64) {
-			continue;
-		}
-		if (mbuf[4] > 0x0e) {
-			mbuf[4] = 0x0e;
-		}
-		dev->id[c][i].devsp = mbuf[4];
-		if (mbuf[3] < 0x0c) {
-			j = 0xb0;
-			goto set_syn_ok;
-		}
-		if ((mbuf[3] < 0x0d) && (rmb == 0)) {
-			j = 0xa0;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x1a) {
-			j = 0x20;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x33) {
-			j = 0x40;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x4c) {
-			j = 0x50;
-			goto set_syn_ok;
-		}
-		j = 0x60;
-set_syn_ok:
-		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
-	}
-}
-
 static void atp870u_free_tables(struct Scsi_Host *host)
 {
 	struct atp_unit *atp_dev = (struct atp_unit *)&host->hostdata;
@@ -2377,7 +1807,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is880(p, 0, atp_readb_base(p, 0x3f) & 0x40);
+		is885(p, 0, atp_readb_base(p, 0x3f) & 0x40);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 26/52] atp870u: Add wide_chip parameter to is870() and is885()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (24 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 25/52] atp870u: Remove is880() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 27/52] atp870u: Add remaining 870 support to is885() Ondrej Zary
                   ` (26 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Don't check chip_ver in is870() but add wide_chip parameter for that.
Then add the non-wide support to is885().

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   46 +++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index d10026a..0548d07 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -41,7 +41,7 @@
 
 static struct scsi_host_template atp870u_template;
 static void send_s870(struct atp_unit *dev,unsigned char c);
-static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode);
+static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode);
 static void tscam_885(void);
 
 static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
@@ -1162,7 +1162,7 @@ static void tscam(struct Scsi_Host *host)
 	}
 }
 
-static void is870(struct atp_unit *dev, unsigned char c)
+static void is870(struct atp_unit *dev, unsigned char c, bool wide_chip)
 {
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
@@ -1177,9 +1177,8 @@ static void is870(struct atp_unit *dev, unsigned char c)
 	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) | 0x10);
 
 	for (i = 0; i < 16; i++) {
-		if ((dev->chip_ver != 4) && (i > 7)) {
+		if (!wide_chip && (i > 7))
 			break;
-		}
 		m = 1;
 		m = m << i;
 		if ((m & dev->active_id[c]) != 0) {
@@ -1189,11 +1188,7 @@ static void is870(struct atp_unit *dev, unsigned char c)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
-		if (dev->chip_ver == 4) {
-			atp_writeb_io(dev, c, 0x1b, 0x01);
-		} else {
-			atp_writeb_io(dev, c, 0x1b, 0x00);
-		}
+		atp_writeb_io(dev, c, 0x1b, wide_chip ? 0x01 : 0x00);
 		atp_writeb_io(dev, c, 1, 0x08);
 		atp_writeb_io(dev, c, 2, 0x7f);
 		atp_writeb_io(dev, c, 3, satn[0]);
@@ -1262,7 +1257,7 @@ sel_ok:
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
-		if (dev->chip_ver == 4)
+		if (wide_chip)
 			atp_writeb_io(dev, c, 0x1b, 0x00);
 
 		atp_writeb_io(dev, c, 0x18, 0x08);
@@ -1298,9 +1293,8 @@ inq_ok:
 		dev->id[c][i].devtype = mbuf[0];
 		rmb = mbuf[1];
 		n = mbuf[7];
-		if (dev->chip_ver != 4) {
+		if (!wide_chip)
 			goto not_wide;
-		}
 		if ((mbuf[7] & 0x60) == 0) {
 			goto not_wide;
 		}
@@ -1807,7 +1801,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is885(p, 0, atp_readb_base(p, 0x3f) & 0x40);
+		is885(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
@@ -1953,10 +1947,10 @@ flash_ok_885:
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		is885(p, 0, atp_readb_io(p, 0, 0x1b) >> 7);
+		is885(p, 0, true, atp_readb_io(p, 0, 0x1b) >> 7);
 		atp_writeb_io(p, 0, 0x16, 0x80);
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		is885(p, 1, atp_readb_io(p, 1, 0x1b) >> 7);
+		is885(p, 1, true, atp_readb_io(p, 1, 0x1b) >> 7);
 		atp_writeb_io(p, 1, 0x16, 0x80);
 		k = inb(base_io + 0x28) & 0xcf;
 		k |= 0xc0;
@@ -2038,7 +2032,7 @@ flash_ok_885:
 		outb(0x20, base_io + 0x11);
 
 		tscam(shpnt);
-		is870(p, 0);
+		is870(p, 0, p->chip_ver == 4);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
 		if (atpdev->chip_ver == 4)
@@ -2258,7 +2252,7 @@ static void tscam_885(void)
 
 
 
-static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
+static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode)
 {
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
@@ -2273,6 +2267,8 @@ static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
 	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
 
 	for (i = 0; i < 16; i++) {
+		if (!wide_chip && (i > 7))
+			break;
 		m = 1;
 		m = m << i;
 		if ((m & dev->active_id[c]) != 0) {
@@ -2282,7 +2278,7 @@ static void is885(struct atp_unit *dev, unsigned char c, unsigned char lvdmode)
 			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
 			continue;
 		}
-		atp_writeb_io(dev, c, 0x1b, 0x01);
+		atp_writeb_io(dev, c, 0x1b, wide_chip ? 0x01 : 0x00);
 		atp_writeb_io(dev, c, 1, 0x08);
 		atp_writeb_io(dev, c, 2, 0x7f);
 		atp_writeb_io(dev, c, 3, satn[0]);
@@ -2351,7 +2347,9 @@ sel_ok:
 		while (atp_readb_io(dev, c, 0x17) != 0x8e)
 			cpu_relax();
 
-		atp_writeb_io(dev, c, 0x1b, 0x00);
+		if (wide_chip)
+			atp_writeb_io(dev, c, 0x1b, 0x00);
+
 		atp_writeb_io(dev, c, 0x18, 0x08);
 		j = 0;
 rd_inq_data:
@@ -2385,11 +2383,17 @@ inq_ok:
 		dev->id[c][i].devtype = mbuf[0];
 		rmb = mbuf[1];
 		n = mbuf[7];
+		if (!wide_chip)
+			goto not_wide;
 		if ((mbuf[7] & 0x60) == 0) {
 			goto not_wide;
 		}
-		if ((i < 8) && ((dev->global_map[c] & 0x20) == 0)) {
-			goto not_wide;
+		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+			if ((i < 8) && ((dev->global_map[c] & 0x20) == 0))
+				goto not_wide;
+		} else { /* result of is870() merge - is this a bug? */
+			if ((dev->global_map[c] & 0x20) == 0)
+				goto not_wide;
 		}
 		if (lvdmode == 0) {
 			goto chg_wide;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 27/52] atp870u: Add remaining 870 support to is885()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (25 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 26/52] atp870u: Add wide_chip parameter to is870() and is885() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 28/52] atp870u: Move 870-specific code out of is870() Ondrej Zary
                   ` (25 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Add remaining 870 support to is885():
 - different synw, no synuw
 - synu[4] = 0x0c
 - atp_writeb_io(dev, c, 0x04, 0x00); instead of
   atp_writeb_io(dev, c, 0x14, 0x00); (isn't that a bug?)
 - atp_writeb_io(dev, c, 0x14, 0xff); instead of
   atp_writeb_io(dev, c, 0x14, 0x06);
 - different mbuf[3] and mbuf[4] checks

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   45 +++++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 0548d07..d76d386 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -2262,6 +2262,7 @@ static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigne
 	static unsigned char synn[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
 	unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
+	static unsigned char synw_870[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	unsigned char synuw[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 	static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 };
@@ -2311,7 +2312,10 @@ static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigne
 		dev->active_id[c] |= m;
 
 		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x14, 0x00);
+		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+			atp_writeb_io(dev, c, 0x14, 0x00);
+		else /* result of is870() merge - is this a bug? */
+			atp_writeb_io(dev, c, 0x04, 0x00);
 
 phase_cmd:
 		atp_writeb_io(dev, c, 0x18, 0x08);
@@ -2657,7 +2661,7 @@ not_wide:
 		}
 		continue;
 set_sync:
-		if (dev->sp[c][i] == 0x02) {
+		if ((dev->dev_id != ATP885_DEVID && dev->dev_id != ATP880_DEVID1 && dev->dev_id != ATP880_DEVID2) || (dev->sp[c][i] == 0x02)) {
 			synu[4] = 0x0c;
 			synuw[4] = 0x0c;
 		} else {
@@ -2701,11 +2705,14 @@ try_sync:
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
 			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[c]) != 0) {
-					if ((m & dev->ultra_map[c]) != 0) {
-						atp_writeb_io(dev, c, 0x19, synuw[j++]);
-					} else {
-						atp_writeb_io(dev, c, 0x19, synw[j++]);
-					}
+					if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+						if ((m & dev->ultra_map[c]) != 0) {
+							atp_writeb_io(dev, c, 0x19, synuw[j++]);
+						} else {
+							atp_writeb_io(dev, c, 0x19, synw[j++]);
+						}
+					} else
+						atp_writeb_io(dev, c, 0x19, synw_870[j++]);
 				} else {
 					if ((m & dev->ultra_map[c]) != 0) {
 						atp_writeb_io(dev, c, 0x19, synu[j++]);
@@ -2753,7 +2760,10 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		atp_writeb_io(dev, c, 0x14, 0x06);
+		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+			atp_writeb_io(dev, c, 0x14, 0x06);
+		else
+			atp_writeb_io(dev, c, 0x14, 0xff);
 		atp_writeb_io(dev, c, 0x18, 0x20);
 		k = 0;
 phase_ins1:
@@ -2808,14 +2818,21 @@ tar_dcons:
 		if (mbuf[3] > 0x64) {
 			continue;
 		}
-		if (mbuf[4] > 0x0e) {
-			mbuf[4] = 0x0e;
+		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+			if (mbuf[4] > 0x0e) {
+				mbuf[4] = 0x0e;
+			}
+		} else {
+			if (mbuf[4] > 0x0c) {
+				mbuf[4] = 0x0c;
+			}
 		}
 		dev->id[c][i].devsp = mbuf[4];
-		if (mbuf[3] < 0x0c) {
-			j = 0xb0;
-			goto set_syn_ok;
-		}
+		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+			if (mbuf[3] < 0x0c) {
+				j = 0xb0;
+				goto set_syn_ok;
+			}
 		if ((mbuf[3] < 0x0d) && (rmb == 0)) {
 			j = 0xa0;
 			goto set_syn_ok;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 28/52] atp870u: Move 870-specific code out of is870()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (26 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 27/52] atp870u: Add remaining 870 support to is885() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 29/52] atp870u: Remove is870() Ondrej Zary
                   ` (24 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move few remaining 870-specific code lines out of is870()

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index d76d386..6427f87 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1174,8 +1174,6 @@ static void is870(struct atp_unit *dev, unsigned char c, bool wide_chip)
 	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
 	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
 
-	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) | 0x10);
-
 	for (i = 0; i < 16; i++) {
 		if (!wide_chip && (i > 7))
 			break;
@@ -1587,7 +1585,6 @@ tar_dcons:
 set_syn_ok:
 		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
 	}
-	atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xef);
 }
 
 static void atp870u_free_tables(struct Scsi_Host *host)
@@ -2032,7 +2029,9 @@ flash_ok_885:
 		outb(0x20, base_io + 0x11);
 
 		tscam(shpnt);
+		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) | 0x10);
 		is870(p, 0, p->chip_ver == 4);
+		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) & 0xef);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
 		if (atpdev->chip_ver == 4)
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 29/52] atp870u: Remove is870()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (27 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 28/52] atp870u: Move 870-specific code out of is870() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 30/52] atp870u: Rename is885() to atp_is() Ondrej Zary
                   ` (23 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Now that is885() supports everything from is870() and the rest of the code
is almost identical, remove is870() and use is885() instead.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  427 +-----------------------------------------------
 1 file changed, 1 insertion(+), 426 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 6427f87..918875b 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1162,431 +1162,6 @@ static void tscam(struct Scsi_Host *host)
 	}
 }
 
-static void is870(struct atp_unit *dev, unsigned char c, bool wide_chip)
-{
-	unsigned char i, j, k, rmb, n;
-	unsigned short int m;
-	static unsigned char mbuf[512];
-	static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 };
-	static unsigned char inqd[9] = { 0x12, 0, 0, 0, 0x24, 0, 0, 0x24, 6 };
-	static unsigned char synn[6] = { 0x80, 1, 3, 1, 0x19, 0x0e };
-	static unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0c, 0x0e };
-	static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 };
-	static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 };
-
-	for (i = 0; i < 16; i++) {
-		if (!wide_chip && (i > 7))
-			break;
-		m = 1;
-		m = m << i;
-		if ((m & dev->active_id[c]) != 0) {
-			continue;
-		}
-		if (i == dev->host_id[c]) {
-			printk(KERN_INFO "         ID: %2d  Host Adapter\n", dev->host_id[c]);
-			continue;
-		}
-		atp_writeb_io(dev, c, 0x1b, wide_chip ? 0x01 : 0x00);
-		atp_writeb_io(dev, c, 1, 0x08);
-		atp_writeb_io(dev, c, 2, 0x7f);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		j = i;
-		if ((j & 0x08) != 0) {
-			j = (j & 0x07) | 0x40;
-		}
-		atp_writeb_io(dev, c, 0x15, j);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-		dev->active_id[c] |= m;
-
-		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x04, 0x00);
-
-phase_cmd:
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			atp_writeb_io(dev, c, 0x10, 0x41);
-			goto phase_cmd;
-		}
-sel_ok:
-		atp_writeb_io(dev, c, 3, inqd[0]);
-		atp_writeb_io(dev, c, 4, inqd[1]);
-		atp_writeb_io(dev, c, 5, inqd[2]);
-		atp_writeb_io(dev, c, 6, inqd[3]);
-		atp_writeb_io(dev, c, 7, inqd[4]);
-		atp_writeb_io(dev, c, 8, inqd[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, inqd[6]);
-		atp_writeb_io(dev, c, 0x14, inqd[7]);
-		atp_writeb_io(dev, c, 0x18, inqd[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-		if (wide_chip)
-			atp_writeb_io(dev, c, 0x1b, 0x00);
-
-		atp_writeb_io(dev, c, 0x18, 0x08);
-		j = 0;
-rd_inq_data:
-		k = atp_readb_io(dev, c, 0x1f);
-		if ((k & 0x01) != 0) {
-			mbuf[j++] = atp_readb_io(dev, c, 0x19);
-			goto rd_inq_data;
-		}
-		if ((k & 0x80) == 0) {
-			goto rd_inq_data;
-		}
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x16) {
-			goto inq_ok;
-		}
-		atp_writeb_io(dev, c, 0x10, 0x46);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, 0);
-		atp_writeb_io(dev, c, 0x14, 0);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x16)
-			goto sel_ok;
-
-inq_ok:
-		mbuf[36] = 0;
-		printk(KERN_INFO "         ID: %2d  %s\n", i, &mbuf[8]);
-		dev->id[c][i].devtype = mbuf[0];
-		rmb = mbuf[1];
-		n = mbuf[7];
-		if (!wide_chip)
-			goto not_wide;
-		if ((mbuf[7] & 0x60) == 0) {
-			goto not_wide;
-		}
-		if ((dev->global_map[c] & 0x20) == 0) {
-			goto not_wide;
-		}
-		atp_writeb_io(dev, c, 0x1b, 0x01);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-try_wide:
-		j = 0;
-		atp_writeb_io(dev, c, 0x14, 0x05);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, wide[j++]);
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto try_wide;
-		}
-		continue;
-widep_out:
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0)
-				atp_writeb_io(dev, c, 0x19, 0);
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto widep_out;
-		}
-		continue;
-widep_in:
-		atp_writeb_io(dev, c, 0x14, 0xff);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		k = 0;
-widep_in1:
-		j = atp_readb_io(dev, c, 0x1f);
-		if ((j & 0x01) != 0) {
-			mbuf[k++] = atp_readb_io(dev, c, 0x19);
-			goto widep_in1;
-		}
-		if ((j & 0x80) == 0x00) {
-			goto widep_in1;
-		}
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto widep_in;
-		}
-		if (j == 0x0a) {
-			goto widep_cmd;
-		}
-		if (j == 0x0e) {
-			goto widep_out;
-		}
-		continue;
-widep_cmd:
-		atp_writeb_io(dev, c, 0x10, 0x30);
-		atp_writeb_io(dev, c, 0x14, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			if (j == 0x4e) {
-				goto widep_out;
-			}
-			continue;
-		}
-		if (mbuf[0] != 0x01) {
-			goto not_wide;
-		}
-		if (mbuf[1] != 0x02) {
-			goto not_wide;
-		}
-		if (mbuf[2] != 0x03) {
-			goto not_wide;
-		}
-		if (mbuf[3] != 0x01) {
-			goto not_wide;
-		}
-		m = 1;
-		m = m << i;
-		dev->wide_id[c] |= m;
-not_wide:
-		if ((dev->id[c][i].devtype == 0x00) || (dev->id[c][i].devtype == 0x07) || ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) {
-			goto set_sync;
-		}
-		continue;
-set_sync:
-		j = 0;
-		if ((m & dev->wide_id[c]) != 0) {
-			j |= 0x01;
-		}
-		atp_writeb_io(dev, c, 0x1b, j);
-		atp_writeb_io(dev, c, 3, satn[0]);
-		atp_writeb_io(dev, c, 4, satn[1]);
-		atp_writeb_io(dev, c, 5, satn[2]);
-		atp_writeb_io(dev, c, 6, satn[3]);
-		atp_writeb_io(dev, c, 7, satn[4]);
-		atp_writeb_io(dev, c, 8, satn[5]);
-		atp_writeb_io(dev, c, 0x0f, 0);
-		atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp);
-		atp_writeb_io(dev, c, 0x12, 0);
-		atp_writeb_io(dev, c, 0x13, satn[6]);
-		atp_writeb_io(dev, c, 0x14, satn[7]);
-		atp_writeb_io(dev, c, 0x18, satn[8]);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e)
-			continue;
-
-		while (atp_readb_io(dev, c, 0x17) != 0x8e)
-			cpu_relax();
-
-try_sync:
-		j = 0;
-		atp_writeb_io(dev, c, 0x14, 0x06);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
-				if ((m & dev->wide_id[c]) != 0) {
-					atp_writeb_io(dev, c, 0x19, synw[j++]);
-				} else {
-					if ((m & dev->ultra_map[c]) != 0) {
-						atp_writeb_io(dev, c, 0x19, synu[j++]);
-					} else {
-						atp_writeb_io(dev, c, 0x19, synn[j++]);
-					}
-				}
-			}
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17) & 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto try_sync;
-		}
-		continue;
-phase_outs:
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) {
-			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00)
-				atp_writeb_io(dev, c, 0x19, 0x00);
-		}
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x85) {
-			goto tar_dcons;
-		}
-		j &= 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto phase_outs;
-		}
-		continue;
-phase_ins:
-		atp_writeb_io(dev, c, 0x14, 0xff);
-		atp_writeb_io(dev, c, 0x18, 0x20);
-		k = 0;
-phase_ins1:
-		j = atp_readb_io(dev, c, 0x1f);
-		if ((j & 0x01) != 0x00) {
-			mbuf[k++] = atp_readb_io(dev, c, 0x19);
-			goto phase_ins1;
-		}
-		if ((j & 0x80) == 0x00) {
-			goto phase_ins1;
-		}
-
-		while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j == 0x85) {
-			goto tar_dcons;
-		}
-		j &= 0x0f;
-		if (j == 0x0f) {
-			goto phase_ins;
-		}
-		if (j == 0x0a) {
-			goto phase_cmds;
-		}
-		if (j == 0x0e) {
-			goto phase_outs;
-		}
-		continue;
-phase_cmds:
-		atp_writeb_io(dev, c, 0x10, 0x30);
-tar_dcons:
-		atp_writeb_io(dev, c, 0x14, 0x00);
-		atp_writeb_io(dev, c, 0x18, 0x08);
-
-		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00)
-			cpu_relax();
-
-		j = atp_readb_io(dev, c, 0x17);
-		if (j != 0x16) {
-			continue;
-		}
-		if (mbuf[0] != 0x01) {
-			continue;
-		}
-		if (mbuf[1] != 0x03) {
-			continue;
-		}
-		if (mbuf[4] == 0x00) {
-			continue;
-		}
-		if (mbuf[3] > 0x64) {
-			continue;
-		}
-		if (mbuf[4] > 0x0c) {
-			mbuf[4] = 0x0c;
-		}
-		dev->id[c][i].devsp = mbuf[4];
-		if ((mbuf[3] < 0x0d) && (rmb == 0)) {
-			j = 0xa0;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x1a) {
-			j = 0x20;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x33) {
-			j = 0x40;
-			goto set_syn_ok;
-		}
-		if (mbuf[3] < 0x4c) {
-			j = 0x50;
-			goto set_syn_ok;
-		}
-		j = 0x60;
-set_syn_ok:
-		dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j;
-	}
-}
-
 static void atp870u_free_tables(struct Scsi_Host *host)
 {
 	struct atp_unit *atp_dev = (struct atp_unit *)&host->hostdata;
@@ -2030,7 +1605,7 @@ flash_ok_885:
 
 		tscam(shpnt);
 		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) | 0x10);
-		is870(p, 0, p->chip_ver == 4);
+		is885(p, 0, p->chip_ver == 4, 0);
 		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) & 0xef);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 30/52] atp870u: Rename is885() to atp_is()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (28 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 29/52] atp870u: Remove is870() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 31/52] atp870u: Convert remaining in[bwl] and out[bwl] to wrappers Ondrej Zary
                   ` (22 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Now that all the is* functions except is885() are gone, rename is885() to
atp_is() to avoid confusion. Don't know what "is" means, though...

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 918875b..0b7d3bd 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -41,7 +41,7 @@
 
 static struct scsi_host_template atp870u_template;
 static void send_s870(struct atp_unit *dev,unsigned char c);
-static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode);
+static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode);
 static void tscam_885(void);
 
 static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
@@ -1373,7 +1373,7 @@ flash_ok_880:
 		outb(0x20, base_io + 0x51);
 
 		tscam(shpnt);
-		is885(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
+		atp_is(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
 		outb(0xb0, base_io + 0x38);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
@@ -1519,10 +1519,10 @@ flash_ok_885:
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		is885(p, 0, true, atp_readb_io(p, 0, 0x1b) >> 7);
+		atp_is(p, 0, true, atp_readb_io(p, 0, 0x1b) >> 7);
 		atp_writeb_io(p, 0, 0x16, 0x80);
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		is885(p, 1, true, atp_readb_io(p, 1, 0x1b) >> 7);
+		atp_is(p, 1, true, atp_readb_io(p, 1, 0x1b) >> 7);
 		atp_writeb_io(p, 1, 0x16, 0x80);
 		k = inb(base_io + 0x28) & 0xcf;
 		k |= 0xc0;
@@ -1605,7 +1605,7 @@ flash_ok_885:
 
 		tscam(shpnt);
 		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) | 0x10);
-		is885(p, 0, p->chip_ver == 4, 0);
+		atp_is(p, 0, p->chip_ver == 4, 0);
 		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) & 0xef);
 		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
 		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
@@ -1826,7 +1826,7 @@ static void tscam_885(void)
 
 
 
-static void is885(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode)
+static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode)
 {
 	unsigned char i, j, k, rmb, n;
 	unsigned short int m;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 31/52] atp870u: Convert remaining in[bwl] and out[bwl] to wrappers
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (29 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 30/52] atp870u: Rename is885() to atp_is() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 32/52] atp870u: Replace port 0x80 delay by udelay Ondrej Zary
                   ` (21 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  222 +++++++++++++++++++++++++-----------------------
 1 file changed, 118 insertions(+), 104 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 0b7d3bd..bccf872 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -49,6 +49,11 @@ static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
 	outb(val, atp->baseport + reg);
 }
 
+static inline void atp_writew_base(struct atp_unit *atp, u8 reg, u16 val)
+{
+	outw(val, atp->baseport + reg);
+}
+
 static inline void atp_writeb_io(struct atp_unit *atp, u8 channel, u8 reg, u8 val)
 {
 	outb(val, atp->ioport[channel] + reg);
@@ -74,6 +79,16 @@ static inline u8 atp_readb_base(struct atp_unit *atp, u8 reg)
 	return inb(atp->baseport + reg);
 }
 
+static inline u16 atp_readw_base(struct atp_unit *atp, u8 reg)
+{
+	return inw(atp->baseport + reg);
+}
+
+static inline u32 atp_readl_base(struct atp_unit *atp, u8 reg)
+{
+	return inl(atp->baseport + reg);
+}
+
 static inline u8 atp_readb_io(struct atp_unit *atp, u8 channel, u8 reg)
 {
 	return inb(atp->ioport[channel] + reg);
@@ -1268,19 +1283,20 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		atpdev->chip_ver = pdev->revision;
 		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
 
-		host_id = inb(base_io + 0x39);
+		atpdev->ioport[0] = base_io + 0x40;
+		atpdev->pciport[0] = base_io + 0x28;
+
+		host_id = atp_readb_base(atpdev, 0x39);
 		host_id >>= 0x04;
 
 		printk(KERN_INFO "   ACARD AEC-67160 PCI Ultra3 LVD Host Adapter: %d"
 			"    IO:%x, IRQ:%d.\n", count, base_io, pdev->irq);
-		atpdev->ioport[0] = base_io + 0x40;
-		atpdev->pciport[0] = base_io + 0x28;
 		atpdev->dev_id = ent->device;
 		atpdev->host_id[0] = host_id;
 
-		atpdev->scam_on = inb(base_io + 0x22);
-		atpdev->global_map[0] = inb(base_io + 0x35);
-		atpdev->ultra_map[0] = inw(base_io + 0x3c);
+		atpdev->scam_on = atp_readb_base(atpdev, 0x22);
+		atpdev->global_map[0] = atp_readb_base(atpdev, 0x35);
+		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x3c);
 
 		n = 0x3f09;
 next_fblk_880:
@@ -1288,37 +1304,37 @@ next_fblk_880:
 			goto flash_ok_880;
 
 		m = 0;
-		outw(n, base_io + 0x34);
+		atp_writew_base(atpdev, 0x34, n);
 		n += 0x0002;
-		if (inb(base_io + 0x30) == 0xff)
+		if (atp_readb_base(atpdev, 0x30) == 0xff)
 			goto flash_ok_880;
 
-		atpdev->sp[0][m++] = inb(base_io + 0x30);
-		atpdev->sp[0][m++] = inb(base_io + 0x31);
-		atpdev->sp[0][m++] = inb(base_io + 0x32);
-		atpdev->sp[0][m++] = inb(base_io + 0x33);
-		outw(n, base_io + 0x34);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
 		n += 0x0002;
-		atpdev->sp[0][m++] = inb(base_io + 0x30);
-		atpdev->sp[0][m++] = inb(base_io + 0x31);
-		atpdev->sp[0][m++] = inb(base_io + 0x32);
-		atpdev->sp[0][m++] = inb(base_io + 0x33);
-		outw(n, base_io + 0x34);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
 		n += 0x0002;
-		atpdev->sp[0][m++] = inb(base_io + 0x30);
-		atpdev->sp[0][m++] = inb(base_io + 0x31);
-		atpdev->sp[0][m++] = inb(base_io + 0x32);
-		atpdev->sp[0][m++] = inb(base_io + 0x33);
-		outw(n, base_io + 0x34);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
 		n += 0x0002;
-		atpdev->sp[0][m++] = inb(base_io + 0x30);
-		atpdev->sp[0][m++] = inb(base_io + 0x31);
-		atpdev->sp[0][m++] = inb(base_io + 0x32);
-		atpdev->sp[0][m++] = inb(base_io + 0x33);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
 		n += 0x0018;
 		goto next_fblk_880;
 flash_ok_880:
-		outw(0, base_io + 0x34);
+		atp_writew_base(atpdev, 0x34, 0);
 		atpdev->ultra_map[0] = 0;
 		atpdev->async[0] = 0;
 		for (k = 0; k < 16; k++) {
@@ -1332,7 +1348,7 @@ flash_ok_880:
  			}
 	 	}
 		atpdev->async[0] = ~(atpdev->async[0]);
-		outb(atpdev->global_map[0], base_io + 0x35);
+		atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]);
  
 		shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
 		if (!shpnt)
@@ -1355,26 +1371,26 @@ flash_ok_880:
 		}
 
 		spin_lock_irqsave(shpnt->host_lock, flags);
-		k = inb(base_io + 0x38) & 0x80;
-		outb(k, base_io + 0x38);
-		outb(0x20, base_io + 0x3b);
+		k = atp_readb_base(p, 0x38) & 0x80;
+		atp_writeb_base(p, 0x38, k);
+		atp_writeb_base(p, 0x3b, 0x20);
 		mdelay(32);
-		outb(0, base_io + 0x3b);
+		atp_writeb_base(p, 0x3b, 0);
 		mdelay(32);
-		inb(base_io + 0x5b);
-		inb(base_io + 0x57);
-		outb((host_id | 0x08), base_io + 0x40);
-		outb(0, base_io + 0x58);
-		while ((inb(base_io + 0x5f) & 0x80) == 0)
+		atp_readb_io(p, 0, 0x1b);
+		atp_readb_io(p, 0, 0x17);
+		atp_writeb_io(p, 0, 0, host_id | 0x08);
+		atp_writeb_io(p, 0, 0x18, 0);
+		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
 			mdelay(1);
-		inb(base_io + 0x57);
-		outb(8, base_io + 0x41);
-		outb(0x7f, base_io + 0x42);
-		outb(0x20, base_io + 0x51);
+		atp_readb_io(p, 0, 0x17);
+		atp_writeb_io(p, 0, 1, 8);
+		atp_writeb_io(p, 0, 2, 0x7f);
+		atp_writeb_io(p, 0, 0x11, 0x20);
 
 		tscam(shpnt);
 		atp_is(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
-		outb(0xb0, base_io + 0x38);
+		atp_writeb_base(p, 0x38, 0xb0);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
 		shpnt->unique_id = base_io;
@@ -1415,27 +1431,27 @@ flash_ok_880:
 		
 		spin_lock_irqsave(shpnt->host_lock, flags);        					
         			
-		c=inb(base_io + 0x29);
-		outb((c | 0x04),base_io + 0x29);
+		c = atp_readb_base(p, 0x29);
+		atp_writeb_base(p, 0x29, c | 0x04);
         	
 		n=0x1f80;
 next_fblk_885:
 		if (n >= 0x2000) {
 		   goto flash_ok_885;
 		}
-		outw(n,base_io + 0x3c);
-		if (inl(base_io + 0x38) == 0xffffffff) {
+		atp_writew_base(p, 0x3c, n);
+		if (atp_readl_base(p, 0x38) == 0xffffffff) {
 		   goto flash_ok_885;
 		}
 		for (m=0; m < 2; m++) {
 		    p->global_map[m]= 0;
 		    for (k=0; k < 4; k++) {
-			outw(n++,base_io + 0x3c);
-			((unsigned long *)&setupdata[m][0])[k]=inl(base_io + 0x38);
+			atp_writew_base(p, 0x3c, n++);
+			((unsigned long *)&setupdata[m][0])[k] = atp_readl_base(p, 0x38);
 		    }
 		    for (k=0; k < 4; k++) {
-			outw(n++,base_io + 0x3c);
-			((unsigned long *)&p->sp[m][0])[k]=inl(base_io + 0x38);
+			atp_writew_base(p, 0x3c, n++);
+			((unsigned long *)&p->sp[m][0])[k] = atp_readl_base(p, 0x38);
 		    }
 		    n += 8;
 		}
@@ -1444,8 +1460,8 @@ flash_ok_885:
 #ifdef ED_DBGP
 		printk( "Flash Read OK\n");
 #endif	
-		c=inb(base_io + 0x29);
-		outb((c & 0xfb),base_io + 0x29);
+		c = atp_readb_base(p, 0x29);
+		atp_writeb_base(p, 0x29, c & 0xfb);
 		for (c=0;c < 2;c++) {
 		    p->ultra_map[c]=0;
 		    p->async[c] = 0;
@@ -1474,48 +1490,48 @@ flash_ok_885:
 		    }
 		}
 
-		k = inb(base_io + 0x28) & 0x8f;
+		k = atp_readb_base(p, 0x28) & 0x8f;
 		k |= 0x10;
-		outb(k, base_io + 0x28);
-		outb(0x80, base_io + 0x41);
-		outb(0x80, base_io + 0x51);
+		atp_writeb_base(p, 0x28, k);
+		atp_writeb_pci(p, 0, 1, 0x80);
+		atp_writeb_pci(p, 1, 1, 0x80);
 		mdelay(100);
-		outb(0, base_io + 0x41);
-		outb(0, base_io + 0x51);
+		atp_writeb_pci(p, 0, 1, 0);
+		atp_writeb_pci(p, 1, 1, 0);
 		mdelay(1000);
-		inb(base_io + 0x9b);
-		inb(base_io + 0x97);
-		inb(base_io + 0xdb);
-		inb(base_io + 0xd7);
+		atp_readb_io(p, 0, 0x1b);
+		atp_readb_io(p, 0, 0x17);
+		atp_readb_io(p, 1, 0x1b);
+		atp_readb_io(p, 1, 0x17);
 		k=p->host_id[0];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
 		k |= 0x08;
-		outb(k, base_io + 0x80);
-		outb(0, base_io + 0x98);
+		atp_writeb_io(p, 0, 0, k);
+		atp_writeb_io(p, 0, 0x18, 0);
 
-		while ((inb(base_io + 0x9f) & 0x80) == 0)
+		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
 			cpu_relax();
 	
-		inb(base_io + 0x97);
-		outb(8, base_io + 0x81);
-		outb(0x7f, base_io + 0x82);
-		outb(0x20, base_io + 0x91);
+		atp_readb_io(p, 0, 0x17);
+		atp_writeb_io(p, 0, 1, 8);
+		atp_writeb_io(p, 0, 2, 0x7f);
+		atp_writeb_io(p, 0, 0x11, 0x20);
 
 		k=p->host_id[1];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
 		k |= 0x08;
-		outb(k, base_io + 0xc0);
-		outb(0, base_io + 0xd8);
+		atp_writeb_io(p, 1, 0, k);
+		atp_writeb_io(p, 1, 0x18, 0);
 
-		while ((inb(base_io + 0xdf) & 0x80) == 0)
+		while ((atp_readb_io(p, 1, 0x1f) & 0x80) == 0)
 			cpu_relax();
 
-		inb(base_io + 0xd7);
-		outb(8, base_io + 0xc1);
-		outb(0x7f, base_io + 0xc2);
-		outb(0x20, base_io + 0xd1);
+		atp_readb_io(p, 1, 0x17);
+		atp_writeb_io(p, 1, 1, 8);
+		atp_writeb_io(p, 1, 2, 0x7f);
+		atp_writeb_io(p, 1, 0x11, 0x20);
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
@@ -1524,13 +1540,13 @@ flash_ok_885:
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
 		atp_is(p, 1, true, atp_readb_io(p, 1, 0x1b) >> 7);
 		atp_writeb_io(p, 1, 0x16, 0x80);
-		k = inb(base_io + 0x28) & 0xcf;
+		k = atp_readb_base(p, 0x28) & 0xcf;
 		k |= 0xc0;
-		outb(k, base_io + 0x28);
-		k = inb(base_io + 0x1f) | 0x80;
-		outb(k, base_io + 0x1f);
-		k = inb(base_io + 0x29) | 0x01;
-		outb(k, base_io + 0x29);
+		atp_writeb_base(p, 0x28, k);
+		k = atp_readb_base(p, 0x1f) | 0x80;
+		atp_writeb_base(p, 0x1f, k);
+		k = atp_readb_base(p, 0x29) | 0x01;
+		atp_writeb_base(p, 0x29, k);
 #ifdef ED_DBGP
 		//printk("atp885: atp_host[0] 0x%p\n", atp_host[0]);
 #endif		
@@ -1554,9 +1570,9 @@ flash_ok_885:
 		atpdev->dev_id = ent->device;
 		host_id &= 0x07;
 		atpdev->host_id[0] = host_id;
-		atpdev->scam_on = inb(base_io + 0x22);
-		atpdev->global_map[0] = inb(base_io + 0x2d);
-		atpdev->ultra_map[0] = inw(base_io + 0x2e);
+		atpdev->scam_on = atp_readb_pci(atpdev, 0, 2);
+		atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
+		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
 
 		if (atpdev->ultra_map[0] == 0) {
 			atpdev->scam_on = 0x00;
@@ -1583,32 +1599,30 @@ flash_ok_885:
 		}
 
 		spin_lock_irqsave(shpnt->host_lock, flags);
-		if (atpdev->chip_ver > 0x07) {	/* check if atp876 chip then enable terminator */
-			outb(0x00, base_io + 0x3e);
-		}
+		if (atpdev->chip_ver > 0x07)	/* check if atp876 chip then enable terminator */
+			atp_writeb_base(p, 0x3e, 0x00);
  
-		k = (inb(base_io + 0x3a) & 0xf3) | 0x10;
-		outb(k, base_io + 0x3a);
-		outb((k & 0xdf), base_io + 0x3a);
+		k = (atp_readb_base(p, 0x3a) & 0xf3) | 0x10;
+		atp_writeb_base(p, 0x3a, k);
+		atp_writeb_base(p, 0x3a, k & 0xdf);
 		mdelay(32);
-		outb(k, base_io + 0x3a);
+		atp_writeb_base(p, 0x3a, k);
 		mdelay(32);
-		outb((host_id | 0x08), base_io + 0);
-		outb(0, base_io + 0x18);
-		while ((inb(base_io + 0x1f) & 0x80) == 0)
+		atp_writeb_io(p, 0, 0, host_id | 0x08);
+		atp_writeb_io(p, 0, 0x18, 0);
+		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
 			mdelay(1);
 
-		inb(base_io + 0x17);
-		outb(8, base_io + 1);
-		outb(0x7f, base_io + 2);
-		outb(0x20, base_io + 0x11);
+		atp_readb_io(p, 0, 0x17);
+		atp_writeb_io(p, 0, 1, 8);
+		atp_writeb_io(p, 0, 2, 0x7f);
+		atp_writeb_io(p, 0, 0x11, 0x20);
 
 		tscam(shpnt);
-		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) | 0x10);
+		atp_writeb_base(p, 0x3a, atp_readb_base(p, 0x3a) | 0x10);
 		atp_is(p, 0, p->chip_ver == 4, 0);
-		atp_writeb_io(p, 0, 0x3a, atp_readb_io(p, 0, 0x3a) & 0xef);
-		outb((inb(base_io + 0x3a) & 0xef), base_io + 0x3a);
-		outb((inb(base_io + 0x3b) | 0x20), base_io + 0x3b);
+		atp_writeb_base(p, 0x3a, atp_readb_base(p, 0x3a) & 0xef);
+		atp_writeb_base(p, 0x3b, atp_readb_base(p, 0x3b) | 0x20);
 		if (atpdev->chip_ver == 4)
 			shpnt->max_id = 16;
 		else		
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 32/52] atp870u: Replace port 0x80 delay by udelay
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (30 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 31/52] atp870u: Convert remaining in[bwl] and out[bwl] to wrappers Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 33/52] atp870u: Fix incorrect writeb_io access to register 0x3a Ondrej Zary
                   ` (20 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

tscam() is using port 0x80 access for delays but that's x86-only.
Use udelay(2) instead.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index bccf872..c4a59cc 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1036,7 +1036,7 @@ static void tscam(struct Scsi_Host *host)
 	atp_writeb_io(dev, 0, 0x02, 0x7f);
 	atp_writeb_io(dev, 0, 0x1b, 0x02);
 
-	outb(0, 0x80);
+	udelay(2);
 
 	val = 0x0080;		/* bsy  */
 	atp_writew_io(dev, 0, 0x1c, val);
@@ -1044,7 +1044,7 @@ static void tscam(struct Scsi_Host *host)
 	atp_writew_io(dev, 0, 0x1c, val);
 	val |= 0x0004;		/* msg  */
 	atp_writew_io(dev, 0, 0x1c, val);
-	inb(0x80);		/* 2 deskew delay(45ns*2=90ns) */
+	udelay(2);		/* 2 deskew delay(45ns*2=90ns) */
 	val &= 0x007f;		/* no bsy  */
 	atp_writew_io(dev, 0, 0x1c, val);
 	mdelay(128);
@@ -1052,7 +1052,7 @@ static void tscam(struct Scsi_Host *host)
 	atp_writew_io(dev, 0, 0x1c, val);
 	while ((atp_readb_io(dev, 0, 0x1c) & 0x04) != 0)
 		;
-	outb(1, 0x80);
+	udelay(2);
 	udelay(100);
 	for (n = 0; n < 0x30000; n++)
 		if ((atp_readb_io(dev, 0, 0x1c) & 0x80) != 0)	/* bsy ? */
@@ -1060,13 +1060,13 @@ static void tscam(struct Scsi_Host *host)
 	if (n < 0x30000)
 		for (n = 0; n < 0x30000; n++)
 			if ((atp_readb_io(dev, 0, 0x1c) & 0x81) == 0x0081) {
-				inb(0x80);
+				udelay(2);
 				val |= 0x8003;		/* io,cd,db7  */
 				atp_writew_io(dev, 0, 0x1c, val);
-				inb(0x80);
+				udelay(2);
 				val &= 0x00bf;		/* no sel     */
 				atp_writew_io(dev, 0, 0x1c, val);
-				outb(2, 0x80);
+				udelay(2);
 				break;
 			}
 	while (1) {
@@ -1093,18 +1093,18 @@ static void tscam(struct Scsi_Host *host)
 	val &= 0x00ff;		/* synchronization  */
 	val |= 0x3f00;
 	fun_scam(dev, &val);
-	outb(3, 0x80);
+	udelay(2);
 	val &= 0x00ff;		/* isolation        */
 	val |= 0x2000;
 	fun_scam(dev, &val);
-	outb(4, 0x80);
+	udelay(2);
 	i = 8;
 	j = 0;
 
 	while (1) {
 		if ((atp_readw_io(dev, 0, 0x1c) & 0x2000) == 0)
 			continue;
-		outb(5, 0x80);
+		udelay(2);
 		val &= 0x00ff;		/* get ID_STRING */
 		val |= 0x2000;
 		k = fun_scam(dev, &val);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 33/52] atp870u: Fix incorrect writeb_io access to register 0x3a
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (31 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 32/52] atp870u: Replace port 0x80 delay by udelay Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 34/52] atp870u: Introduce atp_set_host_id Ondrej Zary
                   ` (19 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

The ioport region is 0x20 bytes long so accessing 0x3a register using
writeb_io is incorrect. Use writeb_base instead.
There's no change in behavior as 870 chips have ioport = baseport.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index c4a59cc..04b29d3 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -364,9 +364,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 					atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
 			} else {				
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
-					atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+					atp_writeb_base(dev, 0x3a, (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08);
 				else
-					atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
+					atp_writeb_base(dev, 0x3a, atp_readb_base(dev, 0x3a) & 0xf3);
 			}	
 			j = 0;
 			id = 1;
@@ -889,9 +889,9 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 			atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
 	} else {		
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
-			atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+			atp_writeb_base(dev, 0x3a, (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08);
 		else
-			atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
+			atp_writeb_base(dev, 0x3a, atp_readb_base(dev, 0x3a) & 0xf3);
 	}	
 
 	if(workreq->sc_data_direction == DMA_TO_DEVICE) {
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 34/52] atp870u: Introduce atp_set_host_id
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (32 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 33/52] atp870u: Fix incorrect writeb_io access to register 0x3a Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 35/52] atp870u: Reduce log spam on module load/unload Ondrej Zary
                   ` (18 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

The code for setting host adapter ID is the same for all chips.
Move it to a common function.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   57 +++++++++++++++---------------------------------
 1 file changed, 18 insertions(+), 39 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 04b29d3..9621403 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1229,6 +1229,18 @@ static int atp870u_init_tables(struct Scsi_Host *host)
 	return 0;
 }
 
+static void atp_set_host_id(struct atp_unit *atp, u8 c, u8 host_id)
+{
+	atp_writeb_io(atp, c, 0, host_id | 0x08);
+	atp_writeb_io(atp, c, 0x18, 0);
+	while ((atp_readb_io(atp, c, 0x1f) & 0x80) == 0)
+		mdelay(1);
+	atp_readb_io(atp, c, 0x17);
+	atp_writeb_io(atp, c, 1, 8);
+	atp_writeb_io(atp, c, 2, 0x7f);
+	atp_writeb_io(atp, c, 0x11, 0x20);
+}
+
 /* return non-zero on detection */
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
@@ -1379,14 +1391,8 @@ flash_ok_880:
 		mdelay(32);
 		atp_readb_io(p, 0, 0x1b);
 		atp_readb_io(p, 0, 0x17);
-		atp_writeb_io(p, 0, 0, host_id | 0x08);
-		atp_writeb_io(p, 0, 0x18, 0);
-		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
-			mdelay(1);
-		atp_readb_io(p, 0, 0x17);
-		atp_writeb_io(p, 0, 1, 8);
-		atp_writeb_io(p, 0, 2, 0x7f);
-		atp_writeb_io(p, 0, 0x11, 0x20);
+
+		atp_set_host_id(p, 0, host_id);
 
 		tscam(shpnt);
 		atp_is(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
@@ -1503,35 +1509,16 @@ flash_ok_885:
 		atp_readb_io(p, 0, 0x17);
 		atp_readb_io(p, 1, 0x1b);
 		atp_readb_io(p, 1, 0x17);
+
 		k=p->host_id[0];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
-		k |= 0x08;
-		atp_writeb_io(p, 0, 0, k);
-		atp_writeb_io(p, 0, 0x18, 0);
-
-		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
-			cpu_relax();
-	
-		atp_readb_io(p, 0, 0x17);
-		atp_writeb_io(p, 0, 1, 8);
-		atp_writeb_io(p, 0, 2, 0x7f);
-		atp_writeb_io(p, 0, 0x11, 0x20);
+		atp_set_host_id(p, 0, k);
 
 		k=p->host_id[1];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
-		k |= 0x08;
-		atp_writeb_io(p, 1, 0, k);
-		atp_writeb_io(p, 1, 0x18, 0);
-
-		while ((atp_readb_io(p, 1, 0x1f) & 0x80) == 0)
-			cpu_relax();
-
-		atp_readb_io(p, 1, 0x17);
-		atp_writeb_io(p, 1, 1, 8);
-		atp_writeb_io(p, 1, 2, 0x7f);
-		atp_writeb_io(p, 1, 0x11, 0x20);
+		atp_set_host_id(p, 1, k);
 
 		tscam_885();
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
@@ -1608,15 +1595,7 @@ flash_ok_885:
 		mdelay(32);
 		atp_writeb_base(p, 0x3a, k);
 		mdelay(32);
-		atp_writeb_io(p, 0, 0, host_id | 0x08);
-		atp_writeb_io(p, 0, 0x18, 0);
-		while ((atp_readb_io(p, 0, 0x1f) & 0x80) == 0)
-			mdelay(1);
-
-		atp_readb_io(p, 0, 0x17);
-		atp_writeb_io(p, 0, 1, 8);
-		atp_writeb_io(p, 0, 2, 0x7f);
-		atp_writeb_io(p, 0, 0x11, 0x20);
+		atp_set_host_id(p, 0, host_id);
 
 		tscam(shpnt);
 		atp_writeb_base(p, 0x3a, atp_readb_base(p, 0x3a) | 0x10);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 35/52] atp870u: Reduce log spam on module load/unload
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (33 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 34/52] atp870u: Introduce atp_set_host_id Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 36/52] atp870u: Remove empty tscam_885() Ondrej Zary
                   ` (17 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |    7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 9621403..b662e39 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1260,9 +1260,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	if (pci_enable_device(pdev))
 		goto err_eio;
 
-        if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
-                printk(KERN_INFO "atp870u: use 32bit DMA mask.\n");
-        } else {
+	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
                 printk(KERN_ERR "atp870u: DMA mask required but not available.\n");
 		goto err_eio;
         }
@@ -1742,12 +1740,9 @@ static void atp870u_remove (struct pci_dev *pdev)
 	
 	
 	scsi_remove_host(pshost);
-	printk(KERN_INFO "free_irq : %d\n",pshost->irq);
 	free_irq(pshost->irq, pshost);
 	release_region(pshost->io_port, pshost->n_io_port);
-	printk(KERN_INFO "atp870u_free_tables : %p\n",pshost);
 	atp870u_free_tables(pshost);
-	printk(KERN_INFO "scsi_host_put : %p\n",pshost);
 	scsi_host_put(pshost);
 }
 MODULE_LICENSE("GPL");
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 36/52] atp870u: Remove empty tscam_885()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (34 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 35/52] atp870u: Reduce log spam on module load/unload Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 37/52] atp870u: Use module_pci_driver Ondrej Zary
                   ` (16 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

tscam_885() is empty (except a delay) so remove it.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index b662e39..2570919 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -42,7 +42,6 @@
 static struct scsi_host_template atp870u_template;
 static void send_s870(struct atp_unit *dev,unsigned char c);
 static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode);
-static void tscam_885(void);
 
 static inline void atp_writeb_base(struct atp_unit *atp, u8 reg, u8 val)
 {
@@ -1518,7 +1517,7 @@ flash_ok_885:
 		   k = (k & 0x07) | 0x40;
 		atp_set_host_id(p, 1, k);
 
-		tscam_885();
+		mdelay(600); /* this delay used to be called tscam_885() */
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
 		atp_is(p, 0, true, atp_readb_io(p, 0, 0x1b) >> 7);
 		atp_writeb_io(p, 0, 0x16, 0x80);
@@ -1802,18 +1801,6 @@ static void __exit atp870u_exit(void)
 	pci_unregister_driver(&atp870u_driver);
 }
 
-static void tscam_885(void)
-{
-	unsigned char i;
-
-	for (i = 0; i < 0x2; i++) {
-		mdelay(300);
-	}
-	return;
-}
-
-
-
 static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode)
 {
 	unsigned char i, j, k, rmb, n;
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 37/52] atp870u: Use module_pci_driver
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (35 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 36/52] atp870u: Remove empty tscam_885() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 38/52] atp870u: Use n_io_port in request_region and release_region Ondrej Zary
                   ` (15 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 2570919..7f53a50 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1785,21 +1785,7 @@ static struct pci_driver atp870u_driver = {
 	.remove		= atp870u_remove,
 };
 
-static int __init atp870u_init(void)
-{
-#ifdef ED_DBGP	
-	printk("atp870u_init: Entry\n");
-#endif	
-	return pci_register_driver(&atp870u_driver);
-}
-
-static void __exit atp870u_exit(void)
-{
-#ifdef ED_DBGP	
-	printk("atp870u_exit: Entry\n");
-#endif
-	pci_unregister_driver(&atp870u_driver);
-}
+module_pci_driver(atp870u_driver);
 
 static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsigned char lvdmode)
 {
@@ -2406,7 +2392,3 @@ set_syn_ok:
 #endif
 	}
 }
-
-module_init(atp870u_init);
-module_exit(atp870u_exit);
-
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 38/52] atp870u: Use n_io_port in request_region and release_region
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (36 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 37/52] atp870u: Use module_pci_driver Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 39/52] atp870u: Remove useless and broken card counting Ondrej Zary
                   ` (14 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 7f53a50..a06a0a4 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1610,16 +1610,8 @@ flash_ok_885:
 		shpnt->irq = pdev->irq;		
 	} 
 		spin_unlock_irqrestore(shpnt->host_lock, flags);
-		if(ent->device==ATP885_DEVID) {
-			if(!request_region(base_io, 0xff, "atp870u")) /* Register the IO ports that we use */
-				goto request_io_fail;
-		} else if((ent->device==ATP880_DEVID1)||(ent->device==ATP880_DEVID2)) {
-			if(!request_region(base_io, 0x60, "atp870u")) /* Register the IO ports that we use */
-				goto request_io_fail;
-		} else {
-			if(!request_region(base_io, 0x40, "atp870u")) /* Register the IO ports that we use */
-				goto request_io_fail;
-		}				
+		if (!request_region(base_io, shpnt->n_io_port, "atp870u"))
+			goto request_io_fail;
 		count++;
 		if (scsi_add_host(shpnt, &pdev->dev))
 			goto scsi_add_fail;
@@ -1631,13 +1623,7 @@ flash_ok_885:
 
 scsi_add_fail:
 	printk("atp870u_prob:scsi_add_fail\n");
-	if(ent->device==ATP885_DEVID) {
-		release_region(base_io, 0xff);
-	} else if((ent->device==ATP880_DEVID1)||(ent->device==ATP880_DEVID2)) {
-		release_region(base_io, 0x60);
-	} else {
-		release_region(base_io, 0x40);
-	}
+	release_region(base_io, shpnt->n_io_port);
 request_io_fail:
 	printk("atp870u_prob:request_io_fail\n");
 	free_irq(pdev->irq, shpnt);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 39/52] atp870u: Remove useless and broken card counting
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (37 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 38/52] atp870u: Use n_io_port in request_region and release_region Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 40/52] atp870u: Remove unused irq from struct atp_unit Ondrej Zary
                   ` (13 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index a06a0a4..0b349bc 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1250,7 +1250,6 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	struct Scsi_Host *shpnt = NULL;
 	struct atp_unit *atpdev, *p;
 	unsigned char setupdata[2][16];
-	int count = 0;
 
 	atpdev = kzalloc(sizeof(*atpdev), GFP_KERNEL);
 	if (!atpdev)
@@ -1298,8 +1297,8 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		host_id = atp_readb_base(atpdev, 0x39);
 		host_id >>= 0x04;
 
-		printk(KERN_INFO "   ACARD AEC-67160 PCI Ultra3 LVD Host Adapter: %d"
-			"    IO:%x, IRQ:%d.\n", count, base_io, pdev->irq);
+		printk(KERN_INFO "   ACARD AEC-67160 PCI Ultra3 LVD Host Adapter:"
+			"    IO:%x, IRQ:%d.\n", base_io, pdev->irq);
 		atpdev->dev_id = ent->device;
 		atpdev->host_id[0] = host_id;
 
@@ -1546,8 +1545,8 @@ flash_ok_885:
 	} else {
 		error = pci_read_config_byte(pdev, 0x49, &host_id);
 
-		printk(KERN_INFO "   ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: %d "
-			"IO:%x, IRQ:%d.\n", count, base_io, pdev->irq);
+		printk(KERN_INFO "   ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
+			"IO:%x, IRQ:%d.\n", base_io, pdev->irq);
 
 		atpdev->ioport[0] = base_io;
 		atpdev->pciport[0] = base_io + 0x20;
@@ -1612,7 +1611,6 @@ flash_ok_885:
 		spin_unlock_irqrestore(shpnt->host_lock, flags);
 		if (!request_region(base_io, shpnt->n_io_port, "atp870u"))
 			goto request_io_fail;
-		count++;
 		if (scsi_add_host(shpnt, &pdev->dev))
 			goto scsi_add_fail;
 		scsi_scan_host(shpnt);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 40/52] atp870u: Remove unused irq from struct atp_unit
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (38 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 39/52] atp870u: Remove useless and broken card counting Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 41/52] atp870u: Improve _probe() Ondrej Zary
                   ` (12 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.h |    1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/scsi/atp870u.h b/drivers/scsi/atp870u.h
index 5cf6256..c3c6c13 100644
--- a/drivers/scsi/atp870u.h
+++ b/drivers/scsi/atp870u.h
@@ -26,7 +26,6 @@ struct atp_unit
 	unsigned long baseport;
 	unsigned long ioport[2];
 	unsigned long pciport[2];
-	unsigned long irq;
 	unsigned char last_cmd[2];
 	unsigned char in_snd[2];
 	unsigned char in_int[2];
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 41/52] atp870u: Improve _probe()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (39 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 40/52] atp870u: Remove unused irq from struct atp_unit Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 42/52] atp870u: Improve unsupported chip detection Ondrej Zary
                   ` (11 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move scsi_host_alloc() to the top of _probe() to remove code duplication,
*p and unneeded atpdev (de)allocation and copying.
While at it, fix the error paths to return real error codes and also add
missing pci_disble_device() call.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  236 +++++++++++++++++++++++-------------------------
 1 file changed, 113 insertions(+), 123 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 0b349bc..d0119f1 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1248,29 +1248,41 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	unsigned int base_io, error,n;
 	unsigned char host_id;
 	struct Scsi_Host *shpnt = NULL;
-	struct atp_unit *atpdev, *p;
+	struct atp_unit *atpdev;
 	unsigned char setupdata[2][16];
+	int err;
 
-	atpdev = kzalloc(sizeof(*atpdev), GFP_KERNEL);
-	if (!atpdev)
-		return -ENOMEM;
-
-	if (pci_enable_device(pdev))
-		goto err_eio;
+	err = pci_enable_device(pdev);
+	if (err)
+		goto fail;
 
 	if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
                 printk(KERN_ERR "atp870u: DMA mask required but not available.\n");
-		goto err_eio;
+                err = -EIO;
+                goto disable_device;
         }
 
+        err = -ENOMEM;
+	shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
+	if (!shpnt)
+		goto disable_device;
+
+	atpdev = shost_priv(shpnt);
+
+	atpdev->host = shpnt;
+	atpdev->pdev = pdev;
+	pci_set_drvdata(pdev, atpdev);
+
 	/*
 	 * It's probably easier to weed out some revisions like
 	 * this than via the PCI device table
 	 */
 	if (ent->device == PCI_DEVICE_ID_ARTOP_AEC7610) {
 		atpdev->chip_ver = pdev->revision;
-		if (atpdev->chip_ver < 2)
-			goto err_eio;
+		if (atpdev->chip_ver < 2) {
+			err = -ENODEV;
+			goto unregister;
+		}
 	}
 
 	switch (ent->device) {
@@ -1358,41 +1370,33 @@ flash_ok_880:
 		atpdev->async[0] = ~(atpdev->async[0]);
 		atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]);
  
-		shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
-		if (!shpnt)
-			goto err_nomem;
-
-		p = (struct atp_unit *)&shpnt->hostdata;
-
-		atpdev->host = shpnt;
-		atpdev->pdev = pdev;
-		pci_set_drvdata(pdev, p);
-		memcpy(p, atpdev, sizeof(*atpdev));
 		if (atp870u_init_tables(shpnt) < 0) {
 			printk(KERN_ERR "Unable to allocate tables for Acard controller\n");
+			err = -ENOMEM;
 			goto unregister;
 		}
 
-		if (request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp880i", shpnt)) {
+		err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp880i", shpnt);
+		if (err) {
  			printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", pdev->irq);
 			goto free_tables;
 		}
 
 		spin_lock_irqsave(shpnt->host_lock, flags);
-		k = atp_readb_base(p, 0x38) & 0x80;
-		atp_writeb_base(p, 0x38, k);
-		atp_writeb_base(p, 0x3b, 0x20);
+		k = atp_readb_base(atpdev, 0x38) & 0x80;
+		atp_writeb_base(atpdev, 0x38, k);
+		atp_writeb_base(atpdev, 0x3b, 0x20);
 		mdelay(32);
-		atp_writeb_base(p, 0x3b, 0);
+		atp_writeb_base(atpdev, 0x3b, 0);
 		mdelay(32);
-		atp_readb_io(p, 0, 0x1b);
-		atp_readb_io(p, 0, 0x17);
+		atp_readb_io(atpdev, 0, 0x1b);
+		atp_readb_io(atpdev, 0, 0x17);
 
-		atp_set_host_id(p, 0, host_id);
+		atp_set_host_id(atpdev, 0, host_id);
 
 		tscam(shpnt);
-		atp_is(p, 0, true, atp_readb_base(p, 0x3f) & 0x40);
-		atp_writeb_base(p, 0x38, 0xb0);
+		atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
+		atp_writeb_base(atpdev, 0x38, 0xb0);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
 		shpnt->unique_id = base_io;
@@ -1410,50 +1414,43 @@ flash_ok_880:
 		atpdev->pciport[0] = base_io + 0x40;
 		atpdev->pciport[1] = base_io + 0x50;
 				
-		shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
-		if (!shpnt)
-			goto err_nomem;
-        	
-		p = (struct atp_unit *)&shpnt->hostdata;
-        	
-		atpdev->host = shpnt;
-		atpdev->pdev = pdev;
-		pci_set_drvdata(pdev, p);
-		memcpy(p, atpdev, sizeof(struct atp_unit));
-		if (atp870u_init_tables(shpnt) < 0)
+		if (atp870u_init_tables(shpnt) < 0) {
+			err = -ENOMEM;
 			goto unregister;
+		}
 			
 #ifdef ED_DBGP		
-	printk("request_irq() shpnt %p hostdata %p\n", shpnt, p);
+	printk("request_irq() shpnt %p hostdata %p\n", shpnt, atpdev);
 #endif	        
-		if (request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt)) {
+		err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt);
+		if (err) {
 				printk(KERN_ERR "Unable to allocate IRQ for Acard controller.\n");
 			goto free_tables;
 		}
 		
 		spin_lock_irqsave(shpnt->host_lock, flags);        					
         			
-		c = atp_readb_base(p, 0x29);
-		atp_writeb_base(p, 0x29, c | 0x04);
+		c = atp_readb_base(atpdev, 0x29);
+		atp_writeb_base(atpdev, 0x29, c | 0x04);
         	
 		n=0x1f80;
 next_fblk_885:
 		if (n >= 0x2000) {
 		   goto flash_ok_885;
 		}
-		atp_writew_base(p, 0x3c, n);
-		if (atp_readl_base(p, 0x38) == 0xffffffff) {
+		atp_writew_base(atpdev, 0x3c, n);
+		if (atp_readl_base(atpdev, 0x38) == 0xffffffff) {
 		   goto flash_ok_885;
 		}
 		for (m=0; m < 2; m++) {
-		    p->global_map[m]= 0;
+		    atpdev->global_map[m]= 0;
 		    for (k=0; k < 4; k++) {
-			atp_writew_base(p, 0x3c, n++);
-			((unsigned long *)&setupdata[m][0])[k] = atp_readl_base(p, 0x38);
+			atp_writew_base(atpdev, 0x3c, n++);
+			((unsigned long *)&setupdata[m][0])[k] = atp_readl_base(atpdev, 0x38);
 		    }
 		    for (k=0; k < 4; k++) {
-			atp_writew_base(p, 0x3c, n++);
-			((unsigned long *)&p->sp[m][0])[k] = atp_readl_base(p, 0x38);
+			atp_writew_base(atpdev, 0x3c, n++);
+			((unsigned long *)&atpdev->sp[m][0])[k] = atp_readl_base(atpdev, 0x38);
 		    }
 		    n += 8;
 		}
@@ -1462,81 +1459,81 @@ flash_ok_885:
 #ifdef ED_DBGP
 		printk( "Flash Read OK\n");
 #endif	
-		c = atp_readb_base(p, 0x29);
-		atp_writeb_base(p, 0x29, c & 0xfb);
+		c = atp_readb_base(atpdev, 0x29);
+		atp_writeb_base(atpdev, 0x29, c & 0xfb);
 		for (c=0;c < 2;c++) {
-		    p->ultra_map[c]=0;
-		    p->async[c] = 0;
+		    atpdev->ultra_map[c]=0;
+		    atpdev->async[c] = 0;
 		    for (k=0; k < 16; k++) {
 			n=1;
 			n = n << k;
-			if (p->sp[c][k] > 1) {
-			   p->ultra_map[c] |= n;
+			if (atpdev->sp[c][k] > 1) {
+			   atpdev->ultra_map[c] |= n;
 			} else {
-			   if (p->sp[c][k] == 0) {
-			      p->async[c] |= n;
+			   if (atpdev->sp[c][k] == 0) {
+			      atpdev->async[c] |= n;
 			   }
 			}
 		    }
-		    p->async[c] = ~(p->async[c]);
+		    atpdev->async[c] = ~(atpdev->async[c]);
 
-		    if (p->global_map[c] == 0) {
+		    if (atpdev->global_map[c] == 0) {
 		       k=setupdata[c][1];
 		       if ((k & 0x40) != 0)
-			  p->global_map[c] |= 0x20;
+			  atpdev->global_map[c] |= 0x20;
 		       k &= 0x07;
-		       p->global_map[c] |= k;
+		       atpdev->global_map[c] |= k;
 		       if ((setupdata[c][2] & 0x04) != 0)
-			  p->global_map[c] |= 0x08;
-		       p->host_id[c] = setupdata[c][0] & 0x07;
+			  atpdev->global_map[c] |= 0x08;
+		       atpdev->host_id[c] = setupdata[c][0] & 0x07;
 		    }
 		}
 
-		k = atp_readb_base(p, 0x28) & 0x8f;
+		k = atp_readb_base(atpdev, 0x28) & 0x8f;
 		k |= 0x10;
-		atp_writeb_base(p, 0x28, k);
-		atp_writeb_pci(p, 0, 1, 0x80);
-		atp_writeb_pci(p, 1, 1, 0x80);
+		atp_writeb_base(atpdev, 0x28, k);
+		atp_writeb_pci(atpdev, 0, 1, 0x80);
+		atp_writeb_pci(atpdev, 1, 1, 0x80);
 		mdelay(100);
-		atp_writeb_pci(p, 0, 1, 0);
-		atp_writeb_pci(p, 1, 1, 0);
+		atp_writeb_pci(atpdev, 0, 1, 0);
+		atp_writeb_pci(atpdev, 1, 1, 0);
 		mdelay(1000);
-		atp_readb_io(p, 0, 0x1b);
-		atp_readb_io(p, 0, 0x17);
-		atp_readb_io(p, 1, 0x1b);
-		atp_readb_io(p, 1, 0x17);
+		atp_readb_io(atpdev, 0, 0x1b);
+		atp_readb_io(atpdev, 0, 0x17);
+		atp_readb_io(atpdev, 1, 0x1b);
+		atp_readb_io(atpdev, 1, 0x17);
 
-		k=p->host_id[0];
+		k=atpdev->host_id[0];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
-		atp_set_host_id(p, 0, k);
+		atp_set_host_id(atpdev, 0, k);
 
-		k=p->host_id[1];
+		k=atpdev->host_id[1];
 		if (k > 7)
 		   k = (k & 0x07) | 0x40;
-		atp_set_host_id(p, 1, k);
+		atp_set_host_id(atpdev, 1, k);
 
 		mdelay(600); /* this delay used to be called tscam_885() */
 		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		atp_is(p, 0, true, atp_readb_io(p, 0, 0x1b) >> 7);
-		atp_writeb_io(p, 0, 0x16, 0x80);
+		atp_is(atpdev, 0, true, atp_readb_io(atpdev, 0, 0x1b) >> 7);
+		atp_writeb_io(atpdev, 0, 0x16, 0x80);
 		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		atp_is(p, 1, true, atp_readb_io(p, 1, 0x1b) >> 7);
-		atp_writeb_io(p, 1, 0x16, 0x80);
-		k = atp_readb_base(p, 0x28) & 0xcf;
+		atp_is(atpdev, 1, true, atp_readb_io(atpdev, 1, 0x1b) >> 7);
+		atp_writeb_io(atpdev, 1, 0x16, 0x80);
+		k = atp_readb_base(atpdev, 0x28) & 0xcf;
 		k |= 0xc0;
-		atp_writeb_base(p, 0x28, k);
-		k = atp_readb_base(p, 0x1f) | 0x80;
-		atp_writeb_base(p, 0x1f, k);
-		k = atp_readb_base(p, 0x29) | 0x01;
-		atp_writeb_base(p, 0x29, k);
+		atp_writeb_base(atpdev, 0x28, k);
+		k = atp_readb_base(atpdev, 0x1f) | 0x80;
+		atp_writeb_base(atpdev, 0x1f, k);
+		k = atp_readb_base(atpdev, 0x29) | 0x01;
+		atp_writeb_base(atpdev, 0x29, k);
 #ifdef ED_DBGP
 		//printk("atp885: atp_host[0] 0x%p\n", atp_host[0]);
 #endif		
 		shpnt->max_id = 16;
-		shpnt->max_lun = (p->global_map[0] & 0x07) + 1;
+		shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1;
 		shpnt->max_channel = 1;
-		shpnt->this_id = p->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 */
@@ -1563,41 +1560,35 @@ flash_ok_885:
 			atpdev->ultra_map[0] = 0xffff;
 		}
 
-		shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
-		if (!shpnt)
-			goto err_nomem;
 
-		p = (struct atp_unit *)&shpnt->hostdata;
-		
-		atpdev->host = shpnt;
-		atpdev->pdev = pdev;
-		pci_set_drvdata(pdev, p);
-		memcpy(p, atpdev, sizeof(*atpdev));
-		if (atp870u_init_tables(shpnt) < 0)
+		if (atp870u_init_tables(shpnt) < 0) {
+			err = -ENOMEM;
 			goto unregister;
+		}
 
-		if (request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870i", shpnt)) {
+		err = request_irq(pdev->irq, atp870u_intr_handle, IRQF_SHARED, "atp870i", shpnt);
+		if (err) {
 			printk(KERN_ERR "Unable to allocate IRQ%d for Acard controller.\n", pdev->irq);
 			goto free_tables;
 		}
 
 		spin_lock_irqsave(shpnt->host_lock, flags);
 		if (atpdev->chip_ver > 0x07)	/* check if atp876 chip then enable terminator */
-			atp_writeb_base(p, 0x3e, 0x00);
+			atp_writeb_base(atpdev, 0x3e, 0x00);
  
-		k = (atp_readb_base(p, 0x3a) & 0xf3) | 0x10;
-		atp_writeb_base(p, 0x3a, k);
-		atp_writeb_base(p, 0x3a, k & 0xdf);
+		k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
+		atp_writeb_base(atpdev, 0x3a, k);
+		atp_writeb_base(atpdev, 0x3a, k & 0xdf);
 		mdelay(32);
-		atp_writeb_base(p, 0x3a, k);
+		atp_writeb_base(atpdev, 0x3a, k);
 		mdelay(32);
-		atp_set_host_id(p, 0, host_id);
+		atp_set_host_id(atpdev, 0, host_id);
 
 		tscam(shpnt);
-		atp_writeb_base(p, 0x3a, atp_readb_base(p, 0x3a) | 0x10);
-		atp_is(p, 0, p->chip_ver == 4, 0);
-		atp_writeb_base(p, 0x3a, atp_readb_base(p, 0x3a) & 0xef);
-		atp_writeb_base(p, 0x3b, atp_readb_base(p, 0x3b) | 0x20);
+		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
+		atp_is(atpdev, 0, atpdev->chip_ver == 4, 0);
+		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
+		atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
 		if (atpdev->chip_ver == 4)
 			shpnt->max_id = 16;
 		else		
@@ -1609,9 +1600,12 @@ flash_ok_885:
 		shpnt->irq = pdev->irq;		
 	} 
 		spin_unlock_irqrestore(shpnt->host_lock, flags);
-		if (!request_region(base_io, shpnt->n_io_port, "atp870u"))
+		if (!request_region(base_io, shpnt->n_io_port, "atp870u")) {
+			err = -EBUSY;
 			goto request_io_fail;
-		if (scsi_add_host(shpnt, &pdev->dev))
+		}
+		err = scsi_add_host(shpnt, &pdev->dev);
+		if (err)
 			goto scsi_add_fail;
 		scsi_scan_host(shpnt);
 #ifdef ED_DBGP			
@@ -1629,15 +1623,11 @@ free_tables:
 	printk("atp870u_prob:free_table\n");
 	atp870u_free_tables(shpnt);
 unregister:
-	printk("atp870u_prob:unregister\n");
 	scsi_host_put(shpnt);
-	return -1;		
-err_eio:
-	kfree(atpdev);
-	return -EIO;
-err_nomem:
-	kfree(atpdev);
-	return -ENOMEM;
+disable_device:
+	pci_disable_device(pdev);
+fail:
+	return err;
 }
 
 /* The abort command does not leave the device in a clean state where
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 42/52] atp870u: Improve unsupported chip detection
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (40 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 41/52] atp870u: Improve _probe() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 43/52] atp870u: Remove chip_ver from struct atp_unit Ondrej Zary
                   ` (10 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index d0119f1..128613e 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1252,6 +1252,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	unsigned char setupdata[2][16];
 	int err;
 
+	if (ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 && pdev->revision < 2) {
+		dev_err(&pdev->dev, "ATP850S chips (AEC6710L/F cards) are not supported.\n");
+		return -ENODEV;
+	}
+
 	err = pci_enable_device(pdev);
 	if (err)
 		goto fail;
@@ -1273,19 +1278,10 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	atpdev->pdev = pdev;
 	pci_set_drvdata(pdev, atpdev);
 
-	/*
-	 * It's probably easier to weed out some revisions like
-	 * this than via the PCI device table
-	 */
-	if (ent->device == PCI_DEVICE_ID_ARTOP_AEC7610) {
-		atpdev->chip_ver = pdev->revision;
-		if (atpdev->chip_ver < 2) {
-			err = -ENODEV;
-			goto unregister;
-		}
-	}
-
 	switch (ent->device) {
+	case PCI_DEVICE_ID_ARTOP_AEC7610:
+		atpdev->chip_ver = pdev->revision;
+		break;
 	case PCI_DEVICE_ID_ARTOP_AEC7612UW:
 	case PCI_DEVICE_ID_ARTOP_AEC7612SUW:
 	case ATP880_DEVID1:	
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 43/52] atp870u: Remove chip_ver from struct atp_unit
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (41 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 42/52] atp870u: Improve unsupported chip detection Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 44/52] atp870u: Simplify _probe() Ondrej Zary
                   ` (9 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

chip_ver is used for wide chip detection only. Remove it and use a local
variable instead (for 870; 880 and 885 are always wide).

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   39 ++++++++++++++-------------------------
 drivers/scsi/atp870u.h |    1 -
 2 files changed, 14 insertions(+), 26 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 128613e..f92eb00 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -954,7 +954,7 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val)
 	return j;
 }
 
-static void tscam(struct Scsi_Host *host)
+static void tscam(struct Scsi_Host *host, bool wide_chip)
 {
 
 	unsigned char i, j, k;
@@ -983,7 +983,7 @@ static void tscam(struct Scsi_Host *host)
 	m = 1;
 	m <<= dev->host_id[0];
 	j = 16;
-	if (dev->chip_ver < 4) {
+	if (!wide_chip) {
 		m |= 0xff00;
 		j = 8;
 	}
@@ -1012,7 +1012,7 @@ static void tscam(struct Scsi_Host *host)
 			k = i;
 		}
 		atp_writeb_io(dev, 0, 0x15, k);
-		if (dev->chip_ver == 4)
+		if (wide_chip)
 			atp_writeb_io(dev, 0, 0x1b, 0x01);
 		else
 			atp_writeb_io(dev, 0, 0x1b, 0x00);
@@ -1278,25 +1278,11 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	atpdev->pdev = pdev;
 	pci_set_drvdata(pdev, atpdev);
 
-	switch (ent->device) {
-	case PCI_DEVICE_ID_ARTOP_AEC7610:
-		atpdev->chip_ver = pdev->revision;
-		break;
-	case PCI_DEVICE_ID_ARTOP_AEC7612UW:
-	case PCI_DEVICE_ID_ARTOP_AEC7612SUW:
-	case ATP880_DEVID1:	
-	case ATP880_DEVID2:	
-	case ATP885_DEVID:	
-		atpdev->chip_ver = 0x04;
-	default:
-		break;
-	}
 	base_io = pci_resource_start(pdev, 0);
 	base_io &= 0xfffffff8;
 	atpdev->baseport = base_io;
 
 	if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) {
-		atpdev->chip_ver = pdev->revision;
 		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
 
 		atpdev->ioport[0] = base_io + 0x40;
@@ -1390,7 +1376,7 @@ flash_ok_880:
 
 		atp_set_host_id(atpdev, 0, host_id);
 
-		tscam(shpnt);
+		tscam(shpnt, true);
 		atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
 		atp_writeb_base(atpdev, 0x38, 0xb0);
 		shpnt->max_id = 16;
@@ -1536,6 +1522,11 @@ flash_ok_885:
 		shpnt->irq = pdev->irq;
 				
 	} else {
+		bool wide_chip =
+			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
+			 pdev->revision == 4) ||
+			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
+			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
 		error = pci_read_config_byte(pdev, 0x49, &host_id);
 
 		printk(KERN_INFO "   ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
@@ -1569,7 +1560,7 @@ flash_ok_885:
 		}
 
 		spin_lock_irqsave(shpnt->host_lock, flags);
-		if (atpdev->chip_ver > 0x07)	/* check if atp876 chip then enable terminator */
+		if (pdev->revision > 0x07)	/* check if atp876 chip then enable terminator */
 			atp_writeb_base(atpdev, 0x3e, 0x00);
  
 		k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
@@ -1580,15 +1571,13 @@ flash_ok_885:
 		mdelay(32);
 		atp_set_host_id(atpdev, 0, host_id);
 
-		tscam(shpnt);
+
+		tscam(shpnt, wide_chip);
 		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
-		atp_is(atpdev, 0, atpdev->chip_ver == 4, 0);
+		atp_is(atpdev, 0, wide_chip, 0);
 		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
 		atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
-		if (atpdev->chip_ver == 4)
-			shpnt->max_id = 16;
-		else		
-			shpnt->max_id = 8;
+		shpnt->max_id = wide_chip ? 16 : 8;
 		shpnt->this_id = host_id;
 		shpnt->unique_id = base_io;
 		shpnt->io_port = base_io;
diff --git a/drivers/scsi/atp870u.h b/drivers/scsi/atp870u.h
index c3c6c13..8c47c53 100644
--- a/drivers/scsi/atp870u.h
+++ b/drivers/scsi/atp870u.h
@@ -32,7 +32,6 @@ struct atp_unit
 	unsigned char quhd[2];
 	unsigned char quend[2];
 	unsigned char global_map[2];
-	unsigned char chip_ver;
 	unsigned char scam_on;
 	unsigned char host_id[2];
 	unsigned int working[2];
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 44/52] atp870u: Simplify _probe()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (42 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 43/52] atp870u: Remove chip_ver from struct atp_unit Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 45/52] atp870u: Introduce is880(), is885() and remove dev_id Ondrej Zary
                   ` (8 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move shpnt common code to the top, remove base_io, use pci_resource_len.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   65 +++++++++++++++++++++---------------------------
 1 file changed, 28 insertions(+), 37 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index f92eb00..8af51a9 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -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);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 45/52] atp870u: Introduce is880(), is885() and remove dev_id
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (43 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 44/52] atp870u: Simplify _probe() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 46/52] atp870u: Use pci_request_regions Ondrej Zary
                   ` (7 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Introduce chip type inline functions to simplify code, allowing to delete
dev_id from struct atp_unit.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   70 ++++++++++++++++++++++++++----------------------
 drivers/scsi/atp870u.h |    1 -
 2 files changed, 38 insertions(+), 33 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 8af51a9..4bb0f4f 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -103,6 +103,17 @@ static inline u8 atp_readb_pci(struct atp_unit *atp, u8 channel, u8 reg)
 	return inb(atp->pciport[channel] + reg);
 }
 
+static inline bool is880(struct atp_unit *atp)
+{
+	return atp->pdev->device == ATP880_DEVID1 ||
+	       atp->pdev->device == ATP880_DEVID2;
+}
+
+static inline bool is885(struct atp_unit *atp)
+{
+	return atp->pdev->device == ATP885_DEVID;
+}
+
 static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 {
 	unsigned long flags;
@@ -131,7 +142,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 	dev->in_int[c] = 1;
 	cmdp = atp_readb_io(dev, c, 0x10);
 	if (dev->working[c] != 0) {
-		if (dev->dev_id == ATP885_DEVID) {
+		if (is885(dev)) {
 			if ((atp_readb_io(dev, c, 0x16) & 0x80) == 0)
 				atp_writeb_io(dev, c, 0x16, (atp_readb_io(dev, c, 0x16) | 0x80));
 		}		
@@ -148,7 +159,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 		
 		i = atp_readb_io(dev, c, 0x17);
 		
-		if (dev->dev_id == ATP885_DEVID)
+		if (is885(dev))
 			atp_writeb_pci(dev, c, 2, 0x06);
 
 		target_id = atp_readb_io(dev, c, 0x15);
@@ -169,7 +180,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 		     }
 		     dev->last_cmd[c] |= 0x40;
 		}
-		if (dev->dev_id == ATP885_DEVID) 
+		if (is885(dev))
 			dev->r1f[c][target_id] |= j;
 #ifdef ED_DBGP
 		printk("atp870u_intr_handle status = %x\n",i);
@@ -178,7 +189,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			if ((dev->last_cmd[c] & 0xf0) != 0x40) {
 			   dev->last_cmd[c] = 0xff;
 			}
-			if (dev->dev_id == ATP885_DEVID) {
+			if (is885(dev)) {
 				adrcnt = 0;
 				((unsigned char *) &adrcnt)[2] = atp_readb_io(dev, c, 0x12);
 				((unsigned char *) &adrcnt)[1] = atp_readb_io(dev, c, 0x13);
@@ -249,7 +260,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			return IRQ_HANDLED;
 		}
 
-		if (dev->dev_id == ATP885_DEVID) {
+		if (is885(dev)) {
 			if ((i == 0x4c) || (i == 0x4d) || (i == 0x8c) || (i == 0x8d)) {
 		   		if ((i == 0x4c) || (i == 0x8c)) 
 		      			i=0x48;
@@ -301,7 +312,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			if (dev->last_cmd[c] != 0xff) {
 			   dev->last_cmd[c] |= 0x40;
 			}
-			if (dev->dev_id == ATP885_DEVID) {
+			if (is885(dev)) {
 				j = atp_readb_base(dev, 0x29) & 0xfe;
 				atp_writeb_base(dev, 0x29, j);
 			} else
@@ -316,7 +327,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			} else {
 				target_id &= 0x07;
 			}
-			if (dev->dev_id == ATP885_DEVID)
+			if (is885(dev))
 				atp_writeb_io(dev, c, 0x10, 0x45);
 			workreq = dev->id[c][target_id].curr_req;
 #ifdef ED_DBGP			
@@ -348,15 +359,14 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			atp_writeb_io(dev, c, 0x16, 0x80);
 			
 			/* enable 32 bit fifo transfer */	
-			if (dev->dev_id == ATP885_DEVID) {
+			if (is885(dev)) {
 				i = atp_readb_pci(dev, c, 1) & 0xf3;
 				//j=workreq->cmnd[0];	    		    	
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 				   i |= 0x0c;
 				}
 				atp_writeb_pci(dev, c, 1, i);
-			} else if ((dev->dev_id == ATP880_DEVID1) ||
-	    		    	   (dev->dev_id == ATP880_DEVID2) ) {
+			} else if (is880(dev)) {
 				if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
 					atp_writeb_base(dev, 0x3b, (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0);
 				else
@@ -417,7 +427,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 #ifdef ED_DBGP
 			printk("dev->id[%d][%d].prdaddr 0x%8x\n", c, target_id, dev->id[c][target_id].prdaddr);
 #endif
-			if (dev->dev_id != ATP885_DEVID) {
+			if (!is885(dev)) {
 				atp_writeb_pci(dev, c, 2, 0x06);
 				atp_writeb_pci(dev, c, 2, 0x00);
 			}
@@ -454,14 +464,14 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			}
 			if (i == 0x16) {
 				workreq->result = atp_readb_io(dev, c, 0x0f);
-				if (((dev->r1f[c][target_id] & 0x10) != 0)&&(dev->dev_id==ATP885_DEVID)) {
+				if (((dev->r1f[c][target_id] & 0x10) != 0) && is885(dev)) {
 					printk(KERN_WARNING "AEC67162 CRC ERROR !\n");
 					workreq->result = 0x02;
 				}
 			} else
 				workreq->result = 0x02;
 
-			if (dev->dev_id == ATP885_DEVID) {		
+			if (is885(dev)) {
 				j = atp_readb_base(dev, 0x29) | 0x01;
 				atp_writeb_base(dev, 0x29, j);
 			}
@@ -516,7 +526,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			atp_writeb_pci(dev, c, 2, 0x06);
 			atp_writeb_pci(dev, c, 2, 0x00);
 			atp_writeb_io(dev, c, 0x10, 0x41);
-			if (dev->dev_id == ATP885_DEVID) {
+			if (is885(dev)) {
 				k = dev->id[c][target_id].last_len;
 				atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&k))[2]);
 				atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&k))[1]);
@@ -535,7 +545,7 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
 			atp_writeb_pci(dev, c, 2, 0x06);
 			atp_writeb_pci(dev, c, 2, 0x00);
 			atp_writeb_io(dev, c, 0x10, 0x41);
-			if (dev->dev_id == ATP885_DEVID) {		
+			if (is885(dev)) {
 				k = dev->id[c][target_id].last_len;
 				atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&k))[2]);
 				atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&k))[1]);
@@ -737,7 +747,7 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 #endif	
 	l = scsi_bufflen(workreq);
 
-	if (dev->dev_id == ATP885_DEVID) {
+	if (is885(dev)) {
 		j = atp_readb_base(dev, 0x29) & 0xfe;
 		atp_writeb_base(dev, 0x29, j);
 		dev->r1f[c][scmd_id(workreq)] = 0;
@@ -775,7 +785,7 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 
 	atp_writeb_io(dev, c, 0x00, workreq->cmd_len);
 	atp_writeb_io(dev, c, 0x01, 0x2c);
-	if (dev->dev_id == ATP885_DEVID)
+	if (is885(dev))
 		atp_writeb_io(dev, c, 0x02, 0x7f);
 	else
 		atp_writeb_io(dev, c, 0x02, 0xcf);
@@ -873,15 +883,14 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
 	atp_writel_pci(dev, c, 4, dev->id[c][target_id].prdaddr);
 	atp_writeb_pci(dev, c, 2, 0x06);
 	atp_writeb_pci(dev, c, 2, 0x00);
-	if (dev->dev_id == ATP885_DEVID) {
+	if (is885(dev)) {
 		j = atp_readb_pci(dev, c, 1) & 0xf3;
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) ||
 	    	(workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a)) {
 	   		j |= 0x0c;
 		}
 		atp_writeb_pci(dev, c, 1, j);
-	} else if ((dev->dev_id == ATP880_DEVID1) ||
-	    	   (dev->dev_id == ATP880_DEVID2)) {
+	} else if (is880(dev)) {
 		if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
 			atp_writeb_base(dev, 0x3b, (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0);
 		else
@@ -1285,7 +1294,7 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	shpnt->unique_id = shpnt->io_port;
 	shpnt->irq = pdev->irq;
 
-	if ((ent->device == ATP880_DEVID1)||(ent->device == ATP880_DEVID2)) {
+	if (is880(atpdev)) {
 		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
 
 		atpdev->ioport[0] = shpnt->io_port + 0x40;
@@ -1296,7 +1305,6 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
 		printk(KERN_INFO "   ACARD AEC-67160 PCI Ultra3 LVD Host Adapter:"
 			"    IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
-		atpdev->dev_id = ent->device;
 		atpdev->host_id[0] = host_id;
 
 		atpdev->scam_on = atp_readb_base(atpdev, 0x22);
@@ -1384,12 +1392,11 @@ flash_ok_880:
 		atp_writeb_base(atpdev, 0x38, 0xb0);
 		shpnt->max_id = 16;
 		shpnt->this_id = host_id;
-	} else if (ent->device == ATP885_DEVID) {	
+	} else if (is885(atpdev)) {
 			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] = shpnt->io_port + 0x80;
 		atpdev->ioport[1] = shpnt->io_port + 0xc0;
 		atpdev->pciport[0] = shpnt->io_port + 0x40;
@@ -1528,7 +1535,6 @@ flash_ok_885:
 
 		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;
 		atpdev->scam_on = atp_readb_pci(atpdev, 0, 2);
@@ -1797,7 +1803,7 @@ static void atp_is(struct atp_unit *dev, unsigned char c, bool wide_chip, unsign
 		dev->active_id[c] |= m;
 
 		atp_writeb_io(dev, c, 0x10, 0x30);
-		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+		if (is885(dev) || is880(dev))
 			atp_writeb_io(dev, c, 0x14, 0x00);
 		else /* result of is870() merge - is this a bug? */
 			atp_writeb_io(dev, c, 0x04, 0x00);
@@ -1877,7 +1883,7 @@ inq_ok:
 		if ((mbuf[7] & 0x60) == 0) {
 			goto not_wide;
 		}
-		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+		if (is885(dev) || is880(dev)) {
 			if ((i < 8) && ((dev->global_map[c] & 0x20) == 0))
 				goto not_wide;
 		} else { /* result of is870() merge - is this a bug? */
@@ -2146,7 +2152,7 @@ not_wide:
 		}
 		continue;
 set_sync:
-		if ((dev->dev_id != ATP885_DEVID && dev->dev_id != ATP880_DEVID1 && dev->dev_id != ATP880_DEVID2) || (dev->sp[c][i] == 0x02)) {
+		if ((!is885(dev) && !is880(dev)) || (dev->sp[c][i] == 0x02)) {
 			synu[4] = 0x0c;
 			synuw[4] = 0x0c;
 		} else {
@@ -2190,7 +2196,7 @@ try_sync:
 		while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) {
 			if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) {
 				if ((m & dev->wide_id[c]) != 0) {
-					if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+					if (is885(dev) || is880(dev)) {
 						if ((m & dev->ultra_map[c]) != 0) {
 							atp_writeb_io(dev, c, 0x19, synuw[j++]);
 						} else {
@@ -2245,7 +2251,7 @@ phase_outs:
 		}
 		continue;
 phase_ins:
-		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+		if (is885(dev) || is880(dev))
 			atp_writeb_io(dev, c, 0x14, 0x06);
 		else
 			atp_writeb_io(dev, c, 0x14, 0xff);
@@ -2303,7 +2309,7 @@ tar_dcons:
 		if (mbuf[3] > 0x64) {
 			continue;
 		}
-		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2) {
+		if (is885(dev) || is880(dev)) {
 			if (mbuf[4] > 0x0e) {
 				mbuf[4] = 0x0e;
 			}
@@ -2313,7 +2319,7 @@ tar_dcons:
 			}
 		}
 		dev->id[c][i].devsp = mbuf[4];
-		if (dev->dev_id == ATP885_DEVID || dev->dev_id == ATP880_DEVID1 || dev->dev_id == ATP880_DEVID2)
+		if (is885(dev) || is880(dev))
 			if (mbuf[3] < 0x0c) {
 				j = 0xb0;
 				goto set_syn_ok;
diff --git a/drivers/scsi/atp870u.h b/drivers/scsi/atp870u.h
index 8c47c53..f9d62a2 100644
--- a/drivers/scsi/atp870u.h
+++ b/drivers/scsi/atp870u.h
@@ -39,7 +39,6 @@ struct atp_unit
 	unsigned short active_id[2];
 	unsigned short ultra_map[2];
 	unsigned short async[2];
-	unsigned short dev_id;
 	unsigned char sp[2][16];
 	unsigned char r1f[2][16];		
 	struct scsi_cmnd *quereq[2][qcnt];
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 46/52] atp870u: Use pci_request_regions
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (44 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 45/52] atp870u: Introduce is880(), is885() and remove dev_id Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 47/52] atp870u: Request IRQ later, remove weird locking Ondrej Zary
                   ` (6 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Use pci_request_regions and do it before accessing the I/O ports.
Also add missing pci_disable_device() call to atp870u_remove().

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 4bb0f4f..87dd886 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1276,10 +1276,15 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                 goto disable_device;
         }
 
+	err = pci_request_regions(pdev, "atp870u");
+	if (err)
+		goto disable_device;
+	pci_set_master(pdev);
+
         err = -ENOMEM;
 	shpnt = scsi_host_alloc(&atp870u_template, sizeof(struct atp_unit));
 	if (!shpnt)
-		goto disable_device;
+		goto release_region;
 
 	atpdev = shost_priv(shpnt);
 
@@ -1582,10 +1587,6 @@ flash_ok_885:
 
 	} 
 		spin_unlock_irqrestore(shpnt->host_lock, flags);
-		if (!request_region(shpnt->io_port, shpnt->n_io_port, "atp870u")) {
-			err = -EBUSY;
-			goto request_io_fail;
-		}
 		err = scsi_add_host(shpnt, &pdev->dev);
 		if (err)
 			goto scsi_add_fail;
@@ -1596,16 +1597,13 @@ flash_ok_885:
 		return 0;
 
 scsi_add_fail:
-	printk("atp870u_prob:scsi_add_fail\n");
-	release_region(shpnt->io_port, shpnt->n_io_port);
-request_io_fail:
-	printk("atp870u_prob:request_io_fail\n");
 	free_irq(shpnt->irq, shpnt);
 free_tables:
-	printk("atp870u_prob:free_table\n");
 	atp870u_free_tables(shpnt);
 unregister:
 	scsi_host_put(shpnt);
+release_region:
+	pci_release_regions(pdev);
 disable_device:
 	pci_disable_device(pdev);
 fail:
@@ -1696,7 +1694,8 @@ static void atp870u_remove (struct pci_dev *pdev)
 	
 	scsi_remove_host(pshost);
 	free_irq(pshost->irq, pshost);
-	release_region(pshost->io_port, pshost->n_io_port);
+	pci_release_regions(pdev);
+	pci_disable_device(pdev);
 	atp870u_free_tables(pshost);
 	scsi_host_put(pshost);
 }
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 47/52] atp870u: Request IRQ later, remove weird locking
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (45 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 46/52] atp870u: Use pci_request_regions Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 48/52] atp870u: Remove scam_on from struct atp_unit Ondrej Zary
                   ` (5 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Allocate IRQ later during probe to avoid code duplication and also remove
the need for weird locking in _probe.
(It was probably there to prevent race with the IRQ handler?)

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   47 ++++++++++++-----------------------------------
 1 file changed, 12 insertions(+), 35 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 87dd886..4719df4 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1253,7 +1253,6 @@ static void atp_set_host_id(struct atp_unit *atp, u8 c, u8 host_id)
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
 	unsigned char k, m, c;
-	unsigned long flags;
 	unsigned int error,n;
 	unsigned char host_id;
 	struct Scsi_Host *shpnt = NULL;
@@ -1374,13 +1373,6 @@ flash_ok_880:
 			goto unregister;
 		}
 
-		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", shpnt->irq);
-			goto free_tables;
-		}
-
-		spin_lock_irqsave(shpnt->host_lock, flags);
 		k = atp_readb_base(atpdev, 0x38) & 0x80;
 		atp_writeb_base(atpdev, 0x38, k);
 		atp_writeb_base(atpdev, 0x3b, 0x20);
@@ -1412,17 +1404,6 @@ flash_ok_880:
 			goto unregister;
 		}
 			
-#ifdef ED_DBGP		
-	printk("request_irq() shpnt %p hostdata %p\n", shpnt, atpdev);
-#endif	        
-		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;
-		}
-		
-		spin_lock_irqsave(shpnt->host_lock, flags);        					
-        			
 		c = atp_readb_base(atpdev, 0x29);
 		atp_writeb_base(atpdev, 0x29, c | 0x04);
         	
@@ -1558,13 +1539,6 @@ flash_ok_885:
 			goto unregister;
 		}
 
-		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", shpnt->irq);
-			goto free_tables;
-		}
-
-		spin_lock_irqsave(shpnt->host_lock, flags);
 		if (pdev->revision > 0x07)	/* check if atp876 chip then enable terminator */
 			atp_writeb_base(atpdev, 0x3e, 0x00);
  
@@ -1586,15 +1560,18 @@ flash_ok_885:
 		shpnt->this_id = host_id;
 
 	} 
-		spin_unlock_irqrestore(shpnt->host_lock, flags);
-		err = scsi_add_host(shpnt, &pdev->dev);
-		if (err)
-			goto scsi_add_fail;
-		scsi_scan_host(shpnt);
-#ifdef ED_DBGP			
-		printk("atp870u_prob : exit\n");
-#endif		
-		return 0;
+	err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt);
+	if (err) {
+		dev_err(&pdev->dev, "Unable to allocate IRQ %d.\n", shpnt->irq);
+		goto free_tables;
+	}
+
+	err = scsi_add_host(shpnt, &pdev->dev);
+	if (err)
+		goto scsi_add_fail;
+	scsi_scan_host(shpnt);
+
+	return 0;
 
 scsi_add_fail:
 	free_irq(shpnt->irq, shpnt);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 48/52] atp870u: Remove scam_on from struct atp_unit
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (46 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 47/52] atp870u: Request IRQ later, remove weird locking Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 49/52] atp870u: Initialize tables earlier Ondrej Zary
                   ` (4 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

scam_on is used only during probe, no need to keep it later.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   14 +++++++-------
 drivers/scsi/atp870u.h |    1 -
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 4719df4..dd0b520 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -963,7 +963,7 @@ static unsigned char fun_scam(struct atp_unit *dev, unsigned short int *val)
 	return j;
 }
 
-static void tscam(struct Scsi_Host *host, bool wide_chip)
+static void tscam(struct Scsi_Host *host, bool wide_chip, u8 scam_on)
 {
 
 	unsigned char i, j, k;
@@ -986,7 +986,7 @@ static void tscam(struct Scsi_Host *host, bool wide_chip)
 	atp_writeb_io(dev, 0, 2, 0x7f);
 	atp_writeb_io(dev, 0, 0x11, 0x20);
 
-	if ((dev->scam_on & 0x40) == 0) {
+	if ((scam_on & 0x40) == 0) {
 		return;
 	}
 	m = 1;
@@ -1311,7 +1311,6 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 			"    IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
 		atpdev->host_id[0] = host_id;
 
-		atpdev->scam_on = atp_readb_base(atpdev, 0x22);
 		atpdev->global_map[0] = atp_readb_base(atpdev, 0x35);
 		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x3c);
 
@@ -1384,7 +1383,7 @@ flash_ok_880:
 
 		atp_set_host_id(atpdev, 0, host_id);
 
-		tscam(shpnt, true);
+		tscam(shpnt, true, atp_readb_base(atpdev, 0x22));
 		atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
 		atp_writeb_base(atpdev, 0x38, 0xb0);
 		shpnt->max_id = 16;
@@ -1509,6 +1508,7 @@ flash_ok_885:
 		shpnt->max_channel = 1;
 		shpnt->this_id = atpdev->host_id[0];
 	} else {
+		u8 scam_on;
 		bool wide_chip =
 			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
 			 pdev->revision == 4) ||
@@ -1523,12 +1523,12 @@ flash_ok_885:
 		atpdev->pciport[0] = shpnt->io_port + 0x20;
 		host_id &= 0x07;
 		atpdev->host_id[0] = host_id;
-		atpdev->scam_on = atp_readb_pci(atpdev, 0, 2);
+		scam_on = atp_readb_pci(atpdev, 0, 2);
 		atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
 		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
 
 		if (atpdev->ultra_map[0] == 0) {
-			atpdev->scam_on = 0x00;
+			scam_on = 0x00;
 			atpdev->global_map[0] = 0x20;
 			atpdev->ultra_map[0] = 0xffff;
 		}
@@ -1551,7 +1551,7 @@ flash_ok_885:
 		atp_set_host_id(atpdev, 0, host_id);
 
 
-		tscam(shpnt, wide_chip);
+		tscam(shpnt, wide_chip, scam_on);
 		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
 		atp_is(atpdev, 0, wide_chip, 0);
 		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
diff --git a/drivers/scsi/atp870u.h b/drivers/scsi/atp870u.h
index f9d62a2..9b839b1 100644
--- a/drivers/scsi/atp870u.h
+++ b/drivers/scsi/atp870u.h
@@ -32,7 +32,6 @@ struct atp_unit
 	unsigned char quhd[2];
 	unsigned char quend[2];
 	unsigned char global_map[2];
-	unsigned char scam_on;
 	unsigned char host_id[2];
 	unsigned int working[2];
 	unsigned short wide_id[2];
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 49/52] atp870u: Initialize tables earlier
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (47 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 48/52] atp870u: Remove scam_on from struct atp_unit Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 50/52] atp870u: Introduce atp880_init() Ondrej Zary
                   ` (3 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Call _init_tables before chip-specific initialization. This avoids code
duplication and fixes a bug(?) in 880 init where the values read from flash
into atpdev->sp are then overwritten by calling init_tables.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |   22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index dd0b520..3c66539 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1298,6 +1298,12 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	shpnt->unique_id = shpnt->io_port;
 	shpnt->irq = pdev->irq;
 
+	err = atp870u_init_tables(shpnt);
+	if (err) {
+		dev_err(&pdev->dev, "Unable to allocate tables for Acard controller\n");
+		goto unregister;
+	}
+
 	if (is880(atpdev)) {
 		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
 
@@ -1366,11 +1372,6 @@ flash_ok_880:
 		atpdev->async[0] = ~(atpdev->async[0]);
 		atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]);
  
-		if (atp870u_init_tables(shpnt) < 0) {
-			printk(KERN_ERR "Unable to allocate tables for Acard controller\n");
-			err = -ENOMEM;
-			goto unregister;
-		}
 
 		k = atp_readb_base(atpdev, 0x38) & 0x80;
 		atp_writeb_base(atpdev, 0x38, k);
@@ -1398,11 +1399,6 @@ flash_ok_880:
 		atpdev->pciport[0] = shpnt->io_port + 0x40;
 		atpdev->pciport[1] = shpnt->io_port + 0x50;
 				
-		if (atp870u_init_tables(shpnt) < 0) {
-			err = -ENOMEM;
-			goto unregister;
-		}
-			
 		c = atp_readb_base(atpdev, 0x29);
 		atp_writeb_base(atpdev, 0x29, c | 0x04);
         	
@@ -1533,12 +1529,6 @@ flash_ok_885:
 			atpdev->ultra_map[0] = 0xffff;
 		}
 
-
-		if (atp870u_init_tables(shpnt) < 0) {
-			err = -ENOMEM;
-			goto unregister;
-		}
-
 		if (pdev->revision > 0x07)	/* check if atp876 chip then enable terminator */
 			atp_writeb_base(atpdev, 0x3e, 0x00);
  
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 50/52] atp870u: Introduce atp880_init()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (48 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 49/52] atp870u: Initialize tables earlier Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 51/52] atp870u: Introduce atp885_init() Ondrej Zary
                   ` (2 subsequent siblings)
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move 880-specific init code to a separate function atp880_init()

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  174 ++++++++++++++++++++++++------------------------
 1 file changed, 88 insertions(+), 86 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 3c66539..c1fd9fb 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1249,6 +1249,91 @@ static void atp_set_host_id(struct atp_unit *atp, u8 c, u8 host_id)
 	atp_writeb_io(atp, c, 0x11, 0x20);
 }
 
+static void atp880_init(struct Scsi_Host *shpnt)
+{
+	struct atp_unit *atpdev = shost_priv(shpnt);
+	struct pci_dev *pdev = atpdev->pdev;
+	unsigned char k, m, host_id;
+	unsigned int n;
+
+	pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);
+
+	atpdev->ioport[0] = shpnt->io_port + 0x40;
+	atpdev->pciport[0] = shpnt->io_port + 0x28;
+
+	host_id = atp_readb_base(atpdev, 0x39) >> 4;
+
+	dev_info(&pdev->dev, "ACARD AEC-67160 PCI Ultra3 LVD Host Adapter: IO:%lx, IRQ:%d.\n",
+		 shpnt->io_port, shpnt->irq);
+	atpdev->host_id[0] = host_id;
+
+	atpdev->global_map[0] = atp_readb_base(atpdev, 0x35);
+	atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x3c);
+
+	n = 0x3f09;
+	while (n < 0x4000) {
+		m = 0;
+		atp_writew_base(atpdev, 0x34, n);
+		n += 0x0002;
+		if (atp_readb_base(atpdev, 0x30) == 0xff)
+			break;
+
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
+		n += 0x0002;
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
+		n += 0x0002;
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		atp_writew_base(atpdev, 0x34, n);
+		n += 0x0002;
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
+		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
+		n += 0x0018;
+	}
+	atp_writew_base(atpdev, 0x34, 0);
+	atpdev->ultra_map[0] = 0;
+	atpdev->async[0] = 0;
+	for (k = 0; k < 16; k++) {
+		n = 1 << k;
+		if (atpdev->sp[0][k] > 1)
+			atpdev->ultra_map[0] |= n;
+		else
+			if (atpdev->sp[0][k] == 0)
+				atpdev->async[0] |= n;
+	}
+	atpdev->async[0] = ~(atpdev->async[0]);
+	atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]);
+
+	k = atp_readb_base(atpdev, 0x38) & 0x80;
+	atp_writeb_base(atpdev, 0x38, k);
+	atp_writeb_base(atpdev, 0x3b, 0x20);
+	mdelay(32);
+	atp_writeb_base(atpdev, 0x3b, 0);
+	mdelay(32);
+	atp_readb_io(atpdev, 0, 0x1b);
+	atp_readb_io(atpdev, 0, 0x17);
+
+	atp_set_host_id(atpdev, 0, host_id);
+
+	tscam(shpnt, true, atp_readb_base(atpdev, 0x22));
+	atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
+	atp_writeb_base(atpdev, 0x38, 0xb0);
+	shpnt->max_id = 16;
+	shpnt->this_id = host_id;
+}
+
 /* return non-zero on detection */
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
@@ -1304,92 +1389,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		goto unregister;
 	}
 
-	if (is880(atpdev)) {
-		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);//JCC082803
-
-		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:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
-		atpdev->host_id[0] = host_id;
-
-		atpdev->global_map[0] = atp_readb_base(atpdev, 0x35);
-		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x3c);
-
-		n = 0x3f09;
-next_fblk_880:
-		if (n >= 0x4000)
-			goto flash_ok_880;
-
-		m = 0;
-		atp_writew_base(atpdev, 0x34, n);
-		n += 0x0002;
-		if (atp_readb_base(atpdev, 0x30) == 0xff)
-			goto flash_ok_880;
-
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
-		atp_writew_base(atpdev, 0x34, n);
-		n += 0x0002;
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
-		atp_writew_base(atpdev, 0x34, n);
-		n += 0x0002;
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
-		atp_writew_base(atpdev, 0x34, n);
-		n += 0x0002;
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32);
-		atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33);
-		n += 0x0018;
-		goto next_fblk_880;
-flash_ok_880:
-		atp_writew_base(atpdev, 0x34, 0);
-		atpdev->ultra_map[0] = 0;
-		atpdev->async[0] = 0;
-		for (k = 0; k < 16; k++) {
-			n = 1;
-			n = n << k;
-			if (atpdev->sp[0][k] > 1) {
-				atpdev->ultra_map[0] |= n;
-			} else {
-				if (atpdev->sp[0][k] == 0)
-					atpdev->async[0] |= n;
- 			}
-	 	}
-		atpdev->async[0] = ~(atpdev->async[0]);
-		atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]);
- 
-
-		k = atp_readb_base(atpdev, 0x38) & 0x80;
-		atp_writeb_base(atpdev, 0x38, k);
-		atp_writeb_base(atpdev, 0x3b, 0x20);
-		mdelay(32);
-		atp_writeb_base(atpdev, 0x3b, 0);
-		mdelay(32);
-		atp_readb_io(atpdev, 0, 0x1b);
-		atp_readb_io(atpdev, 0, 0x17);
-
-		atp_set_host_id(atpdev, 0, host_id);
-
-		tscam(shpnt, true, atp_readb_base(atpdev, 0x22));
-		atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40);
-		atp_writeb_base(atpdev, 0x38, 0xb0);
-		shpnt->max_id = 16;
-		shpnt->this_id = host_id;
-	} else if (is885(atpdev)) {
+	if (is880(atpdev))
+		atp880_init(shpnt);
+	else if (is885(atpdev)) {
 			printk(KERN_INFO "   ACARD AEC-67162 PCI Ultra3 LVD Host Adapter:  IO:%lx, IRQ:%d.\n"
 			       , shpnt->io_port, shpnt->irq);
         	
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 51/52] atp870u: Introduce atp885_init()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (49 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 50/52] atp870u: Introduce atp880_init() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-17 18:24 ` [PATCH 52/52] atp870u: Introduce atp870_init() Ondrej Zary
  2015-11-19 17:10 ` [PATCH 00/52] [resend] atp870u: Major rework Martin K. Petersen
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move 885-specific init code to a separate function atp885_init()

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  231 +++++++++++++++++++++++-------------------------
 1 file changed, 113 insertions(+), 118 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index c1fd9fb..584b90f 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1334,15 +1334,122 @@ static void atp880_init(struct Scsi_Host *shpnt)
 	shpnt->this_id = host_id;
 }
 
+static void atp885_init(struct Scsi_Host *shpnt)
+{
+	struct atp_unit *atpdev = shost_priv(shpnt);
+	struct pci_dev *pdev = atpdev->pdev;
+	unsigned char k, m, c;
+	unsigned int n;
+	unsigned char setupdata[2][16];
+
+	dev_info(&pdev->dev, "ACARD AEC-67162 PCI Ultra3 LVD Host Adapter: IO:%lx, IRQ:%d.\n",
+		 shpnt->io_port, shpnt->irq);
+
+	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;
+
+	c = atp_readb_base(atpdev, 0x29);
+	atp_writeb_base(atpdev, 0x29, c | 0x04);
+
+	n = 0x1f80;
+	while (n < 0x2000) {
+		atp_writew_base(atpdev, 0x3c, n);
+		if (atp_readl_base(atpdev, 0x38) == 0xffffffff)
+			break;
+		for (m = 0; m < 2; m++) {
+			atpdev->global_map[m] = 0;
+			for (k = 0; k < 4; k++) {
+				atp_writew_base(atpdev, 0x3c, n++);
+				((unsigned long *)&setupdata[m][0])[k] = atp_readl_base(atpdev, 0x38);
+			}
+			for (k = 0; k < 4; k++) {
+				atp_writew_base(atpdev, 0x3c, n++);
+				((unsigned long *)&atpdev->sp[m][0])[k] = atp_readl_base(atpdev, 0x38);
+			}
+			n += 8;
+		}
+	}
+	c = atp_readb_base(atpdev, 0x29);
+	atp_writeb_base(atpdev, 0x29, c & 0xfb);
+	for (c = 0; c < 2; c++) {
+		atpdev->ultra_map[c] = 0;
+		atpdev->async[c] = 0;
+		for (k = 0; k < 16; k++) {
+			n = 1 << k;
+			if (atpdev->sp[c][k] > 1)
+				atpdev->ultra_map[c] |= n;
+			else
+				if (atpdev->sp[c][k] == 0)
+					atpdev->async[c] |= n;
+		}
+		atpdev->async[c] = ~(atpdev->async[c]);
+
+		if (atpdev->global_map[c] == 0) {
+			k = setupdata[c][1];
+			if ((k & 0x40) != 0)
+				atpdev->global_map[c] |= 0x20;
+			k &= 0x07;
+			atpdev->global_map[c] |= k;
+			if ((setupdata[c][2] & 0x04) != 0)
+				atpdev->global_map[c] |= 0x08;
+			atpdev->host_id[c] = setupdata[c][0] & 0x07;
+		}
+	}
+
+	k = atp_readb_base(atpdev, 0x28) & 0x8f;
+	k |= 0x10;
+	atp_writeb_base(atpdev, 0x28, k);
+	atp_writeb_pci(atpdev, 0, 1, 0x80);
+	atp_writeb_pci(atpdev, 1, 1, 0x80);
+	mdelay(100);
+	atp_writeb_pci(atpdev, 0, 1, 0);
+	atp_writeb_pci(atpdev, 1, 1, 0);
+	mdelay(1000);
+	atp_readb_io(atpdev, 0, 0x1b);
+	atp_readb_io(atpdev, 0, 0x17);
+	atp_readb_io(atpdev, 1, 0x1b);
+	atp_readb_io(atpdev, 1, 0x17);
+
+	k = atpdev->host_id[0];
+	if (k > 7)
+		k = (k & 0x07) | 0x40;
+	atp_set_host_id(atpdev, 0, k);
+
+	k = atpdev->host_id[1];
+	if (k > 7)
+		k = (k & 0x07) | 0x40;
+	atp_set_host_id(atpdev, 1, k);
+
+	mdelay(600); /* this delay used to be called tscam_885() */
+	dev_info(&pdev->dev, "Scanning Channel A SCSI Device ...\n");
+	atp_is(atpdev, 0, true, atp_readb_io(atpdev, 0, 0x1b) >> 7);
+	atp_writeb_io(atpdev, 0, 0x16, 0x80);
+	dev_info(&pdev->dev, "Scanning Channel B SCSI Device ...\n");
+	atp_is(atpdev, 1, true, atp_readb_io(atpdev, 1, 0x1b) >> 7);
+	atp_writeb_io(atpdev, 1, 0x16, 0x80);
+	k = atp_readb_base(atpdev, 0x28) & 0xcf;
+	k |= 0xc0;
+	atp_writeb_base(atpdev, 0x28, k);
+	k = atp_readb_base(atpdev, 0x1f) | 0x80;
+	atp_writeb_base(atpdev, 0x1f, k);
+	k = atp_readb_base(atpdev, 0x29) | 0x01;
+	atp_writeb_base(atpdev, 0x29, k);
+	shpnt->max_id = 16;
+	shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1;
+	shpnt->max_channel = 1;
+	shpnt->this_id = atpdev->host_id[0];
+}
+
 /* return non-zero on detection */
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
-	unsigned char k, m, c;
-	unsigned int error,n;
+	unsigned char k;
+	unsigned int error;
 	unsigned char host_id;
 	struct Scsi_Host *shpnt = NULL;
 	struct atp_unit *atpdev;
-	unsigned char setupdata[2][16];
 	int err;
 
 	if (ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 && pdev->revision < 2) {
@@ -1391,121 +1498,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
 	if (is880(atpdev))
 		atp880_init(shpnt);
-	else if (is885(atpdev)) {
-			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->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;
-				
-		c = atp_readb_base(atpdev, 0x29);
-		atp_writeb_base(atpdev, 0x29, c | 0x04);
-        	
-		n=0x1f80;
-next_fblk_885:
-		if (n >= 0x2000) {
-		   goto flash_ok_885;
-		}
-		atp_writew_base(atpdev, 0x3c, n);
-		if (atp_readl_base(atpdev, 0x38) == 0xffffffff) {
-		   goto flash_ok_885;
-		}
-		for (m=0; m < 2; m++) {
-		    atpdev->global_map[m]= 0;
-		    for (k=0; k < 4; k++) {
-			atp_writew_base(atpdev, 0x3c, n++);
-			((unsigned long *)&setupdata[m][0])[k] = atp_readl_base(atpdev, 0x38);
-		    }
-		    for (k=0; k < 4; k++) {
-			atp_writew_base(atpdev, 0x3c, n++);
-			((unsigned long *)&atpdev->sp[m][0])[k] = atp_readl_base(atpdev, 0x38);
-		    }
-		    n += 8;
-		}
-		goto next_fblk_885;
-flash_ok_885:
-#ifdef ED_DBGP
-		printk( "Flash Read OK\n");
-#endif	
-		c = atp_readb_base(atpdev, 0x29);
-		atp_writeb_base(atpdev, 0x29, c & 0xfb);
-		for (c=0;c < 2;c++) {
-		    atpdev->ultra_map[c]=0;
-		    atpdev->async[c] = 0;
-		    for (k=0; k < 16; k++) {
-			n=1;
-			n = n << k;
-			if (atpdev->sp[c][k] > 1) {
-			   atpdev->ultra_map[c] |= n;
-			} else {
-			   if (atpdev->sp[c][k] == 0) {
-			      atpdev->async[c] |= n;
-			   }
-			}
-		    }
-		    atpdev->async[c] = ~(atpdev->async[c]);
-
-		    if (atpdev->global_map[c] == 0) {
-		       k=setupdata[c][1];
-		       if ((k & 0x40) != 0)
-			  atpdev->global_map[c] |= 0x20;
-		       k &= 0x07;
-		       atpdev->global_map[c] |= k;
-		       if ((setupdata[c][2] & 0x04) != 0)
-			  atpdev->global_map[c] |= 0x08;
-		       atpdev->host_id[c] = setupdata[c][0] & 0x07;
-		    }
-		}
-
-		k = atp_readb_base(atpdev, 0x28) & 0x8f;
-		k |= 0x10;
-		atp_writeb_base(atpdev, 0x28, k);
-		atp_writeb_pci(atpdev, 0, 1, 0x80);
-		atp_writeb_pci(atpdev, 1, 1, 0x80);
-		mdelay(100);
-		atp_writeb_pci(atpdev, 0, 1, 0);
-		atp_writeb_pci(atpdev, 1, 1, 0);
-		mdelay(1000);
-		atp_readb_io(atpdev, 0, 0x1b);
-		atp_readb_io(atpdev, 0, 0x17);
-		atp_readb_io(atpdev, 1, 0x1b);
-		atp_readb_io(atpdev, 1, 0x17);
-
-		k=atpdev->host_id[0];
-		if (k > 7)
-		   k = (k & 0x07) | 0x40;
-		atp_set_host_id(atpdev, 0, k);
-
-		k=atpdev->host_id[1];
-		if (k > 7)
-		   k = (k & 0x07) | 0x40;
-		atp_set_host_id(atpdev, 1, k);
-
-		mdelay(600); /* this delay used to be called tscam_885() */
-		printk(KERN_INFO "   Scanning Channel A SCSI Device ...\n");
-		atp_is(atpdev, 0, true, atp_readb_io(atpdev, 0, 0x1b) >> 7);
-		atp_writeb_io(atpdev, 0, 0x16, 0x80);
-		printk(KERN_INFO "   Scanning Channel B SCSI Device ...\n");
-		atp_is(atpdev, 1, true, atp_readb_io(atpdev, 1, 0x1b) >> 7);
-		atp_writeb_io(atpdev, 1, 0x16, 0x80);
-		k = atp_readb_base(atpdev, 0x28) & 0xcf;
-		k |= 0xc0;
-		atp_writeb_base(atpdev, 0x28, k);
-		k = atp_readb_base(atpdev, 0x1f) | 0x80;
-		atp_writeb_base(atpdev, 0x1f, k);
-		k = atp_readb_base(atpdev, 0x29) | 0x01;
-		atp_writeb_base(atpdev, 0x29, k);
-#ifdef ED_DBGP
-		//printk("atp885: atp_host[0] 0x%p\n", atp_host[0]);
-#endif		
-		shpnt->max_id = 16;
-		shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1;
-		shpnt->max_channel = 1;
-		shpnt->this_id = atpdev->host_id[0];
-	} else {
+	else if (is885(atpdev))
+		atp885_init(shpnt);
+	else {
 		u8 scam_on;
 		bool wide_chip =
 			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* [PATCH 52/52] atp870u: Introduce atp870_init()
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (50 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 51/52] atp870u: Introduce atp885_init() Ondrej Zary
@ 2015-11-17 18:24 ` Ondrej Zary
  2015-11-19 17:10 ` [PATCH 00/52] [resend] atp870u: Major rework Martin K. Petersen
  52 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-11-17 18:24 UTC (permalink / raw)
  To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi

Move 870-specific init code to a separate function atp870_init()

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  104 +++++++++++++++++++++++++-----------------------
 1 file changed, 54 insertions(+), 50 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 584b90f..8b52a9d 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1249,6 +1249,57 @@ static void atp_set_host_id(struct atp_unit *atp, u8 c, u8 host_id)
 	atp_writeb_io(atp, c, 0x11, 0x20);
 }
 
+static void atp870_init(struct Scsi_Host *shpnt)
+{
+	struct atp_unit *atpdev = shost_priv(shpnt);
+	struct pci_dev *pdev = atpdev->pdev;
+	unsigned char k, host_id;
+	u8 scam_on;
+	bool wide_chip =
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
+		 pdev->revision == 4) ||
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
+
+	pci_read_config_byte(pdev, 0x49, &host_id);
+
+	dev_info(&pdev->dev, "ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: IO:%lx, IRQ:%d.\n",
+		 shpnt->io_port, shpnt->irq);
+
+	atpdev->ioport[0] = shpnt->io_port;
+	atpdev->pciport[0] = shpnt->io_port + 0x20;
+	host_id &= 0x07;
+	atpdev->host_id[0] = host_id;
+	scam_on = atp_readb_pci(atpdev, 0, 2);
+	atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
+	atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
+
+	if (atpdev->ultra_map[0] == 0) {
+		scam_on = 0x00;
+		atpdev->global_map[0] = 0x20;
+		atpdev->ultra_map[0] = 0xffff;
+	}
+
+	if (pdev->revision > 0x07)	/* check if atp876 chip */
+		atp_writeb_base(atpdev, 0x3e, 0x00); /* enable terminator */
+
+	k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
+	atp_writeb_base(atpdev, 0x3a, k);
+	atp_writeb_base(atpdev, 0x3a, k & 0xdf);
+	mdelay(32);
+	atp_writeb_base(atpdev, 0x3a, k);
+	mdelay(32);
+	atp_set_host_id(atpdev, 0, host_id);
+
+	tscam(shpnt, wide_chip, scam_on);
+	atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
+	atp_is(atpdev, 0, wide_chip, 0);
+	atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
+	atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
+	shpnt->max_id = wide_chip ? 16 : 8;
+	shpnt->this_id = host_id;
+}
+
 static void atp880_init(struct Scsi_Host *shpnt)
 {
 	struct atp_unit *atpdev = shost_priv(shpnt);
@@ -1445,9 +1496,6 @@ static void atp885_init(struct Scsi_Host *shpnt)
 /* return non-zero on detection */
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
-	unsigned char k;
-	unsigned int error;
-	unsigned char host_id;
 	struct Scsi_Host *shpnt = NULL;
 	struct atp_unit *atpdev;
 	int err;
@@ -1500,53 +1548,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		atp880_init(shpnt);
 	else if (is885(atpdev))
 		atp885_init(shpnt);
-	else {
-		u8 scam_on;
-		bool wide_chip =
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
-			 pdev->revision == 4) ||
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
-		error = pci_read_config_byte(pdev, 0x49, &host_id);
-
-		printk(KERN_INFO "   ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
-			"IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
-
-		atpdev->ioport[0] = shpnt->io_port;
-		atpdev->pciport[0] = shpnt->io_port + 0x20;
-		host_id &= 0x07;
-		atpdev->host_id[0] = host_id;
-		scam_on = atp_readb_pci(atpdev, 0, 2);
-		atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
-		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
-
-		if (atpdev->ultra_map[0] == 0) {
-			scam_on = 0x00;
-			atpdev->global_map[0] = 0x20;
-			atpdev->ultra_map[0] = 0xffff;
-		}
-
-		if (pdev->revision > 0x07)	/* check if atp876 chip then enable terminator */
-			atp_writeb_base(atpdev, 0x3e, 0x00);
- 
-		k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
-		atp_writeb_base(atpdev, 0x3a, k);
-		atp_writeb_base(atpdev, 0x3a, k & 0xdf);
-		mdelay(32);
-		atp_writeb_base(atpdev, 0x3a, k);
-		mdelay(32);
-		atp_set_host_id(atpdev, 0, host_id);
-
-
-		tscam(shpnt, wide_chip, scam_on);
-		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
-		atp_is(atpdev, 0, wide_chip, 0);
-		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
-		atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
-		shpnt->max_id = wide_chip ? 16 : 8;
-		shpnt->this_id = host_id;
-
-	} 
+	else
+		atp870_init(shpnt);
+
 	err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt);
 	if (err) {
 		dev_err(&pdev->dev, "Unable to allocate IRQ %d.\n", shpnt->irq);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

* Re: [PATCH 00/52] [resend] atp870u: Major rework
  2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
                   ` (51 preceding siblings ...)
  2015-11-17 18:24 ` [PATCH 52/52] atp870u: Introduce atp870_init() Ondrej Zary
@ 2015-11-19 17:10 ` Martin K. Petersen
  52 siblings, 0 replies; 55+ messages in thread
From: Martin K. Petersen @ 2015-11-19 17:10 UTC (permalink / raw)
  To: Ondrej Zary; +Cc: Martin K. Petersen, Christoph Hellwig, linux-scsi

>>>>> "Ondrej" == Ondrej Zary <linux@rainbow-software.org> writes:

Ondrej> This patch series removes the first level of crap from atp870u -
Ondrej> the worst (in-tree) SCSI driver [1] and then cleans up the code
Ondrej> a bit.

Ondrej> First the driver is converted to C from something that looks
Ondrej> like a (bad) assembler code: use of tmport for all I/O accesses
Ondrej> and gotos all over the code.  Then I/O access wrappers are
Ondrej> introduced.  Finally, is870, is880 and is885 are unified and two
Ondrej> of them removed.

Queued for 4.5.

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 55+ messages in thread

* [PATCH 52/52] atp870u: Introduce atp870_init()
  2015-07-26 20:24 [PATCH 00/52] " Ondrej Zary
@ 2015-07-26 20:24 ` Ondrej Zary
  0 siblings, 0 replies; 55+ messages in thread
From: Ondrej Zary @ 2015-07-26 20:24 UTC (permalink / raw)
  To: linux-scsi

Move 870-specific init code to a separate function atp870_init()

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/atp870u.c |  104 +++++++++++++++++++++++++-----------------------
 1 file changed, 54 insertions(+), 50 deletions(-)

diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index 584b90f..8b52a9d 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -1249,6 +1249,57 @@ static void atp_set_host_id(struct atp_unit *atp, u8 c, u8 host_id)
 	atp_writeb_io(atp, c, 0x11, 0x20);
 }
 
+static void atp870_init(struct Scsi_Host *shpnt)
+{
+	struct atp_unit *atpdev = shost_priv(shpnt);
+	struct pci_dev *pdev = atpdev->pdev;
+	unsigned char k, host_id;
+	u8 scam_on;
+	bool wide_chip =
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
+		 pdev->revision == 4) ||
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
+		(pdev->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
+
+	pci_read_config_byte(pdev, 0x49, &host_id);
+
+	dev_info(&pdev->dev, "ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: IO:%lx, IRQ:%d.\n",
+		 shpnt->io_port, shpnt->irq);
+
+	atpdev->ioport[0] = shpnt->io_port;
+	atpdev->pciport[0] = shpnt->io_port + 0x20;
+	host_id &= 0x07;
+	atpdev->host_id[0] = host_id;
+	scam_on = atp_readb_pci(atpdev, 0, 2);
+	atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
+	atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
+
+	if (atpdev->ultra_map[0] == 0) {
+		scam_on = 0x00;
+		atpdev->global_map[0] = 0x20;
+		atpdev->ultra_map[0] = 0xffff;
+	}
+
+	if (pdev->revision > 0x07)	/* check if atp876 chip */
+		atp_writeb_base(atpdev, 0x3e, 0x00); /* enable terminator */
+
+	k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
+	atp_writeb_base(atpdev, 0x3a, k);
+	atp_writeb_base(atpdev, 0x3a, k & 0xdf);
+	mdelay(32);
+	atp_writeb_base(atpdev, 0x3a, k);
+	mdelay(32);
+	atp_set_host_id(atpdev, 0, host_id);
+
+	tscam(shpnt, wide_chip, scam_on);
+	atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
+	atp_is(atpdev, 0, wide_chip, 0);
+	atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
+	atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
+	shpnt->max_id = wide_chip ? 16 : 8;
+	shpnt->this_id = host_id;
+}
+
 static void atp880_init(struct Scsi_Host *shpnt)
 {
 	struct atp_unit *atpdev = shost_priv(shpnt);
@@ -1445,9 +1496,6 @@ static void atp885_init(struct Scsi_Host *shpnt)
 /* return non-zero on detection */
 static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
-	unsigned char k;
-	unsigned int error;
-	unsigned char host_id;
 	struct Scsi_Host *shpnt = NULL;
 	struct atp_unit *atpdev;
 	int err;
@@ -1500,53 +1548,9 @@ static int atp870u_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		atp880_init(shpnt);
 	else if (is885(atpdev))
 		atp885_init(shpnt);
-	else {
-		u8 scam_on;
-		bool wide_chip =
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7610 &&
-			 pdev->revision == 4) ||
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612UW) ||
-			(ent->device == PCI_DEVICE_ID_ARTOP_AEC7612SUW);
-		error = pci_read_config_byte(pdev, 0x49, &host_id);
-
-		printk(KERN_INFO "   ACARD AEC-671X PCI Ultra/W SCSI-2/3 Host Adapter: "
-			"IO:%lx, IRQ:%d.\n", shpnt->io_port, shpnt->irq);
-
-		atpdev->ioport[0] = shpnt->io_port;
-		atpdev->pciport[0] = shpnt->io_port + 0x20;
-		host_id &= 0x07;
-		atpdev->host_id[0] = host_id;
-		scam_on = atp_readb_pci(atpdev, 0, 2);
-		atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d);
-		atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e);
-
-		if (atpdev->ultra_map[0] == 0) {
-			scam_on = 0x00;
-			atpdev->global_map[0] = 0x20;
-			atpdev->ultra_map[0] = 0xffff;
-		}
-
-		if (pdev->revision > 0x07)	/* check if atp876 chip then enable terminator */
-			atp_writeb_base(atpdev, 0x3e, 0x00);
- 
-		k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10;
-		atp_writeb_base(atpdev, 0x3a, k);
-		atp_writeb_base(atpdev, 0x3a, k & 0xdf);
-		mdelay(32);
-		atp_writeb_base(atpdev, 0x3a, k);
-		mdelay(32);
-		atp_set_host_id(atpdev, 0, host_id);
-
-
-		tscam(shpnt, wide_chip, scam_on);
-		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10);
-		atp_is(atpdev, 0, wide_chip, 0);
-		atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef);
-		atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20);
-		shpnt->max_id = wide_chip ? 16 : 8;
-		shpnt->this_id = host_id;
-
-	} 
+	else
+		atp870_init(shpnt);
+
 	err = request_irq(shpnt->irq, atp870u_intr_handle, IRQF_SHARED, "atp870u", shpnt);
 	if (err) {
 		dev_err(&pdev->dev, "Unable to allocate IRQ %d.\n", shpnt->irq);
-- 
Ondrej Zary


^ permalink raw reply related	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2015-11-19 17:10 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-17 18:23 [PATCH 00/52] [resend] atp870u: Major rework Ondrej Zary
2015-11-17 18:23 ` [PATCH 01/52] atp870u: Remove workport Ondrej Zary
2015-11-17 18:23 ` [PATCH 02/52] atp870u: Remove tmport1 Ondrej Zary
2015-11-17 18:23 ` [PATCH 03/52] atp870u: Untangle tmport Ondrej Zary
2015-11-17 18:23 ` [PATCH 04/52] atp870u: Untangle tmport #2 Ondrej Zary
2015-11-17 18:23 ` [PATCH 05/52] atp870u: Untangle tmport #3 Ondrej Zary
2015-11-17 18:23 ` [PATCH 06/52] atp870u: Untangle tmport #4 Ondrej Zary
2015-11-17 18:23 ` [PATCH 07/52] atp870u: Untangle tmport #5 Ondrej Zary
2015-11-17 18:23 ` [PATCH 08/52] atp870u: Untangle tmport #6 Ondrej Zary
2015-11-17 18:23 ` [PATCH 09/52] atp870u: Untangle tmport #7 Ondrej Zary
2015-11-17 18:23 ` [PATCH 10/52] atp870u: Untangle tmport #8 Ondrej Zary
2015-11-17 18:23 ` [PATCH 11/52] atp870u: Untangle tmpcip Ondrej Zary
2015-11-17 18:23 ` [PATCH 12/52] atp870u: Untangle tmpcip #2 Ondrej Zary
2015-11-17 18:23 ` [PATCH 13/52] atp870u: Remove ugly gotos Ondrej Zary
2015-11-17 18:23 ` [PATCH 14/52] atp870u: Remove ugly gotos #2 Ondrej Zary
2015-11-17 18:23 ` [PATCH 15/52] atp870u: Remove ugly gotos #3 Ondrej Zary
2015-11-17 18:23 ` [PATCH 16/52] atp870u: Remove ugly gotos #4 Ondrej Zary
2015-11-17 18:23 ` [PATCH 17/52] atp870u: Remove ugly gotos #5 Ondrej Zary
2015-11-17 18:23 ` [PATCH 18/52] atp870u: Introduce HW access wrappers Ondrej Zary
2015-11-17 18:23 ` [PATCH 19/52] atp870u: Convert is870() to use wrappers Ondrej Zary
2015-11-17 18:23 ` [PATCH 20/52] atp870u: Convert is880() " Ondrej Zary
2015-11-17 18:23 ` [PATCH 21/52] atp870u: Convert is885() " Ondrej Zary
2015-11-17 18:23 ` [PATCH 22/52] atp870u: Unify code format in is870(), is880() and is885() Ondrej Zary
2015-11-17 18:23 ` [PATCH 23/52] atp870u: Add channel parameter to is870() and is880() Ondrej Zary
2015-11-17 18:24 ` [PATCH 24/52] atp870u: Move chip-specific lines out of is880() and is885() Ondrej Zary
2015-11-17 18:24 ` [PATCH 25/52] atp870u: Remove is880() Ondrej Zary
2015-11-17 18:24 ` [PATCH 26/52] atp870u: Add wide_chip parameter to is870() and is885() Ondrej Zary
2015-11-17 18:24 ` [PATCH 27/52] atp870u: Add remaining 870 support to is885() Ondrej Zary
2015-11-17 18:24 ` [PATCH 28/52] atp870u: Move 870-specific code out of is870() Ondrej Zary
2015-11-17 18:24 ` [PATCH 29/52] atp870u: Remove is870() Ondrej Zary
2015-11-17 18:24 ` [PATCH 30/52] atp870u: Rename is885() to atp_is() Ondrej Zary
2015-11-17 18:24 ` [PATCH 31/52] atp870u: Convert remaining in[bwl] and out[bwl] to wrappers Ondrej Zary
2015-11-17 18:24 ` [PATCH 32/52] atp870u: Replace port 0x80 delay by udelay Ondrej Zary
2015-11-17 18:24 ` [PATCH 33/52] atp870u: Fix incorrect writeb_io access to register 0x3a Ondrej Zary
2015-11-17 18:24 ` [PATCH 34/52] atp870u: Introduce atp_set_host_id Ondrej Zary
2015-11-17 18:24 ` [PATCH 35/52] atp870u: Reduce log spam on module load/unload Ondrej Zary
2015-11-17 18:24 ` [PATCH 36/52] atp870u: Remove empty tscam_885() Ondrej Zary
2015-11-17 18:24 ` [PATCH 37/52] atp870u: Use module_pci_driver Ondrej Zary
2015-11-17 18:24 ` [PATCH 38/52] atp870u: Use n_io_port in request_region and release_region Ondrej Zary
2015-11-17 18:24 ` [PATCH 39/52] atp870u: Remove useless and broken card counting Ondrej Zary
2015-11-17 18:24 ` [PATCH 40/52] atp870u: Remove unused irq from struct atp_unit Ondrej Zary
2015-11-17 18:24 ` [PATCH 41/52] atp870u: Improve _probe() Ondrej Zary
2015-11-17 18:24 ` [PATCH 42/52] atp870u: Improve unsupported chip detection Ondrej Zary
2015-11-17 18:24 ` [PATCH 43/52] atp870u: Remove chip_ver from struct atp_unit Ondrej Zary
2015-11-17 18:24 ` [PATCH 44/52] atp870u: Simplify _probe() Ondrej Zary
2015-11-17 18:24 ` [PATCH 45/52] atp870u: Introduce is880(), is885() and remove dev_id Ondrej Zary
2015-11-17 18:24 ` [PATCH 46/52] atp870u: Use pci_request_regions Ondrej Zary
2015-11-17 18:24 ` [PATCH 47/52] atp870u: Request IRQ later, remove weird locking Ondrej Zary
2015-11-17 18:24 ` [PATCH 48/52] atp870u: Remove scam_on from struct atp_unit Ondrej Zary
2015-11-17 18:24 ` [PATCH 49/52] atp870u: Initialize tables earlier Ondrej Zary
2015-11-17 18:24 ` [PATCH 50/52] atp870u: Introduce atp880_init() Ondrej Zary
2015-11-17 18:24 ` [PATCH 51/52] atp870u: Introduce atp885_init() Ondrej Zary
2015-11-17 18:24 ` [PATCH 52/52] atp870u: Introduce atp870_init() Ondrej Zary
2015-11-19 17:10 ` [PATCH 00/52] [resend] atp870u: Major rework Martin K. Petersen
  -- strict thread matches above, loose matches on Subject: below --
2015-07-26 20:24 [PATCH 00/52] " Ondrej Zary
2015-07-26 20:24 ` [PATCH 52/52] atp870u: Introduce atp870_init() Ondrej Zary

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.