blob: 18eb98c44ffeb1e24bec6c1efb7b6937d97fb75a [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001 Summary of HDIO_ ioctl calls.
2 ============================
3
4 Edward A. Falk <efalk@google.com>
5
6 November, 2004
7
8This document attempts to describe the ioctl(2) calls supported by
9the HD/IDE layer. These are by-and-large implemented (as of Linux 2.6)
10in drivers/ide/ide.c and drivers/block/scsi_ioctl.c
11
12ioctl values are listed in <linux/hdreg.h>. As of this writing, they
13are 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
62The information that follows was determined from reading kernel source
63code. It is likely that some corrections will be made over time.
64
65
66
67
68
69
70
71General:
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
85HDIO_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
131HDIO_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
145HDIO_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
166HDIO_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
182HDIO_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
Matt LaPlante84eb8d02006-10-03 22:53:09 +0200206 This is tightly woven into the driver->do_special cannot
Linus Torvalds1da177e2005-04-16 15:20:36 -0700207 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
215HDIO_GET_QDMA get use-qdma flag
216
217 Not implemented, as of 2.6.8.1
218
219
220
221HDIO_SET_XFER set transfer rate via proc
222
223 Not implemented, as of 2.6.8.1
224
225
226
227HDIO_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
234HDIO_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
264HDIO_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
283HDIO_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
303HDIO_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
321HDIO_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
335HDIO_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
349HDIO_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
371HDIO_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
401HDIO_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
415HDIO_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
433HDIO_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
451HDIO_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
470HDIO_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
491HDIO_TRISTATE_HWIF execute a channel tristate
492
493 Not implemented, as of 2.6.8.1. See HDIO_SET_BUSSTATE
494
495
496
497HDIO_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
Elias Oltmanns64a8f002008-07-16 20:33:48 +0200511 ENXIO No such device: phy dead or ctl_addr == 0
512 EIO I/O error: reset timed out or hardware error
Linus Torvalds1da177e2005-04-16 15:20:36 -0700513
514 notes:
515
Elias Oltmannsbb7ee9b2008-07-16 20:33:48 +0200516 Execute a reset on the device as soon as the current IO
517 operation has completed.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700518
519 Executes an ATAPI soft reset if applicable, otherwise
520 executes an ATA soft reset on the controller.
521
522
523
524HDIO_DRIVE_TASKFILE execute raw taskfile
525
526 Note: If you don't have a copy of the ANSI ATA specification
527 handy, you should probably ignore this ioctl.
528
529 Execute an ATA disk command directly by writing the "taskfile"
530 registers of the drive. Requires ADMIN and RAWIO access
531 privileges.
532
533 usage:
534
535 struct {
536 ide_task_request_t req_task;
537 u8 outbuf[OUTPUT_SIZE];
538 u8 inbuf[INPUT_SIZE];
539 } task;
540 memset(&task.req_task, 0, sizeof(task.req_task));
541 task.req_task.out_size = sizeof(task.outbuf);
542 task.req_task.in_size = sizeof(task.inbuf);
543 ...
544 ioctl(fd, HDIO_DRIVE_TASKFILE, &task);
545 ...
546
547 inputs:
548
549 (See below for details on memory area passed to ioctl.)
550
551 io_ports[8] values to be written to taskfile registers
552 hob_ports[8] high-order bytes, for extended commands.
553 out_flags flags indicating which registers are valid
554 in_flags flags indicating which registers should be returned
555 data_phase see below
556 req_cmd command type to be executed
557 out_size size of output buffer
558 outbuf buffer of data to be transmitted to disk
559 inbuf buffer of data to be received from disk (see [1])
560
561 outputs:
562
563 io_ports[] values returned in the taskfile registers
564 hob_ports[] high-order bytes, for extended commands.
565 out_flags flags indicating which registers are valid (see [2])
566 in_flags flags indicating which registers should be returned
567 outbuf buffer of data to be transmitted to disk (see [1])
568 inbuf buffer of data to be received from disk
569
570 error returns:
571 EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set.
572 ENOMSG Device is not a disk drive.
573 ENOMEM Unable to allocate memory for task
574 EFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8)
575 EPERM req_cmd == TASKFILE_MULTI_OUT and drive
576 multi-count not yet set.
577 EIO Drive failed the command.
578
579 notes:
580
581 [1] READ THE FOLLOWING NOTES *CAREFULLY*. THIS IOCTL IS
582 FULL OF GOTCHAS. Extreme caution should be used with using
583 this ioctl. A mistake can easily corrupt data or hang the
584 system.
585
586 [2] Both the input and output buffers are copied from the
587 user and written back to the user, even when not used.
588
589 [3] If one or more bits are set in out_flags and in_flags is
590 zero, the following values are used for in_flags.all and
591 written back into in_flags on completion.
592
593 * IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8)
594 if LBA48 addressing is enabled for the drive
595 * IDE_TASKFILE_STD_IN_FLAGS
596 if CHS/LBA28
597
598 The association between in_flags.all and each enable
Masanari Iida40e47122012-03-04 23:16:11 +0900599 bitfield flips depending on endianness; fortunately, TASKFILE
Linus Torvalds1da177e2005-04-16 15:20:36 -0700600 only uses inflags.b.data bit and ignores all other bits.
601 The end result is that, on any endian machines, it has no
602 effect other than modifying in_flags on completion.
603
604 [4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit)
605 except for four drives per port chipsets. For four drives
606 per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first
607 pair and (0x80|DEV_bit|LBA_bit) for the second pair.
608
609 [5] The argument to the ioctl is a pointer to a region of
610 memory containing a ide_task_request_t structure, followed
611 by an optional buffer of data to be transmitted to the
612 drive, followed by an optional buffer to receive data from
613 the drive.
614
615 Command is passed to the disk drive via the ide_task_request_t
616 structure, which contains these fields:
617
618 io_ports[8] values for the taskfile registers
619 hob_ports[8] high-order bytes, for extended commands
620 out_flags flags indicating which entries in the
621 io_ports[] and hob_ports[] arrays
622 contain valid values. Type ide_reg_valid_t.
623 in_flags flags indicating which entries in the
624 io_ports[] and hob_ports[] arrays
625 are expected to contain valid values
626 on return.
627 data_phase See below
628 req_cmd Command type, see below
629 out_size output (user->drive) buffer size, bytes
630 in_size input (drive->user) buffer size, bytes
631
632 When out_flags is zero, the following registers are loaded.
633
634 HOB_FEATURE If the drive supports LBA48
635 HOB_NSECTOR If the drive supports LBA48
636 HOB_SECTOR If the drive supports LBA48
637 HOB_LCYL If the drive supports LBA48
638 HOB_HCYL If the drive supports LBA48
639 FEATURE
640 NSECTOR
641 SECTOR
642 LCYL
643 HCYL
644 SELECT First, masked with 0xE0 if LBA48, 0xEF
645 otherwise; then, or'ed with the default
646 value of SELECT.
647
648 If any bit in out_flags is set, the following registers are loaded.
649
650 HOB_DATA If out_flags.b.data is set. HOB_DATA will
651 travel on DD8-DD15 on little endian machines
652 and on DD0-DD7 on big endian machines.
653 DATA If out_flags.b.data is set. DATA will
654 travel on DD0-DD7 on little endian machines
655 and on DD8-DD15 on big endian machines.
656 HOB_NSECTOR If out_flags.b.nsector_hob is set
657 HOB_SECTOR If out_flags.b.sector_hob is set
658 HOB_LCYL If out_flags.b.lcyl_hob is set
659 HOB_HCYL If out_flags.b.hcyl_hob is set
660 FEATURE If out_flags.b.feature is set
661 NSECTOR If out_flags.b.nsector is set
662 SECTOR If out_flags.b.sector is set
663 LCYL If out_flags.b.lcyl is set
664 HCYL If out_flags.b.hcyl is set
665 SELECT Or'ed with the default value of SELECT and
666 loaded regardless of out_flags.b.select.
667
668 Taskfile registers are read back from the drive into
669 {io|hob}_ports[] after the command completes iff one of the
670 following conditions is met; otherwise, the original values
671 will be written back, unchanged.
672
673 1. The drive fails the command (EIO).
674 2. One or more than one bits are set in out_flags.
675 3. The requested data_phase is TASKFILE_NO_DATA.
676
677 HOB_DATA If in_flags.b.data is set. It will contain
678 DD8-DD15 on little endian machines and
679 DD0-DD7 on big endian machines.
680 DATA If in_flags.b.data is set. It will contain
681 DD0-DD7 on little endian machines and
682 DD8-DD15 on big endian machines.
683 HOB_FEATURE If the drive supports LBA48
684 HOB_NSECTOR If the drive supports LBA48
685 HOB_SECTOR If the drive supports LBA48
686 HOB_LCYL If the drive supports LBA48
687 HOB_HCYL If the drive supports LBA48
688 NSECTOR
689 SECTOR
690 LCYL
691 HCYL
692
693 The data_phase field describes the data transfer to be
694 performed. Value is one of:
695
696 TASKFILE_IN
697 TASKFILE_MULTI_IN
698 TASKFILE_OUT
699 TASKFILE_MULTI_OUT
700 TASKFILE_IN_OUT
701 TASKFILE_IN_DMA
702 TASKFILE_IN_DMAQ == IN_DMA (queueing not supported)
703 TASKFILE_OUT_DMA
704 TASKFILE_OUT_DMAQ == OUT_DMA (queueing not supported)
705 TASKFILE_P_IN unimplemented
706 TASKFILE_P_IN_DMA unimplemented
707 TASKFILE_P_IN_DMAQ unimplemented
708 TASKFILE_P_OUT unimplemented
709 TASKFILE_P_OUT_DMA unimplemented
710 TASKFILE_P_OUT_DMAQ unimplemented
711
712 The req_cmd field classifies the command type. It may be
713 one of:
714
715 IDE_DRIVE_TASK_NO_DATA
716 IDE_DRIVE_TASK_SET_XFER unimplemented
717 IDE_DRIVE_TASK_IN
718 IDE_DRIVE_TASK_OUT unimplemented
719 IDE_DRIVE_TASK_RAW_WRITE
720
721 [6] Do not access {in|out}_flags->all except for resetting
722 all the bits. Always access individual bit fields. ->all
Masanari Iida40e47122012-03-04 23:16:11 +0900723 value will flip depending on endianness. For the same
Linus Torvalds1da177e2005-04-16 15:20:36 -0700724 reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS
725 constants defined in hdreg.h.
726
727
728
729HDIO_DRIVE_CMD execute a special drive command
730
731 Note: If you don't have a copy of the ANSI ATA specification
732 handy, you should probably ignore this ioctl.
733
734 usage:
735
736 u8 args[4+XFER_SIZE];
737 ...
738 ioctl(fd, HDIO_DRIVE_CMD, args);
739
740 inputs:
741
742 Commands other than WIN_SMART
743 args[0] COMMAND
744 args[1] NSECTOR
745 args[2] FEATURE
746 args[3] NSECTOR
747
748 WIN_SMART
749 args[0] COMMAND
750 args[1] SECTOR
751 args[2] FEATURE
752 args[3] NSECTOR
753
754 outputs:
755
756 args[] buffer is filled with register values followed by any
757 data returned by the disk.
758 args[0] status
759 args[1] error
760 args[2] NSECTOR
761 args[3] undefined
762 args[4+] NSECTOR * 512 bytes of data returned by the command.
763
764 error returns:
765 EACCES Access denied: requires CAP_SYS_RAWIO
766 ENOMEM Unable to allocate memory for task
767 EIO Drive reports error
768
769 notes:
770
771 [1] For commands other than WIN_SMART, args[1] should equal
772 args[3]. SECTOR, LCYL and HCYL are undefined. For
773 WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL
774 respectively. In both cases SELECT will contain the default
775 value for the drive. Please refer to HDIO_DRIVE_TASKFILE
776 notes for the default value of SELECT.
777
778 [2] If NSECTOR value is greater than zero and the drive sets
779 DRQ when interrupting for the command, NSECTOR * 512 bytes
780 are read from the device into the area following NSECTOR.
781 In the above example, the area would be
782 args[4..4+XFER_SIZE]. 16bit PIO is used regardless of
783 HDIO_SET_32BIT setting.
784
785 [3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER
786 && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA
787 mode, IDE driver will try to tune the transfer mode of the
788 drive accordingly.
789
790
791
792HDIO_DRIVE_TASK execute task and special drive command
793
794 Note: If you don't have a copy of the ANSI ATA specification
795 handy, you should probably ignore this ioctl.
796
797 usage:
798
799 u8 args[7];
800 ...
801 ioctl(fd, HDIO_DRIVE_TASK, args);
802
803 inputs:
804
805 Taskfile register values:
806 args[0] COMMAND
807 args[1] FEATURE
808 args[2] NSECTOR
809 args[3] SECTOR
810 args[4] LCYL
811 args[5] HCYL
812 args[6] SELECT
813
814 outputs:
815
816 Taskfile register values:
817 args[0] status
818 args[1] error
819 args[2] NSECTOR
820 args[3] SECTOR
821 args[4] LCYL
822 args[5] HCYL
823 args[6] SELECT
824
825 error returns:
826 EACCES Access denied: requires CAP_SYS_RAWIO
827 ENOMEM Unable to allocate memory for task
828 ENOMSG Device is not a disk drive.
829 EIO Drive failed the command.
830
831 notes:
832
833 [1] DEV bit (0x10) of SELECT register is ignored and the
834 appropriate value for the drive is used. All other bits
835 are used unaltered.
836
837
838
839HDIO_DRIVE_CMD_AEB HDIO_DRIVE_TASK
840
841 Not implemented, as of 2.6.8.1
842
843
844
845HDIO_SET_32BIT change io_32bit flags
846
847 usage:
848
849 int val;
850 ioctl(fd, HDIO_SET_32BIT, val);
851
852 inputs:
853 New value for io_32bit flag
854
855 outputs: none
856
857 error return:
858 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
859 EACCES Access denied: requires CAP_SYS_ADMIN
860 EINVAL value out of range [0 3]
861 EBUSY Controller busy
862
863
864
865
866HDIO_SET_NOWERR change ignore-write-error flag
867
868 usage:
869
870 int val;
871 ioctl(fd, HDIO_SET_NOWERR, val);
872
873 inputs:
874 New value for ignore-write-error flag. Used for ignoring
875 WRERR_STAT
876
877 outputs: none
878
879 error return:
880 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
881 EACCES Access denied: requires CAP_SYS_ADMIN
882 EINVAL value out of range [0 1]
883 EBUSY Controller busy
884
885
886
887HDIO_SET_DMA change use-dma flag
888
889 usage:
890
891 long val;
892 ioctl(fd, HDIO_SET_DMA, val);
893
894 inputs:
895 New value for use-dma flag
896
897 outputs: none
898
899 error return:
900 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
901 EACCES Access denied: requires CAP_SYS_ADMIN
902 EINVAL value out of range [0 1]
903 EBUSY Controller busy
904
905
906
907HDIO_SET_PIO_MODE reconfig interface to new speed
908
909 usage:
910
911 long val;
912 ioctl(fd, HDIO_SET_PIO_MODE, val);
913
914 inputs:
915 New interface speed.
916
917 outputs: none
918
919 error return:
920 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
921 EACCES Access denied: requires CAP_SYS_ADMIN
922 EINVAL value out of range [0 255]
923 EBUSY Controller busy
924
925
926
927HDIO_SCAN_HWIF register and (re)scan interface
928
929 usage:
930
931 int args[3]
932 ...
933 ioctl(fd, HDIO_SCAN_HWIF, args);
934
935 inputs:
936 args[0] io address to probe
937 args[1] control address to probe
938 args[2] irq number
939
940 outputs: none
941
942 error returns:
943 EACCES Access denied: requires CAP_SYS_RAWIO
944 EIO Probe failed.
945
946 notes:
947
948 This ioctl initializes the addresses and irq for a disk
949 controller, probes for drives, and creates /proc/ide
Adrian Bunk575c9682006-01-15 02:00:17 +0100950 interfaces as appropriate.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700951
952
953
954HDIO_UNREGISTER_HWIF unregister interface
955
956 usage:
957
958 int index;
959 ioctl(fd, HDIO_UNREGISTER_HWIF, index);
960
961 inputs:
962 index index of hardware interface to unregister
963
964 outputs: none
965
966 error returns:
967 EACCES Access denied: requires CAP_SYS_RAWIO
968
969 notes:
970
971 This ioctl removes a hardware interface from the kernel.
972
973 Currently (2.6.8) this ioctl silently fails if any drive on
974 the interface is busy.
975
976
977
978HDIO_SET_WCACHE change write cache enable-disable
979
980 usage:
981
982 int val;
983 ioctl(fd, HDIO_SET_WCACHE, val);
984
985 inputs:
986 New value for write cache enable
987
988 outputs: none
989
990 error return:
991 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
992 EACCES Access denied: requires CAP_SYS_ADMIN
993 EINVAL value out of range [0 1]
994 EBUSY Controller busy
995
996
997
998HDIO_SET_ACOUSTIC change acoustic behavior
999
1000 usage:
1001
1002 int val;
1003 ioctl(fd, HDIO_SET_ACOUSTIC, val);
1004
1005 inputs:
1006 New value for drive acoustic settings
1007
1008 outputs: none
1009
1010 error return:
1011 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1012 EACCES Access denied: requires CAP_SYS_ADMIN
1013 EINVAL value out of range [0 254]
1014 EBUSY Controller busy
1015
1016
1017
1018HDIO_SET_QDMA change use-qdma flag
1019
1020 Not implemented, as of 2.6.8.1
1021
1022
1023
1024HDIO_SET_ADDRESS change lba addressing modes
1025
1026 usage:
1027
1028 int val;
1029 ioctl(fd, HDIO_SET_ADDRESS, val);
1030
1031 inputs:
1032 New value for addressing mode
1033 0 = 28-bit
1034 1 = 48-bit
1035 2 = 48-bit doing 28-bit
1036
1037 outputs: none
1038
1039 error return:
1040 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1041 EACCES Access denied: requires CAP_SYS_ADMIN
1042 EINVAL value out of range [0 2]
1043 EBUSY Controller busy
1044 EIO Drive does not support lba48 mode.
1045
1046
1047HDIO_SET_IDE_SCSI
1048
1049 usage:
1050
1051 long val;
1052 ioctl(fd, HDIO_SET_IDE_SCSI, val);
1053
1054 inputs:
1055 New value for scsi emulation mode (?)
1056
1057 outputs: none
1058
1059 error return:
1060 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1061 EACCES Access denied: requires CAP_SYS_ADMIN
1062 EINVAL value out of range [0 1]
1063 EBUSY Controller busy
1064
1065
1066
1067HDIO_SET_SCSI_IDE
1068
1069 Not implemented, as of 2.6.8.1
1070
1071