sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/driver-api/libatamodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/driver-api/libatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/driver-api/libatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/driver-api/libatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/driver-api/libatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/pt_BR/driver-api/libatamodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/driver-api/libatamodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hlibATA Developer's Guideh]hlibATA Developer’s Guide}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/driver-api/libata.rsthKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h Jeff Garzik h]h paragraph)}(h Jeff Garzikh]h Jeff Garzik}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hlibATA is a library used inside the Linux kernel to support ATA host controllers and devices. libATA provides an ATA driver API, class transports for ATA and ATAPI devices, and SCSI<->ATA translation for ATA devices according to the T10 SAT specification.h]hlibATA is a library used inside the Linux kernel to support ATA host controllers and devices. libATA provides an ATA driver API, class transports for ATA and ATAPI devices, and SCSI<->ATA translation for ATA devices according to the T10 SAT specification.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj hhubh)}(h|This Guide documents the libATA driver API, library functions, library internals, and a couple sample ATA low-level drivers.h]h|This Guide documents the libATA driver API, library functions, library internals, and a couple sample ATA low-level drivers.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hlibata Driver APIh]hlibata Driver API}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhKubh)}(h:c:type:`struct ata_port_operations ` is defined for every low-level libata hardware driver, and it controls how the low-level driver interfaces with the ATA and SCSI layers.h](h)}(h::c:type:`struct ata_port_operations `h]hliteral)}(hjYh]hstruct ata_port_operations}(hj]hhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1j[hjWubah}(h]h ]h"]h$]h&]refdocdriver-api/libata refdomainjhreftypetype refexplicitrefwarn reftargetata_port_operationsuh1hhhhKhjSubh is defined for every low-level libata hardware driver, and it controls how the low-level driver interfaces with the ATA and SCSI layers.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjBhhubh)}(hXFIS-based drivers will hook into the system with ``->qc_prep()`` and ``->qc_issue()`` high-level hooks. Hardware which behaves in a manner similar to PCI IDE hardware may utilize several generic helpers, defining at a bare minimum the bus I/O addresses of the ATA shadow register blocks.h](h1FIS-based drivers will hook into the system with }(hjhhhNhNubj\)}(h``->qc_prep()``h]h ->qc_prep()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh and }(hjhhhNhNubj\)}(h``->qc_issue()``h]h ->qc_issue()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh high-level hooks. Hardware which behaves in a manner similar to PCI IDE hardware may utilize several generic helpers, defining at a bare minimum the bus I/O addresses of the ATA shadow register blocks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjBhhubh)}(hhh](h)}(h::c:type:`struct ata_port_operations `h]h)}(hjh]j\)}(hjh]hstruct ata_port_operations}(hjhhhNhNubah}(h]h ](jgjhc-typeeh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypetype refexplicitrefwarnjzata_port_operationsuh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK!ubh)}(hhh](h)}(h"Post-IDENTIFY device configurationh]h"Post-IDENTIFY device configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK$ubh literal_block)}(hmode_filter()`` hook is called when libata has built a mask of the possible modes. This is passed to the ``->mode_filter()`` function which should return a mask of valid modes after filtering those unsuitable due to hardware limits. It is not valid to use this interface to add modes.h](hRHooks called prior to the issue of SET FEATURES - XFER MODE command. The optional }(hjIhhhNhNubj\)}(h``->mode_filter()``h]h->mode_filter()}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIubhZ hook is called when libata has built a mask of the possible modes. This is passed to the }(hjIhhhNhNubj\)}(h``->mode_filter()``h]h->mode_filter()}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIubh function which should return a mask of valid modes after filtering those unsuitable due to hardware limits. It is not valid to use this interface to add modes.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKpio_mode`` and ``dev->dma_mode`` are guaranteed to be valid when ``->set_piomode()`` and when ``->set_dmamode()`` is called. The timings for any other drive sharing the cable will also be valid at this point. That is the library records the decisions for the modes of each drive on a channel before it attempts to set any of them.h](j\)}(h``dev->pio_mode``h]h dev->pio_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubh and }(hj{hhhNhNubj\)}(h``dev->dma_mode``h]h dev->dma_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubh! are guaranteed to be valid when }(hj{hhhNhNubj\)}(h``->set_piomode()``h]h->set_piomode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubh and when }(hj{hhhNhNubj\)}(h``->set_dmamode()``h]h->set_dmamode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubh is called. The timings for any other drive sharing the cable will also be valid at this point. That is the library records the decisions for the modes of each drive on a channel before it attempts to set any of them.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKChj*hhubh)}(hs``->post_set_mode()`` is called unconditionally, after the SET FEATURES - XFER MODE command completes successfully.h](j\)}(h``->post_set_mode()``h]h->post_set_mode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh^ is called unconditionally, after the SET FEATURES - XFER MODE command completes successfully.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKIhj*hhubh)}(hn``->set_piomode()`` is always called (if present), but ``->set_dma_mode()`` is only called if DMA is possible.h](j\)}(h``->set_piomode()``h]h->set_piomode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh$ is always called (if present), but }(hjhhhNhNubj\)}(h``->set_dma_mode()``h]h->set_dma_mode()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh# is only called if DMA is possible.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKLhj*hhubeh}(h]set-pio-dma-modeah ]h"]set pio/dma modeah$]h&]uh1hhjhhhhhK2ubh)}(hhh](h)}(hTaskfile read/writeh]hTaskfile read/write}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKPubj)}(hvoid (*sff_tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);h]hvoid (*sff_tf_load) (struct ata_port *ap, struct ata_taskfile *tf); void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);}hj0sbah}(h]h ]h"]h$]h&]jjuh1jhhhKThjhhubh)}(hX^``->tf_load()`` is called to load the given taskfile into hardware registers / DMA buffers. ``->tf_read()`` is called to read the hardware registers / DMA buffers, to obtain the current set of taskfile register values. Most drivers for taskfile-based hardware (PIO or MMIO) use :c:func:`ata_sff_tf_load` and :c:func:`ata_sff_tf_read` for these hooks.h](j\)}(h``->tf_load()``h]h ->tf_load()}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj>ubhM is called to load the given taskfile into hardware registers / DMA buffers. }(hj>hhhNhNubj\)}(h``->tf_read()``h]h ->tf_read()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj>ubh is called to read the hardware registers / DMA buffers, to obtain the current set of taskfile register values. Most drivers for taskfile-based hardware (PIO or MMIO) use }(hj>hhhNhNubh)}(h:c:func:`ata_sff_tf_load`h]j\)}(hjhh]hata_sff_tf_load()}(hjjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjfubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_tf_loaduh1hhhhKXhj>ubh and }(hj>hhhNhNubh)}(h:c:func:`ata_sff_tf_read`h]j\)}(hjh]hata_sff_tf_read()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_tf_readuh1hhhhKXhj>ubh for these hooks.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKXhjhhubeh}(h]taskfile-read-writeah ]h"]taskfile read/writeah$]h&]uh1hhjhhhhhKPubh)}(hhh](h)}(hPIO data read/writeh]hPIO data read/write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK_ubj)}(hPvoid (*sff_data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);h]hPvoid (*sff_data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKchjhhubh)}(hAll bmdma-style drivers must implement this hook. This is the low-level operation that actually copies the data bytes during a PIO data transfer. Typically the driver will choose one of :c:func:`ata_sff_data_xfer`, or :c:func:`ata_sff_data_xfer32`.h](hAll bmdma-style drivers must implement this hook. This is the low-level operation that actually copies the data bytes during a PIO data transfer. Typically the driver will choose one of }(hjhhhNhNubh)}(h:c:func:`ata_sff_data_xfer`h]j\)}(hjh]hata_sff_data_xfer()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_data_xferuh1hhhhKfhjubh, or }(hjhhhNhNubh)}(h:c:func:`ata_sff_data_xfer32`h]j\)}(hjh]hata_sff_data_xfer32()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_data_xfer32uh1hhhhKfhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKfhjhhubeh}(h]pio-data-read-writeah ]h"]pio data read/writeah$]h&]uh1hhjhhhhhK_ubh)}(hhh](h)}(hATA command executeh]hATA command execute}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKlubj)}(hGvoid (*sff_exec_command)(struct ata_port *ap, struct ata_taskfile *tf);h]hGvoid (*sff_exec_command)(struct ata_port *ap, struct ata_taskfile *tf);}hjFsbah}(h]h ]h"]h$]h&]jjuh1jhhhKphj5hhubh)}(hcauses an ATA command, previously loaded with ``->tf_load()``, to be initiated in hardware. Most drivers for taskfile-based hardware use :c:func:`ata_sff_exec_command` for this hook.h](h.causes an ATA command, previously loaded with }(hjThhhNhNubj\)}(h``->tf_load()``h]h ->tf_load()}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjTubhL, to be initiated in hardware. Most drivers for taskfile-based hardware use }(hjThhhNhNubh)}(h:c:func:`ata_sff_exec_command`h]j\)}(hjph]hata_sff_exec_command()}(hjrhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjnubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_exec_commanduh1hhhhKshjTubh for this hook.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKshj5hhubeh}(h]ata-command-executeah ]h"]ata command executeah$]h&]uh1hhjhhhhhKlubh)}(hhh](h)}(h%Per-cmd ATAPI DMA capabilities filterh]h%Per-cmd ATAPI DMA capabilities filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKxubj)}(h3int (*check_atapi_dma) (struct ata_queued_cmd *qc);h]h3int (*check_atapi_dma) (struct ata_queued_cmd *qc);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhK|hjhhubh)}(hAllow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command.h]hAllow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(heThis hook may be specified as NULL, in which case libata will assume that atapi dma can be supported.h]heThis hook may be specified as NULL, in which case libata will assume that atapi dma can be supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]%per-cmd-atapi-dma-capabilities-filterah ]h"]%per-cmd atapi dma capabilities filterah$]h&]uh1hhjhhhhhKxubh)}(hhh](h)}(h"Read specific ATA shadow registersh]h"Read specific ATA shadow registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(h`u8 (*sff_check_status)(struct ata_port *ap); u8 (*sff_check_altstatus)(struct ata_port *ap);h]h`u8 (*sff_check_status)(struct ata_port *ap); u8 (*sff_check_altstatus)(struct ata_port *ap);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hReads the Status/AltStatus ATA shadow register from hardware. On some hardware, reading the Status register has the side effect of clearing the interrupt condition. Most drivers for taskfile-based hardware use :c:func:`ata_sff_check_status` for this hook.h](hReads the Status/AltStatus ATA shadow register from hardware. On some hardware, reading the Status register has the side effect of clearing the interrupt condition. Most drivers for taskfile-based hardware use }(hjhhhNhNubh)}(h:c:func:`ata_sff_check_status`h]j\)}(hj h]hata_sff_check_status()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_check_statusuh1hhhhKhjubh for this hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]"read-specific-ata-shadow-registersah ]h"]"read specific ata shadow registersah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h"Write specific ATA shadow registerh]h"Write specific ATA shadow register}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hhhhhKubj)}(h4void (*sff_set_devctl)(struct ata_port *ap, u8 ctl);h]h4void (*sff_set_devctl)(struct ata_port *ap, u8 ctl);}hjKsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj:hhubh)}(heWrite the device control ATA shadow register to the hardware. Most drivers don't need to define this.h]hgWrite the device control ATA shadow register to the hardware. Most drivers don’t need to define this.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj:hhubeh}(h]"write-specific-ata-shadow-registerah ]h"]"write specific ata shadow registerah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hSelect ATA device on bush]hSelect ATA device on bus}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohhhhhKubj)}(hAvoid (*sff_dev_select)(struct ata_port *ap, unsigned int device);h]hAvoid (*sff_dev_select)(struct ata_port *ap, unsigned int device);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjohhubh)}(hIssues the low-level hardware command(s) that causes one of N hardware devices to be considered 'selected' (active and available for use) on the ATA bus. This generally has no meaning on FIS-based devices.h]hIssues the low-level hardware command(s) that causes one of N hardware devices to be considered ‘selected’ (active and available for use) on the ATA bus. This generally has no meaning on FIS-based devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjohhubh)}(hXMost drivers for taskfile-based hardware use :c:func:`ata_sff_dev_select` for this hook.h](h-Most drivers for taskfile-based hardware use }(hjhhhNhNubh)}(h:c:func:`ata_sff_dev_select`h]j\)}(hjh]hata_sff_dev_select()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_dev_selectuh1hhhhKhjubh for this hook.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjohhubeh}(h]select-ata-device-on-busah ]h"]select ata device on busah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hPrivate tuning methodh]hPrivate tuning method}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(h'void (*set_mode) (struct ata_port *ap);h]h'void (*set_mode) (struct ata_port *ap);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hX'By default libata performs drive and controller tuning in accordance with the ATA timing rules and also applies blacklists and cable limits. Some controllers need special handling and have custom tuning rules, typically raid controllers that use ATA commands but do not actually do drive timing.h]hX'By default libata performs drive and controller tuning in accordance with the ATA timing rules and also applies blacklists and cable limits. Some controllers need special handling and have custom tuning rules, typically raid controllers that use ATA commands but do not actually do drive timing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(hXd**Warning** This hook should not be used to replace the standard controller tuning logic when a controller has quirks. Replacing the default tuning logic in that case would bypass handling for drive and bridge quirks that may be important to data reliability. If a controller needs to filter the mode selection it should use the mode_filter hook instead. h](h)}(h **Warning**h]hstrong)}(hj h]hWarning}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hXVThis hook should not be used to replace the standard controller tuning logic when a controller has quirks. Replacing the default tuning logic in that case would bypass handling for drive and bridge quirks that may be important to data reliability. If a controller needs to filter the mode selection it should use the mode_filter hook instead.h]hXVThis hook should not be used to replace the standard controller tuning logic when a controller has quirks. Replacing the default tuning logic in that case would bypass handling for drive and bridge quirks that may be important to data reliability. If a controller needs to filter the mode selection it should use the mode_filter hook instead.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]private-tuning-methodah ]h"]private tuning methodah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hControl PCI IDE BMDMA engineh]hControl PCI IDE BMDMA engine}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhKubj)}(hvoid (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_start) (struct ata_queued_cmd *qc); void (*bmdma_stop) (struct ata_port *ap); u8 (*bmdma_status) (struct ata_port *ap);h]hvoid (*bmdma_setup) (struct ata_queued_cmd *qc); void (*bmdma_start) (struct ata_queued_cmd *qc); void (*bmdma_stop) (struct ata_port *ap); u8 (*bmdma_status) (struct ata_port *ap);}hjNsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj=hhubh)}(hWhen setting up an IDE BMDMA transaction, these hooks arm (``->bmdma_setup``), fire (``->bmdma_start``), and halt (``->bmdma_stop``) the hardware's DMA engine. ``->bmdma_status`` is used to read the standard PCI IDE DMA Status register.h](h;When setting up an IDE BMDMA transaction, these hooks arm (}(hj\hhhNhNubj\)}(h``->bmdma_setup``h]h ->bmdma_setup}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj\ubh ), fire (}(hj\hhhNhNubj\)}(h``->bmdma_start``h]h ->bmdma_start}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj\ubh ), and halt (}(hj\hhhNhNubj\)}(h``->bmdma_stop``h]h ->bmdma_stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj\ubh) the hardware’s DMA engine. }(hj\hhhNhNubj\)}(h``->bmdma_status``h]h->bmdma_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj\ubh: is used to read the standard PCI IDE DMA Status register.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hYThese hooks are typically either no-ops, or simply not implemented, in FIS-based drivers.h]hYThese hooks are typically either no-ops, or simply not implemented, in FIS-based drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hX!Most legacy IDE drivers use :c:func:`ata_bmdma_setup` for the :c:func:`bmdma_setup` hook. :c:func:`ata_bmdma_setup` will write the pointer to the PRD table to the IDE PRD Table Address register, enable DMA in the DMA Command register, and call :c:func:`exec_command` to begin the transfer.h](hMost legacy IDE drivers use }(hjhhhNhNubh)}(h:c:func:`ata_bmdma_setup`h]j\)}(hjh]hata_bmdma_setup()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_setupuh1hhhhKhjubh for the }(hjhhhNhNubh)}(h:c:func:`bmdma_setup`h]j\)}(hjh]h bmdma_setup()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz bmdma_setupuh1hhhhKhjubh hook. }(hjhhhNhNubh)}(h:c:func:`ata_bmdma_setup`h]j\)}(hjh]hata_bmdma_setup()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_setupuh1hhhhKhjubh will write the pointer to the PRD table to the IDE PRD Table Address register, enable DMA in the DMA Command register, and call }(hjhhhNhNubh)}(h:c:func:`exec_command`h]j\)}(hj3h]hexec_command()}(hj5hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj1ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz exec_commanduh1hhhhKhjubh to begin the transfer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hMost legacy IDE drivers use :c:func:`ata_bmdma_start` for the :c:func:`bmdma_start` hook. :c:func:`ata_bmdma_start` will write the ATA_DMA_START flag to the DMA Command register.h](hMost legacy IDE drivers use }(hjZhhhNhNubh)}(h:c:func:`ata_bmdma_start`h]j\)}(hjdh]hata_bmdma_start()}(hjfhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjbubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_startuh1hhhhKhjZubh for the }(hjZhhhNhNubh)}(h:c:func:`bmdma_start`h]j\)}(hjh]h bmdma_start()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz bmdma_startuh1hhhhKhjZubh hook. }(hjZhhhNhNubh)}(h:c:func:`ata_bmdma_start`h]j\)}(hjh]hata_bmdma_start()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_startuh1hhhhKhjZubh? will write the ATA_DMA_START flag to the DMA Command register.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hMany legacy IDE drivers use :c:func:`ata_bmdma_stop` for the :c:func:`bmdma_stop` hook. :c:func:`ata_bmdma_stop` clears the ATA_DMA_START flag in the DMA command register.h](hMany legacy IDE drivers use }(hjhhhNhNubh)}(h:c:func:`ata_bmdma_stop`h]j\)}(hjh]hata_bmdma_stop()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_stopuh1hhhhKhjubh for the }(hjhhhNhNubh)}(h:c:func:`bmdma_stop`h]j\)}(hjh]h bmdma_stop()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz bmdma_stopuh1hhhhKhjubh hook. }(hjhhhNhNubh)}(h:c:func:`ata_bmdma_stop`h]j\)}(hj!h]hata_bmdma_stop()}(hj#hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_stopuh1hhhhKhjubh; clears the ATA_DMA_START flag in the DMA command register.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hZMany legacy IDE drivers use :c:func:`ata_bmdma_status` as the :c:func:`bmdma_status` hook.h](hMany legacy IDE drivers use }(hjHhhhNhNubh)}(h:c:func:`ata_bmdma_status`h]j\)}(hjRh]hata_bmdma_status()}(hjThhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjPubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_statusuh1hhhhKhjHubh as the }(hjHhhhNhNubh)}(h:c:func:`bmdma_status`h]j\)}(hjuh]hbmdma_status()}(hjwhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjsubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz bmdma_statusuh1hhhhKhjHubh hook.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubeh}(h]control-pci-ide-bmdma-engineah ]h"]control pci ide bmdma engineah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hHigh-level taskfile hooksh]hHigh-level taskfile hooks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hoenum ata_completion_errors (*qc_prep) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc);h]hoenum ata_completion_errors (*qc_prep) (struct ata_queued_cmd *qc); int (*qc_issue) (struct ata_queued_cmd *qc);}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hXHigher-level hooks, these two hooks can potentially supersede several of the above taskfile/DMA engine hooks. ``->qc_prep`` is called after the buffers have been DMA-mapped, and is typically used to populate the hardware's DMA scatter-gather table. Some drivers use the standard :c:func:`ata_bmdma_qc_prep` and :c:func:`ata_bmdma_dumb_qc_prep` helper functions, but more advanced drivers roll their own.h](hnHigher-level hooks, these two hooks can potentially supersede several of the above taskfile/DMA engine hooks. }(hjhhhNhNubj\)}(h ``->qc_prep``h]h ->qc_prep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh is called after the buffers have been DMA-mapped, and is typically used to populate the hardware’s DMA scatter-gather table. Some drivers use the standard }(hjhhhNhNubh)}(h:c:func:`ata_bmdma_qc_prep`h]j\)}(hjh]hata_bmdma_qc_prep()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_qc_prepuh1hhhhKhjubh and }(hjhhhNhNubh)}(h :c:func:`ata_bmdma_dumb_qc_prep`h]j\)}(hj h]hata_bmdma_dumb_qc_prep()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_bmdma_dumb_qc_prepuh1hhhhKhjubh< helper functions, but more advanced drivers roll their own.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX ``->qc_issue`` is used to make a command active, once the hardware and S/G tables have been prepared. IDE BMDMA drivers use the helper function :c:func:`ata_sff_qc_issue` for taskfile protocol-based dispatch. More advanced drivers implement their own ``->qc_issue``.h](j\)}(h``->qc_issue``h]h ->qc_issue}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj) ubh is used to make a command active, once the hardware and S/G tables have been prepared. IDE BMDMA drivers use the helper function }(hj) hhhNhNubh)}(h:c:func:`ata_sff_qc_issue`h]j\)}(hjA h]hata_sff_qc_issue()}(hjC hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj? ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_qc_issueuh1hhhhKhj) ubhQ for taskfile protocol-based dispatch. More advanced drivers implement their own }(hj) hhhNhNubj\)}(h``->qc_issue``h]h ->qc_issue}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj) ubh.}(hj) hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h:c:func:`ata_sff_qc_issue` calls ``->sff_tf_load()``, ``->bmdma_setup()``, and ``->bmdma_start()`` as necessary to initiate a transfer.h](h)}(h:c:func:`ata_sff_qc_issue`h]j\)}(hj h]hata_sff_qc_issue()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj~ ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_qc_issueuh1hhhhKhjz ubh calls }(hjz hhhNhNubj\)}(h``->sff_tf_load()``h]h->sff_tf_load()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjz ubh, }(hjz hhhNhNubj\)}(h``->bmdma_setup()``h]h->bmdma_setup()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjz ubh, and }(hjz hhhNhNubj\)}(h``->bmdma_start()``h]h->bmdma_start()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjz ubh% as necessary to initiate a transfer.}(hjz hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]high-level-taskfile-hooksah ]h"]high-level taskfile hooksah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!Exception and probe handling (EH)h]h!Exception and probe handling (EH)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubj)}(hIvoid (*freeze) (struct ata_port *ap); void (*thaw) (struct ata_port *ap);h]hIvoid (*freeze) (struct ata_port *ap); void (*thaw) (struct ata_port *ap);}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(h:c:func:`ata_port_freeze` is called when HSM violations or some other condition disrupts normal operation of the port. A frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset.h](h)}(h:c:func:`ata_port_freeze`h]j\)}(hj h]hata_port_freeze()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_port_freezeuh1hhhhM hj ubh is called when HSM violations or some other condition disrupts normal operation of the port. A frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj hhubh)}(hXThe optional ``->freeze()`` callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen.h](h The optional }(hj1 hhhNhNubj\)}(h``->freeze()``h]h ->freeze()}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1 ubh callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen.}(hj1 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hThe optional ``->thaw()`` callback is called to perform the opposite of ``->freeze()``: prepare the port for normal operation once again. Unmask interrupts, start DMA engine, etc.h](h The optional }(hjQ hhhNhNubj\)}(h ``->thaw()``h]h->thaw()}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQ ubh/ callback is called to perform the opposite of }(hjQ hhhNhNubj\)}(h``->freeze()``h]h ->freeze()}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQ ubh]: prepare the port for normal operation once again. Unmask interrupts, start DMA engine, etc.}(hjQ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(h,void (*error_handler) (struct ata_port *ap);h]h,void (*error_handler) (struct ata_port *ap);}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMhj hhubh)}(h``->error_handler()`` is a driver's hook into probe, hotplug, and recovery and other exceptional conditions. The primary responsibility of an implementation is to call :c:func:`ata_std_error_handler`.h](j\)}(h``->error_handler()``h]h->error_handler()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh is a driver’s hook into probe, hotplug, and recovery and other exceptional conditions. The primary responsibility of an implementation is to call }(hj hhhNhNubh)}(h:c:func:`ata_std_error_handler`h]j\)}(hj h]hata_std_error_handler()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_std_error_handleruh1hhhhMhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubh)}(hX :c:func:`ata_std_error_handler` will perform a standard error handling sequence to resurrect failed devices, detach lost devices and add new devices (if any). This function will call the various reset operations for a port, as needed. These operations are as follows.h](h)}(h:c:func:`ata_std_error_handler`h]j\)}(hj h]hata_std_error_handler()}(hj hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_std_error_handleruh1hhhhM hj ubh will perform a standard error handling sequence to resurrect failed devices, detach lost devices and add new devices (if any). This function will call the various reset operations for a port, as needed. These operations are as follows.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj hhubh bullet_list)}(hhh](h list_item)}(hmThe 'prereset' operation (which may be NULL) is called during an EH reset, before any other action is taken. h]h)}(hlThe 'prereset' operation (which may be NULL) is called during an EH reset, before any other action is taken.h]hpThe ‘prereset’ operation (which may be NULL) is called during an EH reset, before any other action is taken.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM%hj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hThe 'postreset' hook (which may be NULL) is called after the EH reset is performed. Based on existing conditions, severity of the problem, and hardware capabilities, h]h)}(hThe 'postreset' hook (which may be NULL) is called after the EH reset is performed. Based on existing conditions, severity of the problem, and hardware capabilities,h]hThe ‘postreset’ hook (which may be NULL) is called after the EH reset is performed. Based on existing conditions, severity of the problem, and hardware capabilities,}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubj )}(hX3Either the 'softreset' operation or the 'hardreset' operation will be called to perform the low-level EH reset. If both operations are defined, 'hardreset' is preferred and used. If both are not defined, no low-level reset is performed and EH assumes that an ATA class device is connected through the link. h]h)}(hX2Either the 'softreset' operation or the 'hardreset' operation will be called to perform the low-level EH reset. If both operations are defined, 'hardreset' is preferred and used. If both are not defined, no low-level reset is performed and EH assumes that an ATA class device is connected through the link.h]hX>Either the ‘softreset’ operation or the ‘hardreset’ operation will be called to perform the low-level EH reset. If both operations are defined, ‘hardreset’ is preferred and used. If both are not defined, no low-level reset is performed and EH assumes that an ATA class device is connected through the link.}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM,hj4 ubah}(h]h ]h"]h$]h&]uh1j hj hhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1j hhhM%hj hhubj)}(h6void (*post_internal_cmd) (struct ata_queued_cmd *qc);h]h6void (*post_internal_cmd) (struct ata_queued_cmd *qc);}hjT sbah}(h]h ]h"]h$]h&]jjuh1jhhhM4hj hhubh)}(hPerform any hardware-specific actions necessary to finish processing after executing a probe-time or EH-time command via :c:func:`ata_exec_internal`.h](hyPerform any hardware-specific actions necessary to finish processing after executing a probe-time or EH-time command via }(hjb hhhNhNubh)}(h:c:func:`ata_exec_internal`h]j\)}(hjl h]hata_exec_internal()}(hjn hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_exec_internaluh1hhhhM7hjb ubh.}(hjb hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM7hj hhubeh}(h]exception-and-probe-handling-ehah ]h"]!exception and probe handling (eh)ah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hHardware interrupt handlingh]hHardware interrupt handling}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM<ubj)}(hairqreturn_t (*irq_handler)(int, void *, struct pt_regs *); void (*irq_clear) (struct ata_port *);h]hairqreturn_t (*irq_handler)(int, void *, struct pt_regs *); void (*irq_clear) (struct ata_port *);}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhM@hj hhubh)}(h``->irq_handler`` is the interrupt handling routine registered with the system, by libata. ``->irq_clear`` is called during probe just before the interrupt handler is registered, to be sure hardware is quiet.h](j\)}(h``->irq_handler``h]h ->irq_handler}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubhJ is the interrupt handling routine registered with the system, by libata. }(hj hhhNhNubj\)}(h``->irq_clear``h]h ->irq_clear}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubhf is called during probe just before the interrupt handler is registered, to be sure hardware is quiet.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMDhj hhubh)}(hoThe second argument, dev_instance, should be cast to a pointer to :c:type:`struct ata_host_set `.h](hBThe second argument, dev_instance, should be cast to a pointer to }(hj hhhNhNubh)}(h,:c:type:`struct ata_host_set `h]j\)}(hj h]hstruct ata_host_set}(hj hhhNhNubah}(h]h ](jgjhc-typeeh"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypetype refexplicitrefwarnjz ata_host_setuh1hhhhMHhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMHhj hhubh)}(hMost legacy IDE drivers use :c:func:`ata_sff_interrupt` for the irq_handler hook, which scans all ports in the host_set, determines which queued command was active (if any), and calls ata_sff_host_intr(ap,qc).h](hMost legacy IDE drivers use }(hj hhhNhNubh)}(h:c:func:`ata_sff_interrupt`h]j\)}(hj# h]hata_sff_interrupt()}(hj% hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj! ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_interruptuh1hhhhMKhj ubh for the irq_handler hook, which scans all ports in the host_set, determines which queued command was active (if any), and calls ata_sff_host_intr(ap,qc).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMKhj hhubh)}(hMost legacy IDE drivers use :c:func:`ata_sff_irq_clear` for the :c:func:`irq_clear` hook, which simply clears the interrupt and error flags in the DMA status register.h](hMost legacy IDE drivers use }(hjJ hhhNhNubh)}(h:c:func:`ata_sff_irq_clear`h]j\)}(hjT h]hata_sff_irq_clear()}(hjV hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjR ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_sff_irq_clearuh1hhhhMOhjJ ubh for the }(hjJ hhhNhNubh)}(h:c:func:`irq_clear`h]j\)}(hjw h]h irq_clear()}(hjy hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hju ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz irq_clearuh1hhhhMOhjJ ubhT hook, which simply clears the interrupt and error flags in the DMA status register.}(hjJ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMOhj hhubeh}(h]hardware-interrupt-handlingah ]h"]hardware interrupt handlingah$]h&]uh1hhjhhhhhM<ubh)}(hhh](h)}(hSATA phy read/writeh]hSATA phy read/write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMTubj)}(hint (*scr_read) (struct ata_port *ap, unsigned int sc_reg, u32 *val); int (*scr_write) (struct ata_port *ap, unsigned int sc_reg, u32 val);h]hint (*scr_read) (struct ata_port *ap, unsigned int sc_reg, u32 *val); int (*scr_write) (struct ata_port *ap, unsigned int sc_reg, u32 val);}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMXhj hhubh)}(hoRead and write standard SATA phy registers. sc_reg is one of SCR_STATUS, SCR_CONTROL, SCR_ERROR, or SCR_ACTIVE.h]hoRead and write standard SATA phy registers. sc_reg is one of SCR_STATUS, SCR_CONTROL, SCR_ERROR, or SCR_ACTIVE.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM^hj hhubeh}(h]sata-phy-read-writeah ]h"]sata phy read/writeah$]h&]uh1hhjhhhhhMTubh)}(hhh](h)}(hInit and shutdownh]hInit and shutdown}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMbubj)}(hint (*port_start) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); void (*host_stop) (struct ata_host_set *host_set);h]hint (*port_start) (struct ata_port *ap); void (*port_stop) (struct ata_port *ap); void (*host_stop) (struct ata_host_set *host_set);}hj sbah}(h]h ]h"]h$]h&]jjuh1jhhhMfhj hhubh)}(hX7``->port_start()`` is called just after the data structures for each port are initialized. Typically this is used to alloc per-port DMA buffers / tables / rings, enable DMA engines, and similar tasks. Some drivers also use this entry point as a chance to allocate driver-private memory for ``ap->private_data``.h](j\)}(h``->port_start()``h]h->port_start()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubhX is called just after the data structures for each port are initialized. Typically this is used to alloc per-port DMA buffers / tables / rings, enable DMA engines, and similar tasks. Some drivers also use this entry point as a chance to allocate driver-private memory for }(hj hhhNhNubj\)}(h``ap->private_data``h]hap->private_data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMkhj hhubh)}(hMany drivers use :c:func:`ata_port_start` as this hook or call it from their own :c:func:`port_start` hooks. :c:func:`ata_port_start` allocates space for a legacy IDE PRD table and returns.h](hMany drivers use }(hj( hhhNhNubh)}(h:c:func:`ata_port_start`h]j\)}(hj2 h]hata_port_start()}(hj4 hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj0 ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_port_startuh1hhhhMqhj( ubh( as this hook or call it from their own }(hj( hhhNhNubh)}(h:c:func:`port_start`h]j\)}(hjU h]h port_start()}(hjW hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjS ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz port_startuh1hhhhMqhj( ubh hooks. }(hj( hhhNhNubh)}(h:c:func:`ata_port_start`h]j\)}(hjx h]hata_port_start()}(hjz hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjv ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_port_startuh1hhhhMqhj( ubh8 allocates space for a legacy IDE PRD table and returns.}(hj( hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhj hhubh)}(h``->port_stop()`` is called after ``->host_stop()``. Its sole function is to release DMA/memory resources, now that they are no longer actively being used. Many drivers also free driver-private data from port at this time.h](j\)}(h``->port_stop()``h]h ->port_stop()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh is called after }(hj hhhNhNubj\)}(h``->host_stop()``h]h ->host_stop()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh. Its sole function is to release DMA/memory resources, now that they are no longer actively being used. Many drivers also free driver-private data from port at this time.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMuhj hhubh)}(h``->host_stop()`` is called after all ``->port_stop()`` calls have completed. The hook must finalize hardware shutdown, release DMA and other resources, etc. This hook may be specified as NULL, in which case it is not called.h](j\)}(h``->host_stop()``h]h ->host_stop()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh is called after all }(hj hhhNhNubj\)}(h``->port_stop()``h]h ->port_stop()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubh calls have completed. The hook must finalize hardware shutdown, release DMA and other resources, etc. This hook may be specified as NULL, in which case it is not called.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMyhj hhubeh}(h]init-and-shutdownah ]h"]init and shutdownah$]h&]uh1hhjhhhhhMbubeh}(h]struct-ata-port-operationsah ]h"]struct ata_port_operationsah$]h&]uh1hhjBhhhhhK!ubeh}(h]libata-driver-apiah ]h"]libata driver apiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hError handlingh]hError handling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hThis chapter describes how errors are handled under libata. Readers are advised to read SCSI EH (Documentation/scsi/scsi_eh.rst) and ATA exceptions doc first.h]hThis chapter describes how errors are handled under libata. Readers are advised to read SCSI EH (Documentation/scsi/scsi_eh.rst) and ATA exceptions doc first.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hhh](h)}(hOrigins of commandsh]hOrigins of commands}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhMubh)}(hXJIn libata, a command is represented with :c:type:`struct ata_queued_cmd ` or qc. qc's are preallocated during port initialization and repetitively used for command executions. Currently only one qc is allocated per port but yet-to-be-merged NCQ branch allocates one for each tag and maps each qc to NCQ tag 1-to-1.h](h)In libata, a command is represented with }(hjChhhNhNubh)}(h0:c:type:`struct ata_queued_cmd `h]j\)}(hjMh]hstruct ata_queued_cmd}(hjOhhhNhNubah}(h]h ](jgjhc-typeeh"]h$]h&]uh1j[hjKubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypetype refexplicitrefwarnjzata_queued_cmduh1hhhhMhjCubh or qc. qc’s are preallocated during port initialization and repetitively used for command executions. Currently only one qc is allocated per port but yet-to-be-merged NCQ branch allocates one for each tag and maps each qc to NCQ tag 1-to-1.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj2hhubh)}(hX#libata commands can originate from two sources - libata itself and SCSI midlayer. libata internal commands are used for initialization and error handling. All normal blk requests and commands for SCSI emulation are passed as SCSI commands through queuecommand callback of SCSI host template.h]hX#libata commands can originate from two sources - libata itself and SCSI midlayer. libata internal commands are used for initialization and error handling. All normal blk requests and commands for SCSI emulation are passed as SCSI commands through queuecommand callback of SCSI host template.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj2hhubeh}(h]origins-of-commandsah ]h"]origins of commandsah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hHow commands are issuedh]hHow commands are issued}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubhdefinition_list)}(hhh](hdefinition_list_item)}(hXInternal commands Once allocated qc's taskfile is initialized for the command to be executed. qc currently has two mechanisms to notify completion. One is via ``qc->complete_fn()`` callback and the other is completion ``qc->waiting``. ``qc->complete_fn()`` callback is the asynchronous path used by normal SCSI translated commands and ``qc->waiting`` is the synchronous (issuer sleeps in process context) path used by internal commands. Once initialization is complete, host_set lock is acquired and the qc is issued. h](hterm)}(hInternal commandsh]hInternal commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubh definition)}(hhh](h)}(hXOnce allocated qc's taskfile is initialized for the command to be executed. qc currently has two mechanisms to notify completion. One is via ``qc->complete_fn()`` callback and the other is completion ``qc->waiting``. ``qc->complete_fn()`` callback is the asynchronous path used by normal SCSI translated commands and ``qc->waiting`` is the synchronous (issuer sleeps in process context) path used by internal commands.h](hOnce allocated qc’s taskfile is initialized for the command to be executed. qc currently has two mechanisms to notify completion. One is via }(hjhhhNhNubj\)}(h``qc->complete_fn()``h]hqc->complete_fn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh& callback and the other is completion }(hjhhhNhNubj\)}(h``qc->waiting``h]h qc->waiting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh. }(hjhhhNhNubj\)}(h``qc->complete_fn()``h]hqc->complete_fn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubhO callback is the asynchronous path used by normal SCSI translated commands and }(hjhhhNhNubj\)}(h``qc->waiting``h]h qc->waiting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubhV is the synchronous (issuer sleeps in process context) path used by internal commands.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(hPOnce initialization is complete, host_set lock is acquired and the qc is issued.h]hPOnce initialization is complete, host_set lock is acquired and the qc is issued.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hXSCSI commands All libata drivers use :c:func:`ata_scsi_queuecmd` as ``hostt->queuecommand`` callback. scmds can either be simulated or translated. No qc is involved in processing a simulated scmd. The result is computed right away and the scmd is completed. ``qc->complete_fn()`` callback is used for completion notification. ATA commands use :c:func:`ata_scsi_qc_complete` while ATAPI commands use :c:func:`atapi_qc_complete`. Both functions end up calling ``qc->scsidone`` to notify upper layer when the qc is finished. After translation is completed, the qc is issued with :c:func:`ata_qc_issue`. Note that SCSI midlayer invokes hostt->queuecommand while holding host_set lock, so all above occur while holding host_set lock. h](j)}(h SCSI commandsh]h SCSI commands}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj+ubj)}(hhh](h)}(hAll libata drivers use :c:func:`ata_scsi_queuecmd` as ``hostt->queuecommand`` callback. scmds can either be simulated or translated. No qc is involved in processing a simulated scmd. The result is computed right away and the scmd is completed.h](hAll libata drivers use }(hj@hhhNhNubh)}(h:c:func:`ata_scsi_queuecmd`h]j\)}(hjJh]hata_scsi_queuecmd()}(hjLhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjHubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_queuecmduh1hhhhMhj@ubh as }(hj@hhhNhNubj\)}(h``hostt->queuecommand``h]hhostt->queuecommand}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj@ubh callback. scmds can either be simulated or translated. No qc is involved in processing a simulated scmd. The result is computed right away and the scmd is completed.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=ubh)}(hXU``qc->complete_fn()`` callback is used for completion notification. ATA commands use :c:func:`ata_scsi_qc_complete` while ATAPI commands use :c:func:`atapi_qc_complete`. Both functions end up calling ``qc->scsidone`` to notify upper layer when the qc is finished. After translation is completed, the qc is issued with :c:func:`ata_qc_issue`.h](j\)}(h``qc->complete_fn()``h]hqc->complete_fn()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh@ callback is used for completion notification. ATA commands use }(hjhhhNhNubh)}(h:c:func:`ata_scsi_qc_complete`h]j\)}(hjh]hata_scsi_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_qc_completeuh1hhhhMhjubh while ATAPI commands use }(hjhhhNhNubh)}(h:c:func:`atapi_qc_complete`h]j\)}(hjh]hatapi_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzatapi_qc_completeuh1hhhhMhjubh . Both functions end up calling }(hjhhhNhNubj\)}(h``qc->scsidone``h]h qc->scsidone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubhf to notify upper layer when the qc is finished. After translation is completed, the qc is issued with }(hjhhhNhNubh)}(h:c:func:`ata_qc_issue`h]j\)}(hjh]hata_qc_issue()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz ata_qc_issueuh1hhhhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=ubh)}(hNote that SCSI midlayer invokes hostt->queuecommand while holding host_set lock, so all above occur while holding host_set lock.h]hNote that SCSI midlayer invokes hostt->queuecommand while holding host_set lock, so all above occur while holding host_set lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]how-commands-are-issuedah ]h"]how commands are issuedah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hHow commands are processedh]hHow commands are processed}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhMubh)}(hDepending on which protocol and which controller are used, commands are processed differently. For the purpose of discussion, a controller which uses taskfile interface and all standard callbacks is assumed.h]hDepending on which protocol and which controller are used, commands are processed differently. For the purpose of discussion, a controller which uses taskfile interface and all standard callbacks is assumed.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjBhhubh)}(hCurrently 6 ATA command protocols are used. They can be sorted into the following four categories according to how they are processed.h]hCurrently 6 ATA command protocols are used. They can be sorted into the following four categories according to how they are processed.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjBhhubj)}(hhh](j)}(hATA NO DATA or DMA ATA_PROT_NODATA and ATA_PROT_DMA fall into this category. These types of commands don't require any software intervention once issued. Device will raise interrupt on completion. h](j)}(hATA NO DATA or DMAh]hATA NO DATA or DMA}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjrubj)}(hhh]h)}(hATA_PROT_NODATA and ATA_PROT_DMA fall into this category. These types of commands don't require any software intervention once issued. Device will raise interrupt on completion.h]hATA_PROT_NODATA and ATA_PROT_DMA fall into this category. These types of commands don’t require any software intervention once issued. Device will raise interrupt on completion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhhhMhjoubj)}(hATA PIO ATA_PROT_PIO is in this category. libata currently implements PIO with polling. ATA_NIEN bit is set to turn off interrupt and pio_task on ata_wq performs polling and IO. h](j)}(hATA PIOh]hATA PIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hATA_PROT_PIO is in this category. libata currently implements PIO with polling. ATA_NIEN bit is set to turn off interrupt and pio_task on ata_wq performs polling and IO.h]hATA_PROT_PIO is in this category. libata currently implements PIO with polling. ATA_NIEN bit is set to turn off interrupt and pio_task on ata_wq performs polling and IO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjohhubj)}(hXATAPI NODATA or DMA ATA_PROT_ATAPI_NODATA and ATA_PROT_ATAPI_DMA are in this category. packet_task is used to poll BSY bit after issuing PACKET command. Once BSY is turned off by the device, packet_task transfers CDB and hands off processing to interrupt handler. h](j)}(hATAPI NODATA or DMAh]hATAPI NODATA or DMA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hATA_PROT_ATAPI_NODATA and ATA_PROT_ATAPI_DMA are in this category. packet_task is used to poll BSY bit after issuing PACKET command. Once BSY is turned off by the device, packet_task transfers CDB and hands off processing to interrupt handler.h]hATA_PROT_ATAPI_NODATA and ATA_PROT_ATAPI_DMA are in this category. packet_task is used to poll BSY bit after issuing PACKET command. Once BSY is turned off by the device, packet_task transfers CDB and hands off processing to interrupt handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjohhubj)}(hATAPI PIO ATA_PROT_ATAPI is in this category. ATA_NIEN bit is set and, as in ATAPI NODATA or DMA, packet_task submits cdb. However, after submitting cdb, further processing (data transfer) is handed off to pio_task. h](j)}(h ATAPI PIOh]h ATAPI PIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hATA_PROT_ATAPI is in this category. ATA_NIEN bit is set and, as in ATAPI NODATA or DMA, packet_task submits cdb. However, after submitting cdb, further processing (data transfer) is handed off to pio_task.h]hATA_PROT_ATAPI is in this category. ATA_NIEN bit is set and, as in ATAPI NODATA or DMA, packet_task submits cdb. However, after submitting cdb, further processing (data transfer) is handed off to pio_task.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjohhubeh}(h]h ]h"]h$]h&]uh1jhjBhhhhhNubeh}(h]how-commands-are-processedah ]h"]how commands are processedah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hHow commands are completedh]hHow commands are completed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhMubh)}(hX7Once issued, all qc's are either completed with :c:func:`ata_qc_complete` or time out. For commands which are handled by interrupts, :c:func:`ata_host_intr` invokes :c:func:`ata_qc_complete`, and, for PIO tasks, pio_task invokes :c:func:`ata_qc_complete`. In error cases, packet_task may also complete commands.h](h2Once issued, all qc’s are either completed with }(hjMhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjWh]hata_qc_complete()}(hjYhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjUubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjMubh< or time out. For commands which are handled by interrupts, }(hjMhhhNhNubh)}(h:c:func:`ata_host_intr`h]j\)}(hjzh]hata_host_intr()}(hj|hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjxubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz ata_host_intruh1hhhhMhjMubh invokes }(hjMhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjMubh', and, for PIO tasks, pio_task invokes }(hjMhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjMubh9. In error cases, packet_task may also complete commands.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubh)}(h-:c:func:`ata_qc_complete` does the following.h](h)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjubh does the following.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubhenumerated_list)}(hhh](j )}(hDMA memory is unmapped. h]h)}(hDMA memory is unmapped.h]hDMA memory is unmapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h-ATA_QCFLAG_ACTIVE is cleared from qc->flags. h]h)}(h,ATA_QCFLAG_ACTIVE is cleared from qc->flags.h]h,ATA_QCFLAG_ACTIVE is cleared from qc->flags.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj1ubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h:c:expr:`qc->complete_fn` callback is invoked. If the return value of the callback is not zero. Completion is short circuited and :c:func:`ata_qc_complete` returns. h]h)}(h:c:expr:`qc->complete_fn` callback is invoked. If the return value of the callback is not zero. Completion is short circuited and :c:func:`ata_qc_complete` returns.h](h desc_inline)}(hqc->complete_fnh](h)}(hhh]h desc_sig_name)}(hqch]hqc}(hj\hhhNhNubah}(h]h ]nah"]h$]h&]uh1jZhjWubah}(h]h ]h"]h$]h&] refdomainjhreftype identifier reftargetj^modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]sbuh1hhjSubhdesc_sig_operator)}(h->h]h->}(hjhhhNhNubah}(h]h ]oah"]h$]h&]uh1jhjSubj[)}(h complete_fnh]h complete_fn}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjSubeh}(h]h ](c-exprsig sig-inlinejheh"]h$]h&]uh1jQhjMubhi callback is invoked. If the return value of the callback is not zero. Completion is short circuited and }(hjMhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjMubh returns.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjIubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hX:c:func:`__ata_qc_complete` is called, which does 1. ``qc->flags`` is cleared to zero. 2. ``ap->active_tag`` and ``qc->tag`` are poisoned. 3. ``qc->waiting`` is cleared & completed (in that order). 4. qc is deallocated by clearing appropriate bit in ``ap->qactive``. h](h)}(h1:c:func:`__ata_qc_complete` is called, which doesh](h)}(h:c:func:`__ata_qc_complete`h]j\)}(hjh]h__ata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz__ata_qc_completeuh1hhhhMhjubh is called, which does}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubj)}(hhh](j )}(h"``qc->flags`` is cleared to zero. h]h)}(h!``qc->flags`` is cleared to zero.h](j\)}(h ``qc->flags``h]h qc->flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh is cleared to zero.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(h1``ap->active_tag`` and ``qc->tag`` are poisoned. h]h)}(h0``ap->active_tag`` and ``qc->tag`` are poisoned.h](j\)}(h``ap->active_tag``h]hap->active_tag}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj8ubh and }(hj8hhhNhNubj\)}(h ``qc->tag``h]hqc->tag}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj8ubh are poisoned.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj4ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(h8``qc->waiting`` is cleared & completed (in that order). h]h)}(h7``qc->waiting`` is cleared & completed (in that order).h](j\)}(h``qc->waiting``h]h qc->waiting}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjpubh( is cleared & completed (in that order).}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjlubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hBqc is deallocated by clearing appropriate bit in ``ap->qactive``. h]h)}(hAqc is deallocated by clearing appropriate bit in ``ap->qactive``.h](h1qc is deallocated by clearing appropriate bit in }(hjhhhNhNubj\)}(h``ap->qactive``h]h ap->qactive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjhhhNhNubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj<hhhhhMubh)}(hSo, it basically notifies upper layer and deallocates qc. One exception is short-circuit path in #3 which is used by :c:func:`atapi_qc_complete`.h](huSo, it basically notifies upper layer and deallocates qc. One exception is short-circuit path in #3 which is used by }(hjhhhNhNubh)}(h:c:func:`atapi_qc_complete`h]j\)}(hjh]hatapi_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzatapi_qc_completeuh1hhhhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubh)}(hFor all non-ATAPI commands, whether it fails or not, almost the same code path is taken and very little error handling takes place. A qc is completed with success status if it succeeded, with failed status otherwise.h]hFor all non-ATAPI commands, whether it fails or not, almost the same code path is taken and very little error handling takes place. A qc is completed with success status if it succeeded, with failed status otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubh)}(hXHowever, failed ATAPI commands require more handling as REQUEST SENSE is needed to acquire sense data. If an ATAPI command fails, :c:func:`ata_qc_complete` is invoked with error status, which in turn invokes :c:func:`atapi_qc_complete` via ``qc->complete_fn()`` callback.h](hHowever, failed ATAPI commands require more handling as REQUEST SENSE is needed to acquire sense data. If an ATAPI command fails, }(hjhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjubh5 is invoked with error status, which in turn invokes }(hjhhhNhNubh)}(h:c:func:`atapi_qc_complete`h]j\)}(hj?h]hatapi_qc_complete()}(hjAhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj=ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzatapi_qc_completeuh1hhhhMhjubh via }(hjhhhNhNubj\)}(h``qc->complete_fn()``h]hqc->complete_fn()}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh callback.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubh)}(hXThis makes :c:func:`atapi_qc_complete` set ``scmd->result`` to SAM_STAT_CHECK_CONDITION, complete the scmd and return 1. As the sense data is empty but ``scmd->result`` is CHECK CONDITION, SCSI midlayer will invoke EH for the scmd, and returning 1 makes :c:func:`ata_qc_complete` to return without deallocating the qc. This leads us to :c:func:`ata_scsi_error` with partially completed qc.h](h This makes }(hjxhhhNhNubh)}(h:c:func:`atapi_qc_complete`h]j\)}(hjh]hatapi_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzatapi_qc_completeuh1hhhhMhjxubh set }(hjxhhhNhNubj\)}(h``scmd->result``h]h scmd->result}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxubh] to SAM_STAT_CHECK_CONDITION, complete the scmd and return 1. As the sense data is empty but }(hjxhhhNhNubj\)}(h``scmd->result``h]h scmd->result}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxubhV is CHECK CONDITION, SCSI midlayer will invoke EH for the scmd, and returning 1 makes }(hjxhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjxubh9 to return without deallocating the qc. This leads us to }(hjxhhhNhNubh)}(h:c:func:`ata_scsi_error`h]j\)}(hjh]hata_scsi_error()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_erroruh1hhhhMhjxubh with partially completed qc.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj<hhubeh}(h]how-commands-are-completedah ]h"]how commands are completedah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h:c:func:`ata_scsi_error`h]h)}(hj h]j\)}(hj h]hata_scsi_error()}(hj%hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj"ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_erroruh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hX:c:func:`ata_scsi_error` is the current ``transportt->eh_strategy_handler()`` for libata. As discussed above, this will be entered in two cases - timeout and ATAPI error completion. This function will check if a qc is active and has not failed yet. Such a qc will be marked with AC_ERR_TIMEOUT such that EH will know to handle it later. Then it calls low level libata driver's :c:func:`error_handler` callback.h](h)}(h:c:func:`ata_scsi_error`h]j\)}(hjLh]hata_scsi_error()}(hjNhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjJubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_erroruh1hhhhMhjFubh is the current }(hjFhhhNhNubj\)}(h%``transportt->eh_strategy_handler()``h]h!transportt->eh_strategy_handler()}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFubhX. for libata. As discussed above, this will be entered in two cases - timeout and ATAPI error completion. This function will check if a qc is active and has not failed yet. Such a qc will be marked with AC_ERR_TIMEOUT such that EH will know to handle it later. Then it calls low level libata driver’s }(hjFhhhNhNubh)}(h:c:func:`error_handler`h]j\)}(hjh]herror_handler()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz error_handleruh1hhhhMhjFubh callback.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXWhen the :c:func:`error_handler` callback is invoked it stops BMDMA and completes the qc. Note that as we're currently in EH, we cannot call scsi_done. As described in SCSI EH doc, a recovered scmd should be either retried with :c:func:`scsi_queue_insert` or finished with :c:func:`scsi_finish_command`. Here, we override ``qc->scsidone`` with :c:func:`scsi_finish_command` and calls :c:func:`ata_qc_complete`.h](h When the }(hjhhhNhNubh)}(h:c:func:`error_handler`h]j\)}(hjh]herror_handler()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz error_handleruh1hhhhMhjubh callback is invoked it stops BMDMA and completes the qc. Note that as we’re currently in EH, we cannot call scsi_done. As described in SCSI EH doc, a recovered scmd should be either retried with }(hjhhhNhNubh)}(h:c:func:`scsi_queue_insert`h]j\)}(hjh]hscsi_queue_insert()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzscsi_queue_insertuh1hhhhMhjubh or finished with }(hjhhhNhNubh)}(h:c:func:`scsi_finish_command`h]j\)}(hjh]hscsi_finish_command()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzscsi_finish_commanduh1hhhhMhjubh. Here, we override }(hjhhhNhNubj\)}(h``qc->scsidone``h]h qc->scsidone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh with }(hjhhhNhNubh)}(h:c:func:`scsi_finish_command`h]j\)}(hj-h]hscsi_finish_command()}(hj/hhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hj+ubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzscsi_finish_commanduh1hhhhMhjubh and calls }(hjhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjPh]hata_qc_complete()}(hjRhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjNubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hIf EH is invoked due to a failed ATAPI qc, the qc here is completed but not deallocated. The purpose of this half-completion is to use the qc as place holder to make EH code reach this place. This is a bit hackish, but it works.h]hIf EH is invoked due to a failed ATAPI qc, the qc here is completed but not deallocated. The purpose of this half-completion is to use the qc as place holder to make EH code reach this place. This is a bit hackish, but it works.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXOnce control reaches here, the qc is deallocated by invoking :c:func:`__ata_qc_complete` explicitly. Then, internal qc for REQUEST SENSE is issued. Once sense data is acquired, scmd is finished by directly invoking :c:func:`scsi_finish_command` on the scmd. Note that as we already have completed and deallocated the qc which was associated with the scmd, we don't need to/cannot call :c:func:`ata_qc_complete` again.h](h=Once control reaches here, the qc is deallocated by invoking }(hjhhhNhNubh)}(h:c:func:`__ata_qc_complete`h]j\)}(hjh]h__ata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjz__ata_qc_completeuh1hhhhMhjubh explicitly. Then, internal qc for REQUEST SENSE is issued. Once sense data is acquired, scmd is finished by directly invoking }(hjhhhNhNubh)}(h:c:func:`scsi_finish_command`h]j\)}(hjh]hscsi_finish_command()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzscsi_finish_commanduh1hhhhMhjubh on the scmd. Note that as we already have completed and deallocated the qc which was associated with the scmd, we don’t need to/cannot call }(hjhhhNhNubh)}(h:c:func:`ata_qc_complete`h]j\)}(hjh]hata_qc_complete()}(hjhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_qc_completeuh1hhhhMhjubh again.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]ata-scsi-errorah ]h"]ata_scsi_error()ah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(hProblems with the current EHh]hProblems with the current EH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM"ubj )}(hhh](j )}(hX>Error representation is too crude. Currently any and all error conditions are represented with ATA STATUS and ERROR registers. Errors which aren't ATA device errors are treated as ATA device errors by setting ATA_ERR bit. Better error descriptor which can properly represent ATA and other errors/exceptions is needed. h]h)}(hX=Error representation is too crude. Currently any and all error conditions are represented with ATA STATUS and ERROR registers. Errors which aren't ATA device errors are treated as ATA device errors by setting ATA_ERR bit. Better error descriptor which can properly represent ATA and other errors/exceptions is needed.h]hX?Error representation is too crude. Currently any and all error conditions are represented with ATA STATUS and ERROR registers. Errors which aren’t ATA device errors are treated as ATA device errors by setting ATA_ERR bit. Better error descriptor which can properly represent ATA and other errors/exceptions is needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hyWhen handling timeouts, no action is taken to make device forget about the timed out command and ready for new commands. h]h)}(hxWhen handling timeouts, no action is taken to make device forget about the timed out command and ready for new commands.h]hxWhen handling timeouts, no action is taken to make device forget about the timed out command and ready for new commands.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM*hj0ubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hEH handling via :c:func:`ata_scsi_error` is not properly protected from usual command processing. On EH entrance, the device is not in quiescent state. Timed out commands may succeed or fail any time. pio_task and atapi_task may still be running. h]h)}(hEH handling via :c:func:`ata_scsi_error` is not properly protected from usual command processing. On EH entrance, the device is not in quiescent state. Timed out commands may succeed or fail any time. pio_task and atapi_task may still be running.h](hEH handling via }(hjLhhhNhNubh)}(h:c:func:`ata_scsi_error`h]j\)}(hjVh]hata_scsi_error()}(hjXhhhNhNubah}(h]h ](jgjhc-funceh"]h$]h&]uh1j[hjTubah}(h]h ]h"]h$]h&]refdocjt refdomainjhreftypefunc refexplicitrefwarnjzata_scsi_erroruh1hhhhM-hjLubh is not properly protected from usual command processing. On EH entrance, the device is not in quiescent state. Timed out commands may succeed or fail any time. pio_task and atapi_task may still be running.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hjHubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hToo weak error recovery. Devices / controllers causing HSM mismatch errors and other errors quite often require reset to return to known state. Also, advanced error handling is necessary to support features like NCQ and hotplug. h]h)}(hToo weak error recovery. Devices / controllers causing HSM mismatch errors and other errors quite often require reset to return to known state. Also, advanced error handling is necessary to support features like NCQ and hotplug.h]hToo weak error recovery. Devices / controllers causing HSM mismatch errors and other errors quite often require reset to return to known state. Also, advanced error handling is necessary to support features like NCQ and hotplug.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM2hjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hXATA errors are directly handled in the interrupt handler and PIO errors in pio_task. This is problematic for advanced error handling for the following reasons. First, advanced error handling often requires context and internal qc execution. Second, even a simple failure (say, CRC error) needs information gathering and could trigger complex error handling (say, resetting & reconfiguring). Having multiple code paths to gather information, enter EH and trigger actions makes life painful. Third, scattered EH code makes implementing low level drivers difficult. Low level drivers override libata callbacks. If EH is scattered over several places, each affected callbacks should perform its part of error handling. This can be error prone and painful. h](h)}(hATA errors are directly handled in the interrupt handler and PIO errors in pio_task. This is problematic for advanced error handling for the following reasons.h]hATA errors are directly handled in the interrupt handler and PIO errors in pio_task. This is problematic for advanced error handling for the following reasons.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM7hjubh)}(hPFirst, advanced error handling often requires context and internal qc execution.h]hPFirst, advanced error handling often requires context and internal qc execution.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjubh)}(hSecond, even a simple failure (say, CRC error) needs information gathering and could trigger complex error handling (say, resetting & reconfiguring). Having multiple code paths to gather information, enter EH and trigger actions makes life painful.h]hSecond, even a simple failure (say, CRC error) needs information gathering and could trigger complex error handling (say, resetting & reconfiguring). Having multiple code paths to gather information, enter EH and trigger actions makes life painful.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjubh)}(hXThird, scattered EH code makes implementing low level drivers difficult. Low level drivers override libata callbacks. If EH is scattered over several places, each affected callbacks should perform its part of error handling. This can be error prone and painful.h]hXThird, scattered EH code makes implementing low level drivers difficult. Low level drivers override libata callbacks. If EH is scattered over several places, each affected callbacks should perform its part of error handling. This can be error prone and painful.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMChjubeh}(h]h ]h"]h$]h&]uh1j hjhhhhhNubeh}(h]h ]h"]h$]h&]jR -uh1j hhhM$hjhhubeh}(h]problems-with-the-current-ehah ]h"]problems with the current ehah$]h&]uh1hhjhhhhhM"ubeh}(h]error-handlingah ]h"]error handlingah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hlibata Libraryh]hlibata Library}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMIubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleata_link_next (C function)c.ata_link_nexthNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hjstruct ata_link * ata_link_next (struct ata_link *link, struct ata_port *ap, enum ata_link_iter_mode mode)h]hdesc_signature_line)}(hhstruct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap, enum ata_link_iter_mode mode)h](hdesc_sig_keyword)}(hstructh]hstruct}(hj)hhhNhNubah}(h]h ]kah"]h$]h&]uh1j'hj#hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKubhdesc_sig_space)}(h h]h }(hj;hhhNhNubah}(h]h ]wah"]h$]h&]uh1j9hj#hhhj8hKubh)}(hhh]j[)}(hata_linkh]hata_link}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjOmodnameN classnameNjwjz)}j}]jx ASTIdentifier)}js ata_link_nextsbc.ata_link_nextasbuh1hhj#hhhj8hKubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#hhhj8hKubhdesc_sig_punctuation)}(hjS h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1j~hj#hhhj8hKubh desc_name)}(h ata_link_nexth]j[)}(hjmh]h ata_link_next}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](sig-namedescnameeh"]h$]h&]jjuh1jhj#hhhj8hKubhdesc_parameterlist)}(hJ(struct ata_link *link, struct ata_port *ap, enum ata_link_iter_mode mode)h](hdesc_parameter)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jkc.ata_link_nextasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]j[)}(hata_porth]hata_port}(hjChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jkc.ata_link_nextasbuh1hhj!ubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjS h]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubj[)}(haph]hap}(hj|hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum ata_link_iter_mode modeh](j()}(henumh]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_link_iter_modeh]hata_link_iter_mode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jkc.ata_link_nextasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj8hKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j!sphinx_line_type declaratorhjhhhj8hKubah}(h]jah ](j sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj8hKhjhhubh desc_content)}(hhh]h)}(hlink iteration helperh]hlink iteration helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hKubeh}(h]h ](jhfunctioneh"]h$]h&]domainjhobjtypej+desctypej+noindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX8**Parameters** ``struct ata_link *link`` the previous link, NULL to start ``struct ata_port *ap`` ATA port containing links to iterate ``enum ata_link_iter_mode mode`` iteration mode, one of ATA_LITER_* **Description** LOCKING: Host lock or EH context. **Return** Pointer to the next link.h](h)}(h**Parameters**h]j )}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhj7ubj)}(hhh](j)}(h;``struct ata_link *link`` the previous link, NULL to start h](j)}(h``struct ata_link *link``h]j\)}(hj\h]hstruct ata_link *link}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjZubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjVubj)}(hhh]h)}(h the previous link, NULL to starth]h the previous link, NULL to start}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjSubj)}(h=``struct ata_port *ap`` ATA port containing links to iterate h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubj)}(hhh]h)}(h$ATA port containing links to iterateh]h$ATA port containing links to iterate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjSubj)}(hD``enum ata_link_iter_mode mode`` iteration mode, one of ATA_LITER_* h](j)}(h ``enum ata_link_iter_mode mode``h]j\)}(hjh]henum ata_link_iter_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubj)}(hhh]h)}(h"iteration mode, one of ATA_LITER_*h]h"iteration mode, one of ATA_LITER_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhj7ubj)}(h"LOCKING: Host lock or EH context. h]h)}(h!LOCKING: Host lock or EH context.h]h!LOCKING: Host lock or EH context.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubah}(h]h ]h"]h$]h&]uh1jhj1hKhj7ubh)}(h **Return**h]j )}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhj7ubh)}(hPointer to the next link.h]hPointer to the next link.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_next (C function)c.ata_dev_nexthNtauh1jhjhhhNhNubj)}(hhh](j)}(hmstruct ata_device * ata_dev_next (struct ata_device *dev, struct ata_link *link, enum ata_dev_iter_mode mode)h]j")}(hkstruct ata_device *ata_dev_next(struct ata_device *dev, struct ata_link *link, enum ata_dev_iter_mode mode)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{hhhjhKubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}js ata_dev_nextsbc.ata_dev_nextasbuh1hhj{hhhjhKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{hhhjhKubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{hhhjhKubj)}(h ata_dev_nexth]j[)}(hjh]h ata_dev_next}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhjhKubj)}(hL(struct ata_device *dev, struct ata_link *link, enum ata_dev_iter_mode mode)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_dev_nextasbuh1hhjubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjPhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjihhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjeubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_dev_nextasbuh1hhjeubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjeubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjeubj[)}(hlinkh]hlink}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum ata_dev_iter_mode modeh](j()}(hjh]henum}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_dev_iter_modeh]hata_dev_iter_mode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_dev_nextasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hmodeh]hmode}(hj#hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjwhhhjhKubah}(h]jrah ](jjeh"]h$]h&]j j )j huh1jhjhKhjthhubj)}(hhh]h)}(hdevice iteration helperh]hdevice iteration helper}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jej1jej2j3j4uh1jhhhjhNhNubj6)}(hX@**Parameters** ``struct ata_device *dev`` the previous device, NULL to start ``struct ata_link *link`` ATA link containing devices to iterate ``enum ata_dev_iter_mode mode`` iteration mode, one of ATA_DITER_* **Description** LOCKING: Host lock or EH context. **Return** Pointer to the next device.h](h)}(h**Parameters**h]j )}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjmubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjiubj)}(hhh](j)}(h>``struct ata_device *dev`` the previous device, NULL to start h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubj)}(hhh]h)}(h"the previous device, NULL to starth]h"the previous device, NULL to start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hA``struct ata_link *link`` ATA link containing devices to iterate h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubj)}(hhh]h)}(h&ATA link containing devices to iterateh]h&ATA link containing devices to iterate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hC``enum ata_dev_iter_mode mode`` iteration mode, one of ATA_DITER_* h](j)}(h``enum ata_dev_iter_mode mode``h]j\)}(hjh]henum ata_dev_iter_mode mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjubj)}(hhh]h)}(h"iteration mode, one of ATA_DITER_*h]h"iteration mode, one of ATA_DITER_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j )}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjiubj)}(h"LOCKING: Host lock or EH context. h]h)}(h!LOCKING: Host lock or EH context.h]h!LOCKING: Host lock or EH context.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjQubah}(h]h ]h"]h$]h&]uh1jhjchKhjiubh)}(h **Return**h]j )}(hjlh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjiubh)}(hPointer to the next device.h]hPointer to the next device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jatapi_cmd_type (C function)c.atapi_cmd_typehNtauh1jhjhhhNhNubj)}(hhh](j)}(hint atapi_cmd_type (u8 opcode)h]j")}(hint atapi_cmd_type(u8 opcode)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hatapi_cmd_typeh]j[)}(hatapi_cmd_typeh]hatapi_cmd_type}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h (u8 opcode)h]j)}(h u8 opcodeh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.atapi_cmd_typeasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hopcodeh]hopcode}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h-Determine ATAPI command type from SCSI opcodeh]h-Determine ATAPI command type from SCSI opcode}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jdj1jdj2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``u8 opcode`` SCSI opcode **Description** Determine ATAPI command type from **opcode**. LOCKING: None. **Return** ATAPI_{READ|WRITE|READ_CD|PASS_THRU|MISC}h](h)}(h**Parameters**h]j )}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j hjlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjhubj)}(hhh]j)}(h``u8 opcode`` SCSI opcode h](j)}(h ``u8 opcode``h]j\)}(hjh]h u8 opcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h SCSI opcodeh]h SCSI opcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjhubj)}(h>Determine ATAPI command type from **opcode**. LOCKING: None. h](h)}(h-Determine ATAPI command type from **opcode**.h](h"Determine ATAPI command type from }(hjhhhNhNubj )}(h **opcode**h]hopcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjhubh)}(h **Return**h]j )}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM#hjhubh)}(h)ATAPI_{READ|WRITE|READ_CD|PASS_THRU|MISC}h]h)ATAPI_{READ|WRITE|READ_CD|PASS_THRU|MISC}}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM$hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_pack_xfermask (C function)c.ata_pack_xfermaskhNtauh1jhjhhhNhNubj)}(hhh](j)}(hgunsigned int ata_pack_xfermask (unsigned int pio_mask, unsigned int mwdma_mask, unsigned int udma_mask)h]j")}(hfunsigned int ata_pack_xfermask(unsigned int pio_mask, unsigned int mwdma_mask, unsigned int udma_mask)h](j)}(hunsignedh]hunsigned}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMZubj:)}(h h]h }(hjn hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ hhhjm hMZubj)}(hinth]hint}(hj| hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ hhhjm hMZubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ hhhjm hMZubj)}(hata_pack_xfermaskh]j[)}(hata_pack_xfermaskh]hata_pack_xfermask}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[ hhhjm hMZubj)}(hH(unsigned int pio_mask, unsigned int mwdma_mask, unsigned int udma_mask)h](j)}(hunsigned int pio_maskh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj[)}(hpio_maskh]hpio_mask}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int mwdma_maskh](j)}(hunsignedh]hunsigned}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hinth]hint}(hj%!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj:)}(h h]h }(hj3!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj[)}(h mwdma_maskh]h mwdma_mask}(hjA!hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int udma_maskh](j)}(hunsignedh]hunsigned}(hjZ!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV!ubj:)}(h h]h }(hjh!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV!ubj)}(hinth]hint}(hjv!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV!ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV!ubj[)}(h udma_maskh]h udma_mask}(hj!hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjV!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj[ hhhjm hMZubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjW hhhjm hMZubah}(h]jR ah ](jjeh"]h$]h&]j j )j huh1jhjm hMZhjT hhubj)}(hhh]h)}(h-Pack pio, mwdma and udma masks into xfer_maskh]h-Pack pio, mwdma and udma masks into xfer_mask}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMZhj!hhubah}(h]h ]h"]h$]h&]uh1jhjT hhhjm hMZubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j!j1j!j2j3j4uh1jhhhjhNhNubj6)}(hX5**Parameters** ``unsigned int pio_mask`` pio_mask ``unsigned int mwdma_mask`` mwdma_mask ``unsigned int udma_mask`` udma_mask **Description** Pack **pio_mask**, **mwdma_mask** and **udma_mask** into a single unsigned int xfer_mask. LOCKING: None. **Return** Packed xfer_mask.h](h)}(h**Parameters**h]j )}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM^hj!ubj)}(hhh](j)}(h#``unsigned int pio_mask`` pio_mask h](j)}(h``unsigned int pio_mask``h]j\)}(hj!h]hunsigned int pio_mask}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj!ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM[hj!ubj)}(hhh]h)}(hpio_maskh]hpio_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM[hj"ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj"hM[hj!ubj)}(h'``unsigned int mwdma_mask`` mwdma_mask h](j)}(h``unsigned int mwdma_mask``h]j\)}(hj6"h]hunsigned int mwdma_mask}(hj8"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4"ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM\hj0"ubj)}(hhh]h)}(h mwdma_maskh]h mwdma_mask}(hjO"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK"hM\hjL"ubah}(h]h ]h"]h$]h&]uh1jhj0"ubeh}(h]h ]h"]h$]h&]uh1jhjK"hM\hj!ubj)}(h%``unsigned int udma_mask`` udma_mask h](j)}(h``unsigned int udma_mask``h]j\)}(hjo"h]hunsigned int udma_mask}(hjq"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjm"ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM]hji"ubj)}(hhh]h)}(h udma_maskh]h udma_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM]hj"ubah}(h]h ]h"]h$]h&]uh1jhji"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM]hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j )}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM_hj!ubj)}(hjPack **pio_mask**, **mwdma_mask** and **udma_mask** into a single unsigned int xfer_mask. LOCKING: None. h](h)}(hYPack **pio_mask**, **mwdma_mask** and **udma_mask** into a single unsigned int xfer_mask.h](hPack }(hj"hhhNhNubj )}(h **pio_mask**h]hpio_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubh, }(hj"hhhNhNubj )}(h**mwdma_mask**h]h mwdma_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubh and }(hj"hhhNhNubj )}(h **udma_mask**h]h udma_mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj"ubh& into a single unsigned int xfer_mask.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM^hj"ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMahj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hM^hj!ubh)}(h **Return**h]j )}(hj #h]hReturn}(hj"#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMdhj!ubh)}(hPacked xfer_mask.h]hPacked xfer_mask.}(hj6#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMehj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_xfer_mask2mode (C function)c.ata_xfer_mask2modehNtauh1jhjhhhNhNubj)}(hhh](j)}(h.u8 ata_xfer_mask2mode (unsigned int xfer_mask)h]j")}(h-u8 ata_xfer_mask2mode(unsigned int xfer_mask)h](h)}(hhh]j[)}(hu8h]hu8}(hjh#hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhje#ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjj#modnameN classnameNjwjz)}j}]jj)}jsata_xfer_mask2modesbc.ata_xfer_mask2modeasbuh1hhja#hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hja#hhhj#hMubj)}(hata_xfer_mask2modeh]j[)}(hj#h]hata_xfer_mask2mode}(hj#hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jhja#hhhj#hMubj)}(h(unsigned int xfer_mask)h]j)}(hunsigned int xfer_maskh](j)}(hunsignedh]hunsigned}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj[)}(h xfer_maskh]h xfer_mask}(hj#hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubah}(h]h ]h"]h$]h&]jjuh1jhja#hhhj#hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj]#hhhj#hMubah}(h]jX#ah ](jjeh"]h$]h&]j j )j huh1jhj#hMhjZ#hhubj)}(hhh]h)}(h,Find matching XFER_* for the given xfer_maskh]h,Find matching XFER_* for the given xfer_mask}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jhjZ#hhhj#hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j1$j1j1$j2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``unsigned int xfer_mask`` xfer_mask of interest **Description** Return matching XFER_* value for **xfer_mask**. Only the highest bit of **xfer_mask** is considered. LOCKING: None. **Return** Matching XFER_* value, 0xff if no match found.h](h)}(h**Parameters**h]j )}(hj;$h]h Parameters}(hj=$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9$ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj5$ubj)}(hhh]j)}(h1``unsigned int xfer_mask`` xfer_mask of interest h](j)}(h``unsigned int xfer_mask``h]j\)}(hjZ$h]hunsigned int xfer_mask}(hj\$hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjX$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjT$ubj)}(hhh]h)}(hxfer_mask of interesth]hxfer_mask of interest}(hjs$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo$hMhjp$ubah}(h]h ]h"]h$]h&]uh1jhjT$ubeh}(h]h ]h"]h$]h&]uh1jhjo$hMhjQ$ubah}(h]h ]h"]h$]h&]uh1jhj5$ubh)}(h**Description**h]j )}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj5$ubj)}(hvReturn matching XFER_* value for **xfer_mask**. Only the highest bit of **xfer_mask** is considered. LOCKING: None. h](h)}(heReturn matching XFER_* value for **xfer_mask**. Only the highest bit of **xfer_mask** is considered.h](h!Return matching XFER_* value for }(hj$hhhNhNubj )}(h **xfer_mask**h]h xfer_mask}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubh. Only the highest bit of }(hj$hhhNhNubj )}(h **xfer_mask**h]h xfer_mask}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubh is considered.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj5$ubh)}(h **Return**h]j )}(hj$h]hReturn}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj5$ubh)}(h.Matching XFER_* value, 0xff if no match found.h]h.Matching XFER_* value, 0xff if no match found.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj5$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_xfer_mode2mask (C function)c.ata_xfer_mode2maskhNtauh1jhjhhhNhNubj)}(hhh](j)}(h.unsigned int ata_xfer_mode2mask (u8 xfer_mode)h]j")}(h-unsigned int ata_xfer_mode2mask(u8 xfer_mode)h](j)}(hunsignedh]hunsigned}(hj>%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:%hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjM%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:%hhhjL%hMubj)}(hinth]hint}(hj[%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:%hhhjL%hMubj:)}(h h]h }(hji%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:%hhhjL%hMubj)}(hata_xfer_mode2maskh]j[)}(hata_xfer_mode2maskh]hata_xfer_mode2mask}(hj{%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjw%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:%hhhjL%hMubj)}(h(u8 xfer_mode)h]j)}(h u8 xfer_modeh](h)}(hhh]j[)}(hu8h]hu8}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj%modnameN classnameNjwjz)}j}]jj)}jsj}%sbc.ata_xfer_mode2maskasbuh1hhj%ubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj[)}(h xfer_modeh]h xfer_mode}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubah}(h]h ]h"]h$]h&]jjuh1jhj:%hhhjL%hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj6%hhhjL%hMubah}(h]j1%ah ](jjeh"]h$]h&]j j )j huh1jhjL%hMhj3%hhubj)}(hhh]h)}(h"Find matching xfer_mask for XFER_*h]h"Find matching xfer_mask for XFER_*}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj3%hhhjL%hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j &j1j &j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``u8 xfer_mode`` XFER_* of interest **Description** Return matching xfer_mask for **xfer_mode**. LOCKING: None. **Return** Matching xfer_mask, 0 if no match found.h](h)}(h**Parameters**h]j )}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubj)}(hhh]j)}(h$``u8 xfer_mode`` XFER_* of interest h](j)}(h``u8 xfer_mode``h]j\)}(hj3&h]h u8 xfer_mode}(hj5&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1&ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj-&ubj)}(hhh]h)}(hXFER_* of interesth]hXFER_* of interest}(hjL&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH&hMhjI&ubah}(h]h ]h"]h$]h&]uh1jhj-&ubeh}(h]h ]h"]h$]h&]uh1jhjH&hMhj*&ubah}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j )}(hjn&h]h Description}(hjp&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjl&ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubj)}(h=Return matching xfer_mask for **xfer_mode**. LOCKING: None. h](h)}(h,Return matching xfer_mask for **xfer_mode**.h](hReturn matching xfer_mask for }(hj&hhhNhNubj )}(h **xfer_mode**h]h xfer_mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubh)}(h **Return**h]j )}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubh)}(h(Matching xfer_mask, 0 if no match found.h]h(Matching xfer_mask, 0 if no match found.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_xfer_mode2shift (C function)c.ata_xfer_mode2shifthNtauh1jhjhhhNhNubj)}(hhh](j)}(h&int ata_xfer_mode2shift (u8 xfer_mode)h]j")}(h%int ata_xfer_mode2shift(u8 xfer_mode)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'hhhj'hMubj)}(hata_xfer_mode2shifth]j[)}(hata_xfer_mode2shifth]hata_xfer_mode2shift}(hj&'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj"'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hMubj)}(h(u8 xfer_mode)h]j)}(h u8 xfer_modeh](h)}(hhh]j[)}(hu8h]hu8}(hjE'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjB'ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjG'modnameN classnameNjwjz)}j}]jj)}jsj('sbc.ata_xfer_mode2shiftasbuh1hhj>'ubj:)}(h h]h }(hje'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>'ubj[)}(h xfer_modeh]h xfer_mode}(hjs'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:'ubah}(h]h ]h"]h$]h&]jjuh1jhj'hhhj'hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj&hhhj'hMubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhj'hMhj&hhubj)}(hhh]h)}(h#Find matching xfer_shift for XFER_*h]h#Find matching xfer_shift for XFER_*}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj'hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j'j1j'j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``u8 xfer_mode`` XFER_* of interest **Description** Return matching xfer_shift for **xfer_mode**. LOCKING: None. **Return** Matching xfer_shift, -1 if no match found.h](h)}(h**Parameters**h]j )}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'ubj)}(hhh]j)}(h$``u8 xfer_mode`` XFER_* of interest h](j)}(h``u8 xfer_mode``h]j\)}(hj'h]h u8 xfer_mode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'ubj)}(hhh]h)}(hXFER_* of interesth]hXFER_* of interest}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'ubj)}(h>Return matching xfer_shift for **xfer_mode**. LOCKING: None. h](h)}(h-Return matching xfer_shift for **xfer_mode**.h](hReturn matching xfer_shift for }(hj3(hhhNhNubj )}(h **xfer_mode**h]h xfer_mode}(hj;(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3(ubh.}(hj3(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj/(ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjT(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj/(ubeh}(h]h ]h"]h$]h&]uh1jhjS(hMhj'ubh)}(h **Return**h]j )}(hjk(h]hReturn}(hjm(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hji(ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'ubh)}(h*Matching xfer_shift, -1 if no match found.h]h*Matching xfer_shift, -1 if no match found.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_mode_string (C function)c.ata_mode_stringhNtauh1jhjhhhNhNubj)}(hhh](j)}(h5const char * ata_mode_string (unsigned int xfer_mask)h]j")}(h3const char *ata_mode_string(unsigned int xfer_mask)h](j()}(hconsth]hconst}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj(hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(hhhj(hMubj)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(hhhj(hMubj)}(hjS h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(hhhj(hMubj)}(hata_mode_stringh]j[)}(hata_mode_stringh]hata_mode_string}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hMubj)}(h(unsigned int xfer_mask)h]j)}(hunsigned int xfer_maskh](j)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj:)}(h h]h }(hj$)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hinth]hint}(hj2)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj:)}(h h]h }(hj@)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj[)}(h xfer_maskh]h xfer_mask}(hjN)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubah}(h]h ]h"]h$]h&]jjuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]j j )j huh1jhj(hMhj(hhubj)}(hhh]h)}(hconvert xfer_mask to stringh]hconvert xfer_mask to string}(hjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhju)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j)j1j)j2j3j4uh1jhhhjhNhNubj6)}(hX[**Parameters** ``unsigned int xfer_mask`` mask of bits supported; only highest bit counts. **Description** Determine string which represents the highest speed (highest bit in **modemask**). LOCKING: None. **Return** Constant C string representing highest speed listed in **mode_mask**, or the constant C string "".h](h)}(h**Parameters**h]j )}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj)ubj)}(hhh]j)}(hL``unsigned int xfer_mask`` mask of bits supported; only highest bit counts. h](j)}(h``unsigned int xfer_mask``h]j\)}(hj)h]hunsigned int xfer_mask}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj)ubj)}(hhh]h)}(h0mask of bits supported; only highest bit counts.h]h0mask of bits supported; only highest bit counts.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubh)}(h**Description**h]j )}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj)ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj)ubj)}(hcDetermine string which represents the highest speed (highest bit in **modemask**). LOCKING: None. h](h)}(hRDetermine string which represents the highest speed (highest bit in **modemask**).h](hDDetermine string which represents the highest speed (highest bit in }(hj*hhhNhNubj )}(h **modemask**h]hmodemask}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubh).}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj *ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj/*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj *ubeh}(h]h ]h"]h$]h&]uh1jhj.*hMhj)ubh)}(h **Return**h]j )}(hjF*h]hReturn}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjD*ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj)ubh)}(hgConstant C string representing highest speed listed in **mode_mask**, or the constant C string "".h](h7Constant C string representing highest speed listed in }(hj\*hhhNhNubj )}(h **mode_mask**h]h mode_mask}(hjd*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\*ubh', or the constant C string “”.}(hj\*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_classify (C function)c.ata_dev_classifyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h=unsigned int ata_dev_classify (const struct ata_taskfile *tf)h]j")}(h/hMQhj?/ubah}(h]h ]h"]h$]h&]uh1jhj#/ubeh}(h]h ]h"]h$]h&]uh1jhj>/hMQhj.ubj)}(h6``unsigned int ofs`` offset into identify device page h](j)}(h``unsigned int ofs``h]j\)}(hjb/h]hunsigned int ofs}(hjd/hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj`/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMRhj\/ubj)}(hhh]h)}(h offset into identify device pageh]h offset into identify device page}(hj{/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw/hMRhjx/ubah}(h]h ]h"]h$]h&]uh1jhj\/ubeh}(h]h ]h"]h$]h&]uh1jhjw/hMRhj.ubj)}(hI``unsigned int len`` length of string to return. must be an even number. h](j)}(h``unsigned int len``h]j\)}(hj/h]hunsigned int len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMShj/ubj)}(hhh]h)}(h3length of string to return. must be an even number.h]h3length of string to return. must be an even number.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMShj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMShj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j )}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMUhj.ubj)}(hThe strings in the IDENTIFY DEVICE page are broken up into 16-bit chunks. Run through the string, and output each 8-bit chunk linearly, regardless of platform. LOCKING: caller.h](h)}(hThe strings in the IDENTIFY DEVICE page are broken up into 16-bit chunks. Run through the string, and output each 8-bit chunk linearly, regardless of platform.h]hThe strings in the IDENTIFY DEVICE page are broken up into 16-bit chunks. Run through the string, and output each 8-bit chunk linearly, regardless of platform.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMThj/ubh)}(hLOCKING: caller.h]hLOCKING: caller.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMXhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMThj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_id_c_string (C function)c.ata_id_c_stringhNtauh1jhjhhhNhNubj)}(hhh](j)}(hZvoid ata_id_c_string (const u16 *id, unsigned char *s, unsigned int ofs, unsigned int len)h]j")}(hYvoid ata_id_c_string(const u16 *id, unsigned char *s, unsigned int ofs, unsigned int len)h](j)}(hvoidh]hvoid}(hj40hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj00hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMtubj:)}(h h]h }(hjC0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj00hhhjB0hMtubj)}(hata_id_c_stringh]j[)}(hata_id_c_stringh]hata_id_c_string}(hjU0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQ0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj00hhhjB0hMtubj)}(hE(const u16 *id, unsigned char *s, unsigned int ofs, unsigned int len)h](j)}(h const u16 *idh](j()}(hj(h]hconst}(hjq0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjm0ubj:)}(h h]h }(hj~0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm0ubh)}(hhh]j[)}(hu16h]hu16}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj0modnameN classnameNjwjz)}j}]jj)}jsjW0sbc.ata_id_c_stringasbuh1hhjm0ubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm0ubj)}(hjS h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjm0ubj[)}(hidh]hid}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjm0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji0ubj)}(hunsigned char *sh](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubj)}(hcharh]hchar}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj:)}(h h]h }(hj 1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubj)}(hjS h]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0ubj[)}(hj-h]hs}(hj(1hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji0ubj)}(hunsigned int ofsh](j)}(hunsignedh]hunsigned}(hj@1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<1ubj:)}(h h]h }(hjN1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<1ubj)}(hinth]hint}(hj\1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<1ubj:)}(h h]h }(hjj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<1ubj[)}(hofsh]hofs}(hjx1hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj<1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji0ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubj)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj:)}(h h]h }(hj1hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1ubj[)}(hlenh]hlen}(hj1hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji0ubeh}(h]h ]h"]h$]h&]jjuh1jhj00hhhjB0hMtubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj,0hhhjB0hMtubah}(h]j'0ah ](jjeh"]h$]h&]j j )j huh1jhjB0hMthj)0hhubj)}(hhh]h)}(h*Convert IDENTIFY DEVICE page into C stringh]h*Convert IDENTIFY DEVICE page into C string}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMthj1hhubah}(h]h ]h"]h$]h&]uh1jhj)0hhhjB0hMtubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j 2j1j 2j2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``const u16 *id`` IDENTIFY DEVICE results we will examine ``unsigned char *s`` string into which data is output ``unsigned int ofs`` offset into identify device page ``unsigned int len`` length of string to return. must be an odd number. **Description** This function is identical to ata_id_string except that it trims trailing spaces and terminates the resulting string with null. **len** must be actual maximum length (even number) + 1. LOCKING: caller.h](h)}(h**Parameters**h]j )}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMxhj2ubj)}(hhh](j)}(h:``const u16 *id`` IDENTIFY DEVICE results we will examine h](j)}(h``const u16 *id``h]j\)}(hj42h]h const u16 *id}(hj62hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj22ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMuhj.2ubj)}(hhh]h)}(h'IDENTIFY DEVICE results we will examineh]h'IDENTIFY DEVICE results we will examine}(hjM2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI2hMuhjJ2ubah}(h]h ]h"]h$]h&]uh1jhj.2ubeh}(h]h ]h"]h$]h&]uh1jhjI2hMuhj+2ubj)}(h6``unsigned char *s`` string into which data is output h](j)}(h``unsigned char *s``h]j\)}(hjm2h]hunsigned char *s}(hjo2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjk2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMvhjg2ubj)}(hhh]h)}(h string into which data is outputh]h string into which data is output}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMvhj2ubah}(h]h ]h"]h$]h&]uh1jhjg2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMvhj+2ubj)}(h6``unsigned int ofs`` offset into identify device page h](j)}(h``unsigned int ofs``h]j\)}(hj2h]hunsigned int ofs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMwhj2ubj)}(hhh]h)}(h offset into identify device pageh]h offset into identify device page}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMwhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMwhj+2ubj)}(hH``unsigned int len`` length of string to return. must be an odd number. h](j)}(h``unsigned int len``h]j\)}(hj2h]hunsigned int len}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMxhj2ubj)}(hhh]h)}(h2length of string to return. must be an odd number.h]h2length of string to return. must be an odd number.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMxhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMxhj+2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]j )}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMzhj2ubj)}(hThis function is identical to ata_id_string except that it trims trailing spaces and terminates the resulting string with null. **len** must be actual maximum length (even number) + 1. LOCKING: caller.h](h)}(hThis function is identical to ata_id_string except that it trims trailing spaces and terminates the resulting string with null. **len** must be actual maximum length (even number) + 1.h](hThis function is identical to ata_id_string except that it trims trailing spaces and terminates the resulting string with null. }(hj43hhhNhNubj )}(h**len**h]hlen}(hj<3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj43ubh1 must be actual maximum length (even number) + 1.}(hj43hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMyhj03ubh)}(hLOCKING: caller.h]hLOCKING: caller.}(hjU3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM}hj03ubeh}(h]h ]h"]h$]h&]uh1jhjT3hMyhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_id_xfermask (C function)c.ata_id_xfermaskhNtauh1jhjhhhNhNubj)}(hhh](j)}(h,unsigned int ata_id_xfermask (const u16 *id)h]j")}(h+unsigned int ata_id_xfermask(const u16 *id)h](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3hhhj3hMubj)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hMubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3hhhj3hMubj)}(hata_id_xfermaskh]j[)}(hata_id_xfermaskh]hata_id_xfermask}(hj3hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj3ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhj3hMubj)}(h(const u16 *id)h]j)}(h const u16 *idh](j()}(hj(h]hconst}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj3ubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubh)}(hhh]j[)}(hu16h]hu16}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj3ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj4modnameN classnameNjwjz)}j}]jj)}jsj3sbc.ata_id_xfermaskasbuh1hhj3ubj:)}(h h]h }(hj!4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubj)}(hjS h]h*}(hj/4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubj[)}(hidh]hid}(hj<4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj3ubah}(h]h ]h"]h$]h&]jjuh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj3hhhj3hMubah}(h]j}3ah ](jjeh"]h$]h&]j j )j huh1jhj3hMhj3hhubj)}(hhh]h)}(h-Compute xfermask from the given IDENTIFY datah]h-Compute xfermask from the given IDENTIFY data}(hjf4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjc4hhubah}(h]h ]h"]h$]h&]uh1jhj3hhhj3hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j~4j1j~4j2j3j4uh1jhhhjhNhNubj6)}(hXH**Parameters** ``const u16 *id`` IDENTIFY data to compute xfer mask from **Description** Compute the xfermask for this device. This is not as trivial as it seems if we must consider early devices correctly. FIXME: pre IDE drive timing (do we care ?). LOCKING: None. **Return** Computed xfermaskh](h)}(h**Parameters**h]j )}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubj)}(hhh]j)}(h:``const u16 *id`` IDENTIFY data to compute xfer mask from h](j)}(h``const u16 *id``h]j\)}(hj4h]h const u16 *id}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubj)}(hhh]h)}(h'IDENTIFY data to compute xfer mask fromh]h'IDENTIFY data to compute xfer mask from}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]j )}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubj)}(hCompute the xfermask for this device. This is not as trivial as it seems if we must consider early devices correctly. FIXME: pre IDE drive timing (do we care ?). LOCKING: None. h](h)}(huCompute the xfermask for this device. This is not as trivial as it seems if we must consider early devices correctly.h]huCompute the xfermask for this device. This is not as trivial as it seems if we must consider early devices correctly.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubh)}(h+FIXME: pre IDE drive timing (do we care ?).h]h+FIXME: pre IDE drive timing (do we care ?).}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 5hMhj4ubh)}(h **Return**h]j )}(hj15h]hReturn}(hj35hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/5ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubh)}(hComputed xfermaskh]hComputed xfermask}(hjG5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_pio_need_iordy (C function)c.ata_pio_need_iordyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h?unsigned int ata_pio_need_iordy (const struct ata_device *adev)h]j")}(h>unsigned int ata_pio_need_iordy(const struct ata_device *adev)h](j)}(hunsignedh]hunsigned}(hjv5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr5hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr5hhhj5hMubj)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr5hhhj5hMubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjr5hhhj5hMubj)}(hata_pio_need_iordyh]j[)}(hata_pio_need_iordyh]hata_pio_need_iordy}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjr5hhhj5hMubj)}(h(const struct ata_device *adev)h]j)}(hconst struct ata_device *adevh](j()}(hj(h]hconst}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubj()}(hj+h]hstruct}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5ubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj6ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj 6modnameN classnameNjwjz)}j}]jj)}jsj5sbc.ata_pio_need_iordyasbuh1hhj5ubj:)}(h h]h }(hj(6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5ubj)}(hjS h]h*}(hj66hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5ubj[)}(hadevh]hadev}(hjC6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5ubah}(h]h ]h"]h$]h&]jjuh1jhjr5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjn5hhhj5hMubah}(h]ji5ah ](jjeh"]h$]h&]j j )j huh1jhj5hMhjk5hhubj)}(hhh]h)}(hcheck if iordy neededh]hcheck if iordy needed}(hjm6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjj6hhubah}(h]h ]h"]h$]h&]uh1jhjk5hhhj5hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j6j1j6j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``const struct ata_device *adev`` ATA device **Description** Check if the current speed of the device requires IORDY. Used by various controllers for chip configuration.h](h)}(h**Parameters**h]j )}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj6ubj)}(hhh]j)}(h-``const struct ata_device *adev`` ATA device h](j)}(h!``const struct ata_device *adev``h]j\)}(hj6h]hconst struct ata_device *adev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj6ubj)}(hhh]h)}(h ATA deviceh]h ATA device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j )}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj6ubj)}(hlCheck if the current speed of the device requires IORDY. Used by various controllers for chip configuration.h]h)}(hlCheck if the current speed of the device requires IORDY. Used by various controllers for chip configuration.h]hlCheck if the current speed of the device requires IORDY. Used by various controllers for chip configuration.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj6ubah}(h]h ]h"]h$]h&]uh1jhj7hMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_do_dev_read_id (C function)c.ata_do_dev_read_idhNtauh1jhjhhhNhNubj)}(hhh](j)}(h]unsigned int ata_do_dev_read_id (struct ata_device *dev, struct ata_taskfile *tf, __le16 *id)h]j")}(h\unsigned int ata_do_dev_read_id(struct ata_device *dev, struct ata_taskfile *tf, __le16 *id)h](j)}(hunsignedh]hunsigned}(hj87hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj47hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjG7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj47hhhjF7hMubj)}(hinth]hint}(hjU7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj47hhhjF7hMubj:)}(h h]h }(hjc7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj47hhhjF7hMubj)}(hata_do_dev_read_idh]j[)}(hata_do_dev_read_idh]hata_do_dev_read_id}(hju7hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjq7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj47hhhjF7hMubj)}(h=(struct ata_device *dev, struct ata_taskfile *tf, __le16 *id)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj7hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj7ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj7modnameN classnameNjwjz)}j}]jj)}jsjw7sbc.ata_do_dev_read_idasbuh1hhj7ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubj)}(hjS h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubj[)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(hstruct ata_taskfile *tfh](j()}(hj+h]hstruct}(hj8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj7ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubh)}(hhh]j[)}(h ata_taskfileh]h ata_taskfile}(hj!8hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj8ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj#8modnameN classnameNjwjz)}j}]j7c.ata_do_dev_read_idasbuh1hhj7ubj:)}(h h]h }(hj?8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7ubj)}(hjS h]h*}(hjM8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubj[)}(htfh]htf}(hjZ8hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubj)}(h __le16 *idh](h)}(hhh]j[)}(h__le16h]h__le16}(hjv8hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjs8ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjx8modnameN classnameNjwjz)}j}]j7c.ata_do_dev_read_idasbuh1hhjo8ubj:)}(h h]h }(hj8hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjo8ubj)}(hjS h]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjo8ubj[)}(hidh]hid}(hj8hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjo8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubeh}(h]h ]h"]h$]h&]jjuh1jhj47hhhjF7hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj07hhhjF7hMubah}(h]j+7ah ](jjeh"]h$]h&]j j )j huh1jhjF7hMhj-7hhubj)}(hhh]h)}(hdefault ID read methodh]hdefault ID read method}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jhj-7hhhjF7hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j8j1j8j2j3j4uh1jhhhjhNhNubj6)}(hXW**Parameters** ``struct ata_device *dev`` device ``struct ata_taskfile *tf`` proposed taskfile ``__le16 *id`` data buffer **Description** Issue the identify taskfile and hand back the buffer containing identify data. For some RAID controllers and for pre ATA devices this function is wrapped or replaced by the driverh](h)}(h**Parameters**h]j )}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj8ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj8ubj)}(hhh](j)}(h"``struct ata_device *dev`` device h](j)}(h``struct ata_device *dev``h]j\)}(hj9h]hstruct ata_device *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj9ubj)}(hhh]h)}(hdeviceh]hdevice}(hj39hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/9hMhj09ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj/9hMhj9ubj)}(h.``struct ata_taskfile *tf`` proposed taskfile h](j)}(h``struct ata_taskfile *tf``h]j\)}(hjS9h]hstruct ata_taskfile *tf}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQ9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjM9ubj)}(hhh]h)}(hproposed taskfileh]hproposed taskfile}(hjl9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh9hMhji9ubah}(h]h ]h"]h$]h&]uh1jhjM9ubeh}(h]h ]h"]h$]h&]uh1jhjh9hMhj9ubj)}(h``__le16 *id`` data buffer h](j)}(h``__le16 *id``h]j\)}(hj9h]h __le16 *id}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj9ubj)}(hhh]h)}(h data bufferh]h data buffer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(h**Description**h]j )}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj8ubj)}(hIssue the identify taskfile and hand back the buffer containing identify data. For some RAID controllers and for pre ATA devices this function is wrapped or replaced by the driverh]h)}(hIssue the identify taskfile and hand back the buffer containing identify data. For some RAID controllers and for pre ATA devices this function is wrapped or replaced by the driverh]hIssue the identify taskfile and hand back the buffer containing identify data. For some RAID controllers and for pre ATA devices this function is wrapped or replaced by the driver}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_cable_40wire (C function)c.ata_cable_40wirehNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ata_cable_40wire (struct ata_port *ap)h]j")}(h)int ata_cable_40wire(struct ata_port *ap)h](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hj%:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:hhhj$:hM ubj)}(hata_cable_40wireh]j[)}(hata_cable_40wireh]hata_cable_40wire}(hj7:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj3:ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhj$:hM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjS:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjO:ubj:)}(h h]h }(hj`:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjO:ubh)}(hhh]j[)}(hata_porth]hata_port}(hjq:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjn:ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjs:modnameN classnameNjwjz)}j}]jj)}jsj9:sbc.ata_cable_40wireasbuh1hhjO:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjO:ubj)}(hjS h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjO:ubj[)}(haph]hap}(hj:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjO:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjK:ubah}(h]h ]h"]h$]h&]jjuh1jhj:hhhj$:hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:hhhj$:hM ubah}(h]j :ah ](jjeh"]h$]h&]j j )j huh1jhj$:hM hj :hhubj)}(hhh]h)}(hreturn 40 wire cable typeh]hreturn 40 wire cable type}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj:hhubah}(h]h ]h"]h$]h&]uh1jhj :hhhj$:hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j:j1j:j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port **Description** Helper method for drivers which want to hardwire 40 wire cable detection.h](h)}(h**Parameters**h]j )}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj:ubj)}(hhh]j)}(h``struct ata_port *ap`` port h](j)}(h``struct ata_port *ap``h]j\)}(hj;h]hstruct ata_port *ap}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj;ubj)}(hhh]h)}(hporth]hport}(hj0;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,;hM hj-;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj,;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j )}(hjR;h]h Description}(hjT;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjP;ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj:ubj)}(hIHelper method for drivers which want to hardwire 40 wire cable detection.h]h)}(hIHelper method for drivers which want to hardwire 40 wire cable detection.h]hIHelper method for drivers which want to hardwire 40 wire cable detection.}(hjl;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjh;ubah}(h]h ]h"]h$]h&]uh1jhjz;hM hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_cable_80wire (C function)c.ata_cable_80wirehNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ata_cable_80wire (struct ata_port *ap)h]j")}(h)int ata_cable_80wire(struct ata_port *ap)h](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;hhhj;hM ubj)}(hata_cable_80wireh]j[)}(hata_cable_80wireh]hata_cable_80wire}(hj;hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhj;hM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj;ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubh)}(hhh]j[)}(hata_porth]hata_port}(hj;hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj;modnameN classnameNjwjz)}j}]jj)}jsj;sbc.ata_cable_80wireasbuh1hhj;ubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubj)}(hjS h]h*}(hj*<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubj[)}(haph]hap}(hj7<hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhj;hhhj;hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj;hhhj;hM ubah}(h]j;ah ](jjeh"]h$]h&]j j )j huh1jhj;hM hj;hhubj)}(hhh]h)}(hreturn 80 wire cable typeh]hreturn 80 wire cable type}(hja<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj^<hhubah}(h]h ]h"]h$]h&]uh1jhj;hhhj;hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jy<j1jy<j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port **Description** Helper method for drivers which want to hardwire 80 wire cable detection.h](h)}(h**Parameters**h]j )}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj}<ubj)}(hhh]j)}(h``struct ata_port *ap`` port h](j)}(h``struct ata_port *ap``h]j\)}(hj<h]hstruct ata_port *ap}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj<ubj)}(hhh]h)}(hporth]hport}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj}<ubh)}(h**Description**h]j )}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj}<ubj)}(hIHelper method for drivers which want to hardwire 80 wire cable detection.h]h)}(hIHelper method for drivers which want to hardwire 80 wire cable detection.h]hIHelper method for drivers which want to hardwire 80 wire cable detection.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj<ubah}(h]h ]h"]h$]h&]uh1jhj=hM hj}<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_cable_unknown (C function)c.ata_cable_unknownhNtauh1jhjhhhNhNubj)}(hhh](j)}(h+int ata_cable_unknown (struct ata_port *ap)h]j")}(h*int ata_cable_unknown(struct ata_port *ap)h](j)}(hinth]hint}(hj,=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(=hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hj;=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj(=hhhj:=hM ubj)}(hata_cable_unknownh]j[)}(hata_cable_unknownh]hata_cable_unknown}(hjM=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjI=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(=hhhj:=hM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hji=hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hje=ubj:)}(h h]h }(hjv=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hje=ubh)}(hhh]j[)}(hata_porth]hata_port}(hj=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj=modnameN classnameNjwjz)}j}]jj)}jsjO=sbc.ata_cable_unknownasbuh1hhje=ubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hje=ubj)}(hjS h]h*}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hje=ubj[)}(haph]hap}(hj=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhje=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhja=ubah}(h]h ]h"]h$]h&]jjuh1jhj(=hhhj:=hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj$=hhhj:=hM ubah}(h]j=ah ](jjeh"]h$]h&]j j )j huh1jhj:=hM hj!=hhubj)}(hhh]h)}(hreturn unknown PATA cable.h]hreturn unknown PATA cable.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj=hhubah}(h]h ]h"]h$]h&]uh1jhj!=hhhj:=hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j>j1j>j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port **Description** Helper method for drivers which have no PATA cable detection.h](h)}(h**Parameters**h]j )}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj >ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj>ubj)}(hhh]j)}(h``struct ata_port *ap`` port h](j)}(h``struct ata_port *ap``h]j\)}(hj->h]hstruct ata_port *ap}(hj/>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj+>ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj'>ubj)}(hhh]h)}(hporth]hport}(hjF>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB>hM hjC>ubah}(h]h ]h"]h$]h&]uh1jhj'>ubeh}(h]h ]h"]h$]h&]uh1jhjB>hM hj$>ubah}(h]h ]h"]h$]h&]uh1jhj>ubh)}(h**Description**h]j )}(hjh>h]h Description}(hjj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjf>ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj>ubj)}(h=Helper method for drivers which have no PATA cable detection.h]h)}(hj>h]h=Helper method for drivers which have no PATA cable detection.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj~>ubah}(h]h ]h"]h$]h&]uh1jhj>hM hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_cable_ignore (C function)c.ata_cable_ignorehNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ata_cable_ignore (struct ata_port *ap)h]j")}(h)int ata_cable_ignore(struct ata_port *ap)h](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>hhhj>hM ubj)}(hata_cable_ignoreh]j[)}(hata_cable_ignoreh]hata_cable_ignore}(hj>hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhj>hM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj>ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]j[)}(hata_porth]hata_port}(hj?hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj?ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj?modnameN classnameNjwjz)}j}]jj)}jsj>sbc.ata_cable_ignoreasbuh1hhj>ubj:)}(h h]h }(hj1?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjS h]h*}(hj??hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubj[)}(haph]hap}(hjL?hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubah}(h]h ]h"]h$]h&]jjuh1jhj>hhhj>hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj>hhhj>hM ubah}(h]j>ah ](jjeh"]h$]h&]j j )j huh1jhj>hM hj>hhubj)}(hhh]h)}(hreturn ignored PATA cable.h]hreturn ignored PATA cable.}(hjv?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjs?hhubah}(h]h ]h"]h$]h&]uh1jhj>hhhj>hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j?j1j?j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port **Description** Helper method for drivers which don't use cable type to limit transfer mode.h](h)}(h**Parameters**h]j )}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj?ubj)}(hhh]j)}(h``struct ata_port *ap`` port h](j)}(h``struct ata_port *ap``h]j\)}(hj?h]hstruct ata_port *ap}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj?ubj)}(hhh]h)}(hporth]hport}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j )}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj?ubj)}(hLHelper method for drivers which don't use cable type to limit transfer mode.h]h)}(hLHelper method for drivers which don't use cable type to limit transfer mode.h]hNHelper method for drivers which don’t use cable type to limit transfer mode.}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj@ubah}(h]h ]h"]h$]h&]uh1jhj@hM hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_cable_sata (C function)c.ata_cable_satahNtauh1jhjhhhNhNubj)}(hhh](j)}(h(int ata_cable_sata (struct ata_port *ap)h]j")}(h'int ata_cable_sata(struct ata_port *ap)h](j)}(hinth]hint}(hjA@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=@hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hjP@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=@hhhjO@hM ubj)}(hata_cable_satah]j[)}(hata_cable_satah]hata_cable_sata}(hjb@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=@hhhjO@hM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj~@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjz@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz@ubh)}(hhh]j[)}(hata_porth]hata_port}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj@modnameN classnameNjwjz)}j}]jj)}jsjd@sbc.ata_cable_sataasbuh1hhjz@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz@ubj)}(hjS h]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjz@ubj[)}(haph]hap}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjz@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv@ubah}(h]h ]h"]h$]h&]jjuh1jhj=@hhhjO@hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj9@hhhjO@hM ubah}(h]j4@ah ](jjeh"]h$]h&]j j )j huh1jhjO@hM hj6@hhubj)}(hhh]h)}(hreturn SATA cable typeh]hreturn SATA cable type}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj@hhubah}(h]h ]h"]h$]h&]uh1jhj6@hhhjO@hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jAj1jAj2j3j4uh1jhhhjhNhNubj6)}(hv**Parameters** ``struct ata_port *ap`` port **Description** Helper method for drivers which have SATA cablesh](h)}(h**Parameters**h]j )}(hj#Ah]h Parameters}(hj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj!Aubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjAubj)}(hhh]j)}(h``struct ata_port *ap`` port h](j)}(h``struct ata_port *ap``h]j\)}(hjBAh]hstruct ata_port *ap}(hjDAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj@Aubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hj``unsigned long deadline`` deadline jiffies for the operation h](j)}(h``unsigned long deadline``h]j\)}(hjHh]hunsigned long deadline}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj|Hubj)}(hhh]h)}(h"deadline jiffies for the operationh]h"deadline jiffies for the operation}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhj|Hubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj@Hubj)}(hO``int (*check_ready)(struct ata_link *link)`` callback to check link readiness h](j)}(h-``int (*check_ready)(struct ata_link *link)``h]j\)}(hjHh]h)int (*check_ready)(struct ata_link *link)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjHubj)}(hhh]h)}(h callback to check link readinessh]h callback to check link readiness}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhj@Hubeh}(h]h ]h"]h$]h&]uh1jhj$Hubh)}(h**Description**h]j )}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjHubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$Hubj)}(hEWait for **link** to become ready after reset. LOCKING: EH context. h](h)}(h.Wait for **link** to become ready after reset.h](h Wait for }(hjIhhhNhNubj )}(h**link**h]hlink}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjIubh to become ready after reset.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj Iubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hj1IhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj Iubeh}(h]h ]h"]h$]h&]uh1jhj0IhMhj$Hubh)}(h **Return**h]j )}(hjHIh]hReturn}(hjJIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjFIubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$Hubh)}(h>0 if **link** is ready before **deadline**; otherwise, -errno.h](h0 if }(hj^IhhhNhNubj )}(h**link**h]hlink}(hjfIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^Iubh is ready before }(hj^IhhhNhNubj )}(h **deadline**h]hdeadline}(hjxIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^Iubh; otherwise, -errno.}(hj^IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_std_prereset (C function)c.ata_std_preresethNtauh1jhjhhhNhNubj)}(hhh](j)}(hDint ata_std_prereset (struct ata_link *link, unsigned long deadline)h]j")}(hCint ata_std_prereset(struct ata_link *link, unsigned long deadline)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIhhhjIhMubj)}(hata_std_prereseth]j[)}(hata_std_prereseth]hata_std_prereset}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjIubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjIhMubj)}(h/(struct ata_link *link, unsigned long deadline)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjIhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjIubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubh)}(hhh]j[)}(hata_linkh]hata_link}(hj JhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj Jubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjJmodnameN classnameNjwjz)}j}]jj)}jsjIsbc.ata_std_preresetasbuh1hhjIubj:)}(h h]h }(hj,JhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubj)}(hjS h]h*}(hj:JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubj[)}(hlinkh]hlink}(hjGJhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubj)}(hunsigned long deadlineh](j)}(hunsignedh]hunsigned}(hj`JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Jubj:)}(h h]h }(hjnJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\Jubj)}(hlongh]hlong}(hj|JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\Jubj:)}(h h]h }(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\Jubj[)}(hdeadlineh]hdeadline}(hjJhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj\Jubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhjIhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjIhhhjIhMubah}(h]jIah ](jjeh"]h$]h&]j j )j huh1jhjIhMhjIhhubj)}(hhh]h)}(hprepare for reseth]hprepare for reset}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjIhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jJj1jJj2j3j4uh1jhhhjhNhNubj6)}(hX **Parameters** ``struct ata_link *link`` ATA link to be reset ``unsigned long deadline`` deadline jiffies for the operation **Description** **link** is about to be reset. Initialize it. Failure from prereset makes libata abort whole reset sequence and give up that port, so prereset should be best-effort. It does its best to prepare for reset sequence but if things go wrong, it should just whine, not fail. LOCKING: Kernel thread context (may sleep) **Return** Always 0.h](h)}(h**Parameters**h]j )}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJubj)}(hhh](j)}(h/``struct ata_link *link`` ATA link to be reset h](j)}(h``struct ata_link *link``h]j\)}(hjKh]hstruct ata_link *link}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjKubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJubj)}(hhh]h)}(hATA link to be reseth]hATA link to be reset}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubj)}(h>``unsigned long deadline`` deadline jiffies for the operation h](j)}(h``unsigned long deadline``h]j\)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj:Kubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj6Kubj)}(hhh]h)}(h"deadline jiffies for the operationh]h"deadline jiffies for the operation}(hjUKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQKhMhjRKubah}(h]h ]h"]h$]h&]uh1jhj6Kubeh}(h]h ]h"]h$]h&]uh1jhjQKhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(h**Description**h]j )}(hjwKh]h Description}(hjyKhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuKubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJubj)}(hX<**link** is about to be reset. Initialize it. Failure from prereset makes libata abort whole reset sequence and give up that port, so prereset should be best-effort. It does its best to prepare for reset sequence but if things go wrong, it should just whine, not fail. LOCKING: Kernel thread context (may sleep) h](h)}(hX**link** is about to be reset. Initialize it. Failure from prereset makes libata abort whole reset sequence and give up that port, so prereset should be best-effort. It does its best to prepare for reset sequence but if things go wrong, it should just whine, not fail.h](j )}(h**link**h]hlink}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjKubhX is about to be reset. Initialize it. Failure from prereset makes libata abort whole reset sequence and give up that port, so prereset should be best-effort. It does its best to prepare for reset sequence but if things go wrong, it should just whine, not fail.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjKubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubh)}(h **Return**h]j )}(hjKh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjKubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJubh)}(h Always 0.h]h Always 0.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_std_postreset (C function)c.ata_std_postresethNtauh1jhjhhhNhNubj)}(hhh](j)}(hEvoid ata_std_postreset (struct ata_link *link, unsigned int *classes)h]j")}(hDvoid ata_std_postreset(struct ata_link *link, unsigned int *classes)h](j)}(hvoidh]hvoid}(hj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLhhhjLhMubj)}(hata_std_postreseth]j[)}(hata_std_postreseth]hata_std_postreset}(hj+LhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'Lubah}(h]h ](jjeh"]h$]h&]jjuh1jhjLhhhjLhMubj)}(h.(struct ata_link *link, unsigned int *classes)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjGLhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCLubj:)}(h h]h }(hjTLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCLubh)}(hhh]j[)}(hata_linkh]hata_link}(hjeLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjbLubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjgLmodnameN classnameNjwjz)}j}]jj)}jsj-Lsbc.ata_std_postresetasbuh1hhjCLubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCLubj)}(hjS h]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCLubj[)}(hlinkh]hlink}(hjLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjCLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Lubj)}(hunsigned int *classesh](j)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubj)}(hjS h]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLubj[)}(hclassesh]hclasses}(hjLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Lubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhjLhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjLhhhjLhMubah}(h]jKah ](jjeh"]h$]h&]j j )j huh1jhjLhMhjKhhubj)}(hhh]h)}(hstandard postreset callbackh]hstandard postreset callback}(hj(MhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj%Mhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjLhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j@Mj1j@Mj2j3j4uh1jhhhjhNhNubj6)}(hXx**Parameters** ``struct ata_link *link`` the target ata_link ``unsigned int *classes`` classes of attached devices **Description** This function is invoked after a successful reset. Note that the device might have been reset more than once using different reset methods before postreset is invoked. LOCKING: Kernel thread context (may sleep)h](h)}(h**Parameters**h]j )}(hjJMh]h Parameters}(hjLMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjHMubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjDMubj)}(hhh](j)}(h.``struct ata_link *link`` the target ata_link h](j)}(h``struct ata_link *link``h]j\)}(hjiMh]hstruct ata_link *link}(hjkMhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjgMubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjcMubj)}(hhh]h)}(hthe target ata_linkh]hthe target ata_link}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~MhMhjMubah}(h]h ]h"]h$]h&]uh1jhjcMubeh}(h]h ]h"]h$]h&]uh1jhj~MhMhj`Mubj)}(h6``unsigned int *classes`` classes of attached devices h](j)}(h``unsigned int *classes``h]j\)}(hjMh]hunsigned int *classes}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjMubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjMubj)}(hhh]h)}(hclasses of attached devicesh]hclasses of attached devices}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj`Mubeh}(h]h ]h"]h$]h&]uh1jhjDMubh)}(h**Description**h]j )}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjDMubj)}(hThis function is invoked after a successful reset. Note that the device might have been reset more than once using different reset methods before postreset is invoked. LOCKING: Kernel thread context (may sleep)h](h)}(hThis function is invoked after a successful reset. Note that the device might have been reset more than once using different reset methods before postreset is invoked.h]hThis function is invoked after a successful reset. Note that the device might have been reset more than once using different reset methods before postreset is invoked.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjMubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjMubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjDMubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_dev_set_feature (C function)c.ata_dev_set_featurehNtauh1jhjhhhNhNubj)}(hhh](j)}(hOunsigned int ata_dev_set_feature (struct ata_device *dev, u8 subcmd, u8 action)h]j")}(hNunsigned int ata_dev_set_feature(struct ata_device *dev, u8 subcmd, u8 action)h](j)}(hunsignedh]hunsigned}(hj;NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Nhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM]ubj:)}(h h]h }(hjJNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7NhhhjINhM]ubj)}(hinth]hint}(hjXNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7NhhhjINhM]ubj:)}(h h]h }(hjfNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj7NhhhjINhM]ubj)}(hata_dev_set_featureh]j[)}(hata_dev_set_featureh]hata_dev_set_feature}(hjxNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjtNubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7NhhhjINhM]ubj)}(h.(struct ata_device *dev, u8 subcmd, u8 action)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jj)}jsjzNsbc.ata_dev_set_featureasbuh1hhjNubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNubj)}(hjS h]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjNubj[)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubj)}(h u8 subcmdh](h)}(hhh]j[)}(hu8h]hu8}(hj OhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjOubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj OmodnameN classnameNjwjz)}j}]jNc.ata_dev_set_featureasbuh1hhjOubj:)}(h h]h }(hj'OhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOubj[)}(hsubcmdh]hsubcmd}(hj5OhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubj)}(h u8 actionh](h)}(hhh]j[)}(hu8h]hu8}(hjQOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNOubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjSOmodnameN classnameNjwjz)}j}]jNc.ata_dev_set_featureasbuh1hhjJOubj:)}(h h]h }(hjoOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJOubj[)}(hactionh]haction}(hj}OhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjNubeh}(h]h ]h"]h$]h&]jjuh1jhj7NhhhjINhM]ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj3NhhhjINhM]ubah}(h]j.Nah ](jjeh"]h$]h&]j j )j huh1jhjINhM]hj0Nhhubj)}(hhh]h)}(hIssue SET FEATURESh]hIssue SET FEATURES}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM]hjOhhubah}(h]h ]h"]h$]h&]uh1jhj0NhhhjINhM]ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jOj1jOj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Device to which command will be sent ``u8 subcmd`` The SET FEATURES subcommand to be sent ``u8 action`` The sector count represents a subcommand specific action **Description** Issue SET FEATURES command to device **dev** on port **ap** with sector count LOCKING: PCI/etc. bus probe sem. **Return** 0 on success, AC_ERR_* mask otherwise.h](h)}(h**Parameters**h]j )}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjOubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMahjOubj)}(hhh](j)}(h@``struct ata_device *dev`` Device to which command will be sent h](j)}(h``struct ata_device *dev``h]j\)}(hjOh]hstruct ata_device *dev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM^hjOubj)}(hhh]h)}(h$Device to which command will be senth]h$Device to which command will be sent}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM^hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM^hjOubj)}(h5``u8 subcmd`` The SET FEATURES subcommand to be sent h](j)}(h ``u8 subcmd``h]j\)}(hj!Ph]h u8 subcmd}(hj#PhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjPubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM_hjPubj)}(hhh]h)}(h&The SET FEATURES subcommand to be senth]h&The SET FEATURES subcommand to be sent}(hj:PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6PhM_hj7Pubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhj6PhM_hjOubj)}(hG``u8 action`` The sector count represents a subcommand specific action h](j)}(h ``u8 action``h]j\)}(hjZPh]h u8 action}(hj\PhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXPubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM`hjTPubj)}(hhh]h)}(h8The sector count represents a subcommand specific actionh]h8The sector count represents a subcommand specific action}(hjsPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoPhM`hjpPubah}(h]h ]h"]h$]h&]uh1jhjTPubeh}(h]h ]h"]h$]h&]uh1jhjoPhM`hjOubeh}(h]h ]h"]h$]h&]uh1jhjOubh)}(h**Description**h]j )}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMbhjOubj)}(hpIssue SET FEATURES command to device **dev** on port **ap** with sector count LOCKING: PCI/etc. bus probe sem. h](h)}(hMIssue SET FEATURES command to device **dev** on port **ap** with sector counth](h%Issue SET FEATURES command to device }(hjPhhhNhNubj )}(h**dev**h]hdev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubh on port }(hjPhhhNhNubj )}(h**ap**h]hap}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubh with sector count}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMahjPubh)}(h LOCKING: PCI/etc. bus probe sem.h]h LOCKING: PCI/etc. bus probe sem.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMchjPubeh}(h]h ]h"]h$]h&]uh1jhjPhMahjOubh)}(h **Return**h]j )}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMfhjOubh)}(h&0 on success, AC_ERR_* mask otherwise.h]h&0 on success, AC_ERR_* mask otherwise.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMghjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_std_qc_defer (C function)c.ata_std_qc_deferhNtauh1jhjhhhNhNubj)}(hhh](j)}(h0int ata_std_qc_defer (struct ata_queued_cmd *qc)h]j")}(h/int ata_std_qc_defer(struct ata_queued_cmd *qc)h](j)}(hinth]hint}(hj>QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Qhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjMQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:QhhhjLQhMubj)}(hata_std_qc_deferh]j[)}(hata_std_qc_deferh]hata_std_qc_defer}(hj_QhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj[Qubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:QhhhjLQhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj{QhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjwQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwQubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jj)}jsjaQsbc.ata_std_qc_deferasbuh1hhjwQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwQubj)}(hjS h]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjwQubj[)}(hqch]hqc}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjwQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsQubah}(h]h ]h"]h$]h&]jjuh1jhj:QhhhjLQhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj6QhhhjLQhMubah}(h]j1Qah ](jjeh"]h$]h&]j j )j huh1jhjLQhMhj3Qhhubj)}(hhh]h)}(h'Check whether a qc needs to be deferredh]h'Check whether a qc needs to be deferred}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhj3QhhhjLQhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jRj1jRj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` ATA command in question **Description** Non-NCQ commands cannot run with any other command, NCQ or not. As upper layer only knows the queue depth, we are responsible for maintaining exclusion. This function checks whether a new command **qc** can be issued. LOCKING: spin_lock_irqsave(host lock) **Return** ATA_DEFER_* if deferring is needed, 0 otherwise.h](h)}(h**Parameters**h]j )}(hj Rh]h Parameters}(hj"RhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubj)}(hhh]j)}(h6``struct ata_queued_cmd *qc`` ATA command in question h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj?Rh]hstruct ata_queued_cmd *qc}(hjARhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj=Rubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj9Rubj)}(hhh]h)}(hATA command in questionh]hATA command in question}(hjXRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTRhMhjURubah}(h]h ]h"]h$]h&]uh1jhj9Rubeh}(h]h ]h"]h$]h&]uh1jhjTRhMhj6Rubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j )}(hjzRh]h Description}(hj|RhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjxRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubj)}(hXNon-NCQ commands cannot run with any other command, NCQ or not. As upper layer only knows the queue depth, we are responsible for maintaining exclusion. This function checks whether a new command **qc** can be issued. LOCKING: spin_lock_irqsave(host lock) h](h)}(hNon-NCQ commands cannot run with any other command, NCQ or not. As upper layer only knows the queue depth, we are responsible for maintaining exclusion. This function checks whether a new command **qc** can be issued.h](hNon-NCQ commands cannot run with any other command, NCQ or not. As upper layer only knows the queue depth, we are responsible for maintaining exclusion. This function checks whether a new command }(hjRhhhNhNubj )}(h**qc**h]hqc}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubh can be issued.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjRubh)}(h **Return**h]j )}(hjRh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubh)}(h0ATA_DEFER_* if deferring is needed, 0 otherwise.h]h0ATA_DEFER_* if deferring is needed, 0 otherwise.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_qc_complete (C function)c.ata_qc_completehNtauh1jhjhhhNhNubj)}(hhh](j)}(h0void ata_qc_complete (struct ata_queued_cmd *qc)h]j")}(h/void ata_qc_complete(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Shhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj ShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ShhhjShMubj)}(hata_qc_completeh]j[)}(hata_qc_completeh]hata_qc_complete}(hj2ShhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj.Subah}(h]h ](jjeh"]h$]h&]jjuh1jhj ShhhjShMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjNShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjJSubj:)}(h h]h }(hj[ShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJSubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjlShhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjiSubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjnSmodnameN classnameNjwjz)}j}]jj)}jsj4Ssbc.ata_qc_completeasbuh1hhjJSubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJSubj)}(hjS h]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJSubj[)}(hqch]hqc}(hjShhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFSubah}(h]h ]h"]h$]h&]jjuh1jhj ShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj ShhhjShMubah}(h]jSah ](jjeh"]h$]h&]j j )j huh1jhjShMhjShhubj)}(hhh]h)}(hComplete an active ATA commandh]hComplete an active ATA command}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjShhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jSj1jSj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Command to complete **Description** Indicate to the mid and upper layers that an ATA command has completed, with either an ok or not-ok status. Refrain from calling this function multiple times when successfully completing multiple NCQ commands. ata_qc_complete_multiple() should be used instead, which will properly update IRQ expect state. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjSubj)}(hhh]j)}(h2``struct ata_queued_cmd *qc`` Command to complete h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjTh]hstruct ata_queued_cmd *qc}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjTubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj Tubj)}(hhh]h)}(hCommand to completeh]hCommand to complete}(hj+ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ThMhj(Tubah}(h]h ]h"]h$]h&]uh1jhj Tubeh}(h]h ]h"]h$]h&]uh1jhj'ThMhj Tubah}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j )}(hjMTh]h Description}(hjOThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjKTubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjSubj)}(hXYIndicate to the mid and upper layers that an ATA command has completed, with either an ok or not-ok status. Refrain from calling this function multiple times when successfully completing multiple NCQ commands. ata_qc_complete_multiple() should be used instead, which will properly update IRQ expect state. LOCKING: spin_lock_irqsave(host lock)h](h)}(hkIndicate to the mid and upper layers that an ATA command has completed, with either an ok or not-ok status.h]hkIndicate to the mid and upper layers that an ATA command has completed, with either an ok or not-ok status.}(hjgThhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjcTubh)}(hRefrain from calling this function multiple times when successfully completing multiple NCQ commands. ata_qc_complete_multiple() should be used instead, which will properly update IRQ expect state.h]hRefrain from calling this function multiple times when successfully completing multiple NCQ commands. ata_qc_complete_multiple() should be used instead, which will properly update IRQ expect state.}(hjvThhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjcTubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjcTubeh}(h]h ]h"]h$]h&]uh1jhjuThMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_qc_get_active (C function)c.ata_qc_get_activehNtauh1jhjhhhNhNubj)}(hhh](j)}(h+u64 ata_qc_get_active (struct ata_port *ap)h]j")}(h*u64 ata_qc_get_active(struct ata_port *ap)h](h)}(hhh]j[)}(hu64h]hu64}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjTmodnameN classnameNjwjz)}j}]jj)}jsata_qc_get_activesbc.ata_qc_get_activeasbuh1hhjThhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjThhhjThMubj)}(hata_qc_get_activeh]j[)}(hjTh]hata_qc_get_active}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjThhhjThMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj UhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjUubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubh)}(hhh]j[)}(hata_porth]hata_port}(hj*UhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'Uubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj,UmodnameN classnameNjwjz)}j}]jTc.ata_qc_get_activeasbuh1hhjUubj:)}(h h]h }(hjHUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUubj)}(hjS h]h*}(hjVUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubj[)}(haph]hap}(hjcUhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubah}(h]h ]h"]h$]h&]jjuh1jhjThhhjThMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjThhhjThMubah}(h]jTah ](jjeh"]h$]h&]j j )j huh1jhjThMhjThhubj)}(hhh]h)}(hget bitmask of active qcsh]hget bitmask of active qcs}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjThMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jUj1jUj2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port in question **Description** LOCKING: spin_lock_irqsave(host lock) **Return** Bitmask of active qcsh](h)}(h**Parameters**h]j )}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjUubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM!hjUubj)}(hhh]j)}(h)``struct ata_port *ap`` port in question h](j)}(h``struct ata_port *ap``h]j\)}(hjUh]hstruct ata_port *ap}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjUubj)}(hhh]h)}(hport in questionh]hport in question}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjUubah}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j )}(hj Vh]h Description}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjVubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM hjUubj)}(h&LOCKING: spin_lock_irqsave(host lock) h]h)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj#VhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjVubah}(h]h ]h"]h$]h&]uh1jhj1VhMhjUubh)}(h **Return**h]j )}(hj:Vh]hReturn}(hjdj1j>dj2j3j4uh1jhhhjhNhNubj6)}(hXD**Parameters** ``struct device *dev`` generic device this host is associated with ``const struct ata_port_info * const * ppi`` array of ATA port_info to initialize host with ``int n_ports`` number of ATA ports attached to this host **Description** Allocate ATA host and initialize with info from **ppi**. If NULL terminated, **ppi** may contain fewer entries than **n_ports**. The last entry will be used for the remaining ports. LOCKING: Inherited from calling layer (may sleep). **Return** Allocate ATA host on success, NULL on failure.h](h)}(h**Parameters**h]j )}(hjHdh]h Parameters}(hjJdhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjFdubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjBdubj)}(hhh](j)}(hC``struct device *dev`` generic device this host is associated with h](j)}(h``struct device *dev``h]j\)}(hjgdh]hstruct device *dev}(hjidhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjedubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjadubj)}(hhh]h)}(h+generic device this host is associated withh]h+generic device this host is associated with}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|dhMhj}dubah}(h]h ]h"]h$]h&]uh1jhjadubeh}(h]h ]h"]h$]h&]uh1jhj|dhMhj^dubj)}(h\``const struct ata_port_info * const * ppi`` array of ATA port_info to initialize host with h](j)}(h,``const struct ata_port_info * const * ppi``h]j\)}(hjdh]h(const struct ata_port_info * const * ppi}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjdubj)}(hhh]h)}(h.array of ATA port_info to initialize host withh]h.array of ATA port_info to initialize host with}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj^dubj)}(h:``int n_ports`` number of ATA ports attached to this host h](j)}(h``int n_ports``h]j\)}(hjdh]h int n_ports}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjdubj)}(hhh]h)}(h)number of ATA ports attached to this hosth]h)number of ATA ports attached to this host}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhj^dubeh}(h]h ]h"]h$]h&]uh1jhjBdubh)}(h**Description**h]j )}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjBdubj)}(hAllocate ATA host and initialize with info from **ppi**. If NULL terminated, **ppi** may contain fewer entries than **n_ports**. The last entry will be used for the remaining ports. LOCKING: Inherited from calling layer (may sleep). h](h)}(hAllocate ATA host and initialize with info from **ppi**. If NULL terminated, **ppi** may contain fewer entries than **n_ports**. The last entry will be used for the remaining ports.h](h0Allocate ATA host and initialize with info from }(hj.ehhhNhNubj )}(h**ppi**h]hppi}(hj6ehhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.eubh. If NULL terminated, }(hj.ehhhNhNubj )}(h**ppi**h]hppi}(hjHehhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.eubh may contain fewer entries than }(hj.ehhhNhNubj )}(h **n_ports**h]hn_ports}(hjZehhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.eubh7. The last entry will be used for the remaining ports.}(hj.ehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj*eubh)}(h2LOCKING: Inherited from calling layer (may sleep).h]h2LOCKING: Inherited from calling layer (may sleep).}(hjsehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj*eubeh}(h]h ]h"]h$]h&]uh1jhjrehMhjBdubh)}(h **Return**h]j )}(hjeh]hReturn}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjBdubh)}(h.Allocate ATA host on success, NULL on failure.h]h.Allocate ATA host on success, NULL on failure.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjBdubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_host_start (C function)c.ata_host_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ata_host_start (struct ata_host *host)h]j")}(h)int ata_host_start(struct ata_host *host)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMSubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjehhhjehMSubj)}(hata_host_starth]j[)}(hata_host_starth]hata_host_start}(hjehhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjehMSubj)}(h(struct ata_host *host)h]j)}(hstruct ata_host *hosth](j()}(hj+h]hstruct}(hj fhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjfubj:)}(h h]h }(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubh)}(hhh]j[)}(hata_hosth]hata_host}(hj*fhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'fubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj,fmodnameN classnameNjwjz)}j}]jj)}jsjesbc.ata_host_startasbuh1hhjfubj:)}(h h]h }(hjJfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubj)}(hjS h]h*}(hjXfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjfubj[)}(hhosth]hhost}(hjefhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubah}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMSubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjehhhjehMSubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1jhjehMShjehhubj)}(hhh]h)}(h%start and freeze ports of an ATA hosth]h%start and freeze ports of an ATA host}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMShjfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMSubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jfj1jfj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_host *host`` ATA host to start ports for **Description** Start and then freeze ports of **host**. Started status is recorded in host->flags, so this function can be called multiple times. Ports are guaranteed to get started only once. If host->ops is not initialized yet, it is set to the first non-dummy port ops. LOCKING: Inherited from calling layer (may sleep). **Return** 0 if all ports are started successfully, -errno otherwise.h](h)}(h**Parameters**h]j )}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjfubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMWhjfubj)}(hhh]j)}(h6``struct ata_host *host`` ATA host to start ports for h](j)}(h``struct ata_host *host``h]j\)}(hjfh]hstruct ata_host *host}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjfubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMThjfubj)}(hhh]h)}(hATA host to start ports forh]hATA host to start ports for}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMThjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMThjfubah}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j )}(hj gh]h Description}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1j hj gubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMVhjfubj)}(hX9Start and then freeze ports of **host**. Started status is recorded in host->flags, so this function can be called multiple times. Ports are guaranteed to get started only once. If host->ops is not initialized yet, it is set to the first non-dummy port ops. LOCKING: Inherited from calling layer (may sleep). h](h)}(hXStart and then freeze ports of **host**. Started status is recorded in host->flags, so this function can be called multiple times. Ports are guaranteed to get started only once. If host->ops is not initialized yet, it is set to the first non-dummy port ops.h](hStart and then freeze ports of }(hj%ghhhNhNubj )}(h**host**h]hhost}(hj-ghhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%gubh. Started status is recorded in host->flags, so this function can be called multiple times. Ports are guaranteed to get started only once. If host->ops is not initialized yet, it is set to the first non-dummy port ops.}(hj%ghhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMUhj!gubh)}(h2LOCKING: Inherited from calling layer (may sleep).h]h2LOCKING: Inherited from calling layer (may sleep).}(hjFghhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM[hj!gubeh}(h]h ]h"]h$]h&]uh1jhjEghMUhjfubh)}(h **Return**h]j )}(hj]gh]hReturn}(hj_ghhhNhNubah}(h]h ]h"]h$]h&]uh1j hj[gubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM^hjfubh)}(h:0 if all ports are started successfully, -errno otherwise.h]h:0 if all ports are started successfully, -errno otherwise.}(hjsghhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM_hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_host_init (C function)c.ata_host_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h_void ata_host_init (struct ata_host *host, struct device *dev, struct ata_port_operations *ops)h]j")}(h^void ata_host_init(struct ata_host *host, struct device *dev, struct ata_port_operations *ops)h](j)}(hvoidh]hvoid}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjghhhjghMubj)}(h ata_host_inith]j[)}(h ata_host_inith]h ata_host_init}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjghMubj)}(hL(struct ata_host *host, struct device *dev, struct ata_port_operations *ops)h](j)}(hstruct ata_host *hosth](j()}(hj+h]hstruct}(hjghhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjgubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubh)}(hhh]j[)}(hata_hosth]hata_host}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjgmodnameN classnameNjwjz)}j}]jj)}jsjgsbc.ata_host_initasbuh1hhjgubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubj)}(hjS h]h*}(hj+hhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubj[)}(hhosth]hhost}(hj8hhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hstruct device *devh](j()}(hj+h]hstruct}(hjQhhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjMhubj:)}(h h]h }(hj^hhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMhubh)}(hhh]j[)}(hdeviceh]hdevice}(hjohhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjlhubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjqhmodnameN classnameNjwjz)}j}]jhc.ata_host_initasbuh1hhjMhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMhubj)}(hjS h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMhubj[)}(hdevh]hdev}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjMhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hstruct ata_port_operations *opsh](j()}(hj+h]hstruct}(hjhhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubh)}(hhh]j[)}(hata_port_operationsh]hata_port_operations}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjhubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jhc.ata_host_initasbuh1hhjhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubj)}(hjS h]h*}(hj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubj[)}(hopsh]hops}(hjihhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjghhhjghMubah}(h]jgah ](jjeh"]h$]h&]j j )j huh1jhjghMhjghhubj)}(hhh]h)}(h.Initialize a host struct for sas (ipr, libsas)h]h.Initialize a host struct for sas (ipr, libsas)}(hjBihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj?ihhubah}(h]h ]h"]h$]h&]uh1jhjghhhjghMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jZij1jZij2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_host *host`` host to initialize ``struct device *dev`` device host is attached to ``struct ata_port_operations *ops`` port_opsh](h)}(h**Parameters**h]j )}(hjdih]h Parameters}(hjfihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbiubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj^iubj)}(hhh](j)}(h-``struct ata_host *host`` host to initialize h](j)}(h``struct ata_host *host``h]j\)}(hjih]hstruct ata_host *host}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj}iubj)}(hhh]h)}(hhost to initializeh]hhost to initialize}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhj}iubeh}(h]h ]h"]h$]h&]uh1jhjihMhjziubj)}(h2``struct device *dev`` device host is attached to h](j)}(h``struct device *dev``h]j\)}(hjih]hstruct device *dev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjiubj)}(hhh]h)}(hdevice host is attached toh]hdevice host is attached to}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjziubj)}(h,``struct ata_port_operations *ops`` port_opsh](j)}(h#``struct ata_port_operations *ops``h]j\)}(hjih]hstruct ata_port_operations *ops}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjiubj)}(hhh]h)}(hport_opsh]hport_ops}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj jubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj jhMhjziubeh}(h]h ]h"]h$]h&]uh1jhj^iubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_host_register (C function)c.ata_host_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSint ata_host_register (struct ata_host *host, const struct scsi_host_template *sht)h]j")}(hRint ata_host_register(struct ata_host *host, const struct scsi_host_template *sht)h](j)}(hinth]hint}(hjOjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj^jhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKjhhhj]jhMubj)}(hata_host_registerh]j[)}(hata_host_registerh]hata_host_register}(hjpjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjljubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKjhhhj]jhMubj)}(h=(struct ata_host *host, const struct scsi_host_template *sht)h](j)}(hstruct ata_host *hosth](j()}(hj+h]hstruct}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjjubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubh)}(hhh]j[)}(hata_hosth]hata_host}(hjjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjjmodnameN classnameNjwjz)}j}]jj)}jsjrjsbc.ata_host_registerasbuh1hhjjubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubj)}(hjS h]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubj[)}(hhosth]hhost}(hjjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(h$const struct scsi_host_template *shth](j()}(hj(h]hconst}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjjubj:)}(h h]h }(hj khhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubj()}(hj+h]hstruct}(hjkhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjjubj:)}(h h]h }(hj&khhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubh)}(hhh]j[)}(hscsi_host_templateh]hscsi_host_template}(hj7khhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj4kubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj9kmodnameN classnameNjwjz)}j}]jjc.ata_host_registerasbuh1hhjjubj:)}(h h]h }(hjUkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjubj)}(hjS h]h*}(hjckhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubj[)}(hshth]hsht}(hjpkhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhjKjhhhj]jhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjGjhhhj]jhMubah}(h]jBjah ](jjeh"]h$]h&]j j )j huh1jhj]jhMhjDjhhubj)}(hhh]h)}(hregister initialized ATA hosth]hregister initialized ATA host}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jhjDjhhhj]jhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jkj1jkj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_host *host`` ATA host to register ``const struct scsi_host_template *sht`` template for SCSI host **Description** Register initialized ATA host. **host** is allocated using ata_host_alloc() and fully initialized by LLD. This function starts ports, registers **host** with ATA and SCSI layers and probe registered devices. LOCKING: Inherited from calling layer (may sleep). **Return** 0 on success, -errno otherwise.h](h)}(h**Parameters**h]j )}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjkubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkubj)}(hhh](j)}(h/``struct ata_host *host`` ATA host to register h](j)}(h``struct ata_host *host``h]j\)}(hjkh]hstruct ata_host *host}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjkubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkubj)}(hhh]h)}(hATA host to registerh]hATA host to register}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjkubj)}(h@``const struct scsi_host_template *sht`` template for SCSI host h](j)}(h(``const struct scsi_host_template *sht``h]j\)}(hjlh]h$const struct scsi_host_template *sht}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjlubj)}(hhh]h)}(htemplate for SCSI hosth]htemplate for SCSI host}(hj-lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)lhMhj*lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj)lhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j )}(hjOlh]h Description}(hjQlhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkubj)}(hXRegister initialized ATA host. **host** is allocated using ata_host_alloc() and fully initialized by LLD. This function starts ports, registers **host** with ATA and SCSI layers and probe registered devices. LOCKING: Inherited from calling layer (may sleep). h](h)}(hRegister initialized ATA host. **host** is allocated using ata_host_alloc() and fully initialized by LLD. This function starts ports, registers **host** with ATA and SCSI layers and probe registered devices.h](h Register initialized ATA host. }(hjilhhhNhNubj )}(h**host**h]hhost}(hjqlhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjilubhj is allocated using ata_host_alloc() and fully initialized by LLD. This function starts ports, registers }(hjilhhhNhNubj )}(h**host**h]hhost}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjilubh7 with ATA and SCSI layers and probe registered devices.}(hjilhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjelubh)}(h2LOCKING: Inherited from calling layer (may sleep).h]h2LOCKING: Inherited from calling layer (may sleep).}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjelubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjkubh)}(h **Return**h]j )}(hjlh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkubh)}(h0 on success, -errno otherwise.h]h0 on success, -errno otherwise.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_host_activate (C function)c.ata_host_activatehNtauh1jhjhhhNhNubj)}(hhh](j)}(hint ata_host_activate (struct ata_host *host, int irq, irq_handler_t irq_handler, unsigned long irq_flags, const struct scsi_host_template *sht)h]j")}(hint ata_host_activate(struct ata_host *host, int irq, irq_handler_t irq_handler, unsigned long irq_flags, const struct scsi_host_template *sht)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM:ubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjlhhhjmhM:ubj)}(hata_host_activateh]j[)}(hata_host_activateh]hata_host_activate}(hjmhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjmhM:ubj)}(hz(struct ata_host *host, int irq, irq_handler_t irq_handler, unsigned long irq_flags, const struct scsi_host_template *sht)h](j)}(hstruct ata_host *hosth](j()}(hj+h]hstruct}(hj5mhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj1mubj:)}(h h]h }(hjBmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1mubh)}(hhh]j[)}(hata_hosth]hata_host}(hjSmhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjPmubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjUmmodnameN classnameNjwjz)}j}]jj)}jsjmsbc.ata_host_activateasbuh1hhj1mubj:)}(h h]h }(hjsmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj1mubj)}(hjS h]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1mubj[)}(hhosth]hhost}(hjmhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj1mubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-mubj)}(hint irqh](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj[)}(hirqh]hirq}(hjmhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-mubj)}(hirq_handler_t irq_handlerh](h)}(hhh]j[)}(h irq_handler_th]h irq_handler_t}(hjmhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmmodnameN classnameNjwjz)}j}]jomc.ata_host_activateasbuh1hhjmubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj[)}(h irq_handlerh]h irq_handler}(hj nhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-mubj)}(hunsigned long irq_flagsh](j)}(hunsignedh]hunsigned}(hj$nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj nubj:)}(h h]h }(hj2nhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj nubj)}(hlongh]hlong}(hj@nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj nubj:)}(h h]h }(hjNnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj nubj[)}(h irq_flagsh]h irq_flags}(hj\nhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-mubj)}(h$const struct scsi_host_template *shth](j()}(hj(h]hconst}(hjunhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjqnubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqnubj()}(hj+h]hstruct}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjqnubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqnubh)}(hhh]j[)}(hscsi_host_templateh]hscsi_host_template}(hjnhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjnubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjnmodnameN classnameNjwjz)}j}]jomc.ata_host_activateasbuh1hhjqnubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqnubj)}(hjS h]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjqnubj[)}(hshth]hsht}(hjnhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-mubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjmhM:ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjlhhhjmhM:ubah}(h]jlah ](jjeh"]h$]h&]j j )j huh1jhjmhM:hjlhhubj)}(hhh]h)}(h'start host, request IRQ and register ith]h'start host, request IRQ and register it}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM:hjohhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjmhM:ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j)oj1j)oj2j3j4uh1jhhhjhNhNubj6)}(hX[**Parameters** ``struct ata_host *host`` target ATA host ``int irq`` IRQ to request ``irq_handler_t irq_handler`` irq_handler used when requesting IRQ ``unsigned long irq_flags`` irq_flags used when requesting IRQ ``const struct scsi_host_template *sht`` scsi_host_template to use when registering the host **Description** After allocating an ATA host and initializing it, most libata LLDs perform three steps to activate the host - start host, request IRQ and register it. This helper takes necessary arguments and performs the three steps in one go. An invalid IRQ skips the IRQ registration and expects the host to have set polling mode on the port. In this case, **irq_handler** should be NULL. LOCKING: Inherited from calling layer (may sleep). **Return** 0 on success, -errno otherwise.h](h)}(h**Parameters**h]j )}(hj3oh]h Parameters}(hj5ohhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1oubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM>hj-oubj)}(hhh](j)}(h*``struct ata_host *host`` target ATA host h](j)}(h``struct ata_host *host``h]j\)}(hjRoh]hstruct ata_host *host}(hjTohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjPoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM;hjLoubj)}(hhh]h)}(htarget ATA hosth]htarget ATA host}(hjkohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgohM;hjhoubah}(h]h ]h"]h$]h&]uh1jhjLoubeh}(h]h ]h"]h$]h&]uh1jhjgohM;hjIoubj)}(h``int irq`` IRQ to request h](j)}(h ``int irq``h]j\)}(hjoh]hint irq}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM<hjoubj)}(hhh]h)}(hIRQ to requesth]hIRQ to request}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM<hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM<hjIoubj)}(hC``irq_handler_t irq_handler`` irq_handler used when requesting IRQ h](j)}(h``irq_handler_t irq_handler``h]j\)}(hjoh]hirq_handler_t irq_handler}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM=hjoubj)}(hhh]h)}(h$irq_handler used when requesting IRQh]h$irq_handler used when requesting IRQ}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM=hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM=hjIoubj)}(h?``unsigned long irq_flags`` irq_flags used when requesting IRQ h](j)}(h``unsigned long irq_flags``h]j\)}(hjoh]hunsigned long irq_flags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM>hjoubj)}(hhh]h)}(h"irq_flags used when requesting IRQh]h"irq_flags used when requesting IRQ}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM>hjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphM>hjIoubj)}(h]``const struct scsi_host_template *sht`` scsi_host_template to use when registering the host h](j)}(h(``const struct scsi_host_template *sht``h]j\)}(hj6ph]h$const struct scsi_host_template *sht}(hj8phhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4pubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM?hj0pubj)}(hhh]h)}(h3scsi_host_template to use when registering the hosth]h3scsi_host_template to use when registering the host}(hjOphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKphM?hjLpubah}(h]h ]h"]h$]h&]uh1jhj0pubeh}(h]h ]h"]h$]h&]uh1jhjKphM?hjIoubeh}(h]h ]h"]h$]h&]uh1jhj-oubh)}(h**Description**h]j )}(hjqph]h Description}(hjsphhhNhNubah}(h]h ]h"]h$]h&]uh1j hjopubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMAhj-oubj)}(hXAfter allocating an ATA host and initializing it, most libata LLDs perform three steps to activate the host - start host, request IRQ and register it. This helper takes necessary arguments and performs the three steps in one go. An invalid IRQ skips the IRQ registration and expects the host to have set polling mode on the port. In this case, **irq_handler** should be NULL. LOCKING: Inherited from calling layer (may sleep). h](h)}(hAfter allocating an ATA host and initializing it, most libata LLDs perform three steps to activate the host - start host, request IRQ and register it. This helper takes necessary arguments and performs the three steps in one go.h]hAfter allocating an ATA host and initializing it, most libata LLDs perform three steps to activate the host - start host, request IRQ and register it. This helper takes necessary arguments and performs the three steps in one go.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chM@hjpubh)}(hAn invalid IRQ skips the IRQ registration and expects the host to have set polling mode on the port. In this case, **irq_handler** should be NULL.h](hsAn invalid IRQ skips the IRQ registration and expects the host to have set polling mode on the port. In this case, }(hjphhhNhNubj )}(h**irq_handler**h]h irq_handler}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j hjpubh should be NULL.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMEhjpubh)}(h2LOCKING: Inherited from calling layer (may sleep).h]h2LOCKING: Inherited from calling layer (may sleep).}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMIhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM@hj-oubh)}(h **Return**h]j )}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j hjpubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMLhj-oubh)}(h0 on success, -errno otherwise.h]h0 on success, -errno otherwise.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMMhj-oubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_host_detach (C function)c.ata_host_detachhNtauh1jhjhhhNhNubj)}(hhh](j)}(h,void ata_host_detach (struct ata_host *host)h]j")}(h+void ata_host_detach(struct ata_host *host)h](j)}(hvoidh]hvoid}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj&qhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqhhhj%qhMubj)}(hata_host_detachh]j[)}(hata_host_detachh]hata_host_detach}(hj8qhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj4qubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhj%qhMubj)}(h(struct ata_host *host)h]j)}(hstruct ata_host *hosth](j()}(hj+h]hstruct}(hjTqhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjPqubj:)}(h h]h }(hjaqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPqubh)}(hhh]j[)}(hata_hosth]hata_host}(hjrqhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjoqubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjtqmodnameN classnameNjwjz)}j}]jj)}jsj:qsbc.ata_host_detachasbuh1hhjPqubj:)}(h h]h }(hjqhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPqubj)}(hjS h]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjPqubj[)}(hhosth]hhost}(hjqhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjPqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjLqubah}(h]h ]h"]h$]h&]jjuh1jhjqhhhj%qhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjqhhhj%qhMubah}(h]j qah ](jjeh"]h$]h&]j j )j huh1jhj%qhMhj qhhubj)}(hhh]h)}(hDetach all ports of an ATA hosth]hDetach all ports of an ATA host}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhj qhhhj%qhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jqj1jqj2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_host *host`` Host to detach **Description** Detach all ports of **host**. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjqubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjqubj)}(hhh]j)}(h)``struct ata_host *host`` Host to detach h](j)}(h``struct ata_host *host``h]j\)}(hjrh]hstruct ata_host *host}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjrubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjrubj)}(hhh]h)}(hHost to detachh]hHost to detach}(hj1rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-rhMhj.rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhj-rhMhjrubah}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j )}(hjSrh]h Description}(hjUrhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjQrubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjqubj)}(hJDetach all ports of **host**. LOCKING: Kernel thread context (may sleep).h](h)}(hDetach all ports of **host**.h](hDetach all ports of }(hjmrhhhNhNubj )}(h**host**h]hhost}(hjurhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjmrubh.}(hjmrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjirubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjirubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_pci_remove_one (C function)c.ata_pci_remove_onehNtauh1jhjhhhNhNubj)}(hhh](j)}(h.void ata_pci_remove_one (struct pci_dev *pdev)h]j")}(h-void ata_pci_remove_one(struct pci_dev *pdev)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjrhMubj)}(hata_pci_remove_oneh]j[)}(hata_pci_remove_oneh]hata_pci_remove_one}(hjrhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjrhMubj)}(h(struct pci_dev *pdev)h]j)}(hstruct pci_dev *pdevh](j()}(hj+h]hstruct}(hjshhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjrubj:)}(h h]h }(hj shhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubh)}(hhh]j[)}(hpci_devh]hpci_dev}(hjshhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjsubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj smodnameN classnameNjwjz)}j}]jj)}jsjrsbc.ata_pci_remove_oneasbuh1hhjrubj:)}(h h]h }(hj>shhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubj)}(hjS h]h*}(hjLshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjrubj[)}(hpdevh]hpdev}(hjYshhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjrhhhjrhMubah}(h]jrah ](jjeh"]h$]h&]j j )j huh1jhjrhMhjrhhubj)}(hhh]h)}(h%PCI layer callback for device removalh]h%PCI layer callback for device removal}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jsj1jsj2j3j4uh1jhhhjhNhNubj6)}(hX>**Parameters** ``struct pci_dev *pdev`` PCI device that was removed **Description** PCI layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres. LOCKING: Inherited from PCI layer (may sleep).h](h)}(h**Parameters**h]j )}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j hjsubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjsubj)}(hhh]j)}(h5``struct pci_dev *pdev`` PCI device that was removed h](j)}(h``struct pci_dev *pdev``h]j\)}(hjsh]hstruct pci_dev *pdev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjsubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjsubj)}(hhh]h)}(hPCI device that was removedh]hPCI device that was removed}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j )}(hjsh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j hjsubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjsubj)}(hPCI layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres. LOCKING: Inherited from PCI layer (may sleep).h](h)}(hPCI layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres.h]hPCI layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjtubh)}(h.LOCKING: Inherited from PCI layer (may sleep).h]h.LOCKING: Inherited from PCI layer (may sleep).}(hj(thhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjtubeh}(h]h ]h"]h$]h&]uh1jhj'thMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ata_platform_remove_one (C function)c.ata_platform_remove_onehNtauh1jhjhhhNhNubj)}(hhh](j)}(h;void ata_platform_remove_one (struct platform_device *pdev)h]j")}(h:void ata_platform_remove_one(struct platform_device *pdev)h](j)}(hvoidh]hvoid}(hj]thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYthhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMlubj:)}(h h]h }(hjlthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjYthhhjkthMlubj)}(hata_platform_remove_oneh]j[)}(hata_platform_remove_oneh]hata_platform_remove_one}(hj~thhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjztubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYthhhjkthMlubj)}(h(struct platform_device *pdev)h]j)}(hstruct platform_device *pdevh](j()}(hj+h]hstruct}(hjthhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjtubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubh)}(hhh]j[)}(hplatform_deviceh]hplatform_device}(hjthhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjtubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjtmodnameN classnameNjwjz)}j}]jj)}jsjtsbc.ata_platform_remove_oneasbuh1hhjtubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubj)}(hjS h]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtubj[)}(hpdevh]hpdev}(hjthhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubah}(h]h ]h"]h$]h&]jjuh1jhjYthhhjkthMlubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjUthhhjkthMlubah}(h]jPtah ](jjeh"]h$]h&]j j )j huh1jhjkthMlhjRthhubj)}(hhh]h)}(h*Platform layer callback for device removalh]h*Platform layer callback for device removal}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMlhjuhhubah}(h]h ]h"]h$]h&]uh1jhjRthhhjkthMlubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j5uj1j5uj2j3j4uh1jhhhjhNhNubj6)}(hXU**Parameters** ``struct platform_device *pdev`` Platform device that was removed **Description** Platform layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres. LOCKING: Inherited from platform layer (may sleep).h](h)}(h**Parameters**h]j )}(hj?uh]h Parameters}(hjAuhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=uubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMphj9uubj)}(hhh]j)}(hB``struct platform_device *pdev`` Platform device that was removed h](j)}(h ``struct platform_device *pdev``h]j\)}(hj^uh]hstruct platform_device *pdev}(hj`uhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj\uubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMmhjXuubj)}(hhh]h)}(h Platform device that was removedh]h Platform device that was removed}(hjwuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsuhMmhjtuubah}(h]h ]h"]h$]h&]uh1jhjXuubeh}(h]h ]h"]h$]h&]uh1jhjsuhMmhjUuubah}(h]h ]h"]h$]h&]uh1jhj9uubh)}(h**Description**h]j )}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMohj9uubj)}(hPlatform layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres. LOCKING: Inherited from platform layer (may sleep).h](h)}(hPlatform layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres.h]hPlatform layer indicates to libata via this hook that hot-unplug or module unload event has occurred. Detach all ports. Resource release is handled via devres.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMnhjuubh)}(h3LOCKING: Inherited from platform layer (may sleep).h]h3LOCKING: Inherited from platform layer (may sleep).}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMrhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMnhj9uubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_msleep (C function) c.ata_msleephNtauh1jhjhhhNhNubj)}(hhh](j)}(h9void ata_msleep (struct ata_port *ap, unsigned int msecs)h]j")}(h8void ata_msleep(struct ata_port *ap, unsigned int msecs)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuhhhjvhMubj)}(h ata_msleeph]j[)}(h ata_msleeph]h ata_msleep}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjvhMubj)}(h)(struct ata_port *ap, unsigned int msecs)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj4vhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj0vubj:)}(h h]h }(hjAvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0vubh)}(hhh]j[)}(hata_porth]hata_port}(hjRvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjOvubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjTvmodnameN classnameNjwjz)}j}]jj)}jsjvsb c.ata_msleepasbuh1hhj0vubj:)}(h h]h }(hjrvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0vubj)}(hjS h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0vubj[)}(haph]hap}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0vubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,vubj)}(hunsigned int msecsh](j)}(hunsignedh]hunsigned}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj[)}(hmsecsh]hmsecs}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,vubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjvhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjuhhhjvhMubah}(h]juah ](jjeh"]h$]h&]j j )j huh1jhjvhMhjuhhubj)}(hhh]h)}(hATA EH owner aware msleeph]hATA EH owner aware msleep}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjvhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j wj1j wj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port to attribute the sleep to ``unsigned int msecs`` duration to sleep in milliseconds **Description** Sleeps **msecs**. If the current task is owner of **ap**'s EH, the ownership is released before going to sleep and reacquired after the sleep is complete. IOW, other ports sharing the **ap->host** will be allowed to own the EH while this task is sleeping. LOCKING: Might sleep.h](h)}(h**Parameters**h]j )}(hj*wh]h Parameters}(hj,whhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(wubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$wubj)}(hhh](j)}(h;``struct ata_port *ap`` ATA port to attribute the sleep to h](j)}(h``struct ata_port *ap``h]j\)}(hjIwh]hstruct ata_port *ap}(hjKwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjGwubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjCwubj)}(hhh]h)}(h"ATA port to attribute the sleep toh]h"ATA port to attribute the sleep to}(hjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^whMhj_wubah}(h]h ]h"]h$]h&]uh1jhjCwubeh}(h]h ]h"]h$]h&]uh1jhj^whMhj@wubj)}(h9``unsigned int msecs`` duration to sleep in milliseconds h](j)}(h``unsigned int msecs``h]j\)}(hjwh]hunsigned int msecs}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjwubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj|wubj)}(hhh]h)}(h!duration to sleep in millisecondsh]h!duration to sleep in milliseconds}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhj|wubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj@wubeh}(h]h ]h"]h$]h&]uh1jhj$wubh)}(h**Description**h]j )}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj$wubj)}(hXSleeps **msecs**. If the current task is owner of **ap**'s EH, the ownership is released before going to sleep and reacquired after the sleep is complete. IOW, other ports sharing the **ap->host** will be allowed to own the EH while this task is sleeping. LOCKING: Might sleep.h](h)}(hXSleeps **msecs**. If the current task is owner of **ap**'s EH, the ownership is released before going to sleep and reacquired after the sleep is complete. IOW, other ports sharing the **ap->host** will be allowed to own the EH while this task is sleeping.h](hSleeps }(hjwhhhNhNubj )}(h **msecs**h]hmsecs}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubh#. If the current task is owner of }(hjwhhhNhNubj )}(h**ap**h]hap}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubh’s EH, the ownership is released before going to sleep and reacquired after the sleep is complete. IOW, other ports sharing the }(hjwhhhNhNubj )}(h **ap->host**h]hap->host}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubh; will be allowed to own the EH while this task is sleeping.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjwubh)}(hLOCKING: Might sleep.h]hLOCKING: Might sleep.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjwubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj$wubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_wait_register (C function)c.ata_wait_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h~u32 ata_wait_register (struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, unsigned int interval, unsigned int timeout)h]j")}(h}u32 ata_wait_register(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, unsigned int interval, unsigned int timeout)h](h)}(hhh]j[)}(hu32h]hu32}(hjTxhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQxubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjVxmodnameN classnameNjwjz)}j}]jj)}jsata_wait_registersbc.ata_wait_registerasbuh1hhjMxhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjvxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMxhhhjuxhMubj)}(hata_wait_registerh]j[)}(hjrxh]hata_wait_register}(hjxhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMxhhhjuxhMubj)}(hh(struct ata_port *ap, void __iomem *reg, u32 mask, u32 val, unsigned int interval, unsigned int timeout)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjxubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubh)}(hhh]j[)}(hata_porth]hata_port}(hjxhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjxubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jpxc.ata_wait_registerasbuh1hhjxubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxubj)}(hjS h]h*}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjxubj[)}(haph]hap}(hjxhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hvoid __iomem *regh](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj:)}(h h]h }(hj!yhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubh__iomem}(hjyhhhNhNubj:)}(h h]h }(hj3yhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hjS h]h*}(hjAyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hregh]hreg}(hjNyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hu32 maskh](h)}(hhh]j[)}(hu32h]hu32}(hjjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgyubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjlymodnameN classnameNjwjz)}j}]jpxc.ata_wait_registerasbuh1hhjcyubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcyubj[)}(hmaskh]hmask}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hu32 valh](h)}(hhh]j[)}(hu32h]hu32}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjymodnameN classnameNjwjz)}j}]jpxc.ata_wait_registerasbuh1hhjyubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj[)}(hvalh]hval}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hunsigned int intervalh](j)}(hunsignedh]hunsigned}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj:)}(h h]h }(hjzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj:)}(h h]h }(hj!zhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj[)}(hintervalh]hinterval}(hj/zhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hunsigned int timeouth](j)}(hunsignedh]hunsigned}(hjHzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDzubj:)}(h h]h }(hjVzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDzubj)}(hinth]hint}(hjdzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDzubj:)}(h h]h }(hjrzhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDzubj[)}(htimeouth]htimeout}(hjzhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhjMxhhhjuxhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjIxhhhjuxhMubah}(h]jDxah ](jjeh"]h$]h&]j j )j huh1jhjuxhMhjFxhhubj)}(hhh]h)}(h!wait until register value changesh]h!wait until register value changes}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzhhubah}(h]h ]h"]h$]h&]uh1jhjFxhhhjuxhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jzj1jzj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port to wait register for, can be NULL ``void __iomem *reg`` IO-mapped register ``u32 mask`` Mask to apply to read register value ``u32 val`` Wait condition ``unsigned int interval`` polling interval in milliseconds ``unsigned int timeout`` timeout in milliseconds **Description** Waiting for some bits of register to change is a common operation for ATA controllers. This function reads 32bit LE IO-mapped register **reg** and tests for the following condition. (***reg** & mask) != val If the condition is met, it returns; otherwise, the process is repeated after **interval_msec** until timeout. LOCKING: Kernel thread context (may sleep) **Return** The final register value.h](h)}(h**Parameters**h]j )}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzubj)}(hhh](j)}(hC``struct ata_port *ap`` ATA port to wait register for, can be NULL h](j)}(h``struct ata_port *ap``h]j\)}(hjzh]hstruct ata_port *ap}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjzubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzubj)}(hhh]h)}(h*ATA port to wait register for, can be NULLh]h*ATA port to wait register for, can be NULL}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubj)}(h)``void __iomem *reg`` IO-mapped register h](j)}(h``void __iomem *reg``h]j\)}(hj${h]hvoid __iomem *reg}(hj&{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj"{ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj{ubj)}(hhh]h)}(hIO-mapped registerh]hIO-mapped register}(hj={hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9{hMhj:{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj9{hMhjzubj)}(h2``u32 mask`` Mask to apply to read register value h](j)}(h ``u32 mask``h]j\)}(hj]{h]hu32 mask}(hj_{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj[{ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjW{ubj)}(hhh]h)}(h$Mask to apply to read register valueh]h$Mask to apply to read register value}(hjv{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr{hMhjs{ubah}(h]h ]h"]h$]h&]uh1jhjW{ubeh}(h]h ]h"]h$]h&]uh1jhjr{hMhjzubj)}(h``u32 val`` Wait condition h](j)}(h ``u32 val``h]j\)}(hj{h]hu32 val}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj{ubj)}(hhh]h)}(hWait conditionh]hWait condition}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubj)}(h;``unsigned int interval`` polling interval in milliseconds h](j)}(h``unsigned int interval``h]j\)}(hj{h]hunsigned int interval}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj{ubj)}(hhh]h)}(h polling interval in millisecondsh]h polling interval in milliseconds}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjzubj)}(h1``unsigned int timeout`` timeout in milliseconds h](j)}(h``unsigned int timeout``h]j\)}(hj|h]hunsigned int timeout}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj|ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhj|ubj)}(hhh]h)}(htimeout in millisecondsh]htimeout in milliseconds}(hj!|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjzubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j )}(hjC|h]h Description}(hjE|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjA|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzubj)}(hXmWaiting for some bits of register to change is a common operation for ATA controllers. This function reads 32bit LE IO-mapped register **reg** and tests for the following condition. (***reg** & mask) != val If the condition is met, it returns; otherwise, the process is repeated after **interval_msec** until timeout. LOCKING: Kernel thread context (may sleep) h](h)}(hWaiting for some bits of register to change is a common operation for ATA controllers. This function reads 32bit LE IO-mapped register **reg** and tests for the following condition.h](hWaiting for some bits of register to change is a common operation for ATA controllers. This function reads 32bit LE IO-mapped register }(hj]|hhhNhNubj )}(h**reg**h]hreg}(hje|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]|ubh' and tests for the following condition.}(hj]|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjY|ubh)}(h(***reg** & mask) != valh](h(}(hj~|hhhNhNubj )}(h***reg**h]h*reg}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~|ubh & mask) != val}(hj~|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjY|ubh)}(hnIf the condition is met, it returns; otherwise, the process is repeated after **interval_msec** until timeout.h](hNIf the condition is met, it returns; otherwise, the process is repeated after }(hj|hhhNhNubj )}(h**interval_msec**h]h interval_msec}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj|ubh until timeout.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjY|ubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjY|ubeh}(h]h ]h"]h$]h&]uh1jhj}|hMhjzubh)}(h **Return**h]j )}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzubh)}(hThe final register value.h]hThe final register value.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:587: ./drivers/ata/libata-core.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubeh}(h]libata-libraryah ]h"]libata libraryah$]h&]uh1hhhhhhhhMIubh)}(hhh](h)}(hlibata Core Internalsh]hlibata Core Internals}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj }hhhhhMOubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_phys_link (C function)c.ata_dev_phys_linkhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hlink** only when **dev** is on slave link. For all other cases, it's the same as **dev->link**. LOCKING: Don't care. **Return** Pointer to the found physical link.h](h)}(h**Parameters**h]j )}(hjR~h]h Parameters}(hjT~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjP~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjL~ubj)}(hhh]j)}(hC``struct ata_device *dev`` ATA device to look up physical link for h](j)}(h``struct ata_device *dev``h]j\)}(hjq~h]hstruct ata_device *dev}(hjs~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjo~ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjk~ubj)}(hhh]h)}(h'ATA device to look up physical link forh]h'ATA device to look up physical link for}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjk~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjh~ubah}(h]h ]h"]h$]h&]uh1jhjL~ubh)}(h**Description**h]j )}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjL~ubj)}(hLook up physical link which **dev** is attached to. Note that this is different from **dev->link** only when **dev** is on slave link. For all other cases, it's the same as **dev->link**. LOCKING: Don't care. h](h)}(hLook up physical link which **dev** is attached to. Note that this is different from **dev->link** only when **dev** is on slave link. For all other cases, it's the same as **dev->link**.h](hLook up physical link which }(hj~hhhNhNubj )}(h**dev**h]hdev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh3 is attached to. Note that this is different from }(hj~hhhNhNubj )}(h **dev->link**h]h dev->link}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh only when }(hj~hhhNhNubj )}(h**dev**h]hdev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh< is on slave link. For all other cases, it’s the same as }(hj~hhhNhNubj )}(h **dev->link**h]h dev->link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj~ubh)}(hLOCKING: Don't care.h]hLOCKING: Don’t care.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjL~ubh)}(h **Return**h]j )}(hj4h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM!hjL~ubh)}(h#Pointer to the found physical link.h]h#Pointer to the found physical link.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM"hjL~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_force_cbl (C function)c.ata_force_cblhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h(void ata_force_cbl (struct ata_port *ap)h]j")}(h'void ata_force_cbl(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM2ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuhhhjhM2ubj)}(h ata_force_cblh]j[)}(h ata_force_cblh]h ata_force_cbl}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjhM2ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_force_cblasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjuhhhjhM2ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjqhhhjhM2ubah}(h]jlah ](jjeh"]h$]h&]j j )j huh1jhjhM2hjnhhubj)}(hhh]h)}(h*force cable type according to libata.forceh]h*force cable type according to libata.force}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM2hj6hhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhM2ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jQj1jQj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port of interest **Description** Force cable type according to libata.force and whine about it. The last entry which has matching port number is used, so it can be specified as part of device force parameters. For example, both "a:40c,1.00:udma4" and "1.00:40c,udma4" have the same effect. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjYubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM6hjUubj)}(hhh]j)}(h-``struct ata_port *ap`` ATA port of interest h](j)}(h``struct ata_port *ap``h]j\)}(hjzh]hstruct ata_port *ap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM3hjtubj)}(hhh]h)}(hATA port of interesth]hATA port of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjqubah}(h]h ]h"]h$]h&]uh1jhjUubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM5hjUubj)}(hXForce cable type according to libata.force and whine about it. The last entry which has matching port number is used, so it can be specified as part of device force parameters. For example, both "a:40c,1.00:udma4" and "1.00:40c,udma4" have the same effect. LOCKING: EH context.h](h)}(hXForce cable type according to libata.force and whine about it. The last entry which has matching port number is used, so it can be specified as part of device force parameters. For example, both "a:40c,1.00:udma4" and "1.00:40c,udma4" have the same effect.h]hX Force cable type according to libata.force and whine about it. The last entry which has matching port number is used, so it can be specified as part of device force parameters. For example, both “a:40c,1.00:udma4” and “1.00:40c,udma4” have the same effect.}(hjπhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM4hjˀubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjހhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM:hjˀubeh}(h]h ]h"]h$]h&]uh1jhj݀hM4hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_force_pflags (C function)c.ata_force_pflagshNtauh1jhj }hhhNhNubj)}(hhh](j)}(h+void ata_force_pflags (struct ata_port *ap)h]j")}(h*void ata_force_pflags(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMRubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj!hMRubj)}(hata_force_pflagsh]j[)}(hata_force_pflagsh]hata_force_pflags}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj!hMRubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjPhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjLubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubh)}(hhh]j[)}(hata_porth]hata_port}(hjnhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjkubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjpmodnameN classnameNjwjz)}j}]jj)}jsj6sbc.ata_force_pflagsasbuh1hhjLubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj!hMRubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj!hMRubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj!hMRhjhhubj)}(hhh]h)}(h*force port flags according to libata.forceh]h*force port flags according to libata.force}(hjӁhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMRhjЁhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj!hMRubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` ATA port of interest **Description** Force port flags according to libata.force and whine about it. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMVhjubj)}(hhh]j)}(h-``struct ata_port *ap`` ATA port of interest h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMShjubj)}(hhh]h)}(hATA port of interesth]hATA port of interest}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMShj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMShj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMUhjubj)}(hTForce port flags according to libata.force and whine about it. LOCKING: EH context.h](h)}(h>Force port flags according to libata.force and whine about it.h]h>Force port flags according to libata.force and whine about it.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMThjeubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMVhjeubeh}(h]h ]h"]h$]h&]uh1jhjwhMThjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_force_link_limits (C function)c.ata_force_link_limitshNtauh1jhj }hhhNhNubj)}(hhh](j)}(h2void ata_force_link_limits (struct ata_link *link)h]j")}(h1void ata_force_link_limits(struct ata_link *link)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMoubj)}(hata_force_link_limitsh]j[)}(hata_force_link_limitsh]hata_force_link_limits}(hj΂hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjʂubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMoubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsjЂsbc.ata_force_link_limitsasbuh1hhjubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMoubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMoubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMohjhhubj)}(hhh]h)}(h+force link limits according to libata.forceh]h+force link limits according to libata.force}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMohjjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMoubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_link *link`` ATA link of interest **Description** Force link flags and SATA spd limit according to libata.force and whine about it. When only the port part is specified (e.g. 1:), the limit applies to all links connected to both the host link and all fan-out ports connected via PMP. If the device part is specified as 0 (e.g. 1.00:), it specifies the first fan-out link not the host link. Device number 15 always points to the host link whether PMP is attached or not. If the controller has slave link, device number 16 points to it. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMshjubj)}(hhh]j)}(h/``struct ata_link *link`` ATA link of interest h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMphjubj)}(hhh]h)}(hATA link of interesth]hATA link of interest}(hjǃhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjÃhMphjăubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjÃhMphjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMrhjubj)}(hXForce link flags and SATA spd limit according to libata.force and whine about it. When only the port part is specified (e.g. 1:), the limit applies to all links connected to both the host link and all fan-out ports connected via PMP. If the device part is specified as 0 (e.g. 1.00:), it specifies the first fan-out link not the host link. Device number 15 always points to the host link whether PMP is attached or not. If the controller has slave link, device number 16 points to it. LOCKING: EH context.h](h)}(hXForce link flags and SATA spd limit according to libata.force and whine about it. When only the port part is specified (e.g. 1:), the limit applies to all links connected to both the host link and all fan-out ports connected via PMP. If the device part is specified as 0 (e.g. 1.00:), it specifies the first fan-out link not the host link. Device number 15 always points to the host link whether PMP is attached or not. If the controller has slave link, device number 16 points to it.h]hXForce link flags and SATA spd limit according to libata.force and whine about it. When only the port part is specified (e.g. 1:), the limit applies to all links connected to both the host link and all fan-out ports connected via PMP. If the device part is specified as 0 (e.g. 1.00:), it specifies the first fan-out link not the host link. Device number 15 always points to the host link whether PMP is attached or not. If the controller has slave link, device number 16 points to it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMqhjubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMzhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_force_xfermask (C function)c.ata_force_xfermaskhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h0void ata_force_xfermask (struct ata_device *dev)h]j")}(h/void ata_force_xfermask(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjChhhjUhMubj)}(hata_force_xfermaskh]j[)}(hata_force_xfermaskh]hata_force_xfermask}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjUhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjjsbc.ata_force_xfermaskasbuh1hhjubj:)}(h h]h }(hj„hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjЄhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hj݄hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubah}(h]h ]h"]h$]h&]jjuh1jhjChhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj?hhhjUhMubah}(h]j:ah ](jjeh"]h$]h&]j j )j huh1jhjUhMhj<hhubj)}(hhh]h)}(h(force xfermask according to libata.forceh]h(force xfermask according to libata.force}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX-**Parameters** ``struct ata_device *dev`` ATA device of interest **Description** Force xfer_mask according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj#ubj)}(hhh]j)}(h2``struct ata_device *dev`` ATA device of interest h](j)}(h``struct ata_device *dev``h]j\)}(hjHh]hstruct ata_device *dev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjBubj)}(hhh]h)}(hATA device of interesth]hATA device of interest}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj#ubj)}(hForce xfer_mask according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link. LOCKING: EH context.h](h)}(hForce xfer_mask according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link.h]hForce xfer_mask according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_force_quirks (C function)c.ata_force_quirkshNtauh1jhj }hhhNhNubj)}(hhh](j)}(h.void ata_force_quirks (struct ata_device *dev)h]j")}(h-void ata_force_quirks(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݅hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj݅hhhjhMubj)}(hata_force_quirksh]j[)}(hata_force_quirksh]hata_force_quirks}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj݅hhhjhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj<hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj9ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj>modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_force_quirksasbuh1hhjubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjwhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj݅hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjمhhhjhMubah}(h]jԅah ](jjeh"]h$]h&]j j )j huh1jhjhMhjօhhubj)}(hhh]h)}(h&force quirks according to libata.forceh]h&force quirks according to libata.force}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjօhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX***Parameters** ``struct ata_device *dev`` ATA device of interest **Description** Force quirks according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hjÆh]h Parameters}(hjņhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h2``struct ata_device *dev`` ATA device of interest h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj܆ubj)}(hhh]h)}(hATA device of interesth]hATA device of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj܆ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjنubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hForce quirks according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link. LOCKING: EH context.h](h)}(hForce quirks according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link.h]hForce quirks according to libata.force and whine about it. For consistency with link selection, device number 15 selects the first device connected to the host link.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj3ubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ata_set_rwcmd_protocol (C function)c.ata_set_rwcmd_protocolhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hMbool ata_set_rwcmd_protocol (struct ata_device *dev, struct ata_taskfile *tf)h]j")}(hLbool ata_set_rwcmd_protocol(struct ata_device *dev, struct ata_taskfile *tf)h](j)}(hjVh]hbool}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMaubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwhhhjhMaubj)}(hata_set_rwcmd_protocolh]j[)}(hata_set_rwcmd_protocolh]hata_set_rwcmd_protocol}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjwhhhjhMaubj)}(h1(struct ata_device *dev, struct ata_taskfile *tf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjćhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjՇhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj҇ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjׇmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_set_rwcmd_protocolasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_taskfile *tfh](j()}(hj+h]hstruct}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj%ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubh)}(hhh]j[)}(h ata_taskfileh]h ata_taskfile}(hjGhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjImodnameN classnameNjwjz)}j}]jc.ata_set_rwcmd_protocolasbuh1hhj%ubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj)}(hjS h]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj%ubj[)}(htfh]htf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhMaubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjshhhjhMaubah}(h]jnah ](jjeh"]h$]h&]j j )j huh1jhjhMahjphhubj)}(hhh]h)}(h%set taskfile r/w command and protocolh]h%set taskfile r/w command and protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMahjhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMaubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jˆj1jˆj2j3j4uh1jhhhj }hNhNubj6)}(hX>**Parameters** ``struct ata_device *dev`` target device for the taskfile ``struct ata_taskfile *tf`` taskfile to examine and configure **Description** Examine the device configuration and tf->flags to determine the proper read/write command and protocol to use for **tf**. LOCKING: caller.h](h)}(h**Parameters**h]j )}(hj̈h]h Parameters}(hjΈhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjʈubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMehjƈubj)}(hhh](j)}(h:``struct ata_device *dev`` target device for the taskfile h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMbhjubj)}(hhh]h)}(htarget device for the taskfileh]htarget device for the taskfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(h>``struct ata_taskfile *tf`` taskfile to examine and configure h](j)}(h``struct ata_taskfile *tf``h]j\)}(hj$h]hstruct ata_taskfile *tf}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj"ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMchjubj)}(hhh]h)}(h!taskfile to examine and configureh]h!taskfile to examine and configure}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMchj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMchjubeh}(h]h ]h"]h$]h&]uh1jhjƈubh)}(h**Description**h]j )}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMehjƈubj)}(hExamine the device configuration and tf->flags to determine the proper read/write command and protocol to use for **tf**. LOCKING: caller.h](h)}(hyExamine the device configuration and tf->flags to determine the proper read/write command and protocol to use for **tf**.h](hrExamine the device configuration and tf->flags to determine the proper read/write command and protocol to use for }(hjyhhhNhNubj )}(h**tf**h]htf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMdhjuubh)}(hLOCKING: caller.h]hLOCKING: caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMghjuubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjƈubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_tf_read_block (C function)c.ata_tf_read_blockhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hMu64 ata_tf_read_block (const struct ata_taskfile *tf, struct ata_device *dev)h]j")}(hLu64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)h](h)}(hhh]j[)}(hu64h]hu64}(hj҉hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjωubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjԉmodnameN classnameNjwjz)}j}]jj)}jsata_tf_read_blocksbc.ata_tf_read_blockasbuh1hhjˉhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjˉhhhjhMubj)}(hata_tf_read_blockh]j[)}(hjh]hata_tf_read_block}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjˉhhhjhMubj)}(h7(const struct ata_taskfile *tf, struct ata_device *dev)h](j)}(hconst struct ata_taskfile *tfh](j()}(hj(h]hconst}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_taskfileh]h ata_taskfile}(hjZhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjWubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj\modnameN classnameNjwjz)}j}]jc.ata_tf_read_blockasbuh1hhjubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(htfh]htf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjʊhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNJubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj̊modnameN classnameNjwjz)}j}]jc.ata_tf_read_blockasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjˉhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjljhhhjhMubah}(h]j‰ah ](jjeh"]h$]h&]j j )j huh1jhjhMhjĉhhubj)}(hhh]h)}(h$Read block address from ATA taskfileh]h$Read block address from ATA taskfile}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jhjĉhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jEj1jEj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``const struct ata_taskfile *tf`` ATA taskfile of interest ``struct ata_device *dev`` ATA device **tf** belongs to **Description** LOCKING: None. Read block address from **tf**. This function can handle all three address formats - LBA, LBA48 and CHS. tf->protocol and flags select the address format to use. **Return** Block address read from **tf**.h](h)}(h**Parameters**h]j )}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjIubj)}(hhh](j)}(h;``const struct ata_taskfile *tf`` ATA taskfile of interest h](j)}(h!``const struct ata_taskfile *tf``h]j\)}(hjnh]hconst struct ata_taskfile *tf}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhubj)}(hhh]h)}(hATA taskfile of interesth]hATA taskfile of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(h8``struct ata_device *dev`` ATA device **tf** belongs to h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hATA device **tf** belongs toh](h ATA device }(hjhhhNhNubj )}(h**tf**h]htf}(hjȋhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh belongs to}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjIubj)}(hLOCKING: None. Read block address from **tf**. This function can handle all three address formats - LBA, LBA48 and CHS. tf->protocol and flags select the address format to use. h](h)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj ubh)}(hRead block address from **tf**. This function can handle all three address formats - LBA, LBA48 and CHS. tf->protocol and flags select the address format to use.h](hRead block address from }(hjhhhNhNubj )}(h**tf**h]htf}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh. This function can handle all three address formats - LBA, LBA48 and CHS. tf->protocol and flags select the address format to use.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjIubh)}(h **Return**h]j )}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjDubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjIubh)}(hBlock address read from **tf**.h](hBlock address read from }(hj\hhhNhNubj )}(h**tf**h]htf}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\ubh.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_build_rw_tf (C function)c.ata_build_rw_tfhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hrint ata_build_rw_tf (struct ata_queued_cmd *qc, u64 block, u32 n_block, unsigned int tf_flags, int cdl, int class)h]j")}(hqint ata_build_rw_tf(struct ata_queued_cmd *qc, u64 block, u32 n_block, unsigned int tf_flags, int cdl, int class)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_build_rw_tfh]j[)}(hata_build_rw_tfh]hata_build_rw_tf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h^(struct ata_queued_cmd *qc, u64 block, u32 n_block, unsigned int tf_flags, int cdl, int class)h](j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjڌhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj֌ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj֌ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_build_rw_tfasbuh1hhj֌ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj֌ubj)}(hjS h]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj֌ubj[)}(hqch]hqc}(hj3hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj֌ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubj)}(h u64 blockh](h)}(hhh]j[)}(hu64h]hu64}(hjOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jc.ata_build_rw_tfasbuh1hhjHubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubj[)}(hblockh]hblock}(hj{hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubj)}(h u32 n_blockh](h)}(hhh]j[)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_build_rw_tfasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hn_blockh]hn_block}(hjÍhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubj)}(hunsigned int tf_flagsh](j)}(hunsignedh]hunsigned}(hj܍hhhNhNubah}(h] h ]jah"]h$]h&]uh1jhj؍ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj؍ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj؍ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj؍ubj[)}(htf_flagsh]htf_flags}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj؍ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubj)}(hint cdlh](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj[)}(hcdlh]hcdl}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubj)}(h int classh](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj:)}(h h]h }(hjphhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubj[)}(hclassh]hclass}(hj~hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjҌubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h/Build ATA taskfile for given read/write requesth]h/Build ATA taskfile for given read/write request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXA**Parameters** ``struct ata_queued_cmd *qc`` Metadata associated with the taskfile to build ``u64 block`` Block address ``u32 n_block`` Number of blocks ``unsigned int tf_flags`` RW/FUA etc... ``int cdl`` Command duration limit index ``int class`` IO priority class **Description** LOCKING: None. Build ATA taskfile for the command **qc** for read/write request described by **block**, **n_block**, **tf_flags** and **class**. 0 on success, -ERANGE if the request is too large for **dev**, -EINVAL if the request is invalid.h](h)}(h**Parameters**h]j )}(hjʎh]h Parameters}(hj̎hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjȎubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjĎubj)}(hhh](j)}(hM``struct ata_queued_cmd *qc`` Metadata associated with the taskfile to build h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h.Metadata associated with the taskfile to buildh]h.Metadata associated with the taskfile to build}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u64 block`` Block address h](j)}(h ``u64 block``h]j\)}(hj"h]h u64 block}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h Block addressh]h Block address}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h!``u32 n_block`` Number of blocks h](j)}(h``u32 n_block``h]j\)}(hj[h]h u32 n_block}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjYubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjUubj)}(hhh]h)}(hNumber of blocksh]hNumber of blocks}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(h(``unsigned int tf_flags`` RW/FUA etc... h](j)}(h``unsigned int tf_flags``h]j\)}(hjh]hunsigned int tf_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h RW/FUA etc...h]h RW/FUA etc...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``int cdl`` Command duration limit index h](j)}(h ``int cdl``h]j\)}(hj͏h]hint cdl}(hjϏhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjˏubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjǏubj)}(hhh]h)}(hCommand duration limit indexh]hCommand duration limit index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǏubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int class`` IO priority class h](j)}(h ``int class``h]j\)}(hjh]h int class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hIO priority classh]hIO priority class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjĎubh)}(h**Description**h]j )}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjĎubj)}(hLOCKING: None. Build ATA taskfile for the command **qc** for read/write request described by **block**, **n_block**, **tf_flags** and **class**. 0 on success, -ERANGE if the request is too large for **dev**, -EINVAL if the request is invalid.h](h)}(hLOCKING: None.h]hLOCKING: None.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjWubh)}(hBuild ATA taskfile for the command **qc** for read/write request described by **block**, **n_block**, **tf_flags** and **class**.h](h#Build ATA taskfile for the command }(hjjhhhNhNubj )}(h**qc**h]hqc}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubh% for read/write request described by }(hjjhhhNhNubj )}(h **block**h]hblock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubh, }(hjjhhhNhNubj )}(h **n_block**h]hn_block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubh, }hjjsbj )}(h **tf_flags**h]htf_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubh and }(hjjhhhNhNubj )}(h **class**h]hclass}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubh.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjWubh)}(ha0 on success, -ERANGE if the request is too large for **dev**, -EINVAL if the request is invalid.h](h60 on success, -ERANGE if the request is too large for }(hjӐhhhNhNubj )}(h**dev**h]hdev}(hjېhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjӐubh$, -EINVAL if the request is invalid.}(hjӐhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjWubeh}(h]h ]h"]h$]h&]uh1jhjihMhjĎubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_unpack_xfermask (C function)c.ata_unpack_xfermaskhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h|void ata_unpack_xfermask (unsigned int xfer_mask, unsigned int *pio_mask, unsigned int *mwdma_mask, unsigned int *udma_mask)h]j")}(h{void ata_unpack_xfermask(unsigned int xfer_mask, unsigned int *pio_mask, unsigned int *mwdma_mask, unsigned int *udma_mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMsubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj(hMsubj)}(hata_unpack_xfermaskh]j[)}(hata_unpack_xfermaskh]hata_unpack_xfermask}(hj;hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj(hMsubj)}(hc(unsigned int xfer_mask, unsigned int *pio_mask, unsigned int *mwdma_mask, unsigned int *udma_mask)h](j)}(hunsigned int xfer_maskh](j)}(hunsignedh]hunsigned}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjSubj[)}(h xfer_maskh]h xfer_mask}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int *pio_maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjđhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjґhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hpio_maskh]hpio_mask}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int *mwdma_maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(h mwdma_maskh]h mwdma_mask}(hjKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int *udma_maskh](j)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj`ubj[)}(h udma_maskh]h udma_mask}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj(hMsubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj(hMsubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj(hMshjhhubj)}(hhh]h)}(h/Unpack xfer_mask into pio, mwdma and udma masksh]h/Unpack xfer_mask into pio, mwdma and udma masks}(hjӒhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMshjВhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMsubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXk**Parameters** ``unsigned int xfer_mask`` xfer_mask to unpack ``unsigned int *pio_mask`` resulting pio_mask ``unsigned int *mwdma_mask`` resulting mwdma_mask ``unsigned int *udma_mask`` resulting udma_mask **Description** Unpack **xfer_mask** into **pio_mask**, **mwdma_mask** and **udma_mask**. Any NULL destination masks will be ignored.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMwhjubj)}(hhh](j)}(h/``unsigned int xfer_mask`` xfer_mask to unpack h](j)}(h``unsigned int xfer_mask``h]j\)}(hjh]hunsigned int xfer_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMthjubj)}(hhh]h)}(hxfer_mask to unpackh]hxfer_mask to unpack}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMthj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMthj ubj)}(h.``unsigned int *pio_mask`` resulting pio_mask h](j)}(h``unsigned int *pio_mask``h]j\)}(hjMh]hunsigned int *pio_mask}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjKubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMuhjGubj)}(hhh]h)}(hresulting pio_maskh]hresulting pio_mask}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMuhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMuhj ubj)}(h2``unsigned int *mwdma_mask`` resulting mwdma_mask h](j)}(h``unsigned int *mwdma_mask``h]j\)}(hjh]hunsigned int *mwdma_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMvhjubj)}(hhh]h)}(hresulting mwdma_maskh]hresulting mwdma_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhj ubj)}(h0``unsigned int *udma_mask`` resulting udma_mask h](j)}(h``unsigned int *udma_mask``h]j\)}(hjh]hunsigned int *udma_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMwhjubj)}(hhh]h)}(hresulting udma_maskh]hresulting udma_mask}(hjؓhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԓhMwhjՓubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԓhMwhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMyhjubj)}(huUnpack **xfer_mask** into **pio_mask**, **mwdma_mask** and **udma_mask**. Any NULL destination masks will be ignored.h]h)}(huUnpack **xfer_mask** into **pio_mask**, **mwdma_mask** and **udma_mask**. Any NULL destination masks will be ignored.h](hUnpack }(hjhhhNhNubj )}(h **xfer_mask**h]h xfer_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh into }(hjhhhNhNubj )}(h **pio_mask**h]hpio_mask}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh, }(hjhhhNhNubj )}(h**mwdma_mask**h]h mwdma_mask}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h **udma_mask**h]h udma_mask}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh-. Any NULL destination masks will be ignored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMxhjubah}(h]h ]h"]h$]h&]uh1jhjjhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ata_read_native_max_address (C function)c.ata_read_native_max_addresshNtauh1jhj }hhhNhNubj)}(hhh](j)}(hJint ata_read_native_max_address (struct ata_device *dev, u64 *max_sectors)h]j")}(hIint ata_read_native_max_address(struct ata_device *dev, u64 *max_sectors)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_read_native_max_addressh]j[)}(hata_read_native_max_addressh]hata_read_native_max_address}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h*(struct ata_device *dev, u64 *max_sectors)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjΔhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjʔubj:)}(h h]h }(hj۔hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʔubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_read_native_max_addressasbuh1hhjʔubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjʔubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjʔubj[)}(hdevh]hdev}(hj'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjʔubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjƔubj)}(hu64 *max_sectorsh](h)}(hhh]j[)}(hu64h]hu64}(hjChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jc.ata_read_native_max_addressasbuh1hhj<ubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubj)}(hjS h]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj<ubj[)}(h max_sectorsh]h max_sectors}(hj|hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjƔubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hRead native max addressh]hRead native max address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXD**Parameters** ``struct ata_device *dev`` target device ``u64 *max_sectors`` out parameter for the result native max address **Description** Perform an LBA48 or LBA28 native size query upon the device in question. **Return** 0 on success, -EACCES if command is aborted by the drive. -EIO on other errors.h](h)}(h**Parameters**h]j )}(hjȕh]h Parameters}(hjʕhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjƕubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj•ubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h target deviceh]h target device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjޕubj)}(hE``u64 *max_sectors`` out parameter for the result native max address h](j)}(h``u64 *max_sectors``h]j\)}(hj h]hu64 *max_sectors}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h/out parameter for the result native max addressh]h/out parameter for the result native max address}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjޕubeh}(h]h ]h"]h$]h&]uh1jhj•ubh)}(h**Description**h]j )}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjYubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj•ubj)}(hIPerform an LBA48 or LBA28 native size query upon the device in question. h]h)}(hHPerform an LBA48 or LBA28 native size query upon the device in question.h]hHPerform an LBA48 or LBA28 native size query upon the device in question.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjqubah}(h]h ]h"]h$]h&]uh1jhjhMhj•ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj•ubh)}(hO0 on success, -EACCES if command is aborted by the drive. -EIO on other errors.h]hO0 on success, -EACCES if command is aborted by the drive. -EIO on other errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj•ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_set_max_sectors (C function)c.ata_set_max_sectorshNtauh1jhj }hhhNhNubj)}(hhh](j)}(hAint ata_set_max_sectors (struct ata_device *dev, u64 new_sectors)h]j")}(h@int ata_set_max_sectors(struct ata_device *dev, u64 new_sectors)h](j)}(hinth]hint}(hjіhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͖hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj͖hhhjߖhMubj)}(hata_set_max_sectorsh]j[)}(hata_set_max_sectorsh]hata_set_max_sectors}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj͖hhhjߖhMubj)}(h)(struct ata_device *dev, u64 new_sectors)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj,hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj.modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_set_max_sectorsasbuh1hhj ubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 new_sectorsh](h)}(hhh]j[)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jHc.ata_set_max_sectorsasbuh1hhj|ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubj[)}(h new_sectorsh]h new_sectors}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj͖hhhjߖhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjɖhhhjߖhMubah}(h]jĖah ](jjeh"]h$]h&]j j )j huh1jhjߖhMhjƖhhubj)}(hhh]h)}(hSet max sectorsh]hSet max sectors}(hjٗhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj֗hhubah}(h]h ]h"]h$]h&]uh1jhjƖhhhjߖhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXR**Parameters** ``struct ata_device *dev`` target device ``u64 new_sectors`` new max sectors value to set for the device **Description** Set max sectors of **dev** to **new_sectors**. **Return** 0 on success, -EACCES if command is aborted or denied (due to previous non-volatile SET_MAX) by the drive. -EIO on other errors.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h target deviceh]h target device}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h@``u64 new_sectors`` new max sectors value to set for the device h](j)}(h``u64 new_sectors``h]j\)}(hjSh]hu64 new_sectors}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjMubj)}(hhh]h)}(h+new max sectors value to set for the deviceh]h+new max sectors value to set for the device}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(h/Set max sectors of **dev** to **new_sectors**. h]h)}(h.Set max sectors of **dev** to **new_sectors**.h](hSet max sectors of }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh to }(hjhhhNhNubj )}(h**new_sectors**h]h new_sectors}(hj˜hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjژhMhjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h0 on success, -EACCES if command is aborted or denied (due to previous non-volatile SET_MAX) by the drive. -EIO on other errors.h]h0 on success, -EACCES if command is aborted or denied (due to previous non-volatile SET_MAX) by the drive. -EIO on other errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_hpa_resize (C function)c.ata_hpa_resizehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h+int ata_hpa_resize (struct ata_device *dev)h]j")}(h*int ata_hpa_resize(struct ata_device *dev)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM(ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$hhhj6hM(ubj)}(hata_hpa_resizeh]j[)}(hata_hpa_resizeh]hata_hpa_resize}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj6hM(ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjaubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjKsbc.ata_hpa_resizeasbuh1hhjaubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhj$hhhj6hM(ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj6hM(ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj6hM(hjhhubj)}(hhh]h)}(hResize a device with an HPA seth]hResize a device with an HPA set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM(hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hM(ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX@**Parameters** ``struct ata_device *dev`` Device to resize **Description** Read the size of an LBA28 or LBA48 disk with HPA features and resize it if required to the full size of the media. The caller must check the drive has the HPA feature set enabled. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM,hjubj)}(hhh]j)}(h,``struct ata_device *dev`` Device to resize h](j)}(h``struct ata_device *dev``h]j\)}(hj)h]hstruct ata_device *dev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM)hj#ubj)}(hhh]h)}(hDevice to resizeh]hDevice to resize}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM)hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hM)hj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM+hjubj)}(hRead the size of an LBA28 or LBA48 disk with HPA features and resize it if required to the full size of the media. The caller must check the drive has the HPA feature set enabled. h]h)}(hRead the size of an LBA28 or LBA48 disk with HPA features and resize it if required to the full size of the media. The caller must check the drive has the HPA feature set enabled.h]hRead the size of an LBA28 or LBA48 disk with HPA features and resize it if required to the full size of the media. The caller must check the drive has the HPA feature set enabled.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM*hjzubah}(h]h ]h"]h$]h&]uh1jhjhM*hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM.hjubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dump_id (C function) c.ata_dump_idhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h8void ata_dump_id (struct ata_device *dev, const u16 *id)h]j")}(h7void ata_dump_id(struct ata_device *dev, const u16 *id)h](j)}(hvoidh]hvoid}(hjښhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֚hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj֚hhhjhMubj)}(h ata_dump_idh]j[)}(h ata_dump_idh]h ata_dump_id}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj֚hhhjhMubj)}(h'(struct ata_device *dev, const u16 *id)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj7modnameN classnameNjwjz)}j}]jj)}jsjsb c.ata_dump_idasbuh1hhjubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjphhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const u16 *idh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jQ c.ata_dump_idasbuh1hhjubj:)}(h h]h }(hjśhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjӛhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hidh]hid}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj֚hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjҚhhhjhMubah}(h]j͚ah ](jjeh"]h$]h&]j j )j huh1jhjhMhjϚhhubj)}(hhh]h)}(h%IDENTIFY DEVICE info debugging outputh]h%IDENTIFY DEVICE info debugging output}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjϚhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j"j1j"j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` device from which the information is fetched ``const u16 *id`` IDENTIFY DEVICE page to dump **Description** Dump selected 16-bit words from the given IDENTIFY DEVICE page. LOCKING: caller.h](h)}(h**Parameters**h]j )}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj&ubj)}(hhh](j)}(hH``struct ata_device *dev`` device from which the information is fetched h](j)}(h``struct ata_device *dev``h]j\)}(hjKh]hstruct ata_device *dev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjEubj)}(hhh]h)}(h,device from which the information is fetchedh]h,device from which the information is fetched}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjBubj)}(h/``const u16 *id`` IDENTIFY DEVICE page to dump h](j)}(h``const u16 *id``h]j\)}(hjh]h const u16 *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj~ubj)}(hhh]h)}(hIDENTIFY DEVICE page to dumph]hIDENTIFY DEVICE page to dump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj&ubj)}(hQDump selected 16-bit words from the given IDENTIFY DEVICE page. LOCKING: caller.h](h)}(h?Dump selected 16-bit words from the given IDENTIFY DEVICE page.h]h?Dump selected 16-bit words from the given IDENTIFY DEVICE page.}(hjٜhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj՜ubh)}(hLOCKING: caller.h]hLOCKING: caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj՜ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_exec_internal (C function)c.ata_exec_internalhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hunsigned int ata_exec_internal (struct ata_device *dev, struct ata_taskfile *tf, const u8 *cdb, enum dma_data_direction dma_dir, void *buf, unsigned int buflen, unsigned int timeout)h]j")}(hunsigned int ata_exec_internal(struct ata_device *dev, struct ata_taskfile *tf, const u8 *cdb, enum dma_data_direction dma_dir, void *buf, unsigned int buflen, unsigned int timeout)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj+hMubj)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hMubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj+hMubj)}(hata_exec_internalh]j[)}(hata_exec_internalh]hata_exec_internal}(hjZhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj+hMubj)}(h(struct ata_device *dev, struct ata_taskfile *tf, const u8 *cdb, enum dma_data_direction dma_dir, void *buf, unsigned int buflen, unsigned int timeout)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjrubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsj\sbc.ata_exec_internalasbuh1hhjrubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjrubj[)}(hdevh]hdev}(hjϝhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hstruct ata_taskfile *tfh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_taskfileh]h ata_taskfile}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_exec_internalasbuh1hhjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(htfh]htf}(hj?hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(h const u8 *cdbh](j()}(hj(h]hconst}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjTubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubh)}(hhh]j[)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjsubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjxmodnameN classnameNjwjz)}j}]jc.ata_exec_internalasbuh1hhjTubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjTubj[)}(hcdbh]hcdb}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(henum dma_data_direction dma_dirh](j()}(hjh]henum}(hjȞhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjĞubj:)}(h h]h }(hj՞hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjĞubh)}(hhh]j[)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_exec_internalasbuh1hhjĞubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjĞubj[)}(hdma_dirh]hdma_dir}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjĞubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(h void *bufh](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj)}(hjS h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubj[)}(hbufh]hbuf}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hunsigned int buflenh](j)}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjiubj[)}(hbuflenh]hbuflen}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubj)}(hunsigned int timeouth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj̟hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjڟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjnubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj+hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj+hMhjhhubj)}(hhh]h)}(hexecute libata internal commandh]hexecute libata internal command}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j8j1j8j2j3j4uh1jhhhj }hNhNubj6)}(hX}**Parameters** ``struct ata_device *dev`` Device to which the command is sent ``struct ata_taskfile *tf`` Taskfile registers for the command and the result ``const u8 *cdb`` CDB for packet command ``enum dma_data_direction dma_dir`` Data transfer direction of the command ``void *buf`` Data buffer of the command ``unsigned int buflen`` Length of data buffer ``unsigned int timeout`` Timeout in msecs (0 for default) **Description** Executes libata internal command with timeout. **tf** contains the command on entry and the result on return. Timeout and error conditions are reported via the return value. No recovery action is taken after a command times out. It is the caller's duty to clean up after timeout. LOCKING: None. Should be called with kernel context, might sleep. **Return** Zero on success, AC_ERR_* mask on failureh](h)}(h**Parameters**h]j )}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj@ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj<ubj)}(hhh](j)}(h?``struct ata_device *dev`` Device to which the command is sent h](j)}(h``struct ata_device *dev``h]j\)}(hjah]hstruct ata_device *dev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj_ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj[ubj)}(hhh]h)}(h#Device to which the command is senth]h#Device to which the command is sent}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubj)}(hN``struct ata_taskfile *tf`` Taskfile registers for the command and the result h](j)}(h``struct ata_taskfile *tf``h]j\)}(hjh]hstruct ata_taskfile *tf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h1Taskfile registers for the command and the resulth]h1Taskfile registers for the command and the result}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h)``const u8 *cdb`` CDB for packet command h](j)}(h``const u8 *cdb``h]j\)}(hjӠh]h const u8 *cdb}(hjՠhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjѠubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj͠ubj)}(hhh]h)}(hCDB for packet commandh]hCDB for packet command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj͠ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(hK``enum dma_data_direction dma_dir`` Data transfer direction of the command h](j)}(h#``enum dma_data_direction dma_dir``h]j\)}(hj h]henum dma_data_direction dma_dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h&Data transfer direction of the commandh]h&Data transfer direction of the command}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjXubj)}(h)``void *buf`` Data buffer of the command h](j)}(h ``void *buf``h]j\)}(hjEh]h void *buf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjCubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj?ubj)}(hhh]h)}(hData buffer of the commandh]hData buffer of the command}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjXubj)}(h.``unsigned int buflen`` Length of data buffer h](j)}(h``unsigned int buflen``h]j\)}(hj~h]hunsigned int buflen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj|ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjxubj)}(hhh]h)}(hLength of data bufferh]hLength of data buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h:``unsigned int timeout`` Timeout in msecs (0 for default) h](j)}(h``unsigned int timeout``h]j\)}(hjh]hunsigned int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h Timeout in msecs (0 for default)h]h Timeout in msecs (0 for default)}(hjСhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̡hMhj͡ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̡hMhjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj<ubj)}(hX\Executes libata internal command with timeout. **tf** contains the command on entry and the result on return. Timeout and error conditions are reported via the return value. No recovery action is taken after a command times out. It is the caller's duty to clean up after timeout. LOCKING: None. Should be called with kernel context, might sleep. h](h)}(hXExecutes libata internal command with timeout. **tf** contains the command on entry and the result on return. Timeout and error conditions are reported via the return value. No recovery action is taken after a command times out. It is the caller's duty to clean up after timeout.h](h/Executes libata internal command with timeout. }(hj hhhNhNubj )}(h**tf**h]htf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh contains the command on entry and the result on return. Timeout and error conditions are reported via the return value. No recovery action is taken after a command times out. It is the caller’s duty to clean up after timeout.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(hBLOCKING: None. Should be called with kernel context, might sleep.h]hBLOCKING: None. Should be called with kernel context, might sleep.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj<ubh)}(h **Return**h]j )}(hjDh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjBubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj<ubh)}(h)Zero on success, AC_ERR_* mask on failureh]h)Zero on success, AC_ERR_* mask on failure}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_pio_mask_no_iordy (C function)c.ata_pio_mask_no_iordyhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h9u32 ata_pio_mask_no_iordy (const struct ata_device *adev)h]j")}(h8u32 ata_pio_mask_no_iordy(const struct ata_device *adev)h](h)}(hhh]j[)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsata_pio_mask_no_iordysbc.ata_pio_mask_no_iordyasbuh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_pio_mask_no_iordyh]j[)}(hjh]hata_pio_mask_no_iordy}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(const struct ata_device *adev)h]j)}(hconst struct ata_device *adevh](j()}(hj(h]hconst}(hjۢhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjעubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjעubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjעubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjעubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_pio_mask_no_iordyasbuh1hhjעubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjעubj)}(hjS h]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjעubj[)}(hadevh]hadev}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjעubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjӢubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]j j )j huh1jhjhMhj~hhubj)}(hhh]h)}(hReturn the non IORDY maskh]hReturn the non IORDY mask}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjthhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``const struct ata_device *adev`` ATA device **Description** Compute the highest mode possible if we are not using iordy. Return -1 if no iordy mode is available.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h-``const struct ata_device *adev`` ATA device h](j)}(h!``const struct ata_device *adev``h]j\)}(hjh]hconst struct ata_device *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h ATA deviceh]h ATA device}(hjѣhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjͣhMhjΣubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͣhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(heCompute the highest mode possible if we are not using iordy. Return -1 if no iordy mode is available.h]h)}(heCompute the highest mode possible if we are not using iordy. Return -1 if no iordy mode is available.h]heCompute the highest mode possible if we are not using iordy. Return -1 if no iordy mode is available.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_read_id (C function)c.ata_dev_read_idhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h`int ata_dev_read_id (struct ata_device *dev, unsigned int *p_class, unsigned int flags, u16 *id)h]j")}(h_int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class, unsigned int flags, u16 *id)h](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>hhhjPhMubj)}(hata_dev_read_idh]j[)}(hata_dev_read_idh]hata_dev_read_id}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMubj)}(hL(struct ata_device *dev, unsigned int *p_class, unsigned int flags, u16 *id)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjesbc.ata_dev_read_idasbuh1hhj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubj)}(hjS h]h*}(hjˤhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubj[)}(hdevh]hdev}(hjؤhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hunsigned int *p_classh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hp_classh]hp_class}(hj6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj:)}(h h]h }(hj]hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubj)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubj[)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hu16 *idh](h)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_dev_read_idasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjϥhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hidh]hid}(hjܥhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhjPhMhj7hhubj)}(hhh]h)}(h&Read ID data from the specified deviceh]h&Read ID data from the specified device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` target device ``unsigned int *p_class`` pointer to class of the target device (may be changed) ``unsigned int flags`` ATA_READID_* flags ``u16 *id`` buffer to read IDENTIFY data into **Description** Read ID data from the specified device. ATA_CMD_ID_ATA is performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI devices. This function also issues ATA_CMD_INIT_DEV_PARAMS for pre-ATA4 drives. FIXME: ATA_CMD_ID_ATA is optional for early drives and right now we abort if we hit that case. LOCKING: Kernel thread context (may sleep) **Return** 0 on success, -errno otherwise.h](h)}(h**Parameters**h]j )}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj"ubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hjGh]hstruct ata_device *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjAubj)}(hhh]h)}(h target deviceh]h target device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubj)}(hQ``unsigned int *p_class`` pointer to class of the target device (may be changed) h](j)}(h``unsigned int *p_class``h]j\)}(hjh]hunsigned int *p_class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj~ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjzubj)}(hhh]h)}(h6pointer to class of the target device (may be changed)h]h6pointer to class of the target device (may be changed)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubj)}(h*``unsigned int flags`` ATA_READID_* flags h](j)}(h``unsigned int flags``h]j\)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hATA_READID_* flagsh]hATA_READID_* flags}(hjҦhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjΦhMhjϦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΦhMhj>ubj)}(h.``u16 *id`` buffer to read IDENTIFY data into h](j)}(h ``u16 *id``h]j\)}(hjh]hu16 *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h!buffer to read IDENTIFY data intoh]h!buffer to read IDENTIFY data into}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j )}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj"ubj)}(hXORead ID data from the specified device. ATA_CMD_ID_ATA is performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI devices. This function also issues ATA_CMD_INIT_DEV_PARAMS for pre-ATA4 drives. FIXME: ATA_CMD_ID_ATA is optional for early drives and right now we abort if we hit that case. LOCKING: Kernel thread context (may sleep) h](h)}(hRead ID data from the specified device. ATA_CMD_ID_ATA is performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI devices. This function also issues ATA_CMD_INIT_DEV_PARAMS for pre-ATA4 drives.h]hRead ID data from the specified device. ATA_CMD_ID_ATA is performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI devices. This function also issues ATA_CMD_INIT_DEV_PARAMS for pre-ATA4 drives.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjCubh)}(h^FIXME: ATA_CMD_ID_ATA is optional for early drives and right now we abort if we hit that case.h]h^FIXME: ATA_CMD_ID_ATA is optional for early drives and right now we abort if we hit that case.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjCubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjCubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj"ubh)}(h **Return**h]j )}(hj|h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj"ubh)}(h0 on success, -errno otherwise.h]h0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_dev_power_set_standby (C function)c.ata_dev_power_set_standbyhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h7void ata_dev_power_set_standby (struct ata_device *dev)h]j")}(h6void ata_dev_power_set_standby(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjЧhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjϧhMubj)}(hata_dev_power_set_standbyh]j[)}(hata_dev_power_set_standbyh]hata_dev_power_set_standby}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjާubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjϧhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_power_set_standbyasbuh1hhjubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjϧhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjϧhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjϧhMhjhhubj)}(hhh]h)}(h"Set a device power mode to standbyh]h"Set a device power mode to standby}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjϧhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` target device **Description** Issue a STANDBY IMMEDIATE command to set a device power mode to standby. For an HDD device, this spins down the disks. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hj¨h]hstruct ata_device *dev}(hjĨhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h target deviceh]h target device}(hjۨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjרhMhjبubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjרhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hIssue a STANDBY IMMEDIATE command to set a device power mode to standby. For an HDD device, this spins down the disks. LOCKING: Kernel thread context (may sleep).h](h)}(hvIssue a STANDBY IMMEDIATE command to set a device power mode to standby. For an HDD device, this spins down the disks.h]hvIssue a STANDBY IMMEDIATE command to set a device power mode to standby. For an HDD device, this spins down the disks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ata_dev_power_set_active (C function)c.ata_dev_power_set_activehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h6void ata_dev_power_set_active (struct ata_device *dev)h]j")}(h5void ata_dev_power_set_active(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM!ubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjWhhhjihM!ubj)}(hata_dev_power_set_activeh]j[)}(hata_dev_power_set_activeh]hata_dev_power_set_active}(hj|hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhjWhhhjihM!ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsj~sbc.ata_dev_power_set_activeasbuh1hhjubj:)}(h h]h }(hj֩hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjWhhhjihM!ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjShhhjihM!ubah}(h]jNah ](jjeh"]h$]h&]j j )j huh1jhjihM!hjPhhubj)}(hhh]h)}(h!Set a device power mode to activeh]h!Set a device power mode to active}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjihM!ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j3j1j3j2j3j4uh1jhhhj }hNhNubj6)}(hXU**Parameters** ``struct ata_device *dev`` target device **Description** Issue a VERIFY command to enter to ensure that the device is in the active power mode. For a spun-down HDD (standby or idle power mode), the VERIFY command will complete after the disk spins up. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj=h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM%hj7ubj)}(hhh]j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hj\h]hstruct ata_device *dev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjZubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM"hjVubj)}(hhh]h)}(h target deviceh]h target device}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM"hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM"hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM$hj7ubj)}(hIssue a VERIFY command to enter to ensure that the device is in the active power mode. For a spun-down HDD (standby or idle power mode), the VERIFY command will complete after the disk spins up. LOCKING: Kernel thread context (may sleep).h](h)}(hIssue a VERIFY command to enter to ensure that the device is in the active power mode. For a spun-down HDD (standby or idle power mode), the VERIFY command will complete after the disk spins up.h]hIssue a VERIFY command to enter to ensure that the device is in the active power mode. For a spun-down HDD (standby or idle power mode), the VERIFY command will complete after the disk spins up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM#hjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM'hjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_read_log_page (C function)c.ata_read_log_pagehNtauh1jhj }hhhNhNubj)}(hhh](j)}(hiunsigned int ata_read_log_page (struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors)h]j")}(hhunsigned int ata_read_log_page(struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMGubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMGubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMGubj)}(hata_read_log_pageh]j[)}(hata_read_log_pageh]hata_read_log_page}(hj2hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj.ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMGubj)}(hJ(struct ata_device *dev, u8 log, u8 page, void *buf, unsigned int sectors)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjJubj:)}(h h]h }(hj[hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjlhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjiubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjnmodnameN classnameNjwjz)}j}]jj)}jsj4sbc.ata_read_log_pageasbuh1hhjJubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hu8 logh](h)}(hhh]j[)}(hu8h]hu8}(hjëhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjūmodnameN classnameNjwjz)}j}]jc.ata_read_log_pageasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hlogh]hlog}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hu8 pageh](h)}(hhh]j[)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jc.ata_read_log_pageasbuh1hhjubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hpageh]hpage}(hj7hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(h void *bufh](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjLubj)}(hjS h]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLubj[)}(hbufh]hbuf}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hunsigned int sectorsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hsectorsh]hsectors}(hjʬhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMGubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMGubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMGhjhhubj)}(hhh]h)}(hread a specific log pageh]hread a specific log page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMGhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMGubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhj }hNhNubj6)}(hX}**Parameters** ``struct ata_device *dev`` target device ``u8 log`` log to read ``u8 page`` page to read ``void *buf`` buffer to store read page ``unsigned int sectors`` number of sectors to read **Description** Read log page using READ_LOG_EXT command. LOCKING: Kernel thread context (may sleep). **Return** 0 on success, AC_ERR_* mask otherwise.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMKhjubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hj5h]hstruct ata_device *dev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMHhj/ubj)}(hhh]h)}(h target deviceh]h target device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMHhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMHhj,ubj)}(h``u8 log`` log to read h](j)}(h ``u8 log``h]j\)}(hjnh]hu8 log}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMIhjhubj)}(hhh]h)}(h log to readh]h log to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj,ubj)}(h``u8 page`` page to read h](j)}(h ``u8 page``h]j\)}(hjh]hu8 page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMJhjubj)}(hhh]h)}(h page to readh]h page to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhj,ubj)}(h(``void *buf`` buffer to store read page h](j)}(h ``void *buf``h]j\)}(hjh]h void *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjޭubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMKhjڭubj)}(hhh]h)}(hbuffer to store read pageh]hbuffer to store read page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjڭubeh}(h]h ]h"]h$]h&]uh1jhjhMKhj,ubj)}(h3``unsigned int sectors`` number of sectors to read h](j)}(h``unsigned int sectors``h]j\)}(hjh]hunsigned int sectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMLhjubj)}(hhh]h)}(hnumber of sectors to readh]hnumber of sectors to read}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMLhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMLhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMNhjubj)}(hWRead log page using READ_LOG_EXT command. LOCKING: Kernel thread context (may sleep). h](h)}(h)Read log page using READ_LOG_EXT command.h]h)Read log page using READ_LOG_EXT command.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMMhjjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMOhjjubeh}(h]h ]h"]h$]h&]uh1jhj|hMMhjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMRhjubh)}(h&0 on success, AC_ERR_* mask otherwise.h]h&0 on success, AC_ERR_* mask otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_configure (C function)c.ata_dev_configurehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h.int ata_dev_configure (struct ata_device *dev)h]j")}(h-int ata_dev_configure(struct ata_device *dev)h](j)}(hinth]hint}(hjٮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjծhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjծhhhjhM ubj)}(hata_dev_configureh]j[)}(hata_dev_configureh]hata_dev_configure}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjծhhhjhM ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj#hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj1ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj6modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_configureasbuh1hhjubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjohhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjծhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjѮhhhjhM ubah}(h]j̮ah ](jjeh"]h$]h&]j j )j huh1jhjhM hjήhhubj)}(hhh]h)}(h(Configure the specified ATA/ATAPI deviceh]h(Configure the specified ATA/ATAPI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjήhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX1**Parameters** ``struct ata_device *dev`` Target device to configure **Description** Configure **dev** according to **dev->id**. Generic and low-level driver specific fixups are also applied. LOCKING: Kernel thread context (may sleep) **Return** 0 on success, -errno otherwiseh](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hhh]j)}(h6``struct ata_device *dev`` Target device to configure h](j)}(h``struct ata_device *dev``h]j\)}(hjگh]hstruct ata_device *dev}(hjܯhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjدubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjԯubj)}(hhh]h)}(hTarget device to configureh]hTarget device to configure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjԯubeh}(h]h ]h"]h$]h&]uh1jhjhM hjѯubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hConfigure **dev** according to **dev->id**. Generic and low-level driver specific fixups are also applied. LOCKING: Kernel thread context (may sleep) h](h)}(hkConfigure **dev** according to **dev->id**. Generic and low-level driver specific fixups are also applied.h](h Configure }(hj/hhhNhNubj )}(h**dev**h]hdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubh according to }(hj/hhhNhNubj )}(h **dev->id**h]hdev->id}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubhA. Generic and low-level driver specific fixups are also applied.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hj+ubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hj+ubeh}(h]h ]h"]h$]h&]uh1jhjahM hjubh)}(h **Return**h]j )}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubh)}(h0 on success, -errno otherwiseh]h0 on success, -errno otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#sata_print_link_status (C function)c.sata_print_link_statushNtauh1jhj }hhhNhNubj)}(hhh](j)}(h3void sata_print_link_status (struct ata_link *link)h]j")}(h2void sata_print_link_status(struct ata_link *link)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM ubj:)}(h h]h }(hjͰhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj̰hM ubj)}(hsata_print_link_statush]j[)}(hsata_print_link_statush]hsata_print_link_status}(hj߰hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj۰ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj̰hM ubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.sata_print_link_statusasbuh1hhjubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj̰hM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj̰hM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj̰hM hjhhubj)}(hhh]h)}(hPrint SATA link statush]hPrint SATA link status}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hj{hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj̰hM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_link *link`` SATA link to printk link status about **Description** This function prints link speed and status of a SATA link. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hhh]j)}(h@``struct ata_link *link`` SATA link to printk link status about h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hhh]h)}(h%SATA link to printk link status abouth]h%SATA link to printk link status about}(hjرhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԱhM hjձubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԱhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hJThis function prints link speed and status of a SATA link. LOCKING: None.h](h)}(h:This function prints link speed and status of a SATA link.h]h:This function prints link speed and status of a SATA link.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_timing_cycle2mode (C function)c.ata_timing_cycle2modehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h=u8 ata_timing_cycle2mode (unsigned int xfer_shift, int cycle)h]j")}(hhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhj|hM$ ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jYj1jYj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``unsigned int xfer_shift`` ATA_SHIFT_* value for transfer type to examine. ``int cycle`` cycle duration in ns **Description** Return matching xfer mode for **cycle**. The returned mode is of the transfer type specified by **xfer_shift**. If **cycle** is too slow for **xfer_shift**, 0xff is returned. If **cycle** is faster than the fastest known mode, the fasted mode is returned. LOCKING: None. **Return** Matching xfer_mode, 0xff if no match found.h](h)}(h**Parameters**h]j )}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM( hj]ubj)}(hhh](j)}(hL``unsigned int xfer_shift`` ATA_SHIFT_* value for transfer type to examine. h](j)}(h``unsigned int xfer_shift``h]j\)}(hjh]hunsigned int xfer_shift}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM% hj|ubj)}(hhh]h)}(h/ATA_SHIFT_* value for transfer type to examine.h]h/ATA_SHIFT_* value for transfer type to examine.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM% hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM% hjyubj)}(h#``int cycle`` cycle duration in ns h](j)}(h ``int cycle``h]j\)}(hjh]h int cycle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM& hjubj)}(hhh]h)}(hcycle duration in nsh]hcycle duration in ns}(hjԳhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjгhM& hjѳubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjгhM& hjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM( hj]ubj)}(hXReturn matching xfer mode for **cycle**. The returned mode is of the transfer type specified by **xfer_shift**. If **cycle** is too slow for **xfer_shift**, 0xff is returned. If **cycle** is faster than the fastest known mode, the fasted mode is returned. LOCKING: None. h](h)}(hXReturn matching xfer mode for **cycle**. The returned mode is of the transfer type specified by **xfer_shift**. If **cycle** is too slow for **xfer_shift**, 0xff is returned. If **cycle** is faster than the fastest known mode, the fasted mode is returned.h](hReturn matching xfer mode for }(hjhhhNhNubj )}(h **cycle**h]hcycle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh:. The returned mode is of the transfer type specified by }(hjhhhNhNubj )}(h**xfer_shift**h]h xfer_shift}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh. If }(hjhhhNhNubj )}(h **cycle**h]hcycle}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is too slow for }(hjhhhNhNubj )}(h**xfer_shift**h]h xfer_shift}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh, 0xff is returned. If }(hjhhhNhNubj )}(h **cycle**h]hcycle}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhD is faster than the fastest known mode, the fasted mode is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM' hj ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM, hj ubeh}(h]h ]h"]h$]h&]uh1jhjxhM' hj]ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM/ hj]ubh)}(h+Matching xfer_mode, 0xff if no match found.h]h+Matching xfer_mode, 0xff if no match found.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM0 hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ata_down_xfermask_limit (C function)c.ata_down_xfermask_limithNtauh1jhj }hhhNhNubj)}(hhh](j)}(hFint ata_down_xfermask_limit (struct ata_device *dev, unsigned int sel)h]j")}(hEint ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel)h](j)}(hinth]hint}(hjմhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѴhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMX ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjѴhhhjhMX ubj)}(hata_down_xfermask_limith]j[)}(hata_down_xfermask_limith]hata_down_xfermask_limit}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjѴhhhjhMX ubj)}(h*(struct ata_device *dev, unsigned int sel)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj-ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj2modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_down_xfermask_limitasbuh1hhjubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjkhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned int selh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hselh]hsel}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjѴhhhjhMX ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjʹhhhjhMX ubah}(h]jȴah ](jjeh"]h$]h&]j j )j huh1jhjhMX hjʴhhubj)}(hhh]h)}(hadjust dev xfer masks downwardh]hadjust dev xfer masks downward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMX hjhhubah}(h]h ]h"]h$]h&]uh1jhjʴhhhjhMX ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Device to adjust xfer masks ``unsigned int sel`` ATA_DNXFER_* selector **Description** Adjust xfer masks of **dev** downward. Note that this function does not apply the change. Invoking ata_set_mode() afterwards will apply the limit. LOCKING: Inherited from caller. **Return** 0 on success, negative errno on failureh](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM\ hjubj)}(hhh](j)}(h7``struct ata_device *dev`` Device to adjust xfer masks h](j)}(h``struct ata_device *dev``h]j\)}(hj'h]hstruct ata_device *dev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMY hj!ubj)}(hhh]h)}(hDevice to adjust xfer masksh]hDevice to adjust xfer masks}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMY hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMY hjubj)}(h+``unsigned int sel`` ATA_DNXFER_* selector h](j)}(h``unsigned int sel``h]j\)}(hj`h]hunsigned int sel}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj^ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMZ hjZubj)}(hhh]h)}(hATA_DNXFER_* selectorh]hATA_DNXFER_* selector}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMZ hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMZ hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM\ hjubj)}(hAdjust xfer masks of **dev** downward. Note that this function does not apply the change. Invoking ata_set_mode() afterwards will apply the limit. LOCKING: Inherited from caller. h](h)}(hAdjust xfer masks of **dev** downward. Note that this function does not apply the change. Invoking ata_set_mode() afterwards will apply the limit.h](hAdjust xfer masks of }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhx downward. Note that this function does not apply the change. Invoking ata_set_mode() afterwards will apply the limit.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM[ hjubh)}(hLOCKING: Inherited from caller.h]hLOCKING: Inherited from caller.}(hjֶhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM_ hjubeh}(h]h ]h"]h$]h&]uh1jhjնhM[ hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMb hjubh)}(h'0 on success, negative errno on failureh]h'0 on success, negative errno on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMc hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_wait_ready (C function)c.ata_wait_readyhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hmint ata_wait_ready (struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link))h]j")}(hlint ata_wait_ready(struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link))h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.hhhj@hMhubj)}(hata_wait_readyh]j[)}(hata_wait_readyh]hata_wait_ready}(hjShhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhj.hhhj@hMhubj)}(hZ(struct ata_link *link, unsigned long deadline, int (*check_ready)(struct ata_link *link))h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjohhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjkubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjUsbc.ata_wait_readyasbuh1hhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubj[)}(hlinkh]hlink}(hjȷhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hunsigned long deadlineh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݷubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjݷubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݷubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjݷubj[)}(hdeadlineh]hdeadline}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjݷubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(h)int (*check_ready)(struct ata_link *link)h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubj)}(hj8Gh]h(}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubj)}(hjS h]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubj[)}(h check_readyh]h check_ready}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj.ubj)}(hjaGh]h)}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubj)}(hj8Gh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj.ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_wait_readyasbuh1hhj.ubj:)}(h h]h }(hj̸hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj.ubj)}(hjS h]h*}(hjڸhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubj[)}(hlinkh]hlink}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj.ubj)}(hjaGh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj@hMhubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj*hhhj@hMhubah}(h]j%ah ](jjeh"]h$]h&]j j )j huh1jhj@hMhhj'hhubj)}(hhh]h)}(hwait for link to become readyh]hwait for link to become ready}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hMhubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j6j1j6j2j3j4uh1jhhhj }hNhNubj6)}(hX|**Parameters** ``struct ata_link *link`` link to be waited on ``unsigned long deadline`` deadline jiffies for the operation ``int (*check_ready)(struct ata_link *link)`` callback to check link readiness **Description** Wait for **link** to become ready. **check_ready** should return positive number if **link** is ready, 0 if it isn't, -ENODEV if link doesn't seem to be occupied, other errno for other error conditions. Transient -ENODEV conditions are allowed for ATA_TMOUT_FF_WAIT. LOCKING: EH context. **Return** 0 if **link** is ready before **deadline**; otherwise, -errno.h](h)}(h**Parameters**h]j )}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMlhj:ubj)}(hhh](j)}(h/``struct ata_link *link`` link to be waited on h](j)}(h``struct ata_link *link``h]j\)}(hj_h]hstruct ata_link *link}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj]ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMihjYubj)}(hhh]h)}(hlink to be waited onh]hlink to be waited on}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt#hMihjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMihjVubj)}(h>``unsigned long deadline`` deadline jiffies for the operation h](j)}(h``unsigned long deadline``h]j\)}(hjh]hunsigned long deadline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMjhjubj)}(hhh]h)}(h"deadline jiffies for the operationh]h"deadline jiffies for the operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjVubj)}(hO``int (*check_ready)(struct ata_link *link)`` callback to check link readiness h](j)}(h-``int (*check_ready)(struct ata_link *link)``h]j\)}(hjѹh]h)int (*check_ready)(struct ata_link *link)}(hjӹhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjϹubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMkhj˹ubj)}(hhh]h)}(h callback to check link readinessh]h callback to check link readiness}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhj˹ubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j )}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMmhj:ubj)}(hX#Wait for **link** to become ready. **check_ready** should return positive number if **link** is ready, 0 if it isn't, -ENODEV if link doesn't seem to be occupied, other errno for other error conditions. Transient -ENODEV conditions are allowed for ATA_TMOUT_FF_WAIT. LOCKING: EH context. h](h)}(hWait for **link** to become ready. **check_ready** should return positive number if **link** is ready, 0 if it isn't, -ENODEV if link doesn't seem to be occupied, other errno for other error conditions.h](h Wait for }(hj&hhhNhNubj )}(h**link**h]hlink}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubh to become ready. }(hj&hhhNhNubj )}(h**check_ready**h]h check_ready}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubh" should return positive number if }(hj&hhhNhNubj )}(h**link**h]hlink}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubhr is ready, 0 if it isn’t, -ENODEV if link doesn’t seem to be occupied, other errno for other error conditions.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMlhj"ubh)}(h?Transient -ENODEV conditions are allowed for ATA_TMOUT_FF_WAIT.h]h?Transient -ENODEV conditions are allowed for ATA_TMOUT_FF_WAIT.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMqhj"ubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMthj"ubeh}(h]h ]h"]h$]h&]uh1jhjjhMlhj:ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMwhj:ubh)}(h>0 if **link** is ready before **deadline**; otherwise, -errno.h](h0 if }(hjhhhNhNubj )}(h**link**h]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is ready before }(hjhhhNhNubj )}(h **deadline**h]hdeadline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh; otherwise, -errno.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMxhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_dev_same_device (C function)c.ata_dev_same_devicehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h[int ata_dev_same_device (struct ata_device *dev, unsigned int new_class, const u16 *new_id)h]j")}(hZint ata_dev_same_device(struct ata_device *dev, unsigned int new_class, const u16 *new_id)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_dev_same_deviceh]j[)}(hata_dev_same_deviceh]hata_dev_same_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hC(struct ata_device *dev, unsigned int new_class, const u16 *new_id)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj3ubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjUhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjRubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjWmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_same_deviceasbuh1hhj3ubj:)}(h h]h }(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hunsigned int new_classh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjŻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjӻhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(h new_classh]h new_class}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hconst u16 *new_idh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jqc.ata_dev_same_deviceasbuh1hhjubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hnew_idh]hnew_id}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h2Determine whether new ID matches configured deviceh]h2Determine whether new ID matches configured device}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` device to compare against ``unsigned int new_class`` class of the new device ``const u16 *new_id`` IDENTIFY page of the new device **Description** Compare **new_class** and **new_id** against **dev** and determine whether **dev** is the device indicated by **new_class** and **new_id**. LOCKING: None. **Return** 1 if **dev** matches **new_class** and **new_id**, 0 otherwise.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM!hjubj)}(hhh](j)}(h5``struct ata_device *dev`` device to compare against h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hdevice to compare againsth]hdevice to compare against}(hjռhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjѼhMhjҼubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjѼhMhjubj)}(h3``unsigned int new_class`` class of the new device h](j)}(h``unsigned int new_class``h]j\)}(hjh]hunsigned int new_class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hclass of the new deviceh]hclass of the new device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h6``const u16 *new_id`` IDENTIFY page of the new device h](j)}(h``const u16 *new_id``h]j\)}(hj.h]hconst u16 *new_id}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj,ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hj(ubj)}(hhh]h)}(hIDENTIFY page of the new deviceh]hIDENTIFY page of the new device}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjgubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM"hjubj)}(hCompare **new_class** and **new_id** against **dev** and determine whether **dev** is the device indicated by **new_class** and **new_id**. LOCKING: None. h](h)}(hCompare **new_class** and **new_id** against **dev** and determine whether **dev** is the device indicated by **new_class** and **new_id**.h](hCompare }(hjhhhNhNubj )}(h **new_class**h]h new_class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h **new_id**h]hnew_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh against }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and determine whether }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is the device indicated by }(hjhhhNhNubj )}(h **new_class**h]h new_class}(hjӽhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and }(hjhhhNhNubj )}(h **new_id**h]hnew_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM!hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM%hjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM(hjubh)}(h?1 if **dev** matches **new_class** and **new_id**, 0 otherwise.h](h1 if }(hj+hhhNhNubj )}(h**dev**h]hdev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+ubh matches }(hj+hhhNhNubj )}(h **new_class**h]h new_class}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+ubh and }(hj+hhhNhNubj )}(h **new_id**h]hnew_id}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+ubh, 0 otherwise.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM)hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_reread_id (C function)c.ata_dev_reread_idhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hIint ata_dev_reread_id (struct ata_device *dev, unsigned int readid_flags)h]j")}(hHint ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMNubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMNubj)}(hata_dev_reread_idh]j[)}(hata_dev_reread_idh]hata_dev_reread_id}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMNubj)}(h3(struct ata_device *dev, unsigned int readid_flags)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjɾubj:)}(h h]h }(hjھhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjɾubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_reread_idasbuh1hhjɾubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjɾubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjɾubj[)}(hdevh]hdev}(hj&hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjɾubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjžubj)}(hunsigned int readid_flagsh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubj)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubj[)}(h readid_flagsh]h readid_flags}(hjwhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjžubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMNubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMNhjhhubj)}(hhh]h)}(hRe-read IDENTIFY datah]hRe-read IDENTIFY data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMNubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX>**Parameters** ``struct ata_device *dev`` target ATA device ``unsigned int readid_flags`` read ID flags **Description** Re-read IDENTIFY page and make sure **dev** is still attached to the port. LOCKING: Kernel thread context (may sleep) **Return** 0 on success, negative errno otherwiseh](h)}(h**Parameters**h]j )}(hjÿh]h Parameters}(hjſhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMRhjubj)}(hhh](j)}(h-``struct ata_device *dev`` target ATA device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMOhjܿubj)}(hhh]h)}(htarget ATA deviceh]htarget ATA device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjܿubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjٿubj)}(h,``unsigned int readid_flags`` read ID flags h](j)}(h``unsigned int readid_flags``h]j\)}(hjh]hunsigned int readid_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMPhjubj)}(hhh]h)}(h read ID flagsh]h read ID flags}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMPhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMPhjٿubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjTubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMRhjubj)}(hwRe-read IDENTIFY page and make sure **dev** is still attached to the port. LOCKING: Kernel thread context (may sleep) h](h)}(hJRe-read IDENTIFY page and make sure **dev** is still attached to the port.h](h$Re-read IDENTIFY page and make sure }(hjphhhNhNubj )}(h**dev**h]hdev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjpubh is still attached to the port.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMQhjlubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMThjlubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMWhjubh)}(h&0 on success, negative errno otherwiseh]h&0 on success, negative errno otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_revalidate (C function)c.ata_dev_revalidatehNtauh1jhj }hhhNhNubj)}(hhh](j)}(hbint ata_dev_revalidate (struct ata_device *dev, unsigned int new_class, unsigned int readid_flags)h]j")}(haint ata_dev_revalidate(struct ata_device *dev, unsigned int new_class, unsigned int readid_flags)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMoubj)}(hata_dev_revalidateh]j[)}(hata_dev_revalidateh]hata_dev_revalidate}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMoubj)}(hK(struct ata_device *dev, unsigned int new_class, unsigned int readid_flags)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj&ubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjHhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjEubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjJmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_revalidateasbuh1hhj&ubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&ubj)}(hjS h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj&ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hunsigned int new_classh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(h new_classh]h new_class}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubj)}(hunsigned int readid_flagsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(h readid_flagsh]h readid_flags}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMoubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMoubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMohjhhubj)}(hhh]h)}(hRevalidate ATA deviceh]hRevalidate ATA device}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMohjLhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMoubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jgj1jgj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` device to revalidate ``unsigned int new_class`` new class code ``unsigned int readid_flags`` read ID flags **Description** Re-read IDENTIFY page, make sure **dev** is still attached to the port and reconfigure it according to the new IDENTIFY page. LOCKING: Kernel thread context (may sleep) **Return** 0 on success, negative errno otherwiseh](h)}(h**Parameters**h]j )}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j hjoubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMshjkubj)}(hhh](j)}(h0``struct ata_device *dev`` device to revalidate h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMphjubj)}(hhh]h)}(hdevice to revalidateh]hdevice to revalidate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMphjubj)}(h*``unsigned int new_class`` new class code h](j)}(h``unsigned int new_class``h]j\)}(hjh]hunsigned int new_class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMqhjubj)}(hhh]h)}(hnew class codeh]hnew class code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h,``unsigned int readid_flags`` read ID flags h](j)}(h``unsigned int readid_flags``h]j\)}(hjh]hunsigned int readid_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMrhjubj)}(hhh]h)}(h read ID flagsh]h read ID flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]j )}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMthjkubj)}(hRe-read IDENTIFY page, make sure **dev** is still attached to the port and reconfigure it according to the new IDENTIFY page. LOCKING: Kernel thread context (may sleep) h](h)}(h}Re-read IDENTIFY page, make sure **dev** is still attached to the port and reconfigure it according to the new IDENTIFY page.h](h!Re-read IDENTIFY page, make sure }(hjWhhhNhNubj )}(h**dev**h]hdev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjWubhU is still attached to the port and reconfigure it according to the new IDENTIFY page.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMshjSubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMvhjSubeh}(h]h ]h"]h$]h&]uh1jhjwhMshjkubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMyhjkubh)}(h&0 on success, negative errno otherwiseh]h&0 on success, negative errno otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMzhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_is_40wire (C function)c.ata_is_40wirehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h*int ata_is_40wire (struct ata_device *dev)h]j")}(h)int ata_is_40wire(struct ata_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(h ata_is_40wireh]j[)}(h ata_is_40wireh]h ata_is_40wire}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj/hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj,ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj1modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_is_40wireasbuh1hhj ubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hdevh]hdev}(hjjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hcheck drive side detectionh]hcheck drive side detection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` device **Description** Perform drive side detection decoding, allowing for device vendors who can't follow the documentation.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h"``struct ata_device *dev`` device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hfPerform drive side detection decoding, allowing for device vendors who can't follow the documentation.h]h)}(hfPerform drive side detection decoding, allowing for device vendors who can't follow the documentation.h]hhPerform drive side detection decoding, allowing for device vendors who can’t follow the documentation.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj&ubah}(h]h ]h"]h$]h&]uh1jhj8hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcable_is_40wire (C function)c.cable_is_40wirehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h)int cable_is_40wire (struct ata_port *ap)h]j")}(h(int cable_is_40wire(struct ata_port *ap)h](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[hhhjmhMubj)}(hcable_is_40wireh]j[)}(hcable_is_40wireh]hcable_is_40wire}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj|ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhjmhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.cable_is_40wireasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj[hhhjmhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjWhhhjmhMubah}(h]jRah ](jjeh"]h$]h&]j j )j huh1jhjmhMhjThhubj)}(hhh]h)}(h40/80/SATA deciderh]h40/80/SATA decider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjThhhjmhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j7j1j7j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` port to consider **Description** This function encapsulates the policy for speed management in one place. At the moment we don't cache the result but there is a good case for setting ap->cbl to the result when we are called with unknown cables (and figuring out if it impacts hotplug at all). Return 1 if the cable appears to be 40 wire.h](h)}(h**Parameters**h]j )}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj;ubj)}(hhh]j)}(h)``struct ata_port *ap`` port to consider h](j)}(h``struct ata_port *ap``h]j\)}(hj`h]hstruct ata_port *ap}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj^ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjZubj)}(hhh]h)}(hport to considerh]hport to consider}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj;ubj)}(hX1This function encapsulates the policy for speed management in one place. At the moment we don't cache the result but there is a good case for setting ap->cbl to the result when we are called with unknown cables (and figuring out if it impacts hotplug at all). Return 1 if the cable appears to be 40 wire.h](h)}(hXThis function encapsulates the policy for speed management in one place. At the moment we don't cache the result but there is a good case for setting ap->cbl to the result when we are called with unknown cables (and figuring out if it impacts hotplug at all).h]hXThis function encapsulates the policy for speed management in one place. At the moment we don’t cache the result but there is a good case for setting ap->cbl to the result when we are called with unknown cables (and figuring out if it impacts hotplug at all).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h,Return 1 if the cable appears to be 40 wire.h]h,Return 1 if the cable appears to be 40 wire.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_xfermask (C function)c.ata_dev_xfermaskhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h.void ata_dev_xfermask (struct ata_device *dev)h]j")}(h-void ata_dev_xfermask(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_dev_xfermaskh]j[)}(hata_dev_xfermaskh]hata_dev_xfermask}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj6hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2ubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjVmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_xfermaskasbuh1hhj2ubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h.Compute supported xfermask of the given deviceh]h.Compute supported xfermask of the given device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX=**Parameters** ``struct ata_device *dev`` Device to compute xfermask for **Description** Compute supported xfermask of **dev** and store it in dev->*_mask. This function is responsible for applying all known limits including host controller limits, device quirks, etc... LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h:``struct ata_device *dev`` Device to compute xfermask for h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hDevice to compute xfermask forh]hDevice to compute xfermask for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hCompute supported xfermask of **dev** and store it in dev->*_mask. This function is responsible for applying all known limits including host controller limits, device quirks, etc... LOCKING: None.h](h)}(hCompute supported xfermask of **dev** and store it in dev->*_mask. This function is responsible for applying all known limits including host controller limits, device quirks, etc...h](hCompute supported xfermask of }(hjOhhhNhNubj )}(h**dev**h]hdev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjOubh and store it in dev->*_mask. This function is responsible for applying all known limits including host controller limits, device quirks, etc...}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjKubh)}(hLOCKING: None.h]hLOCKING: None.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjKubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_dev_set_xfermode (C function)c.ata_dev_set_xfermodehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h:unsigned int ata_dev_set_xfermode (struct ata_device *dev)h]j")}(h9unsigned int ata_dev_set_xfermode(struct ata_device *dev)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM0ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM0ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM0ubj)}(hata_dev_set_xfermodeh]j[)}(hata_dev_set_xfermodeh]hata_dev_set_xfermode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM0ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_set_xfermodeasbuh1hhjubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM0ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM0hjhhubj)}(hhh]h)}(h&Issue SET FEATURES - XFER MODE commandh]h&Issue SET FEATURES - XFER MODE command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM0hj~hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Device to which command will be sent **Description** Issue SET FEATURES - XFER MODE command to device **dev** on port **ap**. LOCKING: PCI/etc. bus probe sem. **Return** 0 on success, AC_ERR_* mask otherwise.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM4hjubj)}(hhh]j)}(h@``struct ata_device *dev`` Device to which command will be sent h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM1hjubj)}(hhh]h)}(h$Device to which command will be senth]h$Device to which command will be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM3hjubj)}(hkIssue SET FEATURES - XFER MODE command to device **dev** on port **ap**. LOCKING: PCI/etc. bus probe sem. h](h)}(hHIssue SET FEATURES - XFER MODE command to device **dev** on port **ap**.h](h1Issue SET FEATURES - XFER MODE command to device }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh on port }(hjhhhNhNubj )}(h**ap**h]hap}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM2hjubh)}(h LOCKING: PCI/etc. bus probe sem.h]h LOCKING: PCI/etc. bus probe sem.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM5hjubeh}(h]h ]h"]h$]h&]uh1jhjIhM2hjubh)}(h **Return**h]j )}(hjah]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j hj_ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM8hjubh)}(h&0 on success, AC_ERR_* mask otherwise.h]h&0 on success, AC_ERR_* mask otherwise.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_dev_init_params (C function)c.ata_dev_init_paramshNtauh1jhj }hhhNhNubj)}(hhh](j)}(hQunsigned int ata_dev_init_params (struct ata_device *dev, u16 heads, u16 sectors)h]j")}(hPunsigned int ata_dev_init_params(struct ata_device *dev, u16 heads, u16 sectors)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_dev_init_paramsh]j[)}(hata_dev_init_paramsh]hata_dev_init_params}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h0(struct ata_device *dev, u16 heads, u16 sectors)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_dev_init_paramsasbuh1hhjubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjXhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 headsh](h)}(hhh]j[)}(hu16h]hu16}(hjthhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjvmodnameN classnameNjwjz)}j}]j9c.ata_dev_init_paramsasbuh1hhjmubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj[)}(hheadsh]hheads}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u16 sectorsh](h)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j9c.ata_dev_init_paramsasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hsectorsh]hsectors}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hIssue INIT DEV PARAMS commandh]hIssue INIT DEV PARAMS command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j*j1j*j2j3j4uh1jhhhj }hNhNubj6)}(hX<**Parameters** ``struct ata_device *dev`` Device to which command will be sent ``u16 heads`` Number of heads (taskfile parameter) ``u16 sectors`` Number of sectors (taskfile parameter) **Description** LOCKING: Kernel thread context (may sleep) **Return** 0 on success, AC_ERR_* mask otherwise.h](h)}(h**Parameters**h]j )}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj2ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj.ubj)}(hhh](j)}(h@``struct ata_device *dev`` Device to which command will be sent h](j)}(h``struct ata_device *dev``h]j\)}(hjSh]hstruct ata_device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjMubj)}(hhh]h)}(h$Device to which command will be senth]h$Device to which command will be sent}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubj)}(h3``u16 heads`` Number of heads (taskfile parameter) h](j)}(h ``u16 heads``h]j\)}(hjh]h u16 heads}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h$Number of heads (taskfile parameter)h]h$Number of heads (taskfile parameter)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h7``u16 sectors`` Number of sectors (taskfile parameter) h](j)}(h``u16 sectors``h]j\)}(hjh]h u16 sectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h&Number of sectors (taskfile parameter)h]h&Number of sectors (taskfile parameter)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj.ubj)}(h+LOCKING: Kernel thread context (may sleep) h]h)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubah}(h]h ]h"]h$]h&]uh1jhj(hMhj.ubh)}(h **Return**h]j )}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj.ubh)}(h&0 on success, AC_ERR_* mask otherwise.h]h&0 on success, AC_ERR_* mask otherwise.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jatapi_check_dma (C function)c.atapi_check_dmahNtauh1jhj }hhhNhNubj)}(hhh](j)}(h/int atapi_check_dma (struct ata_queued_cmd *qc)h]j")}(h.int atapi_check_dma(struct ata_queued_cmd *qc)h](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhMubj)}(hatapi_check_dmah]j[)}(hatapi_check_dmah]hatapi_check_dma}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.atapi_check_dmaasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1jhjhMhjkhhubj)}(hhh]h)}(h(Check whether ATAPI DMA can be supportedh]h(Check whether ATAPI DMA can be supported}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jNj1jNj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Metadata associated with taskfile to check **Description** Allow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command. LOCKING: spin_lock_irqsave(host lock) **Return** 0 when ATAPI DMA can be used nonzero otherwiseh](h)}(h**Parameters**h]j )}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjVubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjRubj)}(hhh]j)}(hI``struct ata_queued_cmd *qc`` Metadata associated with taskfile to check h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjwh]hstruct ata_queued_cmd *qc}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjuubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjqubj)}(hhh]h)}(h*Metadata associated with taskfile to checkh]h*Metadata associated with taskfile to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjRubj)}(hAllow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command. LOCKING: spin_lock_irqsave(host lock) h](h)}(hAllow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command.h]hAllow low-level driver to filter ATA PACKET commands, returning a status indicating whether or not it is OK to use DMA for the supplied PACKET command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjRubh)}(h.0 when ATAPI DMA can be used nonzero otherwiseh]h.0 when ATAPI DMA can be used nonzero otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_sg_init (C function) c.ata_sg_inithNtauh1jhj }hhhNhNubj)}(hhh](j)}(hYvoid ata_sg_init (struct ata_queued_cmd *qc, struct scatterlist *sg, unsigned int n_elem)h]j")}(hXvoid ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, unsigned int n_elem)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj3hhhjEhMubj)}(h ata_sg_inith]j[)}(h ata_sg_inith]h ata_sg_init}(hjXhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhjEhMubj)}(hH(struct ata_queued_cmd *qc, struct scatterlist *sg, unsigned int n_elem)h](j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjthhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjpubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjZsb c.ata_sg_initasbuh1hhjpubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjpubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hstruct scatterlist *sgh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.ata_sg_initasbuh1hhjubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hsgh]hsg}(hj=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hunsigned int n_elemh](j)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj[)}(hn_elemh]hn_elem}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj/hhhjEhMubah}(h]j*ah ](jjeh"]h$]h&]j j )j huh1jhjEhMhj,hhubj)}(hhh]h)}(h,Associate command with scatter-gather table.h]h,Associate command with scatter-gather table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj,hhhjEhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Command to be associated ``struct scatterlist *sg`` Scatter-gather table. ``unsigned int n_elem`` Number of elements in s/g table. **Description** Initialize the data-related elements of queued_cmd **qc** to point to a scatter-gather table **sg**, containing **n_elem** elements. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh](j)}(h7``struct ata_queued_cmd *qc`` Command to be associated h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hCommand to be associatedh]hCommand to be associated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct scatterlist *sg`` Scatter-gather table. h](j)}(h``struct scatterlist *sg``h]j\)}(hj2h]hstruct scatterlist *sg}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj0ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj,ubj)}(hhh]h)}(hScatter-gather table.h]hScatter-gather table.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(h9``unsigned int n_elem`` Number of elements in s/g table. h](j)}(h``unsigned int n_elem``h]j\)}(hjkh]hunsigned int n_elem}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjeubj)}(hhh]h)}(h Number of elements in s/g table.h]h Number of elements in s/g table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hInitialize the data-related elements of queued_cmd **qc** to point to a scatter-gather table **sg**, containing **n_elem** elements. LOCKING: spin_lock_irqsave(host lock)h](h)}(hInitialize the data-related elements of queued_cmd **qc** to point to a scatter-gather table **sg**, containing **n_elem** elements.h](h3Initialize the data-related elements of queued_cmd }(hjhhhNhNubj )}(h**qc**h]hqc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh$ to point to a scatter-gather table }(hjhhhNhNubj )}(h**sg**h]hsg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh , containing }(hjhhhNhNubj )}(h **n_elem**h]hn_elem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh elements.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_sg_clean (C function)c.ata_sg_cleanhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h-void ata_sg_clean (struct ata_queued_cmd *qc)h]j")}(h,void ata_sg_clean(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6hhhjHhMubj)}(h ata_sg_cleanh]j[)}(h ata_sg_cleanh]h ata_sg_clean}(hj[hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjWubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhjHhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjwhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjsubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsj]sbc.ata_sg_cleanasbuh1hhjsubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhjHhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj2hhhjHhMubah}(h]j-ah ](jjeh"]h$]h&]j j )j huh1jhjHhMhj/hhubj)}(hhh]h)}(h(Unmap DMA memory associated with commandh]h(Unmap DMA memory associated with command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj/hhhjHhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` Command containing DMA memory to be released **Description** Unmap all mapped DMA memory associated with this command. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(hK``struct ata_queued_cmd *qc`` Command containing DMA memory to be released h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj;h]hstruct ata_queued_cmd *qc}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj5ubj)}(hhh]h)}(h,Command containing DMA memory to be releasedh]h,Command containing DMA memory to be released}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjtubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(h`Unmap all mapped DMA memory associated with this command. LOCKING: spin_lock_irqsave(host lock)h](h)}(h9Unmap all mapped DMA memory associated with this command.h]h9Unmap all mapped DMA memory associated with this command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_sg_setup (C function)c.ata_sg_setuphNtauh1jhj }hhhNhNubj)}(hhh](j)}(h,int ata_sg_setup (struct ata_queued_cmd *qc)h]j")}(h+int ata_sg_setup(struct ata_queued_cmd *qc)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(h ata_sg_setuph]j[)}(h ata_sg_setuph]h ata_sg_setup}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj/hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj,ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj1modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_sg_setupasbuh1hhj ubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hqch]hqc}(hjjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h;DMA-map the scatter-gather table associated with a command.h]h;DMA-map the scatter-gather table associated with a command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Command with scatter-gather table to be mapped. **Description** DMA-map the scatter-gather table associated with queued_cmd **qc**. LOCKING: spin_lock_irqsave(host lock) **Return** Zero on success, negative on error.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(hN``struct ata_queued_cmd *qc`` Command with scatter-gather table to be mapped. h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(h/Command with scatter-gather table to be mapped.h]h/Command with scatter-gather table to be mapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hkDMA-map the scatter-gather table associated with queued_cmd **qc**. LOCKING: spin_lock_irqsave(host lock) h](h)}(hCDMA-map the scatter-gather table associated with queued_cmd **qc**.h](hhjubj)}(hhh]h)}(hBuffer to swaph]hBuffer to swap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjubj)}(h=``unsigned int buf_words`` Number of 16-bit words in buffer. h](j)}(h``unsigned int buf_words``h]j\)}(hjh]hunsigned int buf_words}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM?hjubj)}(hhh]h)}(h!Number of 16-bit words in buffer.h]h!Number of 16-bit words in buffer.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM?hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMAhjubj)}(hSwap halves of 16-bit words if needed to convert from little-endian byte order to native cpu byte order, or vice-versa. LOCKING: Inherited from caller.h](h)}(hwSwap halves of 16-bit words if needed to convert from little-endian byte order to native cpu byte order, or vice-versa.h]hwSwap halves of 16-bit words if needed to convert from little-endian byte order to native cpu byte order, or vice-versa.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM@hjhubh)}(hLOCKING: Inherited from caller.h]hLOCKING: Inherited from caller.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMDhjhubeh}(h]h ]h"]h$]h&]uh1jhjzhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_qc_free (C function) c.ata_qc_freehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h,void ata_qc_free (struct ata_queued_cmd *qc)h]j")}(h+void ata_qc_free(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMSubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMSubj)}(h ata_qc_freeh]j[)}(h ata_qc_freeh]h ata_qc_free}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMSubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsjsb c.ata_qc_freeasbuh1hhjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMSubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMSubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMShjhhubj)}(hhh]h)}(hfree unused ata_queued_cmdh]hfree unused ata_queued_cmd}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMShjmhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMSubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` Command to complete **Description** Designed to free unused ata_queued_cmd object in case something prevents using it. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMWhjubj)}(hhh]j)}(h2``struct ata_queued_cmd *qc`` Command to complete h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMThjubj)}(hhh]h)}(hCommand to completeh]hCommand to complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMVhjubj)}(hyDesigned to free unused ata_queued_cmd object in case something prevents using it. LOCKING: spin_lock_irqsave(host lock)h](h)}(hRDesigned to free unused ata_queued_cmd object in case something prevents using it.h]hRDesigned to free unused ata_queued_cmd object in case something prevents using it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMUhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMXhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_qc_issue (C function)c.ata_qc_issuehNtauh1jhj }hhhNhNubj)}(hhh](j)}(hBvoid ata_qc_issue (struct ata_port *ap, struct ata_queued_cmd *qc)h]j")}(hAvoid ata_qc_issue(struct ata_port *ap, struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM5ubj:)}(h h]h }(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFhhhjXhM5ubj)}(h ata_qc_issueh]j[)}(h ata_qc_issueh]h ata_qc_issue}(hjkhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjXhM5ubj)}(h0(struct ata_port *ap, struct ata_queued_cmd *qc)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjmsbc.ata_qc_issueasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_qc_issueasbuh1hhjubj:)}(h h]h }(hj5hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjPhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjXhM5ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjBhhhjXhM5ubah}(h]j=ah ](jjeh"]h$]h&]j j )j huh1jhjXhM5hj?hhubj)}(hhh]h)}(hissue taskfile to deviceh]hissue taskfile to device}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM5hjwhhubah}(h]h ]h"]h$]h&]uh1jhj?hhhjXhM5ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port of interest ``struct ata_queued_cmd *qc`` command to issue to device **Description** Prepare an ATA command to submission to device. This includes mapping the data into a DMA-able area, filling in the S/G table, and finally writing the taskfile to hardware, starting the command. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM9hjubj)}(hhh](j)}(h-``struct ata_port *ap`` ATA port of interest h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM6hjubj)}(hhh]h)}(hATA port of interesth]hATA port of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h9``struct ata_queued_cmd *qc`` command to issue to device h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM7hjubj)}(hhh]h)}(hcommand to issue to deviceh]hcommand to issue to device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM7hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM9hjubj)}(hPrepare an ATA command to submission to device. This includes mapping the data into a DMA-able area, filling in the S/G table, and finally writing the taskfile to hardware, starting the command. LOCKING: spin_lock_irqsave(host lock)h](h)}(hPrepare an ATA command to submission to device. This includes mapping the data into a DMA-able area, filling in the S/G table, and finally writing the taskfile to hardware, starting the command.h]hPrepare an ATA command to submission to device. This includes mapping the data into a DMA-able area, filling in the S/G table, and finally writing the taskfile to hardware, starting the command.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM8hjEubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM=hjEubeh}(h]h ]h"]h$]h&]uh1jhjWhM8hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_phys_link_online (C function)c.ata_phys_link_onlinehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h1bool ata_phys_link_online (struct ata_link *link)h]j")}(h0bool ata_phys_link_online(struct ata_link *link)h](j)}(hjVh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_phys_link_onlineh]j[)}(hata_phys_link_onlineh]hata_phys_link_online}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_phys_link_onlineasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h%test whether the given link is onlineh]h%test whether the given link is online}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jdj1jdj2j3j4uh1jhhhj }hNhNubj6)}(hXf**Parameters** ``struct ata_link *link`` ATA link to test **Description** Test whether **link** is online. Note that this function returns 0 if online status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link). LOCKING: None. **Return** True if the port online status is available and online.h](h)}(h**Parameters**h]j )}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j hjlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhubj)}(hhh]j)}(h+``struct ata_link *link`` ATA link to test h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hATA link to testh]hATA link to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhubj)}(hTest whether **link** is online. Note that this function returns 0 if online status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link). LOCKING: None. h](h)}(hTest whether **link** is online. Note that this function returns 0 if online status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link).h](h Test whether }(hjhhhNhNubj )}(h**link**h]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhC is online. Note that this function returns 0 if online status of }(hjhhhNhNubj )}(h**link**h]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhI cannot be obtained, so ata_link_online(link) != !ata_link_offline(link).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubh)}(h **Return**h]j )}(hj,h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhubh)}(h7True if the port online status is available and online.h]h7True if the port online status is available and online.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_phys_link_offline (C function)c.ata_phys_link_offlinehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h2bool ata_phys_link_offline (struct ata_link *link)h]j")}(h1bool ata_phys_link_offline(struct ata_link *link)h](j)}(hjVh]hbool}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmhhhj~hMubj)}(hata_phys_link_offlineh]j[)}(hata_phys_link_offlineh]hata_phys_link_offline}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjmhhhj~hMubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_phys_link_offlineasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjmhhhj~hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjihhhj~hMubah}(h]jdah ](jjeh"]h$]h&]j j )j huh1jhj~hMhjfhhubj)}(hhh]h)}(h&test whether the given link is offlineh]h&test whether the given link is offline}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhjfhhhj~hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jHj1jHj2j3j4uh1jhhhj }hNhNubj6)}(hXj**Parameters** ``struct ata_link *link`` ATA link to test **Description** Test whether **link** is offline. Note that this function returns 0 if offline status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link). LOCKING: None. **Return** True if the port offline status is available and offline.h](h)}(h**Parameters**h]j )}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjLubj)}(hhh]j)}(h+``struct ata_link *link`` ATA link to test h](j)}(h``struct ata_link *link``h]j\)}(hjqh]hstruct ata_link *link}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjkubj)}(hhh]h)}(hATA link to testh]hATA link to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjLubj)}(hTest whether **link** is offline. Note that this function returns 0 if offline status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link). LOCKING: None. h](h)}(hTest whether **link** is offline. Note that this function returns 0 if offline status of **link** cannot be obtained, so ata_link_online(link) != !ata_link_offline(link).h](h Test whether }(hjhhhNhNubj )}(h**link**h]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhE is offline. Note that this function returns 0 if offline status of }(hjhhhNhNubj )}(h**link**h]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhI cannot be obtained, so ata_link_online(link) != !ata_link_offline(link).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjLubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjLubh)}(h9True if the port offline status is available and offline.h]h9True if the port offline status is available and offline.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_init (C function)c.ata_dev_inithNtauh1jhj }hhhNhNubj)}(hhh](j)}(h*void ata_dev_init (struct ata_device *dev)h]j")}(h)void ata_dev_init(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQhhhjchMubj)}(h ata_dev_inith]j[)}(h ata_dev_inith]h ata_dev_init}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjQhhhjchMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjxsbc.ata_dev_initasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjQhhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjMhhhjchMubah}(h]jHah ](jjeh"]h$]h&]j j )j huh1jhjchMhjJhhubj)}(hhh]h)}(h"Initialize an ata_device structureh]h"Initialize an ata_device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjchMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j-j1j-j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` Device structure to initialize **Description** Initialize **dev** in preparation for probing. LOCKING: Inherited from caller.h](h)}(h**Parameters**h]j )}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj1ubj)}(hhh]j)}(h:``struct ata_device *dev`` Device structure to initialize h](j)}(h``struct ata_device *dev``h]j\)}(hjVh]hstruct ata_device *dev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjTubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjPubj)}(hhh]h)}(hDevice structure to initializeh]hDevice structure to initialize}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj1ubj)}(hOInitialize **dev** in preparation for probing. LOCKING: Inherited from caller.h](h)}(h.Initialize **dev** in preparation for probing.h](h Initialize }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh in preparation for probing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(hLOCKING: Inherited from caller.h]hLOCKING: Inherited from caller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_link_init (C function)c.ata_link_inithNtauh1jhj }hhhNhNubj)}(hhh](j)}(hHvoid ata_link_init (struct ata_port *ap, struct ata_link *link, int pmp)h]j")}(hGvoid ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(h ata_link_inith]j[)}(h ata_link_inith]h ata_link_init}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h5(struct ata_port *ap, struct ata_link *link, int pmp)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj:ubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubh)}(hhh]j[)}(hata_porth]hata_port}(hj\hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjYubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj^modnameN classnameNjwjz)}j}]jj)}jsj$sbc.ata_link_initasbuh1hhj:ubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj:ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jxc.ata_link_initasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubj)}(hint pmph](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hpmph]hpmp}(hj<hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h Initialize an ata_link structureh]h Initialize an ata_link structure}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j~j1j~j2j3j4uh1jhhhj }hNhNubj6)}(hX **Parameters** ``struct ata_port *ap`` ATA port link is attached to ``struct ata_link *link`` Link structure to initialize ``int pmp`` Port multiplier port number **Description** Initialize **link**. LOCKING: Kernel thread context (may sleep)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh](j)}(h5``struct ata_port *ap`` ATA port link is attached to h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hATA port link is attached toh]hATA port link is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``struct ata_link *link`` Link structure to initialize h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hLink structure to initializeh]hLink structure to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``int pmp`` Port multiplier port number h](j)}(h ``int pmp``h]j\)}(hjh]hint pmp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hPort multiplier port numberh]hPort multiplier port number}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(h@Initialize **link**. LOCKING: Kernel thread context (may sleep)h](h)}(hInitialize **link**.h](h Initialize }(hjnhhhNhNubj )}(h**link**h]hlink}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjjubh)}(h*LOCKING: Kernel thread context (may sleep)h]h*LOCKING: Kernel thread context (may sleep)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsata_link_init_spd (C function)c.sata_link_init_spdhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h.int sata_link_init_spd (struct ata_link *link)h]j")}(h-int sata_link_init_spd(struct ata_link *link)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hsata_link_init_spdh]j[)}(hsata_link_init_spdh]hsata_link_init_spd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj!modnameN classnameNjwjz)}j}]jj)}jsjsbc.sata_link_init_spdasbuh1hhjubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjZhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hInitialize link->sata_spd_limitLh]hInitialize link->sata_spd_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_link *link`` Link to configure sata_spd_limit for **Description** Initialize ``link->[hw_]sata_spd_limit`` to the currently configured value. LOCKING: Kernel thread context (may sleep). **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hhh]j)}(h?``struct ata_link *link`` Link to configure sata_spd_limit for h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hhh]h)}(h$Link to configure sata_spd_limit forh]h$Link to configure sata_spd_limit for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubj)}(hyInitialize ``link->[hw_]sata_spd_limit`` to the currently configured value. LOCKING: Kernel thread context (may sleep). h](h)}(hKInitialize ``link->[hw_]sata_spd_limit`` to the currently configured value.h](h Initialize }(hjhhhNhNubj\)}(h``link->[hw_]sata_spd_limit``h]hlink->[hw_]sata_spd_limit}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh# to the currently configured value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM hjubeh}(h]h ]h"]h$]h&]uh1jhj:hM hjubh)}(h **Return**h]j )}(hjRh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_finalize_port_ops (C function)c.ata_finalize_port_opshNtauh1jhj }hhhNhNubj)}(hhh](j)}(hinherits is no longer necessary and cleared. Using ATA_OP_NULL, inheriting ops can force a method to NULL. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM%hjsubj)}(hhh]j)}(hD``struct ata_port_operations *ops`` ata_port_operations to finalize h](j)}(h#``struct ata_port_operations *ops``h]j\)}(hjh]hstruct ata_port_operations *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM"hjubj)}(hhh]h)}(hata_port_operations to finalizeh]hata_port_operations to finalize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjsubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM$hjsubj)}(hX9An ata_port_operations can inherit from another ops and that ops can again inherit from another. This can go on as many times as necessary as long as there is no loop in the inheritance chain. Ops tables are finalized when the host is started. NULL or unspecified entries are inherited from the closet ancestor which has the method and the entry is populated with it. After finalization, the ops table directly points to all the methods and ->inherits is no longer necessary and cleared. Using ATA_OP_NULL, inheriting ops can force a method to NULL. LOCKING: None.h](h)}(hAn ata_port_operations can inherit from another ops and that ops can again inherit from another. This can go on as many times as necessary as long as there is no loop in the inheritance chain.h]hAn ata_port_operations can inherit from another ops and that ops can again inherit from another. This can go on as many times as necessary as long as there is no loop in the inheritance chain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM#hjubh)}(hX'Ops tables are finalized when the host is started. NULL or unspecified entries are inherited from the closet ancestor which has the method and the entry is populated with it. After finalization, the ops table directly points to all the methods and ->inherits is no longer necessary and cleared.h]hX'Ops tables are finalized when the host is started. NULL or unspecified entries are inherited from the closet ancestor which has the method and the entry is populated with it. After finalization, the ops table directly points to all the methods and ->inherits is no longer necessary and cleared.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM(hjubh)}(h=Using ATA_OP_NULL, inheriting ops can force a method to NULL.h]h=Using ATA_OP_NULL, inheriting ops can force a method to NULL.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM.hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM0hjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ata_dev_free_resources (C function)c.ata_dev_free_resourceshNtauh1jhj }hhhNhNubj)}(hhh](j)}(h4void ata_dev_free_resources (struct ata_device *dev)h]j")}(h3void ata_dev_free_resources(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMyubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKhhhj]hMyubj)}(hata_dev_free_resourcesh]j[)}(hata_dev_free_resourcesh]hata_dev_free_resources}(hjphhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj]hMyubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjrsbc.ata_dev_free_resourcesasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhj]hMyubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjGhhhj]hMyubah}(h]jBah ](jjeh"]h$]h&]j j )j huh1jhj]hMyhjDhhubj)}(hhh]h)}(hFree a device resourcesh]hFree a device resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMyhj hhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hMyubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j'j1j'j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` Target ATA device **Description** Free resources allocated to support a device features. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM}hj+ubj)}(hhh]j)}(h-``struct ata_device *dev`` Target ATA device h](j)}(h``struct ata_device *dev``h]j\)}(hjPh]hstruct ata_device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjNubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMzhjJubj)}(hhh]h)}(hTarget ATA deviceh]hTarget ATA device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMzhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMzhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM|hj+ubj)}(hcFree resources allocated to support a device features. LOCKING: Kernel thread context (may sleep).h](h)}(h6Free resources allocated to support a device features.h]h6Free resources allocated to support a device features.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM{hjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chM}hjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_detach (C function)c.ata_port_detachhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h*void ata_port_detach (struct ata_port *ap)h]j")}(h)void ata_port_detach(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_port_detachh]j[)}(hata_port_detachh]hata_port_detach}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj"ubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubh)}(hhh]j[)}(hata_porth]hata_port}(hjDhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjAubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jj)}jsj sbc.ata_port_detachasbuh1hhj"ubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubj)}(hjS h]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h0Detach ATA port in preparation of device removalh]h0Detach ATA port in preparation of device removal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXF**Parameters** ``struct ata_port *ap`` ATA port to be detached **Description** Detach all ATA devices and the associated SCSI devices of **ap**; then, remove the associated SCSI host. **ap** is guaranteed to be quiescent on return from this function. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]j)}(h0``struct ata_port *ap`` ATA port to be detached h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hhh]h)}(hATA port to be detachedh]hATA port to be detached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhjubj)}(hDetach all ATA devices and the associated SCSI devices of **ap**; then, remove the associated SCSI host. **ap** is guaranteed to be quiescent on return from this function. LOCKING: Kernel thread context (may sleep).h](h)}(hDetach all ATA devices and the associated SCSI devices of **ap**; then, remove the associated SCSI host. **ap** is guaranteed to be quiescent on return from this function.h](h:Detach all ATA devices and the associated SCSI devices of }(hj?hhhNhNubj )}(h**ap**h]hap}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh*; then, remove the associated SCSI host. }(hj?hhhNhNubj )}(h**ap**h]hap}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubh< is guaranteed to be quiescent on return from this function.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj;ubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:593: ./drivers/ata/libata-core.chMhj;ubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j __ata_ehi_push_desc (C function)c.__ata_ehi_push_deschNtauh1jhj }hhhNhNubj)}(hhh](j)}(hHvoid __ata_ehi_push_desc (struct ata_eh_info *ehi, const char *fmt, ...)h]j")}(hGvoid __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(h__ata_ehi_push_desch]j[)}(h__ata_ehi_push_desch]h__ata_ehi_push_desc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h/(struct ata_eh_info *ehi, const char *fmt, ...)h](j)}(hstruct ata_eh_info *ehih](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_eh_infoh]h ata_eh_info}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.__ata_ehi_push_descasbuh1hhjubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hehih]hehi}(hj=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *fmth](j()}(hj(h]hconst}(hjVhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjRubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj)}(hcharh]hchar}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjRubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjRubj[)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h...h]j)}(h...h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj)}(hhh]h)}(h/push error description without adding separatorh]h/push error description without adding separator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX **Parameters** ``struct ata_eh_info *ehi`` target EHI ``const char *fmt`` printf format string ``...`` variable arguments **Description** Format string according to **fmt** and append it to **ehi->desc**. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh](j)}(h'``struct ata_eh_info *ehi`` target EHI h](j)}(h``struct ata_eh_info *ehi``h]j\)}(hjh]hstruct ata_eh_info *ehi}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(h target EHIh]h target EHI}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubj)}(h)``const char *fmt`` printf format string h](j)}(h``const char *fmt``h]j\)}(hjWh]hconst char *fmt}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjQubj)}(hhh]h)}(hprintf format stringh]hprintf format string}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j\)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hiFormat string according to **fmt** and append it to **ehi->desc**. LOCKING: spin_lock_irqsave(host lock)h](h)}(hBFormat string according to **fmt** and append it to **ehi->desc**.h](hFormat string according to }(hjhhhNhNubj )}(h**fmt**h]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and append it to }(hjhhhNhNubj )}(h **ehi->desc**h]h ehi->desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_ehi_push_desc (C function)c.ata_ehi_push_deschNtauh1jhj }hhhNhNubj)}(hhh](j)}(hFvoid ata_ehi_push_desc (struct ata_eh_info *ehi, const char *fmt, ...)h]j")}(hEvoid ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIhhhj[hKubj)}(hata_ehi_push_desch]j[)}(hata_ehi_push_desch]hata_ehi_push_desc}(hjnhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhj[hKubj)}(h/(struct ata_eh_info *ehi, const char *fmt, ...)h](j)}(hstruct ata_eh_info *ehih](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_eh_infoh]h ata_eh_info}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjpsbc.ata_ehi_push_descasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hehih]hehi}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *fmth](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hfmth]hfmt}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h...h]j)}(hjh]h...}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjEhhhj[hKubah}(h]j@ah ](jjeh"]h$]h&]j j )j huh1jhj[hKhjBhhubj)}(hhh]h)}(h%push error description with separatorh]h%push error description with separator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hKubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXK**Parameters** ``struct ata_eh_info *ehi`` target EHI ``const char *fmt`` printf format string ``...`` variable arguments **Description** Format string according to **fmt** and append it to **ehi->desc**. If **ehi->desc** is not empty, ", " is added in-between. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh](j)}(h'``struct ata_eh_info *ehi`` target EHI h](j)}(h``struct ata_eh_info *ehi``h]j\)}(hjh]hstruct ata_eh_info *ehi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(h target EHIh]h target EHI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h)``const char *fmt`` printf format string h](j)}(h``const char *fmt``h]j\)}(hjh]hconst char *fmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(hprintf format stringh]hprintf format string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j\)}(hj5h]h...}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhj/ubj)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjnubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hFormat string according to **fmt** and append it to **ehi->desc**. If **ehi->desc** is not empty, ", " is added in-between. LOCKING: spin_lock_irqsave(host lock)h](h)}(h{Format string according to **fmt** and append it to **ehi->desc**. If **ehi->desc** is not empty, ", " is added in-between.h](hFormat string according to }(hjhhhNhNubj )}(h**fmt**h]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and append it to }(hjhhhNhNubj )}(h **ehi->desc**h]h ehi->desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh. If }(hjhhhNhNubj )}(h **ehi->desc**h]h ehi->desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh, is not empty, “, “ is added in-between.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_ehi_clear_desc (C function)c.ata_ehi_clear_deschNtauh1jhj }hhhNhNubj)}(hhh](j)}(h1void ata_ehi_clear_desc (struct ata_eh_info *ehi)h]j")}(h0void ata_ehi_clear_desc(struct ata_eh_info *ehi)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(hata_ehi_clear_desch]j[)}(hata_ehi_clear_desch]hata_ehi_clear_desc}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h(struct ata_eh_info *ehi)h]j)}(hstruct ata_eh_info *ehih](j()}(hj+h]hstruct}(hjAhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj=ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubh)}(hhh]j[)}(h ata_eh_infoh]h ata_eh_info}(hj_hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj\ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjamodnameN classnameNjwjz)}j}]jj)}jsj'sbc.ata_ehi_clear_descasbuh1hhj=ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=ubj[)}(hehih]hehi}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj)}(hhh]h)}(hclean error descriptionh]hclean error description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_eh_info *ehi`` target EHI **Description** Clear **ehi->desc**. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]j)}(h'``struct ata_eh_info *ehi`` target EHI h](j)}(h``struct ata_eh_info *ehi``h]j\)}(hjh]hstruct ata_eh_info *ehi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(h target EHIh]h target EHI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(h;Clear **ehi->desc**. LOCKING: spin_lock_irqsave(host lock)h](h)}(hClear **ehi->desc**.h](hClear }(hjZhhhNhNubj )}(h **ehi->desc**h]h ehi->desc}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubh.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjVubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjVubeh}(h]h ]h"]h$]h&]uh1jhjzhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_desc (C function)c.ata_port_deschNtauh1jhj }hhhNhNubj)}(hhh](j)}(h>void ata_port_desc (struct ata_port *ap, const char *fmt, ...)h]j")}(h=void ata_port_desc(struct ata_port *ap, const char *fmt, ...)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhKubj)}(h ata_port_desch]j[)}(h ata_port_desch]h ata_port_desc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhKubj)}(h+(struct ata_port *ap, const char *fmt, ...)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_port_descasbuh1hhjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hconst char *fmth](j()}(hj(h]hconst}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj[ubj:)}(h h]h }(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubj)}(hcharh]hchar}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj[ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubj[)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h...h]j)}(hjh]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhKhjhhubj)}(hhh]h)}(happend port descriptionh]happend port description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` target ATA port ``const char *fmt`` printf format string ``...`` variable arguments **Description** Format string according to **fmt** and append it to port description. If port description is not empty, " " is added in-between. This function is to be used while initializing ata_host. The description is printed on host registration. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh](j)}(h(``struct ata_port *ap`` target ATA port h](j)}(h``struct ata_port *ap``h]j\)}(hj&h]hstruct ata_port *ap}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhj ubj)}(hhh]h)}(htarget ATA porth]htarget ATA port}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjubj)}(h)``const char *fmt`` printf format string h](j)}(h``const char *fmt``h]j\)}(hj_h]hconst char *fmt}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjYubj)}(hhh]h)}(hprintf format stringh]hprintf format string}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthKhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthKhjubj)}(h``...`` variable arguments h](j)}(h``...``h]j\)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubj)}(hFormat string according to **fmt** and append it to port description. If port description is not empty, " " is added in-between. This function is to be used while initializing ata_host. The description is printed on host registration. LOCKING: None.h](h)}(hFormat string according to **fmt** and append it to port description. If port description is not empty, " " is added in-between. This function is to be used while initializing ata_host. The description is printed on host registration.h](hFormat string according to }(hjhhhNhNubj )}(h**fmt**h]hfmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and append it to port description. If port description is not empty, “ “ is added in-between. This function is to be used while initializing ata_host. The description is printed on host registration.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chKhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_pbar_desc (C function)c.ata_port_pbar_deschNtauh1jhj }hhhNhNubj)}(hhh](j)}(hXvoid ata_port_pbar_desc (struct ata_port *ap, int bar, ssize_t offset, const char *name)h]j")}(hWvoid ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset, const char *name)h](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?hhhjQhM ubj)}(hata_port_pbar_desch]j[)}(hata_port_pbar_desch]hata_port_pbar_desc}(hjdhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhjQhM ubj)}(h@(struct ata_port *ap, int bar, ssize_t offset, const char *name)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj|ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjfsbc.ata_port_pbar_descasbuh1hhj|ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj|ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj|ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hint barh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hbarh]hbar}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hssize_t offseth](h)}(hhh]j[)}(hssize_th]hssize_t}(hj*hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj,modnameN classnameNjwjz)}j}]jc.ata_port_pbar_descasbuh1hhj#ubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj#ubj[)}(hoffseth]hoffset}(hjVhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubj)}(hconst char *nameh](j()}(hj(h]hconst}(hjohhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjkubj:)}(h h]h }(hj|hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjkubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubj[)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhjQhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj;hhhjQhM ubah}(h]j6ah ](jjeh"]h$]h&]j j )j huh1jhjQhM hj8hhubj)}(hhh]h)}(happend PCI BAR descriptionh]happend PCI BAR description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjQhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` target ATA port ``int bar`` target PCI BAR ``ssize_t offset`` offset into PCI BAR ``const char *name`` name of the area **Description** If **offset** is negative, this function formats a string which contains the name, address, size and type of the BAR and appends it to the port description. If **offset** is zero or positive, only name and offsetted address is appended. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjubj)}(hhh](j)}(h(``struct ata_port *ap`` target ATA port h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjubj)}(hhh]h)}(htarget ATA porth]htarget ATA port}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubj)}(h``int bar`` target PCI BAR h](j)}(h ``int bar``h]j\)}(hjWh]hint bar}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjQubj)}(hhh]h)}(htarget PCI BARh]htarget PCI BAR}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM hjubj)}(h'``ssize_t offset`` offset into PCI BAR h](j)}(h``ssize_t offset``h]j\)}(hjh]hssize_t offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjubj)}(hhh]h)}(hoffset into PCI BARh]hoffset into PCI BAR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h&``const char *name`` name of the area h](j)}(h``const char *name``h]j\)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjubj)}(hhh]h)}(hname of the areah]hname of the area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hIf **offset** is negative, this function formats a string which contains the name, address, size and type of the BAR and appends it to the port description. If **offset** is zero or positive, only name and offsetted address is appended. LOCKING: None.h](h)}(hIf **offset** is negative, this function formats a string which contains the name, address, size and type of the BAR and appends it to the port description. If **offset** is zero or positive, only name and offsetted address is appended.h](hIf }(hjhhhNhNubj )}(h **offset**h]hoffset}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh is negative, this function formats a string which contains the name, address, size and type of the BAR and appends it to the port description. If }(hjhhhNhNubj )}(h **offset**h]hoffset}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhB is zero or positive, only name and offsetted address is appended.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ata_internal_cmd_timeout (C function)c.ata_internal_cmd_timeouthNtauh1jhj }hhhNhNubj)}(hhh](j)}(hFunsigned int ata_internal_cmd_timeout (struct ata_device *dev, u8 cmd)h]j")}(hEunsigned int ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM?ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM?ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM?ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM?ubj)}(hata_internal_cmd_timeouth]j[)}(hata_internal_cmd_timeouth]hata_internal_cmd_timeout}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM?ubj)}(h (struct ata_device *dev, u8 cmd)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_internal_cmd_timeoutasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 cmdh](h)}(hhh]j[)}(hu8h]hu8}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjVmodnameN classnameNjwjz)}j}]jc.ata_internal_cmd_timeoutasbuh1hhjMubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM?ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj~hhhjhM?ubah}(h]jyah ](jjeh"]h$]h&]j j )j huh1jhjhM?hj{hhubj)}(hhh]h)}(h)determine timeout for an internal commandh]h)determine timeout for an internal command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhM?ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` target device ``u8 cmd`` internal command to be issued **Description** Determine timeout for internal command **cmd** for **dev**. LOCKING: EH context. **Return** Determined timeout.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMChjubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM@hjubj)}(hhh]h)}(h target deviceh]h target device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(h)``u8 cmd`` internal command to be issued h](j)}(h ``u8 cmd``h]j\)}(hj$h]hu8 cmd}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj"ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMAhjubj)}(hhh]h)}(hinternal command to be issuedh]hinternal command to be issued}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMAhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMAhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMChjubj)}(hRDetermine timeout for internal command **cmd** for **dev**. LOCKING: EH context. h](h)}(h;Determine timeout for internal command **cmd** for **dev**.h](h'Determine timeout for internal command }(hjyhhhNhNubj )}(h**cmd**h]hcmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjyubh for }(hjyhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjyubh.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMBhjuubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMDhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMGhjubh)}(hDetermined timeout.h]hDetermined timeout.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ata_internal_cmd_timed_out (C function)c.ata_internal_cmd_timed_outhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h@void ata_internal_cmd_timed_out (struct ata_device *dev, u8 cmd)h]j")}(h?void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMYubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMYubj)}(hata_internal_cmd_timed_outh]j[)}(hata_internal_cmd_timed_outh]hata_internal_cmd_timed_out}(hj)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMYubj)}(h (struct ata_device *dev, u8 cmd)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjAubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj`ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjemodnameN classnameNjwjz)}j}]jj)}jsj+sbc.ata_internal_cmd_timed_outasbuh1hhjAubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hu8 cmdh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_internal_cmd_timed_outasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMYubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMYubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMYhjhhubj)}(hhh]h)}(h)notification for internal command timeouth]h)notification for internal command timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMYhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMYubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j(j1j(j2j3j4uh1jhhhj }hNhNubj6)}(hX[**Parameters** ``struct ata_device *dev`` target device ``u8 cmd`` internal command which timed out **Description** Notify EH that internal command **cmd** for **dev** timed out. This function should be called only for commands whose timeouts are determined using ata_internal_cmd_timeout(). LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj0ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM]hj,ubj)}(hhh](j)}(h)``struct ata_device *dev`` target device h](j)}(h``struct ata_device *dev``h]j\)}(hjQh]hstruct ata_device *dev}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMZhjKubj)}(hhh]h)}(h target deviceh]h target device}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMZhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMZhjHubj)}(h,``u8 cmd`` internal command which timed out h](j)}(h ``u8 cmd``h]j\)}(hjh]hu8 cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM[hjubj)}(hhh]h)}(h internal command which timed outh]h internal command which timed out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM]hj,ubj)}(hNotify EH that internal command **cmd** for **dev** timed out. This function should be called only for commands whose timeouts are determined using ata_internal_cmd_timeout(). LOCKING: EH context.h](h)}(hNotify EH that internal command **cmd** for **dev** timed out. This function should be called only for commands whose timeouts are determined using ata_internal_cmd_timeout().h](h Notify EH that internal command }(hjhhhNhNubj )}(h**cmd**h]hcmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh for }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh} timed out. This function should be called only for commands whose timeouts are determined using ata_internal_cmd_timeout().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM\hjubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM`hjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_acquire (C function)c.ata_eh_acquirehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h)void ata_eh_acquire (struct ata_port *ap)h]j")}(h(void ata_eh_acquire(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjChhhjUhMubj)}(hata_eh_acquireh]j[)}(hata_eh_acquireh]hata_eh_acquire}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjUhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjjsbc.ata_eh_acquireasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubah}(h]h ]h"]h$]h&]jjuh1jhjChhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj?hhhjUhMubah}(h]j:ah ](jjeh"]h$]h&]j j )j huh1jhjUhMhj<hhubj)}(hhh]h)}(hacquire EH ownershiph]hacquire EH ownership}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX9**Parameters** ``struct ata_port *ap`` ATA port to acquire EH ownership for **Description** Acquire EH ownership for **ap**. This is the basic exclusion mechanism for ports sharing a host. Only one port hanging off the same host can claim the ownership of EH. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj#ubj)}(hhh]j)}(h=``struct ata_port *ap`` ATA port to acquire EH ownership for h](j)}(h``struct ata_port *ap``h]j\)}(hjHh]hstruct ata_port *ap}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjBubj)}(hhh]h)}(h$ATA port to acquire EH ownership forh]h$ATA port to acquire EH ownership for}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj#ubj)}(hAcquire EH ownership for **ap**. This is the basic exclusion mechanism for ports sharing a host. Only one port hanging off the same host can claim the ownership of EH. LOCKING: EH context.h](h)}(hAcquire EH ownership for **ap**. This is the basic exclusion mechanism for ports sharing a host. Only one port hanging off the same host can claim the ownership of EH.h](hAcquire EH ownership for }(hjhhhNhNubj )}(h**ap**h]hap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh. This is the basic exclusion mechanism for ports sharing a host. Only one port hanging off the same host can claim the ownership of EH.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_release (C function)c.ata_eh_releasehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h)void ata_eh_release (struct ata_port *ap)h]j")}(h(void ata_eh_release(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_eh_releaseh]j[)}(hata_eh_releaseh]hata_eh_release}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj,ubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubh)}(hhh]j[)}(hata_porth]hata_port}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjKubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjPmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_eh_releaseasbuh1hhj,ubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubj)}(hjS h]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hrelease EH ownershiph]hrelease EH ownership}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port to release EH ownership for **Description** Release EH ownership for **ap** if the caller. The caller must have acquired EH ownership using ata_eh_acquire() previously. LOCKING: EH context.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]j)}(h=``struct ata_port *ap`` ATA port to release EH ownership for h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(h$ATA port to release EH ownership forh]h$ATA port to release EH ownership for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hRelease EH ownership for **ap** if the caller. The caller must have acquired EH ownership using ata_eh_acquire() previously. LOCKING: EH context.h](h)}(h}Release EH ownership for **ap** if the caller. The caller must have acquired EH ownership using ata_eh_acquire() previously.h](hRelease EH ownership for }(hjIhhhNhNubj )}(h**ap**h]hap}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjIubh^ if the caller. The caller must have acquired EH ownership using ata_eh_acquire() previously.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjEubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjEubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_error (C function)c.ata_scsi_errorhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h,void ata_scsi_error (struct Scsi_Host *host)h]j")}(h+void ata_scsi_error(struct Scsi_Host *host)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM&ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM&ubj)}(hata_scsi_errorh]j[)}(hata_scsi_errorh]hata_scsi_error}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM&ubj)}(h(struct Scsi_Host *host)h]j)}(hstruct Scsi_Host *hosth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_errorasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hhosth]hhost}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM&ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM&ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM&hjhhubj)}(hhh]h)}(h!SCSI layer error handler callbackh]h!SCSI layer error handler callback}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM&hj\hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM&ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jwj1jwj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct Scsi_Host *host`` SCSI host on which error occurred **Description** Handles SCSI-layer-thrown error events. LOCKING: Inherited from SCSI layer (none, can sleep) **Return** Zero.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM*hj{ubj)}(hhh]j)}(h=``struct Scsi_Host *host`` SCSI host on which error occurred h](j)}(h``struct Scsi_Host *host``h]j\)}(hjh]hstruct Scsi_Host *host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM'hjubj)}(hhh]h)}(h!SCSI host on which error occurredh]h!SCSI host on which error occurred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM)hj{ubj)}(h^Handles SCSI-layer-thrown error events. LOCKING: Inherited from SCSI layer (none, can sleep) h](h)}(h'Handles SCSI-layer-thrown error events.h]h'Handles SCSI-layer-thrown error events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM(hjubh)}(h4LOCKING: Inherited from SCSI layer (none, can sleep)h]h4LOCKING: Inherited from SCSI layer (none, can sleep)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM*hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hj{ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM-hj{ubh)}(hZero.h]hZero.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM.hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ata_scsi_cmd_error_handler (C function)c.ata_scsi_cmd_error_handlerhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hiint ata_scsi_cmd_error_handler (struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_work_q)h]j")}(hhint ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_work_q)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMMubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\hhhjnhMMubj)}(hata_scsi_cmd_error_handlerh]j[)}(hata_scsi_cmd_error_handlerh]hata_scsi_cmd_error_handler}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj}ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj\hhhjnhMMubj)}(hJ(struct Scsi_Host *host, struct ata_port *ap, struct list_head *eh_work_q)h](j)}(hstruct Scsi_Host *hosth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_cmd_error_handlerasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hhosth]hhost}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(hata_porth]hata_port}(hj-hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj*ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj/modnameN classnameNjwjz)}j}]jc.ata_scsi_cmd_error_handlerasbuh1hhj ubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(haph]hap}(hjfhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct list_head *eh_work_qh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubh)}(hhh]j[)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsi_cmd_error_handlerasbuh1hhj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubj[)}(h eh_work_qh]h eh_work_q}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj\hhhjnhMMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjXhhhjnhMMubah}(h]jSah ](jjeh"]h$]h&]j j )j huh1jhjnhMMhjUhhubj)}(hhh]h)}(h%error callback for a list of commandsh]h%error callback for a list of commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMMhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjnhMMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct Scsi_Host *host`` scsi host containing the port ``struct ata_port *ap`` ATA port within the host ``struct list_head *eh_work_q`` list of commands to process **Description** process the given list of commands and return those finished to the ap->eh_done_q. This function is the first part of the libata error handler which processes a given list of failed commands. Return the number of commands that timed out.h](h)}(h**Parameters**h]j )}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMQhjubj)}(hhh](j)}(h9``struct Scsi_Host *host`` scsi host containing the port h](j)}(h``struct Scsi_Host *host``h]j\)}(hjAh]hstruct Scsi_Host *host}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMNhj;ubj)}(hhh]h)}(hscsi host containing the porth]hscsi host containing the port}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMNhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMNhj8ubj)}(h1``struct ata_port *ap`` ATA port within the host h](j)}(h``struct ata_port *ap``h]j\)}(hjzh]hstruct ata_port *ap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMOhjtubj)}(hhh]h)}(hATA port within the hosth]hATA port within the host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMOhj8ubj)}(h<``struct list_head *eh_work_q`` list of commands to process h](j)}(h``struct list_head *eh_work_q``h]j\)}(hjh]hstruct list_head *eh_work_q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMPhjubj)}(hhh]h)}(hlist of commands to processh]hlist of commands to process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhj8ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMRhjubh)}(hprocess the given list of commands and return those finished to the ap->eh_done_q. This function is the first part of the libata error handler which processes a given list of failed commands.h]hprocess the given list of commands and return those finished to the ap->eh_done_q. This function is the first part of the libata error handler which processes a given list of failed commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMQhjubh)}(h-Return the number of commands that timed out.h]h-Return the number of commands that timed out.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ata_scsi_port_error_handler (C function)c.ata_scsi_port_error_handlerhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hNvoid ata_scsi_port_error_handler (struct Scsi_Host *host, struct ata_port *ap)h]j")}(hMvoid ata_scsi_port_error_handler(struct Scsi_Host *host, struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>hhhjPhMubj)}(hata_scsi_port_error_handlerh]j[)}(hata_scsi_port_error_handlerh]hata_scsi_port_error_handler}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMubj)}(h-(struct Scsi_Host *host, struct ata_port *ap)h](j)}(hstruct Scsi_Host *hosth](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubh)}(hhh]j[)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjesbc.ata_scsi_port_error_handlerasbuh1hhj{ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubj[)}(hhosth]hhost}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsi_port_error_handlerasbuh1hhjubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjHhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhjPhMhj7hhubj)}(hhh]h)}(h#recover the port after the commandsh]h#recover the port after the commands}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct Scsi_Host *host`` SCSI host containing the port ``struct ata_port *ap`` the ATA port **Description** Handle the recovery of the port **ap** after all the commands have been recovered.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh](j)}(h9``struct Scsi_Host *host`` SCSI host containing the port h](j)}(h``struct Scsi_Host *host``h]j\)}(hjh]hstruct Scsi_Host *host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(hSCSI host containing the porth]hSCSI host containing the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``struct ata_port *ap`` the ATA port h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(h the ATA porth]h the ATA port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hRHandle the recovery of the port **ap** after all the commands have been recovered.h](h Handle the recovery of the port }(hj=hhhNhNubj )}(h**ap**h]hap}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=ubh, after all the commands have been recovered.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_wait_eh (C function)c.ata_port_wait_ehhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h+void ata_port_wait_eh (struct ata_port *ap)h]j")}(h*void ata_port_wait_eh(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMHubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjzhhhjhMHubj)}(hata_port_wait_ehh]j[)}(hata_port_wait_ehh]hata_port_wait_eh}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjzhhhjhMHubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_port_wait_ehasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhMHubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjvhhhjhMHubah}(h]jqah ](jjeh"]h$]h&]j j )j huh1jhjhMHhjshhubj)}(hhh]h)}(h-Wait for the currently pending EH to completeh]h-Wait for the currently pending EH to complete}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMHhj;hhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMHubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jVj1jVj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` Port to wait EH for **Description** Wait until the currently pending EH is complete. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMLhjZubj)}(hhh]j)}(h,``struct ata_port *ap`` Port to wait EH for h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj}ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMIhjyubj)}(hhh]h)}(hPort to wait EH forh]hPort to wait EH for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjvubah}(h]h ]h"]h$]h&]uh1jhjZubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMKhjZubj)}(h]Wait until the currently pending EH is complete. LOCKING: Kernel thread context (may sleep).h](h)}(h0Wait until the currently pending EH is complete.h]h0Wait until the currently pending EH is complete.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMJhjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMLhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_set_pending (C function)c.ata_eh_set_pendinghNtauh1jhj }hhhNhNubj)}(hhh](j)}(h=void ata_eh_set_pending (struct ata_port *ap, bool fastdrain)h]j")}(hlock, in the libsas case we need to hold a lock at the ha->level to coordinate these events. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjHubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjDubj)}(hhh]j)}(h/``struct ata_port *ap`` ATA port to end EH for h](j)}(h``struct ata_port *ap``h]j\)}(hjih]hstruct ata_port *ap}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjgubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjcubj)}(hhh]h)}(hATA port to end EH forh]hATA port to end EH for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjDubh)}(hIn the libata object model there is a 1:1 mapping of ata_port to shost, so host fields can be directly manipulated under ap->lock, in the libsas case we need to hold a lock at the ha->level to coordinate these events.h]hIn the libata object model there is a 1:1 mapping of ata_port to shost, so host fields can be directly manipulated under ap->lock, in the libsas case we need to hold a lock at the ha->level to coordinate these events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjDubj)}(h%LOCKING: spin_lock_irqsave(host lock)h]h)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_port_schedule_eh (C function)c.ata_port_schedule_ehhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h/void ata_port_schedule_eh (struct ata_port *ap)h]j")}(h.void ata_port_schedule_eh(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hata_port_schedule_ehh]j[)}(hata_port_schedule_ehh]hata_port_schedule_eh}(hj#hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj;ubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubh)}(hhh]j[)}(hata_porth]hata_port}(hj]hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjZubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj_modnameN classnameNjwjz)}j}]jj)}jsj%sbc.ata_port_schedule_ehasbuh1hhj;ubj:)}(h h]h }(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj)}(hhh]h)}(h$schedule error handling without a qch]h$schedule error handling without a qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` ATA port to schedule EH for **Description** Schedule error handling for **ap**. EH will kick in as soon as all commands are drained. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]j)}(h4``struct ata_port *ap`` ATA port to schedule EH for h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(hATA port to schedule EH forh]hATA port to schedule EH for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hSchedule error handling for **ap**. EH will kick in as soon as all commands are drained. LOCKING: spin_lock_irqsave(host lock)h](h)}(hYSchedule error handling for **ap**. EH will kick in as soon as all commands are drained.h](hSchedule error handling for }(hjXhhhNhNubj )}(h**ap**h]hap}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjXubh7. EH will kick in as soon as all commands are drained.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjTubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjTubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_link_abort (C function)c.ata_link_aborthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h*int ata_link_abort (struct ata_link *link)h]j")}(h)int ata_link_abort(struct ata_link *link)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM5ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM5ubj)}(hata_link_aborth]j[)}(hata_link_aborth]hata_link_abort}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM5ubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_linkh]hata_link}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_link_abortasbuh1hhjubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hlinkh]hlink}(hjDhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM5ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM5hjhhubj)}(hhh]h)}(habort all qc's on the linkh]habort all qc’s on the link}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM5hjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM5ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_link *link`` ATA link to abort qc's for **Description** Abort all active qc's active on **link** and schedule EH. LOCKING: spin_lock_irqsave(host lock) **Return** Number of aborted qc's.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM9hjubj)}(hhh]j)}(h5``struct ata_link *link`` ATA link to abort qc's for h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM6hjubj)}(hhh]h)}(hATA link to abort qc's forh]hATA link to abort qc’s for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM8hjubj)}(haAbort all active qc's active on **link** and schedule EH. LOCKING: spin_lock_irqsave(host lock) h](h)}(h9Abort all active qc's active on **link** and schedule EH.h](h"Abort all active qc’s active on }(hjhhhNhNubj )}(h**link**h]hlink}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and schedule EH.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM7hjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM9hjubeh}(h]h ]h"]h$]h&]uh1jhj$hM7hjubh)}(h **Return**h]j )}(hj<h]hReturn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM<hjubh)}(hNumber of aborted qc's.h]hNumber of aborted qc’s.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM=hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_abort (C function)c.ata_port_aborthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h(int ata_port_abort (struct ata_port *ap)h]j")}(h'int ata_port_abort(struct ata_port *ap)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}hhhjhMGubj)}(hata_port_aborth]j[)}(hata_port_aborth]hata_port_abort}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhjhMGubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_port_abortasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj}hhhjhMGubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjyhhhjhMGubah}(h]jtah ](jjeh"]h$]h&]j j )j huh1jhjhMGhjvhhubj)}(hhh]h)}(habort all qc's on the porth]habort all qc’s on the port}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMGhj>hhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhMGubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jYj1jYj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` ATA port to abort qc's for **Description** Abort all active qc's of **ap** and schedule EH. LOCKING: spin_lock_irqsave(host_set lock) **Return** Number of aborted qc's.h](h)}(h**Parameters**h]j )}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMKhj]ubj)}(hhh]j)}(h3``struct ata_port *ap`` ATA port to abort qc's for h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMHhj|ubj)}(hhh]h)}(hATA port to abort qc's forh]hATA port to abort qc’s for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMJhj]ubj)}(h\Abort all active qc's of **ap** and schedule EH. LOCKING: spin_lock_irqsave(host_set lock) h](h)}(h0Abort all active qc's of **ap** and schedule EH.h](hAbort all active qc’s of }(hjhhhNhNubj )}(h**ap**h]hap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh and schedule EH.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMIhjubh)}(h)LOCKING: spin_lock_irqsave(host_set lock)h]h)LOCKING: spin_lock_irqsave(host_set lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMKhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhj]ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMNhj]ubh)}(hNumber of aborted qc's.h]hNumber of aborted qc’s.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMOhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__ata_port_freeze (C function)c.__ata_port_freezehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h,void __ata_port_freeze (struct ata_port *ap)h]j")}(h+void __ata_port_freeze(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMYubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPhhhjbhMYubj)}(h__ata_port_freezeh]j[)}(h__ata_port_freezeh]h__ata_port_freeze}(hjuhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhMYubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjwsbc.__ata_port_freezeasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhMYubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjLhhhjbhMYubah}(h]jGah ](jjeh"]h$]h&]j j )j huh1jhjbhMYhjIhhubj)}(hhh]h)}(h freeze porth]h freeze port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMYhjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMYubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j,j1j,j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port to freeze **Description** This function is called when HSM violation or some other condition disrupts normal operation of the port. Frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset. ap->ops->freeze() callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj4ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM]hj0ubj)}(hhh]j)}(h+``struct ata_port *ap`` ATA port to freeze h](j)}(h``struct ata_port *ap``h]j\)}(hjUh]hstruct ata_port *ap}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMZhjOubj)}(hhh]h)}(hATA port to freezeh]hATA port to freeze}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMZhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMZhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM\hj0ubj)}(hX This function is called when HSM violation or some other condition disrupts normal operation of the port. Frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset. ap->ops->freeze() callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen. LOCKING: spin_lock_irqsave(host lock)h](h)}(hThis function is called when HSM violation or some other condition disrupts normal operation of the port. Frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset.h]hThis function is called when HSM violation or some other condition disrupts normal operation of the port. Frozen port is not allowed to perform any operation until the port is thawed, which usually follows a successful reset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM[hjubh)}(hap->ops->freeze() callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen.h]hap->ops->freeze() callback can be used for freezing the port hardware-wise (e.g. mask interrupt and stop DMA engine). If a port cannot be frozen hardware-wise, the interrupt handler must ack and clear interrupts unconditionally while the port is frozen.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM`hjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMfhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_port_freeze (C function)c.ata_port_freezehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h)int ata_port_freeze (struct ata_port *ap)h]j")}(h(int ata_port_freeze(struct ata_port *ap)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMuubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hMuubj)}(hata_port_freezeh]j[)}(hata_port_freezeh]hata_port_freeze}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMuubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj6ubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubh)}(hhh]j[)}(hata_porth]hata_port}(hjXhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjUubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjZmodnameN classnameNjwjz)}j}]jj)}jsj sbc.ata_port_freezeasbuh1hhj6ubj:)}(h h]h }(hjxhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6ubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMuubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hMuubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hMuhjhhubj)}(hhh]h)}(habort & freeze porth]habort & freeze port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMuubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hX\**Parameters** ``struct ata_port *ap`` ATA port to freeze **Description** Abort and freeze **ap**. The freeze operation must be called first, because some hardware requires special operations before the taskfile registers are accessible. LOCKING: spin_lock_irqsave(host lock) **Return** Number of aborted commands.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMyhjubj)}(hhh]j)}(h+``struct ata_port *ap`` ATA port to freeze h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMvhjubj)}(hhh]h)}(hATA port to freezeh]hATA port to freeze}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMxhjubj)}(hAbort and freeze **ap**. The freeze operation must be called first, because some hardware requires special operations before the taskfile registers are accessible. LOCKING: spin_lock_irqsave(host lock) h](h)}(hAbort and freeze **ap**. The freeze operation must be called first, because some hardware requires special operations before the taskfile registers are accessible.h](hAbort and freeze }(hjShhhNhNubj )}(h**ap**h]hap}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjSubh. The freeze operation must be called first, because some hardware requires special operations before the taskfile registers are accessible.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMwhjOubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM{hjOubeh}(h]h ]h"]h$]h&]uh1jhjshMwhjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM~hjubh)}(hNumber of aborted commands.h]hNumber of aborted commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_freeze_port (C function)c.ata_eh_freeze_porthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h-void ata_eh_freeze_port (struct ata_port *ap)h]j")}(h,void ata_eh_freeze_port(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_eh_freeze_porth]j[)}(hata_eh_freeze_porth]hata_eh_freeze_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(hata_porth]hata_port}(hj+hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj(ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj-modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_eh_freeze_portasbuh1hhj ubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(haph]hap}(hjfhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hEH helper to freeze porth]hEH helper to freeze port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h|**Parameters** ``struct ata_port *ap`` ATA port to freeze **Description** Freeze **ap**. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]j)}(h+``struct ata_port *ap`` ATA port to freeze h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(hATA port to freezeh]hATA port to freeze}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hFreeze **ap**. LOCKING: None.h](h)}(hFreeze **ap**.h](hFreeze }(hj&hhhNhNubj )}(h**ap**h]hap}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj"ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_thaw_port (C function)c.ata_eh_thaw_porthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h+void ata_eh_thaw_port (struct ata_port *ap)h]j")}(h*void ata_eh_thaw_port(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjxhhhjhMubj)}(hata_eh_thaw_porth]j[)}(hata_eh_thaw_porth]hata_eh_thaw_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjxhhhjhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_eh_thaw_portasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjthhhjhMubah}(h]joah ](jjeh"]h$]h&]j j )j huh1jhjhMhjqhhubj)}(hhh]h)}(hEH helper to thaw porth]hEH helper to thaw port}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jTj1jTj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` ATA port to thaw **Description** Thaw frozen port **ap**. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjXubj)}(hhh]j)}(h)``struct ata_port *ap`` ATA port to thaw h](j)}(h``struct ata_port *ap``h]j\)}(hj}h]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjwubj)}(hhh]h)}(hATA port to thawh]hATA port to thaw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjXubj)}(h(Thaw frozen port **ap**. LOCKING: None.h](h)}(hThaw frozen port **ap**.h](hThaw frozen port }(hjhhhNhNubj )}(h**ap**h]hap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_qc_complete (C function)c.ata_eh_qc_completehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h3void ata_eh_qc_complete (struct ata_queued_cmd *qc)h]j")}(h2void ata_eh_qc_complete(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj7hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$hhhj6hMubj)}(hata_eh_qc_completeh]j[)}(hata_eh_qc_completeh]hata_eh_qc_complete}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjEubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj6hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjaubj:)}(h h]h }(hjrhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjKsbc.ata_eh_qc_completeasbuh1hhjaubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjaubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj6hMhjhhubj)}(hhh]h)}(h&Complete an active ATA command from EHh]h&Complete an active ATA command from EH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` Command to complete **Description** Indicate to the mid and upper layers that an ATA command has completed. To be used from EH.h](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]j)}(h2``struct ata_queued_cmd *qc`` Command to complete h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj)h]hstruct ata_queued_cmd *qc}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj#ubj)}(hhh]h)}(hCommand to completeh]hCommand to complete}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(h\Indicate to the mid and upper layers that an ATA command has completed. To be used from EH.h]h)}(h\Indicate to the mid and upper layers that an ATA command has completed. To be used from EH.h]h\Indicate to the mid and upper layers that an ATA command has completed. To be used from EH.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjzubah}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_qc_retry (C function)c.ata_eh_qc_retryhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h0void ata_eh_qc_retry (struct ata_queued_cmd *qc)h]j")}(h/void ata_eh_qc_retry(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_eh_qc_retryh]j[)}(hata_eh_qc_retryh]hata_eh_qc_retry}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_eh_qc_retryasbuh1hhjubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h.Tell midlayer to retry an ATA command after EHh]h.Tell midlayer to retry an ATA command after EH}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjphhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj }hNhNubj6)}(hXx**Parameters** ``struct ata_queued_cmd *qc`` Command to retry **Description** Indicate to the mid and upper layers that an ATA command should be retried. To be used from EH. SCSI midlayer limits the number of retries to scmd->allowed. scmd->allowed is incremented for commands which get retried due to unrelated failures (qc->err_mask is zero).h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]j)}(h/``struct ata_queued_cmd *qc`` Command to retry h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hhh]h)}(hCommand to retryh]hCommand to retry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubj)}(hX Indicate to the mid and upper layers that an ATA command should be retried. To be used from EH. SCSI midlayer limits the number of retries to scmd->allowed. scmd->allowed is incremented for commands which get retried due to unrelated failures (qc->err_mask is zero).h](h)}(h`Indicate to the mid and upper layers that an ATA command should be retried. To be used from EH.h]h`Indicate to the mid and upper layers that an ATA command should be retried. To be used from EH.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hSCSI midlayer limits the number of retries to scmd->allowed. scmd->allowed is incremented for commands which get retried due to unrelated failures (qc->err_mask is zero).h]hSCSI midlayer limits the number of retries to scmd->allowed. scmd->allowed is incremented for commands which get retried due to unrelated failures (qc->err_mask is zero).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_dev_disable (C function)c.ata_dev_disablehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h-void ata_dev_disable (struct ata_device *dev)h]j")}(h,void ata_dev_disable(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj\hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIhhhj[hMubj)}(hata_dev_disableh]j[)}(hata_dev_disableh]hata_dev_disable}(hjnhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhj[hMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjpsbc.ata_dev_disableasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjEhhhj[hMubah}(h]j@ah ](jjeh"]h$]h&]j j )j huh1jhj[hMhjBhhubj)}(hhh]h)}(hdisable ATA deviceh]hdisable ATA device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j%j1j%j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` ATA device to disable **Description** Disable **dev**. Locking: EH context.h](h)}(h**Parameters**h]j )}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj)ubj)}(hhh]j)}(h1``struct ata_device *dev`` ATA device to disable h](j)}(h``struct ata_device *dev``h]j\)}(hjNh]hstruct ata_device *dev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjHubj)}(hhh]h)}(hATA device to disableh]hATA device to disable}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj)ubj)}(h&Disable **dev**. Locking: EH context.h](h)}(hDisable **dev**.h](hDisable }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubh)}(hLocking: EH context.h]hLocking: EH context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_detach_dev (C function)c.ata_eh_detach_devhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h/void ata_eh_detach_dev (struct ata_device *dev)h]j")}(h.void ata_eh_detach_dev(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhj hMubj)}(hata_eh_detach_devh]j[)}(hata_eh_detach_devh]hata_eh_detach_dev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj hMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj6 hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2 ubj:)}(h h]h }(hjC hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2 ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjT hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQ ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjV modnameN classnameNjwjz)}j}]jj)}jsj sbc.ata_eh_detach_devasbuh1hhj2 ubj:)}(h h]h }(hjt hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2 ubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2 ubj[)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj. ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj hMhjhhubj)}(hhh]h)}(hdetach ATA deviceh]hdetach ATA device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_device *dev`` ATA device to detach **Description** Detach **dev**. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj ubj)}(hhh]j)}(h0``struct ata_device *dev`` ATA device to detach h](j)}(h``struct ata_device *dev``h]j\)}(hj h]hstruct ata_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj ubj)}(hhh]h)}(hATA device to detachh]hATA device to detach}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hj5!h]h Description}(hj7!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3!ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj ubj)}(hDetach **dev**. LOCKING: None.h](h)}(hDetach **dev**.h](hDetach }(hjO!hhhNhNubj )}(h**dev**h]hdev}(hjW!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjO!ubh.}(hjO!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjK!ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjp!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjK!ubeh}(h]h ]h"]h$]h&]uh1jhjo!hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_about_to_do (C function)c.ata_eh_about_to_dohNtauh1jhj }hhhNhNubj)}(hhh](j)}(h\void ata_eh_about_to_do (struct ata_link *link, struct ata_device *dev, unsigned int action)h]j")}(h[void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev, unsigned int action)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM+ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!hhhj!hM+ubj)}(hata_eh_about_to_doh]j[)}(hata_eh_about_to_doh]hata_eh_about_to_do}(hj!hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj!hM+ubj)}(hD(struct ata_link *link, struct ata_device *dev, unsigned int action)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj!hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]j[)}(hata_linkh]hata_link}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj"modnameN classnameNjwjz)}j}]jj)}jsj!sbc.ata_eh_about_to_doasbuh1hhj!ubj:)}(h h]h }(hj "hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjS h]h*}(hj."hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubj[)}(hlinkh]hlink}(hj;"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjT"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjP"ubj:)}(h h]h }(hja"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP"ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjr"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjo"ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjt"modnameN classnameNjwjz)}j}]j"c.ata_eh_about_to_doasbuh1hhjP"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjP"ubj)}(hjS h]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjP"ubj[)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjP"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hunsigned int actionh](j)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubj)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj:)}(h h]h }(hj"hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj"ubj[)}(hactionh]haction}(hj"hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj!hM+ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj!hhhj!hM+ubah}(h]j!ah ](jjeh"]h$]h&]j j )j huh1jhj!hM+hj!hhubj)}(hhh]h)}(habout to perform eh_actionh]habout to perform eh_action}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM+hj##hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hM+ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j>#j1j>#j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_link *link`` target ATA link ``struct ata_device *dev`` target ATA dev for per-dev action (can be NULL) ``unsigned int action`` action about to be performed **Description** Called just before performing EH actions to clear related bits in **link->eh_info** such that eh actions are not unnecessarily repeated. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjH#h]h Parameters}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjF#ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM/hjB#ubj)}(hhh](j)}(h*``struct ata_link *link`` target ATA link h](j)}(h``struct ata_link *link``h]j\)}(hjg#h]hstruct ata_link *link}(hji#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hje#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM,hja#ubj)}(hhh]h)}(htarget ATA linkh]htarget ATA link}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|#hM,hj}#ubah}(h]h ]h"]h$]h&]uh1jhja#ubeh}(h]h ]h"]h$]h&]uh1jhj|#hM,hj^#ubj)}(hK``struct ata_device *dev`` target ATA dev for per-dev action (can be NULL) h](j)}(h``struct ata_device *dev``h]j\)}(hj#h]hstruct ata_device *dev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM-hj#ubj)}(hhh]h)}(h/target ATA dev for per-dev action (can be NULL)h]h/target ATA dev for per-dev action (can be NULL)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM-hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM-hj^#ubj)}(h5``unsigned int action`` action about to be performed h](j)}(h``unsigned int action``h]j\)}(hj#h]hunsigned int action}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM.hj#ubj)}(hhh]h)}(haction about to be performedh]haction about to be performed}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM.hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM.hj^#ubeh}(h]h ]h"]h$]h&]uh1jhjB#ubh)}(h**Description**h]j )}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM0hjB#ubj)}(hCalled just before performing EH actions to clear related bits in **link->eh_info** such that eh actions are not unnecessarily repeated. LOCKING: None.h](h)}(hCalled just before performing EH actions to clear related bits in **link->eh_info** such that eh actions are not unnecessarily repeated.h](hBCalled just before performing EH actions to clear related bits in }(hj.$hhhNhNubj )}(h**link->eh_info**h]h link->eh_info}(hj6$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.$ubh5 such that eh actions are not unnecessarily repeated.}(hj.$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM/hj*$ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjO$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM3hj*$ubeh}(h]h ]h"]h$]h&]uh1jhjN$hM/hjB#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_done (C function) c.ata_eh_donehNtauh1jhj }hhhNhNubj)}(hhh](j)}(hUvoid ata_eh_done (struct ata_link *link, struct ata_device *dev, unsigned int action)h]j")}(hTvoid ata_eh_done(struct ata_link *link, struct ata_device *dev, unsigned int action)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMOubj:)}(h h]h }(hj$hhhNhNubah}(h ]h ]jFah"]h$]h&]uh1j9hj$hhhj$hMOubj)}(h ata_eh_doneh]j[)}(h ata_eh_doneh]h ata_eh_done}(hj$hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$hhhj$hMOubj)}(hD(struct ata_link *link, struct ata_device *dev, unsigned int action)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj$ubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubh)}(hhh]j[)}(hata_linkh]hata_link}(hj$hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj$ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj$modnameN classnameNjwjz)}j}]jj)}jsj$sb c.ata_eh_doneasbuh1hhj$ubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj$ubj)}(hjS h]h*}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubj[)}(hlinkh]hlink}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj3%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj/%ubj:)}(h h]h }(hj@%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/%ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjQ%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjN%ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjS%modnameN classnameNjwjz)}j}]j$ c.ata_eh_doneasbuh1hhj/%ubj:)}(h h]h }(hjo%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/%ubj)}(hjS h]h*}(hj}%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/%ubj[)}(hdevh]hdev}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj/%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hunsigned int actionh](j)}(hunsignedh]hunsigned}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj:)}(h h]h }(hj%hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj[)}(hactionh]haction}(hj%hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhj$hhhj$hMOubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj|$hhhj$hMOubah}(h]jw$ah ](jjeh"]h$]h&]j j )j huh1jhj$hMOhjy$hhubj)}(hhh]h)}(hEH action completeh]hEH action complete}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMOhj&hhubah}(h]h ]h"]h$]h&]uh1jhjy$hhhj$hMOubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j&j1j&j2j3j4uh1jhhhj }hNhNubj6)}(hXc**Parameters** ``struct ata_link *link`` ATA link for which EH actions are complete ``struct ata_device *dev`` target ATA dev for per-dev action (can be NULL) ``unsigned int action`` action just completed **Description** Called right after performing EH actions to clear related bits in **link->eh_context**. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj'&h]h Parameters}(hj)&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%&ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMShj!&ubj)}(hhh](j)}(hE``struct ata_link *link`` ATA link for which EH actions are complete h](j)}(h``struct ata_link *link``h]j\)}(hjF&h]hstruct ata_link *link}(hjH&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjD&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMPhj@&ubj)}(hhh]h)}(h*ATA link for which EH actions are completeh]h*ATA link for which EH actions are complete}(hj_&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[&hMPhj\&ubah}(h]h ]h"]h$]h&]uh1jhj@&ubeh}(h]h ]h"]h$]h&]uh1jhj[&hMPhj=&ubj)}(hK``struct ata_device *dev`` target ATA dev for per-dev action (can be NULL) h](j)}(h``struct ata_device *dev``h]j\)}(hj&h]hstruct ata_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj}&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMQhjy&ubj)}(hhh]h)}(h/target ATA dev for per-dev action (can be NULL)h]h/target ATA dev for per-dev action (can be NULL)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMQhj&ubah}(h]h ]h"]h$]h&]uh1jhjy&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMQhj=&ubj)}(h.``unsigned int action`` action just completed h](j)}(h``unsigned int action``h]j\)}(hj&h]hunsigned int action}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMRhj&ubj)}(hhh]h)}(haction just completedh]haction just completed}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMRhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMRhj=&ubeh}(h]h ]h"]h$]h&]uh1jhj!&ubh)}(h**Description**h]j )}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMThj!&ubj)}(hgCalled right after performing EH actions to clear related bits in **link->eh_context**. LOCKING: None.h](h)}(hWCalled right after performing EH actions to clear related bits in **link->eh_context**.h](hBCalled right after performing EH actions to clear related bits in }(hj 'hhhNhNubj )}(h**link->eh_context**h]hlink->eh_context}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 'ubh.}(hj 'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMShj 'ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMVhj 'ubeh}(h]h ]h"]h$]h&]uh1jhj-'hMShj!&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_err_string (C function)c.ata_err_stringhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h3const char * ata_err_string (unsigned int err_mask)h]j")}(h1const char *ata_err_string(unsigned int err_mask)h](j()}(hj(h]hconst}(hjc'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj_'hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMeubj:)}(h h]h }(hjq'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_'hhhjp'hMeubj)}(hcharh]hchar}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_'hhhjp'hMeubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj_'hhhjp'hMeubj)}(hjS h]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj_'hhhjp'hMeubj)}(hata_err_stringh]j[)}(hata_err_stringh]hata_err_string}(hj'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj_'hhhjp'hMeubj)}(h(unsigned int err_mask)h]j)}(hunsigned int err_maskh](j)}(hunsignedh]hunsigned}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj'ubj[)}(herr_maskh]herr_mask}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(h]h ]h"]h$]h&]jjuh1jhj_'hhhjp'hMeubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj['hhhjp'hMeubah}(h]jV'ah ](jjeh"]h$]h&]j j )j huh1jhjp'hMehjX'hhubj)}(hhh]h)}(h&convert err_mask to descriptive stringh]h&convert err_mask to descriptive string}(hj*(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMehj'(hhubah}(h]h ]h"]h$]h&]uh1jhjX'hhhjp'hMeubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jB(j1jB(j2j3j4uh1jhhhj }hNhNubj6)}(hX=**Parameters** ``unsigned int err_mask`` error mask to convert to string **Description** Convert **err_mask** to descriptive string. Errors are prioritized according to severity and only the most severe error is reported. LOCKING: None. **Return** Descriptive string for **err_mask**h](h)}(h**Parameters**h]j )}(hjL(h]h Parameters}(hjN(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJ(ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMihjF(ubj)}(hhh]j)}(h:``unsigned int err_mask`` error mask to convert to string h](j)}(h``unsigned int err_mask``h]j\)}(hjk(h]hunsigned int err_mask}(hjm(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hji(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMfhje(ubj)}(hhh]h)}(herror mask to convert to stringh]herror mask to convert to string}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMfhj(ubah}(h]h ]h"]h$]h&]uh1jhje(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMfhjb(ubah}(h]h ]h"]h$]h&]uh1jhjF(ubh)}(h**Description**h]j )}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhhjF(ubj)}(hConvert **err_mask** to descriptive string. Errors are prioritized according to severity and only the most severe error is reported. LOCKING: None. h](h)}(hConvert **err_mask** to descriptive string. Errors are prioritized according to severity and only the most severe error is reported.h](hConvert }(hj(hhhNhNubj )}(h **err_mask**h]herr_mask}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubhq to descriptive string. Errors are prioritized according to severity and only the most severe error is reported.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMghj(ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMkhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMghjF(ubh)}(h **Return**h]j )}(hj(h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj(ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMnhjF(ubh)}(h#Descriptive string for **err_mask**h](hDescriptive string for }(hj)hhhNhNubj )}(h **err_mask**h]herr_mask}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMohjF(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jatapi_eh_tur (C function)c.atapi_eh_turhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hCunsigned int atapi_eh_tur (struct ata_device *dev, u8 *r_sense_key)h]j")}(hBunsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key)h](j)}(hunsignedh]hunsigned}(hjK)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjZ)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG)hhhjY)hMubj)}(hinth]hint}(hjh)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG)hhhjY)hMubj:)}(h h]h }(hjv)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjG)hhhjY)hMubj)}(h atapi_eh_turh]j[)}(h atapi_eh_turh]h atapi_eh_tur}(hj)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjG)hhhjY)hMubj)}(h)(struct ata_device *dev, u8 *r_sense_key)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj)modnameN classnameNjwjz)}j}]jj)}jsj)sbc.atapi_eh_turasbuh1hhj)ubj:)}(h h]h }(hj)hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hjS h]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)ubj[)}(hdevh]hdev}(hj)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hu8 *r_sense_keyh](h)}(hhh]j[)}(hu8h]hu8}(hj*hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj*ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj*modnameN classnameNjwjz)}j}]j)c.atapi_eh_turasbuh1hhj*ubj:)}(h h]h }(hj7*hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*ubj)}(hjS h]h*}(hjE*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubj[)}(h r_sense_keyh]h r_sense_key}(hjR*hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhjG)hhhjY)hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjC)hhhjY)hMubah}(h]j>)ah ](jjeh"]h$]h&]j j )j huh1jhjY)hMhj@)hhubj)}(hhh]h)}(hperform ATAPI TEST_UNIT_READYh]hperform ATAPI TEST_UNIT_READY}(hj|*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjy*hhubah}(h]h ]h"]h$]h&]uh1jhj@)hhhjY)hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j*j1j*j2j3j4uh1jhhhj }hNhNubj6)}(hX **Parameters** ``struct ata_device *dev`` target ATAPI device ``u8 *r_sense_key`` out parameter for sense_key **Description** Perform ATAPI TEST_UNIT_READY. LOCKING: EH context (may sleep). **Return** 0 on success, AC_ERR_* mask on failure.h](h)}(h**Parameters**h]j )}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubj)}(hhh](j)}(h/``struct ata_device *dev`` target ATAPI device h](j)}(h``struct ata_device *dev``h]j\)}(hj*h]hstruct ata_device *dev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubj)}(hhh]h)}(htarget ATAPI deviceh]htarget ATAPI device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubj)}(h0``u8 *r_sense_key`` out parameter for sense_key h](j)}(h``u8 *r_sense_key``h]j\)}(hj*h]hu8 *r_sense_key}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubj)}(hhh]h)}(hout parameter for sense_keyh]hout parameter for sense_key}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj +hMhj +ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj +hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j )}(hj1+h]h Description}(hj3+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/+ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubj)}(hAPerform ATAPI TEST_UNIT_READY. LOCKING: EH context (may sleep). h](h)}(hPerform ATAPI TEST_UNIT_READY.h]hPerform ATAPI TEST_UNIT_READY.}(hjK+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjG+ubh)}(h LOCKING: EH context (may sleep).h]h LOCKING: EH context (may sleep).}(hjZ+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjG+ubeh}(h]h ]h"]h$]h&]uh1jhjY+hMhj*ubh)}(h **Return**h]j )}(hjq+h]hReturn}(hjs+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjo+ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubh)}(h'0 on success, AC_ERR_* mask on failure.h]h'0 on success, AC_ERR_* mask on failure.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_eh_decide_disposition (C function)c.ata_eh_decide_dispositionhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hKenum scsi_disposition ata_eh_decide_disposition (struct ata_queued_cmd *qc)h]j")}(hJenum scsi_disposition ata_eh_decide_disposition(struct ata_queued_cmd *qc)h](j()}(hjh]henum}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj+hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj+hMubh)}(hhh]j[)}(hscsi_dispositionh]hscsi_disposition}(hj+hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj+ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj+modnameN classnameNjwjz)}j}]jj)}jsata_eh_decide_dispositionsbc.ata_eh_decide_dispositionasbuh1hhj+hhhj+hMubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj+hMubj)}(hata_eh_decide_dispositionh]j[)}(hj+h]hata_eh_decide_disposition}(hj,hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj#,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj,ubj:)}(h h]h }(hj0,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjA,hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>,ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjC,modnameN classnameNjwjz)}j}]j+c.ata_eh_decide_dispositionasbuh1hhj,ubj:)}(h h]h }(hj_,hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj,ubj)}(hjS h]h*}(hjm,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,ubj[)}(hqch]hqc}(hjz,hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,ubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj+hhhj+hMubah}(h]j+ah ](jjeh"]h$]h&]j j )j huh1jhj+hMhj+hhubj)}(hhh]h)}(h$Disposition a qc based on sense datah]h$Disposition a qc based on sense data}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j,j1j,j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` qc to examine **Description** For a regular SCSI command, the SCSI completion callback (scsi_done()) will call scsi_complete(), which will call scsi_decide_disposition(), which will call scsi_check_sense(). scsi_complete() finally calls scsi_finish_command(). This is fine for SCSI, since any eventual sense data is usually returned in the completion itself (without invoking SCSI EH). However, for a QC, we always need to fetch the sense data explicitly using SCSI EH. A command that is completed via SCSI EH will instead be completed using scsi_eh_flush_done_q(), which will call scsi_finish_command() directly (without ever calling scsi_check_sense()). For a command that went through SCSI EH, it is the responsibility of the SCSI EH strategy handler to call scsi_decide_disposition(), see e.g. how scsi_eh_get_sense() calls scsi_decide_disposition() for SCSI LLDDs that do not get the sense data as part of the completion. Thus, for QC commands that went via SCSI EH, we need to call scsi_check_sense() ourselves, similar to how scsi_eh_get_sense() calls scsi_decide_disposition(), which calls scsi_check_sense(), in order to set the correct SCSI ML byte (if any). LOCKING: EH context. **Return** SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUEh](h)}(h**Parameters**h]j )}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,ubj)}(hhh]j)}(h,``struct ata_queued_cmd *qc`` qc to examine h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj,h]hstruct ata_queued_cmd *qc}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,ubj)}(hhh]h)}(h qc to examineh]h qc to examine}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j )}(hj -h]h Description}(hj"-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,ubj)}(hXFor a regular SCSI command, the SCSI completion callback (scsi_done()) will call scsi_complete(), which will call scsi_decide_disposition(), which will call scsi_check_sense(). scsi_complete() finally calls scsi_finish_command(). This is fine for SCSI, since any eventual sense data is usually returned in the completion itself (without invoking SCSI EH). However, for a QC, we always need to fetch the sense data explicitly using SCSI EH. A command that is completed via SCSI EH will instead be completed using scsi_eh_flush_done_q(), which will call scsi_finish_command() directly (without ever calling scsi_check_sense()). For a command that went through SCSI EH, it is the responsibility of the SCSI EH strategy handler to call scsi_decide_disposition(), see e.g. how scsi_eh_get_sense() calls scsi_decide_disposition() for SCSI LLDDs that do not get the sense data as part of the completion. Thus, for QC commands that went via SCSI EH, we need to call scsi_check_sense() ourselves, similar to how scsi_eh_get_sense() calls scsi_decide_disposition(), which calls scsi_check_sense(), in order to set the correct SCSI ML byte (if any). LOCKING: EH context. h](h)}(hXFor a regular SCSI command, the SCSI completion callback (scsi_done()) will call scsi_complete(), which will call scsi_decide_disposition(), which will call scsi_check_sense(). scsi_complete() finally calls scsi_finish_command(). This is fine for SCSI, since any eventual sense data is usually returned in the completion itself (without invoking SCSI EH). However, for a QC, we always need to fetch the sense data explicitly using SCSI EH.h]hXFor a regular SCSI command, the SCSI completion callback (scsi_done()) will call scsi_complete(), which will call scsi_decide_disposition(), which will call scsi_check_sense(). scsi_complete() finally calls scsi_finish_command(). This is fine for SCSI, since any eventual sense data is usually returned in the completion itself (without invoking SCSI EH). However, for a QC, we always need to fetch the sense data explicitly using SCSI EH.}(hj:-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6-ubh)}(hA command that is completed via SCSI EH will instead be completed using scsi_eh_flush_done_q(), which will call scsi_finish_command() directly (without ever calling scsi_check_sense()).h]hA command that is completed via SCSI EH will instead be completed using scsi_eh_flush_done_q(), which will call scsi_finish_command() directly (without ever calling scsi_check_sense()).}(hjI-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6-ubh)}(hXFor a command that went through SCSI EH, it is the responsibility of the SCSI EH strategy handler to call scsi_decide_disposition(), see e.g. how scsi_eh_get_sense() calls scsi_decide_disposition() for SCSI LLDDs that do not get the sense data as part of the completion.h]hXFor a command that went through SCSI EH, it is the responsibility of the SCSI EH strategy handler to call scsi_decide_disposition(), see e.g. how scsi_eh_get_sense() calls scsi_decide_disposition() for SCSI LLDDs that do not get the sense data as part of the completion.}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6-ubh)}(hThus, for QC commands that went via SCSI EH, we need to call scsi_check_sense() ourselves, similar to how scsi_eh_get_sense() calls scsi_decide_disposition(), which calls scsi_check_sense(), in order to set the correct SCSI ML byte (if any).h]hThus, for QC commands that went via SCSI EH, we need to call scsi_check_sense() ourselves, similar to how scsi_eh_get_sense() calls scsi_decide_disposition(), which calls scsi_check_sense(), in order to set the correct SCSI ML byte (if any).}(hjg-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6-ubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjv-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6-ubeh}(h]h ]h"]h$]h&]uh1jhjH-hMhj,ubh)}(h **Return**h]j )}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,ubh)}(h2SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUEh]h2SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUE}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_eh_request_sense (C function)c.ata_eh_request_sensehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h5bool ata_eh_request_sense (struct ata_queued_cmd *qc)h]j")}(h4bool ata_eh_request_sense(struct ata_queued_cmd *qc)h](j)}(hjVh]hbool}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj-hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-hhhj-hMubj)}(hata_eh_request_senseh]j[)}(hata_eh_request_senseh]hata_eh_request_sense}(hj-hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj-hhhj-hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj.hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj .ubj:)}(h h]h }(hj.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj .ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj,.hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj).ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj..modnameN classnameNjwjz)}j}]jj)}jsj-sbc.ata_eh_request_senseasbuh1hhj .ubj:)}(h h]h }(hjL.hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj .ubj)}(hjS h]h*}(hjZ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj .ubj[)}(hqch]hqc}(hjg.hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj .ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj.ubah}(h]h ]h"]h$]h&]jjuh1jhj-hhhj-hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj-hhhj-hMubah}(h]j-ah ](jjeh"]h$]h&]j j )j huh1jhj-hMhj-hhubj)}(hhh]h)}(hperform REQUEST_SENSE_DATA_EXTh]hperform REQUEST_SENSE_DATA_EXT}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j.j1j.j2j3j4uh1jhhhj }hNhNubj6)}(hXY**Parameters** ``struct ata_queued_cmd *qc`` qc to perform REQUEST_SENSE_SENSE_DATA_EXT to **Description** Perform REQUEST_SENSE_DATA_EXT after the device reported CHECK SENSE. This function is an EH helper. LOCKING: Kernel thread context (may sleep). **Return** true if sense data could be fetched, false otherwise.h](h)}(h**Parameters**h]j )}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.ubj)}(hhh]j)}(hL``struct ata_queued_cmd *qc`` qc to perform REQUEST_SENSE_SENSE_DATA_EXT to h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj.h]hstruct ata_queued_cmd *qc}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.ubj)}(hhh]h)}(h-qc to perform REQUEST_SENSE_SENSE_DATA_EXT toh]h-qc to perform REQUEST_SENSE_SENSE_DATA_EXT to}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j )}(hj /h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj /ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.ubj)}(hPerform REQUEST_SENSE_DATA_EXT after the device reported CHECK SENSE. This function is an EH helper. LOCKING: Kernel thread context (may sleep). h](h)}(hePerform REQUEST_SENSE_DATA_EXT after the device reported CHECK SENSE. This function is an EH helper.h]hePerform REQUEST_SENSE_DATA_EXT after the device reported CHECK SENSE. This function is an EH helper.}(hj'/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj#/ubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj6/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj#/ubeh}(h]h ]h"]h$]h&]uh1jhj5/hMhj.ubh)}(h **Return**h]j )}(hjM/h]hReturn}(hjO/hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjK/ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.ubh)}(h5true if sense data could be fetched, false otherwise.h]h5true if sense data could be fetched, false otherwise.}(hjc/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#atapi_eh_request_sense (C function)c.atapi_eh_request_sensehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h]unsigned int atapi_eh_request_sense (struct ata_device *dev, u8 *sense_buf, u8 dfl_sense_key)h]j")}(h\unsigned int atapi_eh_request_sense(struct ata_device *dev, u8 *sense_buf, u8 dfl_sense_key)h](j)}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/hhhj/hMubj)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/hhhj/hMubj)}(hatapi_eh_request_senseh]j[)}(hatapi_eh_request_senseh]hatapi_eh_request_sense}(hj/hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj/hMubj)}(h9(struct ata_device *dev, u8 *sense_buf, u8 dfl_sense_key)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj/ubj:)}(h h]h }(hj/hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj 0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj 0modnameN classnameNjwjz)}j}]jj)}jsj/sbc.atapi_eh_request_senseasbuh1hhj/ubj:)}(h h]h }(hj)0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/ubj)}(hjS h]h*}(hj70hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubj[)}(hdevh]hdev}(hjD0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(h u8 *sense_bufh](h)}(hhh]j[)}(hu8h]hu8}(hj`0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj]0ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjb0modnameN classnameNjwjz)}j}]j%0c.atapi_eh_request_senseasbuh1hhjY0ubj:)}(h h]h }(hj~0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjY0ubj)}(hjS h]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjY0ubj[)}(h sense_bufh]h sense_buf}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjY0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(hu8 dfl_sense_keyh](h)}(hhh]j[)}(hu8h]hu8}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj0modnameN classnameNjwjz)}j}]j%0c.atapi_eh_request_senseasbuh1hhj0ubj:)}(h h]h }(hj0hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0ubj[)}(h dfl_sense_keyh]h dfl_sense_key}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhj/hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj/hhhj/hMubah}(h]j/ah ](jjeh"]h$]h&]j j )j huh1jhj/hMhj/hhubj)}(hhh]h)}(hperform ATAPI REQUEST_SENSEh]hperform ATAPI REQUEST_SENSE}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j#1j1j#1j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` device to perform REQUEST_SENSE to ``u8 *sense_buf`` result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long) ``u8 dfl_sense_key`` default sense key to use **Description** Perform ATAPI REQUEST_SENSE after the device reported CHECK SENSE. This function is EH helper. LOCKING: Kernel thread context (may sleep). **Return** 0 on success, AC_ERR_* mask on failureh](h)}(h**Parameters**h]j )}(hj-1h]h Parameters}(hj/1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj'1ubj)}(hhh](j)}(h>``struct ata_device *dev`` device to perform REQUEST_SENSE to h](j)}(h``struct ata_device *dev``h]j\)}(hjL1h]hstruct ata_device *dev}(hjN1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjJ1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjF1ubj)}(hhh]h)}(h"device to perform REQUEST_SENSE toh]h"device to perform REQUEST_SENSE to}(hje1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja1hMhjb1ubah}(h]h ]h"]h$]h&]uh1jhjF1ubeh}(h]h ]h"]h$]h&]uh1jhja1hMhjC1ubj)}(hN``u8 *sense_buf`` result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long) h](j)}(h``u8 *sense_buf``h]j\)}(hj1h]h u8 *sense_buf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj1ubj)}(hhh]h)}(h;result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)h]h;result sense data buffer (SCSI_SENSE_BUFFERSIZE bytes long)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hjC1ubj)}(h.``u8 dfl_sense_key`` default sense key to use h](j)}(h``u8 dfl_sense_key``h]j\)}(hj1h]hu8 dfl_sense_key}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj1ubj)}(hhh]h)}(hdefault sense key to useh]hdefault sense key to use}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM hjC1ubeh}(h]h ]h"]h$]h&]uh1jhj'1ubh)}(h**Description**h]j )}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj'1ubj)}(hPerform ATAPI REQUEST_SENSE after the device reported CHECK SENSE. This function is EH helper. LOCKING: Kernel thread context (may sleep). h](h)}(h_Perform ATAPI REQUEST_SENSE after the device reported CHECK SENSE. This function is EH helper.h]h_Perform ATAPI REQUEST_SENSE after the device reported CHECK SENSE. This function is EH helper.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj2ubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj"2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj!2hM hj'1ubh)}(h **Return**h]j )}(hj92h]hReturn}(hj;2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj72ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj'1ubh)}(h&0 on success, AC_ERR_* mask on failureh]h&0 on success, AC_ERR_* mask on failure}(hjO2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj'1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_eh_analyze_serror (C function)c.ata_eh_analyze_serrorhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h2void ata_eh_analyze_serror (struct ata_link *link)h]j")}(h1void ata_eh_analyze_serror(struct ata_link *link)h](j)}(hvoidh]hvoid}(hj~2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz2hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMAubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjz2hhhj2hMAubj)}(hata_eh_analyze_serrorh]j[)}(hata_eh_analyze_serrorh]hata_eh_analyze_serror}(hj2hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjz2hhhj2hMAubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hj2hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubh)}(hhh]j[)}(hata_linkh]hata_link}(hj2hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj2modnameN classnameNjwjz)}j}]jj)}jsj2sbc.ata_eh_analyze_serrorasbuh1hhj2ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2ubj)}(hjS h]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubj[)}(hlinkh]hlink}(hj3hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubah}(h]h ]h"]h$]h&]jjuh1jhjz2hhhj2hMAubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjv2hhhj2hMAubah}(h]jq2ah ](jjeh"]h$]h&]j j )j huh1jhj2hMAhjs2hhubj)}(hhh]h)}(h analyze SError for a failed porth]h analyze SError for a failed port}(hj>3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMAhj;3hhubah}(h]h ]h"]h$]h&]uh1jhjs2hhhj2hMAubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jV3j1jV3j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_link *link`` ATA link to analyze SError for **Description** Analyze SError if available and further determine cause of failure. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj`3h]h Parameters}(hjb3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMEhjZ3ubj)}(hhh]j)}(h9``struct ata_link *link`` ATA link to analyze SError for h](j)}(h``struct ata_link *link``h]j\)}(hj3h]hstruct ata_link *link}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj}3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMBhjy3ubj)}(hhh]h)}(hATA link to analyze SError forh]hATA link to analyze SError for}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMBhj3ubah}(h]h ]h"]h$]h&]uh1jhjy3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMBhjv3ubah}(h]h ]h"]h$]h&]uh1jhjZ3ubh)}(h**Description**h]j )}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMDhjZ3ubj)}(hSAnalyze SError if available and further determine cause of failure. LOCKING: None.h](h)}(hCAnalyze SError if available and further determine cause of failure.h]hCAnalyze SError if available and further determine cause of failure.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMChj3ubh)}(hLOCKING: None.h]hLOCKING: None.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMFhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMChjZ3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_analyze_tf (C function)c.ata_eh_analyze_tfhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h:unsigned int ata_eh_analyze_tf (struct ata_queued_cmd *qc)h]j")}(h9unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMrubj:)}(h h]h }(hj'4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4hhhj&4hMrubj)}(hinth]hint}(hj54hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj&4hMrubj:)}(h h]h }(hjC4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4hhhj&4hMrubj)}(hata_eh_analyze_tfh]j[)}(hata_eh_analyze_tfh]hata_eh_analyze_tf}(hjU4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQ4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj&4hMrubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjq4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjm4ubj:)}(h h]h }(hj~4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm4ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj4ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj4modnameN classnameNjwjz)}j}]jj)}jsjW4sbc.ata_eh_analyze_tfasbuh1hhjm4ubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm4ubj)}(hjS h]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjm4ubj[)}(hqch]hqc}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjm4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhji4ubah}(h]h ]h"]h$]h&]jjuh1jhj4hhhj&4hMrubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj4hhhj&4hMrubah}(h]j 4ah ](jjeh"]h$]h&]j j )j huh1jhj&4hMrhj 4hhubj)}(hhh]h)}(hanalyze taskfile of a failed qch]hanalyze taskfile of a failed qc}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMrhj4hhubah}(h]h ]h"]h$]h&]uh1jhj 4hhhj&4hMrubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j 5j1j 5j2j3j4uh1jhhhj }hNhNubj6)}(hX<**Parameters** ``struct ata_queued_cmd *qc`` qc to analyze **Description** Analyze taskfile of **qc** and further determine cause of failure. This function also requests ATAPI sense data if available. LOCKING: Kernel thread context (may sleep). **Return** Determined recovery actionh](h)}(h**Parameters**h]j )}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMvhj5ubj)}(hhh]j)}(h,``struct ata_queued_cmd *qc`` qc to analyze h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj55h]hstruct ata_queued_cmd *qc}(hj75hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj35ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMshj/5ubj)}(hhh]h)}(h qc to analyzeh]h qc to analyze}(hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ5hMshjK5ubah}(h]h ]h"]h$]h&]uh1jhj/5ubeh}(h]h ]h"]h$]h&]uh1jhjJ5hMshj,5ubah}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]j )}(hjp5h]h Description}(hjr5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjn5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMuhj5ubj)}(hAnalyze taskfile of **qc** and further determine cause of failure. This function also requests ATAPI sense data if available. LOCKING: Kernel thread context (may sleep). h](h)}(h~Analyze taskfile of **qc** and further determine cause of failure. This function also requests ATAPI sense data if available.h](hAnalyze taskfile of }(hj5hhhNhNubj )}(h**qc**h]hqc}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubhd and further determine cause of failure. This function also requests ATAPI sense data if available.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMthj5ubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMxhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMthj5ubh)}(h **Return**h]j )}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM{hj5ubh)}(hDetermined recovery actionh]hDetermined recovery action}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM|hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_eh_speed_down_verdict (C function)c.ata_eh_speed_down_verdicthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h?unsigned int ata_eh_speed_down_verdict (struct ata_device *dev)h]j")}(h>unsigned int ata_eh_speed_down_verdict(struct ata_device *dev)h](j)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6hhhj6hMubj)}(hinth]hint}(hj$6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubj:)}(h h]h }(hj26hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj6hhhj6hMubj)}(hata_eh_speed_down_verdicth]j[)}(hata_eh_speed_down_verdicth]hata_eh_speed_down_verdict}(hjD6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@6ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj6hhhj6hMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj`6hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj\6ubj:)}(h h]h }(hjm6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\6ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj~6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{6ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj6modnameN classnameNjwjz)}j}]jj)}jsjF6sbc.ata_eh_speed_down_verdictasbuh1hhj\6ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\6ubj)}(hjS h]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\6ubj[)}(hdevh]hdev}(hj6hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj\6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjX6ubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj5hhhj6hMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhj6hMhj5hhubj)}(hhh]h)}(hDetermine speed down verdicth]hDetermine speed down verdict}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj6hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j6j1j6j2j3j4uh1jhhhj }hNhNubj6)}(hXK**Parameters** ``struct ata_device *dev`` Device of interest **Description** This function examines error ring of **dev** and determines whether NCQ needs to be turned off, transfer speed should be stepped down, or falling back to PIO is necessary. ECAT_ATA_BUS : ATA_BUS error for any command ECAT_TOUT_HSM : TIMEOUT for any command or HSM violation for IO commands ECAT_UNK_DEV : Unknown DEV error for IO commands ECAT_DUBIOUS_* : Identical to above three but occurred while data transfer hasn't been verified. Verdicts are NCQ_OFF : Turn off NCQ. SPEED_DOWN : Speed down transfer speed but don't fall back to PIO. FALLBACK_TO_PIO : Fall back to PIO. Even if multiple verdicts are returned, only one action is taken per error. An action triggered by non-DUBIOUS errors clears ering, while one triggered by DUBIOUS_* errors doesn't. This is to expedite speed down decisions right after device is initially configured. The following are speed down rules. #1 and #2 deal with DUBIOUS errors. 1. If more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO. 2. If more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors occurred during last 5 mins, NCQ_OFF. 3. If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors occurred during last 5 mins, FALLBACK_TO_PIO 4. If more than 3 TOUT_HSM or UNK_DEV errors occurred during last 10 mins, NCQ_OFF. 5. If more than 3 ATA_BUS or TOUT_HSM errors, or more than 6 UNK_DEV errors occurred during last 10 mins, SPEED_DOWN. LOCKING: Inherited from caller. **Return** OR of ATA_EH_SPDN_* flags.h](h)}(h**Parameters**h]j )}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6ubj)}(hhh]j)}(h.``struct ata_device *dev`` Device of interest h](j)}(h``struct ata_device *dev``h]j\)}(hj$7h]hstruct ata_device *dev}(hj&7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj"7ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj7ubj)}(hhh]h)}(hDevice of interesth]hDevice of interest}(hj=7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj97hMhj:7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj97hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h**Description**h]j )}(hj_7h]h Description}(hja7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj6ubj)}(hX-This function examines error ring of **dev** and determines whether NCQ needs to be turned off, transfer speed should be stepped down, or falling back to PIO is necessary. ECAT_ATA_BUS : ATA_BUS error for any command ECAT_TOUT_HSM : TIMEOUT for any command or HSM violation for IO commands ECAT_UNK_DEV : Unknown DEV error for IO commands ECAT_DUBIOUS_* : Identical to above three but occurred while data transfer hasn't been verified. Verdicts are NCQ_OFF : Turn off NCQ. SPEED_DOWN : Speed down transfer speed but don't fall back to PIO. FALLBACK_TO_PIO : Fall back to PIO. Even if multiple verdicts are returned, only one action is taken per error. An action triggered by non-DUBIOUS errors clears ering, while one triggered by DUBIOUS_* errors doesn't. This is to expedite speed down decisions right after device is initially configured. The following are speed down rules. #1 and #2 deal with DUBIOUS errors. 1. If more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO. 2. If more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors occurred during last 5 mins, NCQ_OFF. 3. If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors occurred during last 5 mins, FALLBACK_TO_PIO 4. If more than 3 TOUT_HSM or UNK_DEV errors occurred during last 10 mins, NCQ_OFF. 5. If more than 3 ATA_BUS or TOUT_HSM errors, or more than 6 UNK_DEV errors occurred during last 10 mins, SPEED_DOWN. LOCKING: Inherited from caller. h](h)}(hThis function examines error ring of **dev** and determines whether NCQ needs to be turned off, transfer speed should be stepped down, or falling back to PIO is necessary.h](h%This function examines error ring of }(hjy7hhhNhNubj )}(h**dev**h]hdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjy7ubh and determines whether NCQ needs to be turned off, transfer speed should be stepped down, or falling back to PIO is necessary.}(hjy7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubh)}(h/ECAT_ATA_BUS : ATA_BUS error for any commandh]h/ECAT_ATA_BUS : ATA_BUS error for any command}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubj)}(hhh]j)}(hKECAT_TOUT_HSM : TIMEOUT for any command or HSM violation for IO commands h](j)}(h ECAT_TOUT_HSMh]h ECAT_TOUT_HSM}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj7ubh classifier)}(h,TIMEOUT for any command or HSM violation forh]h,TIMEOUT for any command or HSM violation for}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj7hj7ubj)}(hhh]h)}(h IO commandsh]h IO commands}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhju7ubh)}(h3ECAT_UNK_DEV : Unknown DEV error for IO commandsh]h3ECAT_UNK_DEV : Unknown DEV error for IO commands}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hju7ubj)}(hhh]j)}(hbECAT_DUBIOUS_* : Identical to above three but occurred while data transfer hasn't been verified. h](j)}(hECAT_DUBIOUS_*h]hECAT_DUBIOUS_*}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj8ubj7)}(h+Identical to above three but occurred whileh]h+Identical to above three but occurred while}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj8hj8ubj)}(hhh]h)}(h#data transfer hasn't been verified.h]h%data transfer hasn’t been verified.}(hj(8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj%8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhju7ubh)}(h Verdicts areh]h Verdicts are}(hjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubh)}(hNCQ_OFF : Turn off NCQ.h]hNCQ_OFF : Turn off NCQ.}(hjW8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubj)}(hhh]j)}(hHSPEED_DOWN : Speed down transfer speed but don't fall back to PIO. h](j)}(h SPEED_DOWNh]h SPEED_DOWN}(hjm8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhji8ubj7)}(h-Speed down transfer speed but don't fall backh]h/Speed down transfer speed but don’t fall back}(hj|8hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hji8hj{8ubj)}(hhh]h)}(hto PIO.h]hto PIO.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhji8ubeh}(h]h ]h"]h$]h&]uh1jhj{8hMhjf8ubah}(h]h ]h"]h$]h&]uh1jhju7ubh)}(h#FALLBACK_TO_PIO : Fall back to PIO.h]h#FALLBACK_TO_PIO : Fall back to PIO.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubh)}(hX Even if multiple verdicts are returned, only one action is taken per error. An action triggered by non-DUBIOUS errors clears ering, while one triggered by DUBIOUS_* errors doesn't. This is to expedite speed down decisions right after device is initially configured.h]hX Even if multiple verdicts are returned, only one action is taken per error. An action triggered by non-DUBIOUS errors clears ering, while one triggered by DUBIOUS_* errors doesn’t. This is to expedite speed down decisions right after device is initially configured.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhju7ubh)}(hHThe following are speed down rules. #1 and #2 deal with DUBIOUS errors.h]hHThe following are speed down rules. #1 and #2 deal with DUBIOUS errors.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM!hju7ubj)}(hhh](j )}(hyIf more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO. h]h)}(hxIf more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO.h]hxIf more than one DUBIOUS_ATA_BUS or DUBIOUS_TOUT_HSM errors occurred during last 5 mins, SPEED_DOWN and FALLBACK_TO_PIO.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM$hj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(hbIf more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors occurred during last 5 mins, NCQ_OFF. h]h)}(haIf more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors occurred during last 5 mins, NCQ_OFF.h]haIf more than one DUBIOUS_TOUT_HSM or DUBIOUS_UNK_DEV errors occurred during last 5 mins, NCQ_OFF.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM'hj8ubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(h`If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors occurred during last 5 mins, FALLBACK_TO_PIO h]h)}(h_If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors occurred during last 5 mins, FALLBACK_TO_PIOh]h_If more than 8 ATA_BUS, TOUT_HSM or UNK_DEV errors occurred during last 5 mins, FALLBACK_TO_PIO}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM*hj9ubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(hQIf more than 3 TOUT_HSM or UNK_DEV errors occurred during last 10 mins, NCQ_OFF. h]h)}(hPIf more than 3 TOUT_HSM or UNK_DEV errors occurred during last 10 mins, NCQ_OFF.h]hPIf more than 3 TOUT_HSM or UNK_DEV errors occurred during last 10 mins, NCQ_OFF.}(hj,9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM-hj(9ubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(hsIf more than 3 ATA_BUS or TOUT_HSM errors, or more than 6 UNK_DEV errors occurred during last 10 mins, SPEED_DOWN. h]h)}(hrIf more than 3 ATA_BUS or TOUT_HSM errors, or more than 6 UNK_DEV errors occurred during last 10 mins, SPEED_DOWN.h]hrIf more than 3 ATA_BUS or TOUT_HSM errors, or more than 6 UNK_DEV errors occurred during last 10 mins, SPEED_DOWN.}(hjE9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM0hjA9ubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhju7ubh)}(hLOCKING: Inherited from caller.h]hLOCKING: Inherited from caller.}(hj`9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM3hju7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj6ubh)}(h **Return**h]j )}(hjw9h]hReturn}(hjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hju9ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM6hj6ubh)}(hOR of ATA_EH_SPDN_* flags.h]hOR of ATA_EH_SPDN_* flags.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM7hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_speed_down (C function)c.ata_eh_speed_downhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hcunsigned int ata_eh_speed_down (struct ata_device *dev, unsigned int eflags, unsigned int err_mask)h]j")}(hbunsigned int ata_eh_speed_down(struct ata_device *dev, unsigned int eflags, unsigned int err_mask)h](j)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMfubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9hhhj9hMfubj)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMfubj:)}(h h]h }(hj9hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9hhhj9hMfubj)}(hata_eh_speed_downh]j[)}(hata_eh_speed_downh]hata_eh_speed_down}(hj9hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhj9hMfubj)}(hD(struct ata_device *dev, unsigned int eflags, unsigned int err_mask)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj:ubj:)}(h h]h }(hj":hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj3:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj0:ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj5:modnameN classnameNjwjz)}j}]jj)}jsj9sbc.ata_eh_speed_downasbuh1hhj:ubj:)}(h h]h }(hjS:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hjS h]h*}(hja:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj:ubj[)}(hdevh]hdev}(hjn:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj :ubj)}(hunsigned int eflagsh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj[)}(heflagsh]heflags}(hj:hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj :ubj)}(hunsigned int err_maskh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj:ubj[)}(herr_maskh]herr_mask}(hj;hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj :ubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhj9hMfubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj9hhhj9hMfubah}(h]j9ah ](jjeh"]h$]h&]j j )j huh1jhj9hMfhj9hhubj)}(hhh]h)}(h(record error and speed down if necessaryh]h(record error and speed down if necessary}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMfhj7;hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj9hMfubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jR;j1jR;j2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Failed device ``unsigned int eflags`` mask of ATA_EFLAG_* flags ``unsigned int err_mask`` err_mask of the error **Description** Record error and examine error history to determine whether adjusting transmission speed is necessary. It also sets transmission limits appropriately if such adjustment is necessary. LOCKING: Kernel thread context (may sleep). **Return** Determined recovery action.h](h)}(h**Parameters**h]j )}(hj\;h]h Parameters}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZ;ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMjhjV;ubj)}(hhh](j)}(h)``struct ata_device *dev`` Failed device h](j)}(h``struct ata_device *dev``h]j\)}(hj{;h]hstruct ata_device *dev}(hj};hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjy;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMghju;ubj)}(hhh]h)}(h Failed deviceh]h Failed device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMghj;ubah}(h]h ]h"]h$]h&]uh1jhju;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMghjr;ubj)}(h2``unsigned int eflags`` mask of ATA_EFLAG_* flags h](j)}(h``unsigned int eflags``h]j\)}(hj;h]hunsigned int eflags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhhj;ubj)}(hhh]h)}(hmask of ATA_EFLAG_* flagsh]hmask of ATA_EFLAG_* flags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhhjr;ubj)}(h0``unsigned int err_mask`` err_mask of the error h](j)}(h``unsigned int err_mask``h]j\)}(hj;h]hunsigned int err_mask}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMihj;ubj)}(hhh]h)}(herr_mask of the errorh]herr_mask of the error}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMihj<ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj<hMihjr;ubeh}(h]h ]h"]h$]h&]uh1jhjV;ubh)}(h**Description**h]j )}(hj(<h]h Description}(hj*<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj&<ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMkhjV;ubj)}(hRecord error and examine error history to determine whether adjusting transmission speed is necessary. It also sets transmission limits appropriately if such adjustment is necessary. LOCKING: Kernel thread context (may sleep). h](h)}(hRecord error and examine error history to determine whether adjusting transmission speed is necessary. It also sets transmission limits appropriately if such adjustment is necessary.h]hRecord error and examine error history to determine whether adjusting transmission speed is necessary. It also sets transmission limits appropriately if such adjustment is necessary.}(hjB<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMjhj><ubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjQ<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMohj><ubeh}(h]h ]h"]h$]h&]uh1jhjP<hMjhjV;ubh)}(h **Return**h]j )}(hjh<h]hReturn}(hjj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjf<ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMrhjV;ubh)}(hDetermined recovery action.h]hDetermined recovery action.}(hj~<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMshjV;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_worth_retry (C function)c.ata_eh_worth_retryhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h2int ata_eh_worth_retry (struct ata_queued_cmd *qc)h]j")}(h1int ata_eh_worth_retry(struct ata_queued_cmd *qc)h](j)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<hhhj<hMubj)}(hata_eh_worth_retryh]j[)}(hata_eh_worth_retryh]hata_eh_worth_retry}(hj<hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhj<hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj<ubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj =modnameN classnameNjwjz)}j}]jj)}jsj<sbc.ata_eh_worth_retryasbuh1hhj<ubj:)}(h h]h }(hj(=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj<ubj)}(hjS h]h*}(hj6=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj<ubj[)}(hqch]hqc}(hjC=hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubah}(h]h ]h"]h$]h&]jjuh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj<hhhj<hMubah}(h]j<ah ](jjeh"]h$]h&]j j )j huh1jhj<hMhj<hhubj)}(hhh]h)}(h)analyze error and decide whether to retryh]h)analyze error and decide whether to retry}(hjm=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjj=hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j=j1j=j2j3j4uh1jhhhj }hNhNubj6)}(hX[**Parameters** ``struct ata_queued_cmd *qc`` qc to possibly retry **Description** Look at the cause of the error and decide if a retry might be useful or not. We don't want to retry media errors because the drive itself has probably already taken 10-30 seconds doing its own internal retries before reporting the failure.h](h)}(h**Parameters**h]j )}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj=ubj)}(hhh]j)}(h3``struct ata_queued_cmd *qc`` qc to possibly retry h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj=h]hstruct ata_queued_cmd *qc}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj=ubj)}(hhh]h)}(hqc to possibly retryh]hqc to possibly retry}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j )}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj=ubj)}(hLook at the cause of the error and decide if a retry might be useful or not. We don't want to retry media errors because the drive itself has probably already taken 10-30 seconds doing its own internal retries before reporting the failure.h]h)}(hLook at the cause of the error and decide if a retry might be useful or not. We don't want to retry media errors because the drive itself has probably already taken 10-30 seconds doing its own internal retries before reporting the failure.h]hLook at the cause of the error and decide if a retry might be useful or not. We don’t want to retry media errors because the drive itself has probably already taken 10-30 seconds doing its own internal retries before reporting the failure.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj=ubah}(h]h ]h"]h$]h&]uh1jhj>hMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_quiet (C function)c.ata_eh_quiethNtauh1jhj }hhhNhNubj)}(hhh](j)}(h-bool ata_eh_quiet (struct ata_queued_cmd *qc)h]j")}(h,bool ata_eh_quiet(struct ata_queued_cmd *qc)h](j)}(hjVh]hbool}(hj8>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4>hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjF>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4>hhhjE>hMubj)}(h ata_eh_quieth]j[)}(h ata_eh_quieth]h ata_eh_quiet}(hjX>hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjT>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4>hhhjE>hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjt>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjp>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp>ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj>hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj>modnameN classnameNjwjz)}j}]jj)}jsjZ>sbc.ata_eh_quietasbuh1hhjp>ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjp>ubj)}(hjS h]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjp>ubj[)}(hqch]hqc}(hj>hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjp>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjl>ubah}(h]h ]h"]h$]h&]jjuh1jhj4>hhhjE>hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj0>hhhjE>hMubah}(h]j+>ah ](jjeh"]h$]h&]j j )j huh1jhjE>hMhj->hhubj)}(hhh]h)}(h2check if we need to be quiet about a command errorh]h2check if we need to be quiet about a command error}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj->hhhjE>hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j?j1j?j2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` qc to check **Description** Look at the qc flags anbd its scsi command request flags to determine if we need to be quiet about the command failure.h](h)}(h**Parameters**h]j )}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj?ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj?ubj)}(hhh]j)}(h*``struct ata_queued_cmd *qc`` qc to check h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj8?h]hstruct ata_queued_cmd *qc}(hj:?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj6?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj2?ubj)}(hhh]h)}(h qc to checkh]h qc to check}(hjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM?hMhjN?ubah}(h]h ]h"]h$]h&]uh1jhj2?ubeh}(h]h ]h"]h$]h&]uh1jhjM?hMhj/?ubah}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j )}(hjs?h]h Description}(hju?hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjq?ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj?ubj)}(hwLook at the qc flags anbd its scsi command request flags to determine if we need to be quiet about the command failure.h]h)}(hwLook at the qc flags anbd its scsi command request flags to determine if we need to be quiet about the command failure.h]hwLook at the qc flags anbd its scsi command request flags to determine if we need to be quiet about the command failure.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?hMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_eh_link_set_lpm (C function)c.ata_eh_link_set_lpmhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hmint ata_eh_link_set_lpm (struct ata_link *link, enum ata_lpm_policy policy, struct ata_device **r_failed_dev)h]j")}(hlint ata_eh_link_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, struct ata_device **r_failed_dev)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM_ubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?hhhj?hM_ubj)}(hata_eh_link_set_lpmh]j[)}(hata_eh_link_set_lpmh]hata_eh_link_set_lpm}(hj?hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj?hM_ubj)}(hU(struct ata_link *link, enum ata_lpm_policy policy, struct ata_device **r_failed_dev)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj?ubj:)}(h h]h }(hj @hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubh)}(hhh]j[)}(hata_linkh]hata_link}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj@modnameN classnameNjwjz)}j}]jj)}jsj?sbc.ata_eh_link_set_lpmasbuh1hhj?ubj:)}(h h]h }(hj=@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj?ubj)}(hjS h]h*}(hjK@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubj[)}(hlinkh]hlink}(hjX@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(henum ata_lpm_policy policyh](j()}(hjh]henum}(hjq@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjm@ubj:)}(h h]h }(hj~@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm@ubh)}(hhh]j[)}(hata_lpm_policyh]hata_lpm_policy}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj@modnameN classnameNjwjz)}j}]j9@c.ata_eh_link_set_lpmasbuh1hhjm@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjm@ubj[)}(hpolicyh]hpolicy}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjm@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(h struct ata_device **r_failed_devh](j()}(hj+h]hstruct}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj@ubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj@modnameN classnameNjwjz)}j}]j9@c.ata_eh_link_set_lpmasbuh1hhj@ubj:)}(h h]h }(hjAhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubj)}(hjS h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubj)}(hjS h]h*}(hj+AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubj[)}(h r_failed_devh]h r_failed_dev}(hj8AhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhj?hM_ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj?hhhj?hM_ubah}(h]j?ah ](jjeh"]h$]h&]j j )j huh1jhj?hM_hj?hhubj)}(hhh]h)}(h)configure SATA interface power managementh]h)configure SATA interface power management}(hjbAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM_hj_Ahhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hM_ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jzAj1jzAj2j3j4uh1jhhhj }hNhNubj6)}(hX(**Parameters** ``struct ata_link *link`` link to configure ``enum ata_lpm_policy policy`` the link power management policy ``struct ata_device **r_failed_dev`` out parameter for failed device **Description** Enable SATA Interface power management. This will enable Device Interface Power Management (DIPM) for min_power and medium_power_with_dipm policies, and then call driver specific callbacks for enabling Host Initiated Power management. LOCKING: EH context. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j )}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMchj~Aubj)}(hhh](j)}(h,``struct ata_link *link`` link to configure h](j)}(h``struct ata_link *link``h]j\)}(hjAh]hstruct ata_link *link}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM`hjAubj)}(hhh]h)}(hlink to configureh]hlink to configure}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM`hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM`hjAubj)}(h@``enum ata_lpm_policy policy`` the link power management policy h](j)}(h``enum ata_lpm_policy policy``h]j\)}(hjAh]henum ata_lpm_policy policy}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMahjAubj)}(hhh]h)}(h the link power management policyh]h the link power management policy}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMahjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMahjAubj)}(hE``struct ata_device **r_failed_dev`` out parameter for failed device h](j)}(h$``struct ata_device **r_failed_dev``h]j\)}(hjBh]h struct ata_device **r_failed_dev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjBubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMbhjBubj)}(hhh]h)}(hout parameter for failed deviceh]hout parameter for failed device}(hj.BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*BhMbhj+Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj*BhMbhjAubeh}(h]h ]h"]h$]h&]uh1jhj~Aubh)}(h**Description**h]j )}(hjPBh]h Description}(hjRBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjNBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMdhj~Aubj)}(hXEnable SATA Interface power management. This will enable Device Interface Power Management (DIPM) for min_power and medium_power_with_dipm policies, and then call driver specific callbacks for enabling Host Initiated Power management. LOCKING: EH context. h](h)}(hEnable SATA Interface power management. This will enable Device Interface Power Management (DIPM) for min_power and medium_power_with_dipm policies, and then call driver specific callbacks for enabling Host Initiated Power management.h]hEnable SATA Interface power management. This will enable Device Interface Power Management (DIPM) for min_power and medium_power_with_dipm policies, and then call driver specific callbacks for enabling Host Initiated Power management.}(hjjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMchjfBubh)}(hLOCKING: EH context.h]hLOCKING: EH context.}(hjyBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhhjfBubeh}(h]h ]h"]h$]h&]uh1jhjxBhMchj~Aubh)}(h **Return**h]j )}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMkhj~Aubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMlhj~Aubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_eh_link_autopsy (C function)c.ata_eh_link_autopsyhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h0void ata_eh_link_autopsy (struct ata_link *link)h]j")}(h/void ata_eh_link_autopsy(struct ata_link *link)h](j)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjBhhhjBhMubj)}(hata_eh_link_autopsyh]j[)}(hata_eh_link_autopsyh]hata_eh_link_autopsy}(hjBhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjBhhhjBhMubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjCubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubh)}(hhh]j[)}(hata_linkh]hata_link}(hj0ChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj-Cubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj2CmodnameN classnameNjwjz)}j}]jj)}jsjBsbc.ata_eh_link_autopsyasbuh1hhjCubj:)}(h h]h }(hjPChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjCubj)}(hjS h]h*}(hj^ChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubj[)}(hlinkh]hlink}(hjkChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Cubah}(h]h ]h"]h$]h&]jjuh1jhjBhhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjBhhhjBhMubah}(h]jBah ](jjeh"]h$]h&]j j )j huh1jhjBhMhjBhhubj)}(hhh]h)}(h+analyze error and determine recovery actionh]h+analyze error and determine recovery action}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jCj1jCj2j3j4uh1jhhhj }hNhNubj6)}(hXS**Parameters** ``struct ata_link *link`` host link to perform autopsy on **Description** Analyze why **link** failed and determine which recovery actions are needed. This function also sets more detailed AC_ERR_* values and fills sense data for ATAPI CHECK SENSE. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j hjCubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjCubj)}(hhh]j)}(h:``struct ata_link *link`` host link to perform autopsy on h](j)}(h``struct ata_link *link``h]j\)}(hjCh]hstruct ata_link *link}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjCubj)}(hhh]h)}(hhost link to perform autopsy onh]hhost link to perform autopsy on}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(h**Description**h]j )}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjDubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjCubj)}(hAnalyze why **link** failed and determine which recovery actions are needed. This function also sets more detailed AC_ERR_* values and fills sense data for ATAPI CHECK SENSE. LOCKING: Kernel thread context (may sleep).h](h)}(hAnalyze why **link** failed and determine which recovery actions are needed. This function also sets more detailed AC_ERR_* values and fills sense data for ATAPI CHECK SENSE.h](h Analyze why }(hj+DhhhNhNubj )}(h**link**h]hlink}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj+Dubh failed and determine which recovery actions are needed. This function also sets more detailed AC_ERR_* values and fills sense data for ATAPI CHECK SENSE.}(hj+DhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj'Dubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjLDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj'Dubeh}(h]h ]h"]h$]h&]uh1jhjKDhMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_autopsy (C function)c.ata_eh_autopsyhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h)void ata_eh_autopsy (struct ata_port *ap)h]j")}(h(void ata_eh_autopsy(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}DhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}DhhhjDhM ubj)}(hata_eh_autopsyh]j[)}(hata_eh_autopsyh]hata_eh_autopsy}(hjDhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}DhhhjDhM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjDubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubh)}(hhh]j[)}(hata_porth]hata_port}(hjDhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjDmodnameN classnameNjwjz)}j}]jj)}jsjDsbc.ata_eh_autopsyasbuh1hhjDubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjDubj)}(hjS h]h*}(hj EhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjDubj[)}(haph]hap}(hjEhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjDubah}(h]h ]h"]h$]h&]jjuh1jhj}DhhhjDhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjyDhhhjDhM ubah}(h]jtDah ](jjeh"]h$]h&]j j )j huh1jhjDhM hjvDhhubj)}(hhh]h)}(h+analyze error and determine recovery actionh]h+analyze error and determine recovery action}(hjAEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj>Ehhubah}(h]h ]h"]h$]h&]uh1jhjvDhhhjDhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jYEj1jYEj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` host port to perform autopsy on **Description** Analyze all links of **ap** and determine why they failed and which recovery actions are needed. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjcEh]h Parameters}(hjeEhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaEubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj]Eubj)}(hhh]j)}(h8``struct ata_port *ap`` host port to perform autopsy on h](j)}(h``struct ata_port *ap``h]j\)}(hjEh]hstruct ata_port *ap}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj|Eubj)}(hhh]h)}(hhost port to perform autopsy onh]hhost port to perform autopsy on}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhj|Eubeh}(h]h ]h"]h$]h&]uh1jhjEhM hjyEubah}(h]h ]h"]h$]h&]uh1jhj]Eubh)}(h**Description**h]j )}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjEubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj]Eubj)}(hAnalyze all links of **ap** and determine why they failed and which recovery actions are needed. LOCKING: Kernel thread context (may sleep).h](h)}(h`Analyze all links of **ap** and determine why they failed and which recovery actions are needed.h](hAnalyze all links of }(hjEhhhNhNubj )}(h**ap**h]hap}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjEubhE and determine why they failed and which recovery actions are needed.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjEubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM hj]Eubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_get_cmd_name (C function)c.ata_get_cmd_namehNtauh1jhj }hhhNhNubj)}(hhh](j)}(h*const char * ata_get_cmd_name (u8 command)h]j")}(h(const char *ata_get_cmd_name(u8 command)h](j()}(hj(h]hconst}(hj-FhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)FhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hj;FhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)Fhhhj:FhM ubj)}(hcharh]hchar}(hjIFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Fhhhj:FhM ubj:)}(h h]h }(hjWFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)Fhhhj:FhM ubj)}(hjS h]h*}(hjeFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)Fhhhj:FhM ubj)}(hata_get_cmd_nameh]j[)}(hata_get_cmd_nameh]hata_get_cmd_name}(hjvFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjrFubah}(h]h ](jjeh"]h$]h&]jjuh1jhj)Fhhhj:FhM ubj)}(h (u8 command)h]j)}(h u8 commandh](h)}(hhh]j[)}(hu8h]hu8}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjFubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjFmodnameN classnameNjwjz)}j}]jj)}jsjxFsbc.ata_get_cmd_nameasbuh1hhjFubj:)}(h h]h }(hjFhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubj[)}(hcommandh]hcommand}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhj)Fhhhj:FhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj%Fhhhj:FhM ubah}(h]j Fah ](jjeh"]h$]h&]j j )j huh1jhj:FhM hj"Fhhubj)}(hhh]h)}(hget name for ATA commandh]hget name for ATA command}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjFhhubah}(h]h ]h"]h$]h&]uh1jhj"Fhhhj:FhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jGj1jGj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``u8 command`` ATA command code to get name for **Description** Return a textual name of the given command or "unknown" LOCKING: Noneh](h)}(h**Parameters**h]j )}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj Gubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj Gubj)}(hhh]j)}(h0``u8 command`` ATA command code to get name for h](j)}(h``u8 command``h]j\)}(hj.Gh]h u8 command}(hj0GhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj,Gubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj(Gubj)}(hhh]h)}(h ATA command code to get name forh]h ATA command code to get name for}(hjGGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCGhM hjDGubah}(h]h ]h"]h$]h&]uh1jhj(Gubeh}(h]h ]h"]h$]h&]uh1jhjCGhM hj%Gubah}(h]h ]h"]h$]h&]uh1jhj Gubh)}(h**Description**h]j )}(hjiGh]h Description}(hjkGhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjgGubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj Gubj)}(hFReturn a textual name of the given command or "unknown" LOCKING: Noneh](h)}(h7Return a textual name of the given command or "unknown"h]h;Return a textual name of the given command or “unknown”}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjGubh)}(h LOCKING: Noneh]h LOCKING: None}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM hj Gubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_link_report (C function)c.ata_eh_link_reporthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h/void ata_eh_link_report (struct ata_link *link)h]j")}(h.void ata_eh_link_report(struct ata_link *link)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM) ubj:)}(h h]h }(hjGhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjGhhhjGhM) ubj)}(hata_eh_link_reporth]j[)}(hata_eh_link_reporth]hata_eh_link_report}(hjGhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjGhM) ubj)}(h(struct ata_link *link)h]j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjHubj:)}(h h]h }(hjHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubh)}(hhh]j[)}(hata_linkh]hata_link}(hj"HhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj$HmodnameN classnameNjwjz)}j}]jj)}jsjGsbc.ata_eh_link_reportasbuh1hhjHubj:)}(h h]h }(hjBHhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjHubj)}(hjS h]h*}(hjPHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHubj[)}(hlinkh]hlink}(hj]HhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjGubah}(h]h ]h"]h$]h&]jjuh1jhjGhhhjGhM) ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjGhhhjGhM) ubah}(h]jGah ](jjeh"]h$]h&]j j )j huh1jhjGhM) hjGhhubj)}(hhh]h)}(hreport error handling to userh]hreport error handling to user}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM) hjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhM) ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jHj1jHj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_link *link`` ATA link EH is going on **Description** Report EH to user. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjHubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM- hjHubj)}(hhh]j)}(h2``struct ata_link *link`` ATA link EH is going on h](j)}(h``struct ata_link *link``h]j\)}(hjHh]hstruct ata_link *link}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM* hjHubj)}(hhh]h)}(hATA link EH is going onh]hATA link EH is going on}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM* hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM* hjHubah}(h]h ]h"]h$]h&]uh1jhjHubh)}(h**Description**h]j )}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjIubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM, hjHubj)}(h"Report EH to user. LOCKING: None.h](h)}(hReport EH to user.h]hReport EH to user.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM+ hjIubh)}(hLOCKING: None.h]hLOCKING: None.}(hj,IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM- hjIubeh}(h]h ]h"]h$]h&]uh1jhj+IhM+ hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_report (C function)c.ata_eh_reporthNtauh1jhj }hhhNhNubj)}(hhh](j)}(h(void ata_eh_report (struct ata_port *ap)h]j")}(h'void ata_eh_report(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjaIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]IhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjpIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]IhhhjoIhM ubj)}(h ata_eh_reporth]j[)}(h ata_eh_reporth]h ata_eh_report}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj~Iubah}(h]h ](jjeh"]h$]h&]jjuh1jhj]IhhhjoIhM ubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjIhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjIubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubh)}(hhh]j[)}(hata_porth]hata_port}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjIubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjImodnameN classnameNjwjz)}j}]jj)}jsjIsbc.ata_eh_reportasbuh1hhjIubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjIubj)}(hjS h]h*}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubj[)}(haph]hap}(hjIhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubah}(h]h ]h"]h$]h&]jjuh1jhj]IhhhjoIhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjYIhhhjoIhM ubah}(h]jTIah ](jjeh"]h$]h&]j j )j huh1jhjoIhM hjVIhhubj)}(hhh]h)}(hreport error handling to userh]hreport error handling to user}(hj!JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjJhhubah}(h]h ]h"]h$]h&]uh1jhjVIhhhjoIhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j9Jj1j9Jj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` ATA port to report EH about **Description** Report EH to user. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjCJh]h Parameters}(hjEJhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjAJubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj=Jubj)}(hhh]j)}(h4``struct ata_port *ap`` ATA port to report EH about h](j)}(h``struct ata_port *ap``h]j\)}(hjbJh]hstruct ata_port *ap}(hjdJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj`Jubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj\Jubj)}(hhh]h)}(hATA port to report EH abouth]hATA port to report EH about}(hj{JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwJhM hjxJubah}(h]h ]h"]h$]h&]uh1jhj\Jubeh}(h]h ]h"]h$]h&]uh1jhjwJhM hjYJubah}(h]h ]h"]h$]h&]uh1jhj=Jubh)}(h**Description**h]j )}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj=Jubj)}(h"Report EH to user. LOCKING: None.h](h)}(hReport EH to user.h]hReport EH to user.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjJubh)}(hLOCKING: None.h]hLOCKING: None.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM hj=Jubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_set_mode (C function)c.ata_eh_set_modehNtauh1jhj }hhhNhNubj)}(hhh](j)}(hMint ata_eh_set_mode (struct ata_link *link, struct ata_device **r_failed_dev)h]j")}(hLint ata_eh_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hj KhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJhhhj KhM ubj)}(hata_eh_set_modeh]j[)}(hata_eh_set_modeh]hata_eh_set_mode}(hjKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjJhhhj KhM ubj)}(h9(struct ata_link *link, struct ata_device **r_failed_dev)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hj8KhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj4Kubj:)}(h h]h }(hjEKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4Kubh)}(hhh]j[)}(hata_linkh]hata_link}(hjVKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjSKubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjXKmodnameN classnameNjwjz)}j}]jj)}jsjKsbc.ata_eh_set_modeasbuh1hhj4Kubj:)}(h h]h }(hjvKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4Kubj)}(hjS h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj4Kubj[)}(hlinkh]hlink}(hjKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj4Kubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0Kubj)}(h struct ata_device **r_failed_devh](j()}(hj+h]hstruct}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjKubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjKubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjKmodnameN classnameNjwjz)}j}]jrKc.ata_eh_set_modeasbuh1hhjKubj:)}(h h]h }(hjKhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjKubj)}(hjS h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKubj)}(hjS h]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKubj[)}(h r_failed_devh]h r_failed_dev}(hjLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0Kubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhj KhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjJhhhj KhM ubah}(h]jJah ](jjeh"]h$]h&]j j )j huh1jhj KhM hjJhhubj)}(hhh]h)}(h-Program timings and issue SET FEATURES - XFERh]h-Program timings and issue SET FEATURES - XFER}(hj8LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj5Lhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhj KhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jPLj1jPLj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_link *link`` link on which timings will be programmed ``struct ata_device **r_failed_dev`` out parameter for failed device **Description** Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If ata_eh_set_mode() fails, pointer to the failing device is returned in **r_failed_dev**. LOCKING: PCI/etc. bus probe sem. **Return** 0 on success, negative errno otherwiseh](h)}(h**Parameters**h]j )}(hjZLh]h Parameters}(hj\LhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjXLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjTLubj)}(hhh](j)}(hC``struct ata_link *link`` link on which timings will be programmed h](j)}(h``struct ata_link *link``h]j\)}(hjyLh]hstruct ata_link *link}(hj{LhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjwLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjsLubj)}(hhh]h)}(h(link on which timings will be programmedh]h(link on which timings will be programmed}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jhjsLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjpLubj)}(hE``struct ata_device **r_failed_dev`` out parameter for failed device h](j)}(h$``struct ata_device **r_failed_dev``h]j\)}(hjLh]h struct ata_device **r_failed_dev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjLubj)}(hhh]h)}(hout parameter for failed deviceh]hout parameter for failed device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM hjpLubeh}(h]h ]h"]h$]h&]uh1jhjTLubh)}(h**Description**h]j )}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjTLubj)}(hSet ATA device disk transfer mode (PIO3, UDMA6, etc.). If ata_eh_set_mode() fails, pointer to the failing device is returned in **r_failed_dev**. LOCKING: PCI/etc. bus probe sem. h](h)}(hSet ATA device disk transfer mode (PIO3, UDMA6, etc.). If ata_eh_set_mode() fails, pointer to the failing device is returned in **r_failed_dev**.h](hSet ATA device disk transfer mode (PIO3, UDMA6, etc.). If ata_eh_set_mode() fails, pointer to the failing device is returned in }(hjMhhhNhNubj )}(h**r_failed_dev**h]h r_failed_dev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjMubh)}(h LOCKING: PCI/etc. bus probe sem.h]h LOCKING: PCI/etc. bus probe sem.}(hj(MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjMubeh}(h]h ]h"]h$]h&]uh1jhj'MhM hjTLubh)}(h **Return**h]j )}(hj?Mh]hReturn}(hjAMhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=Mubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjTLubh)}(h&0 on success, negative errno otherwiseh]h&0 on success, negative errno otherwise}(hjUMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjTLubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jatapi_eh_clear_ua (C function)c.atapi_eh_clear_uahNtauh1jhj }hhhNhNubj)}(hhh](j)}(h.int atapi_eh_clear_ua (struct ata_device *dev)h]j")}(h-int atapi_eh_clear_ua(struct ata_device *dev)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMhhhjMhM ubj)}(hatapi_eh_clear_uah]j[)}(hatapi_eh_clear_uah]hatapi_eh_clear_ua}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhjMhhhjMhM ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjMhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjMubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjMubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjMmodnameN classnameNjwjz)}j}]jj)}jsjMsbc.atapi_eh_clear_uaasbuh1hhjMubj:)}(h h]h }(hjMhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjMubj)}(hjS h]h*}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubj[)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubah}(h]h ]h"]h$]h&]jjuh1jhjMhhhjMhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj|MhhhjMhM ubah}(h]jwMah ](jjeh"]h$]h&]j j )j huh1jhjMhM hjyMhhubj)}(hhh]h)}(h&Clear ATAPI UNIT ATTENTION after reseth]h&Clear ATAPI UNIT ATTENTION after reset}(hjDNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjANhhubah}(h]h ]h"]h$]h&]uh1jhjyMhhhjMhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j\Nj1j\Nj2j3j4uh1jhhhj }hNhNubj6)}(hXQ**Parameters** ``struct ata_device *dev`` ATAPI device to clear UA for **Description** Resets and other operations can make an ATAPI device raise UNIT ATTENTION which causes the next operation to fail. This function clears UA. LOCKING: EH context (may sleep). **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j )}(hjfNh]h Parameters}(hjhNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjdNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj`Nubj)}(hhh]j)}(h8``struct ata_device *dev`` ATAPI device to clear UA for h](j)}(h``struct ata_device *dev``h]j\)}(hjNh]hstruct ata_device *dev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjNubj)}(hhh]h)}(hATAPI device to clear UA forh]hATAPI device to clear UA for}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM hj|Nubah}(h]h ]h"]h$]h&]uh1jhj`Nubh)}(h**Description**h]j )}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj`Nubj)}(hResets and other operations can make an ATAPI device raise UNIT ATTENTION which causes the next operation to fail. This function clears UA. LOCKING: EH context (may sleep). h](h)}(hResets and other operations can make an ATAPI device raise UNIT ATTENTION which causes the next operation to fail. This function clears UA.h]hResets and other operations can make an ATAPI device raise UNIT ATTENTION which causes the next operation to fail. This function clears UA.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjNubh)}(h LOCKING: EH context (may sleep).h]h LOCKING: EH context (may sleep).}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM hj`Nubh)}(h **Return**h]j )}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj`Nubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj`Nubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ata_eh_maybe_retry_flush (C function)c.ata_eh_maybe_retry_flushhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h5int ata_eh_maybe_retry_flush (struct ata_device *dev)h]j")}(h4int ata_eh_maybe_retry_flush(struct ata_device *dev)h](j)}(hinth]hint}(hjEOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAOhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM ubj:)}(h h]h }(hjTOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjAOhhhjSOhM ubj)}(hata_eh_maybe_retry_flushh]j[)}(hata_eh_maybe_retry_flushh]hata_eh_maybe_retry_flush}(hjfOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjbOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjAOhhhjSOhM ubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjOhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj~Oubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~Oubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjOubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjOmodnameN classnameNjwjz)}j}]jj)}jsjhOsbc.ata_eh_maybe_retry_flushasbuh1hhj~Oubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~Oubj)}(hjS h]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~Oubj[)}(hdevh]hdev}(hjOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj~Oubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzOubah}(h]h ]h"]h$]h&]jjuh1jhjAOhhhjSOhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj=OhhhjSOhM ubah}(h]j8Oah ](jjeh"]h$]h&]j j )j huh1jhjSOhM hj:Ohhubj)}(hhh]h)}(hRetry FLUSH if necessaryh]hRetry FLUSH if necessary}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjPhhubah}(h]h ]h"]h$]h&]uh1jhj:OhhhjSOhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jPj1jPj2j3j4uh1jhhhj }hNhNubj6)}(hXr**Parameters** ``struct ata_device *dev`` ATA device which may need FLUSH retry **Description** If **dev** failed FLUSH, it needs to be reported upper layer immediately as it means that **dev** failed to remap and already lost at least a sector and further FLUSH retrials won't make any difference to the lost sector. However, if FLUSH failed for other reasons, for example transmission error, FLUSH needs to be retried. This function determines whether FLUSH failure retry is necessary and performs it if so. **Return** 0 if EH can continue, -errno if EH needs to be repeated.h](h)}(h**Parameters**h]j )}(hj'Ph]h Parameters}(hj)PhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%Pubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj!Pubj)}(hhh]j)}(hA``struct ata_device *dev`` ATA device which may need FLUSH retry h](j)}(h``struct ata_device *dev``h]j\)}(hjFPh]hstruct ata_device *dev}(hjHPhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjDPubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj@Pubj)}(hhh]h)}(h%ATA device which may need FLUSH retryh]h%ATA device which may need FLUSH retry}(hj_PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[PhM hj\Pubah}(h]h ]h"]h$]h&]uh1jhj@Pubeh}(h]h ]h"]h$]h&]uh1jhj[PhM hj=Pubah}(h]h ]h"]h$]h&]uh1jhj!Pubh)}(h**Description**h]j )}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj!Pubj)}(hXIf **dev** failed FLUSH, it needs to be reported upper layer immediately as it means that **dev** failed to remap and already lost at least a sector and further FLUSH retrials won't make any difference to the lost sector. However, if FLUSH failed for other reasons, for example transmission error, FLUSH needs to be retried. This function determines whether FLUSH failure retry is necessary and performs it if so. h](h)}(hXEIf **dev** failed FLUSH, it needs to be reported upper layer immediately as it means that **dev** failed to remap and already lost at least a sector and further FLUSH retrials won't make any difference to the lost sector. However, if FLUSH failed for other reasons, for example transmission error, FLUSH needs to be retried.h](hIf }(hjPhhhNhNubj )}(h**dev**h]hdev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubhP failed FLUSH, it needs to be reported upper layer immediately as it means that }(hjPhhhNhNubj )}(h**dev**h]hdev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubh failed to remap and already lost at least a sector and further FLUSH retrials won’t make any difference to the lost sector. However, if FLUSH failed for other reasons, for example transmission error, FLUSH needs to be retried.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjPubh)}(hXThis function determines whether FLUSH failure retry is necessary and performs it if so.h]hXThis function determines whether FLUSH failure retry is necessary and performs it if so.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM hj!Pubh)}(h **Return**h]j )}(hjPh]hReturn}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj!Pubh)}(h80 if EH can continue, -errno if EH needs to be repeated.h]h80 if EH can continue, -errno if EH needs to be repeated.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM hj!Pubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_recover (C function)c.ata_eh_recoverhNtauh1jhj }hhhNhNubj)}(hhh](j)}(hqint ata_eh_recover (struct ata_port *ap, struct ata_reset_operations *reset_ops, struct ata_link **r_failed_link)h]j")}(hpint ata_eh_recover(struct ata_port *ap, struct ata_reset_operations *reset_ops, struct ata_link **r_failed_link)h](j)}(hinth]hint}(hj*QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&QhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hj9QhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj&Qhhhj8QhMubj)}(hata_eh_recoverh]j[)}(hata_eh_recoverh]hata_eh_recover}(hjKQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjGQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&Qhhhj8QhMubj)}(h^(struct ata_port *ap, struct ata_reset_operations *reset_ops, struct ata_link **r_failed_link)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjgQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjcQubj:)}(h h]h }(hjtQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcQubh)}(hhh]j[)}(hata_porth]hata_port}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jj)}jsjMQsbc.ata_eh_recoverasbuh1hhjcQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcQubj)}(hjS h]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcQubj[)}(haph]hap}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_Qubj)}(h&struct ata_reset_operations *reset_opsh](j()}(hj+h]hstruct}(hjQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjQubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubh)}(hhh]j[)}(hata_reset_operationsh]hata_reset_operations}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jQc.ata_eh_recoverasbuh1hhjQubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjQubj)}(hjS h]h*}(hj#RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjQubj[)}(h reset_opsh]h reset_ops}(hj0RhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_Qubj)}(hstruct ata_link **r_failed_linkh](j()}(hj+h]hstruct}(hjIRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjERubj:)}(h h]h }(hjVRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjERubh)}(hhh]j[)}(hata_linkh]hata_link}(hjgRhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjdRubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjiRmodnameN classnameNjwjz)}j}]jQc.ata_eh_recoverasbuh1hhjERubj:)}(h h]h }(hjRhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjERubj)}(hjS h]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjERubj)}(hjS h]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjERubj[)}(h r_failed_linkh]h r_failed_link}(hjRhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjERubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_Qubeh}(h]h ]h"]h$]h&]jjuh1jhj&Qhhhj8QhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj"Qhhhj8QhMubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhj8QhMhjQhhubj)}(hhh]h)}(hrecover host port after errorh]hrecover host port after error}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhj8QhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jRj1jRj2j3j4uh1jhhhj }hNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` host port to recover ``struct ata_reset_operations *reset_ops`` The set of reset operations to use ``struct ata_link **r_failed_link`` out parameter for failed link **Description** This is the alpha and omega, eum and yang, heart and soul of libata exception handling. On entry, actions required to recover each link and hotplug requests are recorded in the link's eh_context. This function executes all the operations with appropriate retrials and fallbacks to resurrect failed devices, detach goners and greet newcomers. LOCKING: Kernel thread context (may sleep). **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j )}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjRubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjRubj)}(hhh](j)}(h-``struct ata_port *ap`` host port to recover h](j)}(h``struct ata_port *ap``h]j\)}(hjSh]hstruct ata_port *ap}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjSubj)}(hhh]h)}(hhost port to recoverh]hhost port to recover}(hj1ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ShMhj.Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj-ShMhjSubj)}(hN``struct ata_reset_operations *reset_ops`` The set of reset operations to use h](j)}(h*``struct ata_reset_operations *reset_ops``h]j\)}(hjQSh]h&struct ata_reset_operations *reset_ops}(hjSShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjKSubj)}(hhh]h)}(h"The set of reset operations to useh]h"The set of reset operations to use}(hjjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfShMhjgSubah}(h]h ]h"]h$]h&]uh1jhjKSubeh}(h]h ]h"]h$]h&]uh1jhjfShMhjSubj)}(hB``struct ata_link **r_failed_link`` out parameter for failed link h](j)}(h#``struct ata_link **r_failed_link``h]j\)}(hjSh]hstruct ata_link **r_failed_link}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjSubj)}(hhh]h)}(hout parameter for failed linkh]hout parameter for failed link}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjSubeh}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j )}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjRubj)}(hXThis is the alpha and omega, eum and yang, heart and soul of libata exception handling. On entry, actions required to recover each link and hotplug requests are recorded in the link's eh_context. This function executes all the operations with appropriate retrials and fallbacks to resurrect failed devices, detach goners and greet newcomers. LOCKING: Kernel thread context (may sleep). h](h)}(hXWThis is the alpha and omega, eum and yang, heart and soul of libata exception handling. On entry, actions required to recover each link and hotplug requests are recorded in the link's eh_context. This function executes all the operations with appropriate retrials and fallbacks to resurrect failed devices, detach goners and greet newcomers.h]hXYThis is the alpha and omega, eum and yang, heart and soul of libata exception handling. On entry, actions required to recover each link and hotplug requests are recorded in the link’s eh_context. This function executes all the operations with appropriate retrials and fallbacks to resurrect failed devices, detach goners and greet newcomers.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjSubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjRubh)}(h **Return**h]j )}(hjTh]hReturn}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjTubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjRubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_eh_finish (C function)c.ata_eh_finishhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h(void ata_eh_finish (struct ata_port *ap)h]j")}(h'void ata_eh_finish(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjJThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFThhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjYThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFThhhjXThMubj)}(h ata_eh_finishh]j[)}(h ata_eh_finishh]h ata_eh_finish}(hjkThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgTubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFThhhjXThMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjTubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubh)}(hhh]j[)}(hata_porth]hata_port}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjTmodnameN classnameNjwjz)}j}]jj)}jsjmTsbc.ata_eh_finishasbuh1hhjTubj:)}(h h]h }(hjThhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjTubj)}(hjS h]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjTubj[)}(haph]hap}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjTubah}(h]h ]h"]h$]h&]jjuh1jhjFThhhjXThMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjBThhhjXThMubah}(h]j=Tah ](jjeh"]h$]h&]j j )j huh1jhjXThMhj?Thhubj)}(hhh]h)}(h finish up EHh]h finish up EH}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhj?ThhhjXThMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j"Uj1j"Uj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` host port to finish EH for **Description** Recovery is complete. Clean up EH states and retry or finish failed qcs. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj,Uh]h Parameters}(hj.UhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*Uubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj&Uubj)}(hhh]j)}(h3``struct ata_port *ap`` host port to finish EH for h](j)}(h``struct ata_port *ap``h]j\)}(hjKUh]hstruct ata_port *ap}(hjMUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjEUubj)}(hhh]h)}(hhost port to finish EH forh]hhost port to finish EH for}(hjdUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`UhMhjaUubah}(h]h ]h"]h$]h&]uh1jhjEUubeh}(h]h ]h"]h$]h&]uh1jhj`UhMhjBUubah}(h]h ]h"]h$]h&]uh1jhj&Uubh)}(h**Description**h]j )}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjUubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhj&Uubj)}(hYRecovery is complete. Clean up EH states and retry or finish failed qcs. LOCKING: None.h](h)}(hIRecovery is complete. Clean up EH states and retry or finish failed qcs.h]hIRecovery is complete. Clean up EH states and retry or finish failed qcs.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjUubh)}(hLOCKING: None.h]hLOCKING: None.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj&Uubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj }hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_std_error_handler (C function)c.ata_std_error_handlerhNtauh1jhj }hhhNhNubj)}(hhh](j)}(h0void ata_std_error_handler (struct ata_port *ap)h]j")}(h/void ata_std_error_handler(struct ata_port *ap)h](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chMubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjUhhhjUhMubj)}(hata_std_error_handlerh]j[)}(hata_std_error_handlerh]hata_std_error_handler}(hjVhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjVubah}(h]h ](jjeh"]h$]h&]jjuh1jhjUhhhjUhMubj)}(h(struct ata_port *ap)h]j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hj!VhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjVubj:)}(h h]h }(hj.VhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjVubh)}(hhh]j[)}(hata_porth]hata_port}(hj?VhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM4hj;Xhhubah}(h]h ]h"]h$]h&]uh1jhjsWhhhjWhM4ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jVXj1jVXj2j3j4uh1jhhhj }hNhNubj6)}(h**Parameters** ``struct ata_port *ap`` port to suspend **Description** Suspend **ap**. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj`Xh]h Parameters}(hjbXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^Xubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM8hjZXubj)}(hhh]j)}(h(``struct ata_port *ap`` port to suspend h](j)}(h``struct ata_port *ap``h]j\)}(hjXh]hstruct ata_port *ap}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj}Xubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM5hjyXubj)}(hhh]h)}(hport to suspendh]hport to suspend}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM5hjXubah}(h]h ]h"]h$]h&]uh1jhjyXubeh}(h]h ]h"]h$]h&]uh1jhjXhM5hjvXubah}(h]h ]h"]h$]h&]uh1jhjZXubh)}(h**Description**h]j )}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjXubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/libata:596: ./drivers/ata/libata-eh.chM7hjZXubj)}(hvoid ata_scsi_unlock_native_capacity(struct scsi_device *sdev)h](j)}(hvoidh]hvoid}(hjr^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn^hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chM|ubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjn^hhhj^hM|ubj)}(hata_scsi_unlock_native_capacityh]j[)}(hata_scsi_unlock_native_capacityh]hata_scsi_unlock_native_capacity}(hj^hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjn^hhhj^hM|ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](j()}(hj+h]hstruct}(hj^hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj^ubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubh)}(hhh]j[)}(h scsi_deviceh]h scsi_device}(hj^hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj^modnameN classnameNjwjz)}j}]jj)}jsj^sb!c.ata_scsi_unlock_native_capacityasbuh1hhj^ubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubj)}(hjS h]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubj[)}(hsdevh]hsdev}(hj_hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^ubah}(h]h ]h"]h$]h&]jjuh1jhjn^hhhj^hM|ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjj^hhhj^hM|ubah}(h]je^ah ](jjeh"]h$]h&]j j )j huh1jhj^hM|hjg^hhubj)}(hhh]h)}(hunlock native capacityh]hunlock native capacity}(hj2_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chM|hj/_hhubah}(h]h ]h"]h$]h&]uh1jhjg^hhhj^hM|ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jJ_j1jJ_j2j3j4uh1jhhhjZhNhNubj6)}(hX)**Parameters** ``struct scsi_device *sdev`` SCSI device to adjust device capacity for **Description** This function is called if a partition on **sdev** extends beyond the end of the device. It requests EH to unlock HPA. LOCKING: Defined by the SCSI layer. Might sleep.h](h)}(h**Parameters**h]j )}(hjT_h]h Parameters}(hjV_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjR_ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjN_ubj)}(hhh]j)}(hG``struct scsi_device *sdev`` SCSI device to adjust device capacity for h](j)}(h``struct scsi_device *sdev``h]j\)}(hjs_h]hstruct scsi_device *sdev}(hju_hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjq_ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chM}hjm_ubj)}(hhh]h)}(h)SCSI device to adjust device capacity forh]h)SCSI device to adjust device capacity for}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM}hj_ubah}(h]h ]h"]h$]h&]uh1jhjm_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM}hjj_ubah}(h]h ]h"]h$]h&]uh1jhjN_ubh)}(h**Description**h]j )}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj_ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjN_ubj)}(hThis function is called if a partition on **sdev** extends beyond the end of the device. It requests EH to unlock HPA. LOCKING: Defined by the SCSI layer. Might sleep.h](h)}(hwThis function is called if a partition on **sdev** extends beyond the end of the device. It requests EH to unlock HPA.h](h*This function is called if a partition on }(hj_hhhNhNubj )}(h**sdev**h]hsdev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj_ubhE extends beyond the end of the device. It requests EH to unlock HPA.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chM~hj_ubh)}(h1LOCKING: Defined by the SCSI layer. Might sleep.h]h1LOCKING: Defined by the SCSI layer. Might sleep.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hM~hjN_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ata_scsi_dma_need_drain (C function)c.ata_scsi_dma_need_drainhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h1bool ata_scsi_dma_need_drain (struct request *rq)h]j")}(h0bool ata_scsi_dma_need_drain(struct request *rq)h](j)}(hjVh]hbool}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hj,`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj`hhhj+`hMubj)}(hata_scsi_dma_need_drainh]j[)}(hata_scsi_dma_need_drainh]hata_scsi_dma_need_drain}(hj>`hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj:`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj+`hMubj)}(h(struct request *rq)h]j)}(hstruct request *rqh](j()}(hj+h]hstruct}(hjZ`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjV`ubj:)}(h h]h }(hjg`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV`ubh)}(hhh]j[)}(hrequesth]hrequest}(hjx`hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhju`ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjz`modnameN classnameNjwjz)}j}]jj)}jsj@`sbc.ata_scsi_dma_need_drainasbuh1hhjV`ubj:)}(h h]h }(hj`hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjV`ubj)}(hjS h]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjV`ubj[)}(hrqh]hrq}(hj`hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjV`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjR`ubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhj+`hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj`hhhj+`hMubah}(Lh]j`ah ](jjeh"]h$]h&]j j )j huh1jhj+`hMhj`hhubj)}(hhh]h)}(h(Check whether data transfer may overflowh]h(Check whether data transfer may overflow}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj+`hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j`j1j`j2j3j4uh1jhhhjZhNhNubj6)}(hXj**Parameters** ``struct request *rq`` request to be checked **Description** ATAPI commands which transfer variable length data to host might overflow due to application error or hardware bug. This function checks whether overflow should be drained and ignored for **request**. LOCKING: None. **Return** 1 if ; otherwise, 0.h](h)}(h**Parameters**h]j )}(hj`h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hj`ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj`ubj)}(hhh]j)}(h-``struct request *rq`` request to be checked h](j)}(h``struct request *rq``h]j\)}(hjah]hstruct request *rq}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjaubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjaubj)}(hhh]h)}(hrequest to be checkedh]hrequest to be checked}(hj7ahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ahMhj4aubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj3ahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubh)}(h**Description**h]j )}(hjYah]h Description}(hj[ahhhNhNubah}(h]h ]h"]h$]h&]uh1j hjWaubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj`ubj)}(hATAPI commands which transfer variable length data to host might overflow due to application error or hardware bug. This function checks whether overflow should be drained and ignored for **request**. LOCKING: None. h](h)}(hATAPI commands which transfer variable length data to host might overflow due to application error or hardware bug. This function checks whether overflow should be drained and ignored for **request**.h](hATAPI commands which transfer variable length data to host might overflow due to application error or hardware bug. This function checks whether overflow should be drained and ignored for }(hjsahhhNhNubj )}(h **request**h]hrequest}(hj{ahhhNhNubah}(h]h ]h"]h$]h&]uh1j hjsaubh.}(hjsahhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjoaubh)}(hLOCKING: None.h]hLOCKING: None.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjoaubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubh)}(h **Return**h]j )}(hjah]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj`ubh)}(h1 if ; otherwise, 0.h]h1 if ; otherwise, 0.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_sdev_init (C function)c.ata_scsi_sdev_inithNtauh1jhjZhhhNhNubj)}(hhh](j)}(h1int ata_scsi_sdev_init (struct scsi_device *sdev)h]j")}(h0int ata_scsi_sdev_init(struct scsi_device *sdev)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMqubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjahhhjahMqubj)}(hata_scsi_sdev_inith]j[)}(hata_scsi_sdev_inith]hata_scsi_sdev_init}(hjbhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj bubah}(h]h ](jjeh"]h$]h&]jjuh1jhjahhhjahMqubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](j()}(hj+h]hstruct}(hj-bhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)bubj:)}(h h]h }(hj:bhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)bubh)}(hhh]j[)}(h scsi_deviceh]h scsi_device}(hjKbhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHbubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjMbmodnameN classnameNjwjz)}j}]jj)}jsjbsbc.ata_scsi_sdev_initasbuh1hhj)bubj:)}(h h]h }(hjkbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)bubj)}(hjS h]h*}(hjybhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)bubj[)}(hsdevh]hsdev}(hjbhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)bubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%bubah}(h]h ]h"]h$]h&]jjuh1jhjahhhjahMqubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjahhhjahMqubah}(h]jaah ](jjeh"]h$]h&]j j )j huh1jhjahMqhjahhubj)}(hhh]h)}(hEarly setup of SCSI deviceh]hEarly setup of SCSI device}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMqhjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahMqubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jbj1jbj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device to examine **Description** This is called from scsi_alloc_sdev() when the scsi device associated with an ATA device is scanned on a port. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(h**Parameters**h]j )}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMuhjbubj)}(hhh]j)}(h4``struct scsi_device *sdev`` SCSI device to examine h](j)}(h``struct scsi_device *sdev``h]j\)}(hjbh]hstruct scsi_device *sdev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjbubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMrhjbubj)}(hhh]h)}(hSCSI device to examineh]hSCSI device to examine}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMrhjcubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjchMrhjbubah}(h]h ]h"]h$]h&]uh1jhjbubh)}(h**Description**h]j )}(hj,ch]h Description}(hj.chhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*cubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMthjbubj)}(hThis is called from scsi_alloc_sdev() when the scsi device associated with an ATA device is scanned on a port. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(hnThis is called from scsi_alloc_sdev() when the scsi device associated with an ATA device is scanned on a port.h]hnThis is called from scsi_alloc_sdev() when the scsi device associated with an ATA device is scanned on a port.}(hjFchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMshjBcubh)}(h6LOCKING: Defined by SCSI layer. We don't really care.h]h8LOCKING: Defined by SCSI layer. We don’t really care.}(hjUchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMvhjBcubeh}(h]h ]h"]h$]h&]uh1jhjTchMshjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ata_scsi_sdev_configure (C function)c.ata_scsi_sdev_configurehNtauh1jhjZhhhNhNubj)}(hhh](j)}(hPint ata_scsi_sdev_configure (struct scsi_device *sdev, struct queue_limits *lim)h]j")}(hOint ata_scsi_sdev_configure(struct scsi_device *sdev, struct queue_limits *lim)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjchhhjchMubj)}(hata_scsi_sdev_configureh]j[)}(hata_scsi_sdev_configureh]hata_scsi_sdev_configure}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcubah}(h]h ](jjeh"]h$]h&]jjuh1jhjchhhjchMubj)}(h4(struct scsi_device *sdev, struct queue_limits *lim)h](j)}(hstruct scsi_device *sdevh](j()}(hj+h]hstruct}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjcubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubh)}(hhh]j[)}(h scsi_deviceh]h scsi_device}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjcmodnameN classnameNjwjz)}j}]jj)}jsjcsbc.ata_scsi_sdev_configureasbuh1hhjcubj:)}(h h]h }(hjdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubj)}(hjS h]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcubj[)}(hsdevh]hsdev}(hj dhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubj)}(hstruct queue_limits *limh](j()}(hj+h]hstruct}(hj9dhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5dubj:)}(h h]h }(hjFdhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5dubh)}(hhh]j[)}(h queue_limitsh]h queue_limits}(hjWdhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjTdubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjYdmodnameN classnameNjwjz)}j}]jdc.ata_scsi_sdev_configureasbuh1hhj5dubj:)}(h h]h }(hjudhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5dubj)}(hjS h]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5dubj[)}(hlimh]hlim}(hjdhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj5dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjchhhjchMubah}(h]j}cah ](jjeh"]h$]h&]j j )j huh1jhjchMhjchhubj)}(hhh]h)}(hSet SCSI device attributesh]hSet SCSI device attributes}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjchhhjchMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jdj1jdj2j3j4uh1jhhhjZhNhNubj6)}(hXO**Parameters** ``struct scsi_device *sdev`` SCSI device to examine ``struct queue_limits *lim`` queue limits **Description** This is called before we actually start reading and writing to the device, to configure certain SCSI mid-layer behaviors. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(h**Parameters**h]j )}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjdubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjdubj)}(hhh](j)}(h4``struct scsi_device *sdev`` SCSI device to examine h](j)}(h``struct scsi_device *sdev``h]j\)}(hjdh]hstruct scsi_device *sdev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjdubj)}(hhh]h)}(hSCSI device to examineh]hSCSI device to examine}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjehMhjdubj)}(h*``struct queue_limits *lim`` queue limits h](j)}(h``struct queue_limits *lim``h]j\)}(hj4eh]hstruct queue_limits *lim}(hj6ehhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2eubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhj.eubj)}(hhh]h)}(h queue limitsh]h queue limits}(hjMehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIehMhjJeubah}(h]h ]h"]h$]h&]uh1jhj.eubeh}(h]h ]h"]h$]h&]uh1jhjIehMhjdubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j )}(hjoeh]h Description}(hjqehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjmeubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjdubj)}(hThis is called before we actually start reading and writing to the device, to configure certain SCSI mid-layer behaviors. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(hyThis is called before we actually start reading and writing to the device, to configure certain SCSI mid-layer behaviors.h]hyThis is called before we actually start reading and writing to the device, to configure certain SCSI mid-layer behaviors.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjeubh)}(h6LOCKING: Defined by SCSI layer. We don't really care.h]h8LOCKING: Defined by SCSI layer. We don’t really care.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_scsi_sdev_destroy (C function)c.ata_scsi_sdev_destroyhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h5void ata_scsi_sdev_destroy (struct scsi_device *sdev)h]j")}(h4void ata_scsi_sdev_destroy(struct scsi_device *sdev)h](j)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjehhhjehMubj)}(hata_scsi_sdev_destroyh]j[)}(hata_scsi_sdev_destroyh]hata_scsi_sdev_destroy}(hjehhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjeubah}(h]h ](jjeh"]h$]h&]jjuh1jhjehhhjehMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](j()}(hj+h]hstruct}(hj fhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjfubj:)}(h h]h }(hjfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubh)}(hhh]j[)}(h scsi_deviceh]h scsi_device}(hj(fhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%fubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj*fmodnameN classnameNjwjz)}j}]jj)}jsjesbc.ata_scsi_sdev_destroyasbuh1hhjfubj:)}(h h]h }(hjHfhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjfubj)}(hjS h]h*}(hjVfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjfubj[)}(hsdevh]hsdev}(hjcfhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfubah}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1jhjehMhjehhubj)}(hhh]h)}(h$SCSI device is about to be destroyedh]h$SCSI device is about to be destroyed}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jfj1jfj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device to be destroyed **Description** **sdev** is about to be destroyed for hot/warm unplugging. If this unplugging was initiated by libata as indicated by NULL dev->sdev, this function doesn't have to do anything. Otherwise, SCSI layer initiated warm-unplug is in progress. Clear dev->sdev, schedule the device for ATA detach and invoke EH. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(h**Parameters**h]j )}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjfubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjfubj)}(hhh]j)}(h9``struct scsi_device *sdev`` SCSI device to be destroyed h](j)}(h``struct scsi_device *sdev``h]j\)}(hjfh]hstruct scsi_device *sdev}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjfubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjfubj)}(hhh]h)}(hSCSI device to be destroyedh]hSCSI device to be destroyed}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j )}(hj gh]h Description}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1j hjgubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjfubj)}(hXh**sdev** is about to be destroyed for hot/warm unplugging. If this unplugging was initiated by libata as indicated by NULL dev->sdev, this function doesn't have to do anything. Otherwise, SCSI layer initiated warm-unplug is in progress. Clear dev->sdev, schedule the device for ATA detach and invoke EH. LOCKING: Defined by SCSI layer. We don't really care.h](h)}(hX0**sdev** is about to be destroyed for hot/warm unplugging. If this unplugging was initiated by libata as indicated by NULL dev->sdev, this function doesn't have to do anything. Otherwise, SCSI layer initiated warm-unplug is in progress. Clear dev->sdev, schedule the device for ATA detach and invoke EH.h](j )}(h**sdev**h]hsdev}(hj'ghhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#gubhX* is about to be destroyed for hot/warm unplugging. If this unplugging was initiated by libata as indicated by NULL dev->sdev, this function doesn’t have to do anything. Otherwise, SCSI layer initiated warm-unplug is in progress. Clear dev->sdev, schedule the device for ATA detach and invoke EH.}(hj#ghhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjgubh)}(h6LOCKING: Defined by SCSI layer. We don't really care.h]h8LOCKING: Defined by SCSI layer. We don’t really care.}(hj@ghhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjgubeh}(h]h ]h"]h$]h&]uh1jhj?ghMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_queuecmd (C function)c.ata_scsi_queuecmdhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hVenum scsi_qc_status ata_scsi_queuecmd (struct Scsi_Host *shost, struct scsi_cmnd *cmd)h]j")}(hUenum scsi_qc_status ata_scsi_queuecmd(struct Scsi_Host *shost, struct scsi_cmnd *cmd)h](j()}(hjh]henum}(hjughhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjqghhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqghhhjghMubh)}(hhh]j[)}(hscsi_qc_statush]hscsi_qc_status}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjgmodnameN classnameNjwjz)}j}]jj)}jsata_scsi_queuecmdsbc.ata_scsi_queuecmdasbuh1hhjqghhhjghMubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqghhhjghMubj)}(hata_scsi_queuecmdh]j[)}(hjgh]hata_scsi_queuecmd}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqghhhjghMubj)}(h0(struct Scsi_Host *shost, struct scsi_cmnd *cmd)h](j)}(hstruct Scsi_Host *shosth](j()}(hj+h]hstruct}(hjghhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjgubj:)}(h h]h }(hjghhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubh)}(hhh]j[)}(h Scsi_Hosth]h Scsi_Host}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjhmodnameN classnameNjwjz)}j}]jgc.ata_scsi_queuecmdasbuh1hhjgubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjgubj)}(hjS h]h*}(hj,hhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubj[)}(hshosth]hshost}(hj9hhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjRhhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjNhubj:)}(h h]h }(hj_hhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNhubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjphhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmhubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjrhmodnameN classnameNjwjz)}j}]jgc.ata_scsi_queuecmdasbuh1hhjNhubj:)}(h h]h }(hjhhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjNhubj)}(hjS h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjNhubj[)}(hcmdh]hcmd}(hjhhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjqghhhjghMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjmghhhjghMubah}(h]jhgah ](jjeh"]h$]h&]j j )j huh1jhjghMhjjghhubj)}(hhh]h)}(h'Issue SCSI cdb to libata-managed deviceh]h'Issue SCSI cdb to libata-managed device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjjghhhjghMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jhj1jhj2j3j4uh1jhhhjZhNhNubj6)}(hXn**Parameters** ``struct Scsi_Host *shost`` SCSI host of command to be sent ``struct scsi_cmnd *cmd`` SCSI command to be sent **Description** In some cases, this function translates SCSI commands into ATA taskfiles, and queues the taskfiles to be sent to hardware. In other cases, this function simulates a SCSI device by evaluating and responding to certain SCSI commands. This creates the overall effect of ATA and ATAPI devices appearing as SCSI devices. LOCKING: ATA host lock **Return** Return value from __ata_scsi_queuecmd() if **cmd** can be queued, 0 otherwise.h](h)}(h**Parameters**h]j )}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjhubj)}(hhh](j)}(h<``struct Scsi_Host *shost`` SCSI host of command to be sent h](j)}(h``struct Scsi_Host *shost``h]j\)}(hjih]hstruct Scsi_Host *shost}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjiubj)}(hhh]h)}(hSCSI host of command to be senth]hSCSI host of command to be sent}(hj-ihhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ihMhj*iubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj)ihMhj iubj)}(h2``struct scsi_cmnd *cmd`` SCSI command to be sent h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjMih]hstruct scsi_cmnd *cmd}(hjOihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjKiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjGiubj)}(hhh]h)}(hSCSI command to be senth]hSCSI command to be sent}(hjfihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbihMhjciubah}(h]h ]h"]h$]h&]uh1jhjGiubeh}(h]h ]h"]h$]h&]uh1jhjbihMhj iubeh}(h]h ]h"]h$]h&]uh1jhjhubh)}(h**Description**h]j )}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjiubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjhubj)}(hXVIn some cases, this function translates SCSI commands into ATA taskfiles, and queues the taskfiles to be sent to hardware. In other cases, this function simulates a SCSI device by evaluating and responding to certain SCSI commands. This creates the overall effect of ATA and ATAPI devices appearing as SCSI devices. LOCKING: ATA host lock h](h)}(hX=In some cases, this function translates SCSI commands into ATA taskfiles, and queues the taskfiles to be sent to hardware. In other cases, this function simulates a SCSI device by evaluating and responding to certain SCSI commands. This creates the overall effect of ATA and ATAPI devices appearing as SCSI devices.h]hX=In some cases, this function translates SCSI commands into ATA taskfiles, and queues the taskfiles to be sent to hardware. In other cases, this function simulates a SCSI device by evaluating and responding to certain SCSI commands. This creates the overall effect of ATA and ATAPI devices appearing as SCSI devices.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjiubh)}(hLOCKING: ATA host lockh]hLOCKING: ATA host lock}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMhjhubh)}(h **Return**h]j )}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjiubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjhubh)}(hNReturn value from __ata_scsi_queuecmd() if **cmd** can be queued, 0 otherwise.h](h+Return value from __ata_scsi_queuecmd() if }(hjihhhNhNubj )}(h**cmd**h]hcmd}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjiubh can be queued, 0 otherwise.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:601: ./drivers/ata/libata-scsi.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j/ata_scsi_set_passthru_sense_fields (C function)$c.ata_scsi_set_passthru_sense_fieldshNtauh1jhjZhhhNhNubj)}(hhh](j)}(hCvoid ata_scsi_set_passthru_sense_fields (struct ata_queued_cmd *qc)h]j")}(hBvoid ata_scsi_set_passthru_sense_fields(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chKubj:)}(h h]h }(hj.jhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjjhhhj-jhKubj)}(h"ata_scsi_set_passthru_sense_fieldsh]j[)}(h"ata_scsi_set_passthru_sense_fieldsh]h"ata_scsi_set_passthru_sense_fields}(hj@jhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjshhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj;subah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj@smodnameN classnameNjwjz)}j}]jj)}jsata_scsi_qc_newsbc.ata_scsi_qc_newasbuh1hhjshhhj,shMubj:)}(h h]h }(hj_shhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjshhhj,shMubj)}(hjS h]h*}(hjmshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjshhhj,shMubj)}(hata_scsi_qc_newh]j[)}(hj\sh]hata_scsi_qc_new}(hj~shhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjzsubah}(h]h ](jjeh"]h$]h&]jjuh1jhjshhhj,shMubj)}(h/(struct ata_device *dev, struct scsi_cmnd *cmd)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjshhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjsubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjshhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjsubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjsmodnameN classnameNjwjz)}j}]jZsc.ata_scsi_qc_newasbuh1hhjsubj:)}(h h]h }(hjshhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjsubj)}(hjS h]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubj[)}(hdevh]hdev}(hjshhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hj thhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjtubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hj'thhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj$tubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj)tmodnameN classnameNjwjz)}j}]jZsc.ata_scsi_qc_newasbuh1hhjtubj:)}(h h]h }(hjEthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjtubj)}(hjS h]h*}(hjSthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtubj[)}(hcmdh]hcmd}(hj`thhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubeh}(h]h ]h"]h$]h&]jjuh1jhjshhhj,shMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjshhhj,shMubah}(h]jsah ](jjeh"]h$]h&]j j )j huh1jhj,shMhjshhubj)}(hhh]h)}(h$acquire new ata_queued_cmd referenceh]h$acquire new ata_queued_cmd reference}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjthhubah}(h]h ]h"]h$]h&]uh1jhjshhhj,shMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jtj1jtj2j3j4uh1jhhhjZhNhNubj6)}(hXW**Parameters** ``struct ata_device *dev`` ATA device to which the new command is attached ``struct scsi_cmnd *cmd`` SCSI command that originated this ATA command **Description** Obtain a reference to an unused ata_queued_cmd structure, which is the basic libata structure representing a single ATA command sent to the hardware. If a command was available, fill in the SCSI-specific portions of the structure with information on the current command. LOCKING: spin_lock_irqsave(host lock) **Return** Command allocated, or ``NULL`` if none available.h](h)}(h**Parameters**h]j )}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j hjtubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubj)}(hhh](j)}(hK``struct ata_device *dev`` ATA device to which the new command is attached h](j)}(h``struct ata_device *dev``h]j\)}(hjth]hstruct ata_device *dev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjtubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubj)}(hhh]h)}(h/ATA device to which the new command is attachedh]h/ATA device to which the new command is attached}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMhjtubj)}(hH``struct scsi_cmnd *cmd`` SCSI command that originated this ATA command h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjuh]hstruct scsi_cmnd *cmd}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjuubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubj)}(hhh]h)}(h-SCSI command that originated this ATA commandh]h-SCSI command that originated this ATA command}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(h**Description**h]j )}(hj?uh]h Description}(hjAuhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj=uubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubj)}(hX7Obtain a reference to an unused ata_queued_cmd structure, which is the basic libata structure representing a single ATA command sent to the hardware. If a command was available, fill in the SCSI-specific portions of the structure with information on the current command. LOCKING: spin_lock_irqsave(host lock) h](h)}(hObtain a reference to an unused ata_queued_cmd structure, which is the basic libata structure representing a single ATA command sent to the hardware.h]hObtain a reference to an unused ata_queued_cmd structure, which is the basic libata structure representing a single ATA command sent to the hardware.}(hjYuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjUuubh)}(hxIf a command was available, fill in the SCSI-specific portions of the structure with information on the current command.h]hxIf a command was available, fill in the SCSI-specific portions of the structure with information on the current command.}(hjhuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjUuubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjwuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjUuubeh}(h]h ]h"]h$]h&]uh1jhjguhMhjtubh)}(h **Return**h]j )}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubh)}(h1Command allocated, or ``NULL`` if none available.h](hCommand allocated, or }(hjuhhhNhNubj\)}(h``NULL``h]hNULL}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjuubh if none available.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_to_sense_error (C function)c.ata_to_sense_errorhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hLvoid ata_to_sense_error (u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, u8 *ascq)h]j")}(hKvoid ata_to_sense_error(u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, u8 *ascq)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjuhhhjuhMubj)}(hata_to_sense_errorh]j[)}(hata_to_sense_errorh]hata_to_sense_error}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjuhhhjuhMubj)}(h4(u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, u8 *ascq)h](j)}(h u8 drv_stath](h)}(hhh]j[)}(hu8h]hu8}(hj%vhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj"vubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj'vmodnameN classnameNjwjz)}j}]jj)}jsjvsbc.ata_to_sense_errorasbuh1hhjvubj:)}(h h]h }(hjEvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj[)}(hdrv_stath]hdrv_stat}(hjSvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(h u8 drv_errh](h)}(hhh]j[)}(hu8h]hu8}(hjovhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjlvubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjqvmodnameN classnameNjwjz)}j}]jAvc.ata_to_sense_errorasbuh1hhjhvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhvubj[)}(hdrv_errh]hdrv_err}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjhvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 *skh](h)}(hhh]j[)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjvmodnameN classnameNjwjz)}j}]jAvc.ata_to_sense_errorasbuh1hhjvubj:)}(h h]h }(hjvhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hjS h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubj[)}(hskh]hsk}(hjvhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 *asch](h)}(hhh]j[)}(hu8h]hu8}(hj whhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj wubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjwmodnameN classnameNjwjz)}j}]jAvc.ata_to_sense_errorasbuh1hhjwubj:)}(h h]h }(hj*whhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjwubj)}(hjS h]h*}(hj8whhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjwubj[)}(hasch]hasc}(hjEwhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubj)}(hu8 *ascqh](h)}(hhh]j[)}(hu8h]hu8}(hjawhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^wubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjcwmodnameN classnameNjwjz)}j}]jAvc.ata_to_sense_errorasbuh1hhjZwubj:)}(h h]h }(hjwhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZwubj)}(hjS h]h*}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZwubj[)}(hascqh]hascq}(hjwhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjZwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjuhhhjuhMubah}(h]juah ](jjeh"]h$]h&]j j )j huh1jhjuhMhjuhhubj)}(hhh]h)}(hconvert ATA error to SCSI errorh]hconvert ATA error to SCSI error}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jwj1jwj2j3j4uh1jhhhjZhNhNubj6)}(hX **Parameters** ``u8 drv_stat`` value contained in ATA status register ``u8 drv_err`` value contained in ATA error register ``u8 *sk`` the sense key we'll fill out ``u8 *asc`` the additional sense code we'll fill out ``u8 *ascq`` the additional sense code qualifier we'll fill out **Description** Converts an ATA error into a SCSI error. Fill out pointers to SK, ASC, and ASCQ bytes for later use in fixed or descriptor format sense blocks. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjwubj)}(hhh](j)}(h7``u8 drv_stat`` value contained in ATA status register h](j)}(h``u8 drv_stat``h]j\)}(hjxh]h u8 drv_stat}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjwubj)}(hhh]h)}(h&value contained in ATA status registerh]h&value contained in ATA status register}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjwubj)}(h5``u8 drv_err`` value contained in ATA error register h](j)}(h``u8 drv_err``h]j\)}(hj>xh]h u8 drv_err}(hj@xhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM"hj:yubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjMyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM&hj:yubeh}(h]h ]h"]h$]h&]uh1jhjLyhM"hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_gen_ata_sense (C function)c.ata_gen_ata_sensehNtauh1jhjZhhhNhNubj)}(hhh](j)}(h2void ata_gen_ata_sense (struct ata_queued_cmd *qc)h]j")}(h1void ata_gen_ata_sense(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~yhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~yhhhjyhMubj)}(hata_gen_ata_senseh]j[)}(hata_gen_ata_senseh]hata_gen_ata_sense}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~yhhhjyhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjyubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjymodnameN classnameNjwjz)}j}]jj)}jsjysbc.ata_gen_ata_senseasbuh1hhjyubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hjS h]h*}(hj zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hqch]hqc}(hjzhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhj~yhhhjyhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjzyhhhjyhMubah}(h]juyah ](jjeh"]h$]h&]j j )j huh1jhjyhMhjwyhhubj)}(hhh]h)}(h!generate a SCSI fixed sense blockh]h!generate a SCSI fixed sense block}(hjBzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj?zhhubah}(h]h ]h"]h$]h&]uh1jhjwyhhhjyhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jZzj1jZzj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` Command that we are erroring out **Description** Generate sense block for a failed ATA command **qc**. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjdzh]h Parameters}(hjfzhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjbzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj^zubj)}(hhh]j)}(h?``struct ata_queued_cmd *qc`` Command that we are erroring out h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjzh]hstruct ata_queued_cmd *qc}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjzubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj}zubj)}(hhh]h)}(h Command that we are erroring outh]h Command that we are erroring out}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhj}zubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjzzubah}(h]h ]h"]h$]h&]uh1jhj^zubh)}(h**Description**h]j )}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj^zubj)}(hEGenerate sense block for a failed ATA command **qc**. LOCKING: None.h](h)}(h5Generate sense block for a failed ATA command **qc**.h](h.Generate sense block for a failed ATA command }(hjzhhhNhNubj )}(h**qc**h]hqc}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjzubh.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjzubh)}(hLOCKING: None.h]hLOCKING: None.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj^zubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ata_scsi_start_stop_xlat (C function)c.ata_scsi_start_stop_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(hAunsigned int ata_scsi_start_stop_xlat (struct ata_queued_cmd *qc)h]j")}(h@unsigned int ata_scsi_start_stop_xlat(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hj.{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*{hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hj={hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*{hhhj<{hMubj)}(hinth]hint}(hjK{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*{hhhj<{hMubj:)}(h h]h }(hjY{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*{hhhj<{hMubj)}(hata_scsi_start_stop_xlath]j[)}(hata_scsi_start_stop_xlath]hata_scsi_start_stop_xlat}(hjk{hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjg{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj*{hhhj<{hMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj{hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj{ubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj{hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj{modnameN classnameNjwjz)}j}]jj)}jsjm{sbc.ata_scsi_start_stop_xlatasbuh1hhj{ubj:)}(h h]h }(hj{hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj{ubj)}(hjS h]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubj[)}(hqch]hqc}(hj{hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubah}(h]h ]h"]h$]h&]jjuh1jhj*{hhhj<{hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj&{hhhj<{hMubah}(h]j!{ah ](jjeh"]h$]h&]j j )j huh1jhj<{hMhj#{hhubj)}(hhh]h)}(h&Translate SCSI START STOP UNIT commandh]h&Translate SCSI START STOP UNIT command}(hj |hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj#{hhhj<{hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j"|j1j"|j2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile **Description** Sets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY (to start). Perhaps these commands should be preceded by CHECK POWER MODE to see what power mode the device is already in. [See SAT revision 5 at www.t10.org] LOCKING: spin_lock_irqsave(host lock) **Return** Zero on success, non-zero on error.h](h)}(h**Parameters**h]j )}(hj,|h]h Parameters}(hj.|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj&|ubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjK|h]hstruct ata_queued_cmd *qc}(hjM|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjI|ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjE|ubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjd|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`|hMhja|ubah}(h]h ]h"]h$]h&]uh1jhjE|ubeh}(h]h ]h"]h$]h&]uh1jhj`|hMhjB|ubah}(h]h ]h"]h$]h&]uh1jhj&|ubh)}(h**Description**h]j )}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj&|ubj)}(hXSets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY (to start). Perhaps these commands should be preceded by CHECK POWER MODE to see what power mode the device is already in. [See SAT revision 5 at www.t10.org] LOCKING: spin_lock_irqsave(host lock) h](h)}(hSets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY (to start). Perhaps these commands should be preceded by CHECK POWER MODE to see what power mode the device is already in. [See SAT revision 5 at www.t10.org]h]hSets up an ATA taskfile to issue STANDBY (to stop) or READ VERIFY (to start). Perhaps these commands should be preceded by CHECK POWER MODE to see what power mode the device is already in. [See SAT revision 5 at www.t10.org]}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj|ubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj&|ubh)}(h **Return**h]j )}(hj|h]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj&|ubh)}(h#Zero on success, non-zero on error.h]h#Zero on success, non-zero on error.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj&|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_scsi_flush_xlat (C function)c.ata_scsi_flush_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(h~ubah}(h]h ]h"]h$]h&]uh1jhj"~ubeh}(h]h ]h"]h$]h&]uh1jhj=~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubh)}(h**Description**h]j )}(hjc~h]h Description}(hje~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hja~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj~ubj)}(hhSets up an ATA taskfile to issue FLUSH CACHE or FLUSH CACHE EXT. LOCKING: spin_lock_irqsave(host lock) h](h)}(h@Sets up an ATA taskfile to issue FLUSH CACHE or FLUSH CACHE EXT.h]h@Sets up an ATA taskfile to issue FLUSH CACHE or FLUSH CACHE EXT.}(hj}~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjy~ubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjy~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhj~ubh)}(h **Return**h]j )}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj~ubh)}(h#Zero on success, non-zero on error.h]h#Zero on success, non-zero on error.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jscsi_6_lba_len (C function)c.scsi_6_lba_lenhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h9void scsi_6_lba_len (const u8 *cdb, u64 *plba, u32 *plen)h]j")}(h8void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM.ubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~hhhj~hM.ubj)}(hscsi_6_lba_lenh]j[)}(hscsi_6_lba_lenh]hscsi_6_lba_len}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhj~hM.ubj)}(h%(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(h const u8 *cdbh](j()}(hj(h]hconst}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]j[)}(hu8h]hu8}(hjChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jj)}jsj sbc.scsi_6_lba_lenasbuh1hhj!ubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjS h]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubj[)}(hcdbh]hcdb}(hj~hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 *plbah](h)}(hhh]j[)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j_c.scsi_6_lba_lenasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hplbah]hplba}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 *plenh](h)}(hhh]j[)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j_c.scsi_6_lba_lenasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hplenh]hplen}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhj~hM.ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj~hhhj~hM.ubah}(h]j~ah ](jjeh"]h$]h&]j j )j huh1jhj~hM.hj~hhubj)}(hhh]h)}(hGet LBA and transfer lengthh]hGet LBA and transfer length}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM.hjOhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hM.ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jjj1jjj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``const u8 *cdb`` SCSI command to translate ``u64 *plba`` the LBA ``u32 *plen`` the transfer length **Description** Calculate LBA and transfer length for 6-byte commands.h](h)}(h**Parameters**h]j )}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjrubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM2hjnubj)}(hhh](j)}(h,``const u8 *cdb`` SCSI command to translate h](j)}(h``const u8 *cdb``h]j\)}(hjh]h const u8 *cdb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM/hjubj)}(hhh]h)}(hSCSI command to translateh]hSCSI command to translate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(h``u64 *plba`` the LBA h](j)}(h ``u64 *plba``h]j\)}(hj̀h]h u64 *plba}(hj΀hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjʀubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM4hjƀubj)}(hhh]h)}(hthe LBAh]hthe LBA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjƀubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubj)}(h"``u32 *plen`` the transfer length h](j)}(h ``u32 *plen``h]j\)}(hjh]h u32 *plen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM5hjubj)}(hhh]h)}(hthe transfer lengthh]hthe transfer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubeh}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j )}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM7hjnubj)}(h6Calculate LBA and transfer length for 6-byte commands.h]h)}(hjXh]h6Calculate LBA and transfer length for 6-byte commands.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM0hjVubah}(h]h ]h"]h$]h&]uh1jhjghM0hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jscsi_10_lba_len (C function)c.scsi_10_lba_lenhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h:void scsi_10_lba_len (const u8 *cdb, u64 *plba, u32 *plen)h]j")}(h9void scsi_10_lba_len(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM>ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM>ubj)}(hscsi_10_lba_lenh]j[)}(hscsi_10_lba_lenh]hscsi_10_lba_len}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM>ubj)}(h%(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(h const u8 *cdbh](j()}(hj(h]hconst}(hjˁhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjǁubj:)}(h h]h }(hj؁hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjǁubh)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.scsi_10_lba_lenasbuh1hhjǁubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjǁubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjǁubj[)}(hcdbh]hcdb}(hj$hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjǁubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjÁubj)}(h u64 *plbah](h)}(hhh]j[)}(hu64h]hu64}(hj@hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjBmodnameN classnameNjwjz)}j}]jc.scsi_10_lba_lenasbuh1hhj9ubj:)}(h h]h }(hj^hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubj)}(hjS h]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9ubj[)}(hplbah]hplba}(hjyhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjÁubj)}(h u32 *plenh](h)}(hhh]j[)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.scsi_10_lba_lenasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hplenh]hplen}(hj΂hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjÁubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM>hjhhubj)}(hhh]h)}(hGet LBA and transfer lengthh]hGet LBA and transfer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM>ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``const u8 *cdb`` SCSI command to translate ``u64 *plba`` the LBA ``u32 *plen`` the transfer length **Description** Calculate LBA and transfer length for 10-byte commands.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMBhjubj)}(hhh](j)}(h,``const u8 *cdb`` SCSI command to translate h](j)}(h``const u8 *cdb``h]j\)}(hj9h]h const u8 *cdb}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj7ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM?hj3ubj)}(hhh]h)}(hSCSI command to translateh]hSCSI command to translate}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM?hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM?hj0ubj)}(h``u64 *plba`` the LBA h](j)}(h ``u64 *plba``h]j\)}(hjrh]h u64 *plba}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjpubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMDhjlubj)}(hhh]h)}(hthe LBAh]hthe LBA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMDhj0ubj)}(h"``u32 *plen`` the transfer length h](j)}(h ``u32 *plen``h]j\)}(hjh]h u32 *plen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMEhjubj)}(hhh]h)}(hthe transfer lengthh]hthe transfer length}(hjăhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMGhjubj)}(h7Calculate LBA and transfer length for 10-byte commands.h]h)}(hjh]h7Calculate LBA and transfer length for 10-byte commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM@hjubah}(h]h ]h"]h$]h&]uh1jhj hM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jscsi_16_lba_len (C function)c.scsi_16_lba_lenhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h:void scsi_16_lba_len (const u8 *cdb, u64 *plba, u32 *plen)h]j")}(h9void scsi_16_lba_len(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMNubj:)}(h h]h }(hjChhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj0hhhjBhMNubj)}(hscsi_16_lba_lenh]j[)}(hscsi_16_lba_lenh]hscsi_16_lba_len}(hjUhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjQubah}(h]h ](jjeh"]h$]h&]jjuh1jhj0hhhjBhMNubj)}(h%(const u8 *cdb, u64 *plba, u32 *plen)h](j)}(h const u8 *cdbh](j()}(hj(h]hconst}(hjqhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjmubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubh)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjWsbc.scsi_16_lba_lenasbuh1hhjmubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjmubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmubj[)}(hcdbh]hcdb}(hjʄhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(h u64 *plbah](h)}(hhh]j[)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.scsi_16_lba_lenasbuh1hhj߄ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj߄ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj߄ubj[)}(hplbah]hplba}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj߄ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubj)}(h u32 *plenh](h)}(hhh]j[)}(hu32h]hu32}(hj;hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj8ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj=modnameN classnameNjwjz)}j}]jc.scsi_16_lba_lenasbuh1hhj4ubj:)}(h h]h }(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj4ubj)}(hjS h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj4ubj[)}(hplenh]hplen}(hjthhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjiubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhjBhMNubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj,hhhjBhMNubah}(h]j'ah ](jjeh"]h$]h&]j j )j huh1jhjBhMNhj)hhubj)}(hhh]h)}(hGet LBA and transfer lengthh]hGet LBA and transfer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMNhjhhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjBhMNubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``const u8 *cdb`` SCSI command to translate ``u64 *plba`` the LBA ``u32 *plen`` the transfer length **Description** Calculate LBA and transfer length for 16-byte commands.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hj…hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMRhjubj)}(hhh](j)}(h,``const u8 *cdb`` SCSI command to translate h](j)}(h``const u8 *cdb``h]j\)}(hj߅h]h const u8 *cdb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj݅ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMOhjمubj)}(hhh]h)}(hSCSI command to translateh]hSCSI command to translate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjمubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjօubj)}(h``u64 *plba`` the LBA h](j)}(h ``u64 *plba``h]j\)}(hjh]h u64 *plba}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMThjubj)}(hhh]h)}(hthe LBAh]hthe LBA}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMThj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMThjօubj)}(h"``u32 *plen`` the transfer length h](j)}(h ``u32 *plen``h]j\)}(hjQh]h u32 *plen}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMUhjKubj)}(hhh]h)}(hthe transfer lengthh]hthe transfer length}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMUhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMUhjօubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMWhjubj)}(h7Calculate LBA and transfer length for 16-byte commands.h]h)}(hjh]h7Calculate LBA and transfer length for 16-byte commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMPhjubah}(h]h ]h"]h$]h&]uh1jhjhMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jscsi_dld (C function) c.scsi_dldhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hint scsi_dld (const u8 *cdb)h]j")}(hint scsi_dld(const u8 *cdb)h](j)}(hinth]hint}(hjچhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֆhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjֆhhhjhM^ubj)}(hscsi_dldh]j[)}(hscsi_dldh]hscsi_dld}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjֆhhhjhM^ubj)}(h(const u8 *cdb)h]j)}(h const u8 *cdbh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj$hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hu8h]hu8}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj7modnameN classnameNjwjz)}j}]jj)}jsjsb c.scsi_dldasbuh1hhjubj:)}(h h]h }(hjUhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcdbh]hcdb}(hjphhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjֆhhhjhM^ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj҆hhhjhM^ubah}(h]j͆ah ](jjeh"]h$]h&]j j )j huh1jhjhM^hjφhhubj)}(hhh]h)}(h#Get duration limit descriptor indexh]h#Get duration limit descriptor index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM^hjhhubah}(h]h ]h"]h$]h&]uh1jhjφhhhjhM^ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``const u8 *cdb`` SCSI command to translate **Description** Returns the dld bits indicating the index of a command duration limit descriptor.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMbhjubj)}(hhh]j)}(h,``const u8 *cdb`` SCSI command to translate h](j)}(h``const u8 *cdb``h]j\)}(hjۇh]h const u8 *cdb}(hj݇hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjهubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM_hjՇubj)}(hhh]h)}(hSCSI command to translateh]hSCSI command to translate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjՇubeh}(h]h ]h"]h$]h&]uh1jhjhM_hj҇ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMahjubj)}(hQReturns the dld bits indicating the index of a command duration limit descriptor.h]h)}(hQReturns the dld bits indicating the index of a command duration limit descriptor.h]hQReturns the dld bits indicating the index of a command duration limit descriptor.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM`hj,ubah}(h]h ]h"]h$]h&]uh1jhj>hM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_scsi_verify_xlat (C function)c.ata_scsi_verify_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(h=unsigned int ata_scsi_verify_xlat (struct ata_queued_cmd *qc)h]j")}(hhhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshMjubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jYj1jYj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile **Description** Converts SCSI VERIFY command to an ATA READ VERIFY command. LOCKING: spin_lock_irqsave(host lock) **Return** Zero on success, non-zero on error.h](h)}(h**Parameters**h]j )}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j hjaubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMnhj]ubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMkhj|ubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMmhj]ubj)}(hcConverts SCSI VERIFY command to an ATA READ VERIFY command. LOCKING: spin_lock_irqsave(host lock) h](h)}(h;Converts SCSI VERIFY command to an ATA READ VERIFY command.h]h;Converts SCSI VERIFY command to an ATA READ VERIFY command.}(hj׉hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMlhjӉubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMnhjӉubeh}(h]h ]h"]h$]h&]uh1jhjhMlhj]ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMqhj]ubh)}(h#Zero on success, non-zero on error.h]h#Zero on success, non-zero on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMrhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_rw_xlat (C function)c.ata_scsi_rw_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(h9unsigned int ata_scsi_rw_xlat (struct ata_queued_cmd *qc)h]j")}(h8unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>hhhjPhMubj)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjPhMubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>hhhjPhMubj)}(hata_scsi_rw_xlath]j[)}(hata_scsi_rw_xlath]hata_scsi_rw_xlat}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>hhhjPhMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_rw_xlatasbuh1hhjubj:)}(h h]h }(hjيhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj:hhhjPhMubah}(h]j5ah ](jjeh"]h$]h&]j j )j huh1jhjPhMhj7hhubj)}(hhh]h)}(h*Translate SCSI r/w command into an ATA oneh]h*Translate SCSI r/w command into an ATA one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j6j1j6j2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile **Description** Converts any of six SCSI read/write commands into the ATA counterpart, including starting sector (LBA), sector count, and taking into account the device's LBA48 support. Commands ``READ_6``, ``READ_10``, ``READ_16``, ``WRITE_6``, ``WRITE_10``, and ``WRITE_16`` are currently supported. LOCKING: spin_lock_irqsave(host lock) **Return** Zero on success, non-zero on error.h](h)}(h**Parameters**h]j )}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj:ubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj_h]hstruct ata_queued_cmd *qc}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj]ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjYubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj:ubj)}(hXFConverts any of six SCSI read/write commands into the ATA counterpart, including starting sector (LBA), sector count, and taking into account the device's LBA48 support. Commands ``READ_6``, ``READ_10``, ``READ_16``, ``WRITE_6``, ``WRITE_10``, and ``WRITE_16`` are currently supported. LOCKING: spin_lock_irqsave(host lock) h](h)}(hConverts any of six SCSI read/write commands into the ATA counterpart, including starting sector (LBA), sector count, and taking into account the device's LBA48 support.h]hConverts any of six SCSI read/write commands into the ATA counterpart, including starting sector (LBA), sector count, and taking into account the device’s LBA48 support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(hsCommands ``READ_6``, ``READ_10``, ``READ_16``, ``WRITE_6``, ``WRITE_10``, and ``WRITE_16`` are currently supported.h](h Commands }(hjËhhhNhNubj\)}(h ``READ_6``h]hREAD_6}(hjˋhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh, }(hjËhhhNhNubj\)}(h ``READ_10``h]hREAD_10}(hj݋hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh, }hjËsbj\)}(h ``READ_16``h]hREAD_16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh, }hjËsbj\)}(h ``WRITE_6``h]hWRITE_6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh, }hjËsbj\)}(h ``WRITE_10``h]hWRITE_10}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh, and }(hjËhhhNhNubj\)}(h ``WRITE_16``h]hWRITE_16}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjËubh are currently supported.}(hjËhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ]h"]h$]h&]uh1jhj‹hMhj:ubh)}(h **Return**h]j )}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj:ubh)}(h#Zero on success, non-zero on error.h]h#Zero on success, non-zero on error.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_translate (C function)c.ata_scsi_translatehNtauh1jhjZhhhNhNubj)}(hhh](j)}(hvint ata_scsi_translate (struct ata_device *dev, struct scsi_cmnd *cmd, ata_xlat_func_t xlat_func, struct ata_port *ap)h]j")}(huint ata_scsi_translate(struct ata_device *dev, struct scsi_cmnd *cmd, ata_xlat_func_t xlat_func, struct ata_port *ap)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM.ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM.ubj)}(hata_scsi_translateh]j[)}(hata_scsi_translateh]hata_scsi_translate}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM.ubj)}(h_(struct ata_device *dev, struct scsi_cmnd *cmd, ata_xlat_func_t xlat_func, struct ata_port *ap)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj׌hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjӌubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjӌubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_translateasbuh1hhjӌubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjӌubj)}(hjS h]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjӌubj[)}(hdevh]hdev}(hj0hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjӌubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjόubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjIhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjEubj:)}(h h]h }(hjVhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjghhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjdubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjimodnameN classnameNjwjz)}j}]jc.ata_scsi_translateasbuh1hhjEubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjEubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjEubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjόubj)}(hata_xlat_func_t xlat_funch](h)}(hhh]j[)}(hata_xlat_func_th]hata_xlat_func_t}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsi_translateasbuh1hhjubj:)}(h h]h }(hjڍhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(h xlat_funch]h xlat_func}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjόubj)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj!modnameN classnameNjwjz)}j}]jc.ata_scsi_translateasbuh1hhjubj:)}(h h]h }(hj=hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjXhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjόubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM.ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM.ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM.hjhhubj)}(hhh]h)}(h/Translate then issue SCSI command to ATA deviceh]h/Translate then issue SCSI command to ATA device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM.hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM.ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` ATA device to which the command is addressed ``struct scsi_cmnd *cmd`` SCSI command to execute ``ata_xlat_func_t xlat_func`` Actor which translates **cmd** to an ATA taskfile ``struct ata_port *ap`` ATA port of interest **Description** Our ->queuecommand() function has decided that the SCSI command issued can be directly translated into an ATA command, rather than handled internally. This function sets up an ata_queued_cmd structure for the SCSI command, and sends that ata_queued_cmd to the hardware. The xlat_func argument (actor) returns 0 if ready to execute ATA command, else 1 to finish translation. If 1 is returned then cmd->result (and possibly cmd->sense_buffer) are assumed to be set reflecting an error condition or clean (early) termination. LOCKING: spin_lock_irqsave(host lock) **Return** 0 on success, SCSI_ML_QUEUE_DEVICE_BUSY or SCSI_MLQUEUE_HOST_BUSY if the command needs to be deferred.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM2hjubj)}(hhh](j)}(hH``struct ata_device *dev`` ATA device to which the command is addressed h](j)}(h``struct ata_device *dev``h]j\)}(hjÎh]hstruct ata_device *dev}(hjŎhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM/hjubj)}(hhh]h)}(h,ATA device to which the command is addressedh]h,ATA device to which the command is addressed}(hj܎hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj؎hM/hjَubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj؎hM/hjubj)}(h2``struct scsi_cmnd *cmd`` SCSI command to execute h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM0hjubj)}(hhh]h)}(hSCSI command to executeh]hSCSI command to execute}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(hP``ata_xlat_func_t xlat_func`` Actor which translates **cmd** to an ATA taskfile h](j)}(h``ata_xlat_func_t xlat_func``h]j\)}(hj5h]hata_xlat_func_t xlat_func}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM1hj/ubj)}(hhh]h)}(h1Actor which translates **cmd** to an ATA taskfileh](hActor which translates }(hjNhhhNhNubj )}(h**cmd**h]hcmd}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjNubh to an ATA taskfile}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhM1hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM1hjubj)}(h-``struct ata_port *ap`` ATA port of interest h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj~ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM2hjzubj)}(hhh]h)}(hATA port of interesth]hATA port of interest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM4hjubj)}(hX4Our ->queuecommand() function has decided that the SCSI command issued can be directly translated into an ATA command, rather than handled internally. This function sets up an ata_queued_cmd structure for the SCSI command, and sends that ata_queued_cmd to the hardware. The xlat_func argument (actor) returns 0 if ready to execute ATA command, else 1 to finish translation. If 1 is returned then cmd->result (and possibly cmd->sense_buffer) are assumed to be set reflecting an error condition or clean (early) termination. LOCKING: spin_lock_irqsave(host lock) h](h)}(hOur ->queuecommand() function has decided that the SCSI command issued can be directly translated into an ATA command, rather than handled internally.h]hOur ->queuecommand() function has decided that the SCSI command issued can be directly translated into an ATA command, rather than handled internally.}(hjՏhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM3hjяubh)}(hvThis function sets up an ata_queued_cmd structure for the SCSI command, and sends that ata_queued_cmd to the hardware.h]hvThis function sets up an ata_queued_cmd structure for the SCSI command, and sends that ata_queued_cmd to the hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM7hjяubh)}(hThe xlat_func argument (actor) returns 0 if ready to execute ATA command, else 1 to finish translation. If 1 is returned then cmd->result (and possibly cmd->sense_buffer) are assumed to be set reflecting an error condition or clean (early) termination.h]hThe xlat_func argument (actor) returns 0 if ready to execute ATA command, else 1 to finish translation. If 1 is returned then cmd->result (and possibly cmd->sense_buffer) are assumed to be set reflecting an error condition or clean (early) termination.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM:hjяubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM@hjяubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMChjubh)}(hf0 on success, SCSI_ML_QUEUE_DEVICE_BUSY or SCSI_MLQUEUE_HOST_BUSY if the command needs to be deferred.h]hf0 on success, SCSI_ML_QUEUE_DEVICE_BUSY or SCSI_MLQUEUE_HOST_BUSY if the command needs to be deferred.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_rbuf_fill (C function)c.ata_scsi_rbuf_fillhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hvoid ata_scsi_rbuf_fill (struct ata_device *dev, struct scsi_cmnd *cmd, unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf))h]j")}(hvoid ata_scsi_rbuf_fill(struct ata_device *dev, struct scsi_cmnd *cmd, unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf))h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMsubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjZhhhjlhMsubj)}(hata_scsi_rbuf_fillh]j[)}(hata_scsi_rbuf_fillh]hata_scsi_rbuf_fill}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhjlhMsubj)}(h(struct ata_device *dev, struct scsi_cmnd *cmd, unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf))h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_rbuf_fillasbuh1hhjubj:)}(h h]h }(hjِhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hj+hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj(ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj-modnameN classnameNjwjz)}j}]jՐc.ata_scsi_rbuf_fillasbuh1hhj ubj:)}(h h]h }(hjIhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hcmdh]hcmd}(hjdhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hNunsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hj8Gh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj)}(hjS h]h*}(hj‘hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hactorh]hactor}(hjϑhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubj)}(hjaGh]h)}(hjݑhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj)}(hj8Gh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jՐc.ata_scsi_rbuf_fillasbuh1hhjyubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hjS h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubj)}(h,h]h,}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj()}(hj+h]hstruct}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jՐc.ata_scsi_rbuf_fillasbuh1hhjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hjS h]h*}(hj’hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hcmdh]hcmd}(hjϒhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubj)}(hj^h]h,}(hjݒhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubh)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jՐc.ata_scsi_rbuf_fillasbuh1hhjyubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjyubj)}(hjS h]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubj[)}(hrbufh]hrbuf}(hj4hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjyubj)}(hjaGh]h)}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMsubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjVhhhjlhMsubah}(h]jQah ](jjeh"]h$]h&]j j )j huh1jhjlhMshjShhubj)}(hhh]h)}(h#wrapper for SCSI command simulatorsh]h#wrapper for SCSI command simulators}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMshjhhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMsubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)`` Callback hook for desired SCSI command simulator **Description** Takes care of the hard work of simulating a SCSI command... Mapping the response buffer, calling the command's handler, and handling the handler's return value. This return value indicates whether the handler wishes the SCSI command to be completed successfully (0), or not (in which case cmd->result and sense buffer are assumed to be set). LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMwhjubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMthjubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjœhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthj“ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMuhjߓubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjߓubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjubj)}(h``unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)`` Callback hook for desired SCSI command simulator h](j)}(hR``unsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)``h]j\)}(hjh]hNunsigned int (*actor)(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMvhjubj)}(hhh]h)}(h0Callback hook for desired SCSI command simulatorh]h0Callback hook for desired SCSI command simulator}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMvhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMvhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjWubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMxhjubj)}(hX}Takes care of the hard work of simulating a SCSI command... Mapping the response buffer, calling the command's handler, and handling the handler's return value. This return value indicates whether the handler wishes the SCSI command to be completed successfully (0), or not (in which case cmd->result and sense buffer are assumed to be set). LOCKING: spin_lock_irqsave(host lock)h](h)}(hXVTakes care of the hard work of simulating a SCSI command... Mapping the response buffer, calling the command's handler, and handling the handler's return value. This return value indicates whether the handler wishes the SCSI command to be completed successfully (0), or not (in which case cmd->result and sense buffer are assumed to be set).h]hXZTakes care of the hard work of simulating a SCSI command... Mapping the response buffer, calling the command’s handler, and handling the handler’s return value. This return value indicates whether the handler wishes the SCSI command to be completed successfully (0), or not (in which case cmd->result and sense buffer are assumed to be set).}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMwhjoubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM~hjoubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsiop_inq_std (C function)c.ata_scsiop_inq_stdhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hYunsigned int ata_scsiop_inq_std (struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h]j")}(hXunsigned int ata_scsiop_inq_std(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjƔhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjŔhMubj)}(hinth]hint}(hjԔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjŔhMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjŔhMubj)}(hata_scsiop_inq_stdh]j[)}(hata_scsiop_inq_stdh]hata_scsiop_inq_std}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjŔhMubj)}(h9(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj.hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj+ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj0modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsiop_inq_stdasbuh1hhj ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hdevh]hdev}(hjihhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj~ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jJc.ata_scsiop_inq_stdasbuh1hhj~ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~ubj)}(hjS h]h*}(hj̕hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubj[)}(hcmdh]hcmd}(hjٕhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jJc.ata_scsiop_inq_stdasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hrbufh]hrbuf}(hj.hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjŔhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjŔhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjŔhMhjhhubj)}(hhh]h)}(h!Simulate standard INQUIRY commandh]h!Simulate standard INQUIRY command}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjŔhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jpj1jpj2j3j4uh1jhhhjZhNhNubj6)}(hXh**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Returns standard device identification data associated with non-VPD INQUIRY command output. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjxubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjtubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjҖh]hstruct scsi_cmnd *cmd}(hjԖhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjЖubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj̖ubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̖ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hj h]hu8 *rbuf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(hhj;ubj)}(hXYields two logical unit device identification designators: - vendor specific ASCII containing the ATA serial number - SAT defined "t10 vendor id based" containing ASCII vendor name ("ATA "), model and serial numbers. LOCKING: spin_lock_irqsave(host lock)h](j)}(hhh]j)}(hYields two logical unit device identification designators: - vendor specific ASCII containing the ATA serial number - SAT defined "t10 vendor id based" containing ASCII vendor name ("ATA "), model and serial numbers. h](j)}(h:Yields two logical unit device identification designators:h]h:Yields two logical unit device identification designators:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM@hj*ubj)}(hhh]j )}(hhh](j )}(h6vendor specific ASCII containing the ATA serial numberh]h)}(hjEh]h6vendor specific ASCII containing the ATA serial number}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM>hjCubah}(h]h ]h"]h$]h&]uh1j hj@ubj )}(hgSAT defined "t10 vendor id based" containing ASCII vendor name ("ATA "), model and serial numbers. h]h)}(hfSAT defined "t10 vendor id based" containing ASCII vendor name ("ATA "), model and serial numbers.h]hnSAT defined “t10 vendor id based” containing ASCII vendor name (“ATA “), model and serial numbers.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM?hj[ubah}(h]h ]h"]h$]h&]uh1j hj@ubeh}(h]h ]h"]h$]h&]jR juh1j hjThM>hj=ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj<hM@hj'ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMBhj#ubeh}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM=hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsiop_inq_89 (C function)c.ata_scsiop_inq_89hNtauh1jhjZhhhNhNubj)}(hhh](j)}(hXunsigned int ata_scsiop_inq_89 (struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h]j")}(hWunsigned int ata_scsiop_inq_89(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMwubj:)}(h h]h }(hjѠhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjРhMwubj)}(hinth]hint}(hjߠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjРhMwubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjРhMwubj)}(hata_scsiop_inq_89h]j[)}(hata_scsiop_inq_89h]hata_scsiop_inq_89}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjРhMwubj)}(h9(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj(hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj9hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj6ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj;modnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsiop_inq_89asbuh1hhjubj:)}(h h]h }(hjYhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjthhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jUc.ata_scsiop_inq_89asbuh1hhjubj:)}(h h]h }(hjɡhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjסhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jUc.ata_scsiop_inq_89asbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hrbufh]hrbuf}(hj9hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjРhMwubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjРhMwubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjРhMwhjhhubj)}(hhh]h)}(h&Simulate INQUIRY VPD page 89, ATA infoh]h&Simulate INQUIRY VPD page 89, ATA info}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMwhj`hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjРhMwubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j{j1j{j2j3j4uh1jhhhjZhNhNubj6)}(hX***Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Yields SAT-specified ATA VPD page. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM{hjubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMxhjubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjݢh]hstruct scsi_cmnd *cmd}(hjߢhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjۢubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMyhjעubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjעubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hjh]hu8 *rbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMzhjubj)}(hhh]h)}(hh]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj<ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjlubj)}(hWReturn data for the VPD page B0h (Block Limits). LOCKING: spin_lock_irqsave(host lock)h](h)}(h0Return data for the VPD page B0h (Block Limits).h]h0Return data for the VPD page B0h (Block Limits).}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjTubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjTubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsiop_inq_b1 (C function)c.ata_scsiop_inq_b1hNtauh1jhjZhhhNhNubj)}(hhh](j)}(hXunsigned int ata_scsiop_inq_b1 (struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h]j")}(hWunsigned int ata_scsiop_inq_b1(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj:)}(h h]h }(hjǦhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_scsiop_inq_b1h]j[)}(hata_scsiop_inq_b1h]hata_scsiop_inq_b1}(hj٦hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjզubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h9(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjۦsbc.ata_scsiop_inq_b1asbuh1hhjubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjNhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjghhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjcubj:)}(h h]h }(hjthhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j/c.ata_scsiop_inq_b1asbuh1hhjcubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjcubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hjڧhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjקubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjܧmodnameN classnameNjwjz)}j}]j/c.ata_scsiop_inq_b1asbuh1hhjӧubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjӧubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjӧubj[)}(hrbufh]hrbuf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjӧubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h:Simulate INQUIRY VPD page B1, Block Device Characteristicsh]h:Simulate INQUIRY VPD page B1, Block Device Characteristics}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jUj1jUj2j3j4uh1jhhhjZhNhNubj6)}(hXH**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Return data for the VPD page B1h (Block Device Characteristics). LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjYubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hj~h]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj|ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjxubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjШhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̨hMhjͨubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̨hMhjuubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hjh]hu8 *rbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(hReturn data for the VPD page B2h (Logical Block Provisioning).h]h>Return data for the VPD page B2h (Logical Block Provisioning).}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj.ubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj.ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsiop_inq_b6 (C function)c.ata_scsiop_inq_b6hNtauh1jhjZhhhNhNubj)}(hhh](j)}(hXunsigned int ata_scsiop_inq_b6 (struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h]j")}(hWunsigned int ata_scsiop_inq_b6(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhM ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhM ubj)}(hata_scsiop_inq_b6h]j[)}(hata_scsiop_inq_b6h]hata_scsiop_inq_b6}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjhM ubj)}(h9(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjϬhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjˬubj:)}(h h]h }(hjܬhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjˬubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsiop_inq_b6asbuh1hhjˬubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjˬubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjˬubj[)}(hdevh]hdev}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjˬubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjǬubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjAhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj=ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hj_hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj\ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjamodnameN classnameNjwjz)}j}]j c.ata_scsiop_inq_b6asbuh1hhj=ubj:)}(h h]h }(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=ubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjǬubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.ata_scsiop_inq_b6asbuh1hhjubj:)}(h h]h }(hjҭhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hrbufh]hrbuf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjǬubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjnhhhjhM ubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1jhjhM hjkhhubj)}(hhh]h)}(h@Simulate INQUIRY VPD page B6, Zoned Block Device Characteristicsh]h@Simulate INQUIRY VPD page B6, Zoned Block Device Characteristics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j/j1j/j2j3j4uh1jhhhjZhNhNubj6)}(hXN**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Return data for the VPD page B2h (Zoned Block Device Characteristics). LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj7ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hj3ubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjXh]hstruct ata_device *dev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjVubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjRubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM hjOubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjOubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hjʮh]hu8 *rbuf}(hj̮hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjȮubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjĮubj)}(hhh]h)}(hvoid modecpy (u8 *dest, const u8 *src, int n, bool changeable)h]j")}(h=void modecpy(u8 *dest, const u8 *src, int n, bool changeable)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjLhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9hhhjKhM ubj)}(hmodecpyh]j[)}(hmodecpyh]hmodecpy}(hj^hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjZubah}(h]h ](jjeh"]h$]h&]jjuh1jhj9hhhjKhM ubj)}(h1(u8 *dest, const u8 *src, int n, bool changeable)h](j)}(hu8 *desth](h)}(hhh]j[)}(hu8h]hu8}(hj}hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjzubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsj`sb c.modecpyasbuh1hhjvubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubj[)}(hdesth]hdest}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubj)}(h const u8 *srch](j()}(hj(h]hconst}(hjѵhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj͵ubj:)}(h h]h }(hj޵hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj͵ubh)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.modecpyasbuh1hhj͵ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj͵ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj͵ubj[)}(hsrch]hsrc}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj͵ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubj)}(hint nh](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj=ubj[)}(hjgh]hn}(hj]hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubj)}(hbool changeableh](j)}(hjVh]hbool}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubj[)}(h changeableh]h changeable}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjrubeh}(h]h ]h"]h$]h&]jjuh1jhj9hhhjKhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj5hhhjKhM ubah}(h]j0ah ](jjeh"]h$]h&]j j )j huh1jhjKhM hj2hhubj)}(hhh]h)}(hPrepare response for MODE SENSEh]hPrepare response for MODE SENSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj2hhhjKhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jҶj1jҶj2j3j4uh1jhhhjZhNhNubj6)}(hX=**Parameters** ``u8 *dest`` output buffer ``const u8 *src`` data being copied ``int n`` length of mode page ``bool changeable`` whether changeable parameters are requested **Description** Generate a generic MODE SENSE page for either current or changeable parameters. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjܶh]h Parameters}(hj޶hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjڶubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjֶubj)}(hhh](j)}(h``u8 *dest`` output buffer h](j)}(h ``u8 *dest``h]j\)}(hjh]hu8 *dest}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(h output bufferh]h output buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``const u8 *src`` data being copied h](j)}(h``const u8 *src``h]j\)}(hj4h]h const u8 *src}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hj.ubj)}(hhh]h)}(hdata being copiedh]hdata being copied}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjubj)}(h``int n`` length of mode page h](j)}(h ``int n``h]j\)}(hjmh]hint n}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjkubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjgubj)}(hhh]h)}(hlength of mode pageh]hlength of mode page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h@``bool changeable`` whether changeable parameters are requested h](j)}(h``bool changeable``h]j\)}(hjh]hbool changeable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(h+whether changeable parameters are requestedh]h+whether changeable parameters are requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjֶubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj߷ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjֶubj)}(h_Generate a generic MODE SENSE page for either current or changeable parameters. LOCKING: None.h](h)}(hOGenerate a generic MODE SENSE page for either current or changeable parameters.h]hOGenerate a generic MODE SENSE page for either current or changeable parameters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjֶubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_msense_caching (C function)c.ata_msense_cachinghNtauh1jhjZhhhNhNubj)}(hhh](j)}(hCunsigned int ata_msense_caching (u16 *id, u8 *buf, bool changeable)h]j")}(hBunsigned int ata_msense_caching(u16 *id, u8 *buf, bool changeable)h](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;hhhjMhM ubj)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhM ubj:)}(h h]h }(hjjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj;hhhjMhM ubj)}(hata_msense_cachingh]j[)}(hata_msense_cachingh]hata_msense_caching}(hj|hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjxubah}(h]h ](jjeh"]h$]h&]jjuh1jhj;hhhjMhM ubj)}(h#(u16 *id, u8 *buf, bool changeable)h](j)}(hu16 *idh](h)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsj~sbc.ata_msense_cachingasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjɸhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hidh]hid}(hjָhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *bufh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_msense_cachingasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hbufh]hbuf}(hj+hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hbool changeableh](j)}(hjVh]hbool}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj:)}(h h]h }(hjQhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@ubj[)}(h changeableh]h changeable}(hj_hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj;hhhjMhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj7hhhjMhM ubah}(h]j2ah ](jjeh"]h$]h&]j j )j huh1jhjMhM hj4hhubj)}(hhh]h)}(h%Simulate MODE SENSE caching info pageh]h%Simulate MODE SENSE caching info page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj4hhhjMhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hXL**Parameters** ``u16 *id`` device IDENTIFY data ``u8 *buf`` output buffer ``bool changeable`` whether changeable parameters are requested **Description** Generate a caching info page, which conditionally indicates write caching to the SCSI layer, depending on device capabilities. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh](j)}(h!``u16 *id`` device IDENTIFY data h](j)}(h ``u16 *id``h]j\)}(hjʹh]hu16 *id}(hj̹hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjȹubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjĹubj)}(hhh]h)}(hdevice IDENTIFY datah]hdevice IDENTIFY data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj߹hM hjubah}(h]h ]h"]h$]h&]uh1jhjĹubeh}(h]h ]h"]h$]h&]uh1jhj߹hM hjubj)}(h``u8 *buf`` output buffer h](j)}(h ``u8 *buf``h]j\)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(h output bufferh]h output buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h@``bool changeable`` whether changeable parameters are requested h](j)}(h``bool changeable``h]j\)}(hj<h]hbool changeable}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hj6ubj)}(hhh]h)}(h+whether changeable parameters are requestedh]h+whether changeable parameters are requested}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjuubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hGenerate a caching info page, which conditionally indicates write caching to the SCSI layer, depending on device capabilities. LOCKING: None.h](h)}(h~Generate a caching info page, which conditionally indicates write caching to the SCSI layer, depending on device capabilities.h]h~Generate a caching info page, which conditionally indicates write caching to the SCSI layer, depending on device capabilities.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_msense_control (C function)c.ata_msense_controlhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hZunsigned int ata_msense_control (struct ata_device *dev, u8 *buf, u8 spg, bool changeable)h]j")}(hYunsigned int ata_msense_control(struct ata_device *dev, u8 *buf, u8 spg, bool changeable)h](j)}(hunsignedh]hunsigned}(hjպhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѺhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM) ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjѺhhhjhM) ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѺhhhjhM) ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjѺhhhjhM) ubj)}(hata_msense_controlh]j[)}(hata_msense_controlh]hata_msense_control}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjѺhhhjhM) ubj)}(h:(struct ata_device *dev, u8 *buf, u8 spg, bool changeable)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj.hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj*ubj:)}(h h]h }(hj;hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjIubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjNmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_msense_controlasbuh1hhj*ubj:)}(h h]h }(hjlhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj*ubj)}(hjS h]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hu8 *bufh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jhc.ata_msense_controlasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjϻhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hbufh]hbuf}(hjܻhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hu8 spgh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jhc.ata_msense_controlasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hspgh]hspg}(hj$hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubj)}(hbool changeableh](j)}(hjVh]hbool}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj:)}(h h]h }(hjJhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj9ubj[)}(h changeableh]h changeable}(hjXhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubeh}(h]h ]h"]h$]h&]jjuh1jhjѺhhhjhM) ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjͺhhhjhM) ubah}(h]jȺah ](jjeh"]h$]h&]j j )j huh1jhjhM) hjʺhhubj)}(hhh]h)}(h%Simulate MODE SENSE control mode pageh]h%Simulate MODE SENSE control mode page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM) hjhhubah}(h]h ]h"]h$]h&]uh1jhjʺhhhjhM) ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX!**Parameters** ``struct ata_device *dev`` ATA device of interest ``u8 *buf`` output buffer ``u8 spg`` sub-page code ``bool changeable`` whether changeable parameters are requested **Description** Generate a generic MODE SENSE control mode page. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM- hjubj)}(hhh](j)}(h2``struct ata_device *dev`` ATA device of interest h](j)}(h``struct ata_device *dev``h]j\)}(hjüh]hstruct ata_device *dev}(hjżhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM* hjubj)}(hhh]h)}(hATA device of interesth]hATA device of interest}(hjܼhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjؼhM* hjټubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؼhM* hjubj)}(h``u8 *buf`` output buffer h](j)}(h ``u8 *buf``h]j\)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM+ hjubj)}(hhh]h)}(h output bufferh]h output buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+ hjubj)}(h``u8 spg`` sub-page code h](j)}(h ``u8 spg``h]j\)}(hj5h]hu8 spg}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM, hj/ubj)}(hhh]h)}(h sub-page codeh]h sub-page code}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM, hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhM, hjubj)}(h@``bool changeable`` whether changeable parameters are requested h](j)}(h``bool changeable``h]j\)}(hjnh]hbool changeable}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM- hjhubj)}(hhh]h)}(h+whether changeable parameters are requestedh]h+whether changeable parameters are requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM- hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM- hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM/ hjubj)}(h@Generate a generic MODE SENSE control mode page. LOCKING: None.h](h)}(h0Generate a generic MODE SENSE control mode page.h]h0Generate a generic MODE SENSE control mode page.}(hjýhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM. hjubh)}(hLOCKING: None.h]hLOCKING: None.}(hjҽhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM0 hjubeh}(h]h ]h"]h$]h&]uh1jhjѽhM. hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ata_msense_rw_recovery (C function)c.ata_msense_rw_recoveryhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h>unsigned int ata_msense_rw_recovery (u8 *buf, bool changeable)h]j")}(h=unsigned int ata_msense_rw_recovery(u8 *buf, bool changeable)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMM ubj)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMM ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMM ubj)}(hata_msense_rw_recoveryh]j[)}(hata_msense_rw_recoveryh]hata_msense_rw_recovery}(hjDhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMM ubj)}(h(u8 *buf, bool changeable)h](j)}(hu8 *bufh](h)}(hhh]j[)}(hu8h]hu8}(hjchhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj`ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjemodnameN classnameNjwjz)}j}]jj)}jsjFsbc.ata_msense_rw_recoveryasbuh1hhj\ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj\ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\ubj[)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubj)}(hbool changeableh](j)}(hjVh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjľhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(h changeableh]h changeable}(hjҾhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMM hjhhubj)}(hhh]h)}(h+Simulate MODE SENSE r/w error recovery pageh]h+Simulate MODE SENSE r/w error recovery page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``u8 *buf`` output buffer ``bool changeable`` whether changeable parameters are requested **Description** Generate a generic MODE SENSE r/w error recovery page. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMQ hjubj)}(hhh](j)}(h``u8 *buf`` output buffer h](j)}(h ``u8 *buf``h]j\)}(hj=h]hu8 *buf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMN hj7ubj)}(hhh]h)}(h output bufferh]h output buffer}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMN hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMN hj4ubj)}(h@``bool changeable`` whether changeable parameters are requested h](j)}(h``bool changeable``h]j\)}(hjvh]hbool changeable}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjtubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMO hjpubj)}(hhh]h)}(h+whether changeable parameters are requestedh]h+whether changeable parameters are requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMO hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMO hj4ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMQ hjubj)}(hFGenerate a generic MODE SENSE r/w error recovery page. LOCKING: None.h](h)}(h6Generate a generic MODE SENSE r/w error recovery page.h]h6Generate a generic MODE SENSE r/w error recovery page.}(hj˿hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMP hjǿubh)}(hLOCKING: None.h]hLOCKING: None.}(hjڿhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMR hjǿubeh}(h]h ]h"]h$]h&]uh1jhjٿhMP hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ata_scsiop_mode_sense (C function)c.ata_scsiop_mode_sensehNtauh1jhjZhhhNhNubj)}(hhh](j)}(h\unsigned int ata_scsiop_mode_sense (struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h]j")}(h[unsigned int ata_scsiop_mode_sense(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM^ ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhjhM^ ubj)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM^ ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhjhM^ ubj)}(hata_scsiop_mode_senseh]j[)}(hata_scsiop_mode_senseh]hata_scsiop_mode_sense}(hjLhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhM^ ubj)}(h9(struct ata_device *dev, struct scsi_cmnd *cmd, u8 *rbuf)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjdubj:)}(h h]h }(hjuhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjNsbc.ata_scsiop_mode_senseasbuh1hhjdubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjdubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsiop_mode_senseasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcmdh]hcmd}(hj1hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjOmodnameN classnameNjwjz)}j}]jc.ata_scsiop_mode_senseasbuh1hhjFubj:)}(h h]h }(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjFubj)}(hjS h]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubj[)}(hrbufh]hrbuf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhM^ ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM^ ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM^ hjhhubj)}(hhh]h)}(h"Simulate MODE SENSE 6, 10 commandsh]h"Simulate MODE SENSE 6, 10 commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM^ hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Simulate MODE SENSE commands. Assume this is invoked for direct access devices (e.g. disks) only. There should be no block descriptor for other device types. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMb hjubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM_ hjubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM_ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_ hjubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hj*h]hstruct scsi_cmnd *cmd}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj(ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM` hj$ubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM` hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hM` hjubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hjch]hu8 *rbuf}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjaubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMa hj]ubj)}(hhh]h)}(hubj:)}(h h]h }(hjOhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj`hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj]ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjbmodnameN classnameNjwjz)}j}]jj)}jsj(sbc.ata_scsiop_report_lunsasbuh1hhj>ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j|c.ata_scsiop_report_lunsasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcmdh]hcmd}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubj)}(hu8 *rbufh](h)}(hhh]j[)}(hu8h]hu8}(hj'hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj$ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj)modnameN classnameNjwjz)}j}]j|c.ata_scsiop_report_lunsasbuh1hhj ubj:)}(h h]h }(hjEhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hrbufh]hrbuf}(hj`hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj:ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM: ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM: ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM: hjhhubj)}(hhh]h)}(hSimulate REPORT LUNS commandh]hSimulate REPORT LUNS command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM: hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM: ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX%**Parameters** ``struct ata_device *dev`` Target device. ``struct scsi_cmnd *cmd`` SCSI command of interest. ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. **Description** Simulate REPORT LUNS command. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM> hjubj)}(hhh](j)}(h*``struct ata_device *dev`` Target device. h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM; hjubj)}(hhh]h)}(hTarget device.h]hTarget device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM; hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM; hjubj)}(h4``struct scsi_cmnd *cmd`` SCSI command of interest. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM< hjubj)}(hhh]h)}(hSCSI command of interest.h]hSCSI command of interest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM< hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM< hjubj)}(hJ``u8 *rbuf`` Response buffer, to which simulated SCSI cmd output is sent. h](j)}(h ``u8 *rbuf``h]j\)}(hj=h]hu8 *rbuf}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM= hj7ubj)}(hhh]h)}(h hjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM@ hjubeh}(h]h ]h"]h$]h&]uh1jhjhM> hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jatapi_xlat (C function) c.atapi_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(h3unsigned int atapi_xlat (struct ata_queued_cmd *qc)h]j")}(h2unsigned int atapi_xlat(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(h atapi_xlath]j[)}(h atapi_xlath]h atapi_xlat}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj+ubj:)}(h h]h }(hj<hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjMhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjOmodnameN classnameNjwjz)}j}]jj)}jsjsb c.atapi_xlatasbuh1hhj+ubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubj)}(hjS h]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj)}(hhh]h)}(hInitialize PACKET taskfileh]hInitialize PACKET taskfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` command structure to be initialized **Description** LOCKING: spin_lock_irqsave(host lock) **Return** Zero on success, non-zero on failure.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` command structure to be initialized h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(h#command structure to be initializedh]h#command structure to be initialized}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(h&LOCKING: spin_lock_irqsave(host lock) h]h)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjDubah}(h]h ]h"]h$]h&]uh1jhjVhM hjubh)}(h **Return**h]j )}(hj_h]hReturn}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j hj]ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubh)}(h%Zero on success, non-zero on failure.h]h%Zero on success, non-zero on failure.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_find_dev (C function)c.ata_scsi_find_devhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h^struct ata_device * ata_scsi_find_dev (struct ata_port *ap, const struct scsi_device *scsidev)h]j")}(h\struct ata_device *ata_scsi_find_dev(struct ata_port *ap, const struct scsi_device *scsidev)h](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsata_scsi_find_devsbc.ata_scsi_find_devasbuh1hhjhhhjhM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhhhjhM ubj)}(hata_scsi_find_devh]j[)}(hjh]hata_scsi_find_dev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h8(struct ata_port *ap, const struct scsi_device *scsidev)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj+hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hj<hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj9ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj>modnameN classnameNjwjz)}j}]jc.ata_scsi_find_devasbuh1hhjubj:)}(h h]h }(hjZhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjuhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h!const struct scsi_device *scsidevh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsi_find_devasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hscsidevh]hscsidev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj)}(hhh]h)}(h lookup ata_device from scsi_cmndh]h lookup ata_device from scsi_cmnd}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hj'hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jBj1jBj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` ATA port to which the device is attached ``const struct scsi_device *scsidev`` SCSI device from which we derive the ATA device **Description** Given various information provided in struct scsi_cmnd, map that onto an ATA bus, and using that mapping determine which ata_device is associated with the SCSI command to be sent. LOCKING: spin_lock_irqsave(host lock) **Return** Associated ATA device, or ``NULL`` if not found.h](h)}(h**Parameters**h]j )}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjFubj)}(hhh](j)}(hA``struct ata_port *ap`` ATA port to which the device is attached h](j)}(h``struct ata_port *ap``h]j\)}(hjkh]hstruct ata_port *ap}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjeubj)}(hhh]h)}(h(ATA port to which the device is attachedh]h(ATA port to which the device is attached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM hjbubj)}(hV``const struct scsi_device *scsidev`` SCSI device from which we derive the ATA device h](j)}(h%``const struct scsi_device *scsidev``h]j\)}(hjh]h!const struct scsi_device *scsidev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]h)}(h/SCSI device from which we derive the ATA deviceh]h/SCSI device from which we derive the ATA device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjbubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjFubj)}(hGiven various information provided in struct scsi_cmnd, map that onto an ATA bus, and using that mapping determine which ata_device is associated with the SCSI command to be sent. LOCKING: spin_lock_irqsave(host lock) h](h)}(hGiven various information provided in struct scsi_cmnd, map that onto an ATA bus, and using that mapping determine which ata_device is associated with the SCSI command to be sent.h]hGiven various information provided in struct scsi_cmnd, map that onto an ATA bus, and using that mapping determine which ata_device is associated with the SCSI command to be sent.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjFubh)}(h **Return**h]j )}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM" hjFubh)}(h0Associated ATA device, or ``NULL`` if not found.h](hAssociated ATA device, or }(hj5hhhNhNubj\)}(h``NULL``h]hNULL}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj5ubh if not found.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM# hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_pass_thru (C function)c.ata_scsi_pass_thruhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h;unsigned int ata_scsi_pass_thru (struct ata_queued_cmd *qc)h]j")}(h:unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM\ ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhM\ ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhM\ ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhM\ ubj)}(hata_scsi_pass_thruh]j[)}(hata_scsi_pass_thruh]hata_scsi_pass_thru}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjhM\ ubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_pass_thruasbuh1hhjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hj(hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhM\ ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjnhhhjhM\ ubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1jhjhM\ hjkhhubj)}(hhh]h)}(h%convert ATA pass-thru CDB to taskfileh]h%convert ATA pass-thru CDB to taskfile}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM\ hjOhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhM\ ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jjj1jjj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` command structure to be initialized **Description** Handles either 12, 16, or 32-byte versions of the CDB. **Return** Zero on success, non-zero on failure.h](h)}(h**Parameters**h]j )}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjrubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM` hjnubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` command structure to be initialized h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM] hjubj)}(hhh]h)}(h#command structure to be initializedh]h#command structure to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM] hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM] hjubah}(h]h ]h"]h$]h&]uh1jhjnubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM_ hjnubj)}(h7Handles either 12, 16, or 32-byte versions of the CDB. h]h)}(h6Handles either 12, 16, or 32-byte versions of the CDB.h]h6Handles either 12, 16, or 32-byte versions of the CDB.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM^ hjubah}(h]h ]h"]h$]h&]uh1jhjhM^ hjnubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM` hjnubh)}(h%Zero on success, non-zero on failure.h]h%Zero on success, non-zero on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMa hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_format_dsm_trim_descr (C function)c.ata_format_dsm_trim_descrhNtauh1jhjZhhhNhNubj)}(hhh](j)}(hZsize_t ata_format_dsm_trim_descr (struct scsi_cmnd *cmd, u32 trmax, u64 sector, u32 count)h]j")}(hYsize_t ata_format_dsm_trim_descr(struct scsi_cmnd *cmd, u32 trmax, u64 sector, u32 count)h](h)}(hhh]j[)}(hsize_th]hsize_t}(hjGhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjImodnameN classnameNjwjz)}j}]jj)}jsata_format_dsm_trim_descrsbc.ata_format_dsm_trim_descrasbuh1hhj@hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMf ubj:)}(h h]h }(hjihhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@hhhjhhMf ubj)}(hata_format_dsm_trim_descrh]j[)}(hjeh]hata_format_dsm_trim_descr}(hj{hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjwubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjhhMf ubj)}(h9(struct scsi_cmnd *cmd, u32 trmax, u64 sector, u32 count)h](j)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jcc.ata_format_dsm_trim_descrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 trmaxh](h)}(hhh]j[)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jcc.ata_format_dsm_trim_descrasbuh1hhjubj:)}(h h]h }(hj'hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(htrmaxh]htrmax}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 sectorh](h)}(hhh]j[)}(hu64h]hu64}(hjQhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjNubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjSmodnameN classnameNjwjz)}j}]jcc.ata_format_dsm_trim_descrasbuh1hhjJubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjJubj[)}(hsectorh]hsector}(hj}hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 counth](h)}(hhh]j[)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jcc.ata_format_dsm_trim_descrasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj@hhhjhhMf ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj<hhhjhhMf ubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhjhhMf hj9hhubj)}(hhh]h)}(hSATL Write Same to DSM Trimh]hSATL Write Same to DSM Trim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMf hjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjhhMf ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hXg**Parameters** ``struct scsi_cmnd *cmd`` SCSI command being translated ``u32 trmax`` Maximum number of entries that will fit in sector_size bytes. ``u64 sector`` Starting sector ``u32 count`` Total Range of request in logical sectors **Description** Rewrite the WRITE SAME descriptor to be a DSM TRIM little-endian formatted descriptor. Upto 64 entries of the format: 63:48 Range Length 47:0 LBA Range Length of 0 is ignored. LBA's should be sorted order and not overlap. **NOTE** this is the same format as ADD LBA(S) TO NV CACHE PINNED SET **Return** Number of bytes copied into sglist.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMj hj ubj)}(hhh](j)}(h8``struct scsi_cmnd *cmd`` SCSI command being translated h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hj0h]hstruct scsi_cmnd *cmd}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj.ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMg hj*ubj)}(hhh]h)}(hSCSI command being translatedh]hSCSI command being translated}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMg hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMg hj'ubj)}(hL``u32 trmax`` Maximum number of entries that will fit in sector_size bytes. h](j)}(h ``u32 trmax``h]j\)}(hjih]h u32 trmax}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjgubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMh hjcubj)}(hhh]h)}(h=Maximum number of entries that will fit in sector_size bytes.h]h=Maximum number of entries that will fit in sector_size bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMh hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMh hj'ubj)}(h``u64 sector`` Starting sector h](j)}(h``u64 sector``h]j\)}(hjh]h u64 sector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMi hjubj)}(hhh]h)}(hStarting sectorh]hStarting sector}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMi hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMi hj'ubj)}(h8``u32 count`` Total Range of request in logical sectors h](j)}(h ``u32 count``h]j\)}(hjh]h u32 count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMj hjubj)}(hhh]h)}(h)Total Range of request in logical sectorsh]h)Total Range of request in logical sectors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMj hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMj hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMl hj ubh)}(hVRewrite the WRITE SAME descriptor to be a DSM TRIM little-endian formatted descriptor.h]hVRewrite the WRITE SAME descriptor to be a DSM TRIM little-endian formatted descriptor.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMk hj ubj)}(hhh]j)}(hUpto 64 entries of the format: 63:48 Range Length 47:0 LBA Range Length of 0 is ignored. LBA's should be sorted order and not overlap. h](j)}(hUpto 64 entries of the format:h]hUpto 64 entries of the format:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMs hj>ubj)}(hhh](j)}(h63:48 Range Length 47:0 LBA h]h)}(h63:48 Range Length 47:0 LBAh]h63:48 Range Length 47:0 LBA}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMo hjTubah}(h]h ]h"]h$]h&]uh1jhjfhMo hjQubh)}(hKRange Length of 0 is ignored. LBA's should be sorted order and not overlap.h]hMRange Length of 0 is ignored. LBA’s should be sorted order and not overlap.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMr hjQubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjPhMs hj;ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**NOTE**h]j )}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMu hj ubh)}(hvoid ata_scsi_report_zones_complete(struct ata_queued_cmd *qc)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM}ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM}ubj)}(hata_scsi_report_zones_completeh]j[)}(hata_scsi_report_zones_completeh]hata_scsi_report_zones_complete}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM}ubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hj$hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj&modnameN classnameNjwjz)}j}]jj)}jsjsb c.ata_scsi_report_zones_completeasbuh1hhjubj:)}(h h]h }(hjDhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hj_hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM}ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM}ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM}hjhhubj)}(hhh]h)}(hconvert ATA outputh]hconvert ATA output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM}hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM}ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``struct ata_queued_cmd *qc`` command structure returning the data **Description** Convert T-13 little-endian field representation into T-10 big-endian field representation. What a mess.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]j)}(hC``struct ata_queued_cmd *qc`` command structure returning the data h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM~hjubj)}(hhh]h)}(h$command structure returning the datah]h$command structure returning the data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hgConvert T-13 little-endian field representation into T-10 big-endian field representation. What a mess.h]h)}(hgConvert T-13 little-endian field representation into T-10 big-endian field representation. What a mess.h]hgConvert T-13 little-endian field representation into T-10 big-endian field representation. What a mess.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubah}(h]h ]h"]h$]h&]uh1jhj-hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_mselect_caching (C function)c.ata_mselect_cachinghNtauh1jhjZhhhNhNubj)}(hhh](j)}(hTint ata_mselect_caching (struct ata_queued_cmd *qc, const u8 *buf, int len, u16 *fp)h]j")}(hSint ata_mselect_caching(struct ata_queued_cmd *qc, const u8 *buf, int len, u16 *fp)h](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMdubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjPhhhjbhMdubj)}(hata_mselect_cachingh]j[)}(hata_mselect_cachingh]hata_mselect_caching}(hjuhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjPhhhjbhMdubj)}(h<(struct ata_queued_cmd *qc, const u8 *buf, int len, u16 *fp)h](j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjwsbc.ata_mselect_cachingasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const u8 *bufh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hu8h]hu8}(hj!hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj#modnameN classnameNjwjz)}j}]jc.ata_mselect_cachingasbuh1hhjubj:)}(h h]h }(hj?hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hbufh]hbuf}(hjZhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjoubj[)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 *fph](h)}(hhh]j[)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_mselect_cachingasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hfph]hfp}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhMdubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjLhhhjbhMdubah}(h]jGah ](jjeh"]h$]h&]j j )j huh1jhjbhMdhjIhhubj)}(hhh]h)}(h*Simulate MODE SELECT for caching info pageh]h*Simulate MODE SELECT for caching info page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMdhj hhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhMdubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j&j1j&j2j3j4uh1jhhhjZhNhNubj6)}(hX[**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile ``const u8 *buf`` input buffer ``int len`` number of valid bytes in the input buffer ``u16 *fp`` out parameter for the failed field on error **Description** Prepare a taskfile to modify caching information for the device. LOCKING: None.h](h)}(h**Parameters**h]j )}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj.ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhhj*ubj)}(hhh](j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjOh]hstruct ata_queued_cmd *qc}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjMubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMehjIubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMehjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMehjFubj)}(h``const u8 *buf`` input buffer h](j)}(h``const u8 *buf``h]j\)}(hjh]h const u8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMfhjubj)}(hhh]h)}(h input bufferh]h input buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjFubj)}(h6``int len`` number of valid bytes in the input buffer h](j)}(h ``int len``h]j\)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMghjubj)}(hhh]h)}(h)number of valid bytes in the input bufferh]h)number of valid bytes in the input buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjFubj)}(h8``u16 *fp`` out parameter for the failed field on error h](j)}(h ``u16 *fp``h]j\)}(hjh]hu16 *fp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhhjubj)}(hhh]h)}(h+out parameter for the failed field on errorh]h+out parameter for the failed field on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h**Description**h]j )}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMjhj*ubj)}(hPPrepare a taskfile to modify caching information for the device. LOCKING: None.h](h)}(h@Prepare a taskfile to modify caching information for the device.h]h@Prepare a taskfile to modify caching information for the device.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMihjKubh)}(hLOCKING: None.h]hLOCKING: None.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMkhjKubeh}(h]h ]h"]h$]h&]uh1jhj]hMihj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_mselect_control (C function)c.ata_mselect_controlhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h\int ata_mselect_control (struct ata_queued_cmd *qc, u8 spg, const u8 *buf, int len, u16 *fp)h]j")}(h[int ata_mselect_control(struct ata_queued_cmd *qc, u8 spg, const u8 *buf, int len, u16 *fp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_mselect_controlh]j[)}(hata_mselect_controlh]hata_mselect_control}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hD(struct ata_queued_cmd *qc, u8 spg, const u8 *buf, int len, u16 *fp)h](j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_mselect_controlasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hj)hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 spgh](h)}(hhh]j[)}(hu8h]hu8}(hjEhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjBubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjGmodnameN classnameNjwjz)}j}]j c.ata_mselect_controlasbuh1hhj>ubj:)}(h h]h }(hjchhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj>ubj[)}(hspgh]hspg}(hjqhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const u8 *bufh](j()}(hj(h]hconst}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j c.ata_mselect_controlasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu16 *fph](h)}(hhh]j[)}(hu16h]hu16}(hj2hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj/ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj4modnameN classnameNjwjz)}j}]j c.ata_mselect_controlasbuh1hhj+ubj:)}(h h]h }(hjPhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+ubj)}(hjS h]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubj[)}(hfph]hfp}(hjkhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h%Simulate MODE SELECT for control pageh]h%Simulate MODE SELECT for control page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile ``u8 spg`` target sub-page of the control page ``const u8 *buf`` input buffer ``int len`` number of valid bytes in the input buffer ``u16 *fp`` out parameter for the failed field on error **Description** Prepare a taskfile to modify caching information for the device. LOCKING: None.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh](j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjh]hstruct ata_queued_cmd *qc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``u8 spg`` target sub-page of the control page h](j)}(h ``u8 spg``h]j\)}(hjh]hu8 spg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj ubj)}(hhh]h)}(h#target sub-page of the control pageh]h#target sub-page of the control page}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h``const u8 *buf`` input buffer h](j)}(h``const u8 *buf``h]j\)}(hjHh]h const u8 *buf}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjBubj)}(hhh]h)}(h input bufferh]h input buffer}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjubj)}(h6``int len`` number of valid bytes in the input buffer h](j)}(h ``int len``h]j\)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj{ubj)}(hhh]h)}(h)number of valid bytes in the input bufferh]h)number of valid bytes in the input buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``u16 *fp`` out parameter for the failed field on error h](j)}(h ``u16 *fp``h]j\)}(hjh]hu16 *fp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(h+out parameter for the failed field on errorh]h+out parameter for the failed field on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hPPrepare a taskfile to modify caching information for the device. LOCKING: None.h](h)}(h@Prepare a taskfile to modify caching information for the device.h]h@Prepare a taskfile to modify caching information for the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj ubh)}(hLOCKING: None.h]hLOCKING: None.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_scsi_mode_select_xlat (C function)c.ata_scsi_mode_select_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(hBunsigned int ata_scsi_mode_select_xlat (struct ata_queued_cmd *qc)h]j")}(hAunsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjbhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOhhhjahMubj)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjahMubj:)}(h h]h }(hj~hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjOhhhjahMubj)}(hata_scsi_mode_select_xlath]j[)}(hata_scsi_mode_select_xlath]hata_scsi_mode_select_xlat}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjahMubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_mode_select_xlatasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjOhhhjahMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjKhhhjahMubah}(h]jFah ](jjeh"]h$]h&]j j )j huh1jhjahMhjHhhubj)}(hhh]h)}(h#Simulate MODE SELECT 6, 10 commandsh]h#Simulate MODE SELECT 6, 10 commands}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jGj1jGj2j3j4uh1jhhhjZhNhNubj6)}(hXe**Parameters** ``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile **Description** Converts a MODE SELECT command to an ATA SET FEATURES taskfile. Assume this is invoked for direct access devices (e.g. disks) only. There should be no block descriptor for other device types. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j hjOubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjKubj)}(hhh]j)}(hB``struct ata_queued_cmd *qc`` Storage for translated ATA taskfile h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hjph]hstruct ata_queued_cmd *qc}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjnubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjjubj)}(hhh]h)}(h#Storage for translated ATA taskfileh]h#Storage for translated ATA taskfile}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjKubj)}(hConverts a MODE SELECT command to an ATA SET FEATURES taskfile. Assume this is invoked for direct access devices (e.g. disks) only. There should be no block descriptor for other device types. LOCKING: spin_lock_irqsave(host lock)h](h)}(hConverts a MODE SELECT command to an ATA SET FEATURES taskfile. Assume this is invoked for direct access devices (e.g. disks) only. There should be no block descriptor for other device types.h]hConverts a MODE SELECT command to an ATA SET FEATURES taskfile. Assume this is invoked for direct access devices (e.g. disks) only. There should be no block descriptor for other device types.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ata_scsi_var_len_cdb_xlat (C function)c.ata_scsi_var_len_cdb_xlathNtauh1jhjZhhhNhNubj)}(hhh](j)}(hBunsigned int ata_scsi_var_len_cdb_xlat (struct ata_queued_cmd *qc)h]j")}(hAunsigned int ata_scsi_var_len_cdb_xlat(struct ata_queued_cmd *qc)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj:)}(h h]h }(hj4hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM ubj)}(hata_scsi_var_len_cdb_xlath]j[)}(hata_scsi_var_len_cdb_xlath]hata_scsi_var_len_cdb_xlat}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM ubj)}(h(struct ata_queued_cmd *qc)h]j)}(hstruct ata_queued_cmd *qch](j()}(hj+h]hstruct}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj^ubj:)}(h h]h }(hjohhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubh)}(hhh]j[)}(hata_queued_cmdh]hata_queued_cmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj}ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjHsbc.ata_scsi_var_len_cdb_xlatasbuh1hhj^ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj^ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubj[)}(hqch]hqc}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM hjhhubj)}(hhh]h)}(h#SATL variable length CDB to Handlerh]h#SATL variable length CDB to Handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_queued_cmd *qc`` Command to be translated **Description** Translate a SCSI variable length CDB to specified commands. It checks a service action value in CDB to call corresponding handler. **Return** Zero on success, non-zero on failureh](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hhh]j)}(h7``struct ata_queued_cmd *qc`` Command to be translated h](j)}(h``struct ata_queued_cmd *qc``h]j\)}(hj&h]hstruct ata_queued_cmd *qc}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hj ubj)}(hhh]h)}(hCommand to be translatedh]hCommand to be translated}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j hj_ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjubj)}(hTranslate a SCSI variable length CDB to specified commands. It checks a service action value in CDB to call corresponding handler. h]h)}(hTranslate a SCSI variable length CDB to specified commands. It checks a service action value in CDB to call corresponding handler.h]hTranslate a SCSI variable length CDB to specified commands. It checks a service action value in CDB to call corresponding handler.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM hjwubah}(h]h ]h"]h$]h&]uh1jhjhM hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h$Zero on success, non-zero on failureh]h$Zero on success, non-zero on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_get_xlat_func (C function)c.ata_get_xlat_funchNtauh1jhjZhhhNhNubj)}(hhh](j)}(hBata_xlat_func_t ata_get_xlat_func (struct ata_device *dev, u8 cmd)h]j")}(hAata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd)h](h)}(hhh]j[)}(hata_xlat_func_th]hata_xlat_func_t}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsata_get_xlat_funcsbc.ata_get_xlat_funcasbuh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM%ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM%ubj)}(hata_get_xlat_funch]j[)}(hjh]hata_get_xlat_func}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM%ubj)}(h (struct ata_device *dev, u8 cmd)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj%ubj:)}(h h]h }(hj6hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjGhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjDubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjImodnameN classnameNjwjz)}j}]jc.ata_get_xlat_funcasbuh1hhj%ubj:)}(h h]h }(hjehhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj%ubj)}(hjS h]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj%ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hu8 cmdh](h)}(hhh]j[)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_get_xlat_funcasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM%ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM%ubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhM%hjhhubj)}(hhh]h)}(h,check if SCSI to ATA translation is possibleh]h,check if SCSI to ATA translation is possible}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM%hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM%ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhjZhNhNubj6)}(hX5**Parameters** ``struct ata_device *dev`` ATA device ``u8 cmd`` SCSI command opcode to consider **Description** Look up the SCSI command given, and determine whether the SCSI command is to be translated or simulated. **Return** Pointer to translation function if possible, ``NULL`` if not.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM)hjubj)}(hhh](j)}(h&``struct ata_device *dev`` ATA device h](j)}(h``struct ata_device *dev``h]j\)}(hj3h]hstruct ata_device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM&hj-ubj)}(hhh]h)}(h ATA deviceh]h ATA device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM&hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM&hj*ubj)}(h+``u8 cmd`` SCSI command opcode to consider h](j)}(h ``u8 cmd``h]j\)}(hjlh]hu8 cmd}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM'hjfubj)}(hhh]h)}(hSCSI command opcode to considerh]hSCSI command opcode to consider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM'hj*ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM)hjubj)}(hiLook up the SCSI command given, and determine whether the SCSI command is to be translated or simulated. h]h)}(hhLook up the SCSI command given, and determine whether the SCSI command is to be translated or simulated.h]hhLook up the SCSI command given, and determine whether the SCSI command is to be translated or simulated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM(hjubah}(h]h ]h"]h$]h&]uh1jhjhM(hjubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM+hjubh)}(h=Pointer to translation function if possible, ``NULL`` if not.h](h-Pointer to translation function if possible, }(hjhhhNhNubj\)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubh if not.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_simulate (C function)c.ata_scsi_simulatehNtauh1jhjZhhhNhNubj)}(hhh](j)}(hFvoid ata_scsi_simulate (struct ata_device *dev, struct scsi_cmnd *cmd)h]j")}(hEvoid ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj+hhhj=hMhubj)}(hata_scsi_simulateh]j[)}(hata_scsi_simulateh]hata_scsi_simulate}(hjPhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj=hMhubj)}(h/(struct ata_device *dev, struct scsi_cmnd *cmd)h](j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjhubj:)}(h h]h }(hjyhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjRsbc.ata_scsi_simulateasbuh1hhjhubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hstruct scsi_cmnd *cmdh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.ata_scsi_simulateasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hcmdh]hcmd}(hj5hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj=hMhubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj'hhhj=hMhubah}(h]j"ah ](jjeh"]h$]h&]j j )j huh1jhj=hMhhj$hhubj)}(hhh]h)}(h#simulate SCSI command on ATA deviceh]h#simulate SCSI command on ATA device}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhhj\hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj=hMhubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jwj1jwj2j3j4uh1jhhhjZhNhNubj6)}(hX+**Parameters** ``struct ata_device *dev`` the target device ``struct scsi_cmnd *cmd`` SCSI command being sent to device. **Description** Interprets and directly executes a select list of SCSI commands that can be handled internally. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMlhj{ubj)}(hhh](j)}(h-``struct ata_device *dev`` the target device h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMihjubj)}(hhh]h)}(hthe target deviceh]hthe target device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(h=``struct scsi_cmnd *cmd`` SCSI command being sent to device. h](j)}(h``struct scsi_cmnd *cmd``h]j\)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMjhjubj)}(hhh]h)}(h"SCSI command being sent to device.h]h"SCSI command being sent to device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMlhj{ubj)}(hInterprets and directly executes a select list of SCSI commands that can be handled internally. LOCKING: spin_lock_irqsave(host lock)h](h)}(h_Interprets and directly executes a select list of SCSI commands that can be handled internally.h]h_Interprets and directly executes a select list of SCSI commands that can be handled internally.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMkhj*ubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMnhj*ubeh}(h]h ]h"]h$]h&]uh1jhj<hMkhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ata_scsi_offline_dev (C function)c.ata_scsi_offline_devhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h2bool ata_scsi_offline_dev (struct ata_device *dev)h]j")}(h1bool ata_scsi_offline_dev(struct ata_device *dev)h](j)}(hjVh]hbool}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjnhhhjhMubj)}(hata_scsi_offline_devh]j[)}(hata_scsi_offline_devh]hata_scsi_offline_dev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_offline_devasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]j j )j huh1jhjhMhjghhubj)}(hhh]h)}(hoffline attached SCSI deviceh]hoffline attached SCSI device}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jIj1jIj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct ata_device *dev`` ATA device to offline attached SCSI device for **Description** This function is called from ata_eh_detach_dev() and is responsible for taking the SCSI device attached to **dev** offline. This function is called with host lock which protects dev->sdev against clearing. LOCKING: spin_lock_irqsave(host lock) **Return** true if attached SCSI device exists, false otherwise.h](h)}(h**Parameters**h]j )}(hjSh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjQubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjMubj)}(hhh]j)}(hJ``struct ata_device *dev`` ATA device to offline attached SCSI device for h](j)}(h``struct ata_device *dev``h]j\)}(hjrh]hstruct ata_device *dev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjpubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjlubj)}(hhh]h)}(h.ATA device to offline attached SCSI device forh]h.ATA device to offline attached SCSI device for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjMubj)}(hThis function is called from ata_eh_detach_dev() and is responsible for taking the SCSI device attached to **dev** offline. This function is called with host lock which protects dev->sdev against clearing. LOCKING: spin_lock_irqsave(host lock) h](h)}(hThis function is called from ata_eh_detach_dev() and is responsible for taking the SCSI device attached to **dev** offline. This function is called with host lock which protects dev->sdev against clearing.h](hkThis function is called from ata_eh_detach_dev() and is responsible for taking the SCSI device attached to }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh\ offline. This function is called with host lock which protects dev->sdev against clearing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjMubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjMubh)}(h5true if attached SCSI device exists, false otherwise.h]h5true if attached SCSI device exists, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_scsi_remove_dev (C function)c.ata_scsi_remove_devhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h1void ata_scsi_remove_dev (struct ata_device *dev)h]j")}(h0void ata_scsi_remove_dev(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjShhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj@hhhjRhMubj)}(hata_scsi_remove_devh]j[)}(hata_scsi_remove_devh]hata_scsi_remove_dev}(hjehhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjaubah}(h]h ](jjeh"]h$]h&]jjuh1jhj@hhhjRhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj}ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjgsbc.ata_scsi_remove_devasbuh1hhj}ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj}ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj<hhhjRhMubah}(h]j7ah ](jjeh"]h$]h&]j j )j huh1jhjRhMhj9hhubj)}(hhh]h)}(hremove attached SCSI deviceh]hremove attached SCSI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj9hhhjRhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hX"**Parameters** ``struct ata_device *dev`` ATA device to remove attached SCSI device for **Description** This function is called from ata_eh_scsi_hotplug() and responsible for removing the SCSI device attached to **dev**. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj ubj)}(hhh]j)}(hI``struct ata_device *dev`` ATA device to remove attached SCSI device for h](j)}(h``struct ata_device *dev``h]j\)}(hjEh]hstruct ata_device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjCubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj?ubj)}(hhh]h)}(h-ATA device to remove attached SCSI device forh]h-ATA device to remove attached SCSI device for}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj ubj)}(hThis function is called from ata_eh_scsi_hotplug() and responsible for removing the SCSI device attached to **dev**. LOCKING: Kernel thread context (may sleep).h](h)}(htThis function is called from ata_eh_scsi_hotplug() and responsible for removing the SCSI device attached to **dev**.h](hlThis function is called from ata_eh_scsi_hotplug() and responsible for removing the SCSI device attached to }(hjhhhNhNubj )}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ata_scsi_media_change_notify (C function)c.ata_scsi_media_change_notifyhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h:void ata_scsi_media_change_notify (struct ata_device *dev)h]j")}(h9void ata_scsi_media_change_notify(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hata_scsi_media_change_notifyh]j[)}(hata_scsi_media_change_notifyh]hata_scsi_media_change_notify}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj)ubj:)}(h h]h }(hj:hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjKhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjHubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjMmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_media_change_notifyasbuh1hhj)ubj:)}(h h]h }(hjkhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj)ubj)}(hjS h]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)ubj[)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj%ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(hsend media change eventh]hsend media change event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(h**Parameters** ``struct ata_device *dev`` Pointer to the disk device with media change event **Description** Tell the block layer to send a media change notification event. LOCKING: spin_lock_irqsave(host lock)h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]j)}(hN``struct ata_device *dev`` Pointer to the disk device with media change event h](j)}(h``struct ata_device *dev``h]j\)}(hjh]hstruct ata_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hhh]h)}(h2Pointer to the disk device with media change eventh]h2Pointer to the disk device with media change event}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubj)}(hfTell the block layer to send a media change notification event. LOCKING: spin_lock_irqsave(host lock)h](h)}(h?Tell the block layer to send a media change notification event.h]h?Tell the block layer to send a media change notification event.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjBubh)}(h%LOCKING: spin_lock_irqsave(host lock)h]h%LOCKING: spin_lock_irqsave(host lock)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjBubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_hotplug (C function)c.ata_scsi_hotplughNtauh1jhjZhhhNhNubj)}(hhh](j)}(h0void ata_scsi_hotplug (struct work_struct *work)h]j")}(h/void ata_scsi_hotplug(struct work_struct *work)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM&ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhM&ubj)}(hata_scsi_hotplugh]j[)}(hata_scsi_hotplugh]hata_scsi_hotplug}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhM&ubj)}(h(struct work_struct *work)h]j)}(hstruct work_struct *workh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h work_structh]h work_struct}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_hotplugasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hworkh]hwork}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM&ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhM&ubah}(h]j}ah ](jjeh"]h$]h&]j j )j huh1jhjhM&hjhhubj)}(hhh]h)}(hSCSI part of hotplugh]hSCSI part of hotplug}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM&hjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM&ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jbj1jbj2j3j4uh1jhhhjZhNhNubj6)}(hX**Parameters** ``struct work_struct *work`` Pointer to ATA port to perform SCSI hotplug on **Description** Perform SCSI part of hotplug. It's executed from a separate workqueue after EH completes. This is necessary because SCSI hot plugging requires working EH and hot unplugging is synchronized with hot plugging with a mutex. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM*hjfubj)}(hhh]j)}(hL``struct work_struct *work`` Pointer to ATA port to perform SCSI hotplug on h](j)}(h``struct work_struct *work``h]j\)}(hjh]hstruct work_struct *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM'hjubj)}(hhh]h)}(h.Pointer to ATA port to perform SCSI hotplug onh]h.Pointer to ATA port to perform SCSI hotplug on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjfubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM)hjfubj)}(hX Perform SCSI part of hotplug. It's executed from a separate workqueue after EH completes. This is necessary because SCSI hot plugging requires working EH and hot unplugging is synchronized with hot plugging with a mutex. LOCKING: Kernel thread context (may sleep).h](h)}(hPerform SCSI part of hotplug. It's executed from a separate workqueue after EH completes. This is necessary because SCSI hot plugging requires working EH and hot unplugging is synchronized with hot plugging with a mutex.h]hPerform SCSI part of hotplug. It’s executed from a separate workqueue after EH completes. This is necessary because SCSI hot plugging requires working EH and hot unplugging is synchronized with hot plugging with a mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM(hjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chM-hjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jata_scsi_user_scan (C function)c.ata_scsi_user_scanhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h`int ata_scsi_user_scan (struct Scsi_Host *shost, unsigned int channel, unsigned int id, u64 lun)h]j")}(h_int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel, unsigned int id, u64 lun)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMLubj:)}(h h]h }(hj3hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj2hMLubj)}(hata_scsi_user_scanh]j[)}(hata_scsi_user_scanh]hata_scsi_user_scan}(hjEhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjAubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj2hMLubj)}(hI(struct Scsi_Host *shost, unsigned int channel, unsigned int id, u64 lun)h](j)}(hstruct Scsi_Host *shosth](j()}(hj+h]hstruct}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj]ubj:)}(h h]h }(hjnhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubh)}(hhh]j[)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj|ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjGsbc.ata_scsi_user_scanasbuh1hhj]ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj]ubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj]ubj[)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hunsigned int channelh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hchannelh]hchannel}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hunsigned int idh](j)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj:)}(h h]h }(hjNhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj[)}(hidh]hid}(hj\hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubj)}(hu64 lunh](h)}(hhh]j[)}(hu64h]hu64}(hjxhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjuubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjzmodnameN classnameNjwjz)}j}]jc.ata_scsi_user_scanasbuh1hhjqubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjqubj[)}(hlunh]hlun}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjYubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj2hMLubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhj2hMLubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhj2hMLhjhhubj)}(hhh]h)}(h&indication for user-initiated bus scanh]h&indication for user-initiated bus scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMLhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj2hMLubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjZhNhNubj6)}(hXm**Parameters** ``struct Scsi_Host *shost`` SCSI host to scan ``unsigned int channel`` Channel to scan ``unsigned int id`` ID to scan ``u64 lun`` LUN to scan **Description** This function is called when user explicitly requests bus scan. Set probe pending flag and invoke EH. LOCKING: SCSI layer (we don't care) **Return** Zero.h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMPhjubj)}(hhh](j)}(h.``struct Scsi_Host *shost`` SCSI host to scan h](j)}(h``struct Scsi_Host *shost``h]j\)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMMhj ubj)}(hhh]h)}(hSCSI host to scanh]hSCSI host to scan}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMMhjubj)}(h)``unsigned int channel`` Channel to scan h](j)}(h``unsigned int channel``h]j\)}(hjHh]hunsigned int channel}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMNhjBubj)}(hhh]h)}(hChannel to scanh]hChannel to scan}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMNhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMNhjubj)}(h``unsigned int id`` ID to scan h](j)}(h``unsigned int id``h]j\)}(hjh]hunsigned int id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMOhj{ubj)}(hhh]h)}(h ID to scanh]h ID to scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h``u64 lun`` LUN to scan h](j)}(h ``u64 lun``h]j\)}(hjh]hu64 lun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMPhjubj)}(hhh]h)}(h LUN to scanh]h LUN to scan}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMRhjubj)}(hThis function is called when user explicitly requests bus scan. Set probe pending flag and invoke EH. LOCKING: SCSI layer (we don't care) h](h)}(hfThis function is called when user explicitly requests bus scan. Set probe pending flag and invoke EH.h]hfThis function is called when user explicitly requests bus scan. Set probe pending flag and invoke EH.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMQhj ubh)}(h#LOCKING: SCSI layer (we don't care)h]h%LOCKING: SCSI layer (we don’t care)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMThj ubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubh)}(h **Return**h]j )}(hj5h]hReturn}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj3ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMWhjubh)}(hZero.h]hZero.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMXhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ata_scsi_dev_rescan (C function)c.ata_scsi_dev_rescanhNtauh1jhjZhhhNhNubj)}(hhh](j)}(h3void ata_scsi_dev_rescan (struct work_struct *work)h]j")}(h2void ata_scsi_dev_rescan(struct work_struct *work)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjvhhhjhMubj)}(hata_scsi_dev_rescanh]j[)}(hata_scsi_dev_rescanh]hata_scsi_dev_rescan}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjhMubj)}(h(struct work_struct *work)h]j)}(hstruct work_struct *workh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h work_structh]h work_struct}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.ata_scsi_dev_rescanasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjrhhhjhMubah}(h]jmah ](jjeh"]h$]h&]j j )j huh1jhjhMhjohhubj)}(hhh]h)}(hinitiate scsi_rescan_device()h]hinitiate scsi_rescan_device()}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jRj1jRj2j3j4uh1jhhhjZhNhNubj6)}(hX'**Parameters** ``struct work_struct *work`` Pointer to ATA port to perform scsi_rescan_device() **Description** After ATA pass thru (SAT) commands are executed successfully, libata need to propagate the changes to SCSI layer. LOCKING: Kernel thread context (may sleep).h](h)}(h**Parameters**h]j )}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjZubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjVubj)}(hhh]j)}(hQ``struct work_struct *work`` Pointer to ATA port to perform scsi_rescan_device() h](j)}(h``struct work_struct *work``h]j\)}(hj{h]hstruct work_struct *work}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjyubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjuubj)}(hhh]h)}(h3Pointer to ATA port to perform scsi_rescan_device()h]h3Pointer to ATA port to perform scsi_rescan_device()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjVubj)}(hAfter ATA pass thru (SAT) commands are executed successfully, libata need to propagate the changes to SCSI layer. LOCKING: Kernel thread context (may sleep).h](h)}(hqAfter ATA pass thru (SAT) commands are executed successfully, libata need to propagate the changes to SCSI layer.h]hqAfter ATA pass thru (SAT) commands are executed successfully, libata need to propagate the changes to SCSI layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubh)}(h+LOCKING: Kernel thread context (may sleep).h]h+LOCKING: Kernel thread context (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/libata:604: ./drivers/ata/libata-scsi.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjZhhhNhNubeh}(h]!libata-scsi-translation-emulationah ]h"]!libata scsi translation/emulationah$]h&]uh1hhhhhhhhMWubh)}(hhh](h)}(hATA errors and exceptionsh]hATA errors and exceptions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM`ubh)}(hThis chapter tries to identify what error/exception conditions exist for ATA/ATAPI devices and describe how they should be handled in implementation-neutral way.h]hThis chapter tries to identify what error/exception conditions exist for ATA/ATAPI devices and describe how they should be handled in implementation-neutral way.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMbhjhhubh)}(hThe term 'error' is used to describe conditions where either an explicit error condition is reported from device or a command has timed out.h]hThe term ‘error’ is used to describe conditions where either an explicit error condition is reported from device or a command has timed out.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhjhhubh)}(hX)The term 'exception' is either used to describe exceptional conditions which are not errors (say, power or hotplug events), or to describe both errors and non-error exceptional conditions. Where explicit distinction between error and exception is necessary, the term 'non-error exception' is used.h]hX1The term ‘exception’ is either used to describe exceptional conditions which are not errors (say, power or hotplug events), or to describe both errors and non-error exceptional conditions. Where explicit distinction between error and exception is necessary, the term ‘non-error exception’ is used.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMihjhhubh)}(hhh](h)}(hException categoriesh]hException categories}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhMpubh)}(hExceptions are described primarily with respect to legacy taskfile + bus master IDE interface. If a controller provides other better mechanism for error reporting, mapping those into categories described below shouldn't be difficult.h]hExceptions are described primarily with respect to legacy taskfile + bus master IDE interface. If a controller provides other better mechanism for error reporting, mapping those into categories described below shouldn’t be difficult.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMrhj>hhubh)}(hIn the following sections, two recovery actions - reset and reconfiguring transport - are mentioned. These are described further in `EH recovery actions <#exrec>`__.h](hIn the following sections, two recovery actions - reset and reconfiguring transport - are mentioned. These are described further in }(hj]hhhNhNubh reference)}(h `EH recovery actions <#exrec>`__h]hEH recovery actions}(hjghhhNhNubah}(h]h ]h"]h$]h&]nameEH recovery actionsrefuri#exrecuh1jehj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMwhj>hhubh)}(hhh](h)}(h HSM violationh]h HSM violation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM|ubh)}(hzThis error is indicated when STATUS value doesn't match HSM requirement during issuing or execution any ATA/ATAPI command.h]h|This error is indicated when STATUS value doesn’t match HSM requirement during issuing or execution any ATA/ATAPI command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM~hjhhubj )}(hhh](j )}(hQATA_STATUS doesn't contain !BSY && DRDY && !DRQ while trying to issue a command. h]h)}(hPATA_STATUS doesn't contain !BSY && DRDY && !DRQ while trying to issue a command.h]hRATA_STATUS doesn’t contain !BSY && DRDY && !DRQ while trying to issue a command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h'!BSY && !DRQ during PIO data transfer. h]h)}(h&!BSY && !DRQ during PIO data transfer.h]h&!BSY && !DRQ during PIO data transfer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hDRQ on command completion. h]h)}(hDRQ on command completion.h]hDRQ on command completion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hX^!BSY && ERR after CDB transfer starts but before the last byte of CDB is transferred. ATA/ATAPI standard states that "The device shall not terminate the PACKET command with an error before the last byte of the command packet has been written" in the error outputs description of PACKET command and the state diagram doesn't include such transitions. h]h)}(hX]!BSY && ERR after CDB transfer starts but before the last byte of CDB is transferred. ATA/ATAPI standard states that "The device shall not terminate the PACKET command with an error before the last byte of the command packet has been written" in the error outputs description of PACKET command and the state diagram doesn't include such transitions.h]hXc!BSY && ERR after CDB transfer starts but before the last byte of CDB is transferred. ATA/ATAPI standard states that “The device shall not terminate the PACKET command with an error before the last byte of the command packet has been written” in the error outputs description of PACKET command and the state diagram doesn’t include such transitions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubeh}(h]h ]h"]h$]h&]jR juh1j hhhMhjhhubh)}(hIn these cases, HSM is violated and not much information regarding the error can be acquired from STATUS or ERROR register. IOW, this error can be anything - driver bug, faulty device, controller and/or cable.h]hIn these cases, HSM is violated and not much information regarding the error can be acquired from STATUS or ERROR register. IOW, this error can be anything - driver bug, faulty device, controller and/or cable.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hAs HSM is violated, reset is necessary to restore known state. Reconfiguring transport for lower speed might be helpful too as transmission errors sometimes cause this kind of errors.h]hAs HSM is violated, reset is necessary to restore known state. Reconfiguring transport for lower speed might be helpful too as transmission errors sometimes cause this kind of errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h] hsm-violationah ]h"] hsm violationah$]h&]uh1hhj>hhhhhM|ubh)}(hhh](h)}(h6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)h]h6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhMubh)}(hXeThese are errors detected and reported by ATA/ATAPI devices indicating device problems. For this type of errors, STATUS and ERROR register values are valid and describe error condition. Note that some of ATA bus errors are detected by ATA/ATAPI devices and reported using the same mechanism as device errors. Those cases are described later in this section.h]hXeThese are errors detected and reported by ATA/ATAPI devices indicating device problems. For this type of errors, STATUS and ERROR register values are valid and describe error condition. Note that some of ATA bus errors are detected by ATA/ATAPI devices and reported using the same mechanism as device errors. Those cases are described later in this section.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubh)}(hnFor ATA commands, this type of errors are indicated by !BSY && ERR during command execution and on completion.h]hnFor ATA commands, this type of errors are indicated by !BSY && ERR during command execution and on completion.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubh)}(hFor ATAPI commands,h]hFor ATAPI commands,}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubj )}(hhh](j )}(hz!BSY && ERR && ABRT right after issuing PACKET indicates that PACKET command is not supported and falls in this category. h]h)}(hy!BSY && ERR && ABRT right after issuing PACKET indicates that PACKET command is not supported and falls in this category.h]hy!BSY && ERR && ABRT right after issuing PACKET indicates that PACKET command is not supported and falls in this category.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjmubah}(h]h ]h"]h$]h&]uh1j hjjhhhhhNubj )}(h!BSY && ERR(==CHK) && !ABRT after the last byte of CDB is transferred indicates CHECK CONDITION and doesn't fall in this category. h]h)}(h!BSY && ERR(==CHK) && !ABRT after the last byte of CDB is transferred indicates CHECK CONDITION and doesn't fall in this category.h]h!BSY && ERR(==CHK) && !ABRT after the last byte of CDB is transferred indicates CHECK CONDITION and doesn’t fall in this category.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjjhhhhhNubj )}(h!BSY && ERR(==CHK) && ABRT after the last byte of CDB is transferred \*probably\* indicates CHECK CONDITION and doesn't fall in this category. h]h)}(h!BSY && ERR(==CHK) && ABRT after the last byte of CDB is transferred \*probably\* indicates CHECK CONDITION and doesn't fall in this category.h]h!BSY && ERR(==CHK) && ABRT after the last byte of CDB is transferred *probably* indicates CHECK CONDITION and doesn’t fall in this category.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjjhhhhhNubeh}(h]h ]h"]h$]h&]jR juh1j hhhMhj/hhubh)}(hOf errors detected as above, the following are not ATA/ATAPI device errors but ATA bus errors and should be handled according to `ATA bus error <#excatATAbusErr>`__.h](hOf errors detected as above, the following are not ATA/ATAPI device errors but ATA bus errors and should be handled according to }(hjhhhNhNubjf)}(h#`ATA bus error <#excatATAbusErr>`__h]h ATA bus error}(hjhhhNhNubah}(h]h ]h"]h$]h&]name ATA bus errorjw#excatATAbusErruh1jehjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubj)}(hhh](j)}(hXICRC error during data transfer This is indicated by ICRC bit in the ERROR register and means that corruption occurred during data transfer. Up to ATA/ATAPI-7, the standard specifies that this bit is only applicable to UDMA transfers but ATA/ATAPI-8 draft revision 1f says that the bit may be applicable to multiword DMA and PIO. h](j)}(hCRC error during data transferh]hCRC error during data transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hX)This is indicated by ICRC bit in the ERROR register and means that corruption occurred during data transfer. Up to ATA/ATAPI-7, the standard specifies that this bit is only applicable to UDMA transfers but ATA/ATAPI-8 draft revision 1f says that the bit may be applicable to multiword DMA and PIO.h]hX)This is indicated by ICRC bit in the ERROR register and means that corruption occurred during data transfer. Up to ATA/ATAPI-7, the standard specifies that this bit is only applicable to UDMA transfers but ATA/ATAPI-8 draft revision 1f says that the bit may be applicable to multiword DMA and PIO.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hXABRT error during data transfer or on completion Up to ATA/ATAPI-7, the standard specifies that ABRT could be set on ICRC errors and on cases where a device is not able to complete a command. Combined with the fact that MWDMA and PIO transfer errors aren't allowed to use ICRC bit up to ATA/ATAPI-7, it seems to imply that ABRT bit alone could indicate transfer errors. However, ATA/ATAPI-8 draft revision 1f removes the part that ICRC errors can turn on ABRT. So, this is kind of gray area. Some heuristics are needed here. h](j)}(h0ABRT error during data transfer or on completionh]h0ABRT error during data transfer or on completion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh](h)}(hX@Up to ATA/ATAPI-7, the standard specifies that ABRT could be set on ICRC errors and on cases where a device is not able to complete a command. Combined with the fact that MWDMA and PIO transfer errors aren't allowed to use ICRC bit up to ATA/ATAPI-7, it seems to imply that ABRT bit alone could indicate transfer errors.h]hXBUp to ATA/ATAPI-7, the standard specifies that ABRT could be set on ICRC errors and on cases where a device is not able to complete a command. Combined with the fact that MWDMA and PIO transfer errors aren’t allowed to use ICRC bit up to ATA/ATAPI-7, it seems to imply that ABRT bit alone could indicate transfer errors.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj"ubh)}(hHowever, ATA/ATAPI-8 draft revision 1f removes the part that ICRC errors can turn on ABRT. So, this is kind of gray area. Some heuristics are needed here.h]hHowever, ATA/ATAPI-8 draft revision 1f removes the part that ICRC errors can turn on ABRT. So, this is kind of gray area. Some heuristics are needed here.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubh)}(h>ATA/ATAPI device errors can be further categorized as follows.h]h>ATA/ATAPI device errors can be further categorized as follows.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubj)}(hhh](j)}(hX(Media errors This is indicated by UNC bit in the ERROR register. ATA devices reports UNC error only after certain number of retries cannot recover the data, so there's nothing much else to do other than notifying upper layer. READ and WRITE commands report CHS or LBA of the first failed sector but ATA/ATAPI standard specifies that the amount of transferred data on error completion is indeterminate, so we cannot assume that sectors preceding the failed sector have been transferred and thus cannot complete those sectors successfully as SCSI does. h](j)}(h Media errorsh]h Media errors}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjdubj)}(hhh](h)}(hThis is indicated by UNC bit in the ERROR register. ATA devices reports UNC error only after certain number of retries cannot recover the data, so there's nothing much else to do other than notifying upper layer.h]hThis is indicated by UNC bit in the ERROR register. ATA devices reports UNC error only after certain number of retries cannot recover the data, so there’s nothing much else to do other than notifying upper layer.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjvubh)}(hXDREAD and WRITE commands report CHS or LBA of the first failed sector but ATA/ATAPI standard specifies that the amount of transferred data on error completion is indeterminate, so we cannot assume that sectors preceding the failed sector have been transferred and thus cannot complete those sectors successfully as SCSI does.h]hXDREAD and WRITE commands report CHS or LBA of the first failed sector but ATA/ATAPI standard specifies that the amount of transferred data on error completion is indeterminate, so we cannot assume that sectors preceding the failed sector have been transferred and thus cannot complete those sectors successfully as SCSI does.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhhhMhjaubj)}(hAMedia changed / media change requested error <> h](j)}(h,Media changed / media change requested errorh]h,Media changed / media change requested error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(h<>h]h<>}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjahhubj)}(hZAddress error This is indicated by IDNF bit in the ERROR register. Report to upper layer. h](j)}(h Address errorh]h Address error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hKThis is indicated by IDNF bit in the ERROR register. Report to upper layer.h]hKThis is indicated by IDNF bit in the ERROR register. Report to upper layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjahhubj)}(hOther errors This can be invalid command or parameter indicated by ABRT ERROR bit or some other error condition. Note that ABRT bit can indicate a lot of things including ICRC and Address errors. Heuristics needed. h](j)}(h Other errorsh]h Other errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj)}(hhh]h)}(hThis can be invalid command or parameter indicated by ABRT ERROR bit or some other error condition. Note that ABRT bit can indicate a lot of things including ICRC and Address errors. Heuristics needed.h]hThis can be invalid command or parameter indicated by ABRT ERROR bit or some other error condition. Note that ABRT bit can indicate a lot of things including ICRC and Address errors. Heuristics needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhMhjahhubeh}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubh)}(hXDepending on commands, not all STATUS/ERROR bits are applicable. These non-applicable bits are marked with "na" in the output descriptions but up to ATA/ATAPI-7 no definition of "na" can be found. However, ATA/ATAPI-8 draft revision 1f describes "N/A" as follows.h]hXDepending on commands, not all STATUS/ERROR bits are applicable. These non-applicable bits are marked with “na” in the output descriptions but up to ATA/ATAPI-7 no definition of “na” can be found. However, ATA/ATAPI-8 draft revision 1f describes “N/A” as follows.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubj)}(h3.2.3.3a N/A A keyword the indicates a field has no defined value in this standard and should not be checked by the host or device. N/A fields should be cleared to zero. h]j)}(hhh]j)}(h3.2.3.3a N/A A keyword the indicates a field has no defined value in this standard and should not be checked by the host or device. N/A fields should be cleared to zero. h](j)}(h 3.2.3.3a N/Ah]h 3.2.3.3a N/A}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjIubj)}(hhh]h)}(hA keyword the indicates a field has no defined value in this standard and should not be checked by the host or device. N/A fields should be cleared to zero.h]hA keyword the indicates a field has no defined value in this standard and should not be checked by the host or device. N/A fields should be cleared to zero.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj[ubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhhhMhjFubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhhhMhj/hhubh)}(hrSo, it seems reasonable to assume that "na" bits are cleared to zero by devices and thus need no explicit masking.h]hvSo, it seems reasonable to assume that “na” bits are cleared to zero by devices and thus need no explicit masking.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubeh}(h]2ata-atapi-device-error-non-ncq-non-check-conditionah ]h"]6ata/atapi device error (non-ncq / non-check condition)ah$]h&]uh1hhj>hhhhhMubh)}(hhh](h)}(hATAPI device CHECK CONDITIONh]hATAPI device CHECK CONDITION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXEATAPI device CHECK CONDITION error is indicated by set CHK bit (ERR bit) in the STATUS register after the last byte of CDB is transferred for a PACKET command. For this kind of errors, sense data should be acquired to gather information regarding the errors. REQUEST SENSE packet command should be used to acquire sense data.h]hXEATAPI device CHECK CONDITION error is indicated by set CHK bit (ERR bit) in the STATUS register after the last byte of CDB is transferred for a PACKET command. For this kind of errors, sense data should be acquired to gather information regarding the errors. REQUEST SENSE packet command should be used to acquire sense data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXZOnce sense data is acquired, this type of errors can be handled similarly to other SCSI errors. Note that sense data may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR && ASC/ASCQ 47h/00h SCSI PARITY ERROR). In such cases, the error should be considered as an ATA bus error and handled according to `ATA bus error <#excatATAbusErr>`__.h](hX6Once sense data is acquired, this type of errors can be handled similarly to other SCSI errors. Note that sense data may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR && ASC/ASCQ 47h/00h SCSI PARITY ERROR). In such cases, the error should be considered as an ATA bus error and handled according to }(hjhhhNhNubjf)}(h#`ATA bus error <#excatATAbusErr>`__h]h ATA bus error}(hjhhhNhNubah}(h]h ]h"]h$]h&]name ATA bus errorjw#excatATAbusErruh1jehjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]atapi-device-check-conditionah ]h"]atapi device check conditionah$]h&]uh1hhj>hhhhhMubh)}(hhh](h)}(hATA device error (NCQ)h]hATA device error (NCQ)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXJNCQ command error is indicated by cleared BSY and set ERR bit during NCQ command phase (one or more NCQ commands outstanding). Although STATUS and ERROR registers will contain valid values describing the error, READ LOG EXT is required to clear the error condition, determine which command has failed and acquire more information.h]hXJNCQ command error is indicated by cleared BSY and set ERR bit during NCQ command phase (one or more NCQ commands outstanding). Although STATUS and ERROR registers will contain valid values describing the error, READ LOG EXT is required to clear the error condition, determine which command has failed and acquire more information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hXREAD LOG EXT Log Page 10h reports which tag has failed and taskfile register values describing the error. With this information the failed command can be handled as a normal ATA command error as in `ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION) <#excatDevErr>`__ and all other in-flight commands must be retried. Note that this retry should not be counted - it's likely that commands retried this way would have completed normally if it were not for the failed command.h](hREAD LOG EXT Log Page 10h reports which tag has failed and taskfile register values describing the error. With this information the failed command can be handled as a normal ATA command error as in }(hjhhhNhNubjf)}(hI`ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION) <#excatDevErr>`__h]h6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)}(hj hhhNhNubah}(h]h ]h"]h$]h&]name6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)jw #excatDevErruh1jehjubh and all other in-flight commands must be retried. Note that this retry should not be counted - it’s likely that commands retried this way would have completed normally if it were not for the failed command.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hNote that ATA bus errors can be reported as ATA device NCQ errors. This should be handled as described in `ATA bus error <#excatATAbusErr>`__.h](hjNote that ATA bus errors can be reported as ATA device NCQ errors. This should be handled as described in }(hj&hhhNhNubjf)}(h#`ATA bus error <#excatATAbusErr>`__h]h ATA bus error}(hj.hhhNhNubah}(h]h ]h"]h$]h&]name ATA bus errorjw#excatATAbusErruh1jehj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjhhubh)}(hIf READ LOG EXT Log Page 10h fails or reports NQ, we're thoroughly screwed. This condition should be treated according to `HSM violation <#excatHSMviolation>`__.h](h|If READ LOG EXT Log Page 10h fails or reports NQ, we’re thoroughly screwed. This condition should be treated according to }(hjIhhhNhNubjf)}(h&`HSM violation <#excatHSMviolation>`__h]h HSM violation}(hjQhhhNhNubah}(h]h ]h"]h$]h&]name HSM violationjw#excatHSMviolationuh1jehjIubh.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]ata-device-error-ncqah ]h"]ata device error (ncq)ah$]h&]uh1hhj>hhhhhMubh)}(hhh](h)}(h ATA bus errorh]h ATA bus error}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhMubh)}(hATA bus error means that data corruption occurred during transmission over ATA bus (SATA or PATA). This type of errors can be indicated byh]hATA bus error means that data corruption occurred during transmission over ATA bus (SATA or PATA). This type of errors can be indicated by}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjthhubj )}(hhh](j )}(hnICRC or ABRT error as described in `ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION) <#excatDevErr>`__. h]h)}(hmICRC or ABRT error as described in `ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION) <#excatDevErr>`__.h](h#ICRC or ABRT error as described in }(hjhhhNhNubjf)}(hI`ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION) <#excatDevErr>`__h]h6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)}(hjhhhNhNubah}(h]h ]h"]h$]h&]name6ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)jw #excatDevErruh1jehjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h[Controller-specific error completion with error information indicating transmission error. h]h)}(hZController-specific error completion with error information indicating transmission error.h]hZController-specific error completion with error information indicating transmission error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hOn some controllers, command timeout. In this case, there may be a mechanism to determine that the timeout is due to transmission error. h]h)}(hOn some controllers, command timeout. In this case, there may be a mechanism to determine that the timeout is due to transmission error.h]hOn some controllers, command timeout. In this case, there may be a mechanism to determine that the timeout is due to transmission error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h=Unknown/random errors, timeouts and all sorts of weirdities. h]h)}(h`__ for more information.h](hOnce it’s determined that ATA bus errors have possibly occurred, lowering ATA bus transmission speed is one of actions which may alleviate the problem. See }(hjhhhNhNubjf)}(h(`Reconfigure transport <#exrecReconf>`__h]hReconfigure transport}(hj'hhhNhNubah}(h]h ]h"]h$]h&]nameReconfigure transportjw #exrecReconfuh1jehjubh for more information.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hjthhubeh}(h] ata-bus-errorah ]h"] ata bus errorah$]h&]uh1hhj>hhhhhMubh)}(hhh](h)}(h PCI bus errorh]h PCI bus error}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhM3ubh)}(hX,Data corruption or other failures during transmission over PCI (or other system bus). For standard BMDMA, this is indicated by Error bit in the BMDMA Status register. This type of errors must be logged as it indicates something is very wrong with the system. Resetting host controller is recommended.h]hX,Data corruption or other failures during transmission over PCI (or other system bus). For standard BMDMA, this is indicated by Error bit in the BMDMA Status register. This type of errors must be logged as it indicates something is very wrong with the system. Resetting host controller is recommended.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM5hjJhhubeh}(h] pci-bus-errorah ]h"] pci bus errorah$]h&]uh1hhj>hhhhhM3ubh)}(hhh](h)}(hLate completionh]hLate completion}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhhhhhM<ubh)}(hThis occurs when timeout occurs and the timeout handler finds out that the timed out command has completed successfully or with error. This is usually caused by lost interrupts. This type of errors must be logged. Resetting host controller is recommended.h]hThis occurs when timeout occurs and the timeout handler finds out that the timed out command has completed successfully or with error. This is usually caused by lost interrupts. This type of errors must be logged. Resetting host controller is recommended.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjqhhubeh}(h]late-completionah ]h"]late completionah$]h&]uh1hhj>hhhhhM<ubh)}(hhh](h)}(hUnknown error (timeout)h]hUnknown error (timeout)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMDubh)}(hX;This is when timeout occurs and the command is still processing or the host and device are in unknown state. When this occurs, HSM could be in any valid or invalid state. To bring the device to known state and make it forget about the timed out command, resetting is necessary. The timed out command may be retried.h]hX;This is when timeout occurs and the command is still processing or the host and device are in unknown state. When this occurs, HSM could be in any valid or invalid state. To bring the device to known state and make it forget about the timed out command, resetting is necessary. The timed out command may be retried.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMFhjhhubh)}(hrTimeouts can also be caused by transmission errors. Refer to `ATA bus error <#excatATAbusErr>`__ for more details.h](h=Timeouts can also be caused by transmission errors. Refer to }(hjhhhNhNubjf)}(h#`ATA bus error <#excatATAbusErr>`__h]h ATA bus error}(hjhhhNhNubah}(h]h ]h"]h$]h&]name ATA bus errorjw#excatATAbusErruh1jehjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMLhjhhubeh}(h]unknown-error-timeoutah ]h"]unknown error (timeout)ah$]h&]uh1hhj>hhhhhMDubh)}(hhh](h)}(h'Hotplug and power management exceptionsh]h'Hotplug and power management exceptions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMPubh)}(h<>h]h<>}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMRhjhhubeh}(h]'hotplug-and-power-management-exceptionsah ]h"]'hotplug and power management exceptionsah$]h&]uh1hhj>hhhhhMPubeh}(h]exception-categoriesah ]h"]exception categoriesah$]h&]uh1hhjhhhhhMpubh)}(hhh](h)}(hEH recovery actionsh]hEH recovery actions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMUubh)}(h:This section discusses several important recovery actions.h]h:This section discusses several important recovery actions.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMWhjhhubh)}(hhh](h)}(hClearing error conditionh]hClearing error condition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhMZubh)}(hMany controllers require its error registers to be cleared by error handler. Different controllers may have different requirements.h]hMany controllers require its error registers to be cleared by error handler. Different controllers may have different requirements.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM\hj0hhubh)}(h\For SATA, it's strongly recommended to clear at least SError register during error handling.h]h^For SATA, it’s strongly recommended to clear at least SError register during error handling.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM_hj0hhubeh}(h]clearing-error-conditionah ]h"]clearing error conditionah$]h&]uh1hhjhhhhhMZubh)}(hhh](h)}(hReseth]hReset}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhMcubh)}(h9During EH, resetting is necessary in the following cases.h]h9During EH, resetting is necessary in the following cases.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMehjehhubj )}(hhh](j )}(h#HSM is in unknown or invalid state h]h)}(h"HSM is in unknown or invalid stateh]h"HSM is in unknown or invalid state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMghjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(h#HBA is in unknown or invalid state h]h)}(h"HBA is in unknown or invalid stateh]h"HBA is in unknown or invalid state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMihjubah}(h]h ]h"]h$]h&]uh1j hjhhhhhNubj )}(hIf more than $N (3?) transmission errors happen in 15 minutes,h]h>If more than $N (3?) transmission errors happen in 15 minutes,}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj(ubj )}(hhh](j )}(h@if SATA, decrease SATA PHY speed. if speed cannot be decreased, h]h)}(h?if SATA, decrease SATA PHY speed. if speed cannot be decreased,h]h?if SATA, decrease SATA PHY speed. if speed cannot be decreased,}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=ubah}(h]h ]h"]h$]h&]uh1j hj:ubj )}(h7decrease UDMA xfer speed. if at UDMA0, switch to PIO4, h]h)}(h6decrease UDMA xfer speed. if at UDMA0, switch to PIO4,h]h6decrease UDMA xfer speed. if at UDMA0, switch to PIO4,}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjUubah}(h]h ]h"]h$]h&]uh1j hj:ubj )}(h``unsigned long deadline`` deadline jiffies for the operation h](j)}(h``unsigned long deadline``h]j\)}(hjh]hunsigned long deadline}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(hhh]h)}(h"deadline jiffies for the operationh]h"deadline jiffies for the operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(h&LOCKING: None (inherited from caller).h]h)}(h&LOCKING: None (inherited from caller).h]h&LOCKING: None (inherited from caller).}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjIubah}(h]h ]h"]h$]h&]uh1jhj[hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpiix_set_piomode (C function)c.piix_set_piomodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hDvoid piix_set_piomode (struct ata_port *ap, struct ata_device *adev)h]j")}(hCvoid piix_set_piomode(struct ata_port *ap, struct ata_device *adev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM1ubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj~hhhjhM1ubj)}(hpiix_set_piomodeh]j[)}(hpiix_set_piomodeh]hpiix_set_piomode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~hhhjhM1ubj)}(h.(struct ata_port *ap, struct ata_device *adev)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.piix_set_piomodeasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_device *adevh](j()}(hj+h]hstruct}(hj1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj-ubj:)}(h h]h }(hj>hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjOhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjLubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjQmodnameN classnameNjwjz)}j}]jc.piix_set_piomodeasbuh1hhj-ubj:)}(h h]h }(hjmhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj-ubj)}(hjS h]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-ubj[)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhjhM1ubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjzhhhjhM1ubah}(h]juah ](jjeh"]h$]h&]j j )j huh1jhjhM1hjwhhubj)}(hhh]h)}(h+Initialize host controller PATA PIO timingsh]h+Initialize host controller PATA PIO timings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhM1ubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct ata_port *ap`` Port whose timings we are configuring ``struct ata_device *adev`` Drive in question **Description** Set PIO mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM5hjubj)}(hhh](j)}(h>``struct ata_port *ap`` Port whose timings we are configuring h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM2hjubj)}(hhh]h)}(h%Port whose timings we are configuringh]h%Port whose timings we are configuring}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubj)}(h.``struct ata_device *adev`` Drive in question h](j)}(h``struct ata_device *adev``h]j\)}(hj,h]hstruct ata_device *adev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj*ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM3hj&ubj)}(hhh]h)}(hDrive in questionh]hDrive in question}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM3hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM3hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM5hjubj)}(heSet PIO mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h=Set PIO mode for device, in host controller PCI config space.h]h=Set PIO mode for device, in host controller PCI config space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM4hj}ubh)}(h&LOCKING: None (inherited from caller).h]h&LOCKING: None (inherited from caller).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chM6hj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j do_pata_set_dmamode (C function)c.do_pata_set_dmamodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hRvoid do_pata_set_dmamode (struct ata_port *ap, struct ata_device *adev, int isich)h]j")}(hQvoid do_pata_set_dmamode(struct ata_port *ap, struct ata_device *adev, int isich)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMAubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMAubj)}(hdo_pata_set_dmamodeh]j[)}(hdo_pata_set_dmamodeh]hdo_pata_set_dmamode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMAubj)}(h9(struct ata_port *ap, struct ata_device *adev, int isich)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj"modnameN classnameNjwjz)}j}]jj)}jsjsbc.do_pata_set_dmamodeasbuh1hhjubj:)}(h h]h }(hj@hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hj[hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_device *adevh](j()}(hj+h]hstruct}(hjthhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjpubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]j<c.do_pata_set_dmamodeasbuh1hhjpubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjpubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjpubj[)}(hadevh]hadev}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int isichh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj[)}(hisichh]hisich}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMAubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMAubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMAhjhhubj)}(hhh]h)}(h+Initialize host controller PATA PIO timingsh]h+Initialize host controller PATA PIO timings}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMAhj'hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMAubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jBj1jBj2j3j4uh1jhhhjhNhNubj6)}(hX:**Parameters** ``struct ata_port *ap`` Port whose timings we are configuring ``struct ata_device *adev`` Drive in question ``int isich`` set if the chip is an ICH device **Description** Set UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h**Parameters**h]j )}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMEhjFubj)}(hhh](j)}(h>``struct ata_port *ap`` Port whose timings we are configuring h](j)}(h``struct ata_port *ap``h]j\)}(hjkh]hstruct ata_port *ap}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMBhjeubj)}(hhh]h)}(h%Port whose timings we are configuringh]h%Port whose timings we are configuring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjbubj)}(h.``struct ata_device *adev`` Drive in question h](j)}(h``struct ata_device *adev``h]j\)}(hjh]hstruct ata_device *adev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMChjubj)}(hhh]h)}(hDrive in questionh]hDrive in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjbubj)}(h/``int isich`` set if the chip is an ICH device h](j)}(h ``int isich``h]j\)}(hjh]h int isich}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMDhjubj)}(hhh]h)}(h set if the chip is an ICH deviceh]h set if the chip is an ICH device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMFhjFubj)}(hfSet UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h>Set UDMA mode for device, in host controller PCI config space.h]h>Set UDMA mode for device, in host controller PCI config space.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMEhj.ubh)}(h&LOCKING: None (inherited from caller).h]h&LOCKING: None (inherited from caller).}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMGhj.ubeh}(h]h ]h"]h$]h&]uh1jhj@hMEhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpiix_set_dmamode (C function)c.piix_set_dmamodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hDvoid piix_set_dmamode (struct ata_port *ap, struct ata_device *adev)h]j")}(hCvoid piix_set_dmamode(struct ata_port *ap, struct ata_device *adev)h](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjrhhhjhMubj)}(hpiix_set_dmamodeh]j[)}(hpiix_set_dmamodeh]hpiix_set_dmamode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrhhhjhMubj)}(h.(struct ata_port *ap, struct ata_device *adev)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.piix_set_dmamodeasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_device *adevh](j()}(hj+h]hstruct}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj!ubj:)}(h h]h }(hj2hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjChhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj@ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjEmodnameN classnameNjwjz)}j}]jc.piix_set_dmamodeasbuh1hhj!ubj:)}(h h]h }(hjahhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj!ubj)}(hjS h]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubj[)}(hadevh]hadev}(hj|hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjnhhhjhMubah}(h]jiah ](jjeh"]h$]h&]j j )j huh1jhjhMhjkhhubj)}(hhh]h)}(h+Initialize host controller PATA DMA timingsh]h+Initialize host controller PATA DMA timings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1گjj2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` Port whose timings we are configuring ``struct ata_device *adev`` um **Description** Set MW/UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(hhh](j)}(h>``struct ata_port *ap`` Port whose timings we are configuring h](j)}(h``struct ata_port *ap``h]j\)}(hjh]hstruct ata_port *ap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(hhh]h)}(h%Port whose timings we are configuringh]h%Port whose timings we are configuring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``struct ata_device *adev`` um h](j)}(h``struct ata_device *adev``h]j\)}(hj h]hstruct ata_device *adev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(hhh]h)}(humh]hum}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjYubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubj)}(hiSet MW/UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(hASet MW/UDMA mode for device, in host controller PCI config space.h]hASet MW/UDMA mode for device, in host controller PCI config space.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjqubh)}(h&LOCKING: None (inherited from caller).h]h&LOCKING: None (inherited from caller).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jich_set_dmamode (C function)c.ich_set_dmamodehNtauh1jhjhhhNhNubj)}(hhh](j)}(hCvoid ich_set_dmamode (struct ata_port *ap, struct ata_device *adev)h]j")}(hBvoid ich_set_dmamode(struct ata_port *ap, struct ata_device *adev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjhhhjhMubj)}(hich_set_dmamodeh]j[)}(hich_set_dmamodeh]hich_set_dmamode}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h.(struct ata_port *ap, struct ata_device *adev)h](j)}(hstruct ata_port *aph](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(hata_porth]hata_port}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsjsbc.ich_set_dmamodeasbuh1hhjubj:)}(h h]h }(hj4 hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(haph]hap}(hjO hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct ata_device *adevh](j()}(hj+h]hstruct}(hjh hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjd ubj:)}(h h]h }(hju hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjd ubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]j0 c.ich_set_dmamodeasbuh1hhjd ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjd ubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjd ubj[)}(hadevh]hadev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjd ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j j )j huh1jhjhMhjhhubj)}(hhh]h)}(h+Initialize host controller PATA DMA timingsh]h+Initialize host controller PATA DMA timings}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct ata_port *ap`` Port whose timings we are configuring ``struct ata_device *adev`` um **Description** Set MW/UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hhh](j)}(h>``struct ata_port *ap`` Port whose timings we are configuring h](j)}(h``struct ata_port *ap``h]j\)}(hj* h]hstruct ata_port *ap}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj( ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj$ ubj)}(hhh]h)}(h%Port whose timings we are configuringh]h%Port whose timings we are configuring}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj? hMhj@ ubah}(h]h ]h"]h$]h&]uh1jhj$ ubeh}(h]h ]h"]h$]h&]uh1jhj? hMhj! ubj)}(h``struct ata_device *adev`` um h](j)}(h``struct ata_device *adev``h]j\)}(hjc h]hstruct ata_device *adev}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hja ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj] ubj)}(hhh]h)}(humh]hum}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx hMhjy ubah}(h]h ]h"]h$]h&]uh1jhj] ubeh}(h]h ]h"]h$]h&]uh1jhjx hMhj! ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hiSet MW/UDMA mode for device, in host controller PCI config space. LOCKING: None (inherited from caller).h](h)}(hASet MW/UDMA mode for device, in host controller PCI config space.h]hASet MW/UDMA mode for device, in host controller PCI config space.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubh)}(h&LOCKING: None (inherited from caller).h]h&LOCKING: None (inherited from caller).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$piix_check_450nx_errata (C function)c.piix_check_450nx_erratahNtauh1jhjhhhNhNubj)}(hhh](j)}(h5int piix_check_450nx_errata (struct pci_dev *ata_dev)h]j")}(h4int piix_check_450nx_errata(struct pci_dev *ata_dev)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj hMubj)}(hpiix_check_450nx_erratah]j[)}(hpiix_check_450nx_erratah]hpiix_check_450nx_errata}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h(struct pci_dev *ata_dev)h]j)}(hstruct pci_dev *ata_devh](j()}(hj+h]hstruct}(hj9 hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj5 ubj:)}(h h]h }(hjF hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5 ubh)}(hhh]j[)}(hpci_devh]hpci_dev}(hjW hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjT ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjY modnameN classnameNjwjz)}j}]jj)}jsj sbc.piix_check_450nx_errataasbuh1hhj5 ubj:)}(h h]h }(hjw hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj5 ubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5 ubj[)}(hata_devh]hata_dev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj5 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1 ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]j j )j huh1jhj hMhj hhubj)}(hhh]h)}(hCheck for problem 450NX setuph]hCheck for problem 450NX setup}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhjhNhNubj6)}(h**Parameters** ``struct pci_dev *ata_dev`` the PCI device to check **Description** Check for the present of 450NX errata #19 and errata #25. If they are found return an error code so we can turn off DMAh](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hhh]j)}(h4``struct pci_dev *ata_dev`` the PCI device to check h](j)}(h``struct pci_dev *ata_dev``h]j\)}(hj h]hstruct pci_dev *ata_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hhh]h)}(hthe PCI device to checkh]hthe PCI device to check}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hj8 h]h Description}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj6 ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hwCheck for the present of 450NX errata #19 and errata #25. If they are found return an error code so we can turn off DMAh]h)}(hwCheck for the present of 450NX errata #19 and errata #25. If they are found return an error code so we can turn off DMAh]hwCheck for the present of 450NX errata #19 and errata #25. If they are found return an error code so we can turn off DMA}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjN ubah}(h]h ]h"]h$]h&]uh1jhj` hMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpiix_init_one (C function)c.piix_init_onehNtauh1jhjhhhNhNubj)}(hhh](j)}(hIint piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)h]j")}(hHint piix_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj hhhj hMubj)}(h piix_init_oneh]j[)}(h piix_init_oneh]h piix_init_one}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hMubj)}(h7(struct pci_dev *pdev, const struct pci_device_id *ent)h](j)}(hstruct pci_dev *pdevh](j()}(hj+h]hstruct}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubh)}(hhh]j[)}(hpci_devh]hpci_dev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetj modnameN classnameNjwjz)}j}]jj)}jsj sbc.piix_init_oneasbuh1hhj ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj ubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj[)}(hpdevh]hpdev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hconst struct pci_device_id *enth](j()}(hj(h]hconst}(hj6 hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2 ubj:)}(h h]h }(hjC hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2 ubj()}(hj+h]hstruct}(hjQ hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hj2 ubj:)}(h h]h }(hj^ hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2 ubh)}(hhh]j[)}(h pci_device_idh]h pci_device_id}(hjo hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjl ubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjq modnameN classnameNjwjz)}j}]j c.piix_init_oneasbuh1hhj2 ubj:)}(h h]h }(hj hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj2 ubj)}(hjS h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2 ubj[)}(henth]hent}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhj2 ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj hhhj hMubah}(h]jz ah ](jjeh"]h$]h&]j j )j huh1jhj hMhj| hhubj)}(hhh]h)}(h1Register PIIX ATA PCI device with kernel servicesh]h1Register PIIX ATA PCI device with kernel services}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhj| hhhj hMubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0j j1j j2j3j4uh1jhhhjhNhNubj6)}(hX**Parameters** ``struct pci_dev *pdev`` PCI device to register ``const struct pci_device_id *ent`` Entry in piix_pci_tbl matching with **pdev** **Description** Called from kernel PCI layer. We probe for combined mode (sigh), and then hand over control to libata, for it to do the rest. LOCKING: Inherited from PCI layer (may sleep). **Return** Zero on success, or -ERRNO value.h](h)}(h**Parameters**h]j )}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hhh](j)}(h0``struct pci_dev *pdev`` PCI device to register h](j)}(h``struct pci_dev *pdev``h]j\)}(hjh]hstruct pci_dev *pdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hhh]h)}(hPCI device to registerh]hPCI device to register}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubj)}(hQ``const struct pci_device_id *ent`` Entry in piix_pci_tbl matching with **pdev** h](j)}(h#``const struct pci_device_id *ent``h]j\)}(hjLh]hconst struct pci_device_id *ent}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjJubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjFubj)}(hhh]h)}(h,Entry in piix_pci_tbl matching with **pdev**h](h$Entry in piix_pci_tbl matching with }(hjehhhNhNubj )}(h**pdev**h]hpdev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjeubeh}(h]h ]h"]h$]h&]uh1hhjahMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubj)}(hCalled from kernel PCI layer. We probe for combined mode (sigh), and then hand over control to libata, for it to do the rest. LOCKING: Inherited from PCI layer (may sleep). h](h)}(h~Called from kernel PCI layer. We probe for combined mode (sigh), and then hand over control to libata, for it to do the rest.h]h~Called from kernel PCI layer. We probe for combined mode (sigh), and then hand over control to libata, for it to do the rest.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubh)}(h.LOCKING: Inherited from PCI layer (may sleep).h]h.LOCKING: Inherited from PCI layer (may sleep).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubh)}(h **Return**h]j )}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubh)}(h!Zero on success, or -ERRNO value.h]h!Zero on success, or -ERRNO value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:979: ./drivers/ata/ata_piix.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hjhhhNhNubeh}(h]ata-piix-internalsah ]h"]ata_piix internalsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hsata_sil Internalsh]hsata_sil Internals}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsil_set_mode (C function)c.sil_set_modehNtauh1jhj hhhNhNubj)}(hhh](j)}(hFint sil_set_mode (struct ata_link *link, struct ata_device **r_failed)h]j")}(hEint sil_set_mode(struct ata_link *link, struct ata_device **r_failed)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMPubj:)}(h h]h }(hjBhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hj/hhhjAhMPubj)}(h sil_set_modeh]j[)}(h sil_set_modeh]h sil_set_mode}(hjThhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjPubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhjAhMPubj)}(h5(struct ata_link *link, struct ata_device **r_failed)h](j)}(hstruct ata_link *linkh](j()}(hj+h]hstruct}(hjphhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjlubj:)}(h h]h }(hj}hhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjlubh)}(hhh]j[)}(hata_linkh]hata_link}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjVsbc.sil_set_modeasbuh1hhjlubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjlubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubj[)}(hlinkh]hlink}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubj)}(hstruct ata_device **r_failedh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jc.sil_set_modeasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj)}(hjS h]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hr_failedh]hr_failed}(hjFhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjhubeh}(h]h ]h"]h$]h&]jjuh1jhj/hhhjAhMPubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhj+hhhjAhMPubah}(h]j&ah ](jjeh"]h$]h&]j j )j huh1jhjAhMPhj(hhubj)}(hhh]h)}(hwrap set_mode functionsh]hwrap set_mode functions}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMPhjmhhubah}(h]h ]h"]h$]h&]uh1jhj(hhhjAhMPubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jj1jj2j3j4uh1jhhhj hNhNubj6)}(hX**Parameters** ``struct ata_link *link`` link to set up ``struct ata_device **r_failed`` returned device when we fail **Description** Wrap the libata method for device setup as after the setup we need to inspect the results and do some configuration workh](h)}(h**Parameters**h]j )}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMThjubj)}(hhh](j)}(h)``struct ata_link *link`` link to set up h](j)}(h``struct ata_link *link``h]j\)}(hjh]hstruct ata_link *link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMQhjubj)}(hhh]h)}(hlink to set uph]hlink to set up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h>``struct ata_device **r_failed`` returned device when we fail h](j)}(h ``struct ata_device **r_failed``h]j\)}(hjh]hstruct ata_device **r_failed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMRhjubj)}(hhh]h)}(hreturned device when we failh]hreturned device when we fail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j )}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj#ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMThjubj)}(hxWrap the libata method for device setup as after the setup we need to inspect the results and do some configuration workh]h)}(hxWrap the libata method for device setup as after the setup we need to inspect the results and do some configuration workh]hxWrap the libata method for device setup as after the setup we need to inspect the results and do some configuration work}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMShj;ubah}(h]h ]h"]h$]h&]uh1jhjMhMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsil_dev_config (C function)c.sil_dev_confighNtauh1jhj hhhNhNubj)}(hhh](j)}(h,void sil_dev_config (struct ata_device *dev)h]j")}(h+void sil_dev_config(struct ata_device *dev)h](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMGubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjphhhjhMGubj)}(hsil_dev_configh]j[)}(hsil_dev_configh]hsil_dev_config}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjphhhjhMGubj)}(h(struct ata_device *dev)h]j)}(hstruct ata_device *devh](j()}(hj+h]hstruct}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j'hjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubh)}(hhh]j[)}(h ata_deviceh]h ata_device}(hjhhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubah}(h]h ]h"]h$]h&] refdomainjhreftypejs reftargetjmodnameN classnameNjwjz)}j}]jj)}jsjsbc.sil_dev_configasbuh1hhjubj:)}(h h]h }(hjhhhNhNubah}(h]h ]jFah"]h$]h&]uh1j9hjubj)}(hjS h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj[)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jgah"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjphhhjhMGubeh}(h]h ]h"]h$]h&]jjjuh1j!jjhjlhhhjhMGubah}(h]jgah ](jjeh"]h$]h&]j j )j huh1jhjhMGhjihhubj)}(hhh]h)}(h(Apply device/host-specific errata fixupsh]h(Apply device/host-specific errata fixups}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMGhj1hhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhMGubeh}(h]h ](jhfunctioneh"]h$]h&]j/jhj0jLj1jLj2j3j4uh1jhhhj hNhNubj6)}(hXt**Parameters** ``struct ata_device *dev`` Device to be examined **Description** After the IDENTIFY [PACKET] DEVICE step is complete, and a device is known to be present, this function is called. We apply two errata fixups which are specific to Silicon Image, a Seagate and a Maxtor fixup. For certain Seagate devices, we must limit the maximum sectors to under 8K. For certain Maxtor devices, we must not program the drive beyond udma5. Both fixups are unfairly pessimistic. As soon as I get more information on these errata, I will create a more exhaustive list, and apply the fixups to only the specific devices/hosts/firmwares that need it. 20040111 - Seagate drives affected by the Mod15Write bug are quirked The Maxtor quirk is in sil_quirks, but I'm keeping the original pessimistic fix for the following reasons... - There seems to be less info on it, only one device gleaned off the Windows driver, maybe only one is affected. More info would be greatly appreciated. - But then again UDMA5 is hardly anything to complain abouth](h)}(h**Parameters**h]j )}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjTubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMKhjPubj)}(hhh]j)}(h1``struct ata_device *dev`` Device to be examined h](j)}(h``struct ata_device *dev``h]j\)}(hjuh]hstruct ata_device *dev}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjsubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMHhjoubj)}(hhh]h)}(hDevice to be examinedh]hDevice to be examined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjlubah}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j )}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMJhjPubj)}(hXAfter the IDENTIFY [PACKET] DEVICE step is complete, and a device is known to be present, this function is called. We apply two errata fixups which are specific to Silicon Image, a Seagate and a Maxtor fixup. For certain Seagate devices, we must limit the maximum sectors to under 8K. For certain Maxtor devices, we must not program the drive beyond udma5. Both fixups are unfairly pessimistic. As soon as I get more information on these errata, I will create a more exhaustive list, and apply the fixups to only the specific devices/hosts/firmwares that need it. 20040111 - Seagate drives affected by the Mod15Write bug are quirked The Maxtor quirk is in sil_quirks, but I'm keeping the original pessimistic fix for the following reasons... - There seems to be less info on it, only one device gleaned off the Windows driver, maybe only one is affected. More info would be greatly appreciated. - But then again UDMA5 is hardly anything to complain abouth](h)}(hAfter the IDENTIFY [PACKET] DEVICE step is complete, and a device is known to be present, this function is called. We apply two errata fixups which are specific to Silicon Image, a Seagate and a Maxtor fixup.h]hAfter the IDENTIFY [PACKET] DEVICE step is complete, and a device is known to be present, this function is called. We apply two errata fixups which are specific to Silicon Image, a Seagate and a Maxtor fixup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMIhjubh)}(hKFor certain Seagate devices, we must limit the maximum sectors to under 8K.h]hKFor certain Seagate devices, we must limit the maximum sectors to under 8K.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMNhjubh)}(hGFor certain Maxtor devices, we must not program the drive beyond udma5.h]hGFor certain Maxtor devices, we must not program the drive beyond udma5.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMQhjubh)}(hBoth fixups are unfairly pessimistic. As soon as I get more information on these errata, I will create a more exhaustive list, and apply the fixups to only the specific devices/hosts/firmwares that need it.h]hBoth fixups are unfairly pessimistic. As soon as I get more information on these errata, I will create a more exhaustive list, and apply the fixups to only the specific devices/hosts/firmwares that need it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMThjubh)}(hX20040111 - Seagate drives affected by the Mod15Write bug are quirked The Maxtor quirk is in sil_quirks, but I'm keeping the original pessimistic fix for the following reasons... - There seems to be less info on it, only one device gleaned off the Windows driver, maybe only one is affected. More info would be greatly appreciated. - But then again UDMA5 is hardly anything to complain abouth]hX20040111 - Seagate drives affected by the Mod15Write bug are quirked The Maxtor quirk is in sil_quirks, but I’m keeping the original pessimistic fix for the following reasons... - There seems to be less info on it, only one device gleaned off the Windows driver, maybe only one is affected. More info would be greatly appreciated. - But then again UDMA5 is hardly anything to complain about}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/libata:985: ./drivers/ata/sata_sil.chMYhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j5hj hhhNhNubeh}(h]sata-sil-internalsah ]h"]sata_sil internalsah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(hThanksh]hThanks}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hhhhhMubh)}(hThe bulk of the ATA knowledge comes thanks to long conversations with Andre Hedrick (www.linux-ide.org), and long hours pondering the ATA and SCSI specifications.h]hThe bulk of the ATA knowledge comes thanks to long conversations with Andre Hedrick (www.linux-ide.org), and long hours pondering the ATA and SCSI specifications.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj*hhubh)}(hxThanks to Alan Cox for pointing out similarities between SATA and SCSI, and in general for motivation to hack on libata.h]hxThanks to Alan Cox for pointing out similarities between SATA and SCSI, and in general for motivation to hack on libata.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj*hhubh)}(hlibata's device detection method, ata_pio_devchk, and in general all the early probing was based on extensive study of Hale Landis's probe/reset code in his ATADRVR driver (www.ata-atapi.com).h]hlibata’s device detection method, ata_pio_devchk, and in general all the early probing was based on extensive study of Hale Landis’s probe/reset code in his ATADRVR driver (www.ata-atapi.com).}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj*hhubeh}(h]thanksah ]h"]thanksah$]h&]uh1hhhhhhhhMubeh}(h]libata-developer-s-guideah ]h"]libata developer's guideah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jrjoj?j<jj jjj'j$jjjjj2j/jjjjj7j4jljijjj:j7jjj j j j j j j j jj jjjjj?j<j9j6jjjjjjj}j}jZjZjjjjjj j,j)jjjjjqjnjGjDjnjkjjjjjjjjjbj_jjjjjjj'j$jjjgu nametypes}(jrj?jjj'jjj2jjj7jljj:jj j j j jjjj?j9jjjj}jZjjjj,jjjqjGjnjjjjjbjjjj'jjuh}(johj<j j jBjjj$jjj*jjj/jjj5jjj4jjij:jjoj7jjj=j jj j j j j j j j jjjj2j<jj6jBjj<jjjjj}jjjjrjwjjjR jW jX#j]#j1%j6%j&j&j(j(j*j*j,j,j'0j,0j}3j3ji5jn5j+7j07j :j:j;j;j=j$=j>j>j4@j9@jAjAjCjCj FjFjIjIjKjLj.Nj3Nj1Qj6QjSj SjTjTjrVjwVjEXjJXjZjZj4\j9\j]j]j_j_j6bj;bjejejgjgjBjjGjjljlj qjqjrjrjPtjUtjujujDxjIxjZj }j(}j-}jljqjj jjj:j?jԅjمjnjsj‰jljjjj jjjjĖjɖjj j͚jҚjjj|jj5j:jjjNjSjjj̮jѮjjjKjPjȴjʹj%j*jjjjjjjjjRjWjjjjjjjijnj*j/j-j2jjjjjjj=jBjjjdjijHjMjjjjjjjBjGjjjjj@jEjjjjj6j;jyj~jjj:j?jjjjjSjXj5j:jqjvj jj$ j) j j j[ j` jjjjjtjyjGjLjjjjjojtjj jjj@jEjjj!j!jw$j|$jV'j['j>)jC)j+j+j-j-j/j/jq2jv2j 4j4j5j5j9j9j<j<j+>j0>j?j?jBjBjtDjyDj Fj%FjGjGjTIjYIjJjJjwMj|Mj8Oj=OjQj"Qj=TjBTjUjUjqWjvWjYj"YjjZjZjZje^jj^j`j`jajaj}cjcjejejhgjmgjjjjjkjkjnjnjpjpjsjsjujujuyjzyj!{j&{j|j}j~j~jjj'j,j͆j҆jXj]j5j:jjjQjVjjjjjjjqjvjjjjjjj|jjijnjVj[jCjHj0j5j2j7jȺjͺjjjjjjjjjjjjjijnj7j<jjjjjjjGjLjjjFjKjjjjj"j'jejjj7j<jjj}jjjjmjrjjj j>j)jjj/jjjnjjDjtjkjJjjqjjjjjjj_j0jjejjjjjjj`jejujzjjjijnjjj j jz j j$j j&j+jgjljgj*u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.