scgcmd.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:17k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)scgcmd.h 2.14 98/11/29 Copyright 1986 J. Schilling */
  2. /*
  3.  * Definitions for the SCSI general driver 'scg'
  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 _SCGCMD_H
  23. #define _SCGCMD_H
  24. #include <utypes.h>
  25. #include <btorder.h>
  26. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  27. #elif defined(_BIT_FIELDS_HTOL) /* Motorola byteorder */
  28. #else 
  29. /*
  30.  * #error will not work for all compilers (e.g. sunos4)
  31.  * The following line will abort compilation on all compilers
  32.  * if none of the above is defines. And that's  what we want.
  33.  */
  34. error  One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
  35. #endif
  36. /*
  37.  * SCSI status completion block.
  38.  */
  39. #define SCSI_EXTENDED_STATUS
  40. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  41. struct scsi_status {
  42. Ucbit vu_00 : 1; /* vendor unique */
  43. Ucbit chk : 1; /* check condition: sense data available */
  44. Ucbit cm : 1; /* condition met */
  45. Ucbit busy : 1; /* device busy or reserved */
  46. Ucbit is : 1; /* intermediate status sent */
  47. Ucbit vu_05 : 1; /* vendor unique */
  48. #define st_scsi2 vu_05 /* SCSI-2 modifier bit */
  49. Ucbit vu_06 : 1; /* vendor unique */
  50. Ucbit st_rsvd : 1; /* reserved */
  51. #ifdef SCSI_EXTENDED_STATUS
  52. #define ext_st1 st_rsvd /* extended status (next byte valid) */
  53. /* byte 1 */
  54. Ucbit ha_er : 1; /* host adapter detected error */
  55. Ucbit reserved: 6; /* reserved */
  56. Ucbit ext_st2 : 1; /* extended status (next byte valid) */
  57. /* byte 2 */
  58. u_char byte2; /* third byte */
  59. #endif /* SCSI_EXTENDED_STATUS */
  60. };
  61. #else /* Motorola byteorder */
  62. struct scsi_status {
  63. Ucbit st_rsvd : 1; /* reserved */
  64. Ucbit vu_06 : 1; /* vendor unique */
  65. Ucbit vu_05 : 1; /* vendor unique */
  66. #define st_scsi2 vu_05 /* SCSI-2 modifier bit */
  67. Ucbit is : 1; /* intermediate status sent */
  68. Ucbit busy : 1; /* device busy or reserved */
  69. Ucbit cm : 1; /* condition met */
  70. Ucbit chk : 1; /* check condition: sense data available */
  71. Ucbit vu_00 : 1; /* vendor unique */
  72. #ifdef SCSI_EXTENDED_STATUS
  73. #define ext_st1 st_rsvd /* extended status (next byte valid) */
  74. /* byte 1 */
  75. Ucbit ext_st2 : 1; /* extended status (next byte valid) */
  76. Ucbit reserved: 6; /* reserved */
  77. Ucbit ha_er : 1; /* host adapter detected error */
  78. /* byte 2 */
  79. u_char byte2; /* third byte */
  80. #endif /* SCSI_EXTENDED_STATUS */
  81. };
  82. #endif
  83. /*
  84.  * OLD Standard (Non Extended) SCSI Sense. Used mainly by the
  85.  * Adaptec ACB 4000 which is the only controller that
  86.  * does not support the Extended sense format.
  87.  */
  88. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  89. struct scsi_sense { /* scsi sense for error classes 0-6 */
  90. Ucbit code : 7; /* error class/code */
  91. Ucbit adr_val : 1; /* sense data is valid */
  92. #ifdef comment
  93. Ucbit high_addr:5; /* high byte of block addr */
  94. Ucbit rsvd : 3;
  95. #else
  96. u_char high_addr; /* high byte of block addr */
  97. #endif
  98. u_char mid_addr; /* middle byte of block addr */
  99. u_char low_addr; /* low byte of block addr */
  100. };
  101. #else /* Motorola byteorder */
  102. struct scsi_sense { /* scsi sense for error classes 0-6 */
  103. Ucbit adr_val : 1; /* sense data is valid */
  104. Ucbit code : 7; /* error class/code */
  105. #ifdef comment
  106. Ucbit rsvd : 3;
  107. Ucbit high_addr:5; /* high byte of block addr */
  108. #else
  109. u_char high_addr; /* high byte of block addr */
  110. #endif
  111. u_char mid_addr; /* middle byte of block addr */
  112. u_char low_addr; /* low byte of block addr */
  113. };
  114. #endif
  115. /*
  116.  * SCSI extended sense parameter block.
  117.  */
  118. #ifdef comment
  119. #define SC_CLASS_EXTENDED_SENSE 0x7     /* indicates extended sense */
  120. #endif
  121. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  122. struct scsi_ext_sense { /* scsi extended sense for error class 7 */
  123. /* byte 0 */
  124. Ucbit type : 7; /* fixed at 0x70 */
  125. Ucbit adr_val : 1; /* sense data is valid */
  126. /* byte 1 */
  127. u_char seg_num; /* segment number, applies to copy cmd only */
  128. /* byte 2 */
  129. Ucbit key : 4; /* sense key, see below */
  130. Ucbit : 1; /* reserved */
  131. Ucbit ili : 1; /* incorrect length indicator */
  132. Ucbit eom : 1; /* end of media */
  133. Ucbit fil_mk : 1; /* file mark on device */
  134. /* bytes 3 through 7 */
  135. u_char info_1; /* information byte 1 */
  136. u_char info_2; /* information byte 2 */
  137. u_char info_3; /* information byte 3 */
  138. u_char info_4; /* information byte 4 */
  139. u_char add_len; /* number of additional bytes */
  140. /* bytes 8 through 13, CCS additions */
  141. u_char optional_8; /* CCS search and copy only */
  142. u_char optional_9; /* CCS search and copy only */
  143. u_char optional_10; /* CCS search and copy only */
  144. u_char optional_11; /* CCS search and copy only */
  145. u_char  sense_code; /* sense code */
  146. u_char qual_code; /* sense code qualifier */
  147. u_char fru_code; /* Field replacable unit code */
  148. Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
  149. Ucbit bpv : 1; /* bit pointer is valid */
  150. Ucbit : 2;
  151. Ucbit cd : 1; /* pointers refer to command not data */
  152. Ucbit sksv : 1; /* sense key specific valid */
  153. u_char field_ptr[2]; /* field pointer for failure */
  154. u_char add_info[2]; /* round up to 20 bytes */
  155. };
  156. #else /* Motorola byteorder */
  157. struct scsi_ext_sense { /* scsi extended sense for error class 7 */
  158. /* byte 0 */
  159. Ucbit adr_val : 1; /* sense data is valid */
  160. Ucbit type : 7; /* fixed at 0x70 */
  161. /* byte 1 */
  162. u_char seg_num; /* segment number, applies to copy cmd only */
  163. /* byte 2 */
  164. Ucbit fil_mk : 1; /* file mark on device */
  165. Ucbit eom : 1; /* end of media */
  166. Ucbit ili : 1; /* incorrect length indicator */
  167. Ucbit : 1; /* reserved */
  168. Ucbit key : 4; /* sense key, see below */
  169. /* bytes 3 through 7 */
  170. u_char info_1; /* information byte 1 */
  171. u_char info_2; /* information byte 2 */
  172. u_char info_3; /* information byte 3 */
  173. u_char info_4; /* information byte 4 */
  174. u_char add_len; /* number of additional bytes */
  175. /* bytes 8 through 13, CCS additions */
  176. u_char optional_8; /* CCS search and copy only */
  177. u_char optional_9; /* CCS search and copy only */
  178. u_char optional_10; /* CCS search and copy only */
  179. u_char optional_11; /* CCS search and copy only */
  180. u_char  sense_code; /* sense code */
  181. u_char qual_code; /* sense code qualifier */
  182. u_char fru_code; /* Field replacable unit code */
  183. Ucbit sksv : 1; /* sense key specific valid */
  184. Ucbit cd : 1; /* pointers refer to command not data */
  185. Ucbit : 2;
  186. Ucbit bpv : 1; /* bit pointer is valid */
  187. Ucbit bptr : 3; /* bit pointer for failure (if bpv) */
  188. u_char field_ptr[2]; /* field pointer for failure */
  189. u_char add_info[2]; /* round up to 20 bytes */
  190. };
  191. #endif
  192. /*
  193.  * SCSI Operation codes. 
  194.  */
  195. #define SC_TEST_UNIT_READY 0x00
  196. #define SC_REZERO_UNIT 0x01
  197. #define SC_REQUEST_SENSE 0x03
  198. #define SC_FORMAT 0x04
  199. #define SC_FORMAT_TRACK 0x06
  200. #define SC_REASSIGN_BLOCK 0x07 /* CCS only */
  201. #define SC_SEEK 0x0b
  202. #define SC_TRANSLATE 0x0f /* ACB4000 only */
  203. #define SC_INQUIRY 0x12 /* CCS only */
  204. #define SC_MODE_SELECT 0x15
  205. #define SC_RESERVE 0x16
  206. #define SC_RELEASE 0x17
  207. #define SC_MODE_SENSE 0x1a
  208. #define SC_START 0x1b
  209. #define SC_READ_DEFECT_LIST 0x37 /* CCS only, group 1 */
  210. #define SC_READ_BUFFER          0x3c            /* CCS only, group 1 */
  211. /*
  212.  * Note, these two commands use identical command blocks for all
  213.    * controllers except the Adaptec ACB 4000 which sets bit 1 of byte 1.
  214.  */
  215. #define SC_READ 0x08
  216. #define SC_WRITE 0x0a
  217. #define SC_EREAD 0x28 /* 10 byte read */
  218. #define SC_EWRITE 0x2a /* 10 byte write */
  219. #define SC_WRITE_VERIFY 0x2e            /* 10 byte write+verify */
  220. #define SC_WRITE_FILE_MARK 0x10
  221. #define SC_UNKNOWN 0xff /* cmd list terminator */
  222. /*
  223.  * Messages that SCSI can send.
  224.  */
  225. #define SC_COMMAND_COMPLETE 0x00
  226. #define SC_SYNCHRONOUS 0x01
  227. #define SC_SAVE_DATA_PTR 0x02
  228. #define SC_RESTORE_PTRS 0x03
  229. #define SC_DISCONNECT 0x04
  230. #define SC_ABORT 0x06
  231. #define SC_MSG_REJECT 0x07
  232. #define SC_NO_OP 0x08
  233. #define SC_PARITY 0x09
  234. #define SC_IDENTIFY 0x80
  235. #define SC_DR_IDENTIFY 0xc0
  236. #define SC_DEVICE_RESET 0x0c
  237. /*
  238.  * Standard SCSI control blocks.
  239.  * These go in or out over the SCSI bus.
  240.  */
  241. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  242. struct scsi_g0cdb { /* scsi group 0 command description block */
  243. u_char cmd; /* command code */
  244. Ucbit high_addr : 5; /* high part of block address */
  245. Ucbit lun   : 3; /* logical unit number */
  246. u_char mid_addr; /* middle part of block address */
  247. u_char low_addr; /* low part of block address */
  248. u_char count; /* transfer length */
  249. Ucbit link   : 1; /* link (another command follows) */
  250. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  251. Ucbit rsvd   : 4; /* reserved */
  252. Ucbit vu_56   : 1; /* vendor unique (byte 5 bit 6) */
  253. Ucbit vu_57   : 1; /* vendor unique (byte 5 bit 7) */
  254. };
  255. #else /* Motorola byteorder */
  256. struct scsi_g0cdb { /* scsi group 0 command description block */
  257. u_char cmd; /* command code */
  258. Ucbit lun   : 3; /* logical unit number */
  259. Ucbit high_addr : 5; /* high part of block address */
  260. u_char mid_addr; /* middle part of block address */
  261. u_char low_addr; /* low part of block address */
  262. u_char count; /* transfer length */
  263. Ucbit vu_57   : 1; /* vendor unique (byte 5 bit 7) */
  264. Ucbit vu_56   : 1; /* vendor unique (byte 5 bit 6) */
  265. Ucbit rsvd   : 4; /* reserved */
  266. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  267. Ucbit link   : 1; /* link (another command follows) */
  268. };
  269. #endif
  270. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  271. struct scsi_g1cdb { /* scsi group 1 command description block */
  272. u_char cmd; /* command code */
  273. Ucbit reladr   : 1; /* address is relative */
  274. Ucbit res   : 4; /* reserved bits 1-4 of byte 1 */
  275. Ucbit lun   : 3; /* logical unit number */
  276. u_char addr[4]; /* logical block address */
  277. u_char res6; /* reserved byte 6 */
  278. u_char count[2]; /* transfer length */
  279. Ucbit link   : 1; /* link (another command follows) */
  280. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  281. Ucbit rsvd   : 4; /* reserved */
  282. Ucbit vu_96   : 1; /* vendor unique (byte 5 bit 6) */
  283. Ucbit vu_97   : 1; /* vendor unique (byte 5 bit 7) */
  284. };
  285. #else /* Motorola byteorder */
  286. struct scsi_g1cdb { /* scsi group 1 command description block */
  287. u_char cmd; /* command code */
  288. Ucbit lun   : 3; /* logical unit number */
  289. Ucbit res   : 4; /* reserved bits 1-4 of byte 1 */
  290. Ucbit reladr   : 1; /* address is relative */
  291. u_char addr[4]; /* logical block address */
  292. u_char res6; /* reserved byte 6 */
  293. u_char count[2]; /* transfer length */
  294. Ucbit vu_97   : 1; /* vendor unique (byte 5 bit 7) */
  295. Ucbit vu_96   : 1; /* vendor unique (byte 5 bit 6) */
  296. Ucbit rsvd   : 4; /* reserved */
  297. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  298. Ucbit link   : 1; /* link (another command follows) */
  299. };
  300. #endif
  301. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  302. struct scsi_g5cdb { /* scsi group 5 command description block */
  303. u_char cmd; /* command code */
  304. Ucbit reladr   : 1; /* address is relative */
  305. Ucbit res   : 4; /* reserved bits 1-4 of byte 1 */
  306. Ucbit lun   : 3; /* logical unit number */
  307. u_char addr[4]; /* logical block address */
  308. u_char count[4]; /* transfer length */
  309. u_char res10; /* reserved byte 10 */
  310. Ucbit link   : 1; /* link (another command follows) */
  311. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  312. Ucbit rsvd   : 4; /* reserved */
  313. Ucbit vu_B6   : 1; /* vendor unique (byte B bit 6) */
  314. Ucbit vu_B7   : 1; /* vendor unique (byte B bit 7) */
  315. };
  316. #else /* Motorola byteorder */
  317. struct scsi_g5cdb { /* scsi group 5 command description block */
  318. u_char cmd; /* command code */
  319. Ucbit lun   : 3; /* logical unit number */
  320. Ucbit res   : 4; /* reserved bits 1-4 of byte 1 */
  321. Ucbit reladr   : 1; /* address is relative */
  322. u_char addr[4]; /* logical block address */
  323. u_char count[4]; /* transfer length */
  324. u_char res10; /* reserved byte 10 */
  325. Ucbit vu_B7   : 1; /* vendor unique (byte B bit 7) */
  326. Ucbit vu_B6   : 1; /* vendor unique (byte B bit 6) */
  327. Ucbit rsvd   : 4; /* reserved */
  328. Ucbit fr   : 1; /* flag request (interrupt at completion) */
  329. Ucbit link   : 1; /* link (another command follows) */
  330. };
  331. #endif
  332. #define SC_G0_CDBLEN 6 /* Len of Group 0 commands */
  333. #define SC_G1_CDBLEN 10 /* Len of Group 1 commands */
  334. #define SC_G5_CDBLEN 12 /* Len of Group 5 commands */
  335. #define SCG_MAX_CMD 24 /* 24 bytes max. size is supported */
  336. #define SCG_MAX_STATUS 3 /* XXX (sollte 4 allign.) Mamimum Status Len */
  337. #define SCG_MAX_SENSE 32 /* Mamimum Sense Len for auto Req. Sense */
  338. #define DEF_SENSE_LEN 16 /* Default Sense Len */
  339. #define CCS_SENSE_LEN 18 /* Sense Len for CCS compatible devices */
  340. struct scg_cmd {
  341. caddr_t addr; /* Address of data in user space */
  342. int size; /* DMA count for data transfer */
  343. int flags; /* see below for definition */
  344. int cdb_len; /* Size of SCSI command in bytes */
  345. /* NOTE: rel 4 uses this field only */
  346. /* with commands not in group 1 or 2*/
  347. int sense_len; /* for intr() if -1 don't get sense */
  348. int timeout; /* timeout in seconds */
  349. /* NOTE: actual resolution depends */
  350. /* on driver implementation */
  351. int kdebug; /* driver kernel debug level */
  352. int resid; /* Bytes not transfered */
  353. int error; /* Error code from scgintr() */
  354. int ux_errno; /* UNIX error code */
  355. #ifdef comment
  356. XXX struct scsi_status scb; ??? /* Status returnd by command */
  357. #endif
  358. union {
  359. struct scsi_status Scb;/* Status returnd by command */
  360. u_char cmd_scb[SCG_MAX_STATUS];
  361. } u_scb;
  362. #define scb u_scb.Scb
  363. #ifdef comment
  364. XXX struct scsi_sense sense; ??? /* Sense bytes from command */
  365. #endif
  366. union {
  367. struct scsi_sense Sense;/* Sense bytes from command */
  368. u_char cmd_sense[SCG_MAX_SENSE];
  369. } u_sense;
  370. #define sense u_sense.Sense
  371. int sense_count; /* Number of bytes valid in sense */
  372. int target; /* SCSI target id */
  373. union { /* SCSI command descriptor block */
  374. struct scsi_g0cdb g0_cdb;
  375. struct scsi_g1cdb g1_cdb;
  376. struct scsi_g5cdb g5_cdb;
  377. u_char cmd_cdb[SCG_MAX_CMD];
  378. } cdb; /* 24 bytes max. size is supported */
  379. };
  380. #define dma_read flags /* 1 if DMA to Sun, 0 otherwise */
  381. /*
  382.  * definition for flags field in scg_cmd struct
  383.  */
  384. #define SCG_RECV_DATA 0x0001 /* DMA direction to Sun */
  385. #define SCG_DISRE_ENA 0x0002 /* enable disconnect/reconnect */
  386. #define SCG_SILENT 0x0004 /* be silent on errors */
  387. #define SCG_CMD_RETRY 0x0008 /* enable retries */
  388. #define SCG_NOPARITY 0x0010 /* disable parity for this command */
  389. /*
  390.  * definition for error field in scg_cmd struct
  391.  *
  392.  * The codes refer to SCSI general errors, not to device
  393.  * specific errors.  Device specific errors are discovered
  394.  * by checking the sense data.
  395.  * The distinction between retryable and fatal is somewhat ad hoc.
  396.  */
  397. #define SCG_NO_ERROR 0 /* cdb transported without error */
  398. #define SCG_RETRYABLE 1 /* any other case */
  399. #define SCG_FATAL 2 /* could not select target */
  400. #define SCG_TIMEOUT 3 /* driver timed out */
  401. #define g0_cdbaddr(cdb, a) ((cdb)->high_addr = (a) >> 16,
  402.  (cdb)->mid_addr = ((a) >> 8) & 0xFF,
  403.  (cdb)->low_addr = (a) & 0xFF)
  404. #define g1_cdbaddr(cdb, a) ((cdb)->addr[0] = (a) >> 24,
  405.  (cdb)->addr[1] = ((a) >> 16)& 0xFF,
  406.  (cdb)->addr[2] = ((a) >> 8) & 0xFF,
  407.  (cdb)->addr[3] = (a) & 0xFF)
  408. #define g5_cdbaddr(cdb, a) g1_cdbaddr(cdb, a)
  409. #define g0_cdblen(cdb, len) ((cdb)->count = (len))
  410. #define g1_cdblen(cdb, len) ((cdb)->count[0] = ((len) >> 8) & 0xFF,
  411.  (cdb)->count[1] = (len) & 0xFF)
  412. #define g5_cdblen(cdb, len) ((cdb)->count[0] = (len) >> 24L,
  413.  (cdb)->count[1] = ((len) >> 16L)& 0xFF,
  414.  (cdb)->count[2] = ((len) >> 8L) & 0xFF,
  415.  (cdb)->count[3] = (len) & 0xFF)
  416. #define i_to_long(a, i) (((u_char *)(a))[0] = ((i) >> 24)& 0xFF,
  417.  ((u_char *)(a))[1] = ((i) >> 16)& 0xFF,
  418.  ((u_char *)(a))[2] = ((i) >> 8) & 0xFF,
  419.  ((u_char *)(a))[3] = (i) & 0xFF)
  420. #define i_to_3_byte(a, i) (((u_char *)(a))[0] = ((i) >> 16)& 0xFF,
  421.  ((u_char *)(a))[1] = ((i) >> 8) & 0xFF,
  422.  ((u_char *)(a))[2] = (i) & 0xFF)
  423. #define i_to_4_byte(a, i) (((u_char *)(a))[0] = ((i) >> 24)& 0xFF,
  424.  ((u_char *)(a))[1] = ((i) >> 16)& 0xFF,
  425.  ((u_char *)(a))[2] = ((i) >> 8) & 0xFF,
  426.  ((u_char *)(a))[3] = (i) & 0xFF)
  427. #define i_to_short(a, i) (((u_char *)(a))[0] = ((i) >> 8) & 0xFF,
  428.  ((u_char *)(a))[1] = (i) & 0xFF)
  429. #define a_to_u_short(a) ((unsigned short) 
  430. ((((unsigned char*) a)[1]       & 0xFF) | 
  431.  (((unsigned char*) a)[0] << 8  & 0xFF00)))
  432. #define a_to_3_byte(a) ((unsigned long) 
  433. ((((unsigned char*) a)[2]       & 0xFF) | 
  434.  (((unsigned char*) a)[1] << 8  & 0xFF00) | 
  435.  (((unsigned char*) a)[0] << 16 & 0xFF0000)))
  436. #ifdef __STDC__
  437. #define a_to_u_long(a) ((unsigned long) 
  438. ((((unsigned char*) a)[3]       & 0xFF) | 
  439.  (((unsigned char*) a)[2] << 8  & 0xFF00) | 
  440.  (((unsigned char*) a)[1] << 16 & 0xFF0000) | 
  441.  (((unsigned char*) a)[0] << 24 & 0xFF000000UL)))
  442. #else
  443. #define a_to_u_long(a) ((unsigned long) 
  444. ((((unsigned char*) a)[3]       & 0xFF) | 
  445.  (((unsigned char*) a)[2] << 8  & 0xFF00) | 
  446.  (((unsigned char*) a)[1] << 16 & 0xFF0000) | 
  447.  (((unsigned char*) a)[0] << 24 & 0xFF000000)))
  448. #endif
  449. /* Peripheral Device Type */
  450. #define SC_DASD 0x00
  451. #define SC_SEQD 0x01
  452. #define SC_PRTD 0x02 
  453. #define SC_PROCD 0x03 
  454. #define SC_OPTD 0x04
  455. #define SC_ROMD 0x05
  456. #define SC_SCAN 0x06
  457. #define SC_OMEM 0x07
  458. #define SC_JUKE 0x08
  459. #define SC_COMM 0x09
  460. #define SC_NOTPR 0x7F
  461. #endif /* _SCGCMD_H */