hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
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
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _LINUX_HDREG_H
#define _LINUX_HDREG_H
 
#include <linux/types.h>
 
/*
 * Command Header sizes for IOCTL commands
 */
 
#define HDIO_DRIVE_CMD_HDR_SIZE        (4 * sizeof(__u8))
#define HDIO_DRIVE_HOB_HDR_SIZE        (8 * sizeof(__u8))
#define HDIO_DRIVE_TASK_HDR_SIZE    (8 * sizeof(__u8))
 
#define IDE_DRIVE_TASK_NO_DATA        0
#ifndef __KERNEL__
#define IDE_DRIVE_TASK_INVALID        -1
#define IDE_DRIVE_TASK_SET_XFER        1
#define IDE_DRIVE_TASK_IN        2
#define IDE_DRIVE_TASK_OUT        3
#endif
#define IDE_DRIVE_TASK_RAW_WRITE    4
 
/*
 * Define standard taskfile in/out register
 */
#define IDE_TASKFILE_STD_IN_FLAGS    0xFE
#define IDE_HOB_STD_IN_FLAGS        0x3C
#ifndef __KERNEL__
#define IDE_TASKFILE_STD_OUT_FLAGS    0xFE
#define IDE_HOB_STD_OUT_FLAGS        0x3C
 
typedef unsigned char task_ioreg_t;
typedef unsigned long sata_ioreg_t;
#endif
 
typedef union ide_reg_valid_s {
   unsigned all                : 16;
   struct {
       unsigned data            : 1;
       unsigned error_feature        : 1;
       unsigned sector            : 1;
       unsigned nsector        : 1;
       unsigned lcyl            : 1;
       unsigned hcyl            : 1;
       unsigned select            : 1;
       unsigned status_command        : 1;
 
       unsigned data_hob        : 1;
       unsigned error_feature_hob    : 1;
       unsigned sector_hob        : 1;
       unsigned nsector_hob        : 1;
       unsigned lcyl_hob        : 1;
       unsigned hcyl_hob        : 1;
       unsigned select_hob        : 1;
       unsigned control_hob        : 1;
   } b;
} ide_reg_valid_t;
 
typedef struct ide_task_request_s {
   __u8        io_ports[8];
   __u8        hob_ports[8]; /* bytes 6 and 7 are unused */
   ide_reg_valid_t    out_flags;
   ide_reg_valid_t    in_flags;
   int        data_phase;
   int        req_cmd;
   unsigned long    out_size;
   unsigned long    in_size;
} ide_task_request_t;
 
typedef struct ide_ioctl_request_s {
   ide_task_request_t    *task_request;
   unsigned char        *out_buffer;
   unsigned char        *in_buffer;
} ide_ioctl_request_t;
 
struct hd_drive_cmd_hdr {
   __u8 command;
   __u8 sector_number;
   __u8 feature;
   __u8 sector_count;
};
 
#ifndef __KERNEL__
typedef struct hd_drive_task_hdr {
   __u8 data;
   __u8 feature;
   __u8 sector_count;
   __u8 sector_number;
   __u8 low_cylinder;
   __u8 high_cylinder;
   __u8 device_head;
   __u8 command;
} task_struct_t;
 
typedef struct hd_drive_hob_hdr {
   __u8 data;
   __u8 feature;
   __u8 sector_count;
   __u8 sector_number;
   __u8 low_cylinder;
   __u8 high_cylinder;
   __u8 device_head;
   __u8 control;
} hob_struct_t;
#endif
 
#define TASKFILE_NO_DATA        0x0000
 
#define TASKFILE_IN            0x0001
#define TASKFILE_MULTI_IN        0x0002
 
#define TASKFILE_OUT            0x0004
#define TASKFILE_MULTI_OUT        0x0008
#define TASKFILE_IN_OUT            0x0010
 
#define TASKFILE_IN_DMA            0x0020
#define TASKFILE_OUT_DMA        0x0040
#define TASKFILE_IN_DMAQ        0x0080
#define TASKFILE_OUT_DMAQ        0x0100
 
