ia64/linux-2.6.18-xen.hg

view Documentation/ioctl/hdio.txt @ 524:7f8b544237bf

netfront: Allow netfront in domain 0.

This is useful if your physical network device is in a utility domain.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Tue Apr 15 15:18:58 2008 +0100 (2008-04-15)
parents 831230e53067
children
line source
1 Summary of HDIO_ ioctl calls.
2 ============================
4 Edward A. Falk <efalk@google.com>
6 November, 2004
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
12 ioctl values are listed in <linux/hdreg.h>. As of this writing, they
13 are as follows:
15 ioctls that pass argument pointers to user space:
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
40 ioctls that pass non-pointer values:
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
58 HDIO_SET_IDE_SCSI Set scsi emulation mode on/off
59 HDIO_SET_SCSI_IDE not implemented yet
62 The information that follows was determined from reading kernel source
63 code. It is likely that some corrections will be made over time.
71 General:
73 Unless otherwise specified, all ioctl calls return 0 on success
74 and -1 with errno set to an appropriate value on error.
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.
80 Unless otherwise specified, all data structures and constants
81 are defined in <linux/hdreg.h>
85 HDIO_GETGEO get device geometry
87 usage:
89 struct hd_geometry geom;
90 ioctl(fd, HDIO_GETGEO, &geom);
93 inputs: none
95 outputs:
97 hd_geometry structure containing:
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.
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
110 notes:
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.
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.
125 The start field is unsigned long, meaning that it will not
126 contain a meaningful value for disks over 219 Gb in size.
131 HDIO_GET_UNMASKINTR get current unmask setting
133 usage:
135 long val;
136 ioctl(fd, HDIO_GET_UNMASKINTR, &val);
138 inputs: none
140 outputs:
141 The value of the drive's current unmask setting
145 HDIO_SET_UNMASKINTR permit other irqs during I/O
147 usage:
149 unsigned long val;
150 ioctl(fd, HDIO_SET_UNMASKINTR, val);
152 inputs:
153 New value for unmask flag
155 outputs: none
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
166 HDIO_GET_MULTCOUNT get current IDE blockmode setting
168 usage:
170 long val;
171 ioctl(fd, HDIO_GET_MULTCOUNT, &val);
173 inputs: none
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.
182 HDIO_SET_MULTCOUNT change IDE blockmode
184 usage:
186 int val;
187 ioctl(fd, HDIO_SET_MULTCOUNT, val);
189 inputs:
190 New value for IDE block mode setting. This controls how many
191 sectors the drive will transfer per interrupt.
193 outputs: none
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.
202 notes:
204 Source code comments read:
206 This is tightly woven into the driver->do_special can not
207 touch. DON'T do it again until a total personality rewrite
208 is committed.
210 If blockmode has already been set, this ioctl will fail with
211 EBUSY
215 HDIO_GET_QDMA get use-qdma flag
217 Not implemented, as of 2.6.8.1
221 HDIO_SET_XFER set transfer rate via proc
223 Not implemented, as of 2.6.8.1
227 HDIO_OBSOLETE_IDENTITY OBSOLETE, DO NOT USE
229 Same as HDIO_GET_IDENTITY (see below), except that it only
230 returns the first 142 bytes of drive identity information.
234 HDIO_GET_IDENTITY get IDE identification info
236 usage:
238 unsigned char identity[512];
239 ioctl(fd, HDIO_GET_IDENTITY, identity);
241 inputs: none
243 outputs:
245 ATA drive identity information. For full description, see
246 the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in
247 the ATA specification.
249 error returns:
250 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
251 ENOMSG IDENTIFY DEVICE information not available
253 notes:
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.
260 This information is also available from /proc/ide/hdX/identify
264 HDIO_GET_KEEPSETTINGS get keep-settings-on-reset flag
266 usage:
268 long val;
269 ioctl(fd, HDIO_GET_KEEPSETTINGS, &val);
271 inputs: none
273 outputs:
274 The value of the current "keep settings" flag
276 notes:
278 When set, indicates that kernel should restore settings
279 after a drive reset.
283 HDIO_SET_KEEPSETTINGS keep ioctl settings on reset
285 usage:
287 long val;
288 ioctl(fd, HDIO_SET_KEEPSETTINGS, val);
290 inputs:
291 New value for keep_settings flag
293 outputs: none
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
303 HDIO_GET_32BIT get current io_32bit setting
305 usage:
307 long val;
308 ioctl(fd, HDIO_GET_32BIT, &val);
310 inputs: none
312 outputs:
313 The value of the current io_32bit setting
315 notes:
317 0=16-bit, 1=32-bit, 2,3 = 32bit+sync
321 HDIO_GET_NOWERR get ignore-write-error flag
323 usage:
325 long val;
326 ioctl(fd, HDIO_GET_NOWERR, &val);
328 inputs: none
330 outputs:
331 The value of the current ignore-write-error flag
335 HDIO_GET_DMA get use-dma flag
337 usage:
339 long val;
340 ioctl(fd, HDIO_GET_DMA, &val);
342 inputs: none
344 outputs:
345 The value of the current use-dma flag
349 HDIO_GET_NICE get nice flags
351 usage:
353 long nice;
354 ioctl(fd, HDIO_GET_NICE, &nice);
356 inputs: none
358 outputs:
360 The drive's "nice" values.
362 notes:
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.
371 HDIO_SET_NICE set nice flags
373 usage:
375 unsigned long nice;
376 ...
377 ioctl(fd, HDIO_SET_NICE, nice);
379 inputs:
380 bitmask of nice flags.
382 outputs: none
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
389 notes:
391 This ioctl sets the DSC_OVERLAP and NICE_1 flags from values
392 provided by the user.
394 Nice flags are listed in <linux/hdreg.h>, starting with
395 IDE_NICE_DSC_OVERLAP. These values represent shifts.
401 HDIO_GET_WCACHE get write cache mode on|off
403 usage:
405 long val;
406 ioctl(fd, HDIO_GET_WCACHE, &val);
408 inputs: none
410 outputs:
411 The value of the current write cache mode
415 HDIO_GET_ACOUSTIC get acoustic value
417 usage:
419 long val;
420 ioctl(fd, HDIO_GET_ACOUSTIC, &val);
422 inputs: none
424 outputs:
425 The value of the current acoustic settings
427 notes:
429 See HDIO_SET_ACOUSTIC
433 HDIO_GET_ADDRESS
435 usage:
437 long val;
438 ioctl(fd, HDIO_GET_ADDRESS, &val);
440 inputs: none
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
451 HDIO_GET_BUSSTATE get the bus state of the hwif
453 usage:
455 long state;
456 ioctl(fd, HDIO_SCAN_HWIF, &state);
458 inputs: none
460 outputs:
461 Current power state of the IDE bus. One of BUSSTATE_OFF,
462 BUSSTATE_ON, or BUSSTATE_TRISTATE
464 error returns:
465 EACCES Access denied: requires CAP_SYS_ADMIN
470 HDIO_SET_BUSSTATE set the bus state of the hwif
472 usage:
474 int state;
475 ...
476 ioctl(fd, HDIO_SCAN_HWIF, state);
478 inputs:
479 Desired IDE power state. One of BUSSTATE_OFF, BUSSTATE_ON,
480 or BUSSTATE_TRISTATE
482 outputs: none
484 error returns:
485 EACCES Access denied: requires CAP_SYS_RAWIO
486 EOPNOTSUPP Hardware interface does not support bus power control
491 HDIO_TRISTATE_HWIF execute a channel tristate
493 Not implemented, as of 2.6.8.1. See HDIO_SET_BUSSTATE
497 HDIO_DRIVE_RESET execute a device reset
499 usage:
501 int args[3]
502 ...
503 ioctl(fd, HDIO_DRIVE_RESET, args);
505 inputs: none
507 outputs: none
509 error returns:
510 EACCES Access denied: requires CAP_SYS_ADMIN
512 notes:
514 Abort any current command, prevent anything else from being
515 queued, execute a reset on the device, and issue BLKRRPART
516 ioctl on the block device.
518 Executes an ATAPI soft reset if applicable, otherwise
519 executes an ATA soft reset on the controller.
523 HDIO_DRIVE_TASKFILE execute raw taskfile
525 Note: If you don't have a copy of the ANSI ATA specification
526 handy, you should probably ignore this ioctl.
528 Execute an ATA disk command directly by writing the "taskfile"
529 registers of the drive. Requires ADMIN and RAWIO access
530 privileges.
532 usage:
534 struct {
535 ide_task_request_t req_task;
536 u8 outbuf[OUTPUT_SIZE];
537 u8 inbuf[INPUT_SIZE];
538 } task;
539 memset(&task.req_task, 0, sizeof(task.req_task));
540 task.req_task.out_size = sizeof(task.outbuf);
541 task.req_task.in_size = sizeof(task.inbuf);
542 ...
543 ioctl(fd, HDIO_DRIVE_TASKFILE, &task);
544 ...
546 inputs:
548 (See below for details on memory area passed to ioctl.)
550 io_ports[8] values to be written to taskfile registers
551 hob_ports[8] high-order bytes, for extended commands.
552 out_flags flags indicating which registers are valid
553 in_flags flags indicating which registers should be returned
554 data_phase see below
555 req_cmd command type to be executed
556 out_size size of output buffer
557 outbuf buffer of data to be transmitted to disk
558 inbuf buffer of data to be received from disk (see [1])
560 outputs:
562 io_ports[] values returned in the taskfile registers
563 hob_ports[] high-order bytes, for extended commands.
564 out_flags flags indicating which registers are valid (see [2])
565 in_flags flags indicating which registers should be returned
566 outbuf buffer of data to be transmitted to disk (see [1])
567 inbuf buffer of data to be received from disk
569 error returns:
570 EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set.
571 ENOMSG Device is not a disk drive.
572 ENOMEM Unable to allocate memory for task
573 EFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8)
574 EPERM req_cmd == TASKFILE_MULTI_OUT and drive
575 multi-count not yet set.
576 EIO Drive failed the command.
578 notes:
580 [1] READ THE FOLLOWING NOTES *CAREFULLY*. THIS IOCTL IS
581 FULL OF GOTCHAS. Extreme caution should be used with using
582 this ioctl. A mistake can easily corrupt data or hang the
583 system.
585 [2] Both the input and output buffers are copied from the
586 user and written back to the user, even when not used.
588 [3] If one or more bits are set in out_flags and in_flags is
589 zero, the following values are used for in_flags.all and
590 written back into in_flags on completion.
592 * IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8)
593 if LBA48 addressing is enabled for the drive
594 * IDE_TASKFILE_STD_IN_FLAGS
595 if CHS/LBA28
597 The association between in_flags.all and each enable
598 bitfield flips depending on endianess; fortunately, TASKFILE
599 only uses inflags.b.data bit and ignores all other bits.
600 The end result is that, on any endian machines, it has no
601 effect other than modifying in_flags on completion.
603 [4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit)
604 except for four drives per port chipsets. For four drives
605 per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first
606 pair and (0x80|DEV_bit|LBA_bit) for the second pair.
608 [5] The argument to the ioctl is a pointer to a region of
609 memory containing a ide_task_request_t structure, followed
610 by an optional buffer of data to be transmitted to the
611 drive, followed by an optional buffer to receive data from
612 the drive.
614 Command is passed to the disk drive via the ide_task_request_t
615 structure, which contains these fields:
617 io_ports[8] values for the taskfile registers
618 hob_ports[8] high-order bytes, for extended commands
619 out_flags flags indicating which entries in the
620 io_ports[] and hob_ports[] arrays
621 contain valid values. Type ide_reg_valid_t.
622 in_flags flags indicating which entries in the
623 io_ports[] and hob_ports[] arrays
624 are expected to contain valid values
625 on return.
626 data_phase See below
627 req_cmd Command type, see below
628 out_size output (user->drive) buffer size, bytes
629 in_size input (drive->user) buffer size, bytes
631 When out_flags is zero, the following registers are loaded.
633 HOB_FEATURE If the drive supports LBA48
634 HOB_NSECTOR If the drive supports LBA48
635 HOB_SECTOR If the drive supports LBA48
636 HOB_LCYL If the drive supports LBA48
637 HOB_HCYL If the drive supports LBA48
638 FEATURE
639 NSECTOR
640 SECTOR
641 LCYL
642 HCYL
643 SELECT First, masked with 0xE0 if LBA48, 0xEF
644 otherwise; then, or'ed with the default
645 value of SELECT.
647 If any bit in out_flags is set, the following registers are loaded.
649 HOB_DATA If out_flags.b.data is set. HOB_DATA will
650 travel on DD8-DD15 on little endian machines
651 and on DD0-DD7 on big endian machines.
652 DATA If out_flags.b.data is set. DATA will
653 travel on DD0-DD7 on little endian machines
654 and on DD8-DD15 on big endian machines.
655 HOB_NSECTOR If out_flags.b.nsector_hob is set
656 HOB_SECTOR If out_flags.b.sector_hob is set
657 HOB_LCYL If out_flags.b.lcyl_hob is set
658 HOB_HCYL If out_flags.b.hcyl_hob is set
659 FEATURE If out_flags.b.feature is set
660 NSECTOR If out_flags.b.nsector is set
661 SECTOR If out_flags.b.sector is set
662 LCYL If out_flags.b.lcyl is set
663 HCYL If out_flags.b.hcyl is set
664 SELECT Or'ed with the default value of SELECT and
665 loaded regardless of out_flags.b.select.
667 Taskfile registers are read back from the drive into
668 {io|hob}_ports[] after the command completes iff one of the
669 following conditions is met; otherwise, the original values
670 will be written back, unchanged.
672 1. The drive fails the command (EIO).
673 2. One or more than one bits are set in out_flags.
674 3. The requested data_phase is TASKFILE_NO_DATA.
676 HOB_DATA If in_flags.b.data is set. It will contain
677 DD8-DD15 on little endian machines and
678 DD0-DD7 on big endian machines.
679 DATA If in_flags.b.data is set. It will contain
680 DD0-DD7 on little endian machines and
681 DD8-DD15 on big endian machines.
682 HOB_FEATURE If the drive supports LBA48
683 HOB_NSECTOR If the drive supports LBA48
684 HOB_SECTOR If the drive supports LBA48
685 HOB_LCYL If the drive supports LBA48
686 HOB_HCYL If the drive supports LBA48
687 NSECTOR
688 SECTOR
689 LCYL
690 HCYL
692 The data_phase field describes the data transfer to be
693 performed. Value is one of:
695 TASKFILE_IN
696 TASKFILE_MULTI_IN
697 TASKFILE_OUT
698 TASKFILE_MULTI_OUT
699 TASKFILE_IN_OUT
700 TASKFILE_IN_DMA
701 TASKFILE_IN_DMAQ == IN_DMA (queueing not supported)
702 TASKFILE_OUT_DMA
703 TASKFILE_OUT_DMAQ == OUT_DMA (queueing not supported)
704 TASKFILE_P_IN unimplemented
705 TASKFILE_P_IN_DMA unimplemented
706 TASKFILE_P_IN_DMAQ unimplemented
707 TASKFILE_P_OUT unimplemented
708 TASKFILE_P_OUT_DMA unimplemented
709 TASKFILE_P_OUT_DMAQ unimplemented
711 The req_cmd field classifies the command type. It may be
712 one of:
714 IDE_DRIVE_TASK_NO_DATA
715 IDE_DRIVE_TASK_SET_XFER unimplemented
716 IDE_DRIVE_TASK_IN
717 IDE_DRIVE_TASK_OUT unimplemented
718 IDE_DRIVE_TASK_RAW_WRITE
720 [6] Do not access {in|out}_flags->all except for resetting
721 all the bits. Always access individual bit fields. ->all
722 value will flip depending on endianess. For the same
723 reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS
724 constants defined in hdreg.h.
728 HDIO_DRIVE_CMD execute a special drive command
730 Note: If you don't have a copy of the ANSI ATA specification
731 handy, you should probably ignore this ioctl.
733 usage:
735 u8 args[4+XFER_SIZE];
736 ...
737 ioctl(fd, HDIO_DRIVE_CMD, args);
739 inputs:
741 Commands other than WIN_SMART
742 args[0] COMMAND
743 args[1] NSECTOR
744 args[2] FEATURE
745 args[3] NSECTOR
747 WIN_SMART
748 args[0] COMMAND
749 args[1] SECTOR
750 args[2] FEATURE
751 args[3] NSECTOR
753 outputs:
755 args[] buffer is filled with register values followed by any
756 data returned by the disk.
757 args[0] status
758 args[1] error
759 args[2] NSECTOR
760 args[3] undefined
761 args[4+] NSECTOR * 512 bytes of data returned by the command.
763 error returns:
764 EACCES Access denied: requires CAP_SYS_RAWIO
765 ENOMEM Unable to allocate memory for task
766 EIO Drive reports error
768 notes:
770 [1] For commands other than WIN_SMART, args[1] should equal
771 args[3]. SECTOR, LCYL and HCYL are undefined. For
772 WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL
773 respectively. In both cases SELECT will contain the default
774 value for the drive. Please refer to HDIO_DRIVE_TASKFILE
775 notes for the default value of SELECT.
777 [2] If NSECTOR value is greater than zero and the drive sets
778 DRQ when interrupting for the command, NSECTOR * 512 bytes
779 are read from the device into the area following NSECTOR.
780 In the above example, the area would be
781 args[4..4+XFER_SIZE]. 16bit PIO is used regardless of
782 HDIO_SET_32BIT setting.
784 [3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER
785 && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA
786 mode, IDE driver will try to tune the transfer mode of the
787 drive accordingly.
791 HDIO_DRIVE_TASK execute task and special drive command
793 Note: If you don't have a copy of the ANSI ATA specification
794 handy, you should probably ignore this ioctl.
796 usage:
798 u8 args[7];
799 ...
800 ioctl(fd, HDIO_DRIVE_TASK, args);
802 inputs:
804 Taskfile register values:
805 args[0] COMMAND
806 args[1] FEATURE
807 args[2] NSECTOR
808 args[3] SECTOR
809 args[4] LCYL
810 args[5] HCYL
811 args[6] SELECT
813 outputs:
815 Taskfile register values:
816 args[0] status
817 args[1] error
818 args[2] NSECTOR
819 args[3] SECTOR
820 args[4] LCYL
821 args[5] HCYL
822 args[6] SELECT
824 error returns:
825 EACCES Access denied: requires CAP_SYS_RAWIO
826 ENOMEM Unable to allocate memory for task
827 ENOMSG Device is not a disk drive.
828 EIO Drive failed the command.
830 notes:
832 [1] DEV bit (0x10) of SELECT register is ignored and the
833 appropriate value for the drive is used. All other bits
834 are used unaltered.
838 HDIO_DRIVE_CMD_AEB HDIO_DRIVE_TASK
840 Not implemented, as of 2.6.8.1
844 HDIO_SET_32BIT change io_32bit flags
846 usage:
848 int val;
849 ioctl(fd, HDIO_SET_32BIT, val);
851 inputs:
852 New value for io_32bit flag
854 outputs: none
856 error return:
857 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
858 EACCES Access denied: requires CAP_SYS_ADMIN
859 EINVAL value out of range [0 3]
860 EBUSY Controller busy
865 HDIO_SET_NOWERR change ignore-write-error flag
867 usage:
869 int val;
870 ioctl(fd, HDIO_SET_NOWERR, val);
872 inputs:
873 New value for ignore-write-error flag. Used for ignoring
874 WRERR_STAT
876 outputs: none
878 error return:
879 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
880 EACCES Access denied: requires CAP_SYS_ADMIN
881 EINVAL value out of range [0 1]
882 EBUSY Controller busy
886 HDIO_SET_DMA change use-dma flag
888 usage:
890 long val;
891 ioctl(fd, HDIO_SET_DMA, val);
893 inputs:
894 New value for use-dma flag
896 outputs: none
898 error return:
899 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
900 EACCES Access denied: requires CAP_SYS_ADMIN
901 EINVAL value out of range [0 1]
902 EBUSY Controller busy
906 HDIO_SET_PIO_MODE reconfig interface to new speed
908 usage:
910 long val;
911 ioctl(fd, HDIO_SET_PIO_MODE, val);
913 inputs:
914 New interface speed.
916 outputs: none
918 error return:
919 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
920 EACCES Access denied: requires CAP_SYS_ADMIN
921 EINVAL value out of range [0 255]
922 EBUSY Controller busy
926 HDIO_SCAN_HWIF register and (re)scan interface
928 usage:
930 int args[3]
931 ...
932 ioctl(fd, HDIO_SCAN_HWIF, args);
934 inputs:
935 args[0] io address to probe
936 args[1] control address to probe
937 args[2] irq number
939 outputs: none
941 error returns:
942 EACCES Access denied: requires CAP_SYS_RAWIO
943 EIO Probe failed.
945 notes:
947 This ioctl initializes the addresses and irq for a disk
948 controller, probes for drives, and creates /proc/ide
949 interfaces as appropriate.
953 HDIO_UNREGISTER_HWIF unregister interface
955 usage:
957 int index;
958 ioctl(fd, HDIO_UNREGISTER_HWIF, index);
960 inputs:
961 index index of hardware interface to unregister
963 outputs: none
965 error returns:
966 EACCES Access denied: requires CAP_SYS_RAWIO
968 notes:
970 This ioctl removes a hardware interface from the kernel.
972 Currently (2.6.8) this ioctl silently fails if any drive on
973 the interface is busy.
977 HDIO_SET_WCACHE change write cache enable-disable
979 usage:
981 int val;
982 ioctl(fd, HDIO_SET_WCACHE, val);
984 inputs:
985 New value for write cache enable
987 outputs: none
989 error return:
990 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
991 EACCES Access denied: requires CAP_SYS_ADMIN
992 EINVAL value out of range [0 1]
993 EBUSY Controller busy
997 HDIO_SET_ACOUSTIC change acoustic behavior
999 usage:
1001 int val;
1002 ioctl(fd, HDIO_SET_ACOUSTIC, val);
1004 inputs:
1005 New value for drive acoustic settings
1007 outputs: none
1009 error return:
1010 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1011 EACCES Access denied: requires CAP_SYS_ADMIN
1012 EINVAL value out of range [0 254]
1013 EBUSY Controller busy
1017 HDIO_SET_QDMA change use-qdma flag
1019 Not implemented, as of 2.6.8.1
1023 HDIO_SET_ADDRESS change lba addressing modes
1025 usage:
1027 int val;
1028 ioctl(fd, HDIO_SET_ADDRESS, val);
1030 inputs:
1031 New value for addressing mode
1032 0 = 28-bit
1033 1 = 48-bit
1034 2 = 48-bit doing 28-bit
1036 outputs: none
1038 error return:
1039 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1040 EACCES Access denied: requires CAP_SYS_ADMIN
1041 EINVAL value out of range [0 2]
1042 EBUSY Controller busy
1043 EIO Drive does not support lba48 mode.
1046 HDIO_SET_IDE_SCSI
1048 usage:
1050 long val;
1051 ioctl(fd, HDIO_SET_IDE_SCSI, val);
1053 inputs:
1054 New value for scsi emulation mode (?)
1056 outputs: none
1058 error return:
1059 EINVAL (bdev != bdev->bd_contains) (not sure what this means)
1060 EACCES Access denied: requires CAP_SYS_ADMIN
1061 EINVAL value out of range [0 1]
1062 EBUSY Controller busy
1066 HDIO_SET_SCSI_IDE
1068 Not implemented, as of 2.6.8.1