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