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

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)scsireg.h 1.19 99/10/17 Copyright 1987 J. Schilling */
  2. /*
  3.  * usefull definitions for dealing with CCS SCSI - devices
  4.  *
  5.  * Copyright (c) 1987 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 _SCSIREG_H
  23. #define _SCSIREG_H
  24. #include <utypes.h>
  25. #include <btorder.h>
  26. /* 
  27.  * SCSI status bits.
  28.  */
  29. #define ST_VU_00 0x01 /* Vendor unique */
  30. #define ST_CHK_COND 0x02 /* Check condition */
  31. #define ST_COND_MET 0x04 /* Condition met */
  32. #define ST_BUSY 0x08 /* Busy */
  33. #define ST_IS_SEND 0x10 /* Intermediate status send */
  34. #define ST_VU_05 0x20 /* Vendor unique */
  35. #define ST_VU_06 0x40 /* Vendor unique */
  36. #define ST_RSVD_07 0x80 /* Reserved   */
  37. /* 
  38.  * Sense key values for extended sense.
  39.  */
  40. #define SC_NO_SENSE 0x00
  41. #define SC_RECOVERABLE_ERROR 0x01
  42. #define SC_NOT_READY 0x02
  43. #define SC_MEDIUM_ERROR 0x03
  44. #define SC_HARDWARE_ERROR 0x04
  45. #define SC_ILLEGAL_REQUEST 0x05
  46. #define SC_UNIT_ATTENTION 0x06
  47. #define SC_WRITE_PROTECT 0x07
  48. #define SC_BLANK_CHECK 0x08
  49. #define SC_VENDOR_UNIQUE 0x09
  50. #define SC_COPY_ABORTED 0x0A
  51. #define SC_ABORTED_COMMAND 0x0B
  52. #define SC_EQUAL 0x0C
  53. #define SC_VOLUME_OVERFLOW 0x0D
  54. #define SC_MISCOMPARE 0x0E
  55. #define SC_RESERVED 0x0F
  56. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  57. struct scsi_inquiry {
  58. Ucbit type : 5; /*  0 */
  59. Ucbit qualifier : 3; /*  0 */
  60. Ucbit type_modifier : 7; /*  1 */
  61. Ucbit removable : 1; /*  1 */
  62. Ucbit ansi_version : 3; /*  2 */
  63. Ucbit ecma_version : 3; /*  2 */
  64. Ucbit iso_version : 2; /*  2 */
  65. Ucbit data_format : 4; /*  3 */
  66. Ucbit res3_54 : 2; /*  3 */
  67. Ucbit termiop : 1; /*  3 */
  68. Ucbit aenc : 1; /*  3 */
  69. Ucbit add_len : 8; /*  4 */
  70. Ucbit sense_len : 8; /*  5 */ /* only Emulex ??? */
  71. Ucbit res2 : 8; /*  6 */
  72. Ucbit softreset : 1; /*  7 */
  73. Ucbit cmdque : 1;
  74. Ucbit res7_2 : 1;
  75. Ucbit linked : 1;
  76. Ucbit sync : 1;
  77. Ucbit wbus16 : 1;
  78. Ucbit wbus32 : 1;
  79. Ucbit reladr : 1; /*  7 */
  80. char vendor_info[8]; /*  8 */
  81. char prod_ident[16]; /* 16 */
  82. char prod_revision[4]; /* 32 */
  83. #ifdef comment
  84. char vendor_uniq[20]; /* 36 */
  85. char reserved[40]; /* 56 */
  86. #endif
  87. }; /* 96 */
  88. #else /* Motorola byteorder */
  89. struct scsi_inquiry {
  90. Ucbit qualifier : 3; /*  0 */
  91. Ucbit type : 5; /*  0 */
  92. Ucbit removable : 1; /*  1 */
  93. Ucbit type_modifier : 7; /*  1 */
  94. Ucbit iso_version : 2; /*  2 */
  95. Ucbit ecma_version : 3;
  96. Ucbit ansi_version : 3; /*  2 */
  97. Ucbit aenc : 1; /*  3 */
  98. Ucbit termiop : 1;
  99. Ucbit res3_54 : 2;
  100. Ucbit data_format : 4; /*  3 */
  101. Ucbit add_len : 8; /*  4 */
  102. Ucbit sense_len : 8; /*  5 */ /* only Emulex ??? */
  103. Ucbit res2 : 8; /*  6 */
  104. Ucbit reladr : 1; /*  7 */
  105. Ucbit wbus32 : 1;
  106. Ucbit wbus16 : 1;
  107. Ucbit sync : 1;
  108. Ucbit linked : 1;
  109. Ucbit res7_2 : 1;
  110. Ucbit cmdque : 1;
  111. Ucbit softreset : 1;
  112. char vendor_info[8]; /*  8 */
  113. char prod_ident[16]; /* 16 */
  114. char prod_revision[4]; /* 32 */
  115. #ifdef comment
  116. char vendor_uniq[20]; /* 36 */
  117. char reserved[40]; /* 56 */
  118. #endif
  119. }; /* 96 */
  120. #endif
  121. #define info vendor_info
  122. #define ident prod_ident
  123. #define revision prod_revision
  124. /* Peripheral Device Qualifier */
  125. #define INQ_DEV_PRESENT 0x00 /* Physical device present */
  126. #define INQ_DEV_NOTPR 0x01 /* Physical device not present */
  127. #define INQ_DEV_RES 0x02 /* Reserved */
  128. #define INQ_DEV_NOTSUP 0x03 /* Logical unit not supported */
  129. /* Peripheral Device Type */
  130. #define INQ_DASD 0x00 /* Direct-access device (disk) */
  131. #define INQ_SEQD 0x01 /* Sequential-access device (tape) */
  132. #define INQ_PRTD 0x02  /* Printer device */
  133. #define INQ_PROCD 0x03  /* Processor device */
  134. #define INQ_OPTD 0x04 /* Write once device (optical disk) */
  135. #define INQ_WORM 0x04 /* Write once device (optical disk) */
  136. #define INQ_ROMD 0x05 /* CD-ROM device */
  137. #define INQ_SCAN 0x06 /* Scanner device */
  138. #define INQ_OMEM 0x07 /* Optical Memory device */
  139. #define INQ_JUKE 0x08 /* Medium Changer device (jukebox) */
  140. #define INQ_COMM 0x09 /* Communications device */
  141. #define INQ_IT8_1 0x0A /* IT8 */
  142. #define INQ_IT8_2 0x0B /* IT8 */
  143. #define INQ_STARR 0x0C /* Storage array device */
  144. #define INQ_ENCL 0x0D /* Enclosure services device */
  145. #define INQ_NODEV 0x1F /* Unknown or no device */
  146. #define INQ_NOTPR 0x1F /* Logical unit not present (SCSI-1) */
  147. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  148. struct scsi_mode_header {
  149. Ucbit sense_data_len : 8;
  150. u_char medium_type;
  151. Ucbit res2 : 4;
  152. Ucbit cache : 1;
  153. Ucbit res : 2;
  154. Ucbit write_prot : 1;
  155. u_char blockdesc_len;
  156. };
  157. #else /* Motorola byteorder */
  158. struct scsi_mode_header {
  159. Ucbit sense_data_len : 8;
  160. u_char medium_type;
  161. Ucbit write_prot : 1;
  162. Ucbit res : 2;
  163. Ucbit cache : 1;
  164. Ucbit res2 : 4;
  165. u_char blockdesc_len;
  166. };
  167. #endif
  168. struct scsi_modesel_header {
  169. Ucbit sense_data_len : 8;
  170. u_char medium_type;
  171. Ucbit res2 : 8;
  172. u_char blockdesc_len;
  173. };
  174. struct scsi_mode_blockdesc {
  175. u_char density;
  176. u_char nlblock[3];
  177. Ucbit res : 8;
  178. u_char lblen[3];
  179. };
  180. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  181. struct acb_mode_data {
  182. u_char listformat;
  183. u_char ncyl[2];
  184. u_char nhead;
  185. u_char start_red_wcurrent[2];
  186. u_char start_precomp[2];
  187. u_char landing_zone;
  188. u_char step_rate;
  189. Ucbit : 2;
  190. Ucbit hard_sec : 1;
  191. Ucbit fixed_media : 1;
  192. Ucbit : 4;
  193. u_char sect_per_trk;
  194. };
  195. #else /* Motorola byteorder */
  196. struct acb_mode_data {
  197. u_char listformat;
  198. u_char ncyl[2];
  199. u_char nhead;
  200. u_char start_red_wcurrent[2];
  201. u_char start_precomp[2];
  202. u_char landing_zone;
  203. u_char step_rate;
  204. Ucbit : 4;
  205. Ucbit fixed_media : 1;
  206. Ucbit hard_sec : 1;
  207. Ucbit : 2;
  208. u_char sect_per_trk;
  209. };
  210. #endif
  211. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  212. struct scsi_mode_page_header {
  213. Ucbit p_code : 6;
  214. Ucbit res : 1;
  215. Ucbit parsave : 1;
  216. u_char p_len;
  217. };
  218. /*
  219.  * This is a hack that allows mode pages without
  220.  * any further bitfileds to be defined bitorder independent.
  221.  */
  222. #define MP_P_CODE
  223. Ucbit p_code : 6;
  224. Ucbit p_res : 1;
  225. Ucbit parsave : 1
  226. #else /* Motorola byteorder */
  227. struct scsi_mode_page_header {
  228. Ucbit parsave : 1;
  229. Ucbit res : 1;
  230. Ucbit p_code : 6;
  231. u_char p_len;
  232. };
  233. /*
  234.  * This is a hack that allows mode pages without
  235.  * any further bitfileds to be defined bitorder independent.
  236.  */
  237. #define MP_P_CODE
  238. Ucbit parsave : 1;
  239. Ucbit p_res : 1;
  240. Ucbit p_code : 6
  241. #endif
  242. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  243. struct scsi_mode_page_01 { /* Error recovery Parameters */
  244. MP_P_CODE; /* parsave & pagecode */
  245. u_char p_len; /* 0x0A = 12 Bytes */
  246. Ucbit disa_correction : 1; /* Byte 2 */
  247. Ucbit term_on_rec_err : 1;
  248. Ucbit report_rec_err : 1;
  249. Ucbit en_early_corr : 1;
  250. Ucbit read_continuous : 1;
  251. Ucbit tranfer_block : 1;
  252. Ucbit en_auto_reall_r : 1;
  253. Ucbit en_auto_reall_w : 1; /* Byte 2 */
  254. u_char rd_retry_count; /* Byte 3 */
  255. u_char correction_span;
  256. char head_offset_count;
  257. char data_strobe_offset;
  258. u_char res;
  259. u_char wr_retry_count;
  260. u_char res_tape[2];
  261. u_char recov_timelim[2];
  262. };
  263. #else /* Motorola byteorder */
  264. struct scsi_mode_page_01 { /* Error recovery Parameters */
  265. MP_P_CODE; /* parsave & pagecode */
  266. u_char p_len; /* 0x0A = 12 Bytes */
  267. Ucbit en_auto_reall_w : 1; /* Byte 2 */
  268. Ucbit en_auto_reall_r : 1;
  269. Ucbit tranfer_block : 1;
  270. Ucbit read_continuous : 1;
  271. Ucbit en_early_corr : 1;
  272. Ucbit report_rec_err : 1;
  273. Ucbit term_on_rec_err : 1;
  274. Ucbit disa_correction : 1; /* Byte 2 */
  275. u_char rd_retry_count; /* Byte 3 */
  276. u_char correction_span;
  277. char head_offset_count;
  278. char data_strobe_offset;
  279. u_char res;
  280. u_char wr_retry_count;
  281. u_char res_tape[2];
  282. u_char recov_timelim[2];
  283. };
  284. #endif
  285. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  286. struct scsi_mode_page_02 { /* Device dis/re connect Parameters */
  287. MP_P_CODE; /* parsave & pagecode */
  288. u_char p_len; /* 0x0E = 16 Bytes */
  289. u_char buf_full_ratio;
  290. u_char buf_empt_ratio;
  291. u_char bus_inact_limit[2];
  292. u_char disc_time_limit[2];
  293. u_char conn_time_limit[2];
  294. u_char max_burst_size[2]; /* Start SCSI-2 */
  295. Ucbit data_tr_dis_ctl : 2;
  296. Ucbit : 6;
  297. u_char res[3];
  298. };
  299. #else /* Motorola byteorder */
  300. struct scsi_mode_page_02 { /* Device dis/re connect Parameters */
  301. MP_P_CODE; /* parsave & pagecode */
  302. u_char p_len; /* 0x0E = 16 Bytes */
  303. u_char buf_full_ratio;
  304. u_char buf_empt_ratio;
  305. u_char bus_inact_limit[2];
  306. u_char disc_time_limit[2];
  307. u_char conn_time_limit[2];
  308. u_char max_burst_size[2]; /* Start SCSI-2 */
  309. Ucbit : 6;
  310. Ucbit data_tr_dis_ctl : 2;
  311. u_char res[3];
  312. };
  313. #endif
  314. #define DTDC_DATADONE 0x01 /*
  315.  * Target may not disconnect once
  316.  * data transfer is started until
  317.  * all data successfully transferred.
  318.  */
  319. #define DTDC_CMDDONE 0x03 /*
  320.  * Target may not disconnect once
  321.  * data transfer is started until
  322.  * command completed.
  323.  */
  324. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  325. struct scsi_mode_page_03 { /* Direct access format Paramters */
  326. MP_P_CODE; /* parsave & pagecode */
  327. u_char p_len; /* 0x16 = 24 Bytes */
  328. u_char trk_per_zone[2];
  329. u_char alt_sec_per_zone[2];
  330. u_char alt_trk_per_zone[2];
  331. u_char alt_trk_per_vol[2];
  332. u_char sect_per_trk[2];
  333. u_char bytes_per_phys_sect[2];
  334. u_char interleave[2];
  335. u_char trk_skew[2];
  336. u_char cyl_skew[2];
  337. Ucbit : 3;
  338. Ucbit inhibit_save : 1;
  339. Ucbit fmt_by_surface : 1;
  340. Ucbit removable : 1;
  341. Ucbit hard_sec : 1;
  342. Ucbit soft_sec : 1;
  343. u_char res[3];
  344. };
  345. #else /* Motorola byteorder */
  346. struct scsi_mode_page_03 { /* Direct access format Paramters */
  347. MP_P_CODE; /* parsave & pagecode */
  348. u_char p_len; /* 0x16 = 24 Bytes */
  349. u_char trk_per_zone[2];
  350. u_char alt_sec_per_zone[2];
  351. u_char alt_trk_per_zone[2];
  352. u_char alt_trk_per_vol[2];
  353. u_char sect_per_trk[2];
  354. u_char bytes_per_phys_sect[2];
  355. u_char interleave[2];
  356. u_char trk_skew[2];
  357. u_char cyl_skew[2];
  358. Ucbit soft_sec : 1;
  359. Ucbit hard_sec : 1;
  360. Ucbit removable : 1;
  361. Ucbit fmt_by_surface : 1;
  362. Ucbit inhibit_save : 1;
  363. Ucbit : 3;
  364. u_char res[3];
  365. };
  366. #endif
  367. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  368. struct scsi_mode_page_04 { /* Rigid disk Geometry Parameters */
  369. MP_P_CODE; /* parsave & pagecode */
  370. u_char p_len; /* 0x16 = 24 Bytes */
  371. u_char ncyl[3];
  372. u_char nhead;
  373. u_char start_precomp[3];
  374. u_char start_red_wcurrent[3];
  375. u_char step_rate[2];
  376. u_char landing_zone[3];
  377. Ucbit rot_pos_locking : 2; /* Start SCSI-2 */
  378. Ucbit : 6; /* Start SCSI-2 */
  379. u_char rotational_off;
  380. u_char res1;
  381. u_char rotation_rate[2];
  382. u_char res2[2];
  383. };
  384. #else /* Motorola byteorder */
  385. struct scsi_mode_page_04 { /* Rigid disk Geometry Parameters */
  386. MP_P_CODE; /* parsave & pagecode */
  387. u_char p_len; /* 0x16 = 24 Bytes */
  388. u_char ncyl[3];
  389. u_char nhead;
  390. u_char start_precomp[3];
  391. u_char start_red_wcurrent[3];
  392. u_char step_rate[2];
  393. u_char landing_zone[3];
  394. Ucbit : 6; /* Start SCSI-2 */
  395. Ucbit rot_pos_locking : 2; /* Start SCSI-2 */
  396. u_char rotational_off;
  397. u_char res1;
  398. u_char rotation_rate[2];
  399. u_char res2[2];
  400. };
  401. #endif
  402. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  403. struct scsi_mode_page_05 { /* Flexible disk Parameters */
  404. MP_P_CODE; /* parsave & pagecode */
  405. u_char p_len; /* 0x1E = 32 Bytes */
  406. u_char transfer_rate[2];
  407. u_char nhead;
  408. u_char sect_per_trk;
  409. u_char bytes_per_phys_sect[2];
  410. u_char ncyl[2];
  411. u_char start_precomp[2];
  412. u_char start_red_wcurrent[2];
  413. u_char step_rate[2];
  414. u_char step_pulse_width;
  415. u_char head_settle_delay[2];
  416. u_char motor_on_delay;
  417. u_char motor_off_delay;
  418. Ucbit spc : 4;
  419. Ucbit : 4;
  420. Ucbit : 5;
  421. Ucbit mo : 1;
  422. Ucbit ssn : 1;
  423. Ucbit trdy : 1;
  424. u_char write_compensation;
  425. u_char head_load_delay;
  426. u_char head_unload_delay;
  427. Ucbit pin_2_use : 4;
  428. Ucbit pin_34_use : 4;
  429. Ucbit pin_1_use : 4;
  430. Ucbit pin_4_use : 4;
  431. u_char rotation_rate[2];
  432. u_char res[2];
  433. };
  434. #else /* Motorola byteorder */
  435. struct scsi_mode_page_05 { /* Flexible disk Parameters */
  436. MP_P_CODE; /* parsave & pagecode */
  437. u_char p_len; /* 0x1E = 32 Bytes */
  438. u_char transfer_rate[2];
  439. u_char nhead;
  440. u_char sect_per_trk;
  441. u_char bytes_per_phys_sect[2];
  442. u_char ncyl[2];
  443. u_char start_precomp[2];
  444. u_char start_red_wcurrent[2];
  445. u_char step_rate[2];
  446. u_char step_pulse_width;
  447. u_char head_settle_delay[2];
  448. u_char motor_on_delay;
  449. u_char motor_off_delay;
  450. Ucbit trdy : 1;
  451. Ucbit ssn : 1;
  452. Ucbit mo : 1;
  453. Ucbit : 5;
  454. Ucbit : 4;
  455. Ucbit spc : 4;
  456. u_char write_compensation;
  457. u_char head_load_delay;
  458. u_char head_unload_delay;
  459. Ucbit pin_34_use : 4;
  460. Ucbit pin_2_use : 4;
  461. Ucbit pin_4_use : 4;
  462. Ucbit pin_1_use : 4;
  463. u_char rotation_rate[2];
  464. u_char res[2];
  465. };
  466. #endif
  467. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  468. struct scsi_mode_page_07 { /* Verify Error recovery */
  469. MP_P_CODE; /* parsave & pagecode */
  470. u_char p_len; /* 0x0A = 12 Bytes */
  471. Ucbit disa_correction : 1; /* Byte 2 */
  472. Ucbit term_on_rec_err : 1;
  473. Ucbit report_rec_err : 1;
  474. Ucbit en_early_corr : 1;
  475. Ucbit res : 4; /* Byte 2 */
  476. u_char ve_retry_count; /* Byte 3 */
  477. u_char ve_correction_span;
  478. char res2[5]; /* Byte 5 */
  479. u_char ve_recov_timelim[2]; /* Byte 10 */
  480. };
  481. #else /* Motorola byteorder */
  482. struct scsi_mode_page_07 { /* Verify Error recovery */
  483. MP_P_CODE; /* parsave & pagecode */
  484. u_char p_len; /* 0x0A = 12 Bytes */
  485. Ucbit res : 4; /* Byte 2 */
  486. Ucbit en_early_corr : 1;
  487. Ucbit report_rec_err : 1;
  488. Ucbit term_on_rec_err : 1;
  489. Ucbit disa_correction : 1; /* Byte 2 */
  490. u_char ve_retry_count; /* Byte 3 */
  491. u_char ve_correction_span;
  492. char res2[5]; /* Byte 5 */
  493. u_char ve_recov_timelim[2]; /* Byte 10 */
  494. };
  495. #endif
  496. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  497. struct scsi_mode_page_08 { /* Caching Parameters */
  498. MP_P_CODE; /* parsave & pagecode */
  499. u_char p_len; /* 0x0A = 12 Bytes */
  500. Ucbit disa_rd_cache : 1; /* Byte 2 */
  501. Ucbit muliple_fact : 1;
  502. Ucbit en_wt_cache : 1;
  503. Ucbit res : 5; /* Byte 2 */
  504. Ucbit wt_ret_pri : 4; /* Byte 3 */
  505. Ucbit demand_rd_ret_pri: 4; /* Byte 3 */
  506. u_char disa_pref_tr_len[2]; /* Byte 4 */
  507. u_char min_pref[2]; /* Byte 6 */
  508. u_char max_pref[2]; /* Byte 8 */
  509. u_char max_pref_ceiling[2]; /* Byte 10 */
  510. };
  511. #else /* Motorola byteorder */
  512. struct scsi_mode_page_08 { /* Caching Parameters */
  513. MP_P_CODE; /* parsave & pagecode */
  514. u_char p_len; /* 0x0A = 12 Bytes */
  515. Ucbit res : 5; /* Byte 2 */
  516. Ucbit en_wt_cache : 1;
  517. Ucbit muliple_fact : 1;
  518. Ucbit disa_rd_cache : 1; /* Byte 2 */
  519. Ucbit demand_rd_ret_pri: 4; /* Byte 3 */
  520. Ucbit wt_ret_pri : 4;
  521. u_char disa_pref_tr_len[2]; /* Byte 4 */
  522. u_char min_pref[2]; /* Byte 6 */
  523. u_char max_pref[2]; /* Byte 8 */
  524. u_char max_pref_ceiling[2]; /* Byte 10 */
  525. };
  526. #endif
  527. struct scsi_mode_page_09 { /* Peripheral device Parameters */
  528. MP_P_CODE; /* parsave & pagecode */
  529. u_char p_len; /* >= 0x06 = 8 Bytes */
  530. u_char interface_id[2]; /* Byte 2 */
  531. u_char res[4]; /* Byte 4 */
  532. u_char vendor_specific[1]; /* Byte 8 */
  533. };
  534. #define PDEV_SCSI 0x0000 /* scsi interface */
  535. #define PDEV_SMD 0x0001 /* SMD interface */
  536. #define PDEV_ESDI 0x0002 /* ESDI interface */
  537. #define PDEV_IPI2 0x0003 /* IPI-2 interface */
  538. #define PDEV_IPI3 0x0004 /* IPI-3 interface */
  539. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  540. struct scsi_mode_page_0A { /* Common device Control Parameters */
  541. MP_P_CODE; /* parsave & pagecode */
  542. u_char p_len; /* 0x06 = 8 Bytes */
  543. Ucbit rep_log_exeption: 1; /* Byte 2 */
  544. Ucbit res : 7; /* Byte 2 */
  545. Ucbit dis_queuing : 1; /* Byte 3 */
  546. Ucbit queuing_err_man : 1;
  547. Ucbit res2 : 2;
  548. Ucbit queue_alg_mod : 4; /* Byte 3 */
  549. Ucbit EAENP : 1; /* Byte 4 */
  550. Ucbit UAENP : 1;
  551. Ucbit RAENP : 1;
  552. Ucbit res3 : 4;
  553. Ucbit en_ext_cont_all : 1; /* Byte 4 */
  554. Ucbit res4 : 8;
  555. u_char ready_aen_hold_per[2]; /* Byte 6 */
  556. };
  557. #else /* Motorola byteorder */
  558. struct scsi_mode_page_0A { /* Common device Control Parameters */
  559. MP_P_CODE; /* parsave & pagecode */
  560. u_char p_len; /* 0x06 = 8 Bytes */
  561. Ucbit res : 7; /* Byte 2 */
  562. Ucbit rep_log_exeption: 1; /* Byte 2 */
  563. Ucbit queue_alg_mod : 4; /* Byte 3 */
  564. Ucbit res2 : 2;
  565. Ucbit queuing_err_man : 1;
  566. Ucbit dis_queuing : 1; /* Byte 3 */
  567. Ucbit en_ext_cont_all : 1; /* Byte 4 */
  568. Ucbit res3 : 4;
  569. Ucbit RAENP : 1;
  570. Ucbit UAENP : 1;
  571. Ucbit EAENP : 1; /* Byte 4 */
  572. Ucbit res4 : 8;
  573. u_char ready_aen_hold_per[2]; /* Byte 6 */
  574. };
  575. #endif
  576. #define CTRL_QMOD_RESTRICT 0x0
  577. #define CTRL_QMOD_UNRESTRICT 0x1
  578. struct scsi_mode_page_0B { /* Medium Types Supported Parameters */
  579. MP_P_CODE; /* parsave & pagecode */
  580. u_char p_len; /* 0x06 = 8 Bytes */
  581. u_char res[2]; /* Byte 2 */
  582. u_char medium_one_supp; /* Byte 4 */
  583. u_char medium_two_supp; /* Byte 5 */
  584. u_char medium_three_supp; /* Byte 6 */
  585. u_char medium_four_supp; /* Byte 7 */
  586. };
  587. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  588. struct scsi_mode_page_0C { /* Notch & Partition Parameters */
  589. MP_P_CODE; /* parsave & pagecode */
  590. u_char p_len; /* 0x16 = 24 Bytes */
  591. Ucbit res : 6; /* Byte 2 */
  592. Ucbit logical_notch : 1;
  593. Ucbit notched_drive : 1; /* Byte 2 */
  594. u_char res2; /* Byte 3 */
  595. u_char max_notches[2]; /* Byte 4  */
  596. u_char active_notch[2]; /* Byte 6  */
  597. u_char starting_boundary[4]; /* Byte 8  */
  598. u_char ending_boundary[4]; /* Byte 12 */
  599. u_char pages_notched[8]; /* Byte 16 */
  600. };
  601. #else /* Motorola byteorder */
  602. struct scsi_mode_page_0C { /* Notch & Partition Parameters */
  603. MP_P_CODE; /* parsave & pagecode */
  604. u_char p_len; /* 0x16 = 24 Bytes */
  605. Ucbit notched_drive : 1; /* Byte 2 */
  606. Ucbit logical_notch : 1;
  607. Ucbit res : 6; /* Byte 2 */
  608. u_char res2; /* Byte 3 */
  609. u_char max_notches[2]; /* Byte 4  */
  610. u_char active_notch[2]; /* Byte 6  */
  611. u_char starting_boundary[4]; /* Byte 8  */
  612. u_char ending_boundary[4]; /* Byte 12 */
  613. u_char pages_notched[8]; /* Byte 16 */
  614. };
  615. #endif
  616. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  617. struct scsi_mode_page_0D { /* CD-ROM Parameters */
  618. MP_P_CODE; /* parsave & pagecode */
  619. u_char p_len; /* 0x06 = 8 Bytes */
  620. u_char res; /* Byte 2 */
  621. Ucbit inact_timer_mult: 4; /* Byte 3 */
  622. Ucbit res2 : 4; /* Byte 3 */
  623. u_char s_un_per_m_un[2]; /* Byte 4  */
  624. u_char f_un_per_s_un[2]; /* Byte 6  */
  625. };
  626. #else /* Motorola byteorder */
  627. struct scsi_mode_page_0D { /* CD-ROM Parameters */
  628. MP_P_CODE; /* parsave & pagecode */
  629. u_char p_len; /* 0x06 = 8 Bytes */
  630. u_char res; /* Byte 2 */
  631. Ucbit res2 : 4; /* Byte 3 */
  632. Ucbit inact_timer_mult: 4; /* Byte 3 */
  633. u_char s_un_per_m_un[2]; /* Byte 4  */
  634. u_char f_un_per_s_un[2]; /* Byte 6  */
  635. };
  636. #endif
  637. struct sony_mode_page_20 { /* Sony Format Mode Parameters */
  638. MP_P_CODE; /* parsave & pagecode */
  639. u_char p_len; /* 0x0A = 12 Bytes */
  640. u_char format_mode;
  641. u_char format_type;
  642. #define num_bands user_band_size /* Gilt bei Type 1 */
  643. u_char user_band_size[4]; /* Gilt bei Type 0 */
  644. u_char spare_band_size[2];
  645. u_char res[2];
  646. };
  647. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  648. struct toshiba_mode_page_20 { /* Toshiba Speed Control Parameters */
  649. MP_P_CODE; /* parsave & pagecode */
  650. u_char p_len; /* 0x01 = 3 Bytes */
  651. Ucbit speed : 1;
  652. Ucbit res : 7;
  653. };
  654. #else /* Motorola byteorder */
  655. struct toshiba_mode_page_20 { /* Toshiba Speed Control Parameters */
  656. MP_P_CODE; /* parsave & pagecode */
  657. u_char p_len; /* 0x01 = 3 Bytes */
  658. Ucbit res : 7;
  659. Ucbit speed : 1;
  660. };
  661. #endif
  662. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  663. struct ccs_mode_page_38 { /* CCS Caching Parameters */
  664. MP_P_CODE; /* parsave & pagecode */
  665. u_char p_len; /* 0x0E = 14 Bytes */
  666. Ucbit cache_table_size: 4; /* Byte 3 */
  667. Ucbit cache_en : 1;
  668. Ucbit res2 : 1;
  669. Ucbit wr_index_en : 1;
  670. Ucbit res : 1; /* Byte 3 */
  671. u_char threshold; /* Byte 4 Prefetch threshold */
  672. u_char max_prefetch; /* Byte 5 Max. prefetch */
  673. u_char max_multiplier; /* Byte 6 Max. prefetch multiplier */
  674. u_char min_prefetch; /* Byte 7 Min. prefetch */
  675. u_char min_multiplier; /* Byte 8 Min. prefetch multiplier */
  676. u_char res3[8]; /* Byte 9 */
  677. };
  678. #else /* Motorola byteorder */
  679. struct ccs_mode_page_38 { /* CCS Caching Parameters */
  680. MP_P_CODE; /* parsave & pagecode */
  681. u_char p_len; /* 0x0E = 14 Bytes */
  682. Ucbit res : 1; /* Byte 3 */
  683. Ucbit wr_index_en : 1;
  684. Ucbit res2 : 1;
  685. Ucbit cache_en : 1;
  686. Ucbit cache_table_size: 4; /* Byte 3 */
  687. u_char threshold; /* Byte 4 Prefetch threshold */
  688. u_char max_prefetch; /* Byte 5 Max. prefetch */
  689. u_char max_multiplier; /* Byte 6 Max. prefetch multiplier */
  690. u_char min_prefetch; /* Byte 7 Min. prefetch */
  691. u_char min_multiplier; /* Byte 8 Min. prefetch multiplier */
  692. u_char res3[8]; /* Byte 9 */
  693. };
  694. #endif
  695. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  696. struct cd_mode_page_05 { /* write parameters */
  697. MP_P_CODE; /* parsave & pagecode */
  698. u_char p_len; /* 0x32 = 50 Bytes */
  699. Ucbit write_type : 4; /* Session write type (PACKET/TAO...)*/
  700. Ucbit test_write : 1; /* Do not actually write data      */
  701. Ucbit res_2 : 3;
  702. Ucbit track_mode : 4; /* Track mode (Q-sub control nibble) */
  703. Ucbit copy : 1; /* 1st higher gen of copy prot track ~*/
  704. Ucbit fp : 1; /* Fixed packed (if in packet mode)  */
  705. Ucbit multi_session : 2; /* Multi session write type      */
  706. Ucbit dbtype : 4; /* Data block type      */
  707. Ucbit res_4 : 4; /* Reserved      */
  708. u_char res_56[2]; /* Reserved      */
  709. Ucbit host_appl_code : 6; /* Host application code of disk     */
  710. Ucbit res_7 : 2; /* Reserved      */
  711. u_char session_format; /* Session format (DA/CDI/XA)      */
  712. u_char res_9; /* Reserved      */
  713. u_char packet_size[4]; /* # of user datablocks/fixed packet */
  714. u_char audio_pause_len[2]; /* # of blocks where index is zero   */
  715. u_char media_cat_number[16]; /* Media catalog Number (MCN)      */
  716. u_char ISRC[14]; /* ISRC for this track      */
  717. u_char sub_header[4];
  718. u_char vendor_uniq[4];
  719. };
  720. #else /* Motorola byteorder */
  721. struct cd_mode_page_05 { /* write parameters */
  722. MP_P_CODE; /* parsave & pagecode */
  723. u_char p_len; /* 0x32 = 50 Bytes */
  724. Ucbit res_2 : 3;
  725. Ucbit test_write : 1; /* Do not actually write data      */
  726. Ucbit write_type : 4; /* Session write type (PACKET/TAO...)*/
  727. Ucbit multi_session : 2; /* Multi session write type      */
  728. Ucbit fp : 1; /* Fixed packed (if in packet mode)  */
  729. Ucbit copy : 1; /* 1st higher gen of copy prot track */
  730. Ucbit track_mode : 4; /* Track mode (Q-sub control nibble) */
  731. Ucbit res_4 : 4; /* Reserved      */
  732. Ucbit dbtype : 4; /* Data block type      */
  733. u_char res_56[2]; /* Reserved      */
  734. Ucbit res_7 : 2; /* Reserved      */
  735. Ucbit host_appl_code : 6; /* Host application code of disk     */
  736. u_char session_format; /* Session format (DA/CDI/XA)      */
  737. u_char res_9; /* Reserved      */
  738. u_char packet_size[4]; /* # of user datablocks/fixed packet */
  739. u_char audio_pause_len[2]; /* # of blocks where index is zero   */
  740. u_char media_cat_number[16]; /* Media catalog Number (MCN)      */
  741. u_char ISRC[14]; /* ISRC for this track      */
  742. u_char sub_header[4];
  743. u_char vendor_uniq[4];
  744. };
  745. #endif
  746. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  747. struct cd_mode_page_2A { /* CD Cap / mech status */
  748. MP_P_CODE; /* parsave & pagecode */
  749. u_char p_len; /* 0x14 = 20 Bytes */
  750. Ucbit cd_r_read : 1; /* Reads CD-R  media      */
  751. Ucbit cd_rw_read : 1; /* Reads CD-RW media      */
  752. Ucbit method2 : 1; /* Reads fixed packet method2 media  */
  753. Ucbit dvd_rom_read : 1; /* Reads DVD ROM media      */
  754. Ucbit dvd_r_read : 1; /* Reads DVD-R media      */
  755. Ucbit dvd_ram_read : 1; /* Reads DVD-RAM media      */
  756. Ucbit res_2_67 : 2; /* Reserved      */
  757. Ucbit cd_r_write : 1; /* Supports writing CD-R  media      */
  758. Ucbit cd_rw_write : 1; /* Supports writing CD-RW media      */
  759. Ucbit test_write : 1; /* Supports emulation write      */
  760. Ucbit res_3_3 : 1; /* Reserved      */
  761. Ucbit dvd_r_write : 1; /* Supports writing DVD-R media      */
  762. Ucbit dvd_ram_write : 1; /* Supports writing DVD-RAM media    */
  763. Ucbit res_3_67 : 2; /* Reserved      */
  764. Ucbit audio_play : 1; /* Supports Audio play operation     */
  765. Ucbit composite : 1; /* Deliveres composite A/V stream    */
  766. Ucbit digital_port_2 : 1; /* Supports digital output on port 2 */
  767. Ucbit digital_port_1 : 1; /* Supports digital output on port 1 */
  768. Ucbit mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA)    */
  769. Ucbit mode_2_form_2 : 1; /* Reads Mode-2 form 2 media      */
  770. Ucbit multi_session : 1; /* Reads multi-session media      */
  771. Ucbit res_4 : 1; /* Reserved      */
  772. Ucbit cd_da_supported : 1; /* Reads audio data with READ CD cmd */
  773. Ucbit cd_da_accurate : 1; /* READ CD data stream is accurate   */
  774. Ucbit rw_supported : 1; /* Reads R-W sub channel information */
  775. Ucbit rw_deint_corr : 1; /* Reads de-interleved R-W sub chan  */
  776. Ucbit c2_pointers : 1; /* Supports C2 error pointers      */
  777. Ucbit ISRC : 1; /* Reads ISRC information      */
  778. Ucbit UPC : 1; /* Reads media catalog number (UPC)  */
  779. Ucbit read_bar_code : 1; /* Supports reading bar codes      */
  780. Ucbit lock : 1; /* PREVENT/ALLOW may lock media      */
  781. Ucbit lock_state : 1; /* Lock state 0=unlocked 1=locked    */
  782. Ucbit prevent_jumper : 1; /* State of prev/allow jumper 0=pres */
  783. Ucbit eject : 1; /* Ejects disc/cartr with STOP LoEj  */
  784. Ucbit res_6_4 : 1; /* Reserved      */
  785. Ucbit loading_type : 3; /* Loading mechanism type      */
  786. Ucbit sep_chan_vol : 1; /* Vol controls each channel separat */
  787. Ucbit sep_chan_mute : 1; /* Mute controls each channel separat*/
  788. Ucbit disk_present_rep: 1; /* Changer supports disk present rep */
  789. Ucbit sw_slot_sel : 1; /* Load empty slot in changer      */
  790. Ucbit res_7 : 4; /* Reserved      */
  791. u_char max_read_speed[2]; /* Max. read speed in KB/s      */
  792. u_char num_vol_levels[2]; /* # of supported volume levels      */
  793. u_char buffer_size[2]; /* Buffer size for the data in KB    */
  794. u_char cur_read_speed[2]; /* Current read speed in KB/s      */
  795. u_char res_16; /* Reserved      */
  796. Ucbit res_17_0 : 1; /* Reserved      */
  797. Ucbit BCK : 1; /* Data valid on falling edge of BCK */
  798. Ucbit RCK : 1; /* Set: HIGH high LRCK=left channel  */
  799. Ucbit LSBF : 1; /* Set: LSB first Clear: MSB first   */
  800. Ucbit length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/
  801. Ucbit res_17 : 2; /* Reserved      */
  802. u_char max_write_speed[2]; /* Max. write speed supported in KB/s*/
  803. u_char cur_write_speed[2]; /* Current write speed in KB/s      */
  804. };
  805. #else /* Motorola byteorder */
  806. struct cd_mode_page_2A { /* CD Cap / mech status */
  807. MP_P_CODE; /* parsave & pagecode */
  808. u_char p_len; /* 0x14 = 20 Bytes */
  809. Ucbit res_2_67 : 2; /* Reserved      */
  810. Ucbit dvd_ram_read : 1; /* Reads DVD-RAM media      */
  811. Ucbit dvd_r_read : 1; /* Reads DVD-R media      */
  812. Ucbit dvd_rom_read : 1; /* Reads DVD ROM media      */
  813. Ucbit method2 : 1; /* Reads fixed packet method2 media  */
  814. Ucbit cd_rw_read : 1; /* Reads CD-RW media      */
  815. Ucbit cd_r_read : 1; /* Reads CD-R  media      */
  816. Ucbit res_3_67 : 2; /* Reserved      */
  817. Ucbit dvd_ram_write : 1; /* Supports writing DVD-RAM media    */
  818. Ucbit dvd_r_write : 1; /* Supports writing DVD-R media      */
  819. Ucbit res_3_3 : 1; /* Reserved      */
  820. Ucbit test_write : 1; /* Supports emulation write      */
  821. Ucbit cd_rw_write : 1; /* Supports writing CD-RW media      */
  822. Ucbit cd_r_write : 1; /* Supports writing CD-R  media      */
  823. Ucbit res_4 : 1; /* Reserved      */
  824. Ucbit multi_session : 1; /* Reads multi-session media      */
  825. Ucbit mode_2_form_2 : 1; /* Reads Mode-2 form 2 media      */
  826. Ucbit mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA)    */
  827. Ucbit digital_port_1 : 1; /* Supports digital output on port 1 */
  828. Ucbit digital_port_2 : 1; /* Supports digital output on port 2 */
  829. Ucbit composite : 1; /* Deliveres composite A/V stream    */
  830. Ucbit audio_play : 1; /* Supports Audio play operation     */
  831. Ucbit read_bar_code : 1; /* Supports reading bar codes      */
  832. Ucbit UPC : 1; /* Reads media catalog number (UPC)  */
  833. Ucbit ISRC : 1; /* Reads ISRC information      */
  834. Ucbit c2_pointers : 1; /* Supports C2 error pointers      */
  835. Ucbit rw_deint_corr : 1; /* Reads de-interleved R-W sub chan  */
  836. Ucbit rw_supported : 1; /* Reads R-W sub channel information */
  837. Ucbit cd_da_accurate : 1; /* READ CD data stream is accurate   */
  838. Ucbit cd_da_supported : 1; /* Reads audio data with READ CD cmd */
  839. Ucbit loading_type : 3; /* Loading mechanism type      */
  840. Ucbit res_6_4 : 1; /* Reserved      */
  841. Ucbit eject : 1; /* Ejects disc/cartr with STOP LoEj  */
  842. Ucbit prevent_jumper : 1; /* State of prev/allow jumper 0=pres */
  843. Ucbit lock_state : 1; /* Lock state 0=unlocked 1=locked    */
  844. Ucbit lock : 1; /* PREVENT/ALLOW may lock media      */
  845. Ucbit res_7 : 4; /* Reserved      */
  846. Ucbit sw_slot_sel : 1; /* Load empty slot in changer      */
  847. Ucbit disk_present_rep: 1; /* Changer supports disk present rep */
  848. Ucbit sep_chan_mute : 1; /* Mute controls each channel separat*/
  849. Ucbit sep_chan_vol : 1; /* Vol controls each channel separat */
  850. u_char max_read_speed[2]; /* Max. read speed in KB/s      */
  851. u_char num_vol_levels[2]; /* # of supported volume levels      */
  852. u_char buffer_size[2]; /* Buffer size for the data in KB    */
  853. u_char cur_read_speed[2]; /* Current read speed in KB/s      */
  854. u_char res_16; /* Reserved      */
  855. Ucbit res_17 : 2; /* Reserved      */
  856. Ucbit length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/
  857. Ucbit LSBF : 1; /* Set: LSB first Clear: MSB first   */
  858. Ucbit RCK : 1; /* Set: HIGH high LRCK=left channel  */
  859. Ucbit BCK : 1; /* Data valid on falling edge of BCK */
  860. Ucbit res_17_0 : 1; /* Reserved      */
  861. u_char max_write_speed[2]; /* Max. write speed supported in KB/s*/
  862. u_char cur_write_speed[2]; /* Current write speed in KB/s      */
  863. };
  864. #endif
  865. #define LT_CADDY 0
  866. #define LT_TRAY 1
  867. #define LT_POP_UP 2
  868. #define LT_RES3 3
  869. #define LT_CHANGER_IND 4
  870. #define LT_CHANGER_CART 5
  871. #define LT_RES6 6
  872. #define LT_RES7 7
  873. struct scsi_mode_data {
  874. struct scsi_mode_header header;
  875. struct scsi_mode_blockdesc blockdesc;
  876. union pagex {
  877. struct acb_mode_data acb;
  878. struct scsi_mode_page_01 page1;
  879. struct scsi_mode_page_02 page2;
  880. struct scsi_mode_page_03 page3;
  881. struct scsi_mode_page_04 page4;
  882. struct scsi_mode_page_05 page5;
  883. struct scsi_mode_page_07 page7;
  884. struct scsi_mode_page_08 page8;
  885. struct scsi_mode_page_09 page9;
  886. struct scsi_mode_page_0A pageA;
  887. struct scsi_mode_page_0B pageB;
  888. struct scsi_mode_page_0C pageC;
  889. struct scsi_mode_page_0D pageD;
  890. struct sony_mode_page_20 sony20;
  891. struct toshiba_mode_page_20 toshiba20;
  892. struct ccs_mode_page_38 ccs38;
  893. } pagex;
  894. };
  895. struct scsi_capacity {
  896. Int32_t c_baddr; /* must convert byteorder!! */
  897. Int32_t c_bsize; /* must convert byteorder!! */
  898. };
  899. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  900. struct scsi_def_header {
  901. Ucbit : 8;
  902. Ucbit format : 3;
  903. Ucbit gdl : 1;
  904. Ucbit mdl : 1;
  905. Ucbit : 3;
  906. u_char length[2];
  907. };
  908. #else /* Motorola byteorder */
  909. struct scsi_def_header {
  910. Ucbit : 8;
  911. Ucbit : 3;
  912. Ucbit mdl : 1;
  913. Ucbit gdl : 1;
  914. Ucbit format : 3;
  915. u_char length[2];
  916. };
  917. #endif
  918. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  919. struct scsi_format_header {
  920. Ucbit res : 8; /* Adaptec 5500: 1 --> format track */
  921. Ucbit vu : 1;
  922. Ucbit : 3;
  923. Ucbit serr : 1; /* Stop on error     */
  924. Ucbit dcert : 1; /* Disable certification     */
  925. Ucbit dmdl : 1; /* Disable manufacturer defect list */
  926. Ucbit enable : 1; /* Enable to use the next 3 bits    */
  927. u_char length[2]; /* Length of following list in bytes*/
  928. };
  929. #else /* Motorola byteorder */
  930. struct scsi_format_header {
  931. Ucbit res : 8; /* Adaptec 5500: 1 --> format track */
  932. Ucbit enable : 1; /* Enable to use the next 3 bits    */
  933. Ucbit dmdl : 1; /* Disable manufacturer defect list */
  934. Ucbit dcert : 1; /* Disable certification     */
  935. Ucbit serr : 1; /* Stop on error     */
  936. Ucbit : 3;
  937. Ucbit vu : 1;
  938. u_char length[2]; /* Length of following list in bytes*/
  939. };
  940. #endif
  941. struct scsi_def_bfi {
  942. u_char cyl[3];
  943. u_char head;
  944. u_char bfi[4];
  945. };
  946. struct scsi_def_phys {
  947. u_char cyl[3];
  948. u_char head;
  949. u_char sec[4];
  950. };
  951. struct scsi_def_list {
  952. struct scsi_def_header hd;
  953. union {
  954. u_char list_block[1][4];
  955. struct scsi_def_bfi list_bfi[1];
  956. struct scsi_def_phys list_phys[1];
  957. } def_list;
  958. };
  959. struct scsi_format_data {
  960. struct scsi_format_header hd;
  961. union {
  962. u_char list_block[1][4];
  963. struct scsi_def_bfi list_bfi[1];
  964. struct scsi_def_phys list_phys[1];
  965. } def_list;
  966. };
  967. #define def_block def_list.list_block
  968. #define def_bfi def_list.list_bfi
  969. #define def_phys def_list.list_phys
  970. #define SC_DEF_BLOCK 0
  971. #define SC_DEF_BFI 4
  972. #define SC_DEF_PHYS 5
  973. #define SC_DEF_VU 6
  974. #define SC_DEF_RES 7
  975. struct scsi_send_diag_cmd {
  976. u_char cmd;
  977. u_char addr[4];
  978. Ucbit : 8;
  979. };
  980. #if defined(_BIT_FIELDS_LTOH) /* Intel byteorder */
  981. struct scsi_sector_header {
  982. u_char cyl[2];
  983. u_char head;
  984. u_char sec;
  985. Ucbit : 5;
  986. Ucbit rp : 1;
  987. Ucbit sp : 1;
  988. Ucbit dt : 1;
  989. };
  990. #else /* Motorola byteorder */
  991. struct scsi_sector_header {
  992. u_char cyl[2];
  993. u_char head;
  994. u_char sec;
  995. Ucbit dt : 1;
  996. Ucbit sp : 1;
  997. Ucbit rp : 1;
  998. Ucbit : 5;
  999. };
  1000. #endif
  1001. #endif /* _SCSIREG_H */