patch-2.2.13 linux/drivers/scsi/atp870u.c

Next file: linux/drivers/scsi/atp870u.h
Previous file: linux/drivers/scsi/aic7xxx.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.2.12/linux/drivers/scsi/atp870u.c linux/drivers/scsi/atp870u.c
@@ -1,7 +1,7 @@
 /* $Id: atp870u.c,v 1.0 1997/05/07 15:22:00 root Exp root $
  *  linux/kernel/atp870u.c
  *
- *  Copyright (C) 1997	Wu Ching Chen
+ *  Copyright (C) 1997  Wu Ching Chen
  *  2.1.x update (C) 1998  Krzysztof G. Baranowski
  *   
  * Marcelo Tosatti <marcelo@conectiva.com.br> : SMP fixes 
@@ -30,745 +30,620 @@
 
 #include<linux/stat.h>
 
-struct proc_dir_entry proc_scsi_atp870u = {
-    PROC_SCSI_ATP870U, 7, "atp870u",
-    S_IFDIR | S_IRUGO | S_IXUGO, 2
+struct proc_dir_entry proc_scsi_atp870u =
+{
+	PROC_SCSI_ATP870U, 7, "atp870u",
+	S_IFDIR | S_IRUGO | S_IXUGO, 2
 };
 
 void mydlyu(unsigned int);
+
 /*
-static const char RCSid[] = "$Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/atp870u.c,v 1.0 1997/05/07 15:22:00 root Exp root $";
-*/
+ *   static const char RCSid[] = "$Header: /usr/src/linux/kernel/blk_drv/scsi/RCS/atp870u.c,v 1.0 1997/05/07 15:22:00 root Exp root $";
+ */
+
+static unsigned char admaxu = 1, host_idu[2], chip_veru[2], scam_on[2], global_map[2];
+static unsigned short int active_idu[2], wide_idu[2], sync_idu, ultra_map[2];
+static int workingu[2] = {0, 0};
+
+static Scsi_Cmnd *querequ[2][qcnt], *curr_req[2][16];
+
+static unsigned char devspu[2][16] = {
+	{0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20},
+	{0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
+};
 
-static unsigned char admaxu=1,host_idu[2],chip_veru[2],scam_on[2],global_map[2];
-static unsigned short int active_idu[2],wide_idu[2],sync_idu,ultra_map[2];
-static int  workingu[2]={0,0};
-static Scsi_Cmnd *querequ[2][qcnt],*curr_req[2][16];
-static unsigned char devspu[2][16] = {{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-				0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20},
-			       {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-				0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20}};
-static unsigned char dirctu[2][16],last_cmd[2],in_snd[2],in_int[2];
+static unsigned char dirctu[2][16], last_cmd[2], in_snd[2], in_int[2];
 static unsigned char ata_cdbu[2][16];
-static unsigned int ioportu[2]={0,0};
-static unsigned int irqnumu[2]={0,0};
+static unsigned int ioportu[2] = {0, 0};
+static unsigned int irqnumu[2] = {0, 0};
 static unsigned short int pciportu[2];
-static unsigned long prdaddru[2][16],tran_lenu[2][16],last_lenu[2][16];
+static unsigned long prdaddru[2][16], tran_lenu[2][16], last_lenu[2][16];
 static unsigned char prd_tableu[2][16][1024];
 static unsigned char *prd_posu[2][16];
-static unsigned char quhdu[2],quendu[2];
-static unsigned char devtypeu[2][16] = {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
-				 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
-static struct Scsi_Host * atp_host[2]={NULL,NULL};
+static unsigned char quhdu[2], quendu[2];
+
+static unsigned char devtypeu[2][16] =
+{
+	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+	{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+};
+
+static struct Scsi_Host *atp_host[2] = {NULL, NULL};
 
 static void atp870u_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
 {
-	 unsigned long flags;
-    unsigned short int	tmpcip,id;
-    unsigned char	i,j,h,tarid,lun;
-    unsigned char  *prd;
-    Scsi_Cmnd *workrequ;
-    unsigned int workportu,tmport;
-    unsigned long adrcntu,k;
-    int      errstus;
-
-    for ( h=0; h < 2; h++ )
-    {
-	if ( ( irq & 0x0f ) == irqnumu[h] )
-	{
-	   goto irq_numok;
+	unsigned long flags;
+	unsigned short int tmpcip, id;
+	unsigned char i, j, h, tarid, lun;
+	unsigned char *prd;
+	Scsi_Cmnd *workrequ;
+	unsigned int workportu, tmport;
+	unsigned long adrcntu, k;
+	int errstus;
+
+	for (h = 0; h < 2; h++) {
+		if (irq == irqnumu[h]) {
+			goto irq_numok;
+		}
 	}
-    }
-    return;
+	return;
 irq_numok:
-    in_int[h]=1;
-    workportu=ioportu[h];
-    tmport=workportu;
-
-    if ( workingu[h] != 0 )
-    {
-       tmport += 0x1f;
-       j=inb(tmport);
-       tmpcip=pciportu[h];
-       if ((inb(tmpcip) & 0x08) != 0)
-       {
-	  tmpcip += 0x2;
-	  while((inb(tmpcip) & 0x08) != 0);
-       }
-       tmpcip=pciportu[h];
-       outb(0x00,tmpcip);
-       tmport -=0x08;
-       i=inb(tmport);
-       if ((j & 0x40) == 0)
-       {
-	  if ((last_cmd[h] & 0x40) == 0)
-	  {
-	     last_cmd[h]=0xff;
-	  }
-       }
-       else
-       {
-	  last_cmd[h] |= 0x40;
-       }
-       tmport -= 0x02;
-       tarid=inb(tmport);
-       tmport += 0x02;
-       if ((tarid & 0x40) != 0)
-       {
-	  tarid=(tarid & 0x07) | 0x08;
-       }
-       else
-       {
-	  tarid &= 0x07;
-       }
-       if ( i == 0x85 )
-       {
-	  if (wide_idu[h] != 0)
-	  {
-	     tmport=workportu+0x1b;
-	     j=inb(tmport) & 0x0e;
-	     j |= 0x01;
-	     outb(j,tmport);
-	  }
-	  if (((quhdu[h] != quendu[h]) || (last_cmd[h] != 0xff)) &&
-	      (in_snd[h] == 0))
-	  {
-	     send_s870(h);
-	  }
-	  in_int[h]=0;
-	  return;
-       }
-       if ( i == 0x21 )
-       {
-	  tmport -= 0x05;
-	  adrcntu=0;
-	  ((unsigned char *)&adrcntu)[2]=inb(tmport++);
-	  ((unsigned char *)&adrcntu)[1]=inb(tmport++);
-	  ((unsigned char *)&adrcntu)[0]=inb(tmport);
-	  k=last_lenu[h][tarid];
-	  k -= adrcntu;
-	  tran_lenu[h][tarid]= k;
-	  last_lenu[h][tarid]=adrcntu;
-	  tmport -= 0x04;
-	  outb(0x41,tmport);
-	  tmport += 0x08;
-	  outb(0x08,tmport);
-	  in_int[h]=0;
-	  return ;
-       }
-
-       if ((i == 0x80) || (i == 0x8f))
-       {
-	  lun=0;
-	  tmport -= 0x07;
-	  j=inb(tmport);
-	  if ( j == 0x44 )
-	  {
-	     tmport += 0x0d;
-	     lun=inb(tmport) & 0x07;
-	  }
-	  else
-	  {
-	     if ( j == 0x41 )
-	     {
+	in_int[h] = 1;
+	workportu = ioportu[h];
+	tmport = workportu;
+
+	if (workingu[h] != 0) 
+	{
+		tmport += 0x1f;
+		j = inb(tmport);
+
+		tmpcip = pciportu[h];
+		if ((inb(tmpcip) & 0x08) != 0) 
+		{
+			tmpcip += 0x2;
+			while ((inb(tmpcip) & 0x08) != 0);
+		}
+		tmpcip = pciportu[h];
+		outb(0x00, tmpcip);
+		tmport -= 0x08;
+
+		i = inb(tmport);
+		if ((j & 0x40) == 0) 
+		{
+			if ((last_cmd[h] & 0x40) == 0) 
+			{
+				last_cmd[h] = 0xff;
+			}
+		}
+		else last_cmd[h] |= 0x40;
+
+		tmport -= 0x02;
+		tarid = inb(tmport);
 		tmport += 0x02;
-		adrcntu=0;
-		((unsigned char *)&adrcntu)[2]=inb(tmport++);
-		((unsigned char *)&adrcntu)[1]=inb(tmport++);
-		((unsigned char *)&adrcntu)[0]=inb(tmport);
-		k=last_lenu[h][tarid];
-		k -= adrcntu;
-		tran_lenu[h][tarid]= k;
-		last_lenu[h][tarid]=adrcntu;
-		tmport += 0x04;
-		outb(0x08,tmport);
-		in_int[h]=0;
-		return ;
-	     }
-	     else
-	     {
-		outb(0x46,tmport);
-		dirctu[h][tarid]=0x00;
+
+		if ((tarid & 0x40) != 0) {
+			tarid = (tarid & 0x07) | 0x08;
+		} else {
+			tarid &= 0x07;
+		}
+		if (i == 0x85) 
+		{
+			if (wide_idu[h] != 0) 
+			{
+				tmport = workportu + 0x1b;
+				j = inb(tmport) & 0x0e;
+				j |= 0x01;
+				outb(j, tmport);
+			}
+			if (((quhdu[h] != quendu[h]) || (last_cmd[h] != 0xff)) &&
+			    (in_snd[h] == 0)) 
+			{
+				send_s870(h);
+			}
+			in_int[h] = 0;
+			return;
+		}
+		if (i == 0x21) 
+		{
+			tmport -= 0x05;
+			adrcntu = 0;
+			((unsigned char *) &adrcntu)[2] = inb(tmport++);
+			((unsigned char *) &adrcntu)[1] = inb(tmport++);
+			((unsigned char *) &adrcntu)[0] = inb(tmport);
+			k = last_lenu[h][tarid];
+			k -= adrcntu;
+			tran_lenu[h][tarid] = k;
+			last_lenu[h][tarid] = adrcntu;
+			tmport -= 0x04;
+			outb(0x41, tmport);
+			tmport += 0x08;
+			outb(0x08, tmport);
+			in_int[h] = 0;
+			return;
+		}
+		if ((i == 0x80) || (i == 0x8f)) 
+		{
+			lun = 0;
+			tmport -= 0x07;
+			j = inb(tmport);
+			if (j == 0x44) {
+				tmport += 0x0d;
+				lun = inb(tmport) & 0x07;
+			} else {
+				if (j == 0x41) 
+				{
+					tmport += 0x02;
+					adrcntu = 0;
+					((unsigned char *) &adrcntu)[2] = inb(tmport++);
+					((unsigned char *) &adrcntu)[1] = inb(tmport++);
+					((unsigned char *) &adrcntu)[0] = inb(tmport);
+					k = last_lenu[h][tarid];
+					k -= adrcntu;
+					tran_lenu[h][tarid] = k;
+					last_lenu[h][tarid] = adrcntu;
+					tmport += 0x04;
+					outb(0x08, tmport);
+					in_int[h] = 0;
+					return;
+				}
+				else 
+				{
+					outb(0x46, tmport);
+					dirctu[h][tarid] = 0x00;
+					tmport += 0x02;
+					outb(0x00, tmport++);
+					outb(0x00, tmport++);
+					outb(0x00, tmport++);
+					tmport += 0x03;
+					outb(0x08, tmport);
+					in_int[h] = 0;
+					return;
+				}
+			}
+			tmport = workportu + 0x10;
+			outb(0x45, tmport);
+			tmport += 0x06;
+			tarid = inb(tmport);
+			if ((tarid & 0x10) != 0) 
+			{
+				tarid = (tarid & 0x07) | 0x08;
+			} else {
+				tarid &= 0x07;
+			}
+			workrequ = curr_req[h][tarid];
+			tmport = workportu + 0x0f;
+			outb(lun, tmport);
+			tmport += 0x02;
+			outb(devspu[h][tarid], tmport++);
+			adrcntu = tran_lenu[h][tarid];
+			k = last_lenu[h][tarid];
+			outb(((unsigned char *) &k)[2], tmport++);
+			outb(((unsigned char *) &k)[1], tmport++);
+			outb(((unsigned char *) &k)[0], tmport++);
+			j = tarid;
+			if (tarid > 7) {
+				j = (j & 0x07) | 0x40;
+			}
+			j |= dirctu[h][tarid];
+			outb(j, tmport++);
+			outb(0x80, tmport);
+			tmport = workportu + 0x1b;
+			j = inb(tmport) & 0x0e;
+			id = 1;
+			id = id << tarid;
+			if ((id & wide_idu[h]) != 0) {
+				j |= 0x01;
+			}
+			outb(j, tmport);
+			if (last_lenu[h][tarid] == 0) {
+				tmport = workportu + 0x18;
+				outb(0x08, tmport);
+				in_int[h] = 0;
+				return;
+			}
+			prd = prd_posu[h][tarid];
+			while (adrcntu != 0) 
+			{
+				id = ((unsigned short int *) (prd))[2];
+				if (id == 0) {
+					k = 0x10000;
+				} else {
+					k = id;
+				}
+				if (k > adrcntu) {
+					((unsigned short int *) (prd))[2] = (unsigned short int)
+					    (k - adrcntu);
+					((unsigned long *) (prd))[0] += adrcntu;
+					adrcntu = 0;
+					prd_posu[h][tarid] = prd;
+				} else {
+					adrcntu -= k;
+					prdaddru[h][tarid] += 0x08;
+					prd += 0x08;
+					if (adrcntu == 0) {
+						prd_posu[h][tarid] = prd;
+					}
+				}
+			}
+			tmpcip = pciportu[h] + 0x04;
+			outl(prdaddru[h][tarid], tmpcip);
+			tmpcip -= 0x02;
+			outb(0x06, tmpcip);
+			outb(0x00, tmpcip);
+			tmpcip -= 0x02;
+			tmport = workportu + 0x18;
+			if (dirctu[h][tarid] != 0) {
+				outb(0x08, tmport);
+				outb(0x01, tmpcip);
+				in_int[h] = 0;
+				return;
+			}
+			outb(0x08, tmport);
+			outb(0x09, tmpcip);
+			in_int[h] = 0;
+			return;
+		}
+		workrequ = curr_req[h][tarid];
+		if (i == 0x42) {
+			errstus = 0x02;
+			workrequ->result = errstus;
+			goto go_42;
+		}
+		if (i == 0x16) 
+		{
+			errstus = 0;
+			tmport -= 0x08;
+			errstus = inb(tmport);
+			workrequ->result = errstus;
+go_42:
+			spin_lock_irqsave(&io_request_lock, flags);
+			(*workrequ->scsi_done) (workrequ);
+			spin_unlock_irqrestore(&io_request_lock, flags);
+
+			curr_req[h][tarid] = 0;
+			workingu[h]--;
+			if (wide_idu[h] != 0) {
+				tmport = workportu + 0x1b;
+				j = inb(tmport) & 0x0e;
+				j |= 0x01;
+				outb(j, tmport);
+			}
+			if (((last_cmd[h] != 0xff) || (quhdu[h] != quendu[h])) &&
+			    (in_snd[h] == 0)) 
+			{
+				send_s870(h);
+			}
+			in_int[h] = 0;
+			return;
+		}
+		if (i == 0x4f) {
+			i = 0x89;
+		}
+		i &= 0x0f;
+		if (i == 0x09) {
+			tmpcip = tmpcip + 4;
+			outl(prdaddru[h][tarid], tmpcip);
+			tmpcip = tmpcip - 2;
+			outb(0x06, tmpcip);
+			outb(0x00, tmpcip);
+			tmpcip = tmpcip - 2;
+			tmport = workportu + 0x10;
+			outb(0x41, tmport);
+			dirctu[h][tarid] = 0x00;
+			tmport += 0x08;
+			outb(0x08, tmport);
+			outb(0x09, tmpcip);
+			in_int[h] = 0;
+			return;
+		}
+		if (i == 0x08) {
+			tmpcip = tmpcip + 4;
+			outl(prdaddru[h][tarid], tmpcip);
+			tmpcip = tmpcip - 2;
+			outb(0x06, tmpcip);
+			outb(0x00, tmpcip);
+			tmpcip = tmpcip - 2;
+			tmport = workportu + 0x10;
+			outb(0x41, tmport);
+			tmport += 0x05;
+			outb((unsigned char) (inb(tmport) | 0x20), tmport);
+			dirctu[h][tarid] = 0x20;
+			tmport += 0x03;
+			outb(0x08, tmport);
+			outb(0x01, tmpcip);
+			in_int[h] = 0;
+			return;
+		}
+		tmport -= 0x07;
+		if (i == 0x0a) {
+			outb(0x30, tmport);
+		} else {
+			outb(0x46, tmport);
+		}
+		dirctu[h][tarid] = 0x00;
 		tmport += 0x02;
-		outb(0x00,tmport++);
-		outb(0x00,tmport++);
-		outb(0x00,tmport++);
-		tmport+=0x03;
-		outb(0x08,tmport);
-		in_int[h]=0;
+		outb(0x00, tmport++);
+		outb(0x00, tmport++);
+		outb(0x00, tmport++);
+		tmport += 0x03;
+		outb(0x08, tmport);
+		in_int[h] = 0;
 		return;
-	     }
-	  }
-	  tmport=workportu + 0x10;
-	  outb(0x45,tmport);
-	  tmport += 0x06;
-	  tarid=inb(tmport);
-	  if ((tarid & 0x10) != 0)
-	  {
-	     tarid=(tarid & 0x07) | 0x08;
-	  }
-	  else
-	  {
-	     tarid &= 0x07;
-	  }
-	  workrequ=curr_req[h][tarid];
-	  tmport=workportu + 0x0f;
-	  outb(lun,tmport);
-	  tmport += 0x02;
-	  outb(devspu[h][tarid],tmport++);
-	  adrcntu=tran_lenu[h][tarid];
-	  k=last_lenu[h][tarid];
-	  outb(((unsigned char *)&k)[2],tmport++);
-	  outb(((unsigned char *)&k)[1],tmport++);
-	  outb(((unsigned char *)&k)[0],tmport++);
-	  j=tarid;
-	  if ( tarid > 7 )
-	  {
-	     j = (j & 0x07) | 0x40;
-	  }
-	  j |= dirctu[h][tarid];
-	  outb(j,tmport++);
-	  outb(0x80,tmport);
-	  tmport=workportu + 0x1b;
-	  j=inb(tmport) & 0x0e;
-	  id=1;
-	  id=id << tarid;
-	  if ((id & wide_idu[h]) != 0)
-	  {
-	     j |= 0x01;
-	  }
-	  outb(j,tmport);
-	  if ( last_lenu[h][tarid] == 0 )
-	  {
-	     tmport=workportu + 0x18;
-	     outb(0x08,tmport);
-	     in_int[h]=0;
-	     return ;
-	  }
-	  prd=prd_posu[h][tarid];
-	  while ( adrcntu != 0 )
-	  {
-	       id=((unsigned short int *)(prd))[2];
-	       if ( id == 0 )
-	       {
-		  k=0x10000;
-	       }
-	       else
-	       {
-		  k=id;
-	       }
-	       if ( k > adrcntu )
-	       {
-		  ((unsigned short int *)(prd))[2] =(unsigned short int)
-						     (k - adrcntu);
-		  ((unsigned long *)(prd))[0] += adrcntu;
-		  adrcntu=0;
-		  prd_posu[h][tarid]=prd;
-	       }
-	       else
-	       {
-		  adrcntu -= k;
-		  prdaddru[h][tarid] += 0x08;
-		  prd += 0x08;
-		  if ( adrcntu == 0 )
-		  {
-		     prd_posu[h][tarid]=prd;
-		  }
-	       }
-	  }
-	  tmpcip=pciportu[h] + 0x04;
-	  outl(prdaddru[h][tarid],tmpcip);
-	  tmpcip -= 0x02;
-	  outb(0x06,tmpcip);
-	  outb(0x00,tmpcip);
-	  tmpcip -= 0x02;
-	  tmport=workportu + 0x18;
-	  if ( dirctu[h][tarid] != 0 )
-	  {
-	     outb(0x08,tmport);
-	     outb(0x01,tmpcip);
-	     in_int[h]=0;
-	     return;
-	  }
-	  outb(0x08,tmport);
-	  outb(0x09,tmpcip);
-	  in_int[h]=0;
-	  return;
-       }
-
-       workrequ=curr_req[h][tarid];
-       if ( i == 0x42 )
-       {
-	  errstus=0x02;
-	  workrequ->result=errstus;
-	  goto go_42;
-       }
-       if ( i == 0x16 )
-       {
-	  errstus=0;
-	  tmport -= 0x08;
-	  errstus=inb(tmport);
-	  workrequ->result=errstus;
-/*	  if ( errstus == 0x02 )
-	  {
-	     tmport +=0x10;
-	     if ((inb(tmport) & 0x80) != 0)
-	     {
-		printk(" autosense ");
-	     }
-	     tmport -=0x09;
-	     outb(0,tmport);
-	     tmport=workportu+0x3a;
-	     outb((unsigned char)(inb(tmport) | 0x10),tmport);
-	     tmport -= 0x39;
-
-	     outb(0x08,tmport++);
-	     outb(0x7f,tmport++);
-	     outb(0x03,tmport++);
-	     outb(0x00,tmport++);
-	     outb(0x00,tmport++);
-	     outb(0x00,tmport++);
-	     outb(0x0e,tmport++);
-	     outb(0x00,tmport);
-	     tmport+=0x07;
-	     outb(0x00,tmport++);
-	     tmport++;
-	     outb(devspu[h][workrequ->target],tmport++);
-	     outb(0x00,tmport++);
-	     outb(0x00,tmport++);
-	     outb(0x0e,tmport++);
-	     tmport+=0x03;
-	     outb(0x09,tmport);
-	     tmport+=0x07;
-	     i=0;
-	     adrcntu=(unsigned long)(&workrequ->sense_buffer[0]);
-get_sens:
-	     j=inb(tmport);
-	     if ((j & 0x01) != 0)
-	     {
-		tmport-=0x06;
-		(unsigned char)(((caddr_t) adrcntu)[i++])=inb(tmport);
-		tmport+=0x06;
-		goto get_sens;
-	     }
-	     if ((j & 0x80) == 0)
-	     {
-		goto get_sens;
-	     }
-	     if ((j & 0x40) == 0)
-	     {
-		tmport-=0x08;
-		i=inb(tmport);
-	     }
-	     tmport=workportu+0x3a;
-	     outb((unsigned char)(inb(tmport) & 0xef),tmport);
-	     tmport=workportu+0x01;
-	     outb(0x2c,tmport);
-	     tmport += 0x15;
-	     outb(0x80,tmport);
-	  }   */
-go_42:
-	  spin_lock_irqsave(&io_request_lock, flags);
-	  (*workrequ->scsi_done)(workrequ);
-	  spin_unlock_irqrestore(&io_request_lock, flags);
-
-	  curr_req[h][tarid]=0;
-	  workingu[h]--;
-	  if (wide_idu[h] != 0)
-	  {
-	     tmport=workportu+0x1b;
-	     j=inb(tmport) & 0x0e;
-	     j |= 0x01;
-	     outb(j,tmport);
-	  }
-	  if (((last_cmd[h] != 0xff) || (quhdu[h] != quendu[h])) &&
-	      (in_snd[h] == 0))
-	  {
-	     send_s870(h);
-	  }
-	  in_int[h]=0;
-	  return;
-       }
-   if ( i == 0x4f )
-   {
-      i=0x89;
-   }
-   i &= 0x0f;
-   if ( i == 0x09 )
-   {
-      tmpcip=tmpcip+4;
-      outl(prdaddru[h][tarid],tmpcip);
-      tmpcip=tmpcip-2;
-      outb(0x06,tmpcip);
-      outb(0x00,tmpcip);
-      tmpcip=tmpcip-2;
-      tmport=workportu+0x10;
-      outb(0x41,tmport);
-      dirctu[h][tarid]=0x00;
-      tmport += 0x08;
-      outb(0x08,tmport);
-      outb(0x09,tmpcip);
-      in_int[h]=0;
-      return;
-   }
-   if ( i == 0x08 )
-   {
-      tmpcip=tmpcip+4;
-      outl(prdaddru[h][tarid],tmpcip);
-      tmpcip=tmpcip-2;
-      outb(0x06,tmpcip);
-      outb(0x00,tmpcip);
-      tmpcip=tmpcip-2;
-      tmport=workportu+0x10;
-      outb(0x41,tmport);
-      tmport += 0x05;
-      outb((unsigned char)(inb(tmport) | 0x20),tmport);
-      dirctu[h][tarid]=0x20;
-      tmport += 0x03;
-      outb(0x08,tmport);
-      outb(0x01,tmpcip);
-      in_int[h]=0;
-      return;
-   }
-   tmport -= 0x07;
-   if ( i == 0x0a )
-   {
-      outb(0x30,tmport);
-   }
-   else
-   {
-      outb(0x46,tmport);
-   }
-   dirctu[h][tarid]=0x00;
-   tmport += 0x02;
-   outb(0x00,tmport++);
-   outb(0x00,tmport++);
-   outb(0x00,tmport++);
-   tmport+=0x03;
-   outb(0x08,tmport);
-   in_int[h]=0;
-   return;
-  }
-  else
-  {
-     tmport=workportu+0x17;
-     inb(tmport);
-     workingu[h]=0;
-     in_int[h]=0;
-     return;
-  }
+	} else {
+		tmport = workportu + 0x17;
+		inb(tmport);
+		workingu[h] = 0;
+		in_int[h] = 0;
+		return;
+	}
 }
 
-int atp870u_queuecommand(Scsi_Cmnd * req_p, void (*done)(Scsi_Cmnd *))
+int atp870u_queuecommand(Scsi_Cmnd * req_p, void (*done) (Scsi_Cmnd *))
 {
-    unsigned char i,h;
-    unsigned long flags;
-    unsigned short int m;
-    unsigned int tmport;
-
-    for( h=0; h <= admaxu; h++ )
-    {
-       if ( req_p->host == atp_host[h] )
-       {
-	  goto host_ok;
-       }
-    }
-    return 0;
+	unsigned char i, h;
+	unsigned long flags;
+	unsigned short int m;
+	unsigned int tmport;
+
+	for (h = 0; h <= admaxu; h++) {
+		if (req_p->host == atp_host[h]) {
+			goto host_ok;
+		}
+	}
+	return 0;
 host_ok:
-   if ( req_p->channel != 0 )
-   {
-      req_p->result = 0x00040000;
-      done(req_p);
-      return 0;
-   }
-   m=1;
-   m=  m << req_p->target;
-   if ( ( m & active_idu[h] ) == 0 )
-   {
-      req_p->result = 0x00040000;
-      done(req_p);
-      return 0;
-   }
-   if (done)
-   {
-      req_p->scsi_done = done;
-   }
-   else
-   {
-      printk("atp870u_queuecommand: done can't be NULL\n");
-      req_p->result = 0;
-      done(req_p);
-      return 0;
-   }
-   quendu[h]++;
-   if ( quendu[h] >= qcnt )
-   {
-      quendu[h]=0;
-   }
-   wait_que_empty:
-     if ( quhdu[h] == quendu[h] )
-     {
-	goto wait_que_empty;
-     }
-     save_flags(flags);
-     cli();
-     querequ[h][quendu[h]]=req_p;
-     if ( quendu[h] == 0 )
-     {
-	i=qcnt-1;
-     }
-     else
-     {
-	i=quendu[h]-1;
-     }
-     tmport = ioportu[h]+0x1c;
-     restore_flags(flags);
-     if ((inb(tmport) == 0) && (in_int[h] == 0) && (in_snd[h] == 0))
-     {
-	 send_s870(h);
-     }
-     return 0;
+	if (req_p->channel != 0) {
+		req_p->result = 0x00040000;
+		done(req_p);
+		return 0;
+	}
+	m = 1;
+	m = m << req_p->target;
+	if ((m & active_idu[h]) == 0) {
+		req_p->result = 0x00040000;
+		done(req_p);
+		return 0;
+	}
+	if (done) {
+		req_p->scsi_done = done;
+	} else {
+		printk("atp870u_queuecommand: done can't be NULL\n");
+		req_p->result = 0;
+		done(req_p);
+		return 0;
+	}
+	quendu[h]++;
+	if (quendu[h] >= qcnt) {
+		quendu[h] = 0;
+	}
+wait_que_empty:
+	if (quhdu[h] == quendu[h]) {
+		goto wait_que_empty;
+	}
+	save_flags(flags);
+	cli();
+	querequ[h][quendu[h]] = req_p;
+	if (quendu[h] == 0) {
+		i = qcnt - 1;
+	} else {
+		i = quendu[h] - 1;
+	}
+	tmport = ioportu[h] + 0x1c;
+	restore_flags(flags);
+	if ((inb(tmport) == 0) && (in_int[h] == 0) && (in_snd[h] == 0)) {
+		send_s870(h);
+	}
+	return 0;
 }
 
-void mydlyu(unsigned int dlycnt )
+void mydlyu(unsigned int dlycnt)
 {
-    unsigned int i ;
-    for ( i = 0 ; i < dlycnt ; i++ )
-    {
-       inb(0x80);
-    }
+	unsigned int i;
+	for (i = 0; i < dlycnt; i++) {
+		inb(0x80);
+	}
 }
 
 void send_s870(unsigned char h)
 {
-     unsigned int  tmport;
-     Scsi_Cmnd *workrequ;
-     unsigned long flags;
-     unsigned int   i;
-     unsigned char  j,tarid;
-     unsigned char  *prd;
-     unsigned short int   tmpcip,w;
-     unsigned long  l,bttl;
-     unsigned int workportu;
-     struct scatterlist * sgpnt;
+	unsigned int tmport;
+	Scsi_Cmnd *workrequ;
+	unsigned long flags;
+	unsigned int i;
+	unsigned char j, tarid;
+	unsigned char *prd;
+	unsigned short int tmpcip, w;
+	unsigned long l, bttl;
+	unsigned int workportu;
+	struct scatterlist *sgpnt;
 
 	save_flags(flags);
 	cli();
-	if ( in_snd[h] != 0 )
-	{
-	   restore_flags(flags);
-	   return;
+	if (in_snd[h] != 0) {
+		restore_flags(flags);
+		return;
 	}
-	in_snd[h]=1;
-	if ((last_cmd[h] != 0xff) && ((last_cmd[h] & 0x40) != 0))
-	{
-	   last_cmd[h] &= 0x0f;
-	   workrequ=curr_req[h][last_cmd[h]];
-	   goto cmd_subp;
+	in_snd[h] = 1;
+	if ((last_cmd[h] != 0xff) && ((last_cmd[h] & 0x40) != 0)) {
+		last_cmd[h] &= 0x0f;
+		workrequ = curr_req[h][last_cmd[h]];
+		goto cmd_subp;
 	}
 	workingu[h]++;
-	j=quhdu[h];
+	j = quhdu[h];
 	quhdu[h]++;
-	if ( quhdu[h] >= qcnt )
-	{
-	   quhdu[h]=0;
+	if (quhdu[h] >= qcnt) {
+		quhdu[h] = 0;
 	}
-	workrequ=querequ[h][quhdu[h]];
-	if ( curr_req[h][workrequ->target] == 0 )
-	{
-	   curr_req[h][workrequ->target]=workrequ;
-	   last_cmd[h]=workrequ->target;
-	   goto cmd_subp;
+	workrequ = querequ[h][quhdu[h]];
+	if (curr_req[h][workrequ->target] == 0) {
+		curr_req[h][workrequ->target] = workrequ;
+		last_cmd[h] = workrequ->target;
+		goto cmd_subp;
 	}
-	quhdu[h]=j;
+	quhdu[h] = j;
 	workingu[h]--;
-	in_snd[h]=0;
+	in_snd[h] = 0;
 	restore_flags(flags);
-	return ;
+	return;
 cmd_subp:
-   workportu=ioportu[h];
-   tmport=workportu+0x1f;
-   if ((inb(tmport) & 0xb0) != 0)
-   {
-      goto abortsnd;
-   }
-   tmport=workportu+0x1c;
-   if ( inb(tmport) == 0 )
-   {
-      goto oktosend;
-   }
+	workportu = ioportu[h];
+	tmport = workportu + 0x1f;
+	if ((inb(tmport) & 0xb0) != 0) {
+		goto abortsnd;
+	}
+	tmport = workportu + 0x1c;
+	if (inb(tmport) == 0) {
+		goto oktosend;
+	}
 abortsnd:
-   last_cmd[h] |= 0x40;
-   in_snd[h]=0;
-   restore_flags(flags);
-   return;
-oktosend:
-   memcpy(&ata_cdbu[h][0], &workrequ->cmnd[0], workrequ->cmd_len);
-   if ( ata_cdbu[h][0] == 0x25 )
-   {
-      if ( workrequ->request_bufflen > 8 )
-      {
-	 workrequ->request_bufflen=0x08;
-      }
-   }
-   if ( ata_cdbu[h][0] == 0x12 )
-   {
-      if ( workrequ->request_bufflen > 0x24 )
-      {
-	 workrequ->request_bufflen = 0x24;
-	 ata_cdbu[h][4]=0x24;
-      }
-   }
-
-   tmport=workportu+0x1b;
-   j=inb(tmport) & 0x0e;
-   tarid=workrequ->target;
-   w=1;
-   w = w << tarid;
-   if ((w & wide_idu[h]) != 0)
-   {
-      j |= 0x01;
-   }
-   outb(j,tmport);
-   tmport=workportu;
-   outb(workrequ->cmd_len,tmport++);
-   outb(0x2c,tmport++);
-   outb(0xcf,tmport++);
-   for ( i=0 ; i < workrequ->cmd_len ; i++ )
-   {
-       outb(ata_cdbu[h][i],tmport++);
-   }
-   tmport=workportu+0x0f;
-   outb(0x00,tmport);
-   tmport+=0x02;
-   outb(devspu[h][tarid],tmport++);
-   if (workrequ->use_sg)
-   {
-
-     l=0;
-     sgpnt = (struct scatterlist *) workrequ->request_buffer;
-     for(i=0; i<workrequ->use_sg; i++)
-     {
-       if(sgpnt[i].length == 0 || workrequ->use_sg > ATP870U_SCATTER)
-       {
-	 panic("Foooooooood fight!");
-       }
-       l += sgpnt[i].length;
-     }
-   }
-   else
-   {
-     l=workrequ->request_bufflen;
-   }
-   outb((unsigned char)(((unsigned char *)(&l))[2]),tmport++);
-   outb((unsigned char)(((unsigned char *)(&l))[1]),tmport++);
-   outb((unsigned char)(((unsigned char *)(&l))[0]),tmport++);
-   j=tarid;
-   last_lenu[h][j]=l;
-   tran_lenu[h][j]=0;
-   if ((j & 0x08) != 0)
-   {
-      j=(j & 0x07) | 0x40;
-   }
-   if ((ata_cdbu[h][0] == 0x0a) || (ata_cdbu[h][0] == 0x2a) ||
-       (ata_cdbu[h][0] == 0xaa) || (ata_cdbu[h][0] == 0x15))
-   {
-      outb((unsigned char)(j | 0x20),tmport++);
-   }
-   else
-   {
-      outb(j,tmport++);
-   }
-   outb(0x80,tmport);
-   tmport=workportu + 0x1c;
-   dirctu[h][tarid]=0;
-   if ( l == 0 )
-   {
-      if ( inb(tmport) == 0 )
-      {
-	 tmport=workportu+0x18;
-	 outb(0x08,tmport);
-      }
-      else
-      {
 	last_cmd[h] |= 0x40;
-      }
-      in_snd[h]=0;
-      restore_flags(flags);
-      return;
-   }
-   tmpcip=pciportu[h];
-   prd=&prd_tableu[h][tarid][0];
-   prd_posu[h][tarid]=prd;
-   if (workrequ->use_sg)
-   {
-     sgpnt = (struct scatterlist *) workrequ->request_buffer;
-     i=0;
-     for(j=0; j<workrequ->use_sg; j++)
-     {
-	(unsigned long)(((unsigned long *)(prd))[i >> 1])=(unsigned long)sgpnt[j].address;
-	(unsigned short int)(((unsigned short int *)(prd))[i+2])=sgpnt[j].length;
-	(unsigned short int)(((unsigned short int *)(prd))[i+3])=0;
-	i +=0x04;
-     }
-     (unsigned short int)(((unsigned short int *)(prd))[i-1])=0x8000;
-   }
-   else
-   {
-     bttl=(unsigned long)workrequ->request_buffer;
-     l=workrequ->request_bufflen;
-     i=0;
-     while ( l > 0x10000 )
-     {
-	(unsigned short int)(((unsigned short int *)(prd))[i+3])=0x0000;
-	(unsigned short int)(((unsigned short int *)(prd))[i+2])=0x0000;
-	(unsigned long)(((unsigned long *)(prd))[i >> 1])=bttl;
-	l -= 0x10000;
-	bttl += 0x10000;
-	i += 0x04;
-     }
-     (unsigned short int)(((unsigned short int *)(prd))[i+3])=0x8000;
-     (unsigned short int)(((unsigned short int *)(prd))[i+2])=l;
-     (unsigned long)(((unsigned long *)(prd))[i >> 1])=bttl;
-   }
-   tmpcip=tmpcip+4;
-   prdaddru[h][tarid]=(unsigned long)&prd_tableu[h][tarid][0];
-   outl(prdaddru[h][tarid],tmpcip);
-   tmpcip=tmpcip-2;
-   outb(0x06,tmpcip);
-   outb(0x00,tmpcip);
-   tmpcip=tmpcip-2;
-   if ((ata_cdbu[h][0] == 0x0a) || (ata_cdbu[h][0] == 0x2a) ||
-       (ata_cdbu[h][0] == 0xaa) || (ata_cdbu[h][0] == 0x15))
-   {
-      dirctu[h][tarid]=0x20;
-      if ( inb(tmport) == 0 )
-      {
-	 tmport=workportu+0x18;
-	 outb(0x08,tmport);
-	 outb(0x01,tmpcip);
-      }
-      else
-      {
-	 last_cmd[h] |= 0x40;
-      }
-      in_snd[h]=0;
-      restore_flags(flags);
-      return;
-   }
-   if ( inb(tmport) == 0 )
-   {
-      tmport=workportu+0x18;
-      outb(0x08,tmport);
-      outb(0x09,tmpcip);
-   }
-   else
-   {
-      last_cmd[h] |= 0x40;
-   }
-   in_snd[h]=0;
-   restore_flags(flags);
-   return;
+	in_snd[h] = 0;
+	restore_flags(flags);
+	return;
+oktosend:
+	memcpy(&ata_cdbu[h][0], &workrequ->cmnd[0], workrequ->cmd_len);
+	if (ata_cdbu[h][0] == 0x25) {
+		if (workrequ->request_bufflen > 8) {
+			workrequ->request_bufflen = 0x08;
+		}
+	}
+	if (ata_cdbu[h][0] == 0x12) {
+		if (workrequ->request_bufflen > 0x24) {
+			workrequ->request_bufflen = 0x24;
+			ata_cdbu[h][4] = 0x24;
+		}
+	}
+	tmport = workportu + 0x1b;
+	j = inb(tmport) & 0x0e;
+	tarid = workrequ->target;
+	w = 1;
+	w = w << tarid;
+	if ((w & wide_idu[h]) != 0) {
+		j |= 0x01;
+	}
+	outb(j, tmport);
+	tmport = workportu;
+	outb(workrequ->cmd_len, tmport++);
+	outb(0x2c, tmport++);
+	outb(0xcf, tmport++);
+	for (i = 0; i < workrequ->cmd_len; i++) {
+		outb(ata_cdbu[h][i], tmport++);
+	}
+	tmport = workportu + 0x0f;
+	outb(0x00, tmport);
+	tmport += 0x02;
+	outb(devspu[h][tarid], tmport++);
+	if (workrequ->use_sg) 
+	{
+		l = 0;
+		sgpnt = (struct scatterlist *) workrequ->request_buffer;
+		for (i = 0; i < workrequ->use_sg; i++) 
+		{
+			if (sgpnt[i].length == 0 || workrequ->use_sg > ATP870U_SCATTER) 
+			{
+				panic("Foooooooood fight!");
+			}
+			l += sgpnt[i].length;
+		}
+	} else {
+		l = workrequ->request_bufflen;
+	}
+	outb((unsigned char) (((unsigned char *) (&l))[2]), tmport++);
+	outb((unsigned char) (((unsigned char *) (&l))[1]), tmport++);
+	outb((unsigned char) (((unsigned char *) (&l))[0]), tmport++);
+	j = tarid;
+	last_lenu[h][j] = l;
+	tran_lenu[h][j] = 0;
+	if ((j & 0x08) != 0) {
+		j = (j & 0x07) | 0x40;
+	}
+	if ((ata_cdbu[h][0] == 0x0a) || (ata_cdbu[h][0] == 0x2a) ||
+	    (ata_cdbu[h][0] == 0xaa) || (ata_cdbu[h][0] == 0x15)) {
+		outb((unsigned char) (j | 0x20), tmport++);
+	} else {
+		outb(j, tmport++);
+	}
+	outb(0x80, tmport);
+	tmport = workportu + 0x1c;
+	dirctu[h][tarid] = 0;
+	if (l == 0) {
+		if (inb(tmport) == 0) {
+			tmport = workportu + 0x18;
+			outb(0x08, tmport);
+		} else {
+			last_cmd[h] |= 0x40;
+		}
+		in_snd[h] = 0;
+		restore_flags(flags);
+		return;
+	}
+	tmpcip = pciportu[h];
+	prd = &prd_tableu[h][tarid][0];
+	prd_posu[h][tarid] = prd;
+	if (workrequ->use_sg) 
+	{
+		sgpnt = (struct scatterlist *) workrequ->request_buffer;
+		i = 0;
+		for (j = 0; j < workrequ->use_sg; j++) {
+			(unsigned long) (((unsigned long *) (prd))[i >> 1]) = virt_to_bus(sgpnt[j].address);
+			(unsigned short int) (((unsigned short int *) (prd))[i + 2]) = sgpnt[j].length;
+			(unsigned short int) (((unsigned short int *) (prd))[i + 3]) = 0;
+			i += 0x04;
+		}
+		(unsigned short int) (((unsigned short int *) (prd))[i - 1]) = 0x8000;
+	} else {
+		bttl = virt_to_bus(workrequ->request_buffer);
+		l = workrequ->request_bufflen;
+		i = 0;
+		while (l > 0x10000) {
+			(unsigned short int) (((unsigned short int *) (prd))[i + 3]) = 0x0000;
+			(unsigned short int) (((unsigned short int *) (prd))[i + 2]) = 0x0000;
+			(unsigned long) (((unsigned long *) (prd))[i >> 1]) = bttl;
+			l -= 0x10000;
+			bttl += 0x10000;
+			i += 0x04;
+		}
+		(unsigned short int) (((unsigned short int *) (prd))[i + 3]) = 0x8000;
+		(unsigned short int) (((unsigned short int *) (prd))[i + 2]) = l;
+		(unsigned long) (((unsigned long *) (prd))[i >> 1]) = bttl;
+	}
+	tmpcip = tmpcip + 4;
+	prdaddru[h][tarid] = virt_to_bus(&prd_tableu[h][tarid][0]);
+	outl(prdaddru[h][tarid], tmpcip);
+	tmpcip = tmpcip - 2;
+	outb(0x06, tmpcip);
+	outb(0x00, tmpcip);
+	tmpcip = tmpcip - 2;
+	if ((ata_cdbu[h][0] == 0x0a) || (ata_cdbu[h][0] == 0x2a) ||
+	    (ata_cdbu[h][0] == 0xaa) || (ata_cdbu[h][0] == 0x15)) 
+	{
+		dirctu[h][tarid] = 0x20;
+		if (inb(tmport) == 0) {
+			tmport = workportu + 0x18;
+			outb(0x08, tmport);
+			outb(0x01, tmpcip);
+		} else {
+			last_cmd[h] |= 0x40;
+		}
+		in_snd[h] = 0;
+		restore_flags(flags);
+		return;
+	}
+	if (inb(tmport) == 0) 
+	{
+		tmport = workportu + 0x18;
+		outb(0x08, tmport);
+		outb(0x09, tmpcip);
+	} else {
+		last_cmd[h] |= 0x40;
+	}
+	in_snd[h] = 0;
+	restore_flags(flags);
+	return;
 
 }
 
@@ -780,1101 +655,964 @@
 int atp870u_command(Scsi_Cmnd * SCpnt)
 {
 
-    atp870u_queuecommand(SCpnt, internal_done);
+	atp870u_queuecommand(SCpnt, internal_done);
 
-    SCpnt->SCp.Status = 0;
-    while (!SCpnt->SCp.Status)
-	barrier();
-    return SCpnt->result;
+	SCpnt->SCp.Status = 0;
+	while (!SCpnt->SCp.Status)
+		barrier();
+	return SCpnt->result;
 }
 
-unsigned char fun_scam ( unsigned char host,unsigned short int * val )
+unsigned char fun_scam(unsigned char host, unsigned short int *val)
 {
-    unsigned int  tmport ;
-    unsigned short int	 i,k;
-    unsigned char     j;
+	unsigned int tmport;
+	unsigned short int i, k;
+	unsigned char j;
 
-    tmport = ioportu[host]+0x1c;
-    outw(*val,tmport);
+	tmport = ioportu[host] + 0x1c;
+	outw(*val, tmport);
 FUN_D7:
-    for ( i=0; i < 10; i++ )	     /* stable >= bus settle delay(400 ns)  */
-    {
-	k=inw(tmport);
-	j= (unsigned char)(k >> 8);
-	if ((k & 0x8000) != 0)	     /* DB7 all release?    */
-	{
-	   goto  FUN_D7;
+	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
+		k = inw(tmport);
+		j = (unsigned char) (k >> 8);
+		if ((k & 0x8000) != 0) {	/* DB7 all release?    */
+			goto FUN_D7;
+		}
 	}
-    }
-    *val |= 0x4000;		    /* assert DB6	    */
-    outw(*val,tmport);
-    *val &= 0xdfff;		    /* assert DB5	    */
-    outw(*val,tmport);
+	*val |= 0x4000;		/* assert DB6           */
+	outw(*val, tmport);
+	*val &= 0xdfff;		/* assert DB5           */
+	outw(*val, tmport);
 FUN_D5:
-    for ( i=0; i < 10; i++ )	    /* stable >= bus settle delay(400 ns) */
-    {
-       if ((inw(tmport) & 0x2000) != 0)   /* DB5 all release?	*/
-       {
-	  goto	FUN_D5;
-       }
-    }
-    *val |= 0x8000;		     /* no DB4-0, assert DB7	*/
-    *val &= 0xe0ff;
-    outw(*val,tmport);
-    *val &= 0xbfff;		     /* release DB6		*/
-    outw(*val,tmport);
-FUN_D6:
-    for ( i=0; i < 10; i++ )	     /* stable >= bus settle delay(400 ns)  */
-    {
-       if ((inw(tmport) & 0x4000) != 0)   /* DB6 all release?  */
-       {
-	  goto	FUN_D6;
-       }
-    }
+	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns) */
+		if ((inw(tmport) & 0x2000) != 0) {	/* DB5 all release?       */
+			goto FUN_D5;
+		}
+	}
+	*val |= 0x8000;		/* no DB4-0, assert DB7    */
+	*val &= 0xe0ff;
+	outw(*val, tmport);
+	*val &= 0xbfff;		/* release DB6             */
+	outw(*val, tmport);
+      FUN_D6:
+	for (i = 0; i < 10; i++) {	/* stable >= bus settle delay(400 ns)  */
+		if ((inw(tmport) & 0x4000) != 0) {	/* DB6 all release?  */
+			goto FUN_D6;
+		}
+	}
 
-    return j;
+	return j;
 }
 
-void tscam( unsigned char host )
+void tscam(unsigned char host)
 {
 
-    unsigned int  tmport ;
-    unsigned char  i,j,k;
-    unsigned long  n;
-    unsigned short int	m,assignid_map,val;
-    unsigned char  mbuf[33],quintet[2];
-    static unsigned char g2q_tab[8]={ 0x38,0x31,0x32,0x2b,0x34,0x2d,0x2e,0x27 };
+	unsigned int tmport;
+	unsigned char i, j, k;
+	unsigned long n;
+	unsigned short int m, assignid_map, val;
+	unsigned char mbuf[33], quintet[2];
+	static unsigned char g2q_tab[8] =
+	{0x38, 0x31, 0x32, 0x2b, 0x34, 0x2d, 0x2e, 0x27};
 
 
-    for ( i=0; i < 0x10; i++ )
-    {
-	mydlyu(0xffff);
-    }
+	for (i = 0; i < 0x10; i++) {
+		mydlyu(0xffff);
+	}
 
-    tmport = ioportu[host]+1;
-    outb(0x08,tmport++);
-    outb(0x7f,tmport);
-    tmport = ioportu[host]+0x11;
-    outb(0x20,tmport);
-
-    if ((scam_on[host] & 0x40) == 0)
-    {
-       return;
-    }
-
-    m=1;
-    m <<= host_idu[host];
-    j=16;
-    if ( chip_veru[host] < 4 )
-    {
-       m |= 0xff00;
-       j=8;
-    }
-    assignid_map=m;
-    tmport = ioportu[host]+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++);
-
-    for ( i = 0 ; i < j ; i ++ )
-    {
-	m=1;
-	m=m<<i;
-	if ( ( m & assignid_map ) != 0 )
-	{
-	   continue;
+	tmport = ioportu[host] + 1;
+	outb(0x08, tmport++);
+	outb(0x7f, tmport);
+	tmport = ioportu[host] + 0x11;
+	outb(0x20, tmport);
+
+	if ((scam_on[host] & 0x40) == 0) {
+		return;
+	}
+	m = 1;
+	m <<= host_idu[host];
+	j = 16;
+	if (chip_veru[host] < 4) {
+		m |= 0xff00;
+		j = 8;
 	}
-    tmport = ioportu[host]+0x0f;
-    outb(0,tmport++);
-    tmport += 0x02;
-    outb(0,tmport++);
-    outb(0,tmport++);
-    outb(0,tmport++);
-    if ( i > 7 )
-    {
-       k=(i & 0x07) | 0x40;
-    }
-    else
-    {
-       k=i;
-    }
-    outb(k,tmport++);
-    tmport = ioportu[host]+0x1b;
-    if ( chip_veru[host] == 4 )
-    {
-       outb((unsigned char)((inb(tmport) & 0x0e) | 0x01),tmport);
-    }
-    else
-    {
-       outb((unsigned char)(inb(tmport) & 0x0e),tmport);
-    }
+	assignid_map = m;
+	tmport = ioportu[host] + 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++);
+
+	for (i = 0; i < j; i++) {
+		m = 1;
+		m = m << i;
+		if ((m & assignid_map) != 0) {
+			continue;
+		}
+		tmport = ioportu[host] + 0x0f;
+		outb(0, tmport++);
+		tmport += 0x02;
+		outb(0, tmport++);
+		outb(0, tmport++);
+		outb(0, tmport++);
+		if (i > 7) {
+			k = (i & 0x07) | 0x40;
+		} else {
+			k = i;
+		}
+		outb(k, tmport++);
+		tmport = ioportu[host] + 0x1b;
+		if (chip_veru[host] == 4) {
+			outb((unsigned char) ((inb(tmport) & 0x0e) | 0x01), tmport);
+		} else {
+			outb((unsigned char) (inb(tmport) & 0x0e), tmport);
+		}
 wait_rdyok:
-    tmport = ioportu[host]+0x18;
-    outb(0x09,tmport);
-    tmport += 0x07;
-
-    while ((inb(tmport) & 0x80) == 0x00);
-    tmport -= 0x08;
-    k=inb(tmport);
-    if ( k != 0x16 )
-    {
-       if ((k == 0x85) || (k == 0x42))
-       {
-	  continue;
-       }
-       tmport = ioportu[host]+0x10;
-       outb(0x41,tmport);
-       goto wait_rdyok;
-    }
-    assignid_map |= m;
-
-    }
-    tmport = ioportu[host]+0x02;
-    outb(0x7f,tmport);
-    tmport = ioportu[host]+0x1b;
-    outb(0x02,tmport);
-
-    outb(0,0x80);
-
-    val=0x0080;      /* bsy  */
-    tmport = ioportu[host]+0x1c;
-    outw(val,tmport);
-    val |=0x0040;    /* sel  */
-    outw(val,tmport);
-    val |=0x0004;    /* msg  */
-    outw(val,tmport);
-    inb(0x80);		      /* 2 deskew delay(45ns*2=90ns) */
-    val &=0x007f;    /* no bsy	*/
-    outw(val,tmport);
-    mydlyu(0xffff);  /* recommanded SCAM selection response time */
-    mydlyu(0xffff);
-    val &=0x00fb;    /* after 1ms no msg */
-    outw(val,tmport);
+		tmport = ioportu[host] + 0x18;
+		outb(0x09, tmport);
+		tmport += 0x07;
+
+		while ((inb(tmport) & 0x80) == 0x00);
+		tmport -= 0x08;
+		k = inb(tmport);
+		if (k != 0x16) {
+			if ((k == 0x85) || (k == 0x42)) {
+				continue;
+			}
+			tmport = ioportu[host] + 0x10;
+			outb(0x41, tmport);
+			goto wait_rdyok;
+		}
+		assignid_map |= m;
+
+	}
+	tmport = ioportu[host] + 0x02;
+	outb(0x7f, tmport);
+	tmport = ioportu[host] + 0x1b;
+	outb(0x02, tmport);
+
+	outb(0, 0x80);
+
+	val = 0x0080;		/* bsy  */
+	tmport = ioportu[host] + 0x1c;
+	outw(val, tmport);
+	val |= 0x0040;		/* sel  */
+	outw(val, tmport);
+	val |= 0x0004;		/* msg  */
+	outw(val, tmport);
+	inb(0x80);		/* 2 deskew delay(45ns*2=90ns) */
+	val &= 0x007f;		/* no bsy  */
+	outw(val, tmport);
+	mydlyu(0xffff);		/* recommanded SCAM selection response time */
+	mydlyu(0xffff);
+	val &= 0x00fb;		/* after 1ms no msg */
+	outw(val, tmport);
 wait_nomsg:
-    if ((inb(tmport) & 0x04) != 0)
-    {
-       goto wait_nomsg;
-    }
-    outb(1,0x80);
-    mydlyu(100);
-    for ( n=0; n < 0x30000; n++ )
-    {
-	if ((inb(tmport) & 0x80) != 0)	   /* bsy ? */
-	{
-	   goto wait_io;
+	if ((inb(tmport) & 0x04) != 0) {
+		goto wait_nomsg;
+	}
+	outb(1, 0x80);
+	mydlyu(100);
+	for (n = 0; n < 0x30000; n++) {
+		if ((inb(tmport) & 0x80) != 0) {	/* bsy ? */
+			goto wait_io;
+		}
 	}
-    }
-    goto  TCM_SYNC;
+	goto TCM_SYNC;
 wait_io:
-    for ( n=0; n < 0x30000; n++ )
-    {
-	if ((inb(tmport) & 0x81) == 0x0081)
-	{
-	   goto wait_io1;
+	for (n = 0; n < 0x30000; n++) {
+		if ((inb(tmport) & 0x81) == 0x0081) {
+			goto wait_io1;
+		}
 	}
-    }
-    goto  TCM_SYNC;
+	goto TCM_SYNC;
 wait_io1:
-    inb(0x80);
-    val |=0x8003;    /* io,cd,db7  */
-    outw(val,tmport);
-    inb(0x80);
-    val &=0x00bf;    /* no sel	   */
-    outw(val,tmport);
-    outb(2,0x80);
+	inb(0x80);
+	val |= 0x8003;		/* io,cd,db7  */
+	outw(val, tmport);
+	inb(0x80);
+	val &= 0x00bf;		/* no sel     */
+	outw(val, tmport);
+	outb(2, 0x80);
 TCM_SYNC:
-    mydlyu(0x800);
-    if ((inb(tmport) & 0x80) == 0x00)	 /* bsy ? */
-    {
-       outw(0,tmport--);
-       outb(0,tmport);
-       tmport=ioportu[host] + 0x15;
-       outb(0,tmport);
-       tmport += 0x03;
-       outb(0x09,tmport);
-       tmport += 0x07;
-       while ((inb(tmport) & 0x80) == 0);
-       tmport -= 0x08;
-       inb(tmport);
-       return;
-    }
-
-    val &= 0x00ff;		 /* synchronization  */
-    val |= 0x3f00;
-    fun_scam(host,&val);
-    outb(3,0x80);
-    val &= 0x00ff;		 /* isolation	     */
-    val |= 0x2000;
-    fun_scam(host,&val);
-    outb(4,0x80);
-    i=8;
-    j=0;
+	mydlyu(0x800);
+	if ((inb(tmport) & 0x80) == 0x00) {	/* bsy ? */
+		outw(0, tmport--);
+		outb(0, tmport);
+		tmport = ioportu[host] + 0x15;
+		outb(0, tmport);
+		tmport += 0x03;
+		outb(0x09, tmport);
+		tmport += 0x07;
+		while ((inb(tmport) & 0x80) == 0);
+		tmport -= 0x08;
+		inb(tmport);
+		return;
+	}
+	val &= 0x00ff;		/* synchronization  */
+	val |= 0x3f00;
+	fun_scam(host, &val);
+	outb(3, 0x80);
+	val &= 0x00ff;		/* isolation        */
+	val |= 0x2000;
+	fun_scam(host, &val);
+	outb(4, 0x80);
+	i = 8;
+	j = 0;
 TCM_ID:
-    if ((inw(tmport) & 0x2000) == 0)
-    {
-       goto TCM_ID;
-    }
-    outb(5,0x80);
-    val &= 0x00ff;		 /* get ID_STRING */
-    val |= 0x2000;
-    k=fun_scam(host,&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;
-    }
-    j++;
-    i=8;
-    goto TCM_ID;
+	if ((inw(tmport) & 0x2000) == 0) {
+		goto TCM_ID;
+	}
+	outb(5, 0x80);
+	val &= 0x00ff;		/* get ID_STRING */
+	val |= 0x2000;
+	k = fun_scam(host, &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;
+	}
+	j++;
+	i = 8;
+	goto TCM_ID;
 
-TCM_5:			     /* isolation complete..  */
+TCM_5:			/* isolation complete..  */
 /*    mbuf[32]=0;
-    printk(" \n%x %x %x %s\n ",assignid_map,mbuf[0],mbuf[1],&mbuf[2]); */
-    i=15;
-    j=mbuf[0];
-    if ((j & 0x20) != 0)     /* bit5=1:ID upto 7      */
-    {
-       i=7;
-    }
-    if ((j & 0x06) == 0)     /* IDvalid?	      */
-    {
-       goto  G2Q5;
-    }
-    k=mbuf[1];
+	printk(" \n%x %x %x %s\n ",assignid_map,mbuf[0],mbuf[1],&mbuf[2]); */
+	i = 15;
+	j = mbuf[0];
+	if ((j & 0x20) != 0) {	/* bit5=1:ID upto 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#	       */
+	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 ( k > 0 )
-    {
-       k--;
-       goto G2Q_LP;
-    }
-G2Q_QUIN:		      /* k=binID#,	 */
-    assignid_map |= m;
-    if ( k < 8 )
-    {
-       quintet[0]=0x38;       /* 1st dft ID<8	 */
-    }
-    else
-    {
-       quintet[0]=0x31;       /* 1st  ID>=8	 */
-    }
-    k &= 0x07;
-    quintet[1]=g2q_tab[k];
-
-    val &= 0x00ff;	       /* AssignID 1stQuintet,AH=001xxxxx  */
-    m=quintet[0] << 8;
-    val |= m;
-    fun_scam(host,&val);
-    val &= 0x00ff;	       /* AssignID 2ndQuintet,AH=001xxxxx */
-    m=quintet[1] << 8;
-    val |= m;
-    fun_scam(host,&val);
+	m = 1;
+	m <<= k;
+	if ((m & assignid_map) == 0) {
+		goto G2Q_QUIN;
+	}
+	if (k > 0) {
+		k--;
+		goto G2Q_LP;
+	}
+G2Q_QUIN:		/* k=binID#,       */
+	assignid_map |= m;
+	if (k < 8) {
+		quintet[0] = 0x38;	/* 1st dft ID<8    */
+	} else {
+		quintet[0] = 0x31;	/* 1st  ID>=8      */
+	}
+	k &= 0x07;
+	quintet[1] = g2q_tab[k];
 
-    goto TCM_SYNC;
+	val &= 0x00ff;		/* AssignID 1stQuintet,AH=001xxxxx  */
+	m = quintet[0] << 8;
+	val |= m;
+	fun_scam(host, &val);
+	val &= 0x00ff;		/* AssignID 2ndQuintet,AH=001xxxxx */
+	m = quintet[1] << 8;
+	val |= m;
+	fun_scam(host, &val);
+
+	goto TCM_SYNC;
 
 }
 
-void is870(unsigned long host,unsigned int wkport )
+void is870(unsigned long host, unsigned int wkport)
 {
-    unsigned int  tmport ;
-    unsigned char i,j,k,rmb;
-    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 };
-
-    sync_idu=0;
-    tmport=wkport+0x3a;
-    outb((unsigned char)(inb(tmport) | 0x10),tmport);
-
-    for ( i = 0 ; i < 16 ; i ++ )
-    {
-	if ((chip_veru[host] != 4) && (i > 7))
-	{
-	   break;
-	}
-	m=1;
-	m=m<<i;
-	if ( ( m & active_idu[host] ) != 0 )
-	{
-	   continue;
-	}
-	if ( i == host_idu[host] )
-	{
-	   printk("         ID: %2d  Host Adapter\n",host_idu[host]);
-	   continue;
-	}
-	if ( chip_veru[host] == 4 )
-	{
-	   tmport=wkport+0x1b;
-	   j=(inb(tmport) & 0x0e) | 0x01;
-	   outb(j,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(devspu[host][i],tmport++);
-    outb(0,tmport++);
-    outb(satn[6],tmport++);
-    outb(satn[7],tmport++);
-    j=i;
-    if ((j & 0x08) != 0)
-    {
-       j=(j & 0x07) | 0x40;
-    }
-    outb(j,tmport);
-    tmport+=0x03;
-    outb(satn[8],tmport);
-    tmport+=0x07;
-
-    while ((inb(tmport) & 0x80) == 0x00);
-    tmport-=0x08;
-    if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e))
-    {
-       continue;
-    }
-    while ( inb(tmport) != 0x8e );
-    active_idu[host] |= m;
-
-    tmport=wkport+0x10;
-    outb(0x30,tmport);
-    tmport=wkport+0x04;
-    outb(0x00,tmport);
+	unsigned int tmport;
+	unsigned char i, j, k, rmb;
+	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};
+
+	sync_idu = 0;
+	tmport = wkport + 0x3a;
+	outb((unsigned char) (inb(tmport) | 0x10), tmport);
+
+	for (i = 0; i < 16; i++) {
+		if ((chip_veru[host] != 4) && (i > 7)) {
+			break;
+		}
+		m = 1;
+		m = m << i;
+		if ((m & active_idu[host]) != 0) {
+			continue;
+		}
+		if (i == host_idu[host]) {
+			printk("         ID: %2d  Host Adapter\n", host_idu[host]);
+			continue;
+		}
+		if (chip_veru[host] == 4) {
+			tmport = wkport + 0x1b;
+			j = (inb(tmport) & 0x0e) | 0x01;
+			outb(j, 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(devspu[host][i], tmport++);
+		outb(0, tmport++);
+		outb(satn[6], tmport++);
+		outb(satn[7], tmport++);
+		j = i;
+		if ((j & 0x08) != 0) {
+			j = (j & 0x07) | 0x40;
+		}
+		outb(j, tmport);
+		tmport += 0x03;
+		outb(satn[8], tmport);
+		tmport += 0x07;
+
+		while ((inb(tmport) & 0x80) == 0x00);
+		tmport -= 0x08;
+		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+			continue;
+		}
+		while (inb(tmport) != 0x8e);
+		active_idu[host] |= m;
+
+		tmport = wkport + 0x10;
+		outb(0x30, tmport);
+		tmport = wkport + 0x04;
+		outb(0x00, tmport);
 
 phase_cmd:
-    tmport=wkport+0x18;
-    outb(0x08,tmport);
-    tmport+=0x07;
-    while ((inb(tmport) & 0x80) == 0x00);
-    tmport-=0x08;
-    j=inb(tmport);
-    if ( j != 0x16 )
-    {
-       tmport=wkport+0x10;
-       outb(0x41,tmport);
-       goto phase_cmd;
-    }
+		tmport = wkport + 0x18;
+		outb(0x08, tmport);
+		tmport += 0x07;
+		while ((inb(tmport) & 0x80) == 0x00);
+		tmport -= 0x08;
+		j = inb(tmport);
+		if (j != 0x16) {
+			tmport = wkport + 0x10;
+			outb(0x41, tmport);
+			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(devspu[host][i],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);
-       tmport-=0x08;
-       if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e))
-       {
-	  continue;
-       }
-       while ( inb(tmport) != 0x8e );
-       if ( chip_veru[host] == 4 )
-       {
-	  tmport=wkport+0x1b;
-	  j=inb(tmport) & 0x0e;
-	  outb(j,tmport);
-       }
-       tmport=wkport+0x18;
-       outb(0x08,tmport);
-       tmport += 0x07;
-       j=0;
+		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(devspu[host][i], 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);
+		tmport -= 0x08;
+		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+			continue;
+		}
+		while (inb(tmport) != 0x8e);
+		if (chip_veru[host] == 4) {
+			tmport = wkport + 0x1b;
+			j = inb(tmport) & 0x0e;
+			outb(j, tmport);
+		}
+		tmport = wkport + 0x18;
+		outb(0x08, tmport);
+		tmport += 0x07;
+		j = 0;
 rd_inq_data:
-       k=inb(tmport);
-       if ((k & 0x01) != 0 )
-       {
-	  tmport-=0x06;
-	  mbuf[j++]=inb(tmport);
-	  tmport+=0x06;
-	  goto rd_inq_data;
-       }
-       if ((k & 0x80) == 0 )
-       {
-	  goto rd_inq_data;
-       }
-       tmport-=0x08;
-       j=inb(tmport);
-       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);
-    tmport-=0x08;
-    if (inb(tmport) != 0x16)
-    {
-       goto sel_ok;
-    }
+		k = inb(tmport);
+		if ((k & 0x01) != 0) {
+			tmport -= 0x06;
+			mbuf[j++] = inb(tmport);
+			tmport += 0x06;
+			goto rd_inq_data;
+		}
+		if ((k & 0x80) == 0) {
+			goto rd_inq_data;
+		}
+		tmport -= 0x08;
+		j = inb(tmport);
+		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);
+		tmport -= 0x08;
+		if (inb(tmport) != 0x16) {
+			goto sel_ok;
+		}
 inq_ok:
-     mbuf[36]=0;
-     printk("         ID: %2d  %s\n",i,&mbuf[8]);
-     devtypeu[host][i]=mbuf[0];
-     rmb=mbuf[1];
-     if ( chip_veru[host] != 4 )
-     {
-	goto not_wide;
-     }
-     if ((mbuf[7] & 0x60) == 0)
-     {
-	goto not_wide;
-     }
-     if ((global_map[host] & 0x20) == 0)
-     {
-	goto not_wide;
-     }
-     tmport=wkport+0x1b;
-     j=(inb(tmport) & 0x0e) | 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(devspu[host][i],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);
-    tmport-=0x08;
-    if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e))
-    {
-       continue;
-    }
-    while ( inb(tmport) != 0x8e );
+		mbuf[36] = 0;
+		printk("         ID: %2d  %s\n", i, &mbuf[8]);
+		devtypeu[host][i] = mbuf[0];
+		rmb = mbuf[1];
+		if (chip_veru[host] != 4) {
+			goto not_wide;
+		}
+		if ((mbuf[7] & 0x60) == 0) {
+			goto not_wide;
+		}
+		if ((global_map[host] & 0x20) == 0) {
+			goto not_wide;
+		}
+		tmport = wkport + 0x1b;
+		j = (inb(tmport) & 0x0e) | 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(devspu[host][i], 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);
+		tmport -= 0x08;
+		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+			continue;
+		}
+		while (inb(tmport) != 0x8e);
 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;
-       }
-    }
-    tmport-=0x08;
-    while ((inb(tmport) & 0x80) == 0x00);
-    j=inb(tmport) & 0x0f;
-    if ( j == 0x0f )
-    {
-       goto widep_in;
-    }
-    if ( j == 0x0a )
-    {
-       goto widep_cmd;
-    }
-    if ( j == 0x0e )
-    {
-       goto try_wide;
-    }
-    continue;
+		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;
+			}
+		}
+		tmport -= 0x08;
+		while ((inb(tmport) & 0x80) == 0x00);
+		j = inb(tmport) & 0x0f;
+		if (j == 0x0f) {
+			goto widep_in;
+		}
+		if (j == 0x0a) {
+			goto widep_cmd;
+		}
+		if (j == 0x0e) {
+			goto 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;
-	}
-    }
-    tmport-=0x08;
-    j=inb(tmport) & 0x0f;
-    if ( j == 0x0f )
-    {
-       goto widep_in;
-    }
-    if ( j == 0x0a )
-    {
-       goto widep_cmd;
-    }
-    if ( j == 0x0e )
-    {
-       goto widep_out;
-    }
-    continue;
+		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;
+			}
+		}
+		tmport -= 0x08;
+		j = inb(tmport) & 0x0f;
+		if (j == 0x0f) {
+			goto widep_in;
+		}
+		if (j == 0x0a) {
+			goto widep_cmd;
+		}
+		if (j == 0x0e) {
+			goto widep_out;
+		}
+		continue;
 widep_in:
-    tmport=wkport+0x14;
-    outb(0xff,tmport);
-    tmport += 0x04;
-    outb(0x20,tmport);
-    tmport+=0x07;
-    k=0;
+		tmport = wkport + 0x14;
+		outb(0xff, tmport);
+		tmport += 0x04;
+		outb(0x20, tmport);
+		tmport += 0x07;
+		k = 0;
 widep_in1:
-    j=inb(tmport);
-    if ((j & 0x01) != 0)
-    {
-       tmport-=0x06;
-       mbuf[k++]=inb(tmport);
-       tmport+=0x06;
-       goto widep_in1;
-    }
-    if ((j & 0x80) == 0x00)
-    {
-       goto widep_in1;
-    }
-    tmport-=0x08;
-    j=inb(tmport) & 0x0f;
-    if ( j == 0x0f )
-    {
-       goto widep_in;
-    }
-    if ( j == 0x0a )
-    {
-       goto widep_cmd;
-    }
-    if ( j == 0x0e )
-    {
-       goto widep_out;
-    }
-    continue;
+		j = inb(tmport);
+		if ((j & 0x01) != 0) {
+			tmport -= 0x06;
+			mbuf[k++] = inb(tmport);
+			tmport += 0x06;
+			goto widep_in1;
+		}
+		if ((j & 0x80) == 0x00) {
+			goto widep_in1;
+		}
+		tmport -= 0x08;
+		j = inb(tmport) & 0x0f;
+		if (j == 0x0f) {
+			goto widep_in;
+		}
+		if (j == 0x0a) {
+			goto widep_cmd;
+		}
+		if (j == 0x0e) {
+			goto widep_out;
+		}
+		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);
-    tmport-=0x08;
-    j=inb(tmport);
-    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;
-    wide_idu[host] |= m;
+		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);
+		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;
+		wide_idu[host] |= m;
 not_wide:
-    if ((devtypeu[host][i] == 0x00) || (devtypeu[host][i] == 0x07))
-    {
-       goto set_sync;
-    }
-    continue;
+		if ((devtypeu[host][i] == 0x00) || (devtypeu[host][i] == 0x07)) {
+			goto set_sync;
+		}
+		continue;
 set_sync:
-    tmport=wkport+0x1b;
-    j=inb(tmport) & 0x0e;
-    if ((m & wide_idu[host]) != 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(devspu[host][i],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);
-    tmport-=0x08;
-    if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e))
-    {
-       continue;
-    }
-    while ( inb(tmport) != 0x8e);
+		tmport = wkport + 0x1b;
+		j = inb(tmport) & 0x0e;
+		if ((m & wide_idu[host]) != 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(devspu[host][i], 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);
+		tmport -= 0x08;
+		if ((inb(tmport) != 0x11) && (inb(tmport) != 0x8e)) {
+			continue;
+		}
+		while (inb(tmport) != 0x8e);
 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;
-	  if ( rmb != 0 )
-	  {
-	     outb(synn[j++],tmport);
-	  }
-	  else
-	  {
-	     if ((m & wide_idu[host]) != 0)
-	     {
-		outb(synw[j++],tmport);
-	     }
-	     else
-	     {
-		if ((m & ultra_map[host]) != 0)
-		{
-		   outb(synu[j++],tmport);
+		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;
+				if (rmb != 0) {
+					outb(synn[j++], tmport);
+				} else {
+					if ((m & wide_idu[host]) != 0) {
+						outb(synw[j++], tmport);
+					} else {
+						if ((m & ultra_map[host]) != 0) {
+							outb(synu[j++], tmport);
+						} else {
+							outb(synn[j++], tmport);
+						}
+					}
+				}
+				tmport += 0x06;
+			}
 		}
-		else
-		{
-		   outb(synn[j++],tmport);
+		tmport -= 0x08;
+		while ((inb(tmport) & 0x80) == 0x00);
+		j = inb(tmport) & 0x0f;
+		if (j == 0x0f) {
+			goto phase_ins;
 		}
-	     }
-	  }
-	  tmport+=0x06;
-       }
-    }
-    tmport-=0x08;
-    while ((inb(tmport) & 0x80) == 0x00);
-    j=inb(tmport) & 0x0f;
-    if ( j == 0x0f )
-    {
-       goto phase_ins;
-    }
-    if ( j == 0x0a )
-    {
-       goto phase_cmds;
-    }
-    if ( j == 0x0e )
-    {
-       goto try_sync;
-    }
-    continue;
+		if (j == 0x0a) {
+			goto phase_cmds;
+		}
+		if (j == 0x0e) {
+			goto 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;
-      }
-    }
-    tmport-=0x08;
-    j=inb(tmport);
-    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;
+		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;
+			}
+		}
+		tmport -= 0x08;
+		j = inb(tmport);
+		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:
-    tmport=wkport+0x14;
-    outb(0xff,tmport);
-    tmport += 0x04;
-    outb(0x20,tmport);
-    tmport+=0x07;
-    k=0;
+		tmport = wkport + 0x14;
+		outb(0xff, tmport);
+		tmport += 0x04;
+		outb(0x20, tmport);
+		tmport += 0x07;
+		k = 0;
 phase_ins1:
