smartmontools  SVN Rev 4092
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_generic.h
3  *
4  * Home page of code is: http://smartmontools.sourceforge.net
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 3728 2012-12-13 17:57:50Z chrfranke $\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 //----------------------------------------------------------------------------------------------------------
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;
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
174 
177  uchar_t descriptor_len;
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 {
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;
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
331  uchar_t track_num;
332  ushort_t interleave;
333  uchar_t rsvd1[7];
334  } format_unit;
335 
337  uchar_t op_code;
338  uchar_t rsvd0;
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;
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;
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;
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];
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;
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;
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 )
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;
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 
889  {
892  };
893 //----------------------------------------------------------------------------------------------------------
894 
895 
896 #endif /* OS_QNXNTO_H_ */
uchar_t control_format
Definition: os_qnxnto.h:599
ushort_t asb
Definition: os_qnxnto.h:160
uchar_t cmd
Definition: os_qnxnto.h:498
uchar_t rsvd11
Definition: os_qnxnto.h:579
ushort_t interleave
Definition: os_qnxnto.h:332
struct _cdb::@105 format_media
uchar_t opcode
Definition: os_qnxnto.h:83
struct _eide_identify EIDE_IDENTIFY
Definition: os_qnxnto.h:48
uchar_t ba[4]
Definition: os_qnxnto.h:803
uchar_t rsvd9
Definition: os_qnxnto.h:623
struct _cdb::@80 synchronize_cache
uchar_t command
Definition: os_qnxnto.h:121
uchar_t rsvd2
Definition: os_qnxnto.h:370
uchar_t features
Definition: os_qnxnto.h:111
uchar_t end_frame
Definition: os_qnxnto.h:547
uchar_t partition
Definition: os_qnxnto.h:805
uchar_t sector_count
Definition: os_qnxnto.h:113
struct _cdb::@68 gen10
uchar_t sense
Definition: os_qnxnto.h:151
uchar_t elba_low
Definition: os_qnxnto.h:114
struct _ata_status_descriptor ATA_STATUS_DESCRIPTOR
struct _cdb::@90 get_event
uchar_t lun_lba
Definition: os_qnxnto.h:360
uchar_t lba_byte4
Definition: os_qnxnto.h:304
struct _cdb::@94 read_cd
uchar_t lba_mid
Definition: os_qnxnto.h:117
uchar_t asc
Definition: os_qnxnto.h:155
uchar_t parameter_pointer[2]
Definition: os_qnxnto.h:458
union _cdb CDB
uchar_t start_track
Definition: os_qnxnto.h:556
uchar_t end_track
Definition: os_qnxnto.h:559
uchar_t rsvd6
Definition: os_qnxnto.h:402
uchar_t info[4]
Definition: os_qnxnto.h:152
struct _cdb::@75 log_select
uchar_t format
Definition: os_qnxnto.h:592
struct _cdb::@102 space
uchar_t slot
Definition: os_qnxnto.h:622
struct _cdb::@100 sa_read_write
uchar_t lun_opt
Definition: os_qnxnto.h:292
uchar_t segment
Definition: os_qnxnto.h:150
uchar_t count[3]
Definition: os_qnxnto.h:851
uchar_t allocation_length[2]
Definition: os_qnxnto.h:448
uchar_t subpage
Definition: os_qnxnto.h:435
struct _cdb::_format_unit format_unit
struct _cdb::@93 read_subchannel
uchar_t lba_byte0
Definition: os_qnxnto.h:294
uchar_t rt
Definition: os_qnxnto.h:630
uchar_t rsvd1[7]
Definition: os_qnxnto.h:333
struct _cdb::@104 report_density
uchar_t error
Definition: os_qnxnto.h:149
struct _cdb::@86 read_toc
uchar_t allocation_length
Definition: os_qnxnto.h:436
uchar_t rsvd7
Definition: os_qnxnto.h:533
uchar_t transfer_len
Definition: os_qnxnto.h:295
uchar_t control
Definition: os_qnxnto.h:296
uchar_t elba_mid
Definition: os_qnxnto.h:116
uchar_t esector_count
Definition: os_qnxnto.h:112
uchar_t sks
Definition: os_qnxnto.h:158
uchar_t start_frame
Definition: os_qnxnto.h:544
struct _ata_pass_thru ata_pass_thru_
struct _cdb::@85 cd_scan
uchar_t start_minute
Definition: os_qnxnto.h:542
struct _cdb::@99 read_position
uchar_t elba_high
Definition: os_qnxnto.h:118
struct _drive_attribute DRIVE_ATTRIBUTE
uchar_t num_blocks[2]
Definition: os_qnxnto.h:508
struct _scsi_sense_desriptor_header SCSI_SENSE_DESCRIPTOR_HEADER
uchar_t rsvd4
Definition: os_qnxnto.h:400
struct _cdb::@72 read_write12
uchar_t rsvd1
Definition: os_qnxnto.h:515
struct _cdb::@96 erase
uchar_t ascq
Definition: os_qnxnto.h:156
uchar_t csinfo[4]
Definition: os_qnxnto.h:154
uchar_t rsvd3
Definition: os_qnxnto.h:390
struct _cdb::_ata_pass_thru ata_pass_thru
uchar_t data
Definition: os_qnxnto.h:683
uchar_t lba_byte3
Definition: os_qnxnto.h:303
uchar_t lun_code
Definition: os_qnxnto.h:850
uchar_t rsvd10
Definition: os_qnxnto.h:321
uchar_t track
Definition: os_qnxnto.h:687
struct _cdb::@82 pause_resume
struct _cdb::@70 read_write6
uchar_t end_index
Definition: os_qnxnto.h:560
struct _cdb::@78 removal
uchar_t start_index
Definition: os_qnxnto.h:557
struct _cdb::@83 play_audio_msf
uchar_t fruc
Definition: os_qnxnto.h:157
uchar_t lba[2]
Definition: os_qnxnto.h:361
uchar_t rsvd5
Definition: os_qnxnto.h:401
void CCB
Definition: os_qnxnto.h:51
struct _cdb::@87 mechanism_status
SCSI_SENSE_DESCRIPTOR sense
Definition: os_qnxnto.h:890
uchar_t ncr
Definition: os_qnxnto.h:651
uchar_t control
Definition: os_qnxnto.h:122
uchar_t opcode
Definition: os_qnxnto.h:291
struct _cdb::@88 exchange
uchar_t type
Definition: os_qnxnto.h:577
struct _cdb::@79 load
uchar_t subch_selection
Definition: os_qnxnto.h:726
uchar_t rsvd8
Definition: os_qnxnto.h:576
uchar_t transfer_length[3]
Definition: os_qnxnto.h:860
uchar_t efeatures
Definition: os_qnxnto.h:110
uchar_t lba_byte1
Definition: os_qnxnto.h:293
uchar_t rsvd
Definition: os_qnxnto.h:307
uchar_t opt
Definition: os_qnxnto.h:568
uchar_t param_length
Definition: os_qnxnto.h:391
struct _cdb::@89 get_configuration
uchar_t protocol
Definition: os_qnxnto.h:99
uchar_t pc
Definition: os_qnxnto.h:416
struct _cdb::@92 cd_speed
uchar_t end_minute
Definition: os_qnxnto.h:545
struct _cdb::@74 mode_select10
struct _cdb::@103 write_filemarks
uchar_t end_second
Definition: os_qnxnto.h:546
struct _cdb::@95 read_cd_msf
struct _cdb::@67 gen6
uchar_t lba_low
Definition: os_qnxnto.h:115
uchar_t start_address[4]
Definition: os_qnxnto.h:569
struct _cdb::@73 mode_select
ATA_STATUS_DESCRIPTOR desc
Definition: os_qnxnto.h:891
ushort_t sks_data
Definition: os_qnxnto.h:159
struct _cdb::_mode_sense10 mode_sense10
struct _cdb::@69 gen12
uchar_t prevent
Definition: os_qnxnto.h:468
uchar_t resume
Definition: os_qnxnto.h:534
uchar_t pc_page
Definition: os_qnxnto.h:434
uchar_t data_format
Definition: os_qnxnto.h:684
struct _cdb::@81 read_disc_information
uchar_t flags
Definition: os_qnxnto.h:108
struct _cdb::@71 read_write10
uchar_t lba_high
Definition: os_qnxnto.h:119
uchar_t defect_list_fmt
Definition: os_qnxnto.h:330
struct _cdb::@77 log_sense
struct _scsi_sense_descriptor SCSI_SENSE_DESCRIPTOR
uchar_t lun_stype
Definition: os_qnxnto.h:705
uchar_t feature_number[2]
Definition: os_qnxnto.h:631
uchar_t device
Definition: os_qnxnto.h:120
uchar_t start_second
Definition: os_qnxnto.h:543
struct _cdb::@84 play_audio_ti
struct _cdb::@101 rewind
uchar_t read_speed[2]
Definition: os_qnxnto.h:673
struct _scsi_sense SCSI_SENSE
struct _cdb::_format_unit_old format_unit_old
struct _cdb::@76 mode_sense
struct _cdb::@97 locate
uchar_t asl
Definition: os_qnxnto.h:153
struct _cdb::@91 read_formated_capacities
uchar_t flags
Definition: os_qnxnto.h:716
uchar_t write_speed[2]
Definition: os_qnxnto.h:674
struct _cdb::@98 read_block_limits