patch-1.3.16 linux/drivers/scsi/eata_pio.c
Next file: linux/drivers/scsi/eata_pio.h
Previous file: linux/drivers/scsi/eata_dma_proc.c
Back to the patch index
Back to the overall index
- Lines: 277
- Date:
Sat Aug 5 11:12:14 1995
- Orig file:
v1.3.15/linux/drivers/scsi/eata_pio.c
- Orig date:
Wed Aug 2 13:21:11 1995
diff -u --recursive --new-file v1.3.15/linux/drivers/scsi/eata_pio.c linux/drivers/scsi/eata_pio.c
@@ -32,7 +32,7 @@
* Cambridge, MA 02139, USA. *
* *
************************************************************
- * last change: 95/07/13 OS: Linux 1.3.9 *
+ * last change: 95/08/04 OS: Linux 1.3.15 *
************************************************************/
/* Look in eata_pio.h for configuration information */
@@ -71,8 +71,6 @@
static unchar reg_IRQL[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-static uint internal_command_finished = TRUE;
-
static ulong int_counter = 0;
static ulong queue_counter = 0;
@@ -90,10 +88,6 @@
hptr3[z*2]=' ';
}
-void eata_pio_scsi_done (Scsi_Cmnd * SCpnt)
-{
- return;
-}
#include "eata_pio_proc.c"
@@ -256,8 +250,7 @@
cp->status = FREE; /* now we can release the slot */
restore_flags(flags);
- if(cmd->scsi_done != eata_pio_scsi_done) cmd->scsi_done(cmd);
- else internal_command_finished = TRUE;
+ cmd->scsi_done(cmd);
save_flags(flags);
cli();
}
@@ -293,13 +286,6 @@
queue_counter++;
- if (done == (void *)eata_pio_scsi_done) {
- if (internal_command_finished == TRUE)
- internal_command_finished = FALSE;
- else
- cmd->result = (DID_ERROR << 16) + QUEUE_FULL;
- }
-
hd = HD(cmd);
sh = cmd->host;
base = (uint) sh->base;
@@ -351,8 +337,8 @@
cp->DataIn = TRUE; /* Input mode */
}
- cp->Interpret = (cmd->target==hd->hostid);
- cp->cp_datalen=htonl((ulong)cmd->request_bufflen);
+ cp->Interpret = (cmd->target == hd->hostid);
+ cp->cp_datalen = htonl((ulong)cmd->request_bufflen);
cp->Auto_Req_Sen = FALSE;
cp->cp_reqDMA = htonl(0);
cp->reqlen = 0;
@@ -369,36 +355,34 @@
cp->cmd = cmd;
cmd->host_scribble = (char *)&hd->ccb[y];
- if (cmd->use_sg==0)
+ if (cmd->use_sg == 0)
{
cmd->SCp.buffers_residual=1;
- cmd->SCp.ptr=cmd->request_buffer;
- cmd->SCp.this_residual=cmd->request_bufflen;
- cmd->SCp.buffer=NULL;
- }
- else
- {
- cmd->SCp.buffer=cmd->request_buffer;
- cmd->SCp.buffers_residual=cmd->use_sg;
- cmd->SCp.ptr=cmd->SCp.buffer->address;
- cmd->SCp.this_residual=cmd->SCp.buffer->length;
+ cmd->SCp.ptr = cmd->request_buffer;
+ cmd->SCp.this_residual = cmd->request_bufflen;
+ cmd->SCp.buffer = NULL;
+ } else {
+ cmd->SCp.buffer = cmd->request_buffer;
+ cmd->SCp.buffers_residual = cmd->use_sg;
+ cmd->SCp.ptr = cmd->SCp.buffer->address;
+ cmd->SCp.this_residual = cmd->SCp.buffer->length;
}
- cmd->SCp.Status=(cmd->SCp.this_residual!=0); /* TRUE as long as bytes
- are to transfer */
+ cmd->SCp.Status = (cmd->SCp.this_residual != 0); /* TRUE as long as bytes
+ * are to transfer */
if (eata_pio_send_command(base, EATA_CMD_PIO_SEND_CP))
{
cmd->result = DID_ERROR << 16;
- printk("eata_pio_queue target %d, pid %ld, HBA busy, returning DID_ERROR, done.\n",
- cmd->target, cmd->pid);
+ printk("eata_pio_queue target %d, pid %ld, HBA busy, returning "
+ "DID_ERROR, done.\n", cmd->target, cmd->pid);
restore_flags(flags);
- if(done != (void *)eata_pio_scsi_done) done(cmd);
+ done(cmd);
return (0);
}
while (!(inb(base + HA_RSTATUS) & HA_SDRQ));
outsw(base + HA_RDATA, cp, hd->cplen);
outb(EATA_CMD_PIO_TRUNC, base + HA_WCOMMAND);
- for (x=0; x<hd->cppadlen; x++) outw(0, base + HA_RDATA);
+ for (x = 0; x < hd->cppadlen; x++) outw(0, base + HA_RDATA);
DBG(DBG_QUEUE,printk("Queued base %#.4lx pid: %ld target: %x lun: %x "
"slot %d irq %d\n", (long)sh->base, cmd->pid,
@@ -417,8 +401,9 @@
save_flags(flags);
cli();
- DBG(DBG_ABNORM, printk("eata_pio_abort called pid: %ld target: %x lun: %x reason %x\n",
- cmd->pid, cmd->target, cmd->lun, cmd->abort_reason));
+ DBG(DBG_ABNORM, printk("eata_pio_abort called pid: %ld target: %x lun: %x"
+ " reason %x\n", cmd->pid, cmd->target, cmd->lun,
+ cmd->abort_reason));
DBG(DBG_ABNORM && DBG_DELAY, DEL2(500));
@@ -566,11 +551,12 @@
cp.cp_cdb[4] = 254;
cp.cp_cdb[5] = 0;
- if (eata_pio_send_command((uint) base, EATA_CMD_PIO_SEND_CP)) return (NULL);
+ if (eata_pio_send_command((uint) base, EATA_CMD_PIO_SEND_CP))
+ return (NULL);
while (!(inb(base + HA_RSTATUS) & HA_SDRQ));
outsw(base + HA_RDATA, &cp, cplen);
outb(EATA_CMD_PIO_TRUNC, base + HA_WCOMMAND);
- for (z=0; z<cppadlen; z++) outw(0, base + HA_RDATA);
+ for (z = 0; z < cppadlen; z++) outw(0, base + HA_RDATA);
while (inb(base + HA_RSTATUS) & HA_SBUSY);
if (inb(base + HA_RSTATUS) & HA_SERROR)
@@ -580,7 +566,7 @@
else
{
insw(base+HA_RDATA, &buff, 127);
- while (inb(base+HA_RSTATUS)&HA_SDRQ) inw(base+HA_RDATA);
+ while (inb(base + HA_RSTATUS)&HA_SDRQ) inw(base + HA_RDATA);
return (buff);
}
}
@@ -606,7 +592,7 @@
loop = R_LIMIT;
for (p = (ushort *) buf;
- (long)p <= ((long)buf + (sizeof(struct get_conf)/ 2)); p++) {
+ (long)p <= ((long)buf + (sizeof(struct get_conf) / 2)); p++) {
while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
if (--loop == 0)
return (FALSE);
@@ -661,23 +647,23 @@
#endif
printk("eata_pio: executing controller self test & setup...\n");
- while (inb(base+HA_RSTATUS)&HA_SBUSY);
- outb(EATA_CMD_PIO_SETUPTEST,base+HA_WCOMMAND);
+ while (inb(base + HA_RSTATUS) & HA_SBUSY);
+ outb(EATA_CMD_PIO_SETUPTEST, base + HA_WCOMMAND);
do {
- while (inb(base+HA_RSTATUS)&HA_SBUSY)
+ while (inb(base + HA_RSTATUS) & HA_SBUSY)
/* nothing */ ;
- if (inb(base+HA_RSTATUS)&HA_SDRQ)
+ if (inb(base + HA_RSTATUS) & HA_SDRQ)
{
- insw(base+HA_RDATA,&buffer,256);
+ insw(base + HA_RDATA, &buffer, 256);
#ifdef VERBOSE_SETUP
/* no beeps please... */
- for (z=0; z < 511 && buffer[z]; z++)
+ for (z = 0; z < 511 && buffer[z]; z++)
if (buffer[z] != 7) printk("%c", buffer[z]);
#endif
}
- } while (inb(base+HA_RSTATUS)&(HA_SBUSY|HA_SDRQ));
+ } while (inb(base+HA_RSTATUS) & (HA_SBUSY|HA_SDRQ));
- return (!(inb(base+HA_RSTATUS)&HA_SERROR));
+ return (!(inb(base+HA_RSTATUS) & HA_SERROR));
}
int register_pio_HBA(long base, struct get_conf *gc, Scsi_Host_Template * tpnt)
@@ -751,6 +737,7 @@
SD(sh)->revision[3] = '.';
SD(sh)->revision[4] = buff[35];
SD(sh)->revision[5] = 0;
+
switch (ntohl(gc->len)) {
case 0x1c:
SD(sh)->EATA_revision = 'a';
@@ -761,9 +748,28 @@
case 0x22:
SD(sh)->EATA_revision = 'c';
break;
+ case 0x24:
+ SD(sh)->EATA_revision = 'z';
default:
SD(sh)->EATA_revision = '?';
}
+
+ if(ntohl(gc->len) >= 0x22) {
+ if (gc->is_PCI == TRUE)
+ hd->bustype = IS_PCI;
+ else if (gc->is_EISA == TRUE)
+ hd->bustype = IS_EISA;
+ else
+ hd->bustype = IS_ISA;
+ } else {
+ if (buff[21] == '4')
+ hd->bustype = IS_PCI;
+ else if (buff[21] == '2')
+ hd->bustype = IS_EISA;
+ else
+ hd->bustype = IS_ISA;
+ }
+
SD(sh)->cplen=cplen;
SD(sh)->cppadlen=cppadlen;
SD(sh)->hostid=gc->scsi_id[3];
@@ -781,22 +787,6 @@
hd->channel = 0;
- if(ntohl(gc->len) >= 0x22) {
- if (gc->is_PCI == TRUE)
- hd->bustype = IS_PCI;
- else if (gc->is_EISA == TRUE)
- hd->bustype = IS_EISA;
- else
- hd->bustype = IS_ISA;
- } else {
- if (buff[21] == '4')
- hd->bustype = IS_PCI;
- else if (buff[21] == '2')
- hd->bustype = IS_EISA;
- else
- hd->bustype = IS_ISA;
- }
-
sh->max_id = 8;
sh->max_lun = 8;
@@ -1002,15 +992,18 @@
VER_MAJOR, VER_MINOR, VER_SUB);
printk("Registered HBAs:\n");
- printk("HBA no. Boardtype: Revis: EATA: Bus: BaseIO: IRQ: Ch: ID: Pr: QS: SG: CPL:\n");
+ printk("HBA no. Boardtype: Revis: EATA: Bus: BaseIO: IRQ: Ch: ID: Pr:"
+ " QS: SG: CPL:\n");
for (i = 1; i <= registered_HBAs; i++) {
- printk("scsi%-2d: %.10s v%s 2.0%c %s %#.4x %2d %d %d %c %2d %2d %2d\n",
+ printk("scsi%-2d: %.10s v%s 2.0%c %s %#.4x %2d %d %d %c"
+ " %2d %2d %2d\n",
HBA_ptr->host_no, SD(HBA_ptr)->name, SD(HBA_ptr)->revision,
SD(HBA_ptr)->EATA_revision, (SD(HBA_ptr)->bustype == 'P')?
"PCI ":(SD(HBA_ptr)->bustype == 'E')?"EISA":"ISA ",
- (uint) HBA_ptr->base, HBA_ptr->irq,
- SD(HBA_ptr)->channel, HBA_ptr->this_id, (SD(HBA_ptr)->primary == TRUE)?'Y':'N',
- HBA_ptr->can_queue, HBA_ptr->sg_tablesize, HBA_ptr->cmd_per_lun);
+ (uint) HBA_ptr->base, HBA_ptr->irq, SD(HBA_ptr)->channel,
+ HBA_ptr->this_id, (SD(HBA_ptr)->primary == TRUE)?'Y':'N',
+ HBA_ptr->can_queue, HBA_ptr->sg_tablesize,
+ HBA_ptr->cmd_per_lun);
HBA_ptr = SD(HBA_ptr)->next;
}
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this