#ifndef __KERNEL__
#define TASKFILE_P_IN            0x0200
#define TASKFILE_P_OUT            0x0400
#define TASKFILE_P_IN_DMA        0x0800
#define TASKFILE_P_OUT_DMA        0x1000
#define TASKFILE_P_IN_DMAQ        0x2000
#define TASKFILE_P_OUT_DMAQ        0x4000
#define TASKFILE_48            0x8000
#define TASKFILE_INVALID        0x7fff
#endif
 
#ifndef __KERNEL__
/* ATA/ATAPI Commands pre T13 Spec */
#define WIN_NOP                0x00
/*
 *    0x01->0x02 Reserved
 */
#define CFA_REQ_EXT_ERROR_CODE        0x03 /* CFA Request Extended Error Code */
/*
 *    0x04->0x07 Reserved
 */
#define WIN_SRST            0x08 /* ATAPI soft reset command */
#define WIN_DEVICE_RESET        0x08
/*
 *    0x09->0x0F Reserved
 */
#define WIN_RECAL            0x10
#define WIN_RESTORE            WIN_RECAL
/*
 *    0x10->0x1F Reserved
 */
#define WIN_READ            0x20 /* 28-Bit */
#define WIN_READ_ONCE            0x21 /* 28-Bit without retries */
#define WIN_READ_LONG            0x22 /* 28-Bit */
#define WIN_READ_LONG_ONCE        0x23 /* 28-Bit without retries */
#define WIN_READ_EXT            0x24 /* 48-Bit */
#define WIN_READDMA_EXT            0x25 /* 48-Bit */
#define WIN_READDMA_QUEUED_EXT        0x26 /* 48-Bit */
#define WIN_READ_NATIVE_MAX_EXT        0x27 /* 48-Bit */
/*
 *    0x28
 */
#define WIN_MULTREAD_EXT        0x29 /* 48-Bit */
/*
 *    0x2A->0x2F Reserved
 */
#define WIN_WRITE            0x30 /* 28-Bit */
#define WIN_WRITE_ONCE            0x31 /* 28-Bit without retries */
#define WIN_WRITE_LONG            0x32 /* 28-Bit */
#define WIN_WRITE_LONG_ONCE        0x33 /* 28-Bit without retries */
#define WIN_WRITE_EXT            0x34 /* 48-Bit */
#define WIN_WRITEDMA_EXT        0x35 /* 48-Bit */
#define WIN_WRITEDMA_QUEUED_EXT        0x36 /* 48-Bit */
#define WIN_SET_MAX_EXT            0x37 /* 48-Bit */
#define CFA_WRITE_SECT_WO_ERASE        0x38 /* CFA Write Sectors without erase */
#define WIN_MULTWRITE_EXT        0x39 /* 48-Bit */
/*
 *    0x3A->0x3B Reserved
 */
#define WIN_WRITE_VERIFY        0x3C /* 28-Bit */
/*
 *    0x3D->0x3F Reserved
 */
#define WIN_VERIFY            0x40 /* 28-Bit - Read Verify Sectors */
#define WIN_VERIFY_ONCE            0x41 /* 28-Bit - without retries */
#define WIN_VERIFY_EXT            0x42 /* 48-Bit */
/*
 *    0x43->0x4F Reserved
 */
#define WIN_FORMAT            0x50
/*
 *    0x51->0x5F Reserved
 */
#define WIN_INIT            0x60
/*
 *    0x61->0x5F Reserved
 */
#define WIN_SEEK            0x70 /* 0x70-0x7F Reserved */
 
#define CFA_TRANSLATE_SECTOR        0x87 /* CFA Translate Sector */
#define WIN_DIAGNOSE            0x90
#define WIN_SPECIFY            0x91 /* set drive geometry translation */
#define WIN_DOWNLOAD_MICROCODE        0x92
#define WIN_STANDBYNOW2            0x94
#define WIN_STANDBY2            0x96
#define WIN_SETIDLE2            0x97
#define WIN_CHECKPOWERMODE2        0x98
#define WIN_SLEEPNOW2            0x99
/*
 *    0x9A VENDOR
 */
