)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/scsimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/driver-api/scsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/driver-api/scsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/driver-api/scsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/driver-api/scsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/driver-api/scsimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hSCSI Interfaces Guideh]hSCSI Interfaces Guide}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh=/var/lib/git/docbuild/linux/Documentation/driver-api/scsi.rsthKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hJames Bottomleyh]h paragraph)}(hhh]hJames Bottomley}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h Rob Landley h]h)}(h Rob Landleyh]h Rob Landley}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhK ubh)}(hhh](h)}(hProtocol vs bush]hProtocol vs bus}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hhhhhK ubh)}(hXOnce upon a time, the Small Computer Systems Interface defined both a parallel I/O bus and a data protocol to connect a wide variety of peripherals (disk drives, tape drives, modems, printers, scanners, optical drives, test equipment, and medical devices) to a host computer.h]hXOnce upon a time, the Small Computer Systems Interface defined both a parallel I/O bus and a data protocol to connect a wide variety of peripherals (disk drives, tape drives, modems, printers, scanners, optical drives, test equipment, and medical devices) to a host computer.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj8hhubh)}(hAlthough the old parallel (fast/wide/ultra) SCSI bus has largely fallen out of use, the SCSI command set is more widely used than ever to communicate with devices over a number of different buses.h]hAlthough the old parallel (fast/wide/ultra) SCSI bus has largely fallen out of use, the SCSI command set is more widely used than ever to communicate with devices over a number of different buses.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj8hhubh)}(hThe `SCSI protocol `__ is a big-endian peer-to-peer packet based protocol. SCSI commands are 6, 10, 12, or 16 bytes long, often followed by an associated data payload.h](hThe }(hjehhhNhNubh reference)}(h2`SCSI protocol `__h]h SCSI protocol}(hjohhhNhNubah}(h]h ]h"]h$]h&]name SCSI protocolrefurihttps://www.t10.org/scsi-3.htmuh1jmhjeubh is a big-endian peer-to-peer packet based protocol. SCSI commands are 6, 10, 12, or 16 bytes long, often followed by an associated data payload.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj8hhubh)}(hXvSCSI commands can be transported over just about any kind of bus, and are the default protocol for storage devices attached to USB, SATA, SAS, Fibre Channel, FireWire, and ATAPI devices. SCSI packets are also commonly exchanged over Infiniband, TCP/IP (`iSCSI `__), even `Parallel ports `__.h](hSCSI commands can be transported over just about any kind of bus, and are the default protocol for storage devices attached to USB, SATA, SAS, Fibre Channel, FireWire, and ATAPI devices. SCSI packets are also commonly exchanged over Infiniband, TCP/IP (}(hjhhhNhNubjn)}(h/`iSCSI `__h]hiSCSI}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameiSCSIj#https://en.wikipedia.org/wiki/ISCSIuh1jmhjubh), even }(hjhhhNhNubjn)}(hA`Parallel ports `__h]hParallel ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameParallel portsj,http://cyberelk.net/tim/parport/parscsi.htmluh1jmhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj8hhubeh}(h]protocol-vs-busah ]h"]protocol vs busah$]h&]uh1hhj'hhhhhK ubh)}(hhh](h)}(h"Design of the Linux SCSI subsystemh]h"Design of the Linux SCSI subsystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK#ubh)}(hXThe SCSI subsystem uses a three layer design, with upper, mid, and low layers. Every operation involving the SCSI subsystem (such as reading a sector from a disk) uses one driver at each of the 3 levels: one upper layer driver, one lower layer driver, and the SCSI midlayer.h]hXThe SCSI subsystem uses a three layer design, with upper, mid, and low layers. Every operation involving the SCSI subsystem (such as reading a sector from a disk) uses one driver at each of the 3 levels: one upper layer driver, one lower layer driver, and the SCSI midlayer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjhhubh)}(hThe SCSI upper layer provides the interface between userspace and the kernel, in the form of block and char device nodes for I/O and ioctl(). The SCSI lower layer contains drivers for specific hardware devices.h]hThe SCSI upper layer provides the interface between userspace and the kernel, in the form of block and char device nodes for I/O and ioctl(). The SCSI lower layer contains drivers for specific hardware devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjhhubh)}(hXaIn between is the SCSI mid-layer, analogous to a network routing layer such as the IPv4 stack. The SCSI mid-layer routes a packet based data protocol between the upper layer's /dev nodes and the corresponding devices in the lower layer. It manages command queues, provides error handling and power management functions, and responds to ioctl() requests.h]hXcIn between is the SCSI mid-layer, analogous to a network routing layer such as the IPv4 stack. The SCSI mid-layer routes a packet based data protocol between the upper layer’s /dev nodes and the corresponding devices in the lower layer. It manages command queues, provides error handling and power management functions, and responds to ioctl() requests.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubeh}(h]"design-of-the-linux-scsi-subsystemah ]h"]"design of the linux scsi subsystemah$]h&]uh1hhj'hhhhhK#ubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSCSI upper layerh]hSCSI upper layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK6ubh)}(hMThe upper layer supports the user-kernel interface by providing device nodes.h]hMThe upper layer supports the user-kernel interface by providing device nodes.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjhhubh)}(hhh](h)}(hsd (SCSI Disk)h]hsd (SCSI Disk)}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKhj5hhubeh}(h] sd-scsi-diskah ]h"]sd (scsi disk)ah$]h&]uh1hhjhhhhhK` to use as a cursor ``shost`` the :c:type:`struct scsi_host ` to iterate over **Description** Iterator that returns each device attached to **shost**. This loop takes a reference on each device and releases it at the end. If you break out of the loop, you must call scsi_device_put(sdev).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjzubj#)}(hhh](j()}(hK``sdev`` the :c:type:`struct scsi_device ` to use as a cursor h](j.)}(h``sdev``h]j4)}(hjh]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjubjJ)}(hhh]h)}(hAthe :c:type:`struct scsi_device ` to use as a cursorh](hthe }(hjhhhNhNubh)}(h*:c:type:`struct scsi_device `h]j4)}(hjh]hstruct scsi_device}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]refdocdriver-api/scsi refdomainjreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftarget scsi_deviceuh1hhjhMhjubh to use as a cursor}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(hE``shost`` the :c:type:`struct scsi_host ` to iterate over h](j.)}(h ``shost``h]j4)}(hjh]hshost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjubjJ)}(hhh]h)}(h:the :c:type:`struct scsi_host ` to iterate overh](hthe }(hjhhhNhNubh)}(h&:c:type:`struct scsi_host `h]j4)}(hj)h]hstruct scsi_host}(hj+hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_hostuh1hhjhMhjubh to iterate over}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjzubh)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjzubh)}(hIterator that returns each device attached to **shost**. This loop takes a reference on each device and releases it at the end. If you break out of the loop, you must call scsi_device_put(sdev).h](h.Iterator that returns each device attached to }(hjzhhhNhNubj)}(h **shost**h]hshost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh. This loop takes a reference on each device and releases it at the end. If you break out of the loop, you must call scsi_device_put(sdev).}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj"hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!__shost_for_each_device (C macro)c.__shost_for_each_devicehNtauh1j3hj"hhhNhNubjE)}(hhh](jJ)}(h__shost_for_each_deviceh]jP)}(h__shost_for_each_deviceh]jy)}(h__shost_for_each_deviceh]j)}(hjh]h__shost_for_each_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMubah}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jDhhhj"hNhNubh)}(h)``__shost_for_each_device (sdev, shost)``h]j4)}(hjh]h%__shost_for_each_device (sdev, shost)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj"hhubj`)}(h.iterate over all devices of a host (UNLOCKED) h]h)}(h-iterate over all devices of a host (UNLOCKED)h]h-iterate over all devices of a host (UNLOCKED)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjubah}(h]h ]h"]h$]h&]uh1j_hjhMhj"hhubj)}(hX**Parameters** ``sdev`` the :c:type:`struct scsi_device ` to use as a cursor ``shost`` the :c:type:`struct scsi_host ` to iterate over **Description** Iterator that returns each device attached to **shost**. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock. **Note** The only reason to use this is because you need to access the device list in interrupt context. Otherwise you really want to use shost_for_each_device instead.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj ubj#)}(hhh](j()}(hK``sdev`` the :c:type:`struct scsi_device ` to use as a cursor h](j.)}(h``sdev``h]j4)}(hjEh]hsdev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj?ubjJ)}(hhh]h)}(hAthe :c:type:`struct scsi_device ` to use as a cursorh](hthe }(hj^hhhNhNubh)}(h*:c:type:`struct scsi_device `h]j4)}(hjhh]hstruct scsi_device}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_deviceuh1hhjZhMhj^ubh to use as a cursor}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j'hjZhMhj<ubj()}(hE``shost`` the :c:type:`struct scsi_host ` to iterate over h](j.)}(h ``shost``h]j4)}(hjh]hshost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhjubjJ)}(hhh]h)}(h:the :c:type:`struct scsi_host ` to iterate overh](hthe }(hjhhhNhNubh)}(h&:c:type:`struct scsi_host `h]j4)}(hjh]hstruct scsi_host}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_hostuh1hhjhMhjubh to iterate over}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhj<ubeh}(h]h ]h"]h$]h&]uh1j"hj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj ubh)}(hIterator that returns each device attached to **shost**. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock.h](h.Iterator that returns each device attached to }(hjhhhNhNubj)}(h **shost**h]hshost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhn. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj ubh)}(h**Note**h]j)}(hj8h]hNote}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj ubh)}(hThe only reason to use this is because you need to access the device list in interrupt context. Otherwise you really want to use shost_for_each_device instead.h]hThe only reason to use this is because you need to access the device list in interrupt context. Otherwise you really want to use shost_for_each_device instead.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj"hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&scsi_device_is_pseudo_dev (C function)c.scsi_device_is_pseudo_devhNtauh1j3hj"hhhNhNubjE)}(hhh](jJ)}(h9bool scsi_device_is_pseudo_dev (struct scsi_device *sdev)h]jP)}(h8bool scsi_device_is_pseudo_dev(struct scsi_device *sdev)h](hdesc_sig_keyword_type)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1j}hjyhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM[ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjyhhhjhM[ubjy)}(hscsi_device_is_pseudo_devh]j)}(hscsi_device_is_pseudo_devh]hscsi_device_is_pseudo_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjyhhhjhM[ubhdesc_parameterlist)}(h(struct scsi_device *sdev)h]hdesc_parameter)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameNjj)}j]j ASTIdentifier)}jjsbc.scsi_device_is_pseudo_devasbuh1hhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjhM[ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjuhhhjhM[ubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jIhjhM[hjrhhubj)}(hhh]h)}(h)Whether a device is a pseudo SCSI device.h]h)Whether a device is a pseudo SCSI device.}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM[hjH hhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjhM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjc jjc jjjuh1jDhhhj"hNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device to examine **Description** A pseudo SCSI device can be used to allocate SCSI commands but does not show up in sysfs. Additionally, the logical unit information in ***sdev** is made up. This function tests the LUN number instead of comparing **sdev** with **sdev->host->pseudo_sdev** because this function may be called before **sdev->host->pseudo_sdev** has been initialized.h](h)}(h**Parameters**h]j)}(hjm h]h Parameters}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM_hjg ubj#)}(hhh]j()}(h4``struct scsi_device *sdev`` SCSI device to examine h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj h]hstruct scsi_device *sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM\hj ubjJ)}(hhh]h)}(hSCSI device to examineh]hSCSI device to examine}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM\hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hM\hj ubah}(h]h ]h"]h$]h&]uh1j"hjg ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM^hjg ubh)}(hA pseudo SCSI device can be used to allocate SCSI commands but does not show up in sysfs. Additionally, the logical unit information in ***sdev** is made up.h](hA pseudo SCSI device can be used to allocate SCSI commands but does not show up in sysfs. Additionally, the logical unit information in }(hj hhhNhNubj)}(h ***sdev**h]h*sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh is made up.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM]hjg ubh)}(hThis function tests the LUN number instead of comparing **sdev** with **sdev->host->pseudo_sdev** because this function may be called before **sdev->host->pseudo_sdev** has been initialized.h](h8This function tests the LUN number instead of comparing }(hj hhhNhNubj)}(h**sdev**h]hsdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh with }(hj hhhNhNubj)}(h**sdev->host->pseudo_sdev**h]hsdev->host->pseudo_sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, because this function may be called before }(hj hhhNhNubj)}(h**sdev->host->pseudo_sdev**h]hsdev->host->pseudo_sdev}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh has been initialized.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhM`hjg ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj"hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@%scsi_device_supports_vpd (C function)c.scsi_device_supports_vpdhNtauh1j3hj"hhhNhNubjE)}(hhh](jJ)}(h7int scsi_device_supports_vpd (struct scsi_device *sdev)h]jP)}(h6int scsi_device_supports_vpd(struct scsi_device *sdev)h](j~)}(hinth]hint}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMubjh)}(h h]h }(hjr hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj_ hhhjq hMubjy)}(hscsi_device_supports_vpdh]j)}(hscsi_device_supports_vpdh]hscsi_device_supports_vpd}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj_ hhhjq hMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.scsi_device_supports_vpdasbuh1hhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hsdevh]hsdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhj_ hhhjq hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj[ hhhjq hMubah}(h]jV ah ](jjeh"]h$]h&]jj)jhuh1jIhjq hMhjX hhubj)}(hhh]h)}(h#test if a device supports VPD pagesh]h#test if a device supports VPD pages}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjX hhhjq hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj; jj; jjjuh1jDhhhj"hNhNubj)}(hX%**Parameters** ``struct scsi_device *sdev`` the :c:type:`struct scsi_device ` to test **Description** If the 'try_vpd_pages' flag is set it takes precedence. Otherwise we will assume VPD pages are supported if the SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.h](h)}(h**Parameters**h]j)}(hjE h]h Parameters}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj? ubj#)}(hhh]j()}(hT``struct scsi_device *sdev`` the :c:type:`struct scsi_device ` to test h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjd h]hstruct scsi_device *sdev}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjb ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj^ ubjJ)}(hhh]h)}(h6the :c:type:`struct scsi_device ` to testh](hthe }(hj} hhhNhNubh)}(h*:c:type:`struct scsi_device `h]j4)}(hj h]hstruct scsi_device}(hj hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_deviceuh1hhjy hMhj} ubh to test}(hj} hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjy hMhjz ubah}(h]h ]h"]h$]h&]uh1jIhj^ ubeh}(h]h ]h"]h$]h&]uh1j'hjy hMhj[ ubah}(h]h ]h"]h$]h&]uh1j"hj? ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj? ubh)}(hIf the 'try_vpd_pages' flag is set it takes precedence. Otherwise we will assume VPD pages are supported if the SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.h]hIf the ‘try_vpd_pages’ flag is set it takes precedence. Otherwise we will assume VPD pages are supported if the SCSI level is at least SPC-3 and ‘skip_vpd_pages’ is not set.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:93: ./include/scsi/scsi_device.hhMhj? ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj"hhhNhNubeh}(h]include-scsi-scsi-device-hah ]h"]include/scsi/scsi_device.hah$]h&]uh1hhjhhhhhK[ubh)}(hhh](h)}(hdrivers/scsi/scsi.ch]hdrivers/scsi/scsi.c}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKaubh)}(h Main file for the SCSI midlayer.h]h Main file for the SCSI midlayer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj hhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@$scsi_change_queue_depth (C function)c.scsi_change_queue_depthhNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hAint scsi_change_queue_depth (struct scsi_device *sdev, int depth)h]jP)}(h@int scsi_change_queue_depth(struct scsi_device *sdev, int depth)h](j~)}(hinth]hint}(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj* hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKubjh)}(h h]h }(hj= hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj* hhhj< hKubjy)}(hscsi_change_queue_depthh]j)}(hscsi_change_queue_depthh]hscsi_change_queue_depth}(hjO hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjK ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj* hhhj< hKubj)}(h%(struct scsi_device *sdev, int depth)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjk hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjg ubjh)}(h h]h }(hjx hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjg ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjQ sbc.scsi_change_queue_depthasbuh1hhjg ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjg ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg ubj)}(hsdevh]hsdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjg ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjc ubj)}(h int depthh](j~)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj)}(hdepthh]hdepth}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjc ubeh}(h]h ]h"]h$]h&]jjuh1jhj* hhhj< hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj& hhhj< hKubah}(h]j! ah ](jjeh"]h$]h&]jj)jhuh1jIhj< hKhj# hhubj)}(hhh]h)}(hchange a device's queue depthh]hchange a device’s queue depth}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhj# hhhj< hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj; jj; jjjuh1jDhhhj hNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` SCSI Device in question ``int depth`` number of commands allowed to be queued to the driver **Description** Sets the device queue depth and returns the new value.h](h)}(h**Parameters**h]j)}(hjE h]h Parameters}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj? ubj#)}(hhh](j()}(h5``struct scsi_device *sdev`` SCSI Device in question h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjd h]hstruct scsi_device *sdev}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjb ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj^ ubjJ)}(hhh]h)}(hSCSI Device in questionh]hSCSI Device in question}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy hKhjz ubah}(h]h ]h"]h$]h&]uh1jIhj^ ubeh}(h]h ]h"]h$]h&]uh1j'hjy hKhj[ ubj()}(hD``int depth`` number of commands allowed to be queued to the driver h](j.)}(h ``int depth``h]j4)}(hj h]h int depth}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj ubjJ)}(hhh]h)}(h5number of commands allowed to be queued to the driverh]h5number of commands allowed to be queued to the driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hKhj[ ubeh}(h]h ]h"]h$]h&]uh1j"hj? ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj? ubh)}(h6Sets the device queue depth and returns the new value.h]h6Sets the device queue depth and returns the new value.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj? ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_track_queue_full (C function)c.scsi_track_queue_fullhNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(h?int scsi_track_queue_full (struct scsi_device *sdev, int depth)h]jP)}(h>int scsi_track_queue_full(struct scsi_device *sdev, int depth)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKubjh)}(h h]h }(hj,hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj+hKubjy)}(hscsi_track_queue_fullh]j)}(hscsi_track_queue_fullh]hscsi_track_queue_full}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj:ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj+hKubj)}(h%(struct scsi_device *sdev, int depth)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjZhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjVubjh)}(h h]h }(hjghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjVubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]j)}jj@sbc.scsi_track_queue_fullasbuh1hhjVubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjVubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjVubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubj)}(h int depthh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hdepthh]hdepth}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj+hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj+hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj+hKhjhhubj)}(hhh]h)}(h-track QUEUE_FULL events to adjust queue depthh]h-track QUEUE_FULL events to adjust queue depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj+hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jDhhhj hNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI Device in question ``int depth`` Current number of outstanding SCSI commands on this device, not counting the one returned as QUEUE_FULL. **Description** This function will track successive QUEUE_FULL events on a specific SCSI device to determine if and when there is a need to adjust the queue depth on the device. Lock Status: None held on entry **Return** * 0 - No change needed * >0 - Adjust queue depth to this new depth, * -1 - Drop back to untagged operation using host->cmd_per_lun as the untagged command depth **Notes** Low level drivers may call this at any time and we will do "The Right Thing." We are interrupt context safe.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj.ubj#)}(hhh](j()}(h5``struct scsi_device *sdev`` SCSI Device in question h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjSh]hstruct scsi_device *sdev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjQubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjMubjJ)}(hhh]h)}(hSCSI Device in questionh]hSCSI Device in question}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jIhjMubeh}(h]h ]h"]h$]h&]uh1j'hjhhKhjJubj()}(hw``int depth`` Current number of outstanding SCSI commands on this device, not counting the one returned as QUEUE_FULL. h](j.)}(h ``int depth``h]j4)}(hjh]h int depth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjubjJ)}(hhh]h)}(hhCurrent number of outstanding SCSI commands on this device, not counting the one returned as QUEUE_FULL.h]hhCurrent number of outstanding SCSI commands on this device, not counting the one returned as QUEUE_FULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjJubeh}(h]h ]h"]h$]h&]uh1j"hj.ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj.ubj#)}(hhh]j()}(hThis function will track successive QUEUE_FULL events on a specific SCSI device to determine if and when there is a need to adjust the queue depth on the device. h](j.)}(h:This function will track successive QUEUE_FULL events on ah]h:This function will track successive QUEUE_FULL events on a}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjubjJ)}(hhh]h)}(hfspecific SCSI device to determine if and when there is a need to adjust the queue depth on the device.h]hfspecific SCSI device to determine if and when there is a need to adjust the queue depth on the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hj.ubh)}(hLock Status: None held on entryh]hLock Status: None held on entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj.ubh)}(h **Return**h]j)}(hj)h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj.ubh bullet_list)}(hhh](h list_item)}(h0 - No change neededh]h)}(hjHh]h0 - No change needed}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjFubah}(h]h ]h"]h$]h&]uh1jDhjAubjE)}(h*>0 - Adjust queue depth to this new depth,h]h)}(hj`h]h*>0 - Adjust queue depth to this new depth,}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj^ubah}(h]h ]h"]h$]h&]uh1jDhjAubjE)}(h[-1 - Drop back to untagged operation using host->cmd_per_lun as the untagged command depth h]h)}(hZ-1 - Drop back to untagged operation using host->cmd_per_lun as the untagged command depthh]hZ-1 - Drop back to untagged operation using host->cmd_per_lun as the untagged command depth}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhjvubah}(h]h ]h"]h$]h&]uh1jDhjAubeh}(h]h ]h"]h$]h&]bulletj uh1j?hjWhKhj.ubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chKhj.ubj#)}(hhh]j()}(hmLow level drivers may call this at any time and we will do "The Right Thing." We are interrupt context safe.h](j.)}(h:Low level drivers may call this at any time and we will doh]h:Low level drivers may call this at any time and we will do}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubjJ)}(hhh]h)}(h2"The Right Thing." We are interrupt context safe.h]h6“The Right Thing.” We are interrupt context safe.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_get_vpd_page (C function)c.scsi_get_vpd_pagehNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hZint scsi_get_vpd_page (struct scsi_device *sdev, u8 page, unsigned char *buf, int buf_len)h]jP)}(hYint scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf, int buf_len)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hscsi_get_vpd_pageh]j)}(hscsi_get_vpd_pageh]hscsi_get_vpd_page}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj%ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(hD(struct scsi_device *sdev, u8 page, unsigned char *buf, int buf_len)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjEhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubjh)}(h h]h }(hjRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j)}jj+sbc.scsi_get_vpd_pageasbuh1hhjAubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hu8 pageh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_get_vpd_pageasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(hunsigned char *bufh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hj)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubj)}(h int buf_lenh](j~)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYubj)}(hbuf_lenh]hbuf_len}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj=ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(h)Get Vital Product Data from a SCSI deviceh]h)Get Vital Product Data from a SCSI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhj hNhNubj)}(hX;**Parameters** ``struct scsi_device *sdev`` The device to ask ``u8 page`` Which Vital Product Data to return ``unsigned char *buf`` where to store the VPD ``int buf_len`` number of bytes in the VPD buffer area **Description** SCSI devices may optionally supply Vital Product Data. Each 'page' of VPD is defined in the appropriate SCSI document (eg SPC, SBC). If the device supports this VPD page, this routine fills **buf** with the data from that page and return 0. If the VPD page is not supported or its content cannot be retrieved, -EINVAL is returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubj#)}(hhh](j()}(h/``struct scsi_device *sdev`` The device to ask h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubjJ)}(hhh]h)}(hThe device to askh]hThe device to ask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(h/``u8 page`` Which Vital Product Data to return h](j.)}(h ``u8 page``h]j4)}(hjh]hu8 page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubjJ)}(hhh]h)}(h"Which Vital Product Data to returnh]h"Which Vital Product Data to return}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj2hMhjubj()}(h.``unsigned char *buf`` where to store the VPD h](j.)}(h``unsigned char *buf``h]j4)}(hjVh]hunsigned char *buf}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjTubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjPubjJ)}(hhh]h)}(hwhere to store the VPDh]hwhere to store the VPD}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j'hjkhMhjubj()}(h7``int buf_len`` number of bytes in the VPD buffer area h](j.)}(h``int buf_len``h]j4)}(hjh]h int buf_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubjJ)}(hhh]h)}(h&number of bytes in the VPD buffer areah]h&number of bytes in the VPD buffer area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubh)}(hXKSCSI devices may optionally supply Vital Product Data. Each 'page' of VPD is defined in the appropriate SCSI document (eg SPC, SBC). If the device supports this VPD page, this routine fills **buf** with the data from that page and return 0. If the VPD page is not supported or its content cannot be retrieved, -EINVAL is returned.h](hSCSI devices may optionally supply Vital Product Data. Each ‘page’ of VPD is defined in the appropriate SCSI document (eg SPC, SBC). If the device supports this VPD page, this routine fills }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with the data from that page and return 0. If the VPD page is not supported or its content cannot be retrieved, -EINVAL is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_report_opcode (C function)c.scsi_report_opcodehNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hint scsi_report_opcode (struct scsi_device *sdev, unsigned char *buffer, unsigned int len, unsigned char opcode, unsigned short sa)9h]jP)}(hint scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer, unsigned int len, unsigned char opcode, unsigned short sa)h](j~)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM)ubjh)}(h h]h }(hj0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj/hM)ubjy)}(hscsi_report_opcodeh]j)}(hscsi_report_opcodeh]hscsi_report_opcode}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj/hM)ubj)}(hl(struct scsi_device *sdev, unsigned char *buffer, unsigned int len, unsigned char opcode, unsigned short sa)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jjDsbc.scsi_report_opcodeasbuh1hhjZubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned char *bufferh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned int lenh](j~)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubj~)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj*ubjh)}(h h]h }(hjXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubj)}(hlenh]hlen}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned char opcodeh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{ubj~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{ubj)}(hopcodeh]hopcode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned short sah](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hshorth]hshort}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hsah]hsa}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hM)ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj/hM)ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj/hM)hjhhubj)}(hhh]h)}(h(Find out if a given command is supportedh]h(Find out if a given command is supported}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM)hj/hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jDhhhj hNhNubj)}(hXs**Parameters** ``struct scsi_device *sdev`` scsi device to query ``unsigned char *buffer`` scratch buffer (must be at least 20 bytes long) ``unsigned int len`` length of buffer ``unsigned char opcode`` opcode for the command to look up ``unsigned short sa`` service action for the command to look up **Description** Uses the REPORT SUPPORTED OPERATION CODES to check support for the command identified with **opcode** and **sa**. If the command does not have a service action, **sa** must be 0. Returns -EINVAL if RSOC fails, 0 if the command is not supported and 1 if the device claims to support the command.h](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM-hjNubj#)}(hhh](j()}(h2``struct scsi_device *sdev`` scsi device to query h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjsh]hstruct scsi_device *sdev}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjqubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM*hjmubjJ)}(hhh]h)}(hscsi device to queryh]hscsi device to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jIhjmubeh}(h]h ]h"]h$]h&]uh1j'hjhM*hjjubj()}(hJ``unsigned char *buffer`` scratch buffer (must be at least 20 bytes long) h](j.)}(h``unsigned char *buffer``h]j4)}(hjh]hunsigned char *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM+hjubjJ)}(hhh]h)}(h/scratch buffer (must be at least 20 bytes long)h]h/scratch buffer (must be at least 20 bytes long)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM+hjjubj()}(h&``unsigned int len`` length of buffer h](j.)}(h``unsigned int len``h]j4)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM,hjubjJ)}(hhh]h)}(hlength of bufferh]hlength of buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM,hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM,hjjubj()}(h;``unsigned char opcode`` opcode for the command to look up h](j.)}(h``unsigned char opcode``h]j4)}(hjh]hunsigned char opcode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM-hjubjJ)}(hhh]h)}(h!opcode for the command to look uph]h!opcode for the command to look up}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM-hj4ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj3hM-hjjubj()}(h@``unsigned short sa`` service action for the command to look up h](j.)}(h``unsigned short sa``h]j4)}(hjWh]hunsigned short sa}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjUubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM.hjQubjJ)}(hhh]h)}(h)service action for the command to look uph]h)service action for the command to look up}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhM.hjmubah}(h]h ]h"]h$]h&]uh1jIhjQubeh}(h]h ]h"]h$]h&]uh1j'hjlhM.hjjubeh}(h]h ]h"]h$]h&]uh1j"hjNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM0hjNubh)}(hX&Uses the REPORT SUPPORTED OPERATION CODES to check support for the command identified with **opcode** and **sa**. If the command does not have a service action, **sa** must be 0. Returns -EINVAL if RSOC fails, 0 if the command is not supported and 1 if the device claims to support the command.h](h[Uses the REPORT SUPPORTED OPERATION CODES to check support for the command identified with }(hjhhhNhNubj)}(h **opcode**h]hopcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**sa**h]hsa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1. If the command does not have a service action, }(hjhhhNhNubj)}(h**sa**h]hsa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be 0. Returns -EINVAL if RSOC fails, 0 if the command is not supported and 1 if the device claims to support the command.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM/hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_device_get (C function)c.scsi_device_gethNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(h.int scsi_device_get (struct scsi_device *sdev)h]jP)}(h-int scsi_device_get(struct scsi_device *sdev)h](j~)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhjhM ubjy)}(hscsi_device_geth]j)}(hscsi_device_geth]hscsi_device_get}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj hhhjhM ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjFubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j)}jj0sbc.scsi_device_getasbuh1hhjFubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjFubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubah}(h]h ]h"]h$]h&]jjuh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjhhubj)}(hhh]h)}(h,get an additional reference to a scsi_deviceh]h,get an additional reference to a scsi_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhj hNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` device to get a reference to **Description** Gets a reference to the scsi_device and increments the use count of the underlying LLDD module. You must hold host_lock of the parent Scsi_Host or already have a reference when calling this. This will fail if a device is deleted or cancelled, or when the LLD module is in the process of being unloaded.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubj#)}(hhh]j()}(h:``struct scsi_device *sdev`` device to get a reference to h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM hjubjJ)}(hhh]h)}(hdevice to get a reference toh]hdevice to get a reference to}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM hj$ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj#hM hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubh)}(hGets a reference to the scsi_device and increments the use count of the underlying LLDD module. You must hold host_lock of the parent Scsi_Host or already have a reference when calling this.h]hGets a reference to the scsi_device and increments the use count of the underlying LLDD module. You must hold host_lock of the parent Scsi_Host or already have a reference when calling this.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubh)}(hoThis will fail if a device is deleted or cancelled, or when the LLD module is in the process of being unloaded.h]hoThis will fail if a device is deleted or cancelled, or when the LLD module is in the process of being unloaded.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_device_put (C function)c.scsi_device_puthNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(h/void scsi_device_put (struct scsi_device *sdev)h]jP)}(h.void scsi_device_put(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM'ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM'ubjy)}(hscsi_device_puth]j)}(hscsi_device_puth]hscsi_device_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM'ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_device_putasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM'hjhhubj)}(hhh]h)}(h$release a reference to a scsi_deviceh]h$release a reference to a scsi_device}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM'hjZhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jDhhhj hNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` device to release a reference on. **Description** Release a reference to the scsi_device and decrements the use count of the underlying LLDD module. The device is freed once the last user vanishes.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM+hjyubj#)}(hhh]j()}(h?``struct scsi_device *sdev`` device to release a reference on. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM(hjubjJ)}(hhh]h)}(h!device to release a reference on.h]h!device to release a reference on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM(hjubah}(h]h ]h"]h$]h&]uh1j"hjyubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM*hjyubh)}(hRelease a reference to the scsi_device and decrements the use count of the underlying LLDD module. The device is freed once the last user vanishes.h]hRelease a reference to the scsi_device and decrements the use count of the underlying LLDD module. The device is freed once the last user vanishes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chM*hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@$starget_for_each_device (C function)c.starget_for_each_devicehNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hpvoid starget_for_each_device (struct scsi_target *starget, void *data, void (*fn)(struct scsi_device *, void *))h]jP)}(hmvoid starget_for_each_device(struct scsi_target *starget, void *data, void (*fn)(struct scsi_device*, void*))h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMTubjh)}(h h]h }(hj-hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj,hMTubjy)}(hstarget_for_each_deviceh]j)}(hstarget_for_each_deviceh]hstarget_for_each_device}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj,hMTubj)}(hQ(struct scsi_target *starget, void *data, void (*fn)(struct scsi_device*, void*))h](j)}(hstruct scsi_target *stargeth](jV)}(hjYh]hstruct}(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubh)}(hhh]j)}(h scsi_targeth]h scsi_target}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjAsbc.starget_for_each_deviceasbuh1hhjWubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hstargeth]hstarget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h void *datah](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h&void (*fn)(struct scsi_device*, void*)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(h(h]h(}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hj h]h*}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hfnh]hfn}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubj )}(h)h]h)}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hj-h]h(}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubjV)}(hjYh]hstruct}(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjh)}(h h]h }(hj|hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.starget_for_each_deviceasbuh1hhj ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(h,h]h,}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj )}(hjVh]h)}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj,hMTubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj,hMTubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj,hMThjhhubj)}(hhh]h)}(h&helper to walk all devices of a targeth]h&helper to walk all devices of a target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMThjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jDhhhj hNhNubj)}(hX**Parameters** ``struct scsi_target *starget`` target whose devices we want to iterate over. ``void *data`` Opaque passed to each function call. ``void (*fn)(struct scsi_device *, void *)`` Function to call on each device **Description** This traverses over each device of **starget**. The devices have a reference that must be released by scsi_host_put when breaking out of the loop.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMXhj4ubj#)}(hhh](j()}(hN``struct scsi_target *starget`` target whose devices we want to iterate over. h](j.)}(h``struct scsi_target *starget``h]j4)}(hjYh]hstruct scsi_target *starget}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjWubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMUhjSubjJ)}(hhh]h)}(h-target whose devices we want to iterate over.h]h-target whose devices we want to iterate over.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMUhjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j'hjnhMUhjPubj()}(h4``void *data`` Opaque passed to each function call. h](j.)}(h``void *data``h]j4)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMVhjubjJ)}(hhh]h)}(h$Opaque passed to each function call.h]h$Opaque passed to each function call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMVhjPubj()}(hM``void (*fn)(struct scsi_device *, void *)`` Function to call on each device h](j.)}(h,``void (*fn)(struct scsi_device *, void *)``h]j4)}(hjh]h(void (*fn)(struct scsi_device *, void *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMWhjubjJ)}(hhh]h)}(hFunction to call on each deviceh]hFunction to call on each device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMWhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMWhjPubeh}(h]h ]h"]h$]h&]uh1j"hj4ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMYhj4ubh)}(hThis traverses over each device of **starget**. The devices have a reference that must be released by scsi_host_put when breaking out of the loop.h](h#This traverses over each device of }(hjhhhNhNubj)}(h **starget**h]hstarget}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe. The devices have a reference that must be released by scsi_host_put when breaking out of the loop.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMXhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&__starget_for_each_device (C function)c.__starget_for_each_devicehNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hrvoid __starget_for_each_device (struct scsi_target *starget, void *data, void (*fn)(struct scsi_device *, void *))h]jP)}(hovoid __starget_for_each_device(struct scsi_target *starget, void *data, void (*fn)(struct scsi_device*, void*))h](j~)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMlubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYhhhjkhMlubjy)}(h__starget_for_each_deviceh]j)}(h__starget_for_each_deviceh]h__starget_for_each_device}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjYhhhjkhMlubj)}(hQ(struct scsi_target *starget, void *data, void (*fn)(struct scsi_device*, void*))h](j)}(hstruct scsi_target *stargeth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_targeth]h scsi_target}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.__starget_for_each_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hstargeth]hstarget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *datah](j~)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h&void (*fn)(struct scsi_device*, void*)h](j~)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJubj )}(hj-h]h(}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj )}(hj h]h*}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj)}(hfnh]hfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubj )}(hjVh]h)}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj )}(hj-h]h(}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubjV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.__starget_for_each_deviceasbuh1hhjJubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj )}(hjh]h,}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJubj~)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubj )}(hjVh]h)}(hj+ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjkhMlubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjUhhhjkhMlubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jIhjkhMlhjRhhubj)}(hhh]h)}(h1helper to walk all devices of a target (UNLOCKED)h]h1helper to walk all devices of a target (UNLOCKED)}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMlhjQ hhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjkhMlubeh}(h]h ](jfunctioneh"]h$]h&]jjjjl jjl jjjuh1jDhhhj hNhNubj)}(hXd**Parameters** ``struct scsi_target *starget`` target whose devices we want to iterate over. ``void *data`` parameter for callback **fn\(\)** ``void (*fn)(struct scsi_device *, void *)`` callback function that is invoked for each device **Description** This traverses over each device of **starget**. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock. **Note** The only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use starget_for_each_device instead.h](h)}(h**Parameters**h]j)}(hjv h]h Parameters}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMphjp ubj#)}(hhh](j()}(hN``struct scsi_target *starget`` target whose devices we want to iterate over. h](j.)}(h``struct scsi_target *starget``h]j4)}(hj h]hstruct scsi_target *starget}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMmhj ubjJ)}(hhh]h)}(h-target whose devices we want to iterate over.h]h-target whose devices we want to iterate over.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMmhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hMmhj ubj()}(h1``void *data`` parameter for callback **fn\(\)** h](j.)}(h``void *data``h]j4)}(hj h]h void *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMnhj ubjJ)}(hhh]h)}(h!parameter for callback **fn\(\)**h](hparameter for callback }(hj hhhNhNubj)}(h **fn\(\)**h]hfn()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhj hMnhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hMnhj ubj()}(h_``void (*fn)(struct scsi_device *, void *)`` callback function that is invoked for each device h](j.)}(h,``void (*fn)(struct scsi_device *, void *)``h]j4)}(hj!h]h(void (*fn)(struct scsi_device *, void *)}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMohj!ubjJ)}(hhh]h)}(h1callback function that is invoked for each deviceh]h1callback function that is invoked for each device}(hj.!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*!hMohj+!ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j'hj*!hMohj ubeh}(h]h ]h"]h$]h&]uh1j"hjp ubh)}(h**Description**h]j)}(hjP!h]h Description}(hjR!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN!ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMqhjp ubh)}(hThis traverses over each device of **starget**. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock.h](h#This traverses over each device of }(hjf!hhhNhNubj)}(h **starget**h]hstarget}(hjn!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf!ubhn. It does _not_ take a reference on the scsi_device, so the whole loop must be protected by shost->host_lock.}(hjf!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMphjp ubh)}(h**Note**h]j)}(hj!h]hNote}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMthjp ubh)}(hThe only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use starget_for_each_device instead.h]hThe only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use starget_for_each_device instead.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMuhjp ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@+__scsi_device_lookup_by_target (C function) c.__scsi_device_lookup_by_targethNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hZstruct scsi_device * __scsi_device_lookup_by_target (struct scsi_target *starget, u64 lun)h]jP)}(hXstruct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *starget, u64 lun)h](jV)}(hjYh]hstruct}(hj!hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMubjh)}(h h]h }(hj!hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!hhhj!hMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}j__scsi_device_lookup_by_targetsb c.__scsi_device_lookup_by_targetasbuh1hhj!hhhj!hMubjh)}(h h]h }(hj"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!hhhj!hMubj )}(hj h]h*}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!hhhj!hMubjy)}(h__scsi_device_lookup_by_targeth]j)}(hj "h]h__scsi_device_lookup_by_target}(hj-"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)"ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj!hhhj!hMubj)}(h&(struct scsi_target *starget, u64 lun)h](j)}(hstruct scsi_target *stargeth](jV)}(hjYh]hstruct}(hjH"hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjD"ubjh)}(h h]h }(hjU"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjD"ubh)}(hhh]j)}(h scsi_targeth]h scsi_target}(hjf"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjc"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjh"modnameN classnameNjj)}j]j " c.__scsi_device_lookup_by_targetasbuh1hhjD"ubjh)}(h h]h }(hj"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjD"ubj )}(hj h]h*}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjD"ubj)}(hstargeth]hstarget}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjD"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@"ubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j " c.__scsi_device_lookup_by_targetasbuh1hhj"ubjh)}(h h]h }(hj"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj"ubj)}(hlunh]hlun}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj@"ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj!hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj!hhhj!hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jIhj!hMhj!hhubj)}(hhh]h)}(h)find a device given the target (UNLOCKED)h]h)find a device given the target (UNLOCKED)}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)#jj)#jjjuh1jDhhhj hNhNubj)}(hXV**Parameters** ``struct scsi_target *starget`` SCSI target pointer ``u64 lun`` SCSI Logical Unit Number **Description** Looks up the scsi_device with the specified **lun** for a given **starget**. The returned scsi_device does not have an additional reference. You must hold the host's host_lock over this call and any access to the returned scsi_device. A scsi_device in state SDEV_DEL is skipped. **Note** The only reason why drivers should use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup_by_target instead.h](h)}(h**Parameters**h]j)}(hj3#h]h Parameters}(hj5#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1#ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj-#ubj#)}(hhh](j()}(h4``struct scsi_target *starget`` SCSI target pointer h](j.)}(h``struct scsi_target *starget``h]j4)}(hjR#h]hstruct scsi_target *starget}(hjT#hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjP#ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjL#ubjJ)}(hhh]h)}(hSCSI target pointerh]hSCSI target pointer}(hjk#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg#hMhjh#ubah}(h]h ]h"]h$]h&]uh1jIhjL#ubeh}(h]h ]h"]h$]h&]uh1j'hjg#hMhjI#ubj()}(h%``u64 lun`` SCSI Logical Unit Number h](j.)}(h ``u64 lun``h]j4)}(hj#h]hu64 lun}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj#ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj#ubjJ)}(hhh]h)}(hSCSI Logical Unit Numberh]hSCSI Logical Unit Number}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j'hj#hMhjI#ubeh}(h]h ]h"]h$]h&]uh1j"hj-#ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj-#ubh)}(hXLooks up the scsi_device with the specified **lun** for a given **starget**. The returned scsi_device does not have an additional reference. You must hold the host's host_lock over this call and any access to the returned scsi_device. A scsi_device in state SDEV_DEL is skipped.h](h,Looks up the scsi_device with the specified }(hj#hhhNhNubj)}(h**lun**h]hlun}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh for a given }(hj#hhhNhNubj)}(h **starget**h]hstarget}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh. The returned scsi_device does not have an additional reference. You must hold the host’s host_lock over this call and any access to the returned scsi_device. A scsi_device in state SDEV_DEL is skipped.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj-#ubh)}(h**Note**h]j)}(hj$h]hNote}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj-#ubh)}(hThe only reason why drivers should use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup_by_target instead.h]hThe only reason why drivers should use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup_by_target instead.}(hj'$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj-#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@)scsi_device_lookup_by_target (C function)c.scsi_device_lookup_by_targethNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hXstruct scsi_device * scsi_device_lookup_by_target (struct scsi_target *starget, u64 lun)h]jP)}(hVstruct scsi_device *scsi_device_lookup_by_target(struct scsi_target *starget, u64 lun)h](jV)}(hjYh]hstruct}(hjV$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjR$hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMubjh)}(h h]h }(hjd$hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR$hhhjc$hMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hju$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjr$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjw$modnameN classnameNjj)}j]j)}jscsi_device_lookup_by_targetsbc.scsi_device_lookup_by_targetasbuh1hhjR$hhhjc$hMubjh)}(h h]h }(hj$hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR$hhhjc$hMubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjR$hhhjc$hMubjy)}(hscsi_device_lookup_by_targeth]j)}(hj$h]hscsi_device_lookup_by_target}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjR$hhhjc$hMubj)}(h&(struct scsi_target *starget, u64 lun)h](j)}(hstruct scsi_target *stargeth](jV)}(hjYh]hstruct}(hj$hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$ubjh)}(h h]h }(hj$hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$ubh)}(hhh]j)}(h scsi_targeth]h scsi_target}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j$c.scsi_device_lookup_by_targetasbuh1hhj$ubjh)}(h h]h }(hj %hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$ubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj)}(hstargeth]hstarget}(hj'%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hjC%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE%modnameN classnameNjj)}j]j$c.scsi_device_lookup_by_targetasbuh1hhj<%ubjh)}(h h]h }(hja%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj<%ubj)}(hlunh]hlun}(hjo%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj<%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj$ubeh}(h]h ]h"]h$]h&]jjuh1jhjR$hhhjc$hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjN$hhhjc$hMubah}(h]jI$ah ](jjeh"]h$]h&]jj)jhuh1jIhjc$hMhjK$hhubj)}(hhh]h)}(hfind a device given the targeth]hfind a device given the target}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhjK$hhhjc$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jDhhhj hNhNubj)}(hXK**Parameters** ``struct scsi_target *starget`` SCSI target pointer ``u64 lun`` SCSI Logical Unit Number **Description** Looks up the scsi_device with the specified **lun** for a given **starget**. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj%ubj#)}(hhh](j()}(h4``struct scsi_target *starget`` SCSI target pointer h](j.)}(h``struct scsi_target *starget``h]j4)}(hj%h]hstruct scsi_target *starget}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj%ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj%ubjJ)}(hhh]h)}(hSCSI target pointerh]hSCSI target pointer}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j'hj%hMhj%ubj()}(h%``u64 lun`` SCSI Logical Unit Number h](j.)}(h ``u64 lun``h]j4)}(hj&h]hu64 lun}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj&ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj &ubjJ)}(hhh]h)}(hSCSI Logical Unit Numberh]hSCSI Logical Unit Number}(hj,&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(&hMhj)&ubah}(h]h ]h"]h$]h&]uh1jIhj &ubeh}(h]h ]h"]h$]h&]uh1j'hj(&hMhj%ubeh}(h]h ]h"]h$]h&]uh1j"hj%ubh)}(h**Description**h]j)}(hjN&h]h Description}(hjP&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL&ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj%ubh)}(hLooks up the scsi_device with the specified **lun** for a given **starget**. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.h](h,Looks up the scsi_device with the specified }(hjd&hhhNhNubj)}(h**lun**h]hlun}(hjl&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd&ubh for a given }(hjd&hhhNhNubj)}(h **starget**h]hstarget}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd&ubh. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you’re done with it.}(hjd&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!__scsi_device_lookup (C function)c.__scsi_device_lookuphNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hcstruct scsi_device * __scsi_device_lookup (struct Scsi_Host *shost, uint channel, uint id, u64 lun)h]jP)}(hastruct scsi_device *__scsi_device_lookup(struct Scsi_Host *shost, uint channel, uint id, u64 lun)h](jV)}(hjYh]hstruct}(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMubjh)}(h h]h }(hj&hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&hhhj&hMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}j__scsi_device_lookupsbc.__scsi_device_lookupasbuh1hhj&hhhj&hMubjh)}(h h]h }(hj&hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&hhhj&hMubj )}(hj h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&hhhj&hMubjy)}(h__scsi_device_lookuph]j)}(hj&h]h__scsi_device_lookup}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj&hhhj&hMubj)}(h9(struct Scsi_Host *shost, uint channel, uint id, u64 lun)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj1'hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-'ubjh)}(h h]h }(hj>'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-'ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjO'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjL'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQ'modnameN classnameNjj)}j]j&c.__scsi_device_lookupasbuh1hhj-'ubjh)}(h h]h }(hjm'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-'ubj )}(hj h]h*}(hj{'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-'ubj)}(hshosth]hshost}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)'ubj)}(h uint channelh](h)}(hhh]j)}(huinth]huint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j&c.__scsi_device_lookupasbuh1hhj'ubjh)}(h h]h }(hj'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj'ubj)}(hchannelh]hchannel}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)'ubj)}(huint idh](h)}(hhh]j)}(huinth]huint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j&c.__scsi_device_lookupasbuh1hhj'ubjh)}(h h]h }(hj (hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj'ubj)}(hidh]hid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)'ubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hj4(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6(modnameN classnameNjj)}j]j&c.__scsi_device_lookupasbuh1hhj-(ubjh)}(h h]h }(hjR(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-(ubj)}(hlunh]hlun}(hj`(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)'ubeh}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jIhj&hMhj&hhubj)}(hhh]h)}(h'find a device given the host (UNLOCKED)h]h'find a device given the host (UNLOCKED)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jDhhhj hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` SCSI host pointer ``uint channel`` SCSI channel (zero if only one channel) ``uint id`` SCSI target number (physical unit number) ``u64 lun`` SCSI Logical Unit Number **Description** Looks up the scsi_device with the specified **channel**, **id**, **lun** for a given host. The returned scsi_device does not have an additional reference. You must hold the host's host_lock over this call and any access to the returned scsi_device. **Note** The only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup instead.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubj#)}(hhh](j()}(h.``struct Scsi_Host *shost`` SCSI host pointer h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj(h]hstruct Scsi_Host *shost}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj(ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubjJ)}(hhh]h)}(hSCSI host pointerh]hSCSI host pointer}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j'hj(hMhj(ubj()}(h9``uint channel`` SCSI channel (zero if only one channel) h](j.)}(h``uint channel``h]j4)}(hj)h]h uint channel}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj)ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubjJ)}(hhh]h)}(h'SCSI channel (zero if only one channel)h]h'SCSI channel (zero if only one channel)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j'hj)hMhj(ubj()}(h6``uint id`` SCSI target number (physical unit number) h](j.)}(h ``uint id``h]j4)}(hj=)h]huint id}(hj?)hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj;)ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj7)ubjJ)}(hhh]h)}(h)SCSI target number (physical unit number)h]h)SCSI target number (physical unit number)}(hjV)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR)hMhjS)ubah}(h]h ]h"]h$]h&]uh1jIhj7)ubeh}(h]h ]h"]h$]h&]uh1j'hjR)hMhj(ubj()}(h%``u64 lun`` SCSI Logical Unit Number h](j.)}(h ``u64 lun``h]j4)}(hjv)h]hu64 lun}(hjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjt)ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjp)ubjJ)}(hhh]h)}(hSCSI Logical Unit Numberh]hSCSI Logical Unit Number}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jIhjp)ubeh}(h]h ]h"]h$]h&]uh1j'hj)hMhj(ubeh}(h]h ]h"]h$]h&]uh1j"hj(ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubh)}(hLooks up the scsi_device with the specified **channel**, **id**, **lun** for a given host. The returned scsi_device does not have an additional reference. You must hold the host's host_lock over this call and any access to the returned scsi_device.h](h,Looks up the scsi_device with the specified }(hj)hhhNhNubj)}(h **channel**h]hchannel}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh, }(hj)hhhNhNubj)}(h**id**h]hid}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh, }hj)sbj)}(h**lun**h]hlun}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh for a given host. The returned scsi_device does not have an additional reference. You must hold the host’s host_lock over this call and any access to the returned scsi_device.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubh)}(h**Note**h]j)}(hj*h]hNote}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubh)}(hThe only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup instead.h]hThe only reason why drivers would want to use this is because they need to access the device list in irq context. Otherwise you really want to use scsi_device_lookup instead.}(hj$*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_device_lookup (C function)c.scsi_device_lookuphNtauh1j3hj hhhNhNubjE)}(hhh](jJ)}(hastruct scsi_device * scsi_device_lookup (struct Scsi_Host *shost, uint channel, uint id, u64 lun)h]jP)}(h_struct scsi_device *scsi_device_lookup(struct Scsi_Host *shost, uint channel, uint id, u64 lun)h](jV)}(hjYh]hstruct}(hjS*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjO*hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMubjh)}(h h]h }(hja*hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjO*hhhj`*hMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjr*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjo*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjt*modnameN classnameNjj)}j]j)}jscsi_device_lookupsbc.scsi_device_lookupasbuh1hhjO*hhhj`*hMubjh)}(h h]h }(hj*hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjO*hhhj`*hMubj )}(hj h]h*}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjO*hhhj`*hMubjy)}(hscsi_device_lookuph]j)}(hj*h]hscsi_device_lookup}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjO*hhhj`*hMubj)}(h9(struct Scsi_Host *shost, uint channel, uint id, u64 lun)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj*hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj*ubjh)}(h h]h }(hj*hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]j*c.scsi_device_lookupasbuh1hhj*ubjh)}(h h]h }(hj +hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubj )}(hj h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj)}(hshosth]hshost}(hj$+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(h uint channelh](h)}(hhh]j)}(huinth]huint}(hj@+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjB+modnameN classnameNjj)}j]j*c.scsi_device_lookupasbuh1hhj9+ubjh)}(h h]h }(hj^+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj9+ubj)}(hchannelh]hchannel}(hjl+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(huint idh](h)}(hhh]j)}(huinth]huint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j*c.scsi_device_lookupasbuh1hhj+ubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubj)}(hidh]hid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j*c.scsi_device_lookupasbuh1hhj+ubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubj)}(hlunh]hlun}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubeh}(h]h ]h"]h$]h&]jjuh1jhjO*hhhj`*hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjK*hhhj`*hMubah}(h]jF*ah ](jjeh"]h$]h&]jj)jhuh1jIhj`*hMhjH*hhubj)}(hhh]h)}(hfind a device given the hosth]hfind a device given the host}(hj&,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj#,hhubah}(h]h ]h"]h$]h&]uh1jhjH*hhhj`*hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>,jj>,jjjuh1jDhhhj hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` SCSI host pointer ``uint channel`` SCSI channel (zero if only one channel) ``uint id`` SCSI target number (physical unit number) ``u64 lun`` SCSI Logical Unit Number **Description** Looks up the scsi_device with the specified **channel**, **id**, **lun** for a given host. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.h](h)}(h**Parameters**h]j)}(hjH,h]h Parameters}(hjJ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF,ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjB,ubj#)}(hhh](j()}(h.``struct Scsi_Host *shost`` SCSI host pointer h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjg,h]hstruct Scsi_Host *shost}(hji,hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hje,ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhja,ubjJ)}(hhh]h)}(hSCSI host pointerh]hSCSI host pointer}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|,hMhj},ubah}(h]h ]h"]h$]h&]uh1jIhja,ubeh}(h]h ]h"]h$]h&]uh1j'hj|,hMhj^,ubj()}(h9``uint channel`` SCSI channel (zero if only one channel) h](j.)}(h``uint channel``h]j4)}(hj,h]h uint channel}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj,ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj,ubjJ)}(hhh]h)}(h'SCSI channel (zero if only one channel)h]h'SCSI channel (zero if only one channel)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j'hj,hMhj^,ubj()}(h6``uint id`` SCSI target number (physical unit number) h](j.)}(h ``uint id``h]j4)}(hj,h]huint id}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj,ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj,ubjJ)}(hhh]h)}(h)SCSI target number (physical unit number)h]h)SCSI target number (physical unit number)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jIhj,ubeh}(h]h ]h"]h$]h&]uh1j'hj,hMhj^,ubj()}(h%``u64 lun`` SCSI Logical Unit Number h](j.)}(h ``u64 lun``h]j4)}(hj-h]hu64 lun}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj-ubah}(h]h ]h"]h$]h&]uh1j-hT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhj -ubjJ)}(hhh]h)}(hSCSI Logical Unit Numberh]hSCSI Logical Unit Number}(hj+-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'-hMhj(-ubah}(h]h ]h"]h$]h&]uh1jIhj -ubeh}(h]h ]h"]h$]h&]uh1j'hj'-hMhj^,ubeh}(h]h ]h"]h$]h&]uh1j"hjB,ubh)}(h**Description**h]j)}(hjM-h]h Description}(hjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK-ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjB,ubh)}(hLooks up the scsi_device with the specified **channel**, **id**, **lun** for a given host. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you're done with it.h](h,Looks up the scsi_device with the specified }(hjc-hhhNhNubj)}(h **channel**h]hchannel}(hjk-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc-ubh, }(hjc-hhhNhNubj)}(h**id**h]hid}(hj}-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc-ubh, }hjc-sbj)}(h**lun**h]hlun}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc-ubh for a given host. The returned scsi_device has an additional reference that needs to be released with scsi_device_put once you’re done with it.}(hjc-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:101: ./drivers/scsi/scsi.chMhjB,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]drivers-scsi-scsi-cah ]h"]drivers/scsi/scsi.cah$]h&]uh1hhjhhhhhKaubh)}(hhh](h)}(hdrivers/scsi/scsicam.ch]hdrivers/scsi/scsicam.c}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhKiubh)}(h`SCSI Common Access Method `__ support functions, for use with HDIO_GETGEO, etc.h](jn)}(hR`SCSI Common Access Method `__h]hSCSI Common Access Method}(hj-hhhNhNubah}(h]h ]h"]h$]h&]nameSCSI Common Access Methodj2http://www.t10.org/ftp/t10/drafts/cam/cam-r12b.pdfuh1jmhj-ubh2 support functions, for use with HDIO_GETGEO, etc.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKkhj-hhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_bios_ptable (C function)c.scsi_bios_ptablehNtauh1j3hj-hhhNhNubjE)}(hhh](jJ)}(h6unsigned char * scsi_bios_ptable (struct gendisk *dev)h]jP)}(h4unsigned char *scsi_bios_ptable(struct gendisk *dev)h](j~)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-hhhj.hKubj~)}(hcharh]hchar}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-hhhj.hKubjh)}(h h]h }(hj+.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-hhhj.hKubj )}(hj h]h*}(hj9.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-hhhj.hKubjy)}(hscsi_bios_ptableh]j)}(hscsi_bios_ptableh]hscsi_bios_ptable}(hjJ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjF.ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj-hhhj.hKubj)}(h(struct gendisk *dev)h]j)}(hstruct gendisk *devh](jV)}(hjYh]hstruct}(hjf.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjb.ubjh)}(h h]h }(hjs.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjb.ubh)}(hhh]j)}(hgendiskh]hgendisk}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jjL.sbc.scsi_bios_ptableasbuh1hhjb.ubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjb.ubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjb.ubj)}(hdevh]hdev}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjb.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^.ubah}(h]h ]h"]h$]h&]jjuh1jhj-hhhj.hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj-hhhj.hKubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1jIhj.hKhj-hhubj)}(hhh]h)}(h6Read PC partition table out of first sector of device.h]h6Read PC partition table out of first sector of device.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj.hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jDhhhj-hNhNubj)}(hX**Parameters** ``struct gendisk *dev`` from this device **Description** Reads the first sector from the device and returns ``0x42`` bytes starting at offset ``0x1be``. **Return** partition table in kmalloc(GFP_KERNEL) memory, or NULL on error.h](h)}(h**Parameters**h]j)}(hj /h]h Parameters}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj /ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj/ubj#)}(hhh]j()}(h)``struct gendisk *dev`` from this device h](j.)}(h``struct gendisk *dev``h]j4)}(hj*/h]hstruct gendisk *dev}(hj,/hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj(/ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj$/ubjJ)}(hhh]h)}(hfrom this deviceh]hfrom this device}(hjC/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?/hKhj@/ubah}(h]h ]h"]h$]h&]uh1jIhj$/ubeh}(h]h ]h"]h$]h&]uh1j'hj?/hKhj!/ubah}(h]h ]h"]h$]h&]uh1j"hj/ubh)}(h**Description**h]j)}(hje/h]h Description}(hjg/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj/ubj#)}(hhh]j()}(h`Reads the first sector from the device and returns ``0x42`` bytes starting at offset ``0x1be``. h](j.)}(hAReads the first sector from the device and returns ``0x42`` bytesh](h3Reads the first sector from the device and returns }(hj/hhhNhNubj4)}(h``0x42``h]h0x42}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj/ubh bytes}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj~/ubjJ)}(hhh]h)}(hstarting at offset ``0x1be``.h](hstarting at offset }(hj/hhhNhNubj4)}(h ``0x1be``h]h0x1be}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj/ubh.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jIhj~/ubeh}(h]h ]h"]h$]h&]uh1j'hj/hKhj{/ubah}(h]h ]h"]h$]h&]uh1j"hj/ubh)}(h **Return**h]j)}(hj/h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK hj/ubh)}(h@partition table in kmalloc(GFP_KERNEL) memory, or NULL on error.h]h@partition table in kmalloc(GFP_KERNEL) memory, or NULL on error.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_partsize (C function)c.scsi_partsizehNtauh1j3hj-hhhNhNubjE)}(hhh](jJ)}(hIbool scsi_partsize (struct gendisk *disk, sector_t capacity, int geom[3])h]jP)}(hHbool scsi_partsize(struct gendisk *disk, sector_t capacity, int geom[3])h](j~)}(hjh]hbool}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK2ubjh)}(h h]h }(hj-0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj0hhhj,0hK2ubjy)}(h scsi_partsizeh]j)}(h scsi_partsizeh]h scsi_partsize}(hj?0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;0ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj0hhhj,0hK2ubj)}(h6(struct gendisk *disk, sector_t capacity, int geom[3])h](j)}(hstruct gendisk *diskh](jV)}(hjYh]hstruct}(hj[0hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjW0ubjh)}(h h]h }(hjh0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjW0ubh)}(hhh]j)}(hgendiskh]hgendisk}(hjy0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjv0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{0modnameN classnameNjj)}j]j)}jjA0sbc.scsi_partsizeasbuh1hhjW0ubjh)}(h h]h }(hj0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjW0ubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjW0ubj)}(hdiskh]hdisk}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjW0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS0ubj)}(hsector_t capacityh](h)}(hhh]j)}(hsector_th]hsector_t}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j0c.scsi_partsizeasbuh1hhj0ubjh)}(h h]h }(hj0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj0ubj)}(hcapacityh]hcapacity}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS0ubj)}(h int geom[3]h](j~)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1ubjh)}(h h]h }(hj#1hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj1ubj)}(hgeomh]hgeom}(hj11hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1ubj )}(h[h]h[}(hj?1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubhdesc_sig_literal_number)}(h3h]h3}(hjO1hhhNhNubah}(h]h ]mah"]h$]h&]uh1jM1hj1ubj )}(h]h]h]}(hj^1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjS0ubeh}(h]h ]h"]h$]h&]jjuh1jhj0hhhj,0hK2ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj0hhhj,0hK2ubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jIhj,0hK2hj0hhubj)}(hhh]h)}(h5Parse cylinders/heads/sectors from PC partition tableh]h5Parse cylinders/heads/sectors from PC partition table}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK2hj1hhubah}(h]h ]h"]h$]h&]uh1jhj0hhhj,0hK2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jDhhhj-hNhNubj)}(hXn**Parameters** ``struct gendisk *disk`` gendisk of the disk to parse ``sector_t capacity`` size of the disk in sectors ``int geom[3]`` output in form of [hds, cylinders, sectors] **Description** Determine the BIOS mapping/geometry used to create the partition table, storing the results in **geom**. **Return** ``false`` on failure, ``true`` on success.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK6hj1ubj#)}(hhh](j()}(h6``struct gendisk *disk`` gendisk of the disk to parse h](j.)}(h``struct gendisk *disk``h]j4)}(hj1h]hstruct gendisk *disk}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj1ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK3hj1ubjJ)}(hhh]h)}(hgendisk of the disk to parseh]hgendisk of the disk to parse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hK3hj1ubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j'hj1hK3hj1ubj()}(h2``sector_t capacity`` size of the disk in sectors h](j.)}(h``sector_t capacity``h]j4)}(hj2h]hsector_t capacity}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK4hj1ubjJ)}(hhh]h)}(hsize of the disk in sectorsh]hsize of the disk in sectors}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hK4hj2ubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j'hj2hK4hj1ubj()}(h<``int geom[3]`` output in form of [hds, cylinders, sectors] h](j.)}(h``int geom[3]``h]j4)}(hj;2h]h int geom[3]}(hj=2hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj92ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK5hj52ubjJ)}(hhh]h)}(h+output in form of [hds, cylinders, sectors]h]h+output in form of [hds, cylinders, sectors]}(hjT2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP2hK5hjQ2ubah}(h]h ]h"]h$]h&]uh1jIhj52ubeh}(h]h ]h"]h$]h&]uh1j'hjP2hK5hj1ubeh}(h]h ]h"]h$]h&]uh1j"hj1ubh)}(h**Description**h]j)}(hjv2h]h Description}(hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK7hj1ubh)}(hhDetermine the BIOS mapping/geometry used to create the partition table, storing the results in **geom**.h](h_Determine the BIOS mapping/geometry used to create the partition table, storing the results in }(hj2hhhNhNubj)}(h**geom**h]hgeom}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK6hj1ubh)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK9hj1ubh)}(h*``false`` on failure, ``true`` on success.h](j4)}(h ``false``h]hfalse}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2ubh on failure, }(hj2hhhNhNubj4)}(h``true``h]htrue}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj2ubh on success.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chK:hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsicam_bios_param (C function)c.scsicam_bios_paramhNtauh1j3hj-hhhNhNubjE)}(hhh](jJ)}(hIint scsicam_bios_param (struct gendisk *disk, sector_t capacity, int *ip)h]jP)}(hHint scsicam_bios_param(struct gendisk *disk, sector_t capacity, int *ip)h](j~)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKubjh)}(h h]h }(hj#3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj3hhhj"3hKubjy)}(hscsicam_bios_paramh]j)}(hscsicam_bios_paramh]hscsicam_bios_param}(hj53hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj13ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj3hhhj"3hKubj)}(h2(struct gendisk *disk, sector_t capacity, int *ip)h](j)}(hstruct gendisk *diskh](jV)}(hjYh]hstruct}(hjQ3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjM3ubjh)}(h h]h }(hj^3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjM3ubh)}(hhh]j)}(hgendiskh]hgendisk}(hjo3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjl3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq3modnameN classnameNjj)}j]j)}jj73sbc.scsicam_bios_paramasbuh1hhjM3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjM3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjM3ubj)}(hdiskh]hdisk}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjM3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI3ubj)}(hsector_t capacityh](h)}(hhh]j)}(hsector_th]hsector_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j3c.scsicam_bios_paramasbuh1hhj3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj3ubj)}(hcapacityh]hcapacity}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI3ubj)}(hint *iph](j~)}(hinth]hint}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4ubjh)}(h h]h }(hj4hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj4ubj )}(hj h]h*}(hj'4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj4ubj)}(hiph]hip}(hj44hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI3ubeh}(h]h ]h"]h$]h&]jjuh1jhj3hhhj"3hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj 3hhhj"3hKubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jIhj"3hKhj 3hhubj)}(hhh]h)}(h8Determine geometry of a disk in cylinders/heads/sectors.h]h8Determine geometry of a disk in cylinders/heads/sectors.}(hj^4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj[4hhubah}(h]h ]h"]h$]h&]uh1jhj 3hhhj"3hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjv4jjv4jjjuh1jDhhhj-hNhNubj)}(hX**Parameters** ``struct gendisk *disk`` which device ``sector_t capacity`` size of the disk in sectors ``int *ip`` return value: ip[0]=heads, ip[1]=sectors, ip[2]=cylinders **Description** determine the BIOS mapping/geometry used for a drive in a SCSI-CAM system, storing the results in ip as required by the HDIO_GETGEO ioctl(). **Return** -1 on failure, 0 on success.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~4ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhjz4ubj#)}(hhh](j()}(h&``struct gendisk *disk`` which device h](j.)}(h``struct gendisk *disk``h]j4)}(hj4h]hstruct gendisk *disk}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj4ubjJ)}(hhh]h)}(h which deviceh]h which device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hj4hKhj4ubj()}(h2``sector_t capacity`` size of the disk in sectors h](j.)}(h``sector_t capacity``h]j4)}(hj4h]hsector_t capacity}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj4ubjJ)}(hhh]h)}(hsize of the disk in sectorsh]hsize of the disk in sectors}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj4ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hj4hKhj4ubj()}(hF``int *ip`` return value: ip[0]=heads, ip[1]=sectors, ip[2]=cylinders h](j.)}(h ``int *ip``h]j4)}(hj5h]hint *ip}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj5ubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhj 5ubjJ)}(hhh]h)}(h9return value: ip[0]=heads, ip[1]=sectors, ip[2]=cylindersh]h9return value: ip[0]=heads, ip[1]=sectors, ip[2]=cylinders}(hj*5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&5hKhj'5ubah}(h]h ]h"]h$]h&]uh1jIhj 5ubeh}(h]h ]h"]h$]h&]uh1j'hj&5hKhj4ubeh}(h]h ]h"]h$]h&]uh1j"hjz4ubh)}(h**Description**h]j)}(hjL5h]h Description}(hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhjz4ubj#)}(hhh]j()}(hdetermine the BIOS mapping/geometry used for a drive in a SCSI-CAM system, storing the results in ip as required by the HDIO_GETGEO ioctl(). h](j.)}(h9determine the BIOS mapping/geometry used for a drive in ah]h9determine the BIOS mapping/geometry used for a drive in a}(hji5hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhje5ubjJ)}(hhh]h)}(hRSCSI-CAM system, storing the results in ip as required by the HDIO_GETGEO ioctl().h]hRSCSI-CAM system, storing the results in ip as required by the HDIO_GETGEO ioctl().}(hj{5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhjx5ubah}(h]h ]h"]h$]h&]uh1jIhje5ubeh}(h]h ]h"]h$]h&]uh1j'hjw5hKhjb5ubah}(h]h ]h"]h$]h&]uh1j"hjz4ubh)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhjz4ubh)}(h-1 on failure, 0 on success.h]h-1 on failure, 0 on success.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:111: ./drivers/scsi/scsicam.chKhjz4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj-hhhNhNubeh}(h]drivers-scsi-scsicam-cah ]h"]drivers/scsi/scsicam.cah$]h&]uh1hhjhhhhhKiubh)}(hhh](h)}(hdrivers/scsi/scsi_error.ch]hdrivers/scsi/scsi_error.c}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKsubh)}(h,Common SCSI error/timeout handling routines.h]h,Common SCSI error/timeout handling routines.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj5hhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_schedule_eh (C function)c.scsi_schedule_ehhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(h/void scsi_schedule_eh (struct Scsi_Host *shost)h]jP)}(h.void scsi_schedule_eh(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKMubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6hhhj6hKMubjy)}(hscsi_schedule_ehh]j)}(hscsi_schedule_ehh]hscsi_schedule_eh}(hj+6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'6ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj6hhhj6hKMubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjG6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjC6ubjh)}(h h]h }(hjT6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjC6ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hje6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjb6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjg6modnameN classnameNjj)}j]j)}jj-6sbc.scsi_schedule_ehasbuh1hhjC6ubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjC6ubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjC6ubj)}(hshosth]hshost}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjC6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?6ubah}(h]h ]h"]h$]h&]jjuh1jhj6hhhj6hKMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj6hhhj6hKMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jIhj6hKMhj5hhubj)}(hhh]h)}(hschedule EH for SCSI hosth]hschedule EH for SCSI host}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj6hKMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jDhhhj5hNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` SCSI host to invoke error handling on. **Description** Schedule SCSI EH without scmd.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKQhj6ubj#)}(hhh]j()}(hC``struct Scsi_Host *shost`` SCSI host to invoke error handling on. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj 7h]hstruct Scsi_Host *shost}(hj 7hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj 7ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKNhj7ubjJ)}(hhh]h)}(h&SCSI host to invoke error handling on.h]h&SCSI host to invoke error handling on.}(hj$7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 7hKNhj!7ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j'hj 7hKNhj7ubah}(h]h ]h"]h$]h&]uh1j"hj6ubh)}(h**Description**h]j)}(hjF7h]h Description}(hjH7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKPhj6ubh)}(hSchedule SCSI EH without scmd.h]hSchedule SCSI EH without scmd.}(hj\7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chKOhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@.scsi_block_when_processing_errors (C function)#c.scsi_block_when_processing_errorshNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(h@int scsi_block_when_processing_errors (struct scsi_device *sdev)h]jP)}(h?int scsi_block_when_processing_errors(struct scsi_device *sdev)h](j~)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj7hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMvubjh)}(h h]h }(hj7hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj7hhhj7hMvubjy)}(h!scsi_block_when_processing_errorsh]j)}(h!scsi_block_when_processing_errorsh]h!scsi_block_when_processing_errors}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj7hhhj7hMvubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj7ubjh)}(h h]h }(hj7hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj7ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j)}jj7sb#c.scsi_block_when_processing_errorsasbuh1hhj7ubjh)}(h h]h }(hj8hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj7ubj )}(hj h]h*}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj7ubj)}(hsdevh]hsdev}(hj!8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj7ubah}(h]h ]h"]h$]h&]jjuh1jhj7hhhj7hMvubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj7hhhj7hMvubah}(h]j~7ah ](jjeh"]h$]h&]jj)jhuh1jIhj7hMvhj7hhubj)}(hhh]h)}(hPrevent cmds from being queued.h]hPrevent cmds from being queued.}(hjK8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMvhjH8hhubah}(h]h ]h"]h$]h&]uh1jhj7hhhj7hMvubeh}(h]h ](jfunctioneh"]h$]h&]jjjjc8jjc8jjjuh1jDhhhj5hNhNubj)}(hX;**Parameters** ``struct scsi_device *sdev`` Device on which we are performing recovery. **Description** We block until the host is out of error recovery, and then check to see whether the host or the device is offline. Return value: 0 when dev was taken offline by error recovery. 1 OK to proceed.h](h)}(h**Parameters**h]j)}(hjm8h]h Parameters}(hjo8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMzhjg8ubj#)}(hhh]j()}(hI``struct scsi_device *sdev`` Device on which we are performing recovery. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj8h]hstruct scsi_device *sdev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj8ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMwhj8ubjJ)}(hhh]h)}(h+Device on which we are performing recovery.h]h+Device on which we are performing recovery.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMwhj8ubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j'hj8hMwhj8ubah}(h]h ]h"]h$]h&]uh1j"hjg8ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMyhjg8ubj`)}(hsWe block until the host is out of error recovery, and then check to see whether the host or the device is offline. h]h)}(hrWe block until the host is out of error recovery, and then check to see whether the host or the device is offline.h]hrWe block until the host is out of error recovery, and then check to see whether the host or the device is offline.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMyhj8ubah}(h]h ]h"]h$]h&]uh1j_hj8hMyhjg8ubj#)}(hhh]j()}(hNReturn value: 0 when dev was taken offline by error recovery. 1 OK to proceed.h](j.)}(h Return value:h]h Return value:}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM|hj8ubjJ)}(hhh]h)}(h@0 when dev was taken offline by error recovery. 1 OK to proceed.h]h@0 when dev was taken offline by error recovery. 1 OK to proceed.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM}hj 9ubah}(h]h ]h"]h$]h&]uh1jIhj8ubeh}(h]h ]h"]h$]h&]uh1j'hj 9hM|hj8ubah}(h]h ]h"]h$]h&]uh1j"hjg8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_check_sense (C function)c.scsi_check_sensehNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(h?enum scsi_disposition scsi_check_sense (struct scsi_cmnd *scmd)h]jP)}(h>enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)h](jV)}(henumh]henum}(hjP9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjL9hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMubjh)}(h h]h }(hj_9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjL9hhhj^9hMubh)}(hhh]j)}(hscsi_dispositionh]hscsi_disposition}(hjp9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjm9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjr9modnameN classnameNjj)}j]j)}jscsi_check_sensesbc.scsi_check_senseasbuh1hhjL9hhhj^9hMubjh)}(h h]h }(hj9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjL9hhhj^9hMubjy)}(hscsi_check_senseh]j)}(hj9h]hscsi_check_sense}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjL9hhhj^9hMubj)}(h(struct scsi_cmnd *scmd)h]j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hj9hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj9ubjh)}(h h]h }(hj9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj9ubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j9c.scsi_check_senseasbuh1hhj9ubjh)}(h h]h }(hj9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj9ubj )}(hj h]h*}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj9ubj)}(hscmdh]hscmd}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9ubah}(h]h ]h"]h$]h&]jjuh1jhjL9hhhj^9hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjH9hhhj^9hMubah}(h]jC9ah ](jjeh"]h$]h&]jj)jhuh1jIhj^9hMhjE9hhubj)}(hhh]h)}(hExamine scsi cmd senseh]hExamine scsi cmd sense}(hj?:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj<:hhubah}(h]h ]h"]h$]h&]uh1jhjE9hhhj^9hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW:jjW:jjjuh1jDhhhj5hNhNubj)}(hX**Parameters** ``struct scsi_cmnd *scmd`` Cmd to have sense checked. **Description** Return value: SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUE **Notes** When a deferred error is detected the current command has not been executed and needs retrying.h](h)}(h**Parameters**h]j)}(hja:h]h Parameters}(hjc:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj[:ubj#)}(hhh]j()}(h6``struct scsi_cmnd *scmd`` Cmd to have sense checked. h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hj:h]hstruct scsi_cmnd *scmd}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj~:ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjz:ubjJ)}(hhh]h)}(hCmd to have sense checked.h]hCmd to have sense checked.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jIhjz:ubeh}(h]h ]h"]h$]h&]uh1j'hj:hMhjw:ubah}(h]h ]h"]h$]h&]uh1j"hj[:ubh)}(h**Description**h]j)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj[:ubj#)}(hhh]j()}(hAReturn value: SUCCESS or FAILED or NEEDS_RETRY or ADD_TO_MLQUEUE h](j.)}(h Return value:h]h Return value:}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj:ubjJ)}(hhh]h)}(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&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jIhj:ubeh}(h]h ]h"]h$]h&]uh1j'hj:hMhj:ubah}(h]h ]h"]h$]h&]uh1j"hj[:ubh)}(h **Notes**h]j)}(hj ;h]hNotes}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj[:ubj`)}(h_When a deferred error is detected the current command has not been executed and needs retrying.h]h)}(h_When a deferred error is detected the current command has not been executed and needs retrying.h]h_When a deferred error is detected the current command has not been executed and needs retrying.}(hj&;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj";ubah}(h]h ]h"]h$]h&]uh1j_hj4;hMhj[:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_eh_prep_cmnd (C function)c.scsi_eh_prep_cmndhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hvoid scsi_eh_prep_cmnd (struct scsi_cmnd *scmd, struct scsi_eh_save *ses, unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)h]jP)}(hvoid scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)h](j~)}(hvoidh]hvoid}(hj[;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjW;hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMubjh)}(h h]h }(hjj;hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjW;hhhji;hMubjy)}(hscsi_eh_prep_cmndh]j)}(hscsi_eh_prep_cmndh]hscsi_eh_prep_cmnd}(hj|;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjx;ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjW;hhhji;hMubj)}(hl(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, unsigned char *cmnd, int cmnd_size, unsigned sense_bytes)h](j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hj;hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj;ubjh)}(h h]h }(hj;hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj;ubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j)}jj~;sbc.scsi_eh_prep_cmndasbuh1hhj;ubjh)}(h h]h }(hj;hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj;ubj )}(hj h]h*}(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj;ubj)}(hscmdh]hscmd}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hstruct scsi_eh_save *sesh](jV)}(hjYh]hstruct}(hj <hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj<ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj<ubh)}(hhh]j)}(h scsi_eh_saveh]h scsi_eh_save}(hj(<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj%<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*<modnameN classnameNjj)}j]j;c.scsi_eh_prep_cmndasbuh1hhj<ubjh)}(h h]h }(hjF<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj<ubj )}(hj h]h*}(hjT<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<ubj)}(hsesh]hses}(hja<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hunsigned char *cmndh](j~)}(hunsignedh]hunsigned}(hjz<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjv<ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjv<ubj~)}(hcharh]hchar}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjv<ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjv<ubj )}(hj h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjv<ubj)}(hcmndh]hcmnd}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjv<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h int cmnd_sizeh](j~)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj<ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj<ubj)}(h cmnd_sizeh]h cmnd_size}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(hunsigned sense_bytesh](j~)}(hunsignedh]hunsigned}(hj =hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj =ubjh)}(h h]h }(hj=hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj =ubj)}(h sense_bytesh]h sense_bytes}(hj)=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj =ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjW;hhhji;hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjS;hhhji;hMubah}(h]jN;ah ](jjeh"]h$]h&]jj)jhuh1jIhji;hMhjP;hhubj)}(hhh]h)}(h2Save a scsi command info as part of error recoveryh]h2Save a scsi command info as part of error recovery}(hjS=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjP=hhubah}(h]h ]h"]h$]h&]uh1jhjP;hhhji;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjk=jjk=jjjuh1jDhhhj5hNhNubj)}(hX **Parameters** ``struct scsi_cmnd *scmd`` SCSI command structure to hijack ``struct scsi_eh_save *ses`` structure to save restore information ``unsigned char *cmnd`` CDB to send. Can be NULL if no new cmnd is needed ``int cmnd_size`` size in bytes of **cmnd** (must be <= MAX_COMMAND_SIZE) ``unsigned sense_bytes`` size of sense data to copy. or 0 (if != 0 **cmnd** is ignored) **Description** This function is used to save a scsi command information before re-execution as part of the error recovery process. If **sense_bytes** is 0 the command sent must be one that does not transfer any data. If **sense_bytes** != 0 **cmnd** is ignored and this functions sets up a REQUEST_SENSE command and cmnd buffers to read **sense_bytes** into **scmd->sense_buffer**.h](h)}(h**Parameters**h]j)}(hju=h]h Parameters}(hjw=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs=ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjo=ubj#)}(hhh](j()}(h<``struct scsi_cmnd *scmd`` SCSI command structure to hijack h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hj=h]hstruct scsi_cmnd *scmd}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj=ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj=ubjJ)}(hhh]h)}(h SCSI command structure to hijackh]h SCSI command structure to hijack}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j'hj=hMhj=ubj()}(hC``struct scsi_eh_save *ses`` structure to save restore information h](j.)}(h``struct scsi_eh_save *ses``h]j4)}(hj=h]hstruct scsi_eh_save *ses}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj=ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj=ubjJ)}(hhh]h)}(h%structure to save restore informationh]h%structure to save restore information}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j'hj=hMhj=ubj()}(hJ``unsigned char *cmnd`` CDB to send. Can be NULL if no new cmnd is needed h](j.)}(h``unsigned char *cmnd``h]j4)}(hj>h]hunsigned char *cmnd}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj>ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj>ubjJ)}(hhh]h)}(h1CDB to send. Can be NULL if no new cmnd is neededh]h1CDB to send. Can be NULL if no new cmnd is needed}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j'hj>hMhj=ubj()}(hJ``int cmnd_size`` size in bytes of **cmnd** (must be <= MAX_COMMAND_SIZE) h](j.)}(h``int cmnd_size``h]j4)}(hj?>h]h int cmnd_size}(hjA>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj=>ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj9>ubjJ)}(hhh]h)}(h7size in bytes of **cmnd** (must be <= MAX_COMMAND_SIZE)h](hsize in bytes of }(hjX>hhhNhNubj)}(h**cmnd**h]hcmnd}(hj`>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX>ubh (must be <= MAX_COMMAND_SIZE)}(hjX>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjT>hMhjU>ubah}(h]h ]h"]h$]h&]uh1jIhj9>ubeh}(h]h ]h"]h$]h&]uh1j'hjT>hMhj=ubj()}(hX``unsigned sense_bytes`` size of sense data to copy. or 0 (if != 0 **cmnd** is ignored) h](j.)}(h``unsigned sense_bytes``h]j4)}(hj>h]hunsigned sense_bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj>ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj>ubjJ)}(hhh]h)}(h>size of sense data to copy. or 0 (if != 0 **cmnd** is ignored)h](h*size of sense data to copy. or 0 (if != 0 }(hj>hhhNhNubj)}(h**cmnd**h]hcmnd}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh is ignored)}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j'hj>hMhj=ubeh}(h]h ]h"]h$]h&]uh1j"hjo=ubh)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjo=ubh)}(hXpThis function is used to save a scsi command information before re-execution as part of the error recovery process. If **sense_bytes** is 0 the command sent must be one that does not transfer any data. If **sense_bytes** != 0 **cmnd** is ignored and this functions sets up a REQUEST_SENSE command and cmnd buffers to read **sense_bytes** into **scmd->sense_buffer**.h](hxThis function is used to save a scsi command information before re-execution as part of the error recovery process. If }(hj>hhhNhNubj)}(h**sense_bytes**h]h sense_bytes}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubhH is 0 the command sent must be one that does not transfer any data. If }(hj>hhhNhNubj)}(h**sense_bytes**h]h sense_bytes}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh != 0 }(hj>hhhNhNubj)}(h**cmnd**h]hcmnd}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubhX is ignored and this functions sets up a REQUEST_SENSE command and cmnd buffers to read }(hj>hhhNhNubj)}(h**sense_bytes**h]h sense_bytes}(hj+?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh into }(hj>hhhNhNubj)}(h**scmd->sense_buffer**h]hscmd->sense_buffer}(hj=?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjo=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_eh_restore_cmnd (C function)c.scsi_eh_restore_cmndhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hLvoid scsi_eh_restore_cmnd (struct scsi_cmnd* scmd, struct scsi_eh_save *ses)h]jP)}(hKvoid scsi_eh_restore_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses)h](j~)}(hvoidh]hvoid}(hjv?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjr?hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMfubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjr?hhhj?hMfubjy)}(hscsi_eh_restore_cmndh]j)}(hscsi_eh_restore_cmndh]hscsi_eh_restore_cmnd}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjr?hhhj?hMfubj)}(h2(struct scsi_cmnd *scmd, struct scsi_eh_save *ses)h](j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j)}jj?sbc.scsi_eh_restore_cmndasbuh1hhj?ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubj )}(hj h]h*}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?ubj)}(hscmdh]hscmd}(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hstruct scsi_eh_save *sesh](jV)}(hjYh]hstruct}(hj%@hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj!@ubjh)}(h h]h }(hj2@hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!@ubh)}(hhh]j)}(h scsi_eh_saveh]h scsi_eh_save}(hjC@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjE@modnameN classnameNjj)}j]j?c.scsi_eh_restore_cmndasbuh1hhj!@ubjh)}(h h]h }(hja@hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!@ubj )}(hj h]h*}(hjo@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!@ubj)}(hsesh]hses}(hj|@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhjr?hhhj?hMfubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjn?hhhj?hMfubah}(h]ji?ah ](jjeh"]h$]h&]jj)jhuh1jIhj?hMfhjk?hhubj)}(hhh]h)}(h5Restore a scsi command info as part of error recoveryh]h5Restore a scsi command info as part of error recovery}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMfhj@hhubah}(h]h ]h"]h$]h&]uh1jhjk?hhhj?hMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jDhhhj5hNhNubj)}(h**Parameters** ``struct scsi_cmnd* scmd`` SCSI command structure to restore ``struct scsi_eh_save *ses`` saved information from a coresponding call to scsi_eh_prep_cmnd **Description** Undo any damage done by above scsi_eh_prep_cmnd().h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMjhj@ubj#)}(hhh](j()}(h=``struct scsi_cmnd* scmd`` SCSI command structure to restore h](j.)}(h``struct scsi_cmnd* scmd``h]j4)}(hj@h]hstruct scsi_cmnd* scmd}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj@ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMghj@ubjJ)}(hhh]h)}(h!SCSI command structure to restoreh]h!SCSI command structure to restore}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMghj@ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j'hj@hMghj@ubj()}(h]``struct scsi_eh_save *ses`` saved information from a coresponding call to scsi_eh_prep_cmnd h](j.)}(h``struct scsi_eh_save *ses``h]j4)}(hj Ah]hstruct scsi_eh_save *ses}(hj"AhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjAubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhhjAubjJ)}(hhh]h)}(h?saved information from a coresponding call to scsi_eh_prep_cmndh]h?saved information from a coresponding call to scsi_eh_prep_cmnd}(hj9AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5AhMhhj6Aubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j'hj5AhMhhj@ubeh}(h]h ]h"]h$]h&]uh1j"hj@ubh)}(h**Description**h]j)}(hj[Ah]h Description}(hj]AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMjhj@ubh)}(h2Undo any damage done by above scsi_eh_prep_cmnd().h]h2Undo any damage done by above scsi_eh_prep_cmnd().}(hjqAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMihj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_eh_finish_cmd (C function)c.scsi_eh_finish_cmdhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hJvoid scsi_eh_finish_cmd (struct scsi_cmnd *scmd, struct list_head *done_q)h]jP)}(hIvoid scsi_eh_finish_cmd(struct scsi_cmnd *scmd, struct list_head *done_q)h](j~)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjAhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM ubjh)}(h h]h }(hjAhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAhhhjAhM ubjy)}(hscsi_eh_finish_cmdh]j)}(hscsi_eh_finish_cmdh]hscsi_eh_finish_cmd}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjAhhhjAhM ubj)}(h2(struct scsi_cmnd *scmd, struct list_head *done_q)h](j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubjh)}(h h]h }(hjAhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNjj)}j]j)}jjAsbc.scsi_eh_finish_cmdasbuh1hhjAubjh)}(h h]h }(hjBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubj )}(hj h]h*}(hj)BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj)}(hscmdh]hscmd}(hj6BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubj)}(hstruct list_head *done_qh](jV)}(hjYh]hstruct}(hjOBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKBubjh)}(h h]h }(hj\BhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKBubh)}(hhh]j)}(h list_headh]h list_head}(hjmBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjoBmodnameN classnameNjj)}j]jBc.scsi_eh_finish_cmdasbuh1hhjKBubjh)}(h h]h }(hjBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKBubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjKBubj)}(hdone_qh]hdone_q}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubeh}(h]h ]h"]h$]h&]jjuh1jhjAhhhjAhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjAhhhjAhM ubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1jIhjAhM hjAhhubj)}(hhh]h)}(h&Handle a cmd that eh is finished with.h]h&Handle a cmd that eh is finished with.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jDhhhj5hNhNubj)}(hX**Parameters** ``struct scsi_cmnd *scmd`` Original SCSI cmd that eh has finished. ``struct list_head *done_q`` Queue for processed commands. **Notes** We don't want to use the normal command completion while we are are still handling errors - it may cause other commands to be queued, and that would disturb what we are doing. Thus we really want to keep a list of pending commands for final completion, and once we are ready to leave error handling we handle completion for real.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjBubj#)}(hhh](j()}(hC``struct scsi_cmnd *scmd`` Original SCSI cmd that eh has finished. h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hjCh]hstruct scsi_cmnd *scmd}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hj CubjJ)}(hhh]h)}(h'Original SCSI cmd that eh has finished.h]h'Original SCSI cmd that eh has finished.}(hj*ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ChM hj'Cubah}(h]h ]h"]h$]h&]uh1jIhj Cubeh}(h]h ]h"]h$]h&]uh1j'hj&ChM hjCubj()}(h;``struct list_head *done_q`` Queue for processed commands. h](j.)}(h``struct list_head *done_q``h]j4)}(hjJCh]hstruct list_head *done_q}(hjLChhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjHCubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjDCubjJ)}(hhh]h)}(hQueue for processed commands.h]hQueue for processed commands.}(hjcChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ChM hj`Cubah}(h]h ]h"]h$]h&]uh1jIhjDCubeh}(h]h ]h"]h$]h&]uh1j'hj_ChM hjCubeh}(h]h ]h"]h$]h&]uh1j"hjBubh)}(h **Notes**h]j)}(hjCh]hNotes}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjBubj`)}(hXJWe don't want to use the normal command completion while we are are still handling errors - it may cause other commands to be queued, and that would disturb what we are doing. Thus we really want to keep a list of pending commands for final completion, and once we are ready to leave error handling we handle completion for real.h]h)}(hXJWe don't want to use the normal command completion while we are are still handling errors - it may cause other commands to be queued, and that would disturb what we are doing. Thus we really want to keep a list of pending commands for final completion, and once we are ready to leave error handling we handle completion for real.h]hXLWe don’t want to use the normal command completion while we are are still handling errors - it may cause other commands to be queued, and that would disturb what we are doing. Thus we really want to keep a list of pending commands for final completion, and once we are ready to leave error handling we handle completion for real.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjCubah}(h]h ]h"]h$]h&]uh1j_hjChMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_eh_get_sense (C function)c.scsi_eh_get_sensehNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hJint scsi_eh_get_sense (struct list_head *work_q, struct list_head *done_q)h]jP)}(hIint scsi_eh_get_sense(struct list_head *work_q, struct list_head *done_q)h](j~)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjChhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMubjh)}(h h]h }(hjChhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjChhhjChMubjy)}(hscsi_eh_get_senseh]j)}(hscsi_eh_get_senseh]hscsi_eh_get_sense}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjChhhjChMubj)}(h4(struct list_head *work_q, struct list_head *done_q)h](j)}(hstruct list_head *work_qh](jV)}(hjYh]hstruct}(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj Dubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj Dubh)}(hhh]j)}(h list_headh]h list_head}(hj/DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,Dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1DmodnameN classnameNjj)}j]j)}jjCsbc.scsi_eh_get_senseasbuh1hhj Dubjh)}(h h]h }(hjODhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj Dubj )}(hj h]h*}(hj]DhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj Dubj)}(hwork_qh]hwork_q}(hjjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj Dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Dubj)}(hstruct list_head *done_qh](jV)}(hjYh]hstruct}(hjDhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjDubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjDubh)}(hhh]j)}(h list_headh]h list_head}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jKDc.scsi_eh_get_senseasbuh1hhjDubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjDubj )}(hj h]h*}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj)}(hdone_qh]hdone_q}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj Dubeh}(h]h ]h"]h$]h&]jjuh1jhjChhhjChMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjChhhjChMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jIhjChMhjChhubj)}(hhh]h)}(hGet device sense data.h]hGet device sense data.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jDhhhj5hNhNubj)}(hX**Parameters** ``struct list_head *work_q`` Queue of commands to process. ``struct list_head *done_q`` Queue of processed commands. **Description** See if we need to request sense information. if so, then get it now, so we have a better idea of what to do. **Notes** This has the unfortunate side effect that if a shost adapter does not automatically request sense information, we end up shutting it down before we request it. All drivers should request sense information internally these days, so for now all I have to say is tough noogies if you end up in here. XXX: Long term this code should go away, but that needs an audit of all LLDDs first.h](h)}(h**Parameters**h]j)}(hj&Eh]h Parameters}(hj(EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Eubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hj Eubj#)}(hhh](j()}(h;``struct list_head *work_q`` Queue of commands to process. h](j.)}(h``struct list_head *work_q``h]j4)}(hjEEh]hstruct list_head *work_q}(hjGEhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCEubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj?EubjJ)}(hhh]h)}(hQueue of commands to process.h]hQueue of commands to process.}(hj^EhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZEhMhj[Eubah}(h]h ]h"]h$]h&]uh1jIhj?Eubeh}(h]h ]h"]h$]h&]uh1j'hjZEhMhjGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-Gubh)}(hhh]j)}(h list_headh]h list_head}(hjOGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQGmodnameN classnameNjj)}j]jFc.scsi_eh_ready_devsasbuh1hhj-Gubjh)}(h h]h }(hjmGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-Gubj )}(hj h]h*}(hj{GhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-Gubj)}(hwork_qh]hwork_q}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-Gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hstruct list_head *done_qh](jV)}(hjYh]hstruct}(hjGhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGubjh)}(h h]h }(hjGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjGubh)}(hhh]j)}(h list_headh]h list_head}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jFc.scsi_eh_ready_devsasbuh1hhjGubjh)}(h h]h }(hjGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjGubj )}(hj h]h*}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGubj)}(hdone_qh]hdone_q}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhj~FhhhjFhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjzFhhhjFhMubah}(h]juFah ](jjeh"]h$]h&]jj)jhuh1jIhjFhMhjwFhhubj)}(hhh]h)}(h,check device ready state and recover if not.h]h,check device ready state and recover if not.}(hj"HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jhjwFhhhjFhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:Hjj:Hjjjuh1jDhhhj5hNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` host to be recovered. ``struct list_head *work_q`` :c:type:`list_head` for pending commands. ``struct list_head *done_q`` :c:type:`list_head` for processed commands.h](h)}(h**Parameters**h]j)}(hjDHh]h Parameters}(hjFHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBHubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj>Hubj#)}(hhh](j()}(h2``struct Scsi_Host *shost`` host to be recovered. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjcHh]hstruct Scsi_Host *shost}(hjeHhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjaHubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj]HubjJ)}(hhh]h)}(hhost to be recovered.h]hhost to be recovered.}(hj|HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxHhMhjyHubah}(h]h ]h"]h$]h&]uh1jIhj]Hubeh}(h]h ]h"]h$]h&]uh1j'hjxHhMhjZHubj()}(hG``struct list_head *work_q`` :c:type:`list_head` for pending commands. h](j.)}(h``struct list_head *work_q``h]j4)}(hjHh]hstruct list_head *work_q}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjHubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjHubjJ)}(hhh]h)}(h):c:type:`list_head` for pending commands.h](h)}(h:c:type:`list_head`h]j4)}(hjHh]h list_head}(hjHhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjHubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhjHhMhjHubh for pending commands.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j'hjHhMhjZHubj()}(hH``struct list_head *done_q`` :c:type:`list_head` for processed commands.h](j.)}(h``struct list_head *done_q``h]j4)}(hjHh]hstruct list_head *done_q}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjHubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjHubjJ)}(hhh]h)}(h+:c:type:`list_head` for processed commands.h](h)}(h:c:type:`list_head`h]j4)}(hjIh]h list_head}(hjIhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjIubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj list_headuh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj Iubh for processed commands.}(hj IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0IhMhj Iubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j'hj IhMhjZHubeh}(h]h ]h"]h$]h&]uh1j"hj>Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_eh_flush_done_q (C function)c.scsi_eh_flush_done_qhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(h4void scsi_eh_flush_done_q (struct list_head *done_q)h]jP)}(h3void scsi_eh_flush_done_q(struct list_head *done_q)h](j~)}(hvoidh]hvoid}(hjmIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjiIhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMubjh)}(h h]h }(hj|IhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjiIhhhj{IhMubjy)}(hscsi_eh_flush_done_qh]j)}(hscsi_eh_flush_done_qh]hscsi_eh_flush_done_q}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjiIhhhj{IhMubj)}(h(struct list_head *done_q)h]j)}(hstruct list_head *done_qh](jV)}(hjYh]hstruct}(hjIhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubjh)}(h h]h }(hjIhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIubh)}(hhh]j)}(h list_headh]h list_head}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjImodnameN classnameNjj)}j]j)}jjIsbc.scsi_eh_flush_done_qasbuh1hhjIubjh)}(h h]h }(hjIhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIubj )}(hj h]h*}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj)}(hdone_qh]hdone_q}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjIubah}(h]h ]h"]h$]h&]jjuh1jhjiIhhhj{IhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjeIhhhj{IhMubah}(h]j`Iah ](jjeh"]h$]h&]jj)jhuh1jIhj{IhMhjbIhhubj)}(hhh]h)}(h(finish processed commands or retry them.h]h(finish processed commands or retry them.}(hj-JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhj*Jhhubah}(h]h ]h"]h$]h&]uh1jhjbIhhhj{IhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEJjjEJjjjuh1jDhhhj5hNhNubj)}(hO**Parameters** ``struct list_head *done_q`` list_head of processed commands.h](h)}(h**Parameters**h]j)}(hjOJh]h Parameters}(hjQJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMJubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjIJubj#)}(hhh]j()}(h=``struct list_head *done_q`` list_head of processed commands.h](j.)}(h``struct list_head *done_q``h]j4)}(hjnJh]hstruct list_head *done_q}(hjpJhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjlJubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjhJubjJ)}(hhh]h)}(h list_head of processed commands.h]h list_head of processed commands.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMhjJubah}(h]h ]h"]h$]h&]uh1jIhjhJubeh}(h]h ]h"]h$]h&]uh1j'hjJhMhjeJubah}(h]h ]h"]h$]h&]uh1j"hjIJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_report_bus_reset (C function)c.scsi_report_bus_resethNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hAvoid scsi_report_bus_reset (struct Scsi_Host *shost, int channel)h]jP)}(h@void scsi_report_bus_reset(struct Scsi_Host *shost, int channel)h](j~)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMV ubjh)}(h h]h }(hjJhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJhhhjJhMV ubjy)}(hscsi_report_bus_reseth]j)}(hscsi_report_bus_reseth]hscsi_report_bus_reset}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjJhhhjJhMV ubj)}(h&(struct Scsi_Host *shost, int channel)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj#KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj Kubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%KmodnameN classnameNjj)}j]j)}jjJsbc.scsi_report_bus_resetasbuh1hhjKubjh)}(h h]h }(hjCKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKubj )}(hj h]h*}(hjQKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjKubj)}(hshosth]hshost}(hj^KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubj)}(h int channelh](j~)}(hinth]hint}(hjwKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjsKubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsKubj)}(hchannelh]hchannel}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjJubeh}(h]h ]h"]h$]h&]jjuh1jhjJhhhjJhMV ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjJhhhjJhMV ubah}(h]jJah ](jjeh"]h$]h&]jj)jhuh1jIhjJhMV hjJhhubj)}(hhh]h)}(hreport bus reset observedh]hreport bus reset observed}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMV hjKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMV ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jDhhhj5hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` Host in question ``int channel`` channel on which reset was observed. **Description** Utility function used by low-level drivers to report that they have observed a bus reset on the bus being handled. Lock status: Host lock must be held. **Return** Nothing **Notes** This only needs to be called if the reset is one which originates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm. The main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMZ hjKubj#)}(hhh](j()}(h-``struct Scsi_Host *shost`` Host in question h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjKh]hstruct Scsi_Host *shost}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjKubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM[ hjKubjJ)}(hhh]h)}(hHost in questionh]hHost in question}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM[ hjLubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j'hjLhM[ hjKubj()}(h5``int channel`` channel on which reset was observed. h](j.)}(h``int channel``h]j4)}(hj7Lh]h int channel}(hj9LhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj5Lubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM\ hj1LubjJ)}(hhh]h)}(h$channel on which reset was observed.h]h$channel on which reset was observed.}(hjPLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLLhM\ hjMLubah}(h]h ]h"]h$]h&]uh1jIhj1Lubeh}(h]h ]h"]h$]h&]uh1j'hjLLhM\ hjKubeh}(h]h ]h"]h$]h&]uh1j"hjKubh)}(h**Description**h]j)}(hjrLh]h Description}(hjtLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM^ hjKubh)}(hrUtility function used by low-level drivers to report that they have observed a bus reset on the bus being handled.h]hrUtility function used by low-level drivers to report that they have observed a bus reset on the bus being handled.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMW hjKubh)}(h$Lock status: Host lock must be held.h]h$Lock status: Host lock must be held.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM[ hjKubh)}(h **Return**h]j)}(hjLh]hReturn}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM] hjKubh)}(hNothingh]hNothing}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM^ hjKubh)}(h **Notes**h]j)}(hjLh]hNotes}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM` hjKubj#)}(hhh]j()}(hXThis only needs to be called if the reset is one which originates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm. The main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h](j.)}(h6This only needs to be called if the reset is one whichh]h6This only needs to be called if the reset is one which}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMg hjLubjJ)}(hhh](h)}(horiginates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm.h]horiginates from an unknown location. Resets originated by the mid-level itself don’t need to call this, but there should be no harm.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMc hjLubh)}(hTThe main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h]hTThe main purpose of this is to make sure that a CHECK_CONDITION is properly treated.}(hj MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMg hjLubeh}(h]h ]h"]h$]h&]uh1jIhjLubeh}(h]h ]h"]h$]h&]uh1j'hjLhMg hjLubah}(h]h ]h"]h$]h&]uh1j"hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@%scsi_report_device_reset (C function)c.scsi_report_device_resethNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hPvoid scsi_report_device_reset (struct Scsi_Host *shost, int channel, int target)h]jP)}(hOvoid scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)h](j~)}(hvoidh]hvoid}(hjMMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIMhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMv ubjh)}(h h]h }(hj\MhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIMhhhj[MhMv ubjy)}(hscsi_report_device_reseth]j)}(hscsi_report_device_reseth]hscsi_report_device_reset}(hjnMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjMubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjIMhhhj[MhMv ubj)}(h2(struct Scsi_Host *shost, int channel, int target)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubjh)}(h h]h }(hjMhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjMubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j)}jjpMsbc.scsi_report_device_resetasbuh1hhjMubjh)}(h h]h }(hjMhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjMubj )}(hj h]h*}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjMubj)}(hshosth]hshost}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h int channelh](j~)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjMubjh)}(h h]h }(hj NhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjMubj)}(hchannelh]hchannel}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h int targeth](j~)}(hinth]hint}(hj1NhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-Nubjh)}(h h]h }(hj?NhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-Nubj)}(htargeth]htarget}(hjMNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-Nubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjIMhhhj[MhMv ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjEMhhhj[MhMv ubah}(h]j@Mah ](jjeh"]h$]h&]jj)jhuh1jIhj[MhMv hjBMhhubj)}(hhh]h)}(hreport device reset observedh]hreport device reset observed}(hjwNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMv hjtNhhubah}(h]h ]h"]h$]h&]uh1jhjBMhhhj[MhMv ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jDhhhj5hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` Host in question ``int channel`` channel on which reset was observed ``int target`` target on which reset was observed **Description** Utility function used by low-level drivers to report that they have observed a device reset on the device being handled. Lock status: Host lock must be held **Return** Nothing **Notes** This only needs to be called if the reset is one which originates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm. The main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMz hjNubj#)}(hhh](j()}(h-``struct Scsi_Host *shost`` Host in question h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjNh]hstruct Scsi_Host *shost}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM{ hjNubjJ)}(hhh]h)}(hHost in questionh]hHost in question}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM{ hjNubah}(h]h ]h"]h$]h&]uh1jIhjNubeh}(h]h ]h"]h$]h&]uh1j'hjNhM{ hjNubj()}(h4``int channel`` channel on which reset was observed h](j.)}(h``int channel``h]j4)}(hjNh]h int channel}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM| hjNubjJ)}(hhh]h)}(h#channel on which reset was observedh]h#channel on which reset was observed}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM| hjOubah}(h]h ]h"]h$]h&]uh1jIhjNubeh}(h]h ]h"]h$]h&]uh1j'hjOhM| hjNubj()}(h2``int target`` target on which reset was observed h](j.)}(h``int target``h]j4)}(hj*Oh]h int target}(hj,OhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj(Oubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM} hj$OubjJ)}(hhh]h)}(h"target on which reset was observedh]h"target on which reset was observed}(hjCOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?OhM} hj@Oubah}(h]h ]h"]h$]h&]uh1jIhj$Oubeh}(h]h ]h"]h$]h&]uh1j'hj?OhM} hjNubeh}(h]h ]h"]h$]h&]uh1j"hjNubh)}(h**Description**h]j)}(hjeOh]h Description}(hjgOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcOubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjNubh)}(hxUtility function used by low-level drivers to report that they have observed a device reset on the device being handled.h]hxUtility function used by low-level drivers to report that they have observed a device reset on the device being handled.}(hj{OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chMw hjNubh)}(h#Lock status: Host lock must be heldh]h#Lock status: Host lock must be held}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM{ hjNubh)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM} hjNubh)}(hNothingh]hNothing}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjNubh)}(h **Notes**h]j)}(hjOh]hNotes}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjNubj#)}(hhh]j()}(hXThis only needs to be called if the reset is one which originates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm. The main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h](j.)}(h6This only needs to be called if the reset is one whichh]h6This only needs to be called if the reset is one which}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjOubjJ)}(hhh](h)}(horiginates from an unknown location. Resets originated by the mid-level itself don't need to call this, but there should be no harm.h]horiginates from an unknown location. Resets originated by the mid-level itself don’t need to call this, but there should be no harm.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:119: ./drivers/scsi/scsi_error.chM hjOubh)}(hTThe main purpose of this is to make sure that a CHECK_CONDITION is properly treated.h]hTThe main purpose of this is to make sure that a CHECK_CONDITION is properly treated.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM hjOubeh}(h]h ]h"]h$]h&]uh1jIhjOubeh}(h]h ]h"]h$]h&]uh1j'hjOhM hjOubah}(h]h ]h"]h$]h&]uh1j"hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj5hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@$scsi_get_sense_info_fld (C function)c.scsi_get_sense_info_fldhNtauh1j3hj5hhhNhNubjE)}(hhh](jJ)}(hPbool scsi_get_sense_info_fld (const u8 *sense_buffer, int sb_len, u64 *info_out)h]jP)}(hObool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len, u64 *info_out)h](j~)}(hjh]hbool}(hj@PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcompatible. The scsi_static_device_list entries are added with **compatible** 1 and **clfags** NULL. **Return** 0 OK, -error on failure./h](h)}(h**Parameters**h]j)}(hj(Uh]h Parameters}(hj*UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Uubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMNhj"Uubj#)}(hhh](j()}(hP``int compatible`` if true, null terminate short strings. Otherwise space pad. h](j.)}(h``int compatible``h]j4)}(hjGUh]hint compatible}(hjIUhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjEUubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMKhjAUubjJ)}(hhh]h)}(hUubj()}(h``char *vendor`` vendor string h](j.)}(h``char *vendor``h]j4)}(hjUh]h char *vendor}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj~Uubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMLhjzUubjJ)}(hhh]h)}(h vendor stringh]h vendor string}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMLhjUubah}(h]h ]h"]h$]h&]uh1jIhjzUubeh}(h]h ]h"]h$]h&]uh1j'hjUhMLhj>Uubj()}(h'``char *model`` model (product) string h](j.)}(h``char *model``h]j4)}(hjUh]h char *model}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjUubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMMhjUubjJ)}(hhh]h)}(hmodel (product) stringh]hmodel (product) string}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMMhjUubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j'hjUhMMhj>Uubj()}(h"``char *strflags`` integer string h](j.)}(h``char *strflags``h]j4)}(hjUh]hchar *strflags}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjUubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMNhjUubjJ)}(hhh]h)}(hinteger stringh]hinteger string}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMNhjVubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j'hjVhMNhj>Uubj()}(h>``blist_flags_t flags`` if strflags NULL, use this flag value h](j.)}(h``blist_flags_t flags``h]j4)}(hj+Vh]hblist_flags_t flags}(hj-VhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj)Vubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMOhj%VubjJ)}(hhh]h)}(h%if strflags NULL, use this flag valueh]h%if strflags NULL, use this flag value}(hjDVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@VhMOhjAVubah}(h]h ]h"]h$]h&]uh1jIhj%Vubeh}(h]h ]h"]h$]h&]uh1j'hj@VhMOhj>Uubj()}(h2``enum scsi_devinfo_key key`` specify list to use h](j.)}(h``enum scsi_devinfo_key key``h]j4)}(hjdVh]henum scsi_devinfo_key key}(hjfVhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjbVubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMPhj^VubjJ)}(hhh]h)}(hspecify list to useh]hspecify list to use}(hj}VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyVhMPhjzVubah}(h]h ]h"]h$]h&]uh1jIhj^Vubeh}(h]h ]h"]h$]h&]uh1j'hjyVhMPhj>Uubeh}(h]h ]h"]h$]h&]uh1j"hj"Uubh)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMRhj"Uubj`)}(hX,Create and add one dev_info entry for **vendor**, **model**, **strflags** or **flag** in list specified by **key**. If **compatible**, add to the tail of the list, do not space pad, and set devinfo->compatible. The scsi_static_device_list entries are added with **compatible** 1 and **clfags** NULL. h]h)}(hX+Create and add one dev_info entry for **vendor**, **model**, **strflags** or **flag** in list specified by **key**. If **compatible**, add to the tail of the list, do not space pad, and set devinfo->compatible. The scsi_static_device_list entries are added with **compatible** 1 and **clfags** NULL.h](h&Create and add one dev_info entry for }(hjVhhhNhNubj)}(h **vendor**h]hvendor}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }(hjVhhhNhNubj)}(h **model**h]hmodel}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, }(hjVhhhNhNubj)}(h **strflags**h]hstrflags}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh or }(hjVhhhNhNubj)}(h**flag**h]hflag}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh in list specified by }(hjVhhhNhNubj)}(h**key**h]hkey}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh. If }(hjVhhhNhNubj)}(h**compatible**h]h compatible}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh, add to the tail of the list, do not space pad, and set devinfo->compatible. The scsi_static_device_list entries are added with }(hjVhhhNhNubj)}(h**compatible**h]h compatible}(hj-WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh 1 and }(hjVhhhNhNubj)}(h **clfags**h]hclfags}(hj?WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh NULL.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMRhjVubah}(h]h ]h"]h$]h&]uh1j_hjWWhMRhj"Uubh)}(h **Return**h]j)}(hj`Wh]hReturn}(hjbWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Wubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMXhj"Uubh)}(h0 OK, -error on failure.h]h0 OK, -error on failure.}(hjvWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMYhj"Uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@(scsi_get_device_flags_keyed (C function)c.scsi_get_device_flags_keyedhNtauh1j3hjRhhhNhNubjE)}(hhh](jJ)}(hblist_flags_t scsi_get_device_flags_keyed (struct scsi_device *sdev, const unsigned char *vendor, const unsigned char *model, enum scsi_devinfo_key key)h]jP)}(hblist_flags_t scsi_get_device_flags_keyed(struct scsi_device *sdev, const unsigned char *vendor, const unsigned char *model, enum scsi_devinfo_key key)h](h)}(hhh]j)}(h blist_flags_th]h blist_flags_t}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j)}jscsi_get_device_flags_keyedsbc.scsi_get_device_flags_keyedasbuh1hhjWhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM-ubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWhhhjWhM-ubjy)}(hscsi_get_device_flags_keyedh]j)}(hjWh]hscsi_get_device_flags_keyed}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjWhhhjWhM-ubj)}(hn(struct scsi_device *sdev, const unsigned char *vendor, const unsigned char *model, enum scsi_devinfo_key key)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubjh)}(h h]h }(hjXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]jWc.scsi_get_device_flags_keyedasbuh1hhjWubjh)}(h h]h }(hj3XhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubj )}(hj h]h*}(hjAXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hsdevh]hsdev}(hjNXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hconst unsigned char *vendorh](jV)}(hj~Ph]hconst}(hjgXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjcXubjh)}(h h]h }(hjtXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjcXubj~)}(hunsignedh]hunsigned}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcXubjh)}(h h]h }(hjXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjcXubj~)}(hcharh]hchar}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjcXubjh)}(h h]h }(hjXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjcXubj )}(hj h]h*}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjcXubj)}(hvendorh]hvendor}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(hconst unsigned char *modelh](jV)}(hj~Ph]hconst}(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubjh)}(h h]h }(hjXhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXubj~)}(hunsignedh]hunsigned}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjXubjh)}(h h]h }(hj YhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXubj~)}(hcharh]hchar}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjXubjh)}(h h]h }(hj%YhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXubj )}(hj h]h*}(hj3YhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXubj)}(hmodelh]hmodel}(hj@YhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubj)}(henum scsi_devinfo_key keyh](jV)}(hjR9h]henum}(hjYYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUYubjh)}(h h]h }(hjfYhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUYubh)}(hhh]j)}(hscsi_devinfo_keyh]hscsi_devinfo_key}(hjwYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyYmodnameN classnameNjj)}j]jWc.scsi_get_device_flags_keyedasbuh1hhjUYubjh)}(h h]h }(hjYhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUYubj)}(hkeyh]hkey}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubeh}(h]h ]h"]h$]h&]jjuh1jhjWhhhjWhM-ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjWhhhjWhM-ubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jIhjWhM-hjWhhubj)}(hhh]h)}(h6get device specific flags from the dynamic device listh]h6get device specific flags from the dynamic device list}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM-hjYhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjWhM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jDhhhjRhNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` :c:type:`scsi_device` to get flags for ``const unsigned char *vendor`` vendor name ``const unsigned char *model`` model name ``enum scsi_devinfo_key key`` list to look up **Description** Search the scsi_dev_info_list specified by **key** for an entry matching **vendor** and **model**, if found, return the matching flags value, else return the host or global default settings. Called during scan time.h](h)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM1hjYubj#)}(hhh](j()}(hD``struct scsi_device *sdev`` :c:type:`scsi_device` to get flags for h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjZh]hstruct scsi_device *sdev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj Zubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM.hjZubjJ)}(hhh]h)}(h&:c:type:`scsi_device` to get flags forh](h)}(h:c:type:`scsi_device`h]j4)}(hj-Zh]h scsi_device}(hj/ZhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hj+Zubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_deviceuh1hhj#ZhM.hj'Zubh to get flags for}(hj'ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#ZhM.hj$Zubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j'hj#ZhM.hjZubj()}(h,``const unsigned char *vendor`` vendor name h](j.)}(h``const unsigned char *vendor``h]j4)}(hjfZh]hconst unsigned char *vendor}(hjhZhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjdZubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM/hj`ZubjJ)}(hhh]h)}(h vendor nameh]h vendor name}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ZhM/hj|Zubah}(h]h ]h"]h$]h&]uh1jIhj`Zubeh}(h]h ]h"]h$]h&]uh1j'hj{ZhM/hjZubj()}(h*``const unsigned char *model`` model name h](j.)}(h``const unsigned char *model``h]j4)}(hjZh]hconst unsigned char *model}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjZubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM0hjZubjJ)}(hhh]h)}(h model nameh]h model name}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM0hjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j'hjZhM0hjZubj()}(h.``enum scsi_devinfo_key key`` list to look up h](j.)}(h``enum scsi_devinfo_key key``h]j4)}(hjZh]henum scsi_devinfo_key key}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjZubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM1hjZubjJ)}(hhh]h)}(hlist to look uph]hlist to look up}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM1hjZubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j'hjZhM1hjZubeh}(h]h ]h"]h$]h&]uh1j"hjYubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM3hjYubj`)}(hSearch the scsi_dev_info_list specified by **key** for an entry matching **vendor** and **model**, if found, return the matching flags value, else return the host or global default settings. Called during scan time.h]h)}(hSearch the scsi_dev_info_list specified by **key** for an entry matching **vendor** and **model**, if found, return the matching flags value, else return the host or global default settings. Called during scan time.h](h+Search the scsi_dev_info_list specified by }(hj-[hhhNhNubj)}(h**key**h]hkey}(hj5[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-[ubh for an entry matching }(hj-[hhhNhNubj)}(h **vendor**h]hvendor}(hjG[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-[ubh and }(hj-[hhhNhNubj)}(h **model**h]hmodel}(hjY[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-[ubhv, if found, return the matching flags value, else return the host or global default settings. Called during scan time.}(hj-[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM3hj)[ubah}(h]h ]h"]h$]h&]uh1j_hjq[hM3hjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#scsi_dev_info_add_list (C function)c.scsi_dev_info_add_listhNtauh1j3hjRhhhNhNubjE)}(hhh](jJ)}(hHint scsi_dev_info_add_list (enum scsi_devinfo_key key, const char *name)h]jP)}(hGint scsi_dev_info_add_list(enum scsi_devinfo_key key, const char *name)h](j~)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj[hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMubjh)}(h h]h }(hj[hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[hhhj[hMubjy)}(hscsi_dev_info_add_listh]j)}(hscsi_dev_info_add_listh]hscsi_dev_info_add_list}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj[hhhj[hMubj)}(h-(enum scsi_devinfo_key key, const char *name)h](j)}(henum scsi_devinfo_key keyh](jV)}(hjR9h]henum}(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubjh)}(h h]h }(hj[hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubh)}(hhh]j)}(hscsi_devinfo_keyh]hscsi_devinfo_key}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]j)}jj[sbc.scsi_dev_info_add_listasbuh1hhj[ubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubj)}(hkeyh]hkey}(hj!\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubj)}(hconst char *nameh](jV)}(hj~Ph]hconst}(hj:\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6\ubjh)}(h h]h }(hjG\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6\ubj~)}(hcharh]hchar}(hjU\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6\ubjh)}(h h]h }(hjc\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6\ubj )}(hj h]h*}(hjq\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6\ubj)}(hnameh]hname}(hj~\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj[ubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj[hhhj[hMubah}(h]j[ah ](jjeh"]h$]h&]jj)jhuh1jIhj[hMhj[hhubj)}(hhh]h)}(hadd a new devinfo listh]hadd a new devinfo list}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhj[hhhj[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1jDhhhjRhNhNubj)}(hX&**Parameters** ``enum scsi_devinfo_key key`` key of the list to add ``const char *name`` Name of the list to add (for /proc/scsi/device_info) **Description** Adds the requested list, returns zero on success, -EEXIST if the key is already registered to a list, or other error on failure.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj\ubj#)}(hhh](j()}(h5``enum scsi_devinfo_key key`` key of the list to add h](j.)}(h``enum scsi_devinfo_key key``h]j4)}(hj\h]henum scsi_devinfo_key key}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj\ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj\ubjJ)}(hhh]h)}(hkey of the list to addh]hkey of the list to add}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j'hj\hMhj\ubj()}(hJ``const char *name`` Name of the list to add (for /proc/scsi/device_info) h](j.)}(h``const char *name``h]j4)}(hj"]h]hconst char *name}(hj$]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ]ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj]ubjJ)}(hhh]h)}(h4Name of the list to add (for /proc/scsi/device_info)h]h4Name of the list to add (for /proc/scsi/device_info)}(hj;]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7]hMhj8]ubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j'hj7]hMhj\ubeh}(h]h ]h"]h$]h&]uh1j"hj\ubh)}(h**Description**h]j)}(hj]]h]h Description}(hj_]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[]ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj\ubh)}(hAdds the requested list, returns zero on success, -EEXIST if the key is already registered to a list, or other error on failure.h]hAdds the requested list, returns zero on success, -EEXIST if the key is already registered to a list, or other error on failure.}(hjs]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&scsi_dev_info_remove_list (C function)c.scsi_dev_info_remove_listhNtauh1j3hjRhhhNhNubjE)}(hhh](jJ)}(h9int scsi_dev_info_remove_list (enum scsi_devinfo_key key)h]jP)}(h8int scsi_dev_info_remove_list(enum scsi_devinfo_key key)h](j~)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj]hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM ubjh)}(h h]h }(hj]hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]hhhj]hM ubjy)}(hscsi_dev_info_remove_listh]j)}(hscsi_dev_info_remove_listh]hscsi_dev_info_remove_list}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj]ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj]hhhj]hM ubj)}(h(enum scsi_devinfo_key key)h]j)}(henum scsi_devinfo_key keyh](jV)}(hjR9h]henum}(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]ubjh)}(h h]h }(hj]hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]ubh)}(hhh]j)}(hscsi_devinfo_keyh]hscsi_devinfo_key}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j)}jj]sbc.scsi_dev_info_remove_listasbuh1hhj]ubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]ubj)}(hkeyh]hkey}(hj+^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj]ubah}(h]h ]h"]h$]h&]jjuh1jhj]hhhj]hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj]hhhj]hM ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jIhj]hM hj]hhubj)}(hhh]h)}(hdestroy an added devinfo listh]hdestroy an added devinfo list}(hjU^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM hjR^hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj]hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjm^jjm^jjjuh1jDhhhjRhNhNubj)}(h**Parameters** ``enum scsi_devinfo_key key`` key of the list to destroy **Description** Iterates over the entire list first, freeing all the values, then frees the list itself. Returns 0 on success or -EINVAL if the key can't be found.h](h)}(h**Parameters**h]j)}(hjw^h]h Parameters}(hjy^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju^ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chMhjq^ubj#)}(hhh]j()}(h9``enum scsi_devinfo_key key`` key of the list to destroy h](j.)}(h``enum scsi_devinfo_key key``h]j4)}(hj^h]henum scsi_devinfo_key key}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj^ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM hj^ubjJ)}(hhh]h)}(hkey of the list to destroyh]hkey of the list to destroy}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hM hj^ubah}(h]h ]h"]h$]h&]uh1jIhj^ubeh}(h]h ]h"]h$]h&]uh1j'hj^hM hj^ubah}(h]h ]h"]h$]h&]uh1j"hjq^ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM hjq^ubh)}(hIterates over the entire list first, freeing all the values, then frees the list itself. Returns 0 on success or -EINVAL if the key can't be found.h]hIterates over the entire list first, freeing all the values, then frees the list itself. Returns 0 on success or -EINVAL if the key can’t be found.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:128: ./drivers/scsi/scsi_devinfo.chM hjq^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjRhhhNhNubeh}(h]drivers-scsi-scsi-devinfo-cah ]h"]drivers/scsi/scsi_devinfo.cah$]h&]uh1hhjhhhhhK{ubh)}(hhh](h)}(hdrivers/scsi/scsi_ioctl.ch]hdrivers/scsi/scsi_ioctl.c}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hhhhhKubh)}(h&Handle ioctl() calls for SCSI devices.h]h&Handle ioctl() calls for SCSI devices.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj_hhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@$scsi_set_medium_removal (C function)c.scsi_set_medium_removalhNtauh1j3hj_hhhNhNubjE)}(hhh](jJ)}(hBint scsi_set_medium_removal (struct scsi_device *sdev, char state)h]jP)}(hAint scsi_set_medium_removal(struct scsi_device *sdev, char state)h](j~)}(hinth]hint}(hj=_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj9_hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKubjh)}(h h]h }(hjL_hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj9_hhhjK_hKubjy)}(hscsi_set_medium_removalh]j)}(hscsi_set_medium_removalh]hscsi_set_medium_removal}(hj^_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZ_ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj9_hhhjK_hKubj)}(h&(struct scsi_device *sdev, char state)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjz_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjv_ubjh)}(h h]h }(hj_hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjv_ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j)}jj`_sbc.scsi_set_medium_removalasbuh1hhjv_ubjh)}(h h]h }(hj_hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjv_ubj )}(hj h]h*}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjv_ubj)}(hsdevh]hsdev}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjv_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr_ubj)}(h char stateh](j~)}(hcharh]hchar}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj_ubjh)}(h h]h }(hj_hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj_ubj)}(hstateh]hstate}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjr_ubeh}(h]h ]h"]h$]h&]jjuh1jhj9_hhhjK_hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj5_hhhjK_hKubah}(h]j0_ah ](jjeh"]h$]h&]jj)jhuh1jIhjK_hKhj2_hhubj)}(hhh]h)}(h/send command to allow or prevent medium removalh]h/send command to allow or prevent medium removal}(hj2`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhj/`hhubah}(h]h ]h"]h$]h&]uh1jhj2_hhhjK_hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJ`jjJ`jjjuh1jDhhhj_hNhNubj)}(hXG**Parameters** ``struct scsi_device *sdev`` target scsi device ``char state`` removal state to set (prevent or allow) **Return** * ``0`` if **sdev** is not removable or not lockable or successful. * non-``0`` is a SCSI result code if > 0 or kernel error code if < 0. * Sets **sdev->locked** to the new state on success.h](h)}(h**Parameters**h]j)}(hjT`h]h Parameters}(hjV`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR`ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhjN`ubj#)}(hhh](j()}(h0``struct scsi_device *sdev`` target scsi device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjs`h]hstruct scsi_device *sdev}(hju`hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjq`ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhjm`ubjJ)}(hhh]h)}(htarget scsi deviceh]htarget scsi device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhj`ubah}(h]h ]h"]h$]h&]uh1jIhjm`ubeh}(h]h ]h"]h$]h&]uh1j'hj`hKhjj`ubj()}(h7``char state`` removal state to set (prevent or allow) h](j.)}(h``char state``h]j4)}(hj`h]h char state}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj`ubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhj`ubjJ)}(hhh]h)}(h'removal state to set (prevent or allow)h]h'removal state to set (prevent or allow)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhj`ubah}(h]h ]h"]h$]h&]uh1jIhj`ubeh}(h]h ]h"]h$]h&]uh1j'hj`hKhjj`ubeh}(h]h ]h"]h$]h&]uh1j"hjN`ubh)}(h **Return**h]j)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhjN`ubj@)}(hhh](jE)}(hA``0`` if **sdev** is not removable or not lockable or successful.h]h)}(hjah](j4)}(h``0``h]h0}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjaubh if }(hjahhhNhNubj)}(h**sdev**h]hsdev}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh0 is not removable or not lockable or successful.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhjaubah}(h]h ]h"]h$]h&]uh1jDhj`ubjE)}(hCnon-``0`` is a SCSI result code if > 0 or kernel error code if < 0.h]h)}(hj:ah](hnon-}(hj 0 or kernel error code if < 0.}(hjlocked** to the new state on success.h]h)}(hjdah](hSets }(hjfahhhNhNubj)}(h**sdev->locked**h]h sdev->locked}(hjmahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfaubh to the new state on success.}(hjfahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chKhjbaubah}(h]h ]h"]h$]h&]uh1jDhj`ubeh}(h]h ]h"]h$]h&]jj uh1j?hj1ahKhjN`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj_hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_cmd_allowed (C function)c.scsi_cmd_allowedhNtauh1j3hj_hhhNhNubjE)}(hhh](jJ)}(h?bool scsi_cmd_allowed (unsigned char *cmd, bool open_for_write)h]jP)}(h>bool scsi_cmd_allowed(unsigned char *cmd, bool open_for_write)h](j~)}(hjh]hbool}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjahhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMubjh)}(h h]h }(hjahhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjahhhjahMubjy)}(hscsi_cmd_allowedh]j)}(hscsi_cmd_allowedh]hscsi_cmd_allowed}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjahhhjahMubj)}(h)(unsigned char *cmd, bool open_for_write)h](j)}(hunsigned char *cmdh](j~)}(hunsignedh]hunsigned}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjaubjh)}(h h]h }(hjahhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjaubj~)}(hcharh]hchar}(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjaubjh)}(h h]h }(hjbhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjaubj )}(hj h]h*}(hj&bhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjaubj)}(hcmdh]hcmd}(hj3bhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubj)}(hbool open_for_writeh](j~)}(hjh]hbool}(hjLbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjHbubjh)}(h h]h }(hjYbhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHbubj)}(hopen_for_writeh]hopen_for_write}(hjgbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjaubeh}(h]h ]h"]h$]h&]jjuh1jhjahhhjahMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjahhhjahMubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1jIhjahMhjahhubj)}(hhh]h)}(h&Check if the given command is allowed.h]h&Check if the given command is allowed.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjahMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jDhhhj_hNhNubj)}(hXj**Parameters** ``unsigned char *cmd`` SCSI command to check ``bool open_for_write`` is the file / block device opened for writing? **Description** Only a subset of commands are allowed for unprivileged users. Commands used to format the media, update the firmware, etc. are not permitted. **Return** ``true`` if the cmd is allowed, otherwise **false**.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbubj#)}(hhh](j()}(h-``unsigned char *cmd`` SCSI command to check h](j.)}(h``unsigned char *cmd``h]j4)}(hjbh]hunsigned char *cmd}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjbubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbubjJ)}(hhh]h)}(hSCSI command to checkh]hSCSI command to check}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jIhjbubeh}(h]h ]h"]h$]h&]uh1j'hjbhMhjbubj()}(hG``bool open_for_write`` is the file / block device opened for writing? h](j.)}(h``bool open_for_write``h]j4)}(hj ch]hbool open_for_write}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj cubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjcubjJ)}(hhh]h)}(h.is the file / block device opened for writing?h]h.is the file / block device opened for writing?}(hj$chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj chMhj!cubah}(h]h ]h"]h$]h&]uh1jIhjcubeh}(h]h ]h"]h$]h&]uh1j'hj chMhjbubeh}(h]h ]h"]h$]h&]uh1j"hjbubh)}(h**Description**h]j)}(hjFch]h Description}(hjHchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDcubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbubh)}(hOnly a subset of commands are allowed for unprivileged users. Commands used to format the media, update the firmware, etc. are not permitted.h]hOnly a subset of commands are allowed for unprivileged users. Commands used to format the media, update the firmware, etc. are not permitted.}(hj\chhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbubh)}(h **Return**h]j)}(hjmch]hReturn}(hjochhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkcubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhjbubh)}(h4``true`` if the cmd is allowed, otherwise **false**.h](j4)}(h``true``h]htrue}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjcubh" if the cmd is allowed, otherwise }(hjchhhNhNubj)}(h **false**h]hfalse}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chM hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj_hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_ioctl (C function) c.scsi_ioctlhNtauh1j3hj_hhhNhNubjE)}(hhh](jJ)}(hYint scsi_ioctl (struct scsi_device *sdev, bool open_for_write, int cmd, void __user *arg)h]jP)}(hXint scsi_ioctl(struct scsi_device *sdev, bool open_for_write, int cmd, void __user *arg)h](j~)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjchhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMeubjh)}(h h]h }(hjchhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjchhhjchMeubjy)}(h scsi_ioctlh]j)}(h scsi_ioctlh]h scsi_ioctl}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjchhhjchMeubj)}(hJ(struct scsi_device *sdev, bool open_for_write, int cmd, void __user *arg)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjdhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj dubjh)}(h h]h }(hjdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj dubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj-dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/dmodnameN classnameNjj)}j]j)}jjcsb c.scsi_ioctlasbuh1hhj dubjh)}(h h]h }(hjMdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj dubj )}(hj h]h*}(hj[dhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj dubj)}(hsdevh]hsdev}(hjhdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hbool open_for_writeh](j~)}(hjh]hbool}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}dubjh)}(h h]h }(hjdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}dubj)}(hopen_for_writeh]hopen_for_write}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hint cmdh](j~)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdubjh)}(h h]h }(hjdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdubj)}(hcmdh]hcmd}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubj)}(hvoid __user *argh](j~)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdubjh)}(h h]h }(hjdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdubh__user}(hjdhhhNhNubjh)}(h h]h }(hj ehhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdubj )}(hj h]h*}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdubj)}(hargh]harg}(hj%ehhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubeh}(h]h ]h"]h$]h&]jjuh1jhjchhhjchMeubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjchhhjchMeubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jIhjchMehjchhubj)}(hhh]h)}(hDispatch ioctl to scsi deviceh]hDispatch ioctl to scsi device}(hjOehhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMehjLehhubah}(h]h ]h"]h$]h&]uh1jhjchhhjchMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgejjgejjjuh1jDhhhj_hNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` scsi device receiving ioctl ``bool open_for_write`` is the file / block device opened for writing? ``int cmd`` which ioctl is it ``void __user *arg`` data associated with ioctl **Description** The scsi_ioctl() function differs from most ioctls in that it does not take a major/minor number as the dev field. Rather, it takes a pointer to a :c:type:`struct scsi_device `. **Return** varies depending on the **cmd**h](h)}(h**Parameters**h]j)}(hjqeh]h Parameters}(hjsehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoeubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMihjkeubj#)}(hhh](j()}(h9``struct scsi_device *sdev`` scsi device receiving ioctl h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjeh]hstruct scsi_device *sdev}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjeubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMfhjeubjJ)}(hhh]h)}(hscsi device receiving ioctlh]hscsi device receiving ioctl}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMfhjeubah}(h]h ]h"]h$]h&]uh1jIhjeubeh}(h]h ]h"]h$]h&]uh1j'hjehMfhjeubj()}(hG``bool open_for_write`` is the file / block device opened for writing? h](j.)}(h``bool open_for_write``h]j4)}(hjeh]hbool open_for_write}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjeubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMghjeubjJ)}(hhh]h)}(h.is the file / block device opened for writing?h]h.is the file / block device opened for writing?}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMghjeubah}(h]h ]h"]h$]h&]uh1jIhjeubeh}(h]h ]h"]h$]h&]uh1j'hjehMghjeubj()}(h``int cmd`` which ioctl is it h](j.)}(h ``int cmd``h]j4)}(hjfh]hint cmd}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjfubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMhhjeubjJ)}(hhh]h)}(hwhich ioctl is ith]hwhich ioctl is it}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhhjfubah}(h]h ]h"]h$]h&]uh1jIhjeubeh}(h]h ]h"]h$]h&]uh1j'hjfhMhhjeubj()}(h0``void __user *arg`` data associated with ioctl h](j.)}(h``void __user *arg``h]j4)}(hj;fh]hvoid __user *arg}(hj=fhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj9fubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMihj5fubjJ)}(hhh]h)}(hdata associated with ioctlh]hdata associated with ioctl}(hjTfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPfhMihjQfubah}(h]h ]h"]h$]h&]uh1jIhj5fubeh}(h]h ]h"]h$]h&]uh1j'hjPfhMihjeubeh}(h]h ]h"]h$]h&]uh1j"hjkeubh)}(h**Description**h]j)}(hjvfh]h Description}(hjxfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtfubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMkhjkeubh)}(hThe scsi_ioctl() function differs from most ioctls in that it does not take a major/minor number as the dev field. Rather, it takes a pointer to a :c:type:`struct scsi_device `.h](hThe scsi_ioctl() function differs from most ioctls in that it does not take a major/minor number as the dev field. Rather, it takes a pointer to a }(hjfhhhNhNubh)}(h*:c:type:`struct scsi_device `h]j4)}(hjfh]hstruct scsi_device}(hjfhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjfubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_deviceuh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMkhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMkhjkeubh)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMohjkeubh)}(hvaries depending on the **cmd**h](hvaries depending on the }(hjfhhhNhNubj)}(h**cmd**h]hcmd}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMohjkeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj_hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@4scsi_ioctl_block_when_processing_errors (C function))c.scsi_ioctl_block_when_processing_errorshNtauh1j3hj_hhhNhNubjE)}(hhh](jJ)}(h\int scsi_ioctl_block_when_processing_errors (struct scsi_device *sdev, int cmd, bool ndelay)h]jP)}(h[int scsi_ioctl_block_when_processing_errors(struct scsi_device *sdev, int cmd, bool ndelay)h](j~)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjghhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:136: ./drivers/scsi/scsi_ioctl.chMubjh)}(h h]h }(hj"ghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjghhhj!ghMubjy)}(h'scsi_ioctl_block_when_processing_errorsh]j)}(h'scsi_ioctl_block_when_processing_errorsh]h'scsi_ioctl_block_when_processing_errors}(hj4ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0gubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjghhhj!ghMubj)}(h0(struct scsi_device *sdev, int cmd, bool ndelay)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjPghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjLgubjh)}(h h]h }(hj]ghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjLgubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjnghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpgmodnameN classnameNjj)}j]j)}jj6gsb)c.scsi_ioctl_block_when_processing_errorsasbuh1hhjLgubjh)}(h h]h }(hjghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjLgubj )}(hj h]h*}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjLgubj)}(hsdevh]hsdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHgubj)}(hint cmdh](j~)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubjh)}(h h]h }(hjghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjgubj)}(hcmdh]hcmd}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHgubj)}(h bool ndelayh](j~)}(hjh]hbool}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjgubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjgubj)}(hndelayh]hndelay}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHgubeh}(h]h ]h"]h$]h&]jjuh1jhjghhhj!ghMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj ghhhj!ghMubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jIhj!ghMhjghhubj)}(hhh]h)}(h"prevent commands from being queuedh]h"prevent commands from being queued}(hj` with specific failure modes seth](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chKhjjubj#)}(hhh]j()}(hq``struct scsi_failures *failures`` :c:type:`struct scsi_failures ` with specific failure modes seth](j.)}(h"``struct scsi_failures *failures``h]j4)}(hjjh]hstruct scsi_failures *failures}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chKhjjubjJ)}(hhh]h)}(hN:c:type:`struct scsi_failures ` with specific failure modes seth](h)}(h.:c:type:`struct scsi_failures `h]j4)}(hjjh]hstruct scsi_failures}(hjjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj scsi_failuresuh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chKhjjubh with specific failure modes set}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjkhKhjjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j'hjjhKhjjubah}(h]h ]h"]h$]h&]uh1j"hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_execute_cmd (C function)c.scsi_execute_cmdhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hint scsi_execute_cmd (struct scsi_device *sdev, const unsigned char *cmd, blk_opf_t opf, void *buffer, unsigned int bufflen, int timeout, int ml_retries, const struct scsi_exec_args *args)h]jP)}(hint scsi_execute_cmd(struct scsi_device *sdev, const unsigned char *cmd, blk_opf_t opf, void *buffer, unsigned int bufflen, int timeout, int ml_retries, const struct scsi_exec_args *args)h](j~)}(hinth]hint}(hjEkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjAkhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hjTkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAkhhhjSkhMubjy)}(hscsi_execute_cmdh]j)}(hscsi_execute_cmdh]hscsi_execute_cmd}(hjfkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjbkubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjAkhhhjSkhMubj)}(h(struct scsi_device *sdev, const unsigned char *cmd, blk_opf_t opf, void *buffer, unsigned int bufflen, int timeout, int ml_retries, const struct scsi_exec_args *args)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~kubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~kubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]j)}jjhksbc.scsi_execute_cmdasbuh1hhj~kubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~kubj )}(hj h]h*}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~kubj)}(hsdevh]hsdev}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~kubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(hconst unsigned char *cmdh](jV)}(hj~Ph]hconst}(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjkubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubj~)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjkubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubj~)}(hcharh]hchar}(hj+lhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjkubjh)}(h h]h }(hj9lhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubj )}(hj h]h*}(hjGlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjkubj)}(hcmdh]hcmd}(hjTlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(h blk_opf_t opfh](h)}(hhh]j)}(h blk_opf_th]h blk_opf_t}(hjplhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrlmodnameN classnameNjj)}j]jkc.scsi_execute_cmdasbuh1hhjilubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjilubj)}(hopfh]hopf}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjilubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(h void *bufferh](j~)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlubj )}(hj h]h*}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjlubj)}(hbufferh]hbuffer}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(hunsigned int bufflenh](j~)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlubj~)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlubjh)}(h h]h }(hj!mhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlubj)}(hbufflenh]hbufflen}(hj/mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(h int timeouth](j~)}(hinth]hint}(hjHmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDmubjh)}(h h]h }(hjVmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjDmubj)}(htimeouth]htimeout}(hjdmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjDmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(hint ml_retriesh](j~)}(hinth]hint}(hj}mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjymubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjymubj)}(h ml_retriesh]h ml_retries}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjymubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubj)}(h!const struct scsi_exec_args *argsh](jV)}(hj~Ph]hconst}(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmubjV)}(hjYh]hstruct}(hjmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmubh)}(hhh]j)}(hscsi_exec_argsh]hscsi_exec_args}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jkc.scsi_execute_cmdasbuh1hhjmubjh)}(h h]h }(hj nhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmubj )}(hj h]h*}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjmubj)}(hargsh]hargs}(hj$nhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzkubeh}(h]h ]h"]h$]h&]jjuh1jhjAkhhhjSkhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj=khhhjSkhMubah}(h]j8kah ](jjeh"]h$]h&]jj)jhuh1jIhjSkhMhj:khhubj)}(hhh]h)}(h&insert request and wait for the resulth]h&insert request and wait for the result}(hjNnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjKnhhubah}(h]h ]h"]h$]h&]uh1jhj:khhhjSkhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfnjjfnjjjuh1jDhhhjihNhNubj)}(hXC**Parameters** ``struct scsi_device *sdev`` scsi_device ``const unsigned char *cmd`` scsi command ``blk_opf_t opf`` block layer request cmd_flags ``void *buffer`` data buffer ``unsigned int bufflen`` len of buffer ``int timeout`` request timeout in HZ ``int ml_retries`` number of times SCSI midlayer will retry request ``const struct scsi_exec_args *args`` Optional args. See struct definition for field descriptions **Description** Returns the scsi_cmnd result field if a command was executed, or a negative Linux error code if we didn't get that far.h](h)}(h**Parameters**h]j)}(hjpnh]h Parameters}(hjrnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnnubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjjnubj#)}(hhh](j()}(h)``struct scsi_device *sdev`` scsi_device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjnh]hstruct scsi_device *sdev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjnubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjnubjJ)}(hhh]h)}(h scsi_deviceh]h scsi_device}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjnhMhjnubj()}(h*``const unsigned char *cmd`` scsi command h](j.)}(h``const unsigned char *cmd``h]j4)}(hjnh]hconst unsigned char *cmd}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjnubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjnubjJ)}(hhh]h)}(h scsi commandh]h scsi command}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjnhMhjnubj()}(h0``blk_opf_t opf`` block layer request cmd_flags h](j.)}(h``blk_opf_t opf``h]j4)}(hjoh]h blk_opf_t opf}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjnubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjnubjJ)}(hhh]h)}(hblock layer request cmd_flagsh]hblock layer request cmd_flags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjohMhjnubj()}(h``void *buffer`` data buffer h](j.)}(h``void *buffer``h]j4)}(hj:oh]h void *buffer}(hjsdb** and also **cmd->prot_sdb** if data integrity is enabled for **cmd**. **Return** * BLK_STS_OK - on success * BLK_STS_RESOURCE - if the failure is retryable * BLK_STS_IOERR - if the failure is fatalh](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMZhjqubj#)}(hhh]j()}(hE``struct scsi_cmnd *cmd`` SCSI command data structure to initialize. h](j.)}(h``struct scsi_cmnd *cmd``h]j4)}(hjqh]hstruct scsi_cmnd *cmd}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjqubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMWhjqubjJ)}(hhh]h)}(h*SCSI command data structure to initialize.h]h*SCSI command data structure to initialize.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMWhjqubah}(h]h ]h"]h$]h&]uh1jIhjqubeh}(h]h ]h"]h$]h&]uh1j'hjqhMWhjqubah}(h]h ]h"]h$]h&]uh1j"hjqubh)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMYhjqubh)}(h]Initializes **cmd->sdb** and also **cmd->prot_sdb** if data integrity is enabled for **cmd**.h](h Initializes }(hjrhhhNhNubj)}(h **cmd->sdb**h]hcmd->sdb}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh and also }(hjrhhhNhNubj)}(h**cmd->prot_sdb**h]h cmd->prot_sdb}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh" if data integrity is enabled for }(hjrhhhNhNubj)}(h**cmd**h]hcmd}(hj/rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMXhjqubh)}(h **Return**h]j)}(hjJrh]hReturn}(hjLrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHrubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM[hjqubj@)}(hhh](jE)}(hBLK_STS_OK - on successh]h)}(hjerh]hBLK_STS_OK - on success}(hjgrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM\hjcrubah}(h]h ]h"]h$]h&]uh1jDhj`rubjE)}(h.BLK_STS_RESOURCE - if the failure is retryableh]h)}(hj}rh]h.BLK_STS_RESOURCE - if the failure is retryable}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM]hj{rubah}(h]h ]h"]h$]h&]uh1jDhj`rubjE)}(h*BLK_STS_IOERR - if the failure is fatalh]h)}(hjrh]h*BLK_STS_IOERR - if the failure is fatal}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM^hjrubah}(h]h ]h"]h$]h&]uh1jDhj`rubeh}(h]h ]h"]h$]h&]jj uh1j?hjtrhM\hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_alloc_request (C function)c.scsi_alloc_requesthNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hfstruct request * scsi_alloc_request (struct request_queue *q, blk_opf_t opf, blk_mq_req_flags_t flags)h]jP)}(hdstruct request *scsi_alloc_request(struct request_queue *q, blk_opf_t opf, blk_mq_req_flags_t flags)h](jV)}(hjYh]hstruct}(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjrhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hjrhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjrhhhjrhMubh)}(hhh]j)}(hrequesth]hrequest}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j)}jscsi_alloc_requestsbc.scsi_alloc_requestasbuh1hhjrhhhjrhMubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjrhhhjrhMubj )}(hj h]h*}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjrhhhjrhMubjy)}(hscsi_alloc_requesth]j)}(hjsh]hscsi_alloc_request}(hj0shhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,subah}(h]h ](jjeh"]h$]h&]jjuh1jxhjrhhhjrhMubj)}(hB(struct request_queue *q, blk_opf_t opf, blk_mq_req_flags_t flags)h](j)}(hstruct request_queue *qh](jV)}(hjYh]hstruct}(hjKshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjGsubjh)}(h h]h }(hjXshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjGsubh)}(hhh]j)}(h request_queueh]h request_queue}(hjishhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjfsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjksmodnameN classnameNjj)}j]j sc.scsi_alloc_requestasbuh1hhjGsubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjGsubj )}(hj h]h*}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjGsubj)}(hqh]hq}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCsubj)}(h blk_opf_t opfh](h)}(hhh]j)}(h blk_opf_th]h blk_opf_t}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j sc.scsi_alloc_requestasbuh1hhjsubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubj)}(hopfh]hopf}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCsubj)}(hblk_mq_req_flags_t flagsh](h)}(hhh]j)}(hblk_mq_req_flags_th]hblk_mq_req_flags_t}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j sc.scsi_alloc_requestasbuh1hhjsubjh)}(h h]h }(hj$thhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubj)}(hflagsh]hflags}(hj2thhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjCsubeh}(h]h ]h"]h$]h&]jjuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjrhhhjrhMubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jIhjrhMhjrhhubj)}(hhh]h)}(hIallocate a block request and partially initialize its :c:type:`scsi_cmnd`h](h6allocate a block request and partially initialize its }(hj\thhhNhNubh)}(h:c:type:`scsi_cmnd`h]j4)}(hjfth]h scsi_cmnd}(hjhthhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjdtubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]j sc.scsi_alloc_requestasbj scsi_cmnduh1hhjihKhj\tubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjYthhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct request_queue *q`` the device's request queue ``blk_opf_t opf`` the request operation code ``blk_mq_req_flags_t flags`` block layer allocation flags **Return** :c:type:`struct request ` pointer on success or ``NULL`` on failureh](h)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjtubj#)}(hhh](j()}(h7``struct request_queue *q`` the device's request queue h](j.)}(h``struct request_queue *q``h]j4)}(hjth]hstruct request_queue *q}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjtubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjtubjJ)}(hhh]h)}(hthe device's request queueh]hthe device’s request queue}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j'hjthMhjtubj()}(h-``blk_opf_t opf`` the request operation code h](j.)}(h``blk_opf_t opf``h]j4)}(hjth]h blk_opf_t opf}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjtubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjtubjJ)}(hhh]h)}(hthe request operation codeh]hthe request operation code}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j'hjuhMhjtubj()}(h:``blk_mq_req_flags_t flags`` block layer allocation flags h](j.)}(h``blk_mq_req_flags_t flags``h]j4)}(hj3uh]hblk_mq_req_flags_t flags}(hj5uhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj1uubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj-uubjJ)}(hhh]h)}(hblock layer allocation flagsh]hblock layer allocation flags}(hjLuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHuhMhjIuubah}(h]h ]h"]h$]h&]uh1jIhj-uubeh}(h]h ]h"]h$]h&]uh1j'hjHuhMhjtubeh}(h]h ]h"]h$]h&]uh1j"hjtubh)}(h **Return**h]j)}(hjnuh]hReturn}(hjpuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjluubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjtubh)}(hL:c:type:`struct request ` pointer on success or ``NULL`` on failureh](h)}(h":c:type:`struct request `h]j4)}(hjuh]hstruct request}(hjuhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjuubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjrequestuh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjuubh pointer on success or }(hjuhhhNhNubj4)}(h``NULL``h]hNULL}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjuubh on failure}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_get_internal_cmd (C function)c.scsi_get_internal_cmdhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hstruct scsi_cmnd * scsi_get_internal_cmd (struct scsi_device *sdev, enum dma_data_direction data_direction, blk_mq_req_flags_t flags)h]jP)}(hstruct scsi_cmnd *scsi_get_internal_cmd(struct scsi_device *sdev, enum dma_data_direction data_direction, blk_mq_req_flags_t flags)h](jV)}(hjYh]hstruct}(hjuhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjuhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMZubjh)}(h h]h }(hjuhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuhhhjuhMZubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j)}jscsi_get_internal_cmdsbc.scsi_get_internal_cmdasbuh1hhjuhhhjuhMZubjh)}(h h]h }(hj$vhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuhhhjuhMZubj )}(hj h]h*}(hj2vhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjuhhhjuhMZubjy)}(hscsi_get_internal_cmdh]j)}(hj!vh]hscsi_get_internal_cmd}(hjCvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?vubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjuhhhjuhMZubj)}(h\(struct scsi_device *sdev, enum dma_data_direction data_direction, blk_mq_req_flags_t flags)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj^vhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZvubjh)}(h h]h }(hjkvhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZvubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj|vhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~vmodnameN classnameNjj)}j]jvc.scsi_get_internal_cmdasbuh1hhjZvubjh)}(h h]h }(hjvhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZvubj )}(hj h]h*}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZvubj)}(hsdevh]hsdev}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVvubj)}(h&enum dma_data_direction data_directionh](jV)}(hjR9h]henum}(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubjh)}(h h]h }(hjvhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvubh)}(hhh]j)}(hdma_data_directionh]hdma_data_direction}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]jvc.scsi_get_internal_cmdasbuh1hhjvubjh)}(h h]h }(hj whhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvubj)}(hdata_directionh]hdata_direction}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVvubj)}(hblk_mq_req_flags_t flagsh](h)}(hhh]j)}(hblk_mq_req_flags_th]hblk_mq_req_flags_t}(hj4whhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6wmodnameN classnameNjj)}j]jvc.scsi_get_internal_cmdasbuh1hhj-wubjh)}(h h]h }(hjRwhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-wubj)}(hflagsh]hflags}(hj`whhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-wubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVvubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjuhMZubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjuhhhjuhMZubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jIhjuhMZhjuhhubj)}(hhh]h)}(h"Allocate an internal SCSI command.h]h"Allocate an internal SCSI command.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMZhjwhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjuhMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jDhhhjihNhNubj)}(hXa**Parameters** ``struct scsi_device *sdev`` SCSI device from which to allocate the command ``enum dma_data_direction data_direction`` Data direction for the allocated command ``blk_mq_req_flags_t flags`` request allocation flags, e.g. BLK_MQ_REQ_RESERVED or BLK_MQ_REQ_NOWAIT. **Description** Allocates a SCSI command for internal LLDD use.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM^hjwubj#)}(hhh](j()}(hL``struct scsi_device *sdev`` SCSI device from which to allocate the command h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjwh]hstruct scsi_device *sdev}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjwubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM[hjwubjJ)}(hhh]h)}(h.SCSI device from which to allocate the commandh]h.SCSI device from which to allocate the command}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhM[hjwubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j'hjwhM[hjwubj()}(hT``enum dma_data_direction data_direction`` Data direction for the allocated command h](j.)}(h*``enum dma_data_direction data_direction``h]j4)}(hjxh]h&enum dma_data_direction data_direction}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjxubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM\hjwubjJ)}(hhh]h)}(h(Data direction for the allocated commandh]h(Data direction for the allocated command}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhM\hjxubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j'hjxhM\hjwubj()}(hf``blk_mq_req_flags_t flags`` request allocation flags, e.g. BLK_MQ_REQ_RESERVED or BLK_MQ_REQ_NOWAIT. h](j.)}(h``blk_mq_req_flags_t flags``h]j4)}(hj=xh]hblk_mq_req_flags_t flags}(hj?xhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj;xubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM^hj7xubjJ)}(hhh]h)}(hHrequest allocation flags, e.g. BLK_MQ_REQ_RESERVED or BLK_MQ_REQ_NOWAIT.h]hHrequest allocation flags, e.g. BLK_MQ_REQ_RESERVED or BLK_MQ_REQ_NOWAIT.}(hjVxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM]hjSxubah}(h]h ]h"]h$]h&]uh1jIhj7xubeh}(h]h ]h"]h$]h&]uh1j'hjRxhM^hjwubeh}(h]h ]h"]h$]h&]uh1j"hjwubh)}(h**Description**h]j)}(hjyxh]h Description}(hj{xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwxubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM`hjwubh)}(h/Allocates a SCSI command for internal LLDD use.h]h/Allocates a SCSI command for internal LLDD use.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM_hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_put_internal_cmd (C function)c.scsi_put_internal_cmdhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h3void scsi_put_internal_cmd (struct scsi_cmnd *scmd)h]jP)}(h2void scsi_put_internal_cmd(struct scsi_cmnd *scmd)h](j~)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMvubjh)}(h h]h }(hjxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjxhhhjxhMvubjy)}(hscsi_put_internal_cmdh]j)}(hscsi_put_internal_cmdh]hscsi_put_internal_cmd}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjxubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjxhhhjxhMvubj)}(h(struct scsi_cmnd *scmd)h]j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hjxhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjxubjh)}(h h]h }(hjyhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjxubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jjxsbc.scsi_put_internal_cmdasbuh1hhjxubjh)}(h h]h }(hj9yhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjxubj )}(hj h]h*}(hjGyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjxubj)}(hscmdh]hscmd}(hjTyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjxubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjxhMvubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjxhhhjxhMvubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jIhjxhMvhjxhhubj)}(hhh]h)}(hFree an internal SCSI command.h]hFree an internal SCSI command.}(hj~yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMvhj{yhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhjxhMvubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jDhhhjihNhNubj)}(hE**Parameters** ``struct scsi_cmnd *scmd`` SCSI command to be freedh](h)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMzhjyubj#)}(hhh]j()}(h3``struct scsi_cmnd *scmd`` SCSI command to be freedh](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hjyh]hstruct scsi_cmnd *scmd}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjyubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM|hjyubjJ)}(hhh]h)}(hSCSI command to be freedh]hSCSI command to be freed}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMwhjyubah}(h]h ]h"]h$]h&]uh1jIhjyubeh}(h]h ]h"]h$]h&]uh1j'hjyhM|hjyubah}(h]h ]h"]h$]h&]uh1j"hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#scsi_device_from_queue (C function)c.scsi_device_from_queuehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hEstruct scsi_device * scsi_device_from_queue (struct request_queue *q)h]jP)}(hCstruct scsi_device *scsi_device_from_queue(struct request_queue *q)h](jV)}(hjYh]hstruct}(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hj'zhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzhhhj&zhMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj8zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5zubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:zmodnameN classnameNjj)}j]j)}jscsi_device_from_queuesbc.scsi_device_from_queueasbuh1hhjzhhhj&zhMubjh)}(h h]h }(hjYzhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzhhhj&zhMubj )}(hj h]h*}(hjgzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzhhhj&zhMubjy)}(hscsi_device_from_queueh]j)}(hjVzh]hscsi_device_from_queue}(hjxzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtzubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjzhhhj&zhMubj)}(h(struct request_queue *q)h]j)}(hstruct request_queue *qh](jV)}(hjYh]hstruct}(hjzhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjzubjh)}(h h]h }(hjzhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzubh)}(hhh]j)}(h request_queueh]h request_queue}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzmodnameN classnameNjj)}j]jTzc.scsi_device_from_queueasbuh1hhjzubjh)}(h h]h }(hjzhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzubj )}(hj h]h*}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubj)}(hjsh]hq}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjzubah}(h]h ]h"]h$]h&]jjuh1jhjzhhhj&zhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjzhhhj&zhMubah}(h]j zah ](jjeh"]h$]h&]jj)jhuh1jIhj&zhMhjzhhubj)}(hhh]h)}(h+return sdev associated with a request_queueh]h+return sdev associated with a request_queue}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhj&zhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+{jj+{jjjuh1jDhhhjihNhNubj)}(h**Parameters** ``struct request_queue *q`` The request queue to return the sdev from **Description** Return the sdev associated with a request queue or NULL if the request_queue does not reference a SCSI device.h](h)}(h**Parameters**h]j)}(hj5{h]h Parameters}(hj7{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3{ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj/{ubj#)}(hhh]j()}(hF``struct request_queue *q`` The request queue to return the sdev from h](j.)}(h``struct request_queue *q``h]j4)}(hjT{h]hstruct request_queue *q}(hjV{hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjR{ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjN{ubjJ)}(hhh]h)}(h)The request queue to return the sdev fromh]h)The request queue to return the sdev from}(hjm{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji{hMhjj{ubah}(h]h ]h"]h$]h&]uh1jIhjN{ubeh}(h]h ]h"]h$]h&]uh1j'hji{hMhjK{ubah}(h]h ]h"]h$]h&]uh1j"hj/{ubh)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj/{ubh)}(hnReturn the sdev associated with a request queue or NULL if the request_queue does not reference a SCSI device.h]hnReturn the sdev associated with a request queue or NULL if the request_queue does not reference a SCSI device.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj/{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ scsi_block_requests (C function)c.scsi_block_requestshNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h2void scsi_block_requests (struct Scsi_Host *shost)h]jP)}(h1void scsi_block_requests(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{hhhj{hMubjy)}(hscsi_block_requestsh]j)}(hscsi_block_requestsh]hscsi_block_requests}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj{hhhj{hMubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj |ubjh)}(h h]h }(hj|hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj |ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj/|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1|modnameN classnameNjj)}j]j)}jj{sbc.scsi_block_requestsasbuh1hhj |ubjh)}(h h]h }(hjO|hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj |ubj )}(hj h]h*}(hj]|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj |ubj)}(hshosth]hshost}(hjj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj |ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj |ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj{hhhj{hMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jIhj{hMhj{hhubj)}(hhh]h)}(hgUtility function used by low-level drivers to prevent further commands from being queued to the device.h]hgUtility function used by low-level drivers to prevent further commands from being queued to the device.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jDhhhjihNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` host in question **Description** There is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests().h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj|ubj#)}(hhh]j()}(h-``struct Scsi_Host *shost`` host in question h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj|h]hstruct Scsi_Host *shost}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj|ubjJ)}(hhh]h)}(hhost in questionh]hhost in question}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jIhj|ubeh}(h]h ]h"]h$]h&]uh1j'hj|hMhj|ubah}(h]h ]h"]h$]h&]uh1j"hj|ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj|ubh)}(hThere is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests().h]hThere is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests().}(hj&}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_unblock_requests (C function)c.scsi_unblock_requestshNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h4void scsi_unblock_requests (struct Scsi_Host *shost)h]jP)}(h3void scsi_unblock_requests(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjU}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjQ}hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hjd}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjQ}hhhjc}hMubjy)}(hscsi_unblock_requestsh]j)}(hscsi_unblock_requestsh]hscsi_unblock_requests}(hjv}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjr}ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjQ}hhhjc}hMubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubjh)}(h h]h }(hj}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]j)}jjx}sbc.scsi_unblock_requestsasbuh1hhj}ubjh)}(h h]h }(hj}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}ubj )}(hj h]h*}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj)}(hshosth]hshost}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj}ubah}(h]h ]h"]h$]h&]jjuh1jhjQ}hhhjc}hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjM}hhhjc}hMubah}(h]jH}ah ](jjeh"]h$]h&]jj)jhuh1jIhjc}hMhjJ}hhubj)}(hhh]h)}(h`Utility function used by low-level drivers to allow further commands to be queued to the device.h]h`Utility function used by low-level drivers to allow further commands to be queued to the device.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jhjJ}hhhjc}hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-~jj-~jjjuh1jDhhhjihNhNubj)}(hXt**Parameters** ``struct Scsi_Host *shost`` host in question **Description** There is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests(). This is done as an API function so that changes to the internals of the scsi mid-layer won't require wholesale changes to drivers that use this feature.h](h)}(h**Parameters**h]j)}(hj7~h]h Parameters}(hj9~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5~ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj1~ubj#)}(hhh]j()}(h-``struct Scsi_Host *shost`` host in question h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjV~h]hstruct Scsi_Host *shost}(hjX~hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjT~ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjP~ubjJ)}(hhh]h)}(hhost in questionh]hhost in question}(hjo~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk~hMhjl~ubah}(h]h ]h"]h$]h&]uh1jIhjP~ubeh}(h]h ]h"]h$]h&]uh1j'hjk~hMhjM~ubah}(h]h ]h"]h$]h&]uh1j"hj1~ubh)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj1~ubh)}(hX#There is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests(). This is done as an API function so that changes to the internals of the scsi mid-layer won't require wholesale changes to drivers that use this feature.h]hX%There is no timer nor any other means by which the requests get unblocked other than the low-level driver calling scsi_unblock_requests(). This is done as an API function so that changes to the internals of the scsi mid-layer won’t require wholesale changes to drivers that use this feature.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj1~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_mode_select (C function)c.scsi_mode_selecthNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hint scsi_mode_select (struct scsi_device *sdev, int pf, int sp, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h]jP)}(hint scsi_mode_select(struct scsi_device *sdev, int pf, int sp, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h](j~)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMubjh)}(h h]h }(hj~hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~hhhj~hMubjy)}(hscsi_mode_selecth]j)}(hscsi_mode_selecth]hscsi_mode_select}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj~hhhj~hMubj)}(h(struct scsi_device *sdev, int pf, int sp, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jj~sbc.scsi_mode_selectasbuh1hhjubjh)}(h h]h }(hjQhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hint pfh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hpfh]hpf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hint sph](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hsph]hsp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hunsigned char *bufferh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufferh]hbuffer}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hint lenh](j~)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIubjh)}(h h]h }(hj[hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIubj)}(hlenh]hlen}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int timeouth](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~ubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h int retriesh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjŀhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hretriesh]hretries}(hjӀhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct scsi_mode_data *datah](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_mode_datah]hscsi_mode_data}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jMc.scsi_mode_selectasbuh1hhjubjh)}(h h]h }(hj(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hstruct scsi_sense_hdr *sshdrh](jV)}(hjYh]hstruct}(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjXubjh)}(h h]h }(hjihhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXubh)}(hhh]j)}(hscsi_sense_hdrh]hscsi_sense_hdr}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjwubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]jMc.scsi_mode_selectasbuh1hhjXubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXubj)}(hsshdrh]hsshdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjXubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj~hhhj~hMubah}(h]j~ah ](jjeh"]h$]h&]jj)jhuh1jIhj~hMhj~hhubj)}(hhh]h)}(hissue a mode selecth]hissue a mode select}(hj݁hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjځhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device to be queried ``int pf`` Page format bit (1 == standard, 0 == vendor specific) ``int sp`` Save page bit (0 == don't save, 1 == save) ``unsigned char *buffer`` request buffer (may not be smaller than eight bytes) ``int len`` length of request buffer. ``int timeout`` command timeout ``int retries`` number of retries before failing ``struct scsi_mode_data *data`` returns a structure abstracting the mode header data ``struct scsi_sense_hdr *sshdr`` place to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big. **Description** Returns zero if successful; negative error number or scsi status on error h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubj#)}(hhh](j()}(h7``struct scsi_device *sdev`` SCSI device to be queried h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubjJ)}(hhh]h)}(hSCSI device to be queriedh]hSCSI device to be queried}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj3hMhjubj()}(hA``int pf`` Page format bit (1 == standard, 0 == vendor specific) h](j.)}(h ``int pf``h]j4)}(hjWh]hint pf}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjUubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjQubjJ)}(hhh]h)}(h5Page format bit (1 == standard, 0 == vendor specific)h]h5Page format bit (1 == standard, 0 == vendor specific)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jIhjQubeh}(h]h ]h"]h$]h&]uh1j'hjlhMhjubj()}(h6``int sp`` Save page bit (0 == don't save, 1 == save) h](j.)}(h ``int sp``h]j4)}(hjh]hint sp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubjJ)}(hhh]h)}(h*Save page bit (0 == don't save, 1 == save)h]h,Save page bit (0 == don’t save, 1 == save)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(hO``unsigned char *buffer`` request buffer (may not be smaller than eight bytes) h](j.)}(h``unsigned char *buffer``h]j4)}(hjɂh]hunsigned char *buffer}(hj˂hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjǂubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjÂubjJ)}(hhh]h)}(h4request buffer (may not be smaller than eight bytes)h]h4request buffer (may not be smaller than eight bytes)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjނhMhj߂ubah}(h]h ]h"]h$]h&]uh1jIhjÂubeh}(h]h ]h"]h$]h&]uh1j'hjނhMhjubj()}(h&``int len`` length of request buffer. h](j.)}(h ``int len``h]j4)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubjJ)}(hhh]h)}(hlength of request buffer.h]hlength of request buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(h ``int timeout`` command timeout h](j.)}(h``int timeout``h]j4)}(hj;h]h int timeout}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj9ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj5ubjJ)}(hhh]h)}(hcommand timeouth]hcommand timeout}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j'hjPhMhjubj()}(h1``int retries`` number of retries before failing h](j.)}(h``int retries``h]j4)}(hjth]h int retries}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjrubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjnubjJ)}(hhh]h)}(h number of retries before failingh]h number of retries before failing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(hU``struct scsi_mode_data *data`` returns a structure abstracting the mode header data h](j.)}(h``struct scsi_mode_data *data``h]j4)}(hjh]hstruct scsi_mode_data *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubjJ)}(hhh]h)}(h4returns a structure abstracting the mode header datah]h4returns a structure abstracting the mode header data}(hjƃhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƒhMhjÃubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjƒhMhjubj()}(h``struct scsi_sense_hdr *sshdr`` place to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big. h](j.)}(h ``struct scsi_sense_hdr *sshdr``h]j4)}(hjh]hstruct scsi_sense_hdr *sshdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubjJ)}(hhh]h)}(haplace to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big.h]haplace to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhjubj`)}(hIReturns zero if successful; negative error number or scsi status on errorh]h)}(hIReturns zero if successful; negative error number or scsi status on errorh]hIReturns zero if successful; negative error number or scsi status on error}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMhj8ubah}(h]h ]h"]h$]h&]uh1j_hjJhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_mode_sense (C function)c.scsi_mode_sensehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hint scsi_mode_sense (struct scsi_device *sdev, int dbd, int modepage, int subpage, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h]jP)}(hint scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage, int subpage, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h](j~)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjmhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmhhhjhM ubjy)}(hscsi_mode_senseh]j)}(hscsi_mode_senseh]hscsi_mode_sense}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjmhhhjhM ubj)}(h(struct scsi_device *sdev, int dbd, int modepage, int subpage, unsigned char *buffer, int len, int timeout, int retries, struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj̄hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjɄubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj΄modnameN classnameNjj)}j]j)}jjsbc.scsi_mode_senseasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint dbdh](j~)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hdbdh]hdbd}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int modepageh](j~)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjQubjh)}(h h]h }(hjchhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjQubj)}(hmodepageh]hmodepage}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int subpageh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hsubpageh]hsubpage}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned char *bufferh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjͅhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hcharh]hchar}(hjۅhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hint lenh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hlenh]hlen}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int timeouth](j~)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNubjh)}(h h]h }(hj`hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjNubj)}(htimeouth]htimeout}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjNubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int retriesh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hretriesh]hretries}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_mode_data *datah](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjɆhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_mode_datah]hscsi_mode_data}(hjچhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj׆ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj܆modnameN classnameNjj)}j]jc.scsi_mode_senseasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_sense_hdr *sshdrh](jV)}(hjYh]hstruct}(hj,hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubjh)}(h h]h }(hj9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj(ubh)}(hhh]j)}(hscsi_sense_hdrh]hscsi_sense_hdr}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jc.scsi_mode_senseasbuh1hhj(ubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj(ubj )}(hj h]h*}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubj)}(hsshdrh]hsshdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjmhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjihhhjhM ubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjfhhubj)}(hhh]h)}(hCissue a mode sense, falling back from 10 to six bytes if necessary.h]hCissue a mode sense, falling back from 10 to six bytes if necessary.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjŇjjŇjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device to be queried ``int dbd`` set to prevent mode sense from returning block descriptors ``int modepage`` mode page being requested ``int subpage`` sub-page of the mode page being requested ``unsigned char *buffer`` request buffer (may not be smaller than eight bytes) ``int len`` length of request buffer. ``int timeout`` command timeout ``int retries`` number of retries before failing ``struct scsi_mode_data *data`` returns a structure abstracting the mode header data ``struct scsi_sense_hdr *sshdr`` place to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big. **Description** Returns zero if successful, or a negative error number on failureh](h)}(h**Parameters**h]j)}(hjχh]h Parameters}(hjчhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͇ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjɇubj#)}(hhh](j()}(h7``struct scsi_device *sdev`` SCSI device to be queried h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hSCSI device to be queriedh]hSCSI device to be queried}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(hG``int dbd`` set to prevent mode sense from returning block descriptors h](j.)}(h ``int dbd``h]j4)}(hj'h]hint dbd}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj%ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj!ubjJ)}(hhh]h)}(h:set to prevent mode sense from returning block descriptorsh]h:set to prevent mode sense from returning block descriptors}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM hj=ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j'hj<hM hjubj()}(h+``int modepage`` mode page being requested h](j.)}(h``int modepage``h]j4)}(hj`h]h int modepage}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj^ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjZubjJ)}(hhh]h)}(hmode page being requestedh]hmode page being requested}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM hjvubah}(h]h ]h"]h$]h&]uh1jIhjZubeh}(h]h ]h"]h$]h&]uh1j'hjuhM hjubj()}(h:``int subpage`` sub-page of the mode page being requested h](j.)}(h``int subpage``h]j4)}(hjh]h int subpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h)sub-page of the mode page being requestedh]h)sub-page of the mode page being requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(hO``unsigned char *buffer`` request buffer (may not be smaller than eight bytes) h](j.)}(h``unsigned char *buffer``h]j4)}(hj҈h]hunsigned char *buffer}(hjԈhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjЈubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj̈ubjJ)}(hhh]h)}(h4request buffer (may not be smaller than eight bytes)h]h4request buffer (may not be smaller than eight bytes)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj̈ubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(h&``int len`` length of request buffer. h](j.)}(h ``int len``h]j4)}(hj h]hint len}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hlength of request buffer.h]hlength of request buffer.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj!ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj hM hjubj()}(h ``int timeout`` command timeout h](j.)}(h``int timeout``h]j4)}(hjDh]h int timeout}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjBubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj>ubjJ)}(hhh]h)}(hcommand timeouth]hcommand timeout}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhM hjZubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j'hjYhM hjubj()}(h1``int retries`` number of retries before failing h](j.)}(h``int retries``h]j4)}(hj}h]h int retries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj{ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjwubjJ)}(hhh]h)}(h number of retries before failingh]h number of retries before failing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(hU``struct scsi_mode_data *data`` returns a structure abstracting the mode header data h](j.)}(h``struct scsi_mode_data *data``h]j4)}(hjh]hstruct scsi_mode_data *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h4returns a structure abstracting the mode header datah]h4returns a structure abstracting the mode header data}(hjωhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjˉhM hj̉ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjˉhM hjubj()}(h``struct scsi_sense_hdr *sshdr`` place to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big. h](j.)}(h ``struct scsi_sense_hdr *sshdr``h]j4)}(hjh]hstruct scsi_sense_hdr *sshdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(haplace to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big.h]haplace to put sense data (or NULL if no sense to be collected). must be SCSI_SENSE_BUFFERSIZE big.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubeh}(h]h ]h"]h$]h&]uh1j"hjɇubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjɇubj`)}(hAReturns zero if successful, or a negative error number on failureh]h)}(hjCh]hAReturns zero if successful, or a negative error number on failure}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjAubah}(h]h ]h"]h$]h&]uh1j_hjRhM hjɇubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_test_unit_ready (C function)c.scsi_test_unit_readyhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hkint scsi_test_unit_ready (struct scsi_device *sdev, int timeout, int retries, struct scsi_sense_hdr *sshdr)h]jP)}(hjint scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries, struct scsi_sense_hdr *sshdr)h](j~)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjuhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuhhhjhM ubjy)}(hscsi_test_unit_readyh]j)}(hscsi_test_unit_readyh]hscsi_test_unit_ready}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjuhhhjhM ubj)}(hR(struct scsi_device *sdev, int timeout, int retries, struct scsi_sense_hdr *sshdr)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjÊhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjԊhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjъubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj֊modnameN classnameNjj)}j]j)}jjsbc.scsi_test_unit_readyasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int timeouth](j~)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj$ubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$ubj)}(htimeouth]htimeout}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int retriesh](j~)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjYubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYubj)}(hretriesh]hretries}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_sense_hdr *sshdrh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_sense_hdrh]hscsi_sense_hdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_test_unit_readyasbuh1hhjubjh)}(h h]h }(hj΋hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj܋hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsshdrh]hsshdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjqhhhjhM ubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjnhhubj)}(hhh]h)}(htest if unit is readyh]htest if unit is ready}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` scsi device to change the state of. ``int timeout`` command timeout ``int retries`` number of retries before failing ``struct scsi_sense_hdr *sshdr`` outpout pointer for decoded sense information. **Description** Returns zero if unsuccessful or an error if TUR failed. For removable media, UNIT_ATTENTION sets ->changed flag.h](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj/ubj#)}(hhh](j()}(hA``struct scsi_device *sdev`` scsi device to change the state of. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjTh]hstruct scsi_device *sdev}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjRubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjNubjJ)}(hhh]h)}(h#scsi device to change the state of.h]h#scsi device to change the state of.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihM hjjubah}(h]h ]h"]h$]h&]uh1jIhjNubeh}(h]h ]h"]h$]h&]uh1j'hjihM hjKubj()}(h ``int timeout`` command timeout h](j.)}(h``int timeout``h]j4)}(hjh]h int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hcommand timeouth]hcommand timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjKubj()}(h1``int retries`` number of retries before failing h](j.)}(h``int retries``h]j4)}(hjƌh]h int retries}(hjȌhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjČubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h number of retries before failingh]h number of retries before failing}(hjߌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjیhM hj܌ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjیhM hjKubj()}(hP``struct scsi_sense_hdr *sshdr`` outpout pointer for decoded sense information. h](j.)}(h ``struct scsi_sense_hdr *sshdr``h]j4)}(hjh]hstruct scsi_sense_hdr *sshdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h.outpout pointer for decoded sense information.h]h.outpout pointer for decoded sense information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjKubeh}(h]h ]h"]h$]h&]uh1j"hj/ubh)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj/ubj`)}(hqReturns zero if unsuccessful or an error if TUR failed. For removable media, UNIT_ATTENTION sets ->changed flag.h]h)}(hqReturns zero if unsuccessful or an error if TUR failed. For removable media, UNIT_ATTENTION sets ->changed flag.h]hqReturns zero if unsuccessful or an error if TUR failed. For removable media, UNIT_ATTENTION sets ->changed flag.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjPubah}(h]h ]h"]h$]h&]uh1j_hjbhM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_device_set_state (C function)c.scsi_device_set_statehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hRint scsi_device_set_state (struct scsi_device *sdev, enum scsi_device_state state)h]jP)}(hQint scsi_device_set_state(struct scsi_device *sdev, enum scsi_device_state state)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM ubjy)}(hscsi_device_set_stateh]j)}(hscsi_device_set_stateh]hscsi_device_set_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM ubj)}(h8(struct scsi_device *sdev, enum scsi_device_state state)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjƍhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjӍhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_device_set_stateasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum scsi_device_state stateh](jV)}(hjR9h]henum}(hj8hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj4ubjh)}(h h]h }(hjEhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj4ubh)}(hhh]j)}(hscsi_device_stateh]hscsi_device_state}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjXmodnameN classnameNjj)}j]jc.scsi_device_set_stateasbuh1hhj4ubjh)}(h h]h }(hjthhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj4ubj)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hj~hhubj)}(hhh]h)}(h5Take the given device through the device state model.h]h5Take the given device through the device state model.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjĎjjĎjjjuh1jDhhhjihNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` scsi device to change the state of. ``enum scsi_device_state state`` state to change to. **Description** Returns zero if successful or an error if the requested transition is illegal.h](h)}(h**Parameters**h]j)}(hjΎh]h Parameters}(hjЎhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̎ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjȎubj#)}(hhh](j()}(hA``struct scsi_device *sdev`` scsi device to change the state of. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h#scsi device to change the state of.h]h#scsi device to change the state of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(h5``enum scsi_device_state state`` state to change to. h](j.)}(h ``enum scsi_device_state state``h]j4)}(hj&h]henum scsi_device_state state}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj$ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj ubjJ)}(hhh]h)}(hstate to change to.h]hstate to change to.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM hj<ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj;hM hjubeh}(h]h ]h"]h$]h&]uh1j"hjȎubh)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjȎubj`)}(hNReturns zero if successful or an error if the requested transition is illegal.h]h)}(hNReturns zero if successful or an error if the requested transition is illegal.h]hNReturns zero if successful or an error if the requested transition is illegal.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjwubah}(h]h ]h"]h$]h&]uh1j_hjhM hjȎubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sdev_evt_send (C function)c.sdev_evt_sendhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hEvoid sdev_evt_send (struct scsi_device *sdev, struct scsi_event *evt)h]jP)}(hDvoid sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM ubjy)}(h sdev_evt_sendh]j)}(h sdev_evt_sendh]h sdev_evt_send}(hjяhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj͏ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM ubj)}(h2(struct scsi_device *sdev, struct scsi_event *evt)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjӏsbc.sdev_evt_sendasbuh1hhjubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_event *evth](jV)}(hjYh]hstruct}(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubh)}(hhh]j)}(h scsi_eventh]h scsi_event}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j'c.sdev_evt_sendasbuh1hhj[ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj[ubj)}(hevth]hevt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjhhubj)}(hhh]h)}(h$send asserted event to uevent threadh]h$send asserted event to uevent thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjݐhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` scsi_device event occurred on ``struct scsi_event *evt`` event to send **Description** Assert scsi device event asynchronously.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(h;``struct scsi_device *sdev`` scsi_device event occurred on h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj!h]hstruct scsi_device *sdev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hscsi_device event occurred onh]hscsi_device event occurred on}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj6hM hjubj()}(h)``struct scsi_event *evt`` event to send h](j.)}(h``struct scsi_event *evt``h]j4)}(hjZh]hstruct scsi_event *evt}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjXubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjTubjJ)}(hhh]h)}(h event to sendh]h event to send}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjpubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j'hjohM hjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj`)}(h(Assert scsi device event asynchronously.h]h)}(hjh]h(Assert scsi device event asynchronously.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1j_hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sdev_evt_alloc (C function)c.sdev_evt_allochNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hTstruct scsi_event * sdev_evt_alloc (enum scsi_device_event evt_type, gfp_t gfpflags)h]jP)}(hRstruct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type, gfp_t gfpflags)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjߑhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjߑhhhjhM ubh)}(hhh]j)}(h scsi_eventh]h scsi_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jsdev_evt_allocsbc.sdev_evt_allocasbuh1hhjߑhhhjhM ubjh)}(h h]h }(hj#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjߑhhhjhM ubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjߑhhhjhM ubjy)}(hsdev_evt_alloch]j)}(hj h]hsdev_evt_alloc}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjߑhhhjhM ubj)}(h1(enum scsi_device_event evt_type, gfp_t gfpflags)h](j)}(henum scsi_device_event evt_typeh](jV)}(hjR9h]henum}(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYubjh)}(h h]h }(hjjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYubh)}(hhh]j)}(hscsi_device_eventh]hscsi_device_event}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNjj)}j]jc.sdev_evt_allocasbuh1hhjYubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYubj)}(hevt_typeh]hevt_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(hgfp_t gfpflagsh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hjÒhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjŒmodnameN classnameNjj)}j]jc.sdev_evt_allocasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hgfpflagsh]hgfpflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhjߑhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjۑhhhjhM ubah}(h]j֑ah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjؑhhubj)}(hhh]h)}(hallocate a new scsi eventh]hallocate a new scsi event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjؑhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1jj1jjjuh1jDhhhjihNhNubj)}(h**Parameters** ``enum scsi_device_event evt_type`` type of event to allocate ``gfp_t gfpflags`` GFP flags for allocation **Description** Allocates and returns a new scsi_event.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj5ubj#)}(hhh](j()}(h>``enum scsi_device_event evt_type`` type of event to allocate h](j.)}(h#``enum scsi_device_event evt_type``h]j4)}(hjZh]henum scsi_device_event evt_type}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjXubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjTubjJ)}(hhh]h)}(htype of event to allocateh]htype of event to allocate}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjpubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j'hjohM hjQubj()}(h,``gfp_t gfpflags`` GFP flags for allocation h](j.)}(h``gfp_t gfpflags``h]j4)}(hjh]hgfp_t gfpflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hGFP flags for allocationh]hGFP flags for allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjQubeh}(h]h ]h"]h$]h&]uh1j"hj5ubh)}(h**Description**h]j)}(hjΓh]h Description}(hjГhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̓ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj5ubj`)}(h'Allocates and returns a new scsi_event.h]h)}(hjh]h'Allocates and returns a new scsi_event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1j_hjhM hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!sdev_evt_send_simple (C function)c.sdev_evt_send_simplehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hevoid sdev_evt_send_simple (struct scsi_device *sdev, enum scsi_device_event evt_type, gfp_t gfpflags)h]jP)}(hdvoid sdev_evt_send_simple(struct scsi_device *sdev, enum scsi_device_event evt_type, gfp_t gfpflags)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj*hM ubjy)}(hsdev_evt_send_simpleh]j)}(hsdev_evt_send_simpleh]hsdev_evt_send_simple}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj*hM ubj)}(hK(struct scsi_device *sdev, enum scsi_device_event evt_type, gfp_t gfpflags)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjYhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubjh)}(h h]h }(hjfhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jj?sbc.sdev_evt_send_simpleasbuh1hhjUubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjUubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(henum scsi_device_event evt_typeh](jV)}(hjR9h]henum}(hj˔hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjǔubjh)}(h h]h }(hjؔhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjǔubh)}(hhh]j)}(hscsi_device_eventh]hscsi_device_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.sdev_evt_send_simpleasbuh1hhjǔubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjǔubj)}(hevt_typeh]hevt_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjǔubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubj)}(hgfp_t gfpflagsh](h)}(hhh]j)}(hgfp_th]hgfp_t}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jc.sdev_evt_send_simpleasbuh1hhj*ubjh)}(h h]h }(hjOhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubj)}(hgfpflagsh]hgfpflags}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjQubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj*hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj*hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj*hM hjhhubj)}(hhh]h)}(h$send asserted event to uevent threadh]h$send asserted event to uevent thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj*hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX **Parameters** ``struct scsi_device *sdev`` scsi_device event occurred on ``enum scsi_device_event evt_type`` type of event to send ``gfp_t gfpflags`` GFP flags for allocation **Description** Assert scsi device event asynchronously, given an event type.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(h;``struct scsi_device *sdev`` scsi_device event occurred on h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjȕh]hstruct scsi_device *sdev}(hjʕhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjƕubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj•ubjJ)}(hhh]h)}(hscsi_device event occurred onh]hscsi_device event occurred on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݕhM hjޕubah}(h]h ]h"]h$]h&]uh1jIhj•ubeh}(h]h ]h"]h$]h&]uh1j'hjݕhM hjubj()}(h:``enum scsi_device_event evt_type`` type of event to send h](j.)}(h#``enum scsi_device_event evt_type``h]j4)}(hjh]henum scsi_device_event evt_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(htype of event to sendh]htype of event to send}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(h,``gfp_t gfpflags`` GFP flags for allocation h](j.)}(h``gfp_t gfpflags``h]j4)}(hj:h]hgfp_t gfpflags}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj8ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj4ubjJ)}(hhh]h)}(hGFP flags for allocationh]hGFP flags for allocation}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM hjPubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hjOhM hjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj`)}(h=Assert scsi device event asynchronously, given an event type.h]h)}(hjh]h=Assert scsi device event asynchronously, given an event type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1j_hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ scsi_device_quiesce (C function)c.scsi_device_quiescehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h2int scsi_device_quiesce (struct scsi_device *sdev)h]jP)}(h1int scsi_device_quiesce(struct scsi_device *sdev)h](j~)}(hinth]hint}(hjÖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjҖhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjіhM ubjy)}(hscsi_device_quiesceh]j)}(hscsi_device_quiesceh]hscsi_device_quiesce}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjіhM ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjsbc.scsi_device_quiesceasbuh1hhjubjh)}(h h]h }(hj>hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjіhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjіhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjіhM hjhhubj)}(hhh]h)}(h+Block all commands except power management.h]h+Block all commands except power management.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjіhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` scsi device to quiesce. **Description** This works by trying to transition to the SDEV_QUIESCE state (which must be a legal transition). When the device is in this state, only power management requests will be accepted, all others will be deferred. Must be called with user context, may sleep. Returns zero if successful or an error if not.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh]j()}(h5``struct scsi_device *sdev`` scsi device to quiesce. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjėh]hstruct scsi_device *sdev}(hjƗhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj—ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hscsi device to quiesce.h]hscsi device to quiesce.}(hjݗhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjٗhM hjڗubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjٗhM hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj`)}(hX/This works by trying to transition to the SDEV_QUIESCE state (which must be a legal transition). When the device is in this state, only power management requests will be accepted, all others will be deferred. Must be called with user context, may sleep. Returns zero if successful or an error if not.h](h)}(hThis works by trying to transition to the SDEV_QUIESCE state (which must be a legal transition). When the device is in this state, only power management requests will be accepted, all others will be deferred.h]hThis works by trying to transition to the SDEV_QUIESCE state (which must be a legal transition). When the device is in this state, only power management requests will be accepted, all others will be deferred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(h,Must be called with user context, may sleep.h]h,Must be called with user context, may sleep.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(h.Returns zero if successful or an error if not.h]h.Returns zero if successful or an error if not.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubeh}(h]h ]h"]h$]h&]uh1j_hj'hM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_device_resume (C function)c.scsi_device_resumehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h2void scsi_device_resume (struct scsi_device *sdev)h]jP)}(h1void scsi_device_resume(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhhjzhM ubjy)}(hscsi_device_resumeh]j)}(hscsi_device_resumeh]hscsi_device_resume}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhhjzhM ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjǘhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjĘubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjɘmodnameN classnameNjj)}j]j)}jjsbc.scsi_device_resumeasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhjzhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjdhhhjzhM ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1jIhjzhM hjahhubj)}(hhh]h)}(h2Restart user issued commands to a quiesced device.h]h2Restart user issued commands to a quiesced device.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj)hhubah}(h]h ]h"]h$]h&]uh1jhjahhhjzhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjDjjDjjjuh1jDhhhjihNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` scsi device to resume. **Description** Moves the device from quiesced back to running and restarts the queues. Must be called with user context, may sleep.h](h)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM$ hjHubj#)}(hhh]j()}(h4``struct scsi_device *sdev`` scsi device to resume. h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjmh]hstruct scsi_device *sdev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjkubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM! hjgubjJ)}(hhh]h)}(hscsi device to resume.h]hscsi device to resume.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM! hjubah}(h]h ]h"]h$]h&]uh1jIhjgubeh}(h]h ]h"]h$]h&]uh1j'hjhM! hjdubah}(h]h ]h"]h$]h&]uh1j"hjHubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM# hjHubj`)}(huMoves the device from quiesced back to running and restarts the queues. Must be called with user context, may sleep.h](h)}(hGMoves the device from quiesced back to running and restarts the queues.h]hGMoves the device from quiesced back to running and restarts the queues.}(hj™hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM" hjubh)}(h,Must be called with user context, may sleep.h]h,Must be called with user context, may sleep.}(hjљhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM% hjubeh}(h]h ]h"]h$]h&]uh1j_hjЙhM" hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@.scsi_internal_device_block_nowait (C function)#c.scsi_internal_device_block_nowaithNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h@int scsi_internal_device_block_nowait (struct scsi_device *sdev)h]jP)}(h?int scsi_internal_device_block_nowait(struct scsi_device *sdev)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMn ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMn ubjy)}(h!scsi_internal_device_block_nowaith]j)}(h!scsi_internal_device_block_nowaith]h!scsi_internal_device_block_nowait}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMn ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjChhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjh)}(h h]h }(hjPhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]j)}jj)sb#c.scsi_internal_device_block_nowaitasbuh1hhj?ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMn ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMn ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMn hjhhubj)}(hhh]h)}(h)try to transition to the SDEV_BLOCK stateh]h)try to transition to the SDEV_BLOCK state}(hjƚhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMn hjÚhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMn ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjޚjjޚjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` device to block **Description** Pause SCSI command processing on the specified device. Does not sleep. Returns zero if successful or a negative error code upon failure. **Notes** This routine transitions the device to the SDEV_BLOCK state (which must be a legal transition). When the device is in this state, command processing is paused until the device leaves the SDEV_BLOCK state. See also scsi_internal_device_unblock_nowait().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMr hjubj#)}(hhh]j()}(h-``struct scsi_device *sdev`` device to block h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMo hjubjJ)}(hhh]h)}(hdevice to blockh]hdevice to block}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMo hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMo hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMq hjubh)}(hFPause SCSI command processing on the specified device. Does not sleep.h]hFPause SCSI command processing on the specified device. Does not sleep.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMp hjubh)}(hAReturns zero if successful or a negative error code upon failure.h]hAReturns zero if successful or a negative error code upon failure.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMr hjubh)}(h **Notes**h]j)}(hjxh]hNotes}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMt hjubh)}(hThis routine transitions the device to the SDEV_BLOCK state (which must be a legal transition). When the device is in this state, command processing is paused until the device leaves the SDEV_BLOCK state. See also scsi_internal_device_unblock_nowait().h]hThis routine transitions the device to the SDEV_BLOCK state (which must be a legal transition). When the device is in this state, command processing is paused until the device leaves the SDEV_BLOCK state. See also scsi_internal_device_unblock_nowait().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMu hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@0scsi_internal_device_unblock_nowait (C function)%c.scsi_internal_device_unblock_nowaithNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hdint scsi_internal_device_unblock_nowait (struct scsi_device *sdev, enum scsi_device_state new_state)h]jP)}(hcint scsi_internal_device_unblock_nowait(struct scsi_device *sdev, enum scsi_device_state new_state)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hj̛hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj˛hM ubjy)}(h#scsi_internal_device_unblock_nowaith]j)}(h#scsi_internal_device_unblock_nowaith]h#scsi_internal_device_unblock_nowait}(hjޛhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjڛubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj˛hM ubj)}(h<(struct scsi_device *sdev, enum scsi_device_state new_state)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb%c.scsi_internal_device_unblock_nowaitasbuh1hhjubjh)}(h h]h }(hj8hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h enum scsi_device_state new_stateh](jV)}(hjR9h]henum}(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhubjh)}(h h]h }(hjyhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhubh)}(hhh]j)}(hscsi_device_stateh]hscsi_device_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j4%c.scsi_internal_device_unblock_nowaitasbuh1hhjhubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhubj)}(h new_stateh]h new_state}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj˛hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj˛hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj˛hM hjhhubj)}(hhh]h)}(h%resume a device after a block requesth]h%resume a device after a block request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjݜhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj˛hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` device to resume ``enum scsi_device_state new_state`` state to set the device to after unblocking **Description** Restart the device queue for a previously suspended SCSI device. Does not sleep. Returns zero if successful or a negative error code upon failure. **Notes** This routine transitions the device to the SDEV_RUNNING state or to one of the offline states (which must be a legal transition) allowing the midlayer to goose the queue for this device.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(h.``struct scsi_device *sdev`` device to resume h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj!h]hstruct scsi_device *sdev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hdevice to resumeh]hdevice to resume}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj6hM hjubj()}(hQ``enum scsi_device_state new_state`` state to set the device to after unblocking h](j.)}(h$``enum scsi_device_state new_state``h]j4)}(hjZh]h enum scsi_device_state new_state}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjXubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjTubjJ)}(hhh]h)}(h+state to set the device to after unblockingh]h+state to set the device to after unblocking}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohM hjpubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j'hjohM hjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hPRestart the device queue for a previously suspended SCSI device. Does not sleep.h]hPRestart the device queue for a previously suspended SCSI device. Does not sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hAReturns zero if successful or a negative error code upon failure.h]hAReturns zero if successful or a negative error code upon failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(h **Notes**h]j)}(hj˝h]hNotes}(hj͝hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɝubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hThis routine transitions the device to the SDEV_RUNNING state or to one of the offline states (which must be a legal transition) allowing the midlayer to goose the queue for this device.h]hThis routine transitions the device to the SDEV_RUNNING state or to one of the offline states (which must be a legal transition) allowing the midlayer to goose the queue for this device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_block_targets (C function)c.scsi_block_targetshNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hEvoid scsi_block_targets (struct Scsi_Host *shost, struct device *dev)h]jP)}(hDvoid scsi_block_targets(struct Scsi_Host *shost, struct device *dev)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhjhM ubjy)}(hscsi_block_targetsh]j)}(hscsi_block_targetsh]hscsi_block_targets}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj hhhjhM ubj)}(h-(struct Scsi_Host *shost, struct device *dev)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjIubjh)}(h h]h }(hjZhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jj3sbc.scsi_block_targetsasbuh1hhjIubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjIubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubj)}(hstruct device *devh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj̞hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hdeviceh]hdevice}(hjݞhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjڞubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjߞmodnameN classnameNjj)}j]jc.scsi_block_targetsasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjhhubj)}(hhh]h)}(h5transition all SCSI child devices to SDEV_BLOCK stateh]h5transition all SCSI child devices to SDEV_BLOCK state}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj=hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjXjjXjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` the Scsi_Host to which this device belongs ``struct device *dev`` a parent device of one or more scsi_target devices **Description** Iterate over all children of **dev**, which should be scsi_target devices, and switch all subordinate scsi devices to SDEV_BLOCK state. Wait for ongoing scsi_queue_rq() calls to finish. May sleep. **Note** **dev** must not itself be a scsi_target device.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj\ubj#)}(hhh](j()}(hG``struct Scsi_Host *shost`` the Scsi_Host to which this device belongs h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj{ubjJ)}(hhh]h)}(h*the Scsi_Host to which this device belongsh]h*the Scsi_Host to which this device belongs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj{ubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjxubj()}(hJ``struct device *dev`` a parent device of one or more scsi_target devices h](j.)}(h``struct device *dev``h]j4)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h2a parent device of one or more scsi_target devicesh]h2a parent device of one or more scsi_target devices}(hjӟhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϟhM hjПubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjϟhM hjxubeh}(h]h ]h"]h$]h&]uh1j"hj\ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj\ubh)}(hIterate over all children of **dev**, which should be scsi_target devices, and switch all subordinate scsi devices to SDEV_BLOCK state. Wait for ongoing scsi_queue_rq() calls to finish. May sleep.h](hIterate over all children of }(hj hhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, which should be scsi_target devices, and switch all subordinate scsi devices to SDEV_BLOCK state. Wait for ongoing scsi_queue_rq() calls to finish. May sleep.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj\ubh)}(h**Note**h]j)}(hj.h]hNote}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj\ubh)}(h0**dev** must not itself be a scsi_target device.h](j)}(h**dev**h]hdev}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh) must not itself be a scsi_target device.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_block (C function)c.scsi_host_blockhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h-int scsi_host_block (struct Scsi_Host *shost)h]jP)}(h,int scsi_host_block(struct Scsi_Host *shost)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj}hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM8 ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}hhhjhM8 ubjy)}(hscsi_host_blockh]j)}(hscsi_host_blockh]hscsi_host_block}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj}hhhjhM8 ubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjˠhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjܠhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj٠ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjޠmodnameN classnameNjj)}j]j)}jjsbc.scsi_host_blockasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj}hhhjhM8 ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjyhhhjhM8 ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jIhjhM8 hjvhhubj)}(hhh]h)}(h;Try to transition all logical units to the SDEV_BLOCK stateh]h;Try to transition all logical units to the SDEV_BLOCK state}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM8 hj>hhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhM8 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jDhhhjihNhNubj)}(hX **Parameters** ``struct Scsi_Host *shost`` device to block **Description** Pause SCSI command processing for all logical units associated with the SCSI host and wait until pending scsi_queue_rq() calls have finished. Returns zero if successful or a negative error code upon failure.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM< hj]ubj#)}(hhh]j()}(h,``struct Scsi_Host *shost`` device to block h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM9 hj|ubjJ)}(hhh]h)}(hdevice to blockh]hdevice to block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9 hjubah}(h]h ]h"]h$]h&]uh1jIhj|ubeh}(h]h ]h"]h$]h&]uh1j'hjhM9 hjyubah}(h]h ]h"]h$]h&]uh1j"hj]ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM; hj]ubh)}(hPause SCSI command processing for all logical units associated with the SCSI host and wait until pending scsi_queue_rq() calls have finished.h]hPause SCSI command processing for all logical units associated with the SCSI host and wait until pending scsi_queue_rq() calls have finished.}(hjӡhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM: hj]ubh)}(hAReturns zero if successful or a negative error code upon failure.h]hAReturns zero if successful or a negative error code upon failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM= hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ scsi_kmap_atomic_sg (C function)c.scsi_kmap_atomic_sghNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h_void * scsi_kmap_atomic_sg (struct scatterlist *sgl, int sg_count, size_t *offset, size_t *len)h]jP)}(h]void *scsi_kmap_atomic_sg(struct scatterlist *sgl, int sg_count, size_t *offset, size_t *len)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMm ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhjhMm ubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhjhMm ubjy)}(hscsi_kmap_atomic_sgh]j)}(hscsi_kmap_atomic_sgh]hscsi_kmap_atomic_sg}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj hhhjhMm ubj)}(hD(struct scatterlist *sgl, int sg_count, size_t *offset, size_t *len)h](j)}(hstruct scatterlist *sglh](jV)}(hjYh]hstruct}(hj[hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjAsbc.scsi_kmap_atomic_sgasbuh1hhjWubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hsglh]hsgl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h int sg_counth](j~)}(hinth]hint}(hj͢hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjɢubjh)}(h h]h }(hjۢhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjɢubj)}(hsg_counth]hsg_count}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjɢubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(hsize_t *offseth](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_kmap_atomic_sgasbuh1hhjubjh)}(h h]h }(hj#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hoffseth]hoffset}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubj)}(h size_t *lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]jc.scsi_kmap_atomic_sgasbuh1hhjSubjh)}(h h]h }(hjxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubeh}(h]h ]h"]h$]h&]jjuh1jhj hhhjhMm ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj hhhjhMm ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMm hjhhubj)}(hhh]h)}(h$find and atomically map an sg-elemnth]h$find and atomically map an sg-elemnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMm hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMm ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjգjjգjjjuh1jDhhhjihNhNubj)}(hXO**Parameters** ``struct scatterlist *sgl`` scatter-gather list ``int sg_count`` number of segments in sg ``size_t *offset`` offset in bytes into sg, on return offset into the mapped area ``size_t *len`` bytes to map, on return number of bytes mapped **Description** Returns virtual address of the start of the mapped pageh](h)}(h**Parameters**h]j)}(hjߣh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݣubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMq hj٣ubj#)}(hhh](j()}(h0``struct scatterlist *sgl`` scatter-gather list h](j.)}(h``struct scatterlist *sgl``h]j4)}(hjh]hstruct scatterlist *sgl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMn hjubjJ)}(hhh]h)}(hscatter-gather listh]hscatter-gather list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMn hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMn hjubj()}(h*``int sg_count`` number of segments in sg h](j.)}(h``int sg_count``h]j4)}(hj7h]h int sg_count}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj5ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMo hj1ubjJ)}(hhh]h)}(hnumber of segments in sgh]hnumber of segments in sg}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMo hjMubah}(h]h ]h"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]uh1j'hjLhMo hjubj()}(hR``size_t *offset`` offset in bytes into sg, on return offset into the mapped area h](j.)}(h``size_t *offset``h]j4)}(hjph]hsize_t *offset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjnubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMp hjjubjJ)}(hhh]h)}(h>offset in bytes into sg, on return offset into the mapped areah]h>offset in bytes into sg, on return offset into the mapped area}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMp hjubah}(h]h ]h"]h$]h&]uh1jIhjjubeh}(h]h ]h"]h$]h&]uh1j'hjhMp hjubj()}(h?``size_t *len`` bytes to map, on return number of bytes mapped h](j.)}(h``size_t *len``h]j4)}(hjh]h size_t *len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMq hjubjJ)}(hhh]h)}(h.bytes to map, on return number of bytes mappedh]h.bytes to map, on return number of bytes mapped}(hj¤hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMq hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMq hjubeh}(h]h ]h"]h$]h&]uh1j"hj٣ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMs hj٣ubh)}(h7Returns virtual address of the start of the mapped pageh]h7Returns virtual address of the start of the mapped page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chMr hj٣ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_kunmap_atomic_sg (C function)c.scsi_kunmap_atomic_sghNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h'void scsi_kunmap_atomic_sg (void *virt)h]jP)}(h&void scsi_kunmap_atomic_sg(void *virt)h](j~)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj%hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hj8hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj%hhhj7hM ubjy)}(hscsi_kunmap_atomic_sgh]j)}(hscsi_kunmap_atomic_sgh]hscsi_kunmap_atomic_sg}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj%hhhj7hM ubj)}(h (void *virt)h]j)}(h void *virth](j~)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbubjh)}(h h]h }(hjthhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjbubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjbubj)}(hvirth]hvirt}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj^ubah}(h]h ]h"]h$]h&]jjuh1jhj%hhhj7hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj!hhhj7hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj7hM hjhhubj)}(hhh]h)}(hNatomically unmap a virtual address, previously mapped with scsi_kmap_atomic_sgh]hNatomically unmap a virtual address, previously mapped with scsi_kmap_atomic_sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjѥjjѥjjjuh1jDhhhjihNhNubj)}(h?**Parameters** ``void *virt`` virtual address to be unmappedh](h)}(h**Parameters**h]j)}(hjۥh]h Parameters}(hjݥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj٥ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjեubj#)}(hhh]j()}(h-``void *virt`` virtual address to be unmappedh](j.)}(h``void *virt``h]j4)}(hjh]h void *virt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hvirtual address to be unmappedh]hvirtual address to be unmapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubah}(h]h ]h"]h$]h&]uh1j"hjեubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_vpd_lun_id (C function)c.scsi_vpd_lun_idhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hGint scsi_vpd_lun_id (struct scsi_device *sdev, char *id, size_t id_len)h]jP)}(hFint scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)h](j~)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjchhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPhhhjbhM ubjy)}(hscsi_vpd_lun_idh]j)}(hscsi_vpd_lun_idh]hscsi_vpd_lun_id}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjqubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjPhhhjbhM ubj)}(h3(struct scsi_device *sdev, char *id, size_t id_len)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjwsbc.scsi_vpd_lun_idasbuh1hhjubjh)}(h h]h }(hjϦhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjݦhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hchar *idh](j~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hidh]hid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h size_t id_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j˦c.scsi_vpd_lun_idasbuh1hhjAubjh)}(h h]h }(hjfhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubj)}(hid_lenh]hid_len}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjPhhhjbhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjLhhhjbhM ubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jIhjbhM hjIhhubj)}(hhh]h)}(h%return a unique device identificationh]h%return a unique device identification}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjbhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_device *sdev`` SCSI device ``char *id`` buffer for the identification ``size_t id_len`` length of the buffer **Description** Copies a unique device identification into **id** based on the information in the VPD page 0x83 of the device. The string will be formatted as a SCSI name string. Returns the length of the identification or error on failure. If the identifier is longer than the supplied buffer the actual identifier length is returned and the buffer is not zero-padded.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj§hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(h)``struct scsi_device *sdev`` SCSI device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjߧh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjݧubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj٧ubjJ)}(hhh]h)}(h SCSI deviceh]h SCSI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj٧ubeh}(h]h ]h"]h$]h&]uh1j'hjhM hj֧ubj()}(h+``char *id`` buffer for the identification h](j.)}(h ``char *id``h]j4)}(hjh]hchar *id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hbuffer for the identificationh]hbuffer for the identification}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM hj.ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj-hM hj֧ubj()}(h'``size_t id_len`` length of the buffer h](j.)}(h``size_t id_len``h]j4)}(hjQh]h size_t id_len}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjOubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjKubjJ)}(hhh]h)}(hlength of the bufferh]hlength of the buffer}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhM hjgubah}(h]h ]h"]h$]h&]uh1jIhjKubeh}(h]h ]h"]h$]h&]uh1j'hjfhM hj֧ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hCopies a unique device identification into **id** based on the information in the VPD page 0x83 of the device. The string will be formatted as a SCSI name string.h](h+Copies a unique device identification into }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq based on the information in the VPD page 0x83 of the device. The string will be formatted as a SCSI name string.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hReturns the length of the identification or error on failure. If the identifier is longer than the supplied buffer the actual identifier length is returned and the buffer is not zero-padded.h]hReturns the length of the identification or error on failure. If the identifier is longer than the supplied buffer the actual identifier length is returned and the buffer is not zero-padded.}(hjèhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_vpd_tpg_id (C function)c.scsi_vpd_tpg_idhNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(h;int scsi_vpd_tpg_id (struct scsi_device *sdev, int *rel_id)h]jP)}(h:int scsi_vpd_tpg_id(struct scsi_device *sdev, int *rel_id)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM ubjy)}(hscsi_vpd_tpg_idh]j)}(hscsi_vpd_tpg_idh]hscsi_vpd_tpg_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM ubj)}(h'(struct scsi_device *sdev, int *rel_id)h](j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j)}jjsbc.scsi_vpd_tpg_idasbuh1hhj+ubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubj )}(hj h]h*}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubj)}(h int *rel_idh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrel_idh]hrel_id}(hjʩhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjhhubj)}(hhh]h)}(h%return a target port group identifierh]h%return a target port group identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jDhhhjihNhNubj)}(hXm**Parameters** ``struct scsi_device *sdev`` SCSI device ``int *rel_id`` pointer to return relative target port in if not ``NULL`` **Description** Returns the Target Port Group identifier from the information from VPD page 0x83 of the device. Optionally sets **rel_id** to the relative target port on success. **Return** the identifier or error on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(h)``struct scsi_device *sdev`` SCSI device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj5h]hstruct scsi_device *sdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj3ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj/ubjJ)}(hhh]h)}(h SCSI deviceh]h SCSI device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM hjKubah}(h]h ]h"]h$]h&]uh1jIhj/ubeh}(h]h ]h"]h$]h&]uh1j'hjJhM hj,ubj()}(hJ``int *rel_id`` pointer to return relative target port in if not ``NULL`` h](j.)}(h``int *rel_id``h]j4)}(hjnh]h int *rel_id}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjlubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhubjJ)}(hhh]h)}(h9pointer to return relative target port in if not ``NULL``h](h1pointer to return relative target port in if not }(hjhhhNhNubj4)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjhubeh}(h]h ]h"]h$]h&]uh1j'hjhM hj,ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(hReturns the Target Port Group identifier from the information from VPD page 0x83 of the device. Optionally sets **rel_id** to the relative target port on success.h](hpReturns the Target Port Group identifier from the information from VPD page 0x83 of the device. Optionally sets }(hjͪhhhNhNubj)}(h **rel_id**h]hrel_id}(hjժhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͪubh( to the relative target port on success.}(hjͪhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubh)}(h#the identifier or error on failure.h]h#the identifier or error on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_build_sense (C function)c.scsi_build_sensehNtauh1j3hjihhhNhNubjE)}(hhh](jJ)}(hQvoid scsi_build_sense (struct scsi_cmnd *scmd, int desc, u8 key, u8 asc, u8 ascq)h]jP)}(hPvoid scsi_build_sense(struct scsi_cmnd *scmd, int desc, u8 key, u8 asc, u8 ascq)h](j~)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM ubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj1hhhjChM ubjy)}(hscsi_build_senseh]j)}(hscsi_build_senseh]hscsi_build_sense}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjRubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj1hhhjChM ubj)}(h;(struct scsi_cmnd *scmd, int desc, u8 key, u8 asc, u8 ascq)h](j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjXsbc.scsi_build_senseasbuh1hhjnubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubj)}(hscmdh]hscmd}(hj˫hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hint desch](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hu8 keyh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_build_senseasbuh1hhjubjh)}(h h]h }(hj:hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hkeyh]hkey}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hu8 asch](h)}(hhh]j)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jc.scsi_build_senseasbuh1hhj]ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]ubj)}(hasch]hasc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hu8 ascqh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_build_senseasbuh1hhjubjh)}(h h]h }(hjʬhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hascqh]hascq}(hjجhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhj1hhhjChM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj-hhhjChM ubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jIhjChM hj*hhubj)}(hhh]h)}(hbuild sense data for a commandh]hbuild sense data for a command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjihNhNubj)}(hX**Parameters** ``struct scsi_cmnd *scmd`` scsi command for which the sense should be formatted ``int desc`` Sense format (non-zero == descriptor format, 0 == fixed format) ``u8 key`` Sense key ``u8 asc`` Additional sense code ``u8 ascq`` Additional sense code qualifierh](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubj#)}(hhh](j()}(hP``struct scsi_cmnd *scmd`` scsi command for which the sense should be formatted h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hjCh]hstruct scsi_cmnd *scmd}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjAubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj=ubjJ)}(hhh]h)}(h4scsi command for which the sense should be formattedh]h4scsi command for which the sense should be formatted}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM hjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j'hjXhM hj:ubj()}(hM``int desc`` Sense format (non-zero == descriptor format, 0 == fixed format) h](j.)}(h ``int desc``h]j4)}(hj|h]hint desc}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjzubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjvubjJ)}(hhh]h)}(h?Sense format (non-zero == descriptor format, 0 == fixed format)h]h?Sense format (non-zero == descriptor format, 0 == fixed format)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubah}(h]h ]h"]h$]h&]uh1jIhjvubeh}(h]h ]h"]h$]h&]uh1j'hjhM hj:ubj()}(h``u8 key`` Sense key h](j.)}(h ``u8 key``h]j4)}(hjh]hu8 key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(h Sense keyh]h Sense key}(hjϭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj˭hM hj̭ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj˭hM hj:ubj()}(h!``u8 asc`` Additional sense code h](j.)}(h ``u8 asc``h]j4)}(hjh]hu8 asc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hjubjJ)}(hhh]h)}(hAdditional sense codeh]hAdditional sense code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hj:ubj()}(h+``u8 ascq`` Additional sense code qualifierh](j.)}(h ``u8 ascq``h]j4)}(hj(h]hu8 ascq}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj&ubah}(h]h ]h"]h$]h&]uh1j-hX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj"ubjJ)}(hhh]h)}(hAdditional sense code qualifierh]hAdditional sense code qualifier}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:144: ./drivers/scsi/scsi_lib.chM hj>ubah}(h]h ]h"]h$]h&]uh1jIhj"ubeh}(h]h ]h"]h$]h&]uh1j'hj=hM hj:ubeh}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjihhhNhNubeh}(h]drivers-scsi-scsi-lib-cah ]h"]drivers/scsi/scsi_lib.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_lib_dma.ch]hdrivers/scsi/scsi_lib_dma.c}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhhhhhKubh)}(hMSCSI library functions depending on DMA (map and unmap scatter-gather lists).h]hMSCSI library functions depending on DMA (map and unmap scatter-gather lists).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjqhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_dma_map (C function)c.scsi_dma_maphNtauh1j3hjqhhhNhNubjE)}(hhh](jJ)}(h(int scsi_dma_map (struct scsi_cmnd *cmd)h]jP)}(h'int scsi_dma_map(struct scsi_cmnd *cmd)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(h scsi_dma_maph]j)}(h scsi_dma_maph]h scsi_dma_map}(hjʮhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjƮubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(h(struct scsi_cmnd *cmd)h]j)}(hstruct scsi_cmnd *cmdh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jj̮sbc.scsi_dma_mapasbuh1hhjubjh)}(h h]h }(hj$hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hcmdh]hcmd}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjޮubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(h.perform DMA mapping against command's sg listsh]h0perform DMA mapping against command’s sg lists}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKhjfhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjqhNhNubj)}(h**Parameters** ``struct scsi_cmnd *cmd`` scsi command **Description** Returns the number of sg lists actually used, zero if the sg lists is NULL, or -ENOMEM if the mapping failed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKhjubj#)}(hhh]j()}(h'``struct scsi_cmnd *cmd`` scsi command h](j.)}(h``struct scsi_cmnd *cmd``h]j4)}(hjh]hstruct scsi_cmnd *cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKhjubjJ)}(hhh]h)}(h scsi commandh]h scsi command}(hjïhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKhjubh)}(hmReturns the number of sg lists actually used, zero if the sg lists is NULL, or -ENOMEM if the mapping failed.h]hmReturns the number of sg lists actually used, zero if the sg lists is NULL, or -ENOMEM if the mapping failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjqhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_dma_unmap (C function)c.scsi_dma_unmaphNtauh1j3hjqhhhNhNubjE)}(hhh](jJ)}(h+void scsi_dma_unmap (struct scsi_cmnd *cmd)h]jP)}(h*void scsi_dma_unmap(struct scsi_cmnd *cmd)h](j~)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chK(ubjh)}(h h]h }(hj9hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&hhhj8hK(ubjy)}(hscsi_dma_unmaph]j)}(hscsi_dma_unmaph]hscsi_dma_unmap}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj&hhhj8hK(ubj)}(h(struct scsi_cmnd *cmd)h]j)}(hstruct scsi_cmnd *cmdh](jV)}(hjYh]hstruct}(hjghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjcubjh)}(h h]h }(hjthhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjcubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjMsbc.scsi_dma_unmapasbuh1hhjcubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjcubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjcubj)}(hcmdh]hcmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubah}(h]h ]h"]h$]h&]jjuh1jhj&hhhj8hK(ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj"hhhj8hK(ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj8hK(hjhhubj)}(hhh]h)}(h/unmap command's sg lists mapped by scsi_dma_maph]h1unmap command’s sg lists mapped by scsi_dma_map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chK(hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj8hK(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjqhNhNubj)}(h8**Parameters** ``struct scsi_cmnd *cmd`` scsi commandh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chK,hjubj#)}(hhh]j()}(h&``struct scsi_cmnd *cmd`` scsi commandh](j.)}(h``struct scsi_cmnd *cmd``h]j4)}(hj+h]hstruct scsi_cmnd *cmd}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj)ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chK.hj%ubjJ)}(hhh]h)}(h scsi commandh]h scsi command}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:153: ./drivers/scsi/scsi_lib_dma.chK)hjAubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j'hj@hK.hj"ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjqhhhNhNubeh}(h]drivers-scsi-scsi-lib-dma-cah ]h"]drivers/scsi/scsi_lib_dma.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_proc.ch]hdrivers/scsi/scsi_proc.c}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthhhhhKubh)}(hThe functions in this file provide an interface between the PROC file system and the SCSI device drivers It is mainly used for debugging, statistics and to pass information directly to the lowlevel driver. I.E. plumbing to manage /proc/scsi/\*h]hThe functions in this file provide an interface between the PROC file system and the SCSI device drivers It is mainly used for debugging, statistics and to pass information directly to the lowlevel driver. I.E. plumbing to manage /proc/scsi/*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjthhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_proc_entry (C struct)c.scsi_proc_entryhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hscsi_proc_entryh]jP)}(hstruct scsi_proc_entryh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(hscsi_proc_entryh]j)}(hjh]hscsi_proc_entry}(hj̱hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjȱubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(h*(host template, SCSI proc dir) associationh]h*(host template, SCSI proc dir) association}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK3hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hX**Definition**:: struct scsi_proc_entry { struct list_head entry; const struct scsi_host_template *sht; struct proc_dir_entry *proc_dir; unsigned int present; }; **Members** ``entry`` entry in scsi_proc_list. ``sht`` SCSI host template associated with the procfs directory. ``proc_dir`` procfs directory associated with the SCSI host template. ``present`` Number of SCSI hosts instantiated for **sht**.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK7hj ubj)}(hstruct scsi_proc_entry { struct list_head entry; const struct scsi_host_template *sht; struct proc_dir_entry *proc_dir; unsigned int present; };h]hstruct scsi_proc_entry { struct list_head entry; const struct scsi_host_template *sht; struct proc_dir_entry *proc_dir; unsigned int present; };}hj+sbah}(h]h ]h"]h$]h&]jjuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK9hj ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK@hj ubj#)}(hhh](j()}(h#``entry`` entry in scsi_proc_list. h](j.)}(h ``entry``h]j4)}(hj[h]hentry}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjYubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK5hjUubjJ)}(hhh]h)}(hentry in scsi_proc_list.h]hentry in scsi_proc_list.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK5hjqubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j'hjphK5hjRubj()}(hA``sht`` SCSI host template associated with the procfs directory. h](j.)}(h``sht``h]j4)}(hjh]hsht}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK6hjubjJ)}(hhh]h)}(h8SCSI host template associated with the procfs directory.h]h8SCSI host template associated with the procfs directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhK6hjRubj()}(hF``proc_dir`` procfs directory associated with the SCSI host template. h](j.)}(h ``proc_dir``h]j4)}(hjͲh]hproc_dir}(hjϲhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj˲ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK7hjDzubjJ)}(hhh]h)}(h8procfs directory associated with the SCSI host template.h]h8procfs directory associated with the SCSI host template.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK7hjubah}(h]h ]h"]h$]h&]uh1jIhjDzubeh}(h]h ]h"]h$]h&]uh1j'hjhK7hjRubj()}(h:``present`` Number of SCSI hosts instantiated for **sht**.h](j.)}(h ``present``h]j4)}(hjh]hpresent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK7hjubjJ)}(hhh]h)}(h.Number of SCSI hosts instantiated for **sht**.h](h&Number of SCSI hosts instantiated for }(hjhhhNhNubj)}(h**sht**h]hsht}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chK8hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhK7hjRubeh}(h]h ]h"]h$]h&]uh1j"hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#scsi_template_proc_dir (C function)c.scsi_template_proc_dirhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hUstruct proc_dir_entry * scsi_template_proc_dir (const struct scsi_host_template *sht)h]jP)}(hSstruct proc_dir_entry *scsi_template_proc_dir(const struct scsi_host_template *sht)h](jV)}(hjYh]hstruct}(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnhhhjhKubh)}(hhh]j)}(hproc_dir_entryh]hproc_dir_entry}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jscsi_template_proc_dirsbc.scsi_template_proc_dirasbuh1hhjnhhhjhKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnhhhjhKubjy)}(hscsi_template_proc_dirh]j)}(hjh]hscsi_template_proc_dir}(hjѳhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjͳubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjnhhhjhKubj)}(h&(const struct scsi_host_template *sht)h]j)}(h$const struct scsi_host_template *shth](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubjV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_host_templateh]hscsi_host_template}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]jc.scsi_template_proc_dirasbuh1hhjubjh)}(h h]h }(hjChhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshth]hsht}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjnhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjjhhhjhKubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjghhubj)}(hhh]h)}(h/returns the procfs dir for a SCSI host templateh]h/returns the procfs dir for a SCSI host template}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hV**Parameters** ``const struct scsi_host_template *sht`` SCSI host template pointer.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubj#)}(hhh]j()}(hD``const struct scsi_host_template *sht`` SCSI host template pointer.h](j.)}(h(``const struct scsi_host_template *sht``h]j4)}(hjɴh]h$const struct scsi_host_template *sht}(hj˴hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjǴubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjôubjJ)}(hhh]h)}(hSCSI host template pointer.h]hSCSI host template pointer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjߴubah}(h]h ]h"]h$]h&]uh1jIhjôubeh}(h]h ]h"]h$]h&]uh1j'hj޴hKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"scsi_proc_hostdir_add (C function)c.scsi_proc_hostdir_addhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h@int scsi_proc_hostdir_add (const struct scsi_host_template *sht)h]jP)}(h?int scsi_proc_hostdir_add(const struct scsi_host_template *sht)h](j~)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hj2hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj1hKubjy)}(hscsi_proc_hostdir_addh]j)}(hscsi_proc_hostdir_addh]hscsi_proc_hostdir_add}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj1hKubj)}(h&(const struct scsi_host_template *sht)h]j)}(h$const struct scsi_host_template *shth](jV)}(hj~Ph]hconst}(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubjV)}(hjYh]hstruct}(hj{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubh)}(hhh]j)}(hscsi_host_templateh]hscsi_host_template}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjFsbc.scsi_proc_hostdir_addasbuh1hhj\ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubj )}(hj h]h*}(hjǵhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\ubj)}(hshth]hsht}(hjԵhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj1hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj1hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj1hKhjhhubj)}(hhh]h)}(h)Create directory in /proc for a scsi hosth]h)Create directory in /proc for a scsi host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(h**Parameters** ``const struct scsi_host_template *sht`` owner of this directory **Description** Sets sht->proc_dir to the new directory.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubj#)}(hhh]j()}(hA``const struct scsi_host_template *sht`` owner of this directory h](j.)}(h(``const struct scsi_host_template *sht``h]j4)}(hj?h]h$const struct scsi_host_template *sht}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj=ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhj9ubjJ)}(hhh]h)}(howner of this directoryh]howner of this directory}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjUubah}(h]h ]h"]h$]h&]uh1jIhj9ubeh}(h]h ]h"]h$]h&]uh1j'hjThKhj6ubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubh)}(h(Sets sht->proc_dir to the new directory.h]h(Sets sht->proc_dir to the new directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_proc_hostdir_rm (C function)c.scsi_proc_hostdir_rmhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h@void scsi_proc_hostdir_rm (const struct scsi_host_template *sht)h]jP)}(h?void scsi_proc_hostdir_rm(const struct scsi_host_template *sht)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hjζhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjͶhKubjy)}(hscsi_proc_hostdir_rmh]j)}(hscsi_proc_hostdir_rmh]hscsi_proc_hostdir_rm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjܶubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjͶhKubj)}(h&(const struct scsi_host_template *sht)h]j)}(h$const struct scsi_host_template *shth](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubjV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj$hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_host_templateh]hscsi_host_template}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj7modnameN classnameNjj)}j]j)}jjsbc.scsi_proc_hostdir_rmasbuh1hhjubjh)}(h h]h }(hjUhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshth]hsht}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjͶhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjͶhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjͶhKhjhhubj)}(hhh]h)}(h)remove directory in /proc for a scsi hosth]h)remove directory in /proc for a scsi host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjͶhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hM**Parameters** ``const struct scsi_host_template *sht`` owner of directoryh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubj#)}(hhh]j()}(h;``const struct scsi_host_template *sht`` owner of directoryh](j.)}(h(``const struct scsi_host_template *sht``h]j4)}(hj۷h]h$const struct scsi_host_template *sht}(hjݷhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjٷubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjշubjJ)}(hhh]h)}(howner of directoryh]howner of directory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjշubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjҷubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_proc_host_add (C function)c.scsi_proc_host_addhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h1void scsi_proc_host_add (struct Scsi_Host *shost)h]jP)}(h0void scsi_proc_host_add(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj1hhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj1hhhjChKubjy)}(hscsi_proc_host_addh]j)}(hscsi_proc_host_addh]hscsi_proc_host_add}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjRubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj1hhhjChKubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjrhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjXsbc.scsi_proc_host_addasbuh1hhjnubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnubj)}(hshosth]hshost}(hj˸hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubah}(h]h ]h"]h$]h&]jjuh1jhj1hhhjChKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj-hhhjChKubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jIhjChKhj*hhubj)}(hhh]h)}(h0Add entry for this host to appropriate /proc dirh]h0Add entry for this host to appropriate /proc dir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj*hhhjChKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jDhhhjthNhNubj)}(h9**Parameters** ``struct Scsi_Host *shost`` host to addh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubj#)}(hhh]j()}(h'``struct Scsi_Host *shost`` host to addh](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj6h]hstruct Scsi_Host *shost}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhj0ubjJ)}(hhh]h)}(h host to addh]h host to add}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjLubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j'hjKhKhj-ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_proc_host_rm (C function)c.scsi_proc_host_rmhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h0void scsi_proc_host_rm (struct Scsi_Host *shost)h]jP)}(h/void scsi_proc_host_rm(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(hscsi_proc_host_rmh]j)}(hscsi_proc_host_rmh]hscsi_proc_host_rm}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj͹hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjɹubjh)}(h h]h }(hjڹhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjɹubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_proc_host_rmasbuh1hhjɹubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjɹubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjɹubj)}(hshosth]hshost}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjɹubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjŹubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(h#remove this host's entry from /proch]h%remove this host’s entry from /proc}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1jDhhhjthNhNubj)}(h8**Parameters** ``struct Scsi_Host *shost`` which hosth](h)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjlubj#)}(hhh]j()}(h&``struct Scsi_Host *shost`` which hosth](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubjJ)}(hhh]h)}(h which hosth]h which host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"proc_print_scsidevice (C function)c.proc_print_scsidevicehNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h:int proc_print_scsidevice (struct device *dev, void *data)h]jP)}(h9int proc_print_scsidevice(struct device *dev, void *data)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM ubjy)}(hproc_print_scsideviceh]j)}(hproc_print_scsideviceh]hproc_print_scsidevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM ubj)}(h (struct device *dev, void *data)h](j)}(hstruct device *devh](jV)}(hjYh]hstruct}(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$ubjh)}(h h]h }(hj5hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$ubh)}(hhh]j)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jjsbc.proc_print_scsideviceasbuh1hhj$ubjh)}(h h]h }(hjfhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$ubj )}(hj h]h*}(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h void *datah](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdatah]hdata}(hjûhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM ubah}(h]j޺ah ](jjeh"]h$]h&]jj)jhuh1jIhjhM hjhhubj)}(hhh]h)}(hreturn data about this hosth]hreturn data about this host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(h**Parameters** ``struct device *dev`` A scsi device ``void *data`` :c:type:`struct seq_file ` to output to. **Description** prints Host, Channel, Id, Lun, Vendor, Model, Rev, Type, and revision.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhj ubj#)}(hhh](j()}(h%``struct device *dev`` A scsi device h](j.)}(h``struct device *dev``h]j4)}(hj.h]hstruct device *dev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj,ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hj(ubjJ)}(hhh]h)}(h A scsi deviceh]h A scsi device}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM hjDubah}(h]h ]h"]h$]h&]uh1jIhj(ubeh}(h]h ]h"]h$]h&]uh1j'hjChM hj%ubj()}(hB``void *data`` :c:type:`struct seq_file ` to output to. h](j.)}(h``void *data``h]j4)}(hjgh]h void *data}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjeubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hjaubjJ)}(hhh]h)}(h2:c:type:`struct seq_file ` to output to.h](h)}(h$:c:type:`struct seq_file `h]j4)}(hjh]hstruct seq_file}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjseq_fileuh1hhj|hM hjubh to output to.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jIhjaubeh}(h]h ]h"]h$]h&]uh1j'hj|hM hj%ubeh}(h]h ]h"]h$]h&]uh1j"hj ubh)}(h**Description**h]j)}(hjh]h Description}(hjühhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhj ubh)}(hFprints Host, Channel, Id, Lun, Vendor, Model, Rev, Type, and revision.h]hFprints Host, Channel, Id, Lun, Vendor, Model, Rev, Type, and revision.}(hj׼hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#scsi_add_single_device (C function)c.scsi_add_single_devicehNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hGint scsi_add_single_device (uint host, uint channel, uint id, uint lun)h]jP)}(hFint scsi_add_single_device(uint host, uint channel, uint id, uint lun)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMDubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMDubjy)}(hscsi_add_single_deviceh]j)}(hscsi_add_single_deviceh]hscsi_add_single_device}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMDubj)}(h,(uint host, uint channel, uint id, uint lun)h](j)}(h uint hosth](h)}(hhh]j)}(huinth]huint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j)}jj)sbc.scsi_add_single_deviceasbuh1hhj?ubjh)}(h h]h }(hjfhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubj)}(hhosth]hhost}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(h uint channelh](h)}(hhh]j)}(huinth]huint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jbc.scsi_add_single_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hchannelh]hchannel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint idh](h)}(hhh]j)}(huinth]huint}(hjؽhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjսubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjڽmodnameN classnameNjj)}j]jbc.scsi_add_single_deviceasbuh1hhjѽubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjѽubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjѽubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubj)}(huint lunh](h)}(hhh]j)}(huinth]huint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]jbc.scsi_add_single_deviceasbuh1hhjubjh)}(h h]h }(hj>hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hlunh]hlun}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMDubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMDhjhhubj)}(hhh]h)}(h/Respond to user request to probe for/add deviceh]h/Respond to user request to probe for/add device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMDhjshhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hX**Parameters** ``uint host`` user-supplied decimal integer ``uint channel`` user-supplied decimal integer ``uint id`` user-supplied decimal integer ``uint lun`` user-supplied decimal integer **Description** called by writing "scsi add-single-device" to /proc/scsi/scsi. does scsi_host_lookup() and either user_scan() if that transport type supports it, or else scsi_scan_host_selected() **Note** this seems to be aimed exclusively at SCSI parallel busses.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMHhjubj#)}(hhh](j()}(h,``uint host`` user-supplied decimal integer h](j.)}(h ``uint host``h]j4)}(hjh]h uint host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMEhjubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjоhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̾hMEhj;ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj̾hMEhjubj()}(h/``uint channel`` user-supplied decimal integer h](j.)}(h``uint channel``h]j4)}(hjh]h uint channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMFhjubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMFhjubj()}(h*``uint id`` user-supplied decimal integer h](j.)}(h ``uint id``h]j4)}(hj)h]huint id}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj'ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMGhj#ubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMGhj?ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j'hj>hMGhjubj()}(h+``uint lun`` user-supplied decimal integer h](j.)}(h ``uint lun``h]j4)}(hjbh]huint lun}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj`ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMHhj\ubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMHhjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j'hjwhMHhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMJhjubh)}(h>called by writing "scsi add-single-device" to /proc/scsi/scsi.h]hBcalled by writing “scsi add-single-device” to /proc/scsi/scsi.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMJhjubh)}(htdoes scsi_host_lookup() and either user_scan() if that transport type supports it, or else scsi_scan_host_selected()h]htdoes scsi_host_lookup() and either user_scan() if that transport type supports it, or else scsi_scan_host_selected()}(hj¿hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMLhjubh)}(h**Note**h]j)}(hjӿh]hNote}(hjտhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѿubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMOhjubh)}(h;this seems to be aimed exclusively at SCSI parallel busses.h]h;this seems to be aimed exclusively at SCSI parallel busses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&scsi_remove_single_device (C function)c.scsi_remove_single_devicehNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hJint scsi_remove_single_device (uint host, uint channel, uint id, uint lun)h]jP)}(hIint scsi_remove_single_device(uint host, uint channel, uint id, uint lun)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMeubjh)}(h h]h }(hj'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj&hMeubjy)}(hscsi_remove_single_deviceh]j)}(hscsi_remove_single_deviceh]hscsi_remove_single_device}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj&hMeubj)}(h,(uint host, uint channel, uint id, uint lun)h](j)}(h uint hosth](h)}(hhh]j)}(huinth]huint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZmodnameN classnameNjj)}j]j)}jj;sbc.scsi_remove_single_deviceasbuh1hhjQubjh)}(h h]h }(hjxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjQubj)}(hhosth]hhost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(h uint channelh](h)}(hhh]j)}(huinth]huint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jtc.scsi_remove_single_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hchannelh]hchannel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(huint idh](h)}(hhh]j)}(huinth]huint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jtc.scsi_remove_single_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubj)}(huint lunh](h)}(hhh]j)}(huinth]huint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]jtc.scsi_remove_single_deviceasbuh1hhj+ubjh)}(h h]h }(hjPhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubj)}(hlunh]hlun}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj&hMeubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj&hMeubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jIhj&hMehj hhubj)}(hhh]h)}(h*Respond to user request to remove a deviceh]h*Respond to user request to remove a device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMehjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hXT**Parameters** ``uint host`` user-supplied decimal integer ``uint channel`` user-supplied decimal integer ``uint id`` user-supplied decimal integer ``uint lun`` user-supplied decimal integer **Description** called by writing "scsi remove-single-device" to /proc/scsi/scsi. Does a scsi_device_lookup() and scsi_remove_device()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMihjubj#)}(hhh](j()}(h,``uint host`` user-supplied decimal integer h](j.)}(h ``uint host``h]j4)}(hjh]h uint host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMfhjubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMfhjubj()}(h/``uint channel`` user-supplied decimal integer h](j.)}(h``uint channel``h]j4)}(hjh]h uint channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMghjubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMghjubj()}(h*``uint id`` user-supplied decimal integer h](j.)}(h ``uint id``h]j4)}(hj;h]huint id}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj9ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhhj5ubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhhjQubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j'hjPhMhhjubj()}(h+``uint lun`` user-supplied decimal integer h](j.)}(h ``uint lun``h]j4)}(hjth]huint lun}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjrubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMihjnubjJ)}(hhh]h)}(huser-supplied decimal integerh]huser-supplied decimal integer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjhMihjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMkhjubh)}(hwcalled by writing "scsi remove-single-device" to /proc/scsi/scsi. Does a scsi_device_lookup() and scsi_remove_device()h]h{called by writing “scsi remove-single-device” to /proc/scsi/scsi. Does a scsi_device_lookup() and scsi_remove_device()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@proc_scsi_write (C function)c.proc_scsi_writehNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h`ssize_t proc_scsi_write (struct file *file, const char __user *buf, size_t length, loff_t *ppos)h]jP)}(h_ssize_t proc_scsi_write(struct file *file, const char __user *buf, size_t length, loff_t *ppos)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jproc_scsi_writesbc.proc_scsi_writeasbuh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hproc_scsi_writeh]j)}(hjh]hproc_scsi_write}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(hH(struct file *file, const char __user *buf, size_t length, loff_t *ppos)h](j)}(hstruct file *fileh](jV)}(hjYh]hstruct}(hjFhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubjh)}(h h]h }(hjShhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubh)}(hhh]j)}(hfileh]hfile}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jc.proc_scsi_writeasbuh1hhjBubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubj)}(hfileh]hfile}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hconst char __user *bufh](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh__user}(hjhhhNhNubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNjj)}j]jc.proc_scsi_writeasbuh1hhj!ubjh)}(h h]h }(hjFhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!ubj)}(hlengthh]hlength}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(h loff_t *pposh](h)}(hhh]j)}(hloff_th]hloff_t}(hjphhhNhNubah}(h]h ]ja&h"]h$]h&]uh1j~hjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]jc.proc_scsi_writeasbuh1hhjiubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjiubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjiubj)}(hpposh]hppos}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(h handle writes to /proc/scsi/scsih]h handle writes to /proc/scsi/scsi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(hX**Parameters** ``struct file *file`` not used ``const char __user *buf`` buffer to write ``size_t length`` length of buf, at most PAGE_SIZE ``loff_t *ppos`` not used **Description** this provides a legacy mechanism to add or remove devices by Host, Channel, ID, and Lun. To use, "echo 'scsi add-single-device 0 1 2 3' > /proc/scsi/scsi" or "echo 'scsi remove-single-device 0 1 2 3' > /proc/scsi/scsi" with "0 1 2 3" replaced by the Host, Channel, Id, and Lun. **Note** this seems to be aimed at parallel SCSI. Most modern busses (USB, SATA, Firewire, Fibre Channel, etc) dynamically assign these values to provide a unique identifier and nothing more.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubj#)}(hhh](j()}(h``struct file *file`` not used h](j.)}(h``struct file *file``h]j4)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubjJ)}(hhh]h)}(hnot usedh]hnot used}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj)hMhj ubj()}(h+``const char __user *buf`` buffer to write h](j.)}(h``const char __user *buf``h]j4)}(hjMh]hconst char __user *buf}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjKubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjGubjJ)}(hhh]h)}(hbuffer to writeh]hbuffer to write}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jIhjGubeh}(h]h ]h"]h$]h&]uh1j'hjbhMhj ubj()}(h3``size_t length`` length of buf, at most PAGE_SIZE h](j.)}(h``size_t length``h]j4)}(hjh]h size_t length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubjJ)}(hhh]h)}(h length of buf, at most PAGE_SIZEh]h length of buf, at most PAGE_SIZE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhj ubj()}(h``loff_t *ppos`` not used h](j.)}(h``loff_t *ppos``h]j4)}(hjh]h loff_t *ppos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubjJ)}(hhh]h)}(hnot usedh]hnot used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhj ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubh)}(hXthis provides a legacy mechanism to add or remove devices by Host, Channel, ID, and Lun. To use, "echo 'scsi add-single-device 0 1 2 3' > /proc/scsi/scsi" or "echo 'scsi remove-single-device 0 1 2 3' > /proc/scsi/scsi" with "0 1 2 3" replaced by the Host, Channel, Id, and Lun.h]hX*this provides a legacy mechanism to add or remove devices by Host, Channel, ID, and Lun. To use, “echo ‘scsi add-single-device 0 1 2 3’ > /proc/scsi/scsi” or “echo ‘scsi remove-single-device 0 1 2 3’ > /proc/scsi/scsi” with “0 1 2 3” replaced by the Host, Channel, Id, and Lun.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubh)}(h**Note**h]j)}(hj!h]hNote}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubh)}(hthis seems to be aimed at parallel SCSI. Most modern busses (USB, SATA, Firewire, Fibre Channel, etc) dynamically assign these values to provide a unique identifier and nothing more.h]hthis seems to be aimed at parallel SCSI. Most modern busses (USB, SATA, Firewire, Fibre Channel, etc) dynamically assign these values to provide a unique identifier and nothing more.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@proc_scsi_open (C function)c.proc_scsi_openhNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(h;int proc_scsi_open (struct inode *inode, struct file *file)h]jP)}(h:int proc_scsi_open(struct inode *inode, struct file *file)h](j~)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjbhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM ubjh)}(h h]h }(hjuhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjbhhhjthM ubjy)}(hproc_scsi_openh]j)}(hproc_scsi_openh]hproc_scsi_open}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjbhhhjthM ubj)}(h((struct inode *inode, struct file *file)h](j)}(hstruct inode *inodeh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.proc_scsi_openasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hinodeh]hinode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct file *fileh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hfileh]hfile}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]jc.proc_scsi_openasbuh1hhjubjh)}(h h]h }(hjQhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfileh]hfile}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjbhhhjthM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj^hhhjthM ubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1jIhjthM hj[hhubj)}(hhh]h)}(h glue functionh]h glue function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj[hhhjthM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(h**Parameters** ``struct inode *inode`` not used ``struct file *file`` passed to single_open() **Description** Associates proc_scsi_show with this fileh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubj#)}(hhh](j()}(h!``struct inode *inode`` not used h](j.)}(h``struct inode *inode``h]j4)}(hjh]hstruct inode *inode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hjubjJ)}(hhh]h)}(hnot usedh]hnot used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjubj()}(h.``struct file *file`` passed to single_open() h](j.)}(h``struct file *file``h]j4)}(hjh]hstruct file *file}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM hj ubjJ)}(hhh]h)}(hpassed to single_open()h]hpassed to single_open()}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj%hM hjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubh)}(h(Associates proc_scsi_show with this fileh]h(Associates proc_scsi_show with this file}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_init_procfs (C function)c.scsi_init_procfshNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hint scsi_init_procfs (void)h]jP)}(hint scsi_init_procfs(void)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM#ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM#ubjy)}(hscsi_init_procfsh]j)}(hscsi_init_procfsh]hscsi_init_procfs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM#ubj)}(h(void)h]j)}(hvoidh]j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM#ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM#hjhhubj)}(hhh]h)}(h#create scsi and scsi/scsi in procfsh]h#create scsi and scsi/scsi in procfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM'hjubj#)}(hhh]j()}(h``void`` no argumentsh](j.)}(h``void``h]j4)}(hj8h]hvoid}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj6ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM)hj2ubjJ)}(hhh]h)}(h no argumentsh]h no arguments}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjNubah}(h]h ]h"]h$]h&]uh1jIhj2ubeh}(h]h ]h"]h$]h&]uh1j'hjMhM)hj/ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_exit_procfs (C function)c.scsi_exit_procfshNtauh1j3hjthhhNhNubjE)}(hhh](jJ)}(hvoid scsi_exit_procfs (void)h]jP)}(hvoid scsi_exit_procfs(void)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM:ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM:ubjy)}(hscsi_exit_procfsh]j)}(hscsi_exit_procfsh]hscsi_exit_procfs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM:ubj)}(h(void)h]j)}(hvoidh]j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM:ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM:ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM:hjhhubj)}(hhh]h)}(h%Remove scsi/scsi and scsi from procfsh]h%Remove scsi/scsi and scsi from procfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM:hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjthNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM>hjubj#)}(hhh]j()}(h``void`` no argumentsh](j.)}(h``void``h]j4)}(hj:h]hvoid}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj8ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chM@hj4ubjJ)}(hhh]h)}(h no argumentsh]h no arguments}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:164: ./drivers/scsi/scsi_proc.chKhjPubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hjOhM@hj1ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjthhhNhNubeh}(h]drivers-scsi-scsi-proc-cah ]h"]drivers/scsi/scsi_proc.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_netlink.ch]hdrivers/scsi/scsi_netlink.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXInfrastructure to provide async events from transports to userspace via netlink, using a single NETLINK_SCSITRANSPORT protocol for all transports. See `the original patch submission `__ for more details.h](hInfrastructure to provide async events from transports to userspace via netlink, using a single NETLINK_SCSITRANSPORT protocol for all transports. See }(hjhhhNhNubjn)}(hu`the original patch submission `__h]hthe original patch submission}(hjhhhNhNubah}(h]h ]h"]h$]h&]namethe original patch submissionjQhttps://lore.kernel.org/linux-scsi/1155070439.6275.5.camel@localhost.localdomain/uh1jmhjubh for more details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_nl_rcv_msg (C function)c.scsi_nl_rcv_msghNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h*void scsi_nl_rcv_msg (struct sk_buff *skb)h]jP)}(h)void scsi_nl_rcv_msg(struct sk_buff *skb)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(hscsi_nl_rcv_msgh]j)}(hscsi_nl_rcv_msgh]hscsi_nl_rcv_msg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](jV)}(hjYh]hstruct}(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j)}jjsbc.scsi_nl_rcv_msgasbuh1hhj ubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(hj h]h*}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hskbh]hskb}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(hReceive message handler.h]hReceive message handler.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h**Parameters** ``struct sk_buff *skb`` socket receive buffer **Description** Extracts message from a receive buffer. Validates message header and calls appropriate transport message handlerh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjubj#)}(hhh]j()}(h.``struct sk_buff *skb`` socket receive buffer h](j.)}(h``struct sk_buff *skb``h]j4)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjubjJ)}(hhh]h)}(hsocket receive bufferh]hsocket receive buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjubj#)}(hhh]j()}(hpExtracts message from a receive buffer. Validates message header and calls appropriate transport message handlerh](j.)}(h'Extracts message from a receive buffer.h]h'Extracts message from a receive buffer.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhj%ubjJ)}(hhh]h)}(hHValidates message header and calls appropriate transport message handlerh]hHValidates message header and calls appropriate transport message handler}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhj8ubah}(h]h ]h"]h$]h&]uh1jIhj%ubeh}(h]h ]h"]h$]h&]uh1j'hj7hKhj"ubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_netlink_init (C function)c.scsi_netlink_inithNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hvoid scsi_netlink_init (void)h]jP)}(hvoid scsi_netlink_init(void)h](j~)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKkubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjxhhhjhKkubjy)}(hscsi_netlink_inith]j)}(hscsi_netlink_inith]hscsi_netlink_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjxhhhjhKkubj)}(h(void)h]j)}(hvoidh]j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhjhKkubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjthhhjhKkubah}(h]joah ](jjeh"]h$]h&]jj)jhuh1jIhjhKkhjqhhubj)}(hhh]h)}(hKCalled by SCSI subsystem to initialize the SCSI transport netlink interfaceh]hKCalled by SCSI subsystem to initialize the SCSI transport netlink interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKkhjhhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjhKkubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKohjubj#)}(hhh]j()}(h``void`` no argumentsh](j.)}(h``void``h]j4)}(hj$h]hvoid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj"ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKqhjubjJ)}(hhh]h)}(h no argumentsh]h no arguments}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhj:ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj9hKqhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_netlink_exit (C function)c.scsi_netlink_exithNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hvoid scsi_netlink_exit (void)h]jP)}(hvoid scsi_netlink_exit(void)h](j~)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjzhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzhhhjhKubjy)}(hscsi_netlink_exith]j)}(hscsi_netlink_exith]hscsi_netlink_exit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjzhhhjhKubj)}(h(void)h]j)}(hvoidh]j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubah}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjvhhhjhKubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjshhubj)}(hhh]h)}(hHCalled by SCSI subsystem to disable the SCSI transport netlink interfaceh]hHCalled by SCSI subsystem to disable the SCSI transport netlink interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhjubj#)}(hhh]j()}(h``void`` no argumentsh](j.)}(h``void``h]j4)}(hj&h]hvoid}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj$ubah}(h]h ]h"]h$]h&]uh1j-h\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhj ubjJ)}(hhh]h)}(h no argumentsh]h no arguments}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:175: ./drivers/scsi/scsi_netlink.chKhj<ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj;hKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]drivers-scsi-scsi-netlink-cah ]h"]drivers/scsi/scsi_netlink.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_scan.ch]hdrivers/scsi/scsi_scan.c}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohhhhhKubh)}(hX5Scan a host to determine which (if any) devices are attached. The general scanning/probing algorithm is as follows, exceptions are made to it depending on device specific flags, compilation options, and global variable (boot or module load time) settings. A specific LUN is scanned via an INQUIRY command; if the LUN has a device attached, a scsi_device is allocated and setup for it. For every id of every channel on the given host, start by scanning LUN 0. Skip hosts that don't respond at all to a scan of LUN 0. Otherwise, if LUN 0 has a device attached, allocate and setup a scsi_device for it. If target is SCSI-3 or up, issue a REPORT LUN, and scan all of the LUNs returned by the REPORT LUN; else, sequentially scan LUNs up until some maximum is reached, or a LUN is seen that cannot have a device attached to it.h]hX7Scan a host to determine which (if any) devices are attached. The general scanning/probing algorithm is as follows, exceptions are made to it depending on device specific flags, compilation options, and global variable (boot or module load time) settings. A specific LUN is scanned via an INQUIRY command; if the LUN has a device attached, a scsi_device is allocated and setup for it. For every id of every channel on the given host, start by scanning LUN 0. Skip hosts that don’t respond at all to a scan of LUN 0. Otherwise, if LUN 0 has a device attached, allocate and setup a scsi_device for it. If target is SCSI-3 or up, issue a REPORT LUN, and scan all of the LUNs returned by the REPORT LUN; else, sequentially scan LUNs up until some maximum is reached, or a LUN is seen that cannot have a device attached to it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjohhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@)scsi_sanitize_inquiry_string (C function)c.scsi_sanitize_inquiry_stringhNtauh1j3hjohhhNhNubjE)}(hhh](jJ)}(h=void scsi_sanitize_inquiry_string (unsigned char *s, int len)h]jP)}(hubjh)}(h h]h }(hjPhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj>ubj)}(hlenh]hlen}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM_ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM_ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM_hjhhubj)}(hhh]h)}(h8remove non-graphical chars from an INQUIRY result stringh]h8remove non-graphical chars from an INQUIRY result string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chM_hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjohNhNubj)}(hX**Parameters** ``unsigned char *s`` INQUIRY result string to sanitize ``int len`` length of the string **Description** The SCSI spec says that INQUIRY vendor, product, and revision strings must consist entirely of graphic ASCII characters, padded on the right with spaces. Since not all devices obey this rule, we will replace non-graphic or non-ASCII characters with spaces. Exception: a NUL character is interpreted as a string terminator, so all the following characters are set to spaces.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMchjubj#)}(hhh](j()}(h7``unsigned char *s`` INQUIRY result string to sanitize h](j.)}(h``unsigned char *s``h]j4)}(hjh]hunsigned char *s}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMahjubjJ)}(hhh]h)}(h!INQUIRY result string to sanitizeh]h!INQUIRY result string to sanitize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMahjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMahjubj()}(h!``int len`` length of the string h](j.)}(h ``int len``h]j4)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMbhjubjJ)}(hhh]h)}(hlength of the stringh]hlength of the string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMbhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMdhjubj`)}(hXwThe SCSI spec says that INQUIRY vendor, product, and revision strings must consist entirely of graphic ASCII characters, padded on the right with spaces. Since not all devices obey this rule, we will replace non-graphic or non-ASCII characters with spaces. Exception: a NUL character is interpreted as a string terminator, so all the following characters are set to spaces.h]h)}(hXwThe SCSI spec says that INQUIRY vendor, product, and revision strings must consist entirely of graphic ASCII characters, padded on the right with spaces. Since not all devices obey this rule, we will replace non-graphic or non-ASCII characters with spaces. Exception: a NUL character is interpreted as a string terminator, so all the following characters are set to spaces.h]hXwThe SCSI spec says that INQUIRY vendor, product, and revision strings must consist entirely of graphic ASCII characters, padded on the right with spaces. Since not all devices obey this rule, we will replace non-graphic or non-ASCII characters with spaces. Exception: a NUL character is interpreted as a string terminator, so all the following characters are set to spaces.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMdhjSubah}(h]h ]h"]h$]h&]uh1j_hjehMdhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjohhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_add_device (C function)c.scsi_add_devicehNtauh1j3hjohhhNhNubjE)}(hhh](jJ)}(hPint scsi_add_device (struct Scsi_Host *host, uint channel, uint target, u64 lun)h]jP)}(hOint scsi_add_device(struct Scsi_Host *host, uint channel, uint target, u64 lun)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMvubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMvubjy)}(hscsi_add_deviceh]j)}(hscsi_add_deviceh]hscsi_add_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMvubj)}(h<(struct Scsi_Host *host, uint channel, uint target, u64 lun)h](j)}(hstruct Scsi_Host *hosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_add_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hhosth]hhost}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h uint channelh](h)}(hhh]j)}(huinth]huint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]jc.scsi_add_deviceasbuh1hhj7ubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj7ubj)}(hchannelh]hchannel}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h uint targeth](h)}(hhh]j)}(huinth]huint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_add_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(htargeth]htarget}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_add_deviceasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hlunh]hlun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMvubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMvhjhhubj)}(hhh]h)}(h creates a new SCSI (LU) instanceh]h creates a new SCSI (LU) instance}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMvhj!hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMvubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jDhhhjohNhNubj)}(hX**Parameters** ``struct Scsi_Host *host`` the :c:type:`Scsi_Host` instance where the device is located ``uint channel`` target channel number (rarely other than ``0``) ``uint target`` target id number ``u64 lun`` LUN of target device **Description** Probe for a specific LUN and add it if found. **Notes** This call is usually performed internally during a SCSI bus scan when an HBA is added (i.e. scsi_scan_host()). So it should only be called if the HBA becomes aware of a new SCSI device (LU) after scsi_scan_host() has completed. If successful this call can lead to sdev_init() and sdev_configure() callbacks into the LLD. **Return** ``0`` on success or negative error code on failureh](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMzhj@ubj#)}(hhh](j()}(hX``struct Scsi_Host *host`` the :c:type:`Scsi_Host` instance where the device is located h](j.)}(h``struct Scsi_Host *host``h]j4)}(hjeh]hstruct Scsi_Host *host}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjcubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMwhj_ubjJ)}(hhh]h)}(hubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj/hMubj)}(hc(struct device *parent, unsigned int channel, unsigned int id, u64 lun, enum scsi_scan_mode rescan)h](j)}(hstruct device *parenth](jV)}(hjYh]hstruct}(hj^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjZubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZubh)}(hhh]j)}(hdeviceh]hdevice}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jjDsbc.scsi_scan_targetasbuh1hhjZubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned int channelh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hchannelh]hchannel}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hunsigned int idh](j~)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hj/hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hidh]hid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]jc.scsi_scan_targetasbuh1hhjnubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnubj)}(hlunh]hlun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubj)}(henum scsi_scan_mode rescanh](jV)}(hjR9h]henum}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_scan_modeh]hscsi_scan_mode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_scan_targetasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hrescanh]hrescan}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjVubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj/hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj/hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj/hMhjhhubj)}(hhh]h)}(h. Scan at least LUN 0, and possibly all LUNs on the target id.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMhjubh)}(hmFirst try a REPORT LUN scan, if that does not scan the target, do a sequential scan of LUNs on the target id.h]hmFirst try a REPORT LUN scan, if that does not scan the target, do a sequential scan of LUNs on the target id.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chM!hjubeh}(h]h ]h"]h$]h&]uh1j_hjhMhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjohhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_scan_host (C function)c.scsi_scan_hosthNtauh1j3hjohhhNhNubjE)}(hhh](jJ)}(h-void scsi_scan_host (struct Scsi_Host *shost)h]jP)}(h,void scsi_scan_host(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chM ubjh)}(h h]h }(hj2hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj1hM ubjy)}(hscsi_scan_hosth]j)}(hscsi_scan_hosth]hscsi_scan_host}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj1hM ubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj`hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj\ubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjFsbc.scsi_scan_hostasbuh1hhj\ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\ubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj1hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj1hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj1hM hjhhubj)}(hhh]h)}(hscan the given adapterh]hscan the given adapter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjohNhNubj)}(hp**Parameters** ``struct Scsi_Host *shost`` adapter to scan **Notes** Should be called after scsi_add_host()h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMhjubj#)}(hhh]j()}(h,``struct Scsi_Host *shost`` adapter to scan h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj$h]hstruct Scsi_Host *shost}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj"ubah}(h]h ]h"]h$]h&]uh1j-hY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chM hjubjJ)}(hhh]h)}(hadapter to scanh]hadapter to scan}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj9hM hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h **Notes**h]j)}(hj_h]hNotes}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMhjubh)}(h&Should be called after scsi_add_host()h]h&Should be called after scsi_add_host()}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:194: ./drivers/scsi/scsi_scan.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjohhhNhNubeh}(h]drivers-scsi-scsi-scan-cah ]h"]drivers/scsi/scsi_scan.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_sysctl.ch]hdrivers/scsi/scsi_sysctl.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hrSet up the sysctl entry: "/dev/scsi/logging_level" (DEV_SCSI_LOGGING_LEVEL) which sets/returns scsi_logging_level.h]hvSet up the sysctl entry: “/dev/scsi/logging_level” (DEV_SCSI_LOGGING_LEVEL) which sets/returns scsi_logging_level.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]drivers-scsi-scsi-sysctl-cah ]h"]drivers/scsi/scsi_sysctl.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_sysfs.ch]hdrivers/scsi/scsi_sysfs.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hSCSI sysfs interface routines.h]hSCSI sysfs interface routines.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_remove_device (C function)c.scsi_remove_devicehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h2void scsi_remove_device (struct scsi_device *sdev)h]jP)}(h1void scsi_remove_device(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hscsi_remove_deviceh]j)}(hscsi_remove_deviceh]hscsi_remove_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj+ubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjOmodnameN classnameNjj)}j]j)}jjsbc.scsi_remove_deviceasbuh1hhj+ubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj+ubj )}(hj h]h*}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj'ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(h%unregister a device from the scsi bush]h%unregister a device from the scsi bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hH**Parameters** ``struct scsi_device *sdev`` scsi_device to unregisterh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhjubj#)}(hhh]j()}(h6``struct scsi_device *sdev`` scsi_device to unregisterh](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhjubjJ)}(hhh]h)}(hscsi_device to unregisterh]hscsi_device to unregister}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_remove_target (C function)c.scsi_remove_targethNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h,void scsi_remove_target (struct device *dev)h]jP)}(h+void scsi_remove_target(struct device *dev)h](j~)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIhhhj[hMubjy)}(hscsi_remove_targeth]j)}(hscsi_remove_targeth]hscsi_remove_target}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjIhhhj[hMubj)}(h(struct device *dev)h]j)}(hstruct device *devh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjpsbc.scsi_remove_targetasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjEhhhj[hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jIhj[hMhjBhhubj)}(hhh]h)}(h*try to remove a target and all its devicesh]h*try to remove a target and all its devices}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jDhhhjhNhNubj)}(h**Parameters** ``struct device *dev`` generic starget or parent of generic stargets to be removed **Note** This is slightly racy. It is possible that if the user requests the addition of another device then the target won't be removed.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhj)ubj#)}(hhh]j()}(hS``struct device *dev`` generic starget or parent of generic stargets to be removed h](j.)}(h``struct device *dev``h]j4)}(hjNh]hstruct device *dev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjLubah}(h]h ]h"]h$]h&]uh1j-hZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhjHubjJ)}(hhh]h)}(h;generic starget or parent of generic stargets to be removedh]h;generic starget or parent of generic stargets to be removed}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jIhjHubeh}(h]h ]h"]h$]h&]uh1j'hjchMhjEubah}(h]h ]h"]h$]h&]uh1j"hj)ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhj)ubh)}(hThis is slightly racy. It is possible that if the user requests the addition of another device then the target won't be removed.h]hThis is slightly racy. It is possible that if the user requests the addition of another device then the target won’t be removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:208: ./drivers/scsi/scsi_sysfs.chMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]drivers-scsi-scsi-sysfs-cah ]h"]drivers/scsi/scsi_sysfs.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/hosts.ch]hdrivers/scsi/hosts.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h%mid to lowlevel SCSI driver interfaceh]h%mid to lowlevel SCSI driver interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_remove_host (C function)c.scsi_remove_hosthNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h/void scsi_remove_host (struct Scsi_Host *shost)h]jP)}(h.void scsi_remove_host(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(hscsi_remove_hosth]j)}(hscsi_remove_hosth]hscsi_remove_host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj.ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjsbc.scsi_remove_hostasbuh1hhj.ubjh)}(h h]h }(hjphhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj.ubj )}(hj h]h*}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.ubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj*ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(hremove a scsi hosth]hremove a scsi host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hP**Parameters** ``struct Scsi_Host *shost`` a pointer to a scsi host to removeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjubj#)}(hhh]j()}(h>``struct Scsi_Host *shost`` a pointer to a scsi host to removeh](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjubjJ)}(hhh]h)}(h"a pointer to a scsi host to removeh]h"a pointer to a scsi host to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj hKhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#scsi_add_host_with_dma (C function)c.scsi_add_host_with_dmahNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h`int scsi_add_host_with_dma (struct Scsi_Host *shost, struct device *dev, struct device *dma_dev)h]jP)}(h_int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, struct device *dma_dev)h](j~)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjLhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKubjh)}(h h]h }(hj_hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjLhhhj^hKubjy)}(hscsi_add_host_with_dmah]j)}(hscsi_add_host_with_dmah]hscsi_add_host_with_dma}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjLhhhj^hKubj)}(hE(struct Scsi_Host *shost, struct device *dev, struct device *dma_dev)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjssbc.scsi_add_host_with_dmaasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device *devh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_add_host_with_dmaasbuh1hhjubjh)}(h h]h }(hj;hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct device *dma_devh](jV)}(hjYh]hstruct}(hjohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjkubjh)}(h h]h }(hj|hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_add_host_with_dmaasbuh1hhjkubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjkubj)}(hdma_devh]hdma_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjLhhhj^hKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjHhhhj^hKubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jIhj^hKhjEhhubj)}(hhh]h)}(hadd a scsi host with dma deviceh]hadd a scsi host with dma device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhj^hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` scsi host pointer to add ``struct device *dev`` a struct device of type scsi class ``struct device *dma_dev`` dma device for the host **Note** You rarely need to worry about this unless you're in a virtualised host environments, so use the simpler scsi_add_host() function instead. Return value: 0 on success / != 0 for errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhj ubj#)}(hhh](j()}(h5``struct Scsi_Host *shost`` scsi host pointer to add h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj1h]hstruct Scsi_Host *shost}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj/ubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhj+ubjJ)}(hhh]h)}(hscsi host pointer to addh]hscsi host pointer to add}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jIhj+ubeh}(h]h ]h"]h$]h&]uh1j'hjFhKhj(ubj()}(h:``struct device *dev`` a struct device of type scsi class h](j.)}(h``struct device *dev``h]j4)}(hjjh]hstruct device *dev}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjhubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjdubjJ)}(hhh]h)}(h"a struct device of type scsi classh]h"a struct device of type scsi class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j'hjhKhj(ubj()}(h3``struct device *dma_dev`` dma device for the host h](j.)}(h``struct device *dma_dev``h]j4)}(hjh]hstruct device *dma_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjubjJ)}(hhh]h)}(hdma device for the hosth]hdma device for the host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhj(ubeh}(h]h ]h"]h$]h&]uh1j"hj ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhj ubh)}(hYou rarely need to worry about this unless you're in a virtualised host environments, so use the simpler scsi_add_host() function instead.h]hYou rarely need to worry about this unless you’re in a virtualised host environments, so use the simpler scsi_add_host() function instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhj ubj#)}(hhh]j()}(h+Return value: 0 on success / != 0 for errorh](j.)}(h Return value:h]h Return value:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjubjJ)}(hhh]h)}(h0 on success / != 0 for errorh]h0 on success / != 0 for error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_alloc (C function)c.scsi_host_allochNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hWstruct Scsi_Host * scsi_host_alloc (const struct scsi_host_template *sht, int privsize)h]jP)}(hUstruct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *sht, int privsize)h](jV)}(hjYh]hstruct}(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjYhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMubjh)}(h h]h }(hjkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYhhhjjhMubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jscsi_host_allocsbc.scsi_host_allocasbuh1hhjYhhhjjhMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjYhhhjjhMubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYhhhjjhMubjy)}(hscsi_host_alloch]j)}(hjh]hscsi_host_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjYhhhjjhMubj)}(h4(const struct scsi_host_template *sht, int privsize)h](j)}(h$const struct scsi_host_template *shth](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubjV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_host_templateh]hscsi_host_template}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_host_allocasbuh1hhjubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshth]hsht}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int privsizeh](j~)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^ubjh)}(h h]h }(hjphhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj^ubj)}(hprivsizeh]hprivsize}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjYhhhjjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjUhhhjjhMubah}(h]jPah ](jjeh"]h$]h&]jj)jhuh1jIhjjhMhjRhhubj)}(hhh]h)}(h®ister a scsi host adapter instance.h]h®ister a scsi host adapter instance.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hXa**Parameters** ``const struct scsi_host_template *sht`` pointer to scsi host template ``int privsize`` extra bytes to allocate for driver **Note** Allocate a new Scsi_Host and perform basic initialization. The host is not published to the scsi midlayer until scsi_add_host is called. Return value: Pointer to a new Scsi_Hosth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubj#)}(hhh](j()}(hG``const struct scsi_host_template *sht`` pointer to scsi host template h](j.)}(h(``const struct scsi_host_template *sht``h]j4)}(hjh]h$const struct scsi_host_template *sht}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(hpointer to scsi host templateh]hpointer to scsi host template}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(h4``int privsize`` extra bytes to allocate for driver h](j.)}(h``int privsize``h]j4)}(hj"h]h int privsize}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(h"extra bytes to allocate for driverh]h"extra bytes to allocate for driver}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj7hMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Note**h]j)}(hj]h]hNote}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubj`)}(hAllocate a new Scsi_Host and perform basic initialization. The host is not published to the scsi midlayer until scsi_add_host is called. h]h)}(hAllocate a new Scsi_Host and perform basic initialization. The host is not published to the scsi midlayer until scsi_add_host is called.h]hAllocate a new Scsi_Host and perform basic initialization. The host is not published to the scsi midlayer until scsi_add_host is called.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjsubah}(h]h ]h"]h$]h&]uh1j_hjhMhjubj#)}(hhh]j()}(h(Return value: Pointer to a new Scsi_Hosth](j.)}(h Return value:h]h Return value:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(hPointer to a new Scsi_Hosth]hPointer to a new Scsi_Host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_lookup (C function)c.scsi_host_lookuphNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h:struct Scsi_Host * scsi_host_lookup (unsigned int hostnum)h]jP)}(h8struct Scsi_Host *scsi_host_lookup(unsigned int hostnum)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM<ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM<ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jscsi_host_lookupsbc.scsi_host_lookupasbuh1hhjhhhjhM<ubjh)}(h h]h }(hj&hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM<ubj )}(hj h]h*}(hj4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM<ubjy)}(hscsi_host_lookuph]j)}(hj#h]hscsi_host_lookup}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM<ubj)}(h(unsigned int hostnum)h]j)}(hunsigned int hostnumh](j~)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\ubjh)}(h h]h }(hjnhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubj~)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\ubj)}(hhostnumh]hhostnum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjXubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM<ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM<ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM<hjhhubj)}(hhh]h)}(h)get a reference to a Scsi_Host by host noh]h)get a reference to a Scsi_Host by host no}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM<hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX:**Parameters** ``unsigned int hostnum`` host number to locate **Description** Return value: A pointer to located Scsi_Host or NULL. The caller must do a scsi_host_put() to drop the reference that scsi_host_get() took. The put_device() below dropped the reference from class_find_device().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM@hjubj#)}(hhh]j()}(h/``unsigned int hostnum`` host number to locate h](j.)}(h``unsigned int hostnum``h]j4)}(hjh]hunsigned int hostnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM=hjubjJ)}(hhh]h)}(hhost number to locateh]hhost number to locate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM=hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM?hjubj#)}(hhh]j()}(hReturn value: A pointer to located Scsi_Host or NULL. The caller must do a scsi_host_put() to drop the reference that scsi_host_get() took. The put_device() below dropped the reference from class_find_device().h](j.)}(h Return value:h]h Return value:}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMBhjWubjJ)}(hhh](h)}(h'A pointer to located Scsi_Host or NULL.h]h'A pointer to located Scsi_Host or NULL.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM?hjjubh)}(hThe caller must do a scsi_host_put() to drop the reference that scsi_host_get() took. The put_device() below dropped the reference from class_find_device().h]hThe caller must do a scsi_host_put() to drop the reference that scsi_host_get() took. The put_device() below dropped the reference from class_find_device().}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMAhjjubeh}(h]h ]h"]h$]h&]uh1jIhjWubeh}(h]h ]h"]h$]h&]uh1j'hjihMBhjTubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_get (C function)c.scsi_host_gethNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h:struct Scsi_Host * scsi_host_get (struct Scsi_Host *shost)h]jP)}(h8struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMVubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMVubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j scsi_host_getsbc.scsi_host_getasbuh1hhjhhhjhMVubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMVubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMVubjy)}(h scsi_host_geth]j)}(hjh]h scsi_host_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMVubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj7hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj3ubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj3ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jc.scsi_host_getasbuh1hhj3ubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj3ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMVubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMVhjhhubj)}(hhh]h)}(hinc a Scsi_Host ref counth]hinc a Scsi_Host ref count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMVhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hJ**Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Host to inc.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMZhjubj#)}(hhh]j()}(h8``struct Scsi_Host *shost`` Pointer to Scsi_Host to inc.h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM\hjubjJ)}(hhh]h)}(hPointer to Scsi_Host to inc.h]hPointer to Scsi_Host to inc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMWhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM\hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_busy (C function)c.scsi_host_busyhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h,int scsi_host_busy (struct Scsi_Host *shost)h]jP)}(h+int scsi_host_busy(struct Scsi_Host *shost)h](j~)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjOhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMnubjh)}(h h]h }(hjbhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjOhhhjahMnubjy)}(hscsi_host_busyh]j)}(hscsi_host_busyh]hscsi_host_busy}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjpubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjOhhhjahMnubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjvsbc.scsi_host_busyasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjOhhhjahMnubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjKhhhjahMnubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jIhjahMnhjHhhubj)}(hhh]h)}(h&Return the count of in-flight commandsh]h&Return the count of in-flight commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMnhjhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjahMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jDhhhjhNhNubj)}(hB**Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Hosth](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMrhj/ubj#)}(hhh]j()}(h0``struct Scsi_Host *shost`` Pointer to Scsi_Hosth](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjTh]hstruct Scsi_Host *shost}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjRubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMthjNubjJ)}(hhh]h)}(hPointer to Scsi_Hosth]hPointer to Scsi_Host}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMohjjubah}(h]h ]h"]h$]h&]uh1jIhjNubeh}(h]h ]h"]h$]h&]uh1j'hjihMthjKubah}(h]h ]h"]h$]h&]uh1j"hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_host_put (C function)c.scsi_host_puthNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h,void scsi_host_put (struct Scsi_Host *shost)h]jP)}(h+void scsi_host_put(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM}ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM}ubjy)}(h scsi_host_puth]j)}(h scsi_host_puth]h scsi_host_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM}ubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjsbc.scsi_host_putasbuh1hhjubjh)}(h h]h }(hj)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM}ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM}ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM}hjhhubj)}(hhh]h)}(hdec a Scsi_Host ref counth]hdec a Scsi_Host ref count}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM}hjkhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hJ**Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Host to dec.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubj#)}(hhh]j()}(h8``struct Scsi_Host *shost`` Pointer to Scsi_Host to dec.h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(hPointer to Scsi_Host to dec.h]hPointer to Scsi_Host to dec.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chM~hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_queue_work (C function)c.scsi_queue_workhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hGint scsi_queue_work (struct Scsi_Host *shost, struct work_struct *work)h]jP)}(hFint scsi_queue_work(struct Scsi_Host *shost, struct work_struct *work)h](j~)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hscsi_queue_workh]j)}(hscsi_queue_workh]hscsi_queue_work}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h3(struct Scsi_Host *shost, struct work_struct *work)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjFhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubjh)}(h h]h }(hjShhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}jj,sbc.scsi_queue_workasbuh1hhjBubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubj)}(hstruct work_struct *workh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h work_structh]h work_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_queue_workasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(h&Queue work to the Scsi_Host workqueue.h]h&Queue work to the Scsi_Host workqueue.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjQjjQjjjuh1jDhhhjhNhNubj)}(hX **Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Host. ``struct work_struct *work`` Work to queue for execution. **Description** Return value: 1 - work queued for execution 0 - work is already queued -EINVAL - work queue doesn't existh](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjUubj#)}(hhh](j()}(h2``struct Scsi_Host *shost`` Pointer to Scsi_Host. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjzh]hstruct Scsi_Host *shost}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjxubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjtubjJ)}(hhh]h)}(hPointer to Scsi_Host.h]hPointer to Scsi_Host.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjtubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjqubj()}(h:``struct work_struct *work`` Work to queue for execution. h](j.)}(h``struct work_struct *work``h]j4)}(hjh]hstruct work_struct *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(hWork to queue for execution.h]hWork to queue for execution.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjqubeh}(h]h ]h"]h$]h&]uh1j"hjUubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjUubj#)}(hhh]j()}(hiReturn value: 1 - work queued for execution 0 - work is already queued -EINVAL - work queue doesn't existh](j.)}(h Return value:h]h Return value:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(h[1 - work queued for execution 0 - work is already queued -EINVAL - work queue doesn't existh]h]1 - work queued for execution 0 - work is already queued -EINVAL - work queue doesn’t exist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_flush_work (C function)c.scsi_flush_workhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h.void scsi_flush_work (struct Scsi_Host *shost)h]jP)}(h-void scsi_flush_work(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjZhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjZhhhjlhMubjy)}(hscsi_flush_workh]j)}(hscsi_flush_workh]hscsi_flush_work}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjZhhhjlhMubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_flush_workasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jIhjlhMhjShhubj)}(hhh]h)}(hFlush a Scsi_Host's workqueue.h]h Flush a Scsi_Host’s workqueue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jDhhhjhNhNubj)}(hC**Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Host.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhj:ubj#)}(hhh]j()}(h1``struct Scsi_Host *shost`` Pointer to Scsi_Host.h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj_h]hstruct Scsi_Host *shost}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj]ubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjYubjJ)}(hhh]h)}(hPointer to Scsi_Host.h]hPointer to Scsi_Host.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjuubah}(h]h ]h"]h$]h&]uh1jIhjYubeh}(h]h ]h"]h$]h&]uh1j'hjthMhjVubah}(h]h ]h"]h$]h&]uh1j"hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@,scsi_host_complete_all_commands (C function)!c.scsi_host_complete_all_commandshNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h\void scsi_host_complete_all_commands (struct Scsi_Host *shost, enum scsi_host_status status)h]jP)}(h[void scsi_host_complete_all_commands(struct Scsi_Host *shost, enum scsi_host_status status)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hscsi_host_complete_all_commandsh]j)}(hscsi_host_complete_all_commandsh]hscsi_host_complete_all_commands}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h7(struct Scsi_Host *shost, enum scsi_host_status status)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsb!c.scsi_host_complete_all_commandsasbuh1hhjubjh)}(h h]h }(hj4hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(henum scsi_host_status statush](jV)}(hjR9h]henum}(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjdubjh)}(h h]h }(hjuhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdubh)}(hhh]j)}(hscsi_host_statush]hscsi_host_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j0!c.scsi_host_complete_all_commandsasbuh1hhjdubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdubj)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(hTerminate all running commandsh]hTerminate all running commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` Scsi Host on which commands should be terminated ``enum scsi_host_status status`` Status to be set for the terminated commands **Description** There is no protection against modification of the number of outstanding commands. It is the responsibility of the caller to ensure that concurrent I/O submission and/or completion is stopped when calling this function.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubj#)}(hhh](j()}(hM``struct Scsi_Host *shost`` Scsi Host on which commands should be terminated h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(h0Scsi Host on which commands should be terminatedh]h0Scsi Host on which commands should be terminated}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj2hMhjubj()}(hN``enum scsi_host_status status`` Status to be set for the terminated commands h](j.)}(h ``enum scsi_host_status status``h]j4)}(hjVh]henum scsi_host_status status}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjTubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjPubjJ)}(hhh]h)}(h,Status to be set for the terminated commandsh]h,Status to be set for the terminated commands}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j'hjkhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubh)}(hThere is no protection against modification of the number of outstanding commands. It is the responsibility of the caller to ensure that concurrent I/O submission and/or completion is stopped when calling this function.h]hThere is no protection against modification of the number of outstanding commands. It is the responsibility of the caller to ensure that concurrent I/O submission and/or completion is stopped when calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ scsi_host_busy_iter (C function)c.scsi_host_busy_iterhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hfvoid scsi_host_busy_iter (struct Scsi_Host *shost, bool (*fn)(struct scsi_cmnd *, void *), void *priv)h]jP)}(hcvoid scsi_host_busy_iter(struct Scsi_Host *shost, bool (*fn)(struct scsi_cmnd*, void*), void *priv)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hscsi_host_busy_iterh]j)}(hscsi_host_busy_iterh]hscsi_host_busy_iter}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(hK(struct Scsi_Host *shost, bool (*fn)(struct scsi_cmnd*, void*), void *priv)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]j)}jjsbc.scsi_host_busy_iterasbuh1hhjubjh)}(h h]h }(hjQhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h$bool (*fn)(struct scsi_cmnd*, void*)h](j~)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj-h]h(}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hfnh]hfn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubj )}(hjVh]h)}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj-h]h(}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jMc.scsi_host_busy_iterasbuh1hhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjh]h,}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjh)}(h h]h }(hj8hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj~)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubj )}(hj h]h*}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hjVh]h)}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h void *privh](j~)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjuubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjuubj)}(hprivh]hpriv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(hIterate over all busy commandsh]hIterate over all busy commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX:**Parameters** ``struct Scsi_Host *shost`` Pointer to Scsi_Host. ``bool (*fn)(struct scsi_cmnd *, void *)`` Function to call on each busy command ``void *priv`` Data pointer passed to **fn** **Description** If locking against concurrent command completions is required ithas to be provided by the callerh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubj#)}(hhh](j()}(h2``struct Scsi_Host *shost`` Pointer to Scsi_Host. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj h]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubjJ)}(hhh]h)}(hPointer to Scsi_Host.h]hPointer to Scsi_Host.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj"hMhjubj()}(hQ``bool (*fn)(struct scsi_cmnd *, void *)`` Function to call on each busy command h](j.)}(h*``bool (*fn)(struct scsi_cmnd *, void *)``h]j4)}(hjFh]h&bool (*fn)(struct scsi_cmnd *, void *)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhj@ubjJ)}(hhh]h)}(h%Function to call on each busy commandh]h%Function to call on each busy command}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jIhj@ubeh}(h]h ]h"]h$]h&]uh1j'hj[hMhjubj()}(h-``void *priv`` Data pointer passed to **fn** h](j.)}(h``void *priv``h]j4)}(hjh]h void *priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj}ubah}(h]h ]h"]h$]h&]uh1j-hU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjyubjJ)}(hhh]h)}(hData pointer passed to **fn**h](hData pointer passed to }(hjhhhNhNubj)}(h**fn**h]hfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjyubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubh)}(h`If locking against concurrent command completions is required ithas to be provided by the callerh]h`If locking against concurrent command completions is required ithas to be provided by the caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:216: ./drivers/scsi/hosts.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]drivers-scsi-hosts-cah ]h"]drivers/scsi/hosts.cah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hdrivers/scsi/scsi_common.ch]hdrivers/scsi/scsi_common.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hgeneral support functionsh]hgeneral support functions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_device_type (C function)c.scsi_device_typehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h-const char * scsi_device_type (unsigned type)h]jP)}(h+const char *scsi_device_type(unsigned type)h](jV)}(hj~Ph]hconst}(hj4hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj0hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK5ubjh)}(h h]h }(hjBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj0hhhjAhK5ubj~)}(hcharh]hchar}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj0hhhjAhK5ubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj0hhhjAhK5ubj )}(hj h]h*}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0hhhjAhK5ubjy)}(hscsi_device_typeh]j)}(hscsi_device_typeh]hscsi_device_type}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj0hhhjAhK5ubj)}(h(unsigned type)h]j)}(h unsigned typeh](j~)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhjAhK5ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj,hhhjAhK5ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jIhjAhK5hj)hhubj)}(hhh]h)}(h-Return 17-char string indicating device type.h]h-Return 17-char string indicating device type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK5hjhhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjAhK5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h:**Parameters** ``unsigned type`` type number to look uph](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK9hjubj#)}(hhh]j()}(h(``unsigned type`` type number to look uph](j.)}(h``unsigned type``h]j4)}(hj h]h unsigned type}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK;hjubjJ)}(hhh]h)}(htype number to look uph]htype number to look up}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK6hj6ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj5hK;hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsilun_to_int (C function)c.scsilun_to_inthNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h-u64 scsilun_to_int (struct scsi_lun *scsilun)h]jP)}(h,u64 scsilun_to_int(struct scsi_lun *scsilun)h](h)}(hhh]j)}(hu64h]hu64}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jscsilun_to_intsbc.scsilun_to_intasbuh1hhjvhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKoubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvhhhjhKoubjy)}(hscsilun_to_inth]j)}(hjh]hscsilun_to_int}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjvhhhjhKoubj)}(h(struct scsi_lun *scsilun)h]j)}(hstruct scsi_lun *scsilunh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_lunh]hscsi_lun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsilun_to_intasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hscsilunh]hscsilun}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjvhhhjhKoubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjrhhhjhKoubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1jIhjhKohjohhubj)}(hhh]h)}(hconvert a scsi_lun to an inth]hconvert a scsi_lun to an int}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKohjJhhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhKoubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct scsi_lun *scsilun`` struct scsi_lun to be converted. **Description** Convert **scsilun** from a struct scsi_lun to a four-byte host byte-ordered integer, and return the result. The caller must check for truncation before using this function. **Notes** For a description of the LUN format, post SCSI-3 see the SCSI Architecture Model, for SCSI-3 see the SCSI Controller Commands. Given a struct scsi_lun of: d2 04 0b 03 00 00 00 00, this function returns the integer: 0x0b03d204 This encoding will return a standard integer LUN for LUNs smaller than 256, which typically use a single level LUN structure with addressing method 0.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKshjiubj#)}(hhh]j()}(h>``struct scsi_lun *scsilun`` struct scsi_lun to be converted. h](j.)}(h``struct scsi_lun *scsilun``h]j4)}(hjh]hstruct scsi_lun *scsilun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKphjubjJ)}(hhh]h)}(h struct scsi_lun to be converted.h]h struct scsi_lun to be converted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKphjubah}(h]h ]h"]h$]h&]uh1j"hjiubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKrhjiubj`)}(hConvert **scsilun** from a struct scsi_lun to a four-byte host byte-ordered integer, and return the result. The caller must check for truncation before using this function. h]h)}(hConvert **scsilun** from a struct scsi_lun to a four-byte host byte-ordered integer, and return the result. The caller must check for truncation before using this function.h](hConvert }(hjhhhNhNubj)}(h **scsilun**h]hscsilun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh from a struct scsi_lun to a four-byte host byte-ordered integer, and return the result. The caller must check for truncation before using this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKrhjubah}(h]h ]h"]h$]h&]uh1j_hjhKrhjiubh)}(h **Notes**h]j)}(hj h]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKvhjiubj`)}(hXzFor a description of the LUN format, post SCSI-3 see the SCSI Architecture Model, for SCSI-3 see the SCSI Controller Commands. Given a struct scsi_lun of: d2 04 0b 03 00 00 00 00, this function returns the integer: 0x0b03d204 This encoding will return a standard integer LUN for LUNs smaller than 256, which typically use a single level LUN structure with addressing method 0.h](h)}(h~For a description of the LUN format, post SCSI-3 see the SCSI Architecture Model, for SCSI-3 see the SCSI Controller Commands.h]h~For a description of the LUN format, post SCSI-3 see the SCSI Architecture Model, for SCSI-3 see the SCSI Controller Commands.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKwhj"ubh)}(hbGiven a struct scsi_lun of: d2 04 0b 03 00 00 00 00, this function returns the integer: 0x0b03d204h]hbGiven a struct scsi_lun of: d2 04 0b 03 00 00 00 00, this function returns the integer: 0x0b03d204}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKzhj"ubh)}(hThis encoding will return a standard integer LUN for LUNs smaller than 256, which typically use a single level LUN structure with addressing method 0.h]hThis encoding will return a standard integer LUN for LUNs smaller than 256, which typically use a single level LUN structure with addressing method 0.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chK}hj"ubeh}(h]h ]h"]h$]h&]uh1j_hj4hKwhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@int_to_scsilun (C function)c.int_to_scsilunhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h7void int_to_scsilun (u64 lun, struct scsi_lun *scsilun)h]jP)}(h6void int_to_scsilun(u64 lun, struct scsi_lun *scsilun)h](j~)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjuhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuhhhjhKubjy)}(hint_to_scsilunh]j)}(hint_to_scsilunh]hint_to_scsilun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjuhhhjhKubj)}(h#(u64 lun, struct scsi_lun *scsilun)h](j)}(hu64 lunh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.int_to_scsilunasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hlunh]hlun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_lun *scsilunh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_lunh]hscsi_lun}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.int_to_scsilunasbuh1hhjubjh)}(h h]h }(hj<hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hscsilunh]hscsilun}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjuhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjqhhhjhKubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjnhhubj)}(hhh]h)}(hreverts an int into a scsi_lunh]hreverts an int into a scsi_lun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj~hhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``u64 lun`` integer to be reverted ``struct scsi_lun *scsilun`` struct scsi_lun to be set. **Description** Reverts the functionality of the scsilun_to_int, which packed an 8-byte lun value into an int. This routine unpacks the int back into the lun value. **Notes** Given an integer : 0x0b03d204, this function returns a struct scsi_lun of: d2 04 0b 03 00 00 00 00h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubj#)}(hhh](j()}(h#``u64 lun`` integer to be reverted h](j.)}(h ``u64 lun``h]j4)}(hjh]hu64 lun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubjJ)}(hhh]h)}(hinteger to be revertedh]hinteger to be reverted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubj()}(h8``struct scsi_lun *scsilun`` struct scsi_lun to be set. h](j.)}(h``struct scsi_lun *scsilun``h]j4)}(hjh]hstruct scsi_lun *scsilun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubjJ)}(hhh]h)}(hstruct scsi_lun to be set.h]hstruct scsi_lun to be set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubj`)}(hReverts the functionality of the scsilun_to_int, which packed an 8-byte lun value into an int. This routine unpacks the int back into the lun value. h]h)}(hReverts the functionality of the scsilun_to_int, which packed an 8-byte lun value into an int. This routine unpacks the int back into the lun value.h]hReverts the functionality of the scsilun_to_int, which packed an 8-byte lun value into an int. This routine unpacks the int back into the lun value.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjLubah}(h]h ]h"]h$]h&]uh1j_hj^hKhjubh)}(h **Notes**h]j)}(hjgh]hNotes}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubj`)}(hbGiven an integer : 0x0b03d204, this function returns a struct scsi_lun of: d2 04 0b 03 00 00 00 00h]h)}(hbGiven an integer : 0x0b03d204, this function returns a struct scsi_lun of: d2 04 0b 03 00 00 00 00h]hbGiven an integer : 0x0b03d204, this function returns a struct scsi_lun of: d2 04 0b 03 00 00 00 00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj}ubah}(h]h ]h"]h$]h&]uh1j_hjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_normalize_sense (C function)c.scsi_normalize_sensehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h\bool scsi_normalize_sense (const u8 *sense_buffer, int sb_len, struct scsi_sense_hdr *sshdr)h]jP)}(h[bool scsi_normalize_sense(const u8 *sense_buffer, int sb_len, struct scsi_sense_hdr *sshdr)h](j~)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubjy)}(hscsi_normalize_senseh]j)}(hscsi_normalize_senseh]hscsi_normalize_sense}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(hB(const u8 *sense_buffer, int sb_len, struct scsi_sense_hdr *sshdr)h](j)}(hconst u8 *sense_bufferh](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_normalize_senseasbuh1hhjubjh)}(h h]h }(hj0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h sense_bufferh]h sense_buffer}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int sb_lenh](j~)}(hinth]hint}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj`ubjh)}(h h]h }(hjrhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj`ubj)}(hsb_lenh]hsb_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hstruct scsi_sense_hdr *sshdrh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_sense_hdrh]hscsi_sense_hdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,c.scsi_normalize_senseasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsshdrh]hsshdr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(h_normalize main elements from either fixed or descriptor sense data format into a common format.h]h_normalize main elements from either fixed or descriptor sense data format into a common format.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jDhhhjhNhNubj)}(hXh**Parameters** ``const u8 *sense_buffer`` byte array containing sense data returned by device ``int sb_len`` number of valid bytes in sense_buffer ``struct scsi_sense_hdr *sshdr`` pointer to instance of structure that common elements are written to. **Notes** The "main elements" from sense data are: response_code, sense_key, asc, ascq and additional_length (only for descriptor format). Typically this function can be called after a device has responded to a SCSI command with the CHECK_CONDITION status. Return value: true if valid sense data information found, else false;h](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj6ubj#)}(hhh](j()}(hO``const u8 *sense_buffer`` byte array containing sense data returned by device h](j.)}(h``const u8 *sense_buffer``h]j4)}(hj[h]hconst u8 *sense_buffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjYubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjUubjJ)}(hhh]h)}(h3byte array containing sense data returned by deviceh]h3byte array containing sense data returned by device}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjqubah}(h]h ]h"]h$]h&]uh1jIhjUubeh}(h]h ]h"]h$]h&]uh1j'hjphKhjRubj()}(h5``int sb_len`` number of valid bytes in sense_buffer h](j.)}(h``int sb_len``h]j4)}(hjh]h int sb_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubjJ)}(hhh]h)}(h%number of valid bytes in sense_bufferh]h%number of valid bytes in sense_buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjRubj()}(hg``struct scsi_sense_hdr *sshdr`` pointer to instance of structure that common elements are written to. h](j.)}(h ``struct scsi_sense_hdr *sshdr``h]j4)}(hjh]hstruct scsi_sense_hdr *sshdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubjJ)}(hhh]h)}(hEpointer to instance of structure that common elements are written to.h]hEpointer to instance of structure that common elements are written to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjRubeh}(h]h ]h"]h$]h&]uh1j"hj6ubh)}(h **Notes**h]j)}(hj h]hNotes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj6ubj`)}(hThe "main elements" from sense data are: response_code, sense_key, asc, ascq and additional_length (only for descriptor format). Typically this function can be called after a device has responded to a SCSI command with the CHECK_CONDITION status. h](h)}(hThe "main elements" from sense data are: response_code, sense_key, asc, ascq and additional_length (only for descriptor format).h]hThe “main elements” from sense data are: response_code, sense_key, asc, ascq and additional_length (only for descriptor format).}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubh)}(huTypically this function can be called after a device has responded to a SCSI command with the CHECK_CONDITION status.h]huTypically this function can be called after a device has responded to a SCSI command with the CHECK_CONDITION status.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubeh}(h]h ]h"]h$]h&]uh1j_hj1hKhj6ubj#)}(hhh]j()}(hEReturn value: true if valid sense data information found, else false;h](j.)}(h Return value:h]h Return value:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjJubjJ)}(hhh]h)}(h7true if valid sense data information found, else false;h]h7true if valid sense data information found, else false;}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj]ubah}(h]h ]h"]h$]h&]uh1jIhjJubeh}(h]h ]h"]h$]h&]uh1j'hj\hKhjGubah}(h]h ]h"]h$]h&]uh1j"hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!scsi_sense_desc_find (C function)c.scsi_sense_desc_findhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hTconst u8 * scsi_sense_desc_find (const u8 * sense_buffer, int sb_len, int desc_type)h]jP)}(hQconst u8 *scsi_sense_desc_find(const u8 *sense_buffer, int sb_len, int desc_type)h](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jscsi_sense_desc_findsbc.scsi_sense_desc_findasbuh1hhjhhhjhKubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubjy)}(hscsi_sense_desc_findh]j)}(hjh]hscsi_sense_desc_find}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhKubj)}(h3(const u8 *sense_buffer, int sb_len, int desc_type)h](j)}(hconst u8 *sense_bufferh](jV)}(hj~Ph]hconst}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hu8h]hu8}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]jc.scsi_sense_desc_findasbuh1hhjubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h sense_bufferh]h sense_buffer}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int sb_lenh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hsb_lenh]hsb_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int desc_typeh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(h desc_typeh]h desc_type}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhKhjhhubj)}(hhh]h)}(hCsearch for a given descriptor type in descriptor sense data format.h]hCsearch for a given descriptor type in descriptor sense data format.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hXr**Parameters** ``const u8 * sense_buffer`` byte array of descriptor format sense data ``int sb_len`` number of valid bytes in sense_buffer ``int desc_type`` value of descriptor type to find (e.g. 0 -> information) **Notes** only valid when sense data is in descriptor format Return value: pointer to start of (first) descriptor if found else NULLh](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj"ubj#)}(hhh](j()}(hG``const u8 * sense_buffer`` byte array of descriptor format sense data h](j.)}(h``const u8 * sense_buffer``h]j4)}(hjGh]hconst u8 * sense_buffer}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjEubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjAubjJ)}(hhh]h)}(h*byte array of descriptor format sense datah]h*byte array of descriptor format sense data}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j'hj\hKhj>ubj()}(h5``int sb_len`` number of valid bytes in sense_buffer h](j.)}(h``int sb_len``h]j4)}(hjh]h int sb_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj~ubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjzubjJ)}(hhh]h)}(h%number of valid bytes in sense_bufferh]h%number of valid bytes in sense_buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j'hjhKhj>ubj()}(hK``int desc_type`` value of descriptor type to find (e.g. 0 -> information) h](j.)}(h``int desc_type``h]j4)}(hjh]h int desc_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubjJ)}(hhh]h)}(h8value of descriptor type to find (e.g. 0 -> information)h]h8value of descriptor type to find (e.g. 0 -> information)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj"ubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj"ubj`)}(h3only valid when sense data is in descriptor format h]h)}(h2only valid when sense data is in descriptor formath]h2only valid when sense data is in descriptor format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj ubah}(h]h ]h"]h$]h&]uh1j_hjhKhj"ubj#)}(hhh]j()}(hGReturn value: pointer to start of (first) descriptor if found else NULLh](j.)}(h Return value:h]h Return value:}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj'ubjJ)}(hhh]h)}(h9pointer to start of (first) descriptor if found else NULLh]h9pointer to start of (first) descriptor if found else NULL}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chKhj:ubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j'hj9hKhj$ubah}(h]h ]h"]h$]h&]uh1j"hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@$scsi_build_sense_buffer (C function)c.scsi_build_sense_bufferhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hIvoid scsi_build_sense_buffer (int desc, u8 *buf, u8 key, u8 asc, u8 ascq)h]jP)}(hHvoid scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq)h](j~)}(hvoidh]hvoid}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjzhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjzhhhjhMubjy)}(hscsi_build_sense_bufferh]j)}(hscsi_build_sense_bufferh]hscsi_build_sense_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjzhhhjhMubj)}(h,(int desc, u8 *buf, u8 key, u8 asc, u8 ascq)h](j)}(hint desch](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_build_sense_bufferasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 keyh](h)}(hhh]j)}(hu8h]hu8}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]jc.scsi_build_sense_bufferasbuh1hhjCubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjCubj)}(hkeyh]hkey}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 asch](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_build_sense_bufferasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hasch]hasc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 ascqh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_build_sense_bufferasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hascqh]hascq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjzhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjvhhhjhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjshhubj)}(hhh]h)}(hbuild sense data in a bufferh]hbuild sense data in a buffer}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1jDhhhjhNhNubj)}(h**Parameters** ``int desc`` Sense format (non-zero == descriptor format, 0 == fixed format) ``u8 *buf`` Where to build sense data ``u8 key`` Sense key ``u8 asc`` Additional sense code ``u8 ascq`` Additional sense code qualifierh](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjLubj#)}(hhh](j()}(hM``int desc`` Sense format (non-zero == descriptor format, 0 == fixed format) h](j.)}(h ``int desc``h]j4)}(hjqh]hint desc}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjoubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjkubjJ)}(hhh]h)}(h?Sense format (non-zero == descriptor format, 0 == fixed format)h]h?Sense format (non-zero == descriptor format, 0 == fixed format)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjkubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjhubj()}(h&``u8 *buf`` Where to build sense data h](j.)}(h ``u8 *buf``h]j4)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjubjJ)}(hhh]h)}(hWhere to build sense datah]hWhere to build sense data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjhubj()}(h``u8 key`` Sense key h](j.)}(h ``u8 key``h]j4)}(hjh]hu8 key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjubjJ)}(hhh]h)}(h Sense keyh]h Sense key}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjhubj()}(h!``u8 asc`` Additional sense code h](j.)}(h ``u8 asc``h]j4)}(hjh]hu8 asc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjubjJ)}(hhh]h)}(hAdditional sense codeh]hAdditional sense code}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj2hMhjhubj()}(h+``u8 ascq`` Additional sense code qualifierh](j.)}(h ``u8 ascq``h]j4)}(hjVh]hu8 ascq}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjTubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjPubjJ)}(hhh]h)}(hAdditional sense code qualifierh]hAdditional sense code qualifier}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMhjlubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j'hjkhMhjhubeh}(h]h ]h"]h$]h&]uh1j"hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@'scsi_set_sense_information (C function)c.scsi_set_sense_informationhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h?int scsi_set_sense_information (u8 *buf, int buf_len, u64 info)h]jP)}(h>int scsi_set_sense_information(u8 *buf, int buf_len, u64 info)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM/ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM/ubjy)}(hscsi_set_sense_informationh]j)}(hscsi_set_sense_informationh]hscsi_set_sense_information}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM/ubj)}(h (u8 *buf, int buf_len, u64 info)h](j)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.scsi_set_sense_informationasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int buf_lenh](j~)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubjh)}(h h]h }(hjRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj@ubj)}(hbuf_lenh]hbuf_len}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu64 infoh](h)}(hhh]j)}(hu64h]hu64}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j c.scsi_set_sense_informationasbuh1hhjuubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjuubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM/ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM/hjhhubj)}(hhh]h)}(h:set the information field in a formatted sense data bufferh]h:set the information field in a formatted sense data buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h**Parameters** ``u8 *buf`` Where to build sense data ``int buf_len`` buffer length ``u64 info`` 64-bit information value to be set **Description** Return value: 0 on success or -EINVAL for invalid sense buffer lengthh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM3hjubj#)}(hhh](j()}(h&``u8 *buf`` Where to build sense data h](j.)}(h ``u8 *buf``h]j4)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM1hj ubjJ)}(hhh]h)}(hWhere to build sense datah]hWhere to build sense data}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM1hj)ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj(hM1hj ubj()}(h``int buf_len`` buffer length h](j.)}(h``int buf_len``h]j4)}(hjLh]h int buf_len}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjJubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM2hjFubjJ)}(hhh]h)}(h buffer lengthh]h buffer length}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahM2hjbubah}(h]h ]h"]h$]h&]uh1jIhjFubeh}(h]h ]h"]h$]h&]uh1j'hjahM2hj ubj()}(h0``u64 info`` 64-bit information value to be set h](j.)}(h ``u64 info``h]j4)}(hjh]hu64 info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM3hjubjJ)}(hhh]h)}(h"64-bit information value to be seth]h"64-bit information value to be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM3hj ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM5hjubj#)}(hhh]j()}(hEReturn value: 0 on success or -EINVAL for invalid sense buffer lengthh](j.)}(h Return value:h]h Return value:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM4hjubjJ)}(hhh]h)}(h70 on success or -EINVAL for invalid sense buffer lengthh]h70 on success or -EINVAL for invalid sense buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM5hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM4hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@)scsi_set_sense_field_pointer (C function)c.scsi_set_sense_field_pointerhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hOint scsi_set_sense_field_pointer (u8 *buf, int buf_len, u16 fp, u8 bp, bool cd)h]jP)}(hNint scsi_set_sense_field_pointer(u8 *buf, int buf_len, u16 fp, u8 bp, bool cd)h](j~)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj,hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM_ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj,hhhj>hM_ubjy)}(hscsi_set_sense_field_pointerh]j)}(hscsi_set_sense_field_pointerh]hscsi_set_sense_field_pointer}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj,hhhj>hM_ubj)}(h.(u8 *buf, int buf_len, u16 fp, u8 bp, bool cd)h](j)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrmodnameN classnameNjj)}j]j)}jjSsbc.scsi_set_sense_field_pointerasbuh1hhjiubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjiubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjiubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h int buf_lenh](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hbuf_lenh]hbuf_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hu16 fph](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.scsi_set_sense_field_pointerasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hfph]hfp}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hu8 bph](h)}(hhh]j)}(hu8h]hu8}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]jc.scsi_set_sense_field_pointerasbuh1hhj=ubjh)}(h h]h }(hjbhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj=ubj)}(hbph]hbp}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(hbool cdh](j~)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNuba.h}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hcdh]hcd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj>hM_ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj(hhhj>hM_ubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jIhj>hM_hj%hhubj)}(hhh]h)}(hUset the field pointer sense key specific information in a formatted sense data bufferh]hUset the field pointer sense key specific information in a formatted sense data buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chM_hjhhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hM_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``u8 *buf`` Where to build sense data ``int buf_len`` buffer length ``u16 fp`` field pointer to be set ``u8 bp`` bit pointer to be set ``bool cd`` command/data bit **Description** Return value: 0 on success or -EINVAL for invalid sense buffer lengthh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMchjubj#)}(hhh](j()}(h&``u8 *buf`` Where to build sense data h](j.)}(h ``u8 *buf``h]j4)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMahj ubjJ)}(hhh]h)}(hWhere to build sense datah]hWhere to build sense data}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMahj%ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj$hMahjubj()}(h``int buf_len`` buffer length h](j.)}(h``int buf_len``h]j4)}(hjHh]h int buf_len}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjFubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMbhjBubjJ)}(hhh]h)}(h buffer lengthh]h buffer length}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMbhj^ubah}(h]h ]h"]h$]h&]uh1jIhjBubeh}(h]h ]h"]h$]h&]uh1j'hj]hMbhjubj()}(h#``u16 fp`` field pointer to be set h](j.)}(h ``u16 fp``h]j4)}(hjh]hu16 fp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMchj{ubjJ)}(hhh]h)}(hfield pointer to be seth]hfield pointer to be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1jIhj{ubeh}(h]h ]h"]h$]h&]uh1j'hjhMchjubj()}(h ``u8 bp`` bit pointer to be set h](j.)}(h ``u8 bp``h]j4)}(hjh]hu8 bp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMdhjubjJ)}(hhh]h)}(hbit pointer to be seth]hbit pointer to be set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMdhjubj()}(h``bool cd`` command/data bit h](j.)}(h ``bool cd``h]j4)}(hjh]hbool cd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMehjubjJ)}(hhh]h)}(hcommand/data bith]hcommand/data bit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMehjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMghjubj#)}(hhh]j()}(hEReturn value: 0 on success or -EINVAL for invalid sense buffer lengthh](j.)}(h Return value:h]h Return value:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j-h[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMfhjGubjJ)}(hhh]h)}(h70 on success or -EINVAL for invalid sense buffer lengthh]h70 on success or -EINVAL for invalid sense buffer length}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:224: ./drivers/scsi/scsi_common.chMghjZubah}(h]h ]h"]h$]h&]uh1jIhjGubeh}(h]h ]h"]h$]h&]uh1j'hjYhMfhjDubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]drivers-scsi-scsi-common-cah ]h"]drivers/scsi/scsi_common.cah$]h&]uh1hhjhhhhhKubeh}(h]scsi-midlayer-implementationah ]h"]scsi midlayer implementationah$]h&]uh1hhjhhhhhKXubh)}(hhh](h)}(hTransport classesh]hTransport classes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hxTransport classes are service libraries for drivers in the SCSI lower layer, which expose transport attributes in sysfs.h]hxTransport classes are service libraries for drivers in the SCSI lower layer, which expose transport attributes in sysfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(hFibre Channel transporth]hFibre Channel transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hYThe file drivers/scsi/scsi_transport_fc.c defines transport attributes for Fibre Channel.h]hYThe file drivers/scsi/scsi_transport_fc.c defines transport attributes for Fibre Channel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ fc_get_event_number (C function)c.fc_get_event_numberhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hu32 fc_get_event_number (void)h]jP)}(hu32 fc_get_event_number(void)h](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jfc_get_event_numbersbc.fc_get_event_numberasbuh1hhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hfc_get_event_numberh]j)}(hj h]hfc_get_event_number}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h(void)h]j)}(hvoidh]j~)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj:ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj6ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(h*Obtain the next sequential FC event numberh]h*Obtain the next sequential FC event number}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Notes** We could have inlined this, but it would have required fc_event_seq to be exposed. For now, live with the subroutine call. Atomic used to avoid lock/unlock...h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjubj#)}(hhh]j()}(h``void`` no arguments h](j.)}(h``void``h]j4)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chKhjubjJ)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chKhjubj`)}(hWe could have inlined this, but it would have required fc_event_seq to be exposed. For now, live with the subroutine call. Atomic used to avoid lock/unlock...h]h)}(hWe could have inlined this, but it would have required fc_event_seq to be exposed. For now, live with the subroutine call. Atomic used to avoid lock/unlock...h]hWe could have inlined this, but it would have required fc_event_seq to be exposed. For now, live with the subroutine call. Atomic used to avoid lock/unlock...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjubah}(h]h ]h"]h$]h&]uh1j_hj hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"fc_host_post_fc_event (C function)c.fc_host_post_fc_eventhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hvoid fc_host_post_fc_event (struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 data_len, char *data_buf, u64 vendor_id)h]jP)}(hvoid fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 data_len, char *data_buf, u64 vendor_id)h](j~)}(hvoidh]hvoid}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj/ hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMubjh)}(h h]h }(hjB hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj/ hhhjA hMubjy)}(hfc_host_post_fc_eventh]j)}(hfc_host_post_fc_eventh]hfc_host_post_fc_event}(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjP ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj/ hhhjA hMubj)}(h|(struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 data_len, char *data_buf, u64 vendor_id)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjp hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjl ubjh)}(h h]h }(hj} hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjl ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjV sbc.fc_host_post_fc_eventasbuh1hhjl ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjl ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjl ubj)}(hshosth]hshost}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjl ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubj)}(hu32 event_numberh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.fc_host_post_fc_eventasbuh1hhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj)}(h event_numberh]h event_number}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubj)}(h"enum fc_host_event_code event_codeh](jV)}(hjR9h]henum}(hj* hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj& ubjh)}(h h]h }(hj7 hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj& ubh)}(hhh]j)}(hfc_host_event_codeh]hfc_host_event_code}(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjE ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJ modnameN classnameNjj)}j]j c.fc_host_post_fc_eventasbuh1hhj& ubjh)}(h h]h }(hjf hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj& ubj)}(h event_codeh]h event_code}(hjt hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj& ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubj)}(h u32 data_lenh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.fc_host_post_fc_eventasbuh1hhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj)}(hdata_lenh]hdata_len}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubj)}(hchar *data_bufh](j~)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hdata_bufh]hdata_buf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubj)}(h u64 vendor_idh](h)}(hhh]j)}(hu64h]hu64}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.fc_host_post_fc_eventasbuh1hhj ubjh)}(h h]h }(hj8 hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj)}(h vendor_idh]h vendor_id}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjh ubeh}(h]h ]h"]h$]h&]jjuh1jhj/ hhhjA hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj+ hhhjA hMubah}(h]j& ah ](jjeh"]h$]h&]jj)jhuh1jIhjA hMhj( hhubj)}(hhh]h)}(h9routine to do the work of posting an event on an fc_host.h]h9routine to do the work of posting an event on an fc_host.}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjm hhubah}(h]h ]h"]h$]h&]uh1jhj( hhhjA hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` host the event occurred on ``u32 event_number`` fc event number obtained from get_fc_event_number() ``enum fc_host_event_code event_code`` fc_host event being posted ``u32 data_len`` amount, in bytes, of event data ``char *data_buf`` pointer to event data ``u64 vendor_id`` value for Vendor id **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj ubj#)}(hhh](j()}(h7``struct Scsi_Host *shost`` host the event occurred on h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj h]hstruct Scsi_Host *shost}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj ubjJ)}(hhh]h)}(hhost the event occurred onh]hhost the event occurred on}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hMhj ubj()}(hI``u32 event_number`` fc event number obtained from get_fc_event_number() h](j.)}(h``u32 event_number``h]j4)}(hj h]hu32 event_number}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj ubjJ)}(hhh]h)}(h3fc event number obtained from get_fc_event_number()h]h3fc event number obtained from get_fc_event_number()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hMhj ubj()}(hB``enum fc_host_event_code event_code`` fc_host event being posted h](j.)}(h&``enum fc_host_event_code event_code``h]j4)}(hj# h]h"enum fc_host_event_code event_code}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj! ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj ubjJ)}(hhh]h)}(hfc_host event being postedh]hfc_host event being posted}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8 hMhj9 ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj8 hMhj ubj()}(h1``u32 data_len`` amount, in bytes, of event data h](j.)}(h``u32 data_len``h]j4)}(hj\ h]h u32 data_len}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjZ ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjV ubjJ)}(hhh]h)}(hamount, in bytes, of event datah]hamount, in bytes, of event data}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq hMhjr ubah}(h]h ]h"]h$]h&]uh1jIhjV ubeh}(h]h ]h"]h$]h&]uh1j'hjq hMhj ubj()}(h)``char *data_buf`` pointer to event data h](j.)}(h``char *data_buf``h]j4)}(hj h]hchar *data_buf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj ubjJ)}(hhh]h)}(hpointer to event datah]hpointer to event data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hM hj ubj()}(h&``u64 vendor_id`` value for Vendor id h](j.)}(h``u64 vendor_id``h]j4)}(hj h]h u64 vendor_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj ubjJ)}(hhh]h)}(hvalue for Vendor idh]hvalue for Vendor id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jIhj ubeh}(h]h ]h"]h$]h&]uh1j'hj hM hj ubeh}(h]h ]h"]h$]h&]uh1j"hj ubh)}(h **Notes**h]j)}(hj h]hNotes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj! h]h0This routine assumes no locks are held on entry.}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj ubah}(h]h ]h"]h$]h&]uh1j_hj0 hM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_host_post_event (C function)c.fc_host_post_eventhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hwvoid fc_host_post_event (struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 event_data)h]jP)}(hvvoid fc_host_post_event(struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 event_data)h](j~)}(hvoidh]hvoid}(hjW hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjS hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMQubjh)}(h h]h }(hjf hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjS hhhje hMQubjy)}(hfc_host_post_eventh]j)}(hfc_host_post_eventh]hfc_host_post_event}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjt ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjS hhhje hMQubj)}(h_(struct Scsi_Host *shost, u32 event_number, enum fc_host_event_code event_code, u32 event_data)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjz sbc.fc_host_post_eventasbuh1hhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hshosth]hshost}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu32 event_numberh](h)}(hhh]j)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.fc_host_post_eventasbuh1hhjubjh)}(h h]h }(hj'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(h event_numberh]h event_number}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(h"enum fc_host_event_code event_codeh](jV)}(hjR9h]henum}(hjNhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjJubjh)}(h h]h }(hj[hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJubh)}(hhh]j)}(hfc_host_event_codeh]hfc_host_event_code}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j c.fc_host_post_eventasbuh1hhjJubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJubj)}(h event_codeh]h event_code}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubj)}(hu32 event_datah](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.fc_host_post_eventasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(h event_datah]h event_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhjS hhhje hMQubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjO hhhje hMQubah}(h]jJ ah ](jjeh"]h$]h&]jj)jhuh1jIhje hMQhjL hhubj)}(hhh]h)}(h%called to post an even on an fc_host.h]h%called to post an even on an fc_host.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jhjL hhhje hMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jDhhhjhNhNubj)}(hX[**Parameters** ``struct Scsi_Host *shost`` host the event occurred on ``u32 event_number`` fc event number obtained from get_fc_event_number() ``enum fc_host_event_code event_code`` fc_host event being posted ``u32 event_data`` 32bits of data for the event being posted **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMUhj&ubj#)}(hhh](j()}(h7``struct Scsi_Host *shost`` host the event occurred on h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjKh]hstruct Scsi_Host *shost}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjIubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMRhjEubjJ)}(hhh]h)}(hhost the event occurred onh]hhost the event occurred on}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMRhjaubah}(h]h ]h"]h$]h&]uh1jIhjEubeh}(h]h ]h"]h$]h&]uh1j'hj`hMRhjBubj()}(hI``u32 event_number`` fc event number obtained from get_fc_event_number() h](j.)}(h``u32 event_number``h]j4)}(hjh]hu32 event_number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMShj~ubjJ)}(hhh]h)}(h3fc event number obtained from get_fc_event_number()h]h3fc event number obtained from get_fc_event_number()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j'hjhMShjBubj()}(hB``enum fc_host_event_code event_code`` fc_host event being posted h](j.)}(h&``enum fc_host_event_code event_code``h]j4)}(hjh]h"enum fc_host_event_code event_code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMThjubjJ)}(hhh]h)}(hfc_host event being postedh]hfc_host event being posted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMThjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMThjBubj()}(h=``u32 event_data`` 32bits of data for the event being posted h](j.)}(h``u32 event_data``h]j4)}(hjh]hu32 event_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMUhjubjJ)}(hhh]h)}(h)32bits of data for the event being postedh]h)32bits of data for the event being posted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMUhj ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj hMUhjBubeh}(h]h ]h"]h$]h&]uh1j"hj&ubh)}(h **Notes**h]j)}(hj1h]hNotes}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMWhj&ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjIh]h0This routine assumes no locks are held on entry.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMWhjGubah}(h]h ]h"]h$]h&]uh1j_hjXhMWhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&fc_host_post_vendor_event (C function)c.fc_host_post_vendor_eventhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hxvoid fc_host_post_vendor_event (struct Scsi_Host *shost, u32 event_number, u32 data_len, char * data_buf, u64 vendor_id)h]jP)}(hvvoid fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, u32 data_len, char *data_buf, u64 vendor_id)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMeubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{hhhjhMeubjy)}(hfc_host_post_vendor_eventh]j)}(hfc_host_post_vendor_eventh]hfc_host_post_vendor_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj{hhhjhMeubj)}(hX(struct Scsi_Host *shost, u32 event_number, u32 data_len, char *data_buf, u64 vendor_id)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.fc_host_post_vendor_eventasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu32 event_numberh](h)}(hhh]j)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jc.fc_host_post_vendor_eventasbuh1hhj*ubjh)}(h h]h }(hjOhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj*ubj)}(h event_numberh]h event_number}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 data_lenh](h)}(hhh]j)}(hu32h]hu32}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]jc.fc_host_post_vendor_eventasbuh1hhjrubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjrubj)}(hdata_lenh]hdata_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hchar *data_bufh](j~)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdata_bufh]hdata_buf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u64 vendor_idh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_host_post_vendor_eventasbuh1hhjubjh)}(h h]h }(hj!hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(h vendor_idh]h vendor_id}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhjhMeubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjwhhhjhMeubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1jIhjhMehjthhubj)}(hhh]h)}(h2called to post a vendor unique event on an fc_hosth]h2called to post a vendor unique event on an fc_host}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMehjVhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhMeubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jDhhhjhNhNubj)}(hXf**Parameters** ``struct Scsi_Host *shost`` host the event occurred on ``u32 event_number`` fc event number obtained from get_fc_event_number() ``u32 data_len`` amount, in bytes, of vendor unique data ``char * data_buf`` pointer to vendor unique data ``u64 vendor_id`` Vendor id **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMihjuubj#)}(hhh](j()}(h7``struct Scsi_Host *shost`` host the event occurred on h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMghjubjJ)}(hhh]h)}(hhost the event occurred onh]hhost the event occurred on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMghjubj()}(hI``u32 event_number`` fc event number obtained from get_fc_event_number() h](j.)}(h``u32 event_number``h]j4)}(hjh]hu32 event_number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhhjubjJ)}(hhh]h)}(h3fc event number obtained from get_fc_event_number()h]h3fc event number obtained from get_fc_event_number()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhhjubj()}(h9``u32 data_len`` amount, in bytes, of vendor unique data h](j.)}(h``u32 data_len``h]j4)}(hj h]h u32 data_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMihjubjJ)}(hhh]h)}(h'amount, in bytes, of vendor unique datah]h'amount, in bytes, of vendor unique data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMihj"ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj!hMihjubj()}(h2``char * data_buf`` pointer to vendor unique data h](j.)}(h``char * data_buf``h]j4)}(hjEh]hchar * data_buf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjCubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMjhj?ubjJ)}(hhh]h)}(hpointer to vendor unique datah]hpointer to vendor unique data}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMjhj[ubah}(h]h ]h"]h$]h&]uh1jIhj?ubeh}(h]h ]h"]h$]h&]uh1j'hjZhMjhjubj()}(h``u64 vendor_id`` Vendor id h](j.)}(h``u64 vendor_id``h]j4)}(hj~h]h u64 vendor_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMkhjxubjJ)}(hhh]h)}(h Vendor idh]h Vendor id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jIhjxubeh}(h]h ]h"]h$]h&]uh1j'hjhMkhjubeh}(h]h ]h"]h$]h&]uh1j"hjuubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMmhjuubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjh]h0This routine assumes no locks are held on entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMmhjubah}(h]h ]h"]h$]h&]uh1j_hjhMmhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"fc_find_rport_by_wwpn (C function)c.fc_find_rport_by_wwpnhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hKstruct fc_rport * fc_find_rport_by_wwpn (struct Scsi_Host *shost, u64 wwpn)h]jP)}(hIstruct fc_rport *fc_find_rport_by_wwpn(struct Scsi_Host *shost, u64 wwpn)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMzubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMzubh)}(hhh]j)}(hfc_rporth]hfc_rport}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jfc_find_rport_by_wwpnsbc.fc_find_rport_by_wwpnasbuh1hhjhhhjhMzubjh)}(h h]h }(hjGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMzubj )}(hj h]h*}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMzubjy)}(hfc_find_rport_by_wwpnh]j)}(hjDh]hfc_find_rport_by_wwpn}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjbubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMzubj)}(h#(struct Scsi_Host *shost, u64 wwpn)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.fc_find_rport_by_wwpnasbuh1hhj}ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}ubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubj)}(hu64 wwpnh](h)}(hhh]j)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jBc.fc_find_rport_by_wwpnasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hwwpnh]hwwpn}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMzubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMzhjhhubj)}(hhh]h)}(h*find the fc_rport pointer for a given wwpnh]h*find the fc_rport pointer for a given wwpn}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMzhjGhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjbjjbjjjuh1jDhhhjhNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` host the fc_rport is associated with ``u64 wwpn`` wwpn of the fc_rport device **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM~hjfubj#)}(hhh](j()}(hA``struct Scsi_Host *shost`` host the fc_rport is associated with h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM{hjubjJ)}(hhh]h)}(h$host the fc_rport is associated withh]h$host the fc_rport is associated with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM{hjubj()}(h)``u64 wwpn`` wwpn of the fc_rport device h](j.)}(h ``u64 wwpn``h]j4)}(hjh]hu64 wwpn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM|hjubjJ)}(hhh]h)}(hwwpn of the fc_rport deviceh]hwwpn of the fc_rport device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM|hjubeh}(h]h ]h"]h$]h&]uh1j"hjfubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM~hjfubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjh]h0This routine assumes no locks are held on entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM~hjubah}(h]h ]h"]h$]h&]uh1j_hj&hM~hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_host_fpin_rcv (C function)c.fc_host_fpin_rcvhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hcvoid fc_host_fpin_rcv (struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf, u8 event_acknowledge)h]jP)}(hbvoid fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf, u8 event_acknowledge)h](j~)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjIhhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMsubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjIhhhj[hMsubjy)}(hfc_host_fpin_rcvh]j)}(hfc_host_fpin_rcvh]hfc_host_fpin_rcv}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjIhhhj[hMsubj)}(hM(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf, u8 event_acknowledge)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjpsbc.fc_host_fpin_rcvasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h u32 fpin_lenh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_host_fpin_rcvasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hfpin_lenh]hfpin_len}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hchar *fpin_bufh](j~)}(hcharh]hchar}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@ubjh)}(h h]h }(hjRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj@ubj )}(hj h]h*}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@ubj)}(hfpin_bufh]hfpin_buf}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hu8 event_acknowledgeh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_host_fpin_rcvasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(hevent_acknowledgeh]hevent_acknowledge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjIhhhj[hMsubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjEhhhj[hMsubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jIhj[hMshjBhhubj)}(hhh]h)}(h#routine to process a received FPIN.h]h#routine to process a received FPIN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMshjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX+**Parameters** ``struct Scsi_Host *shost`` host the FPIN was received on ``u32 fpin_len`` length of FPIN payload, in bytes ``char *fpin_buf`` pointer to FPIN payload ``u8 event_acknowledge`` 1, if LLDD handles this event. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMwhjubj#)}(hhh](j()}(h:``struct Scsi_Host *shost`` host the FPIN was received on h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj h]hstruct Scsi_Host *shost}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMthjubjJ)}(hhh]h)}(hhost the FPIN was received onh]hhost the FPIN was received on}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMthj6ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj5hMthjubj()}(h2``u32 fpin_len`` length of FPIN payload, in bytes h](j.)}(h``u32 fpin_len``h]j4)}(hjYh]h u32 fpin_len}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjWubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMuhjSubjJ)}(hhh]h)}(h length of FPIN payload, in bytesh]h length of FPIN payload, in bytes}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMuhjoubah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j'hjnhMuhjubj()}(h+``char *fpin_buf`` pointer to FPIN payload h](j.)}(h``char *fpin_buf``h]j4)}(hjh]hchar *fpin_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMvhjubjJ)}(hhh]h)}(hpointer to FPIN payloadh]hpointer to FPIN payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMvhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMvhjubj()}(h8``u8 event_acknowledge`` 1, if LLDD handles this event. h](j.)}(h``u8 event_acknowledge``h]j4)}(hjh]hu8 event_acknowledge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMwhjubjJ)}(hhh]h)}(h1, if LLDD handles this event.h]h1, if LLDD handles this event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMwhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMyhjubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjh]h0This routine assumes no locks are held on entry.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMxhjubah}(h]h ]h"]h$]h&]uh1j_hj-hMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_eh_timed_out (C function)c.fc_eh_timed_outhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hAenum scsi_timeout_action fc_eh_timed_out (struct scsi_cmnd *scmd)h]jP)}(h@enum scsi_timeout_action fc_eh_timed_out(struct scsi_cmnd *scmd)h](jV)}(hjR9h]henum}(hjThhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPhhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM ubjh)}(h h]h }(hjbhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPhhhjahM ubh)}(hhh]j)}(hscsi_timeout_actionh]hscsi_timeout_action}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjumodnameN classnameNjj)}j]j)}jfc_eh_timed_outsbc.fc_eh_timed_outasbuh1hhjPhhhjahM ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPhhhjahM ubjy)}(hfc_eh_timed_outh]j)}(hjh]hfc_eh_timed_out}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjPhhhjahM ubj)}(h(struct scsi_cmnd *scmd)h]j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_eh_timed_outasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hscmdh]hscmd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjahM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjLhhhjahM ubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jIhjahM hjIhhubj)}(hhh]h)}(h*FC Transport I/O timeout intercept handlerh]h*FC Transport I/O timeout intercept handler}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj?hhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjahM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct scsi_cmnd *scmd`` The SCSI command which timed out **Description** This routine protects against error handlers getting invoked while a rport is in a blocked state, typically due to a temporarily loss of connectivity. If the error handlers are allowed to proceed, requests to abort i/o, reset the target, etc will likely fail as there is no way to communicate with the device to perform the requested function. These failures may result in the midlayer taking the device offline, requiring manual intervention to restore operation. This routine, called whenever an i/o times out, validates the state of the underlying rport. If the rport is blocked, it returns EH_RESET_TIMER, which will continue to reschedule the timeout. Eventually, either the device will return, or devloss_tmo will fire, and when the timeout then fires, it will be handled normally. If the rport is not blocked, normal error handling continues. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj^ubj#)}(hhh]j()}(h<``struct scsi_cmnd *scmd`` The SCSI command which timed out h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hjh]hstruct scsi_cmnd *scmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj}ubjJ)}(hhh]h)}(h The SCSI command which timed outh]h The SCSI command which timed out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jIhj}ubeh}(h]h ]h"]h$]h&]uh1j'hjhM hjzubah}(h]h ]h"]h$]h&]uh1j"hj^ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj^ubh)}(hXThis routine protects against error handlers getting invoked while a rport is in a blocked state, typically due to a temporarily loss of connectivity. If the error handlers are allowed to proceed, requests to abort i/o, reset the target, etc will likely fail as there is no way to communicate with the device to perform the requested function. These failures may result in the midlayer taking the device offline, requiring manual intervention to restore operation.h]hXThis routine protects against error handlers getting invoked while a rport is in a blocked state, typically due to a temporarily loss of connectivity. If the error handlers are allowed to proceed, requests to abort i/o, reset the target, etc will likely fail as there is no way to communicate with the device to perform the requested function. These failures may result in the midlayer taking the device offline, requiring manual intervention to restore operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj^ubh)}(hXThis routine, called whenever an i/o times out, validates the state of the underlying rport. If the rport is blocked, it returns EH_RESET_TIMER, which will continue to reschedule the timeout. Eventually, either the device will return, or devloss_tmo will fire, and when the timeout then fires, it will be handled normally. If the rport is not blocked, normal error handling continues.h]hXThis routine, called whenever an i/o times out, validates the state of the underlying rport. If the rport is blocked, it returns EH_RESET_TIMER, which will continue to reschedule the timeout. Eventually, either the device will return, or devloss_tmo will fire, and when the timeout then fires, it will be handled normally. If the rport is not blocked, normal error handling continues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj^ubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj^ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj h]h0This routine assumes no locks are held on entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj ubah}(h]h ]h"]h$]h&]uh1j_hjhM hj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_remove_host (C function)c.fc_remove_hosthNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h-void fc_remove_host (struct Scsi_Host *shost)h]jP)}(h,void fc_remove_host(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj>hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM' ubjh)}(h h]h }(hjQhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj>hhhjPhM' ubjy)}(hfc_remove_hosth]j)}(hfc_remove_hosth]hfc_remove_host}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj>hhhjPhM' ubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj{ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjesbc.fc_remove_hostasbuh1hhj{ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj{ubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubah}(h]h ]h"]h$]h&]jjuh1jhj>hhhjPhM' ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj:hhhjPhM' ubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jIhjPhM' hj7hhubj)}(hhh]h)}(hFcalled to terminate any fc_transport-related elements for a scsi host.h]hFcalled to terminate any fc_transport-related elements for a scsi host.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM' hjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjPhM' ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` Which :c:type:`Scsi_Host` **Description** This routine is expected to be called immediately preceding the a driver's call to scsi_remove_host(). WARNING: A driver utilizing the fc_transport, which fails to call this routine prior to scsi_remove_host(), will leave dangling objects in /sys/class/fc_remote_ports. Access to any of these objects can result in a system crash !!! **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM+ hjubj#)}(hhh]j()}(h6``struct Scsi_Host *shost`` Which :c:type:`Scsi_Host` h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjCh]hstruct Scsi_Host *shost}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjAubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM( hj=ubjJ)}(hhh]h)}(hWhich :c:type:`Scsi_Host`h](hWhich }(hj\hhhNhNubh)}(h:c:type:`Scsi_Host`h]j4)}(hjfh]h Scsi_Host}(hjhhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j3hjdubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjj Scsi_Hostuh1hhjXhM( hj\ubeh}(h]h ]h"]h$]h&]uh1hhjXhM( hjYubah}(h]h ]h"]h$]h&]uh1jIhj=ubeh}(h]h ]h"]h$]h&]uh1j'hjXhM( hj:ubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM* hjubh)}(hfThis routine is expected to be called immediately preceding the a driver's call to scsi_remove_host().h]hhThis routine is expected to be called immediately preceding the a driver’s call to scsi_remove_host().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM) hjubj#)}(hhh]j()}(hWARNING: A driver utilizing the fc_transport, which fails to call this routine prior to scsi_remove_host(), will leave dangling objects in /sys/class/fc_remote_ports. Access to any of these objects can result in a system crash !!! h](j.)}(hAWARNING: A driver utilizing the fc_transport, which fails to callh]hAWARNING: A driver utilizing the fc_transport, which fails to call}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM/ hjubjJ)}(hhh]h)}(hthis routine prior to scsi_remove_host(), will leave dangling objects in /sys/class/fc_remote_ports. Access to any of these objects can result in a system crash !!!h]hthis routine prior to scsi_remove_host(), will leave dangling objects in /sys/class/fc_remote_ports. Access to any of these objects can result in a system crash !!!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM- hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM/ hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM1 hjubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjh]h0This routine assumes no locks are held on entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM2 hjubah}(h]h ]h"]h$]h&]uh1j_hj%hM2 hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_remote_port_add (C function)c.fc_remote_port_addhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hmstruct fc_rport * fc_remote_port_add (struct Scsi_Host *shost, int channel, struct fc_rport_identifiers *ids)h]jP)}(hkstruct fc_rport *fc_remote_port_add(struct Scsi_Host *shost, int channel, struct fc_rport_identifiers *ids)h](jV)}(hjYh]hstruct}(hjLhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHhhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMK ubjh)}(h h]h }(hjZhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHhhhjYhMK ubh)}(hhh]j)}(hfc_rporth]hfc_rport}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jfc_remote_port_addsbc.fc_remote_port_addasbuh1hhjHhhhjYhMK ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHhhhjYhMK ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjHhhhjYhMK ubjy)}(hfc_remote_port_addh]j)}(hjh]hfc_remote_port_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjHhhhjYhMK ubj)}(hH(struct Scsi_Host *shost, int channel, struct fc_rport_identifiers *ids)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_remote_port_addasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h int channelh](j~)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj2ubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj2ubj)}(hchannelh]hchannel}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h struct fc_rport_identifiers *idsh](jV)}(hjYh]hstruct}(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjgubjh)}(h h]h }(hjxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjgubh)}(hhh]j)}(hfc_rport_identifiersh]hfc_rport_identifiers}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.fc_remote_port_addasbuh1hhjgubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjgubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjgubj)}(hidsh]hids}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjHhhhjYhMK ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjDhhhjYhMK ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jIhjYhMK hjAhhubj)}(hhh]h)}(h9notify fc transport of the existence of a remote FC port.h]h9notify fc transport of the existence of a remote FC port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMK hjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhMK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` scsi host the remote port is connected to. ``int channel`` Channel on shost port connected to. ``struct fc_rport_identifiers *ids`` The world wide names, fc address, and FC4 port roles for the remote port. **Description** The LLDD calls this routine to notify the transport of the existence of a remote port. The LLDD provides the unique identifiers (wwpn,wwn) of the port, it's FC address (port_id), and the FC4 roles that are active for the port. For ports that are FCP targets (aka scsi targets), the FC transport maintains consistent target id bindings on behalf of the LLDD. A consistent target id binding is an assignment of a target id to a remote port identifier, which persists while the scsi host is attached. The remote port can disappear, then later reappear, and it's target id assignment remains the same. This allows for shifts in FC addressing (if binding by wwpn or wwnn) with no apparent changes to the scsi subsystem which is based on scsi host number and target id values. Bindings are only valid during the attachment of the scsi host. If the host detaches, then later re-attaches, target id bindings may change. This routine is responsible for returning a remote port structure. The routine will search the list of remote ports it maintains internally on behalf of consistent target id mappings. If found, the remote port structure will be reused. Otherwise, a new remote port structure will be allocated. Whenever a remote port is allocated, a new fc_remote_port class device is created. Should not be called from interrupt context. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMO hjubj#)}(hhh](j()}(hG``struct Scsi_Host *shost`` scsi host the remote port is connected to. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj-h]hstruct Scsi_Host *shost}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj+ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chML hj'ubjJ)}(hhh]h)}(h*scsi host the remote port is connected to.h]h*scsi host the remote port is connected to.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhML hjCubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j'hjBhML hj$ubj()}(h4``int channel`` Channel on shost port connected to. h](j.)}(h``int channel``h]j4)}(hjfh]h int channel}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjdubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMM hj`ubjJ)}(hhh]h)}(h#Channel on shost port connected to.h]h#Channel on shost port connected to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMM hj|ubah}(h]h ]h"]h$]h&]uh1jIhj`ubeh}(h]h ]h"]h$]h&]uh1j'hj{hMM hj$ubj()}(ho``struct fc_rport_identifiers *ids`` The world wide names, fc address, and FC4 port roles for the remote port. h](j.)}(h$``struct fc_rport_identifiers *ids``h]j4)}(hjh]h struct fc_rport_identifiers *ids}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMO hjubjJ)}(hhh]h)}(hIThe world wide names, fc address, and FC4 port roles for the remote port.h]hIThe world wide names, fc address, and FC4 port roles for the remote port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMN hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMO hj$ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMQ hjubh)}(hThe LLDD calls this routine to notify the transport of the existence of a remote port. The LLDD provides the unique identifiers (wwpn,wwn) of the port, it's FC address (port_id), and the FC4 roles that are active for the port.h]hThe LLDD calls this routine to notify the transport of the existence of a remote port. The LLDD provides the unique identifiers (wwpn,wwn) of the port, it’s FC address (port_id), and the FC4 roles that are active for the port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMP hjubh)}(hXFor ports that are FCP targets (aka scsi targets), the FC transport maintains consistent target id bindings on behalf of the LLDD. A consistent target id binding is an assignment of a target id to a remote port identifier, which persists while the scsi host is attached. The remote port can disappear, then later reappear, and it's target id assignment remains the same. This allows for shifts in FC addressing (if binding by wwpn or wwnn) with no apparent changes to the scsi subsystem which is based on scsi host number and target id values. Bindings are only valid during the attachment of the scsi host. If the host detaches, then later re-attaches, target id bindings may change.h]hXFor ports that are FCP targets (aka scsi targets), the FC transport maintains consistent target id bindings on behalf of the LLDD. A consistent target id binding is an assignment of a target id to a remote port identifier, which persists while the scsi host is attached. The remote port can disappear, then later reappear, and it’s target id assignment remains the same. This allows for shifts in FC addressing (if binding by wwpn or wwnn) with no apparent changes to the scsi subsystem which is based on scsi host number and target id values. Bindings are only valid during the attachment of the scsi host. If the host detaches, then later re-attaches, target id bindings may change.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMU hjubh)}(hX%This routine is responsible for returning a remote port structure. The routine will search the list of remote ports it maintains internally on behalf of consistent target id mappings. If found, the remote port structure will be reused. Otherwise, a new remote port structure will be allocated.h]hX%This routine is responsible for returning a remote port structure. The routine will search the list of remote ports it maintains internally on behalf of consistent target id mappings. If found, the remote port structure will be reused. Otherwise, a new remote port structure will be allocated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMa hjubh)}(hRWhenever a remote port is allocated, a new fc_remote_port class device is created.h]hRWhenever a remote port is allocated, a new fc_remote_port class device is created.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMg hjubh)}(h,Should not be called from interrupt context.h]h,Should not be called from interrupt context.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMj hjubh)}(h **Notes**h]j)}(hj> h]hNotes}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMl hjubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hjV h]h0This routine assumes no locks are held on entry.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMm hjT ubah}(h]h ]h"]h$]h&]uh1j_hje hMm hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"fc_remote_port_delete (C function)c.fc_remote_port_deletehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h3void fc_remote_port_delete (struct fc_rport *rport)h]jP)}(h2void fc_remote_port_delete(struct fc_rport *rport)h](j~)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM( ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhj hM( ubjy)}(hfc_remote_port_deleteh]j)}(hfc_remote_port_deleteh]hfc_remote_port_delete}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj hhhj hM( ubj)}(h(struct fc_rport *rport)h]j)}(hstruct fc_rport *rporth](jV)}(hjYh]hstruct}(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj ubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubh)}(hhh]j)}(hfc_rporth]hfc_rport}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sbc.fc_remote_port_deleteasbuh1hhj ubjh)}(h h]h }(hj!hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj ubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hrporth]hrport}(hj"!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhj hM( ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj hhhj hM( ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jIhj hM( hj hhubj)}(hhh]h)}(hGnotifies the fc transport that a remote port is no longer in existence.h]hGnotifies the fc transport that a remote port is no longer in existence.}(hjL!hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM( hjI!hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM( ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjd!jjd!jjjuh1jDhhhjhNhNubj)}(hX **Parameters** ``struct fc_rport *rport`` The remote port that no longer exists **Description** The LLDD calls this routine to notify the transport that a remote port is no longer part of the topology. Note: Although a port may no longer be part of the topology, it may persist in the remote ports displayed by the fc_host. We do this under 2 conditions: 1) If the port was a scsi target, we delay its deletion by "blocking" it. This allows the port to temporarily disappear, then reappear without disrupting the SCSI device tree attached to it. During the "blocked" period the port will still exist. 2) If the port was a scsi target and disappears for longer than we expect, we'll delete the port and the tear down the SCSI device tree attached to it. However, we want to semi-persist the target id assigned to that port if it eventually does exist. The port structure will remain (although with minimal information) so that the target id bindings also remain. If the remote port is not an FCP Target, it will be fully torn down and deallocated, including the fc_remote_port class device. If the remote port is an FCP Target, the port will be placed in a temporary blocked state. From the LLDD's perspective, the rport no longer exists. From the SCSI midlayer's perspective, the SCSI target exists, but all sdevs on it are blocked from further I/O. The following is then expected. If the remote port does not return (signaled by a LLDD call to fc_remote_port_add()) within the dev_loss_tmo timeout, then the scsi target is removed - killing all outstanding i/o and removing the scsi devices attached to it. The port structure will be marked Not Present and be partially cleared, leaving only enough information to recognize the remote port relative to the scsi target id binding if it later appears. The port will remain as long as there is a valid binding (e.g. until the user changes the binding type or unloads the scsi host with the binding). If the remote port returns within the dev_loss_tmo value (and matches according to the target id binding type), the port structure will be reused. If it is no longer a SCSI target, the target will be torn down. If it continues to be a SCSI target, then the target will be unblocked (allowing i/o to be resumed), and a scan will be activated to ensure that all luns are detected. Called from normal process context only - cannot be called from interrupt. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hjn!h]h Parameters}(hjp!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl!ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM, hjh!ubj#)}(hhh]j()}(hA``struct fc_rport *rport`` The remote port that no longer exists h](j.)}(h``struct fc_rport *rport``h]j4)}(hj!h]hstruct fc_rport *rport}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM) hj!ubjJ)}(hhh]h)}(h%The remote port that no longer existsh]h%The remote port that no longer exists}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM) hj!ubah}(h]h ]h"]h$]h&]uh1jIhj!ubeh}(h]h ]h"]h$]h&]uh1j'hj!hM) hj!ubah}(h]h ]h"]h$]h&]uh1j"hjh!ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM+ hjh!ubh)}(hXThe LLDD calls this routine to notify the transport that a remote port is no longer part of the topology. Note: Although a port may no longer be part of the topology, it may persist in the remote ports displayed by the fc_host. We do this under 2 conditions:h]hXThe LLDD calls this routine to notify the transport that a remote port is no longer part of the topology. Note: Although a port may no longer be part of the topology, it may persist in the remote ports displayed by the fc_host. We do this under 2 conditions:}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM* hjh!ubhenumerated_list)}(hhh](jE)}(hIf the port was a scsi target, we delay its deletion by "blocking" it. This allows the port to temporarily disappear, then reappear without disrupting the SCSI device tree attached to it. During the "blocked" period the port will still exist. h]h)}(hIf the port was a scsi target, we delay its deletion by "blocking" it. This allows the port to temporarily disappear, then reappear without disrupting the SCSI device tree attached to it. During the "blocked" period the port will still exist.h]hIf the port was a scsi target, we delay its deletion by “blocking” it. This allows the port to temporarily disappear, then reappear without disrupting the SCSI device tree attached to it. During the “blocked” period the port will still exist.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM/ hj!ubah}(h]h ]h"]h$]h&]uh1jDhj!ubjE)}(hXfIf the port was a scsi target and disappears for longer than we expect, we'll delete the port and the tear down the SCSI device tree attached to it. However, we want to semi-persist the target id assigned to that port if it eventually does exist. The port structure will remain (although with minimal information) so that the target id bindings also remain. h]h)}(hXeIf the port was a scsi target and disappears for longer than we expect, we'll delete the port and the tear down the SCSI device tree attached to it. However, we want to semi-persist the target id assigned to that port if it eventually does exist. The port structure will remain (although with minimal information) so that the target id bindings also remain.h]hXgIf the port was a scsi target and disappears for longer than we expect, we’ll delete the port and the tear down the SCSI device tree attached to it. However, we want to semi-persist the target id assigned to that port if it eventually does exist. The port structure will remain (although with minimal information) so that the target id bindings also remain.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM4 hj "ubah}(h]h ]h"]h$]h&]uh1jDhj!ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffixjVuh1j!hjh!ubh)}(hIf the remote port is not an FCP Target, it will be fully torn down and deallocated, including the fc_remote_port class device.h]hIf the remote port is not an FCP Target, it will be fully torn down and deallocated, including the fc_remote_port class device.}(hj."hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM; hjh!ubh)}(hX#If the remote port is an FCP Target, the port will be placed in a temporary blocked state. From the LLDD's perspective, the rport no longer exists. From the SCSI midlayer's perspective, the SCSI target exists, but all sdevs on it are blocked from further I/O. The following is then expected.h]hX'If the remote port is an FCP Target, the port will be placed in a temporary blocked state. From the LLDD’s perspective, the rport no longer exists. From the SCSI midlayer’s perspective, the SCSI target exists, but all sdevs on it are blocked from further I/O. The following is then expected.}(hj="hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM> hjh!ubj`)}(hXIf the remote port does not return (signaled by a LLDD call to fc_remote_port_add()) within the dev_loss_tmo timeout, then the scsi target is removed - killing all outstanding i/o and removing the scsi devices attached to it. The port structure will be marked Not Present and be partially cleared, leaving only enough information to recognize the remote port relative to the scsi target id binding if it later appears. The port will remain as long as there is a valid binding (e.g. until the user changes the binding type or unloads the scsi host with the binding). If the remote port returns within the dev_loss_tmo value (and matches according to the target id binding type), the port structure will be reused. If it is no longer a SCSI target, the target will be torn down. If it continues to be a SCSI target, then the target will be unblocked (allowing i/o to be resumed), and a scan will be activated to ensure that all luns are detected. h](h)}(hX6If the remote port does not return (signaled by a LLDD call to fc_remote_port_add()) within the dev_loss_tmo timeout, then the scsi target is removed - killing all outstanding i/o and removing the scsi devices attached to it. The port structure will be marked Not Present and be partially cleared, leaving only enough information to recognize the remote port relative to the scsi target id binding if it later appears. The port will remain as long as there is a valid binding (e.g. until the user changes the binding type or unloads the scsi host with the binding).h]hX6If the remote port does not return (signaled by a LLDD call to fc_remote_port_add()) within the dev_loss_tmo timeout, then the scsi target is removed - killing all outstanding i/o and removing the scsi devices attached to it. The port structure will be marked Not Present and be partially cleared, leaving only enough information to recognize the remote port relative to the scsi target id binding if it later appears. The port will remain as long as there is a valid binding (e.g. until the user changes the binding type or unloads the scsi host with the binding).}(hjP"hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMD hjL"ubh)}(hXzIf the remote port returns within the dev_loss_tmo value (and matches according to the target id binding type), the port structure will be reused. If it is no longer a SCSI target, the target will be torn down. If it continues to be a SCSI target, then the target will be unblocked (allowing i/o to be resumed), and a scan will be activated to ensure that all luns are detected.h]hXzIf the remote port returns within the dev_loss_tmo value (and matches according to the target id binding type), the port structure will be reused. If it is no longer a SCSI target, the target will be torn down. If it continues to be a SCSI target, then the target will be unblocked (allowing i/o to be resumed), and a scan will be activated to ensure that all luns are detected.}(hj_"hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMN hjL"ubeh}(h]h ]h"]h$]h&]uh1j_hj^"hMD hjh!ubh)}(hJCalled from normal process context only - cannot be called from interrupt.h]hJCalled from normal process context only - cannot be called from interrupt.}(hjt"hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMU hjh!ubh)}(h **Notes**h]j)}(hj"h]hNotes}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMW hjh!ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj"h]h0This routine assumes no locks are held on entry.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMX hj"ubah}(h]h ]h"]h$]h&]uh1j_hj"hMX hjh!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#fc_remote_port_rolechg (C function)c.fc_remote_port_rolechghNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h?void fc_remote_port_rolechg (struct fc_rport *rport, u32 roles)h]jP)}(h>void fc_remote_port_rolechg(struct fc_rport *rport, u32 roles)h](j~)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj"hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM ubjh)}(h h]h }(hj"hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj"hhhj"hM ubjy)}(hfc_remote_port_rolechgh]j)}(hfc_remote_port_rolechgh]hfc_remote_port_rolechg}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj"hhhj"hM ubj)}(h#(struct fc_rport *rport, u32 roles)h](j)}(hstruct fc_rport *rporth](jV)}(hjYh]hstruct}(hj#hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj #ubjh)}(h h]h }(hj#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj #ubh)}(hhh]j)}(hfc_rporth]hfc_rport}(hj.#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0#modnameN classnameNjj)}j]j)}jj"sbc.fc_remote_port_rolechgasbuh1hhj #ubjh)}(h h]h }(hjN#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj #ubj )}(hj h]h*}(hj\#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj #ubj)}(hrporth]hrport}(hji#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj #ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubj)}(h u32 rolesh](h)}(hhh]j)}(hu32h]hu32}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]jJ#c.fc_remote_port_rolechgasbuh1hhj~#ubjh)}(h h]h }(hj#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~#ubj)}(hrolesh]hroles}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj#ubeh}(h]h ]h"]h$]h&]jjuh1jhj"hhhj"hM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj"hhhj"hM ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jIhj"hM hj"hhubj)}(hhh]h)}(hFnotifies the fc transport that the roles on a remote may have changed.h]hFnotifies the fc transport that the roles on a remote may have changed.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jDhhhjhNhNubj)}(hX**Parameters** ``struct fc_rport *rport`` The remote port that changed. ``u32 roles`` New roles for this port. **Description** The LLDD calls this routine to notify the transport that the roles on a remote port may have changed. The largest effect of this is if a port now becomes a FCP Target, it must be allocated a scsi target id. If the port is no longer a FCP target, any scsi target id value assigned to it will persist in case the role changes back to include FCP Target. No changes in the scsi midlayer will be invoked if the role changes (in the expectation that the role will be resumed. If it doesn't normal error processing will take place). Should not be called from interrupt context. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#ubj#)}(hhh](j()}(h9``struct fc_rport *rport`` The remote port that changed. h](j.)}(h``struct fc_rport *rport``h]j4)}(hj$h]hstruct fc_rport *rport}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj$ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj$ubjJ)}(hhh]h)}(hThe remote port that changed.h]hThe remote port that changed.}(hj5$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1$hM hj2$ubah}(h]h ]h"]h$]h&]uh1jIhj$ubeh}(h]h ]h"]h$]h&]uh1j'hj1$hM hj$ubj()}(h'``u32 roles`` New roles for this port. h](j.)}(h ``u32 roles``h]j4)}(hjU$h]h u32 roles}(hjW$hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjS$ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hjO$ubjJ)}(hhh]h)}(hNew roles for this port.h]hNew roles for this port.}(hjn$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj$hM hjk$ubah}(h]h ]h"]h$]h&]uh1jIhjO$ubeh}(h]h ]h"]h$]h&]uh1j'hjj$hM hj$ubeh}(h]h ]h"]h$]h&]uh1j"hj#ubh)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#ubh)}(hXThe LLDD calls this routine to notify the transport that the roles on a remote port may have changed. The largest effect of this is if a port now becomes a FCP Target, it must be allocated a scsi target id. If the port is no longer a FCP target, any scsi target id value assigned to it will persist in case the role changes back to include FCP Target. No changes in the scsi midlayer will be invoked if the role changes (in the expectation that the role will be resumed. If it doesn't normal error processing will take place).h]hXThe LLDD calls this routine to notify the transport that the roles on a remote port may have changed. The largest effect of this is if a port now becomes a FCP Target, it must be allocated a scsi target id. If the port is no longer a FCP target, any scsi target id value assigned to it will persist in case the role changes back to include FCP Target. No changes in the scsi midlayer will be invoked if the role changes (in the expectation that the role will be resumed. If it doesn’t normal error processing will take place).}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#ubh)}(h,Should not be called from interrupt context.h]h,Should not be called from interrupt context.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#ubh)}(h **Notes**h]j)}(hj$h]hNotes}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj#ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj$h]h0This routine assumes no locks are held on entry.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chM hj$ubah}(h]h ]h"]h$]h&]uh1j_hj$hM hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_block_rport (C function)c.fc_block_rporthNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h+int fc_block_rport (struct fc_rport *rport)h]jP)}(h*int fc_block_rport(struct fc_rport *rport)h](j~)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj%hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMubjh)}(h h]h }(hj#%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj%hhhj"%hMubjy)}(hfc_block_rporth]j)}(hfc_block_rporth]hfc_block_rport}(hj5%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1%ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj%hhhj"%hMubj)}(h(struct fc_rport *rport)h]j)}(hstruct fc_rport *rporth](jV)}(hjYh]hstruct}(hjQ%hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjM%ubjh)}(h h]h }(hj^%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjM%ubh)}(hhh]j)}(hfc_rporth]hfc_rport}(hjo%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjl%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjq%modnameN classnameNjj)}j]j)}jj7%sbc.fc_block_rportasbuh1hhjM%ubjh)}(h h]h }(hj%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjM%ubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjM%ubj)}(hrporth]hrport}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjM%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjI%ubah}(h]h ]h"]h$]h&]jjuh1jhj%hhhj"%hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj %hhhj"%hMubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jIhj"%hMhj %hhubj)}(hhh]h)}(h*Block SCSI eh thread for blocked fc_rport.h]h*Block SCSI eh thread for blocked fc_rport.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jhj %hhhj"%hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jDhhhjhNhNubj)}(hX-**Parameters** ``struct fc_rport *rport`` Remote port that scsi_eh is trying to recover. **Description** This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices. **Return** 0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%ubj#)}(hhh]j()}(hJ``struct fc_rport *rport`` Remote port that scsi_eh is trying to recover. h](j.)}(h``struct fc_rport *rport``h]j4)}(hj&h]hstruct fc_rport *rport}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj&ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj&ubjJ)}(hhh]h)}(h.Remote port that scsi_eh is trying to recover.h]h.Remote port that scsi_eh is trying to recover.}(hj.&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*&hMhj+&ubah}(h]h ]h"]h$]h&]uh1jIhj&ubeh}(h]h ]h"]h$]h&]uh1j'hj*&hMhj &ubah}(h]h ]h"]h$]h&]uh1j"hj%ubh)}(h**Description**h]j)}(hjP&h]h Description}(hjR&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN&ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%ubh)}(hX(This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices.h]hX(This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices.}(hjf&hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%ubh)}(h **Return**h]j)}(hjw&h]hReturn}(hjy&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju&ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%ubh)}(h0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.h]h0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_block_scsi_eh (C function)c.fc_block_scsi_ehhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h-int fc_block_scsi_eh (struct scsi_cmnd *cmnd)h]jP)}(h,int fc_block_scsi_eh(struct scsi_cmnd *cmnd)h](j~)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj&hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMubjh)}(h h]h }(hj&hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&hhhj&hMubjy)}(hfc_block_scsi_ehh]j)}(hfc_block_scsi_ehh]hfc_block_scsi_eh}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj&ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj&hhhj&hMubj)}(h(struct scsi_cmnd *cmnd)h]j)}(hstruct scsi_cmnd *cmndh](jV)}(hjYh]hstruct}(hj&hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj&ubjh)}(h h]h }(hj'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&ubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j)}jj&sbc.fc_block_scsi_ehasbuh1hhj&ubjh)}(h h]h }(hj7'hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj&ubj )}(hj h]h*}(hjE'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj)}(hcmndh]hcmnd}(hjR'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj&ubah}(h]h ]h"]h$]h&]jjuh1jhj&hhhj&hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jIhj&hMhj&hhubj)}(hhh]h)}(h)Block SCSI eh thread for blocked fc_rporth]h)Block SCSI eh thread for blocked fc_rport}(hj|'hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhjy'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jDhhhjhNhNubj)}(hX-**Parameters** ``struct scsi_cmnd *cmnd`` SCSI command that scsi_eh is trying to recover **Description** This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices. **Return** 0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubj#)}(hhh]j()}(hJ``struct scsi_cmnd *cmnd`` SCSI command that scsi_eh is trying to recover h](j.)}(h``struct scsi_cmnd *cmnd``h]j4)}(hj'h]hstruct scsi_cmnd *cmnd}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj'ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubjJ)}(hhh]h)}(h.SCSI command that scsi_eh is trying to recoverh]h.SCSI command that scsi_eh is trying to recover}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jIhj'ubeh}(h]h ]h"]h$]h&]uh1j'hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1j"hj'ubh)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubh)}(hX(This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices.h]hX(This routine can be called from a FC LLD scsi_eh callback. It blocks the scsi_eh thread until the fc_rport leaves the FC_PORTSTATE_BLOCKED, or the fast_io_fail_tmo fires. This is necessary to avoid the scsi_eh failing recovery actions for blocked rports which would lead to offlined SCSI devices.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubh)}(h **Return**h]j)}(hj(h]hReturn}(hj!(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubh)}(h0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.h]h0 if the fc_rport left the state FC_PORTSTATE_BLOCKED. FAST_IO_FAIL if the fast_io_fail_tmo fired, this should be passed back to scsi_eh.}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_vport_create (C function)c.fc_vport_createhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(hjstruct fc_vport * fc_vport_create (struct Scsi_Host *shost, int channel, struct fc_vport_identifiers *ids)h]jP)}(hhstruct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel, struct fc_vport_identifiers *ids)h](jV)}(hjYh]hstruct}(hjd(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj`(hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMnubjh)}(h h]h }(hjr(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj`(hhhjq(hMnubh)}(hhh]j)}(hfc_vporth]hfc_vport}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j)}jfc_vport_createsbc.fc_vport_createasbuh1hhj`(hhhjq(hMnubjh)}(h h]h }(hj(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj`(hhhjq(hMnubj )}(hj h]h*}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`(hhhjq(hMnubjy)}(hfc_vport_createh]j)}(hj(h]hfc_vport_create}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj`(hhhjq(hMnubj)}(hH(struct Scsi_Host *shost, int channel, struct fc_vport_identifiers *ids)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj(hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj(ubjh)}(h h]h }(hj(hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj(ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j(c.fc_vport_createasbuh1hhj(ubjh)}(h h]h }(hj)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj(ubj )}(hj h]h*}(hj()hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubj)}(hshosth]hshost}(hj5)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h int channelh](j~)}(hinth]hint}(hjN)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjJ)ubjh)}(h h]h }(hj\)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjJ)ubj)}(hchannelh]hchannel}(hjj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJ)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubj)}(h struct fc_vport_identifiers *idsh](jV)}(hjYh]hstruct}(hj)hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj)ubjh)}(h h]h }(hj)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj)ubh)}(hhh]j)}(hfc_vport_identifiersh]hfc_vport_identifiers}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j(c.fc_vport_createasbuh1hhj)ubjh)}(h h]h }(hj)hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj)ubj )}(hj h]h*}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)ubj)}(hidsh]hids}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj(ubeh}(h]h ]h"]h$]h&]jjuh1jhj`(hhhjq(hMnubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj\(hhhjq(hMnubah}(h]jW(ah ](jjeh"]h$]h&]jj)jhuh1jIhjq(hMnhjY(hhubj)}(hhh]h)}(h.Admin App or LLDD requests creation of a vporth]h.Admin App or LLDD requests creation of a vport}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMnhj*hhubah}(h]h ]h"]h$]h&]uh1jhjY(hhhjq(hMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jDhhhjhNhNubj)}(hX<**Parameters** ``struct Scsi_Host *shost`` scsi host the virtual port is connected to. ``int channel`` channel on shost port connected to. ``struct fc_vport_identifiers *ids`` The world wide names, FC4 port roles, etc for the virtual port. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj&*h]h Parameters}(hj(*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$*ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMrhj *ubj#)}(hhh](j()}(hH``struct Scsi_Host *shost`` scsi host the virtual port is connected to. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjE*h]hstruct Scsi_Host *shost}(hjG*hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjC*ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMohj?*ubjJ)}(hhh]h)}(h+scsi host the virtual port is connected to.h]h+scsi host the virtual port is connected to.}(hj^*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ*hMohj[*ubah}(h]h ]h"]h$]h&]uh1jIhj?*ubeh}(h]h ]h"]h$]h&]uh1j'hjZ*hMohj<*ubj()}(h4``int channel`` channel on shost port connected to. h](j.)}(h``int channel``h]j4)}(hj~*h]h int channel}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|*ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMphjx*ubjJ)}(hhh]h)}(h#channel on shost port connected to.h]h#channel on shost port connected to.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMphj*ubah}(h]h ]h"]h$]h&]uh1jIhjx*ubeh}(h]h ]h"]h$]h&]uh1j'hj*hMphj<*ubj()}(he``struct fc_vport_identifiers *ids`` The world wide names, FC4 port roles, etc for the virtual port. h](j.)}(h$``struct fc_vport_identifiers *ids``h]j4)}(hj*h]h struct fc_vport_identifiers *ids}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj*ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMrhj*ubjJ)}(hhh]h)}(h?The world wide names, FC4 port roles, etc for the virtual port.h]h?The world wide names, FC4 port roles, etc for the virtual port.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMqhj*ubah}(h]h ]h"]h$]h&]uh1jIhj*ubeh}(h]h ]h"]h$]h&]uh1j'hj*hMrhj<*ubeh}(h]h ]h"]h$]h&]uh1j"hj *ubh)}(h **Notes**h]j)}(hj*h]hNotes}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMthj *ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj +h]h0This routine assumes no locks are held on entry.}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMthj +ubah}(h]h ]h"]h$]h&]uh1j_hj+hMthj *ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@fc_vport_terminate (C function)c.fc_vport_terminatehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h/int fc_vport_terminate (struct fc_vport *vport)h]jP)}(h.int fc_vport_terminate(struct fc_vport *vport)h](j~)}(hinth]hint}(hjA+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=+hhha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMubjh)}(h h]h }(hjP+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj=+hhhjO+hMubjy)}(hfc_vport_terminateh]j)}(hfc_vport_terminateh]hfc_vport_terminate}(hjb+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^+ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj=+hhhjO+hMubj)}(h(struct fc_vport *vport)h]j)}(hstruct fc_vport *vporth](jV)}(hjYh]hstruct}(hj~+hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjz+ubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjz+ubh)}(hhh]j)}(hfc_vporth]hfc_vport}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}jjd+sbc.fc_vport_terminateasbuh1hhjz+ubjh)}(h h]h }(hj+hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjz+ubj )}(hj h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjz+ubj)}(hvporth]hvport}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjz+ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjv+ubah}(h]h ]h"]h$]h&]jjuh1jhj=+hhhjO+hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj9+hhhjO+hMubah}(h]j4+ah ](jjeh"]h$]h&]jj)jhuh1jIhjO+hMhj6+hhubj)}(hhh]h)}(h1Admin App or LLDD requests termination of a vporth]h1Admin App or LLDD requests termination of a vport}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj+hhubah}(h]h ]h"]h$]h&]uh1jhj6+hhhjO+hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1jDhhhjhNhNubj)}(hX **Parameters** ``struct fc_vport *vport`` fc_vport to be terminated **Description** Calls the LLDD vport_delete() function, then deallocates and removes the vport from the shost and object tree. **Notes** This routine assumes no locks are held on entry.h](h)}(h**Parameters**h]j)}(hj#,h]h Parameters}(hj%,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!,ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj,ubj#)}(hhh]j()}(h5``struct fc_vport *vport`` fc_vport to be terminated h](j.)}(h``struct fc_vport *vport``h]j4)}(hjB,h]hstruct fc_vport *vport}(hjD,hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj@,ubah}(h]h ]h"]h$]h&]uh1j-ha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj<,ubjJ)}(hhh]h)}(hfc_vport to be terminatedh]hfc_vport to be terminated}(hj[,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW,hMhjX,ubah}(h]h ]h"]h$]h&]uh1jIhj<,ubeh}(h]h ]h"]h$]h&]uh1j'hjW,hMhj9,ubah}(h]h ]h"]h$]h&]uh1j"hj,ubh)}(h**Description**h]j)}(hj},h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{,ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj,ubh)}(hnCalls the LLDD vport_delete() function, then deallocates and removes the vport from the shost and object tree.h]hnCalls the LLDD vport_delete() function, then deallocates and removes the vport from the shost and object tree.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj,ubh)}(h **Notes**h]j)}(hj,h]hNotes}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj,ubj`)}(h0This routine assumes no locks are held on entry.h]h)}(hj,h]h0This routine assumes no locks are held on entry.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:239: ./drivers/scsi/scsi_transport_fc.chMhj,ubah}(h]h ]h"]h$]h&]uh1j_hj,hMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]fibre-channel-transportah ]h"]fibre channel transportah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hiSCSI transport classh]hiSCSI transport class}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hhhhhKubh)}(hThe file drivers/scsi/scsi_transport_iscsi.c defines transport attributes for the iSCSI class, which sends SCSI packets over TCP/IP connections.h]hThe file drivers/scsi/scsi_transport_iscsi.c defines transport attributes for the iSCSI class, which sends SCSI packets over TCP/IP connections.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj,hhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"iscsi_lookup_endpoint (C function)c.iscsi_lookup_endpointhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(h:struct iscsi_endpoint * iscsi_lookup_endpoint (u64 handle)h]jP)}(h8struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle)h](jV)}(hjYh]hstruct}(hj-hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj-hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMubjh)}(h h]h }(hj'-hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-hhhj&-hMubh)}(hhh]j)}(hiscsi_endpointh]hiscsi_endpoint}(hj8-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj:-modnameN classnameNjj)}j]j)}jiscsi_lookup_endpointsbc.iscsi_lookup_endpointasbuh1hhj-hhhj&-hMubjh)}(h h]h }(hjY-hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-hhhj&-hMubj )}(hj h]h*}(hjg-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj-hhhj&-hMubjy)}(hiscsi_lookup_endpointh]j)}(hjV-h]hiscsi_lookup_endpoint}(hjx-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjt-ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj-hhhj&-hMubj)}(h (u64 handle)h]j)}(h u64 handleh](h)}(hhh]j)}(hu64h]hu64}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jT-c.iscsi_lookup_endpointasbuh1hhj-ubjh)}(h h]h }(hj-hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-ubj)}(hhandleh]hhandle}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj-ubah}(h]h ]h"]h$]h&]jjuh1jhj-hhhj&-hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj-hhhj&-hMubah}(h]j -ah ](jjeh"]h$]h&]jj)jhuh1jIhj&-hMhj-hhubj)}(hhh]h)}(hget ep from handleh]hget ep from handle}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj&-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jDhhhj,hNhNubj)}(hg**Parameters** ``u64 handle`` endpoint handle **Description** Caller must do a iscsi_put_endpoint.h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj.ubj#)}(hhh]j()}(h``u64 handle`` endpoint handle h](j.)}(h``u64 handle``h]j4)}(hj-.h]h u64 handle}(hj/.hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj+.ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj'.ubjJ)}(hhh]h)}(hendpoint handleh]hendpoint handle}(hjF.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB.hMhjC.ubah}(h]h ]h"]h$]h&]uh1jIhj'.ubeh}(h]h ]h"]h$]h&]uh1j'hjB.hMhj$.ubah}(h]h ]h"]h$]h&]uh1j"hj.ubh)}(h**Description**h]j)}(hjh.h]h Description}(hjj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf.ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj.ubh)}(h$Caller must do a iscsi_put_endpoint.h]h$Caller must do a iscsi_put_endpoint.}(hj~.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@(iscsi_create_flashnode_sess (C function)c.iscsi_create_flashnode_sesshNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hstruct iscsi_bus_flash_session * iscsi_create_flashnode_sess (struct Scsi_Host *shost, int index, struct iscsi_transport *transport, int dd_size)h]jP)}(hstruct iscsi_bus_flash_session *iscsi_create_flashnode_sess(struct Scsi_Host *shost, int index, struct iscsi_transport *transport, int dd_size)h](jV)}(hjYh]hstruct}(hj.hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj.hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj.hhhj.hMubh)}(hhh]j)}(hiscsi_bus_flash_sessionh]hiscsi_bus_flash_session}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j)}jiscsi_create_flashnode_sesssbc.iscsi_create_flashnode_sessasbuh1hhj.hhhj.hMubjh)}(h h]h }(hj.hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj.hhhj.hMubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.hhhj.hMubjy)}(hiscsi_create_flashnode_sessh]j)}(hj.h]hiscsi_create_flashnode_sess}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj.hhhj.hMubj)}(hT(struct Scsi_Host *shost, int index, struct iscsi_transport *transport, int dd_size)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj'/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#/ubjh)}(h h]h }(hj4/hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj#/ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjE/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjB/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG/modnameN classnameNjj)}j]j.c.iscsi_create_flashnode_sessasbuh1hhj#/ubjh)}(h h]h }(hjc/hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj#/ubj )}(hj h]h*}(hjq/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#/ubj)}(hshosth]hshost}(hj~/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(h int indexh](j~)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj/ubjh)}(h h]h }(hj/hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj/ubj)}(hindexh]hindex}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(h!struct iscsi_transport *transporth](jV)}(hjYh]hstruct}(hj/hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj/ubjh)}(h h]h }(hj/hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj/ubh)}(hhh]j)}(hiscsi_transporth]hiscsi_transport}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/modnameN classnameNjj)}j]j.c.iscsi_create_flashnode_sessasbuh1hhj/ubjh)}(h h]h }(hj0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj/ubj )}(hj h]h*}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj)}(h transporth]h transport}(hj#0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubj)}(h int dd_sizeh](j~)}(hinth]hint}(hj<0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj80ubjh)}(h h]h }(hjJ0hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj80ubj)}(hdd_sizeh]hdd_size}(hjX0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj80ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubeh}(h]h ]h"]h$]h&]jjuh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj.hhhj.hMubah}(h]j.ah ](jjeh"]h$]h&]jj)jhuh1jIhj.hMhj.hhubj)}(hhh]h)}(h$Add flashnode session entry in sysfsh]h$Add flashnode session entry in sysfs}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jhj.hhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jDhhhj,hNhNubj)}(hX}**Parameters** ``struct Scsi_Host *shost`` pointer to host data ``int index`` index of flashnode to add in sysfs ``struct iscsi_transport *transport`` pointer to transport data ``int dd_size`` total size to allocate **Description** Adds a sysfs entry for the flashnode session attributes **Return** pointer to allocated flashnode sess on success ``NULL`` on failureh](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubj#)}(hhh](j()}(h1``struct Scsi_Host *shost`` pointer to host data h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj0h]hstruct Scsi_Host *shost}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj0ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubjJ)}(hhh]h)}(hpointer to host datah]hpointer to host data}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j'hj0hMhj0ubj()}(h1``int index`` index of flashnode to add in sysfs h](j.)}(h ``int index``h]j4)}(hj0h]h int index}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj0ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubjJ)}(hhh]h)}(h"index of flashnode to add in sysfsh]h"index of flashnode to add in sysfs}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jIhj0ubeh}(h]h ]h"]h$]h&]uh1j'hj1hMhj0ubj()}(h@``struct iscsi_transport *transport`` pointer to transport data h](j.)}(h%``struct iscsi_transport *transport``h]j4)}(hj51h]h!struct iscsi_transport *transport}(hj71hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj31ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj/1ubjJ)}(hhh]h)}(hpointer to transport datah]hpointer to transport data}(hjN1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ1hMhjK1ubah}(h]h ]h"]h$]h&]uh1jIhj/1ubeh}(h]h ]h"]h$]h&]uh1j'hjJ1hMhj0ubj()}(h'``int dd_size`` total size to allocate h](j.)}(h``int dd_size``h]j4)}(hjn1h]h int dd_size}(hjp1hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjl1ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjh1ubjJ)}(hhh]h)}(htotal size to allocateh]htotal size to allocate}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jIhjh1ubeh}(h]h ]h"]h$]h&]uh1j'hj1hMhj0ubeh}(h]h ]h"]h$]h&]uh1j"hj0ubh)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubh)}(h7Adds a sysfs entry for the flashnode session attributesh]h7Adds a sysfs entry for the flashnode session attributes}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubh)}(h **Return**h]j)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubh)}(hBpointer to allocated flashnode sess on success ``NULL`` on failureh](h/pointer to allocated flashnode sess on success }(hj1hhhNhNubj4)}(h``NULL``h]hNULL}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj1ubh on failure}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@(iscsi_create_flashnode_conn (C function)c.iscsi_create_flashnode_connhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hstruct iscsi_bus_flash_conn * iscsi_create_flashnode_conn (struct Scsi_Host *shost, struct iscsi_bus_flash_session *fnode_sess, struct iscsi_transport *transport, int dd_size)h]jP)}(hstruct iscsi_bus_flash_conn *iscsi_create_flashnode_conn(struct Scsi_Host *shost, struct iscsi_bus_flash_session *fnode_sess, struct iscsi_transport *transport, int dd_size)h](jV)}(hjYh]hstruct}(hj'2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj#2hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMubjh)}(h h]h }(hj52hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj#2hhhj42hMubh)}(hhh]j)}(hiscsi_bus_flash_connh]hiscsi_bus_flash_conn}(hjF2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjC2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH2modnameN classnameNjj)}j]j)}jiscsi_create_flashnode_connsbc.iscsi_create_flashnode_connasbuh1hhj#2hhhj42hMubjh)}(h h]h }(hjg2hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj#2hhhj42hMubj )}(hj h]h*}(hju2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#2hhhj42hMubjy)}(hiscsi_create_flashnode_connh]j)}(hjd2h]hiscsi_create_flashnode_conn}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj#2hhhj42hMubj)}(hu(struct Scsi_Host *shost, struct iscsi_bus_flash_session *fnode_sess, struct iscsi_transport *transport, int dd_size)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj2hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj2ubjh)}(h h]h }(hj2hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj2ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNjj)}j]jb2c.iscsi_create_flashnode_connasbuh1hhj2ubjh)}(h h]h }(hj2hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj2ubj )}(hj h]h*}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubj)}(hshosth]hshost}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h*struct iscsi_bus_flash_session *fnode_sessh](jV)}(hjYh]hstruct}(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj 3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj 3ubh)}(hhh]j)}(hiscsi_bus_flash_sessionh]hiscsi_bus_flash_session}(hj/3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj,3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj13modnameN classnameNjj)}j]jb2c.iscsi_create_flashnode_connasbuh1hhj 3ubjh)}(h h]h }(hjM3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj 3ubj )}(hj h]h*}(hj[3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj 3ubj)}(h fnode_sessh]h fnode_sess}(hjh3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj 3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h!struct iscsi_transport *transporth](jV)}(hjYh]hstruct}(hj3hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj}3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}3ubh)}(hhh]j)}(hiscsi_transporth]hiscsi_transport}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNjj)}j]jb2c.iscsi_create_flashnode_connasbuh1hhj}3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}3ubj)}(h transporth]h transport}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubj)}(h int dd_sizeh](j~)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj3ubjh)}(h h]h }(hj3hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj3ubj)}(hdd_sizeh]hdd_size}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2ubeh}(h]h ]h"]h$]h&]jjuh1jhj#2hhhj42hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj2hhhj42hMubah}(h]j2ah ](jjeh"]h$]h&]jj)jhuh1jIhj42hMhj2hhubj)}(hhh]h)}(h!Add flashnode conn entry in sysfsh]h!Add flashnode conn entry in sysfs}(hj74hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj44hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj42hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjO4jjO4jjjuh1jDhhhj,hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` pointer to host data ``struct iscsi_bus_flash_session *fnode_sess`` pointer to the parent flashnode session entry ``struct iscsi_transport *transport`` pointer to transport data ``int dd_size`` total size to allocate **Description** Adds a sysfs entry for the flashnode connection attributes **Return** pointer to allocated flashnode conn on success ``NULL`` on failureh](h)}(h**Parameters**h]j)}(hjY4h]h Parameters}(hj[4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW4ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjS4ubj#)}(hhh](j()}(h1``struct Scsi_Host *shost`` pointer to host data h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjx4h]hstruct Scsi_Host *shost}(hjz4hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjv4ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjr4ubjJ)}(hhh]h)}(hpointer to host datah]hpointer to host data}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jIhjr4ubeh}(h]h ]h"]h$]h&]uh1j'hj4hMhjo4ubj()}(h]``struct iscsi_bus_flash_session *fnode_sess`` pointer to the parent flashnode session entry h](j.)}(h.``struct iscsi_bus_flash_session *fnode_sess``h]j4)}(hj4h]h*struct iscsi_bus_flash_session *fnode_sess}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj4ubjJ)}(hhh]h)}(h-pointer to the parent flashnode session entryh]h-pointer to the parent flashnode session entry}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hj4hMhjo4ubj()}(h@``struct iscsi_transport *transport`` pointer to transport data h](j.)}(h%``struct iscsi_transport *transport``h]j4)}(hj4h]h!struct iscsi_transport *transport}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj4ubjJ)}(hhh]h)}(hpointer to transport datah]hpointer to transport data}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jIhj4ubeh}(h]h ]h"]h$]h&]uh1j'hj4hMhjo4ubj()}(h'``int dd_size`` total size to allocate h](j.)}(h``int dd_size``h]j4)}(hj#5h]h int dd_size}(hj%5hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj!5ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj5ubjJ)}(hhh]h)}(htotal size to allocateh]htotal size to allocate}(hj<5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj85hMhj95ubah}(h]h ]h"]h$]h&]uh1jIhj5ubeh}(h]h ]h"]h$]h&]uh1j'hj85hMhjo4ubeh}(h]h ]h"]h$]h&]uh1j"hjS4ubh)}(h**Description**h]j)}(hj^5h]h Description}(hj`5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\5ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjS4ubh)}(h:Adds a sysfs entry for the flashnode connection attributesh]h:Adds a sysfs entry for the flashnode connection attributes}(hjt5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjS4ubh)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjS4ubh)}(hBpointer to allocated flashnode conn on success ``NULL`` on failureh](h/pointer to allocated flashnode conn on success }(hj5hhhNhNubj4)}(h``NULL``h]hNULL}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj5ubh on failure}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjS4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@&iscsi_find_flashnode_sess (C function)c.iscsi_find_flashnode_sesshNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hhstruct device * iscsi_find_flashnode_sess (struct Scsi_Host *shost, const void *data, device_match_t fn)h]jP)}(hfstruct device *iscsi_find_flashnode_sess(struct Scsi_Host *shost, const void *data, device_match_t fn)h](jV)}(hjYh]hstruct}(hj5hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj5hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMcubjh)}(h h]h }(hj5hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj5hhhj5hMcubh)}(hhh]j)}(hdeviceh]hdevice}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj5modnameN classnameNjj)}j]j)}jiscsi_find_flashnode_sesssbc.iscsi_find_flashnode_sessasbuh1hhj5hhhj5hMcubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj5hhhj5hMcubj )}(hj h]h*}(hj*6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5hhhj5hMcubjy)}(hiscsi_find_flashnode_sessh]j)}(hj6h]hiscsi_find_flashnode_sess}(hj;6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj76ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj5hhhj5hMcubj)}(h>(struct Scsi_Host *shost, const void *data, device_match_t fn)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjV6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjR6ubjh)}(h h]h }(hjc6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR6ubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjt6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjq6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjv6modnameN classnameNjj)}j]j6c.iscsi_find_flashnode_sessasbuh1hhjR6ubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR6ubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjR6ubj)}(hshosth]hshost}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjR6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN6ubj)}(hconst void *datah](jV)}(hj~Ph]hconst}(hj6hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6ubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6ubj~)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj6ubjh)}(h h]h }(hj6hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6ubj )}(hj h]h*}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj)}(hdatah]hdata}(hj 7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN6ubj)}(hdevice_match_t fnh](h)}(hhh]j)}(hdevice_match_th]hdevice_match_t}(hj&7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj#7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(7modnameN classnameNjj)}j]j6c.iscsi_find_flashnode_sessasbuh1hhj7ubjh)}(h h]h }(hjD7hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj7ubj)}(hfnh]hfn}(hjR7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN6ubeh}(h]h ]h"]h$]h&]jjuh1jhj5hhhj5hMcubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj5hhhj5hMcubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jIhj5hMchj5hhubj)}(hhh]h)}(hfinds flashnode session entryh]hfinds flashnode session entry}(hj|7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMchjy7hhubah}(h]h ]h"]h$]h&]uh1jhj5hhhj5hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jDhhhj,hNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` pointer to host data ``const void *data`` pointer to data containing value to use for comparison ``device_match_t fn`` function pointer that does actual comparison **Description** Finds the flashnode session object comparing the data passed using logic defined in passed function pointer **Return** pointer to found flashnode session device object on success ``NULL`` on failureh](h)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMghj7ubj#)}(hhh](j()}(h1``struct Scsi_Host *shost`` pointer to host data h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj7h]hstruct Scsi_Host *shost}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj7ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMdhj7ubjJ)}(hhh]h)}(hpointer to host datah]hpointer to host data}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMdhj7ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j'hj7hMdhj7ubj()}(hL``const void *data`` pointer to data containing value to use for comparison h](j.)}(h``const void *data``h]j4)}(hj7h]hconst void *data}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj7ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMehj7ubjJ)}(hhh]h)}(h6pointer to data containing value to use for comparisonh]h6pointer to data containing value to use for comparison}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8hMehj 8ubah}(h]h ]h"]h$]h&]uh1jIhj7ubeh}(h]h ]h"]h$]h&]uh1j'hj 8hMehj7ubj()}(hC``device_match_t fn`` function pointer that does actual comparison h](j.)}(h``device_match_t fn``h]j4)}(hj/8h]hdevice_match_t fn}(hj18hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj-8ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMfhj)8ubjJ)}(hhh]h)}(h,function pointer that does actual comparisonh]h,function pointer that does actual comparison}(hjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD8hMfhjE8ubah}(h]h ]h"]h$]h&]uh1jIhj)8ubeh}(h]h ]h"]h$]h&]uh1j'hjD8hMfhj7ubeh}(h]h ]h"]h$]h&]uh1j"hj7ubh)}(h**Description**h]j)}(hjj8h]h Description}(hjl8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh8ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhhj7ubh)}(hkFinds the flashnode session object comparing the data passed using logic defined in passed function pointerh]hkFinds the flashnode session object comparing the data passed using logic defined in passed function pointer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMghj7ubh)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMjhj7ubh)}(hOpointer to found flashnode session device object on success ``NULL`` on failureh](h=ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj:=ubj#)}(hhh]j()}(h1``struct Scsi_Host *shost`` pointer to host data h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hj_=h]hstruct Scsi_Host *shost}(hja=hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj]=ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhjY=ubjJ)}(hhh]h)}(hpointer to host datah]hpointer to host data}(hjx=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt=hMhju=ubah}(h]h ]h"]h$]h&]uh1jIhjY=ubeh}(h]h ]h"]h$]h&]uh1j'hjt=hMhjV=ubah}(h]h ]h"]h$]h&]uh1j"hj:=ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj:=ubh)}(hqDestroys all the flashnode session entries and all corresponding children flashnode connection entries from sysfsh]hqDestroys all the flashnode session entries and all corresponding children flashnode connection entries from sysfs}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj:=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ iscsi_block_scsi_eh (C function)c.iscsi_block_scsi_ehhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(h/int iscsi_block_scsi_eh (struct scsi_cmnd *cmd)h]jP)}(h.int iscsi_block_scsi_eh(struct scsi_cmnd *cmd)h](j~)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj=hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM1ubjh)}(h h]h }(hj=hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj=hhhj=hM1ubjy)}(hiscsi_block_scsi_ehh]j)}(hiscsi_block_scsi_ehh]hiscsi_block_scsi_eh}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj=hhhj=hM1ubj)}(h(struct scsi_cmnd *cmd)h]j)}(hstruct scsi_cmnd *cmdh](jV)}(hjYh]hstruct}(hj>hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj>ubjh)}(h h]h }(hj)>hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj>ubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hj:>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<>modnameN classnameNjj)}j]j)}jj>sbc.iscsi_block_scsi_ehasbuh1hhj>ubjh)}(h h]h }(hjZ>hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj>ubj )}(hj h]h*}(hjh>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>ubj)}(hcmdh]hcmd}(hju>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj>ubah}(h]h ]h"]h$]h&]jjuh1jhj=hhhj=hM1ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj=hhhj=hM1ubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jIhj=hM1hj=hhubj)}(hhh]h)}(h3block scsi eh until session state has transistionedh]h3block scsi eh until session state has transistioned}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM1hj>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj=hM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jDhhhj,hNhNubj)}(hXJ**Parameters** ``struct scsi_cmnd *cmd`` scsi cmd passed to scsi eh handler **Description** If the session is down this function will wait for the recovery timer to fire or for the session to be logged back in. If the recovery timer fires then FAST_IO_FAIL is returned. The caller should pass this error value to the scsi eh.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM5hj>ubj#)}(hhh]j()}(h=``struct scsi_cmnd *cmd`` scsi cmd passed to scsi eh handler h](j.)}(h``struct scsi_cmnd *cmd``h]j4)}(hj>h]hstruct scsi_cmnd *cmd}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj>ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM2hj>ubjJ)}(hhh]h)}(h"scsi cmd passed to scsi eh handlerh]h"scsi cmd passed to scsi eh handler}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM2hj>ubah}(h]h ]h"]h$]h&]uh1jIhj>ubeh}(h]h ]h"]h$]h&]uh1j'hj>hM2hj>ubah}(h]h ]h"]h$]h&]uh1j"hj>ubh)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM4hj>ubh)}(hIf the session is down this function will wait for the recovery timer to fire or for the session to be logged back in. If the recovery timer fires then FAST_IO_FAIL is returned. The caller should pass this error value to the scsi eh.h]hIf the session is down this function will wait for the recovery timer to fire or for the session to be logged back in. If the recovery timer fires then FAST_IO_FAIL is returned. The caller should pass this error value to the scsi eh.}(hj1?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM3hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"iscsi_unblock_session (C function)c.iscsi_unblock_sessionhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(h>void iscsi_unblock_session (struct iscsi_cls_session *session)h]jP)}(h=void iscsi_unblock_session(struct iscsi_cls_session *session)h](j~)}(hvoidh]hvoid}(hj`?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj\?hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMubjh)}(h h]h }(hjo?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj\?hhhjn?hMubjy)}(hiscsi_unblock_sessionh]j)}(hiscsi_unblock_sessionh]hiscsi_unblock_session}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}?ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj\?hhhjn?hMubj)}(h#(struct iscsi_cls_session *session)h]j)}(h!struct iscsi_cls_session *sessionh](jV)}(hjYh]hstruct}(hj?hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj?ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubh)}(hhh]j)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj?modnameN classnameNjj)}j]j)}jj?sbc.iscsi_unblock_sessionasbuh1hhj?ubjh)}(h h]h }(hj?hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj?ubj )}(hj h]h*}(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj?ubj)}(hsessionh]hsession}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubah}(h]h ]h"]h$]h&]jjuh1jhj\?hhhjn?hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjX?hhhjn?hMubah}(h]jS?ah ](jjeh"]h$]h&]jj)jhuh1jIhjn?hMhjU?hhubj)}(hhh]h)}(h(set a session as logged in and start IO.h]h(set a session as logged in and start IO.}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jhjU?hhhjn?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8@jj8@jjjuh1jDhhhj,hNhNubj)}(h}**Parameters** ``struct iscsi_cls_session *session`` iscsi session **Description** Mark a session as ready to accept IO.h](h)}(h**Parameters**h]j)}(hjB@h]h Parameters}(hjD@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@@ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj<@ubj#)}(hhh]j()}(h4``struct iscsi_cls_session *session`` iscsi session h](j.)}(h%``struct iscsi_cls_session *session``h]j4)}(hja@h]h!struct iscsi_cls_session *session}(hjc@hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj_@ubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj[@ubjJ)}(hhh]h)}(h iscsi sessionh]h iscsi session}(hjz@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv@hMhjw@ubah}(h]h ]h"]h$]h&]uh1jIhj[@ubeh}(h]h ]h"]h$]h&]uh1j'hjv@hMhjX@ubah}(h]h ]h"]h$]h&]uh1j"hj<@ubh)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj<@ubh)}(h%Mark a session as ready to accept IO.h]h%Mark a session as ready to accept IO.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMhj<@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@(iscsi_force_destroy_session (C function)c.iscsi_force_destroy_sessionhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hDvoid iscsi_force_destroy_session (struct iscsi_cls_session *session)h]jP)}(hCvoid iscsi_force_destroy_session(struct iscsi_cls_session *session)h](j~)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj@hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM; ubjh)}(h h]h }(hj@hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj@hhhj@hM; ubjy)}(hiscsi_force_destroy_sessionh]j)}(hiscsi_force_destroy_sessionh]hiscsi_force_destroy_session}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj@hhhj@hM; ubj)}(h#(struct iscsi_cls_session *session)h]j)}(h!struct iscsi_cls_session *sessionh](jV)}(hjYh]hstruct}(hjAhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAubjh)}(h h]h }(hj+AhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubh)}(hhh]j)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjAmodnameN classnameNjj)}j]j)}jjAsbc.iscsi_force_destroy_sessionasbuh1hhjAubjh)}(h h]h }(hj\AhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAubj )}(hj h]h*}(hjjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAubj)}(hsessionh]hsession}(hjwAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjAubah}(h]h ]h"]h$]h&]jjuh1jhj@hhhj@hM; ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj@hhhj@hM; ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jIhj@hM; hj@hhubj)}(hhh]h)}(h!destroy a session from the kernelh]h!destroy a session from the kernel}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM; hjAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj@hM; ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1jDhhhj,hNhNubj)}(h**Parameters** ``struct iscsi_cls_session *session`` session to destroy **Description** Force the destruction of a session from the kernel. This should only be used when userspace is no longer running during system shutdown.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM? hjAubj#)}(hhh]j()}(h9``struct iscsi_cls_session *session`` session to destroy h](j.)}(h%``struct iscsi_cls_session *session``h]j4)}(hjAh]h!struct iscsi_cls_session *session}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjAubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM< hjAubjJ)}(hhh]h)}(hsession to destroyh]hsession to destroy}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM< hjAubah}(h]h ]h"]h$]h&]uh1jIhjAubeh}(h]h ]h"]h$]h&]uh1j'hjAhM< hjAubah}(h]h ]h"]h$]h&]uh1j"hjAubh)}(h**Description**h]j)}(hjBh]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM> hjAubh)}(hForce the destruction of a session from the kernel. This should only be used when userspace is no longer running during system shutdown.h]hForce the destruction of a session from the kernel. This should only be used when userspace is no longer running during system shutdown.}(hj3BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM= hjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@iscsi_alloc_conn (C function)c.iscsi_alloc_connhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hgstruct iscsi_cls_conn * iscsi_alloc_conn (struct iscsi_cls_session *session, int dd_size, uint32_t cid)h]jP)}(hestruct iscsi_cls_conn *iscsi_alloc_conn(struct iscsi_cls_session *session, int dd_size, uint32_t cid)h](jV)}(hjYh]hstruct}(hjbBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj^Bhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMb ubjh)}(h h]h }(hjpBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj^BhhhjoBhMb ubh)}(hhh]j)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~Bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]j)}jiscsi_alloc_connsbc.iscsi_alloc_connasbuh1hhj^BhhhjoBhMb ubjh)}(h h]h }(hjBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj^BhhhjoBhMb ubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj^BhhhjoBhMb ubjy)}(hiscsi_alloc_connh]j)}(hjBh]hiscsi_alloc_conn}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjBubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj^BhhhjoBhMb ubj)}(h>(struct iscsi_cls_session *session, int dd_size, uint32_t cid)h](j)}(h!struct iscsi_cls_session *sessionh](jV)}(hjYh]hstruct}(hjBhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjBubjh)}(h h]h }(hjBhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubh)}(hhh]j)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjBubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjBmodnameN classnameNjj)}j]jBc.iscsi_alloc_connasbuh1hhjBubjh)}(h h]h }(hjChhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjBubj )}(hj h]h*}(hj&ChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubj)}(hsessionh]hsession}(hj3ChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(h int dd_sizeh](j~)}(hinth]hint}(hjLChhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjHCubjh)}(h h]h }(hjZChhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHCubj)}(hdd_sizeh]hdd_size}(hjhChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHCubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubj)}(h uint32_t cidh](h)}(hhh]j)}(huint32_th]huint32_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]jBc.iscsi_alloc_connasbuh1hhj}Cubjh)}(h h]h }(hjChhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj}Cubj)}(hcidh]hcid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj}Cubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubeh}(h]h ]h"]h$]h&]jjuh1jhj^BhhhjoBhMb ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjZBhhhjoBhMb ubah}(h]jUBah ](jjeh"]h$]h&]jj)jhuh1jIhjoBhMb hjWBhhubj)}(hhh]h)}(halloc iscsi class connectionh]halloc iscsi class connection}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMb hjChhubah}(h]h ]h"]h$]h&]uh1jhjWBhhhjoBhMb ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jDhhhj,hNhNubj)}(h**Parameters** ``struct iscsi_cls_session *session`` iscsi cls session ``int dd_size`` private driver data size ``uint32_t cid`` connection idh](h)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMf hjCubj#)}(hhh](j()}(h8``struct iscsi_cls_session *session`` iscsi cls session h](j.)}(h%``struct iscsi_cls_session *session``h]j4)}(hjDh]h!struct iscsi_cls_session *session}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMc hjDubjJ)}(hhh]h)}(hiscsi cls sessionh]hiscsi cls session}(hj4DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0DhMc hj1Dubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j'hj0DhMc hjDubj()}(h)``int dd_size`` private driver data size h](j.)}(h``int dd_size``h]j4)}(hjTDh]h int dd_size}(hjVDhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjRDubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMd hjNDubjJ)}(hhh]h)}(hprivate driver data sizeh]hprivate driver data size}(hjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiDhMd hjjDubah}(h]h ]h"]h$]h&]uh1jIhjNDubeh}(h]h ]h"]h$]h&]uh1j'hjiDhMd hjDubj()}(h``uint32_t cid`` connection idh](j.)}(h``uint32_t cid``h]j4)}(hjDh]h uint32_t cid}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjDubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMf hjDubjJ)}(hhh]h)}(h connection idh]h connection id}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chMe hjDubah}(h]h ]h"]h$]h&]uh1jIhjDubeh}(h]h ]h"]h$]h&]uh1j'hjDhMf hjDubeh}(h]h ]h"]h$]h&]uh1j"hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@iscsi_add_conn (C function)c.iscsi_add_connhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(h0int iscsi_add_conn (struct iscsi_cls_conn *conn)h]jP)}(h/int iscsi_add_conn(struct iscsi_cls_conn *conn)h](j~)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjDhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM ubjh)}(h h]h }(hjDhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjDhhhjDhM ubjy)}(hiscsi_add_connh]j)}(hiscsi_add_connh]hiscsi_add_conn}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjEubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjDhhhjDhM ubj)}(h(struct iscsi_cls_conn *conn)h]j)}(hstruct iscsi_cls_conn *connh](jV)}(hjYh]hstruct}(hj$EhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj Eubjh)}(h h]h }(hj1EhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj Eubh)}(hhh]j)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjBEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?Eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDEmodnameN classnameNjj)}j]j)}jj Esbc.iscsi_add_connasbuh1hhj Eubjh)}(h h]h }(hjbEhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj Eubj )}(hj h]h*}(hjpEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj Eubj)}(hconnh]hconn}(hj}EhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj Eubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjEubah}(h]h ]h"]h$]h&]jjuh1jhjDhhhjDhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjDhhhjDhM ubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1jIhjDhM hjDhhubj)}(hhh]h)}(hadd iscsi class connectionh]hadd iscsi class connection}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjEhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jDhhhj,hNhNubj)}(h**Parameters** ``struct iscsi_cls_conn *conn`` iscsi cls connection **Description** This will expose iscsi_cls_conn to sysfs so make sure the related resources for sysfs attributes are initialized before calling this.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjEubj#)}(hhh]j()}(h5``struct iscsi_cls_conn *conn`` iscsi cls connection h](j.)}(h``struct iscsi_cls_conn *conn``h]j4)}(hjEh]hstruct iscsi_cls_conn *conn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjEubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjEubjJ)}(hhh]h)}(hiscsi cls connectionh]hiscsi cls connection}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jIhjEubeh}(h]h ]h"]h$]h&]uh1j'hjEhM hjEubah}(h]h ]h"]h$]h&]uh1j"hjEubh)}(h**Description**h]j)}(hj#Fh]h Description}(hj%FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Fubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjEubh)}(hThis will expose iscsi_cls_conn to sysfs so make sure the related resources for sysfs attributes are initialized before calling this.h]hThis will expose iscsi_cls_conn to sysfs so make sure the related resources for sysfs attributes are initialized before calling this.}(hj9FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@iscsi_remove_conn (C function)c.iscsi_remove_connhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(h4void iscsi_remove_conn (struct iscsi_cls_conn *conn)h]jP)}(h3void iscsi_remove_conn(struct iscsi_cls_conn *conn)h](j~)}(hvoidh]hvoid}(hjhFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjdFhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM ubjh)}(h h]h }(hjwFhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjdFhhhjvFhM ubjy)}(hiscsi_remove_connh]j)}(hiscsi_remove_connh]hiscsi_remove_conn}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjdFhhhjvFhM ubj)}(h(struct iscsi_cls_conn *conn)h]j)}(hstruct iscsi_cls_conn *connh](jV)}(hjYh]hstruct}(hjFhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjFubjh)}(h h]h }(hjFhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjFubh)}(hhh]j)}(hiscsi_cls_connh]hiscsi_cls_conn}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jjFsbc.iscsi_remove_connasbuh1hhjFubjh)}(h h]h }(hjFhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjFubj )}(hj h]h*}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjFubj)}(hconnh]hconn}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubah}(h]h ]h"]h$]h&]jjuh1jhjdFhhhjvFhM ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj`FhhhjvFhM ubah}(h]j[Fah ](jjeh"]h$]h&]jj)jhuh1jIhjvFhM hj]Fhhubj)}(hhh]h)}(h(remove iscsi class connection from sysfsh]h(remove iscsi class connection from sysfs}(hj(GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hj%Ghhubah}(h]h ]h"]h$]h&]uh1jhj]FhhhjvFhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@Gjj@Gjjjuh1jDhhhj,hNhNubj)}(h**Parameters** ``struct iscsi_cls_conn *conn`` iscsi cls connection **Description** Remove iscsi_cls_conn from sysfs, and wait for previous read/write of iscsi_cls_conn's attributes in sysfs to finish.h](h)}(h**Parameters**h]j)}(hjJGh]h Parameters}(hjLGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjDGubj#)}(hhh]j()}(h5``struct iscsi_cls_conn *conn`` iscsi cls connection h](j.)}(h``struct iscsi_cls_conn *conn``h]j4)}(hjiGh]hstruct iscsi_cls_conn *conn}(hjkGhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjgGubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjcGubjJ)}(hhh]h)}(hiscsi cls connectionh]hiscsi cls connection}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~GhM hjGubah}(h]h ]h"]h$]h&]uh1jIhjcGubeh}(h]h ]h"]h$]h&]uh1j'hj~GhM hj`Gubah}(h]h ]h"]h$]h&]uh1j"hjDGubh)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjDGubh)}(huRemove iscsi_cls_conn from sysfs, and wait for previous read/write of iscsi_cls_conn's attributes in sysfs to finish.h]hwRemove iscsi_cls_conn from sysfs, and wait for previous read/write of iscsi_cls_conn’s attributes in sysfs to finish.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM hjDGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ iscsi_session_event (C function)c.iscsi_session_eventhNtauh1j3hj,hhhNhNubjE)}(hhh](jJ)}(hVint iscsi_session_event (struct iscsi_cls_session *session, enum iscsi_uevent_e event)h]jP)}(hUint iscsi_session_event(struct iscsi_cls_session *session, enum iscsi_uevent_e event)h](j~)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjGhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM& ubjh)}(h h]h }(hjGhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjGhhhjGhM& ubjy)}(hiscsi_session_eventh]j)}(hiscsi_session_eventh]hiscsi_session_event}(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjGhhhjGhM& ubj)}(h>(struct iscsi_cls_session *session, enum iscsi_uevent_e event)h](j)}(h!struct iscsi_cls_session *sessionh](jV)}(hjYh]hstruct}(hj&HhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj"Hubjh)}(h h]h }(hj3HhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj"Hubh)}(hhh]j)}(hiscsi_cls_sessionh]hiscsi_cls_session}(hjDHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFHmodnameN classnameNjj)}j]j)}jj Hsbc.iscsi_session_eventasbuh1hhj"Hubjh)}(h h]h }(hjdHhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj"Hubj )}(hj h]h*}(hjrHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj"Hubj)}(hsessionh]hsession}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"Hubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubj)}(henum iscsi_uevent_e eventh](jV)}(hjR9h]henum}(hjHhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjHubjh)}(h h]h }(hjHhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHubh)}(hhh]j)}(hiscsi_uevent_eh]hiscsi_uevent_e}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHmodnameN classnameNjj)}j]j`Hc.iscsi_session_eventasbuh1hhjHubjh)}(h h]h }(hjHhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjHubj)}(heventh]hevent}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHubeh}(h]h ]h"]h$]h&]jjuh1jhjGhhhjGhM& ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjGhhhjGhM& ubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1jIhjGhM& hjGhhubj)}(hhh]h)}(h$send session destr. completion eventh]h$send session destr. completion event}(hj IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM& hj Ihhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhM& ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$Ijj$Ijjjuh1jDhhhj,hNhNubj)}(hz**Parameters** ``struct iscsi_cls_session *session`` iscsi class session ``enum iscsi_uevent_e event`` type of eventh](h)}(h**Parameters**h]j)}(hj.Ih]h Parameters}(hj0IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Iubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM* hj(Iubj#)}(hhh](j()}(h:``struct iscsi_cls_session *session`` iscsi class session h](j.)}(h%``struct iscsi_cls_session *session``h]j4)}(hjMIh]h!struct iscsi_cls_session *session}(hjOIhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjKIubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM' hjGIubjJ)}(hhh]h)}(hiscsi class sessionh]hiscsi class session}(hjfIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbIhM' hjcIubah}(h]h ]h"]h$]h&]uh1jIhjGIubeh}(h]h ]h"]h$]h&]uh1j'hjbIhM' hjDIubj()}(h+``enum iscsi_uevent_e event`` type of eventh](j.)}(h``enum iscsi_uevent_e event``h]j4)}(hjIh]henum iscsi_uevent_e event}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjIubah}(h]h ]h"]h$]h&]uh1j-hd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM) hjIubjJ)}(hhh]h)}(h type of eventh]h type of event}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:249: ./drivers/scsi/scsi_transport_iscsi.chM( hjIubah}(h]h ]h"]h$]h&]uh1jIhjIubeh}(h]h ]h"]h$]h&]uh1j'hjIhM) hjDIubeh}(h]h ]h"]h$]h&]uh1j"hj(Iubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj,hhhNhNubeh}(h]iscsi-transport-classah ]h"]iscsi transport classah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h*Serial Attached SCSI (SAS) transport classh]h*Serial Attached SCSI (SAS) transport class}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhhhhhKubh)}(hThe file drivers/scsi/scsi_transport_sas.c defines transport attributes for Serial Attached SCSI, a variant of SATA aimed at large high-end systems.h]hThe file drivers/scsi/scsi_transport_sas.c defines transport attributes for Serial Attached SCSI, a variant of SATA aimed at large high-end systems.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjIhhubh)}(hThe SAS transport class contains common code to deal with SAS HBAs, an approximated representation of SAS topologies in the driver model, and various sysfs attributes to expose these topologies and management interfaces to userspace.h]hThe SAS transport class contains common code to deal with SAS HBAs, an approximated representation of SAS topologies in the driver model, and various sysfs attributes to expose these topologies and management interfaces to userspace.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjIhhubh)}(hXIn addition to the basic SCSI core objects this transport class introduces two additional intermediate objects: The SAS PHY as represented by struct sas_phy defines an "outgoing" PHY on a SAS HBA or Expander, and the SAS remote PHY represented by struct sas_rphy defines an "incoming" PHY on a SAS Expander or end device. Note that this is purely a software concept, the underlying hardware for a PHY and a remote PHY is the exactly the same.h]hXIn addition to the basic SCSI core objects this transport class introduces two additional intermediate objects: The SAS PHY as represented by struct sas_phy defines an “outgoing” PHY on a SAS HBA or Expander, and the SAS remote PHY represented by struct sas_rphy defines an “incoming” PHY on a SAS Expander or end device. Note that this is purely a software concept, the underlying hardware for a PHY and a remote PHY is the exactly the same.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjIhhubh)}(hThere is no concept of a SAS port in this code, users can see what PHYs form a wide port based on the port_identifier attribute, which is the same for all PHYs in a port.h]hThere is no concept of a SAS port in this code, users can see what PHYs form a wide port based on the port_identifier attribute, which is the same for all PHYs in a port.}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjIhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ sas_remove_children (C function)c.sas_remove_childrenhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h-void sas_remove_children (struct device *dev)h]jP)}(h,void sas_remove_children(struct device *dev)h](j~)}(hvoidh]hvoid}(hj1JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj-Jhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM'ubjh)}(h h]h }(hj@JhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj-Jhhhj?JhM'ubjy)}(hsas_remove_childrenh]j)}(hsas_remove_childrenh]hsas_remove_children}(hjRJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjNJubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj-Jhhhj?JhM'ubj)}(h(struct device *dev)h]j)}(hstruct device *devh](jV)}(hjYh]hstruct}(hjnJhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjJubjh)}(h h]h }(hj{JhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjjJubh)}(hhh]j)}(hdeviceh]hdevice}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNjj)}j]j)}jjTJsbc.sas_remove_childrenasbuh1hhjjJubjh)}(h h]h }(hjJhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjjJubj )}(hj h]h*}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjjJubj)}(hdevh]hdev}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjJubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjfJubah}(h]h ]h"]h$]h&]jjuh1jhj-Jhhhj?JhM'ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj)Jhhhj?JhM'ubah}(h]j$Jah ](jjeh"]h$]h&]jj)jhuh1jIhj?JhM'hj&Jhhubj)}(hhh]h)}(h'tear down a devices SAS data structuresh]h'tear down a devices SAS data structures}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM'hjJhhubah}(h]h ]h"]h$]h&]uh1jhj&Jhhhj?JhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj Kjj Kjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct device *dev`` device belonging to the sas object **Description** Removes all SAS PHYs and remote PHYs for a given objecth](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM+hj Kubj#)}(hhh]j()}(h:``struct device *dev`` device belonging to the sas object h](j.)}(h``struct device *dev``h]j4)}(hj2Kh]hstruct device *dev}(hj4KhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj0Kubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM(hj,KubjJ)}(hhh]h)}(h"device belonging to the sas objecth]h"device belonging to the sas object}(hjKKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGKhM(hjHKubah}(h]h ]h"]h$]h&]uh1jIhj,Kubeh}(h]h ]h"]h$]h&]uh1j'hjGKhM(hj)Kubah}(h]h ]h"]h$]h&]uh1j"hj Kubh)}(h**Description**h]j)}(hjmKh]h Description}(hjoKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkKubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM*hj Kubh)}(h7Removes all SAS PHYs and remote PHYs for a given objecth]h7Removes all SAS PHYs and remote PHYs for a given object}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM)hj Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_remove_host (C function)c.sas_remove_hosthNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h.void sas_remove_host (struct Scsi_Host *shost)h]jP)}(h-void sas_remove_host(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjKhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM4ubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKhhhjKhM4ubjy)}(hsas_remove_hosth]j)}(hsas_remove_hosth]hsas_remove_host}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjKhhhjKhM4ubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjKhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjKubjh)}(h h]h }(hjKhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj Lubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNjj)}j]j)}jjKsbc.sas_remove_hostasbuh1hhjKubjh)}(h h]h }(hj-LhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjKubj )}(hj h]h*}(hj;LhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjKubj)}(hshosth]hshost}(hjHLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjKubah}(h]h ]h"]h$]h&]jjuh1jhjKhhhjKhM4ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjKhhhjKhM4ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jIhjKhM4hjKhhubj)}(hhh]h)}(h+tear down a Scsi_Host's SAS data structuresh]h-tear down a Scsi_Host’s SAS data structures}(hjrLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM4hjoLhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jDhhhjIhNhNubj)}(hX**Parameters** ``struct Scsi_Host *shost`` Scsi Host that is torn down **Description** Removes all SAS PHYs and remote PHYs for a given Scsi_Host and remove the Scsi_Host as well. **Note** Do not call scsi_remove_host() on the Scsi_Host any more, as it is already removed.h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM8hjLubj#)}(hhh]j()}(h8``struct Scsi_Host *shost`` Scsi Host that is torn down h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjLh]hstruct Scsi_Host *shost}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjLubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM5hjLubjJ)}(hhh]h)}(hScsi Host that is torn downh]hScsi Host that is torn down}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM5hjLubah}(h]h ]h"]h$]h&]uh1jIhjLubeh}(h]h ]h"]h$]h&]uh1j'hjLhM5hjLubah}(h]h ]h"]h$]h&]uh1j"hjLubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM7hjLubh)}(h\Removes all SAS PHYs and remote PHYs for a given Scsi_Host and remove the Scsi_Host as well.h]h\Removes all SAS PHYs and remote PHYs for a given Scsi_Host and remove the Scsi_Host as well.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM6hjLubh)}(h**Note**h]j)}(hjMh]hNote}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM9hjLubh)}(hSDo not call scsi_remove_host() on the Scsi_Host any more, as it is already removed.h]hSDo not call scsi_remove_host() on the Scsi_Host any more, as it is already removed.}(hj+MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM:hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_get_address (C function)c.sas_get_addresshNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h.u64 sas_get_address (struct scsi_device *sdev)h]jP)}(h-u64 sas_get_address(struct scsi_device *sdev)h](h)}(hhh]j)}(hu64h]hu64}(hj]MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_MmodnameN classnameNjj)}j]j)}jsas_get_addresssbc.sas_get_addressasbuh1hhjVMhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMEubjh)}(h h]h }(hjMhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjVMhhhj~MhMEubjy)}(hsas_get_addressh]j)}(hj{Mh]hsas_get_address}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjVMhhhj~MhMEubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjMhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjMubjh)}(h h]h }(hjMhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjMubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jyMc.sas_get_addressasbuh1hhjMubjh)}(h h]h }(hjMhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjMubj )}(hj h]h*}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjMubj)}(hsdevh]hsdev}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjMubah}(h]h ]h"]h$]h&]jjuh1jhjVMhhhj~MhMEubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjRMhhhj~MhMEubah}(h]jMMah ](jjeh"]h$]h&]jj)jhuh1jIhj~MhMEhjOMhhubj)}(hhh]h)}(h$return the SAS address of the deviceh]h$return the SAS address of the device}(hj-NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMEhj*Nhhubah}(h]h ]h"]h$]h&]uh1jhjOMhhhj~MhMEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjENjjENjjjuh1jDhhhjIhNhNubj)}(hw**Parameters** ``struct scsi_device *sdev`` scsi device **Description** Returns the SAS address of the scsi deviceh](h)}(h**Parameters**h]j)}(hjONh]h Parameters}(hjQNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMIhjINubj#)}(hhh]j()}(h)``struct scsi_device *sdev`` scsi device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjnNh]hstruct scsi_device *sdev}(hjpNhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjlNubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMFhjhNubjJ)}(hhh]h)}(h scsi deviceh]h scsi device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMFhjNubah}(h]h ]h"]h$]h&]uh1jIhjhNubeh}(h]h ]h"]h$]h&]uh1j'hjNhMFhjeNubah}(h]h ]h"]h$]h&]uh1j"hjINubh)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMHhjINubh)}(h*Returns the SAS address of the scsi deviceh]h*Returns the SAS address of the scsi device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMGhjINubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_tlr_supported (C function)c.sas_tlr_supportedhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h9unsigned int sas_tlr_supported (struct scsi_device *sdev)h]jP)}(h8unsigned int sas_tlr_supported(struct scsi_device *sdev)h](j~)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMSubjh)}(h h]h }(hjNhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjNhhhjNhMSubj~)}(hinth]hint}(hj OhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjNhhhjNhMSubjh)}(h h]h }(hjOhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjNhhhjNhMSubjy)}(hsas_tlr_supportedh]j)}(hsas_tlr_supportedh]hsas_tlr_supported}(hj+OhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj'Oubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjNhhhjNhMSubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjGOhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjCOubjh)}(h h]h }(hjTOhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjCOubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjeOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjbOubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgOmodnameN classnameNjj)}j]j)}jj-Osbc.sas_tlr_supportedasbuh1hhjCOubjh)}(h h]h }(hjOhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjCOubj )}(hj h]h*}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjCOubj)}(hsdevh]hsdev}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?Oubah}(h]h ]h"]h$]h&]jjuh1jhjNhhhjNhMSubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjNhhhjNhMSubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1jIhjNhMShjNhhubj)}(hhh]h)}(hchecking TLR bit in vpd 0x90h]hchecking TLR bit in vpd 0x90}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMShjOhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjNhMSubeh}(h]h ](jfunctioneh"]h$]h&]jjjjOjjOjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct scsi_device *sdev`` scsi device struct **Description** Check Transport Layer Retries are supported or not. If vpd page 0x90 is present, TRL is supported.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMWhjOubj#)}(hhh]j()}(h0``struct scsi_device *sdev`` scsi device struct h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj Ph]hstruct scsi_device *sdev}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj Pubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMThjPubjJ)}(hhh]h)}(hscsi device structh]hscsi device struct}(hj$PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj PhMThj!Pubah}(h]h ]h"]h$]h&]uh1jIhjPubeh}(h]h ]h"]h$]h&]uh1j'hj PhMThjPubah}(h]h ]h"]h$]h&]uh1j"hjOubh)}(h**Description**h]j)}(hjFPh]h Description}(hjHPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDPubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMVhjOubh)}(hbCheck Transport Layer Retries are supported or not. If vpd page 0x90 is present, TRL is supported.h]hbCheck Transport Layer Retries are supported or not. If vpd page 0x90 is present, TRL is supported.}(hj\PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMUhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_disable_tlr (C function)c.sas_disable_tlrhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h/void sas_disable_tlr (struct scsi_device *sdev)h]jP)}(h.void sas_disable_tlr(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjPhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMyubjh)}(h h]h }(hjPhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPhhhjPhMyubjy)}(hsas_disable_tlrh]j)}(hsas_disable_tlrh]hsas_disable_tlr}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjPubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjPhhhjPhMyubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjPhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjPubjh)}(h h]h }(hjPhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j)}jjPsbc.sas_disable_tlrasbuh1hhjPubjh)}(h h]h }(hjQhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjPubj )}(hj h]h*}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjPubj)}(hsdevh]hsdev}(hj!QhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjPhhhjPhMyubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjPhhhjPhMyubah}(h]j~Pah ](jjeh"]h$]h&]jj)jhuh1jIhjPhMyhjPhhubj)}(hhh]h)}(hsetting TLR flagsh]hsetting TLR flags}(hjKQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMyhjHQhhubah}(h]h ]h"]h$]h&]uh1jhjPhhhjPhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcQjjcQjjjuh1jDhhhjIhNhNubj)}(hq**Parameters** ``struct scsi_device *sdev`` scsi device struct **Description** Seting tlr_enabled flag to 0.h](h)}(h**Parameters**h]j)}(hjmQh]h Parameters}(hjoQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkQubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM}hjgQubj#)}(hhh]j()}(h0``struct scsi_device *sdev`` scsi device struct h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjQh]hstruct scsi_device *sdev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjQubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMzhjQubjJ)}(hhh]h)}(hscsi device structh]hscsi device struct}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMzhjQubah}(h]h ]h"]h$]h&]uh1jIhjQubeh}(h]h ]h"]h$]h&]uh1j'hjQhMzhjQubah}(h]h ]h"]h$]h&]uh1j"hjgQubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM|hjgQubh)}(hSeting tlr_enabled flag to 0.h]hSeting tlr_enabled flag to 0.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM{hjgQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_enable_tlr (C function)c.sas_enable_tlrhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h.void sas_enable_tlr (struct scsi_device *sdev)h]jP)}(h-void sas_enable_tlr(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjRhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjRhhhjRhMubjy)}(hsas_enable_tlrh]j)}(hsas_enable_tlrh]hsas_enable_tlr}(hj-RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)Rubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjRhhhjRhMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjIRhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjERubjh)}(h h]h }(hjVRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjERubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjgRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjiRmodnameN classnameNjj)}j]j)}jj/Rsbc.sas_enable_tlrasbuh1hhjERubjh)}(h h]h }(hjRhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjERubj )}(hj h]h*}(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjERubj)}(hsdevh]hsdev}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjERubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjARubah}(h]h ]h"]h$]h&]jjuh1jhjRhhhjRhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjRhhhjRhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jIhjRhMhjRhhubj)}(hhh]h)}(hsetting TLR flagsh]hsetting TLR flags}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjRhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jDhhhjIhNhNubj)}(hn**Parameters** ``struct scsi_device *sdev`` scsi device struct **Description** Seting tlr_enabled flag 1.h](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjRubj#)}(hhh]j()}(h0``struct scsi_device *sdev`` scsi device struct h](j.)}(h``struct scsi_device *sdev``h]j4)}(hj Sh]hstruct scsi_device *sdev}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj Subah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjSubjJ)}(hhh]h)}(hscsi device structh]hscsi device struct}(hj&ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ShMhj#Subah}(h]h ]h"]h$]h&]uh1jIhjSubeh}(h]h ]h"]h$]h&]uh1j'hj"ShMhjSubah}(h]h ]h"]h$]h&]uh1j"hjRubh)}(h**Description**h]j)}(hjHSh]h Description}(hjJShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFSubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjRubh)}(hSeting tlr_enabled flag 1.h]hSeting tlr_enabled flag 1.}(hj^ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@'sas_ata_ncq_prio_supported (C function)c.sas_ata_ncq_prio_supportedhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h:bool sas_ata_ncq_prio_supported (struct scsi_device *sdev)h]jP)}(h9bool sas_ata_ncq_prio_supported(struct scsi_device *sdev)h](j~)}(hjh]hbool}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjShhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjShhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjShhhjShMubjy)}(hsas_ata_ncq_prio_supportedh]j)}(hsas_ata_ncq_prio_supportedh]hsas_ata_ncq_prio_supported}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjShhhjShMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjShhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSubjh)}(h h]h }(hjShhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNjj)}j]j)}jjSsbc.sas_ata_ncq_prio_supportedasbuh1hhjSubjh)}(h h]h }(hjThhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSubj )}(hj h]h*}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSubj)}(hsdevh]hsdev}(hj"ThhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjShhhjShMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjShhhjShMubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jIhjShMhjShhubj)}(hhh]h)}(h*Check for ATA NCQ command priority supporth]h*Check for ATA NCQ command priority support}(hjLThhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjIThhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdTjjdTjjjuh1jDhhhjIhNhNubj)}(hX **Parameters** ``struct scsi_device *sdev`` SCSI device **Description** Check if an ATA device supports NCQ priority using VPD page 89h (ATA Information). Since this VPD page is implemented only for ATA devices, this function always returns false for SCSI devices.h](h)}(h**Parameters**h]j)}(hjnTh]h Parameters}(hjpThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlTubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjhTubj#)}(hhh]j()}(h)``struct scsi_device *sdev`` SCSI device h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjTh]hstruct scsi_device *sdev}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjTubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjTubjJ)}(hhh]h)}(h SCSI deviceh]h SCSI device}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jIhjTubeh}(h]h ]h"]h$]h&]uh1j'hjThMhjTubah}(h]h ]h"]h$]h&]uh1j"hjhTubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjhTubh)}(hCheck if an ATA device supports NCQ priority using VPD page 89h (ATA Information). Since this VPD page is implemented only for ATA devices, this function always returns false for SCSI devices.h]hCheck if an ATA device supports NCQ priority using VPD page 89h (ATA Information). Since this VPD page is implemented only for ATA devices, this function always returns false for SCSI devices.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjhTubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_phy_alloc (C function)c.sas_phy_allochNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hBstruct sas_phy * sas_phy_alloc (struct device *parent, int number)h]jP)}(h@struct sas_phy *sas_phy_alloc(struct device *parent, int number)h](jV)}(hjYh]hstruct}(hj UhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj Uhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjUhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj UhhhjUhMubh)}(hhh]j)}(hsas_phyh]hsas_phy}(hj,UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj)Uubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.UmodnameN classnameNjj)}j]j)}j sas_phy_allocsbc.sas_phy_allocasbuh1hhj UhhhjUhMubjh)}(h h]h }(hjMUhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj UhhhjUhMubj )}(hj h]h*}(hj[UhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj UhhhjUhMubjy)}(h sas_phy_alloch]j)}(hjJUh]h sas_phy_alloc}(hjlUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhUubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj UhhhjUhMubj)}(h#(struct device *parent, int number)h](j)}(hstruct device *parenth](jV)}(hjYh]hstruct}(hjUhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjUubjh)}(h h]h }(hjUhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUubh)}(hhh]j)}(hdeviceh]hdevice}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjUmodnameN classnameNjj)}j]jHUc.sas_phy_allocasbuh1hhjUubjh)}(h h]h }(hjUhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUubj )}(hj h]h*}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjUubj)}(hparenth]hparent}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubj)}(h int numberh](j~)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjUubjh)}(h h]h }(hjVhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjUubj)}(hnumberh]hnumber}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjUubeh}(h]h ]h"]h$]h&]jjuh1jhj UhhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjUhhhjUhMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jIhjUhMhjUhhubj)}(hhh]h)}(h,allocates and initialize a SAS PHY structureh]h,allocates and initialize a SAS PHY structure}(hj=VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj:Vhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUVjjUVjjjuh1jDhhhjIhNhNubj)}(hXK**Parameters** ``struct device *parent`` Parent device ``int number`` Phy index **Description** Allocates an SAS PHY structure. It will be added in the device tree below the device specified by **parent**, which has to be either a Scsi_Host or sas_rphy. **Return** SAS PHY allocated or ``NULL`` if the allocation failed./h](h)}(h**Parameters**h]j)}(hj_Vh]h Parameters}(hjaVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Vubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjYVubj#)}(hhh](j()}(h(``struct device *parent`` Parent device h](j.)}(h``struct device *parent``h]j4)}(hj~Vh]hstruct device *parent}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|Vubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjxVubjJ)}(hhh]h)}(h Parent deviceh]h Parent device}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jIhjxVubeh}(h]h ]h"]h$]h&]uh1j'hjVhMhjuVubj()}(h``int number`` Phy index h](j.)}(h``int number``h]j4)}(hjVh]h int number}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjVubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjVubjJ)}(hhh]h)}(h Phy indexh]h Phy index}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jIhjVubeh}(h]h ]h"]h$]h&]uh1j'hjVhMhjuVubeh}(h]h ]h"]h$]h&]uh1j"hjYVubh)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjYVubh)}(hAllocates an SAS PHY structure. It will be added in the device tree below the device specified by **parent**, which has to be either a Scsi_Host or sas_rphy.h](hcAllocates an SAS PHY structure. It will be added in the device tree below the device specified by }(hjWhhhNhNubj)}(h **parent**h]hparent}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh1, which has to be either a Scsi_Host or sas_rphy.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjYVubh)}(h **Return**h]j)}(hj+Wh]hReturn}(hj-WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Wubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjYVubh)}(h7SAS PHY allocated or ``NULL`` if the allocation failed.h](hSAS PHY allocated or }(hjAWhhhNhNubj4)}(h``NULL``h]hNULL}(hjIWhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjAWubh if the allocation failed.}(hjAWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjYVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_phy_add (C function) c.sas_phy_addhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h%int sas_phy_add (struct sas_phy *phy)h]jP)}(h$int sas_phy_add(struct sas_phy *phy)h](j~)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj~Whhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~WhhhjWhMubjy)}(h sas_phy_addh]j)}(h sas_phy_addh]h sas_phy_add}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj~WhhhjWhMubj)}(h(struct sas_phy *phy)h]j)}(hstruct sas_phy *phyh](jV)}(hjYh]hstruct}(hjWhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubh)}(hhh]j)}(hsas_phyh]hsas_phy}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]j)}jjWsb c.sas_phy_addasbuh1hhjWubjh)}(h h]h }(hjWhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWubj )}(hj h]h*}(hj XhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubj)}(hphyh]hphy}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubah}(h]h ]h"]h$]h&]jjuh1jhj~WhhhjWhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjzWhhhjWhMubah}(h]juWah ](jjeh"]h$]h&]jj)jhuh1jIhjWhMhjwWhhubj)}(hhh]h)}(h%add a SAS PHY to the device hierarchyh]h%add a SAS PHY to the device hierarchy}(hjBXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj?Xhhubah}(h]h ]h"]h$]h&]uh1jhjwWhhhjWhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZXjjZXjjjuh1jDhhhjIhNhNubj)}(h~**Parameters** ``struct sas_phy *phy`` The PHY to be added **Description** Publishes a SAS PHY to the rest of the system.h](h)}(h**Parameters**h]j)}(hjdXh]h Parameters}(hjfXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbXubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj^Xubj#)}(hhh]j()}(h,``struct sas_phy *phy`` The PHY to be added h](j.)}(h``struct sas_phy *phy``h]j4)}(hjXh]hstruct sas_phy *phy}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjXubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj}XubjJ)}(hhh]h)}(hThe PHY to be addedh]hThe PHY to be added}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjXubah}(h]h ]h"]h$]h&]uh1jIhj}Xubeh}(h]h ]h"]h$]h&]uh1j'hjXhMhjzXubah}(h]h ]h"]h$]h&]uh1j"hj^Xubh)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj^Xubh)}(h.Publishes a SAS PHY to the rest of the system.h]h.Publishes a SAS PHY to the rest of the system.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj^Xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_phy_free (C function)c.sas_phy_freehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h'void sas_phy_free (struct sas_phy *phy)h]jP)}(h&void sas_phy_free(struct sas_phy *phy)h](j~)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjXhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjYhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjXhhhjYhMubjy)}(h sas_phy_freeh]j)}(h sas_phy_freeh]h sas_phy_free}(hj$YhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj Yubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjXhhhjYhMubj)}(h(struct sas_phy *phy)h]j)}(hstruct sas_phy *phyh](jV)}(hjYh]hstruct}(hj@YhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj)}(hphyh]hphy}(hjK[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjZubah}(h]h ]h"]h$]h&]jjuh1jhjZhhhjZhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjZhhhjZhMubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1jIhjZhMhjZhhubj)}(hhh]h)}(hremove SAS PHYh]hremove SAS PHY}(hju[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjr[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_phy *phy`` SAS PHY to remove **Description** Removes the specified SAS PHY. If the SAS PHY has an associated remote PHY it is removed before.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj[ubj#)}(hhh]j()}(h*``struct sas_phy *phy`` SAS PHY to remove h](j.)}(h``struct sas_phy *phy``h]j4)}(hj[h]hstruct sas_phy *phy}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj[ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj[ubjJ)}(hhh]h)}(hSAS PHY to removeh]hSAS PHY to remove}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jIhj[ubeh}(h]h ]h"]h$]h&]uh1j'hj[hMhj[ubah}(h]h ]h"]h$]h&]uh1j"hj[ubh)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj[ubh)}(haRemoves the specified SAS PHY. If the SAS PHY has an associated remote PHY it is removed before.h]haRemoves the specified SAS PHY. If the SAS PHY has an associated remote PHY it is removed before.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_is_sas_phy (C function)c.scsi_is_sas_phyhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h.int scsi_is_sas_phy (const struct device *dev)h]jP)}(h-int scsi_is_sas_phy(const struct device *dev)h](j~)}(hinth]hint}(hj6\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj2\hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM$ubjh)}(h h]h }(hjE\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj2\hhhjD\hM$ubjy)}(hscsi_is_sas_phyh]j)}(hscsi_is_sas_phyh]hscsi_is_sas_phy}(hjW\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjS\ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj2\hhhjD\hM$ubj)}(h(const struct device *dev)h]j)}(hconst struct device *devh](jV)}(hj~Ph]hconst}(hjs\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjo\ubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjo\ubjV)}(hjYh]hstruct}(hj\hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjo\ubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjo\ubh)}(hhh]j)}(hdeviceh]hdevice}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jjY\sbc.scsi_is_sas_phyasbuh1hhjo\ubjh)}(h h]h }(hj\hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjo\ubj )}(hj h]h*}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjo\ubj)}(hdevh]hdev}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjo\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjk\ubah}(h]h ]h"]h$]h&]jjuh1jhj2\hhhjD\hM$ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj.\hhhjD\hM$ubah}(h]j)\ah ](jjeh"]h$]h&]jj)jhuh1jIhjD\hM$hj+\hhubj)}(hhh]h)}(h-check if a struct device represents a SAS PHYh]h-check if a struct device represents a SAS PHY}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM$hj]hhubah}(h]h ]h"]h$]h&]uh1jhj+\hhhjD\hM$ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)]jj)]jjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``const struct device *dev`` device to check **Return** ``1`` if the device represents a SAS PHY, ``0`` elseh](h)}(h**Parameters**h]j)}(hj3]h]h Parameters}(hj5]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1]ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM(hj-]ubj#)}(hhh]j()}(h-``const struct device *dev`` device to check h](j.)}(h``const struct device *dev``h]j4)}(hjR]h]hconst struct device *dev}(hjT]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjP]ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM%hjL]ubjJ)}(hhh]h)}(hdevice to checkh]hdevice to check}(hjk]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg]hM%hjh]ubah}(h]h ]h"]h$]h&]uh1jIhjL]ubeh}(h]h ]h"]h$]h&]uh1j'hjg]hM%hjI]ubah}(h]h ]h"]h$]h&]uh1j"hj-]ubh)}(h **Return**h]j)}(hj]h]hReturn}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM'hj-]ubh)}(h4``1`` if the device represents a SAS PHY, ``0`` elseh](j4)}(h``1``h]h1}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj]ubh% if the device represents a SAS PHY, }(hj]hhhNhNubj4)}(h``0``h]h0}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj]ubh else}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM'hj-]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_alloc (C function)c.sas_port_allochNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hEstruct sas_port * sas_port_alloc (struct device *parent, int port_id)h]jP)}(hCstruct sas_port *sas_port_alloc(struct device *parent, int port_id)h](jV)}(hjYh]hstruct}(hj]hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj]hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM~ubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]hhhj]hM~ubh)}(hhh]j)}(hsas_porth]hsas_port}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j)}jsas_port_allocsbc.sas_port_allocasbuh1hhj]hhhj]hM~ubjh)}(h h]h }(hj2^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj]hhhj]hM~ubj )}(hj h]h*}(hj@^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]hhhj]hM~ubjy)}(hsas_port_alloch]j)}(hj/^h]hsas_port_alloc}(hjQ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjM^ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj]hhhj]hM~ubj)}(h$(struct device *parent, int port_id)h](j)}(hstruct device *parenth](jV)}(hjYh]hstruct}(hjl^hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjh^ubjh)}(h h]h }(hjy^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjh^ubh)}(hhh]j)}(hdeviceh]hdevice}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj^modnameN classnameNjj)}j]j-^c.sas_port_allocasbuh1hhjh^ubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjh^ubj )}(hj h]h*}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjh^ubj)}(hparenth]hparent}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjh^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjd^ubj)}(h int port_idh](j~)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^ubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj^ubj)}(hport_idh]hport_id}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjd^ubeh}(h]h ]h"]h$]h&]jjuh1jhj]hhhj]hM~ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj]hhhj]hM~ubah}(h]j]ah ](jjeh"]h$]h&]jj)jhuh1jIhj]hM~hj]hhubj)}(hhh]h)}(h,allocate and initialize a SAS port structureh]h,allocate and initialize a SAS port structure}(hj"_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM~hj_hhubah}(h]h ]h"]h$]h&]uh1jhj]hhhj]hM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:_jj:_jjjuh1jDhhhjIhNhNubj)}(hX2**Parameters** ``struct device *parent`` parent device ``int port_id`` port number **Description** Allocates a SAS port structure. It will be added to the device tree below the device specified by **parent** which must be either a Scsi_Host or a sas_expander_device. **Return** ``NULL`` on errorh](h)}(h**Parameters**h]j)}(hjD_h]h Parameters}(hjF_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB_ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj>_ubj#)}(hhh](j()}(h(``struct device *parent`` parent device h](j.)}(h``struct device *parent``h]j4)}(hjc_h]hstruct device *parent}(hje_hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hja_ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj]_ubjJ)}(hhh]h)}(h parent deviceh]h parent device}(hj|_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx_hMhjy_ubah}(h]h ]h"]h$]h&]uh1jIhj]_ubeh}(h]h ]h"]h$]h&]uh1j'hjx_hMhjZ_ubj()}(h``int port_id`` port number h](j.)}(h``int port_id``h]j4)}(hj_h]h int port_id}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj_ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj_ubjJ)}(hhh]h)}(h port numberh]h port number}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jIhj_ubeh}(h]h ]h"]h$]h&]uh1j'hj_hMhjZ_ubeh}(h]h ]h"]h$]h&]uh1j"hj>_ubh)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj>_ubh)}(hAllocates a SAS port structure. It will be added to the device tree below the device specified by **parent** which must be either a Scsi_Host or a sas_expander_device.h](hcAllocates a SAS port structure. It will be added to the device tree below the device specified by }(hj_hhhNhNubj)}(h **parent**h]hparent}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh; which must be either a Scsi_Host or a sas_expander_device.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj>_ubh)}(h **Return**h]j)}(hj`h]hReturn}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj>_ubh)}(h``NULL`` on errorh](j4)}(h``NULL``h]hNULL}(hj*`hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj&`ubh on error}(hj&`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj>_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_alloc_num (C function)c.sas_port_alloc_numhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hcjj>cjjjuh1jDhhhjIhNhNubj)}(hy**Parameters** ``struct sas_port *port`` port to be added **Description** publishes a port to the rest of the systemh](h)}(h**Parameters**h]j)}(hjHch]h Parameters}(hjJchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFcubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjBcubj#)}(hhh]j()}(h+``struct sas_port *port`` port to be added h](j.)}(h``struct sas_port *port``h]j4)}(hjgch]hstruct sas_port *port}(hjichhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjecubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjacubjJ)}(hhh]h)}(hport to be addedh]hport to be added}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|chMhj}cubah}(h]h ]h"]h$]h&]uh1jIhjacubeh}(h]h ]h"]h$]h&]uh1j'hj|chMhj^cubah}(h]h ]h"]h$]h&]uh1j"hjBcubh)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjBcubh)}(h*publishes a port to the rest of the systemh]h*publishes a port to the rest of the system}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjBcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_free (C function)c.sas_port_freehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h*void sas_port_free (struct sas_port *port)h]jP)}(h)void sas_port_free(struct sas_port *port)h](j~)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjchhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjchhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjchhhjchMubjy)}(h sas_port_freeh]j)}(h sas_port_freeh]h sas_port_free}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjchhhjchMubj)}(h(struct sas_port *port)h]j)}(hstruct sas_port *porth](jV)}(hjYh]hstruct}(hj$dhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj dubjh)}(h h]h }(hj1dhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj dubh)}(hhh]j)}(hsas_porth]hsas_port}(hjBdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj?dubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDdmodnameN classnameNjj)}j]j)}jj dsbc.sas_port_freeasbuh1hhj dubjh)}(h h]h }(hjbdhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj dubj )}(hj h]h*}(hjpdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj dubj)}(hporth]hport}(hj}dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjdubah}(h]h ]h"]h$]h&]jjuh1jhjchhhjchMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjchhhjchMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jIhjchMhjchhubj)}(hhh]h)}(hfree a SAS PORTh]hfree a SAS PORT}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdhhubah}(h]h ]h"]h$]h&]uh1jhjchhhjchMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_port *port`` SAS PORT to free **Description** Frees the specified SAS PORT. **Note** This function must only be called on a PORT that has not successfully been added using sas_port_add().h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdubj#)}(hhh]j()}(h+``struct sas_port *port`` SAS PORT to free h](j.)}(h``struct sas_port *port``h]j4)}(hjdh]hstruct sas_port *port}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjdubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdubjJ)}(hhh]h)}(hSAS PORT to freeh]hSAS PORT to free}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jIhjdubeh}(h]h ]h"]h$]h&]uh1j'hjdhMhjdubah}(h]h ]h"]h$]h&]uh1j"hjdubh)}(h**Description**h]j)}(hj#eh]h Description}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!eubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdubh)}(hFrees the specified SAS PORT.h]hFrees the specified SAS PORT.}(hj9ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdubh)}(h**Note**h]j)}(hjJeh]hNote}(hjLehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHeubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjdubj`)}(hfThis function must only be called on a PORT that has not successfully been added using sas_port_add().h]h)}(hfThis function must only be called on a PORT that has not successfully been added using sas_port_add().h]hfThis function must only be called on a PORT that has not successfully been added using sas_port_add().}(hjdehhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj`eubah}(h]h ]h"]h$]h&]uh1j_hjrehMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_delete (C function)c.sas_port_deletehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h,void sas_port_delete (struct sas_port *port)h]jP)}(h+void sas_port_delete(struct sas_port *port)h](j~)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjehhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjehhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjehhhjehMubjy)}(hsas_port_deleteh]j)}(hsas_port_deleteh]hsas_port_delete}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjeubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjehhhjehMubj)}(h(struct sas_port *port)h]j)}(hstruct sas_port *porth](jV)}(hjYh]hstruct}(hjehhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjeubjh)}(h h]h }(hjehhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjeubh)}(hhh]j)}(hsas_porth]hsas_port}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNjj)}j]j)}jjesbc.sas_port_deleteasbuh1hhjeubjh)}(h h]h }(hjfhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjeubj )}(hj h]h*}(hj"fhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjeubj)}(hporth]hport}(hj/fhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjeubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubah}(h]h ]h"]h$]h&]jjuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjehhhjehMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jIhjehMhjehhubj)}(hhh]h)}(hremove SAS PORTh]hremove SAS PORT}(hjYfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjVfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqfjjqfjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_port *port`` SAS PORT to remove **Description** Removes the specified SAS PORT. If the SAS PORT has an associated phys, unlink them from the port as well.h](h)}(h**Parameters**h]j)}(hj{fh]h Parameters}(hj}fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyfubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjufubj#)}(hhh]j()}(h-``struct sas_port *port`` SAS PORT to remove h](j.)}(h``struct sas_port *port``h]j4)}(hjfh]hstruct sas_port *port}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjfubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjfubjJ)}(hhh]h)}(hSAS PORT to removeh]hSAS PORT to remove}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jIhjfubeh}(h]h ]h"]h$]h&]uh1j'hjfhMhjfubah}(h]h ]h"]h$]h&]uh1j"hjufubh)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjufubh)}(hkRemoves the specified SAS PORT. If the SAS PORT has an associated phys, unlink them from the port as well.h]hkRemoves the specified SAS PORT. If the SAS PORT has an associated phys, unlink them from the port as well.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjufubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_is_sas_port (C function)c.scsi_is_sas_porthNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h/int scsi_is_sas_port (const struct device *dev)h]jP)}(h.int scsi_is_sas_port(const struct device *dev)h](j~)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjghhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hj)ghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjghhhj(ghMubjy)}(hscsi_is_sas_porth]j)}(hscsi_is_sas_porth]hscsi_is_sas_port}(hj;ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7gubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjghhhj(ghMubj)}(h(const struct device *dev)h]j)}(hconst struct device *devh](jV)}(hj~Ph]hconst}(hjWghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSgubjh)}(h h]h }(hjdghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSgubjV)}(hjYh]hstruct}(hjrghhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjSgubjh)}(h h]h }(hjghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSgubh)}(hhh]j)}(hdeviceh]hdevice}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjgubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjgmodnameN classnameNjj)}j]j)}jj=gsbc.scsi_is_sas_portasbuh1hhjSgubjh)}(h h]h }(hjghhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjSgubj )}(hj h]h*}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSgubj)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjSgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOgubah}(h]h ]h"]h$]h&]jjuh1jhjghhhj(ghMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjghhhj(ghMubah}(h]j gah ](jjeh"]h$]h&]jj)jhuh1jIhj(ghMhjghhubj)}(hhh]h)}(h.check if a struct device represents a SAS porth]h.check if a struct device represents a SAS port}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjghhhj(ghMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj hjj hjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``const struct device *dev`` device to check **Return** ``1`` if the device represents a SAS Port, ``0`` elseh](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM!hjhubj#)}(hhh]j()}(h-``const struct device *dev`` device to check h](j.)}(h``const struct device *dev``h]j4)}(hj6hh]hconst struct device *dev}(hj8hhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj4hubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj0hubjJ)}(hhh]h)}(hdevice to checkh]hdevice to check}(hjOhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhMhjLhubah}(h]h ]h"]h$]h&]uh1jIhj0hubeh}(h]h ]h"]h$]h&]uh1j'hjKhhMhj-hubah}(h]h ]h"]h$]h&]uh1j"hjhubh)}(h **Return**h]j)}(hjqhh]hReturn}(hjshhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjohubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM hjhubh)}(h5``1`` if the device represents a SAS Port, ``0`` elseh](j4)}(h``1``h]h1}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjhubh& if the device represents a SAS Port, }(hjhhhhNhNubj4)}(h``0``h]h0}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjhubh else}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_get_phy (C function)c.sas_port_get_phyhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h9struct sas_phy * sas_port_get_phy (struct sas_port *port)h]jP)}(h7struct sas_phy *sas_port_get_phy(struct sas_port *port)h](jV)}(hjYh]hstruct}(hjhhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM*ubjh)}(h h]h }(hjhhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhhjhhM*ubh)}(hhh]j)}(hsas_phyh]hsas_phy}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjhmodnameN classnameNjj)}j]j)}jsas_port_get_physbc.sas_port_get_phyasbuh1hhjhhhhjhhM*ubjh)}(h h]h }(hjihhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhhjhhM*ubj )}(hj h]h*}(hj$ihhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhhjhhM*ubjy)}(hsas_port_get_phyh]j)}(hjih]hsas_port_get_phy}(hj5ihhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj1iubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhhjhhM*ubj)}(h(struct sas_port *port)h]j)}(hstruct sas_port *porth](jV)}(hjYh]hstruct}(hjPihhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjLiubjh)}(h h]h }(hj]ihhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjLiubh)}(hhh]j)}(hsas_porth]hsas_port}(hjnihhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkiubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpimodnameN classnameNjj)}j]jic.sas_port_get_phyasbuh1hhjLiubjh)}(h h]h }(hjihhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjLiubj )}(hj h]h*}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjLiubj)}(hporth]hport}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjLiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjHiubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhjhhM*ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhhjhhM*ubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1jIhjhhM*hjhhhubj)}(hhh]h)}(h(try to take a reference on a port memberh]h(try to take a reference on a port member}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM*hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjijjijjjuh1jDhhhjIhNhNubj)}(h9**Parameters** ``struct sas_port *port`` port to checkh](h)}(h**Parameters**h]j)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM.hjiubj#)}(hhh]j()}(h'``struct sas_port *port`` port to checkh](j.)}(h``struct sas_port *port``h]j4)}(hjjh]hstruct sas_port *port}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM0hj jubjJ)}(hhh]h)}(h port to checkh]h port to check}(hj+jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM+hj(jubah}(h]h ]h"]h$]h&]uh1jIhj jubeh}(h]h ]h"]h$]h&]uh1j'hj'jhM0hj jubah}(h]h ]h"]h$]h&]uh1j"hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_port_add_phy (C function)c.sas_port_add_phyhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hBvoid sas_port_add_phy (struct sas_port *port, struct sas_phy *phy)h]jP)}(hAvoid sas_port_add_phy(struct sas_port *port, struct sas_phy *phy)h](j~)}(hvoidh]hvoid}(hjljhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMAubjh)}(h h]h }(hj{jhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhjhhhjzjhMAubjy)}(hsas_port_add_phyh]j)}(hsas_port_add_phyh]hsas_port_add_phy}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhjhhhjzjhMAubj)}(h,(struct sas_port *port, struct sas_phy *phy)h](j)}(hstruct sas_port *porth](jV)}(hjYh]hstruct}(hjjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjjubjh)}(h h]h }(hjjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjjubh)}(hhh]j)}(hsas_porth]hsas_port}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNjj)}j]j)}jjjsbc.sas_port_add_phyasbuh1hhjjubjh)}(h h]h }(hjjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjjubj )}(hj h]h*}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjjubj)}(hporth]hport}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubj)}(hstruct sas_phy *phyh](jV)}(hjYh]hstruct}(hjkhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjkubjh)}(h h]h }(hj(khhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubh)}(hhh]j)}(hsas_phyh]hsas_phy}(hj9khhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6kubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;kmodnameN classnameNjj)}j]jjc.sas_port_add_phyasbuh1hhjkubjh)}(h h]h }(hjWkhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjkubj )}(hj h]h*}(hjekhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjkubj)}(hphyh]hphy}(hjrkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjjubeh}(h]h ]h"]h$]h&]jjuh1jhjhjhhhjzjhMAubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjdjhhhjzjhMAubah}(h]j_jah ](jjeh"]h$]h&]jj)jhuh1jIhjzjhMAhjajhhubj)}(hhh]h)}(h-add another phy to a port to form a wide porth]h-add another phy to a port to form a wide port}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMAhjkhhubah}(h]h ]h"]h$]h&]uh1jhjajhhhjzjhMAubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jDhhhjIhNhNubj)}(hX**Parameters** ``struct sas_port *port`` port to add the phy to ``struct sas_phy *phy`` phy to add **Description** When a port is initially created, it is empty (has no phys). All ports must have at least one phy to operated, and all wide ports must have at least two. The current code makes no difference between ports and wide ports, but the only object that can be connected to a remote device is a port, so ports must be formed on all devices with phys if they're connected to anything.h](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMEhjkubj#)}(hhh](j()}(h1``struct sas_port *port`` port to add the phy to h](j.)}(h``struct sas_port *port``h]j4)}(hjkh]hstruct sas_port *port}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjkubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMBhjkubjJ)}(hhh]h)}(hport to add the phy toh]hport to add the phy to}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMBhjkubah}(h]h ]h"]h$]h&]uh1jIhjkubeh}(h]h ]h"]h$]h&]uh1j'hjkhMBhjkubj()}(h#``struct sas_phy *phy`` phy to add h](j.)}(h``struct sas_phy *phy``h]j4)}(hjlh]hstruct sas_phy *phy}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjlubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMChjlubjJ)}(hhh]h)}(h phy to addh]h phy to add}(hj/lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+lhMChj,lubah}(h]h ]h"]h$]h&]uh1jIhjlubeh}(h]h ]h"]h$]h&]uh1j'hj+lhMChjkubeh}(h]h ]h"]h$]h&]uh1j"hjkubh)}(h**Description**h]j)}(hjQlh]h Description}(hjSlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOlubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMEhjkubh)}(hXyWhen a port is initially created, it is empty (has no phys). All ports must have at least one phy to operated, and all wide ports must have at least two. The current code makes no difference between ports and wide ports, but the only object that can be connected to a remote device is a port, so ports must be formed on all devices with phys if they're connected to anything.h]hX{When a port is initially created, it is empty (has no phys). All ports must have at least one phy to operated, and all wide ports must have at least two. The current code makes no difference between ports and wide ports, but the only object that can be connected to a remote device is a port, so ports must be formed on all devices with phys if they’re connected to anything.}(hjglhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMDhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ sas_port_delete_phy (C function)c.sas_port_delete_phyhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hEvoid sas_port_delete_phy (struct sas_port *port, struct sas_phy *phy)h]jP)}(hDvoid sas_port_delete_phy(struct sas_port *port, struct sas_phy *phy)h](j~)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjlhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMgubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlhhhjlhMgubjy)}(hsas_port_delete_phyh]j)}(hsas_port_delete_phyh]hsas_port_delete_phy}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjlhhhjlhMgubj)}(h,(struct sas_port *port, struct sas_phy *phy)h](j)}(hstruct sas_port *porth](jV)}(hjYh]hstruct}(hjlhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjlubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlubh)}(hhh]j)}(hsas_porth]hsas_port}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjlmodnameN classnameNjj)}j]j)}jjlsbc.sas_port_delete_phyasbuh1hhjlubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjlubj )}(hj h]h*}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjlubj)}(hporth]hport}(hj,mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hstruct sas_phy *phyh](jV)}(hjYh]hstruct}(hjEmhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjAmubjh)}(h h]h }(hjRmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAmubh)}(hhh]j)}(hsas_phyh]hsas_phy}(hjcmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj`mubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemmodnameN classnameNjj)}j]j mc.sas_port_delete_phyasbuh1hhjAmubjh)}(h h]h }(hjmhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjAmubj )}(hj h]h*}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjAmubj)}(hphyh]hphy}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjAmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjlhMgubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjlhhhjlhMgubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jIhjlhMghjlhhubj)}(hhh]h)}(h%remove a phy from a port or wide porth]h%remove a phy from a port or wide port}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMghjmhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjmjjmjjjuh1jDhhhjIhNhNubj)}(hX**Parameters** ``struct sas_port *port`` port to remove the phy from ``struct sas_phy *phy`` phy to remove **Description** This operation is used for tearing down ports again. It must be done to every port or wide port before calling sas_port_delete.h](h)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMkhjmubj#)}(hhh](j()}(h6``struct sas_port *port`` port to remove the phy from h](j.)}(h``struct sas_port *port``h]j4)}(hjnh]hstruct sas_port *port}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjnubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhhjnubjJ)}(hhh]h)}(hport to remove the phy fromh]hport to remove the phy from}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhhjnubah}(h]h ]h"]h$]h&]uh1jIhjnubeh}(h]h ]h"]h$]h&]uh1j'hjnhMhhjmubj()}(h&``struct sas_phy *phy`` phy to remove h](j.)}(h``struct sas_phy *phy``h]j4)}(hj@nh]hstruct sas_phy *phy}(hjBnhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj>nubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMihj:nubjJ)}(hhh]h)}(h phy to removeh]h phy to remove}(hjYnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUnhMihjVnubah}(h]h ]h"]h$]h&]uh1jIhj:nubeh}(h]h ]h"]h$]h&]uh1j'hjUnhMihjmubeh}(h]h ]h"]h$]h&]uh1j"hjmubh)}(h**Description**h]j)}(hj{nh]h Description}(hj}nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjynubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMkhjmubh)}(hThis operation is used for tearing down ports again. It must be done to every port or wide port before calling sas_port_delete.h]hThis operation is used for tearing down ports again. It must be done to every port or wide port before calling sas_port_delete.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMjhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!sas_end_device_alloc (C function)c.sas_end_device_allochNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h@struct sas_rphy * sas_end_device_alloc (struct sas_port *parent)h]jP)}(h>struct sas_rphy *sas_end_device_alloc(struct sas_port *parent)h](jV)}(hjYh]hstruct}(hjnhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjnhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjnhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnhhhjnhMubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j)}jsas_end_device_allocsbc.sas_end_device_allocasbuh1hhjnhhhjnhMubjh)}(h h]h }(hjohhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjnhhhjnhMubj )}(hj h]h*}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjnhhhjnhMubjy)}(hsas_end_device_alloch]j)}(hjnh]hsas_end_device_alloc}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjoubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjnhhhjnhMubj)}(h(struct sas_port *parent)h]j)}(hstruct sas_port *parenth](jV)}(hjYh]hstruct}(hj:ohhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj6oubjh)}(h h]h }(hjGohhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6oubh)}(hhh]j)}(hsas_porth]hsas_port}(hjXohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjUoubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZomodnameN classnameNjj)}j]jnc.sas_end_device_allocasbuh1hhj6oubjh)}(h h]h }(hjvohhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj6oubj )}(hj h]h*}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6oubj)}(hparenth]hparent}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj6oubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2oubah}(h]h ]h"]h$]h&]jjuh1jhjnhhhjnhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjnhhhjnhMubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jIhjnhMhjnhhubj)}(hhh]h)}(h"allocate an rphy for an end deviceh]h"allocate an rphy for an end device}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjnhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_port *parent`` which port **Description** Allocates an SAS remote PHY structure, connected to **parent**. **Return** SAS PHY allocated or ``NULL`` if the allocation failed.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubj#)}(hhh]j()}(h'``struct sas_port *parent`` which port h](j.)}(h``struct sas_port *parent``h]j4)}(hjoh]hstruct sas_port *parent}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjoubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubjJ)}(hhh]h)}(h which porth]h which port}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jIhjoubeh}(h]h ]h"]h$]h&]uh1j'hjphMhjoubah}(h]h ]h"]h$]h&]uh1j"hjoubh)}(h**Description**h]j)}(hj7ph]h Description}(hj9phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5pubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubh)}(h?Allocates an SAS remote PHY structure, connected to **parent**.h](h4Allocates an SAS remote PHY structure, connected to }(hjMphhhNhNubj)}(h **parent**h]hparent}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMpubh.}(hjMphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubh)}(h **Return**h]j)}(hjpph]hReturn}(hjrphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnpubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubh)}(h7SAS PHY allocated or ``NULL`` if the allocation failed.h](hSAS PHY allocated or }(hjphhhNhNubj4)}(h``NULL``h]hNULL}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjpubh if the allocation failed.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_expander_alloc (C function)c.sas_expander_allochNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hYstruct sas_rphy * sas_expander_alloc (struct sas_port *parent, enum sas_device_type type)h]jP)}(hWstruct sas_rphy *sas_expander_alloc(struct sas_port *parent, enum sas_device_type type)h](jV)}(hjYh]hstruct}(hjphhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjphhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjphhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjphhhjphMubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNjj)}j]j)}jsas_expander_allocsbc.sas_expander_allocasbuh1hhjphhhjphMubjh)}(h h]h }(hjqhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjphhhjphMubj )}(hj h]h*}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjphhhjphMubjy)}(hsas_expander_alloch]j)}(hjqh]hsas_expander_alloc}(hj&qhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj"qubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjphhhjphMubj)}(h4(struct sas_port *parent, enum sas_device_type type)h](j)}(hstruct sas_port *parenth](jV)}(hjYh]hstruct}(hjAqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj=qubjh)}(h h]h }(hjNqhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj=qubh)}(hhh]j)}(hsas_porth]hsas_port}(hj_qhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj\qubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjaqmodnameN classnameNjj)}j]jqc.sas_expander_allocasbuh1hhj=qubjh)}(h h]h }(hj}qhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj=qubj )}(hj h]h*}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj=qubj)}(hparenth]hparent}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj=qubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9qubj)}(henum sas_device_type typeh](jV)}(hjR9h]henum}(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjqubjh)}(h h]h }(hjqhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjqubh)}(hhh]j)}(hsas_device_typeh]hsas_device_type}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jqc.sas_expander_allocasbuh1hhjqubjh)}(h h]h }(hjqhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjqubj)}(htypeh]htype}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjqubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj9qubeh}(h]h ]h"]h$]h&]jjuh1jhjphhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjphhhjphMubah}(h]jpah ](jjeh"]h$]h&]jj)jhuh1jIhjphMhjphhubj)}(hhh]h)}(h"allocate an rphy for an end deviceh]h"allocate an rphy for an end device}(hj%rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj"rhhubah}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=rjj=rjjjuh1jDhhhjIhNhNubj)}(hX'**Parameters** ``struct sas_port *parent`` which port ``enum sas_device_type type`` SAS_EDGE_EXPANDER_DEVICE or SAS_FANOUT_EXPANDER_DEVICE **Description** Allocates an SAS remote PHY structure, connected to **parent**. **Return** SAS PHY allocated or ``NULL`` if the allocation failed.h](h)}(h**Parameters**h]j)}(hjGrh]h Parameters}(hjIrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjErubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjArubj#)}(hhh](j()}(h'``struct sas_port *parent`` which port h](j.)}(h``struct sas_port *parent``h]j4)}(hjfrh]hstruct sas_port *parent}(hjhrhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjdrubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj`rubjJ)}(hhh]h)}(h which porth]h which port}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{rhMhj|rubah}(h]h ]h"]h$]h&]uh1jIhj`rubeh}(h]h ]h"]h$]h&]uh1j'hj{rhMhj]rubj()}(hU``enum sas_device_type type`` SAS_EDGE_EXPANDER_DEVICE or SAS_FANOUT_EXPANDER_DEVICE h](j.)}(h``enum sas_device_type type``h]j4)}(hjrh]henum sas_device_type type}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjrubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjrubjJ)}(hhh]h)}(h6SAS_EDGE_EXPANDER_DEVICE or SAS_FANOUT_EXPANDER_DEVICEh]h6SAS_EDGE_EXPANDER_DEVICE or SAS_FANOUT_EXPANDER_DEVICE}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jIhjrubeh}(h]h ]h"]h$]h&]uh1j'hjrhMhj]rubeh}(h]h ]h"]h$]h&]uh1j"hjArubh)}(h**Description**h]j)}(hjrh]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjArubh)}(h?Allocates an SAS remote PHY structure, connected to **parent**.h](h4Allocates an SAS remote PHY structure, connected to }(hjrhhhNhNubj)}(h **parent**h]hparent}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjArubh)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjArubh)}(h7SAS PHY allocated or ``NULL`` if the allocation failed.h](hSAS PHY allocated or }(hj)shhhNhNubj4)}(h``NULL``h]hNULL}(hj1shhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj)subh if the allocation failed.}(hj)shhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjArubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_rphy_add (C function)c.sas_rphy_addhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h(int sas_rphy_add (struct sas_rphy *rphy)h]jP)}(h'int sas_rphy_add(struct sas_rphy *rphy)h](j~)}(hinth]hint}(hjjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjfshhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hjyshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjfshhhjxshMubjy)}(h sas_rphy_addh]j)}(h sas_rphy_addh]h sas_rphy_add}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjfshhhjxshMubj)}(h(struct sas_rphy *rphy)h]j)}(hstruct sas_rphy *rphyh](jV)}(hjYh]hstruct}(hjshhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j)}jjssbc.sas_rphy_addasbuh1hhjsubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubj )}(hj h]h*}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjsubj)}(hrphyh]hrphy}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjsubah}(h]h ]h"]h$]h&]jjuh1jhjfshhhjxshMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjbshhhjxshMubah}(h]j]sah ](jjeh"]h$]h&]jj)jhuh1jIhjxshMhj_shhubj)}(hhh]h)}(h,add a SAS remote PHY to the device hierarchyh]h,add a SAS remote PHY to the device hierarchy}(hj*thhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj'thhubah}(h]h ]h"]h$]h&]uh1jhj_shhhjxshMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBtjjBtjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_rphy *rphy`` The remote PHY to be added **Description** Publishes a SAS remote PHY to the rest of the system.h](h)}(h**Parameters**h]j)}(hjLth]h Parameters}(hjNthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJtubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjFtubj#)}(hhh]j()}(h5``struct sas_rphy *rphy`` The remote PHY to be added h](j.)}(h``struct sas_rphy *rphy``h]j4)}(hjkth]hstruct sas_rphy *rphy}(hjmthhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjitubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjetubjJ)}(hhh]h)}(hThe remote PHY to be addedh]hThe remote PHY to be added}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jIhjetubeh}(h]h ]h"]h$]h&]uh1j'hjthMhjbtubah}(h]h ]h"]h$]h&]uh1j"hjFtubh)}(h**Description**h]j)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjFtubh)}(h5Publishes a SAS remote PHY to the rest of the system.h]h5Publishes a SAS remote PHY to the rest of the system.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjFtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_rphy_free (C function)c.sas_rphy_freehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h*void sas_rphy_free (struct sas_rphy *rphy)h]jP)}(h)void sas_rphy_free(struct sas_rphy *rphy)h](j~)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjthhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM6ubjh)}(h h]h }(hjthhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjthhhjthM6ubjy)}(h sas_rphy_freeh]j)}(h sas_rphy_freeh]h sas_rphy_free}(hj uhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjuubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjthhhjthM6ubj)}(h(struct sas_rphy *rphy)h]j)}(hstruct sas_rphy *rphyh](jV)}(hjYh]hstruct}(hj(uhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj$uubjh)}(h h]h }(hj5uhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$uubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjFuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjCuubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjHumodnameN classnameNjj)}j]j)}jjusbc.sas_rphy_freeasbuh1hhj$uubjh)}(h h]h }(hjfuhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj$uubj )}(hj h]h*}(hjtuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$uubj)}(hrphyh]hrphy}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj$uubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj uubah}(h]h ]h"]h$]h&]jjuh1jhjthhhjthM6ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjthhhjthM6ubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jIhjthM6hjthhubj)}(hhh]h)}(hfree a SAS remote PHYh]hfree a SAS remote PHY}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM6hjuhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjthM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jDhhhjIhNhNubj)}(hX**Parameters** ``struct sas_rphy *rphy`` SAS remote PHY to free **Description** Frees the specified SAS remote PHY. **Note** This function must only be called on a remote PHY that has not successfully been added using sas_rphy_add() (or has been sas_rphy_remove()'d)h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM:hjuubj#)}(hhh]j()}(h1``struct sas_rphy *rphy`` SAS remote PHY to free h](j.)}(h``struct sas_rphy *rphy``h]j4)}(hjuh]hstruct sas_rphy *rphy}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjuubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM7hjuubjJ)}(hhh]h)}(hSAS remote PHY to freeh]hSAS remote PHY to free}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM7hjvubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j'hjvhM7hjuubah}(h]h ]h"]h$]h&]uh1j"hjuubh)}(h**Description**h]j)}(hj'vh]h Description}(hj)vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%vubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM9hjuubh)}(h#Frees the specified SAS remote PHY.h]h#Frees the specified SAS remote PHY.}(hj=vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM8hjuubh)}(h**Note**h]j)}(hjNvh]hNote}(hjPvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLvubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM:hjuubj`)}(hThis function must only be called on a remote PHY that has not successfully been added using sas_rphy_add() (or has been sas_rphy_remove()'d)h]h)}(hThis function must only be called on a remote PHY that has not successfully been added using sas_rphy_add() (or has been sas_rphy_remove()'d)h]hThis function must only be called on a remote PHY that has not successfully been added using sas_rphy_add() (or has been sas_rphy_remove()’d)}(hjhvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM;hjdvubah}(h]h ]h"]h$]h&]uh1j_hjvvhM;hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_rphy_delete (C function)c.sas_rphy_deletehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h,void sas_rphy_delete (struct sas_rphy *rphy)h]jP)}(h+void sas_rphy_delete(struct sas_rphy *rphy)h](j~)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjvhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMQubjh)}(h h]h }(hjvhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvhhhjvhMQubjy)}(hsas_rphy_deleteh]j)}(hsas_rphy_deleteh]hsas_rphy_delete}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjvhhhjvhMQubj)}(h(struct sas_rphy *rphy)h]j)}(hstruct sas_rphy *rphyh](jV)}(hjYh]hstruct}(hjvhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjvubjh)}(h h]h }(hjvhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j)}jjvsbc.sas_rphy_deleteasbuh1hhjvubjh)}(h h]h }(hjwhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjvubj )}(hj h]h*}(hj&whhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjvubj)}(hrphyh]hrphy}(hj3whhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjvubah}(h]h ]h"]h$]h&]jjuh1jhjvhhhjvhMQubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjvhhhjvhMQubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jIhjvhMQhjvhhubj)}(hhh]h)}(hremove and free SAS remote PHYh]hremove and free SAS remote PHY}(hj]whhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMQhjZwhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjvhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjuwjjuwjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_rphy *rphy`` SAS remote PHY to remove and free **Description** Removes the specified SAS remote PHY and frees it.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}wubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMUhjywubj#)}(hhh]j()}(h<``struct sas_rphy *rphy`` SAS remote PHY to remove and free h](j.)}(h``struct sas_rphy *rphy``h]j4)}(hjwh]hstruct sas_rphy *rphy}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjwubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMRhjwubjJ)}(hhh]h)}(h!SAS remote PHY to remove and freeh]h!SAS remote PHY to remove and free}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhMRhjwubah}(h]h ]h"]h$]h&]uh1jIhjwubeh}(h]h ]h"]h$]h&]uh1j'hjwhMRhjwubah}(h]h ]h"]h$]h&]uh1j"hjywubh)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMThjywubh)}(h2Removes the specified SAS remote PHY and frees it.h]h2Removes the specified SAS remote PHY and frees it.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMShjywubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_rphy_unlink (C function)c.sas_rphy_unlinkhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h,void sas_rphy_unlink (struct sas_rphy *rphy)h]jP)}(h+void sas_rphy_unlink(struct sas_rphy *rphy)h](j~)}(hvoidh]hvoid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjxhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM_ubjh)}(h h]h }(hj-xhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjxhhhj,xhM_ubjy)}(hsas_rphy_unlinkh]j)}(hsas_rphy_unlinkh]hsas_rphy_unlink}(hj?xhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;xubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjxhhhj,xhM_ubj)}(h(struct sas_rphy *rphy)h]j)}(hstruct sas_rphy *rphyh](jV)}(hjYh]hstruct}(hj[xhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjWxubjh)}(h h]h }(hjhxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWxubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjyxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjvxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{xmodnameN classnameNjj)}j]j)}jjAxsbc.sas_rphy_unlinkasbuh1hhjWxubjh)}(h h]h }(hjxhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjWxubj )}(hj h]h*}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWxubj)}(hrphyh]hrphy}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjWxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSxubah}(h]h ]h"]h$]h&]jjuh1jhjxhhhj,xhM_ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjxhhhj,xhM_ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1jIhj,xhM_hjxhhubj)}(hhh]h)}(hunlink SAS remote PHYh]hunlink SAS remote PHY}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM_hjxhhubah}(h]h ]h"]h$]h&]uh1jhjxhhhj,xhM_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``struct sas_rphy *rphy`` SAS remote phy to unlink from its parent port **Description** Removes port reference to an rphyh](h)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMchjxubj#)}(hhh]j()}(hH``struct sas_rphy *rphy`` SAS remote phy to unlink from its parent port h](j.)}(h``struct sas_rphy *rphy``h]j4)}(hjyh]hstruct sas_rphy *rphy}(hj!yhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjyubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM`hjyubjJ)}(hhh]h)}(h-SAS remote phy to unlink from its parent porth]h-SAS remote phy to unlink from its parent port}(hj8yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4yhM`hj5yubah}(h]h ]h"]h$]h&]uh1jIhjyubeh}(h]h ]h"]h$]h&]uh1j'hj4yhM`hjyubah}(h]h ]h"]h$]h&]uh1j"hjxubh)}(h**Description**h]j)}(hjZyh]h Description}(hj\yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXyubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMbhjxubh)}(h!Removes port reference to an rphyh]h!Removes port reference to an rphy}(hjpyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMahjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@sas_rphy_remove (C function)c.sas_rphy_removehNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h,void sas_rphy_remove (struct sas_rphy *rphy)h]jP)}(h+void sas_rphy_remove(struct sas_rphy *rphy)h](j~)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjyhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMmubjh)}(h h]h }(hjyhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjyhhhjyhMmubjy)}(hsas_rphy_removeh]j)}(hsas_rphy_removeh]hsas_rphy_remove}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjyhhhjyhMmubj)}(h(struct sas_rphy *rphy)h]j)}(hstruct sas_rphy *rphyh](jV)}(hjYh]hstruct}(hjyhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjyubjh)}(h h]h }(hjyhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjyubh)}(hhh]j)}(hsas_rphyh]hsas_rphy}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjymodnameN classnameNjj)}j]j)}jjysbc.sas_rphy_removeasbuh1hhjyubjh)}(h h]h }(hjzhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjyubj )}(hj h]h*}(hj(zhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjyubj)}(hrphyh]hrphy}(hj5zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjyubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjyubah}(h]h ]h"]h$]h&]jjuh1jhjyhhhjyhMmubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjyhhhjyhMmubah}(h]jyah ](jjeh"]h$]h&]jj)jhuh1jIhjyhMmhjyhhubj)}(hhh]h)}(hremove SAS remote PHYh]hremove SAS remote PHY}(hj_zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMmhj\zhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjyhMmubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwzjjwzjjjuh1jDhhhjIhNhNubj)}(h|**Parameters** ``struct sas_rphy *rphy`` SAS remote phy to remove **Description** Removes the specified SAS remote PHY.h](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMqhj{zubj#)}(hhh]j()}(h3``struct sas_rphy *rphy`` SAS remote phy to remove h](j.)}(h``struct sas_rphy *rphy``h]j4)}(hjzh]hstruct sas_rphy *rphy}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjzubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMnhjzubjJ)}(hhh]h)}(hSAS remote phy to removeh]hSAS remote phy to remove}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMnhjzubah}(h]h ]h"]h$]h&]uh1jIhjzubeh}(h]h ]h"]h$]h&]uh1j'hjzhMnhjzubah}(h]h ]h"]h$]h&]uh1j"hj{zubh)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMphj{zubh)}(h%Removes the specified SAS remote PHY.h]h%Removes the specified SAS remote PHY.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMohj{zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@scsi_is_sas_rphy (C function)c.scsi_is_sas_rphyhNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h/int scsi_is_sas_rphy (const struct device *dev)h]jP)}(h.int scsi_is_sas_rphy(const struct device *dev)h](j~)}(hinth]hint}(hj {hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj{hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hj/{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj{hhhj.{hMubjy)}(hscsi_is_sas_rphyh]j)}(hscsi_is_sas_rphyh]hscsi_is_sas_rphy}(hjA{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj={ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj{hhhj.{hMubj)}(h(const struct device *dev)h]j)}(hconst struct device *devh](jV)}(hj~Ph]hconst}(hj]{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjY{ubjh)}(h h]h }(hjj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjY{ubjV)}(hjYh]hstruct}(hjx{hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjY{ubjh)}(h h]h }(hj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjY{ubh)}(hhh]j)}(hdeviceh]hdevice}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjC{sbc.scsi_is_sas_rphyasbuh1hhjY{ubjh)}(h h]h }(hj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjY{ubj )}(hj h]h*}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjY{ubj)}(hdevh]hdev}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjY{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjU{ubah}(h]h ]h"]h$]h&]jjuh1jhj{hhhj.{hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj{hhhj.{hMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jIhj.{hMhj{hhubj)}(hhh]h)}(h4check if a struct device represents a SAS remote PHYh]h4check if a struct device represents a SAS remote PHY}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj.{hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jDhhhjIhNhNubj)}(h**Parameters** ``const struct device *dev`` device to check **Return** ``1`` if the device represents a SAS remote PHY, ``0`` elseh](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj|ubj#)}(hhh]j()}(h-``const struct device *dev`` device to check h](j.)}(h``const struct device *dev``h]j4)}(hj<|h]hconst struct device *dev}(hj>|hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj:|ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj6|ubjJ)}(hhh]h)}(hdevice to checkh]hdevice to check}(hjU|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ|hMhjR|ubah}(h]h ]h"]h$]h&]uh1jIhj6|ubeh}(h]h ]h"]h$]h&]uh1j'hjQ|hMhj3|ubah}(h]h ]h"]h$]h&]uh1j"hj|ubh)}(h **Return**h]j)}(hjw|h]hReturn}(hjy|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju|ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj|ubh)}(h;``1`` if the device represents a SAS remote PHY, ``0`` elseh](j4)}(h``1``h]h1}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|ubh, if the device represents a SAS remote PHY, }(hj|hhhNhNubj4)}(h``0``h]h0}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj|ubh else}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!sas_attach_transport (C function)c.sas_attach_transporthNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(hXstruct scsi_transport_template * sas_attach_transport (struct sas_function_template *ft)h]jP)}(hVstruct scsi_transport_template *sas_attach_transport(struct sas_function_template *ft)h](jV)}(hjYh]hstruct}(hj|hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj|hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMubjh)}(h h]h }(hj|hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj|hhhj|hMubh)}(hhh]j)}(hscsi_transport_templateh]hscsi_transport_template}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj|modnameN classnameNjj)}j]j)}jsas_attach_transportsbc.sas_attach_transportasbuh1hhj|hhhj|hMubjh)}(h h]h }(hj}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj|hhhj|hMubj )}(hj h]h*}(hj*}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|hhhj|hMubjy)}(hsas_attach_transporth]j)}(hj}h]hsas_attach_transport}(hj;}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj7}ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj|hhhj|hMubj)}(h"(struct sas_function_template *ft)h]j)}(h struct sas_function_template *fth](jV)}(hjYh]hstruct}(hjV}hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjR}ubjh)}(h h]h }(hjc}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR}ubh)}(hhh]j)}(hsas_function_templateh]hsas_function_template}(hjt}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjq}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjv}modnameN classnameNjj)}j]j}c.sas_attach_transportasbuh1hhjR}ubjh)}(h h]h }(hj}hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjR}ubj )}(hj h]h*}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjR}ubj)}(hfth]hft}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjR}ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjN}ubah}(h]h ]h"]h$]h&]jjuh1jhj|hhhj|hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj|hhhj|hMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jIhj|hMhj|hhubj)}(hhh]h)}(h"instantiate SAS transport templateh]h"instantiate SAS transport template}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jhj|hhhj|hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}jj}jjjuh1jDhhhjIhNhNubj)}(h\**Parameters** ``struct sas_function_template *ft`` SAS transport class function templateh](h)}(h**Parameters**h]j)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj}ubj#)}(hhh]j()}(hJ``struct sas_function_template *ft`` SAS transport class function templateh](j.)}(h$``struct sas_function_template *ft``h]j4)}(hj~h]h struct sas_function_template *ft}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj~ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj~ubjJ)}(hhh]h)}(h%SAS transport class function templateh]h%SAS transport class function template}(hj1~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhj.~ubah}(h]h ]h"]h$]h&]uh1jIhj~ubeh}(h]h ]h"]h$]h&]uh1j'hj-~hMhj~ubah}(h]h ]h"]h$]h&]uh1j"hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"sas_release_transport (C function)c.sas_release_transporthNtauh1j3hjIhhhNhNubjE)}(hhh](jJ)}(h>void sas_release_transport (struct scsi_transport_template *t)h]jP)}(h=void sas_release_transport(struct scsi_transport_template *t)h](j~)}(hvoidh]hvoid}(hjr~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjn~hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM~ubjh)}(h h]h }(hj~hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjn~hhhj~hM~ubjy)}(hsas_release_transporth]j)}(hsas_release_transporth]hsas_release_transport}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjn~hhhj~hM~ubj)}(h#(struct scsi_transport_template *t)h]j)}(h!struct scsi_transport_template *th](jV)}(hjYh]hstruct}(hj~hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj~ubjh)}(h h]h }(hj~hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~ubh)}(hhh]j)}(hscsi_transport_templateh]hscsi_transport_template}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj~modnameN classnameNjj)}j]j)}jj~sbc.sas_release_transportasbuh1hhj~ubjh)}(h h]h }(hj~hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj~ubj )}(hj h]h*}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ubj)}(hth]ht}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj~ubah}(h]h ]h"]h$]h&]jjuh1jhjn~hhhj~hM~ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjj~hhhj~hM~ubah}(h]je~ah ](jjeh"]h$]h&]jj)jhuh1jIhj~hM~hjg~hhubj)}(hhh]h)}(h'release SAS transport template instanceh]h'release SAS transport template instance}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chM~hj/hhubah}(h]h ]h"]h$]h&]uh1jhjg~hhhj~hM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJjjJjjjuh1jDhhhjIhNhNubj)}(hS**Parameters** ``struct scsi_transport_template *t`` transport template instanceh](h)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjNubj#)}(hhh]j()}(hA``struct scsi_transport_template *t`` transport template instanceh](j.)}(h%``struct scsi_transport_template *t``h]j4)}(hjsh]h!struct scsi_transport_template *t}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjqubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjmubjJ)}(hhh]h)}(htransport template instanceh]htransport template instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:276: ./drivers/scsi/scsi_transport_sas.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjmubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjjubah}(h]h ]h"]h$]h&]uh1j"hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjIhhhNhNubeh}(h](serial-attached-scsi-sas-transport-classah ]h"]*serial attached scsi (sas) transport classah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hSATA transport classh]hSATA transport class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hcThe SATA transport is handled by libata, which has its own book of documentation in this directory.h]hcThe SATA transport is handled by libata, which has its own book of documentation in this directory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]sata-transport-classah ]h"]sata transport classah$]h&]uh1hhjhhhhhMubh)}(hhh](h)}(h#Parallel SCSI (SPI) transport classh]h#Parallel SCSI (SPI) transport class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(huThe file drivers/scsi/scsi_transport_spi.c defines transport attributes for traditional (fast/wide/ultra) SCSI buses.h]huThe file drivers/scsi/scsi_transport_spi.c defines transport attributes for traditional (fast/wide/ultra) SCSI buses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjhhubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@spi_dv_device (C function)c.spi_dv_devicehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h-void spi_dv_device (struct scsi_device *sdev)h]jP)}(h,void spi_dv_device(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMubjh)}(h h]h }(hj*hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj)hMubjy)}(h spi_dv_deviceh]j)}(h spi_dv_deviceh]h spi_dv_device}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj)hMubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTubjh)}(h h]h }(hjehhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjTubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j)}jj>sbc.spi_dv_deviceasbuh1hhjTubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjTubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjTubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj)hMhjhhubj)}(hhh]h)}(h"Do Domain Validation on the deviceh]h"Do Domain Validation on the device}(hjۀhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMhj؀hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjhNhNubj)}(hXb**Parameters** ``struct scsi_device *sdev`` scsi device to validate **Description** Performs the domain validation on the given device in the current execution thread. Since DV operations may sleep, the current thread must have user context. Also no SCSI related locks that would deadlock I/O issued by the DV may be held.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMhjubj#)}(hhh]j()}(h5``struct scsi_device *sdev`` scsi device to validate h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMhjubjJ)}(hhh]h)}(hscsi device to validateh]hscsi device to validate}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj1hMhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMhjubj`)}(hPerforms the domain validation on the given device in the current execution thread. Since DV operations may sleep, the current thread must have user context. Also no SCSI related locks that would deadlock I/O issued by the DV may be held.h]h)}(hPerforms the domain validation on the given device in the current execution thread. Since DV operations may sleep, the current thread must have user context. Also no SCSI related locks that would deadlock I/O issued by the DV may be held.h]hPerforms the domain validation on the given device in the current execution thread. Since DV operations may sleep, the current thread must have user context. Also no SCSI related locks that would deadlock I/O issued by the DV may be held.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMhjmubah}(h]h ]h"]h$]h&]uh1j_hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@#spi_schedule_dv_device (C function)c.spi_schedule_dv_devicehNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h6void spi_schedule_dv_device (struct scsi_device *sdev)h]jP)}(h5void spi_schedule_dv_device(struct scsi_device *sdev)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chM?ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM?ubjy)}(hspi_schedule_dv_deviceh]j)}(hspi_schedule_dv_deviceh]hspi_schedule_dv_device}(hjǁhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjÁubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM?ubj)}(h(struct scsi_device *sdev)h]j)}(hstruct scsi_device *sdevh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj߁ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj߁ubh)}(hhh]j)}(h scsi_deviceh]h scsi_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjɁsbc.spi_schedule_dv_deviceasbuh1hhj߁ubjh)}(h h]h }(hj!hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj߁ubj )}(hj h]h*}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj߁ubj)}(hsdevh]hsdev}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj߁ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjہubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM?ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhM?ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhM?hjhhubj)}(hhh]h)}(h1schedule domain validation to occur on the deviceh]h1schedule domain validation to occur on the device}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hוhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chM?hjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM?ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jDhhhjhNhNubj)}(hX=**Parameters** ``struct scsi_device *sdev`` The device to validate **Description** Identical to spi_dv_device() above, except that the DV will be scheduled to occur in a workqueue later. All memory allocations are atomic, so may be called from any context including those holding SCSI locks.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMChjubj#)}(hhh]j()}(h4``struct scsi_device *sdev`` The device to validate h](j.)}(h``struct scsi_device *sdev``h]j4)}(hjh]hstruct scsi_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chM@hjubjJ)}(hhh]h)}(hThe device to validateh]hThe device to validate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhM@hjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMBhjubj`)}(hIdentical to spi_dv_device() above, except that the DV will be scheduled to occur in a workqueue later. All memory allocations are atomic, so may be called from any context including those holding SCSI locks.h]h)}(hIdentical to spi_dv_device() above, except that the DV will be scheduled to occur in a workqueue later. All memory allocations are atomic, so may be called from any context including those holding SCSI locks.h]hIdentical to spi_dv_device() above, except that the DV will be scheduled to occur in a workqueue later. All memory allocations are atomic, so may be called from any context including those holding SCSI locks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:291: ./drivers/scsi/scsi_transport_spi.chMAhjubah}(h]h ]h"]h$]h&]uh1j_hj hMAhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@'spi_display_xfer_agreement (C function)c.spi_display_xfer_agreementhNtauh1j3hjhhhNhNubjE)}(hhh](jJ)}(h=void spi_display_xfer_agreement (struct scsi_target *starget)h]jP)}(h(int reconnect_delay, int fast_io_fail_tmo, long dev_loss_tmo)h](j)}(hint reconnect_delayh](j~)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj4ubjh)}(h h]h }(hjFhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj4ubj)}(hreconnect_delayh]hreconnect_delay}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hint fast_io_fail_tmoh](j~)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjiubjh)}(h h]h }(hj{hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjiubj)}(hfast_io_fail_tmoh]hfast_io_fail_tmo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubj)}(hlong dev_loss_tmoh](j~)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj)}(h dev_loss_tmoh]h dev_loss_tmo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj0ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hKHubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj hKHubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj hKHhjhhubj)}(hhh]h)}(h"check timeout combination validityh]h"check timeout combination validity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKHhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(hX**Parameters** ``int reconnect_delay`` Reconnect delay in seconds. ``int fast_io_fail_tmo`` Fast I/O fail timeout in seconds. ``long dev_loss_tmo`` Device loss timeout in seconds. **Description** The combination of the timeout parameters must be such that SCSI commands are finished in a reasonable time. Hence do not allow the fast I/O fail timeout to exceed SCSI_DEVICE_BLOCK_MAX_TIMEOUT nor allow dev_loss_tmo to exceed that limit if failing I/O fast has been disabled. Furthermore, these parameters must be such that multipath can detect failed paths timely. Hence do not allow all three parameters to be disabled simultaneously.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKLhjubj#)}(hhh](j()}(h4``int reconnect_delay`` Reconnect delay in seconds. h](j.)}(h``int reconnect_delay``h]j4)}(hj)h]hint reconnect_delay}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj'ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKIhj#ubjJ)}(hhh]h)}(hReconnect delay in seconds.h]hReconnect delay in seconds.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKIhj?ubah}(h]h ]h"]h$]h&]uh1jIhj#ubeh}(h]h ]h"]h$]h&]uh1j'hj>hKIhj ubj()}(h;``int fast_io_fail_tmo`` Fast I/O fail timeout in seconds. h](j.)}(h``int fast_io_fail_tmo``h]j4)}(hjbh]hint fast_io_fail_tmo}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hj`ubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKJhj\ubjJ)}(hhh]h)}(h!Fast I/O fail timeout in seconds.h]h!Fast I/O fail timeout in seconds.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKJhjxubah}(h]h ]h"]h$]h&]uh1jIhj\ubeh}(h]h ]h"]h$]h&]uh1j'hjwhKJhj ubj()}(h6``long dev_loss_tmo`` Device loss timeout in seconds. h](j.)}(h``long dev_loss_tmo``h]j4)}(hjh]hlong dev_loss_tmo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKKhjubjJ)}(hhh]h)}(hDevice loss timeout in seconds.h]hDevice loss timeout in seconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhKKhj ubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjֈh]h Description}(hj؈hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԈubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKMhjubh)}(hXThe combination of the timeout parameters must be such that SCSI commands are finished in a reasonable time. Hence do not allow the fast I/O fail timeout to exceed SCSI_DEVICE_BLOCK_MAX_TIMEOUT nor allow dev_loss_tmo to exceed that limit if failing I/O fast has been disabled. Furthermore, these parameters must be such that multipath can detect failed paths timely. Hence do not allow all three parameters to be disabled simultaneously.h]hXThe combination of the timeout parameters must be such that SCSI commands are finished in a reasonable time. Hence do not allow the fast I/O fail timeout to exceed SCSI_DEVICE_BLOCK_MAX_TIMEOUT nor allow dev_loss_tmo to exceed that limit if failing I/O fast has been disabled. Furthermore, these parameters must be such that multipath can detect failed paths timely. Hence do not allow all three parameters to be disabled simultaneously.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chKLhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@%srp_start_tl_fail_timers (C function)c.srp_start_tl_fail_timershNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h7void srp_start_tl_fail_timers (struct srp_rport *rport)h]jP)}(h6void srp_start_tl_fail_timers(struct srp_rport *rport)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hj*hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj)hMubjy)}(hsrp_start_tl_fail_timersh]j)}(hsrp_start_tl_fail_timersh]hsrp_start_tl_fail_timers}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj)hMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjXhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjTubjh)}(h h]h }(hjehhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjTubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]j)}jj>sbc.srp_start_tl_fail_timersasbuh1hhjTubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjTubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjTubj)}(hrporth]hrport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjPubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj)hMhjhhubj)}(hhh]h)}(h(start the transport layer failure timersh]h(start the transport layer failure timers}(hjۉhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj؉hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(h**Parameters** ``struct srp_rport *rport`` SRP target port. **Description** Start the transport layer fast I/O failure and device loss timers. Do not modify a timer that was already started.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubj#)}(hhh]j()}(h-``struct srp_rport *rport`` SRP target port. h](j.)}(h``struct srp_rport *rport``h]j4)}(hjh]hstruct srp_rport *rport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubjJ)}(hhh]h)}(hSRP target port.h]hSRP target port.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj1hMhjubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubh)}(hrStart the transport layer fast I/O failure and device loss timers. Do not modify a timer that was already started.h]hrStart the transport layer fast I/O failure and device loss timers. Do not modify a timer that was already started.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@ srp_reconnect_rport (C function)c.srp_reconnect_rporthNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h1int srp_reconnect_rport (struct srp_rport *rport)h]jP)}(h0int srp_reconnect_rport(struct srp_rport *rport)h](j~)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(hsrp_reconnect_rporth]j)}(hsrp_reconnect_rporth]hsrp_reconnect_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjيhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjՊubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjՊubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.srp_reconnect_rportasbuh1hhjՊubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjՊubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjՊubj)}(hrporth]hrport}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjՊubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjъubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(hreconnect to an SRP target porth]hreconnect to an SRP target port}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjtjjtjjjuh1jDhhhjÆhNhNubj)}(hX%**Parameters** ``struct srp_rport *rport`` SRP target port. **Description** Blocks SCSI command queueing before invoking reconnect() such that queuecommand() won't be invoked concurrently with reconnect() from outside the SCSI EH. This is important since a reconnect() implementation may reallocate resources needed by queuecommand(). **Notes** - This function neither waits until outstanding requests have finished nor tries to abort these. It is the responsibility of the reconnect() function to finish outstanding commands before reconnecting to the target port. - It is the responsibility of the caller to ensure that the resources reallocated by the reconnect() function won't be used while this function is in progress. One possible strategy is to invoke this function from the context of the SCSI EH thread only. Another possible strategy is to lock the rport mutex inside each SCSI LLD callback that can be invoked by the SCSI EH (the scsi_host_template.eh_*() functions and also the scsi_host_template.queuecommand() function).h](h)}(h**Parameters**h]j)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjxubj#)}(hhh]j()}(h-``struct srp_rport *rport`` SRP target port. h](j.)}(h``struct srp_rport *rport``h]j4)}(hjh]hstruct srp_rport *rport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubjJ)}(hhh]h)}(hSRP target port.h]hSRP target port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hjxubh)}(h**Description**h]j)}(hj؋h]h Description}(hjڋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֋ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjxubh)}(hXBlocks SCSI command queueing before invoking reconnect() such that queuecommand() won't be invoked concurrently with reconnect() from outside the SCSI EH. This is important since a reconnect() implementation may reallocate resources needed by queuecommand().h]hXBlocks SCSI command queueing before invoking reconnect() such that queuecommand() won’t be invoked concurrently with reconnect() from outside the SCSI EH. This is important since a reconnect() implementation may reallocate resources needed by queuecommand().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjxubh)}(h **Notes**h]j)}(hjh]hNotes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjxubj@)}(hhh](jE)}(hThis function neither waits until outstanding requests have finished nor tries to abort these. It is the responsibility of the reconnect() function to finish outstanding commands before reconnecting to the target port.h]h)}(hThis function neither waits until outstanding requests have finished nor tries to abort these. It is the responsibility of the reconnect() function to finish outstanding commands before reconnecting to the target port.h]hThis function neither waits until outstanding requests have finished nor tries to abort these. It is the responsibility of the reconnect() function to finish outstanding commands before reconnecting to the target port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubah}(h]h ]h"]h$]h&]uh1jDhjubjE)}(hXIt is the responsibility of the caller to ensure that the resources reallocated by the reconnect() function won't be used while this function is in progress. One possible strategy is to invoke this function from the context of the SCSI EH thread only. Another possible strategy is to lock the rport mutex inside each SCSI LLD callback that can be invoked by the SCSI EH (the scsi_host_template.eh_*() functions and also the scsi_host_template.queuecommand() function).h]h)}(hXIt is the responsibility of the caller to ensure that the resources reallocated by the reconnect() function won't be used while this function is in progress. One possible strategy is to invoke this function from the context of the SCSI EH thread only. Another possible strategy is to lock the rport mutex inside each SCSI LLD callback that can be invoked by the SCSI EH (the scsi_host_template.eh_*() functions and also the scsi_host_template.queuecommand() function).h]hXIt is the responsibility of the caller to ensure that the resources reallocated by the reconnect() function won’t be used while this function is in progress. One possible strategy is to invoke this function from the context of the SCSI EH thread only. Another possible strategy is to lock the rport mutex inside each SCSI LLD callback that can be invoked by the SCSI EH (the scsi_host_template.eh_*() functions and also the scsi_host_template.queuecommand() function).}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM hj1ubah}(h]h ]h"]h$]h&]uh1jDhjubeh}(h]h ]h"]h$]h&]j-uh1j?hj*hMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_timed_out (C function)c.srp_timed_outhNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h?enum scsi_timeout_action srp_timed_out (struct scsi_cmnd *scmd)h]jP)}(h>enum scsi_timeout_action srp_timed_out(struct scsi_cmnd *scmd)h](jV)}(hjR9h]henum}(hjqhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjmhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMQubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmhhhj~hMQubh)}(hhh]j)}(hscsi_timeout_actionh]hscsi_timeout_action}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j srp_timed_outsbc.srp_timed_outasbuh1hhjmhhhj~hMQubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjmhhhj~hMQubjy)}(h srp_timed_outh]j)}(hjh]h srp_timed_out}(hjÌhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjmhhhj~hMQubj)}(h(struct scsi_cmnd *scmd)h]j)}(hstruct scsi_cmnd *scmdh](jV)}(hjYh]hstruct}(hjތhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjڌubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjڌubh)}(hhh]j)}(h scsi_cmndh]h scsi_cmnd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.srp_timed_outasbuh1hhjڌubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjڌubj )}(hj h]h*}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjڌubj)}(hscmdh]hscmd}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjڌubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj֌ubah}(h]h ]h"]h$]h&]jjuh1jhjmhhhj~hMQubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjihhhj~hMQubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1jIhj~hMQhjfhhubj)}(hhh]h)}(h.SRP transport intercept of the SCSI timeout EHh]h.SRP transport intercept of the SCSI timeout EH}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMQhj\hhubah}(h]h ]h"]h$]h&]uh1jhjfhhhj~hMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jDhhhjÆhNhNubj)}(hXh**Parameters** ``struct scsi_cmnd *scmd`` SCSI command. **Description** If a timeout occurs while an rport is in the blocked state, ask the SCSI EH to continue waiting (SCSI_EH_RESET_TIMER). Otherwise let the SCSI core handle the timeout (SCSI_EH_NOT_HANDLED). **Note** This function is called from soft-IRQ context and with the request queue lock held.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMUhj{ubj#)}(hhh]j()}(h)``struct scsi_cmnd *scmd`` SCSI command. h](j.)}(h``struct scsi_cmnd *scmd``h]j4)}(hjh]hstruct scsi_cmnd *scmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMRhjubjJ)}(hhh]h)}(h SCSI command.h]h SCSI command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMRhjubah}(h]h ]h"]h$]h&]uh1j"hj{ubh)}(h**Description**h]j)}(hjۍh]h Description}(hjݍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٍubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMThj{ubh)}(hIf a timeout occurs while an rport is in the blocked state, ask the SCSI EH to continue waiting (SCSI_EH_RESET_TIMER). Otherwise let the SCSI core handle the timeout (SCSI_EH_NOT_HANDLED).h]hIf a timeout occurs while an rport is in the blocked state, ask the SCSI EH to continue waiting (SCSI_EH_RESET_TIMER). Otherwise let the SCSI core handle the timeout (SCSI_EH_NOT_HANDLED).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMShj{ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMWhj{ubh)}(hSThis function is called from soft-IRQ context and with the request queue lock held.h]hSThis function is called from soft-IRQ context and with the request queue lock held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMXhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_rport_get (C function)c.srp_rport_gethNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h,void srp_rport_get (struct srp_rport *rport)h]jP)}(h+void srp_rport_get(struct srp_rport *rport)h](j~)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjChhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjVhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjChhhjUhMubjy)}(h srp_rport_geth]j)}(h srp_rport_geth]h srp_rport_get}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjdubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjChhhjUhMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjjsbc.srp_rport_getasbuh1hhjubjh)}(h h]h }(hjŽhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjЎhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrporth]hrport}(hjݎhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj|ubah}(h]h ]h"]h$]h&]jjuh1jhjChhhjUhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj?hhhjUhMubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1jIhjUhMhj<hhubj)}(hhh]h)}(hincrement rport reference counth]hincrement rport reference count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(h>**Parameters** ``struct srp_rport *rport`` SRP target port.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj#ubj#)}(hhh]j()}(h,``struct srp_rport *rport`` SRP target port.h](j.)}(h``struct srp_rport *rport``h]j4)}(hjHh]hstruct srp_rport *rport}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjFubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjBubjJ)}(hhh]h)}(hSRP target port.h]hSRP target port.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj^ubah}(h]h ]h"]h$]h&]uh1jIhjBubeh}(h]h ]h"]h$]h&]uh1j'hj]hMhj?ubah}(h]h ]h"]h$]h&]uh1j"hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_rport_put (C function)c.srp_rport_puthNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h,void srp_rport_put (struct srp_rport *rport)h]jP)}(h+void srp_rport_put(struct srp_rport *rport)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhMubjy)}(h srp_rport_puth]j)}(h srp_rport_puth]h srp_rport_put}(hjÏhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjߏhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjۏubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjۏubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjŏsbc.srp_rport_putasbuh1hhjۏubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjۏubj )}(hj h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjۏubj)}(hrporth]hrport}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjۏubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj׏ubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjhhubj)}(hhh]h)}(hdecrement rport reference counth]hdecrement rport reference count}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jDhhhjÆhNhNubj)}(h>**Parameters** ``struct srp_rport *rport`` SRP target port.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj~ubj#)}(hhh]j()}(h,``struct srp_rport *rport`` SRP target port.h](j.)}(h``struct srp_rport *rport``h]j4)}(hjh]hstruct srp_rport *rport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubjJ)}(hhh]h)}(hSRP target port.h]hSRP target port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubah}(h]h ]h"]h$]h&]uh1j"hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_rport_add (C function)c.srp_rport_addhNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h]struct srp_rport * srp_rport_add (struct Scsi_Host *shost, struct srp_rport_identifiers *ids)h]jP)}(h[struct srp_rport *srp_rport_add(struct Scsi_Host *shost, struct srp_rport_identifiers *ids)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj hMubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}j srp_rport_addsbc.srp_rport_addasbuh1hhjhhhj hMubjh)}(h h]h }(hj=hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhj hMubj )}(hj h]h*}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj hMubjy)}(h srp_rport_addh]j)}(hj:h]h srp_rport_add}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjXubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhj hMubj)}(h<(struct Scsi_Host *shost, struct srp_rport_identifiers *ids)h](j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hjwhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjsubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j8c.srp_rport_addasbuh1hhjsubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjsubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjsubj)}(hshosth]hshost}(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjsubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubj)}(h!struct srp_rport_identifiers *idsh](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hsrp_rport_identifiersh]hsrp_rport_identifiers}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j8c.srp_rport_addasbuh1hhjubjh)}(h h]h }(hj#hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hidsh]hids}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjoubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjhhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jIhj hMhjhhubj)}(hhh]h)}(h-add a SRP remote port to the device hierarchyh]h-add a SRP remote port to the device hierarchy}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` scsi host the remote port is connected to. ``struct srp_rport_identifiers *ids`` The port id for the remote port. **Description** Publishes a port to the rest of the system.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubj#)}(hhh](j()}(hG``struct Scsi_Host *shost`` scsi host the remote port is connected to. h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubjJ)}(hhh]h)}(h*scsi host the remote port is connected to.h]h*scsi host the remote port is connected to.}(hj’hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubj()}(hG``struct srp_rport_identifiers *ids`` The port id for the remote port. h](j.)}(h%``struct srp_rport_identifiers *ids``h]j4)}(hjh]h!struct srp_rport_identifiers *ids}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjܒubjJ)}(hhh]h)}(h The port id for the remote port.h]h The port id for the remote port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjܒubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjubeh}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubh)}(h+Publishes a port to the rest of the system.h]h+Publishes a port to the rest of the system.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_rport_del (C function)c.srp_rport_delhNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h,void srp_rport_del (struct srp_rport *rport)h]jP)}(h+void srp_rport_del(struct srp_rport *rport)h](j~)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj^hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjqhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj^hhhjphMubjy)}(h srp_rport_delh]j)}(h srp_rport_delh]h srp_rport_del}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj^hhhjphMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.srp_rport_delasbuh1hhjubjh)}(h h]h }(hjݓhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrporth]hrport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjZhhhjphMubah}(h]jUah ](jjeh"]h$]h&]jj)jhuh1jIhjphMhjWhhubj)}(hhh]h)}(hremove a SRP remote porth]hremove a SRP remote port}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjWhhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj:jj:jjjuh1jDhhhjÆhNhNubj)}(h**Parameters** ``struct srp_rport *rport`` SRP remote port to remove **Description** Removes the specified SRP remote port.h](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj>ubj#)}(hhh]j()}(h6``struct srp_rport *rport`` SRP remote port to remove h](j.)}(h``struct srp_rport *rport``h]j4)}(hjch]hstruct srp_rport *rport}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjaubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj]ubjJ)}(hhh]h)}(hSRP remote port to removeh]hSRP remote port to remove}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jIhj]ubeh}(h]h ]h"]h$]h&]uh1j'hjxhMhjZubah}(h]h ]h"]h$]h&]uh1j"hj>ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj>ubh)}(h&Removes the specified SRP remote port.h]h&Removes the specified SRP remote port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@srp_remove_host (C function)c.srp_remove_hosthNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h.void srp_remove_host (struct Scsi_Host *shost)h]jP)}(h-void srp_remove_host(struct Scsi_Host *shost)h](j~)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjߔhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjߔhhhjhMubjy)}(hsrp_remove_hosth]j)}(hsrp_remove_hosth]hsrp_remove_host}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjߔhhhjhMubj)}(h(struct Scsi_Host *shost)h]j)}(hstruct Scsi_Host *shosth](jV)}(hjYh]hstruct}(hj hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hj-hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h Scsi_Hosth]h Scsi_Host}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j)}jjsbc.srp_remove_hostasbuh1hhjubjh)}(h h]h }(hj^hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hshosth]hshost}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjߔhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj۔hhhjhMubah}(h]j֔ah ](jjeh"]h$]h&]jj)jhuh1jIhjhMhjؔhhubj)}(hhh]h)}(h+tear down a Scsi_Host's SRP data structuresh]h-tear down a Scsi_Host’s SRP data structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjؔhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(h**Parameters** ``struct Scsi_Host *shost`` Scsi Host that is torn down **Description** Removes all SRP remote ports for a given Scsi_Host. Must be called just before scsi_remove_host for SRP HBAs.h](h)}(h**Parameters**h]j)}(hjŕh]h Parameters}(hjǕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÕubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM hjubj#)}(hhh]j()}(h8``struct Scsi_Host *shost`` Scsi Host that is torn down h](j.)}(h``struct Scsi_Host *shost``h]j4)}(hjh]hstruct Scsi_Host *shost}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjޕubjJ)}(hhh]h)}(hScsi Host that is torn downh]hScsi Host that is torn down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jIhjޕubeh}(h]h ]h"]h$]h&]uh1j'hjhMhjەubah}(h]h ]h"]h$]h&]uh1j"hjubh)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubh)}(hmRemoves all SRP remote ports for a given Scsi_Host. Must be called just before scsi_remove_host for SRP HBAs.h]hmRemoves all SRP remote ports for a given Scsi_Host. Must be called just before scsi_remove_host for SRP HBAs.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](Vj@"srp_stop_rport_timers (C function)c.srp_stop_rport_timershNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h4void srp_stop_rport_timers (struct srp_rport *rport)h]jP)}(h3void srp_stop_rport_timers(struct srp_rport *rport)h](j~)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hj`hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMubjh)}(h h]h }(hjshhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj`hhhjrhMubjy)}(hsrp_stop_rport_timersh]j)}(hsrp_stop_rport_timersh]hsrp_stop_rport_timers}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhj`hhhjrhMubj)}(h(struct srp_rport *rport)h]j)}(hstruct srp_rport *rporth](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(h srp_rporth]h srp_rport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.srp_stop_rport_timersasbuh1hhjubjh)}(h h]h }(hjߖhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrporth]hrport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jIhjrhMhjYhhubj)}(hhh]h)}(h(stop the transport layer recovery timersh]h(stop the transport layer recovery timers}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jDhhhjÆhNhNubj)}(hX**Parameters** ``struct srp_rport *rport`` SRP remote port for which to stop the timers. **Description** Must be called after srp_remove_host() and scsi_remove_host(). The caller must hold a reference on the rport (rport->dev) and on the SCSI host (rport->dev.parent).h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj@ubj#)}(hhh]j()}(hJ``struct srp_rport *rport`` SRP remote port for which to stop the timers. h](j.)}(h``struct srp_rport *rport``h]j4)}(hjeh]hstruct srp_rport *rport}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjcubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj_ubjJ)}(hhh]h)}(h-SRP remote port for which to stop the timers.h]h-SRP remote port for which to stop the timers.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jIhj_ubeh}(h]h ]h"]h$]h&]uh1j'hjzhMhj\ubah}(h]h ]h"]h$]h&]uh1j"hj@ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj@ubh)}(hMust be called after srp_remove_host() and scsi_remove_host(). The caller must hold a reference on the rport (rport->dev) and on the SCSI host (rport->dev.parent).h]hMust be called after srp_remove_host() and scsi_remove_host(). The caller must hold a reference on the rport (rport->dev) and on the SCSI host (rport->dev.parent).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@!srp_attach_transport (C function)c.srp_attach_transporthNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(hXstruct scsi_transport_template * srp_attach_transport (struct srp_function_template *ft)h]jP)}(hVstruct scsi_transport_template *srp_attach_transport(struct srp_function_template *ft)h](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM(ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM(ubh)}(hhh]j)}(hscsi_transport_templateh]hscsi_transport_template}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jsrp_attach_transportsbc.srp_attach_transportasbuh1hhjhhhjhM(ubjh)}(h h]h }(hj%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjhhhjhM(ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM(ubjy)}(hsrp_attach_transporth]j)}(hj"h]hsrp_attach_transport}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj@ubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjhhhjhM(ubj)}(h"(struct srp_function_template *ft)h]j)}(h struct srp_function_template *fth](jV)}(hjYh]hstruct}(hj_hhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhj[ubjh)}(h h]h }(hjlhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubh)}(hhh]j)}(hsrp_function_templateh]hsrp_function_template}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.srp_attach_transportasbuh1hhj[ubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj[ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj[ubj)}(hfth]hft}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjWubah}(h]h ]h"]h$]h&]jjuh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjݗhhhjhM(ubah}(h]jؗah ](jjeh"]h$]h&]jj)jhuh1jIhjhM(hjڗhhubj)}(hhh]h)}(h"instantiate SRP transport templateh]h"instantiate SRP transport template}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM(hjݘhhubah}(h]h ]h"]h$]h&]uh1jhjڗhhhjhM(ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jDhhhjÆhNhNubj)}(h\**Parameters** ``struct srp_function_template *ft`` SRP transport class function templateh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM,hjubj#)}(hhh]j()}(hJ``struct srp_function_template *ft`` SRP transport class function templateh](j.)}(h$``struct srp_function_template *ft``h]j4)}(hj!h]h struct srp_function_template *ft}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM.hjubjJ)}(hhh]h)}(h%SRP transport class function templateh]h%SRP transport class function template}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM)hj7ubah}(h]h ]h"]h$]h&]uh1jIhjubeh}(h]h ]h"]h$]h&]uh1j'hj6hM.hjubah}(h]h ]h"]h$]h&]uh1j"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubj4)}(hhh]h}(h]h ]h"]h$]h&]entries](j@"srp_release_transport (C function)c.srp_release_transporthNtauh1j3hjÆhhhNhNubjE)}(hhh](jJ)}(h>void srp_release_transport (struct scsi_transport_template *t)h]jP)}(h=void srp_release_transport(struct scsi_transport_template *t)h](j~)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j}hjwhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMZubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjwhhhjhMZubjy)}(hsrp_release_transporth]j)}(hsrp_release_transporth]hsrp_release_transport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubah}(h]h ](jjeh"]h$]h&]jjuh1jxhjwhhhjhMZubj)}(h#(struct scsi_transport_template *t)h]j)}(h!struct scsi_transport_template *th](jV)}(hjYh]hstruct}(hjhhhNhNubah}(h]h ]jbah"]h$]h&]uh1jUhjubjh)}(h h]h }(hjřhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubh)}(hhh]j)}(hscsi_transport_templateh]hscsi_transport_template}(hj֙hhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjәubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjؙmodnameN classnameNjj)}j]j)}jjsbc.srp_release_transportasbuh1hhjubjh)}(h h]h }(hjhhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hj h]ht}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j~hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubah}(h]h ]h"]h$]h&]jjuh1jhjwhhhjhMZubeh}(h]h ]h"]h$]h&]jjjuh1jOjjhjshhhjhMZubah}(h]jnah ](jjeh"]h$]h&]jj)jhuh1jIhjhMZhjphhubj)}(hhh]h)}(h'release SRP transport template instanceh]h'release SRP transport template instance}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chMZhj7hhubah}(h]h ]h"]h$]h&]uh1jhjphhhjhMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1jDhhhjÆhNhNubj)}(hS**Parameters** ``struct scsi_transport_template *t`` transport template instanceh](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM^hjVubj#)}(hhh]j()}(hA``struct scsi_transport_template *t`` transport template instanceh](j.)}(h%``struct scsi_transport_template *t``h]j4)}(hj{h]h!struct scsi_transport_template *t}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j3hjyubah}(h]h ]h"]h$]h&]uh1j-hb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM`hjuubjJ)}(hhh]h)}(htransport template instanceh]htransport template instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/scsi:300: ./drivers/scsi/scsi_transport_srp.chM[hjubah}(h]h ]h"]h$]h&]uh1jIhjuubeh}(h]h ]h"]h$]h&]uh1j'hjhM`hjrubah}(h]h ]h"]h$]h&]uh1j"hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjÆhhhNhNubeh}(h]scsi-rdma-srp-transport-classah ]h"]scsi rdma (srp) transport classah$]h&]uh1hhjhhhhhM'ubeh}(h]transport-classesah ]h"]transport classesah$]h&]uh1hhjhhhhhKubeh}(h]scsi-mid-layerah ]h"]scsi mid layerah$]h&]uh1hhhhhhhhKUubh)}(hhh](h)}(hSCSI lower layerh]hSCSI lower layer}(hjךhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjԚhhhhhM0ubh)}(hhh](h)}(h Host Bus Adapter transport typesh]h Host Bus Adapter transport types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM3ubh)}(hMany modern device controllers use the SCSI command set as a protocol to communicate with their devices through many different types of physical connections.h]hMany modern device controllers use the SCSI command set as a protocol to communicate with their devices through many different types of physical connections.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM5hjhhubh)}(hIn SCSI language a bus capable of carrying SCSI commands is called a "transport", and a controller connecting to such a bus is called a "host bus adapter" (HBA).h]hIn SCSI language a bus capable of carrying SCSI commands is called a “transport”, and a controller connecting to such a bus is called a “host bus adapter” (HBA).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM9hjhhubh)}(hhh](h)}(hDebug transporth]hDebug transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM>ubh)}(hX(The file drivers/scsi/scsi_debug.c simulates a host adapter with a variable number of disks (or disk like devices) attached, sharing a common amount of RAM. Does a lot of checking to make sure that we are not getting blocks mixed up, and panics the kernel if anything out of the ordinary is seen.h]hX(The file drivers/scsi/scsi_debug.c simulates a host adapter with a variable number of disks (or disk like devices) attached, sharing a common amount of RAM. Does a lot of checking to make sure that we are not getting blocks mixed up, and panics the kernel if anything out of the ordinary is seen.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM@hjhhubh)}(hWTo be more realistic, the simulated devices have the transport attributes of SAS disks.h]hWTo be more realistic, the simulated devices have the transport attributes of SAS disks.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMFhjhhubh)}(h;For documentation see http://sg.danny.cz/sg/scsi_debug.htmlh](hFor documentation see }(hj?hhhNhNubjn)}(h%http://sg.danny.cz/sg/scsi_debug.htmlh]h%http://sg.danny.cz/sg/scsi_debug.html}(hjGhhhNhNubah}(h]h ]h"]h$]h&]refurijIuh1jmhj?ubeh}(h]h ]h"]h$]h&]uh1hhhhMIhjhhubeh}(h]debug-transportah ]h"]debug transportah$]h&]uh1hhjhhhhhM>ubh)}(hhh](h)}(htodoh]htodo}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhMLubh)}(hParallel (fast/wide/ultra) SCSI, USB, SATA, SAS, Fibre Channel, FireWire, ATAPI devices, Infiniband, Parallel ports, netlink...h]hParallel (fast/wide/ultra) SCSI, USB, SATA, SAS, Fibre Channel, FireWire, ATAPI devices, Infiniband, Parallel ports, netlink...}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhjdhhubeh}(h]todoah ]h"]todoah$]h&]uh1hhjhhhhhMLubeh}(h] host-bus-adapter-transport-typesah ]h"] host bus adapter transport typesah$]h&]uh1hhjԚhhhhhM3ubeh}(h]scsi-lower-layerah ]h"]scsi lower layerah$]h&]uh1hhhhhhhhM0ubeh}(h]scsi-interfaces-guideah ]h"]scsi interfaces 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_handlerjƛerror_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}(jjjjjjj jjjjYjVjj}jjjjjjjњjΚjjj j j-j-j5j5jRjRj_j^jijijnjkjqjnjj}jljijjjjjjjjjjjɚjƚj,j,jIjIjjjjjjjjjjjjjaj^jju nametypes}(jjjj jjYjjjjjњjj j-j5jRj_jijnjqjjljjjjjjɚj,jIjjjjjjjajuh}(jhjj'jj8jjjjjVj5j}j\jjjjjjjΚjjjj j"jBjKjj jjjpjujV j[ j-j j! j& jjjjjjjjjjjjjPjUj!j!jI$jN$j&j&jF*jK*j5j-j-j-j0j0j3j 3jRj5j5j6j~7j7jC9jH9jN;jS;ji?jn?jAjAjCjCjuFjzFj`IjeIjJjJj@MjEMj3Pj8Pj^jRjSjSjWjWj[j[j]j]jij_j0_j5_jajajcjcjgj gjkjijijij8kj=kjpjpjrjrjujujxjxj zjzj{j{jH}jM}j~j~jdjijljqj|jjjj֑jۑjjjjj_jdjjjjjjjtjyjj jj!jGjLjjj(j-jnjqjjjj"j}jtjjjejjjjjjj(j-jjj޺jjjj jjjjYj^jjjjjijjjjojtjqjvjjojjjjjjjjjjjjjjj@jEjjjjjCjHjPjUjjjjjFjKjjjjjQjVjjjjjjj'j,jmjrjljqjjjjjqjvjjj#j(jƚjj,jjjj& j+ jJ jO jrjwjjj@jEjGjLj5j:j?jDj j j"j"j%j %j&j&jW(j\(j4+j9+jIj,j -j-j.j.j2j2j5j5j8j8j:j:jQ<jV<j=j=jS?jX?j@j@jUBjZBjDjDj[Fj`FjGjGjjIj$Jj)JjKjKjMMjRMjNjNj~PjPjQjRjSjSjUjUjuWjzWjXjXjZjZj)\j.\j]j]jV`j[`jYbj^bjcjcjejej gjgjhjhj_jjdjjljljnjnjpjpj]sjbsjtjtjvjvjxjxjyjyj{j{j|j|je~jj~jjjjjjjjj$j)jjjjÆjjjjjjjdjij:j?jjjjjUjZj֔j۔jWj\jؗjݗjnjsjjԚjjj^jjjdu 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.