€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ,/translations/zh_CN/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/zh_TW/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/it_IT/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ja_JP/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ko_KR/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/pt_BR/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/sp_SP/userspace-api/ioctl/hdio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒSummary of `HDIO_` ioctl calls”h]”(hŒ Summary of ”…”�”}”(hh¼h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`HDIO_`”h]”hŒHDIO_”…”�”}”(hhÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÄhh¼ubhŒ ioctl calls”…”�”}”(hh¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒF/var/lib/git/docbuild/linux/Documentation/userspace-api/ioctl/hdio.rst”h´KubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒ"Edward A. Falk ”h]”hŒ paragraph”“”)�”}”(hŒ!Edward A. Falk ”h]”(hŒEdward A. Falk <”…”�”}”(hhìh²hh³Nh´NubhŒ reference”“”)�”}”(hŒefalk@google.com”h]”hŒefalk@google.com”…”�”}”(hhöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:efalk@google.com”uh1hôhhìubhŒ>”…”�”}”(hhìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khhæubah}”(h]”h ]”h"]”h$]”h&]”uh1hähháh²hh³hÞh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hßh³hÞh´Khh·h²hubhë)�”}”(hŒNovember, 2004”h]”hŒNovember, 2004”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khh·h²hubhë)�”}”(hŒ¦This document attempts to describe the ioctl(2) calls supported by the HD/IDE layer. These are by-and-large implemented (as of Linux 5.11) drivers/ata/libata-scsi.c.”h]”hŒ¦This document attempts to describe the ioctl(2) calls supported by the HD/IDE layer. These are by-and-large implemented (as of Linux 5.11) drivers/ata/libata-scsi.c.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K hh·h²hubhë)�”}”(hŒUioctl values are listed in . As of this writing, they are as follows:”h]”hŒUioctl values are listed in . As of this writing, they are as follows:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K hh·h²hubhŒ block_quote”“”)�”}”(hXîioctls that pass argument pointers to user space: ======================= ======================================= HDIO_GETGEO get device geometry HDIO_GET_32BIT get current io_32bit setting HDIO_GET_IDENTITY get IDE identification info HDIO_DRIVE_TASKFILE execute raw taskfile HDIO_DRIVE_TASK execute task and special drive command HDIO_DRIVE_CMD execute a special drive command ======================= ======================================= ioctls that pass non-pointer values: ======================= ======================================= HDIO_SET_32BIT change io_32bit flags ======================= ======================================= ”h]”(hë)�”}”(hŒ1ioctls that pass argument pointers to user space:”h]”hŒ1ioctls that pass argument pointers to user space:”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjJubjI)�”}”(hX¹======================= ======================================= HDIO_GETGEO get device geometry HDIO_GET_32BIT get current io_32bit setting HDIO_GET_IDENTITY get IDE identification info HDIO_DRIVE_TASKFILE execute raw taskfile HDIO_DRIVE_TASK execute task and special drive command HDIO_DRIVE_CMD execute a special drive command ======================= ======================================= ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjgubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K'uh1jjhjgubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hë)�”}”(hŒ HDIO_GETGEO”h]”hŒ HDIO_GETGEO”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‡ubj‹)�”}”(hhh]”hë)�”}”(hŒget device geometry”h]”hŒget device geometry”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_GET_32BIT”h]”hŒHDIO_GET_32BIT”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÀubj‹)�”}”(hhh]”hë)�”}”(hŒget current io_32bit setting”h]”hŒget current io_32bit setting”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_GET_IDENTITY”h]”hŒHDIO_GET_IDENTITY”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj÷ubj‹)�”}”(hhh]”hë)�”}”(hŒget IDE identification info”h]”hŒget IDE identification info”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_DRIVE_TASKFILE”h]”hŒHDIO_DRIVE_TASKFILE”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj.ubj‹)�”}”(hhh]”hë)�”}”(hŒexecute raw taskfile”h]”hŒexecute raw taskfile”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_DRIVE_TASK”h]”hŒHDIO_DRIVE_TASK”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjeubj‹)�”}”(hhh]”hë)�”}”(hŒ&execute task and special drive command”h]”hŒ&execute task and special drive command”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_DRIVE_CMD”h]”hŒHDIO_DRIVE_CMD”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjœubj‹)�”}”(hhh]”hë)�”}”(hŒexecute a special drive command”h]”hŒexecute a special drive command”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjgubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KhjJubhë)�”}”(hŒ$ioctls that pass non-pointer values:”h]”hŒ$ioctls that pass non-pointer values:”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KhjJubjI)�”}”(hŒ¯======================= ======================================= HDIO_SET_32BIT change io_32bit flags ======================= ======================================= ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K'uh1jjhjubj�)�”}”(hhh]”j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHDIO_SET_32BIT”h]”hŒHDIO_SET_32BIT”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒchange io_32bit flags”h]”hŒchange io_32bit flags”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Khj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´Khh·h²hubhë)�”}”(hŒˆThe information that follows was determined from reading kernel source code. It is likely that some corrections will be made over time.”h]”hŒˆThe information that follows was determined from reading kernel source code. It is likely that some corrections will be made over time.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K"hh·h²hubhŒ transition”“”)�”}”(hŒN------------------------------------------------------------------------------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÞh´K%hh·h²hubhë)�”}”(hŒGeneral:”h]”hŒGeneral:”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K'hh·h²hubjI)�”}”(hXeUnless otherwise specified, all ioctl calls return 0 on success and -1 with errno set to an appropriate value on error. Unless otherwise specified, all ioctl calls return -1 and set errno to EFAULT on a failed attempt to copy data to or from user address space. Unless otherwise specified, all data structures and constants are defined in ”h]”(hë)�”}”(hŒwUnless otherwise specified, all ioctl calls return 0 on success and -1 with errno set to an appropriate value on error.”h]”hŒwUnless otherwise specified, all ioctl calls return 0 on success and -1 with errno set to an appropriate value on error.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K)hj™ubhë)�”}”(hŒ�Unless otherwise specified, all ioctl calls return -1 and set errno to EFAULT on a failed attempt to copy data to or from user address space.”h]”hŒ�Unless otherwise specified, all ioctl calls return -1 and set errno to EFAULT on a failed attempt to copy data to or from user address space.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K,hj™ubhë)�”}”(hŒ\Unless otherwise specified, all data structures and constants are defined in ”h]”hŒ\Unless otherwise specified, all data structures and constants are defined in ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K0hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´K)hh·h²hubj€)�”}”(hŒN------------------------------------------------------------------------------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÞh´K3hh·h²hubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hXŠHDIO_GETGEO get device geometry usage:: struct hd_geometry geom; ioctl(fd, HDIO_GETGEO, &geom); inputs: none outputs: hd_geometry structure containing: ========= ================================== heads number of heads sectors number of sectors/track cylinders number of cylinders, mod 65536 start starting sector of this partition. ========= ================================== error returns: - EINVAL if the device is not a disk drive or floppy drive, or if the user passes a null pointer notes: Not particularly useful with modern disk drives, whose geometry is a polite fiction anyway. Modern drives are addressed purely by sector number nowadays (lba addressing), and the drive geometry is an abstraction which is actually subject to change. Currently (as of Nov 2004), the geometry values are the "bios" values -- presumably the values the drive had when Linux first booted. In addition, the cylinders field of the hd_geometry is an unsigned short, meaning that on most architectures, this ioctl will not return a meaningful value on drives with more than 65535 tracks. The start field is unsigned long, meaning that it will not contain a meaningful value for disks over 219 Gb in size. ”h]”(hŒterm”“”)�”}”(hŒ HDIO_GETGEO”h]”hŒ HDIO_GETGEO”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KihjÞubhŒ definition”“”)�”}”(hhh]”(hë)�”}”(hŒget device geometry”h]”hŒget device geometry”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K6hjôubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K9hjôubhŒ literal_block”“”)�”}”(hŒ8struct hd_geometry geom; ioctl(fd, HDIO_GETGEO, &geom);”h]”hŒ8struct hd_geometry geom; ioctl(fd, HDIO_GETGEO, &geom);”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÞh´K;hjôubjØ)�”}”(hhh]”(jÝ)�”}”(hŒinputs: none ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KChj(ubjó)�”}”(hhh]”hë)�”}”(hŒnone”h]”hŒnone”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KAhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KChj%ubjÝ)�”}”(hX*outputs: hd_geometry structure containing: ========= ================================== heads number of heads sectors number of sectors/track cylinders number of cylinders, mod 65536 start starting sector of this partition. ========= ================================== ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KOhjWubjó)�”}”(hhh]”(jI)�”}”(hŒ#hd_geometry structure containing: ”h]”hë)�”}”(hŒ!hd_geometry structure containing:”h]”hŒ!hd_geometry structure containing:”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KFhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KFhjiubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhj‡ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K"uh1jjhj‡ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒheads”h]”hŒheads”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KJhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¡ubj‹)�”}”(hhh]”hë)�”}”(hŒnumber of heads”h]”hŒnumber of heads”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KJhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjžubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒsectors”h]”hŒsectors”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KKhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjØubj‹)�”}”(hhh]”hë)�”}”(hŒnumber of sectors/track”h]”hŒnumber of sectors/track”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KKhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjžubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ cylinders”h]”hŒ cylinders”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KLhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒnumber of cylinders, mod 65536”h]”hŒnumber of cylinders, mod 65536”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KLhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjžubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KMhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjFubj‹)�”}”(hhh]”hë)�”}”(hŒ"starting sector of this partition.”h]”hŒ"starting sector of this partition.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KMhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KOhj%ubjÝ)�”}”(hŒŽerror returns: - EINVAL if the device is not a disk drive or floppy drive, or if the user passes a null pointer ”h]”(jã)�”}”(hŒerror returns:”h]”hŒerror returns:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KVhjœubjó)�”}”(hhh]”hà)�”}”(hhh]”hå)�”}”(hŒyEINVAL if the device is not a disk drive or floppy drive, or if the user passes a null pointer ”h]”(hë)�”}”(hŒEINVAL”h]”hŒEINVAL”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KRhj´ubjI)�”}”(hŒYif the device is not a disk drive or floppy drive, or if the user passes a null pointer ”h]”hë)�”}”(hŒWif the device is not a disk drive or floppy drive, or if the user passes a null pointer”h]”hŒWif the device is not a disk drive or floppy drive, or if the user passes a null pointer”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KThjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KThj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hähj±ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´KRhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KVhj%ubjÝ)�”}”(hXÄnotes: Not particularly useful with modern disk drives, whose geometry is a polite fiction anyway. Modern drives are addressed purely by sector number nowadays (lba addressing), and the drive geometry is an abstraction which is actually subject to change. Currently (as of Nov 2004), the geometry values are the "bios" values -- presumably the values the drive had when Linux first booted. In addition, the cylinders field of the hd_geometry is an unsigned short, meaning that on most architectures, this ioctl will not return a meaningful value on drives with more than 65535 tracks. The start field is unsigned long, meaning that it will not contain a meaningful value for disks over 219 Gb in size. ”h]”(jã)�”}”(hŒnotes:”h]”hŒnotes:”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Kihjöubjó)�”}”(hhh]”(hë)�”}”(hX€Not particularly useful with modern disk drives, whose geometry is a polite fiction anyway. Modern drives are addressed purely by sector number nowadays (lba addressing), and the drive geometry is an abstraction which is actually subject to change. Currently (as of Nov 2004), the geometry values are the "bios" values -- presumably the values the drive had when Linux first booted.”h]”hX„Not particularly useful with modern disk drives, whose geometry is a polite fiction anyway. Modern drives are addressed purely by sector number nowadays (lba addressing), and the drive geometry is an abstraction which is actually subject to change. Currently (as of Nov 2004), the geometry values are the “biosâ€� values -- presumably the values the drive had when Linux first booted.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KYhjubhë)�”}”(hŒÂIn addition, the cylinders field of the hd_geometry is an unsigned short, meaning that on most architectures, this ioctl will not return a meaningful value on drives with more than 65535 tracks.”h]”hŒÂIn addition, the cylinders field of the hd_geometry is an unsigned short, meaning that on most architectures, this ioctl will not return a meaningful value on drives with more than 65535 tracks.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kahjubhë)�”}”(hŒtThe start field is unsigned long, meaning that it will not contain a meaningful value for disks over 219 Gb in size.”h]”hŒtThe start field is unsigned long, meaning that it will not contain a meaningful value for disks over 219 Gb in size.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kfhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Kihj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KihjÙubjÝ)�”}”(hXHDIO_GET_IDENTITY get IDE identification info usage:: unsigned char identity[512]; ioctl(fd, HDIO_GET_IDENTITY, identity); inputs: none outputs: ATA drive identity information. For full description, see the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in the ATA specification. error returns: - EINVAL Called on a partition instead of the whole disk device - ENOMSG IDENTIFY DEVICE information not available notes: Returns information that was obtained when the drive was probed. Some of this information is subject to change, and this ioctl does not re-probe the drive to update the information. This information is also available from /proc/ide/hdX/identify ”h]”(jã)�”}”(hŒHDIO_GET_IDENTITY”h]”hŒHDIO_GET_IDENTITY”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K‹hjSubjó)�”}”(hhh]”(hë)�”}”(hŒget IDE identification info”h]”hŒget IDE identification info”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Klhjeubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kohjeubj)�”}”(hŒEunsigned char identity[512]; ioctl(fd, HDIO_GET_IDENTITY, identity);”h]”hŒEunsigned char identity[512]; ioctl(fd, HDIO_GET_IDENTITY, identity);”…”�”}”hj„sbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´KqhjeubjØ)�”}”(hhh]”(jÝ)�”}”(hŒinputs: none ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Kxhj•ubjó)�”}”(hhh]”hë)�”}”(hŒnone”h]”hŒnone”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kvhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Kxhj’ubjÝ)�”}”(hŒ–outputs: ATA drive identity information. For full description, see the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in the ATA specification. ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K}hjÄubjó)�”}”(hhh]”hë)�”}”(hŒŒATA drive identity information. For full description, see the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in the ATA specification.”h]”hŒŒATA drive identity information. For full description, see the IDENTIFY DEVICE and IDENTIFY PACKET DEVICE commands in the ATA specification.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K{hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K}hj’ubjÝ)�”}”(hŒŒerror returns: - EINVAL Called on a partition instead of the whole disk device - ENOMSG IDENTIFY DEVICE information not available ”h]”(jã)�”}”(hŒerror returns:”h]”hŒerror returns:”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K�hjóubjó)�”}”(hhh]”hà)�”}”(hhh]”(hå)�”}”(hŒBEINVAL Called on a partition instead of the whole disk device”h]”hë)�”}”(hj h]”hŒBEINVAL Called on a partition instead of the whole disk device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K€hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjubhå)�”}”(hŒ6ENOMSG IDENTIFY DEVICE information not available ”h]”hë)�”}”(hŒ5ENOMSG IDENTIFY DEVICE information not available”h]”hŒ5ENOMSG IDENTIFY DEVICE information not available”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K�hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´K€hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K�hj’ubjÝ)�”}”(hXnotes: Returns information that was obtained when the drive was probed. Some of this information is subject to change, and this ioctl does not re-probe the drive to update the information. This information is also available from /proc/ide/hdX/identify ”h]”(jã)�”}”(hŒnotes:”h]”hŒnotes:”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K‹hjLubjó)�”}”(hhh]”(hë)�”}”(hŒ¶Returns information that was obtained when the drive was probed. Some of this information is subject to change, and this ioctl does not re-probe the drive to update the information.”h]”hŒ¶Returns information that was obtained when the drive was probed. Some of this information is subject to change, and this ioctl does not re-probe the drive to update the information.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K„hj^ubhë)�”}”(hŒ>This information is also available from /proc/ide/hdX/identify”h]”hŒ>This information is also available from /proc/ide/hdX/identify”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K‰hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K‹hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K‹hjÙh²hubjÝ)�”}”(hŒôHDIO_GET_32BIT get current io_32bit setting usage:: long val; ioctl(fd, HDIO_GET_32BIT, &val); inputs: none outputs: The value of the current io_32bit setting notes: 0=16-bit, 1=32-bit, 2,3 = 32bit+sync ”h]”(jã)�”}”(hŒHDIO_GET_32BIT”h]”hŒHDIO_GET_32BIT”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K¤hj›ubjó)�”}”(hhh]”(hë)�”}”(hŒget current io_32bit setting”h]”hŒget current io_32bit setting”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KŽhj­ubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K‘hj­ubj)�”}”(hŒ+long val; ioctl(fd, HDIO_GET_32BIT, &val);”h]”hŒ+long val; ioctl(fd, HDIO_GET_32BIT, &val);”…”�”}”hjÌsbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´K“hj­ubjØ)�”}”(hhh]”(jÝ)�”}”(hŒinputs: none ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KšhjÝubjó)�”}”(hhh]”hë)�”}”(hŒnone”h]”hŒnone”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K˜hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KšhjÚubjÝ)�”}”(hŒ5outputs: The value of the current io_32bit setting ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´KŸhj ubjó)�”}”(hhh]”hë)�”}”(hŒ)The value of the current io_32bit setting”h]”hŒ)The value of the current io_32bit setting”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´KŸhjÚubjÝ)�”}”(hŒ.notes: 0=16-bit, 1=32-bit, 2,3 = 32bit+sync ”h]”(jã)�”}”(hŒnotes:”h]”hŒnotes:”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K¤hj;ubjó)�”}”(hhh]”hë)�”}”(hŒ$0=16-bit, 1=32-bit, 2,3 = 32bit+sync”h]”hŒ$0=16-bit, 1=32-bit, 2,3 = 32bit+sync”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K¢hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K¤hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K¤hjÙh²hubjÝ)�”}”(hXì#HDIO_DRIVE_TASKFILE execute raw taskfile Note: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl. - Execute an ATA disk command directly by writing the "taskfile" registers of the drive. Requires ADMIN and RAWIO access privileges. usage:: struct { ide_task_request_t req_task; u8 outbuf[OUTPUT_SIZE]; u8 inbuf[INPUT_SIZE]; } task; memset(&task.req_task, 0, sizeof(task.req_task)); task.req_task.out_size = sizeof(task.outbuf); task.req_task.in_size = sizeof(task.inbuf); ... ioctl(fd, HDIO_DRIVE_TASKFILE, &task); ... inputs: (See below for details on memory area passed to ioctl.) ============ =================================================== io_ports[8] values to be written to taskfile registers hob_ports[8] high-order bytes, for extended commands. out_flags flags indicating which registers are valid in_flags flags indicating which registers should be returned data_phase see below req_cmd command type to be executed out_size size of output buffer outbuf buffer of data to be transmitted to disk inbuf buffer of data to be received from disk (see [1]) ============ =================================================== outputs: =========== ==================================================== io_ports[] values returned in the taskfile registers hob_ports[] high-order bytes, for extended commands. out_flags flags indicating which registers are valid (see [2]) in_flags flags indicating which registers should be returned outbuf buffer of data to be transmitted to disk (see [1]) inbuf buffer of data to be received from disk =========== ==================================================== error returns: - EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set. - ENOMSG Device is not a disk drive. - ENOMEM Unable to allocate memory for task - EFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8) - EPERM req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set. - EIO Drive failed the command. notes: [1] READ THE FOLLOWING NOTES *CAREFULLY*. THIS IOCTL IS FULL OF GOTCHAS. Extreme caution should be used with using this ioctl. A mistake can easily corrupt data or hang the system. [2] Both the input and output buffers are copied from the user and written back to the user, even when not used. [3] If one or more bits are set in out_flags and in_flags is zero, the following values are used for in_flags.all and written back into in_flags on completion. * IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive * IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28 The association between in_flags.all and each enable bitfield flips depending on endianness; fortunately, TASKFILE only uses inflags.b.data bit and ignores all other bits. The end result is that, on any endian machines, it has no effect other than modifying in_flags on completion. [4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit) except for four drives per port chipsets. For four drives per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first pair and (0x80|DEV_bit|LBA_bit) for the second pair. [5] The argument to the ioctl is a pointer to a region of memory containing a ide_task_request_t structure, followed by an optional buffer of data to be transmitted to the drive, followed by an optional buffer to receive data from the drive. Command is passed to the disk drive via the ide_task_request_t structure, which contains these fields: ============ =============================================== io_ports[8] values for the taskfile registers hob_ports[8] high-order bytes, for extended commands out_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays contain valid values. Type ide_reg_valid_t. in_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays are expected to contain valid values on return. data_phase See below req_cmd Command type, see below out_size output (user->drive) buffer size, bytes in_size input (drive->user) buffer size, bytes ============ =============================================== When out_flags is zero, the following registers are loaded. ============ =============================================== HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 FEATURE NSECTOR SECTOR LCYL HCYL SELECT First, masked with 0xE0 if LBA48, 0xEF otherwise; then, or'ed with the default value of SELECT. ============ =============================================== If any bit in out_flags is set, the following registers are loaded. ============ =============================================== HOB_DATA If out_flags.b.data is set. HOB_DATA will travel on DD8-DD15 on little endian machines and on DD0-DD7 on big endian machines. DATA If out_flags.b.data is set. DATA will travel on DD0-DD7 on little endian machines and on DD8-DD15 on big endian machines. HOB_NSECTOR If out_flags.b.nsector_hob is set HOB_SECTOR If out_flags.b.sector_hob is set HOB_LCYL If out_flags.b.lcyl_hob is set HOB_HCYL If out_flags.b.hcyl_hob is set FEATURE If out_flags.b.feature is set NSECTOR If out_flags.b.nsector is set SECTOR If out_flags.b.sector is set LCYL If out_flags.b.lcyl is set HCYL If out_flags.b.hcyl is set SELECT Or'ed with the default value of SELECT and loaded regardless of out_flags.b.select. ============ =============================================== Taskfile registers are read back from the drive into {io|hob}_ports[] after the command completes iff one of the following conditions is met; otherwise, the original values will be written back, unchanged. 1. The drive fails the command (EIO). 2. One or more than one bits are set in out_flags. 3. The requested data_phase is TASKFILE_NO_DATA. ============ =============================================== HOB_DATA If in_flags.b.data is set. It will contain DD8-DD15 on little endian machines and DD0-DD7 on big endian machines. DATA If in_flags.b.data is set. It will contain DD0-DD7 on little endian machines and DD8-DD15 on big endian machines. HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 NSECTOR SECTOR LCYL HCYL ============ =============================================== The data_phase field describes the data transfer to be performed. Value is one of: =================== ======================================== TASKFILE_IN TASKFILE_MULTI_IN TASKFILE_OUT TASKFILE_MULTI_OUT TASKFILE_IN_OUT TASKFILE_IN_DMA TASKFILE_IN_DMAQ == IN_DMA (queueing not supported) TASKFILE_OUT_DMA TASKFILE_OUT_DMAQ == OUT_DMA (queueing not supported) TASKFILE_P_IN unimplemented TASKFILE_P_IN_DMA unimplemented TASKFILE_P_IN_DMAQ unimplemented TASKFILE_P_OUT unimplemented TASKFILE_P_OUT_DMA unimplemented TASKFILE_P_OUT_DMAQ unimplemented =================== ======================================== The req_cmd field classifies the command type. It may be one of: ======================== ======================================= IDE_DRIVE_TASK_NO_DATA IDE_DRIVE_TASK_SET_XFER unimplemented IDE_DRIVE_TASK_IN IDE_DRIVE_TASK_OUT unimplemented IDE_DRIVE_TASK_RAW_WRITE ======================== ======================================= [6] Do not access {in|out}_flags->all except for resetting all the bits. Always access individual bit fields. ->all value will flip depending on endianness. For the same reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS constants defined in hdreg.h. ”h]”(jã)�”}”(hŒHDIO_DRIVE_TASKFILE”h]”hŒHDIO_DRIVE_TASKFILE”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M‡hj|ubjó)�”}”(hhh]”(hë)�”}”(hŒexecute raw taskfile”h]”hŒexecute raw taskfile”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K§hjŽubjØ)�”}”(hhh]”jÝ)�”}”(hŒkNote: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl. ”h]”(jã)�”}”(hŒNote:”h]”hŒNote:”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´K¬hj¢ubjó)�”}”(hhh]”hë)�”}”(hŒdIf you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”h]”hŒfIf you don’t have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K«hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´K¬hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j×hjŽubhà)�”}”(hhh]”hå)�”}”(hŒ„Execute an ATA disk command directly by writing the "taskfile" registers of the drive. Requires ADMIN and RAWIO access privileges. ”h]”hë)�”}”(hŒƒExecute an ATA disk command directly by writing the "taskfile" registers of the drive. Requires ADMIN and RAWIO access privileges.”h]”hŒ‡Execute an ATA disk command directly by writing the “taskfileâ€� registers of the drive. Requires ADMIN and RAWIO access privileges.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K®hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj×ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´K®hjŽubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K²hjŽubj)�”}”(hXstruct { ide_task_request_t req_task; u8 outbuf[OUTPUT_SIZE]; u8 inbuf[INPUT_SIZE]; } task; memset(&task.req_task, 0, sizeof(task.req_task)); task.req_task.out_size = sizeof(task.outbuf); task.req_task.in_size = sizeof(task.inbuf); ... ioctl(fd, HDIO_DRIVE_TASKFILE, &task); ...”h]”hXstruct { ide_task_request_t req_task; u8 outbuf[OUTPUT_SIZE]; u8 inbuf[INPUT_SIZE]; } task; memset(&task.req_task, 0, sizeof(task.req_task)); task.req_task.out_size = sizeof(task.outbuf); task.req_task.in_size = sizeof(task.inbuf); ... ioctl(fd, HDIO_DRIVE_TASKFILE, &task); ...”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´K´hjŽubhë)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÁhjŽubjI)�”}”(hX…(See below for details on memory area passed to ioctl.) ============ =================================================== io_ports[8] values to be written to taskfile registers hob_ports[8] high-order bytes, for extended commands. out_flags flags indicating which registers are valid in_flags flags indicating which registers should be returned data_phase see below req_cmd command type to be executed out_size size of output buffer outbuf buffer of data to be transmitted to disk inbuf buffer of data to be received from disk (see [1]) ============ =================================================== ”h]”(hë)�”}”(hŒ7(See below for details on memory area passed to ioctl.)”h]”hŒ7(See below for details on memory area passed to ioctl.)”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÃhj" ubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhj7 ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K3uh1jjhj7 ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ io_ports[8]”h]”hŒ io_ports[8]”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÆhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjQ ubj‹)�”}”(hhh]”hë)�”}”(hŒ*values to be written to taskfile registers”h]”hŒ*values to be written to taskfile registers”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÆhjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjQ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ hob_ports[8]”h]”hŒ hob_ports[8]”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÇhj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆ ubj‹)�”}”(hhh]”hë)�”}”(hŒ(high-order bytes, for extended commands.”h]”hŒ(high-order bytes, for extended commands.”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÇhj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ out_flags”h]”hŒ out_flags”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÈhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¿ ubj‹)�”}”(hhh]”hë)�”}”(hŒ*flags indicating which registers are valid”h]”hŒ*flags indicating which registers are valid”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÈhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒin_flags”h]”hŒin_flags”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÉhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjö ubj‹)�”}”(hhh]”hë)�”}”(hŒ3flags indicating which registers should be returned”h]”hŒ3flags indicating which registers should be returned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÉhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjö ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ data_phase”h]”hŒ data_phase”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÊhj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj- ubj‹)�”}”(hhh]”hë)�”}”(hŒ see below”h]”hŒ see below”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÊhjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj- ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒreq_cmd”h]”hŒreq_cmd”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KËhjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjd ubj‹)�”}”(hhh]”hë)�”}”(hŒcommand type to be executed”h]”hŒcommand type to be executed”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KËhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjd ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒout_size”h]”hŒout_size”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÌhjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj› ubj‹)�”}”(hhh]”hë)�”}”(hŒsize of output buffer”h]”hŒsize of output buffer”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÌhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj› ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒoutbuf”h]”hŒoutbuf”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÍhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÒ ubj‹)�”}”(hhh]”hë)�”}”(hŒ(buffer of data to be transmitted to disk”h]”hŒ(buffer of data to be transmitted to disk”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÍhjì ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒinbuf”h]”hŒinbuf”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÎhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubj‹)�”}”(hhh]”hë)�”}”(hŒ1buffer of data to be received from disk (see [1])”h]”hŒ1buffer of data to be received from disk (see [1])”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÎhj# ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjN ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj7 ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj" ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KÃhjŽubhë)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÑhjŽubjI)�”}”(hXñ=========== ==================================================== io_ports[] values returned in the taskfile registers hob_ports[] high-order bytes, for extended commands. out_flags flags indicating which registers are valid (see [2]) in_flags flags indicating which registers should be returned outbuf buffer of data to be transmitted to disk (see [1]) inbuf buffer of data to be received from disk =========== ==================================================== ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhjn ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K4uh1jjhjn ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ io_ports[]”h]”hŒ io_ports[]”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÔhj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆ ubj‹)�”}”(hhh]”hë)�”}”(hŒ)values returned in the taskfile registers”h]”hŒ)values returned in the taskfile registers”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÔhj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ hob_ports[]”h]”hŒ hob_ports[]”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÕhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¿ ubj‹)�”}”(hhh]”hë)�”}”(hŒ(high-order bytes, for extended commands.”h]”hŒ(high-order bytes, for extended commands.”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÕhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ out_flags”h]”hŒ out_flags”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÖhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjö ubj‹)�”}”(hhh]”hë)�”}”(hŒ4flags indicating which registers are valid (see [2])”h]”hŒ4flags indicating which registers are valid (see [2])”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÖhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjö ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒin_flags”h]”hŒin_flags”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K×hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj- ubj‹)�”}”(hhh]”hë)�”}”(hŒ3flags indicating which registers should be returned”h]”hŒ3flags indicating which registers should be returned”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K×hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj- ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒoutbuf”h]”hŒoutbuf”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KØhjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjd ubj‹)�”}”(hhh]”hë)�”}”(hŒ2buffer of data to be transmitted to disk (see [1])”h]”hŒ2buffer of data to be transmitted to disk (see [1])”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KØhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjd ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒinbuf”h]”hŒinbuf”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÙhjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj› ubj‹)�”}”(hhh]”hë)�”}”(hŒ'buffer of data to be received from disk”h]”hŒ'buffer of data to be received from disk”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÙhjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj› ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjn ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KÓhjŽubjØ)�”}”(hhh]”jÝ)�”}”(hXerror returns: - EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set. - ENOMSG Device is not a disk drive. - ENOMEM Unable to allocate memory for task - EFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8) - EPERM req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set. - EIO Drive failed the command. ”h]”(jã)�”}”(hŒerror returns:”h]”hŒerror returns:”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Kåhjî ubjó)�”}”(hhh]”hà)�”}”(hhh]”(hå)�”}”(hŒ=EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set.”h]”hë)�”}”(hj h]”hŒ=EACCES CAP_SYS_ADMIN or CAP_SYS_RAWIO privilege not set.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÝhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubhå)�”}”(hŒ'ENOMSG Device is not a disk drive.”h]”hë)�”}”(hj h]”hŒ'ENOMSG Device is not a disk drive.”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KÞhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubhå)�”}”(hŒ.ENOMEM Unable to allocate memory for task”h]”hë)�”}”(hj6 h]”hŒ.ENOMEM Unable to allocate memory for task”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kßhj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubhå)�”}”(hŒDEFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8)”h]”hë)�”}”(hjM h]”hŒDEFAULT req_cmd == TASKFILE_IN_OUT (not implemented as of 2.6.8)”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KàhjK ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubhå)�”}”(hŒ_EPERM req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set.”h]”(hë)�”}”(hŒEPERM”h]”hŒEPERM”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Káhjb ubjI)�”}”(hŒ@req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set.”h]”hë)�”}”(hŒ@req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set.”h]”hŒ@req_cmd == TASKFILE_MULTI_OUT and drive multi-count not yet set.”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kãhjt ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´Kãhjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubhå)�”}”(hŒ&EIO Drive failed the command. ”h]”hë)�”}”(hŒ%EIO Drive failed the command.”h]”hŒ%EIO Drive failed the command.”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kåhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´KÝhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjî ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Kåhjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1j×hjŽubhë)�”}”(hŒnotes:”h]”hŒnotes:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KçhjŽubjI)�”}”(hX[1] READ THE FOLLOWING NOTES *CAREFULLY*. THIS IOCTL IS FULL OF GOTCHAS. Extreme caution should be used with using this ioctl. A mistake can easily corrupt data or hang the system. [2] Both the input and output buffers are copied from the user and written back to the user, even when not used. [3] If one or more bits are set in out_flags and in_flags is zero, the following values are used for in_flags.all and written back into in_flags on completion. * IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive * IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28 The association between in_flags.all and each enable bitfield flips depending on endianness; fortunately, TASKFILE only uses inflags.b.data bit and ignores all other bits. The end result is that, on any endian machines, it has no effect other than modifying in_flags on completion. [4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit) except for four drives per port chipsets. For four drives per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first pair and (0x80|DEV_bit|LBA_bit) for the second pair. [5] The argument to the ioctl is a pointer to a region of memory containing a ide_task_request_t structure, followed by an optional buffer of data to be transmitted to the drive, followed by an optional buffer to receive data from the drive. Command is passed to the disk drive via the ide_task_request_t structure, which contains these fields: ============ =============================================== io_ports[8] values for the taskfile registers hob_ports[8] high-order bytes, for extended commands out_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays contain valid values. Type ide_reg_valid_t. in_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays are expected to contain valid values on return. data_phase See below req_cmd Command type, see below out_size output (user->drive) buffer size, bytes in_size input (drive->user) buffer size, bytes ============ =============================================== When out_flags is zero, the following registers are loaded. ============ =============================================== HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 FEATURE NSECTOR SECTOR LCYL HCYL SELECT First, masked with 0xE0 if LBA48, 0xEF otherwise; then, or'ed with the default value of SELECT. ============ =============================================== If any bit in out_flags is set, the following registers are loaded. ============ =============================================== HOB_DATA If out_flags.b.data is set. HOB_DATA will travel on DD8-DD15 on little endian machines and on DD0-DD7 on big endian machines. DATA If out_flags.b.data is set. DATA will travel on DD0-DD7 on little endian machines and on DD8-DD15 on big endian machines. HOB_NSECTOR If out_flags.b.nsector_hob is set HOB_SECTOR If out_flags.b.sector_hob is set HOB_LCYL If out_flags.b.lcyl_hob is set HOB_HCYL If out_flags.b.hcyl_hob is set FEATURE If out_flags.b.feature is set NSECTOR If out_flags.b.nsector is set SECTOR If out_flags.b.sector is set LCYL If out_flags.b.lcyl is set HCYL If out_flags.b.hcyl is set SELECT Or'ed with the default value of SELECT and loaded regardless of out_flags.b.select. ============ =============================================== Taskfile registers are read back from the drive into {io|hob}_ports[] after the command completes iff one of the following conditions is met; otherwise, the original values will be written back, unchanged. 1. The drive fails the command (EIO). 2. One or more than one bits are set in out_flags. 3. The requested data_phase is TASKFILE_NO_DATA. ============ =============================================== HOB_DATA If in_flags.b.data is set. It will contain DD8-DD15 on little endian machines and DD0-DD7 on big endian machines. DATA If in_flags.b.data is set. It will contain DD0-DD7 on little endian machines and DD8-DD15 on big endian machines. HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 NSECTOR SECTOR LCYL HCYL ============ =============================================== The data_phase field describes the data transfer to be performed. Value is one of: =================== ======================================== TASKFILE_IN TASKFILE_MULTI_IN TASKFILE_OUT TASKFILE_MULTI_OUT TASKFILE_IN_OUT TASKFILE_IN_DMA TASKFILE_IN_DMAQ == IN_DMA (queueing not supported) TASKFILE_OUT_DMA TASKFILE_OUT_DMAQ == OUT_DMA (queueing not supported) TASKFILE_P_IN unimplemented TASKFILE_P_IN_DMA unimplemented TASKFILE_P_IN_DMAQ unimplemented TASKFILE_P_OUT unimplemented TASKFILE_P_OUT_DMA unimplemented TASKFILE_P_OUT_DMAQ unimplemented =================== ======================================== The req_cmd field classifies the command type. It may be one of: ======================== ======================================= IDE_DRIVE_TASK_NO_DATA IDE_DRIVE_TASK_SET_XFER unimplemented IDE_DRIVE_TASK_IN IDE_DRIVE_TASK_OUT unimplemented IDE_DRIVE_TASK_RAW_WRITE ======================== ======================================= [6] Do not access {in|out}_flags->all except for resetting all the bits. Always access individual bit fields. ->all value will flip depending on endianness. For the same reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS constants defined in hdreg.h. ”h]”(hë)�”}”(hŒ·[1] READ THE FOLLOWING NOTES *CAREFULLY*. THIS IOCTL IS FULL OF GOTCHAS. Extreme caution should be used with using this ioctl. A mistake can easily corrupt data or hang the system.”h]”(hŒ[1] READ THE FOLLOWING NOTES ”…”�”}”(hjÔ h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ *CAREFULLY*”h]”hŒ CAREFULLY”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÜ hjÔ ubhŒ�. THIS IOCTL IS FULL OF GOTCHAS. Extreme caution should be used with using this ioctl. A mistake can easily corrupt data or hang the system.”…”�”}”(hjÔ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KéhjÐ ubhë)�”}”(hŒp[2] Both the input and output buffers are copied from the user and written back to the user, even when not used.”h]”hŒp[2] Both the input and output buffers are copied from the user and written back to the user, even when not used.”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KîhjÐ ubhë)�”}”(hŒŸ[3] If one or more bits are set in out_flags and in_flags is zero, the following values are used for in_flags.all and written back into in_flags on completion.”h]”hŒŸ[3] If one or more bits are set in out_flags and in_flags is zero, the following values are used for in_flags.all and written back into in_flags on completion.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KñhjÐ ubjI)�”}”(hŒ”* IDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive * IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28 ”h]”hà)�”}”(hhh]”(hå)�”}”(hŒdIDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive”h]”hë)�”}”(hŒdIDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive”h]”hŒdIDE_TASKFILE_STD_IN_FLAGS | (IDE_HOB_STD_IN_FLAGS << 8) if LBA48 addressing is enabled for the drive”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Kõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjubhå)�”}”(hŒ'IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28 ”h]”hë)�”}”(hŒ&IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28”h]”hŒ&IDE_TASKFILE_STD_IN_FLAGS if CHS/LBA28”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´K÷hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjubeh}”(h]”h ]”h"]”h$]”h&]”jŒ*”uh1hßh³hÞh´Kõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KõhjÐ ubhë)�”}”(hXThe association between in_flags.all and each enable bitfield flips depending on endianness; fortunately, TASKFILE only uses inflags.b.data bit and ignores all other bits. The end result is that, on any endian machines, it has no effect other than modifying in_flags on completion.”h]”hXThe association between in_flags.all and each enable bitfield flips depending on endianness; fortunately, TASKFILE only uses inflags.b.data bit and ignores all other bits. The end result is that, on any endian machines, it has no effect other than modifying in_flags on completion.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´KúhjÐ ubhë)�”}”(hŒæ[4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit) except for four drives per port chipsets. For four drives per port chipsets, it's (0xa0|DEV_bit|LBA_bit) for the first pair and (0x80|DEV_bit|LBA_bit) for the second pair.”h]”hŒè[4] The default value of SELECT is (0xa0|DEV_bit|LBA_bit) except for four drives per port chipsets. For four drives per port chipsets, it’s (0xa0|DEV_bit|LBA_bit) for the first pair and (0x80|DEV_bit|LBA_bit) for the second pair.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÐ ubhë)�”}”(hŒñ[5] The argument to the ioctl is a pointer to a region of memory containing a ide_task_request_t structure, followed by an optional buffer of data to be transmitted to the drive, followed by an optional buffer to receive data from the drive.”h]”hŒñ[5] The argument to the ioctl is a pointer to a region of memory containing a ide_task_request_t structure, followed by an optional buffer of data to be transmitted to the drive, followed by an optional buffer to receive data from the drive.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÐ ubhë)�”}”(hŒfCommand is passed to the disk drive via the ide_task_request_t structure, which contains these fields:”h]”hŒfCommand is passed to the disk drive via the ide_task_request_t structure, which contains these fields:”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M hjÐ ubjI)�”}”(hX4============ =============================================== io_ports[8] values for the taskfile registers hob_ports[8] high-order bytes, for extended commands out_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays contain valid values. Type ide_reg_valid_t. in_flags flags indicating which entries in the io_ports[] and hob_ports[] arrays are expected to contain valid values on return. data_phase See below req_cmd Command type, see below out_size output (user->drive) buffer size, bytes in_size input (drive->user) buffer size, bytes ============ =============================================== ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhj•ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jjhj•ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ io_ports[8]”h]”hŒ io_ports[8]”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubj‹)�”}”(hhh]”hë)�”}”(hŒ!values for the taskfile registers”h]”hŒ!values for the taskfile registers”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ hob_ports[8]”h]”hŒ hob_ports[8]”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjæubj‹)�”}”(hhh]”hë)�”}”(hŒ'high-order bytes, for extended commands”h]”hŒ'high-order bytes, for extended commands”…”�”}”(hjh²hh³Nh´•Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ out_flags”h]”hŒ out_flags”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒtflags indicating which entries in the io_ports[] and hob_ports[] arrays contain valid values. Type ide_reg_valid_t.”h]”hŒtflags indicating which entries in the io_ports[] and hob_ports[] arrays contain valid values. Type ide_reg_valid_t.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒin_flags”h]”hŒin_flags”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubj‹)�”}”(hhh]”hë)�”}”(hŒwflags indicating which entries in the io_ports[] and hob_ports[] arrays are expected to contain valid values on return.”h]”hŒwflags indicating which entries in the io_ports[] and hob_ports[] arrays are expected to contain valid values on return.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ data_phase”h]”hŒ data_phase”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‹ubj‹)�”}”(hhh]”hë)�”}”(hŒ See below”h]”hŒ See below”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒreq_cmd”h]”hŒreq_cmd”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÂubj‹)�”}”(hhh]”hë)�”}”(hŒCommand type, see below”h]”hŒCommand type, see below”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒout_size”h]”hŒout_size”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjùubj‹)�”}”(hhh]”hë)�”}”(hŒ'output (user->drive) buffer size, bytes”h]”hŒ'output (user->drive) buffer size, bytes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒin_size”h]”hŒin_size”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj0ubj‹)�”}”(hhh]”hë)�”}”(hŒ&input (drive->user) buffer size, bytes”h]”hŒ&input (drive->user) buffer size, bytes”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´MhjÐ ubhë)�”}”(hŒ;When out_flags is zero, the following registers are loaded.”h]”hŒ;When out_flags is zero, the following registers are loaded.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÐ ubjI)�”}”(hX5============ =============================================== HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 FEATURE NSECTOR SECTOR LCYL HCYL SELECT First, masked with 0xE0 if LBA48, 0xEF otherwise; then, or'ed with the default value of SELECT. ============ =============================================== ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhj•ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jjhj•ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_FEATURE”h]”hŒ HOB_FEATURE”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M!hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M!hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_NSECTOR”h]”hŒ HOB_NSECTOR”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M"hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjæubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_SECTOR”h]”hŒ HOB_SECTOR”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M#hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M#hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_LCYL”h]”hŒHOB_LCYL”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M$hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M$hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_HCYL”h]”hŒHOB_HCYL”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M%hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‹ubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M%hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒFEATURE”h]”hŒFEATURE”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M&hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÂubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M'hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjëubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M(hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒLCYL”h]”hŒLCYL”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M)hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj=ubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHCYL”h]”hŒHCYL”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M*hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjfubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒSELECT”h]”hŒSELECT”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M+hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�ubj‹)�”}”(hhh]”hë)�”}”(hŒ_First, masked with 0xE0 if LBA48, 0xEF otherwise; then, or'ed with the default value of SELECT.”h]”hŒaFirst, masked with 0xE0 if LBA48, 0xEF otherwise; then, or’ed with the default value of SELECT.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M+hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´M hjÐ ubhë)�”}”(hŒCIf any bit in out_flags is set, the following registers are loaded.”h]”hŒCIf any bit in out_flags is set, the following registers are loaded.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M0hjÐ ubjI)�”}”(hX:============ =============================================== HOB_DATA If out_flags.b.data is set. HOB_DATA will travel on DD8-DD15 on little endian machines and on DD0-DD7 on big endian machines. DATA If out_flags.b.data is set. DATA will travel on DD0-DD7 on little endian machines and on DD8-DD15 on big endian machines. HOB_NSECTOR If out_flags.b.nsector_hob is set HOB_SECTOR If out_flags.b.sector_hob is set HOB_LCYL If out_flags.b.lcyl_hob is set HOB_HCYL If out_flags.b.hcyl_hob is set FEATURE If out_flags.b.feature is set NSECTOR If out_flags.b.nsector is set SECTOR If out_flags.b.sector is set LCYL If out_flags.b.lcyl is set HCYL If out_flags.b.hcyl is set SELECT Or'ed with the default value of SELECT and loaded regardless of out_flags.b.select. ============ =============================================== ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhjôubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jjhjôubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_DATA”h]”hŒHOB_DATA”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M3hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒ~If out_flags.b.data is set. HOB_DATA will travel on DD8-DD15 on little endian machines and on DD0-DD7 on big endian machines.”h]”hŒ~If out_flags.b.data is set. HOB_DATA will travel on DD8-DD15 on little endian machines and on DD0-DD7 on big endian machines.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M3hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒDATA”h]”hŒDATA”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M6hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjEubj‹)�”}”(hhh]”hë)�”}”(hŒzIf out_flags.b.data is set. DATA will travel on DD0-DD7 on little endian machines and on DD8-DD15 on big endian machines.”h]”hŒzIf out_flags.b.data is set. DATA will travel on DD0-DD7 on little endian machines and on DD8-DD15 on big endian machines.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M6hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_NSECTOR”h]”hŒ HOB_NSECTOR”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M9hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj|ubj‹)�”}”(hhh]”hë)�”}”(hŒ!If out_flags.b.nsector_hob is set”h]”hŒ!If out_flags.b.nsector_hob is set”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M9hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_SECTOR”h]”hŒ HOB_SECTOR”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M:hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj³ubj‹)�”}”(hhh]”hë)�”}”(hŒ If out_flags.b.sector_hob is set”h]”hŒ If out_flags.b.sector_hob is set”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M:hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_LCYL”h]”hŒHOB_LCYL”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M;hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.lcyl_hob is set”h]”hŒIf out_flags.b.lcyl_hob is set”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M;hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_HCYL”h]”hŒHOB_HCYL”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M<hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!ubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.hcyl_hob is set”h]”hŒIf out_flags.b.hcyl_hob is set”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M<hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒFEATURE”h]”hŒFEATURE”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M=hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjXubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.feature is set”h]”hŒIf out_flags.b.feature is set”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M=hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M>hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�ubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.nsector is set”h]”hŒIf out_flags.b.nsector is set”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M>hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M?hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÆubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.sector is set”h]”hŒIf out_flags.b.sector is set”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M?hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒLCYL”h]”hŒLCYL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjýubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.lcyl is set”h]”hŒIf out_flags.b.lcyl is set”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M@hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHCYL”h]”hŒHCYL”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MAhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj4ubj‹)�”}”(hhh]”hë)�”}”(hŒIf out_flags.b.hcyl is set”h]”hŒIf out_flags.b.hcyl is set”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MAhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒSELECT”h]”hŒSELECT”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MBhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjkubj‹)�”}”(hhh]”hë)�”}”(hŒSOr'ed with the default value of SELECT and loaded regardless of out_flags.b.select.”h]”hŒUOr’ed with the default value of SELECT and loaded regardless of out_flags.b.select.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MBhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjôubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´M2hjÐ ubhë)�”}”(hŒÍTaskfile registers are read back from the drive into {io|hob}_ports[] after the command completes iff one of the following conditions is met; otherwise, the original values will be written back, unchanged.”h]”hŒÍTaskfile registers are read back from the drive into {io|hob}_ports[] after the command completes iff one of the following conditions is met; otherwise, the original values will be written back, unchanged.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MFhjÐ ubjI)�”}”(hXz1. The drive fails the command (EIO). 2. One or more than one bits are set in out_flags. 3. The requested data_phase is TASKFILE_NO_DATA. ============ =============================================== HOB_DATA If in_flags.b.data is set. It will contain DD8-DD15 on little endian machines and DD0-DD7 on big endian machines. DATA If in_flags.b.data is set. It will contain DD0-DD7 on little endian machines and DD8-DD15 on big endian machines. HOB_FEATURE If the drive supports LBA48 HOB_NSECTOR If the drive supports LBA48 HOB_SECTOR If the drive supports LBA48 HOB_LCYL If the drive supports LBA48 HOB_HCYL If the drive supports LBA48 NSECTOR SECTOR LCYL HCYL ============ =============================================== ”h]”(hŒenumerated_list”“”)�”}”(hhh]”(hå)�”}”(hŒ"The drive fails the command (EIO).”h]”hë)�”}”(hjÔh]”hŒ"The drive fails the command (EIO).”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MKhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjÏubhå)�”}”(hŒ/One or more than one bits are set in out_flags.”h]”hë)�”}”(hjëh]”hŒ/One or more than one bits are set in out_flags.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MLhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjÏubhå)�”}”(hŒ.The requested data_phase is TASKFILE_NO_DATA. ”h]”hë)�”}”(hŒ-The requested data_phase is TASKFILE_NO_DATA.”h]”hŒ-The requested data_phase is TASKFILE_NO_DATA.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MMhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjÏubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÍhjÉubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jjhj&ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jjhj&ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_DATA”h]”hŒHOB_DATA”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MPhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj@ubj‹)�”}”(hhh]”hë)�”}”(hŒrIf in_flags.b.data is set. It will contain DD8-DD15 on little endian machines and DD0-DD7 on big endian machines.”h]”hŒrIf in_flags.b.data is set. It will contain DD8-DD15 on little endian machines and DD0-DD7 on big endian machines.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MPhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒDATA”h]”hŒDATA”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MShjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwubj‹)�”}”(hhh]”hë)�”}”(hŒrIf in_flags.b.data is set. It will contain DD0-DD7 on little endian machines and DD8-DD15 on big endian machines.”h]”hŒrIf in_flags.b.data is set. It will contain DD0-DD7 on little endian machines and DD8-DD15 on big endian machines.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MShj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_FEATURE”h]”hŒ HOB_FEATURE”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MVhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj®ubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MVhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_NSECTOR”h]”hŒ HOB_NSECTOR”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MWhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjåubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MWhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ HOB_SECTOR”h]”hŒ HOB_SECTOR”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MXhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_LCYL”h]”hŒHOB_LCYL”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MYhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjSubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MYhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHOB_HCYL”h]”hŒHOB_HCYL”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MZhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŠubj‹)�”}”(hhh]”hë)�”}”(hŒIf the drive supports LBA48”h]”hŒIf the drive supports LBA48”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MZhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M[hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÁubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M\hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒLCYL”h]”hŒLCYL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M]hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒHCYL”h]”hŒHCYL”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M^hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj<ubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´MKhjÐ ubhë)�”}”(hŒSThe data_phase field describes the data transfer to be performed. Value is one of:”h]”hŒSThe data_phase field describes the data transfer to be performed. Value is one of:”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MahjÐ ubjI)�”}”(hXr=================== ======================================== TASKFILE_IN TASKFILE_MULTI_IN TASKFILE_OUT TASKFILE_MULTI_OUT TASKFILE_IN_OUT TASKFILE_IN_DMA TASKFILE_IN_DMAQ == IN_DMA (queueing not supported) TASKFILE_OUT_DMA TASKFILE_OUT_DMAQ == OUT_DMA (queueing not supported) TASKFILE_P_IN unimplemented TASKFILE_P_IN_DMA unimplemented TASKFILE_P_IN_DMAQ unimplemented TASKFILE_P_OUT unimplemented TASKFILE_P_OUT_DMA unimplemented TASKFILE_P_OUT_DMAQ unimplemented =================== ======================================== ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhj“ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K(uh1jjhj“ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ TASKFILE_IN”h]”hŒ TASKFILE_IN”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mehj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj­ubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_MULTI_IN”h]”hŒTASKFILE_MULTI_IN”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MfhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÖubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ TASKFILE_OUT”h]”hŒ TASKFILE_OUT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mghjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÿubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_MULTI_OUT”h]”hŒTASKFILE_MULTI_OUT”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj(ubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_IN_OUT”h]”hŒTASKFILE_IN_OUT”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MihjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjQubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_IN_DMA”h]”hŒTASKFILE_IN_DMA”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mjhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjzubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_IN_DMAQ”h]”hŒTASKFILE_IN_DMAQ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mkhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj£ubj‹)�”}”(hhh]”hë)�”}”(hŒ"== IN_DMA (queueing not supported)”h]”hŒ"== IN_DMA (queueing not supported)”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mkhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_OUT_DMA”h]”hŒTASKFILE_OUT_DMA”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MlhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÚubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_OUT_DMAQ”h]”hŒTASKFILE_OUT_DMAQ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mmhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒ#== OUT_DMA (queueing not supported)”h]”hŒ#== OUT_DMA (queueing not supported)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mmhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒ TASKFILE_P_IN”h]”hŒ TASKFILE_P_IN”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mnhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj:ubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MnhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_P_IN_DMA”h]”hŒTASKFILE_P_IN_DMA”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mohjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjqubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mohj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_P_IN_DMAQ”h]”hŒTASKFILE_P_IN_DMAQ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mphj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¨ubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MphjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_P_OUT”h]”hŒTASKFILE_P_OUT”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mqhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjßubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mqhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_P_OUT_DMA”h]”hŒTASKFILE_P_OUT_DMA”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mrhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mrhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒTASKFILE_P_OUT_DMAQ”h]”hŒTASKFILE_P_OUT_DMAQ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MshjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjMubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mshjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´MdhjÐ ubhë)�”}”(hŒAThe req_cmd field classifies the command type. It may be one of:”h]”hŒAThe req_cmd field classifies the command type. It may be one of:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MvhjÐ ubjI)�”}”(hX======================== ======================================= IDE_DRIVE_TASK_NO_DATA IDE_DRIVE_TASK_SET_XFER unimplemented IDE_DRIVE_TASK_IN IDE_DRIVE_TASK_OUT unimplemented IDE_DRIVE_TASK_RAW_WRITE ======================== ======================================= ”h]”ja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhj²ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K'uh1jjhj²ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒIDE_DRIVE_TASK_NO_DATA”h]”hŒIDE_DRIVE_TASK_NO_DATA”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MzhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÌubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÉubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒIDE_DRIVE_TASK_SET_XFER”h]”hŒIDE_DRIVE_TASK_SET_XFER”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M{hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjõubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M{hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÉubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒIDE_DRIVE_TASK_IN”h]”hŒIDE_DRIVE_TASK_IN”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M|hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj,ubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÉubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒIDE_DRIVE_TASK_OUT”h]”hŒIDE_DRIVE_TASK_OUT”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M}hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjUubj‹)�”}”(hhh]”hë)�”}”(hŒ unimplemented”h]”hŒ unimplemented”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M}hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÉubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒIDE_DRIVE_TASK_RAW_WRITE”h]”hŒIDE_DRIVE_TASK_RAW_WRITE”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M~hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŒubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´MyhjÐ ubhë)�”}”(hX[6] Do not access {in|out}_flags->all except for resetting all the bits. Always access individual bit fields. ->all value will flip depending on endianness. For the same reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS constants defined in hdreg.h.”h]”hX[6] Do not access {in|out}_flags->all except for resetting all the bits. Always access individual bit fields. ->all value will flip depending on endianness. For the same reason, do not use IDE_{TASKFILE|HOB}_STD_{OUT|IN}_FLAGS constants defined in hdreg.h.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M�hjÐ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´KéhjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´M‡hjÙh²hubjÝ)�”}”(hXåHDIO_DRIVE_CMD execute a special drive command Note: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl. usage:: u8 args[4+XFER_SIZE]; ... ioctl(fd, HDIO_DRIVE_CMD, args); inputs: Commands other than WIN_SMART: ======= ======= args[0] COMMAND args[1] NSECTOR args[2] FEATURE args[3] NSECTOR ======= ======= WIN_SMART: ======= ======= args[0] COMMAND args[1] SECTOR args[2] FEATURE args[3] NSECTOR ======= ======= outputs: args[] buffer is filled with register values followed by any data returned by the disk. ======== ==================================================== args[0] status args[1] error args[2] NSECTOR args[3] undefined args[4+] NSECTOR * 512 bytes of data returned by the command. ======== ==================================================== error returns: - EACCES Access denied: requires CAP_SYS_RAWIO - ENOMEM Unable to allocate memory for task - EIO Drive reports error notes: [1] For commands other than WIN_SMART, args[1] should equal args[3]. SECTOR, LCYL and HCYL are undefined. For WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL respectively. In both cases SELECT will contain the default value for the drive. Please refer to HDIO_DRIVE_TASKFILE notes for the default value of SELECT. [2] If NSECTOR value is greater than zero and the drive sets DRQ when interrupting for the command, NSECTOR * 512 bytes are read from the device into the area following NSECTOR. In the above example, the area would be args[4..4+XFER_SIZE]. 16bit PIO is used regardless of HDIO_SET_32BIT setting. [3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA mode, IDE driver will try to tune the transfer mode of the drive accordingly. ”h]”(jã)�”}”(hŒHDIO_DRIVE_CMD”h]”hŒHDIO_DRIVE_CMD”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´MÒhjîubjó)�”}”(hhh]”(hë)�”}”(hŒexecute a special drive command”h]”hŒexecute a special drive command”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MŠhjubhë)�”}”(hŒkNote: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”h]”hŒmNote: If you don’t have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M�hjubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M�hjubj)�”}”(hŒ;u8 args[4+XFER_SIZE]; ... ioctl(fd, HDIO_DRIVE_CMD, args);”h]”hŒ;u8 args[4+XFER_SIZE]; ... ioctl(fd, HDIO_DRIVE_CMD, args);”…”�”}”hj-sbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´M’hjubjØ)�”}”(hhh]”(jÝ)�”}”(hX$inputs: Commands other than WIN_SMART: ======= ======= args[0] COMMAND args[1] NSECTOR args[2] FEATURE args[3] NSECTOR ======= ======= WIN_SMART: ======= ======= args[0] COMMAND args[1] SECTOR args[2] FEATURE args[3] NSECTOR ======= ======= ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M¨hj>ubjó)�”}”(hhh]”(hë)�”}”(hŒCommands other than WIN_SMART:”h]”hŒCommands other than WIN_SMART:”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M˜hjPubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjdubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjdubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[0]”h]”hŒargs[0]”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M›hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj~ubj‹)�”}”(hhh]”hë)�”}”(hŒCOMMAND”h]”hŒCOMMAND”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M›hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj{ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[1]”h]”hŒargs[1]”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mœhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjµubj‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MœhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj{ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[2]”h]”hŒargs[2]”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M�hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjìubj‹)�”}”(hhh]”hë)�”}”(hŒFEATURE”h]”hŒFEATURE”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj{ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[3]”h]”hŒargs[3]”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mžhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj#ubj‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mžhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjdubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjPubhë)�”}”(hŒ WIN_SMART:”h]”hŒ WIN_SMART:”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¡hjPubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhj~ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhj~ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[0]”h]”hŒargs[0]”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¤hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj˜ubj‹)�”}”(hhh]”hë)�”}”(hŒCOMMAND”h]”hŒCOMMAND”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¤hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj•ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[1]”h]”hŒargs[1]”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¥hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÏubj‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¥hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj•ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[2]”h]”hŒargs[2]”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¦hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubj‹)�”}”(hhh]”hë)�”}”(hŒFEATURE”h]”hŒFEATURE”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¦hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj•ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[3]”h]”hŒargs[3]”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M§hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj=ubj‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M§hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hj~ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´M¨hj;ubjÝ)�”}”(hXŠoutputs: args[] buffer is filled with register values followed by any data returned by the disk. ======== ==================================================== args[0] status args[1] error args[2] NSECTOR args[3] undefined args[4+] NSECTOR * 512 bytes of data returned by the command. ======== ==================================================== ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M¶hj“ubjó)�”}”(hhh]”(jI)�”}”(hŒ>args[] buffer is filled with register values followed by any ”h]”hë)�”}”(hŒ= XFER_SW_DMA_0 && the drive supports any DMA mode, IDE driver will try to tune the transfer mode of the drive accordingly. ”h]”(hë)�”}”(hXD[1] For commands other than WIN_SMART, args[1] should equal args[3]. SECTOR, LCYL and HCYL are undefined. For WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL respectively. In both cases SELECT will contain the default value for the drive. Please refer to HDIO_DRIVE_TASKFILE notes for the default value of SELECT.”h]”hXD[1] For commands other than WIN_SMART, args[1] should equal args[3]. SECTOR, LCYL and HCYL are undefined. For WIN_SMART, 0x4f and 0xc2 are loaded into LCYL and HCYL respectively. In both cases SELECT will contain the default value for the drive. Please refer to HDIO_DRIVE_TASKFILE notes for the default value of SELECT.”…”�”}”(hj¯!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M¿hj«!ubhë)�”}”(hX([2] If NSECTOR value is greater than zero and the drive sets DRQ when interrupting for the command, NSECTOR * 512 bytes are read from the device into the area following NSECTOR. In the above example, the area would be args[4..4+XFER_SIZE]. 16bit PIO is used regardless of HDIO_SET_32BIT setting.”h]”hX([2] If NSECTOR value is greater than zero and the drive sets DRQ when interrupting for the command, NSECTOR * 512 bytes are read from the device into the area following NSECTOR. In the above example, the area would be args[4..4+XFER_SIZE]. 16bit PIO is used regardless of HDIO_SET_32BIT setting.”…”�”}”(hj½!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MÆhj«!ubhë)�”}”(hŒÈ[3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA mode, IDE driver will try to tune the transfer mode of the drive accordingly.”h]”hŒÈ[3] If COMMAND == WIN_SETFEATURES && FEATURE == SETFEATURES_XFER && NSECTOR >= XFER_SW_DMA_0 && the drive supports any DMA mode, IDE driver will try to tune the transfer mode of the drive accordingly.”…”�”}”(hjË!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MÍhj«!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´M¿hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´MÒhjÙh²hubjÝ)�”}”(hX>HDIO_DRIVE_TASK execute task and special drive command Note: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl. usage:: u8 args[7]; ... ioctl(fd, HDIO_DRIVE_TASK, args); inputs: Taskfile register values: ======= ======= args[0] COMMAND args[1] FEATURE args[2] NSECTOR args[3] SECTOR args[4] LCYL args[5] HCYL args[6] SELECT ======= ======= outputs: Taskfile register values: ======= ======= args[0] status args[1] error args[2] NSECTOR args[3] SECTOR args[4] LCYL args[5] HCYL args[6] SELECT ======= ======= error returns: - EACCES Access denied: requires CAP_SYS_RAWIO - ENOMEM Unable to allocate memory for task - ENOMSG Device is not a disk drive. - EIO Drive failed the command. notes: [1] DEV bit (0x10) of SELECT register is ignored and the appropriate value for the drive is used. All other bits are used unaltered. ”h]”(jã)�”}”(hŒHDIO_DRIVE_TASK”h]”hŒHDIO_DRIVE_TASK”…”�”}”(hjï!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M hjë!ubjó)�”}”(hhh]”(hë)�”}”(hŒ&execute task and special drive command”h]”hŒ&execute task and special drive command”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MÕhjý!ubhë)�”}”(hŒkNote: If you don't have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”h]”hŒmNote: If you don’t have a copy of the ANSI ATA specification handy, you should probably ignore this ioctl.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MØhjý!ubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MÛhjý!ubj)�”}”(hŒ2u8 args[7]; ... ioctl(fd, HDIO_DRIVE_TASK, args);”h]”hŒ2u8 args[7]; ... ioctl(fd, HDIO_DRIVE_TASK, args);”…”�”}”hj*"sbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´MÝhjý!ubjØ)�”}”(hhh]”(jÝ)�”}”(hŒÏinputs: Taskfile register values: ======= ======= args[0] COMMAND args[1] FEATURE args[2] NSECTOR args[3] SECTOR args[4] LCYL args[5] HCYL args[6] SELECT ======= ======= ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hj?"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Míhj;"ubjó)�”}”(hhh]”(hë)�”}”(hŒTaskfile register values:”h]”hŒTaskfile register values:”…”�”}”(hjP"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MãhjM"ubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhja"ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhja"ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[0]”h]”hŒargs[0]”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mæhj~"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj{"ubj‹)�”}”(hhh]”hë)�”}”(hŒCOMMAND”h]”hŒCOMMAND”…”�”}”(hj˜"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mæhj•"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj{"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[1]”h]”hŒargs[1]”…”�”}”(hj¸"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mçhjµ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj²"ubj‹)�”}”(hhh]”hë)�”}”(hŒFEATURE”h]”hŒFEATURE”…”�”}”(hjÏ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MçhjÌ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj²"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[2]”h]”hŒargs[2]”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mèhjì"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjé"ubj‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mèhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjé"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[3]”h]”hŒargs[3]”…”�”}”(hj&#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Méhj##ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj #ubj‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hj=#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Méhj:#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj #ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[4]”h]”hŒargs[4]”…”�”}”(hj]#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MêhjZ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjW#ubj‹)�”}”(hhh]”hë)�”}”(hŒLCYL”h]”hŒLCYL”…”�”}”(hjt#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mêhjq#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjW#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[5]”h]”hŒargs[5]”…”�”}”(hj”#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mëhj‘#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŽ#ubj‹)�”}”(hhh]”hë)�”}”(hŒHCYL”h]”hŒHCYL”…”�”}”(hj«#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mëhj¨#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŽ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[6]”h]”hŒargs[6]”…”�”}”(hjË#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MìhjÈ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÅ#ubj‹)�”}”(hhh]”hë)�”}”(hŒSELECT”h]”hŒSELECT”…”�”}”(hjâ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mìhjß#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÅ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjx"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hja"ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj^"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hjM"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj;"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Míhj8"ubjÝ)�”}”(hŒÎoutputs: Taskfile register values: ======= ======= args[0] status args[1] error args[2] NSECTOR args[3] SECTOR args[4] LCYL args[5] HCYL args[6] SELECT ======= ======= ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Mûhj$ubjó)�”}”(hhh]”(hë)�”}”(hŒTaskfile register values:”h]”hŒTaskfile register values:”…”�”}”(hj0$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mðhj-$ubja)�”}”(hhh]”jf)�”}”(hhh]”(jk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjA$ubjk)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jjhjA$ubj�)�”}”(hhh]”(j†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[0]”h]”hŒargs[0]”…”�”}”(hja$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Môhj^$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj[$ubj‹)�”}”(hhh]”hë)�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hjx$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Môhju$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj[$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[1]”h]”hŒargs[1]”…”�”}”(hj˜$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mõhj•$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj’$ubj‹)�”}”(hhh]”hë)�”}”(hŒerror”h]”hŒerror”…”�”}”(hj¯$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mõhj¬$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj’$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[2]”h]”hŒargs[2]”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MöhjÌ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÉ$ubj‹)�”}”(hhh]”hë)�”}”(hŒNSECTOR”h]”hŒNSECTOR”…”�”}”(hjæ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Möhjã$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÉ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[3]”h]”hŒargs[3]”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M÷hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj%ubj‹)�”}”(hhh]”hë)�”}”(hŒSECTOR”h]”hŒSECTOR”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M÷hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[4]”h]”hŒargs[4]”…”�”}”(hj=%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Møhj:%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj7%ubj‹)�”}”(hhh]”hë)�”}”(hŒLCYL”h]”hŒLCYL”…”�”}”(hjT%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MøhjQ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj7%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[5]”h]”hŒargs[5]”…”�”}”(hjt%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mùhjq%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjn%ubj‹)�”}”(hhh]”hë)�”}”(hŒHCYL”h]”hŒHCYL”…”�”}”(hj‹%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mùhjˆ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjn%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubj†)�”}”(hhh]”(j‹)�”}”(hhh]”hë)�”}”(hŒargs[6]”h]”hŒargs[6]”…”�”}”(hj«%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Múhj¨%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¥%ubj‹)�”}”(hhh]”hë)�”}”(hŒSELECT”h]”hŒSELECT”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Múhj¿%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¥%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j…hjX$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j€hjA$ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jehj>$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j`hj-$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Mûhj8"ubjÝ)�”}”(hŒÇerror returns: - EACCES Access denied: requires CAP_SYS_RAWIO - ENOMEM Unable to allocate memory for task - ENOMSG Device is not a disk drive. - EIO Drive failed the command. ”h]”(jã)�”}”(hŒerror returns:”h]”hŒerror returns:”…”�”}”(hjÿ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Mhjû%ubjó)�”}”(hhh]”hà)�”}”(hhh]”(hå)�”}”(hŒ2EACCES Access denied: requires CAP_SYS_RAWIO”h]”hë)�”}”(hj&h]”hŒ2EACCES Access denied: requires CAP_SYS_RAWIO”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mþhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj&ubhå)�”}”(hŒ.ENOMEM Unable to allocate memory for task”h]”hë)�”}”(hj,&h]”hŒ.ENOMEM Unable to allocate memory for task”…”�”}”(hj.&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mÿhj*&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj&ubhå)�”}”(hŒ'ENOMSG Device is not a disk drive.”h]”hë)�”}”(hjC&h]”hŒ'ENOMSG Device is not a disk drive.”…”�”}”(hjE&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjA&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj&ubhå)�”}”(hŒ&EIO Drive failed the command. ”h]”hë)�”}”(hŒ%EIO Drive failed the command.”h]”hŒ%EIO Drive failed the command.”…”�”}”(hj\&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjX&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähj&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´Mþhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjû%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Mhj8"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hjý!ubhë)�”}”(hŒnotes:”h]”hŒnotes:”…”�”}”(hjˆ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhjý!ubjI)�”}”(hŒˆ[1] DEV bit (0x10) of SELECT register is ignored and the appropriate value for the drive is used. All other bits are used unaltered. ”h]”hë)�”}”(hŒ…[1] DEV bit (0x10) of SELECT register is ignored and the appropriate value for the drive is used. All other bits are used unaltered.”h]”hŒ…[1] DEV bit (0x10) of SELECT register is ignored and the appropriate value for the drive is used. All other bits are used unaltered.”…”�”}”(hjš&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj–&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÞh´Mhjý!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjë!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´M hjÙh²hubjÝ)�”}”(hX{HDIO_SET_32BIT change io_32bit flags usage:: int val; ioctl(fd, HDIO_SET_32BIT, val); inputs: New value for io_32bit flag outputs: none error return: - EINVAL Called on a partition instead of the whole disk device - EACCES Access denied: requires CAP_SYS_ADMIN - EINVAL value out of range [0 3] - EBUSY Controller busy”h]”(jã)�”}”(hŒHDIO_SET_32BIT”h]”hŒHDIO_SET_32BIT”…”�”}”(hj¾&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M"hjº&ubjó)�”}”(hhh]”(hë)�”}”(hŒchange io_32bit flags”h]”hŒchange io_32bit flags”…”�”}”(hjÏ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M hjÌ&ubhë)�”}”(hŒusage::”h]”hŒusage:”…”�”}”(hjÝ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´MhjÌ&ubj)�”}”(hŒ)int val; ioctl(fd, HDIO_SET_32BIT, val);”h]”hŒ)int val; ioctl(fd, HDIO_SET_32BIT, val);”…”�”}”hjë&sbah}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÞh´MhjÌ&ubjØ)�”}”(hhh]”(jÝ)�”}”(hŒ&inputs: New value for io_32bit flag ”h]”(jã)�”}”(hŒinputs:”h]”hŒinputs:”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Mhjü&ubjó)�”}”(hhh]”hë)�”}”(hŒNew value for io_32bit flag”h]”hŒNew value for io_32bit flag”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjü&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Mhjù&ubjÝ)�”}”(hŒoutputs: none ”h]”(jã)�”}”(hŒoutputs:”h]”hŒoutputs:”…”�”}”(hj/'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´Mhj+'ubjó)�”}”(hhh]”hë)�”}”(hŒnone”h]”hŒnone”…”�”}”(hj@'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´Mhj='ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhj+'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´Mhjù&ubjÝ)�”}”(hŒÌerror return: - EINVAL Called on a partition instead of the whole disk device - EACCES Access denied: requires CAP_SYS_ADMIN - EINVAL value out of range [0 3] - EBUSY Controller busy”h]”(jã)�”}”(hŒ error return:”h]”hŒ error return:”…”�”}”(hj^'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jâh³hÞh´M"hjZ'ubjó)�”}”(hhh]”hà)�”}”(hhh]”(hå)�”}”(hŒBEINVAL Called on a partition instead of the whole disk device”h]”hë)�”}”(hjt'h]”hŒBEINVAL Called on a partition instead of the whole disk device”…”�”}”(hjv'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M hjr'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjo'ubhå)�”}”(hŒ2EACCES Access denied: requires CAP_SYS_ADMIN”h]”hë)�”}”(hj‹'h]”hŒ2EACCES Access denied: requires CAP_SYS_ADMIN”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M!hj‰'uba•W h}”(h]”h ]”h"]”h$]”h&]”uh1hähjo'ubhå)�”}”(hŒ$EINVAL value out of range [0 3]”h]”hë)�”}”(hj¢'h]”hŒ$EINVAL value out of range [0 3]”…”�”}”(hj¤'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M"hj 'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjo'ubhå)�”}”(hŒEBUSY Controller busy”h]”hë)�”}”(hj¹'h]”hŒEBUSY Controller busy”…”�”}”(hj»'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÞh´M#hj·'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hähjo'ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1hßh³hÞh´M hjl'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jòhjZ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´M"hjù&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hjÌ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jòhjº&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÜh³hÞh´M"hjÙh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j×hh·h²hh³Nh´Nubeh}”(h]”Œsummary-of-hdio-ioctl-calls”ah ]”h"]”Œsummary of hdio_ ioctl calls”ah$]”h&]”uh1hµhhh²hh³hÞh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÞuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jŠŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j"(Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÞŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”jý'jú'sŒ nametypes”}”jý'‰sh}”jú'h·sŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.