scsisense.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:7k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)scsisense.h 2.15 99/10/18 Copyright 1986 J. Schilling */
  2. /*
  3.  * Definitions for the SCSI status code and sense structure
  4.  *
  5.  * Copyright (c) 1986 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef _SCG_SCSISENSE_H
  23. #define _SCG_SCSISENSE_H
  24. /*
  25.  * SCSI status completion block.
  26.  */
  27. #define SCSI_EXTENDED_STATUS
  28. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  29. struct scsi_status {
  30. Ucbit vu_00 : 1; /* vendor unique */
  31. Ucbit chk : 1; /* check condition: sense data available */
  32. Ucbit cm : 1; /* condition met */
  33. Ucbit busy : 1; /* device busy or reserved */
  34. Ucbit is : 1; /* intermediate status sent */
  35. Ucbit vu_05 : 1; /* vendor unique */
  36. #define st_scsi2 vu_05 /* SCSI-2 modifier bit */
  37. Ucbit vu_06 : 1; /* vendor unique */
  38. Ucbit st_rsvd : 1; /* reserved */
  39. #ifdef SCSI_EXTENDED_STATUS
  40. #define ext_st1 st_rsvd /* extended status (next byte valid) */
  41. /* byte 1 */
  42. Ucbit ha_er : 1; /* host adapter detected error */
  43. Ucbit reserved: 6; /* reserved */
  44. Ucbit ext_st2 : 1; /* extended status (next byte valid) */
  45. /* byte 2 */
  46. u_char byte2; /* third byte */
  47. #endif /* SCSI_EXTENDED_STATUS */
  48. };
  49. #else /* Motorola byteorder */
  50. struct scsi_status {
  51. Ucbit st_rsvd : 1; /* reserved */
  52. Ucbit vu_06 : 1; /* vendor unique */
  53. Ucbit vu_05 : 1; /* vendor unique */
  54. #define st_scsi2 vu_05 /* SCSI-2 modifier bit */
  55. Ucbit is : 1; /* intermediate status sent */
  56. Ucbit busy : 1; /* device busy or reserved */
  57. Ucbit cm : 1; /* condition met */
  58. Ucbit chk : 1; /* check condition: sense data available */
  59. Ucbit vu_00 : 1; /* vendor unique */
  60. #ifdef SCSI_EXTENDED_STATUS
  61. #define ext_st1 st_rsvd /* extended status (next byte valid) */
  62. /* byte 1 */
  63. Ucbit ext_st2 : 1; /* extended status (next byte valid) */
  64. Ucbit reserved: 6; /* reserved */
  65. Ucbit ha_er : 1; /* host adapter detected error */
  66. /* byte 2 */
  67. u_char byte2; /* third byte */
  68. #endif /* SCSI_EXTENDED_STATUS */
  69. };
  70. #endif
  71. /*
  72.  * OLD Standard (Non Extended) SCSI Sense. Used mainly by the
  73.  * Adaptec ACB 4000 which is the only controller that
  74.  * does not support the Extended sense format.
  75.  */
  76. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  77. struct scsi_sense { /* scsi sense for error classes 0-6 */
  78. Ucbit code : 7; /* error class/code */
  79. Ucbit adr_val : 1; /* sense data is valid */
  80. #ifdef comment
  81. Ucbit high_addr:5; /* high byte of block addr */
  82. Ucbit rsvd : 3;
  83. #else
  84. u_char high_addr; /* high byte of block addr */
  85. #endif
  86. u_char mid_addr; /* middle byte of block addr */
  87. u_char low_addr; /* low byte of block addr */
  88. };
  89. #else /* Motorola byteorder */
  90. struct scsi_sense { /* scsi sense for error classes 0-6 */
  91. Ucbit adr_val : 1; /* sense data is valid */
  92. Ucbit code : 7; /* error class/code */
  93. #ifdef comment
  94. Ucbit rsvd : 3;
  95. Ucbit high_addr:5; /* high byte of block addr */
  96. #else
  97. u_char high_addr; /* high byte of block addr */
  98. #endif
  99. u_char mid_addr; /* middle byte of block addr */
  100. u_char low_addr; /* low byte of block addr */
  101. };
  102. #endif
  103. /*
  104.  * SCSI extended sense parameter block.
  105.  */
  106. #ifdef comment
  107. #define SC_CLASS_EXTENDED_SENSE 0x7     /* indicates extended sense */
  108. #endif
  109. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  110. struct scsi_ext_sense { /* scsi extended sense for error class 7 */
  111. /* byte 0 */
  112. Ucbit type : 7; /* fixed at 0x70 */
  113. Ucbit adr_val : 1; /* sense data is valid */
  114. /* byte 1 */
  115. u_char seg_num; /* segment number, applies to copy cmd only */
  116. /* byte 2 */
  117. Ucbit key : 4; /* sense key, see below */
  118. Ucbit : 1; /* reserved */
  119. Ucbit ili : 1; /* incorrect length indicator */
  120. Ucbit eom : 1; /* end of media */
  121. Ucbit fil_mk : 1; /* file mark on device */
  122. /* bytes 3 through 7 */
  123. u_char info_1; /* information byte 1 */
  124. u_char info_2; /* information byte 2 */
  125. u_char info_3; /* information byte 3 */
  126. u_char info_4; /* information byte 4 */
  127. u_char add_len; /* number of additional bytes */
  128. /* bytes 8 through 13, CCS additions */
  129. u_char optional_8; /* CCS search and copy only */
  130. u_char optional_9; /* CCS search and copy only */
  131. u_char optional_10; /* CCS search and copy only */
  132. u_char optional_11; /* CCS search and copy only */
  133. u_char  sense_code; /* sense code */
  134. u_char qual_code; /* sense code qualifier */
  135. u_char fru_code; /* Field replacable unit code */
  136. Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
  137. Ucbit bpv : 1; /* bit pointer is valid */
  138. Ucbit : 2;
  139. Ucbit cd : 1; /* pointers refer to command not data */
  140. Ucbit sksv : 1; /* sense key specific valid */
  141. u_char field_ptr[2]; /* field pointer for failure */
  142. u_char add_info[2]; /* round up to 20 bytes */
  143. };
  144. #else /* Motorola byteorder */
  145. struct scsi_ext_sense { /* scsi extended sense for error class 7 */
  146. /* byte 0 */
  147. Ucbit adr_val : 1; /* sense data is valid */
  148. Ucbit type : 7; /* fixed at 0x70 */
  149. /* byte 1 */
  150. u_char seg_num; /* segment number, applies to copy cmd only */
  151. /* byte 2 */
  152. Ucbit fil_mk : 1; /* file mark on device */
  153. Ucbit eom : 1; /* end of media */
  154. Ucbit ili : 1; /* incorrect length indicator */
  155. Ucbit : 1; /* reserved */
  156. Ucbit key : 4; /* sense key, see below */
  157. /* bytes 3 through 7 */
  158. u_char info_1; /* information byte 1 */
  159. u_char info_2; /* information byte 2 */
  160. u_char info_3; /* information byte 3 */
  161. u_char info_4; /* information byte 4 */
  162. u_char add_len; /* number of additional bytes */
  163. /* bytes 8 through 13, CCS additions */
  164. u_char optional_8; /* CCS search and copy only */
  165. u_char optional_9; /* CCS search and copy only */
  166. u_char optional_10; /* CCS search and copy only */
  167. u_char optional_11; /* CCS search and copy only */
  168. u_char  sense_code; /* sense code */
  169. u_char qual_code; /* sense code qualifier */
  170. u_char fru_code; /* Field replacable unit code */
  171. Ucbit sksv : 1; /* sense key specific valid */
  172. Ucbit cd : 1; /* pointers refer to command not data */
  173. Ucbit : 2;
  174. Ucbit bpv : 1; /* bit pointer is valid */
  175. Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
  176. u_char field_ptr[2]; /* field pointer for failure */
  177. u_char add_info[2]; /* round up to 20 bytes */
  178. };
  179. #endif
  180. #endif /* _SCG_SCSISENSE_H */