-    j=inb(tmport);
-    if ((j & 0x01) != 0x00)
-    {
-       tmport-=0x06;
-       mbuf[k++]=inb(tmport);
-       tmport+=0x06;
-       goto phase_ins1;
-    }
-    if ((j & 0x80) == 0x00)
-    {
-       goto phase_ins1;
-    }
-    tmport-=0x08;
-    while ((inb(tmport) & 0x80) == 0x00);
-    j=inb(tmport);
-    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;
+		j = inb(tmport);
+		if ((j & 0x01) != 0x00) {
+			tmport -= 0x06;
+			mbuf[k++] = inb(tmport);
+			tmport += 0x06;
+			goto phase_ins1;
+		}
+		if ((j & 0x80) == 0x00) {
+			goto phase_ins1;
+		}
+		tmport -= 0x08;
+		while ((inb(tmport) & 0x80) == 0x00);
+		j = inb(tmport);
+		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:
-    tmport=wkport+0x10;
-    outb(0x30,tmport);
+		tmport = wkport + 0x10;
+		outb(0x30, tmport);
 tar_dcons:
-    tmport=wkport+0x14;
-    outb(0x00,tmport);
-    tmport+=0x04;
-    outb(0x08,tmport);
-    tmport+=0x07;
-    while ((inb(tmport) & 0x80) == 0x00);
-    tmport-=0x08;
-    j=inb(tmport);
-    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;
-    }
-    devspu[host][i] = 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:
-    devspu[host][i] = (devspu[host][i] & 0x0f) | j;
-   }
-   tmport=wkport+0x3a;
-   outb((unsigned char)(inb(tmport) & 0xef),tmport);
+		tmport = wkport + 0x14;
+		outb(0x00, tmport);
+		tmport += 0x04;
+		outb(0x08, tmport);
+		tmport += 0x07;
+		while ((inb(tmport) & 0x80) == 0x00);
+		tmport -= 0x08;
+		j = inb(tmport);
+		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;
+		}
+		devspu[host][i] = 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:
+		devspu[host][i] = (devspu[host][i] & 0x0f) | j;
+	}
+	tmport = wkport + 0x3a;
+	outb((unsigned char) (inb(tmport) & 0xef), tmport);
 }
 
 /* return non-zero on detection */
 int atp870u_detect(Scsi_Host_Template * tpnt)
 {
-    unsigned char irq,h,k;
-    unsigned long flags;
-    unsigned int base_io,error,tmport;
-    unsigned short index = 0;
-    unsigned char pci_bus[3], pci_device_fn[3], chip_ver[3],host_id;
-    struct Scsi_Host * shpnt = NULL;
-    int count = 0;
-    static unsigned short devid[7]={0x8002,0x8010,0x8020,0x8030,0x8040,0x8050,0};
-    static struct pci_dev *pdev = NULL, *acard_pdev[3];
-
-    printk("aec671x_detect: \n");
-    if (!pci_present())
-    {
-       printk("   NO BIOS32 SUPPORT.\n");
-       return count;
-    }
-
-    tpnt->proc_dir = &proc_scsi_atp870u;
-
-    for ( h = 0 ; h < 2 ; h++ )
-    {
-      active_idu[h]=0;
-      wide_idu[h]=0;
-      host_idu[h]=0x07;
-      quhdu[h]=0;
-      quendu[h]=0;
-      pci_bus[h]=0;
-      pci_device_fn[h]=0xff;
-      chip_ver[h]=0;
-      last_cmd[h]=0xff;
-      in_snd[h]=0;
-      in_int[h]=0;
-      for ( k = 0 ; k < qcnt ; k++ )
-      {
-	  querequ[h][k]=0;
-      }
-      for ( k = 0 ; k < 16 ; k++ )
-      {
-	  curr_req[h][k]=0;
-      }
-    }
-    h=0;
-    while ( devid[h] != 0 )
-    {
-      pdev = pci_find_device(0x1191,devid[h],pdev);
-      if (pdev == NULL) {
-	  h++;
-	  index=0;
-	  continue;
-       }
-       chip_ver[2]=0;
-	   
-       /* To avoid messing with the things below...  */
-       acard_pdev[2] = pdev;
-       pci_device_fn[2] =  pdev->devfn;
-       pci_bus[2] = pdev->bus->number;
-
-       if ( devid[h] == 0x8002 )
-       {
-	  error = pci_read_config_byte(pdev,0x08,&chip_ver[2]);
-	  if ( chip_ver[2] < 2 )
-	  {
-	     goto nxt_devfn;
-	  }
-       }
-       if ( devid[h] == 0x8010 )
-       {
-	  chip_ver[2]=0x04;
-       }
-       if ( pci_device_fn[2] < pci_device_fn[0] )
-       {
-	  acard_pdev[1]=acard_pdev[0];
-	  pci_bus[1]=pci_bus[0];
-	  pci_device_fn[1]=pci_device_fn[0];
-	  chip_ver[1]=chip_ver[0];
-	  acard_pdev[0]=acard_pdev[2];
-	  pci_bus[0]=pci_bus[2];
-	  pci_device_fn[0]=pci_device_fn[2];
-	  chip_ver[0]=chip_ver[2];
-       }
-       else if ( pci_device_fn[2] < pci_device_fn[1] )
-       {
-	  acard_pdev[1]=acard_pdev[2];
-	  pci_bus[1]=pci_bus[2];
-	  pci_device_fn[1]=pci_device_fn[2];
-	  chip_ver[1]=chip_ver[2];
-       }
-nxt_devfn:
-       index++;
-       if ( index > 3 )
-       {
-	  index=0;
-	  h++;
-       }
-    }
-    for ( h=0; h < 2; h++ )
-    {
-    if ( pci_device_fn[h] == 0xff )
-    {
-       return count;
-    }
-
-    pdev = acard_pdev[h];
-    pdev->devfn = pci_device_fn[h];
-    pdev->bus->number = pci_bus[h];
-
-    /* Found an atp870u/w. */
-    error = pci_read_config_dword(pdev,0x10,&base_io);
-    error += pci_read_config_byte(pdev,0x3c,&irq);
-    error += pci_read_config_byte(pdev,0x49,&host_id);
-
-    base_io &= 0xfffffff8;
-    printk("   ACARD AEC-671X PCI Ultra/W SCSI-3 Host Adapter: %d    IO:%x, IRQ:%d.\n"
-			     ,h,base_io,irq);
-    ioportu[h]=base_io;
-    pciportu[h]=base_io + 0x20;
-    irqnumu[h]=irq;
-    host_id &= 0x07;
-    host_idu[h]=host_id;
-    chip_veru[h]=chip_ver[h];
-
-    tmport=base_io+0x22;
-    scam_on[h]=inb(tmport);
-    tmport += 0x0b;
-    global_map[h]=inb(tmport++);
-    ultra_map[h]=inw(tmport);
-    if ( ultra_map[h] == 0 )
-    {
-       scam_on[h]=0x00;
-       global_map[h]=0x20;
-       ultra_map[h]=0xffff;
-    }
-
-    shpnt = scsi_register(tpnt,4);
-
-    save_flags(flags);
-    cli();
-    if (request_irq(irq,atp870u_intr_handle, 0, "atp870u", NULL))
-    {
-       printk("Unable to allocate IRQ for Acard controller.\n");
-       goto unregister;
-    }
-
-    tmport=base_io+0x3a;
-    k=(inb(tmport) & 0xf3) | 0x10;
-    outb(k,tmport);
-    outb((k & 0xdf),tmport);
-    mydlyu(0x8000);
-    outb(k,tmport);
-    mydlyu(0x8000);
-    tmport=base_io;
-    outb((host_id | 0x08),tmport);
-    tmport += 0x18;
-    outb(0,tmport);
-    tmport += 0x07;
-    while ((inb(tmport) & 0x80) == 0);
-    tmport -= 0x08;
-    inb(tmport);
-    tmport = base_io +1;
-    outb(8,tmport++);
-    outb(0x7f,tmport);
-    tmport = base_io + 0x11;
-    outb(0x20,tmport);
-
-    tscam(h);
-    is870(h,base_io);
-    tmport=base_io+0x3a;
-    outb((inb(tmport) & 0xef),tmport);
-
-    atp_host[h] = shpnt;
-    if ( chip_ver[h] == 4 )
-    {
-       shpnt->max_id = 16;
-    }
-    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 = irq;
-    restore_flags(flags);
-    request_region(base_io, 0x40,"atp870u");  /* Register the IO ports that we use */
-    count++;
-    index++;
-    continue;
+	unsigned char irq, h, k;
+	unsigned long flags;
+	unsigned int base_io, error, tmport;
+	unsigned short index = 0;
+	unsigned char pci_bus[3], pci_device_fn[3], chip_ver[3], host_id;
+	struct Scsi_Host *shpnt = NULL;
+	int count = 0;
+	static unsigned short devid[7] =
+	{0x8002, 0x8010, 0x8020, 0x8030, 0x8040, 0x8050, 0};
+	static struct pci_dev *pdev = NULL, *acard_pdev[3];
+
+	printk("aec671x_detect: \n");
+	if (!pci_present()) {
+		printk("   NO BIOS32 SUPPORT.\n");
+		return count;
+	}
+	tpnt->proc_dir = &proc_scsi_atp870u;
+
+	for (h = 0; h < 2; h++) {
+		active_idu[h] = 0;
+		wide_idu[h] = 0;
+		host_idu[h] = 0x07;
+		quhdu[h] = 0;
+		quendu[h] = 0;
+		pci_bus[h] = 0;
+		pci_device_fn[h] = 0xff;
+		chip_ver[h] = 0;
+		last_cmd[h] = 0xff;
+		in_snd[h] = 0;
+		in_int[h] = 0;
+		for (k = 0; k < qcnt; k++) {
+			querequ[h][k] = 0;
+		}
+		for (k = 0; k < 16; k++) {
+			curr_req[h][k] = 0;
+		}
+	}
+	h = 0;
+	while (devid[h] != 0) {
+		pdev = pci_find_device(0x1191, devid[h], pdev);
+		if (pdev == NULL) {
+			h++;
+			index = 0;
+			continue;
+		}
+		chip_ver[2] = 0;
+
+		/* To avoid messing with the things below...  */
+		acard_pdev[2] = pdev;
+		pci_device_fn[2] = pdev->devfn;
+		pci_bus[2] = pdev->bus->number;
+
+		if (devid[h] == 0x8002) {
+			error = pci_read_config_byte(pdev, 0x08, &chip_ver[2]);
+			if (chip_ver[2] < 2) {
+				goto nxt_devfn;
+			}
+		}
+		if (devid[h] == 0x8010) {
+			chip_ver[2] = 0x04;
+		}
+		if (pci_device_fn[2] < pci_device_fn[0]) {
+			acard_pdev[1] = acard_pdev[0];
+			pci_bus[1] = pci_bus[0];
+			pci_device_fn[1] = pci_device_fn[0];
+			chip_ver[1] = chip_ver[0];
+			acard_pdev[0] = acard_pdev[2];
+			pci_bus[0] = pci_bus[2];
+			pci_device_fn[0] = pci_device_fn[2];
+			chip_ver[0] = chip_ver[2];
+		} else if (pci_device_fn[2] < pci_device_fn[1]) {
+			acard_pdev[1] = acard_pdev[2];
+			pci_bus[1] = pci_bus[2];
+			pci_device_fn[1] = pci_device_fn[2];
+			chip_ver[1] = chip_ver[2];
+		}
+	      nxt_devfn:
+		index++;
+		if (index > 3) {
+			index = 0;
+			h++;
+		}
+	}
+	for (h = 0; h < 2; h++) {
+		if (pci_device_fn[h] == 0xff) {
+			return count;
+		}
+		pdev = acard_pdev[h];
+		pdev->devfn = pci_device_fn[h];
+		pdev->bus->number = pci_bus[h];
+
+		/* Found an atp870u/w. */
+		error = pci_read_config_dword(pdev, 0x10, &base_io);
+		error += pci_read_config_byte(pdev, 0x3c, &irq);
+		error += pci_read_config_byte(pdev, 0x49, &host_id);
+
+		base_io &= 0xfffffff8;
+		printk("   ACARD AEC-671X PCI Ultra/W SCSI-3 Host Adapter: %d    IO:%x, IRQ:%d.\n"
+		       ,h, base_io, irq);
+		ioportu[h] = base_io;
+		pciportu[h] = base_io + 0x20;
+		irqnumu[h] = irq;
+		host_id &= 0x07;
+		host_idu[h] = host_id;
+		chip_veru[h] = chip_ver[h];
+
+		tmport = base_io + 0x22;
+		scam_on[h] = inb(tmport);
+		tmport += 0x0b;
+		global_map[h] = inb(tmport++);
+		ultra_map[h] = inw(tmport);
+		if (ultra_map[h] == 0) {
+			scam_on[h] = 0x00;
+			global_map[h] = 0x20;
+			ultra_map[h] = 0xffff;
+		}
+		shpnt = scsi_register(tpnt, 4);
+
+		save_flags(flags);
+		cli();
+		if (request_irq(irq, atp870u_intr_handle, 0, "atp870u", NULL)) {
+			printk("Unable to allocate IRQ for Acard controller.\n");
+			goto unregister;
+		}
+		tmport = base_io + 0x3a;
+		k = (inb(tmport) & 0xf3) | 0x10;
+		outb(k, tmport);
+		outb((k & 0xdf), tmport);
+		mydlyu(0x8000);
+		outb(k, tmport);
+		mydlyu(0x8000);
+		tmport = base_io;
+		outb((host_id | 0x08), tmport);
+		tmport += 0x18;
+		outb(0, tmport);
+		tmport += 0x07;
+		while ((inb(tmport) & 0x80) == 0);
+		tmport -= 0x08;
+		inb(tmport);
+		tmport = base_io + 1;
+		outb(8, tmport++);
+		outb(0x7f, tmport);
+		tmport = base_io + 0x11;
+		outb(0x20, tmport);
+
+		tscam(h);
+		is870(h, base_io);
+		tmport = base_io + 0x3a;
+		outb((inb(tmport) & 0xef), tmport);
+
+		atp_host[h] = shpnt;
+		if (chip_ver[h] == 4) {
+			shpnt->max_id = 16;
+		}
+		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 = irq;
+		restore_flags(flags);
+		request_region(base_io, 0x40, "atp870u");	/* Register the IO ports that we use */
+		count++;
+		index++;
+		continue;
 unregister:
-    scsi_unregister(shpnt);
-    restore_flags(flags);
-    index++;
-    continue;
-    }
+		scsi_unregister(shpnt);
+		restore_flags(flags);
+		index++;
+		continue;
+	}
 
-    return count;
+	return count;
 }
 
 /* The abort command does not leave the device in a clean state where
@@ -1883,162 +1621,147 @@
 
 int atp870u_abort(Scsi_Cmnd * SCpnt)
 {
-    unsigned char h,j;
-    unsigned int  tmport;
+	unsigned char h, j;
+	unsigned int tmport;
 /*    printk(" atp870u_abort: \n");   */
