]> git.proxmox.com Git - mirror_smartmontools-debian.git/blob - os_qnxnto.h
Stop passing arguments to dh_installinit
[mirror_smartmontools-debian.git] / os_qnxnto.h
1 /*
2 * os_generic.h
3 *
4 * Home page of code is: http://www.smartmontools.org
5 *
6 * Copyright (C) Joerg Hering <smartmontools-support@lists.sourceforge.net>
7 * Copyright (C) 2003-8 Bruce Allen <smartmontools-support@lists.sourceforge.net>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2, or (at your option)
12 * any later version.
13 *
14 * You should have received a copy of the GNU General Public License
15 * (for example COPYING); if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * This code was originally developed as a Senior Thesis by Michael Cornwell
19 * at the Concurrent Systems Laboratory (now part of the Storage Systems
20 * Research Center), Jack Baskin School of Engineering, University of
21 * California, Santa Cruz. http://ssrc.soe.ucsc.edu/
22 *
23 */
24 #ifndef OS_QNXNTO_H_
25 #define OS_QNXNTO_H_
26 #define OS_QNXNTO_H_CVSID "$Id: os_qnxnto.h 4120 2015-08-27 16:12:21Z samm2 $\n"
27
28 // Additional material should start here. Note: to keep the '-V' CVS
29 // reporting option working as intended, you should only #include
30 // system include files <something.h>. Local #include files
31 // <"something.h"> should be #included in os_generic.c
32 #include <sys/cpt.h>
33
34 #ifndef __TYPES_H_INCLUDED
35 #include <sys/types.h>
36 #endif
37
38 #include <stdio.h>
39 #include <fcntl.h>
40 #include <gulliver.h>
41 #include <sys/cpt.h>
42 #include <sys/dcmd_cam.h>
43 #include <sys/cam_device.h>
44 #include "atacmds.h"
45
46 //----------------------------------------------------------------------------------------------------------
47 typedef struct _ata_pass_thru ATA_PASS_THRU;
48 typedef struct _eide_identify EIDE_IDENTIFY;
49 typedef struct _ata_sense ATA_SENSE;
50
51 typedef void CCB;
52 struct _sim_hba;
53 struct _resmgr_context;
54
55
56 typedef struct _drive_attribute
57 {
58 int id;
59 int threshold;
60 char *name;
61 }DRIVE_ATTRIBUTE;
62
63 //----------------------------------------------------------------------------------------------------------
64 /* UNIVOS OSD defines and data structures. */
65
66 #define INQLEN 36 /* Inquiry string length to store. */
67
68 #define CAM_SUCCESS 0 /* For signaling general success */
69 #define CAM_FAILURE 1 /* For signaling general failure */
70
71 #define CAM_FALSE 0 /* General purpose flag value */
72 #define CAM_TRUE 1 /* General purpose flag value */
73
74 //----------------------------------------------------------------------------------------------------------
75 // Group 3 and 4, command codes 60H-9FH are reserved
76 #define SC_ATA_PT16 0x85 // ATA Pass-through
77 //----------------------------------------------------------------------------------------------------------
78 #define ATA_SMART_LBA_MID_SIG 0x4f
79 #define ATA_SMART_LBA_HI_SIG 0xc2
80 #define ATA_SMART_SIG 0xc24f
81 //----------------------------------------------------------------------------------------------------------
82 struct _ata_pass_thru {
83 uchar_t opcode;
84 #define ATA_PROTO_MSK 0x1e
85 #define ATA_PROTO_RESPONSE (15 << 1)
86 #define ATA_PROTO_FPDMA (12 << 1)
87 #define ATA_PROTO_UDMA_DATA_OUT (11 << 1)
88 #define ATA_PROTO_UDMA_DATA_IN (10 << 1)
89 #define ATA_PROTO_DEVICE_RESET (9 << 1)
90 #define ATA_PROTO_DEVICE_DIAGNOSTIC (8 << 1)
91 #define ATA_PROTO_DMA_QUEUED (7 << 1)
92 #define ATA_PROTO_DMA (6 << 1)
93 #define ATA_PROTO_PIO_DATA_OUT (5 << 1)
94 #define ATA_PROTO_PIO_DATA_IN (4 << 1)
95 #define ATA_PROTO_DATA_NONE (3 << 1)
96 #define ATA_PROTO_SRST (1 << 1)
97 #define ATA_PROTO_HRST (0 << 1)
98 #define ATA_PROTO_EXTEND 0x01
99 uchar_t protocol; // multiple count, protocol
100 #define ATA_MCOUNT_MSK 0xe0
101
102 #define ATA_FLG_CK_COND 0x20
103 #define ATA_FLG_T_DIR 0x08 // data from device
104 #define ATA_FLG_BYT_BLOK 0x04
105 #define ATA_FLG_TLEN_STPSIU 0x03
106 #define ATA_FLG_TLEN_SECTOR_COUNT 0x02
107 #define ATA_FLG_TLEN_FEATURE 0x01
108 uchar_t flags;
109
110 uchar_t efeatures;
111 uchar_t features;
112 uchar_t esector_count;
113 uchar_t sector_count;
114 uchar_t elba_low;
115 uchar_t lba_low;
116 uchar_t elba_mid;
117 uchar_t lba_mid;
118 uchar_t elba_high;
119 uchar_t lba_high;
120 uchar_t device;
121 uchar_t command;
122 uchar_t control;
123 } ata_pass_thru_;
124 //----------------------------------------------------------------------------------------------------------
125 #define SENSE_DATA_FMT_DESCRIPTOR 0x02
126
127 // Fixed Format Sense Data Structure
128 // Note: The field "error" has the following format:
129 // bit 7 - Address valid bit
130 // bits 6-4 - Error class
131 // bits 3-0 - Error code
132 //
133 // Error classes 0-6 are vendor unique and also indicate that the
134 // sense data is in _nonextended_ format. (i.e. not usually used)
135 // struct _scsi_nonextended_sense {
136 // uchar_t sd_err;
137 // ulong_t sd_block_address;
138 // };
139 //
140 // An error class of 7 and an error code of 0 (70H) indicate SCSI-1
141 // extended sense data format (or SCSI-2 sense data format).
142 //
143 // An error class of 7 and an error code of 1 (71H) indicate SCSI-2
144 // deferred errors.
145 //
146 // Error codes 74H to 7EH are reserved and error code 7FH indicates
147 // a vendor-specific sense data format.
148 typedef struct _scsi_sense {
149 uchar_t error; // Error Code
150 uchar_t segment; // Segment number
151 uchar_t sense; // Sense key/flags
152 uchar_t info[4]; // Information (32bit big-endian value)
153 uchar_t asl; // Additional Sense Length
154 uchar_t csinfo[4]; // Command-Specific Information
155 uchar_t asc; // Additional Sense Code
156 uchar_t ascq; // Additional Sense Code Qualifier
157 uchar_t fruc; // Field Replaceable Unit Code
158 uchar_t sks; // Sense Key Specific
159 ushort_t sks_data; // Sense Key Specific Data (16bit big-endian)
160 ushort_t asb; // Additional Sense uchar_ts (Max 256-18)
161 } SCSI_SENSE;
162
163 // Descriptor Format Sense Data Structure
164 // error code of 72 current, 73 deferred
165 // extended sense data format (or SCSI-2 sense data format).
166 typedef struct _scsi_sense_descriptor {
167 uchar_t error; // Error Code
168 uchar_t sense; // Sense key/flags
169 uchar_t asc; // Additional Sense Code
170 uchar_t ascq; // Additional Sense Code Qualifier
171 uchar_t rsvd[3];
172 uchar_t asl; // Additional Sense Length
173 } SCSI_SENSE_DESCRIPTOR;
174
175 typedef struct _scsi_sense_desriptor_header {
176 uchar_t descriptor_type;
177 uchar_t descriptor_len;
178 } SCSI_SENSE_DESCRIPTOR_HEADER;
179
180 #define SENSE_DTYPE_INFORMATION 0x00
181 #define SENSE_DTYPE_CSI 0x01 // Command Specific Information
182 #define SENSE_DTYPE_SKS 0x02 // Sense Key Specific
183 #define SENSE_DTYPE_FRU 0x03 // Field Replaceable Unit
184 #define SENSE_DTYPE_STREAM 0x04
185 #define SENSE_DTYPE_BLOCK 0x05
186 #define SENSE_DTYPE_OSD_OBJ_IDENT 0x06 // OSD Object Identification
187 #define SENSE_DTYPE_OSD_INTEGRITY 0x07 // OSD Response Integrity Check Value
188 #define SENSE_DTYPE_OSD_ATR_IDENT 0x08 // OSD Attribute Identification
189 #define SENSE_DTYPE_ATA 0x09
190
191 typedef struct _ata_status_descriptor {
192 uchar_t descriptor_type;
193 #define ATA_SD_DLEN 0x0c
194 uchar_t descriptor_len; /* 0xc */
195 #define ATA_SD_FLG_EXTEND 0x01
196 uchar_t flags;
197 uchar_t error;
198 uchar_t esector_count; /* (15:8) */
199 uchar_t sector_count; /* (7:0) */
200 uchar_t elba_low; /* (15:8) */
201 uchar_t lba_low; /* (7:0) */
202 uchar_t elba_mid; /* (15:8) */
203 uchar_t lba_mid; /* (7:0) */
204 uchar_t elba_high; /* (15:8) */
205 uchar_t lba_high; /* (7:0) */
206 uchar_t device;
207 uchar_t status;
208 } ATA_STATUS_DESCRIPTOR;
209
210 //----------------------------------------------------------------------------------------------------------
211 // Sense Keys
212 #define SK_MSK 0x0F // mask to sd_sense field for key
213
214 #define SK_NO_SENSE 0 // No sense data (no error)
215 #define ASCQ_FILEMARK_DETECTED 0x01
216 #define ASCQ_EOPM_DETECTED 0x02 // End of Partition/Medium Detected
217 #define ASCQ_SETMARK_DETECTED 0x03
218 #define ASCQ_BOPM_DETECTED 0x04 // Beginning of Partition/Medium Detected
219
220 #define SK_RECOVERED 1 // Recovered error
221 #define ASC_ATA_PASS_THRU 0x00
222 #define ASCQ_ATA_PASS_THRU_INFO_AVAIL 0x1d
223
224 #define SK_NOT_RDY 2 // Device not ready
225 #define ASC_NO_SEEK_COMPLETE 0x02
226 #define ASC_NOT_READY 0x04
227 #define ASCQ_CAUSE_NOT_REPORTABLE 0x00
228 #define ASCQ_BECOMING_READY 0x01
229 #define ASCQ_INIT_COMMAND_REQUIRED 0x02
230 #define ASCQ_MANUAL_INTERVENTION_REQUIRED 0x03
231 #define ASCQ_FORMAT_IN_PROGRESS 0x04
232 #define ASCQ_UNKNOWN_CHANGED 0xff // NTO extension for fdc's
233 #define ASC_MEDIA_FORMAT 0x30 // bad format
234 #define ASC_MEDIA_NOT_PRESENT 0x3a
235 #define ASC_NOT_CONFIGURED 0x3e
236
237 #define SK_MEDIUM 3 // Medium error
238 #define ASC_UNRECOVERABLE_READ_ERROR 0x11
239 #define ASC_RECORD_NOT_FOUND 0x14
240 #define ASCQ_RECORD_NOT_FOUND 0x01
241 #define ASC_UNABLE_TO_RECOVER_TOC 0x57
242 #define ASC_INCOMPATIBLE_MEDIUM 0x64
243
244 #define SK_HARDWARE 4 // Hardware error
245 #define ASC_INTERNAL_TARGET_FAILURE 0x44
246 #define ASC_MEDIA_LOAD_EJECT_FAILURE 0x53
247 #define ASCQ_UNRECOVERABLE_CIRC 0x06
248
249 #define SK_ILLEGAL 5 // Illegal Request (bad command)
250 #define ASC_INVALID_COMMAND 0x20
251 #define ASC_INVALID_FIELD 0x24
252 #define ASC_INVALID_FIELD_PARAMETER 0x26
253 #define ASC_COMMAND_SEQUENCE_ERROR 0x2c
254 #define ASCQ_READ_SCRAMBLED 0x03
255 #define ASC_ILLEGAL_MODE 0x64
256 #define ASC_COPY_PROTECTION 0x6f
257
258 #define SK_UNIT_ATN 6 // Unit Attention
259 #define ASC_MEDIUM_CHANGED 0x28
260 #define ASC_BUS_RESET 0x29
261 #define ASC_INSUFFICIENT_TIME_FOR_OPERATION 0x2e
262 #define ASC_OPERATOR_REQUEST 0x5a
263 #define ASCQ_OPERATOR_MEDIUM_REMOVAL 0x01
264
265 #define SK_DATA_PROT 7 // Data Protect
266 #define ASC_WRITE_PROTECTED 0x27
267
268 #define SK_BLNK_CHK 8 // Blank Check
269 #define SK_VENDOR 9 // Vendor Specific
270 #define SK_CPY_ABORT 10 // Copy Aborted
271 #define SK_CMD_ABORT 11 // Aborted Command
272 #define SK_EQUAL 12 // Equal
273 #define SK_VOL_OFL 13 // Volume Overflow
274 #define SK_MISCMP 14 // Miscompare
275 #define SK_RESERVED 15 // Reserved
276 //----------------------------------------------------------------------------------------------------------
277 // Command Descriptor Block structure definitions
278
279 // CDB Flags
280 #define CF_LINK 0x01 // Linked-command indication
281 #define CF_FLAG 0x02 // Linked-command with flag bit
282 #define CF_VENDOR0 0x40 // Vendor unique bits
283 #define CF_VENDOR1 0x80
284
285 #define CF_FUA 0x08
286 #define CF_DPO 0x10
287
288 typedef union _cdb {
289 // generic 6 byte command descriptor block
290 struct {
291 uchar_t opcode;
292 uchar_t lun_opt;
293 uchar_t lba_byte1;
294 uchar_t lba_byte0; // LSB
295 uchar_t transfer_len;
296 uchar_t control;
297 } gen6;
298
299 // generic 10 byte command descriptor block
300 struct {
301 uchar_t opcode;
302 uchar_t lun_opt;
303 uchar_t lba_byte3;
304 uchar_t lba_byte4;
305 uchar_t lba_byte1;
306 uchar_t lba_byte0;
307 uchar_t rsvd;
308 uchar_t transfer_len[2];
309 uchar_t control;
310 } gen10;
311
312 // generic 12 byte command descriptor block
313 struct {
314 uchar_t opcode;
315 uchar_t lun_opt;
316 uchar_t lba_byte3;
317 uchar_t lba_byte4;
318 uchar_t lba_byte1;
319 uchar_t lba_byte0;
320 uchar_t transfer_len[4];
321 uchar_t rsvd10;
322 uchar_t control;
323 } gen12;
324
325 struct _format_unit {
326 uchar_t op_code;
327 #define FU_RSVD0 0xc0 // reserved bits
328 #define FU_FMTDAT 0x10
329 #define FU_CMPLIST 0x08
330 uchar_t defect_list_fmt;
331 uchar_t track_num;
332 ushort_t interleave;
333 uchar_t rsvd1[7];
334 } format_unit;
335
336 struct _format_unit_old {
337 uchar_t op_code;
338 uchar_t rsvd0;
339 uchar_t medium_type_code;
340 uchar_t rsvd1;
341 uchar_t interleave;
342 uchar_t rsvd2;
343 #define FMT_RSVD3 0x80
344 #define FMT_SECT_SIZE_CD 0x70
345 #define FMT_IMMED 0x08
346 #define FMT_HEAD 0x04
347 #define FMT_ST 0x02
348 #define FMT_CERT 0x01
349 uchar_t cert;
350 uchar_t track_addr;
351 uchar_t rsvd4[4];
352 } format_unit_old;
353
354 #define RW_OPT_RELADR 0x01
355 #define RW_OPT_CORRCT 0x02 // Disable Corrections
356 #define RW_OPT_FUA 0x08 // Force Unit Access
357 #define RW_OPT_DPO 0x10 // Disable Page Out
358 struct {
359 uchar_t opcode;
360 uchar_t lun_lba;
361 uchar_t lba[2];
362 uchar_t transfer_len;
363 uchar_t control;
364 } read_write6;
365
366 struct {
367 uchar_t opcode;
368 uchar_t lun_opt;
369 uchar_t lba[4];
370 uchar_t rsvd2;
371 uchar_t transfer_len[2];
372 uchar_t control;
373 } read_write10;
374
375 struct {
376 uchar_t opcode;
377 uchar_t lun_opt;
378 uchar_t lba[4];
379 uchar_t transfer_len[4];
380 uchar_t rsvd2;
381 uchar_t control;
382 } read_write12;
383
384 #define MSEL_OPT_PF 0x10 // Page Format
385 #define MSEL_OPT_SP 0x01 // Save Page
386 struct {
387 uchar_t opcode;
388 uchar_t lun_opt;
389 uchar_t rsvd2;
390 uchar_t rsvd3;
391 uchar_t param_length;
392 uchar_t control;
393 } mode_select;
394
395 struct {
396 uchar_t opcode;
397 uchar_t lun_opt;
398 uchar_t rsvd2;
399 uchar_t rsvd3;
400 uchar_t rsvd4;
401 uchar_t rsvd5;
402 uchar_t rsvd6;
403 uchar_t param_length[2];
404 uchar_t control;
405 } mode_select10;
406
407 struct {
408 uchar_t opcode;
409 #define LS_OPT_SP 0x01 // Save Parameters
410 #define LS_OPT_PCR 0x02 // Parameter Code Reset
411 uchar_t lun_opt;
412 #define LS_PC_CUR_THRESHOLD 0x00
413 #define LS_PC_CUR_CUMULATIVE 0x01
414 #define LS_PC_DFLT_THRESHOLD 0x02
415 #define LS_PC_DFLT_CUMULATIVE 0x03
416 uchar_t pc; // Page Control
417 uchar_t rsvd3;
418 uchar_t rsvd4;
419 uchar_t rsvd5;
420 uchar_t rsvd6;
421 uchar_t param_length[2];
422 uchar_t control;
423 } log_select;
424
425 struct {
426 uchar_t opcode;
427 #define MSNS_OPT_DBD 0x08 // Disable Block Descriptors
428 uchar_t lun_opt;
429 #define PC_CURRENT 0x00
430 #define PC_CHANGEABLE 0x40
431 #define PC_DEFAULT 0x80
432 #define PC_SAVED 0xC0
433 #define PC_MSK 0xC0
434 uchar_t pc_page;
435 uchar_t subpage;
436 uchar_t allocation_length;
437 uchar_t control;
438 } mode_sense;
439
440 struct _mode_sense10 {
441 uchar_t opcode;
442 uchar_t lun_opt;
443 uchar_t pc_page;
444 uchar_t subpage;
445 uchar_t rsvd4;
446 uchar_t rsvd5;
447 uchar_t rsvd6;
448 uchar_t allocation_length[2];
449 uchar_t control;
450 } mode_sense10;
451
452 struct {
453 uchar_t opcode;
454 uchar_t lun_opt;
455 uchar_t pc_page;
456 uchar_t rsvd3;
457 uchar_t rsvd4;
458 uchar_t parameter_pointer[2];
459 uchar_t allocation_length[2];
460 uchar_t control;
461 } log_sense;
462
463 struct {
464 uchar_t opcode;
465 uchar_t lun_opt;
466 uchar_t rsvd2;
467 uchar_t rsvd3;
468 uchar_t prevent;
469 uchar_t control;
470 } removal;
471
472 struct {
473 uchar_t opcode;
474 #define LD_OPT_IMMED 0x01
475 uchar_t lun_opt;
476 uchar_t rsvd2;
477 uchar_t rsvd3;
478 #define LD_CMD_START 0x01
479 #define LD_CMD_LOEJ 0x02
480 #define LD_CMD_STOP 0x00
481 #define LD_CMD_EJECT 0x02
482 #define LD_CMD_LOAD 0x03
483
484 // Sequential-Access
485 #define LD_CMD_SA_HOLD 0x08
486 #define LD_CMD_SA_EOT 0x04
487 #define LD_CMD_SA_RT 0x02 // re-tension
488 #define LD_CMD_SA_LOEJ 0x01
489
490 // Block
491 #define LD_CMD_PC_MSK 0xf0
492 #define LD_CMD_PC_NC 0
493 #define LD_CMD_PC_ACTIVE 1
494 #define LD_CMD_PC_IDLE 2
495 #define LD_CMD_PC_STANDBY 3
496 #define LD_CMD_PC_SLEEP 5
497
498 uchar_t cmd;
499 uchar_t control;
500 } load;
501
502 struct {
503 uchar_t opcode;
504 uchar_t lun_opt;
505 #define SC_OPT_RELADR 0x01
506 #define SC_OPT_IMMED 0x02
507 uchar_t lba[4];
508 uchar_t num_blocks[2];
509 uchar_t control;
510 } synchronize_cache;
511
512 // cdrom commands
513 struct {
514 uchar_t opcode;
515 uchar_t rsvd1;
516 uchar_t rsvd2;
517 uchar_t rsvd3;
518 uchar_t rsvd4;
519 uchar_t rsvd5;
520 uchar_t rsvd6;
521 uchar_t allocation_length[2];
522 uchar_t control;
523 } read_disc_information;
524
525 struct {
526 uchar_t opcode;
527 uchar_t lun_opt;
528 uchar_t rsvd2;
529 uchar_t rsvd3;
530 uchar_t rsvd4;
531 uchar_t rsvd5;
532 uchar_t rsvd6;
533 uchar_t rsvd7;
534 uchar_t resume;
535 uchar_t control;
536 } pause_resume;
537
538 struct {
539 uchar_t opcode;
540 uchar_t lun_opt;
541 uchar_t rsvd2;
542 uchar_t start_minute;
543 uchar_t start_second;
544 uchar_t start_frame;
545 uchar_t end_minute;
546 uchar_t end_second;
547 uchar_t end_frame;
548 uchar_t control;
549 } play_audio_msf;
550
551 struct {
552 uchar_t opcode;
553 uchar_t lun_opt;
554 uchar_t rsvd2;
555 uchar_t rsvd3;
556 uchar_t start_track;
557 uchar_t start_index;
558 uchar_t rsvd6;
559 uchar_t end_track;
560 uchar_t end_index;
561 uchar_t control;
562 } play_audio_ti;
563
564 struct {
565 uchar_t opcode;
566 #define CD_SCAN_DIR_FORWARD 0x00
567 #define CD_SCAN_DIR_REVERSE 0x10
568 uchar_t opt;
569 uchar_t start_address[4];
570 #define CD_SCAN_TYPE_LBA 0x00
571 #define CD_SCAN_TYPE_MSF 0x40
572 #define CD_SCAN_TYPE_TRK 0x80
573 #define CD_SCAN_TYPE_MSK 0xc0
574 uchar_t rsvd6;
575 uchar_t rsvd7;
576 uchar_t rsvd8;
577 uchar_t type;
578 uchar_t rsvd10;
579 uchar_t rsvd11;
580 } cd_scan;
581
582 struct {
583 uchar_t opcode;
584 #define RTOC_OPT_MSF 0x02
585 uchar_t lun_opt;
586 #define RTOC_FMT_TOC 0x0
587 #define RTOC_FMT_SESSION 0x1
588 #define RTOC_FMT_QSUBCODE 0x2
589 #define RTOC_FMT_QSUBCHNL 0x3
590 #define RTOC_FMT_ATIP 0x4
591 #define RTOC_FMT_CDTEXT 0x5
592 uchar_t format;
593 uchar_t rsvd3;
594 uchar_t rsvd4;
595 uchar_t rsvd5;
596 uchar_t start_track;
597 uchar_t allocation_length[2];
598 #define RTOC_CNTL_FMT_SESSION 0x40
599 uchar_t control_format;
600 } read_toc;
601
602 struct {
603 uchar_t opcode;
604 uchar_t lun_opt;
605 uchar_t rsvd2[6];
606 uchar_t allocation_length[2];
607 uchar_t rsvd3[2];
608 } mechanism_status;
609
610 struct {
611 uchar_t opcode;
612 #define EXCHANGE_OPT_IMMED 0x01
613 uchar_t lun_opt;
614 uchar_t rsvd2;
615 uchar_t rsvd3;
616 #define EXCHANGE_CMD_START 0x01
617 #define EXCHANGE_CMD_LOEJ 0x02
618 uchar_t cmd;
619 uchar_t rsvd5;
620 uchar_t rsvd6;
621 uchar_t rsvd7;
622 uchar_t slot;
623 uchar_t rsvd9;
624 uchar_t rsvd10;
625 uchar_t rsvd11;
626 } exchange;
627
628 struct {
629 uchar_t opcode;
630 uchar_t rt;
631 uchar_t feature_number[2];
632 uchar_t rsvd4;
633 uchar_t rsvd5;
634 uchar_t rsvd6;
635 uchar_t allocation_length[2];
636 uchar_t control;
637 } get_configuration;
638
639 struct {
640 uchar_t opcode;
641 #define GE_OPT_POLLED 0x01
642 uchar_t opt;
643 uchar_t rsvd2;
644 uchar_t rsvd3;
645 #define NCR_OPERATIONAL_CHANGE 0x02
646 #define NCR_POWER_MANAGEMENT 0x04
647 #define NCR_EXTERNAL_REQUEST 0x08
648 #define NCR_MEDIA 0x10
649 #define NCR_MULTI_INITIATOR 0x20
650 #define NCR_DEVICE_BUSY 0x40
651 uchar_t ncr; // notification class request
652 uchar_t rsvd5;
653 uchar_t rsvd6;
654 uchar_t allocation_length[2];
655 uchar_t control;
656 } get_event;
657
658 struct {
659 uchar_t opcode;
660 uchar_t lun_opt;
661 uchar_t rsvd2;
662 uchar_t rsvd3;
663 uchar_t rsvd4;
664 uchar_t rsvd5;
665 uchar_t rsvd6;
666 uchar_t allocation_length[2];
667 uchar_t control;
668 } read_formated_capacities;
669
670 struct {
671 uchar_t opcode;
672 uchar_t lun_opt;
673 uchar_t read_speed[2];
674 uchar_t write_speed[2];
675 uchar_t rsvd2[6];
676 } cd_speed;
677
678 struct {
679 uchar_t opcode;
680 #define RSCHNL_OPT_MSF 0x02
681 uchar_t lun_opt;
682 #define RSCHNL_DATA_SUBQ 0x40
683 uchar_t data;
684 uchar_t data_format;
685 uchar_t rsvd4;
686 uchar_t rsvd5;
687 uchar_t track;
688 uchar_t allocation_length[2];
689 uchar_t control;
690 } read_subchannel;
691
692 #define CD_FRAME_SYNC_SIZE 12
693 #define CD_FRAME_HDR_SIZE 4
694 #define CD_FRAME_SUB_HDR_SIZE 8
695 #define CD_FRAME_EDC_SIZE 4
696 #define CD_FRAME_ECC_SIZE 276
697 #define CD_FRAME_AUX_SIZE 8
698 #define CD_FRAME_ZERO_SIZE 8
699 #define CD_FRAME_SPARE_SIZE 4
700 #define CD_FRAME_C2_ERR_SIZE 294
701 #define CD_FRAME_BLOCK_ERR_SIZE 2
702
703 struct {
704 uchar_t opcode;
705 uchar_t lun_stype;
706 // expected sector type
707 #define RDCD_EST_ANY_SECTOR (0 << 2)
708 #define RDCD_EST_CDDA_SECTOR (1 << 2)
709 #define RDCD_EST_YELLOW_MODE1_SECTOR (2 << 2)
710 #define RDCD_EST_YELLOW_MODE2_SECTOR (3 << 2)
711 #define RDCD_EST_XA_SECTOR (4 << 2)
712 #define RDCD_EST_XA_FORM2_SECTOR (5 << 2)
713 #define RDCD_EST_MSK (7 << 2)
714 uchar_t lba[4];
715 uchar_t transfer_len[3];
716 uchar_t flags;
717 #define RDCD_FLG_SYNC 0x80
718 #define RDCD_FLG_UDATA 0x10
719 #define RDCD_FLG_ECC 0x08
720 #define RDCD_FLG_CD_ERR 0x02
721 #define RDCD_FLG_CD_BLOCK_ERR 0x04
722 #define RDCD_FLG_HC_NONE ( 0x00 << 5 )
723 #define RDCD_FLG_HC_HDR ( 0x01 << 5 )
724 #define RDCD_FLG_HC_SUBHEADER ( 0x02 << 5 )
725 #define RDCD_FLG_HC_ALL_HEADERS ( 0x03 << 5 )
726 uchar_t subch_selection;
727 uchar_t rsvd3;
728 } read_cd;
729
730 struct {
731 uchar_t opcode;
732 uchar_t lun_stype;
733 uchar_t rsvd2;
734 uchar_t start_minute;
735 uchar_t start_second;
736 uchar_t start_frame;
737 uchar_t end_minute;
738 uchar_t end_second;
739 uchar_t end_frame;
740 uchar_t flags;
741 uchar_t subch_selection;
742 uchar_t rsvd11;
743 } read_cd_msf;
744
745 struct _ata_pass_thru {
746 uchar_t opcode;
747 #define ATA_PROTO_MSK 0x1e
748 #define ATA_PROTO_RESPONSE (15 << 1)
749 #define ATA_PROTO_FPDMA (12 << 1)
750 #define ATA_PROTO_UDMA_DATA_OUT (11 << 1)
751 #define ATA_PROTO_UDMA_DATA_IN (10 << 1)
752 #define ATA_PROTO_DEVICE_RESET (9 << 1)
753 #define ATA_PROTO_DEVICE_DIAGNOSTIC (8 << 1)
754 #define ATA_PROTO_DMA_QUEUED (7 << 1)
755 #define ATA_PROTO_DMA (6 << 1)
756 #define ATA_PROTO_PIO_DATA_OUT (5 << 1)
757 #define ATA_PROTO_PIO_DATA_IN (4 << 1)
758 #define ATA_PROTO_DATA_NONE (3 << 1)
759 #define ATA_PROTO_SRST (1 << 1)
760 #define ATA_PROTO_HRST (0 << 1)
761 #define ATA_PROTO_EXTEND 0x01
762 uchar_t protocol; // multiple count, protocol
763 #define ATA_MCOUNT_MSK 0xe0
764
765 #define ATA_FLG_CK_COND 0x20
766 #define ATA_FLG_T_DIR 0x08 // data from device
767 #define ATA_FLG_BYT_BLOK 0x04
768 #define ATA_FLG_TLEN_STPSIU 0x03
769 #define ATA_FLG_TLEN_SECTOR_COUNT 0x02
770 #define ATA_FLG_TLEN_FEATURE 0x01
771 uchar_t flags;
772
773 uchar_t efeatures;
774 uchar_t features;
775 uchar_t esector_count;
776 uchar_t sector_count;
777 uchar_t elba_low;
778 uchar_t lba_low;
779 uchar_t elba_mid;
780 uchar_t lba_mid;
781 uchar_t elba_high;
782 uchar_t lba_high;
783 uchar_t device;
784 uchar_t command;
785 uchar_t control;
786 } ata_pass_thru;
787
788 // sequential access commands
789 struct {
790 uchar_t opcode;
791 #define ERASE_OPT_LONG 0x01
792 uchar_t opt;
793 uchar_t rsvd[3];
794 uchar_t control;
795 } erase;
796
797 struct {
798 uchar_t opcode;
799 #define LOCATE_OPT_CP 0x2
800 #define LOCATE_OPT_BT 0x4
801 uchar_t opt;
802 uchar_t rsvd2;
803 uchar_t ba[4]; // block address
804 uchar_t rsvd7;
805 uchar_t partition;
806 uchar_t control;
807 } locate;
808
809 struct {
810 uchar_t opcode;
811 uchar_t opt;
812 uchar_t rsvd2[3];
813 uchar_t control;
814 } read_block_limits;
815
816 #define RP_OPT_BT 0x01 // block address type
817 #define RP_OPT_LNG 0x02 // long format
818 #define RP_OPT_TCLP 0x04 // total current logical position
819 struct {
820 uchar_t opcode;
821 uchar_t lun_opt;
822 uchar_t rsvd2[7];
823 uchar_t control;
824 } read_position;
825
826 #define SRW_OPT_FIXED 0x01
827 #define SRW_OPT_SILI 0x02
828 struct {
829 uchar_t opcode;
830 uchar_t opt;
831 uchar_t transfer_len[3];
832 uchar_t control;
833 } sa_read_write;
834
835 struct {
836 uchar_t opcode;
837 uchar_t opt;
838 uchar_t rsvd[3];
839 uchar_t control;
840 } rewind;
841
842 struct {
843 uchar_t opcode;
844 #define SPACE_CODE_BLOCKS 0x00
845 #define SPACE_CODE_FMRKS 0x01
846 #define SPACE_CODE_SEQ_FMRKS 0x02
847 #define SPACE_CODE_EOD 0x03
848 #define SPACE_CODE_SMRKS 0x04
849 #define SPACE_CODE_SEQ_SMRKS 0x05
850 uchar_t lun_code;
851 uchar_t count[3];
852 uchar_t control;
853 } space;
854
855 struct {
856 uchar_t opcode;
857 #define WF_OPT_IMMED 0x01
858 #define WF_OPT_WSMK 0x02
859 uchar_t opt;
860 uchar_t transfer_length[3];
861 uchar_t control;
862 } write_filemarks;
863
864 struct {
865 uchar_t opcode;
866 #define RD_OPT_MEDIA 0x01
867 uchar_t opt;
868 uchar_t rsvd[5];
869 uchar_t allocation_length[2];
870 uchar_t control;
871 } report_density;
872
873 struct {
874 uchar_t opcode;
875 #define FM_OPT_IMMED 0x01
876 #define FM_OPT_VERIFY 0x02
877 uchar_t opt;
878 #define FM_FMT_DFLT 0x00
879 #define FM_FMT_PARTITION 0x01
880 #define FM_FMT_FORMAT_PARTITION 0x02
881 uchar_t format;
882 uchar_t transfer_length[2];
883 uchar_t control;
884 } format_media;
885 } CDB;
886 //----------------------------------------------------------------------------------------------------------
887
888 struct _ata_sense
889 {
890 SCSI_SENSE_DESCRIPTOR sense;
891 ATA_STATUS_DESCRIPTOR desc;
892 };
893 //----------------------------------------------------------------------------------------------------------
894
895
896 #endif /* OS_QNXNTO_H_ */