#define WIN_PACKETCMD            0xA0 /* Send a packet command. */
#define WIN_PIDENTIFY            0xA1 /* identify ATAPI device    */
#define WIN_QUEUED_SERVICE        0xA2
#define WIN_SMART            0xB0 /* self-monitoring and reporting */
#define CFA_ERASE_SECTORS        0xC0
#define WIN_MULTREAD            0xC4 /* read sectors using multiple mode*/
#define WIN_MULTWRITE            0xC5 /* write sectors using multiple mode */
#define WIN_SETMULT            0xC6 /* enable/disable multiple mode */
#define WIN_READDMA_QUEUED        0xC7 /* read sectors using Queued DMA transfers */
#define WIN_READDMA            0xC8 /* read sectors using DMA transfers */
#define WIN_READDMA_ONCE        0xC9 /* 28-Bit - without retries */
#define WIN_WRITEDMA            0xCA /* write sectors using DMA transfers */
#define WIN_WRITEDMA_ONCE        0xCB /* 28-Bit - without retries */
#define WIN_WRITEDMA_QUEUED        0xCC /* write sectors using Queued DMA transfers */
#define CFA_WRITE_MULTI_WO_ERASE    0xCD /* CFA Write multiple without erase */
#define WIN_GETMEDIASTATUS        0xDA
#define WIN_ACKMEDIACHANGE        0xDB /* ATA-1, ATA-2 vendor */
#define WIN_POSTBOOT            0xDC
#define WIN_PREBOOT             0xDD
#define WIN_DOORLOCK            0xDE /* lock door on removable drives */
#define WIN_DOORUNLOCK            0xDF /* unlock door on removable drives */
#define WIN_STANDBYNOW1            0xE0
#define WIN_IDLEIMMEDIATE        0xE1 /* force drive to become "ready" */
#define WIN_STANDBY            0xE2 /* Set device in Standby Mode */
#define WIN_SETIDLE1            0xE3
#define WIN_READ_BUFFER            0xE4 /* force read only 1 sector */
#define WIN_CHECKPOWERMODE1        0xE5
#define WIN_SLEEPNOW1            0xE6
#define WIN_FLUSH_CACHE            0xE7
#define WIN_WRITE_BUFFER        0xE8 /* force write only 1 sector */
#define WIN_WRITE_SAME            0xE9 /* read ata-2 to use */
   /* SET_FEATURES 0x22 or 0xDD */
#define WIN_FLUSH_CACHE_EXT        0xEA /* 48-Bit */
#define WIN_IDENTIFY            0xEC /* ask drive to identify itself    */
#define WIN_MEDIAEJECT            0xED
#define WIN_IDENTIFY_DMA        0xEE /* same as WIN_IDENTIFY, but DMA */
#define WIN_SETFEATURES            0xEF /* set special drive features */
#define EXABYTE_ENABLE_NEST        0xF0
#define WIN_SECURITY_SET_PASS        0xF1
#define WIN_SECURITY_UNLOCK        0xF2
#define WIN_SECURITY_ERASE_PREPARE    0xF3
#define WIN_SECURITY_ERASE_UNIT        0xF4
#define WIN_SECURITY_FREEZE_LOCK    0xF5
#define WIN_SECURITY_DISABLE        0xF6
#define WIN_READ_NATIVE_MAX        0xF8 /* return the native maximum address */
#define WIN_SET_MAX            0xF9
#define DISABLE_SEAGATE            0xFB
 
/* WIN_SMART sub-commands */
 