-    for ( h=0; h <= admaxu; h++ )
-    {
-	if ( SCpnt->host == atp_host[h] )
-	{
-	   goto find_adp;
+	for (h = 0; h <= admaxu; h++) {
+		if (SCpnt->host == atp_host[h]) {
+			goto find_adp;
+		}
 	}
-    }
-    panic("Abort host not found !");
+	panic("Abort host not found !");
 find_adp:
-    printk(" workingu=%x last_cmd=%x ",workingu[h],last_cmd[h]);
-    printk(" quhdu=%x quendu=%x ",quhdu[h],quendu[h]);
-    tmport=ioportu[h];
-    for ( j=0; j < 0x17; j++)
-    {
-	printk(" r%2x=%2x",j,inb(tmport++));
-    }
-    tmport += 0x05;
-    printk(" r1c=%2x",inb(tmport));
-    tmport += 0x03;
-    printk(" r1f=%2x in_snd=%2x ",inb(tmport),in_snd[h]);
-    tmport++;
-    printk(" r20=%2x",inb(tmport));
-    tmport += 0x02;
-    printk(" r22=%2x \n",inb(tmport));
-    return (SCSI_ABORT_SNOOZE);
+	printk(" workingu=%x last_cmd=%x ", workingu[h], last_cmd[h]);
+	printk(" quhdu=%x quendu=%x ", quhdu[h], quendu[h]);
+	tmport = ioportu[h];
+	for (j = 0; j < 0x17; j++) {
+		printk(" r%2x=%2x", j, inb(tmport++));
+	}
+	tmport += 0x05;
+	printk(" r1c=%2x", inb(tmport));
+	tmport += 0x03;
+	printk(" r1f=%2x in_snd=%2x ", inb(tmport), in_snd[h]);
+	tmport++;
+	printk(" r20=%2x", inb(tmport));
+	tmport += 0x02;
+	printk(" r22=%2x \n", inb(tmport));
+	return (SCSI_ABORT_SNOOZE);
 }
 
 int atp870u_reset(Scsi_Cmnd * SCpnt, unsigned int reset_flags)
 {
-    unsigned char h;
-    /*
-     * See if a bus reset was suggested.
-     */
-/*    printk("atp870u_reset: \n");    */
-    for( h=0; h <= admaxu; h++ )
-    {
-       if ( SCpnt->host == atp_host[h] )
-       {
-	  goto find_host;
-       }
-    }
-    panic("Reset bus host not found !");
+	unsigned char h;
+	/*
+	 * See if a bus reset was suggested.
+	 */
+/*	printk("atp870u_reset: \n");    */
+	for (h = 0; h <= admaxu; h++) {
+		if (SCpnt->host == atp_host[h]) {
+			goto find_host;
+		}
+	}
+	panic("Reset bus host not found !");
 find_host:
-/*    SCpnt->result = 0x00080000;
-    SCpnt->scsi_done(SCpnt);
-    workingu[h]=0;
-    quhdu[h]=0;
-    quendu[h]=0;
-    return (SCSI_RESET_SUCCESS | SCSI_RESET_BUS_RESET);  */
-    return (SCSI_RESET_SNOOZE);
+/*      SCpnt->result = 0x00080000;
+	SCpnt->scsi_done(SCpnt);
+	workingu[h]=0;
+	quhdu[h]=0;
+	quendu[h]=0;
+	return (SCSI_RESET_SUCCESS | SCSI_RESET_BUS_RESET);  */
+	return (SCSI_RESET_SNOOZE);
 }
 
