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 27/52] atp870u: Add remaining 870 support to is885()
  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

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

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 27/52] atp870u: Add remaining 870 support to is885() 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.