44d283d6b136a2419f243cf600ff2d9614e120cf
[pandora-kernel.git] / Documentation / ioctl / hdio.txt
1                 Summary of HDIO_ ioctl calls.
2                 ============================
3
4                 Edward A. Falk <efalk@google.com>
5
6                 November, 2004
7
8 This document attempts to describe the ioctl(2) calls supported by
9 the HD/IDE layer.  These are by-and-large implemented (as of Linux 2.6)
10 in drivers/ide/ide.c and drivers/block/scsi_ioctl.c
11
12 ioctl values are listed in <linux/hdreg.h>.  As of this writing, they
13 are as follows:
14
15     ioctls that pass argument pointers to user space:
16
17         HDIO_GETGEO             get device geometry
18         HDIO_GET_UNMASKINTR     get current unmask setting
19         HDIO_GET_MULTCOUNT      get current IDE blockmode setting
20         HDIO_GET_QDMA           get use-qdma flag
21         HDIO_SET_XFER           set transfer rate via proc
22         HDIO_OBSOLETE_IDENTITY  OBSOLETE, DO NOT USE
23         HDIO_GET_KEEPSETTINGS   get keep-settings-on-reset flag
24         HDIO_GET_32BIT          get current io_32bit setting
25         HDIO_GET_NOWERR         get ignore-write-error flag
26         HDIO_GET_DMA            get use-dma flag
27         HDIO_GET_NICE           get nice flags
28         HDIO_GET_IDENTITY       get IDE identification info
29         HDIO_GET_WCACHE         get write cache mode on|off
30         HDIO_GET_ACOUSTIC       get acoustic value
31         HDIO_GET_ADDRESS        get sector addressing mode
32         HDIO_GET_BUSSTATE       get the bus state of the hwif
33         HDIO_TRISTATE_HWIF      execute a channel tristate
34         HDIO_DRIVE_RESET        execute a device reset
35         HDIO_DRIVE_TASKFILE     execute raw taskfile
36         HDIO_DRIVE_TASK         execute task and special drive command
37         HDIO_DRIVE_CMD          execute a special drive command
38         HDIO_DRIVE_CMD_AEB      HDIO_DRIVE_TASK
39
40     ioctls that pass non-pointer values:
41
42         HDIO_SET_MULTCOUNT      change IDE blockmode
43         HDIO_SET_UNMASKINTR     permit other irqs during I/O
44         HDIO_SET_KEEPSETTINGS   keep ioctl settings on reset
45         HDIO_SET_32BIT          change io_32bit flags
46         HDIO_SET_NOWERR         change ignore-write-error flag
47         HDIO_SET_DMA            change use-dma flag
48         HDIO_SET_PIO_MODE       reconfig interface to new speed
49         HDIO_SCAN_HWIF          register and (re)scan interface
50         HDIO_SET_NICE           set nice flags
51         HDIO_UNREGISTER_HWIF    unregister interface
52         HDIO_SET_WCACHE         change write cache enable-disable
53         HDIO_SET_ACOUSTIC       change acoustic behavior
54         HDIO_SET_BUSSTATE       set the bus state of the hwif
55         HDIO_SET_QDMA           change use-qdma flag
56         HDIO_SET_ADDRESS        change lba addressing modes
57
58         HDIO_SET_IDE_SCSI       Set scsi emulation mode on/off
59         HDIO_SET_SCSI_IDE       not implemented yet
60
61
62 The information that follows was determined from reading kernel source
63 code.  It is likely that some corrections will be made over time.
64
65
66
67
68
69
70
71 General:
72
73         Unless otherwise specified, all ioctl calls return 0 on success
74         and -1 with errno set to an appropriate value on error.
75
76         Unless otherwise specified, all ioctl calls return -1 and set
77         errno to EFAULT on a failed attempt to copy data to or from user
78         address space.
79
80         Unless otherwise specified, all data structures and constants
81         are defined in <linux/hdreg.h>
82
83
84
85 HDIO_GETGEO                     get device geometry
86
87         usage:
88
89           struct hd_geometry geom;
90           ioctl(fd, HDIO_GETGEO, &geom);
91
92
93         inputs:         none
94
95         outputs:
96
97           hd_geometry structure containing:
98
99             heads       number of heads
100             sectors     number of sectors/track
101             cylinders   number of cylinders, mod 65536
102             start       starting sector of this partition.
103
104
105         error returns:
106           EINVAL        if the device is not a disk drive or floppy drive,
107                         or if the user passes a null pointer
108
109
110         notes:
111
112           Not particularly useful with modern disk drives, whose geometry
113           is a polite fiction anyway.  Modern drives are addressed
114           purely by sector number nowadays (lba addressing), and the
115           drive geometry is an abstraction which is actually subject
116           to change.  Currently (as of Nov 2004), the geometry values
117           are the "bios" values -- presumably the values the drive had
118           when Linux first booted.
119
120           In addition, the cylinders field of the hd_geometry is an
121           unsigned short, meaning that on most architectures, this
122           ioctl will not return a meaningful value on drives with more
123           than 65535 tracks.
124
125           The start field is unsigned long, meaning that it will not
126           contain a meaningful value for disks over 219 Gb in size.
127
128
129
130
131 HDIO_GET_UNMASKINTR             get current unmask setting
132
133         usage:
134
135           long val;
136           ioctl(fd, HDIO_GET_UNMASKINTR, &val);
137
138         inputs:         none
139
140         outputs:
141           The value of the drive's current unmask setting
142
143
144
145 HDIO_SET_UNMASKINTR             permit other irqs during I/O
146
147         usage:
148
149           unsigned long val;
150           ioctl(fd, HDIO_SET_UNMASKINTR, val);
151
152         inputs:
153           New value for unmask flag
154
155         outputs:        none
156
157         error return:
158           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
159           EACCES        Access denied:  requires CAP_SYS_ADMIN
160           EINVAL        value out of range [0 1]
161           EBUSY         Controller busy
162
163
164
165
166 HDIO_GET_MULTCOUNT              get current IDE blockmode setting
167
168         usage:
169
170           long val;
171           ioctl(fd, HDIO_GET_MULTCOUNT, &val);
172
173         inputs:         none
174
175         outputs:
176           The value of the current IDE block mode setting.  This
177           controls how many sectors the drive will transfer per
178           interrupt.
179
180
181
182 HDIO_SET_MULTCOUNT              change IDE blockmode
183
184         usage:
185
186           int val;
187           ioctl(fd, HDIO_SET_MULTCOUNT, val);
188
189         inputs:
190           New value for IDE block mode setting.  This controls how many
191           sectors the drive will transfer per interrupt.
192
193         outputs:        none
194
195         error return:
196           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
197           EACCES        Access denied:  requires CAP_SYS_ADMIN
198           EINVAL        value out of range supported by disk.
199           EBUSY         Controller busy or blockmode already set.
200           EIO           Drive did not accept new block mode.
201
202         notes:
203
204           Source code comments read:
205
206             This is tightly woven into the driver->do_special cannot
207             touch.  DON'T do it again until a total personality rewrite
208             is committed.
209
210           If blockmode has already been set, this ioctl will fail with
211           EBUSY
212
213
214
215 HDIO_GET_QDMA                   get use-qdma flag
216
217         Not implemented, as of 2.6.8.1
218
219
220
221 HDIO_SET_XFER                   set transfer rate via proc
222
223         Not implemented, as of 2.6.8.1
224
225
226
227 HDIO_OBSOLETE_IDENTITY          OBSOLETE, DO NOT USE
228
229         Same as HDIO_GET_IDENTITY (see below), except that it only
230         returns the first 142 bytes of drive identity information.
231
232
233
234 HDIO_GET_IDENTITY               get IDE identification info
235
236         usage:
237
238           unsigned char identity[512];
239           ioctl(fd, HDIO_GET_IDENTITY, identity);
240
241         inputs:         none
242
243         outputs:
244
245           ATA drive identity information.  For full description, see
246           the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in
247           the ATA specification.
248
249         error returns:
250           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
251           ENOMSG        IDENTIFY DEVICE information not available
252
253         notes:
254
255           Returns information that was obtained when the drive was
256           probed.  Some of this information is subject to change, and
257           this ioctl does not re-probe the drive to update the
258           information.
259
260           This information is also available from /proc/ide/hdX/identify
261
262
263
264 HDIO_GET_KEEPSETTINGS           get keep-settings-on-reset flag
265
266         usage:
267
268           long val;
269           ioctl(fd, HDIO_GET_KEEPSETTINGS, &val);
270
271         inputs:         none
272
273         outputs:
274           The value of the current "keep settings" flag
275
276         notes:
277
278           When set, indicates that kernel should restore settings
279           after a drive reset.
280
281
282
283 HDIO_SET_KEEPSETTINGS           keep ioctl settings on reset
284
285         usage:
286
287           long val;
288           ioctl(fd, HDIO_SET_KEEPSETTINGS, val);
289
290         inputs:
291           New value for keep_settings flag
292
293         outputs:        none
294
295         error return:
296           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
297           EACCES        Access denied:  requires CAP_SYS_ADMIN
298           EINVAL        value out of range [0 1]
299           EBUSY         Controller busy
300
301
302
303 HDIO_GET_32BIT                  get current io_32bit setting
304
305         usage:
306
307           long val;
308           ioctl(fd, HDIO_GET_32BIT, &val);
309
310         inputs:         none
311
312         outputs:
313           The value of the current io_32bit setting
314
315         notes:
316
317           0=16-bit, 1=32-bit, 2,3 = 32bit+sync
318
319
320
321 HDIO_GET_NOWERR                 get ignore-write-error flag
322
323         usage:
324
325           long val;
326           ioctl(fd, HDIO_GET_NOWERR, &val);
327
328         inputs:         none
329
330         outputs:
331           The value of the current ignore-write-error flag
332
333
334
335 HDIO_GET_DMA                    get use-dma flag
336
337         usage:
338
339           long val;
340           ioctl(fd, HDIO_GET_DMA, &val);
341
342         inputs:         none
343
344         outputs:
345           The value of the current use-dma flag
346
347
348
349 HDIO_GET_NICE                   get nice flags
350
351         usage:
352
353           long nice;
354           ioctl(fd, HDIO_GET_NICE, &nice);
355
356         inputs:         none
357
358         outputs:
359
360           The drive's "nice" values.
361
362         notes:
363
364           Per-drive flags which determine when the system will give more
365           bandwidth to other devices sharing the same IDE bus.
366           See <linux/hdreg.h>, near symbol IDE_NICE_DSC_OVERLAP.
367
368
369
370
371 HDIO_SET_NICE                   set nice flags
372
373         usage:
374
375           unsigned long nice;
376           ...
377           ioctl(fd, HDIO_SET_NICE, nice);
378
379         inputs:
380           bitmask of nice flags.
381
382         outputs:        none
383
384         error returns:
385           EACCES        Access denied:  requires CAP_SYS_ADMIN
386           EPERM         Flags other than DSC_OVERLAP and NICE_1 set.
387           EPERM         DSC_OVERLAP specified but not supported by drive
388
389         notes:
390
391           This ioctl sets the DSC_OVERLAP and NICE_1 flags from values
392           provided by the user.
393
394           Nice flags are listed in <linux/hdreg.h>, starting with
395           IDE_NICE_DSC_OVERLAP.  These values represent shifts.
396
397
398
399
400
401 HDIO_GET_WCACHE                 get write cache mode on|off
402
403         usage:
404
405           long val;
406           ioctl(fd, HDIO_GET_WCACHE, &val);
407
408         inputs:         none
409
410         outputs:
411           The value of the current write cache mode
412
413
414
415 HDIO_GET_ACOUSTIC               get acoustic value
416
417         usage:
418
419           long val;
420           ioctl(fd, HDIO_GET_ACOUSTIC, &val);
421
422         inputs:         none
423
424         outputs:
425           The value of the current acoustic settings
426
427         notes:
428
429           See HDIO_SET_ACOUSTIC
430
431
432
433 HDIO_GET_ADDRESS
434
435         usage:
436
437           long val;
438           ioctl(fd, HDIO_GET_ADDRESS, &val);
439
440         inputs:         none
441
442         outputs:
443           The value of the current addressing mode:
444             0 = 28-bit
445             1 = 48-bit
446             2 = 48-bit doing 28-bit
447             3 = 64-bit
448
449
450
451 HDIO_GET_BUSSTATE               get the bus state of the hwif
452
453         usage:
454
455           long state;
456           ioctl(fd, HDIO_SCAN_HWIF, &state);
457
458         inputs:         none
459
460         outputs:
461           Current power state of the IDE bus.  One of BUSSTATE_OFF,
462           BUSSTATE_ON, or BUSSTATE_TRISTATE
463
464         error returns:
465           EACCES        Access denied:  requires CAP_SYS_ADMIN
466
467
468
469
470 HDIO_SET_BUSSTATE               set the bus state of the hwif
471
472         usage:
473
474           int state;
475           ...
476           ioctl(fd, HDIO_SCAN_HWIF, state);
477
478         inputs:
479           Desired IDE power state.  One of BUSSTATE_OFF, BUSSTATE_ON,
480           or BUSSTATE_TRISTATE
481
482         outputs:        none
483
484         error returns:
485           EACCES        Access denied:  requires CAP_SYS_RAWIO
486           EOPNOTSUPP    Hardware interface does not support bus power control
487
488
489
490
491 HDIO_TRISTATE_HWIF              execute a channel tristate
492
493         Not implemented, as of 2.6.8.1.  See HDIO_SET_BUSSTATE
494
495
496
497 HDIO_DRIVE_RESET                execute a device reset
498
499         usage:
500
501           int args[3]
502           ...
503           ioctl(fd, HDIO_DRIVE_RESET, args);
504
505         inputs:         none
506
507         outputs:        none
508
509         error returns:
510           EACCES        Access denied:  requires CAP_SYS_ADMIN
511
512         notes:
513
514           Execute a reset on the device as soon as the current IO
515           operation has completed.
516
517           Executes an ATAPI soft reset if applicable, otherwise
518           executes an ATA soft reset on the controller.
519
520
521
522 HDIO_DRIVE_TASKFILE             execute raw taskfile
523
524         Note:  If you don't have a copy of the ANSI ATA specification
525         handy, you should probably ignore this ioctl.
526
527         Execute an ATA disk command directly by writing the "taskfile"
528         registers of the drive.  Requires ADMIN and RAWIO access
529         privileges.
530
531         usage:
532
533           struct {
534             ide_task_request_t req_task;
535             u8 outbuf[OUTPUT_SIZE];
536             u8 inbuf[INPUT_SIZE];
537           } task;
538           memset(&task.req_task, 0, sizeof(task.req_task));
539           task.req_task.out_size = sizeof(task.outbuf);
540           task.req_task.in_size = sizeof(task.inbuf);
541           ...
542           ioctl(fd, HDIO_DRIVE_TASKFILE, &task);
543           ...
544
545         inputs:
546
547           (See below for details on memory area passed to ioctl.)
548
549           io_ports[8]   values to be written to taskfile registers
550           hob_ports[8]  high-order bytes, for extended commands.
551           out_flags     flags indicating which registers are valid
552           in_flags      flags indicating which registers should be returned
553           data_phase    see below
554           req_cmd       command type to be executed
555           out_size      size of output buffer
556           outbuf        buffer of data to be transmitted to disk
557           inbuf         buffer of data to be received from disk (see [1])
558
559         outputs:
560
561           io_ports[]    values returned in the taskfile registers
562           hob_ports[]   high-order bytes, for extended commands.
563           out_flags     flags indicating which registers are valid (see [2])
564           in_flags      flags indicating which registers should be returned
565           outbuf        buffer of data to be transmitted to disk (see [1])
566           inbuf         buffer of data to be received from disk
567
568         error returns:
569           EACCES        CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set.
570           ENOMSG        Device is not a disk drive.
571           ENOMEM        Unable to allocate memory for task
572           EFAULT        req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8)
573           EPERM         req_cmd == TASKFILE_MULTI_OUT and drive
574                         multi-count not yet set.
575           EIO           Drive failed the command.
576
577         notes:
578
579           [1] READ THE FOLLOWING NOTES *CAREFULLY*.  THIS IOCTL IS
580           FULL OF GOTCHAS.  Extreme caution should be used with using
581           this ioctl.  A mistake can easily corrupt data or hang the
582           system.
583
584           [2] Both the input and output buffers are copied from the
585           user and written back to the user, even when not used.
586
587           [3] If one or more bits are set in out_flags and in_flags is
588           zero, the following values are used for in_flags.all and
589           written back into in_flags on completion.
590
591            * IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8)
592              if LBA48 addressing is enabled for the drive
593            * IDE_TASKFILE_STD_IN_FLAGS
594              if CHS/LBA28
595
596           The association between in_flags.all and each enable
597           bitfield flips depending on endianess; fortunately, TASKFILE
598           only uses inflags.b.data bit and ignores all other bits.
599           The end result is that, on any endian machines, it has no
600           effect other than modifying in_flags on completion.
601
602           [4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit)
603           except for four drives per port chipsets.  For four drives
604           per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first
605           pair and (0x80|DEV_bit|LBA_bit) for the second pair.
606
607           [5] The argument to the ioctl is a pointer to a region of
608           memory containing a ide_task_request_t structure, followed
609           by an optional buffer of data to be transmitted to the
610           drive, followed by an optional buffer to receive data from
611           the drive.
612
613           Command is passed to the disk drive via the ide_task_request_t
614           structure, which contains these fields:
615
616             io_ports[8]         values for the taskfile registers
617             hob_ports[8]        high-order bytes, for extended commands
618             out_flags           flags indicating which entries in the
619                                 io_ports[] and hob_ports[] arrays
620                                 contain valid values.  Type ide_reg_valid_t.
621             in_flags            flags indicating which entries in the
622                                 io_ports[] and hob_ports[] arrays
623                                 are expected to contain valid values
624                                 on return.
625             data_phase          See below
626             req_cmd             Command type, see below
627             out_size            output (user->drive) buffer size, bytes
628             in_size             input (drive->user) buffer size, bytes
629
630           When out_flags is zero, the following registers are loaded.
631
632             HOB_FEATURE         If the drive supports LBA48
633             HOB_NSECTOR         If the drive supports LBA48
634             HOB_SECTOR          If the drive supports LBA48
635             HOB_LCYL            If the drive supports LBA48
636             HOB_HCYL            If the drive supports LBA48
637             FEATURE
638             NSECTOR
639             SECTOR
640             LCYL
641             HCYL
642             SELECT              First, masked with 0xE0 if LBA48, 0xEF
643                                 otherwise; then, or'ed with the default
644                                 value of SELECT.
645
646           If any bit in out_flags is set, the following registers are loaded.
647
648             HOB_DATA            If out_flags.b.data is set.  HOB_DATA will
649                                 travel on DD8-DD15 on little endian machines
650                                 and on DD0-DD7 on big endian machines.
651             DATA                If out_flags.b.data is set.  DATA will
652                                 travel on DD0-DD7 on little endian machines
653                                 and on DD8-DD15 on big endian machines.
654             HOB_NSECTOR         If out_flags.b.nsector_hob is set
655             HOB_SECTOR          If out_flags.b.sector_hob is set
656             HOB_LCYL            If out_flags.b.lcyl_hob is set
657             HOB_HCYL            If out_flags.b.hcyl_hob is set
658             FEATURE             If out_flags.b.feature is set
659             NSECTOR             If out_flags.b.nsector is set
660             SECTOR              If out_flags.b.sector is set
661             LCYL                If out_flags.b.lcyl is set
662             HCYL                If out_flags.b.hcyl is set
663             SELECT              Or'ed with the default value of SELECT and
664                                 loaded regardless of out_flags.b.select.
665
666           Taskfile registers are read back from the drive into
667           {io|hob}_ports[] after the command completes iff one of the
668           following conditions is met; otherwise, the original values
669           will be written back, unchanged.
670
671             1. The drive fails the command (EIO).
672             2. One or more than one bits are set in out_flags.
673             3. The requested data_phase is TASKFILE_NO_DATA.
674
675             HOB_DATA            If in_flags.b.data is set.  It will contain
676                                 DD8-DD15 on little endian machines and
677                                 DD0-DD7 on big endian machines.
678             DATA                If in_flags.b.data is set.  It will contain
679                                 DD0-DD7 on little endian machines and
680                                 DD8-DD15 on big endian machines.
681             HOB_FEATURE         If the drive supports LBA48
682             HOB_NSECTOR         If the drive supports LBA48
683             HOB_SECTOR          If the drive supports LBA48
684             HOB_LCYL            If the drive supports LBA48
685             HOB_HCYL            If the drive supports LBA48
686             NSECTOR
687             SECTOR
688             LCYL
689             HCYL
690
691           The data_phase field describes the data transfer to be
692           performed.  Value is one of:
693
694             TASKFILE_IN
695             TASKFILE_MULTI_IN
696             TASKFILE_OUT
697             TASKFILE_MULTI_OUT
698             TASKFILE_IN_OUT
699             TASKFILE_IN_DMA
700             TASKFILE_IN_DMAQ            == IN_DMA (queueing not supported)
701             TASKFILE_OUT_DMA
702             TASKFILE_OUT_DMAQ           == OUT_DMA (queueing not supported)
703             TASKFILE_P_IN               unimplemented
704             TASKFILE_P_IN_DMA           unimplemented
705             TASKFILE_P_IN_DMAQ          unimplemented
706             TASKFILE_P_OUT              unimplemented
707             TASKFILE_P_OUT_DMA          unimplemented
708             TASKFILE_P_OUT_DMAQ         unimplemented
709
710           The req_cmd field classifies the command type.  It may be
711           one of:
712
713             IDE_DRIVE_TASK_NO_DATA
714             IDE_DRIVE_TASK_SET_XFER     unimplemented
715             IDE_DRIVE_TASK_IN
716             IDE_DRIVE_TASK_OUT          unimplemented
717             IDE_DRIVE_TASK_RAW_WRITE
718
719           [6] Do not access {in|out}_flags->all except for resetting
720           all the bits.  Always access individual bit fields.  ->all
721           value will flip depending on endianess.  For the same
722           reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS
723           constants defined in hdreg.h.
724
725
726
727 HDIO_DRIVE_CMD                  execute a special drive command
728
729         Note:  If you don't have a copy of the ANSI ATA specification
730         handy, you should probably ignore this ioctl.
731
732         usage:
733
734           u8 args[4+XFER_SIZE];
735           ...
736           ioctl(fd, HDIO_DRIVE_CMD, args);
737
738         inputs:
739
740           Commands other than WIN_SMART
741             args[0]     COMMAND
742             args[1]     NSECTOR
743             args[2]     FEATURE
744             args[3]     NSECTOR
745
746           WIN_SMART
747             args[0]     COMMAND
748             args[1]     SECTOR
749             args[2]     FEATURE
750             args[3]     NSECTOR
751
752         outputs:
753
754           args[] buffer is filled with register values followed by any
755           data returned by the disk.
756             args[0]     status
757             args[1]     error
758             args[2]     NSECTOR
759             args[3]     undefined
760             args[4+]    NSECTOR * 512 bytes of data returned by the command.
761
762         error returns:
763           EACCES        Access denied:  requires CAP_SYS_RAWIO
764           ENOMEM        Unable to allocate memory for task
765           EIO           Drive reports error
766
767         notes:
768
769           [1] For commands other than WIN_SMART, args[1] should equal
770           args[3].  SECTOR, LCYL and HCYL are undefined.  For
771           WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL
772           respectively.  In both cases SELECT will contain the default
773           value for the drive.  Please refer to HDIO_DRIVE_TASKFILE
774           notes for the default value of SELECT.
775
776           [2] If NSECTOR value is greater than zero and the drive sets
777           DRQ when interrupting for the command, NSECTOR * 512 bytes
778           are read from the device into the area following NSECTOR.
779           In the above example, the area would be
780           args[4..4+XFER_SIZE].  16bit PIO is used regardless of
781           HDIO_SET_32BIT setting.
782
783           [3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER
784           && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA
785           mode, IDE driver will try to tune the transfer mode of the
786           drive accordingly.
787
788
789
790 HDIO_DRIVE_TASK                 execute task and special drive command
791
792         Note:  If you don't have a copy of the ANSI ATA specification
793         handy, you should probably ignore this ioctl.
794
795         usage:
796
797           u8 args[7];
798           ...
799           ioctl(fd, HDIO_DRIVE_TASK, args);
800
801         inputs:
802
803           Taskfile register values:
804             args[0]     COMMAND
805             args[1]     FEATURE
806             args[2]     NSECTOR
807             args[3]     SECTOR
808             args[4]     LCYL
809             args[5]     HCYL
810             args[6]     SELECT
811
812         outputs:
813
814           Taskfile register values:
815             args[0]     status
816             args[1]     error
817             args[2]     NSECTOR
818             args[3]     SECTOR
819             args[4]     LCYL
820             args[5]     HCYL
821             args[6]     SELECT
822
823         error returns:
824           EACCES        Access denied:  requires CAP_SYS_RAWIO
825           ENOMEM        Unable to allocate memory for task
826           ENOMSG        Device is not a disk drive.
827           EIO           Drive failed the command.
828
829         notes:
830
831           [1] DEV bit (0x10) of SELECT register is ignored and the
832           appropriate value for the drive is used.  All other bits
833           are used unaltered.
834
835
836
837 HDIO_DRIVE_CMD_AEB              HDIO_DRIVE_TASK
838
839         Not implemented, as of 2.6.8.1
840
841
842
843 HDIO_SET_32BIT                  change io_32bit flags
844
845         usage:
846
847           int val;
848           ioctl(fd, HDIO_SET_32BIT, val);
849
850         inputs:
851           New value for io_32bit flag
852
853         outputs:        none
854
855         error return:
856           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
857           EACCES        Access denied:  requires CAP_SYS_ADMIN
858           EINVAL        value out of range [0 3]
859           EBUSY         Controller busy
860
861
862
863
864 HDIO_SET_NOWERR                 change ignore-write-error flag
865
866         usage:
867
868           int val;
869           ioctl(fd, HDIO_SET_NOWERR, val);
870
871         inputs:
872           New value for ignore-write-error flag.  Used for ignoring
873           WRERR_STAT
874
875         outputs:        none
876
877         error return:
878           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
879           EACCES        Access denied:  requires CAP_SYS_ADMIN
880           EINVAL        value out of range [0 1]
881           EBUSY         Controller busy
882
883
884
885 HDIO_SET_DMA                    change use-dma flag
886
887         usage:
888
889           long val;
890           ioctl(fd, HDIO_SET_DMA, val);
891
892         inputs:
893           New value for use-dma flag
894
895         outputs:        none
896
897         error return:
898           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
899           EACCES        Access denied:  requires CAP_SYS_ADMIN
900           EINVAL        value out of range [0 1]
901           EBUSY         Controller busy
902
903
904
905 HDIO_SET_PIO_MODE               reconfig interface to new speed
906
907         usage:
908
909           long val;
910           ioctl(fd, HDIO_SET_PIO_MODE, val);
911
912         inputs:
913           New interface speed.
914
915         outputs:        none
916
917         error return:
918           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
919           EACCES        Access denied:  requires CAP_SYS_ADMIN
920           EINVAL        value out of range [0 255]
921           EBUSY         Controller busy
922
923
924
925 HDIO_SCAN_HWIF                  register and (re)scan interface
926
927         usage:
928
929           int args[3]
930           ...
931           ioctl(fd, HDIO_SCAN_HWIF, args);
932
933         inputs:
934           args[0]       io address to probe
935           args[1]       control address to probe
936           args[2]       irq number
937
938         outputs:        none
939
940         error returns:
941           EACCES        Access denied:  requires CAP_SYS_RAWIO
942           EIO           Probe failed.
943
944         notes:
945
946           This ioctl initializes the addresses and irq for a disk
947           controller, probes for drives, and creates /proc/ide
948           interfaces as appropriate.
949
950
951
952 HDIO_UNREGISTER_HWIF            unregister interface
953
954         usage:
955
956           int index;
957           ioctl(fd, HDIO_UNREGISTER_HWIF, index);
958
959         inputs:
960           index         index of hardware interface to unregister
961
962         outputs:        none
963
964         error returns:
965           EACCES        Access denied:  requires CAP_SYS_RAWIO
966
967         notes:
968
969           This ioctl removes a hardware interface from the kernel.
970
971           Currently (2.6.8) this ioctl silently fails if any drive on
972           the interface is busy.
973
974
975
976 HDIO_SET_WCACHE                 change write cache enable-disable
977
978         usage:
979
980           int val;
981           ioctl(fd, HDIO_SET_WCACHE, val);
982
983         inputs:
984           New value for write cache enable
985
986         outputs:        none
987
988         error return:
989           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
990           EACCES        Access denied:  requires CAP_SYS_ADMIN
991           EINVAL        value out of range [0 1]
992           EBUSY         Controller busy
993
994
995
996 HDIO_SET_ACOUSTIC               change acoustic behavior
997
998         usage:
999
1000           int val;
1001           ioctl(fd, HDIO_SET_ACOUSTIC, val);
1002
1003         inputs:
1004           New value for drive acoustic settings
1005
1006         outputs:        none
1007
1008         error return:
1009           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
1010           EACCES        Access denied:  requires CAP_SYS_ADMIN
1011           EINVAL        value out of range [0 254]
1012           EBUSY         Controller busy
1013
1014
1015
1016 HDIO_SET_QDMA                   change use-qdma flag
1017
1018         Not implemented, as of 2.6.8.1
1019
1020
1021
1022 HDIO_SET_ADDRESS                change lba addressing modes
1023
1024         usage:
1025
1026           int val;
1027           ioctl(fd, HDIO_SET_ADDRESS, val);
1028
1029         inputs:
1030           New value for addressing mode
1031             0 = 28-bit
1032             1 = 48-bit
1033             2 = 48-bit doing 28-bit
1034
1035         outputs:        none
1036
1037         error return:
1038           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
1039           EACCES        Access denied:  requires CAP_SYS_ADMIN
1040           EINVAL        value out of range [0 2]
1041           EBUSY         Controller busy
1042           EIO           Drive does not support lba48 mode.
1043
1044
1045 HDIO_SET_IDE_SCSI
1046
1047         usage:
1048
1049           long val;
1050           ioctl(fd, HDIO_SET_IDE_SCSI, val);
1051
1052         inputs:
1053           New value for scsi emulation mode (?)
1054
1055         outputs:        none
1056
1057         error return:
1058           EINVAL        (bdev != bdev->bd_contains) (not sure what this means)
1059           EACCES        Access denied:  requires CAP_SYS_ADMIN
1060           EINVAL        value out of range [0 1]
1061           EBUSY         Controller busy
1062
1063
1064
1065 HDIO_SET_SCSI_IDE
1066
1067         Not implemented, as of 2.6.8.1
1068
1069