summaryrefslogtreecommitdiffstats
path: root/sys/scsi/ch.c
diff options
context:
space:
mode:
authorrgrimes <rgrimes@FreeBSD.org>1993-08-20 09:23:30 +0000
committerrgrimes <rgrimes@FreeBSD.org>1993-08-20 09:23:30 +0000
commitcf0a4c9f207124f943e290bcc365b75f8deea2c6 (patch)
tree5dcbce83587cfd32b34f8a919c3f679ce971a405 /sys/scsi/ch.c
parent2970641bb3922023009c2b42e8d0074196806195 (diff)
downloadFreeBSD-src-cf0a4c9f207124f943e290bcc365b75f8deea2c6.zip
FreeBSD-src-cf0a4c9f207124f943e290bcc365b75f8deea2c6.tar.gz
Update scsi code to the latest from Julian. This code is now identical
to the last copy from Julian. After this commit I will be commiting the local fixes and makeing diffs to send back to Julian so he can update his code. ---- From julian@jules.DIALix.oz.au Thu Aug 5 09:25:23 1993 To: hd@world.std.com, julian@jules.DIALix.oz.au Cc: nate@bsd.coe.montana.edu Subject: Re: new scsi ---- From julian@jules.DIALix.oz.au Sat Aug 7 04:13:17 1993 To: hd@world.std.com (HD Associates) Cc: nate@bsd.coe.montana.edu Subject: Re: timeout diffs Here are the diffs to take the scsi stuff to my latest tree from what Nate and you received.. the changes remove all the local timeout stuff and use (un)timeout(), ---- From julian@jules.DIALix.oz.au Sat Aug 7 04:13:45 1993 To: hd@world.std.com (HD Associates) Cc: nate@bsd.coe.montana.edu, briggs@csugrad.cs.vt.edu here is a fix for a silly bug in the scsiconf I just sent out and a similar fix for st.c
Diffstat (limited to 'sys/scsi/ch.c')
-rw-r--r--sys/scsi/ch.c77
1 files changed, 40 insertions, 37 deletions
diff --git a/sys/scsi/ch.c b/sys/scsi/ch.c
index 57a4749..ba7cdcd 100644
--- a/sys/scsi/ch.c
+++ b/sys/scsi/ch.c
@@ -1,5 +1,16 @@
+/*
+ */
/*
- * Written by Julian Elischer (julian@tfs.com)
+ * HISTORY
+ *
+ *
+ * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE
+ * -------------------- ----- ----------------------
+ * CURRENT PATCH LEVEL: 1 00098
+ * -------------------- ----- ----------------------
+ *
+ * 16 Feb 93 Julian Elischer ADDED for SCSI system
+ *
*/
#include <sys/types.h>
@@ -89,7 +100,7 @@ struct scsi_switch *scsi_switch;
unit = next_ch_unit++;
if( unit >= NCH)
{
- printf("Too many scsi changers..(%d > %d) reconfigure kernel",(unit + 1),NCH);
+ printf("Too many scsi changers..(%d > %d) reconfigure kernel\n",(unit + 1),NCH);
return(0);
}
/*******************************************************\
@@ -359,7 +370,7 @@ char *data;
bzero(&scsi_cmd, sizeof(scsi_cmd));
scsi_cmd.op_code = READ_ELEMENT_STATUS;
- scsi_cmd.element_type_code=type;
+ scsi_cmd.byte2 = type;
scsi_cmd.starting_element_addr[0]=(from>>8)&0xff;
scsi_cmd.starting_element_addr[1]=from&0xff;
scsi_cmd.number_of_elements[1]=1;
@@ -518,8 +529,8 @@ int unit,flags;
for(l=1;l>=0;l--) {
bzero(&scsi_cmd, sizeof(scsi_cmd));
scsi_cmd.op_code = MODE_SENSE;
- scsi_cmd.dbd = l;
- scsi_cmd.page_code = 0x3f; /* All Pages */
+ scsi_cmd.byte2 = SMS_DBD;
+ scsi_cmd.page = 0x3f; /* All Pages */
scsi_cmd.length = sizeof(scsi_sense);
/*******************************************************\
* do the command, but we don't need the results *
@@ -750,42 +761,41 @@ struct scsi_xfer *xs;
* Get the sense fields and work out what CLASS *
\***************************************************************/
sense = &(xs->sense);
- switch(sense->error_class)
+ switch(sense->error_code & SSD_ERRCODE)
{
/***************************************************************\
* If it's class 7, use the extended stuff and interpret the key *
\***************************************************************/
- case 7:
+ case 0x70:
{
- key=sense->ext.extended.sense_key;
- if(sense->ext.extended.ili)
+ key=sense->ext.extended.flags & SSD_KEY;
+ if(sense->ext.extended.flags & SSD_ILI)
if(!silent)
{
printf("length error ");
}
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
xs->resid = ntohl(*((long *)sense->ext.extended.info));
if(xs->bp)
{
xs->bp->b_flags |= B_ERROR;
return(ESUCCESS);
}
- if(sense->ext.extended.eom)
+ if(sense->ext.extended.flags & SSD_EOM)
if(!silent) printf("end of medium ");
- if(sense->ext.extended.filemark)
+ if(sense->ext.extended.flags & SSD_FILEMARK)
if(!silent) printf("filemark ");
if(ch_debug)
{
- printf("code%x class%x valid%x\n"
- ,sense->error_code
- ,sense->error_class
- ,sense->valid);
+ printf("code%x valid%x\n"
+ ,sense->error_code & SSD_ERRCODE
+ ,sense->error_code & SSD_ERRCODE_VALID);
printf("seg%x key%x ili%x eom%x fmark%x\n"
,sense->ext.extended.segment
- ,sense->ext.extended.sense_key
- ,sense->ext.extended.ili
- ,sense->ext.extended.eom
- ,sense->ext.extended.filemark);
+ ,sense->ext.extended.flags & SSD_KEY
+ ,sense->ext.extended.flags & SSD_ILI
+ ,sense->ext.extended.flags & SSD_EOM
+ ,sense->ext.extended.flags & SSD_FILEMARK);
printf("info: %x %x %x %x followed by %d extra bytes\n"
,sense->ext.extended.info[0]
,sense->ext.extended.info[1]
@@ -819,7 +829,7 @@ struct scsi_xfer *xs;
if(!silent)
{
printf("st%d: soft error(corrected) ", unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -842,7 +852,7 @@ struct scsi_xfer *xs;
if(!silent)
{
printf("st%d: medium error ", unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -881,7 +891,7 @@ struct scsi_xfer *xs;
{
printf("st%d: attempted protection violation "
, unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -900,7 +910,7 @@ struct scsi_xfer *xs;
{
printf("st%d: block wrong state (worm)\n "
, unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -932,7 +942,7 @@ struct scsi_xfer *xs;
if(!silent)
{
printf("st%d: search returned\n ", unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -954,7 +964,7 @@ struct scsi_xfer *xs;
if(!silent)
{
printf("st%d: verify miscompare\n ", unit);
- if(sense->valid)
+ if(sense->error_code & SSD_ERRCODE_VALID)
{
printf("block no. %d (decimal)\n",
(sense->ext.extended.info[0] <<24)|
@@ -978,19 +988,12 @@ struct scsi_xfer *xs;
/***************************************************************\
* If it's NOT class 7, just report it. *
\***************************************************************/
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
+ default:
{
- if(!silent) printf("st%d: error class %d code %d\n",
+ if(!silent) printf("st%d: error code %d\n",
unit,
- sense->error_class,
- sense->error_code);
- if(sense->valid)
+ sense->error_code & SSD_ERRCODE);
+ if(sense->error_code & SSD_ERRCODE_VALID)
if(!silent) printf("block no. %d (decimal)\n",
(sense->ext.unextended.blockhi <<16),
+ (sense->ext.unextended.blockmed <<8),
OpenPOWER on IntegriCloud