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