#define SMART_READ_VALUES        0xD0
#define SMART_READ_THRESHOLDS        0xD1
#define SMART_AUTOSAVE            0xD2
#define SMART_SAVE            0xD3
#define SMART_IMMEDIATE_OFFLINE        0xD4
#define SMART_READ_LOG_SECTOR        0xD5
#define SMART_WRITE_LOG_SECTOR        0xD6
#define SMART_WRITE_THRESHOLDS        0xD7
#define SMART_ENABLE            0xD8
#define SMART_DISABLE            0xD9
#define SMART_STATUS            0xDA
#define SMART_AUTO_OFFLINE        0xDB
 
/* Password used in TF4 & TF5 executing SMART commands */
 
#define SMART_LCYL_PASS            0x4F
#define SMART_HCYL_PASS            0xC2
 
/* WIN_SETFEATURES sub-commands */
#define SETFEATURES_EN_8BIT    0x01    /* Enable 8-Bit Transfers */
#define SETFEATURES_EN_WCACHE    0x02    /* Enable write cache */
#define SETFEATURES_DIS_DEFECT    0x04    /* Disable Defect Management */
#define SETFEATURES_EN_APM    0x05    /* Enable advanced power management */
#define SETFEATURES_EN_SAME_R    0x22    /* for a region ATA-1 */
#define SETFEATURES_DIS_MSN    0x31    /* Disable Media Status Notification */
#define SETFEATURES_DIS_RETRY    0x33    /* Disable Retry */
#define SETFEATURES_EN_AAM    0x42    /* Enable Automatic Acoustic Management */
#define SETFEATURES_RW_LONG    0x44    /* Set Length of VS bytes */
#define SETFEATURES_SET_CACHE    0x54    /* Set Cache segments to SC Reg. Val */
#define SETFEATURES_DIS_RLA    0x55    /* Disable read look-ahead feature */
#define SETFEATURES_EN_RI    0x5D    /* Enable release interrupt */
#define SETFEATURES_EN_SI    0x5E    /* Enable SERVICE interrupt */
#define SETFEATURES_DIS_RPOD    0x66    /* Disable reverting to power on defaults */
#define SETFEATURES_DIS_ECC    0x77    /* Disable ECC byte count */
#define SETFEATURES_DIS_8BIT    0x81    /* Disable 8-Bit Transfers */
#define SETFEATURES_DIS_WCACHE    0x82    /* Disable write cache */
#define SETFEATURES_EN_DEFECT    0x84    /* Enable Defect Management */
#define SETFEATURES_DIS_APM    0x85    /* Disable advanced power management */
#define SETFEATURES_EN_ECC    0x88    /* Enable ECC byte count */
#define SETFEATURES_EN_MSN    0x95    /* Enable Media Status Notification */
#define SETFEATURES_EN_RETRY    0x99    /* Enable Retry */
#define SETFEATURES_EN_RLA    0xAA    /* Enable read look-ahead feature */
#define SETFEATURES_PREFETCH    0xAB    /* Sets drive prefetch value */
#define SETFEATURES_EN_REST    0xAC    /* ATA-1 */
#define SETFEATURES_4B_RW_LONG    0xBB    /* Set Length of 4 bytes */
#define SETFEATURES_DIS_AAM    0xC2    /* Disable Automatic Acoustic Management */
#define SETFEATURES_EN_RPOD    0xCC    /* Enable reverting to power on defaults */
#define SETFEATURES_DIS_RI    0xDD    /* Disable release interrupt ATAPI */
#define SETFEATURES_EN_SAME_M    0xDD    /* for a entire device ATA-1 */
#define SETFEATURES_DIS_SI    0xDE    /* Disable SERVICE interrupt ATAPI */
 
/* WIN_SECURITY sub-commands */
 
#define SECURITY_SET_PASSWORD        0xBA
#define SECURITY_UNLOCK            0xBB
#define SECURITY_ERASE_PREPARE        0xBC
#define SECURITY_ERASE_UNIT        0xBD
#define SECURITY_FREEZE_LOCK        0xBE
#define SECURITY_DISABLE_PASSWORD    0xBF
#endif /* __KERNEL__ */
 
