/* @(#)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 */