-const char *
-atp870u_info(struct Scsi_Host *notused)
+const char *atp870u_info(struct Scsi_Host *notused)
 {
-  static char buffer[128];
+	static char buffer[128];
 
-  strcpy(buffer, "ACARD AEC-6710/6712 PCI Ultra/W SCSI-3 Adapter Driver V1.0 ");
+	strcpy(buffer, "ACARD AEC-6710/6712 PCI Ultra/W SCSI-3 Adapter Driver V1.0 ");
 
-  return buffer;
+	return buffer;
 }
 
-int
-atp870u_set_info(char *buffer, int length, struct Scsi_Host *HBAptr)
+int atp870u_set_info(char *buffer, int length, struct Scsi_Host *HBAptr)
 {
-  return (-ENOSYS);  /* Currently this is a no-op */
+	return (-ENOSYS);	/* Currently this is a no-op */
 }
 
 #define BLS buffer + len + size
-int
-atp870u_proc_info(char *buffer, char **start, off_t offset, int length,
-    int hostno, int inout)
+int atp870u_proc_info(char *buffer, char **start, off_t offset, int length,
+		      int hostno, int inout)
 {
-  struct Scsi_Host *HBAptr;
-  static u8 buff[512];
-  int	i;
-  int	size = 0;
-  int	len = 0;
-  off_t begin = 0;
-  off_t pos = 0;
-
-  HBAptr = NULL;
-  for (i = 0; i < 2; i++)
-  {
-    if ((HBAptr = atp_host[i]) != NULL)
-    {
-      if (HBAptr->host_no == hostno)
-      {
-	break;
-      }
-      HBAptr = NULL;
-    }
-  }
-
-  if (HBAptr == NULL)
-  {
-    size += sprintf(BLS, "Can't find adapter for host number %d\n", hostno);
-    len += size; pos = begin + len; size = 0;
-    goto stop_output;
-  }
-
-  if (inout == TRUE) /* Has data been written to the file? */
-  {
-    return (atp870u_set_info(buffer, length, HBAptr));
-  }
-
-  if (offset == 0)
-  {
-    memset(buff, 0, sizeof(buff));
-  }
-
-  size += sprintf(BLS, "ACARD AEC-671X Driver Version: 1.0\n");
-  len += size; pos = begin + len; size = 0;
-
-  size += sprintf(BLS, "\n");
-  size += sprintf(BLS, "Adapter Configuration:\n");
-  size += sprintf(BLS, "               Base IO: %#.4lx\n", HBAptr->io_port);
-  size += sprintf(BLS, "                   IRQ: %d\n", HBAptr->irq);
-  len += size; pos = begin + len; size = 0;
-
-stop_output:
-  *start = buffer + (offset - begin);	/* Start of wanted data */
-  len -= (offset - begin);	/* Start slop */
-  if (len > length)
-  {
-    len = length;		/* Ending slop */
-  }
+	struct Scsi_Host *HBAptr;
+	static u8 buff[512];
+	int i;
+	int size = 0;
+	int len = 0;
+	off_t begin = 0;
+	off_t pos = 0;
+
+	HBAptr = NULL;
+	for (i = 0; i < 2; i++) {
+		if ((HBAptr = atp_host[i]) != NULL) {
+			if (HBAptr->host_no == hostno) {
+				break;
+			}
+			HBAptr = NULL;
+		}
+	}
 
-  return (len);
+	if (HBAptr == NULL) {
+		size += sprintf(BLS, "Can't find adapter for host number %d\n", hostno);
+		len += size;
+		pos = begin + len;
+		size = 0;
+		goto stop_output;
+	}
+	if (inout == TRUE) {	/* Has data been written to the file? */
+		return (atp870u_set_info(buffer, length, HBAptr));
+	}
+	if (offset == 0) {
+		memset(buff, 0, sizeof(buff));
+	}
+	size += sprintf(BLS, "ACARD AEC-671X Driver Version: 1.0\n");
+	len += size;
+	pos = begin + len;
+	size = 0;
+
+	size += sprintf(BLS, "\n");
+	size += sprintf(BLS, "Adapter Configuration:\n");
+	size += sprintf(BLS, "               Base IO: %#.4lx\n", HBAptr->io_port);
+	size += sprintf(BLS, "                   IRQ: %d\n", HBAptr->irq);
+	len += size;
+	pos = begin + len;
+	size = 0;
+
+      stop_output:
+	*start = buffer + (offset - begin);	/* Start of wanted data */
+	len -= (offset - begin);	/* Start slop */
+	if (len > length) {
+		len = length;	/* Ending slop */
+	}
+	return (len);
 }
 
 #include "sd.h"
 
-int atp870u_biosparam(Scsi_Disk * disk, kdev_t dev, int * ip)
+int atp870u_biosparam(Scsi_Disk * disk, kdev_t dev, int *ip)
 {
-  int heads, sectors, cylinders;
+	int heads, sectors, cylinders;
 
-  heads = 64;
-  sectors = 32;
-  cylinders = disk->capacity / (heads * sectors);
-
-  if ( cylinders > 1024 )
-  {
-    heads = 255;
-    sectors = 63;
-    cylinders = disk->capacity / (heads * sectors);
-  }
-
-  ip[0] = heads;
-  ip[1] = sectors;
-  ip[2] = cylinders;
+	heads = 64;
+	sectors = 32;
+	cylinders = disk->capacity / (heads * sectors);
+
+	if (cylinders > 1024) {
+		heads = 255;
+		sectors = 63;
+		cylinders = disk->capacity / (heads * sectors);
+	}
+	ip[0] = heads;
+	ip[1] = sectors;
+	ip[2] = cylinders;
 
-  return 0;
+	return 0;
 }
 
 #ifdef MODULE
@@ -2046,4 +1769,3 @@
 
 #include "scsi_module.c"
 #endif
-

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)