struct hd_geometry {
      unsigned char heads;
      unsigned char sectors;
      unsigned short cylinders;
      unsigned long start;
};
 
/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
#define HDIO_GETGEO        0x0301    /* get device geometry */
#define HDIO_GET_UNMASKINTR    0x0302    /* get current unmask setting */
#define HDIO_GET_MULTCOUNT    0x0304    /* get current IDE blockmode setting */
#define HDIO_GET_QDMA        0x0305    /* get use-qdma flag */
 
#define HDIO_SET_XFER        0x0306  /* set transfer rate via proc */
 
#define HDIO_OBSOLETE_IDENTITY    0x0307    /* OBSOLETE, DO NOT USE: returns 142 bytes */
#define HDIO_GET_KEEPSETTINGS    0x0308    /* get keep-settings-on-reset flag */
#define HDIO_GET_32BIT        0x0309    /* get current io_32bit setting */
#define HDIO_GET_NOWERR        0x030a    /* get ignore-write-error flag */
#define HDIO_GET_DMA        0x030b    /* get use-dma flag */
#define HDIO_GET_NICE        0x030c    /* get nice flags */
#define HDIO_GET_IDENTITY    0x030d    /* get IDE identification info */
#define HDIO_GET_WCACHE        0x030e    /* get write cache mode on|off */
#define HDIO_GET_ACOUSTIC    0x030f    /* get acoustic value */
#define    HDIO_GET_ADDRESS    0x0310    /* */
 
#define HDIO_GET_BUSSTATE    0x031a    /* get the bus state of the hwif */
#define HDIO_TRISTATE_HWIF    0x031b    /* execute a channel tristate */
#define HDIO_DRIVE_RESET    0x031c    /* execute a device reset */
#define HDIO_DRIVE_TASKFILE    0x031d    /* execute raw taskfile */
#define HDIO_DRIVE_TASK        0x031e    /* execute task and special drive command */
#define HDIO_DRIVE_CMD        0x031f    /* execute a special drive command */
#define HDIO_DRIVE_CMD_AEB    HDIO_DRIVE_TASK
 
/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
#define HDIO_SET_MULTCOUNT    0x0321    /* change IDE blockmode */
#define HDIO_SET_UNMASKINTR    0x0322    /* permit other irqs during I/O */
#define HDIO_SET_KEEPSETTINGS    0x0323    /* keep ioctl settings on reset */
#define HDIO_SET_32BIT        0x0324    /* change io_32bit flags */
#define HDIO_SET_NOWERR        0x0325    /* change ignore-write-error flag */
#define HDIO_SET_DMA        0x0326    /* change use-dma flag */
#define HDIO_SET_PIO_MODE    0x0327    /* reconfig interface to new speed */
#ifndef __KERNEL__
#define HDIO_SCAN_HWIF        0x0328    /* register and (re)scan interface */
#define HDIO_UNREGISTER_HWIF    0x032a  /* unregister interface */
#endif
#define HDIO_SET_NICE        0x0329    /* set nice flags */
#define HDIO_SET_WCACHE        0x032b    /* change write cache enable-disable */
#define HDIO_SET_ACOUSTIC    0x032c    /* change acoustic behavior */
#define HDIO_SET_BUSSTATE    0x032d    /* set the bus state of the hwif */
#define HDIO_SET_QDMA        0x032e    /* change use-qdma flag */
#define HDIO_SET_ADDRESS    0x032f    /* change lba addressing modes */
 
/* bus states */
enum {
   BUSSTATE_OFF = 0,
   BUSSTATE_ON,
   BUSSTATE_TRISTATE
};
 
/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */
/* 0x330 is reserved - used to be HDIO_GETGEO_BIG */
/* 0x331 is reserved - used to be HDIO_GETGEO_BIG_RAW */
/* 0x338 is reserved - used to be HDIO_SET_IDE_SCSI */
/* 0x339 is reserved - used to be HDIO_SET_SCSI_IDE */
 
