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