~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux-2.6.17/Documentation/ioctl/hdio.txt

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

  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 can not
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           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.
517 
518           Executes an ATAPI soft reset if applicable, otherwise
519           executes an ATA soft reset on the controller.
520 
521 
522 
523 HDIO_DRIVE_TASKFILE             execute raw taskfile
524 
525         Note:  If you don't have a copy of the ANSI ATA specification
526         handy, you should probably ignore this ioctl.
527 
528         Execute an ATA disk command directly by writing the "taskfile"
529         registers of the drive.  Requires ADMIN and RAWIO access
530         privileges.
531 
532         usage:
533 
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           ...
545 
546         inputs:
547 
548           (See below for details on memory area passed to ioctl.)
549 
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])
559 
560         outputs:
561 
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
568 
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.
577 
578         notes:
579 
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.
584 
585           [2] Both the input and output buffers are copied from the
586           user and written back to the user, even when not used.
587 
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.
591 
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
596 
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.
602 
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.
607 
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.
613 
614           Command is passed to the disk drive via the ide_task_request_t
615           structure, which contains these fields:
616 
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
630 
631           When out_flags is zero, the following registers are loaded.
632 
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.
646 
647           If any bit in out_flags is set, the following registers are loaded.
648 
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.
666 
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.
671 
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.
675 
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
691 
692           The data_phase field describes the data transfer to be
693           performed.  Value is one of:
694 
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
710 
711           The req_cmd field classifies the command type.  It may be
712           one of:
713 
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
719 
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.
725 
726 
727 
728 HDIO_DRIVE_CMD                  execute a special drive command
729 
730         Note:  If you don't have a copy of the ANSI ATA specification
731         handy, you should probably ignore this ioctl.
732 
733         usage:
734 
735           u8 args[4+XFER_SIZE];
736           ...
737           ioctl(fd, HDIO_DRIVE_CMD, args);
738 
739         inputs:
740 
741           Commands other than WIN_SMART
742             args[0]     COMMAND
743             args[1]     NSECTOR
744             args[2]     FEATURE
745             args[3]     NSECTOR
746 
747           WIN_SMART
748             args[0]     COMMAND
749             args[1]     SECTOR
750             args[2]     FEATURE
751             args[3]     NSECTOR
752 
753         outputs:
754 
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.
762 
763         error returns:
764           EACCES        Access denied:  requires CAP_SYS_RAWIO
765           ENOMEM        Unable to allocate memory for task
766           EIO           Drive reports error
767 
768         notes:
769 
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.
776 
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.
783 
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.
788 
789 
790 
791 HDIO_DRIVE_TASK                 execute task and special drive command
792 
793         Note:  If you don't have a copy of the ANSI ATA specification
794         handy, you should probably ignore this ioctl.
795 
796         usage:
797 
798           u8 args[7];
799           ...
800           ioctl(fd, HDIO_DRIVE_TASK, args);
801 
802         inputs:
803 
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
812 
813         outputs:
814 
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
823 
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.
829 
830         notes:
831 
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.
835 
836 
837 
838 HDIO_DRIVE_CMD_AEB              HDIO_DRIVE_TASK
839 
840         Not implemented, as of 2.6.8.1
841 
842 
843 
844 HDIO_SET_32BIT                  change io_32bit flags
845 
846         usage:
847 
848           int val;
849           ioctl(fd, HDIO_SET_32BIT, val);
850 
851         inputs:
852           New value for io_32bit flag
853 
854         outputs:        none
855 
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
861 
862 
863 
864 
865 HDIO_SET_NOWERR                 change ignore-write-error flag
866 
867         usage:
868 
869           int val;
870           ioctl(fd, HDIO_SET_NOWERR, val);
871 
872         inputs:
873           New value for ignore-write-error flag.  Used for ignoring
874           WRERR_STAT
875 
876         outputs:        none
877 
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
883 
884 
885 
886 HDIO_SET_DMA                    change use-dma flag
887 
888         usage:
889 
890           long val;
891           ioctl(fd, HDIO_SET_DMA, val);
892 
893         inputs:
894           New value for use-dma flag
895 
896         outputs:        none
897 
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
903 
904 
905 
906 HDIO_SET_PIO_MODE               reconfig interface to new speed
907 
908         usage:
909 
910           long val;
911           ioctl(fd, HDIO_SET_PIO_MODE, val);
912 
913         inputs:
914           New interface speed.
915 
916         outputs:        none
917 
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
923 
924 
925 
926 HDIO_SCAN_HWIF                  register and (re)scan interface
927 
928         usage:
929 
930           int args[3]
931           ...
932           ioctl(fd, HDIO_SCAN_HWIF, args);
933 
934         inputs:
935           args[0]       io address to probe
936           args[1]       control address to probe
937           args[2]       irq number
938 
939         outputs:        none
940 
941         error returns:
942           EACCES        Access denied:  requires CAP_SYS_RAWIO
943           EIO           Probe failed.
944 
945         notes:
946 
947           This ioctl initializes the addresses and irq for a disk
948           controller, probes for drives, and creates /proc/ide
949           interfaces as appropriate.
950 
951 
952 
953 HDIO_UNREGISTER_HWIF            unregister interface
954 
955         usage:
956 
957           int index;
958           ioctl(fd, HDIO_UNREGISTER_HWIF, index);
959 
960         inputs:
961           index         index of hardware interface to unregister
962 
963         outputs:        none
964 
965         error returns:
966           EACCES        Access denied:  requires CAP_SYS_RAWIO
967 
968         notes:
969 
970           This ioctl removes a hardware interface from the kernel.
971 
972           Currently (2.6.8) this ioctl silently fails if any drive on
973           the interface is busy.
974 
975 
976 
977 HDIO_SET_WCACHE                 change write cache enable-disable
978 
979         usage:
980 
981           int val;
982           ioctl(fd, HDIO_SET_WCACHE, val);
983 
984         inputs:
985           New value for write cache enable
986 
987         outputs:        none
988 
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
994 
995 
996 
997 HDIO_SET_ACOUSTIC               change acoustic behavior
998 
999         usage:
1000 
1001           int val;
1002           ioctl(fd, HDIO_SET_ACOUSTIC, val);
1003 
1004         inputs:
1005           New value for drive acoustic settings
1006 
1007         outputs:        none
1008 
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
1014 
1015 
1016 
1017 HDIO_SET_QDMA                   change use-qdma flag
1018 
1019         Not implemented, as of 2.6.8.1
1020 
1021 
1022 
1023 HDIO_SET_ADDRESS                change lba addressing modes
1024 
1025         usage:
1026 
1027           int val;
1028           ioctl(fd, HDIO_SET_ADDRESS, val);
1029 
1030         inputs:
1031           New value for addressing mode
1032             0 = 28-bit
1033             1 = 48-bit
1034             2 = 48-bit doing 28-bit
1035 
1036         outputs:        none
1037 
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.
1044 
1045 
1046 HDIO_SET_IDE_SCSI
1047 
1048         usage:
1049 
1050           long val;
1051           ioctl(fd, HDIO_SET_IDE_SCSI, val);
1052 
1053         inputs:
1054           New value for scsi emulation mode (?)
1055 
1056         outputs:        none
1057 
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
1063 
1064 
1065 
1066 HDIO_SET_SCSI_IDE
1067 
1068         Not implemented, as of 2.6.8.1
1069 
1070 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.