#define __NEW_HD_DRIVE_ID
 
#ifndef __KERNEL__
/*
 * Structure returned by HDIO_GET_IDENTITY, as per ANSI NCITS ATA6 rev.1b spec.
 *
 * If you change something here, please remember to update fix_driveid() in
 * ide/probe.c.
 */
struct hd_driveid {
   unsigned short    config;        /* lots of obsolete bit flags */
   unsigned short    cyls;        /* Obsolete, "physical" cyls */
   unsigned short    reserved2;    /* reserved (word 2) */
   unsigned short    heads;        /* Obsolete, "physical" heads */
   unsigned short    track_bytes;    /* unformatted bytes per track */
   unsigned short    sector_bytes;    /* unformatted bytes per sector */
   unsigned short    sectors;    /* Obsolete, "physical" sectors per track */
   unsigned short    vendor0;    /* vendor unique */
   unsigned short    vendor1;    /* vendor unique */
   unsigned short    vendor2;    /* Retired vendor unique */
   unsigned char    serial_no[20];    /* 0 = not_specified */
   unsigned short    buf_type;    /* Retired */
   unsigned short    buf_size;    /* Retired, 512 byte increments
                    * 0 = not_specified
                    */
   unsigned short    ecc_bytes;    /* for r/w long cmds; 0 = not_specified */
   unsigned char    fw_rev[8];    /* 0 = not_specified */
   unsigned char    model[40];    /* 0 = not_specified */
   unsigned char    max_multsect;    /* 0=not_implemented */
   unsigned char    vendor3;    /* vendor unique */
   unsigned short    dword_io;    /* 0=not_implemented; 1=implemented */
   unsigned char    vendor4;    /* vendor unique */
   unsigned char    capability;    /* (upper byte of word 49)
                    *  3:    IORDYsup
                    *  2:    IORDYsw
                    *  1:    LBA
                    *  0:    DMA
                    */
   unsigned short    reserved50;    /* reserved (word 50) */
   unsigned char    vendor5;    /* Obsolete, vendor unique */
   unsigned char    tPIO;        /* Obsolete, 0=slow, 1=medium, 2=fast */
   unsigned char    vendor6;    /* Obsolete, vendor unique */
   unsigned char    tDMA;        /* Obsolete, 0=slow, 1=medium, 2=fast */
   unsigned short    field_valid;    /* (word 53)
                    *  2:    ultra_ok    word  88
                    *  1:    eide_ok        words 64-70
                    *  0:    cur_ok        words 54-58
                    */
   unsigned short    cur_cyls;    /* Obsolete, logical cylinders */
   unsigned short    cur_heads;    /* Obsolete, l heads */
   unsigned short    cur_sectors;    /* Obsolete, l sectors per track */
   unsigned short    cur_capacity0;    /* Obsolete, l total sectors on drive */
   unsigned short    cur_capacity1;    /* Obsolete, (2 words, misaligned int)     */
   unsigned char    multsect;    /* current multiple sector count */
   unsigned char    multsect_valid;    /* when (bit0==1) multsect is ok */
   unsigned int    lba_capacity;    /* Obsolete, total number of sectors */
   unsigned short    dma_1word;    /* Obsolete, single-word dma info */
   unsigned short    dma_mword;    /* multiple-word dma info */
   unsigned short  eide_pio_modes; /* bits 0:mode3 1:mode4 */
   unsigned short  eide_dma_min;    /* min mword dma cycle time (ns) */
   unsigned short  eide_dma_time;    /* recommended mword dma cycle time (ns) */
   unsigned short  eide_pio;       /* min cycle time (ns), no IORDY  */
   unsigned short  eide_pio_iordy; /* min cycle time (ns), with IORDY */
   unsigned short    words69_70[2];    /* reserved words 69-70
                    * future command overlap and queuing
                    */
   unsigned short    words71_74[4];    /* reserved words 71-74
                    * for IDENTIFY PACKET DEVICE command
                    */
   unsigned short  queue_depth;    /* (word 75)
                    * 15:5    reserved
                    *  4:0    Maximum queue depth -1
                    */
   unsigned short  words76_79[4];    /* reserved words 76-79 */
   unsigned short  major_rev_num;    /* (word 80) */
   unsigned short  minor_rev_num;    /* (word 81) */
   unsigned short  command_set_1;    /* (word 82) supported
                    * 15:    Obsolete
                    * 14:    NOP command
                    * 13:    READ_BUFFER
                    * 12:    WRITE_BUFFER
                    * 11:    Obsolete
                    * 10:    Host Protected Area
                    *  9:    DEVICE Reset
                    *  8:    SERVICE Interrupt
                    *  7:    Release Interrupt
                    *  6:    look-ahead
                    *  5:    write cache
                    *  4:    PACKET Command
                    *  3:    Power Management Feature Set
                    *  2:    Removable Feature Set
                    *  1:    Security Feature Set
                    *  0:    SMART Feature Set
                    */
   unsigned short  command_set_2;    /* (word 83)
                    * 15:    Shall be ZERO
                    * 14:    Shall be ONE
                    * 13:    FLUSH CACHE EXT
                    * 12:    FLUSH CACHE
                    * 11:    Device Configuration Overlay
                    * 10:    48-bit Address Feature Set
                    *  9:    Automatic Acoustic Management
                    *  8:    SET MAX security
                    *  7:    reserved 1407DT PARTIES
                    *  6:    SetF sub-command Power-Up
                    *  5:    Power-Up in Standby Feature Set
                    *  4:    Removable Media Notification
                    *  3:    APM Feature Set
                    *  2:    CFA Feature Set
                    *  1:    READ/WRITE DMA QUEUED
                    *  0:    Download MicroCode
                    */
   unsigned short  cfsse;        /* (word 84)
                    * cmd set-feature supported extensions
                    * 15:    Shall be ZERO
                    * 14:    Shall be ONE
                    * 13:6    reserved
                    *  5:    General Purpose Logging
                    *  4:    Streaming Feature Set
                    *  3:    Media Card Pass Through
                    *  2:    Media Serial Number Valid
                    *  1:    SMART selt-test supported
                    *  0:    SMART error logging
                    */
   unsigned short  cfs_enable_1;    /* (word 85)
                    * command set-feature enabled
                    * 15:    Obsolete
                    * 14:    NOP command
                    * 13:    READ_BUFFER
                    * 12:    WRITE_BUFFER
                    * 11:    Obsolete
                    * 10:    Host Protected Area
                    *  9:    DEVICE Reset
                    *  8:    SERVICE Interrupt
                    *  7:    Release Interrupt
                    *  6:    look-ahead
                    *  5:    write cache
                    *  4:    PACKET Command
                    *  3:    Power Management Feature Set
                    *  2:    Removable Feature Set
                    *  1:    Security Feature Set
                    *  0:    SMART Feature Set
                    */
   unsigned short  cfs_enable_2;    /* (word 86)
                    * command set-feature enabled
                    * 15:    Shall be ZERO
                    * 14:    Shall be ONE
                    * 13:    FLUSH CACHE EXT
                    * 12:    FLUSH CACHE
                    * 11:    Device Configuration Overlay
                    * 10:    48-bit Address Feature Set
                    *  9:    Automatic Acoustic Management
                    *  8:    SET MAX security
                    *  7:    reserved 1407DT PARTIES
                    *  6:    SetF sub-command Power-Up
                    *  5:    Power-Up in Standby Feature Set
                    *  4:    Removable Media Notification
                    *  3:    APM Feature Set
                    *  2:    CFA Feature Set
                    *  1:    READ/WRITE DMA QUEUED
                    *  0:    Download MicroCode
                    */
   unsigned short  csf_default;    /* (word 87)
                    * command set-feature default
                    * 15:    Shall be ZERO
                    * 14:    Shall be ONE
                    * 13:6    reserved
                    *  5:    General Purpose Logging enabled
                    *  4:    Valid CONFIGURE STREAM executed
                    *  3:    Media Card Pass Through enabled
                    *  2:    Media Serial Number Valid
                    *  1:    SMART selt-test supported
                    *  0:    SMART error logging
                    */
   unsigned short  dma_ultra;    /* (word 88) */
   unsigned short    trseuc;        /* time required for security erase */
   unsigned short    trsEuc;        /* time required for enhanced erase */
   unsigned short    CurAPMvalues;    /* current APM values */
   unsigned short    mprc;        /* master password revision code */
   unsigned short    hw_config;    /* hardware config (word 93)
                    * 15:    Shall be ZERO
                    * 14:    Shall be ONE
                    * 13:
                    * 12:
                    * 11:
                    * 10:
                    *  9:
                    *  8:
                    *  7:
                    *  6:
                    *  5:
                    *  4:
                    *  3:
                    *  2:
                    *  1:
                    *  0:    Shall be ONE
                    */
   unsigned short    acoustic;    /* (word 94)
                    * 15:8    Vendor's recommended value
                    *  7:0    current value
                    */
   unsigned short    msrqs;        /* min stream request size */
   unsigned short    sxfert;        /* stream transfer time */
   unsigned short    sal;        /* stream access latency */
   unsigned int    spg;        /* stream performance granularity */
   unsigned long long lba_capacity_2;/* 48-bit total number of sectors */
   unsigned short    words104_125[22];/* reserved words 104-125 */
   unsigned short    last_lun;    /* (word 126) */
   unsigned short    word127;    /* (word 127) Feature Set
                    * Removable Media Notification
                    * 15:2    reserved
                    *  1:0    00 = not supported
                    *    01 = supported
                    *    10 = reserved
                    *    11 = reserved
                    */
   unsigned short    dlf;        /* (word 128)
                    * device lock function
                    * 15:9    reserved
                    *  8    security level 1:max 0:high
                    *  7:6    reserved
                    *  5    enhanced erase
                    *  4    expire
                    *  3    frozen
                    *  2    locked
                    *  1    en/disabled
                    *  0    capability
                    */
   unsigned short  csfo;        /*  (word 129)
                    * current set features options
                    * 15:4    reserved
                    *  3:    auto reassign
                    *  2:    reverting
                    *  1:    read-look-ahead
                    *  0:    write cache
                    */
   unsigned short    words130_155[26];/* reserved vendor words 130-155 */
   unsigned short    word156;    /* reserved vendor word 156 */
   unsigned short    words157_159[3];/* reserved vendor words 157-159 */
   unsigned short    cfa_power;    /* (word 160) CFA Power Mode
                    * 15 word 160 supported
                    * 14 reserved
                    * 13
                    * 12
                    * 11:0
                    */
   unsigned short    words161_175[15];/* Reserved for CFA */
   unsigned short    words176_205[30];/* Current Media Serial Number */
   unsigned short    words206_254[49];/* reserved words 206-254 */
   unsigned short    integrity_word;    /* (word 255)
                    * 15:8 Checksum
                    *  7:0 Signature
                    */
};
#endif /* __KERNEL__ */
 
/*
 * IDE "nice" flags. These are used on a per drive basis to determine
 * when to be nice and give more bandwidth to the other devices which
 * share the same IDE bus.
 */
#define IDE_NICE_DSC_OVERLAP    (0)    /* per the DSC overlap protocol */
#define IDE_NICE_ATAPI_OVERLAP    (1)    /* not supported yet */
#define IDE_NICE_1        (3)    /* when probably won't affect us much */
#ifndef __KERNEL__
#define IDE_NICE_0        (2)    /* when sure that it won't affect us */
#define IDE_NICE_2        (4)    /* when we know it's on our expense */
#endif
 
#endif    /* _LINUX_HDREG_H */