192 lines
5.9 KiB
C
192 lines
5.9 KiB
C
/* @(#)scsisense.h 2.18 04/09/04 Copyright 1986 J. Schilling */
|
|
/*
|
|
* Definitions for the SCSI status code and sense structure
|
|
*
|
|
* Copyright (c) 1986 J. Schilling
|
|
*/
|
|
/*@@C@@*/
|
|
|
|
#ifndef _SCG_SCSISENSE_H
|
|
#define _SCG_SCSISENSE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* SCSI status completion block.
|
|
*/
|
|
#define SCSI_EXTENDED_STATUS
|
|
|
|
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
|
|
|
|
struct scsi_status {
|
|
Ucbit vu_00 : 1; /* vendor unique */
|
|
Ucbit chk : 1; /* check condition: sense data available */
|
|
Ucbit cm : 1; /* condition met */
|
|
Ucbit busy : 1; /* device busy or reserved */
|
|
Ucbit is : 1; /* intermediate status sent */
|
|
Ucbit vu_05 : 1; /* vendor unique */
|
|
#define st_scsi2 vu_05 /* SCSI-2 modifier bit */
|
|
Ucbit vu_06 : 1; /* vendor unique */
|
|
Ucbit st_rsvd : 1; /* reserved */
|
|
|
|
#ifdef SCSI_EXTENDED_STATUS
|
|
#define ext_st1 st_rsvd /* extended status (next byte valid) */
|
|
/* byte 1 */
|
|
Ucbit ha_er : 1; /* host adapter detected error */
|
|
Ucbit reserved: 6; /* reserved */
|
|
Ucbit ext_st2 : 1; /* extended status (next byte valid) */
|
|
/* byte 2 */
|
|
Uchar byte2; /* third byte */
|
|
#endif /* SCSI_EXTENDED_STATUS */
|
|
};
|
|
|
|
#else /* Motorola byteorder */
|
|
|
|
struct scsi_status {
|
|
Ucbit st_rsvd : 1; /* reserved */
|
|
Ucbit vu_06 : 1; /* vendor unique */
|
|
Ucbit vu_05 : 1; /* vendor unique */
|
|
#define st_scsi2 vu_05 /* SCSI-2 modifier bit */
|
|
Ucbit is : 1; /* intermediate status sent */
|
|
Ucbit busy : 1; /* device busy or reserved */
|
|
Ucbit cm : 1; /* condition met */
|
|
Ucbit chk : 1; /* check condition: sense data available */
|
|
Ucbit vu_00 : 1; /* vendor unique */
|
|
#ifdef SCSI_EXTENDED_STATUS
|
|
#define ext_st1 st_rsvd /* extended status (next byte valid) */
|
|
/* byte 1 */
|
|
Ucbit ext_st2 : 1; /* extended status (next byte valid) */
|
|
Ucbit reserved: 6; /* reserved */
|
|
Ucbit ha_er : 1; /* host adapter detected error */
|
|
/* byte 2 */
|
|
Uchar byte2; /* third byte */
|
|
#endif /* SCSI_EXTENDED_STATUS */
|
|
};
|
|
#endif
|
|
|
|
/*
|
|
* OLD Standard (Non Extended) SCSI Sense. Used mainly by the
|
|
* Adaptec ACB 4000 which is the only controller that
|
|
* does not support the Extended sense format.
|
|
*/
|
|
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
|
|
|
|
struct scsi_sense { /* scsi sense for error classes 0-6 */
|
|
Ucbit code : 7; /* error class/code */
|
|
Ucbit adr_val : 1; /* sense data is valid */
|
|
#ifdef comment
|
|
Ucbit high_addr:5; /* high byte of block addr */
|
|
Ucbit rsvd : 3;
|
|
#else
|
|
Uchar high_addr; /* high byte of block addr */
|
|
#endif
|
|
Uchar mid_addr; /* middle byte of block addr */
|
|
Uchar low_addr; /* low byte of block addr */
|
|
};
|
|
|
|
#else /* Motorola byteorder */
|
|
|
|
struct scsi_sense { /* scsi sense for error classes 0-6 */
|
|
Ucbit adr_val : 1; /* sense data is valid */
|
|
Ucbit code : 7; /* error class/code */
|
|
#ifdef comment
|
|
Ucbit rsvd : 3;
|
|
Ucbit high_addr:5; /* high byte of block addr */
|
|
#else
|
|
Uchar high_addr; /* high byte of block addr */
|
|
#endif
|
|
Uchar mid_addr; /* middle byte of block addr */
|
|
Uchar low_addr; /* low byte of block addr */
|
|
};
|
|
#endif
|
|
|
|
/*
|
|
* SCSI extended sense parameter block.
|
|
*/
|
|
#ifdef comment
|
|
#define SC_CLASS_EXTENDED_SENSE 0x7 /* indicates extended sense */
|
|
#endif
|
|
|
|
#if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
|
|
|
|
struct scsi_ext_sense { /* scsi extended sense for error class 7 */
|
|
/* byte 0 */
|
|
Ucbit type : 7; /* fixed at 0x70 */
|
|
Ucbit adr_val : 1; /* sense data is valid */
|
|
/* byte 1 */
|
|
Uchar seg_num; /* segment number, applies to copy cmd only */
|
|
/* byte 2 */
|
|
Ucbit key : 4; /* sense key, see below */
|
|
Ucbit : 1; /* reserved */
|
|
Ucbit ili : 1; /* incorrect length indicator */
|
|
Ucbit eom : 1; /* end of media */
|
|
Ucbit fil_mk : 1; /* file mark on device */
|
|
/* bytes 3 through 7 */
|
|
Uchar info_1; /* information byte 1 */
|
|
Uchar info_2; /* information byte 2 */
|
|
Uchar info_3; /* information byte 3 */
|
|
Uchar info_4; /* information byte 4 */
|
|
Uchar add_len; /* number of additional bytes */
|
|
/* bytes 8 through 13, CCS additions */
|
|
Uchar optional_8; /* CCS search and copy only */
|
|
Uchar optional_9; /* CCS search and copy only */
|
|
Uchar optional_10; /* CCS search and copy only */
|
|
Uchar optional_11; /* CCS search and copy only */
|
|
Uchar sense_code; /* sense code */
|
|
Uchar qual_code; /* sense code qualifier */
|
|
Uchar fru_code; /* Field replacable unit code */
|
|
Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
|
|
Ucbit bpv : 1; /* bit pointer is valid */
|
|
Ucbit : 2;
|
|
Ucbit cd : 1; /* pointers refer to command not data */
|
|
Ucbit sksv : 1; /* sense key specific valid */
|
|
Uchar field_ptr[2]; /* field pointer for failure */
|
|
Uchar add_info[2]; /* round up to 20 bytes */
|
|
};
|
|
|
|
#else /* Motorola byteorder */
|
|
|
|
struct scsi_ext_sense { /* scsi extended sense for error class 7 */
|
|
/* byte 0 */
|
|
Ucbit adr_val : 1; /* sense data is valid */
|
|
Ucbit type : 7; /* fixed at 0x70 */
|
|
/* byte 1 */
|
|
Uchar seg_num; /* segment number, applies to copy cmd only */
|
|
/* byte 2 */
|
|
Ucbit fil_mk : 1; /* file mark on device */
|
|
Ucbit eom : 1; /* end of media */
|
|
Ucbit ili : 1; /* incorrect length indicator */
|
|
Ucbit : 1; /* reserved */
|
|
Ucbit key : 4; /* sense key, see below */
|
|
/* bytes 3 through 7 */
|
|
Uchar info_1; /* information byte 1 */
|
|
Uchar info_2; /* information byte 2 */
|
|
Uchar info_3; /* information byte 3 */
|
|
Uchar info_4; /* information byte 4 */
|
|
Uchar add_len; /* number of additional bytes */
|
|
/* bytes 8 through 13, CCS additions */
|
|
Uchar optional_8; /* CCS search and copy only */
|
|
Uchar optional_9; /* CCS search and copy only */
|
|
Uchar optional_10; /* CCS search and copy only */
|
|
Uchar optional_11; /* CCS search and copy only */
|
|
Uchar sense_code; /* sense code */
|
|
Uchar qual_code; /* sense code qualifier */
|
|
Uchar fru_code; /* Field replacable unit code */
|
|
Ucbit sksv : 1; /* sense key specific valid */
|
|
Ucbit cd : 1; /* pointers refer to command not data */
|
|
Ucbit : 2;
|
|
Ucbit bpv : 1; /* bit pointer is valid */
|
|
Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
|
|
Uchar field_ptr[2]; /* field pointer for failure */
|
|
Uchar add_info[2]; /* round up to 20 bytes */
|
|
};
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SCG_SCSISENSE_H */
|