€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ&/translations/zh_CN/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/zh_TW/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/it_IT/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ja_JP/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/ko_KR/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/pt_BR/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ&/translations/sp_SP/driver-api/usb/usb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)�”}”(hŒ.. _usb-hostside-api:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œusb-hostside-api”uh1hµh´Khhh²hh³Œ@/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb.rst”ubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒThe Linux-USB Host Side API”h]”hŒThe Linux-USB Host Side API”…”�”}”(hhËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒIntroduction to USB on Linux”h]”hŒIntroduction to USB on Linux”…”�”}”(hhÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÙh²hh³hÃh´KubhŒ paragraph”“”)�”}”(hXªA Universal Serial Bus (USB) is used to connect a host, such as a PC or workstation, to a number of peripheral devices. USB uses a tree structure, with the host as the root (the system's master), hubs as interior nodes, and peripherals as leaves (and slaves). Modern PCs support several such trees of USB devices, usually a few USB 3.0 (5 GBit/s) or USB 3.1 (10 GBit/s) and some legacy USB 2.0 (480 MBit/s) buses just in case.”h]”hX¬A Universal Serial Bus (USB) is used to connect a host, such as a PC or workstation, to a number of peripheral devices. USB uses a tree structure, with the host as the root (the system’s master), hubs as interior nodes, and peripherals as leaves (and slaves). Modern PCs support several such trees of USB devices, usually a few USB 3.0 (5 GBit/s) or USB 3.1 (10 GBit/s) and some legacy USB 2.0 (480 MBit/s) buses just in case.”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K hhÙh²hubhë)�”}”(hXvThat master/slave asymmetry was designed-in for a number of reasons, one being ease of use. It is not physically possible to mistake upstream and downstream or it does not matter with a type C plug (or they are built into the peripheral). Also, the host software doesn't need to deal with distributed auto-configuration since the pre-designated master node manages all that.”h]”hXxThat master/slave asymmetry was designed-in for a number of reasons, one being ease of use. It is not physically possible to mistake upstream and downstream or it does not matter with a type C plug (or they are built into the peripheral). Also, the host software doesn’t need to deal with distributed auto-configuration since the pre-designated master node manages all that.”…”�”}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´KhhÙh²hubhë)�”}”(hXXKernel developers added USB support to Linux early in the 2.2 kernel series and have been developing it further since then. Besides support for each new generation of USB, various host controllers gained support, new drivers for peripherals have been added and advanced features for latency measurement and improved power management introduced.”h]”hXXKernel developers added USB support to Linux early in the 2.2 kernel series and have been developing it further since then. Besides support for each new generation of USB, various host controllers gained support, new drivers for peripherals have been added and advanced features for latency measurement and improved power management introduced.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´KhhÙh²hubhë)�”}”(hX,Linux can run inside USB devices as well as on the hosts that control the devices. But USB device drivers running inside those peripherals don't do the same things as the ones running inside hosts, so they've been given a different name: *gadget drivers*. This document does not cover gadget drivers.”h]”(hŒòLinux can run inside USB devices as well as on the hosts that control the devices. But USB device drivers running inside those peripherals don’t do the same things as the ones running inside hosts, so they’ve been given a different name: ”…”�”}”(hjh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*gadget drivers*”h]”hŒgadget drivers”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ.. This document does not cover gadget drivers.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´KhhÙh²hubeh}”(h]”Œintroduction-to-usb-on-linux”ah ]”h"]”Œintroduction to usb on linux”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒUSB Host-Side API Model”h]”hŒUSB Host-Side API Model”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj@h²hh³hÃh´K&ubhë)�”}”(hXƒHost-side drivers for USB devices talk to the "usbcore" APIs. There are two. One is intended for *general-purpose* drivers (exposed through driver frameworks), and the other is for drivers that are *part of the core*. Such core drivers include the *hub* driver (which manages trees of USB devices) and several different kinds of *host controller drivers*, which control individual buses.”h]”(hŒeHost-side drivers for USB devices talk to the “usbcoreâ€� APIs. There are two. One is intended for ”…”�”}”(hjQh²hh³Nh´Nubj)�”}”(hŒ*general-purpose*”h]”hŒgeneral-purpose”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubhŒT drivers (exposed through driver frameworks), and the other is for drivers that are ”…”�”}”(hjQh²hh³Nh´Nubj)�”}”(hŒ*part of the core*”h]”hŒpart of the core”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubhŒ . Such core drivers include the ”…”�”}”(hjQh²hh³Nh´Nubj)�”}”(hŒ*hub*”h]”hŒhub”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubhŒL driver (which manages trees of USB devices) and several different kinds of ”…”�”}”(hjQh²hh³Nh´Nubj)�”}”(hŒ*host controller drivers*”h]”hŒhost controller drivers”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubhŒ!, which control individual buses.”…”�”}”(hjQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K(hj@h²hubhë)�”}”(hŒ;The device model seen by USB drivers is relatively complex.”h]”hŒ;The device model seen by USB drivers is relatively complex.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K/hj@h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒöUSB supports four kinds of data transfers (control, bulk, interrupt, and isochronous). Two of them (control and bulk) use bandwidth as it's available, while the other two (interrupt and isochronous) are scheduled to provide guaranteed bandwidth. ”h]”hë)�”}”(hŒõUSB supports four kinds of data transfers (control, bulk, interrupt, and isochronous). Two of them (control and bulk) use bandwidth as it's available, while the other two (interrupt and isochronous) are scheduled to provide guaranteed bandwidth.”h]”hŒ÷USB supports four kinds of data transfers (control, bulk, interrupt, and isochronous). Two of them (control and bulk) use bandwidth as it’s available, while the other two (interrupt and isochronous) are scheduled to provide guaranteed bandwidth.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K1hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj·h²hh³hÃh´Nubj»)�”}”(hX!The device description model includes one or more "configurations" per device, only one of which is active at a time. Devices are supposed to be capable of operating at lower than their top speeds and may provide a BOS descriptor showing the lowest speed they remain fully operational at. ”h]”hë)�”}”(hX The device description model includes one or more "configurations" per device, only one of which is active at a time. Devices are supposed to be capable of operating at lower than their top speeds and may provide a BOS descriptor showing the lowest speed they remain fully operational at.”h]”hX$The device description model includes one or more “configurationsâ€� per device, only one of which is active at a time. Devices are supposed to be capable of operating at lower than their top speeds and may provide a BOS descriptor showing the lowest speed they remain fully operational at.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K6hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj·h²hh³hÃh´Nubj»)�”}”(hŒ�From USB 3.0 on configurations have one or more "functions", which provide a common functionality and are grouped together for purposes of power management. ”h]”hë)�”}”(hŒœFrom USB 3.0 on configurations have one or more "functions", which provide a common functionality and are grouped together for purposes of power management.”h]”hŒ From USB 3.0 on configurations have one or more “functionsâ€�, which provide a common functionality and are grouped together for purposes of power management.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kenum usb_ssp_rate usb_get_maximum_ssp_rate(struct device *dev)”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjO h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K„ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjO h²hh³j` h´K„ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_ssp_rate”h]”hŒ usb_ssp_rate”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjo ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jt Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHŒusb_get_maximum_ssp_rate”sbŒc.usb_get_maximum_ssp_rate”†”asbuh1hhjO h²hh³j` h´K„ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjO h²hh³j` h´K„ubj„)�”}”(hŒusb_get_maximum_ssp_rate”h]”jŠ)�”}”(hj� h]”hŒusb_get_maximum_ssp_rate”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¡ ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjO h²hh³j` h´K„ubj¥)�”}”(hŒ(struct device *dev)”h]”j«)�”}”(hŒstruct device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¼ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¼ ubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÛ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jà Œmodname”NŒ classname”NjLjO)�”}”jR]”jŽ Œc.usb_get_maximum_ssp_rate”†”asbuh1hhj¼ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¼ ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¼ ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¸ ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjO h²hh³j` h´K„ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjK h²hh³j` h´K„ubah}”(h]”jF ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j` h´K„hjH h²hubjü)�”}”(hhh]”hë)�”}”(hŒUGet the signaling rate generation and lane count of a SuperSpeed Plus capable device.”h]”hŒUGet the signaling rate generation and lane count of a SuperSpeed Plus capable device.”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K„hj> h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjH h²hh³j` h´K„ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjY jjY j ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hX/**Parameters** ``struct device *dev`` Pointer to the given USB controller device **Description** If the string from "maximum-speed" property is super-speed-plus-genXxY where 'X' is the generation number and 'Y' is the number of lanes, then this function returns the corresponding enum usb_ssp_rate.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjc h]”hŒ Parameters”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hja ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kˆhj] ubjD)�”}”(hhh]”jI)�”}”(hŒB``struct device *dev`` Pointer to the given USB controller device ”h]”(jO)�”}”(hŒ``struct device *dev``”h]”jÑ)�”}”(hj‚ h]”hŒstruct device *dev”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K†hj| ubji)�”}”(hhh]”hë)�”}”(hŒ*Pointer to the given USB controller device”h]”hŒ*Pointer to the given USB controller device”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j— h´K†hj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj| ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j— h´K†hjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj] ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj½ h]”hŒ Description”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj» ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kˆhj] ubhë)�”}”(hŒÉIf the string from "maximum-speed" property is super-speed-plus-genXxY where 'X' is the generation number and 'Y' is the number of lanes, then this function returns the corresponding enum usb_ssp_rate.”h]”hŒÕIf the string from “maximum-speedâ€� property is super-speed-plus-genXxY where ‘X’ is the generation number and ‘Y’ is the number of lanes, then this function returns the corresponding enum usb_ssp_rate.”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K‡hj] ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_state_string (C function)”Œc.usb_state_string”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ;const char * usb_state_string (enum usb_device_state state)”h]”j+)�”}”(hŒ9const char *usb_state_string(enum usb_device_state state)”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjþ h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K›ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjþ h²hh³j h´K›ubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjþ h²hh³j h´K›ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjþ h²hh³j h´K›ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjþ h²hh³j h´K›ubj„)�”}”(hŒusb_state_string”h]”jŠ)�”}”(hŒusb_state_string”h]”hŒusb_state_string”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjG ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjþ h²hh³j h´K›ubj¥)�”}”(hŒ(enum usb_device_state state)”h]”j«)�”}”(hŒenum usb_device_state state”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjc ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjc ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_device_state”h]”hŒusb_device_state”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‚ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j‡ Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjM sbŒc.usb_state_string”†”asbuh1hhjc ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjc ubjŠ)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjc ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj_ ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjþ h²hh³j h´K›ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjú h²hh³j h´K›ubah}”(h]”jõ ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j h´K›hj÷ h²hubjü)�”}”(hhh]”hë)�”}”(hŒ*Returns human readable name for the state.”h]”hŒ*Returns human readable name for the state.”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K›hjÚ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj÷ h²hh³j h´K›ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjõ jjõ j ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hŒÐ**Parameters** ``enum usb_device_state state`` The state to return a human-readable name for. If it's not any of the states devices in usb_device_state_string enum, the string UNKNOWN will be returned.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÿ h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjý ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KŸhjù ubjD)�”}”(hhh]”jI)�”}”(hŒº``enum usb_device_state state`` The state to return a human-readable name for. If it's not any of the states devices in usb_device_state_string enum, the string UNKNOWN will be returned.”h]”(jO)�”}”(hŒ``enum usb_device_state state``”h]”jÑ)�”}”(hj h]”hŒenum usb_device_state state”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´K�hj ubji)�”}”(hhh]”hë)�”}”(hŒšThe state to return a human-readable name for. If it's not any of the states devices in usb_device_state_string enum, the string UNKNOWN will be returned.”h]”hŒœThe state to return a human-readable name for. If it’s not any of the states devices in usb_device_state_string enum, the string UNKNOWN will be returned.”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kœhj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j3 h´K�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjù ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_get_role_switch_default_mode (C function)”Œ"c.usb_get_role_switch_default_mode”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒFenum usb_dr_mode usb_get_role_switch_default_mode (struct device *dev)”h]”j+)�”}”(hŒEenum usb_dr_mode usb_get_role_switch_default_mode(struct device *dev)”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjt h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjt h²hh³j… h´KÚubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_dr_mode”h]”hŒ usb_dr_mode”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj” ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j™ Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHŒ usb_get_role_switch_default_mode”sbŒ"c.usb_get_role_switch_default_mode”†”asbuh1hhjt h²hh³j… h´KÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjt h²hh³j… h´KÚubj„)�”}”(hŒ usb_get_role_switch_default_mode”h]”jŠ)�”}”(hjµ h]”hŒ usb_get_role_switch_default_mode”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÆ ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjt h²hh³j… h´KÚubj¥)�”}”(hŒ(struct device *dev)”h]”j«)�”}”(hŒstruct device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjá ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjá ubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j Œmodname”NŒ classname”NjLjO)�”}”jR]”j³ Œ"c.usb_get_role_switch_default_mode”†”asbuh1hhjá ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjá ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjá ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjá ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjt h²hh³j… h´KÚubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjp h²hh³j… h´KÚubah}”(h]”jk ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j… h´KÚhjm h²hubjü)�”}”(hhh]”hë)�”}”(hŒ!Get default mode for given device”h]”hŒ!Get default mode for given device”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÚhjc h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjm h²hh³j… h´KÚubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj~ jj~ j ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hŒÉ**Parameters** ``struct device *dev`` Pointer to the given device **Description** The function gets string from property 'role-switch-default-mode', and returns the corresponding enum usb_dr_mode.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjˆ h]”hŒ Parameters”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÞhj‚ ubjD)�”}”(hhh]”jI)�”}”(hŒ3``struct device *dev`` Pointer to the given device ”h]”(jO)�”}”(hŒ``struct device *dev``”h]”jÑ)�”}”(hj§ h]”hŒstruct device *dev”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¥ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÛhj¡ ubji)�”}”(hhh]”hë)�”}”(hŒPointer to the given device”h]”hŒPointer to the given device”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¼ h´KÛhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¡ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¼ h´KÛhjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj‚ ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjâ h]”hŒ Description”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÝhj‚ ubhë)�”}”(hŒrThe function gets string from property 'role-switch-default-mode', and returns the corresponding enum usb_dr_mode.”h]”hŒvThe function gets string from property ‘role-switch-default-mode’, and returns the corresponding enum usb_dr_mode.”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KÜhj‚ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ usb_decode_interval (C function)”Œc.usb_decode_interval”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒiunsigned int usb_decode_interval (const struct usb_endpoint_descriptor *epd, enum usb_device_speed speed)”h]”j+)�”}”(hŒhunsigned int usb_decode_interval(const struct usb_endpoint_descriptor *epd, enum usb_device_speed speed)”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj#h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´KîubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#h²hh³j5h´KîubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj#h²hh³j5h´KîubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#h²hh³j5h´Kîubj„)�”}”(hŒusb_decode_interval”h]”jŠ)�”}”(hŒusb_decode_interval”h]”hŒusb_decode_interval”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj`ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj#h²hh³j5h´Kîubj¥)�”}”(hŒH(const struct usb_endpoint_descriptor *epd, enum usb_device_speed speed)”h]”(j«)�”}”(hŒ)const struct usb_endpoint_descriptor *epd”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj|ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj|ubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj|ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj|ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j»Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjfsbŒc.usb_decode_interval”†”asbuh1hhj|ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj|ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj|ubjŠ)�”}”(hŒepd”h]”hŒepd”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjxubj«)�”}”(hŒenum usb_device_speed speed”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_device_speed”h]”hŒusb_device_speed”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j-Œmodname”NŒ classname”NjLjO)�”}”jR]”jÕŒc.usb_decode_interval”†”asbuh1hhj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubjŠ)�”}”(hŒspeed”h]”hŒspeed”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjxubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj#h²hh³j5h´Kîubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjh²hh³j5h´Kîubah}”(h]”jah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j5h´Kîhjh²hubjü)�”}”(hhh]”hë)�”}”(hŒ4Decode bInterval into the time expressed in 1us unit”h]”hŒ4Decode bInterval into the time expressed in 1us unit”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kîhj~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjh²hh³j5h´Kîubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj™jj™j ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hX**Parameters** ``const struct usb_endpoint_descriptor *epd`` The descriptor of the endpoint ``enum usb_device_speed speed`` The speed that the endpoint works as **Description** Function returns the interval expressed in 1us unit for servicing endpoint for data transfers.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj£h]”hŒ Parameters”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kòhj�ubjD)�”}”(hhh]”(jI)�”}”(hŒM``const struct usb_endpoint_descriptor *epd`` The descriptor of the endpoint ”h]”(jO)�”}”(hŒ-``const struct usb_endpoint_descriptor *epd``”h]”jÑ)�”}”(hjÂh]”hŒ)const struct usb_endpoint_descriptor *epd”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kïhj¼ubji)�”}”(hhh]”hë)�”}”(hŒThe descriptor of the endpoint”h]”hŒThe descriptor of the endpoint”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j×h´KïhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j×h´Kïhj¹ubjI)�”}”(hŒE``enum usb_device_speed speed`` The speed that the endpoint works as ”h]”(jO)�”}”(hŒ``enum usb_device_speed speed``”h]”jÑ)�”}”(hjûh]”hŒenum usb_device_speed speed”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kðhjõubji)�”}”(hhh]”hë)�”}”(hŒ$The speed that the endpoint works as”h]”hŒ$The speed that the endpoint works as”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´Kðhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´Kðhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj�ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj6h]”hŒ Description”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kòhj�ubhë)�”}”(hŒ^Function returns the interval expressed in 1us unit for servicing endpoint for data transfers.”h]”hŒ^Function returns the interval expressed in 1us unit for servicing endpoint for data transfers.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Kñhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&of_usb_get_dr_mode_by_phy (C function)”Œc.of_usb_get_dr_mode_by_phy”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒMenum usb_dr_mode of_usb_get_dr_mode_by_phy (struct device_node *np, int arg0)”h]”j+)�”}”(hŒLenum usb_dr_mode of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0)”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjwh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjwh²hh³jˆh´Mubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_dr_mode”h]”hŒ usb_dr_mode”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jœŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHŒof_usb_get_dr_mode_by_phy”sbŒc.of_usb_get_dr_mode_by_phy”†”asbuh1hhjwh²hh³jˆh´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjwh²hh³jˆh´Mubj„)�”}”(hŒof_usb_get_dr_mode_by_phy”h]”jŠ)�”}”(hj¸h]”hŒof_usb_get_dr_mode_by_phy”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÉubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjwh²hh³jˆh´Mubj¥)�”}”(hŒ"(struct device_node *np, int arg0)”h]”(j«)�”}”(hŒstruct device_node *np”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjäubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjäubh)�”}”(hhh]”jŠ)�”}”(hŒ device_node”h]”hŒ device_node”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jŒmodname”NŒ classname”NjLjO)�”}”jR]”j¶Œc.of_usb_get_dr_mode_by_phy”†”asbuh1hhjäubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjäubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjäubjŠ)�”}”(hŒnp”h]”hŒnp”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjàubj«)�”}”(hŒint arg0”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjTubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjTubjŠ)�”}”(hŒarg0”h]”hŒarg0”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjàubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjwh²hh³jˆh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjsh²hh³jˆh´Mubah}”(h]”jnah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jˆh´Mhjph²hubjü)�”}”(hhh]”hë)�”}”(hŒ_Get dual role mode for the controller device which is associated with the given phy device_node”h]”hŒ_Get dual role mode for the controller device which is associated with the given phy device_node”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mhj›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjph²hh³jˆh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¶jj¶j ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hX§**Parameters** ``struct device_node *np`` Pointer to the given phy device_node ``int arg0`` phandle args[0] for phy's with #phy-cells >= 1, or -1 for phys which do not have phy-cells **Description** In dts a usb controller associates with phy devices. The function gets the string from property 'dr_mode' of the controller associated with the given phy device node, and returns the correspondig enum usb_dr_mode.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÀh]”hŒ Parameters”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MhjºubjD)�”}”(hhh]”(jI)�”}”(hŒ@``struct device_node *np`` Pointer to the given phy device_node ”h]”(jO)�”}”(hŒ``struct device_node *np``”h]”jÑ)�”}”(hjßh]”hŒstruct device_node *np”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”• h´MhjÙubji)�”}”(hhh]”hë)�”}”(hŒ$Pointer to the given phy device_node”h]”hŒ$Pointer to the given phy device_node”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jôh´Mhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jôh´MhjÖubjI)�”}”(hŒh``int arg0`` phandle args[0] for phy's with #phy-cells >= 1, or -1 for phys which do not have phy-cells ”h]”(jO)�”}”(hŒ ``int arg0``”h]”jÑ)�”}”(hjh]”hŒint arg0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mhjubji)�”}”(hhh]”hë)�”}”(hŒZphandle args[0] for phy's with #phy-cells >= 1, or -1 for phys which do not have phy-cells”h]”hŒ\phandle args[0] for phy’s with #phy-cells >= 1, or -1 for phys which do not have phy-cells”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j-h´MhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjºubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjTh]”hŒ Description”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mhjºubhë)�”}”(hŒÖIn dts a usb controller associates with phy devices. The function gets the string from property 'dr_mode' of the controller associated with the given phy device node, and returns the correspondig enum usb_dr_mode.”h]”hŒÚIn dts a usb controller associates with phy devices. The function gets the string from property ‘dr_mode’ of the controller associated with the given phy device node, and returns the correspondig enum usb_dr_mode.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mhjºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$of_usb_host_tpl_support (C function)”Œc.of_usb_host_tpl_support”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ5bool of_usb_host_tpl_support (struct device_node *np)”h]”j+)�”}”(hŒ4bool of_usb_host_tpl_support(struct device_node *np)”h]”(jT)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj•h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MOubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj•h²hh³j§h´MOubj„)�”}”(hŒof_usb_host_tpl_support”h]”jŠ)�”}”(hŒof_usb_host_tpl_support”h]”hŒof_usb_host_tpl_support”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¶ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj•h²hh³j§h´MOubj¥)�”}”(hŒ(struct device_node *np)”h]”j«)�”}”(hŒstruct device_node *np”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÒubh)�”}”(hhh]”jŠ)�”}”(hŒ device_node”h]”hŒ device_node”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jöŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj¼sbŒc.of_usb_host_tpl_support”†”asbuh1hhjÒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÒubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÒubjŠ)�”}”(hŒnp”h]”hŒnp”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÎubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj•h²hh³j§h´MOubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj‘h²hh³j§h´MOubah}”(h]”jŒah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j§h´MOhjŽh²hubjü)�”}”(hhh]”hë)�”}”(hŒWto get if Targeted Peripheral List is supported for given targeted hosts (non-PC hosts)”h]”hŒWto get if Targeted Peripheral List is supported for given targeted hosts (non-PC hosts)”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MOhjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjŽh²hh³j§h´MOubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjqjjqj ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hŒš**Parameters** ``struct device_node *np`` Pointer to the given device_node **Description** The function gets if the targeted hosts support TPL or not”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj{h]”hŒ Parameters”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MShjuubjD)�”}”(hhh]”jI)�”}”(hŒ<``struct device_node *np`` Pointer to the given device_node ”h]”(jO)�”}”(hŒ``struct device_node *np``”h]”jÑ)�”}”(hjšh]”hŒstruct device_node *np”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MQhj”ubji)�”}”(hhh]”hë)�”}”(hŒ Pointer to the given device_node”h]”hŒ Pointer to the given device_node”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¯h´MQhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¯h´MQhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjuubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÕh]”hŒ Description”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MShjuubhë)�”}”(hŒ:The function gets if the targeted hosts support TPL or not”h]”hŒ:The function gets if the targeted hosts support TPL or not”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´MRhjuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#of_usb_update_otg_caps (C function)”Œc.of_usb_update_otg_caps”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒRint of_usb_update_otg_caps (struct device_node *np, struct usb_otg_caps *otg_caps)”h]”j+)�”}”(hŒQint of_usb_update_otg_caps(struct device_node *np, struct usb_otg_caps *otg_caps)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M\ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjh²hh³j(h´M\ubj„)�”}”(hŒof_usb_update_otg_caps”h]”jŠ)�”}”(hŒof_usb_update_otg_caps”h]”hŒof_usb_update_otg_caps”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj7ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjh²hh³j(h´M\ubj¥)�”}”(hŒ7(struct device_node *np, struct usb_otg_caps *otg_caps)”h]”(j«)�”}”(hŒstruct device_node *np”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjSubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjSubh)�”}”(hhh]”jŠ)�”}”(hŒ device_node”h]”hŒ device_node”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jwŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj=sbŒc.of_usb_update_otg_caps”†”asbuh1hhjSubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjSubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjSubjŠ)�”}”(hŒnp”h]”hŒnp”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjOubj«)�”}”(hŒstruct usb_otg_caps *otg_caps”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÅubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_otg_caps”h]”hŒ usb_otg_caps”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jéŒmodname”NŒ classname”NjLjO)�”}”jR]”j‘Œc.of_usb_update_otg_caps”†”asbuh1hhjÅubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÅubjŠ)�”}”(hŒotg_caps”h]”hŒotg_caps”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjOubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjh²hh³j(h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjh²hh³j(h´M\ubah}”(h]”j ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j(h´M\hjh²hubjü)�”}”(hhh]”hë)�”}”(hŒHto update usb otg capabilities according to the passed properties in DT.”h]”hŒHto update usb otg capabilities according to the passed properties in DT.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M\hjGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjh²hh³j(h´M\ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjbjjbj ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hŒÛ**Parameters** ``struct device_node *np`` Pointer to the given device_node ``struct usb_otg_caps *otg_caps`` Pointer to the target usb_otg_caps to be set **Description** The function updates the otg capabilities”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjlh]”hŒ Parameters”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M`hjfubjD)�”}”(hhh]”(jI)�”}”(hŒ<``struct device_node *np`` Pointer to the given device_node ”h]”(jO)�”}”(hŒ``struct device_node *np``”h]”jÑ)�”}”(hj‹h]”hŒstruct device_node *np”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M^hj…ubji)�”}”(hhh]”hë)�”}”(hŒ Pointer to the given device_node”h]”hŒ Pointer to the given device_node”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j h´M^hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j h´M^hj‚ubjI)�”}”(hŒO``struct usb_otg_caps *otg_caps`` Pointer to the target usb_otg_caps to be set ”h]”(jO)�”}”(hŒ!``struct usb_otg_caps *otg_caps``”h]”jÑ)�”}”(hjÄh]”hŒstruct usb_otg_caps *otg_caps”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M_hj¾ubji)�”}”(hhh]”hë)�”}”(hŒ,Pointer to the target usb_otg_caps to be set”h]”hŒ,Pointer to the target usb_otg_caps to be set”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÙh´M_hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÙh´M_hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjfubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÿh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mahjfubhë)�”}”(hŒ)The function updates the otg capabilities”h]”hŒ)The function updates the otg capabilities”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M`hjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ%usb_of_get_companion_dev (C function)”Œc.usb_of_get_companion_dev”hNt”auh1jhj·h²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ=struct device * usb_of_get_companion_dev (struct device *dev)”h]”j+)�”}”(hŒ;struct device *usb_of_get_companion_dev(struct device *dev)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj@h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M“ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj@h²hh³jQh´M“ubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jeŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHŒusb_of_get_companion_dev”sbŒc.usb_of_get_companion_dev”†”asbuh1hhj@h²hh³jQh´M“ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj@h²hh³jQh´M“ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj@h²hh³jQh´M“ubj„)�”}”(hŒusb_of_get_companion_dev”h]”jŠ)�”}”(hj�h]”hŒusb_of_get_companion_dev”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŸubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj@h²hh³jQh´M“ubj¥)�”}”(hŒ(struct device *dev)”h]”j«)�”}”(hŒstruct device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjºubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjºubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÞŒmodname”NŒ classname”NjLjO)�”}”jR]”jŒc.usb_of_get_companion_dev”†”asbuh1hhjºubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjºubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjºubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¶ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj@h²hh³jQh´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj<h²hh³jQh´M“ubah}”(h]”j7ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jQh´M“hj9h²hubjü)�”}”(hhh]”hë)�”}”(hŒFind the companion device”h]”hŒFind the companion device”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M“hj<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj9h²hh³jQh´M“ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjWjjWj ‰j!‰j"‰uh1jh²hhj·h³Nh´Nubj$)�”}”(hX5**Parameters** ``struct device *dev`` the device pointer to find a companion **Description** Find the companion device from platform bus. Takes a reference to the returned struct device which needs to be dropped after use. **Return** On success, a pointer to the companion device, ``NULL`` on failure.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjah]”hŒ Parameters”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M—hj[ubjD)�”}”(hhh]”jI)�”}”(hŒ>``struct device *dev`` the device pointer to find a companion ”h]”(jO)�”}”(hŒ``struct device *dev``”h]”jÑ)�”}”(hj€h]”hŒstruct device *dev”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M”hjzubji)�”}”(hhh]”hë)�”}”(hŒ&the device pointer to find a companion”h]”hŒ&the device pointer to find a companion”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j•h´M”hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j•h´M”hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj[ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj»h]”hŒ Description”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M–hj[ubhë)�”}”(hŒ,Find the companion device from platform bus.”h]”hŒ,Find the companion device from platform bus.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M•hj[ubhë)�”}”(hŒTTakes a reference to the returned struct device which needs to be dropped after use.”h]”hŒTTakes a reference to the returned struct device which needs to be dropped after use.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M—hj[ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjñh]”hŒReturn”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´Mšhj[ubhë)�”}”(hŒCOn success, a pointer to the companion device, ``NULL`` on failure.”h]”(hŒ/On success, a pointer to the companion device, ”…”�”}”(hjh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubhŒ on failure.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ_/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:120: ./drivers/usb/common/common.c”h´M›hj[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hj·h²hh³Nh´Nubhë)�”}”(hŒoIn addition, some functions useful for creating debugging output are defined in ``drivers/usb/common/debug.c``.”h]”(hŒPIn addition, some functions useful for creating debugging output are defined in ”…”�”}”(hj/h²hh³Nh´NubjÑ)�”}”(hŒ``drivers/usb/common/debug.c``”h]”hŒdrivers/usb/common/debug.c”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj/ubhŒ.”…”�”}”(hj/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´K{hj·h²hubh¶)�”}”(hŒ.. _usb_header:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ usb-header”uh1hµh´K~hj·h²hh³hÃubeh}”(h]”(Œusb-standard-types”j®eh ]”h"]”(Œusb-standard types”Œ usb_chapter9”eh$]”h&]”uh1hÄhhÆh²hh³hÃh´KnŒexpect_referenced_by_name”}”j`j¤sŒexpect_referenced_by_id”}”j®j¤subhÅ)�”}”(hhh]”(hÊ)�”}”(hŒHost-Side Data Types and Macros”h]”hŒHost-Side Data Types and Macros”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjgh²hh³hÃh´K�ubhë)�”}”(hX The host side API exposes several layers to drivers, some of which are more necessary than others. These support lifecycle models for host side drivers and devices, and support passing buffers through usbcore to some HCD that performs the I/O for the device driver.”h]”hX The host side API exposes several layers to drivers, some of which are more necessary than others. These support lifecycle models for host side drivers and devices, and support passing buffers through usbcore to some HCD that performs the I/O for the device driver.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kƒhjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_host_endpoint (C struct)”Œc.usb_host_endpoint”hNt”auh1jhjgh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_host_endpoint”h]”j+)�”}”(hŒstruct usb_host_endpoint”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjœh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjœh²hh³j­h´Kubj„)�”}”(hŒusb_host_endpoint”h]”jŠ)�”}”(hjšh]”hŒusb_host_endpoint”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjœh²hh³j­h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj˜h²hh³j­h´Kubah}”(h]”j’ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j­h´Khj•h²hubjü)�”}”(hhh]”hë)�”}”(hŒ'host-side endpoint descriptor and queue”h]”hŒ'host-side endpoint descriptor and queue”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K3hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj•h²hh³j­h´Kubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjjújjúj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXj**Definition**:: struct usb_host_endpoint { struct usb_endpoint_descriptor desc; struct usb_ss_ep_comp_descriptor ss_ep_comp; struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp; struct usb_eusb2_isoc_ep_comp_descriptor eusb2_isoc_ep_comp; struct list_head urb_list; void *hcpriv; struct ep_device *ep_dev; unsigned char *extra; int extralen; int enabled; int streams; }; **Members** ``desc`` descriptor for this endpoint, wMaxPacketSize in native byteorder ``ss_ep_comp`` SuperSpeed companion descriptor for this endpoint ``ssp_isoc_ep_comp`` SuperSpeedPlus isoc companion descriptor for this endpoint ``eusb2_isoc_ep_comp`` eUSB2 isoc companion descriptor for this endpoint ``urb_list`` urbs queued to this endpoint; maintained by usbcore ``hcpriv`` for use by HCD; typically holds hardware dma queue head (QH) with one or more transfer descriptors (TDs) per urb; must be preserved by core while BW is allocated for the endpoint ``ep_dev`` ep_device for sysfs info ``extra`` descriptors following this endpoint in the configuration ``extralen`` how many bytes of "extra" are valid ``enabled`` URBs may be submitted to this endpoint ``streams`` number of USB-3 streams allocated on the endpoint”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K7hjþubhŒ literal_block”“”)�”}”(hXàstruct usb_host_endpoint { struct usb_endpoint_descriptor desc; struct usb_ss_ep_comp_descriptor ss_ep_comp; struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp; struct usb_eusb2_isoc_ep_comp_descriptor eusb2_isoc_ep_comp; struct list_head urb_list; void *hcpriv; struct ep_device *ep_dev; unsigned char *extra; int extralen; int enabled; int streams; };”h]”hXàstruct usb_host_endpoint { struct usb_endpoint_descriptor desc; struct usb_ss_ep_comp_descriptor ss_ep_comp; struct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp; struct usb_eusb2_isoc_ep_comp_descriptor eusb2_isoc_ep_comp; struct list_head urb_list; void *hcpriv; struct ep_device *ep_dev; unsigned char *extra; int extralen; int enabled; int streams; };”…”�”}”hj!sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K9hjþubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj2h]”hŒMembers”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KGhjþubjD)�”}”(hhh]”(jI)�”}”(hŒJ``desc`` descriptor for this endpoint, wMaxPacketSize in native byteorder ”h]”(jO)�”}”(hŒ``desc``”h]”jÑ)�”}”(hjQh]”hŒdesc”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K5hjKubji)�”}”(hhh]”hë)�”}”(hŒ@descriptor for this endpoint, wMaxPacketSize in native byteorder”h]”hŒ@descriptor for this endpoint, wMaxPacketSize in native byteorder”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jfh´K5hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jfh´K5hjHubjI)�”}”(hŒA``ss_ep_comp`` SuperSpeed companion descriptor for this endpoint ”h]”(jO)�”}”(hŒ``ss_ep_comp``”h]”jÑ)�”}”(hjŠh]”hŒ ss_ep_comp”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K6hj„ubji)�”}”(hhh]”hë)�”}”(hŒ1SuperSpeed companion descriptor for this endpoint”h]”hŒ1SuperSpeed companion descriptor for this endpoint”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jŸh´K6hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jŸh´K6hjHubjI)�”}”(hŒP``ssp_isoc_ep_comp`` SuperSpeedPlus isoc companion descriptor for this endpoint ”h]”(jO)�”}”(hŒ``ssp_isoc_ep_comp``”h]”jÑ)�”}”(hjÃh]”hŒssp_isoc_ep_comp”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K7hj½ubji)�”}”(hhh]”hë)�”}”(hŒ:SuperSpeedPlus isoc companion descriptor for this endpoint”h]”hŒ:SuperSpeedPlus isoc companion descriptor for this endpoint”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jØh´K7hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jØh´K7hjHubjI)�”}”(hŒI``eusb2_isoc_ep_comp`` eUSB2 isoc companion descriptor for this endpoint ”h]”(jO)�”}”(hŒ``eusb2_isoc_ep_comp``”h]”jÑ)�”}”(hjüh]”hŒeusb2_isoc_ep_comp”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K8hjöubji)�”}”(hhh]”hë)�”}”(hŒ1eUSB2 isoc companion descriptor for this endpoint”h]”hŒ1eUSB2 isoc companion descriptor for this endpoint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´K8hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´K8hjHubjI)�”}”(hŒA``urb_list`` urbs queued to this endpoint; maintained by usbcore ”h]”(jO)�”}”(hŒ ``urb_list``”h]”jÑ)�”}”(hj5h]”hŒurb_list”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K9hj/ubji)�”}”(hhh]”hë)�”}”(hŒ3urbs queued to this endpoint; maintained by usbcore”h]”hŒ3urbs queued to this endpoint; maintained by usbcore”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jJh´K9hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jJh´K9hjHubjI)�”}”(hŒ¾``hcpriv`` for use by HCD; typically holds hardware dma queue head (QH) with one or more transfer descriptors (TDs) per urb; must be preserved by core while BW is allocated for the endpoint ”h]”(jO)�”}”(hŒ ``hcpriv``”h]”jÑ)�”}”(hjnh]”hŒhcpriv”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KhjÛubji)�”}”(hhh]”hë)�”}”(hŒ8descriptors following this endpoint in the configuration”h]”hŒ8descriptors following this endpoint in the configuration”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jöh´K>hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jöh´K>hjHubjI)�”}”(hŒ1``extralen`` how many bytes of "extra" are valid ”h]”(jO)�”}”(hŒ ``extralen``”h]”jÑ)�”}”(hjh]”hŒextralen”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K?hjubji)�”}”(hhh]”hë)�”}”(hŒ#how many bytes of "extra" are valid”h]”hŒ'how many bytes of “extraâ€� are valid”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j/h´K?hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j/h´K?hjHubjI)�”}”(hŒ3``enabled`` URBs may be submitted to this endpoint ”h]”(jO)�”}”(hŒ ``enabled``”h]”jÑ)�”}”(hjSh]”hŒenabled”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K@hjMubji)�”}”(hhh]”hë)�”}”(hŒ&URBs may be submitted to this endpoint”h]”hŒ&URBs may be submitted to this endpoint”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jhh´K@hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jhh´K@hjHubjI)�”}”(hŒ=``streams`` number of USB-3 streams allocated on the endpoint”h]”(jO)�”}”(hŒ ``streams``”h]”jÑ)�”}”(hjŒh]”hŒstreams”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K@hj†ubji)�”}”(hhh]”hë)�”}”(hŒ1number of USB-3 streams allocated on the endpoint”h]”hŒ1number of USB-3 streams allocated on the endpoint”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KAhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¡h´K@hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÏh]”hŒ Description”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KDhjgh²hubhë)�”}”(hŒ‡USB requests are always queued to a given endpoint, identified by a descriptor within an active interface in a given USB configuration.”h]”hŒ‡USB requests are always queued to a given endpoint, identified by a descriptor within an active interface in a given USB configuration.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KAhjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_interface (C struct)”Œc.usb_interface”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ usb_interface”h]”j+)�”}”(hŒstruct usb_interface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KGubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj h²hh³jh´KGubj„)�”}”(hŒ usb_interface”h]”jŠ)�”}”(hjh]”hŒ usb_interface”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj)ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj h²hh³jh´KGubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjh²hh³jh´KGubah}”(h]”jah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jh´KGhjh²hubjü)�”}”(hhh]”hë)�”}”(hŒwhat usb device drivers talk to”h]”hŒwhat usb device drivers talk to”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K·hjLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjh²hh³jh´KGubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjjgjjgj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hX **Definition**:: struct usb_interface { struct usb_host_interface *altsetting; struct usb_host_interface *cur_altsetting; unsigned num_altsetting; struct usb_interface_assoc_descriptor *intf_assoc; int minor; enum usb_interface_condition condition; unsigned sysfs_files_created:1; unsigned ep_devs_created:1; unsigned unregistering:1; unsigned needs_remote_wakeup:1; unsigned needs_altsetting0:1; unsigned needs_binding:1; unsigned resetting_device:1; unsigned authorized:1; enum usb_wireless_status wireless_status; struct work_struct wireless_status_work; struct device dev; struct device *usb_dev; struct work_struct reset_ws; }; **Members** ``altsetting`` array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order. ``cur_altsetting`` the current altsetting. ``num_altsetting`` number of altsettings defined. ``intf_assoc`` interface association descriptor ``minor`` the minor number assigned to this interface, if this interface is bound to a driver that uses the USB major number. If this interface does not use the USB major, this field should be unused. The driver should set this value in the probe() function of the driver, after it has been assigned a minor number from the USB core by calling usb_register_dev(). ``condition`` binding state of the interface: not bound, binding (in probe()), bound to a driver, or unbinding (in disconnect()) ``sysfs_files_created`` sysfs attributes exist ``ep_devs_created`` endpoint child pseudo-devices exist ``unregistering`` flag set when the interface is being unregistered ``needs_remote_wakeup`` flag set when the driver requires remote-wakeup capability during autosuspend. ``needs_altsetting0`` flag set when a set-interface request for altsetting 0 has been deferred. ``needs_binding`` flag set when the driver should be re-probed or unbound following a reset or suspend operation it doesn't support. ``resetting_device`` USB core reset the device, so use alt setting 0 as current; needs bandwidth alloc after reset. ``authorized`` This allows to (de)authorize individual interfaces instead a whole device in contrast to the device authorization. ``wireless_status`` if the USB device uses a receiver/emitter combo, whether the emitter is connected. ``wireless_status_work`` Used for scheduling wireless status changes from atomic context. ``dev`` driver model's view of this device ``usb_dev`` if an interface is bound to the USB major, this will point to the sysfs representation for that device. ``reset_ws`` Used for scheduling resets from atomic context.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjoubhŒ:”…”�”}”(hjoh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K»hjkubj )�”}”(hX³struct usb_interface { struct usb_host_interface *altsetting; struct usb_host_interface *cur_altsetting; unsigned num_altsetting; struct usb_interface_assoc_descriptor *intf_assoc; int minor; enum usb_interface_condition condition; unsigned sysfs_files_created:1; unsigned ep_devs_created:1; unsigned unregistering:1; unsigned needs_remote_wakeup:1; unsigned needs_altsetting0:1; unsigned needs_binding:1; unsigned resetting_device:1; unsigned authorized:1; enum usb_wireless_status wireless_status; struct work_struct wireless_status_work; struct device dev; struct device *usb_dev; struct work_struct reset_ws; };”h]”hX³struct usb_interface { struct usb_host_interface *altsetting; struct usb_host_interface *cur_altsetting; unsigned num_altsetting; struct usb_interface_assoc_descriptor *intf_assoc; int minor; enum usb_interface_condition condition; unsigned sysfs_files_created:1; unsigned ep_devs_created:1; unsigned unregistering:1; unsigned needs_remote_wakeup:1; unsigned needs_altsetting0:1; unsigned needs_binding:1; unsigned resetting_device:1; unsigned authorized:1; enum usb_wireless_status wireless_status; struct work_struct wireless_status_work; struct device dev; struct device *usb_dev; struct work_struct reset_ws; };”…”�”}”hjŒsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K½hjkubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj�h]”hŒMembers”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÓhjkubjD)�”}”(hhh]”(jI)�”}”(hŒ¾``altsetting`` array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order. ”h]”(jO)�”}”(hŒ``altsetting``”h]”jÑ)�”}”(hj¼h]”hŒ altsetting”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K»hj¶ubji)�”}”(hhh]”hë)�”}”(hŒ®array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”h]”hŒ®array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K¹hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÑh´K»hj³ubjI)�”}”(hŒ+``cur_altsetting`` the current altsetting. ”h]”(jO)�”}”(hŒ``cur_altsetting``”h]”jÑ)�”}”(hjöh]”hŒcur_altsetting”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K¼hjðubji)�”}”(hhh]”hë)�”}”(hŒthe current altsetting.”h]”hŒthe current altsetting.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j h´K¼hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j h´K¼hj³ubjI)�”}”(hŒ2``num_altsetting`` number of altsettings defined. ”h]”(jO)�”}”(hŒ``num_altsetting``”h]”jÑ)�”}”(hj/h]”hŒnum_altsetting”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K½hj)ubji)�”}”(hhh]”hë)�”}”(hŒnumber of altsettings defined.”h]”hŒnumber of altsettings defined.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jDh´K½hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jDh´K½hj³ubjI)�”}”(hŒ0``intf_assoc`` interface association descriptor ”h]”(jO)�”}”(hŒ``intf_assoc``”h]”jÑ)�”}”(hjhh]”hŒ intf_assoc”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K¾hjbubji)�”}”(hhh]”hë)�”}”(hŒ interface association descriptor”h]”hŒ interface association descriptor”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j}h´K¾hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j}h´K¾hj³ubjI)�”}”(hXm``minor`` the minor number assigned to this interface, if this interface is bound to a driver that uses the USB major number. If this interface does not use the USB major, this field should be unused. The driver should set this value in the probe() function of the driver, after it has been assigned a minor number from the USB core by calling usb_register_dev(). ”h]”(jO)�”}”(hŒ ``minor``”h]”jÑ)�”}”(hj¡h]”hŒminor”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÄhj›ubji)�”}”(hhh]”hë)�”}”(hXbthe minor number assigned to this interface, if this interface is bound to a driver that uses the USB major number. If this interface does not use the USB major, this field should be unused. The driver should set this value in the probe() function of the driver, after it has been assigned a minor number from the USB core by calling usb_register_dev().”h]”hXbthe minor number assigned to this interface, if this interface is bound to a driver that uses the USB major number. If this interface does not use the USB major, this field should be unused. The driver should set this value in the probe() function of the driver, after it has been assigned a minor number from the USB core by calling usb_register_dev().”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K¿hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¶h´KÄhj³ubjI)�”}”(hŒ�``condition`` binding state of the interface: not bound, binding (in probe()), bound to a driver, or unbinding (in disconnect()) ”h]”(jO)�”}”(hŒ ``condition``”h]”jÑ)�”}”(hjÛh]”hŒ condition”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÆhjÕubji)�”}”(hhh]”hë)�”}”(hŒrbinding state of the interface: not bound, binding (in probe()), bound to a driver, or unbinding (in disconnect())”h]”hŒrbinding state of the interface: not bound, binding (in probe()), bound to a driver, or unbinding (in disconnect())”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÅhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jðh´KÆhj³ubjI)�”}”(hŒ/``sysfs_files_created`` sysfs attributes exist ”h]”(jO)�”}”(hŒ``sysfs_files_created``”h]”jÑ)�”}”(hjh]”hŒsysfs_files_created”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÇhjubji)�”}”(hhh]”hë)�”}”(hŒsysfs attributes exist”h]”hŒsysfs attributes exist”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j*h´KÇhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j*h´KÇhj³ubjI)�”}”(hŒ8``ep_devs_created`` endpoint child pseudo-devices exist ”h]”(jO)�”}”(hŒ``ep_devs_created``”h]”jÑ)�”}”(hjNh]”hŒep_devs_created”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÈhjHubji)�”}”(hhh]”hë)�”}”(hŒ#endpoint child pseudo-devices exist”h]”hŒ#endpoint child pseudo-devices exist”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jch´KÈhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jch´KÈhj³ubjI)�”}”(hŒD``unregistering`` flag set when the interface is being unregistered ”h]”(jO)�”}”(hŒ``unregistering``”h]”jÑ)�”}”(hj‡h]”hŒ unregistering”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÉhj�ubji)�”}”(hhh]”hë)�”}”(hŒ1flag set when the interface is being unregistered”h]”hŒ1flag set when the interface is being unregistered”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jœh´KÉhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jœh´KÉhj³ubjI)�”}”(hŒg``needs_remote_wakeup`` flag set when the driver requires remote-wakeup capability during autosuspend. ”h]”(jO)�”}”(hŒ``needs_remote_wakeup``”h]”jÑ)�”}”(hjÀh]”hŒneeds_remote_wakeup”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KËhjºubji)�”}”(hhh]”hë)�”}”(hŒNflag set when the driver requires remote-wakeup capability during autosuspend.”h]”hŒNflag set when the driver requires remote-wakeup capability during autosuspend.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÊhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÕh´KËhj³ubjI)�”}”(hŒ```needs_altsetting0`` flag set when a set-interface request for altsetting 0 has been deferred. ”h]”(jO)�”}”(hŒ``needs_altsetting0``”h]”jÑ)�”}”(hjúh]”hŒneeds_altsetting0”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÍhjôubji)�”}”(hhh]”hë)�”}”(hŒIflag set when a set-interface request for altsetting 0 has been deferred.”h]”hŒIflag set when a set-interface request for altsetting 0 has been deferred.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÌhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´KÍhj³ubjI)�”}”(hŒ…``needs_binding`` flag set when the driver should be re-probed or unbound following a reset or suspend operation it doesn't support. ”h]”(jO)�”}”(hŒ``needs_binding``”h]”jÑ)�”}”(hj4h]”hŒ needs_binding”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÏhj.ubji)�”}”(hhh]”hë)�”}”(hŒrflag set when the driver should be re-probed or unbound following a reset or suspend operation it doesn't support.”h]”hŒtflag set when the driver should be re-probed or unbound following a reset or suspend operation it doesn’t support.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÎhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jIh´KÏhj³ubjI)�”}”(hŒt``resetting_device`` USB core reset the device, so use alt setting 0 as current; needs bandwidth alloc after reset. ”h]”(jO)�”}”(hŒ``resetting_device``”h]”jÑ)�”}”(hjnh]”hŒresetting_device”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÛhjhubji)�”}”(hhh]”hë)�”}”(hŒ^USB core reset the device, so use alt setting 0 as current; needs bandwidth alloc after reset.”h]”hŒ^USB core reset the device, so use alt setting 0 as current; needs bandwidth alloc after reset.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÚhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jƒh´KÛhj³ubjI)�”}”(hŒ‚``authorized`` This allows to (de)authorize individual interfaces instead a whole device in contrast to the device authorization. ”h]”(jO)�”}”(hŒ``authorized``”h]”jÑ)�”}”(hj¨h]”hŒ authorized”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÑhj¢ubji)�”}”(hhh]”hë)�”}”(hŒrThis allows to (de)authorize individual interfaces instead a whole device in contrast to the device authorization.”h]”hŒrThis allows to (de)authorize individual interfaces instead a whole device in contrast to the device authorization.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÐhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j½h´KÑhj³ubjI)�”}”(hŒg``wireless_status`` if the USB device uses a receiver/emitter combo, whether the emitter is connected. ”h]”(jO)�”}”(hŒ``wireless_status``”h]”jÑ)�”}”(hjâh]”hŒwireless_status”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÓhjÜubji)�”}”(hhh]”hë)�”}”(hŒRif the USB device uses a receiver/emitter combo, whether the emitter is connected.”h]”hŒRif the USB device uses a receiver/emitter combo, whether the emitter is connected.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÒhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j÷h´KÓhj³ubjI)�”}”(hŒZ``wireless_status_work`` Used for scheduling wireless status changes from atomic context. ”h]”(jO)�”}”(hŒ``wireless_status_work``”h]”jÑ)�”}”(hj h]”hŒwireless_status_work”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÕhj ubji)�”}”(hhh]”hë)�”}”(hŒ@Used for scheduling wireless status changes from atomic context.”h]”hŒ@Used for scheduling wireless status changes from atomic context.”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÔhj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j1 h´KÕhj³ubjI)�”}”(hŒ+``dev`` driver model's view of this device ”h]”(jO)�”}”(hŒ``dev``”h]”jÑ)�”}”(hjV h]”hŒdev”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÖhjP ubji)�”}”(hhh]”hë)�”}”(hŒ"driver model's view of this device”h]”hŒ$driver model’s view of this device”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jk h´KÖhjl ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjP ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jk h´KÖhj³ubjI)�”}”(hŒt``usb_dev`` if an interface is bound to the USB major, this will point to the sysfs representation for that device. ”h]”(jO)�”}”(hŒ ``usb_dev``”h]”jÑ)�”}”(hj� h]”hŒusb_dev”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KØhj‰ ubji)�”}”(hhh]”hë)�”}”(hŒgif an interface is bound to the USB major, this will point to the sysfs representation for that device.”h]”hŒgif an interface is bound to the USB major, this will point to the sysfs representation for that device.”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´K×hj¥ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‰ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¤ h´KØhj³ubjI)�”}”(hŒ<``reset_ws`` Used for scheduling resets from atomic context.”h]”(jO)�”}”(hŒ ``reset_ws``”h]”jÑ)�”}”(hjÉ h]”hŒreset_ws”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÇ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KØhjà ubji)�”}”(hhh]”hë)�”}”(hŒ/Used for scheduling resets from atomic context.”h]”hŒ/Used for scheduling resets from atomic context.”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÙhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÞ h´KØhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj !h]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj !ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÜhjgh²hubhë)�”}”(hXíUSB device drivers attach to interfaces on a physical device. Each interface encapsulates a single high level function, such as feeding an audio stream to a speaker or reporting a change in a volume control. Many USB devices only have one interface. The protocol used to talk to an interface's endpoints can be defined in a usb "class" specification, or by a product's vendor. The (default) control endpoint is part of every interface, but is never listed among the interface's descriptors.”h]”hX÷USB device drivers attach to interfaces on a physical device. Each interface encapsulates a single high level function, such as feeding an audio stream to a speaker or reporting a change in a volume control. Many USB devices only have one interface. The protocol used to talk to an interface’s endpoints can be defined in a usb “classâ€� specification, or by a product’s vendor. The (default) control endpoint is part of every interface, but is never listed among the interface’s descriptors.”…”�”}”(hj"!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´KÛhjgh²hubhë)�”}”(hŒŒThe driver that is bound to the interface can use standard driver model calls such as dev_get_drvdata() on the dev member of this structure.”h]”hŒŒThe driver that is bound to the interface can use standard driver model calls such as dev_get_drvdata() on the dev member of this structure.”…”�”}”(hj1!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Kãhjgh²hubhë)�”}”(hX½Each interface may have alternate settings. The initial configuration of a device sets altsetting 0, but the device driver can change that setting using usb_set_interface(). Alternate settings are often used to control the use of periodic endpoints, such as by having different endpoints use different amounts of reserved USB bandwidth. All standards-conformant USB devices that use isochronous endpoints will use them in non-default settings.”h]”hX½Each interface may have alternate settings. The initial configuration of a device sets altsetting 0, but the device driver can change that setting using usb_set_interface(). Alternate settings are often used to control the use of periodic endpoints, such as by having different endpoints use different amounts of reserved USB bandwidth. All standards-conformant USB devices that use isochronous endpoints will use them in non-default settings.”…”�”}”(hj@!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Kæhjgh²hubhë)�”}”(hXaThe USB specification says that alternate setting numbers must run from 0 to one less than the total number of alternate settings. But some devices manage to mess this up, and the structures aren't necessarily stored in numerical order anyhow. Use usb_altnum_to_altsetting() to look up an alternate setting in the altsetting array based on its number.”h]”hXcThe USB specification says that alternate setting numbers must run from 0 to one less than the total number of alternate settings. But some devices manage to mess this up, and the structures aren’t necessarily stored in numerical order anyhow. Use usb_altnum_to_altsetting() to look up an alternate setting in the altsetting array based on its number.”…”�”}”(hjO!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Kîhjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_set_intfdata (C function)”Œc.usb_set_intfdata”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ>void usb_set_intfdata (struct usb_interface *intf, void *data)”h]”j+)�”}”(hŒ=void usb_set_intfdata(struct usb_interface *intf, void *data)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjw!h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjs!h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†!h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjs!h²hh³j…!h´Mubj„)�”}”(hŒusb_set_intfdata”h]”jŠ)�”}”(hŒusb_set_intfdata”h]”hŒusb_set_intfdata”…”�”}”(hj˜!h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”!ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjs!h²hh³j…!h´Mubj¥)�”}”(hŒ((struct usb_interface *intf, void *data)”h]”(j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj´!h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj°!ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ!h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°!ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjÒ!h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÏ!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÔ!Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjš!sbŒc.usb_set_intfdata”†”asbuh1hhj°!ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò!h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°!ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj°!ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj°!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬!ubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj&"h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj""ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4"h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj""ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjB"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj""ubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjO"h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj""ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬!ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjs!h²hh³j…!h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjo!h²hh³j…!h´Mubah}”(h]”jj!ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j…!h´Mhjl!h²hubjü)�”}”(hhh]”hë)�”}”(hŒ0associate driver-specific data with an interface”h]”hŒ0associate driver-specific data with an interface”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjv"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjl!h²hh³j…!h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj‘"jj‘"j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXq**Parameters** ``struct usb_interface *intf`` USB interface ``void *data`` driver data **Description** Drivers can use this function in their probe() callbacks to associate driver-specific data with an interface. Note that there is generally no need to clear the driver-data pointer even if some drivers do so for historical or implementation-specific reasons.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj›"h]”hŒ Parameters”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj™"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M!hj•"ubjD)�”}”(hhh]”(jI)�”}”(hŒ-``struct usb_interface *intf`` USB interface ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjº"h]”hŒstruct usb_interface *intf”…”�”}”(hj¼"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¸"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj´"ubji)�”}”(hhh]”hë)�”}”(hŒ USB interface”h]”hŒ USB interface”…”�”•}”(hjÓ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÏ"h´MhjÐ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj´"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÏ"h´Mhj±"ubjI)�”}”(hŒ``void *data`` driver data ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hjó"h]”hŒ void *data”…”�”}”(hjõ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjñ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjí"ubji)�”}”(hhh]”hë)�”}”(hŒ driver data”h]”hŒ driver data”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j#h´Mhj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjí"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j#h´Mhj±"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj•"ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj.#h]”hŒ Description”…”�”}”(hj0#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj,#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M!hj•"ubhë)�”}”(hŒmDrivers can use this function in their probe() callbacks to associate driver-specific data with an interface.”h]”hŒmDrivers can use this function in their probe() callbacks to associate driver-specific data with an interface.”…”�”}”(hjD#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hj•"ubhë)�”}”(hŒ“Note that there is generally no need to clear the driver-data pointer even if some drivers do so for historical or implementation-specific reasons.”h]”hŒ“Note that there is generally no need to clear the driver-data pointer even if some drivers do so for historical or implementation-specific reasons.”…”�”}”(hjS#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M#hj•"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_interface_cache (C struct)”Œc.usb_interface_cache”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_interface_cache”h]”j+)�”}”(hŒstruct usb_interface_cache”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj‚#h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj~#h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M)ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj~#h²hh³j�#h´M)ubj„)�”}”(hŒusb_interface_cache”h]”jŠ)�”}”(hj|#h]”hŒusb_interface_cache”…”�”}”(hj¢#h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjž#ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj~#h²hh³j�#h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjz#h²hh³j�#h´M)ubah}”(h]”ju#ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�#h´M)hjw#h²hubjü)�”}”(hhh]”hë)�”}”(hŒ.long-term representation of a device interface”h]”hŒ.long-term representation of a device interface”…”�”}”(hjÄ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MUhjÁ#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjw#h²hh³j�#h´M)ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjjÜ#jjÜ#j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXÎ**Definition**:: struct usb_interface_cache { unsigned num_altsetting; struct kref ref; struct usb_host_interface altsetting[]; }; **Members** ``num_altsetting`` number of altsettings defined. ``ref`` reference counter. ``altsetting`` variable-length array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjè#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjä#ubhŒ:”…”�”}”(hjä#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MYhjà#ubj )�”}”(hŒ}struct usb_interface_cache { unsigned num_altsetting; struct kref ref; struct usb_host_interface altsetting[]; };”h]”hŒ}struct usb_interface_cache { unsigned num_altsetting; struct kref ref; struct usb_host_interface altsetting[]; };”…”�”}”hj$sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M[hjà#ubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj$h]”hŒMembers”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mahjà#ubjD)�”}”(hhh]”(jI)�”}”(hŒ2``num_altsetting`` number of altsettings defined. ”h]”(jO)�”}”(hŒ``num_altsetting``”h]”jÑ)�”}”(hj1$h]”hŒnum_altsetting”…”�”}”(hj3$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj/$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MWhj+$ubji)�”}”(hhh]”hë)�”}”(hŒnumber of altsettings defined.”h]”hŒnumber of altsettings defined.”…”�”}”(hjJ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jF$h´MWhjG$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj+$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jF$h´MWhj($ubjI)�”}”(hŒ``ref`` reference counter. ”h]”(jO)�”}”(hŒ``ref``”h]”jÑ)�”}”(hjj$h]”hŒref”…”�”}”(hjl$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjh$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MXhjd$ubji)�”}”(hhh]”hë)�”}”(hŒreference counter.”h]”hŒreference counter.”…”�”}”(hjƒ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j$h´MXhj€$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjd$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j$h´MXhj($ubjI)�”}”(hŒÍ``altsetting`` variable-length array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”h]”(jO)�”}”(hŒ``altsetting``”h]”jÑ)�”}”(hj£$h]”hŒ altsetting”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¡$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MZhj�$ubji)�”}”(hhh]”hë)�”}”(hŒ¾variable-length array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”h]”hŒ¾variable-length array of interface structures, one for each alternate setting that may be selected. Each one includes a set of endpoint configurations. They will be in no particular order.”…”�”}”(hj¼$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MYhj¹$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¸$h´MZhj($ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjà#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjæ$h]”hŒ Description”…”�”}”(hjè$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjä$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M^hjgh²hubhë)�”}”(hXUThese structures persist for the lifetime of a usb_device, unlike struct usb_interface (which persists only as long as its configuration is installed). The altsetting arrays can be accessed through these structures at any time, permitting comparison of configurations and providing support for the /sys/kernel/debug/usb/devices pseudo-file.”h]”hXUThese structures persist for the lifetime of a usb_device, unlike struct usb_interface (which persists only as long as its configuration is installed). The altsetting arrays can be accessed through these structures at any time, permitting comparison of configurations and providing support for the /sys/kernel/debug/usb/devices pseudo-file.”…”�”}”(hjü$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M[hjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_host_config (C struct)”Œc.usb_host_config”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_host_config”h]”j+)�”}”(hŒstruct usb_host_config”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj$%h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj %h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MdubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj %h²hh³j1%h´Mdubj„)�”}”(hŒusb_host_config”h]”jŠ)�”}”(hj%h]”hŒusb_host_config”…”�”}”(hjD%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj@%ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj %h²hh³j1%h´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj%h²hh³j1%h´Mdubah}”(h]”j%ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j1%h´Mdhj%h²hubjü)�”}”(hhh]”hë)�”}”(hŒ*representation of a device's configuration”h]”hŒ,representation of a device’s configuration”…”�”}”(hjf%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mphjc%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj%h²hh³j1%h´Mdubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjj~%jj~%j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXÕ**Definition**:: struct usb_host_config { struct usb_config_descriptor desc; char *string; struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; struct usb_interface *interface[USB_MAXINTERFACES]; struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; unsigned char *extra; int extralen; }; **Members** ``desc`` the device's configuration descriptor. ``string`` pointer to the cached version of the iConfiguration string, if present for this configuration. ``intf_assoc`` list of any interface association descriptors in this config ``interface`` array of pointers to usb_interface structures, one for each interface in the configuration. The number of interfaces is stored in desc.bNumInterfaces. These pointers are valid only while the configuration is active. ``intf_cache`` array of pointers to usb_interface_cache structures, one for each interface in the configuration. These structures exist for the entire life of the device. ``extra`` pointer to buffer containing all extra descriptors associated with this configuration (those preceding the first interface descriptor). ``extralen`` length of the extra descriptors buffer.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjŠ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj†%ubhŒ:”…”�”}”(hj†%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mthj‚%ubj )�”}”(hX>struct usb_host_config { struct usb_config_descriptor desc; char *string; struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; struct usb_interface *interface[USB_MAXINTERFACES]; struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; unsigned char *extra; int extralen; };”h]”hX>struct usb_host_config { struct usb_config_descriptor desc; char *string; struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; struct usb_interface *interface[USB_MAXINTERFACES]; struct usb_interface_cache *intf_cache[USB_MAXINTERFACES]; unsigned char *extra; int extralen; };”…”�”}”hj£%sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mvhj‚%ubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj´%h]”hŒMembers”…”�”}”(hj¶%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj²%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M€hj‚%ubjD)�”}”(hhh]”(jI)�”}”(hŒ0``desc`` the device's configuration descriptor. ”h]”(jO)�”}”(hŒ``desc``”h]”jÑ)�”}”(hjÓ%h]”hŒdesc”…”�”}”(hjÕ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÑ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MrhjÍ%ubji)�”}”(hhh]”hë)�”}”(hŒ&the device's configuration descriptor.”h]”hŒ(the device’s configuration descriptor.”…”�”}”(hjì%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jè%h´Mrhjé%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÍ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jè%h´MrhjÊ%ubjI)�”}”(hŒj``string`` pointer to the cached version of the iConfiguration string, if present for this configuration. ”h]”(jO)�”}”(hŒ ``string``”h]”jÑ)�”}”(hj &h]”hŒstring”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mthj&ubji)�”}”(hhh]”hë)�”}”(hŒ^pointer to the cached version of the iConfiguration string, if present for this configuration.”h]”hŒ^pointer to the cached version of the iConfiguration string, if present for this configuration.”…”�”}”(hj%&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mshj"&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j!&h´MthjÊ%ubjI)�”}”(hŒL``intf_assoc`` list of any interface association descriptors in this config ”h]”(jO)�”}”(hŒ``intf_assoc``”h]”jÑ)�”}”(hjF&h]”hŒ intf_assoc”…”�”}”(hjH&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjD&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Muhj@&ubji)�”}”(hhh]”hë)�”}”(hŒhub_delay + wHubDelay + tTPTransmissionDelay (40ns) Will be used as wValue for SetIsochDelay requests. ``use_generic_driver`` ask driver core to reprobe using the generic driver.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj2(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj.(ubhŒ:”…”�”}”(hj.(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MIhj*(ubj )�”}”(hX©struct usb_device { int devnum; char devpath[16]; u32 route; enum usb_device_state state; enum usb_device_speed speed; unsigned int rx_lanes; unsigned int tx_lanes; enum usb_ssp_rate ssp_rate; struct usb_tt *tt; int ttport; unsigned int toggle[2]; struct usb_device *parent; struct usb_bus *bus; struct usb_host_endpoint ep0; struct device dev; struct usb_device_descriptor descriptor; struct usb_host_bos *bos; struct usb_host_config *config; struct usb_host_config *actconfig; struct usb_host_endpoint *ep_in[16]; struct usb_host_endpoint *ep_out[16]; char **rawdescriptors; unsigned short bus_mA; u8 portnum; u8 level; u8 devaddr; unsigned can_submit:1; unsigned persist_enabled:1; unsigned reset_in_progress:1; unsigned have_langid:1; unsigned authorized:1; unsigned authenticated:1; unsigned lpm_capable:1; unsigned lpm_devinit_allow:1; unsigned usb2_hw_lpm_capable:1; unsigned usb2_hw_lpm_besl_capable:1; unsigned usb2_hw_lpm_enabled:1; unsigned usb2_hw_lpm_allowed:1; unsigned usb3_lpm_u1_enabled:1; unsigned usb3_lpm_u2_enabled:1; int string_langid; char *product; char *manufacturer; char *serial; struct list_head filelist; int maxchild; u32 quirks; atomic_t urbnum; unsigned long active_duration; unsigned long connect_time; unsigned do_remote_wakeup:1; unsigned reset_resume:1; unsigned port_is_suspended:1; unsigned offload_pm_locked:1; int offload_usage; spinlock_t offload_lock; enum usb_link_tunnel_mode tunnel_mode; struct device_link *usb4_link; int slot_id; struct usb2_lpm_parameters l1_params; struct usb3_lpm_parameters u1_params; struct usb3_lpm_parameters u2_params; unsigned lpm_disable_count; u16 hub_delay; unsigned use_generic_driver:1; };”h]”hX©struct usb_device { int devnum; char devpath[16]; u32 route; enum usb_device_state state; enum usb_device_speed speed; unsigned int rx_lanes; unsigned int tx_lanes; enum usb_ssp_rate ssp_rate; struct usb_tt *tt; int ttport; unsigned int toggle[2]; struct usb_device *parent; struct usb_bus *bus; struct usb_host_endpoint ep0; struct device dev; struct usb_device_descriptor descriptor; struct usb_host_bos *bos; struct usb_host_config *config; struct usb_host_config *actconfig; struct usb_host_endpoint *ep_in[16]; struct usb_host_endpoint *ep_out[16]; char **rawdescriptors; unsigned short bus_mA; u8 portnum; u8 level; u8 devaddr; unsigned can_submit:1; unsigned persist_enabled:1; unsigned reset_in_progress:1; unsigned have_langid:1; unsigned authorized:1; unsigned authenticated:1; unsigned lpm_capable:1; unsigned lpm_devinit_allow:1; unsigned usb2_hw_lpm_capable:1; unsigned usb2_hw_lpm_besl_capable:1; unsigned usb2_hw_lpm_enabled:1; unsigned usb2_hw_lpm_allowed:1; unsigned usb3_lpm_u1_enabled:1; unsigned usb3_lpm_u2_enabled:1; int string_langid; char *product; char *manufacturer; char *serial; struct list_head filelist; int maxchild; u32 quirks; atomic_t urbnum; unsigned long active_duration; unsigned long connect_time; unsigned do_remote_wakeup:1; unsigned reset_resume:1; unsigned port_is_suspended:1; unsigned offload_pm_locked:1; int offload_usage; spinlock_t offload_lock; enum usb_link_tunnel_mode tunnel_mode; struct device_link *usb4_link; int slot_id; struct usb2_lpm_parameters l1_params; struct usb3_lpm_parameters u1_params; struct usb3_lpm_parameters u2_params; unsigned lpm_disable_count; u16 hub_delay; unsigned use_generic_driver:1; };”…”�”}”hjK(sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MKhj*(ubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj\(h]”hŒMembers”…”�”}”(hj^(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjZ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hj*(ubjD)�”}”(hhh]”(jI)�”}”(hŒ/``devnum`` device number; address on a USB bus ”h]”(jO)�”}”(hŒ ``devnum``”h]”jÑ)�”}”(hj{(h]”hŒdevnum”…”�”}”(hj}(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjy(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MGhju(ubji)�”}”(hhh]”hë)�”}”(hŒ#device number; address on a USB bus”h]”hŒ#device number; address on a USB bus”…”�”}”(hj”(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�(h´MGhj‘(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhju(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�(h´MGhjr(ubjI)�”}”(hŒC``devpath`` device ID string for use in messages (e.g., /port/...) ”h]”(jO)�”}”(hŒ ``devpath``”h]”jÑ)�”}”(hj´(h]”hŒdevpath”…”�”}”(hj¶(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj²(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MHhj®(ubji)�”}”(hhh]”hë)�”}”(hŒ6device ID string for use in messages (e.g., /port/...)”h]”hŒ6device ID string for use in messages (e.g., /port/...)”…”�”}”(hjÍ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÉ(h´MHhjÊ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj®(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÉ(h´MHhjr(ubjI)�”}”(hŒ5``route`` tree topology hex string for use with xHCI ”h]”(jO)�”}”(hŒ ``route``”h]”jÑ)�”}”(hjí(h]”hŒroute”…”�”}”(hjï(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjë(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MIhjç(ubji)�”}”(hhh]”hë)�”}”(hŒ*tree topology hex string for use with xHCI”h]”hŒ*tree topology hex string for use with xHCI”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j)h´MIhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjç(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j)h´MIhjr(ubjI)�”}”(hŒ7``state`` device state: configured, not attached, etc. ”h]”(jO)�”}”(hŒ ``state``”h]”jÑ)�”}”(hj&)h]”hŒstate”…”�”}”(hj()h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj$)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MJhj )ubji)�”}”(hhh]”hë)�”}”(hŒ,device state: configured, not attached, etc.”h]”hŒ,device state: configured, not attached, etc.”…”�”}”(hj?)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j;)h´MJhj<)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj )ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j;)h´MJhjr(ubjI)�”}”(hŒ1``speed`` device speed: high/full/low (or error) ”h]”(jO)�”}”(hŒ ``speed``”h]”jÑ)�”}”(hj_)h]”hŒspeed”…”�”}”(hja)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj])ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MKhjY)ubji)�”}”(hhh]”hë)�”}”(hŒ&device speed: high/full/low (or error)”h]”hŒ&device speed: high/full/low (or error)”…”�”}”(hjx)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jt)h´MKhju)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjY)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jt)h´MKhjr(ubjI)�”}”(hŒG``rx_lanes`` number of rx lanes in use, USB 3.2 adds dual-lane support ”h]”(jO)�”}”(hŒ ``rx_lanes``”h]”jÑ)�”}”(hj˜)h]”hŒrx_lanes”…”�”}”(hjš)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj–)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MLhj’)ubji)�”}”(hhh]”hë)�”}”(hŒ9number of rx lanes in use, USB 3.2 adds dual-lane support”h]”hŒ9number of rx lanes in use, USB 3.2 adds dual-lane support”…”�”}”(hj±)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j­)h´MLhj®)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj’)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j­)h´MLhjr(ubjI)�”}”(hŒG``tx_lanes`` number of tx lanes in use, USB 3.2 adds dual-lane support ”h]”(jO)�”}”(hŒ ``tx_lanes``”h]”jÑ)�”}”(hjÑ)h]”hŒtx_lanes”…”�”}”(hjÓ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÏ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MMhjË)ubji)�”}”(hhh]”hë)�”}”(hŒ9number of tx lanes in use, USB 3.2 adds dual-lane support”h]”hŒ9number of tx lanes in use, USB 3.2 adds dual-lane support”…”�”}”(hjê)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jæ)h´MMhjç)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjË)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jæ)h´MMhjr(ubjI)�”}”(hŒ?``ssp_rate`` SuperSpeed Plus phy signaling rate and lane count ”h]”(jO)�”}”(hŒ ``ssp_rate``”h]”jÑ)�”}”(hj *h]”hŒssp_rate”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MNhj*ubji)�”}”(hhh]”hë)�”}”(hŒ1SuperSpeed Plus phy signaling rate and lane count”h]”hŒ1SuperSpeed Plus phy signaling rate and lane count”…”�”}”(hj#*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j*h´MNhj *ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j*h´MNhjr(ubjI)�”}”(hŒP``tt`` Transaction Translator info; used with low/full speed dev, highspeed hub ”h]”(jO)�”}”(hŒ``tt``”h]”jÑ)�”}”(hjC*h]”hŒtt”…”�”}”(hjE*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjA*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MOhj=*ubji)�”}”(hhh]”hë)�”}”(hŒHTransaction Translator info; used with low/full speed dev, highspeed hub”h]”hŒHTransaction Translator info; used with low/full speed dev, highspeed hub”…”�”}”(hj\*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jX*h´MOhjY*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj=*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jX*h´MOhjr(ubjI)�”}”(hŒ&``ttport`` device port on that tt hub ”h]”(jO)�”}”(hŒ ``ttport``”h]”jÑ)�”}”(hj|*h]”hŒttport”…”�”}”(hj~*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjz*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MPhjv*ubji)�”}”(hhh]”hë)�”}”(hŒdevice port on that tt hub”h]”hŒdevice port on that tt hub”…”�”}”(hj•*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‘*h´MPhj’*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjv*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‘*h´MPhjr(ubjI)�”}”(hŒK``toggle`` one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints ”h]”(jO)�”}”(hŒ ``toggle``”h]”jÑ)�”}”(hjµ*h]”hŒtoggle”…”�”}”(hj·*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MQhj¯*ubji)�”}”(hhh]”hë)�”}”(hŒ?one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints”h]”hŒ?one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints”…”�”}”(hjÎ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÊ*h´MQhjË*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¯*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÊ*h´MQhjr(ubjI)�”}”(hŒ*``parent`` our hub, unless we're the root ”h]”(jO)�”}”(hŒ ``parent``”h]”jÑ)�”}”(hjî*h]”hŒparent”…”�”}”(hjð*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjì*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MRhjè*ubji)�”}”(hhh]”hë)�”}”(hŒour hub, unless we're the root”h]”hŒ our hub, unless we’re the root”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j+h´MRhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjè*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j+h´MRhjr(ubjI)�”}”(hŒ``bus`` bus we're part of ”h]”(jO)�”}”(hŒ``bus``”h]”jÑ)�”}”(hj'+h]”hŒbus”…”�”}”(hj)+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj%+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MShj!+ubji)�”}”(hhh]”hë)�”}”(hŒbus we're part of”h]”hŒbus we’re part of”…”�”}”(hj@+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j<+h´MShj=+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj!+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j<+h´MShjr(ubjI)�”}”(hŒ/``ep0`` endpoint 0 data (default control pipe) ”h]”(jO)�”}”(hŒ``ep0``”h]”jÑ)�”}”(hj`+h]”hŒep0”…”�”}”(hjb+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj^+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MThjZ+ubji)�”}”(hhh]”hë)�”}”(hŒ&endpoint 0 data (default control pipe)”h]”hŒ&endpoint 0 data (default control pipe)”…”�”}”(hjy+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ju+h´MThjv+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjZ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ju+h´MThjr(ubjI)�”}”(hŒ!``dev`` generic device interface ”h]”(jO)�”}”(hŒ``dev``”h]”jÑ)�”}”(hj™+h]”hŒdev”…”�”}”(hj›+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj—+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MUhj“+ubji)�”}”(hhh]”hë)�”}”(hŒgeneric device interface”h]”hŒgeneric device interface”…”�”}”(hj²+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j®+h´MUhj¯+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj“+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j®+h´MUhjr(ubjI)�”}”(hŒ%``descriptor`` USB device descriptor ”h]”(jO)�”}”(hŒ``descriptor``”h]”jÑ)�”}”(hjÒ+h]”hŒ descriptor”…”�”}”(hjÔ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÐ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MVhjÌ+ubji)�”}”(hhh]”hë)�”}”(hŒUSB device descriptor”h]”hŒUSB device descriptor”…”�”}”(hjë+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jç+h´MVhjè+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÌ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jç+h´MVhjr(ubjI)�”}”(hŒ&``bos`` USB device BOS descriptor set ”h]”(jO)�”}”(hŒ``bos``”h]”jÑ)�”}”(hj ,h]”hŒbos”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MWhj,ubji)�”}”(hhh]”hë)�”}”(hŒUSB device BOS descriptor set”h]”hŒUSB device BOS descriptor set”…”�”}”(hj$,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j ,h´MWhj!,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j ,h´MWhjr(ubjI)�”}”(hŒ'``config`` all of the device's configs ”h]”(jO)�”}”(hŒ ``config``”h]”jÑ)�”}”(hjD,h]”hŒconfig”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjB,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MXhj>,ubji)�”}”(hhh]”hë)�”}”(hŒall of the device's configs”h]”hŒall of the device’s configs”…”�”}”(hj],h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jY,h´MXhjZ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj>,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jY,h´MXhjr(ubjI)�”}”(hŒ'``actconfig`` the active configuration ”h]”(jO)�”}”(hŒ ``actconfig``”h]”jÑ)�”}”(hj},h]”hŒ actconfig”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj{,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MYhjw,ubji)�”}”(hhh]”hë)�”}”(hŒthe active configuration”h]”hŒthe active configuration”…”�”}”(hj–,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j’,h´MYhj“,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjw,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j’,h´MYhjr(ubjI)�”}”(hŒ ``ep_in`` array of IN endpoints ”h]”(jO)�”}”(hŒ ``ep_in``”h]”jÑ)�”}”(hj¶,h]”hŒep_in”…”�”}”(hj¸,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj´,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MZhj°,ubji)�”}”(hhh]”hë)�”}”(hŒarray of IN endpoints”h]”hŒarray of IN endpoints”…”�”}”(hjÏ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jË,h´MZhjÌ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj°,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jË,h´MZhjr(ubjI)�”}”(hŒ"``ep_out`` array of OUT endpoints ”h]”(jO)�”}”(hŒ ``ep_out``”h]”jÑ)�”}”(hjï,h]”hŒep_out”…”�”}”(hjñ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjí,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M[hjé,ubji)�”}”(hhh]”hë)�”}”(hŒarray of OUT endpoints”h]”hŒarray of OUT endpoints”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j-h´M[hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjé,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j-h´M[hjr(ubjI)�”}”(hŒ3``rawdescriptors`` raw descriptors for each config ”h]”(jO)�”}”(hŒ``rawdescriptors``”h]”jÑ)�”}”(hj(-h]”hŒrawdescriptors”…”�”}”(hj*-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj&-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M\hj"-ubji)�”}”(hhh]”hë)�”}”(hŒraw descriptors for each config”h]”hŒraw descriptors for each config”…”�”}”(hjA-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j=-h´M\hj>-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj"-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j=-h´M\hjr(ubjI)�”}”(hŒ*``bus_mA`` Current available from the bus ”h]”(jO)�”}”(hŒ ``bus_mA``”h]”jÑ)�”}”(hja-h]”hŒbus_mA”…”�”}”(hjc-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj_-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M]hj[-ubji)�”}”(hhh]”hë)�”}”(hŒCurrent available from the bus”h]”hŒCurrent available from the bus”…”�”}”(hjz-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jv-h´M]hjw-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj[-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jv-h´M]hjr(ubjI)�”}”(hŒ*``portnum`` parent port number (origin 1) ”h]”(jO)�”}”(hŒ ``portnum``”h]”jÑ)�”}”(hjš-h]”hŒportnum”…”�”}”(hjœ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj˜-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M^hj”-ubji)�”}”(hhh]”hë)�”}”(hŒparent port number (origin 1)”h]”hŒparent port number (origin 1)”…”�”}”(hj³-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¯-h´M^hj°-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj”-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¯-h´M^hjr(ubjI)�”}”(hŒ&``level`` number of USB hub ancestors ”h]”(jO)�”}”(hŒ ``level``”h]”jÑ)�”}”(hjÓ-h]”hŒlevel”…”�”}”(hjÕ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÑ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M_hjÍ-ubji)�”}”(hhh]”hë)�”}”(hŒnumber of USB hub ancestors”h]”hŒnumber of USB hub ancestors”…”�”}”(hjì-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jè-h´M_hjé-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÍ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jè-h´M_hjr(ubjI)�”}”(hŒI``devaddr`` device address, XHCI: assigned by HW, others: same as devnum ”h]”(jO)�”}”(hŒ ``devaddr``”h]”jÑ)�”}”(hj .h]”hŒdevaddr”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M`hj.ubji)�”}”(hhh]”hë)�”}”(hŒ/h´Mihjr(ubjI)�”}”(hŒ/``authenticated`` Crypto authentication passed ”h]”(jO)�”}”(hŒ``authenticated``”h]”jÑ)�”}”(hjc/h]”hŒ authenticated”…”�”}”(hje/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhja/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mjhj]/ubji)�”}”(hhh]”hë)�”}”(hŒCrypto authentication passed”h]”hŒCrypto authentication passed”…”�”}”(hj|/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jx/h´Mjhjy/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj]/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jx/h´Mjhjr(ubjI)�”}”(hŒ$``lpm_capable`` device supports LPM ”h]”(jO)�”}”(hŒ``lpm_capable``”h]”jÑ)�”}”(hjœ/h]”hŒ lpm_capable”…”�”}”(hjž/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjš/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mmhj–/ubji)�”}”(hhh]”hë)�”}”(hŒdevice supports LPM”h]”hŒdevice supports LPM”…”�”}”(hjµ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j±/h´Mmhj²/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj–/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j±/h´Mmhjr(ubjI)�”}”(hŒP``lpm_devinit_allow`` Allow USB3 device initiated LPM, exit latency is in range ”h]”(jO)�”}”(hŒ``lpm_devinit_allow``”h]”jÑ)�”}”(hjÕ/h]”hŒlpm_devinit_allow”…”�”}”(hj×/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÓ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MnhjÏ/ubji)�”}”(hhh]”hë)�”}”(hŒ9Allow USB3 device initiated LPM, exit latency is in range”h]”hŒ9Allow USB3 device initiated LPM, exit latency is in range”…”�”}”(hjî/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jê/h´Mnhjë/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÏ/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jê/h´Mnhjr(ubjI)�”}”(hŒ=``usb2_hw_lpm_capable`` device can perform USB2 hardware LPM ”h]”(jO)�”}”(hŒ``usb2_hw_lpm_capable``”h]”jÑ)�”}”(hj0h]”hŒusb2_hw_lpm_capable”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mohj0ubji)�”}”(hhh]”hë)�”}”(hŒ$device can perform USB2 hardware LPM”h]”hŒ$device can perform USB2 hardware LPM”…”�”}”(hj'0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j#0h´Mohj$0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j#0h´Mohjr(ubjI)�”}”(hŒG``usb2_hw_lpm_besl_capable`` device can perform USB2 hardware BESL LPM ”h]”(jO)�”}”(hŒ``usb2_hw_lpm_besl_capable``”h]”jÑ)�”}”(hjG0h]”hŒusb2_hw_lpm_besl_capable”…”�”}”(hjI0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjE0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MphjA0ubji)�”}”(hhh]”hë)�”}”(hŒ)device can perform USB2 hardware BESL LPM”h]”hŒ)device can perform USB2 hardware BESL LPM”…”�”}”(hj`0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j\0h´Mphj]0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjA0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j\0h´Mphjr(ubjI)�”}”(hŒ5``usb2_hw_lpm_enabled`` USB2 hardware LPM is enabled ”h]”(jO)�”}”(hŒ``usb2_hw_lpm_enabled``”h]”jÑ)�”}”(hj€0h]”hŒusb2_hw_lpm_enabled”…”�”}”(hj‚0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj~0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mqhjz0ubji)�”}”(hhh]”hë)�”}”(hŒUSB2 hardware LPM is enabled”h]”hŒUSB2 hardware LPM is enabled”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j•0h´Mqhj–0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjz0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j•0h´Mqhjr(ubjI)�”}”(hŒC``usb2_hw_lpm_allowed`` Userspace allows USB 2.0 LPM to be enabled ”h]”(jO)�”}”(hŒ``usb2_hw_lpm_allowed``”h]”jÑ)�”}”(hj¹0h]”hŒusb2_hw_lpm_allowed”…”�”}”(hj»0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj·0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mrhj³0ubji)�”}”(hhh]”hë)�”}”(hŒ*Userspace allows USB 2.0 LPM to be enabled”h]”hŒ*Userspace allows USB 2.0 LPM to be enabled”…”�”}”(hjÒ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÎ0h´MrhjÏ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj³0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÎ0h´Mrhjr(ubjI)�”}”(hŒ5``usb3_lpm_u1_enabled`` USB3 hardware U1 LPM enabled ”h]”(jO)�”}”(hŒ``usb3_lpm_u1_enabled``”h]”jÑ)�”}”(hjò0h]”hŒusb3_lpm_u1_enabled”…”�”}”(hjô0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjð0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mshjì0ubji)�”}”(hhh]”hë)�”}”(hŒUSB3 hardware U1 LPM enabled”h]”hŒUSB3 hardware U1 LPM enabled”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j1h´Mshj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjì0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j1h´Mshjr(ubjI)�”}”(hŒ5``usb3_lpm_u2_enabled`` USB3 hardware U2 LPM enabled ”h]”(jO)�”}”(hŒ``usb3_lpm_u2_enabled``”h]”jÑ)�”}”(hj+1h]”hŒusb3_lpm_u2_enabled”…”�”}”(hj-1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj)1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mthj%1ubji)�”}”(hhh]”hë)�”}”(hŒUSB3 hardware U2 LPM enabled”h]”hŒUSB3 hardware U2 LPM enabled”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j@1h´MthjA1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj%1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j@1h´Mthjr(ubjI)�”}”(hŒ*``string_langid`` language ID for strings ”h]”(jO)�”}”(hŒ``string_langid``”h]”jÑ)�”}”(hjd1h]”hŒ string_langid”…”�”}”(hjf1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjb1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Muhj^1ubji)�”}”(hhh]”hë)�”}”(hŒlanguage ID for strings”h]”hŒlanguage ID for strings”…”�”}”(hj}1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jy1h´Muhjz1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj^1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jy1h´Muhjr(ubjI)�”}”(hŒ1``product`` iProduct string, if present (static) ”h]”(jO)�”}”(hŒ ``product``”h]”jÑ)�”}”(hj�1h]”hŒproduct”…”�”}”(hjŸ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj›1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mvhj—1ubji)�”}”(hhh]”hë)�”}”(hŒ$iProduct string, if present (static)”h]”hŒ$iProduct string, if present (static)”…”�”}”(hj¶1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j²1h´Mvhj³1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj—1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j²1h´Mvhjr(ubjI)�”}”(hŒ;``manufacturer`` iManufacturer string, if present (static) ”h]”(jO)�”}”(hŒ``manufacturer``”h]”jÑ)�”}”(hjÖ1h]”hŒ manufacturer”…”�”}”(hjØ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÔ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MwhjÐ1ubji)�”}”(hhh]”hë)�”}”(hŒ)iManufacturer string, if present (static)”h]”hŒ)iManufacturer string, if present (static)”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jë1h´Mwhjì1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÐ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jë1h´Mwhjr(ubjI)�”}”(hŒ5``serial`` iSerialNumber string, if present (static) ”h]”(jO)�”}”(hŒ ``serial``”h]”jÑ)�”}”(hj2h]”hŒserial”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mxhj 2ubji)�”}”(hhh]”hë)�”}”(hŒ)iSerialNumber string, if present (static)”h]”hŒ)iSerialNumber string, if present (static)”…”�”}”(hj(2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j$2h´Mxhj%2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj 2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j$2h´Mxhjr(ubjI)�”}”(hŒ6``filelist`` usbfs files that are open to this device ”h]”(jO)�”}”(hŒ ``filelist``”h]”jÑ)�”}”(hjH2h]”hŒfilelist”…”�”}”(hjJ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjF2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MyhjB2ubji)�”}”(hhh]”hë)�”}”(hŒ(usbfs files that are open to this device”h]”hŒ(usbfs files that are open to this device”…”�”}”(hja2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j]2h´Myhj^2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjB2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j]2h´Myhjr(ubjI)�”}”(hŒ$``maxchild`` number of ports if hub ”h]”(jO)�”}”(hŒ ``maxchild``”h]”jÑ)�”}”(hj�2h]”hŒmaxchild”…”�”}”(hjƒ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mzhj{2ubji)�”}”(hhh]”hë)�”}”(hŒnumber of ports if hub”h]”hŒnumber of ports if hub”…”�”}”(hjš2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j–2h´Mzhj—2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj{2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j–2h´Mzhjr(ubjI)�”}”(hŒ&``quirks`` quirks of the whole device ”h]”(jO)�”}”(hŒ ``quirks``”h]”jÑ)�”}”(hjº2h]”hŒquirks”…”�”}”(hj¼2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¸2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M{hj´2ubji)�”}”(hhh]”hë)�”}”(hŒquirks of the whole device”• h]”hŒquirks of the whole device”…”�”}”(hjÓ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÏ2h´M{hjÐ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj´2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÏ2h´M{hjr(ubjI)�”}”(hŒ9``urbnum`` number of URBs submitted for the whole device ”h]”(jO)�”}”(hŒ ``urbnum``”h]”jÑ)�”}”(hjó2h]”hŒurbnum”…”�”}”(hjõ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjñ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M|hjí2ubji)�”}”(hhh]”hë)�”}”(hŒ-number of URBs submitted for the whole device”h]”hŒ-number of URBs submitted for the whole device”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j3h´M|hj 3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjí2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j3h´M|hjr(ubjI)�”}”(hŒ7``active_duration`` total time device is not suspended ”h]”(jO)�”}”(hŒ``active_duration``”h]”jÑ)�”}”(hj,3h]”hŒactive_duration”…”�”}”(hj.3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj*3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M}hj&3ubji)�”}”(hhh]”hë)�”}”(hŒ"total time device is not suspended”h]”hŒ"total time device is not suspended”…”�”}”(hjE3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jA3h´M}hjB3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj&3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jA3h´M}hjr(ubjI)�”}”(hŒ1``connect_time`` time device was first connected ”h]”(jO)�”}”(hŒ``connect_time``”h]”jÑ)�”}”(hje3h]”hŒ connect_time”…”�”}”(hjg3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjc3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M~hj_3ubji)�”}”(hhh]”hë)�”}”(hŒtime device was first connected”h]”hŒtime device was first connected”…”�”}”(hj~3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jz3h´M~hj{3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj_3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jz3h´M~hjr(ubjI)�”}”(hŒ5``do_remote_wakeup`` remote wakeup should be enabled ”h]”(jO)�”}”(hŒ``do_remote_wakeup``”h]”jÑ)�”}”(hjž3h]”hŒdo_remote_wakeup”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjœ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj˜3ubji)�”}”(hhh]”hë)�”}”(hŒremote wakeup should be enabled”h]”hŒremote wakeup should be enabled”…”�”}”(hj·3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j³3h´Mhj´3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj˜3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j³3h´Mhjr(ubjI)�”}”(hŒ/``reset_resume`` needs reset instead of resume ”h]”(jO)�”}”(hŒ``reset_resume``”h]”jÑ)�”}”(hj×3h]”hŒ reset_resume”…”�”}”(hjÙ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÕ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M€hjÑ3ubji)�”}”(hhh]”hë)�”}”(hŒneeds reset instead of resume”h]”hŒneeds reset instead of resume”…”�”}”(hjð3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jì3h´M€hjí3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÑ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jì3h´M€hjr(ubjI)�”}”(hŒ@``port_is_suspended`` the upstream port is suspended (L2 or U3) ”h]”(jO)�”}”(hŒ``port_is_suspended``”h]”jÑ)�”}”(hj4h]”hŒport_is_suspended”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hj 4ubji)�”}”(hhh]”hë)�”}”(hŒ)the upstream port is suspended (L2 or U3)”h]”hŒ)the upstream port is suspended (L2 or U3)”…”�”}”(hj)4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j%4h´M�hj&4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj 4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j%4h´M�hjr(ubjI)�”}”(hŒL``offload_pm_locked`` prevents offload_usage changes during PM transitions. ”h]”(jO)�”}”(hŒ``offload_pm_locked``”h]”jÑ)�”}”(hjI4h]”hŒoffload_pm_locked”…”�”}”(hjK4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjG4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‚hjC4ubji)�”}”(hhh]”hë)�”}”(hŒ5prevents offload_usage changes during PM transitions.”h]”hŒ5prevents offload_usage changes during PM transitions.”…”�”}”(hjb4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j^4h´M‚hj_4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjC4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j^4h´M‚hjr(ubjI)�”}”(hŒM``offload_usage`` number of offload activities happening on this usb device. ”h]”(jO)�”}”(hŒ``offload_usage``”h]”jÑ)�”}”(hj‚4h]”hŒ offload_usage”…”�”}”(hj„4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj€4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mƒhj|4ubji)�”}”(hhh]”hë)�”}”(hŒ:number of offload activities happening on this usb device.”h]”hŒ:number of offload activities happening on this usb device.”…”�”}”(hj›4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j—4h´Mƒhj˜4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj|4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j—4h´Mƒhjr(ubjI)�”}”(hŒ>``offload_lock`` protects offload_usage and offload_pm_locked ”h]”(jO)�”}”(hŒ``offload_lock``”h]”jÑ)�”}”(hj»4h]”hŒ offload_lock”…”�”}”(hj½4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¹4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M„hjµ4ubji)�”}”(hhh]”hë)�”}”(hŒ,protects offload_usage and offload_pm_locked”h]”hŒ,protects offload_usage and offload_pm_locked”…”�”}”(hjÔ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÐ4h´M„hjÑ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjµ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÐ4h´M„hjr(ubjI)�”}”(hŒ8``tunnel_mode`` Connection native or tunneled over USB4 ”h]”(jO)�”}”(hŒ``tunnel_mode``”h]”jÑ)�”}”(hjô4h]”hŒ tunnel_mode”…”�”}”(hjö4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjò4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mkhjî4ubji)�”}”(hhh]”hë)�”}”(hŒ'Connection native or tunneled over USB4”h]”hŒ'Connection native or tunneled over USB4”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j 5h´Mkhj 5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjî4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j 5h´Mkhjr(ubjI)�”}”(hŒ5``usb4_link`` device link to the USB4 host interface ”h]”(jO)�”}”(hŒ ``usb4_link``”h]”jÑ)�”}”(hj-5h]”hŒ usb4_link”…”�”}”(hj/5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj+5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mlhj'5ubji)�”}”(hhh]”hë)�”}”(hŒ&device link to the USB4 host interface”h]”hŒ&device link to the USB4 host interface”…”�”}”(hjF5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jB5h´MlhjC5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj'5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jB5h´Mlhjr(ubjI)�”}”(hŒ%``slot_id`` Slot ID assigned by xHCI ”h]”(jO)�”}”(hŒ ``slot_id``”h]”jÑ)�”}”(hjf5h]”hŒslot_id”…”�”}”(hjh5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjd5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M…hj`5ubji)�”}”(hhh]”hë)�”}”(hŒSlot ID assigned by xHCI”h]”hŒSlot ID assigned by xHCI”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j{5h´M…hj|5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj`5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j{5h´M…hjr(ubjI)�”}”(hŒP``l1_params`` best effor service latency for USB2 L1 LPM state, and L1 timeout. ”h]”(jO)�”}”(hŒ ``l1_params``”h]”jÑ)�”}”(hjŸ5h]”hŒ l1_params”…”�”}”(hj¡5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M†hj™5ubji)�”}”(hhh]”hë)�”}”(hŒAbest effor service latency for USB2 L1 LPM state, and L1 timeout.”h]”hŒAbest effor service latency for USB2 L1 LPM state, and L1 timeout.”…”�”}”(hj¸5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j´5h´M†hjµ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj™5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j´5h´M†hjr(ubjI)�”}”(hŒO``u1_params`` exit latencies for USB3 U1 LPM state, and hub-initiated timeout. ”h]”(jO)�”}”(hŒ ``u1_params``”h]”jÑ)�”}”(hjØ5h]”hŒ u1_params”…”�”}”(hjÚ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÖ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‡hjÒ5ubji)�”}”(hhh]”hë)�”}”(hŒ@exit latencies for USB3 U1 LPM state, and hub-initiated timeout.”h]”hŒ@exit latencies for USB3 U1 LPM state, and hub-initiated timeout.”…”�”}”(hjñ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jí5h´M‡hjî5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÒ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jí5h´M‡hjr(ubjI)�”}”(hŒO``u2_params`` exit latencies for USB3 U2 LPM state, and hub-initiated timeout. ”h]”(jO)�”}”(hŒ ``u2_params``”h]”jÑ)�”}”(hj6h]”hŒ u2_params”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mˆhj 6ubji)�”}”(hhh]”hë)�”}”(hŒ@exit latencies for USB3 U2 LPM state, and hub-initiated timeout.”h]”hŒ@exit latencies for USB3 U2 LPM state, and hub-initiated timeout.”…”�”}”(hj*6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j&6h´Mˆhj'6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj 6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j&6h´Mˆhjr(ubjI)�”}”(hX$``lpm_disable_count`` Ref count used by usb_disable_lpm() and usb_enable_lpm() to keep track of the number of functions that require USB 3.0 Link Power Management to be disabled for this usb_device. This count should only be manipulated by those functions, with the bandwidth_mutex is held. ”h]”(jO)�”}”(hŒ``lpm_disable_count``”h]”jÑ)�”}”(hjJ6h]”hŒlpm_disable_count”…”�”}”(hjL6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjH6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MŒhjD6ubji)�”}”(hhh]”hë)�”}”(hX Ref count used by usb_disable_lpm() and usb_enable_lpm() to keep track of the number of functions that require USB 3.0 Link Power Management to be disabled for this usb_device. This count should only be manipulated by those functions, with the bandwidth_mutex is held.”h]”hX Ref count used by usb_disable_lpm() and usb_enable_lpm() to keep track of the number of functions that require USB 3.0 Link Power Management to be disabled for this usb_device. This count should only be manipulated by those functions, with the bandwidth_mutex is held.”…”�”}”(hjc6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‰hj`6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjD6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j_6h´MŒhjr(ubjI)�”}”(hŒ™``hub_delay`` cached value consisting of: parent->hub_delay + wHubDelay + tTPTransmissionDelay (40ns) Will be used as wValue for SetIsochDelay requests. ”h]”(jO)�”}”(hŒ ``hub_delay``”h]”jÑ)�”}”(hj„6h]”hŒ hub_delay”…”�”}”(hj†6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‚6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hj~6ubji)�”}”(hhh]”hë)�”}”(hŒŠcached value consisting of: parent->hub_delay + wHubDelay + tTPTransmissionDelay (40ns) Will be used as wValue for SetIsochDelay requests.”h]”hŒŠcached value consisting of: parent->hub_delay + wHubDelay + tTPTransmissionDelay (40ns) Will be used as wValue for SetIsochDelay requests.”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hjš6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj~6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j™6h´M�hjr(ubjI)�”}”(hŒK``use_generic_driver`` ask driver core to reprobe using the generic driver.”h]”(jO)�”}”(hŒ``use_generic_driver``”h]”jÑ)�”}”(hj¾6h]”hŒuse_generic_driver”…”�”}”(hjÀ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¼6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hj¸6ubji)�”}”(hhh]”hë)�”}”(hŒ4ask driver core to reprobe using the generic driver.”h]”hŒ4ask driver core to reprobe using the generic driver.”…”�”}”(hj×6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hjÔ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¸6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÓ6h´M�hjr(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj*(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ **Notes**”h]”j.)�”}”(hj7h]”hŒNotes”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÿ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M“hjgh²hubhë)�”}”(hŒ[Usbcore drivers should not set usbdev->state directly. Instead use usb_set_device_state().”h]”hŒ[Usbcore drivers should not set usbdev->state directly. Instead use usb_set_device_state().”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‘hjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ usb_hub_for_each_child (C macro)”Œc.usb_hub_for_each_child”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_hub_for_each_child”h]”j+)�”}”(hŒusb_hub_for_each_child”h]”j„)�”}”(hŒusb_hub_for_each_child”h]”jŠ)�”}”(hj97h]”hŒusb_hub_for_each_child”…”�”}”(hjC7h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj?7ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj;7h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj77h²hh³jV7h´Mubah}”(h]”j27ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jV7h´Mhj47h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhj47h²hh³jV7h´Mubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjjo7jjo7j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ/``usb_hub_for_each_child (hdev, port1, child)``”h]”jÑ)�”}”(hju7h]”hŒ+usb_hub_for_each_child (hdev, port1, child)”…”�”}”(hjw7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjs7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhŒ block_quote”“”)�”}”(hŒ*iterate over all child devices on the hub ”h]”hë)�”}”(hŒ)iterate over all child devices on the hub”h]”hŒ)iterate over all child devices on the hub”…”�”}”(hj‘7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj�7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jŸ7h´Mhjgh²hubj$)�”}”(hŒ’**Parameters** ``hdev`` USB device belonging to the usb hub ``port1`` portnum associated with child device ``child`` child device pointer”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¬7h]”hŒ Parameters”…”�”}”(hj®7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjª7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj¦7ubjD)�”}”(hhh]”(jI)�”}”(hŒ-``hdev`` USB device belonging to the usb hub ”h]”(jO)�”}”(hŒ``hdev``”h]”jÑ)�”}”(hjË7h]”hŒhdev”…”�”}”(hjÍ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÉ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjÅ7ubji)�”}”(hhh]”hë)�”}”(hŒ#USB device belonging to the usb hub”h]”hŒ#USB device belonging to the usb hub”…”�”}”(hjä7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jà7h´Mhjá7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÅ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jà7h´MhjÂ7ubjI)�”}”(hŒ/``port1`` portnum associated with child device ”h]”(jO)�”}”(hŒ ``port1``”h]”jÑ)�”}”(hj8h]”hŒport1”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjþ7ubji)�”}”(hhh]”hë)�”}”(hŒ$portnum associated with child device”h]”hŒ$portnum associated with child device”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j8h´Mhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjþ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j8h´MhjÂ7ubjI)�”}”(hŒ``child`` child device pointer”h]”(jO)�”}”(hŒ ``child``”h]”jÑ)�”}”(hj=8h]”hŒchild”…”�”}”(hj?8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj;8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj78ubji)�”}”(hhh]”hë)�”}”(hŒchild device pointer”h]”hŒchild device pointer”…”�”}”(hjV8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjS8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj78ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jR8h´MhjÂ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¦7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_interface_claimed (C function)”Œc.usb_interface_claimed”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ7int usb_interface_claimed (struct usb_interface *iface)”h]”j+)�”}”(hŒ6int usb_interface_claimed(struct usb_interface *iface)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj—8h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj“8h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj“8h²hh³j¥8h´M�ubj„)�”}”(hŒusb_interface_claimed”h]”jŠ)�”}”(hŒusb_interface_claimed”h]”hŒusb_interface_claimed”…”�”}”(hj¸8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj´8ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj“8h²hh³j¥8h´M�ubj¥)�”}”(hŒ(struct usb_interface *iface)”h]”j«)�”}”(hŒstruct usb_interface *iface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÔ8h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÐ8ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÐ8ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjò8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjï8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jô8Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjº8sbŒc.usb_interface_claimed”†”asbuh1hhjÐ8ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÐ8ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÐ8ubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hj-9h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÐ8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÌ8ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj“8h²hh³j¥8h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj�8h²hh³j¥8h´M�ubah}”(h]”jŠ8ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¥8h´M�hjŒ8h²hubjü)�”}”(hhh]”hë)�”}”(hŒ(returns true iff an interface is claimed”h]”hŒ(returns true iff an interface is claimed”…”�”}”(hjW9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hjT9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjŒ8h²hh³j¥8h´M�ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjo9jjo9j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXX**Parameters** ``struct usb_interface *iface`` the interface being checked **Return** ``true`` (nonzero) iff the interface is claimed, else ``false`` (zero). **Note** Callers must own the driver model's usb bus readlock. So driver probe() entries don't need extra locking, but other call contexts may need to explicitly claim that lock.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjy9h]”hŒ Parameters”…”�”}”(hj{9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjw9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M“hjs9ubjD)�”}”(hhh]”jI)�”}”(hŒ<``struct usb_interface *iface`` the interface being checked ”h]”(jO)�”}”(hŒ``struct usb_interface *iface``”h]”jÑ)�”}”(hj˜9h]”hŒstruct usb_interface *iface”…”�”}”(hjš9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj–9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hj’9ubji)�”}”(hhh]”hë)�”}”(hŒthe interface being checked”h]”hŒthe interface being checked”…”�”}”(hj±9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j­9h´M�hj®9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj’9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j­9h´M�hj�9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjs9ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjÓ9h]”hŒReturn”…”�”}”(hjÕ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÑ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M’hjs9ubhë)�”}”(hŒG``true`` (nonzero) iff the interface is claimed, else ``false`` (zero).”h]”(jÑ)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjí9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjé9ubhŒ. (nonzero) iff the interface is claimed, else ”…”�”}”(hjé9h²hh³Nh´NubjÑ)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjÿ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjé9ubhŒ (zero).”…”�”}”(hjé9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M’hjs9ubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hj:h]”hŒNote”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M•hjs9ubhë)�”}”(hŒªCallers must own the driver model's usb bus readlock. So driver probe() entries don't need extra locking, but other call contexts may need to explicitly claim that lock.”h]”hŒ®Callers must own the driver model’s usb bus readlock. So driver probe() entries don’t need extra locking, but other call contexts may need to explicitly claim that lock.”…”�”}”(hj0:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M•hjs9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_make_path (C function)”Œc.usb_make_path”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒBint usb_make_path (struct usb_device *dev, char *buf, size_t size)”h]”j+)�”}”(hŒAint usb_make_path(struct usb_device *dev, char *buf, size_t size)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj_:h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj[:h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn:h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj[:h²hh³jm:h´M¾ubj„)�”}”(hŒ usb_make_path”h]”jŠ)�”}”(hŒ usb_make_path”h]”hŒ usb_make_path”…”�”}”(hj€:h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj|:ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj[:h²hh³jm:h´M¾ubj¥)�”}”(hŒ0(struct usb_device *dev, char *buf, size_t size)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjœ:h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj˜:ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©:h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj˜:ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjº:h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj·:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¼:Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj‚:sbŒc.usb_make_path”†”asbuh1hhj˜:ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ:h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj˜:ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjè:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj˜:ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjõ:h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj˜:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj”:ubj«)�”}”(hŒ char *buf”h]”(jT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ;ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ;ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj*;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ;ubjŠ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj7;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj”:ubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjS;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjP;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jU;Œmodname”NŒ classname”NjLjO)�”}”jR]”jÖ:Œc.usb_make_path”†”asbuh1hhjL;ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjL;ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjL;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj”:ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj[:h²hh³jm:h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjW:h²hh³jm:h´M¾ubah}”(h]”jR:ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jm:h´M¾hjT:h²hubjü)�”}”(hhh]”hë)�”}”(hŒ*returns stable device path in the usb tree”h]”hŒ*returns stable device path in the usb tree”…”�”}”(hj©;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¾hj¦;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjT:h²hh³jm:h´M¾ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÁ;jjÁ;j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXý**Parameters** ``struct usb_device *dev`` the device whose path is being constructed ``char *buf`` where to put the string ``size_t size`` how big is "buf"? **Return** Length of the string (> 0) or negative if size was too small. **Note** This identifier is intended to be "stable", reflecting physical paths in hardware such as physical bus addresses for host controllers or ports on USB hubs. That makes it stay the same until systems are physically reconfigured, by re-cabling a tree of USB devices or by moving USB host controllers. Adding and removing devices, including virtual root hubs in host controller driver modules, does not change these path identifiers; neither does rebooting or re-enumerating. These are more useful identifiers than changeable ("unstable") ones like bus numbers or device addresses. With a partial exception for devices connected to USB 2.0 root hubs, these identifiers are also predictable. So long as the device tree isn't changed, plugging any USB device into a given hub port always gives it the same path. Because of the use of "companion" controllers, devices connected to ports on USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are high speed, and a different one if they are full or low speed.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjË;h]”hŒ Parameters”…”�”}”(hjÍ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÉ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÂhjÅ;ubjD)�”}”(hhh]”(jI)�”}”(hŒF``struct usb_device *dev`` the device whose path is being constructed ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjê;h]”hŒstruct usb_device *dev”…”�”}”(hjì;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjè;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¿hjä;ubji)�”}”(hhh]”hë)�”}”(hŒ*the device whose path is being constructed”h]”hŒ*the device whose path is being constructed”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÿ;h´M¿hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjä;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÿ;h´M¿hjá;ubjI)�”}”(hŒ&``char *buf`` where to put the string ”h]”(jO)�”}”(hŒ ``char *buf``”h]”jÑ)�”}”(hj#<h]”hŒ char *buf”…”�”}”(hj%<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj!<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÀhj<ubji)�”}”(hhh]”hë)�”}”(hŒwhere to put the string”h]”hŒwhere to put the string”…”�”}”(hj<<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j8<h´MÀhj9<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j8<h´MÀhjá;ubjI)�”}”(hŒ"``size_t size`` how big is "buf"? ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hj\<h]”hŒ size_t size”…”�”}”(hj^<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjZ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÁhjV<ubji)�”}”(hhh]”hë)�”}”(hŒhow big is "buf"?”h]”hŒhow big is “bufâ€�?”…”�”}”(hju<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jq<h´MÁhjr<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjV<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jq<h´MÁhjá;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÅ;ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj—<h]”hŒReturn”…”�”}”(hj™<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj•<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÃhjÅ;ubhë)�”}”(hŒ=Length of the string (> 0) or negative if size was too small.”h]”hŒ=Length of the string (> 0) or negative if size was too small.”…”�”}”(hj­<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÃhjÅ;ubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hj¾<h]”hŒNote”…”�”}”(hjÀ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¼<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÅhjÅ;ubhë)�”}”(hXDThis identifier is intended to be "stable", reflecting physical paths in hardware such as physical bus addresses for host controllers or ports on USB hubs. That makes it stay the same until systems are physically reconfigured, by re-cabling a tree of USB devices or by moving USB host controllers. Adding and removing devices, including virtual root hubs in host controller driver modules, does not change these path identifiers; neither does rebooting or re-enumerating. These are more useful identifiers than changeable ("unstable") ones like bus numbers or device addresses.”h]”hXLThis identifier is intended to be “stableâ€�, reflecting physical paths in hardware such as physical bus addresses for host controllers or ports on USB hubs. That makes it stay the same until systems are physically reconfigured, by re-cabling a tree of USB devices or by moving USB host controllers. Adding and removing devices, including virtual root hubs in host controller driver modules, does not change these path identifiers; neither does rebooting or re-enumerating. These are more useful identifiers than changeable (“unstableâ€�) ones like bus numbers or device addresses.”…”�”}”(hjÔ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÅhjÅ;ubhë)�”}”(hX»With a partial exception for devices connected to USB 2.0 root hubs, these identifiers are also predictable. So long as the device tree isn't changed, plugging any USB device into a given hub port always gives it the same path. Because of the use of "companion" controllers, devices connected to ports on USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are high speed, and a different one if they are full or low speed.”h]”hXÁWith a partial exception for devices connected to USB 2.0 root hubs, these identifiers are also predictable. So long as the device tree isn’t changed, plugging any USB device into a given hub port always gives it the same path. Because of the use of “companionâ€� controllers, devices connected to ports on USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are high speed, and a different one if they are full or low speed.”…”�”}”(hjã<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÎhjÅ;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒUSB_DEVICE (C macro)”Œ c.USB_DEVICE”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ USB_DEVICE”h]”j+)�”}”(hŒ USB_DEVICE”h]”j„)�”}”(hŒ USB_DEVICE”h]”jŠ)�”}”(hj =h]”hŒ USB_DEVICE”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj=ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj=h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mðubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj =h²hh³j)=h´Mðubah}”(h]”j=ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j)=h´Mðhj=h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhj=h²hh³j)=h´Mðubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjjB=jjB=j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ``USB_DEVICE (vend, prod)``”h]”jÑ)�”}”(hjH=h]”hŒUSB_DEVICE (vend, prod)”…”�”}”(hjJ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjF=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mòhjgh²hubjŒ7)�”}”(hŒ-macro used to describe a specific usb device ”h]”hë)�”}”(hŒ,macro used to describe a specific usb device”h]”hŒ,macro used to describe a specific usb device”…”�”}”(hjb=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mðhj^=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jp=h´Mðhjgh²hubj$)�”}”(hŒ¿**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID **Description** This macro is used to create a struct usb_device_id that matches a specific device.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj}=h]”hŒ Parameters”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj{=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Môhjw=ubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjœ=h]”hŒvend”…”�”}”(hjž=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjš=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mñhj–=ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hjµ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j±=h´Mñhj²=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj–=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j±=h´Mñhj“=ubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hjÕ=h]”hŒprod”…”�”}”(hj×=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÓ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MòhjÏ=ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hjî=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jê=h´Mòhjë=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÏ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jê=h´Mòhj“=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjw=ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj>h]”hŒ Description”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Môhjw=ubhë)�”}”(hŒSThis macro is used to create a struct usb_device_id that matches a specific device.”h]”hŒSThis macro is used to create a struct usb_device_id that matches a specific device.”…”�”}”(hj&>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Móhjw=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒUSB_DEVICE_VER (C macro)”Œc.USB_DEVICE_VER”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_VER”h]”j+)�”}”(hŒUSB_DEVICE_VER”h]”j„)�”}”(hŒUSB_DEVICE_VER”h]”jŠ)�”}”(hjO>h]”hŒUSB_DEVICE_VER”…”�”}”(hjY>h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjU>ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjQ>h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Müubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjM>h²hh³jl>h´Müubah}”(h]”jH>ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jl>h´MühjJ>h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjJ>h²hh³jl>h´Müubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj…>jj…>j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ'``USB_DEVICE_VER (vend, prod, lo, hi)``”h]”jÑ)�”}”(hj‹>h]”hŒ#USB_DEVICE_VER (vend, prod, lo, hi)”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‰>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mþhjgh²hubjŒ7)�”}”(hŒ4describe a specific usb device with a version range ”h]”hë)�”}”(hŒ3describe a specific usb device with a version range”h]”hŒ3describe a specific usb device with a version range”…”�”}”(hj¥>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mühj¡>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³j³>h´Mühjgh²hubj$)�”}”(hX**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID ``lo`` the bcdDevice_lo value ``hi`` the bcdDevice_hi value **Description** This macro is used to create a struct usb_device_id that matches a specific device, with a version range.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÀ>h]”hŒ Parameters”…”�”}”(hjÂ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¾>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjº>ubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjß>h]”hŒvend”…”�”}”(hjá>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÝ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MýhjÙ>ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hjø>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jô>h´Mýhjõ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÙ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jô>h´MýhjÖ>ubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hj?h]”hŒprod”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mþhj?ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hj1?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j-?h´Mþhj.?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j-?h´MþhjÖ>ubjI)�”}”(hŒ``lo`` the bcdDevice_lo value ”h]”(jO)�”}”(hŒ``lo``”h]”jÑ)�”}”(hjQ?h]”hŒlo”…”�”}”(hjS?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjO?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÿhjK?ubji)�”}”(hhh]”hë)�”}”(hŒthe bcdDevice_lo value”h]”hŒthe bcdDevice_lo value”…”�”}”(hjj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jf?h´Mÿhjg?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjK?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jf?h´MÿhjÖ>ubjI)�”}”(hŒ``hi`` the bcdDevice_hi value ”h]”(jO)�”}”(hŒ``hi``”h]”jÑ)�”}”(hjŠ?h]”hŒhi”…”�”}”(hjŒ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjˆ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj„?ubji)�”}”(hhh]”hë)�”}”(hŒthe bcdDevice_hi value”h]”hŒthe bcdDevice_hi value”…”�”}”(hj£?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jŸ?h´Mhj ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj„?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jŸ?h´MhjÖ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjº>ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÅ?h]”hŒ Description”…”�”}”(hjÇ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÃ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjº>ubhë)�”}”(hŒiThis macro is used to create a struct usb_device_id that matches a specific device, with a version range.”h]”hŒiThis macro is used to create a struct usb_device_id that matches a specific device, with a version range.”…”�”}”(hjÛ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjº>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$USB_DEVICE_INTERFACE_CLASS (C macro)”Œc.USB_DEVICE_INTERFACE_CLASS”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_INTERFACE_CLASS”h]”j+)�”}”(hŒUSB_DEVICE_INTERFACE_CLASS”h]”j„)�”}”(hŒUSB_DEVICE_INTERFACE_CLASS”h]”jŠ)�”}”(hj@h]”hŒUSB_DEVICE_INTERFACE_CLASS”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj @ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj@h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj@h²hh³j!@h´M ubah}”(h]”jý?ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j!@h´M hjÿ?h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÿ?h²hh³j!@h´M ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj:@jj:@j ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ/``USB_DEVICE_INTERFACE_CLASS (vend, prod, cl)``”h]”jÑ)�”}”(hj@@h]”hŒ+USB_DEVICE_INTERFACE_CLASS (vend, prod, cl)”…”�”}”(hjB@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj>@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubjŒ7)�”}”(hŒ6describe a usb device with a specific interface class ”h]”hë)�”}”(hŒ5describe a usb device with a specific interface class”h]”hŒ5describe a usb device with a specific interface class”…”�”}”(hjZ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hjV@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jh@h´M hjgh²hubj$)�”}”(hŒó**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID ``cl`` bInterfaceClass value **Description** This macro is used to create a struct usb_device_id that matches a specific interface class of devices.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hju@h]”hŒ Parameters”…”�”}”(hjw@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjs@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjo@ubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hj”@h]”hŒvend”…”�”}”(hj–@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj’@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjŽ@ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hj­@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j©@h´Mhjª@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŽ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j©@h´Mhj‹@ubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hjÍ@h]”hŒprod”…”�”}”(hjÏ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjË@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjÇ@ubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hjæ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jâ@h´Mhjã@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÇ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jâ@h´Mhj‹@ubjI)�”}”(hŒ``cl`` bInterfaceClass value ”h]”(jO)�”}”(hŒ``cl``”h]”jÑ)�”}”(hjAh]”hŒcl”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjAubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceClass value”h]”hŒbInterfaceClass value”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jAh´MhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jAh´Mhj‹@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjo@ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjAAh]”hŒ Description”…”�”}”(hjCAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj?Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjo@ubhë)�”}”(hŒgThis macro is used to create a struct usb_device_id that matches a specific interface class of devices.”h]”hŒgThis macro is used to create a struct usb_device_id that matches a specific interface class of devices.”…”�”}”(hjWAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjo@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'USB_DEVICE_INTERFACE_PROTOCOL (C macro)”Œc.USB_DEVICE_INTERFACE_PROTOCOL”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_INTERFACE_PROTOCOL”h]”j+)�”}”(hŒUSB_DEVICE_INTERFACE_PROTOCOL”h]”j„)�”}”(hŒUSB_DEVICE_INTERFACE_PROTOCOL”h]”jŠ)�”}”(hj€Ah]”hŒUSB_DEVICE_INTERFACE_PROTOCOL”…”�”}”(hjŠAh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj†Aubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj‚Ah²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj~Ah²hh³j�Ah´Mubah}”(h]”jyAah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�Ah´Mhj{Ah²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhj{Ah²hh³j�Ah´Mubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj¶Ajj¶Aj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ2``USB_DEVICE_INTERFACE_PROTOCOL (vend, prod, pr)``”h]”jÑ)�”}”(hj¼Ah]”hŒ.USB_DEVICE_INTERFACE_PROTOCOL (vend, prod, pr)”…”�”}”(hj¾Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjºAubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubjŒ7)�”}”(hŒ9describe a usb device with a specific interface protocol ”h]”hë)�”}”(hŒ8describe a usb device with a specific interface protocol”h]”hŒ8describe a usb device with a specific interface protocol”…”�”}”(hjÖAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjÒAubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jäAh´Mhjgh²hubj$)�”}”(hŒù**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID ``pr`` bInterfaceProtocol value **Description** This macro is used to create a struct usb_device_id that matches a specific interface protocol of devices.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjñAh]”hŒ Parameters”…”�”}”(hjóAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjïAubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M!hjëAubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjBh]”hŒvend”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj Bubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hj)Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j%Bh´Mhj&Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j%Bh´MhjBubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hjIBh]”hŒprod”…”�”}”(hjKBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjGBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjCBubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hjbBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j^Bh´Mhj_Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjCBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j^Bh´MhjBubjI)�”}”(hŒ ``pr`` bInterfaceProtocol value ”h]”(jO)�”}”(hŒ``pr``”h]”jÑ)�”}”(hj‚Bh]”hŒpr”…”�”}”(hj„Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj€Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hj|Bubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceProtocol value”h]”hŒbInterfaceProtocol value”…”�”}”(hj›Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j—Bh´M hj˜Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj|Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j—Bh´M hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjëAubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj½Bh]”hŒ Description”…”�”}”(hj¿Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj»Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M"hjëAubhë)�”}”(hŒjThis macro is used to create a struct usb_device_id that matches a specific interface protocol of devices.”h]”hŒjThis macro is used to create a struct usb_device_id that matches a specific interface protocol of devices.”…”�”}”(hjÓBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M!hjëAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ%USB_DEVICE_INTERFACE_NUMBER (C macro)”Œc.USB_DEVICE_INTERFACE_NUMBER”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_INTERFACE_NUMBER”h]”j+)�”}”(hŒUSB_DEVICE_INTERFACE_NUMBER”h]”j„)�”}”(hŒUSB_DEVICE_INTERFACE_NUMBER”h]”jŠ)�”}”(hjüBh]”hŒUSB_DEVICE_INTERFACE_NUMBER”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjCubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjþBh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M-ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjúBh²hh³jCh´M-ubah}”(h]”jõBah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jCh´M-hj÷Bh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhj÷Bh²hh³jCh´M-ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj2Cjj2Cj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ1``USB_DEVICE_INTERFACE_NUMBER (vend, prod, num)``”h]”jÑ)�”}”(hj8Ch]”hŒ-USB_DEVICE_INTERFACE_NUMBER (vend, prod, num)”…”�”}”(hj:Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj6Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M/hjgh²hubjŒ7)�”}”(hŒ7describe a usb device with a specific interface number ”h]”hë)�”}”(hŒ6describe a usb device with a specific interface number”h]”hŒ6describe a usb device with a specific interface number”…”�”}”(hjRCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M-hjNCubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³j`Ch´M-hjgh²hubj$)�”}”(hŒö**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID ``num`` bInterfaceNumber value **Description** This macro is used to create a struct usb_device_id that matches a specific interface number of devices.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjmCh]”hŒ Parameters”…”�”}”(hjoCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjkCubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M1hjgCubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjŒCh]”hŒvend”…”�”}”(hjŽCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŠCubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M.hj†Cubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hj¥Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¡Ch´M.hj¢Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj†Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¡Ch´M.hjƒCubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hjÅCh]”hŒprod”…”�”}”(hjÇCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÃCubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M/hj¿Cubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hjÞCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÚCh´M/hjÛCubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¿Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÚCh´M/hjƒCubjI)�”}”(hŒ``num`` bInterfaceNumber value ”h]”(jO)�”}”(hŒ``num``”h]”jÑ)�”}”(hjþCh]”hŒnum”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjüCubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M0hjøCubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceNumber value”h]”hŒbInterfaceNumber value”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jDh´M0hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjøCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jDh´M0hjƒCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjgCubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj9Dh]”hŒ Description”…”�”}”(hj;Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj7Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M2hjgCubhë)�”}”(hŒhThis macro is used to create a struct usb_device_id that matches a specific interface number of devices.”h]”hŒhThis macro is used to create a struct usb_device_id that matches a specific interface number of devices.”…”�”}”(hjODh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M1hjgCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒUSB_DEVICE_INFO (C macro)”Œc.USB_DEVICE_INFO”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_INFO”h]”j+)�”}”(hŒUSB_DEVICE_INFO”h]”j„)�”}”(hŒUSB_DEVICE_INFO”h]”jŠ)�”}”(hjxDh]”hŒUSB_DEVICE_INFO”…”�”}”(hj‚Dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj~Dubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjzDh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M=ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjvDh²hh³j•Dh´M=ubah}”(h]”jqDah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j•Dh´M=hjsDh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjsDh²hh³j•Dh´M=ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj®Djj®Dj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ ``USB_DEVICE_INFO (cl, sc, pr)``”h]”jÑ)�”}”(hj´Dh]”hŒUSB_DEVICE_INFO (cl, sc, pr)”…”�”}”(hj¶Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj²Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M?hjgh²hubjŒ7)�”}”(hŒ.macro used to describe a class of usb devices ”h]”hë)�”}”(hŒ-macro used to describe a class of usb devices”h]”hŒ-macro used to describe a class of usb devices”…”�”}”(hjÎDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M=hjÊDubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jÜDh´M=hjgh²hubj$)�”}”(hŒÛ**Parameters** ``cl`` bDeviceClass value ``sc`` bDeviceSubClass value ``pr`` bDeviceProtocol value **Description** This macro is used to create a struct usb_device_id that matches a specific class of devices.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjéDh]”hŒ Parameters”…”�”}”(hjëDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjçDubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MAhjãDubjD)�”}”(hhh]”(jI)�”}”(hŒ``cl`` bDeviceClass value ”h]”(jO)�”}”(hŒ``cl``”h]”jÑ)�”}”(hjEh]”hŒcl”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M>hjEubji)�”}”(hhh]”hë)�”}”(hŒbDeviceClass value”h]”hŒbDeviceClass value”…”�”}”(hj!Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jEh´M>hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jEh´M>hjÿDubjI)�”}”(hŒ``sc`` bDeviceSubClass value ”h]”(jO)�”}”(hŒ``sc``”h]”jÑ)�”}”(hjAEh]”hŒsc”…”�”}”(hjCEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj?Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M?hj;Eubji)�”}”(hhh]”hë)�”}”(hŒbDeviceSubClass value”h]”hŒbDeviceSubClass value”…”�”}”(hjZEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jVEh´M?hjWEubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj;Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jVEh´M?hjÿDubjI)�”}”(hŒ``pr`` bDeviceProtocol value ”h]”(jO)�”}”(hŒ``pr``”h]”jÑ)�”}”(hjzEh]”hŒpr”…”�”}”(hj|Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjxEubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M@hjtEubji)�”}”(hhh]”hë)�”}”(hŒbDeviceProtocol value”h]”hŒbDeviceProtocol value”…”�”}”(hj“Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�Eh´M@hj�Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjtEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�Eh´M@hjÿDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjãDubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjµEh]”hŒ Description”…”�”}”(hj·Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj³Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MBhjãDubhë)�”}”(hŒ]This macro is used to create a struct usb_device_id that matches a specific class of devices.”h]”hŒ]This macro is used to create a struct usb_device_id that matches a specific class of devices.”…”�”}”(hjËEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MAhjãDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒUSB_INTERFACE_INFO (C macro)”Œc.USB_INTERFACE_INFO”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_INTERFACE_INFO”h]”j+)�”}”(hŒUSB_INTERFACE_INFO”h]”j„)�”}”(hŒUSB_INTERFACE_INFO”h]”jŠ)�”}”(hjôEh]”hŒUSB_INTERFACE_INFO”…”�”}”(hjþEh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjúEubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjöEh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MLubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjòEh²hh³jFh´MLubah}”(h]”jíEah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jFh´MLhjïEh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjïEh²hh³jFh´MLubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj*Fjj*Fj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ#``USB_INTERFACE_INFO (cl, sc, pr)``”h]”jÑ)�”}”(hj0Fh]”hŒUSB_INTERFACE_INFO (cl, sc, pr)”…”�”}”(hj2Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj.Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MNhjgh²hubjŒ7)�”}”(hŒ1macro used to describe a class of usb interfaces ”h]”hë)�”}”(hŒ0macro used to describe a class of usb interfaces”h]”hŒ0macro used to describe a class of usb interfaces”…”�”}”(hjJFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MLhjFFubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jXFh´MLhjgh²hubj$)�”}”(hŒç**Parameters** ``cl`` bInterfaceClass value ``sc`` bInterfaceSubClass value ``pr`` bInterfaceProtocol value **Description** This macro is used to create a struct usb_device_id that matches a specific class of interfaces.”h]”(hë)�”}”(hŒ**Parameters**”•h]”j.)�”}”(hjeFh]”hŒ Parameters”…”�”}”(hjgFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjcFubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MPhj_FubjD)�”}”(hhh]”(jI)�”}”(hŒ``cl`` bInterfaceClass value ”h]”(jO)�”}”(hŒ``cl``”h]”jÑ)�”}”(hj„Fh]”hŒcl”…”�”}”(hj†Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‚Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MMhj~Fubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceClass value”h]”hŒbInterfaceClass value”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j™Fh´MMhjšFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj~Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j™Fh´MMhj{FubjI)�”}”(hŒ ``sc`` bInterfaceSubClass value ”h]”(jO)�”}”(hŒ``sc``”h]”jÑ)�”}”(hj½Fh]”hŒsc”…”�”}”(hj¿Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj»Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MNhj·Fubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceSubClass value”h]”hŒbInterfaceSubClass value”…”�”}”(hjÖFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÒFh´MNhjÓFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj·Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÒFh´MNhj{FubjI)�”}”(hŒ ``pr`` bInterfaceProtocol value ”h]”(jO)�”}”(hŒ``pr``”h]”jÑ)�”}”(hjöFh]”hŒpr”…”�”}”(hjøFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjôFubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MOhjðFubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceProtocol value”h]”hŒbInterfaceProtocol value”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j Gh´MOhj Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjðFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j Gh´MOhj{Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj_Fubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj1Gh]”hŒ Description”…”�”}”(hj3Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj/Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MQhj_Fubhë)�”}”(hŒ`This macro is used to create a struct usb_device_id that matches a specific class of interfaces.”h]”hŒ`This macro is used to create a struct usb_device_id that matches a specific class of interfaces.”…”�”}”(hjGGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MPhj_Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'USB_DEVICE_AND_INTERFACE_INFO (C macro)”Œc.USB_DEVICE_AND_INTERFACE_INFO”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_DEVICE_AND_INTERFACE_INFO”h]”j+)�”}”(hŒUSB_DEVICE_AND_INTERFACE_INFO”h]”j„)�”}”(hŒUSB_DEVICE_AND_INTERFACE_INFO”h]”jŠ)�”}”(hjpGh]”hŒUSB_DEVICE_AND_INTERFACE_INFO”…”�”}”(hjzGh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjvGubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjrGh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M[ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjnGh²hh³j�Gh´M[ubah}”(h]”jiGah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�Gh´M[hjkGh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjkGh²hh³j�Gh´M[ubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj¦Gjj¦Gj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ:``USB_DEVICE_AND_INTERFACE_INFO (vend, prod, cl, sc, pr)``”h]”jÑ)�”}”(hj¬Gh]”hŒ6USB_DEVICE_AND_INTERFACE_INFO (vend, prod, cl, sc, pr)”…”�”}”(hj®Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjªGubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M]hjgh²hubjŒ7)�”}”(hŒ>describe a specific usb device with a class of usb interfaces ”h]”hë)�”}”(hŒ=describe a specific usb device with a class of usb interfaces”h]”hŒ=describe a specific usb device with a class of usb interfaces”…”�”}”(hjÆGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M[hjÂGubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jÔGh´M[hjgh²hubj$)�”}”(hXØ**Parameters** ``vend`` the 16 bit USB Vendor ID ``prod`` the 16 bit USB Product ID ``cl`` bInterfaceClass value ``sc`` bInterfaceSubClass value ``pr`` bInterfaceProtocol value **Description** This macro is used to create a struct usb_device_id that matches a specific device with a specific class of interfaces. This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjáGh]”hŒ Parameters”…”�”}”(hjãGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjßGubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M_hjÛGubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjHh]”hŒvend”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjþGubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M\hjúGubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jHh´M\hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjúGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jHh´M\hj÷GubjI)�”}”(hŒ#``prod`` the 16 bit USB Product ID ”h]”(jO)�”}”(hŒ``prod``”h]”jÑ)�”}”(hj9Hh]”hŒprod”…”�”}”(hj;Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj7Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M]hj3Hubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Product ID”h]”hŒthe 16 bit USB Product ID”…”�”}”(hjRHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jNHh´M]hjOHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj3Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jNHh´M]hj÷GubjI)�”}”(hŒ``cl`` bInterfaceClass value ”h]”(jO)�”}”(hŒ``cl``”h]”jÑ)�”}”(hjrHh]”hŒcl”…”�”}”(hjtHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjpHubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M^hjlHubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceClass value”h]”hŒbInterfaceClass value”…”�”}”(hj‹Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‡Hh´M^hjˆHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjlHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‡Hh´M^hj÷GubjI)�”}”(hŒ ``sc`` bInterfaceSubClass value ”h]”(jO)�”}”(hŒ``sc``”h]”jÑ)�”}”(hj«Hh]”hŒsc”…”�”}”(hj­Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj©Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M_hj¥Hubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceSubClass value”h]”hŒbInterfaceSubClass value”…”�”}”(hjÄHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÀHh´M_hjÁHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¥Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÀHh´M_hj÷GubjI)�”}”(hŒ ``pr`` bInterfaceProtocol value ”h]”(jO)�”}”(hŒ``pr``”h]”jÑ)�”}”(hjäHh]”hŒpr”…”�”}”(hjæHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjâHubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M`hjÞHubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceProtocol value”h]”hŒbInterfaceProtocol value”…”�”}”(hjýHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jùHh´M`hjúHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÞHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jùHh´M`hj÷Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÛGubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjIh]”hŒ Description”…”�”}”(hj!Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MbhjÛGubhë)�”}”(hŒwThis macro is used to create a struct usb_device_id that matches a specific device with a specific class of interfaces.”h]”hŒwThis macro is used to create a struct usb_device_id that matches a specific device with a specific class of interfaces.”…”�”}”(hj5Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MahjÛGubhë)�”}”(hŒ�This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”h]”hŒ�This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”…”�”}”(hjDIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MdhjÛGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'USB_VENDOR_AND_INTERFACE_INFO (C macro)”Œc.USB_VENDOR_AND_INTERFACE_INFO”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒUSB_VENDOR_AND_INTERFACE_INFO”h]”j+)�”}”(hŒUSB_VENDOR_AND_INTERFACE_INFO”h]”j„)�”}”(hŒUSB_VENDOR_AND_INTERFACE_INFO”h]”jŠ)�”}”(hjmIh]”hŒUSB_VENDOR_AND_INTERFACE_INFO”…”�”}”(hjwIh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjsIubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjoIh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mrubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjkIh²hh³jŠIh´Mrubah}”(h]”jfIah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jŠIh´MrhjhIh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjhIh²hh³jŠIh´Mrubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj£Ijj£Ij ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ4``USB_VENDOR_AND_INTERFACE_INFO (vend, cl, sc, pr)``”h]”jÑ)�”}”(hj©Ih]”hŒ0USB_VENDOR_AND_INTERFACE_INFO (vend, cl, sc, pr)”…”�”}”(hj«Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj§Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mthjgh²hubjŒ7)�”}”(hŒ>describe a specific usb vendor with a class of usb interfaces ”h]”hë)�”}”(hŒ=describe a specific usb vendor with a class of usb interfaces”h]”hŒ=describe a specific usb vendor with a class of usb interfaces”…”�”}”(hjÃIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mrhj¿Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jÑIh´Mrhjgh²hubj$)�”}”(hX²**Parameters** ``vend`` the 16 bit USB Vendor ID ``cl`` bInterfaceClass value ``sc`` bInterfaceSubClass value ``pr`` bInterfaceProtocol value **Description** This macro is used to create a struct usb_device_id that matches a specific vendor with a specific class of interfaces. This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÞIh]”hŒ Parameters”…”�”}”(hjàIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÜIubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MvhjØIubjD)�”}”(hhh]”(jI)�”}”(hŒ"``vend`` the 16 bit USB Vendor ID ”h]”(jO)�”}”(hŒ``vend``”h]”jÑ)�”}”(hjýIh]”hŒvend”…”�”}”(hjÿIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjûIubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mshj÷Iubji)�”}”(hhh]”hë)�”}”(hŒthe 16 bit USB Vendor ID”h]”hŒthe 16 bit USB Vendor ID”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jJh´MshjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj÷Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jJh´MshjôIubjI)�”}”(hŒ``cl`` bInterfaceClass value ”h]”(jO)�”}”(hŒ``cl``”h]”jÑ)�”}”(hj6Jh]”hŒcl”…”�”}”(hj8Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mthj0Jubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceClass value”h]”hŒbInterfaceClass value”…”�”}”(hjOJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jKJh´MthjLJubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj0Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jKJh´MthjôIubjI)�”}”(hŒ ``sc`` bInterfaceSubClass value ”h]”(jO)�”}”(hŒ``sc``”h]”jÑ)�”}”(hjoJh]”hŒsc”…”�”}”(hjqJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjmJubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MuhjiJubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceSubClass value”h]”hŒbInterfaceSubClass value”…”�”}”(hjˆJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j„Jh´Muhj…Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjiJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j„Jh´MuhjôIubjI)�”}”(hŒ ``pr`` bInterfaceProtocol value ”h]”(jO)�”}”(hŒ``pr``”h]”jÑ)�”}”(hj¨Jh]”hŒpr”…”�”}”(hjªJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¦Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mvhj¢Jubji)�”}”(hhh]”hë)�”}”(hŒbInterfaceProtocol value”h]”hŒbInterfaceProtocol value”…”�”}”(hjÁJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j½Jh´Mvhj¾Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¢Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j½Jh´MvhjôIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjØIubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjãJh]”hŒ Description”…”�”}”(hjåJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjáJubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MxhjØIubhë)�”}”(hŒwThis macro is used to create a struct usb_device_id that matches a specific vendor with a specific class of interfaces.”h]”hŒwThis macro is used to create a struct usb_device_id that matches a specific vendor with a specific class of interfaces.”…”�”}”(hjùJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MwhjØIubhë)�”}”(hŒ�This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”h]”hŒ�This is especially useful when explicitly matching devices that have vendor specific bDeviceClass values, but standards-compliant interfaces.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MzhjØIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_driver (C struct)”Œ c.usb_driver”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ usb_driver”h]”j+)�”}”(hŒstruct usb_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj7Kh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj3Kh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M€ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEKh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj3Kh²hh³jDKh´M€ubj„)�”}”(hŒ usb_driver”h]”jŠ)�”}”(hj1Kh]”hŒ usb_driver”…”�”}”(hjWKh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjSKubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj3Kh²hh³jDKh´M€ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj/Kh²hh³jDKh´M€ubah}”(h]”j*Kah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jDKh´M€hj,Kh²hubjü)�”}”(hhh]”hë)�”}”(hŒ*identifies USB interface driver to usbcore”h]”hŒ*identifies USB interface driver to usbcore”…”�”}”(hjyKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M›hjvKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj,Kh²hh³jDKh´M€ubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjj‘Kjj‘Kj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXw**Definition**:: struct usb_driver { const char *name; int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); void (*disconnect) (struct usb_interface *intf); int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code, void *buf); int (*suspend) (struct usb_interface *intf, pm_message_t message); int (*resume) (struct usb_interface *intf); int (*reset_resume)(struct usb_interface *intf); int (*pre_reset)(struct usb_interface *intf); int (*post_reset)(struct usb_interface *intf); void (*shutdown)(struct usb_interface *intf); const struct usb_device_id *id_table; const struct attribute_group **dev_groups; struct usb_dynids dynids; struct device_driver driver; unsigned int no_dynamic_id:1; unsigned int supports_autosuspend:1; unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; }; **Members** ``name`` The driver name should be unique among USB drivers, and should normally be the same as the module name. ``probe`` Called to see if the driver is willing to manage a particular interface on a device. If it is, probe returns zero and uses usb_set_intfdata() to associate driver-specific data with the interface. It may also use usb_set_interface() to specify the appropriate altsetting. If unwilling to manage the interface, return -ENODEV, if genuine IO errors occurred, an appropriate negative errno value. The usb_device_id parameter is only valid during probe. ``disconnect`` Called when the interface is no longer accessible, usually because its device has been (or is being) disconnected or the driver module is being unloaded. ``unlocked_ioctl`` Used for drivers that want to talk to userspace through the "usbfs" filesystem. This lets devices provide ways to expose information to user space regardless of where they do (or don't) show up otherwise in the filesystem. ``suspend`` Called when the device is going to be suspended by the system either from system sleep or runtime suspend context. The return value will be ignored in system sleep context, so do NOT try to continue using the device if suspend fails in this case. Instead, let the resume or reset-resume routine recover from the failure. ``resume`` Called when the device is being resumed by the system. ``reset_resume`` Called when the suspended device has been reset instead of being resumed. ``pre_reset`` Called by usb_reset_device() when the device is about to be reset. This routine must not return until the driver has no active URBs for the device, and no more URBs may be submitted until the post_reset method is called. ``post_reset`` Called by usb_reset_device() after the device has been reset ``shutdown`` Called at shut-down time to quiesce the device. ``id_table`` USB drivers use ID table to support hotplugging. Export this with MODULE_DEVICE_TABLE(usb,...). This must be set or your driver's probe function will never get called. ``dev_groups`` Attributes attached to the device that will be created once it is bound to the driver. ``dynids`` used internally to hold the list of dynamically added device ids for this driver. ``driver`` The driver-model core driver structure. ``no_dynamic_id`` if set to 1, the USB core will not allow dynamic ids to be added to this driver by preventing the sysfs file from being created. ``supports_autosuspend`` if set to 0, the USB core will not allow autosuspend for interfaces bound to this driver. ``disable_hub_initiated_lpm`` if set to 1, the USB core will not allow hubs to initiate lower power link state transitions when an idle timeout occurs. Device-initiated USB 3.0 link PM will still be allowed. ``soft_unbind`` if set to 1, the USB core will not kill URBs and disable endpoints before calling the driver's disconnect method.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj™KubhŒ:”…”�”}”(hj™Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MŸhj•Kubj )�”}”(hXzstruct usb_driver { const char *name; int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); void (*disconnect) (struct usb_interface *intf); int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code, void *buf); int (*suspend) (struct usb_interface *intf, pm_message_t message); int (*resume) (struct usb_interface *intf); int (*reset_resume)(struct usb_interface *intf); int (*pre_reset)(struct usb_interface *intf); int (*post_reset)(struct usb_interface *intf); void (*shutdown)(struct usb_interface *intf); const struct usb_device_id *id_table; const struct attribute_group **dev_groups; struct usb_dynids dynids; struct device_driver driver; unsigned int no_dynamic_id:1; unsigned int supports_autosuspend:1; unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; };”h]”hXzstruct usb_driver { const char *name; int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); void (*disconnect) (struct usb_interface *intf); int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code, void *buf); int (*suspend) (struct usb_interface *intf, pm_message_t message); int (*resume) (struct usb_interface *intf); int (*reset_resume)(struct usb_interface *intf); int (*pre_reset)(struct usb_interface *intf); int (*post_reset)(struct usb_interface *intf); void (*shutdown)(struct usb_interface *intf); const struct usb_device_id *id_table; const struct attribute_group **dev_groups; struct usb_dynids dynids; struct device_driver driver; unsigned int no_dynamic_id:1; unsigned int supports_autosuspend:1; unsigned int disable_hub_initiated_lpm:1; unsigned int soft_unbind:1; };”…”�”}”hj¶Ksbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¡hj•Kubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hjÇKh]”hŒMembers”…”�”}”(hjÉKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÅKubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¶hj•KubjD)�”}”(hhh]”(jI)�”}”(hŒq``name`` The driver name should be unique among USB drivers, and should normally be the same as the module name. ”h]”(jO)�”}”(hŒ``name``”h]”jÑ)�”}”(hjæKh]”hŒname”…”�”}”(hjèKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjäKubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MžhjàKubji)�”}”(hhh]”hë)�”}”(hŒgThe driver name should be unique among USB drivers, and should normally be the same as the module name.”h]”hŒgThe driver name should be unique among USB drivers, and should normally be the same as the module name.”…”�”}”(hjÿKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hjüKubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjàKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jûKh´MžhjÝKubjI)�”}”(hXÏ``probe`` Called to see if the driver is willing to manage a particular interface on a device. If it is, probe returns zero and uses usb_set_intfdata() to associate driver-specific data with the interface. It may also use usb_set_interface() to specify the appropriate altsetting. If unwilling to manage the interface, return -ENODEV, if genuine IO errors occurred, an appropriate negative errno value. The usb_device_id parameter is only valid during probe. ”h]”(jO)�”}”(hŒ ``probe``”h]”jÑ)�”}”(hj Lh]”hŒprobe”…”�”}”(hj"Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¦hjLubji)�”}”(hhh]”hë)�”}”(hXÄCalled to see if the driver is willing to manage a particular interface on a device. If it is, probe returns zero and uses usb_set_intfdata() to associate driver-specific data with the interface. It may also use usb_set_interface() to specify the appropriate altsetting. If unwilling to manage the interface, return -ENODEV, if genuine IO errors occurred, an appropriate negative errno value. The usb_device_id parameter is only valid during probe.”h]”hXÄCalled to see if the driver is willing to manage a particular interface on a device. If it is, probe returns zero and uses usb_set_intfdata() to associate driver-specific data with the interface. It may also use usb_set_interface() to specify the appropriate altsetting. If unwilling to manage the interface, return -ENODEV, if genuine IO errors occurred, an appropriate negative errno value. The usb_device_id parameter is only valid during probe.”…”�”}”(hj9Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MŸhj6Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j5Lh´M¦hjÝKubjI)�”}”(hŒ©``disconnect`` Called when the interface is no longer accessible, usually because its device has been (or is being) disconnected or the driver module is being unloaded. ”h]”(jO)�”}”(hŒ``disconnect``”h]”jÑ)�”}”(hjZLh]”hŒ disconnect”…”�”}”(hj\Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjXLubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M©hjTLubji)�”}”(hhh]”hë)�”}”(hŒ™Called when the interface is no longer accessible, usually because its device has been (or is being) disconnected or the driver module is being unloaded.”h]”hŒ™Called when the interface is no longer accessible, usually because its device has been (or is being) disconnected or the driver module is being unloaded.”…”�”}”(hjsLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M§hjpLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjTLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³joLh´M©hjÝKubjI)�”}”(hŒó``unlocked_ioctl`` Used for drivers that want to talk to userspace through the "usbfs" filesystem. This lets devices provide ways to expose information to user space regardless of where they do (or don't) show up otherwise in the filesystem. ”h]”(jO)�”}”(hŒ``unlocked_ioctl``”h]”jÑ)�”}”(hj”Lh]”hŒunlocked_ioctl”…”�”}”(hj–Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj’Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M­hjŽLubji)�”}”(hhh]”hë)�”}”(hŒßUsed for drivers that want to talk to userspace through the "usbfs" filesystem. This lets devices provide ways to expose information to user space regardless of where they do (or don't) show up otherwise in the filesystem.”h]”hŒåUsed for drivers that want to talk to userspace through the “usbfsâ€� filesystem. This lets devices provide ways to expose information to user space regardless of where they do (or don’t) show up otherwise in the filesystem.”…”�”}”(hj­Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MªhjªLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŽLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j©Lh´M­hjÝKubjI)�”}”(hXM``suspend`` Called when the device is going to be suspended by the system either from system sleep or runtime suspend context. The return value will be ignored in system sleep context, so do NOT try to continue using the device if suspend fails in this case. Instead, let the resume or reset-resume routine recover from the failure. ”h]”(jO)�”}”(hŒ ``suspend``”h]”jÑ)�”}”(hjÎLh]”hŒsuspend”…”�”}”(hjÐLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÌLubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M³hjÈLubji)�”}”(hhh]”hë)�”}”(hX@Called when the device is going to be suspended by the system either from system sleep or runtime suspend context. The return value will be ignored in system sleep context, so do NOT try to continue using the device if suspend fails in this case. Instead, let the resume or reset-resume routine recover from the failure.”h]”hX@Called when the device is going to be suspended by the system either from system sleep or runtime suspend context. The return value will be ignored in system sleep context, so do NOT try to continue using the device if suspend fails in this case. Instead, let the resume or reset-resume routine recover from the failure.”…”�”}”(hjçLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M®hjäLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÈLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jãLh´M³hjÝKubjI)�”}”(hŒB``resume`` Called when the device is being resumed by the system. ”h]”(jO)�”}”(hŒ ``resume``”h]”jÑ)�”}”(hjMh]”hŒresume”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M´hjMubji)�”}”(hhh]”hë)�”}”(hŒ6Called when the device is being resumed by the system.”h]”hŒ6Called when the device is being resumed by the system.”…”�”}”(hj!Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jMh´M´hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jMh´M´hjÝKubjI)�”}”(hŒ[``reset_resume`` Called when the suspended device has been reset instead of being resumed. ”h]”(jO)�”}”(hŒ``reset_resume``”h]”jÑ)�”}”(hjAMh]”hŒ reset_resume”…”�”}”(hjCMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj?Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¶hj;Mubji)�”}”(hhh]”hë)�”}”(hŒICalled when the suspended device has been reset instead of being resumed.”h]”hŒICalled when the suspended device has been reset instead of being resumed.”…”�”}”(hjZMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MµhjWMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj;Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jVMh´M¶hjÝKubjI)�”}”(hŒì``pre_reset`` Called by usb_reset_device() when the device is about to be reset. This routine must not return until the driver has no active URBs for the device, and no more URBs may be submitted until the post_reset method is called. ”h]”(jO)�”}”(hŒ ``pre_reset``”h]”jÑ)�”}”(hj{Mh]”hŒ pre_reset”…”�”}”(hj}Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjyMubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MºhjuMubji)�”}”(hhh]”hë)�”}”(hŒÝCalled by usb_reset_device() when the device is about to be reset. This routine must not return until the driver has no active URBs for the device, and no more URBs may be submitted until the post_reset method is called.”h]”hŒÝCalled by usb_reset_device() when the device is about to be reset. This routine must not return until the driver has no active URBs for the device, and no more URBs may be submitted until the post_reset method is called.”…”�”}”(hj”Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M·hj‘Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjuMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�Mh´MºhjÝKubjI)�”}”(hŒL``post_reset`` Called by usb_reset_device() after the device has been reset ”h]”(jO)�”}”(hŒ``post_reset``”h]”jÑ)�”}”(hjµMh]”hŒ post_reset”…”�”}”(hj·Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¼hj¯Mubji)�”}”(hhh]”hë)�”}”(hŒNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj"Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j=Nh´MÀhjÝKubjI)�”}”(hŒf``dev_groups`` Attributes attached to the device that will be created once it is bound to the driver. ”h]”(jO)�”}”(hŒ``dev_groups``”h]”jÑ)�”}”(hjbNh]”hŒ dev_groups”…”�”}”(hjdNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj`Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÂhj\Nubji)�”}”(hhh]”hë)�”}”(hŒVAttributes attached to the device that will be created once it is bound to the driver.”h]”hŒVAttributes attached to the device that will be created once it is bound to the driver.”…”�”}”(hj{Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÁhjxNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj\Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jwNh´MÂhjÝKubjI)�”}”(hŒ]``dynids`` used internally to hold the list of dynamically added device ids for this driver. ”h]”(jO)�”}”(hŒ ``dynids``”h]”jÑ)�”}”(hjœNh]”hŒdynids”…”�”}”(hjžNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjšNubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÄhj–Nubji)�”}”(hhh]”hë)�”}”(hŒQused internally to hold the list of dynamically added device ids for this driver.”h]”hŒQused internally to hold the list of dynamically added device ids for this driver.”…”�”}”(hjµNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÃhj²Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj–Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j±Nh´MÄhjÝKubjI)�”}”(hŒ3``driver`` The driver-model core driver structure. ”h]”(jO)�”}”(hŒ ``driver``”h]”jÑ)�”}”(hjÖNh]”hŒdriver”…”�”}”(hjØNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÔNubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÅhjÐNubji)�”}”(hhh]”hë)�”}”(hŒ'The driver-model core driver structure.”h]”hŒ'The driver-model core driver structure.”…”�”}”(hjïNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jëNh´MÅhjìNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÐNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jëNh´MÅhjÝKubjI)�”}”(hŒ“``no_dynamic_id`` if set to 1, the USB core will not allow dynamic ids to be added to this driver by preventing the sysfs file from being created. ”h]”(jO)�”}”(hŒ``no_dynamic_id``”h]”jÑ)�”}”(hjOh]”hŒ no_dynamic_id”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÇhj Oubji)�”}”(hhh]”hë)�”}”(hŒ€if set to 1, the USB core will not allow dynamic ids to be added to this driver by preventing the sysfs file from being created.”h]”hŒ€if set to 1, the USB core will not allow dynamic ids to be added to this driver by preventing the sysfs file from being created.”…”�”}”(hj(Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÆhj%Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j$Oh´MÇhjÝKubjI)�”}”(hŒs``supports_autosuspend`` if set to 0, the USB core will not allow autosuspend for interfaces bound to this driver. ”h]”(jO)�”}”(hŒ``supports_autosuspend``”h]”jÑ)�”}”(hjIOh]”hŒsupports_autosuspend”…”�”}”(hjKOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjGOubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÉhjCOubji)�”}”(hhh]”hë)�”}”(hŒYif set to 0, the USB core will not allow autosuspend for interfaces bound to this driver.”h]”hŒYif set to 0, the USB core will not allow autosuspend for interfaces bound to this driver.”…”�”}”(hjbOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÈhj_Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjCOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j^Oh´MÉhjÝKubjI)�”}”(hŒÑ``disable_hub_initiated_lpm`` if set to 1, the USB core will not allow hubs to initiate lower power link state transitions when an idle timeout occurs. Device-initiated USB 3.0 link PM will still be allowed. ”h]”(jO)�”}”(hŒ``disable_hub_initiated_lpm``”h]”jÑ)�”}”(hjƒOh]”hŒdisable_hub_initiated_lpm”…”�”}”(hj…Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÎhj}Oubji)�”}”(hhh]”hë)�”}”(hŒ²if set to 1, the USB core will not allow hubs to initiate lower power link state transitions when an idle timeout occurs. Device-initiated USB 3.0 link PM will still be allowed.”h]”hŒ²if set to 1, the USB core will not allow hubs to initiate lower power link state transitions when an idle timeout occurs. Device-initiated USB 3.0 link PM will still be allowed.”…”�”}”(hjœOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÌhj™Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj}Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j˜Oh´MÎhjÝKubjI)�”}”(hŒ�``soft_unbind`` if set to 1, the USB core will not kill URBs and disable endpoints before calling the driver's disconnect method.”h]”(jO)�”}”(hŒ``soft_unbind``”h]”jÑ)�”}”(hj½Oh]”hŒ soft_unbind”…”�”}”(hj¿Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj»Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÊhj·Oubji)�”}”(hhh]”hë)�”}”(hŒqif set to 1, the USB core will not kill URBs and disable endpoints before calling the driver's disconnect method.”h]”hŒsif set to 1, the USB core will not kill URBs and disable endpoints before calling the driver’s disconnect method.”…”�”}”(hjÖOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÒOh´MÊhjÓOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj·Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÒOh´MÊhjÝKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj•Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÿOh]”hŒ Description”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjýOubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÎhjgh²hubhë)�”}”(hŒ€USB interface drivers must provide a name, probe() and disconnect() methods, and an id_table. Other driver fields are optional.”h]”hŒ€USB interface drivers must provide a name, probe() and disconnect() methods, and an id_table. Other driver fields are optional.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÎhjgh²hubhë)�”}”(hŒÂThe id_table is used in hotplugging. It holds a set of descriptors, and specialized data may be associated with each entry. That table is used by both user and kernel mode hotplugging support.”h]”hŒÂThe id_table is used in hotplugging. It holds a set of descriptors, and specialized data may be associated with each entry. That table is used by both user and kernel mode hotplugging support.”…”�”}”(hj$Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÑhjgh²hubhë)�”}”(hXÑThe probe() and disconnect() methods are called in a context where they can sleep, but they should avoid abusing the privilege. Most work to connect to a device should be done when the device is opened, and undone at the last close. The disconnect code needs to address concurrency issues with respect to open() and close() methods, as well as forcing all pending I/O requests to complete (by unlinking them as necessary, and blocking until the unlinks complete).”h]”hXÑThe probe() and disconnect() methods are called in a context where they can sleep, but they should avoid abusing the privilege. Most work to connect to a device should be done when the device is opened, and undone at the last close. The disconnect code needs to address concurrency issues with respect to open() and close() methods, as well as forcing all pending I/O requests to complete (by unlinking them as necessary, and blocking until the unlinks complete).”…”�”}”(hj3Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÕhjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_device_driver (C struct)”Œc.usb_device_driver”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_device_driver”h]”j+)�”}”(hŒstruct usb_device_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj[Ph²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjWPh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MàubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiPh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWPh²hh³jhPh´Màubj„)�”}”(hŒusb_device_driver”h]”jŠ)�”}”(hjUPh]”hŒusb_device_driver”…”�”}”(hj{Ph²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjwPubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjWPh²hh³jhPh´Màubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjSPh²hh³jhPh´Màubah}”(h]”jNPah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jhPh´MàhjPPh²hubjü)�”}”(hhh]”hë)�”}”(hŒ'identifies USB device driver to usbcore”h]”hŒ'identifies USB device driver to usbcore”…”�”}”(hj�Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÿhjšPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjPPh²hh³jhPh´Màubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjjµPjjµPj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hX†**Definition**:: struct usb_device_driver { const char *name; bool (*match) (struct usb_device *udev); int (*probe) (struct usb_device *udev); void (*disconnect) (struct usb_device *udev); int (*suspend) (struct usb_device *udev, pm_message_t message); int (*resume) (struct usb_device *udev, pm_message_t message); int (*choose_configuration) (struct usb_device *udev); const struct attribute_group **dev_groups; struct device_driver driver; const struct usb_device_id *id_table; unsigned int supports_autosuspend:1; unsigned int generic_subclass:1; }; **Members** ``name`` The driver name should be unique among USB drivers, and should normally be the same as the module name. ``match`` If set, used for better device/driver matching. ``probe`` Called to see if the driver is willing to manage a particular device. If it is, probe returns zero and uses dev_set_drvdata() to associate driver-specific data with the device. If unwilling to manage the device, return a negative errno value. ``disconnect`` Called when the device is no longer accessible, usually because it has been (or is being) disconnected or the driver's module is being unloaded. ``suspend`` Called when the device is going to be suspended by the system. ``resume`` Called when the device is being resumed by the system. ``choose_configuration`` If non-NULL, called instead of the default usb_choose_configuration(). If this returns an error then we'll go on to call the normal usb_choose_configuration(). ``dev_groups`` Attributes attached to the device that will be created once it is bound to the driver. ``driver`` The driver-model core driver structure. ``id_table`` used with **match\(\)** to select better matching driver at probe() time. ``supports_autosuspend`` if set to 0, the USB core will not allow autosuspend for devices bound to this driver. ``generic_subclass`` if set to 1, the generic USB driver's probe, disconnect, resume and suspend functions will be called in addition to the driver's own, so this part of the setup does not need to be replicated.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÁPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj½PubhŒ:”…”�”}”(hj½Ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj¹Pubj )�”}”(hXHstruct usb_device_driver { const char *name; bool (*match) (struct usb_device *udev); int (*probe) (struct usb_device *udev); void (*disconnect) (struct usb_device *udev); int (*suspend) (struct usb_device *udev, pm_message_t message); int (*resume) (struct usb_device *udev, pm_message_t message); int (*choose_configuration) (struct usb_device *udev); const struct attribute_group **dev_groups; struct device_driver driver; const struct usb_device_id *id_table; unsigned int supports_autosuspend:1; unsigned int generic_subclass:1; };”h]”hXHstruct usb_device_driver { const char *name; bool (*match) (struct usb_device *udev); int (*probe) (struct usb_device *udev); void (*disconnect) (struct usb_device *udev); int (*suspend) (struct usb_device *udev, pm_message_t message); int (*resume) (struct usb_device *udev, pm_message_t message); int (*choose_configuration) (struct usb_device *udev); const struct attribute_group **dev_groups; struct device_driver driver; const struct usb_device_id *id_table; unsigned int supports_autosuspend:1; unsigned int generic_subclass:1; };”…”�”}”hjÚPsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj¹Pubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hjëPh]”hŒMembers”…”�”}”(hjíPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjéPubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj¹PubjD)�”}”(hhh]”(jI)�”}”(hŒq``name`` The driver name should be unique among USB drivers, and should normally be the same as the module name. ”h]”(jO)�”}”(hŒ``name``”h]”jÑ)�”}”(hj Qh]”hŒname”…”�”}”(hj Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjQubji)�”}”(hhh]”hë)�”}”(hŒgThe driver name should be unique among USB drivers, and should normally be the same as the module name.”h]”hŒgThe driver name should be unique among USB drivers, and should normally be the same as the module name.”…”�”}”(hj#Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jQh´MhjQubjI)�”}”(hŒ:``match`` If set, used for better device/driver matching. ”h]”(jO)�”}”(hŒ ``match``”h]”jÑ)�”}”(hjDQh]”hŒmatch”…”�”}”(hjFQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjBQubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj>Qubji)�”}”(hhh]”hë)�”}”(hŒ/If set, used for better device/driver matching.”h]”hŒ/If set, used for better device/driver matching.”…”�”}”(hj]Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jYQh´MhjZQubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj>Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jYQh´MhjQubjI)�”}”(hŒÿ``probe`` Called to see if the driver is willing to manage a particular device. If it is, probe returns zero and uses dev_set_drvdata() to associate driver-specific data with the device. If unwilling to manage the device, return a negative errno value. ”h]”(jO)�”}”(hŒ ``probe``”h]”jÑ)�”}”(hj}Qh]”hŒprobe”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj{Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjwQubji)�”}”(hhh]”hë)�”}”(hŒôCalled to see if the driver is willing to manage a particular device. If it is, probe returns zero and uses dev_set_drvdata() to associate driver-specific data with the device. If unwilling to manage the device, return a negative errno value.”h]”hŒôCalled to see if the driver is willing to manage a particular device. If it is, probe returns zero and uses dev_set_drvdata() to associate driver-specific data with the device. If unwilling to manage the device, return a negative errno value.”…”�”}”(hj–Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj“Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjwQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j’Qh´MhjQubjI)�”}”(hŒ ``disconnect`` Called when the device is no longer accessible, usually because it has been (or is being) disconnected or the driver's module is being unloaded. ”h]”(jO)�”}”(hŒ``disconnect``”h]”jÑ)�”}”(hj·Qh]”hŒ disconnect”…”�”}”(hj¹Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjµQubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hj±Qubji)�”}”(hhh]”hë)�”}”(hŒ�Called when the device is no longer accessible, usually because it has been (or is being) disconnected or the driver's module is being unloaded.”h]”hŒ’Called when the device is no longer accessible, usually because it has been (or is being) disconnected or the driver’s module is being unloaded.”…”�”}”(hjÐQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjÍQubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj±Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÌQh´M hjQubjI)�”}”(hŒK``suspend`` Called when the device is going to be suspended by the system. ”h]”(jO)�”}”(hŒ ``suspend``”h]”jÑ)�”}”(hjñQh]”hŒsuspend”…”�”}”(hjóQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjïQubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hjëQubji)�”}”(hhh]”hë)�”}”(hŒ>Called when the device is going to be suspended by the system.”h]”hŒ>Called when the device is going to be suspended by the system.”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jRh´M hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjëQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jRh´M hjQubjI)�”}”(hŒB``resume`` Called when the device is being resumed by the system. ”h]”(jO)�”}”(hŒ ``resume``”h]”jÑ)�”}”(hj*Rh]”hŒresume”…”�”}”(hj,Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj(Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hj$Rubji)�”}”(hhh]”hë)�”}”(hŒ6Called when the device is being resumed by the system.”h]”hŒ6Called when the device is being resumed by the system.”…”�”}”(hjCRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j?Rh´M hj@Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj$Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j?Rh´M hjQubjI)�”}”(hŒ¹``choose_configuration`` If non-NULL, called instead of the default usb_choose_configuration(). If this returns an error then we'll go on to call the normal usb_choose_configuration(). ”h]”(jO)�”}”(hŒ``choose_configuration``”h]”jÑ)�”}”(hjcRh]”hŒchoose_configuration”…”�”}”(hjeRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjaRubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj]Rubji)�”}”(hhh]”hë)�”}”(hŒŸIf non-NULL, called instead of the default usb_choose_configuration(). If this returns an error then we'll go on to call the normal usb_choose_configuration().”h]”hŒ¡If non-NULL, called instead of the default usb_choose_configuration(). If this returns an error then we’ll go on to call the normal usb_choose_configuration().”…”�”}”(hj|Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hjyRubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj]Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jxRh´MhjQubjI)�”}”(hŒf``dev_groups`` Attributes attached to the device that will be created once it is bound to the driver. ”h]”(jO)�”}”(hŒ``dev_groups``”h]”jÑ)�”}”(hj�Rh]”hŒ dev_groups”…”�”}”(hjŸRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj›Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj—Rubji)�”}”(hhh]”hë)�”}”(hŒVAttributes attached to the device that will be created once it is bound to the driver.”h]”hŒVAttributes attached to the device that will be created once it is bound to the driver.”…”�”}”(hj¶Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj³Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj—Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j²Rh´MhjQubjI)�”}”(hŒ3``driver`` The driver-model core driver structure. ”h]”(jO)�”}”(hŒ ``driver``”h]”jÑ)�”}”(hj×Rh]”hŒdriver”…”�”}”(hjÙRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÕRubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjÑRubji)�”}”(hhh]”hë)�”}”(hŒ'The driver-model core driver structure.”h]”hŒ'The driver-model core driver structure.”…”�”}”(hjðRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jìRh´MhjíRubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÑRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jìRh´MhjQubjI)�”}”(hŒW``id_table`` used with **match\(\)** to select better matching driver at probe() time. ”h]”(jO)�”}”(hŒ ``id_table``”h]”jÑ)�”}”(hjSh]”hŒid_table”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj Subji)�”}”(hhh]”hë)�”}”(hŒIused with **match\(\)** to select better matching driver at probe() time.”h]”(hŒ used with ”…”�”}”(hj)Sh²hh³Nh´Nubj.)�”}”(hŒ **match\(\)**”h]”hŒ match()”…”�”}”(hj1Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj)SubhŒ2 to select better matching driver at probe() time.”…”�”}”(hj)Sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj&Subah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j%Sh´MhjQubjI)�”}”(hŒp``supports_autosuspend`` if set to 0, the USB core will not allow autosuspend for devices bound to this driver. ”h]”(jO)�”}”(hŒ``supports_autosuspend``”h]”jÑ)�”}”(hj\Sh]”hŒsupports_autosuspend”…”�”}”(hj^Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjZSubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjVSubji)�”}”(hhh]”hë)�”}”(hŒVif set to 0, the USB core will not allow autosuspend for devices bound to this driver.”h]”hŒVif set to 0, the USB core will not allow autosuspend for devices bound to this driver.”…”�”}”(hjuSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MhjrSubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjVSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jqSh´MhjQubjI)�”}”(hŒÔ``generic_subclass`` if set to 1, the generic USB driver's probe, disconnect, resume and suspend functions will be called in addition to the driver's own, so this part of the setup does not need to be replicated.”h]”(jO)�”}”(hŒ``generic_subclass``”h]”jÑ)�”}”(hj–Sh]”hŒgeneric_subclass”…”�”}”(hj˜Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj”Subah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj�Subji)�”}”(hhh]”hë)�”}”(hŒ¿if set to 1, the generic USB driver's probe, disconnect, resume and suspend functions will be called in addition to the driver's own, so this part of the setup does not need to be replicated.”h]”hŒÃif set to 1, the generic USB driver’s probe, disconnect, resume and suspend functions will be called in addition to the driver’s own, so this part of the setup does not need to be replicated.”…”�”}”(hj¯Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhj¬Subah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j«Sh´MhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¹Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÙSh]”hŒ Description”…”�”}”(hjÛSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj×Subah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hŒIUSB device drivers must provide a name, other driver fields are optional.”h]”hŒIUSB device drivers must provide a name, other driver fields are optional.”…”�”}”(hjïSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_class_driver (C struct)”Œc.usb_class_driver”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒusb_class_driver”h]”j+)�”}”(hŒstruct usb_class_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjTh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Th²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjTh²hh³j$Th´Mubj„)�”}”(hŒusb_class_driver”h]”jŠ)�”}”(hjTh]”hŒusb_class_driver”…”�”}”(hj7Th²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj3Tubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjTh²hh³j$Th´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjTh²hh³j$Th´Mubah}”(h]”j Tah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j$Th´Mhj Th²hubjü)�”}”(hhh]”hë)�”}”(hŒ>identifies a USB driver that wants to use the USB major number”h]”hŒ>identifies a USB driver that wants to use the USB major number”…”�”}”(hjYTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M1hjVTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj Th²hh³j$Th´Mubeh}”(h]”h ]”(jŒstruct”eh"]”h$]”h&]”jjjjqTjjqTj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXü**Definition**:: struct usb_class_driver { char *name; char *(*devnode)(const struct device *dev, umode_t *mode); const struct file_operations *fops; int minor_base; }; **Members** ``name`` the usb class device name for this driver. Will show up in sysfs. ``devnode`` Callback to provide a naming hint for a possible device node to create. ``fops`` pointer to the struct file_operations of this driver. ``minor_base`` the start of the minor range for this driver.”h]”(hë)�”}”(hŒ**Definition**::”h]”(j.)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj}Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjyTubhŒ:”…”�”}”(hjyTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M5hjuTubj )�”}”(hŒ§struct usb_class_driver { char *name; char *(*devnode)(const struct device *dev, umode_t *mode); const struct file_operations *fops; int minor_base; };”h]”hŒ§struct usb_class_driver { char *name; char *(*devnode)(const struct device *dev, umode_t *mode); const struct file_operations *fops; int minor_base; };”…”�”}”hj–Tsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M7hjuTubhë)�”}”(hŒ **Members**”h]”j.)�”}”(hj§Th]”hŒMembers”…”�”}”(hj©Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¥Tubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M>hjuTubjD)�”}”(•hhh]”(jI)�”}”(hŒL``name`` the usb class device name for this driver. Will show up in sysfs. ”h]”(jO)�”}”(hŒ``name``”h]”jÑ)�”}”(hjÆTh]”hŒname”…”�”}”(hjÈTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÄTubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M3hjÀTubji)�”}”(hhh]”hë)�”}”(hŒBthe usb class device name for this driver. Will show up in sysfs.”h]”hŒBthe usb class device name for this driver. Will show up in sysfs.”…”�”}”(hjßTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÛTh´M3hjÜTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÀTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÛTh´M3hj½TubjI)�”}”(hŒT``devnode`` Callback to provide a naming hint for a possible device node to create. ”h]”(jO)�”}”(hŒ ``devnode``”h]”jÑ)�”}”(hjÿTh]”hŒdevnode”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjýTubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M5hjùTubji)�”}”(hhh]”hë)�”}”(hŒGCallback to provide a naming hint for a possible device node to create.”h]”hŒGCallback to provide a naming hint for a possible device node to create.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M4hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjùTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jUh´M5hj½TubjI)�”}”(hŒ?``fops`` pointer to the struct file_operations of this driver. ”h]”(jO)�”}”(hŒ``fops``”h]”jÑ)�”}”(hj9Uh]”hŒfops”…”�”}”(hj;Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj7Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M6hj3Uubji)�”}”(hhh]”hë)�”}”(hŒ5pointer to the struct file_operations of this driver.”h]”hŒ5pointer to the struct file_operations of this driver.”…”�”}”(hjRUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jNUh´M6hjOUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj3Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jNUh´M6hj½TubjI)�”}”(hŒ<``minor_base`` the start of the minor range for this driver.”h]”(jO)�”}”(hŒ``minor_base``”h]”jÑ)�”}”(hjrUh]”hŒ minor_base”…”�”}”(hjtUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjpUubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M6hjlUubji)�”}”(hhh]”hë)�”}”(hŒ-the start of the minor range for this driver.”h]”hŒ-the start of the minor range for this driver.”…”�”}”(hj‹Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M7hjˆUubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjlUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‡Uh´M6hj½Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjuTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjµUh]”hŒ Description”…”�”}”(hj·Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj³Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M:hjgh²hubhë)�”}”(hŒŽThis structure is used for the usb_register_dev() and usb_deregister_dev() functions, to consolidate a number of the parameters used for them.”h]”hŒŽThis structure is used for the usb_register_dev() and usb_deregister_dev() functions, to consolidate a number of the parameters used for them.”…”�”}”(hjËUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M7hjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒmodule_usb_driver (C macro)”Œc.module_usb_driver”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒmodule_usb_driver”h]”j+)�”}”(hŒmodule_usb_driver”h]”j„)�”}”(hŒmodule_usb_driver”h]”jŠ)�”}”(hjíUh]”hŒmodule_usb_driver”…”�”}”(hj÷Uh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjóUubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjïUh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MQubah}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjëUh²hh³j Vh´MQubah}”(h]”jæUah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j Vh´MQhjèUh²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjèUh²hh³j Vh´MQubeh}”(h]”h ]”(jŒmacro”eh"]”h$]”h&]”jjjj#Vjj#Vj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubhë)�”}”(hŒ$``module_usb_driver (__usb_driver)``”h]”jÑ)�”}”(hj)Vh]”hŒ module_usb_driver (__usb_driver)”…”�”}”(hj+Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj'Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MShjgh²hubjŒ7)�”}”(hŒ*Helper macro for registering a USB driver ”h]”hë)�”}”(hŒ)Helper macro for registering a USB driver”h]”hŒ)Helper macro for registering a USB driver”…”�”}”(hjCVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MQhj?Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³jQVh´MQhjgh²hubj$)�”}”(hX!**Parameters** ``__usb_driver`` usb_driver struct **Description** Helper macro for USB drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj^Vh]”hŒ Parameters”…”�”}”(hj`Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj\Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MUhjXVubjD)�”}”(hhh]”jI)�”}”(hŒ#``__usb_driver`` usb_driver struct ”h]”(jO)�”}”(hŒ``__usb_driver``”h]”jÑ)�”}”(hj}Vh]”hŒ __usb_driver”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj{Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MRhjwVubji)�”}”(hhh]”hë)�”}”(hŒusb_driver struct”h]”hŒusb_driver struct”…”�”}”(hj–Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j’Vh´MRhj“Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjwVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j’Vh´MRhjtVubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjXVubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj¸Vh]”hŒ Description”…”�”}”(hjºVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¶Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MThjXVubhë)�”}”(hŒÚHelper macro for USB drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”h]”hŒÚHelper macro for USB drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()”…”�”}”(hjÎVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MShjXVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒurb (C struct)”Œc.urb”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒurb”h]”j+)�”}”(hŒ struct urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjýVh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjùVh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MZubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjùVh²hh³j Wh´MZubj„)�”}”(hŒurb”h]”jŠ)�”}”(hj÷Vh]”hŒurb”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjWubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjùVh²hh³j Wh´MZubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjõVh²hh³j Wh´MZubah}”(h]”jðVah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j Wh´MZhjòVh²hubjü)�”}”(hhh]”hë)�”}”(hŒUSB Request Block”h]”hŒUSB Request Block”…”�”}”(hj?Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M§hj\h]”hŒnumber_of_packets”…”�”}”(hj@\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj<\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Måhj8\ubji)�”}”(hhh]”hë)�”}”(hŒ)Lists the number of ISO transfer buffers.”h]”hŒ)Lists the number of ISO transfer buffers.”…”�”}”(hjW\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jS\h´MåhjT\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj8\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jS\h´Måhj£WubjI)�”}”(hŒá``interval`` Specifies the polling interval for interrupt or isochronous transfers. The units are frames (milliseconds) for full and low speed devices, and microframes (1/8 millisecond) for highspeed and SuperSpeed devices. ”h]”(jO)�”}”(hŒ ``interval``”h]”jÑ)�”}”(hjw\h]”hŒinterval”…”�”}”(hjy\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhju\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Méhjq\ubji)�”}”(hhh]”hë)�”}”(hŒÓSpecifies the polling interval for interrupt or isochronous transfers. The units are frames (milliseconds) for full and low speed devices, and microframes (1/8 millisecond) for highspeed and SuperSpeed devices.”h]”hŒÓSpecifies the polling interval for interrupt or isochronous transfers. The units are frames (milliseconds) for full and low speed devices, and microframes (1/8 millisecond) for highspeed and SuperSpeed devices.”…”�”}”(hj�\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mæhj�\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjq\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jŒ\h´Méhj£WubjI)�”}”(hŒJ``error_count`` Returns the number of ISO transfers that reported errors. ”h]”(jO)�”}”(hŒ``error_count``”h]”jÑ)�”}”(hj±\h]”hŒ error_count”…”�”}”(hj³\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¯\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mêhj«\ubji)�”}”(hhh]”hë)�”}”(hŒ9Returns the number of ISO transfers that reported errors.”h]”hŒ9Returns the number of ISO transfers that reported errors.”…”�”}”(hjÊ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÆ\h´MêhjÇ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj«\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÆ\h´Mêhj£WubjI)�”}”(hŒg``context`` For use in completion functions. This normally points to request-specific driver context. ”h]”(jO)�”}”(hŒ ``context``”h]”jÑ)�”}”(hjê\h]”hŒcontext”…”�”}”(hjì\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjè\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mìhjä\ubji)�”}”(hhh]”hë)�”}”(hŒZFor use in completion functions. This normally points to request-specific driver context.”h]”hŒZFor use in completion functions. This normally points to request-specific driver context.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mëhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjä\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÿ\h´Mìhj£WubjI)�”}”(hŒÈ``complete`` Completion handler. This URB is passed as the parameter to the completion function. The completion function may then do what it likes with the URB, including resubmitting or freeing it. ”h]”(jO)�”}”(hŒ ``complete``”h]”jÑ)�”}”(hj$]h]”hŒcomplete”…”�”}”(hj&]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj"]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mïhj]ubji)�”}”(hhh]”hë)�”}”(hŒºCompletion handler. This URB is passed as the parameter to the completion function. The completion function may then do what it likes with the URB, including resubmitting or freeing it.”h]”hŒºCompletion handler. This URB is passed as the parameter to the completion function. The completion function may then do what it likes with the URB, including resubmitting or freeing it.”…”�”}”(hj=]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Míhj:]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j9]h´Mïhj£WubjI)�”}”(hŒu``iso_frame_desc`` Used to provide arrays of ISO transfer buffers and to collect the transfer status for each buffer.”h]”(jO)�”}”(hŒ``iso_frame_desc``”h]”jÑ)�”}”(hj^]h]”hŒiso_frame_desc”…”�”}”(hj`]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj\]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MðhjX]ubji)�”}”(hhh]”hë)�”}”(hŒbUsed to provide arrays of ISO transfer buffers and to collect the transfer status for each buffer.”h]”hŒbUsed to provide arrays of ISO transfer buffers and to collect the transfer status for each buffer.”…”�”}”(hjw]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³js]h´Mðhjt]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjX]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³js]h´Mðhj£Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj[Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj ]h]”hŒ Description”…”�”}”(hj¢]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjž]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Môhjgh²hubhë)�”}”(hXLThis structure identifies USB transfer requests. URBs must be allocated by calling usb_alloc_urb() and freed with a call to usb_free_urb(). Initialization may be done using various usb_fill_*_urb() functions. URBs are submitted using usb_submit_urb(), and pending requests may be canceled using usb_unlink_urb() or usb_kill_urb().”h]”hXLThis structure identifies USB transfer requests. URBs must be allocated by calling usb_alloc_urb() and freed with a call to usb_free_urb(). Initialization may be done using various usb_fill_*_urb() functions. URBs are submitted using usb_submit_urb(), and pending requests may be canceled using usb_unlink_urb() or usb_kill_urb().”…”�”}”(hj¶]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mñhjgh²hubhë)�”}”(hŒData Transfer Buffers:”h]”hŒData Transfer Buffers:”…”�”}”(hjÅ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M÷hjgh²hubhë)�”}”(hXÍNormally drivers provide I/O buffers allocated with kmalloc() or otherwise taken from the general page pool. That is provided by transfer_buffer (control requests also use setup_packet), and host controller drivers perform a dma mapping (and unmapping) for each buffer transferred. Those mapping operations can be expensive on some platforms (perhaps using a dma bounce buffer or talking to an IOMMU), although they're cheap on commodity x86 and ppc hardware.”h]”hXÏNormally drivers provide I/O buffers allocated with kmalloc() or otherwise taken from the general page pool. That is provided by transfer_buffer (control requests also use setup_packet), and host controller drivers perform a dma mapping (and unmapping) for each buffer transferred. Those mapping operations can be expensive on some platforms (perhaps using a dma bounce buffer or talking to an IOMMU), although they’re cheap on commodity x86 and ppc hardware.”…”�”}”(hjÔ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mùhjgh²hubhë)�”}”(hXïAlternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag, which tells the host controller driver that no such mapping is needed for the transfer_buffer since the device driver is DMA-aware. For example, a device driver might allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). When this transfer flag is provided, host controller drivers will attempt to use the dma address found in the transfer_dma field rather than determining a dma address themselves.”h]”hXïAlternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag, which tells the host controller driver that no such mapping is needed for the transfer_buffer since the device driver is DMA-aware. For example, a device driver might allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). When this transfer flag is provided, host controller drivers will attempt to use the dma address found in the transfer_dma field rather than determining a dma address themselves.”…”�”}”(hjã]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hXîNote that transfer_buffer must still be set if the controller does not support DMA (as indicated by hcd_uses_dma()) and when talking to root hub. If you have to transfer between highmem zone and the device on such controller, create a bounce buffer or bail out with an error. If transfer_buffer cannot be set (is in highmem) and the controller is DMA capable, assign NULL to it, so that usbmon knows not to use the value. The setup_packet must always be set, so it cannot be located in highmem.”h]”hXîNote that transfer_buffer must still be set if the controller does not support DMA (as indicated by hcd_uses_dma()) and when talking to root hub. If you have to transfer between highmem zone and the device on such controller, create a bounce buffer or bail out with an error. If transfer_buffer cannot be set (is in highmem) and the controller is DMA capable, assign NULL to it, so that usbmon knows not to use the value. The setup_packet must always be set, so it cannot be located in highmem.”…”�”}”(hjò]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M hjgh²hubhë)�”}”(hŒInitialization:”h]”hŒInitialization:”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hXGAll URBs submitted must initialize the dev, pipe, transfer_flags (may be zero), and complete fields. All URBs must also initialize transfer_buffer and transfer_buffer_length. They may provide the URB_SHORT_NOT_OK transfer flag, indicating that short reads are to be treated as errors; that flag is invalid for write requests.”h]”hXGAll URBs submitted must initialize the dev, pipe, transfer_flags (may be zero), and complete fields. All URBs must also initialize transfer_buffer and transfer_buffer_length. They may provide the URB_SHORT_NOT_OK transfer flag, indicating that short reads are to be treated as errors; that flag is invalid for write requests.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hŒ¹Bulk URBs may use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers should always terminate with a short packet, even if it means adding an extra zero length packet.”h]”hŒ¹Bulk URBs may use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers should always terminate with a short packet, even if it means adding an extra zero length packet.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hŒ—Control URBs must provide a valid pointer in the setup_packet field. Unlike the transfer_buffer, the setup_packet may not be mapped for DMA beforehand.”h]”hŒ—Control URBs must provide a valid pointer in the setup_packet field. Unlike the transfer_buffer, the setup_packet may not be mapped for DMA beforehand.”…”�”}”(hj.^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mhjgh²hubhë)�”}”(hXÐInterrupt URBs must provide an interval, saying how often (in milliseconds or, for highspeed devices, 125 microsecond units) to poll for transfers. After the URB has been submitted, the interval field reflects how the transfer was actually scheduled. The polling interval may be more frequent than requested. For example, some controllers have a maximum interval of 32 milliseconds, while others support intervals of up to 1024 milliseconds. Isochronous URBs also have transfer intervals. (Note that for isochronous endpoints, as well as high speed interrupt endpoints, the encoding of the transfer interval in the endpoint descriptor is logarithmic. Device drivers must convert that value to linear units themselves.)”h]”hXÐInterrupt URBs must provide an interval, saying how often (in milliseconds or, for highspeed devices, 125 microsecond units) to poll for transfers. After the URB has been submitted, the interval field reflects how the transfer was actually scheduled. The polling interval may be more frequent than requested. For example, some controllers have a maximum interval of 32 milliseconds, while others support intervals of up to 1024 milliseconds. Isochronous URBs also have transfer intervals. (Note that for isochronous endpoints, as well as high speed interrupt endpoints, the encoding of the transfer interval in the endpoint descriptor is logarithmic. Device drivers must convert that value to linear units themselves.)”…”�”}”(hj=^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M#hjgh²hubhë)�”}”(hX»If an isochronous endpoint queue isn't already running, the host controller will schedule a new URB to start as soon as bandwidth utilization allows. If the queue is running then a new URB will be scheduled to start in the first transfer slot following the end of the preceding URB, if that slot has not already expired. If the slot has expired (which can happen when IRQ delivery is delayed for a long time), the scheduling behavior depends on the URB_ISO_ASAP flag. If the flag is clear then the URB will be scheduled to start in the expired slot, implying that some of its packets will not be transferred; if the flag is set then the URB will be scheduled in the first unexpired slot, breaking the queue's synchronization. Upon URB completion, the start_frame field will be set to the (micro)frame number in which the transfer was scheduled. Ranges for frame counter values are HC-specific and can go from as low as 256 to as high as 65536 frames.”h]”hX¿If an isochronous endpoint queue isn’t already running, the host controller will schedule a new URB to start as soon as bandwidth utilization allows. If the queue is running then a new URB will be scheduled to start in the first transfer slot following the end of the preceding URB, if that slot has not already expired. If the slot has expired (which can happen when IRQ delivery is delayed for a long time), the scheduling behavior depends on the URB_ISO_ASAP flag. If the flag is clear then the URB will be scheduled to start in the expired slot, implying that some of its packets will not be transferred; if the flag is set then the URB will be scheduled in the first unexpired slot, breaking the queue’s synchronization. Upon URB completion, the start_frame field will be set to the (micro)frame number in which the transfer was scheduled. Ranges for frame counter values are HC-specific and can go from as low as 256 to as high as 65536 frames.”…”�”}”(hjL^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M/hjgh²hubhë)�”}”(hX4Isochronous URBs have a different data transfer model, in part because the quality of service is only "best effort". Callers provide specially allocated URBs, with number_of_packets worth of iso_frame_desc structures at the end. Each such packet is an individual ISO transfer. Isochronous URBs are normally queued, submitted by drivers to arrange that transfers are at least double buffered, and then explicitly resubmitted in completion handlers, so that data (such as audio or video) streams at as constant a rate as the host controller scheduler can support.”h]”hX8Isochronous URBs have a different data transfer model, in part because the quality of service is only “best effortâ€�. Callers provide specially allocated URBs, with number_of_packets worth of iso_frame_desc structures at the end. Each such packet is an individual ISO transfer. Isochronous URBs are normally queued, submitted by drivers to arrange that transfers are at least double buffered, and then explicitly resubmitted in completion handlers, so that data (such as audio or video) streams at as constant a rate as the host controller scheduler can support.”…”�”}”(hj[^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M>hjgh²hubhë)�”}”(hŒCompletion Callbacks:”h]”hŒCompletion Callbacks:”…”�”}”(hjj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MHhjgh²hubhë)�”}”(hXThe completion callback can occur in any context: process, interrupt, BH, or anything else. Also, interrupts may or may not be disabled on the local CPU when the callback runs. A completion handler routine must not depend on any particular properties of its environment.”h]”hXThe completion callback can occur in any context: process, interrupt, BH, or anything else. Also, interrupts may or may not be disabled on the local CPU when the callback runs. A completion handler routine must not depend on any particular properties of its environment.”…”�”}”(hjy^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MJhjgh²hubhë)�”}”(hXOne of the first things that a completion handler should do is check the status field. The status field is provided for all URBs. It is used to report unlinked URBs, and status for all non-ISO transfers. It should not be examined before the URB is returned to the completion handler.”h]”hXOne of the first things that a completion handler should do is check the status field. The status field is provided for all URBs. It is used to report unlinked URBs, and status for all non-ISO transfers. It should not be examined before the URB is returned to the completion handler.”…”�”}”(hjˆ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MOhjgh²hubhë)�”}”(hŒ]The context field is normally used to link URBs back to the relevant driver or request state.”h]”hŒ]The context field is normally used to link URBs back to the relevant driver or request state.”…”�”}”(hj—^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MUhjgh²hubhë)�”}”(hŒÓWhen the completion callback is invoked for non-isochronous URBs, the actual_length field tells how many bytes were transferred. This field is updated even when the URB terminated with an error or was unlinked.”h]”hŒÓWhen the completion callback is invoked for non-isochronous URBs, the actual_length field tells how many bytes were transferred. This field is updated even when the URB terminated with an error or was unlinked.”…”�”}”(hj¦^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MXhjgh²hubhë)�”}”(hXISO transfer status is reported in the status and actual_length fields of the iso_frame_desc array, and the number of errors is reported in error_count. Completion callbacks for ISO transfers will normally (re)submit URBs to ensure a constant transfer rate.”h]”hXISO transfer status is reported in the status and actual_length fields of the iso_frame_desc array, and the number of errors is reported in error_count. Completion callbacks for ISO transfers will normally (re)submit URBs to ensure a constant transfer rate.”…”�”}”(hjµ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M\hjgh²hubhë)�”}”(hŒÃNote that even fields marked "public" should not be touched by the driver when the urb is owned by the hcd, that is, since the call to usb_submit_urb() till the entry into the completion routine.”h]”hŒÇNote that even fields marked “publicâ€� should not be touched by the driver when the urb is owned by the hcd, that is, since the call to usb_submit_urb() till the entry into the completion routine.”…”�”}”(hjÄ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mahjgh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_fill_control_urb (C function)”Œc.usb_fill_control_urb”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒÈvoid usb_fill_control_urb (struct urb *urb, struct usb_device *dev, unsigned int pipe, unsigned char *setup_packet, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”j+)�”}”(hŒÇvoid usb_fill_control_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, unsigned char *setup_packet, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjì^h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjè^h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‘ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû^h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjè^h²hh³jú^h´M‘ubj„)�”}”(hŒusb_fill_control_urb”h]”jŠ)�”}”(hŒusb_fill_control_urb”h]”hŒusb_fill_control_urb”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj _ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjè^h²hh³jú^h´M‘ubj¥)�”}”(hŒ®(struct urb *urb, struct usb_device *dev, unsigned int pipe, unsigned char *setup_packet, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”(j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj)_h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj%_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj%_ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjG_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjD_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jI_Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj_sbŒc.usb_fill_control_urb”†”asbuh1hhj%_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj%_ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hju_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj%_ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj‚_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj%_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj›_h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj—_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj—_ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj¹_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¶_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j»_Œmodname”NŒ classname”NjLjO)�”}”jR]”jc_Œc.usb_fill_control_urb”†”asbuh1hhj—_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj—_ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjå_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj—_ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjò_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj—_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj`ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj'`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj`ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hjC`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒunsigned char *setup_packet”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj\`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjX`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjX`ubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjx`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjX`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjX`ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj”`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjX`ubjŠ)�”}”(hŒ setup_packet”h]”hŒ setup_packet”…”�”}”(hj¡`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjX`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒvoid *transfer_buffer”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjº`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¶`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¶`ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÖ`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¶`ubjŠ)�”}”(hŒtransfer_buffer”h]”hŒtransfer_buffer”…”�”}”(hjã`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¶`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒint buffer_length”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjü`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjø`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjø`ubjŠ)�”}”(hŒ buffer_length”h]”hŒ buffer_length”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1•j‰hjø`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒusb_complete_t complete_fn”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒusb_complete_t”h]”hŒusb_complete_t”…”�”}”(hj4ah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj1aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j6aŒmodname”NŒ classname”NjLjO)�”}”jR]”jc_Œc.usb_fill_control_urb”†”asbuh1hhj-aubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj-aubjŠ)�”}”(hŒ complete_fn”h]”hŒ complete_fn”…”�”}”(hj`ah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj-aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubj«)�”}”(hŒ void *context”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjyah²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjuaubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjuaubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj•ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjuaubjŠ)�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj¢ah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjuaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj!_ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjè^h²hh³jú^h´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjä^h²hh³jú^h´M‘ubah}”(h]”jß^ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jú^h´M‘hjá^h²hubjü)�”}”(hhh]”hë)�”}”(hŒinitializes a control urb”h]”hŒinitializes a control urb”…”�”}”(hjÌah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M‘hjÉah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjá^h²hh³jú^h´M‘ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjäajjäaj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hX¨**Parameters** ``struct urb *urb`` pointer to the urb to initialize. ``struct usb_device *dev`` pointer to the struct usb_device for this urb. ``unsigned int pipe`` the endpoint pipe ``unsigned char *setup_packet`` pointer to the setup_packet buffer. The buffer must be suitable for DMA. ``void *transfer_buffer`` pointer to the transfer buffer. The buffer must be suitable for DMA. ``int buffer_length`` length of the transfer buffer ``usb_complete_t complete_fn`` pointer to the usb_complete_t function ``void *context`` what to set the urb context to. **Description** Initializes a control urb with the proper information needed to submit it to a device. The transfer buffer and the setup_packet buffer will most likely be filled or read via DMA. The simplest way to get a buffer that can be DMAed to is allocating it via kmalloc() or equivalent, even for very small buffers. If the buffers are embedded in a bigger structure, there is a risk that the buffer itself, the previous fields and/or the next fields are corrupted due to cache incoherencies; or slowed down if they are evicted from the cache. For more information, check :c:type:`struct urb `.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjîah]”hŒ Parameters”…”�”}”(hjðah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjìaubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M•hjèaubjD)�”}”(hhh]”(jI)�”}”(hŒ6``struct urb *urb`` pointer to the urb to initialize. ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj bh]”hŒstruct urb *urb”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj bubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M’hjbubji)�”}”(hhh]”hë)�”}”(hŒ!pointer to the urb to initialize.”h]”hŒ!pointer to the urb to initialize.”…”�”}”(hj&bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j"bh´M’hj#bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j"bh´M’hjbubjI)�”}”(hŒJ``struct usb_device *dev`` pointer to the struct usb_device for this urb. ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjFbh]”hŒstruct usb_device *dev”…”�”}”(hjHbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjDbubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M“hj@bubji)�”}”(hhh]”hë)�”}”(hŒ.pointer to the struct usb_device for this urb.”h]”hŒ.pointer to the struct usb_device for this urb.”…”�”}”(hj_bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j[bh´M“hj\bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj@bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j[bh´M“hjbubjI)�”}”(hŒ(``unsigned int pipe`` the endpoint pipe ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hjbh]”hŒunsigned int pipe”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj}bubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M”hjybubji)�”}”(hhh]”hë)�”}”(hŒthe endpoint pipe”h]”hŒthe endpoint pipe”…”�”}”(hj˜bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j”bh´M”hj•bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjybubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j”bh´M”hjbubjI)�”}”(hŒi``unsigned char *setup_packet`` pointer to the setup_packet buffer. The buffer must be suitable for DMA. ”h]”(jO)�”}”(hŒ``unsigned char *setup_packet``”h]”jÑ)�”}”(hj¸bh]”hŒunsigned char *setup_packet”…”�”}”(hjºbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¶bubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M–hj²bubji)�”}”(hhh]”hë)�”}”(hŒHpointer to the setup_packet buffer. The buffer must be suitable for DMA.”h]”hŒHpointer to the setup_packet buffer. The buffer must be suitable for DMA.”…”�”}”(hjÑbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M•hjÎbubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj²bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÍbh´M–hjbubjI)�”}”(hŒ_``void *transfer_buffer`` pointer to the transfer buffer. The buffer must be suitable for DMA. ”h]”(jO)�”}”(hŒ``void *transfer_buffer``”h]”jÑ)�”}”(hjòbh]”hŒvoid *transfer_buffer”…”�”}”(hjôbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjðbubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M˜hjìbubji)�”}”(hhh]”hë)�”}”(hŒDpointer to the transfer buffer. The buffer must be suitable for DMA.”h]”hŒDpointer to the transfer buffer. The buffer must be suitable for DMA.”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M—hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjìbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jch´M˜hjbubjI)�”}”(hŒ4``int buffer_length`` length of the transfer buffer ”h]”(jO)�”}”(hŒ``int buffer_length``”h]”jÑ)�”}”(hj,ch]”hŒint buffer_length”…”�”}”(hj.ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj*cubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M™hj&cubji)�”}”(hhh]”hë)�”}”(hŒlength of the transfer buffer”h]”hŒlength of the transfer buffer”…”�”}”(hjEch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jAch´M™hjBcubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj&cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jAch´M™hjbubjI)�”}”(hŒF``usb_complete_t complete_fn`` pointer to the usb_complete_t function ”h]”(jO)�”}”(hŒ``usb_complete_t complete_fn``”h]”jÑ)�”}”(hjech]”hŒusb_complete_t complete_fn”…”�”}”(hjgch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjccubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mšhj_cubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to the usb_complete_t function”h]”hŒ&pointer to the usb_complete_t function”…”�”}”(hj~ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jzch´Mšhj{cubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj_cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jzch´MšhjbubjI)�”}”(hŒ2``void *context`` what to set the urb context to. ”h]”(jO)�”}”(hŒ``void *context``”h]”jÑ)�”}”(hjžch]”hŒ void *context”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjœcubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M›hj˜cubji)�”}”(hhh]”hë)�”}”(hŒwhat to set the urb context to.”h]”hŒwhat to set the urb context to.”…”�”}”(hj·ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j³ch´M›hj´cubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj˜cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j³ch´M›hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjèaubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÙch]”hŒ Description”…”�”}”(hjÛch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj×cubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M�hjèaubhë)�”}”(hŒVInitializes a control urb with the proper information needed to submit it to a device.”h]”hŒVInitializes a control urb with the proper information needed to submit it to a device.”…”�”}”(hjïch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´Mœhjèaubhë)�”}”(hX÷The transfer buffer and the setup_packet buffer will most likely be filled or read via DMA. The simplest way to get a buffer that can be DMAed to is allocating it via kmalloc() or equivalent, even for very small buffers. If the buffers are embedded in a bigger structure, there is a risk that the buffer itself, the previous fields and/or the next fields are corrupted due to cache incoherencies; or slowed down if they are evicted from the cache. For more information, check :c:type:`struct urb `.”h]”(hXÜThe transfer buffer and the setup_packet buffer will most likely be filled or read via DMA. The simplest way to get a buffer that can be DMAed to is allocating it via kmalloc() or equivalent, even for very small buffers. If the buffers are embedded in a bigger structure, there is a risk that the buffer itself, the previous fields and/or the next fields are corrupted due to cache incoherencies; or slowed down if they are evicted from the cache. For more information, check ”…”�”}”(hjþch²hh³Nh´Nubh)�”}”(hŒ:c:type:`struct urb `”h]”jÑ)�”}”(hjdh]”hŒ struct urb”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”(Œxref”jŒc-type”eh"]”h$]”h&]”uh1jÐhjdubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/usb/usb”Œ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jLjO)�”}”jR]”sbŒ reftarget”Œurb”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MŸhjþcubhŒ.”…”�”}”(hjþch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j+dh´MŸhjèaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_fill_bulk_urb (C function)”Œc.usb_fill_bulk_urb”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒ¨void usb_fill_bulk_urb (struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”j+)�”}”(hŒ§void usb_fill_bulk_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjVdh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjRdh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¼ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjedh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjRdh²hh³jddh´M¼ubj„)�”}”(hŒusb_fill_bulk_urb”h]”jŠ)�”}”(hŒusb_fill_bulk_urb”h]”hŒusb_fill_bulk_urb”…”�”}”(hjwdh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjsdubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjRdh²hh³jddh´M¼ubj¥)�”}”(hŒ‘(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context)”h]”(j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj“dh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj�dubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�dubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj±dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj®dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j³dŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjydsbŒc.usb_fill_bulk_urb”†”asbuh1hhj�dubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑdh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�dubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjßdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj�dubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjìdh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjeubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj#eh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j%eŒmodname”NŒ classname”NjLjO)�”}”jR]”jÍdŒc.usb_fill_bulk_urb”†”asbuh1hhjeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAeh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjeubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjOeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjeubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj\eh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjueh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjqeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒeh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjqeubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘eh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjqeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸeh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjqeubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj­eh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjqeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒvoid *transfer_buffer”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÆeh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÂeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔeh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÂeubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjâeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÂeubjŠ)�”}”(hŒtransfer_buffer”h]”hŒtransfer_buffer”…”�”}”(hjïeh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÂeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒint buffer_length”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjfubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjfubjŠ)�”}”(hŒ buffer_length”h]”hŒ buffer_length”…”�”}”(hj$fh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒusb_complete_t complete_fn”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒusb_complete_t”h]”hŒusb_complete_t”…”�”}”(hj@fh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj=fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jBfŒmodname”NŒ classname”NjLjO)�”}”jR]”jÍdŒc.usb_fill_bulk_urb”†”asbuh1hhj9fubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^fh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9fubjŠ)�”}”(hŒ complete_fn”h]”hŒ complete_fn”…”�”}”(hjlfh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubj«)�”}”(hŒ void *context”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…fh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�fubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“fh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�fubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¡fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj�fubjŠ)�”}”(hŒcontext”h]”hŒcontext”…”�”}”(hj®fh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‹dubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjRdh²hh³jddh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjNdh²hh³jddh´M¼ubah}”(h]”jIdah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jddh´M¼hjKdh²hubjü)�”}”(hhh]”hë)�”}”(hŒ#macro to help initialize a bulk urb”h]”hŒ#macro to help initialize a bulk urb”…”�”}”(hjØfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¼hjÕfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjKdh²hh³jddh´M¼ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjðfjjðfj ‰j!‰j"‰uh1jh²hhjgh³j”h´Nubj$)�”}”(hXš**Parameters** ``struct urb *urb`` pointer to the urb to initialize. ``struct usb_device *dev`` pointer to the struct usb_device for this urb. ``unsigned int pipe`` the endpoint pipe ``void *transfer_buffer`` pointer to the transfer buffer. The buffer must be suitable for DMA. ``int buffer_length`` length of the transfer buffer ``usb_complete_t complete_fn`` pointer to the usb_complete_t function ``void *context`` what to set the urb context to. **Description** Initializes a bulk urb with the proper information needed to submit it to a device. Refer to usb_fill_control_urb() for a description of the requirements for transfer_buffer.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjúfh]”hŒ Parameters”…”�”}”(hjüfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjøfubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÀhjôfubjD)�”}”(hhh]”(jI)�”}”(hŒ6``struct urb *urb`` pointer to the urb to initialize. ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjgh]”hŒstruct urb *urb”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M½hjgubji)�”}”(hhh]”hë)�”}”(hŒ!pointer to the urb to initialize.”h]”hŒ!pointer to the urb to initialize.”…”�”}”(hj2gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j.gh´M½hj/gubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j.gh´M½hjgubjI)�”}”(hŒJ``struct usb_device *dev`` pointer to the struct usb_device for this urb. ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjRgh]”hŒstruct usb_device *dev”…”�”}”(hjTgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjPgubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¾hjLgubji)�”}”(hhh]”hë)�”}”(hŒ.pointer to the struct usb_device for this urb.”h]”hŒ.pointer to the struct usb_device for this urb.”…”�”}”(hjkgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jggh´M¾hjhgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjLgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jggh´M¾hjgubjI)�”}”(hŒ(``unsigned int pipe`` the endpoint pipe ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hj‹gh]”hŒunsigned int pipe”…”�”}”(hj�gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‰gubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´M¿hj…gubji)�”}”(hhh]”hë)�”}”(hŒthe endpoint pipe”h]”hŒthe endpoint pipe”…”�”}”(hj¤gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j gh´M¿hj¡gubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj…gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j gh´M¿hjgubjI)�”}”(hŒ_``void *transfer_buffer`` pointer to the transfer buffer. The buffer must be suitable for DMA. ”h]”(jO)�”}”(hŒ``void *transfer_buffer``”h]”jÑ)�”}”(hjÄgh]”hŒvoid *transfer_buffer”…”�”}”(hjÆgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÂgubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÁhj¾gubji)�”}”(hhh]”hë)�”}”(hŒDpointer to the transfer buffer. The buffer must be suitable for DMA.”h]”hŒDpointer to the transfer buffer. The buffer must be suitable for DMA.”…”�”}”(hjÝgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÀhjÚgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¾gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÙgh´MÁhjgubjI)�”}”(hŒ4``int buffer_length`` length of the transfer buffer ”h]”(jO)�”}”(hŒ``int buffer_length``”h]”jÑ)�”}”(hjþgh]”hŒint buffer_length”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjügubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÂhjøgubji)�”}”(hhh]”hë)�”}”(hŒlength of the transfer buffer”h]”hŒlength of the transfer buffer”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jhh´MÂhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjøgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jhh´MÂhjgubjI)�”}”(hŒF``usb_complete_t complete_fn`` pointer to the usb_complete_t function ”h]”(jO)�”}”(hŒ``usb_complete_t complete_fn``”h]”jÑ)�”}”(hj7hh]”hŒusb_complete_t complete_fn”…”�”}”(hj9hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj5hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÃhj1hubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to the usb_complete_t function”h]”hŒ&pointer to the usb_complete_t function”…”�”}”(hjPhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jLhh´MÃhjMhubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj1hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jLhh´MÃhjgubjI)�”}”(hŒ2``void *context`` what to set the urb context to. ”h]”(jO)�”}”(hŒ``void *context``”h]”jÑ)�”}”(hjphh]”hŒ void *context”…”�”}”(hjrhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjnhubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÄhjjhubji)�”}”(hhh]”hë)�”}”(hŒwhat to set the urb context to.”h]”hŒwhat to set the urb context to.”…”�”}”(hj‰hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j…hh´MÄhj†hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j…hh´MÄhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjôfubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj«hh]”hŒ Description”…”�”}”(hj­hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj©hubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÆhjôfubhë)�”}”(hŒSInitializes a bulk urb with the proper information needed to submit it to a device.”h]”hŒSInitializes a bulk urb with the proper information needed to submit it to a device.”…”�”}”(hjÁhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÅhjôfubhë)�”}”(hŒZRefer to usb_fill_control_urb() for a description of the requirements for transfer_buffer.”h]”hŒZRefer to usb_fill_control_urb() for a description of the requirements for transfer_buffer.”…”�”}”(hjÐhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÈhjôfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjgh²hh³j”h´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_fill_int_urb (C function)”Œc.usb_fill_int_urb”hNt”auh1jhjgh²hh³j”h´Nubj )�”}”(hhh]”(j%)�”}”(hŒµvoid usb_fill_int_urb (struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context, int interval)”h]”j+)�”}”(hŒ´void usb_fill_int_urb(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context, int interval)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÿhh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjûhh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:136: ./include/linux/usb.h”h´MÝubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjûhh²hh³j ih´MÝubj„)�”}”(hŒusb_fill_int_urb”h]”jŠ)�”}”(hŒusb_fill_int_urb”h]”hŒusb_fill_int_urb”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjiubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjûhh²hh³j ih´MÝubj¥)�”}”(hŒŸ(struct urb *urb, struct usb_device *dev, unsigned int pipe, void *transfer_buffer, int buffer_length, usb_complete_t complete_fn, void *context, int interval)”h]”(j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KWhjàwubhë)�”}”(hŒŒMust be called when a user of a urb is finished with it. When the last user of the urb calls this function, the memory of the urb is freed.”h]”hŒŒMust be called when a user of a urb is finished with it. When the last user of the urb calls this function, the memory of the urb is freed.”…”�”}”(hjVxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KVhjàwubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hjgxh]”hŒNote”…”�”}”(hjixh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjexubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KYhjàwubhë)�”}”(hŒiThe transfer buffer associated with the urb is not freed unless the URB_FREE_BUFFER transfer flag is set.”h]”hŒiThe transfer buffer associated with the urb is not freed unless the URB_FREE_BUFFER transfer flag is set.”…”�”}”(hj}xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KZhjàwubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_get_urb (C function)”Œ c.usb_get_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ*struct urb * usb_get_urb (struct urb *urb)”h]”j+)�”}”(hŒ(struct urb *usb_get_urb(struct urb *urb)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¬xh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¨xh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºxh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¨xh²hh³j¹xh´Keubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjËxh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÈxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÍxŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHŒ usb_get_urb”sbŒ c.usb_get_urb”†”asbuh1hhj¨xh²hh³j¹xh´KeubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìxh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¨xh²hh³j¹xh´Keubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjúxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¨xh²hh³j¹xh´Keubj„)�”}”(hŒ usb_get_urb”h]”jŠ)�”}”(hjéxh]”hŒ usb_get_urb”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjyubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj¨xh²hh³j¹xh´Keubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj&yh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj"yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3yh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj"yubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjDyh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjAyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jFyŒmodname”NŒ classname”NjLjO)�”}”jR]”jçxŒ c.usb_get_urb”†”asbuh1hhj"yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbyh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj"yubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjpyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj"yubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj}yh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjyubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj¨xh²hh³j¹xh´Keubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj¤xh²hh³j¹xh´Keubah}”(h]”jŸxah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¹xh´Kehj¡xh²hubjü)�”}”(hhh]”hë)�”}”(hŒ)increments the reference count of the urb”h]”hŒ)increments the reference count of the urb”…”�”}”(hj§yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kehj¤yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¡xh²hh³j¹xh´Keubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¿yjj¿yj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXK**Parameters** ``struct urb *urb`` pointer to the urb to modify, may be NULL **Description** This must be called whenever a urb is transferred from a device driver to a host controller driver. This allows proper reference counting to happen for urbs. **Return** A pointer to the urb with the incremented reference counter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÉyh]”hŒ Parameters”…”�”}”(hjËyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÇyubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KihjÃyubjD)�”}”(hhh]”jI)�”}”(hŒ>``struct urb *urb`` pointer to the urb to modify, may be NULL ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjèyh]”hŒstruct urb *urb”…”�”}”(hjêyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjæyubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kfhjâyubji)�”}”(hhh]”hë)�”}”(hŒ)pointer to the urb to modify, may be NULL”h]”hŒ)pointer to the urb to modify, may be NULL”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jýyh´Kfhjþyubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjâyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jýyh´Kfhjßyubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÃyubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj#zh]”hŒ Description”…”�”}”(hj%zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj!zubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KhhjÃyubhë)�”}”(hŒŸThis must be called whenever a urb is transferred from a device driver to a host controller driver. This allows proper reference counting to happen for urbs.”h]”hŒŸThis must be called whenever a urb is transferred from a device driver to a host controller driver. This allows proper reference counting to happen for urbs.”…”�”}”(hj9zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KghjÃyubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjJzh]”hŒReturn”…”�”}”(hjLzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjHzubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KkhjÃyubhë)�”}”(hŒ{h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj:{ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK{h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj:{ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hj\{h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjY{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j^{Œmodname”NŒ classname”NjLjO)�”}”jR]”j{Œc.usb_anchor_urb”†”asbuh1hhj:{ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz{h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj:{ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjˆ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj:{ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj•{h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj:{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÄzubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj‹zh²hh³j�zh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj‡zh²hh³j�zh´Kwubah}”(h]”j‚zah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�zh´Kwhj„zh²hubjü)�”}”(hhh]”hë)�”}”(hŒ$anchors an URB while it is processed”h]”hŒ$anchors an URB while it is processed”…”�”}”(hj¿{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kwhj¼{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj„zh²hh³j�zh´Kwubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj×{jj×{j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒî**Parameters** ``struct urb *urb`` pointer to the urb to anchor ``struct usb_anchor *anchor`` pointer to the anchor **Description** This can be called to have access to URBs which are to be executed without bothering to track them”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjá{h]”hŒ Parameters”…”�”}”(hjã{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjß{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K{hjÛ{ubjD)�”}”(hhh]”(jI)�”}”(hŒ1``struct urb *urb`` pointer to the urb to anchor ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj|h]”hŒstruct urb *urb”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjþ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kxhjú{ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the urb to anchor”h]”hŒpointer to the urb to anchor”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j|h´Kxhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjú{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j|h´Kxhj÷{ubjI)�”}”(hŒ4``struct usb_anchor *anchor`` pointer to the anchor ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj9|h]”hŒstruct usb_anchor *anchor”…”�”}”(hj;|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj7|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kyhj3|ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the anchor”h]”hŒpointer to the anchor”…”�”}”(hjR|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jN|h´KyhjO|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj3|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jN|h´Kyhj÷{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÛ{ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjt|h]”hŒ Description”…”�”}”(hjv|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjr|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K{hjÛ{ubhë)�”}”(hŒbThis can be called to have access to URBs which are to be executed without bothering to track them”h]”hŒbThis can be called to have access to URBs which are to be executed without bothering to track them”…”�”}”(hjŠ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KzhjÛ{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_unanchor_urb (C function)”Œc.usb_unanchor_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ'void usb_unanchor_urb (struct urb *urb)”h]”j+)�”}”(hŒ&void usb_unanchor_urb(struct urb *urb)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¹|h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjµ|h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KŸubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ|h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjµ|h²hh³jÇ|h´KŸubj„)�”}”(hŒusb_unanchor_urb”h]”jŠ)�”}”(hŒusb_unanchor_urb”h]”hŒusb_unanchor_urb”…”�”}”(hjÚ|h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÖ|ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjµ|h²hh³jÇ|h´KŸubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjö|h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjò|ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjò|ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j}Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjÜ|sbŒc.usb_unanchor_urb”†”asbuh1hhjò|ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjò|ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjB}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjò|ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjO}h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjò|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjî|ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjµ|h²hh³jÇ|h´KŸubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj±|h²hh³jÇ|h´KŸubah}”(h]”j¬|ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÇ|h´KŸhj®|h²hubjü)�”}”(hhh]”hë)�”}”(hŒunanchors an URB”h]”hŒunanchors an URB”…”�”}”(hjy}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KŸhjv}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj®|h²hh³jÇ|h´KŸubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj‘}jj‘}j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒ‹**Parameters** ``struct urb *urb`` pointer to the urb to anchor **Description** Call this to stop the system keeping track of this URB”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj›}h]”hŒ Parameters”…”�”}”(hj�}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj™}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K£hj•}ubjD)�”}”(hhh]”jI)�”}”(hŒ1``struct urb *urb`` pointer to the urb to anchor ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjº}h]”hŒstruct urb *urb”…”�”}”(hj¼}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¸}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K hj´}ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the urb to anchor”h]”hŒpointer to the urb to anchor”…”�”}”(hjÓ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÏ}h´K hjÐ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj´}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÏ}h´K hj±}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj•}ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjõ}h]”hŒ Description”…”�”}”(hj÷}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjó}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K¢hj•}ubhë)�”}”(hŒ6Call this to stop the system keeping track of this URB”h]”hŒ6Call this to stop the system keeping track of this URB”…”�”}”(hj ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´K¡hj•}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ usb_pipe_type_check (C function)”Œc.usb_pipe_type_check”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒCint usb_pipe_type_check (struct usb_device *dev, unsigned int pipe)”h]”j+)�”}”(hŒBint usb_pipe_type_check(struct usb_device *dev, unsigned int pipe)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj:~h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj6~h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÃubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj6~h²hh³jH~h´KÃubj„)�”}”(hŒusb_pipe_type_check”h]”jŠ)�”}”(hŒusb_pipe_type_check”h]”hŒusb_pipe_type_check”…”�”}”(hj[~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjW~ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj6~h²hh³jH~h´KÃubj¥)�”}”(hŒ+(struct usb_device *dev, unsigned int pipe)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjw~h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjs~ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjs~ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj•~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj’~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j—~Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj]~sbŒc.usb_pipe_type_check”†”asbuh1hhjs~ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjs~ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÃ~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjs~ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÐ~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjs~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjo~ubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjé~h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjå~ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjå~ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjå~ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjå~ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjå~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjo~ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj6~h²hh³jH~h´KÃubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj2~h²hh³jH~h´KÃubah}”(h]”j-~ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jH~h´KÃhj/~h²hubjü)�”}”(hhh]”hë)�”}”(hŒ0sanity check of a specific pipe for a usb device”h]”hŒ0sanity check of a specific pipe for a usb device”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÃhjHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj/~h²hh³jH~h´KÃubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjcjjcj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX:**Parameters** ``struct usb_device *dev`` struct usb_device to be checked ``unsigned int pipe`` pipe to check **Description** This performs a light-weight sanity check for the endpoint in the given usb device. It returns 0 if the pipe is valid for the specific usb device, otherwise a negative error code.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjmh]”hŒ Parameters”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÇhjgubjD)�”}”(hhh]”(jI)�”}”(hŒ;``struct usb_device *dev`` struct usb_device to be checked ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjŒh]”hŒstruct usb_device *dev”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÄhj†ubji)�”}”(hhh]”hë)�”}”(hŒstruct usb_device to be checked”h]”hŒstruct usb_device to be checked”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¡h´KÄhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¡h´KÄhjƒubjI)�”}”(hŒ$``unsigned int pipe`` pipe to check ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hjÅh]”hŒunsigned int pipe”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÅhj¿ubji)�”}”(hhh]”hë)�”}”(hŒ pipe to check”h]”hŒ pipe to check”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÚh´KÅhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÚh´KÅhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjgubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj€h]”hŒ Description”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÇhjgubhë)�”}”(hŒ´This performs a light-weight sanity check for the endpoint in the given usb device. It returns 0 if the pipe is valid for the specific usb device, otherwise a negative error code.”h]”hŒ´This performs a light-weight sanity check for the endpoint in the given usb device. It returns 0 if the pipe is valid for the specific usb device, otherwise a negative error code.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÆhjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_urb_ep_type_check (C function)”Œc.usb_urb_ep_type_check”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ1int usb_urb_ep_type_check (const struct urb *urb)”h]”j+)�”}”(hŒ0int usb_urb_ep_type_check(const struct urb *urb)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjE€h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjA€h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÙubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjA€h²hh³jS€h´KÙubj„)�”}”(hŒusb_urb_ep_type_check”h]”jŠ)�”}”(hŒusb_urb_ep_type_check”h]”hŒusb_urb_ep_type_check”…”�”}”(hjf€h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjb€ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjA€h²hh³jS€h´KÙubj¥)�”}”(hŒ(const struct urb *urb)”h]”j«)�”}”(hŒconst struct urb *urb”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj‚€h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj~€ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj~€ubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj~€ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj~€ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj»€h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¸€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j½€Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjh€sbŒc.usb_urb_ep_type_check”†”asbuh1hhj~€ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj~€ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjé€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj~€ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjö€h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj~€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjz€ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjA€h²hh³jS€h´KÙubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj=€h²hh³jS€h´KÙubah}”(h]”j8€ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jS€h´KÙhj:€h²hubjü)�”}”(hhh]”hë)�”}”(hŒ)sanity check of endpoint in the given urb”h]”hŒ)sanity check of endpoint in the given urb”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÙhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj:€h²hh³jS€h´KÙubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj8�jj8�j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒñ**Parameters** ``const struct urb *urb`` urb to be checked **Description** This performs a light-weight sanity check for the endpoint in the given urb. It returns 0 if the urb contains a valid endpoint, otherwise a negative error code.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjB�h]”hŒ Parameters”…”�”}”(hjD�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj@�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÝhj<�ubjD)�”}”(hhh]”jI)�”}”(hŒ,``const struct urb *urb`` urb to be checked ”h]”(jO)�”}”(hŒ``const struct urb *urb``”h]”jÑ)�”}”(hja�h]”hŒconst struct urb *urb”…”�”}”(hjc�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj_�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÚhj[�ubji)�”}”(hhh]”hë)�”}”(hŒurb to be checked”h]”hŒurb to be checked”…”�”}”(hjz�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jv�h´KÚhjw�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj[�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jv�h´KÚhjX�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj<�ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjœ�h]”hŒ Description”…”�”}”(hjž�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjš�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÜhj<�ubhë)�”}”(hŒ¡This performs a light-weight sanity check for the endpoint in the given urb. It returns 0 if the urb contains a valid endpoint, otherwise a negative error code.”h]”hŒ¡This performs a light-weight sanity check for the endpoint in the given urb. It returns 0 if the urb contains a valid endpoint, otherwise a negative error code.”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KÛhj<�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_submit_urb (C function)”Œc.usb_submit_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ5int usb_submit_urb (struct urb *urb, gfp_t mem_flags)”h]”j+)�”}”(hŒ4int usb_submit_urb(struct urb *urb, gfp_t mem_flags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjá�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÝ�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KçubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÝ�h²hh³jï�h´Kçubj„)�”}”(hŒusb_submit_urb”h]”jŠ)�”}”(hŒusb_submit_urb”h]”hŒusb_submit_urb”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjþ�ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÝ�h²hh³jï�h´Kçubj¥)�”}”(hŒ"(struct urb *urb, gfp_t mem_flags)”h]”(j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj‚ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+‚h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‚ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj<‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j>‚Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj‚sbŒc.usb_submit_urb”†”asbuh1hhj‚ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\‚h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‚ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj‚ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjw‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‚ubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj“‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j•‚Œmodname”NŒ classname”NjLjO)�”}”jR]”jX‚Œc.usb_submit_urb”†”asbuh1hhjŒ‚ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±‚h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŒ‚ubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hj¿‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŒ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÝ�h²hh³jï�h´Kçubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÙ�h²hh³jï�h´Kçubah}”(h]”jÔ�ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jï�h´KçhjÖ�h²hubjü)�”}”(hhh]”hë)�”}”(hŒ6issue an asynchronous transfer request for an endpoint”h]”hŒ6issue an asynchronous transfer request for an endpoint”…”�”}”(hjé‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kçhjæ‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÖ�h²hh³jï�h´Kçubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjƒjjƒj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX¦**Parameters** ``struct urb *urb`` pointer to the urb describing the request ``gfp_t mem_flags`` the type of memory to allocate, see kmalloc() for a list of valid options for this. **Description** This submits a transfer request, and transfers control of the URB describing that request to the USB subsystem. Request completion will be indicated later, asynchronously, by calling the completion handler. The three types of completion are success, error, and unlink (a software-induced fault, also called "request cancellation"). URBs may be submitted in interrupt context. The caller must have correctly initialized the URB before submitting it. Functions such as usb_fill_bulk_urb() and usb_fill_control_urb() are available to ensure that most fields are correctly initialized, for the particular kind of transfer, although they will not initialize any transfer flags. If the submission is successful, the complete() callback from the URB will be called exactly once, when the USB core and Host Controller Driver (HCD) are finished with the URB. When the completion function is called, control of the URB is returned to the device driver which issued the request. The completion handler may then immediately free or reuse that URB. The USB core makes no guarantees at all about the context in which the complete() callback is invoked. It may be in process context, interrupt context, BH context, or anything else. Also, local interrupts may be enabled or disabled. To deal with this, the callback routine must always use the _irqsave and _irqrestore variants of things like spin_lock(), and it must always use GFP_ATOMIC for its memory allocation flags. With few exceptions, USB device drivers should never access URB fields provided by usbcore or the HCD until its complete() is called. The exceptions relate to periodic transfer scheduling. For both interrupt and isochronous urbs, as part of successful URB submission urb->interval is modified to reflect the actual transfer period used (normally some power of two units). And for isochronous urbs, urb->start_frame is modified to reflect when the URB's transfers were scheduled to start. Not all isochronous transfer scheduling policies will work, but most host controller drivers should easily handle ISO queues going from now until 10-200 msec into the future. Drivers should try to keep at least one or two msec of data in the queue; many controllers require that new transfers start at least 1 msec in the future when they are added. If the driver is unable to keep up and the queue empties out, the behavior for new submissions is governed by the URB_ISO_ASAP flag. If the flag is set, or if the queue is idle, then the URB is always assigned to the first available (and not yet expired) slot in the endpoint's schedule. If the flag is not set and the queue is active then the URB is always assigned to the next slot in the schedule following the end of the endpoint's previous URB, even if that slot is in the past. When a packet is assigned in this way to a slot that has already expired, the packet is not transmitted and the corresponding usb_iso_packet_descriptor's status field will return -EXDEV. If this would happen to all the packets in the URB, submission fails with a -EXDEV error code. For control endpoints, the synchronous usb_control_msg() call is often used (in non-interrupt context) instead of this call. That is often used through convenience wrappers, for the requests that are standardized in the USB 2.0 specification. For bulk endpoints, a synchronous usb_bulk_msg() call is available. Request Queuing: URBs may be submitted to endpoints before previous ones complete, to minimize the impact of interrupt latencies and system overhead on data throughput. With that queuing policy, an endpoint's queue would never be empty. This is required for continuous isochronous data streams, and may also be required for some kinds of interrupt transfers. Such queuing also maximizes bandwidth utilization by letting USB controllers start work on later requests before driver software has finished the completion processing for earlier (successful) requests. As of Linux 2.6, all USB endpoint transfer queues support depths greater than one. This was previously a HCD-specific behavior, except for ISO transfers. Non-isochronous endpoint queues are inactive during cleanup after faults (transfer errors or cancellation). Reserved Bandwidth Transfers: Periodic transfers (interrupt or isochronous) are performed repeatedly, using the interval specified in the urb. Submitting the first urb to the endpoint reserves the bandwidth necessary to make those transfers. If the USB subsystem can't allocate sufficient bandwidth to perform the periodic request, submitting such a periodic request should fail. For devices under xHCI, the bandwidth is reserved at configuration time, or when the alt setting is selected. If there is not enough bus bandwidth, the configuration/alt setting request will fail. Therefore, submissions to periodic endpoints on devices under xHCI should never fail due to bandwidth constraints. Device drivers must explicitly request that repetition, by ensuring that some URB is always on the endpoint's queue (except possibly for short periods during completion callbacks). When there is no longer an urb queued, the endpoint's bandwidth reservation is canceled. This means drivers can use their completion handlers to ensure they keep bandwidth they need, by reinitializing and resubmitting the just-completed urb until the driver longer needs that periodic bandwidth. Memory Flags: The general rules for how to decide which mem_flags to use are the same as for kmalloc. There are four different possible values; GFP_KERNEL, GFP_NOFS, GFP_NOIO and GFP_ATOMIC. GFP_NOFS is not ever used, as it has not been implemented yet. GFP_ATOMIC is used when (a) you are inside a completion handler, an interrupt, bottom half, tasklet or timer, or (b) you are holding a spinlock or rwlock (does not apply to semaphores), or (c) current->state != TASK_RUNNING, this is the case only after you've changed it. GFP_NOIO is used in the block io path and error handling of storage devices. All other situations use GFP_KERNEL. Some more specific rules for mem_flags can be inferred, such as (1) start_xmit, timeout, and receive methods of network drivers must use GFP_ATOMIC (they are called with a spinlock held); (2) queuecommand methods of scsi drivers must use GFP_ATOMIC (also called with a spinlock held); (3) If you use a kernel thread with a network driver you must use GFP_NOIO, unless (b) or (c) apply; (4) after you have done a down() you can use GFP_KERNEL, unless (b) or (c) apply or your are in a storage driver's block io path; (5) USB probe and disconnect can use GFP_KERNEL unless (b) or (c) apply; and (6) changing firmware on a running storage or net device uses GFP_NOIO, unless b) or c) apply **Return** 0 on successful submissions. A negative error number otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj ƒh]”hŒ Parameters”…”�”}”(hj ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´KëhjƒubjD)�”}”(hhh]”(jI)�”}”(hŒ>``struct urb *urb`` pointer to the urb describing the request ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj*ƒh]”hŒstruct urb *urb”…”�”}”(hj,ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj(ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kèhj$ƒubji)�”}”(hhh]”hë)�”}”(hŒ)pointer to the urb describing the request”h]”hŒ)pointer to the urb describing the request”…”�”}”(hjCƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j?ƒh´Kèhj@ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj$ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j?ƒh´Kèhj!ƒubjI)�”}”(hŒh``gfp_t mem_flags`` the type of memory to allocate, see kmalloc() for a list of valid options for this. ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hjcƒh]”hŒgfp_t mem_flags”…”�”}”(hjeƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjaƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kêhj]ƒubji)�”}”(hhh]”hë)�”}”(hŒSthe type of memory to allocate, see kmalloc() for a list of valid options for this.”h]”hŒSthe type of memory to allocate, see kmalloc() for a list of valid options for this.”…”�”}”(hj|ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kéhjyƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj]ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jxƒh´Kêhj!ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjƒubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjŸƒh]”hŒ Description”…”�”}”(hj¡ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kìhjƒubhë)�”}”(hXLThis submits a transfer request, and transfers control of the URB describing that request to the USB subsystem. Request completion will be indicated later, asynchronously, by calling the completion handler. The three types of completion are success, error, and unlink (a software-induced fault, also called "request cancellation").”h]”hXPThis submits a transfer request, and transfers control of the URB describing that request to the USB subsystem. Request completion will be indicated later, asynchronously, by calling the completion handler. The three types of completion are success, error, and unlink (a software-induced fault, also called “request cancellationâ€�).”…”�”}”(hjµƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Këhjƒubhë)�”}”(hŒ+URBs may be submitted in interrupt context.”h]”hŒ+URBs may be submitted in interrupt context.”…”�”}”(hjăh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kñhjƒubhë)�”}”(hX)The caller must have correctly initialized the URB before submitting it. Functions such as usb_fill_bulk_urb() and usb_fill_control_urb() are available to ensure that most fields are correctly initialized, for the particular kind of transfer, although they will not initialize any transfer flags.”h]”hX)The caller must have correctly initialized the URB before submitting it. Functions such as usb_fill_bulk_urb() and usb_fill_control_urb() are available to ensure that most fields are correctly initialized, for the particular kind of transfer, although they will not initialize any transfer flags.”…”�”}”(hjÓƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kóhjƒubhë)�”}”(hXlIf the submission is successful, the complete() callback from the URB will be called exactly once, when the USB core and Host Controller Driver (HCD) are finished with the URB. When the completion function is called, control of the URB is returned to the device driver which issued the request. The completion handler may then immediately free or reuse that URB.”h]”hXlIf the submission is successful, the complete() callback from the URB will be called exactly once, when the USB core and Host Controller Driver (HCD) are finished with the URB. When the completion function is called, control of the URB is returned to the device driver which issued the request. The completion handler may then immediately free or reuse that URB.”…”�”}”(hjâƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Kùhjƒubhë)�”}”(hX¨The USB core makes no guarantees at all about the context in which the complete() callback is invoked. It may be in process context, interrupt context, BH context, or anything else. Also, local interrupts may be enabled or disabled. To deal with this, the callback routine must always use the _irqsave and _irqrestore variants of things like spin_lock(), and it must always use GFP_ATOMIC for its memory allocation flags.”h]”hX¨The USB core makes no guarantees at all about the context in which the complete() callback is invoked. It may be in process context, interrupt context, BH context, or anything else. Also, local interrupts may be enabled or disabled. To deal with this, the callback routine must always use the _irqsave and _irqrestore variants of things like spin_lock(), and it must always use GFP_ATOMIC for its memory allocation flags.”…”�”}”(hjñƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhjƒubhë)�”}”(hXéWith few exceptions, USB device drivers should never access URB fields provided by usbcore or the HCD until its complete() is called. The exceptions relate to periodic transfer scheduling. For both interrupt and isochronous urbs, as part of successful URB submission urb->interval is modified to reflect the actual transfer period used (normally some power of two units). And for isochronous urbs, urb->start_frame is modified to reflect when the URB's transfers were scheduled to start.”h]”hXëWith few exceptions, USB device drivers should never access URB fields provided by usbcore or the HCD until its complete() is called. The exceptions relate to periodic transfer scheduling. For both interrupt and isochronous urbs, as part of successful URB submission urb->interval is modified to reflect the actual transfer period used (normally some power of two units). And for isochronous urbs, urb->start_frame is modified to reflect when the URB’s transfers were scheduled to start.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhjƒubhë)�”}”(hX`Not all isochronous transfer scheduling policies will work, but most host controller drivers should easily handle ISO queues going from now until 10-200 msec into the future. Drivers should try to keep at least one or two msec of data in the queue; many controllers require that new transfers start at least 1 msec in the future when they are added. If the driver is unable to keep up and the queue empties out, the behavior for new submissions is governed by the URB_ISO_ASAP flag. If the flag is set, or if the queue is idle, then the URB is always assigned to the first available (and not yet expired) slot in the endpoint's schedule. If the flag is not set and the queue is active then the URB is always assigned to the next slot in the schedule following the end of the endpoint's previous URB, even if that slot is in the past. When a packet is assigned in this way to a slot that has already expired, the packet is not transmitted and the corresponding usb_iso_packet_descriptor's status field will return -EXDEV. If this would happen to all the packets in the URB, submission fails with a -EXDEV error code.”h]”hXfNot all isochronous transfer scheduling policies will work, but most host controller drivers should easily handle ISO queues going from now until 10-200 msec into the future. Drivers should try to keep at least one or two msec of data in the queue; many controllers require that new transfers start at least 1 msec in the future when they are added. If the driver is unable to keep up and the queue empties out, the behavior for new submissions is governed by the URB_ISO_ASAP flag. If the flag is set, or if the queue is idle, then the URB is always assigned to the first available (and not yet expired) slot in the endpoint’s schedule. If the flag is not set and the queue is active then the URB is always assigned to the next slot in the schedule following the end of the endpoint’s previous URB, even if that slot is in the past. When a packet is assigned in this way to a slot that has already expired, the packet is not transmitted and the corresponding usb_iso_packet_descriptor’s status field will return -EXDEV. If this would happen to all the packets in the URB, submission fails with a -EXDEV error code.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhjƒubhë)�”}”(hX7For control endpoints, the synchronous usb_control_msg() call is often used (in non-interrupt context) instead of this call. That is often used through convenience wrappers, for the requests that are standardized in the USB 2.0 specification. For bulk endpoints, a synchronous usb_bulk_msg() call is available.”h]”hX7For control endpoints, the synchronous usb_control_msg() call is often used (in non-interrupt context) instead of this call. That is often used through convenience wrappers, for the requests that are standardized in the USB 2.0 specification. For bulk endpoints, a synchronous usb_bulk_msg() call is available.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M#hjƒubhë)�”}”(hŒRequest Queuing:”h]”hŒRequest Queuing:”…”�”}”(hj-„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M*hjƒubhë)�”}”(hX"URBs may be submitted to endpoints before previous ones complete, to minimize the impact of interrupt latencies and system overhead on data throughput. With that queuing policy, an endpoint's queue would never be empty. This is required for continuous isochronous data streams, and may also be required for some kinds of interrupt transfers. Such queuing also maximizes bandwidth utilization by letting USB controllers start work on later requests before driver software has finished the completion processing for earlier (successful) requests.”h]”hX$URBs may be submitted to endpoints before previous ones complete, to minimize the impact of interrupt latencies and system overhead on data throughput. With that queuing policy, an endpoint’s queue would never be empty. This is required for continuous isochronous data streams, and may also be required for some kinds of interrupt transfers. Such queuing also maximizes bandwidth utilization by letting USB controllers start work on later requests before driver software has finished the completion processing for earlier (successful) requests.”…”�”}”(hj<„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M,hjƒubhë)�”}”(hXAs of Linux 2.6, all USB endpoint transfer queues support depths greater than one. This was previously a HCD-specific behavior, except for ISO transfers. Non-isochronous endpoint queues are inactive during cleanup after faults (transfer errors or cancellation).”h]”hXAs of Linux 2.6, all USB endpoint transfer queues support depths greater than one. This was previously a HCD-specific behavior, except for ISO transfers. Non-isochronous endpoint queues are inactive during cleanup after faults (transfer errors or cancellation).”…”�”}”(hjK„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M5hjƒubhë)�”}”(hŒReserved Bandwidth Transfers:”h]”hŒReserved Bandwidth Transfers:”…”�”}”(hjZ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M:hjƒubhë)�”}”(hX^Periodic transfers (interrupt or isochronous) are performed repeatedly, using the interval specified in the urb. Submitting the first urb to the endpoint reserves the bandwidth necessary to make those transfers. If the USB subsystem can't allocate sufficient bandwidth to perform the periodic request, submitting such a periodic request should fail.”h]”hX`Periodic transfers (interrupt or isochronous) are performed repeatedly, using the interval specified in the urb. Submitting the first urb to the endpoint reserves the bandwidth necessary to make those transfers. If the USB subsystem can’t allocate sufficient bandwidth to perform the periodic request, submitting such a periodic request should fail.”…”�”}”(hji„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M<hjƒubhë)�”}”(hX9For devices under xHCI, the bandwidth is reserved at configuration time, or when the alt setting is selected. If there is not enough bus bandwidth, the configuration/alt setting request will fail. Therefore, submissions to periodic endpoints on devices under xHCI should never fail due to bandwidth constraints.”h]”hX9For devices under xHCI, the bandwidth is reserved at configuration time, or when the alt setting is selected. If there is not enough bus bandwidth, the configuration/alt setting request will fail. Therefore, submissions to periodic endpoints on devices under xHCI should never fail due to bandwidth constraints.”…”�”}”(hjx„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MBhjƒubhë)�”}”(hXÞDevice drivers must explicitly request that repetition, by ensuring that some URB is always on the endpoint's queue (except possibly for short periods during completion callbacks). When there is no longer an urb queued, the endpoint's bandwidth reservation is canceled. This means drivers can use their completion handlers to ensure they keep bandwidth they need, by reinitializing and resubmitting the just-completed urb until the driver longer needs that periodic bandwidth.”h]”hXâDevice drivers must explicitly request that repetition, by ensuring that some URB is always on the endpoint’s queue (except possibly for short periods during completion callbacks). When there is no longer an urb queued, the endpoint’s bandwidth reservation is canceled. This means drivers can use their completion handlers to ensure they keep bandwidth they need, by reinitializing and resubmitting the just-completed urb until the driver longer needs that periodic bandwidth.”…”�”}”(hj‡„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MHhjƒubhë)�”}”(hŒ Memory Flags:”h]”hŒ Memory Flags:”…”�”}”(hj–„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”•h´MPhjƒubhë)�”}”(hŒ±The general rules for how to decide which mem_flags to use are the same as for kmalloc. There are four different possible values; GFP_KERNEL, GFP_NOFS, GFP_NOIO and GFP_ATOMIC.”h]”hŒ±The general rules for how to decide which mem_flags to use are the same as for kmalloc. There are four different possible values; GFP_KERNEL, GFP_NOFS, GFP_NOIO and GFP_ATOMIC.”…”�”}”(hj¥„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MRhjƒubhë)�”}”(hŒ>GFP_NOFS is not ever used, as it has not been implemented yet.”h]”hŒ>GFP_NOFS is not ever used, as it has not been implemented yet.”…”�”}”(hj´„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MWhjƒubjD)�”}”(hhh]”jI)�”}”(hXGFP_ATOMIC is used when (a) you are inside a completion handler, an interrupt, bottom half, tasklet or timer, or (b) you are holding a spinlock or rwlock (does not apply to semaphores), or (c) current->state != TASK_RUNNING, this is the case only after you've changed it. ”h]”(jO)�”}”(hŒGFP_ATOMIC is used when”h]”hŒGFP_ATOMIC is used when”…”�”}”(hjÊ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M_hjÆ„ubji)�”}”(hhh]”hŒenumerated_list”“”)�”}”(hhh]”(j»)�”}”(hŒTyou are inside a completion handler, an interrupt, bottom half, tasklet or timer, or”h]”hë)�”}”(hŒTyou are inside a completion handler, an interrupt, bottom half, tasklet or timer, or”h]”hŒTyou are inside a completion handler, an interrupt, bottom half, tasklet or timer, or”…”�”}”(hjå„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MZhjá„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÞ„ubj»)�”}”(hŒGyou are holding a spinlock or rwlock (does not apply to semaphores), or”h]”hë)�”}”(hŒGyou are holding a spinlock or rwlock (does not apply to semaphores), or”h]”hŒGyou are holding a spinlock or rwlock (does not apply to semaphores), or”…”�”}”(hjþ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M\hjú„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÞ„ubj»)�”}”(hŒOcurrent->state != TASK_RUNNING, this is the case only after you've changed it. ”h]”hë)�”}”(hŒNcurrent->state != TASK_RUNNING, this is the case only after you've changed it.”h]”hŒPcurrent->state != TASK_RUNNING, this is the case only after you’ve changed it.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M^hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÞ„ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œ loweralpha”Œprefix”Œ(”Œsuffix”Œ)”uh1jÜ„hjÙ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÆ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jØ„h´M_hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjƒubhë)�”}”(hŒLGFP_NOIO is used in the block io path and error handling of storage devices.”h]”hŒLGFP_NOIO is used in the block io path and error handling of storage devices.”…”�”}”(hjJ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mahjƒubhë)�”}”(hŒ$All other situations use GFP_KERNEL.”h]”hŒ$All other situations use GFP_KERNEL.”…”�”}”(hjY…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MdhjƒubjD)�”}”(hhh]”jI)�”}”(hXÃSome more specific rules for mem_flags can be inferred, such as (1) start_xmit, timeout, and receive methods of network drivers must use GFP_ATOMIC (they are called with a spinlock held); (2) queuecommand methods of scsi drivers must use GFP_ATOMIC (also called with a spinlock held); (3) If you use a kernel thread with a network driver you must use GFP_NOIO, unless (b) or (c) apply; (4) after you have done a down() you can use GFP_KERNEL, unless (b) or (c) apply or your are in a storage driver's block io path; (5) USB probe and disconnect can use GFP_KERNEL unless (b) or (c) apply; and (6) changing firmware on a running storage or net device uses GFP_NOIO, unless b) or c) apply ”h]”(jO)�”}”(hŒ?Some more specific rules for mem_flags can be inferred, such as”h]”hŒ?Some more specific rules for mem_flags can be inferred, such as”…”�”}”(hjo…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mqhjk…ubji)�”}”(hhh]”jÝ„)�”}”(hhh]”(j»)�”}”(hŒwstart_xmit, timeout, and receive methods of network drivers must use GFP_ATOMIC (they are called with a spinlock held);”h]”hë)�”}”(hŒwstart_xmit, timeout, and receive methods of network drivers must use GFP_ATOMIC (they are called with a spinlock held);”h]”hŒwstart_xmit, timeout, and receive methods of network drivers must use GFP_ATOMIC (they are called with a spinlock held);”…”�”}”(hjˆ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mghj„…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubj»)�”}”(hŒ\queuecommand methods of scsi drivers must use GFP_ATOMIC (also called with a spinlock held);”h]”hë)�”}”(hŒ\queuecommand methods of scsi drivers must use GFP_ATOMIC (also called with a spinlock held);”h]”hŒ\queuecommand methods of scsi drivers must use GFP_ATOMIC (also called with a spinlock held);”…”�”}”(hj¡…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mihj�…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubj»)�”}”(hŒ`If you use a kernel thread with a network driver you must use GFP_NOIO, unless (b) or (c) apply;”h]”hë)�”}”(hŒ`If you use a kernel thread with a network driver you must use GFP_NOIO, unless (b) or (c) apply;”h]”hŒ`If you use a kernel thread with a network driver you must use GFP_NOIO, unless (b) or (c) apply;”…”�”}”(hjº…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mkhj¶…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubj»)�”}”(hŒ}after you have done a down() you can use GFP_KERNEL, unless (b) or (c) apply or your are in a storage driver's block io path;”h]”hë)�”}”(hŒ}after you have done a down() you can use GFP_KERNEL, unless (b) or (c) apply or your are in a storage driver's block io path;”h]”hŒafter you have done a down() you can use GFP_KERNEL, unless (b) or (c) apply or your are in a storage driver’s block io path;”…”�”}”(hjÓ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MmhjÏ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubj»)�”}”(hŒHUSB probe and disconnect can use GFP_KERNEL unless (b) or (c) apply; and”h]”hë)�”}”(hjê…h]”hŒHUSB probe and disconnect can use GFP_KERNEL unless (b) or (c) apply; and”…”�”}”(hjì…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mohjè…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubj»)�”}”(hŒZchanging firmware on a running storage or net device uses GFP_NOIO, unless b) or c) apply ”h]”hë)�”}”(hŒYchanging firmware on a running storage or net device uses GFP_NOIO, unless b) or c) apply”h]”hŒYchanging firmware on a running storage or net device uses GFP_NOIO, unless b) or c) apply”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mphj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj�…ubeh}”(h]”h ]”h"]”h$]”h&]”j2…Œarabic”j4…j5…j6…j7…uh1jÜ„hj~…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjk…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j}…h´Mqhjh…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjƒubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj4†h]”hŒReturn”…”�”}”(hj6†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj2†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mshjƒubhë)�”}”(hŒ?0 on successful submissions. A negative error number otherwise.”h]”hŒ?0 on successful submissions. A negative error number otherwise.”…”�”}”(hjJ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M*hjƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_unlink_urb (C function)”Œc.usb_unlink_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ$int usb_unlink_urb (struct urb *urb)”h]”j+)�”}”(hŒ#int usb_unlink_urb(struct urb *urb)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjy†h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShju†h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MYubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ†h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhju†h²hh³j‡†h´MYubj„)�”}”(hŒusb_unlink_urb”h]”jŠ)�”}”(hŒusb_unlink_urb”h]”hŒusb_unlink_urb”…”�”}”(hjš†h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj–†ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhju†h²hh³j‡†h´MYubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¶†h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj²†ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj²†ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjÔ†h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjцubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÖ†Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjœ†sbŒc.usb_unlink_urb”†”asbuh1hhj²†ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô†h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj²†ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj²†ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj²†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj®†ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hju†h²hh³j‡†h´MYubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjq†h²hh³j‡†h´MYubah}”(h]”jl†ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‡†h´MYhjn†h²hubjü)�”}”(hhh]”hë)�”}”(hŒ/abort/cancel a transfer request for an endpoint”h]”hŒ/abort/cancel a transfer request for an endpoint”…”�”}”(hj9‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MYhj6‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjn†h²hh³j‡†h´MYubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjQ‡jjQ‡j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct urb *urb`` pointer to urb describing a previously submitted request, may be NULL **Description** This routine cancels an in-progress request. URBs complete only once per submission, and may be canceled only once per submission. Successful cancellation means termination of **urb** will be expedited and the completion handler will be called with a status code indicating that the request has been canceled (rather than any other code). Drivers should not call this routine or related routines, such as usb_kill_urb(), after their disconnect method has returned. The disconnect function should synchronize with a driver's I/O routines to insure that all URB-related activity has completed before it returns. This request is asynchronous, however the HCD might call the ->complete() callback during unlink. Therefore when drivers call usb_unlink_urb(), they must not hold any locks that may be taken by the completion function. Success is indicated by returning -EINPROGRESS, at which time the URB will probably not yet have been given back to the device driver. When it is eventually called, the completion function will see **urb->status** == -ECONNRESET. Failure is indicated by usb_unlink_urb() returning any other value. Unlinking will fail when **urb** is not currently "linked" (i.e., it was never submitted, or it was unlinked before, or the hardware is already finished with it), even if the completion handler has not yet run. The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB. Unlinking and Endpoint Queues: [The behaviors and guarantees described below do not apply to virtual root hubs but only to endpoint queues for physical USB devices.] Host Controller Drivers (HCDs) place all the URBs for a particular endpoint in a queue. Normally the queue advances as the controller hardware processes each request. But when an URB terminates with an error its queue generally stops (see below), at least until that URB's completion routine returns. It is guaranteed that a stopped queue will not restart until all its unlinked URBs have been fully retired, with their completion routines run, even if that's not until some time after the original completion handler returns. The same behavior and guarantee apply when an URB terminates because it was unlinked. Bulk and interrupt endpoint queues are guaranteed to stop whenever an URB terminates with any sort of error, including -ECONNRESET, -ENOENT, and -EREMOTEIO. Control endpoint queues behave the same way except that they are not guaranteed to stop for -EREMOTEIO errors. Queues for isochronous endpoints are treated differently, because they must advance at fixed rates. Such queues do not stop when an URB encounters an error or is unlinked. An unlinked isochronous URB may leave a gap in the stream of packets; it is undefined whether such gaps can be filled in. Note that early termination of an URB because a short packet was received will generate a -EREMOTEIO error if and only if the URB_SHORT_NOT_OK flag is set. By setting this flag, USB device drivers can build deep queues for large or complex bulk transfers and clean them up reliably after any sort of aborted transfer by unlinking all pending URBs at the first fault. When a control URB terminates with an error other than -EREMOTEIO, it is quite likely that the status stage of the transfer will not take place. **Return** -EINPROGRESS on success. See description for other values on failure.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj[‡h]”hŒ Parameters”…”�”}”(hj]‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjY‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M]hjU‡ubjD)�”}”(hhh]”jI)�”}”(hŒZ``struct urb *urb`` pointer to urb describing a previously submitted request, may be NULL ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjz‡h]”hŒstruct urb *urb”…”�”}”(hj|‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjx‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M[hjt‡ubji)�”}”(hhh]”hë)�”}”(hŒEpointer to urb describing a previously submitted request, may be NULL”h]”hŒEpointer to urb describing a previously submitted request, may be NULL”…”�”}”(hj“‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MZhj�‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjt‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�‡h´M[hjq‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjU‡ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj¶‡h]”hŒ Description”…”�”}”(hj¸‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj´‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M]hjU‡ubhë)�”}”(hXSThis routine cancels an in-progress request. URBs complete only once per submission, and may be canceled only once per submission. Successful cancellation means termination of **urb** will be expedited and the completion handler will be called with a status code indicating that the request has been canceled (rather than any other code).”h]”(hŒ±This routine cancels an in-progress request. URBs complete only once per submission, and may be canceled only once per submission. Successful cancellation means termination of ”…”�”}”(hj̇h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hjÔ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj̇ubhŒ› will be expedited and the completion handler will be called with a status code indicating that the request has been canceled (rather than any other code).”…”�”}”(hj̇h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M\hjU‡ubhë)�”}”(hXDrivers should not call this routine or related routines, such as usb_kill_urb(), after their disconnect method has returned. The disconnect function should synchronize with a driver's I/O routines to insure that all URB-related activity has completed before it returns.”h]”hXDrivers should not call this routine or related routines, such as usb_kill_urb(), after their disconnect method has returned. The disconnect function should synchronize with a driver’s I/O routines to insure that all URB-related activity has completed before it returns.”…”�”}”(hjí‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MchjU‡ubhë)�”}”(hX×This request is asynchronous, however the HCD might call the ->complete() callback during unlink. Therefore when drivers call usb_unlink_urb(), they must not hold any locks that may be taken by the completion function. Success is indicated by returning -EINPROGRESS, at which time the URB will probably not yet have been given back to the device driver. When it is eventually called, the completion function will see **urb->status** == -ECONNRESET. Failure is indicated by usb_unlink_urb() returning any other value. Unlinking will fail when **urb** is not currently "linked" (i.e., it was never submitted, or it was unlinked before, or the hardware is already finished with it), even if the completion handler has not yet run.”h]”(hX¡This request is asynchronous, however the HCD might call the ->complete() callback during unlink. Therefore when drivers call usb_unlink_urb(), they must not hold any locks that may be taken by the completion function. Success is indicated by returning -EINPROGRESS, at which time the URB will probably not yet have been given back to the device driver. When it is eventually called, the completion function will see ”…”�”}”(hjü‡h²hh³Nh´Nubj.)�”}”(hŒ**urb->status**”h]”hŒ urb->status”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjü‡ubhŒn == -ECONNRESET. Failure is indicated by usb_unlink_urb() returning any other value. Unlinking will fail when ”…”�”}”(hjü‡h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjü‡ubhŒ¶ is not currently “linkedâ€� (i.e., it was never submitted, or it was unlinked before, or the hardware is already finished with it), even if the completion handler has not yet run.”…”�”}”(hjü‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MhhjU‡ubhë)�”}”(hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”h]”hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”…”�”}”(hj/ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MthjU‡ubhë)�”}”(hŒUnlinking and Endpoint Queues:”h]”hŒUnlinking and Endpoint Queues:”…”�”}”(hj>ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MyhjU‡ubhë)�”}”(hŒ†[The behaviors and guarantees described below do not apply to virtual root hubs but only to endpoint queues for physical USB devices.]”h]”hŒ†[The behaviors and guarantees described below do not apply to virtual root hubs but only to endpoint queues for physical USB devices.]”…”�”}”(hjMˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M{hjU‡ubhë)�”}”(hXhHost Controller Drivers (HCDs) place all the URBs for a particular endpoint in a queue. Normally the queue advances as the controller hardware processes each request. But when an URB terminates with an error its queue generally stops (see below), at least until that URB's completion routine returns. It is guaranteed that a stopped queue will not restart until all its unlinked URBs have been fully retired, with their completion routines run, even if that's not until some time after the original completion handler returns. The same behavior and guarantee apply when an URB terminates because it was unlinked.”h]”hXlHost Controller Drivers (HCDs) place all the URBs for a particular endpoint in a queue. Normally the queue advances as the controller hardware processes each request. But when an URB terminates with an error its queue generally stops (see below), at least until that URB’s completion routine returns. It is guaranteed that a stopped queue will not restart until all its unlinked URBs have been fully retired, with their completion routines run, even if that’s not until some time after the original completion handler returns. The same behavior and guarantee apply when an URB terminates because it was unlinked.”…”�”}”(hj\ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M~hjU‡ubhë)�”}”(hX5Bulk and interrupt endpoint queues are guaranteed to stop whenever an URB terminates with any sort of error, including -ECONNRESET, -ENOENT, and -EREMOTEIO. Control endpoint queues behave the same way except that they are not guaranteed to stop for -EREMOTEIO errors. Queues for isochronous endpoints are treated differently, because they must advance at fixed rates. Such queues do not stop when an URB encounters an error or is unlinked. An unlinked isochronous URB may leave a gap in the stream of packets; it is undefined whether such gaps can be filled in.”h]”hX5Bulk and interrupt endpoint queues are guaranteed to stop whenever an URB terminates with any sort of error, including -ECONNRESET, -ENOENT, and -EREMOTEIO. Control endpoint queues behave the same way except that they are not guaranteed to stop for -EREMOTEIO errors. Queues for isochronous endpoints are treated differently, because they must advance at fixed rates. Such queues do not stop when an URB encounters an error or is unlinked. An unlinked isochronous URB may leave a gap in the stream of packets; it is undefined whether such gaps can be filled in.”…”�”}”(hjkˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MˆhjU‡ubhë)�”}”(hXoNote that early termination of an URB because a short packet was received will generate a -EREMOTEIO error if and only if the URB_SHORT_NOT_OK flag is set. By setting this flag, USB device drivers can build deep queues for large or complex bulk transfers and clean them up reliably after any sort of aborted transfer by unlinking all pending URBs at the first fault.”h]”hXoNote that early termination of an URB because a short packet was received will generate a -EREMOTEIO error if and only if the URB_SHORT_NOT_OK flag is set. By setting this flag, USB device drivers can build deep queues for large or complex bulk transfers and clean them up reliably after any sort of aborted transfer by unlinking all pending URBs at the first fault.”…”�”}”(hjzˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M’hjU‡ubhë)�”}”(hŒ�When a control URB terminates with an error other than -EREMOTEIO, it is quite likely that the status stage of the transfer will not take place.”h]”hŒ�When a control URB terminates with an error other than -EREMOTEIO, it is quite likely that the status stage of the transfer will not take place.”…”�”}”(hj‰ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M™hjU‡ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjšˆh]”hŒReturn”…”�”}”(hjœˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj˜ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M�hjU‡ubhë)�”}”(hŒE-EINPROGRESS on success. See description for other values on failure.”h]”hŒE-EINPROGRESS on success. See description for other values on failure.”…”�”}”(hj°ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MyhjU‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_kill_urb (C function)”Œc.usb_kill_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ#void usb_kill_urb (struct urb *urb)”h]”j+)�”}”(hŒ"void usb_kill_urb(struct urb *urb)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj߈h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÛˆh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M­ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîˆh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÛˆh²hh³jíˆh´M­ubj„)�”}”(hŒ usb_kill_urb”h]”jŠ)�”}”(hŒ usb_kill_urb”h]”hŒ usb_kill_urb”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjüˆubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÛˆh²hh³jíˆh´M­ubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj‰ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)‰h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‰ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj:‰h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj7‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j<‰Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj‰sbŒc.usb_kill_urb”†”asbuh1hhj‰ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ‰h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‰ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj‰ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hju‰h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‰ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÛˆh²hh³jíˆh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj׈h²hh³jíˆh´M­ubah}”(h]”jÒˆah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jíˆh´M­hjÔˆh²hubjü)�”}”(hhh]”hë)�”}”(hŒ3cancel a transfer request and wait for it to finish”h]”hŒ3cancel a transfer request and wait for it to finish”…”�”}”(hjŸ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M­hjœ‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÔˆh²hh³jíˆh´M­ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj·‰jj·‰j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX§**Parameters** ``struct urb *urb`` pointer to URB describing a previously submitted request, may be NULL **Description** This routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and available for reuse. These features make this an ideal way to stop I/O in a disconnect() callback or close() function. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT. While the routine is running, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle. The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB. This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can't schedule(). This routine should not be called by a driver after its disconnect method has returned.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÁ‰h]”hŒ Parameters”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¿‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M±hj»‰ubjD)�”}”(hhh]”jI)�”}”(hŒZ``struct urb *urb`` pointer to URB describing a previously submitted request, may be NULL ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjà‰h]”hŒstruct urb *urb”…”�”}”(hjâ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÞ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M¯hjÚ‰ubji)�”}”(hhh]”hë)�”}”(hŒEpointer to URB describing a previously submitted request, may be NULL”h]”hŒEpointer to URB describing a previously submitted request, may be NULL”…”�”}”(hjù‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M®hjö‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÚ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jõ‰h´M¯hj׉ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj»‰ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjŠh]”hŒ Description”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M±hj»‰ubhë)�”}”(hX‰This routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and available for reuse. These features make this an ideal way to stop I/O in a disconnect() callback or close() function. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT.”h]”hX‰This routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and available for reuse. These features make this an ideal way to stop I/O in a disconnect() callback or close() function. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT.”…”�”}”(hj2Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M°hj»‰ubhë)�”}”(hŒÎWhile the routine is running, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle.”h]”hŒÐWhile the routine is running, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB’s completion handler always tries to resubmit, it will not succeed and the URB will become idle.”…”�”}”(hjAŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M·hj»‰ubhë)�”}”(hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”h]”hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”…”�”}”(hjPŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M»hj»‰ubhë)�”}”(hŒ»This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can't schedule().”h]”hŒ½This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can’t schedule().”…”�”}”(hj_Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M¿hj»‰ubhë)�”}”(hŒWThis routine should not be called by a driver after its disconnect method has returned.”h]”hŒWThis routine should not be called by a driver after its disconnect method has returned.”…”�”}”(hjnŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÃhj»‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_poison_urb (C function)”Œc.usb_poison_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ%void usb_poison_urb (struct urb *urb)”h]”j+)�”}”(hŒ$void usb_poison_urb(struct urb *urb)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�Šh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™Šh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÜubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Šh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™Šh²hh³j«Šh´MÜubj„)�”}”(hŒusb_poison_urb”h]”jŠ)�”}”(hŒusb_poison_urb”h]”hŒusb_poison_urb”…”�”}”(hj¾Šh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjºŠubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj™Šh²hh³j«Šh´MÜubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÚŠh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÖŠubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçŠh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÖŠubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjøŠh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjõŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”júŠŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjÀŠsbŒc.usb_poison_urb”†”asbuh1hhjÖŠubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÖŠubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj&‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÖŠubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj3‹h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÖŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÒŠubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj™Šh²hh³j«Šh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj•Šh²hh³j«Šh´MÜubah}”(h]”j�Šah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j«Šh´MÜhj’Šh²hubjü)�”}”(hhh]”hë)�”}”(hŒ:reliably kill a transfer and prevent further use of an URB”h]”hŒ:reliably kill a transfer and prevent further use of an URB”…”�”}”(hj]‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÜhjZ‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj’Šh²hh³j«Šh´MÜubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjju‹jju‹j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX“**Parameters** ``struct urb *urb`` pointer to URB describing a previously submitted request, may be NULL **Description** This routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and cannot be reused. These features make this an ideal way to stop I/O in a disconnect() callback. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT. After and while the routine runs, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle. The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB. This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can't schedule(). This routine should not be called by a driver after its disconnect method has returned.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj‹h]”hŒ Parameters”…”�”}”(hj�‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj}‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Màhjy‹ubjD)�”}”(hhh]”jI)�”}”(hŒZ``struct urb *urb`` pointer to URB describing a previously submitted request, may be NULL ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjž‹h]”hŒstruct urb *urb”…”�”}”(hj ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjœ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÞhj˜‹ubji)�”}”(hhh]”hë)�”}”(hŒEpointer to URB describing a previously submitted request, may be NULL”h]”hŒEpointer to URB describing a previously submitted request, may be NULL”…”�”}”(hj·‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÝhj´‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj˜‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j³‹h´MÞhj•‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjy‹ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÚ‹h]”hŒ Description”…”�”}”(hjÜ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjØ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Màhjy‹ubhë)�”}”(hXqThis routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and cannot be reused. These features make this an ideal way to stop I/O in a disconnect() callback. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT.”h]”hXqThis routine cancels an in-progress request. It is guaranteed that upon return all completion handlers will have finished and the URB will be totally idle and cannot be reused. These features make this an ideal way to stop I/O in a disconnect() callback. If the request has not already finished or been unlinked the completion handler will see urb->status == -ENOENT.”…”�”}”(hjð‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mßhjy‹ubhë)�”}”(hŒÒAfter and while the routine runs, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle.”h]”hŒÔAfter and while the routine runs, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB’s completion handler always tries to resubmit, it will not succeed and the URB will become idle.”…”�”}”(hjÿ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mæhjy‹ubhë)�”}”(hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”h]”hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mêhjy‹ubhë)�”}”(hŒ»This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can't schedule().”h]”hŒ½This routine may not be used in an interrupt context (such as a bottom half or a completion handler), or when holding a spinlock, or in other situations where the caller can’t schedule().”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mîhjy‹ubhë)�”}”(hŒWThis routine should not be called by a driver after its disconnect method has returned.”h]”hŒWThis routine should not be called by a driver after its disconnect method has returned.”…”�”}”(hj,Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mòhjy‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_block_urb (C function)”Œc.usb_block_urb”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ$void usb_block_urb (struct urb *urb)”h]”j+)�”}”(hŒ#void usb_block_urb(struct urb *urb)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj[Œh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjWŒh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjŒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWŒh²hh³jiŒh´Mubj„)�”}”(hŒ usb_block_urb”h]”jŠ)�”}”(hŒ usb_block_urb”h]”hŒ usb_block_urb”…”�”}”(hj|Œh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjxŒubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjWŒh²hh³jiŒh´Mubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj˜Œh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj”ŒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Œh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj”Œubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj¶Œh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj³Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¸ŒŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj~ŒsbŒc.usb_block_urb”†”asbuh1hhj”ŒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖŒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj”Œubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjäŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj”ŒubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjñŒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�Œubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjWŒh²hh³jiŒh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjSŒh²hh³jiŒh´Mubah}”(h]”jNŒah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jiŒh´MhjPŒh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&reliably prevent further use of an URB”h]”hŒ&reliably prevent further use of an URB”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjPŒh²hh³jiŒh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj3�jj3�j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXå**Parameters** ``struct urb *urb`` pointer to URB to be blocked, may be NULL **Description** After the routine has run, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle. The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj=�h]”hŒ Parameters”…”�”}”(hj?�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj;�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhj7�ubjD)�”}”(hhh]”jI)�”}”(hŒ>``struct urb *urb`` pointer to URB to be blocked, may be NULL ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj\�h]”hŒstruct urb *urb”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjZ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MhjV�ubji)�”}”(hhh]”hë)�”}”(hŒ)pointer to URB to be blocked, may be NULL”h]”hŒ)pointer to URB to be blocked, may be NULL”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jq�h´Mhjr�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjV�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jq�h´MhjS�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj7�ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj—�h]”hŒ Description”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj•�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhj7�ubhë)�”}”(hŒËAfter the routine has run, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB's completion handler always tries to resubmit, it will not succeed and the URB will become idle.”h]”hŒÍAfter the routine has run, attempts to resubmit the URB will fail with error -EPERM. Thus even if the URB’s completion handler always tries to resubmit, it will not succeed and the URB will become idle.”…”�”}”(hj­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhj7�ubhë)�”}”(hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”h]”hŒ¶The URB must not be deallocated while this routine is running. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB.”…”�”}”(hj¼�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mhj7�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#usb_kill_anchored_urbs (C function)”Œc.usb_kill_anchored_urbs”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ7void usb_kill_anchored_urbs (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ6void usb_kill_anchored_urbs(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjë�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjç�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M*ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjç�h²hh³jù�h´M*ubj„)�”}”(hŒusb_kill_anchored_urbs”h]”jŠ)�”}”(hŒusb_kill_anchored_urbs”h]”hŒusb_kill_anchored_urbs”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŽubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjç�h²hh³jù�h´M*ubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj(Žh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj$ŽubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Žh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj$Žubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjFŽh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjCŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jHŽŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjŽsbŒc.usb_kill_anchored_urbs”†”asbuh1hhj$ŽubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfŽh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj$Žubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjtŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj$ŽubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj$Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj Žubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjç�h²hh³jù�h´M*ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjã�h²hh³jù�h´M*ubah}”(h]”jÞ�ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jù�h´M*hjà�h²hubjü)�”}”(hhh]”hë)�”}”(hŒ'kill all URBs associated with an anchor”h]”hŒ'kill all URBs associated with an anchor”…”�”}”(hj«Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M*hj¨Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjà�h²hh³jù�h´M*ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÃŽjjÃŽj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXh**Parameters** ``struct usb_anchor *anchor`` anchor the requests are bound to **Description** This kills all outstanding URBs starting from the back of the queue, with guarantee that no completer callbacks will take place from the anchor after this function returns. This routine should not be called by a driver after its disconnect method has returned.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÍŽh]”hŒ Parameters”…”�”}”(hjÏŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjËŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M.hjÇŽubjD)�”}”(hhh]”jI)�”}”(hŒ?``struct usb_anchor *anchor`` anchor the requests are bound to ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hjìŽh]”hŒstruct usb_anchor *anchor”…”�”}”(hjîŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjêŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M+hjæŽubji)�”}”(hhh]”hë)�”}”(hŒ anchor the requests are bound to”h]”hŒ anchor the requests are bound to”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�h´M+hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjæŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�h´M+hjãŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÇŽubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj'�h]”hŒ Description”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj%�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M-hjÇŽubhë)�”}”(hŒ¬This kills all outstanding URBs starting from the back of the queue, with guarantee that no completer callbacks will take place from the anchor after this function returns.”h]”hŒ¬This kills all outstanding URBs starting from the back of the queue, with guarantee that no completer callbacks will take place from the anchor after this function returns.”…”�”}”(hj=�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M,hjÇŽubhë)�”}”(hŒWThis routine should not be called by a driver after its disconnect method has returned.”h]”hŒWThis routine should not be called by a driver after its disconnect method has returned.”…”�”}”(hjL�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M0hjÇŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ%usb_poison_anchored_urbs (C function)”Œc.usb_poison_anchored_urbs”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ9void usb_poison_anchored_urbs (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ8void usb_poison_anchored_urbs(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjw�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MPubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjw�h²hh³j‰�h´MPubj„)�”}”(hŒusb_poison_anchored_urbs”h]”jŠ)�”}”(hŒusb_poison_anchored_urbs”h]”hŒusb_poison_anchored_urbs”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj˜�ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjw�h²hh³j‰�h´MPubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj´�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´�ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÓ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jØ�Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjž�sbŒc.usb_poison_anchored_urbs”†”asbuh1hhj´�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´�ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj´�ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj´�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°�ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjw�h²hh³j‰�h´MPubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjs�h²hh³j‰�h´MPubah}”(h]”jn�ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‰�h´MPhjp�h²hubjü)�”}”(hhh]”hë)�”}”(hŒ cease all traffic from an anchor”h]”hŒ cease all traffic from an anchor”…”�”}”(hj;�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MPhj8�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjp�h²hh³j‰�h´MPubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjS�jjS�j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX7**Parameters** ``struct usb_anchor *anchor`` anchor the requests are bound to **Description** this allows all outstanding URBs to be poisoned starting from the back of the queue. Newly added URBs will also be poisoned This routine should not be called by a driver after its disconnect method has returned.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj]�h]”hŒ Parameters”…”�”}”(hj_�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj[�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MThjW�ubjD)�”}”(hhh]”jI)�”}”(hŒ?``struct usb_anchor *anchor`` anchor the requests are bound to ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj|�h]”hŒstruct usb_anchor *anchor”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjz�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MQhjv�ubji)�”}”(hhh]”hë)�”}”(hŒ anchor the requests are bound to”h]”hŒ anchor the requests are bound to”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‘�h´MQhj’�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjv�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‘�h´MQhjs�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjW�ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj·�h]”hŒ Description”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjµ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MShjW�ubhë)�”}”(hŒ{this allows all outstanding URBs to be poisoned starting from the back of the queue. Newly added URBs will also be poisoned”h]”hŒ{this allows all outstanding URBs to be poisoned starting from the back of the queue. Newly added URBs will also be poisoned”…”�”}”(hjÍ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MRhjW�ubhë)�”}”(hŒWThis routine should not be called by a driver after its disconnect method has returned.”h]”hŒWThis routine should not be called by a driver after its disconnect method has returned.”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MVhjW�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_unpoison_anchored_urbs (C function)”Œc.usb_unpoison_anchored_urbs”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ;void usb_unpoison_anchored_urbs (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ:void usb_unpoison_anchored_urbs(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj ‘h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj‘h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MvubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‘h²hh³j‘h´Mvubj„)�”}”(hŒusb_unpoison_anchored_urbs”h]”jŠ)�”}”(hŒusb_unpoison_anchored_urbs”h]”hŒusb_unpoison_anchored_urbs”…”�”}”(hj,‘h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj(‘ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj‘h²hh³j‘h´Mvubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjH‘h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjD‘ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU‘h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjD‘ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjf‘h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjc‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jh‘Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj.‘sbŒc.usb_unpoison_anchored_urbs”†”asbuh1hhjD‘ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†‘h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjD‘ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj”‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjD‘ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj¡‘h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjD‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj@‘ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj‘h²hh³j‘h´Mvubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj‘h²hh³j‘h´Mvubah}”(h]”jþ�ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‘h´Mvhj‘h²hubjü)�”}”(hhh]”hë)�”}”(hŒ(let an anchor be used successfully again”h]”hŒ(let an anchor be used successfully again”…”�”}”(hjË‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MvhjÈ‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj‘h²hh³j‘h´Mvubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjã‘jjã‘j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒÃ**Parameters** ``struct usb_anchor *anchor`` anchor the requests are bound to **Description** Reverses the effect of usb_poison_anchored_urbs the anchor can be used normally after it returns”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjí‘h]”hŒ Parameters”…”�”}”(hjï‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjë‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mzhjç‘ubjD)�”}”(hhh]”jI)�”}”(hŒ?``struct usb_anchor *anchor`` anchor the requests are bound to ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj ’h]”hŒstruct usb_anchor *anchor”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mwhj’ubji)�”}”(hhh]”hë)�”}”(hŒ anchor the requests are bound to”h]”hŒ anchor the requests are bound to”…”�”}”(hj%’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j!’h´Mwhj"’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j!’h´Mwhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjç‘ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjG’h]”hŒ Description”…”�”}”(hjI’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjE’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Myhjç‘ubhë)�”}”(hŒ`Reverses the effect of usb_poison_anchored_urbs the anchor can be used normally after it returns”h]”hŒ`Reverses the effect of usb_poison_anchored_urbs the anchor can be used normally after it returns”…”�”}”(hj]’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mxhjç‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_anchor_suspend_wakeups (C function)”Œc.usb_anchor_suspend_wakeups”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ;void usb_anchor_suspend_wakeups (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ:void usb_anchor_suspend_wakeups(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŒ’h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjˆ’h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M‹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›’h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjˆ’h²hh³jš’h´M‹ubj„)�”}”(hŒusb_anchor_suspend_wakeups”h]”jŠ)�”}”(hŒusb_anchor_suspend_wakeups”h]”hŒusb_anchor_suspend_wakeups”…”�”}”(hj­’h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj©’ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjˆ’h²hh³jš’h´M‹ubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÉ’h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÅ’ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ’h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅ’ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjç’h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjä’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jé’Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj¯’sbŒc.usb_anchor_suspend_wakeups”†”asbuh1hhjÅ’ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅ’ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÅ’ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj"“h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÅ’ubeh}”(•[h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÁ’ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjˆ’h²hh³jš’h´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj„’h²hh³jš’h´M‹ubah}”(h]”j’ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jš’h´M‹hj�’h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhj�’h²hh³jš’h´M‹ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjU“jjU“j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX@**Parameters** ``struct usb_anchor *anchor`` the anchor you want to suspend wakeups on **Description** Call this to stop the last urb being unanchored from waking up any usb_wait_anchor_empty_timeout waiters. This is used in the hcd urb give- back path to delay waking up until after the completion handler has run.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj_“h]”hŒ Parameters”…”�”}”(hja“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj]“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M�hjY“ubjD)�”}”(hhh]”jI)�”}”(hŒH``struct usb_anchor *anchor`` the anchor you want to suspend wakeups on ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj~“h]”hŒstruct usb_anchor *anchor”…”�”}”(hj€“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj|“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MŒhjx“ubji)�”}”(hhh]”hë)�”}”(hŒ)the anchor you want to suspend wakeups on”h]”hŒ)the anchor you want to suspend wakeups on”…”�”}”(hj—“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j““h´MŒhj”“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjx“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j““h´MŒhju“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjY“ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj¹“h]”hŒ Description”…”�”}”(hj»“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj·“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MŽhjY“ubhë)�”}”(hŒÔCall this to stop the last urb being unanchored from waking up any usb_wait_anchor_empty_timeout waiters. This is used in the hcd urb give- back path to delay waking up until after the completion handler has run.”h]”hŒÔCall this to stop the last urb being unanchored from waking up any usb_wait_anchor_empty_timeout waiters. This is used in the hcd urb give- back path to delay waking up until after the completion handler has run.”…”�”}”(hjÏ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M�hjY“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_anchor_resume_wakeups (C function)”Œc.usb_anchor_resume_wakeups”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ:void usb_anchor_resume_wakeups (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ9void usb_anchor_resume_wakeups(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþ“h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjú“h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MšubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjú“h²hh³j ”h´Mšubj„)�”}”(hŒusb_anchor_resume_wakeups”h]”jŠ)�”}”(hŒusb_anchor_resume_wakeups”h]”hŒusb_anchor_resume_wakeups”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjú“h²hh³j ”h´Mšubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj;”h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj7”ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH”h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7”ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjY”h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjV”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j[”Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj!”sbŒc.usb_anchor_resume_wakeups”†”asbuh1hhj7”ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy”h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7”ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj‡”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj7”ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj””h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj7”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj3”ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjú“h²hh³j ”h´Mšubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjö“h²hh³j ”h´Mšubah}”(h]”jñ“ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j ”h´Mšhjó“h²hubjü)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jûhjó“h²hh³j ”h´Mšubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÇ”jjÇ”j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒä**Parameters** ``struct usb_anchor *anchor`` the anchor you want to resume wakeups on **Description** Allow usb_wait_anchor_empty_timeout waiters to be woken up again, and wake up any current waiters if the anchor is empty.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÑ”h]”hŒ Parameters”…”�”}”(hjÓ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÏ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MžhjË”ubjD)�”}”(hhh]”jI)�”}”(hŒG``struct usb_anchor *anchor`` the anchor you want to resume wakeups on ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hjð”h]”hŒstruct usb_anchor *anchor”…”�”}”(hjò”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjî”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M›hjê”ubji)�”}”(hhh]”hë)�”}”(hŒ(the anchor you want to resume wakeups on”h]”hŒ(the anchor you want to resume wakeups on”…”�”}”(hj •h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j•h´M›hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjê”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j•h´M›hjç”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjË”ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj+•h]”hŒ Description”…”�”}”(hj-•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj)•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M�hjË”ubhë)�”}”(hŒyAllow usb_wait_anchor_empty_timeout waiters to be woken up again, and wake up any current waiters if the anchor is empty.”h]”hŒyAllow usb_wait_anchor_empty_timeout waiters to be woken up again, and wake up any current waiters if the anchor is empty.”…”�”}”(hjA•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MœhjË”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_wait_anchor_empty_timeout (C function)”Œc.usb_wait_anchor_empty_timeout”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒSint usb_wait_anchor_empty_timeout (struct usb_anchor *anchor, unsigned int timeout)”h]”j+)�”}”(hŒRint usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, unsigned int timeout)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjp•h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjl•h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M¬ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjl•h²hh³j~•h´M¬ubj„)�”}”(hŒusb_wait_anchor_empty_timeout”h]”jŠ)�”}”(hŒusb_wait_anchor_empty_timeout”h]”hŒusb_wait_anchor_empty_timeout”…”�”}”(hj‘•h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�•ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjl•h²hh³j~•h´M¬ubj¥)�”}”(hŒ1(struct usb_anchor *anchor, unsigned int timeout)”h]”(j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj­•h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj©•ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº•h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj©•ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjË•h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÈ•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÍ•Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj“•sbŒc.usb_wait_anchor_empty_timeout”†”asbuh1hhj©•ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë•h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj©•ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjù•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj©•ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj©•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¥•ubj«)�”}”(hŒunsigned int timeout”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj–ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-–h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj–ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj;–h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj–ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI–h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj–ubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjW–h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¥•ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjl•h²hh³j~•h´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjh•h²hh³j~•h´M¬ubah}”(h]”jc•ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j~•h´M¬hje•h²hubjü)�”}”(hhh]”hë)�”}”(hŒwait for an anchor to be unused”h]”hŒwait for an anchor to be unused”…”�”}”(hj�–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M¬hj~–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhje•h²hh³j~•h´M¬ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj™–jj™–j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX;**Parameters** ``struct usb_anchor *anchor`` the anchor you want to become unused ``unsigned int timeout`` how long you are willing to wait in milliseconds **Description** Call this is you want to be sure all an anchor's URBs have finished **Return** Non-zero if the anchor became unused. Zero on timeout.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj£–h]”hŒ Parameters”…”�”}”(hj¥–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¡–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M°hj�–ubjD)�”}”(hhh]”(jI)�”}”(hŒC``struct usb_anchor *anchor`` the anchor you want to become unused ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj–h]”hŒstruct usb_anchor *anchor”…”�”}”(hjÄ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÀ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M­hj¼–ubji)�”}”(hhh]”hë)�”}”(hŒ$the anchor you want to become unused”h]”hŒ$the anchor you want to become unused”…”�”}”(hjÛ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j×–h´M­hjØ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¼–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j×–h´M­hj¹–ubjI)�”}”(hŒJ``unsigned int timeout`` how long you are willing to wait in milliseconds ”h]”(jO)�”}”(hŒ``unsigned int timeout``”h]”jÑ)�”}”(hjû–h]”hŒunsigned int timeout”…”�”}”(hjý–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjù–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M®hjõ–ubji)�”}”(hhh]”hë)�”}”(hŒ0how long you are willing to wait in milliseconds”h]”hŒ0how long you are willing to wait in milliseconds”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j—h´M®hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjõ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j—h´M®hj¹–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj�–ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj6—h]”hŒ Description”…”�”}”(hj8—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj4—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M°hj�–ubhë)�”}”(hŒCCall this is you want to be sure all an anchor's URBs have finished”h]”hŒECall this is you want to be sure all an anchor’s URBs have finished”…”�”}”(hjL—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M¯hj�–ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj]—h]”hŒReturn”…”�”}”(hj_—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj[—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M²hj�–ubhë)�”}”(hŒ6Non-zero if the anchor became unused. Zero on timeout.”h]”hŒ6Non-zero if the anchor became unused. Zero on timeout.”…”�”}”(hjs—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´M³hj�–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ usb_get_from_anchor (C function)”Œc.usb_get_from_anchor”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÄhj¹˜ubhë)�”}”(hŒYThe oldest urb from **anchor**, or ``NULL`` if **anchor** has no urbs associated with it.”h]”(hŒThe oldest urb from ”…”�”}”(hjV™h²hh³Nh´Nubj.)�”}”(hŒ **anchor**”h]”hŒanchor”…”�”}”(hj^™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjV™ubhŒ, or ”…”�”}”(hjV™h²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjp™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjV™ubhŒ if ”…”�”}”(hjV™h²hh³Nh´Nubj.)�”}”(hŒ **anchor**”h]”hŒanchor”…”�”}”(hj‚™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjV™ubhŒ has no urbs associated with it.”…”�”}”(hjV™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÅhj¹˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_scuttle_anchored_urbs (C function)”Œc.usb_scuttle_anchored_urbs”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ:void usb_scuttle_anchored_urbs (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ9void usb_scuttle_anchored_urbs(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj»™h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj·™h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÞubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ™h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj·™h²hh³jÉ™h´MÞubj„)�”}”(hŒusb_scuttle_anchored_urbs”h]”jŠ)�”}”(hŒusb_scuttle_anchored_urbs”h]”hŒusb_scuttle_anchored_urbs”…”�”}”(hjÜ™h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjØ™ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj·™h²hh³jÉ™h´MÞubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjø™h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjô™ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjô™ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jšŒmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHjÞ™sbŒc.usb_scuttle_anchored_urbs”†”asbuh1hhjô™ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6šh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjô™ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjDšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjô™ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hjQšh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjô™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð™ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj·™h²hh³jÉ™h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj³™h²hh³jÉ™h´MÞubah}”(h]”j®™ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÉ™h´MÞhj°™h²hubjü)�”}”(hhh]”hë)�”}”(hŒunanchor all an anchor's urbs”h]”hŒunanchor all an anchor’s urbs”…”�”}”(hj{šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MÞhjxšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj°™h²hh³jÉ™h´MÞubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj“šjj“šj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒ˜**Parameters** ``struct usb_anchor *anchor`` the anchor whose urbs you want to unanchor **Description** use this to get rid of all an anchor's urbs”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj�šh]”hŒ Parameters”…”�”}”(hjŸšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj›šubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mâhj—šubjD)�”}”(hhh]”jI)�”}”(hŒI``struct usb_anchor *anchor`` the anchor whose urbs you want to unanchor ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj¼šh]”hŒstruct usb_anchor *anchor”…”�”}”(hj¾šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjºšubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mßhj¶šubji)�”}”(hhh]”hë)�”}”(hŒ*the anchor whose urbs you want to unanchor”h]”hŒ*the anchor whose urbs you want to unanchor”…”�”}”(hjÕšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÑšh´MßhjÒšubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¶šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÑšh´Mßhj³šubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj—šubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj÷šh]”hŒ Description”…”�”}”(hjùšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjõšubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Máhj—šubhë)�”}”(hŒ+use this to get rid of all an anchor's urbs”h]”hŒ-use this to get rid of all an anchor’s urbs”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Màhj—šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒusb_anchor_empty (C function)”Œc.usb_anchor_empty”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ0int usb_anchor_empty (struct usb_anchor *anchor)”h]”j+)�”}”(hŒ/int usb_anchor_empty(struct usb_anchor *anchor)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj<›h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj8›h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MúubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK›h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj8›h²hh³jJ›h´Múubj„)�”}”(hŒusb_anchor_empty”h]”jŠ)�”}”(hŒusb_anchor_empty”h]”hŒusb_anchor_empty”…”�”}”(hj]›h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjY›ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj8›h²hh³jJ›h´Múubj¥)�”}”(hŒ(struct usb_anchor *anchor)”h]”j«)�”}”(hŒstruct usb_anchor *anchor”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjy›h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hju›ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†›h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhju›ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_anchor”h]”hŒ usb_anchor”…”�”}”(hj—›h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j™›Œmodname”NŒ classname”NjLjO)�”}”jR]”jU)�”}”jHj_›sbŒc.usb_anchor_empty”†”asbuh1hhju›ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·›h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhju›ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÅ›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhju›ubjŠ)�”}”(hŒanchor”h]”hŒanchor”…”�”}”(hjÒ›h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hju›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjq›ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj8›h²hh³jJ›h´Múubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj4›h²hh³jJ›h´Múubah}”(h]”j/›ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jJ›h´Múhj1›h²hubjü)�”}”(hhh]”hë)�”}”(hŒis an anchor empty”h]”hŒis an anchor empty”…”�”}”(hjü›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Múhjù›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj1›h²hh³jJ›h´Múubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjœjjœj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒ‰**Parameters** ``struct usb_anchor *anchor`` the anchor you want to query **Return** 1 if the anchor has no urbs associated with it.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjœh]”hŒ Parameters”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´MþhjœubjD)�”}”(hhh]”jI)�”}”(hŒ;``struct usb_anchor *anchor`` the anchor you want to query ”h]”(jO)�”}”(hŒ``struct usb_anchor *anchor``”h]”jÑ)�”}”(hj=œh]”hŒstruct usb_anchor *anchor”…”�”}”(hj?œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj;œubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mûhj7œubji)�”}”(hhh]”hë)�”}”(hŒthe anchor you want to query”h]”hŒthe anchor you want to query”…”�”}”(hjVœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jRœh´MûhjSœubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj7œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jRœh´Mûhj4œubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjœubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjxœh]”hŒReturn”…”�”}”(hjzœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjvœubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mýhjœubhë)�”}”(hŒ/1 if the anchor has no urbs associated with it.”h]”hŒ/1 if the anchor has no urbs associated with it.”…”�”}”(hjŽœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:161: ./drivers/usb/core/urb.c”h´Mýhjœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ%usb_core.usb_control_msg (C function)”Œc.usb_core.usb_control_msg”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒžint usb_control_msg (struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout)”h]”j+)�”}”(hŒ�int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj½œh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¹œh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌœh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¹œh²hh³jËœh´K}ubj„)�”}”(hŒusb_control_msg”h]”jŠ)�”}”(hŒusb_control_msg”h]”hŒusb_control_msg”…”�”}”(hjÞœh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚœubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj¹œh²hh³jËœh´K}ubj¥)�”}”(hŒŠ(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjúœh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjöœubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjöœubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j�Œmodname”NŒ classname”NjLjO)�”}”jR]”(jU)�”}”jHŒusb_core”sbN†”jU)�”}”jHjàœsbŒc.usb_core.usb_control_msg”†”esbuh1hhjöœubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjöœubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjöœubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjöœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjl�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjl�ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjŒ�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjl�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjl�ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj¨�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjl�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ __u8 request”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÁ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÆ�Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j8�Œc.usb_core.usb_control_msg”†”esbuh1hhj½�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj½�ubjŠ)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjñ�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj½�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ__u8 requesttype”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hj žh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jžŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j8�Œc.usb_core.usb_control_msg”†”esbuh1hhjžubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,žh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjžubjŠ)�”}”(hŒ requesttype”h]”hŒ requesttype”…”�”}”(hj:žh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ __u16 value”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hjVžh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjSžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jXžŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j8�Œc.usb_core.usb_control_msg”†”esbuh1hhjOžubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjužh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjOžubjŠ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjƒžh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjOžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ __u16 index”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hjŸžh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjœžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¡žŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j8�Œc.usb_core.usb_control_msg”†”esbuh1hhj˜žubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾žh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj˜žubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjÌžh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj˜žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjåžh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjážubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóžh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjážubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjážubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjážubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ __u16 size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hj*Ÿh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'Ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j,ŸŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j8�Œc.usb_core.usb_control_msg”†”esbuh1hhj#ŸubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIŸh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#ŸubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjWŸh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj#Ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjpŸh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjlŸubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Ÿh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjlŸubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjŒŸh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjlŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòœubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj¹œh²hh³jËœh´K}ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjµœh²hh³jËœh´K}ubah}”(h]”j°œah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jËœh´K}hj²œh²hubjü)�”}”(hhh]”hë)�”}”(hŒ;Builds a control urb, sends it off and waits for completion”h]”hŒ;Builds a control urb, sends it off and waits for completion”…”�”}”(hj¶Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K}hj³Ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj²œh²hh³jËœh´K}ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjΟjjΟj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXˆ**Parameters** ``struct usb_device *dev`` pointer to the usb device to send the message to ``unsigned int pipe`` endpoint "pipe" to send the message to ``__u8 request`` USB message request value ``__u8 requesttype`` USB message request type value ``__u16 value`` USB message value ``__u16 index`` USB message index value ``void *data`` pointer to the data to send ``__u16 size`` length in bytes of the data to send ``int timeout`` time in msecs to wait for the message to complete before timing out **Context** task context, might sleep. **Description** This function sends a simple control message to a specified endpoint and waits for the message to complete, or timeout. Don't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request. **Return** If successful, the number of bytes transferred. Otherwise, a negative error number.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjØŸh]”hŒ Parameters”…”�”}”(hjÚŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÖŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K�hjÒŸubjD)�”}”(hhh]”(jI)�”}”(hŒL``struct usb_device *dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj÷Ÿh]”hŒstruct usb_device *dev”…”�”}”(hjùŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjõŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K~hjñŸubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j  h´K~hj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjñŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j  h´K~hjîŸubjI)�”}”(hŒ=``unsigned int pipe`` endpoint "pipe" to send the message to ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hj0 h]”hŒunsigned int pipe”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj. ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Khj* ubji)�”}”(hhh]”hë)�”}”(hŒ&endpoint "pipe" to send the message to”h]”hŒ*endpoint “pipeâ€� to send the message to”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jE h´KhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj* ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jE h´KhjîŸubjI)�”}”(hŒ+``__u8 request`` USB message request value ”h]”(jO)�”}”(hŒ``__u8 request``”h]”jÑ)�”}”(hji h]”hŒ __u8 request”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K€hjc ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request value”h]”hŒUSB message request value”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j~ h´K€hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjc ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j~ h´K€hjîŸubjI)�”}”(hŒ4``__u8 requesttype`` USB message request type value ”h]”(jO)�”}”(hŒ``__u8 requesttype``”h]”jÑ)�”}”(hj¢ h]”hŒ__u8 requesttype”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K�hjœ ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request type value”h]”hŒUSB message request type value”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j· h´K�hj¸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjœ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j· h´K�hjîŸubjI)�”}”(hŒ"``__u16 value`` USB message value ”h]”(jO)�”}”(hŒ``__u16 value``”h]”jÑ)�”}”(hjÛ h]”hŒ __u16 value”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K‚hjÕ ubji)�”}”(hhh]”hë)�”}”(hŒUSB message value”h]”hŒUSB message value”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jð h´K‚hjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jð h´K‚hjîŸubjI)�”}”(hŒ(``__u16 index`` USB message index value ”h]”(jO)�”}”(hŒ``__u16 index``”h]”jÑ)�”}”(hj¡h]”hŒ __u16 index”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kƒhj¡ubji)�”}”(hhh]”hë)�”}”(hŒUSB message index value”h]”hŒUSB message index value”…”�”}”(hj-¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j)¡h´Kƒhj*¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j)¡h´KƒhjîŸubjI)�”}”(hŒ+``void *data`` pointer to the data to send ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hjM¡h]”hŒ void *data”…”�”}”(hjO¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjK¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K„hjG¡ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the data to send”h]”hŒpointer to the data to send”…”�”}”(hjf¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jb¡h´K„hjc¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjG¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jb¡h´K„hjîŸubjI)�”}”(hŒ3``__u16 size`` length in bytes of the data to send ”h]”(jO)�”}”(hŒ``__u16 size``”h]”jÑ)�”}”(hj†¡h]”hŒ __u16 size”…”�”}”(hjˆ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj„¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K…hj€¡ubji)�”}”(hhh]”hë)�”}”(hŒ#length in bytes of the data to send”h]”hŒ#length in bytes of the data to send”…”�”}”(hjŸ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j›¡h´K…hjœ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj€¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j›¡h´K…hjîŸubjI)�”}”(hŒT``int timeout`` time in msecs to wait for the message to complete before timing out ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hj¿¡h]”hŒ int timeout”…”�”}”(hjÁ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj½¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K†hj¹¡ubji)�”}”(hhh]”hë)�”}”(hŒCtime in msecs to wait for the message to complete before timing out”h]”hŒCtime in msecs to wait for the message to complete before timing out”…”�”}”(hjØ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÔ¡h´K†hjÕ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¹¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÔ¡h´K†hjîŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÒŸubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjú¡h]”hŒContext”…”�”}”(hjü¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjø¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KˆhjÒŸubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KˆhjÒŸubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj!¢h]”hŒ Description”…”�”}”(hj#¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KŠhjÒŸubhë)�”}”(hŒwThis function sends a simple control message to a specified endpoint and waits for the message to complete, or timeout.”h]”hŒwThis function sends a simple control message to a specified endpoint and waits for the message to complete, or timeout.”…”�”}”(hj7¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K‰hjÒŸubhë)�”}”(hXeDon't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.”h]”hXkDon’t use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don’t have a handle on the URB used, you can’t cancel the request.”…”�”}”(hjF¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KŒhjÒŸubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjW¢h]”hŒReturn”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjU¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K’hjÒŸubhë)�”}”(hŒSIf successful, the number of bytes transferred. Otherwise, a negative error number.”h]”hŒSIf successful, the number of bytes transferred. Otherwise, a negative error number.”…”�”}”(hjm¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K“hjÒŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_control_msg_send (C function)”Œc.usb_core.usb_control_msg_send”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ¼int usb_control_msg_send (struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, const void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”j+)�”}”(hŒ»int usb_control_msg_send(struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, const void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjœ¢h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj˜¢h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«¢h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj˜¢h²hh³jª¢h´K´ubj„)�”}”(hŒusb_control_msg_send”h]”jŠ)�”}”(hŒusb_control_msg_send”h]”hŒusb_control_msg_send”…”�”}”(hj½¢h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¹¢ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj˜¢h²hh³jª¢h´K´ubj¥)�”}”(hŒ£(struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, const void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÙ¢h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÕ¢ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ¢h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÕ¢ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj÷¢h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjô¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jù¢Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj¿¢sbŒc.usb_core.usb_control_msg_send”†”esbuh1hhjÕ¢ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÕ¢ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj&£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÕ¢ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj3£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÕ¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ __u8 endpoint”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjO£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjL£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jQ£Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhjH£ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn£h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjH£ubjŠ)�”}”(hŒendpoint”h]”hŒendpoint”…”�”}”(hj|£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjH£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ __u8 request”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hj˜£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj•£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jš£Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhj‘£ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·£h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‘£ubjŠ)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjÅ£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‘£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ__u8 requesttype”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjá£h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÞ£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j㣌modname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhjÚ£ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÚ£ubjŠ)�”}”(hŒ requesttype”h]”hŒ requesttype”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚ£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ __u16 value”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hj*¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j,¤Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhj#¤ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI¤h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#¤ubjŠ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjW¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj#¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ __u16 index”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hjs¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjp¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”ju¤Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhjl¤ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’¤h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjl¤ubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjl¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒconst void *driver_data”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj¹¤h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjµ¤ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƤh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjµ¤ubjT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔ¤h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjµ¤ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ¤h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjµ¤ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjð¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjµ¤ubjŠ)�”}”(hŒ driver_data”h]”hŒ driver_data”…”�”}”(hjý¤h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjµ¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ __u16 size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¥Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhj¥ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8¥h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¥ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjF¥h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj_¥h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj[¥ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm¥h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj[¥ubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hj{¥h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj[¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubj«)�”}”(hŒgfp_t memflags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj—¥h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j™¥Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j£Œc.usb_core.usb_control_msg_send”†”esbuh1hhj�¥ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶¥h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�¥ubjŠ)�”}”(hŒmemflags”h]”hŒmemflags”…”�”}”(hjÄ¥h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÑ¢ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj˜¢h²hh³jª¢h´K´ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj”¢h²hh³jª¢h´K´ubah}”(h]”j�¢ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jª¢h´K´hj‘¢h²hubjü)�”}”(hhh]”hë)�”}”(hŒFBuilds a control "send" message, sends it off and waits for completion”h]”hŒJBuilds a control “sendâ€� message, sends it off and waits for completion”…”�”}”(hjî¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K´hjë¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj‘¢h²hh³jª¢h´K´ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¦jj¦j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *dev`` pointer to the usb device to send the message to ``__u8 endpoint`` endpoint to send the message to ``__u8 request`` USB message request value ``__u8 requesttype`` USB message request type value ``__u16 value`` USB message value ``__u16 index`` USB message index value ``const void *driver_data`` pointer to the data to send ``__u16 size`` length in bytes of the data to send ``int timeout`` time in msecs to wait for the message to complete before timing out ``gfp_t memflags`` the flags for memory allocation for buffers **Context** !in_interrupt () **Description** This function sends a control message to a specified endpoint that is not expected to fill in a response (i.e. a "send message") and waits for the message to complete, or timeout. Do not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request. The data pointer can be made to a reference on the stack, or anywhere else, as it will not be modified at all. This does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device). **Return** If successful, 0 is returned, Otherwise, a negative error number.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¸hj ¦ubjD)�”}”(hhh]”(jI)�”}”(hŒL``struct usb_device *dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj/¦h]”hŒstruct usb_device *dev”…”�”}”(hj1¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj-¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kµhj)¦ubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hjH¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jD¦h´KµhjE¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj)¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jD¦h´Kµhj&¦ubjI)�”}”(hŒ2``__u8 endpoint`` endpoint to send the message to ”h]”(jO)�”}”(hŒ``__u8 endpoint``”h]”jÑ)�”}”(hjh¦h]”hŒ __u8 endpoint”…”�”}”(hjj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjf¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¶hjb¦ubji)�”}”(hhh]”hë)�”}”(hŒendpoint to send the message to”h]”hŒendpoint to send the message to”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j}¦h´K¶hj~¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjb¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j}¦h´K¶hj&¦ubjI)�”}”(hŒ+``__u8 request`` USB message request value ”h]”(jO)�”}”(hŒ``__u8 request``”h]”jÑ)�”}”(hj¡¦h]”hŒ __u8 request”…”�”}”(hj£¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŸ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K·hj›¦ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request value”h]”hŒUSB message request value”…”�”}”(hjº¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¶¦h´K·hj·¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj›¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¶¦h´K·hj&¦ubjI)�”}”(hŒ4``__u8 requesttype`` USB message request type value ”h]”(jO)�”}”(hŒ``__u8 requesttype``”h]”jÑ)�”}”(hjÚ¦h]”hŒ__u8 requesttype”…”�”}”(hjܦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjئubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¸hjÔ¦ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request type value”h]”hŒUSB message request type value”…”�”}”(hjó¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jï¦h´K¸hjð¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÔ¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jï¦h´K¸hj&¦ubjI)�”}”(hŒ"``__u16 value`` USB message value ”h]”(jO)�”}”(hŒ``__u16 value``”h]”jÑ)�”}”(hj§h]”hŒ __u16 value”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¹hj §ubji)�”}”(hhh]”hë)�”}”(hŒUSB message value”h]”hŒUSB message value”…”�”}”(hj,§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j(§h´K¹hj)§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj §ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j(§h´K¹hj&¦ubjI)�”}”(hŒ(``__u16 index`` USB message index value ”h]”(jO)�”}”(hŒ``__u16 index``”h]”jÑ)�”}”(hjL§h]”hŒ __u16 index”…”�”}”(hjN§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjJ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KºhjF§ubji)�”}”(hhh]”hë)�”}”(hŒUSB message index value”h]”hŒUSB message index value”…”�”}”(hje§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ja§h´Kºhjb§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjF§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ja§h´Kºhj&¦ubjI)�”}”(hŒ8``const void *driver_data`` pointer to the data to send ”h]”(jO)�”}”(hŒ``const void *driver_data``”h]”jÑ)�”}”(hj…§h]”hŒconst void *driver_data”…”�”}”(hj‡§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjƒ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K»hj§ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the data to send”h]”hŒpointer to the data to send”…”�”}”(hjž§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jš§h´K»hj›§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jš§h´K»hj&¦ubjI)�”}”(hŒ3``__u16 size`` length in bytes of the data to send ”h]”(jO)�”}”(hŒ``__u16 size``”h]”jÑ)�”}”(hj¾§h]”hŒ __u16 size”…”�”}”(hjÀ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¼§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¼hj¸§ubji)�”}”(hhh]”hë)�”}”(hŒ#length in bytes of the data to send”h]”hŒ#length in bytes of the data to send”…”�”}”(hj×§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÓ§h´K¼hjÔ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¸§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÓ§h´K¼hj&¦ubjI)�”}”(hŒT``int timeout`` time in msecs to wait for the message to complete before timing out ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hj÷§h]”hŒ int timeout”…”�”}”(hjù§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjõ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K½hjñ§ubji)�”}”(hhh]”hë)�”}”(hŒCtime in msecs to wait for the message to complete before timing out”h]”hŒCtime in msecs to wait for the message to complete before timing out”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j ¨h´K½hj ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjñ§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j ¨h´K½hj&¦ubjI)�”}”(hŒ?``gfp_t memflags`` the flags for memory allocation for buffers ”h]”(jO)�”}”(hŒ``gfp_t memflags``”h]”jÑ)�”}”(hj0¨h]”hŒgfp_t memflags”…”�”}”(hj2¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj.¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K¾hj*¨ubji)�”}”(hhh]”hë)�”}”(hŒ+the flags for memory allocation for buffers”h]”hŒ+the flags for memory allocation for buffers”…”�”}”(hjI¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jE¨h´K¾hjF¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj*¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jE¨h´K¾hj&¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj ¦ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjk¨h]”hŒContext”…”�”}”(hjm¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hji¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÀhj ¦ubhë)�”}”(hŒ!in_interrupt ()”h]”hŒ!in_interrupt ()”…”�”}”(hj�¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÀhj ¦ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj’¨h]”hŒ Description”…”�”}”(hj”¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÂhj ¦ubhë)�”}”(hŒ³This function sends a control message to a specified endpoint that is not expected to fill in a response (i.e. a "send message") and waits for the message to complete, or timeout.”h]”hŒ·This function sends a control message to a specified endpoint that is not expected to fill in a response (i.e. a “send messageâ€�) and waits for the message to complete, or timeout.”…”�”}”(hj¨¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÁhj ¦ubhë)�”}”(hXfDo not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.”•h]”hXjDo not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don’t have a handle on the URB used, you can’t cancel the request.”…”�”}”(hj·¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÅhj ¦ubhë)�”}”(hX&The data pointer can be made to a reference on the stack, or anywhere else, as it will not be modified at all. This does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device).”h]”hX&The data pointer can be made to a reference on the stack, or anywhere else, as it will not be modified at all. This does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device).”…”�”}”(hjƨh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KËhj ¦ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjרh]”hŒReturn”…”�”}”(hjÙ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÕ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÐhj ¦ubhë)�”}”(hŒAIf successful, 0 is returned, Otherwise, a negative error number.”h]”hŒAIf successful, 0 is returned, Otherwise, a negative error number.”…”�”}”(hjí¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KÑhj ¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_control_msg_recv (C function)”Œc.usb_core.usb_control_msg_recv”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ¶int usb_control_msg_recv (struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”j+)�”}”(hŒµint usb_control_msg_recv(struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj©h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KîubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+©h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj©h²hh³j*©h´Kîubj„)�”}”(hŒusb_control_msg_recv”h]”jŠ)�”}”(hŒusb_control_msg_recv”h]”hŒusb_control_msg_recv”…”�”}”(hj=©h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9©ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj©h²hh³j*©h´Kîubj¥)�”}”(hŒ�(struct usb_device *dev, __u8 endpoint, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *driver_data, __u16 size, int timeout, gfp_t memflags)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjY©h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjU©ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf©h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjU©ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjw©h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjt©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jy©Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj?©sbŒc.usb_core.usb_control_msg_recv”†”esbuh1hhjU©ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜©h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjU©ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¦©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjU©ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj³©h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjU©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ __u8 endpoint”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjÏ©h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÌ©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÑ©Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjÈ©ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî©h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÈ©ubjŠ)�”}”(hŒendpoint”h]”hŒendpoint”…”�”}”(hjü©h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÈ©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ __u8 request”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jªŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjªubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7ªh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjªubjŠ)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjEªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ__u8 requesttype”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u8”h]”hŒ__u8”…”�”}”(hjaªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj^ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jcªŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjZªubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€ªh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjZªubjŠ)�”}”(hŒ requesttype”h]”hŒ requesttype”…”�”}”(hjŽªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjZªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ __u16 value”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hjªªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj§ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¬ªŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhj£ªubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɪh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj£ªubjŠ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjתh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj£ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ __u16 index”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hjóªh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjðªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jõªŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjìªubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjìªubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjìªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒvoid *driver_data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9«h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj5«ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG«h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj5«ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjU«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj5«ubjŠ)�”}”(hŒ driver_data”h]”hŒ driver_data”…”�”}”(hjb«h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj5«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ __u16 size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ__u16”h]”hŒ__u16”…”�”}”(hj~«h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj{«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j€«Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjw«ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�«h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjw«ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj««h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjw«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÄ«h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÀ«ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ«h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÀ«ubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjà«h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÀ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubj«)�”}”(hŒgfp_t memflags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjü«h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjù«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jþ«Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”©Œc.usb_core.usb_control_msg_recv”†”esbuh1hhjõ«ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjõ«ubjŠ)�”}”(hŒmemflags”h]”hŒmemflags”…”�”}”(hj)¬h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjõ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ©ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj©h²hh³j*©h´Kîubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj©h²hh³j*©h´Kîubah}”(h]”j©ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j*©h´Kîhj©h²hubjü)�”}”(hhh]”hë)�”}”(hŒIBuilds a control "receive" message, sends it off and waits for completion”h]”hŒMBuilds a control “receiveâ€� message, sends it off and waits for completion”…”�”}”(hjS¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KîhjP¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj©h²hh³j*©h´Kîubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjk¬jjk¬j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXL**Parameters** ``struct usb_device *dev`` pointer to the usb device to send the message to ``__u8 endpoint`` endpoint to send the message to ``__u8 request`` USB message request value ``__u8 requesttype`` USB message request type value ``__u16 value`` USB message value ``__u16 index`` USB message index value ``void *driver_data`` pointer to the data to be filled in by the message ``__u16 size`` length in bytes of the data to be received ``int timeout`` time in msecs to wait for the message to complete before timing out ``gfp_t memflags`` the flags for memory allocation for buffers **Context** !in_interrupt () **Description** This function sends a control message to a specified endpoint that is expected to fill in a response (i.e. a "receive message") and waits for the message to complete, or timeout. Do not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request. The data pointer can be made to a reference on the stack, or anywhere else that can be successfully written to. This function does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device). The "whole" message must be properly received from the device in order for this function to be successful. If a device returns less than the expected amount of data, then the function will fail. Do not use this for messages where a variable amount of data might be returned. **Return** If successful, 0 is returned, Otherwise, a negative error number.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hju¬h]”hŒ Parameters”…”�”}”(hjw¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjs¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kòhjo¬ubjD)�”}”(hhh]”(jI)�”}”(hŒL``struct usb_device *dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj”¬h]”hŒstruct usb_device *dev”…”�”}”(hj–¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj’¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kïhjެubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hj­¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j©¬h´Kïhjª¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjެubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j©¬h´Kïhj‹¬ubjI)�”}”(hŒ2``__u8 endpoint`` endpoint to send the message to ”h]”(jO)�”}”(hŒ``__u8 endpoint``”h]”jÑ)�”}”(hjͬh]”hŒ __u8 endpoint”…”�”}”(hjϬh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjˬubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´KðhjǬubji)�”}”(hhh]”hë)�”}”(hŒendpoint to send the message to”h]”hŒendpoint to send the message to”…”�”}”(hjæ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jâ¬h´Kðhjã¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjǬubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jâ¬h´Kðhj‹¬ubjI)�”}”(hŒ+``__u8 request`` USB message request value ”h]”(jO)�”}”(hŒ``__u8 request``”h]”jÑ)�”}”(hj­h]”hŒ __u8 request”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kñhj­ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request value”h]”hŒUSB message request value”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j­h´Kñhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j­h´Kñhj‹¬ubjI)�”}”(hŒ4``__u8 requesttype`` USB message request type value ”h]”(jO)�”}”(hŒ``__u8 requesttype``”h]”jÑ)�”}”(hj?­h]”hŒ__u8 requesttype”…”�”}”(hjA­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj=­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kòhj9­ubji)�”}”(hhh]”hë)�”}”(hŒUSB message request type value”h]”hŒUSB message request type value”…”�”}”(hjX­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jT­h´KòhjU­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj9­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jT­h´Kòhj‹¬ubjI)�”}”(hŒ"``__u16 value`` USB message value ”h]”(jO)�”}”(hŒ``__u16 value``”h]”jÑ)�”}”(hjx­h]”hŒ __u16 value”…”�”}”(hjz­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjv­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kóhjr­ubji)�”}”(hhh]”hë)�”}”(hŒUSB message value”h]”hŒUSB message value”…”�”}”(hj‘­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�­h´KóhjŽ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjr­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�­h´Kóhj‹¬ubjI)�”}”(hŒ(``__u16 index`` USB message index value ”h]”(jO)�”}”(hŒ``__u16 index``”h]”jÑ)�”}”(hj±­h]”hŒ __u16 index”…”�”}”(hj³­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¯­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kôhj«­ubji)�”}”(hhh]”hë)�”}”(hŒUSB message index value”h]”hŒUSB message index value”…”�”}”(hjÊ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÆ­h´KôhjÇ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj«­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÆ­h´Kôhj‹¬ubjI)�”}”(hŒI``void *driver_data`` pointer to the data to be filled in by the message ”h]”(jO)�”}”(hŒ``void *driver_data``”h]”jÑ)�”}”(hjê­h]”hŒvoid *driver_data”…”�”}”(hjì­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjè­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kõhjä­ubji)�”}”(hhh]”hë)�”}”(hŒ2pointer to the data to be filled in by the message”h]”hŒ2pointer to the data to be filled in by the message”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÿ­h´Kõhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjä­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÿ­h´Kõhj‹¬ubjI)�”}”(hŒ:``__u16 size`` length in bytes of the data to be received ”h]”(jO)�”}”(hŒ``__u16 size``”h]”jÑ)�”}”(hj#®h]”hŒ __u16 size”…”�”}”(hj%®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj!®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Köhj®ubji)�”}”(hhh]”hë)�”}”(hŒ*length in bytes of the data to be received”h]”hŒ*length in bytes of the data to be received”…”�”}”(hj<®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j8®h´Köhj9®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j8®h´Köhj‹¬ubjI)�”}”(hŒT``int timeout`` time in msecs to wait for the message to complete before timing out ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hj\®h]”hŒ int timeout”…”�”}”(hj^®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjZ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´K÷hjV®ubji)�”}”(hhh]”hë)�”}”(hŒCtime in msecs to wait for the message to complete before timing out”h]”hŒCtime in msecs to wait for the message to complete before timing out”…”�”}”(hju®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jq®h´K÷hjr®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjV®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jq®h´K÷hj‹¬ubjI)�”}”(hŒ?``gfp_t memflags`` the flags for memory allocation for buffers ”h]”(jO)�”}”(hŒ``gfp_t memflags``”h]”jÑ)�”}”(hj•®h]”hŒgfp_t memflags”…”�”}”(hj—®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj“®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Køhj�®ubji)�”}”(hhh]”hë)�”}”(hŒ+the flags for memory allocation for buffers”h]”hŒ+the flags for memory allocation for buffers”…”�”}”(hj®®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jª®h´Køhj«®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jª®h´Køhj‹¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjo¬ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjЮh]”hŒContext”…”�”}”(hjÒ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjήubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kúhjo¬ubhë)�”}”(hŒ!in_interrupt ()”h]”hŒ!in_interrupt ()”…”�”}”(hjæ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kúhjo¬ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj÷®h]”hŒ Description”…”�”}”(hjù®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjõ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kühjo¬ubhë)�”}”(hŒ²This function sends a control message to a specified endpoint that is expected to fill in a response (i.e. a "receive message") and waits for the message to complete, or timeout.”h]”hŒ¶This function sends a control message to a specified endpoint that is expected to fill in a response (i.e. a “receive messageâ€�) and waits for the message to complete, or timeout.”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kûhjo¬ubhë)�”}”(hXfDo not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.”h]”hXjDo not use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb(). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don’t have a handle on the URB used, you can’t cancel the request.”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Kÿhjo¬ubhë)�”}”(hX0The data pointer can be made to a reference on the stack, or anywhere else that can be successfully written to. This function does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device).”h]”hX0The data pointer can be made to a reference on the stack, or anywhere else that can be successfully written to. This function does not have the restriction that usb_control_msg() has where the data pointer must be to dynamically allocated memory (i.e. memory that can be successfully DMAed to a device).”…”�”}”(hj+¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhjo¬ubhë)�”}”(hXThe "whole" message must be properly received from the device in order for this function to be successful. If a device returns less than the expected amount of data, then the function will fail. Do not use this for messages where a variable amount of data might be returned.”h]”hXThe “wholeâ€� message must be properly received from the device in order for this function to be successful. If a device returns less than the expected amount of data, then the function will fail. Do not use this for messages where a variable amount of data might be returned.”…”�”}”(hj:¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M hjo¬ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjK¯h]”hŒReturn”…”�”}”(hjM¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjI¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhjo¬ubhë)�”}”(hŒAIf successful, 0 is returned, Otherwise, a negative error number.”h]”hŒAIf successful, 0 is returned, Otherwise, a negative error number.”…”�”}”(hja¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhjo¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_interrupt_msg (C function)”Œc.usb_core.usb_interrupt_msg”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ{int usb_interrupt_msg (struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”j+)�”}”(hŒzint usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj�¯h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŒ¯h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M7ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ¯h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŒ¯h²hh³jž¯h´M7ubj„)�”}”(hŒusb_interrupt_msg”h]”jŠ)�”}”(hŒusb_interrupt_msg”h]”hŒusb_interrupt_msg”…”�”}”(hj±¯h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj­¯ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŒ¯h²hh³jž¯h´M7ubj¥)�”}”(hŒe(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(j«)�”}”(hŒstruct usb_device *usb_dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjͯh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjɯubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ¯h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjɯubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjë¯h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjè¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jí¯Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj³¯sbŒc.usb_core.usb_interrupt_msg”†”esbuh1hhjɯubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj °h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjɯubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjɯubjŠ)�”}”(hŒusb_dev”h]”hŒusb_dev”…”�”}”(hj'°h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjɯubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj@°h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj<°ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN°h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj<°ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj\°h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj<°ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj°h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj<°ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hjx°h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj<°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘°h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�°ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ°h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�°ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj­°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj�°ubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjº°h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubj«)�”}”(hŒint len”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÓ°h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjϰubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá°h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjϰubjŠ)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjï°h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjϰubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubj«)�”}”(hŒint *actual_length”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj±ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj±ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj$±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj±ubjŠ)�”}”(hŒ actual_length”h]”hŒ actual_length”…”�”}”(hj1±h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjJ±h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjF±ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX±h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjF±ubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjf±h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjF±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjůubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŒ¯h²hh³jž¯h´M7ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjˆ¯h²hh³jž¯h´M7ubah}”(h]”jƒ¯ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jž¯h´M7hj…¯h²hubjü)�”}”(hhh]”hë)�”}”(hŒ>Builds an interrupt urb, sends it off and waits for completion”h]”hŒ>Builds an interrupt urb, sends it off and waits for completion”…”�”}”(hj�±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M7hj�±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj…¯h²hh³jž¯h´M7ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¨±jj¨±j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXp**Parameters** ``struct usb_device *usb_dev`` pointer to the usb device to send the message to ``unsigned int pipe`` endpoint "pipe" to send the message to ``void *data`` pointer to the data to send ``int len`` length in bytes of the data to send ``int *actual_length`` pointer to a location to put the actual length transferred in bytes ``int timeout`` time in msecs to wait for the message to complete before timing out **Context** task context, might sleep. **Description** This function sends a simple interrupt message to a specified endpoint and waits for the message to complete, or timeout. Don't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request. **Return** If successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj²±h]”hŒ Parameters”…”�”}”(hj´±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj°±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M;hj¬±ubjD)�”}”(hhh]”(jI)�”}”(hŒP``struct usb_device *usb_dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *usb_dev``”h]”jÑ)�”}”(hjѱh]”hŒstruct usb_device *usb_dev”…”�”}”(hjÓ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjϱubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M8hj˱ubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hjê±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jæ±h´M8hjç±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj˱ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jæ±h´M8hjȱubjI)�”}”(hŒ=``unsigned int pipe`` endpoint "pipe" to send the message to ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hj ²h]”hŒunsigned int pipe”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M9hj²ubji)�”}”(hhh]”hë)�”}”(hŒ&endpoint "pipe" to send the message to”h]”hŒ*endpoint “pipeâ€� to send the message to”…”�”}”(hj#²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j²h´M9hj ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j²h´M9hjȱubjI)�”}”(hŒ+``void *data`` pointer to the data to send ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hjC²h]”hŒ void *data”…”�”}”(hjE²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjA²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M:hj=²ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the data to send”h]”hŒpointer to the data to send”…”�”}”(hj\²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jX²h´M:hjY²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj=²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jX²h´M:hjȱubjI)�”}”(hŒ0``int len`` length in bytes of the data to send ”h]”(jO)�”}”(hŒ ``int len``”h]”jÑ)�”}”(hj|²h]”hŒint len”…”�”}”(hj~²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjz²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M;hjv²ubji)�”}”(hhh]”hë)�”}”(hŒ#length in bytes of the data to send”h]”hŒ#length in bytes of the data to send”…”�”}”(hj•²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‘²h´M;hj’²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjv²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‘²h´M;hjȱubjI)�”}”(hŒ[``int *actual_length`` pointer to a location to put the actual length transferred in bytes ”h]”(jO)�”}”(hŒ``int *actual_length``”h]”jÑ)�”}”(hjµ²h]”hŒint *actual_length”…”�”}”(hj·²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M=hj¯²ubji)�”}”(hhh]”hë)�”}”(hŒCpointer to a location to put the actual length transferred in bytes”h]”hŒCpointer to a location to put the actual length transferred in bytes”…”�”}”(hjβh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M<hj˲ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¯²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jʲh´M=hjȱubjI)�”}”(hŒT``int timeout`` time in msecs to wait for the message to complete before timing out ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hjï²h]”hŒ int timeout”…”�”}”(hjñ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjí²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M>hjé²ubji)�”}”(hhh]”hë)�”}”(hŒCtime in msecs to wait for the message to complete before timing out”h]”hŒCtime in msecs to wait for the message to complete before timing out”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j³h´M>hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjé²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j³h´M>hjȱubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¬±ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj*³h]”hŒContext”…”�”}”(hj,³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj(³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M@hj¬±ubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj@³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M@hj¬±ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjQ³h]”hŒ Description”…”�”}”(hjS³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjO³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MBhj¬±ubhë)�”}”(hŒyThis function sends a simple interrupt message to a specified endpoint and waits for the message to complete, or timeout.”h]”hŒyThis function sends a simple interrupt message to a specified endpoint and waits for the message to complete, or timeout.”…”�”}”(hjg³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MAhj¬±ubhë)�”}”(hXdDon't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.”h]”hXjDon’t use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don’t have a handle on the URB used, you can’t cancel the request.”…”�”}”(hjv³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MDhj¬±ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj‡³h]”hŒReturn”…”�”}”(hj‰³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj…³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MJhj¬±ubhë)�”}”(hŒŽIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hŒrIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the ”…”�”}”(hj�³h²hh³Nh´Nubj.)�”}”(hŒ**actual_length**”h]”hŒ actual_length”…”�”}”(hj¥³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�³ubhŒ parameter.”…”�”}”(hj�³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MKhj¬±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_core.usb_bulk_msg (C function)”Œc.usb_core.usb_bulk_msg”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒvint usb_bulk_msg (struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”j+)�”}”(hŒuint usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÞ³h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÚ³h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MWubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí³h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÚ³h²hh³jì³h´MWubj„)�”}”(hŒ usb_bulk_msg”h]”jŠ)�”}”(hŒ usb_bulk_msg”h]”hŒ usb_bulk_msg”…”�”}”(hjÿ³h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjû³ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÚ³h²hh³jì³h´MWubj¥)�”}”(hŒe(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(j«)�”}”(hŒstruct usb_device *usb_dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(´h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj9´h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj6´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j;´Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj´sbŒc.usb_core.usb_bulk_msg”†”esbuh1hhj´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ´h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj´ubjŠ)�”}”(hŒusb_dev”h]”hŒusb_dev”…”�”}”(hju´h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽ´h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŠ´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ´h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŠ´ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjª´h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŠ´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸´h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŠ´ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hjÆ´h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŠ´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjß´h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÛ´ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí´h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÛ´ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjû´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÛ´ubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÛ´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubj«)�”}”(hŒint len”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj!µh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjµubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/µh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjµubjŠ)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj=µh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubj«)�”}”(hŒint *actual_length”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjVµh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjRµubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdµh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjRµubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjrµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjRµubjŠ)�”}”(hŒ actual_length”h]”hŒ actual_length”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjRµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj˜µh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj”µubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦µh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj”µubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hj´µh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj´ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÚ³h²hh³jì³h´MWubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÖ³h²hh³jì³h´MWubah}”(h]”jѳah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jì³h´MWhjÓ³h²hubjü)�”}”(hhh]”hë)�”}”(hŒ8Builds a bulk urb, sends it off and waits for completion”h]”hŒ8Builds a bulk urb, sends it off and waits for completion”…”�”}”(hjÞµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MWhjÛµh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÓ³h²hh³jì³h´MWubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjöµjjöµj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX‹**Parameters** ``struct usb_device *usb_dev`` pointer to the usb device to send the message to ``unsigned int pipe`` endpoint "pipe" to send the message to ``void *data`` pointer to the data to send ``int len`` length in bytes of the data to send ``int *actual_length`` pointer to a location to put the actual length transferred in bytes ``int timeout`` time in msecs to wait for the message to complete before timing out **Context** task context, might sleep. **Description** This function sends a simple bulk message to a specified endpoint and waits for the message to complete, or timeout. Don't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request. Because there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT ioctl, users are forced to abuse this routine by using it to submit URBs for interrupt endpoints. We will take the liberty of creating an interrupt URB (with the default interval) if the target is an interrupt endpoint. **Return** If successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¶h]”hŒ Parameters”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjþµubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M[hjúµubjD)�”}”(hhh]”(jI)�”}”(hŒP``struct usb_device *usb_dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *usb_dev``”h]”jÑ)�”}”(hj¶h]”hŒstruct usb_device *usb_dev”…”�”}”(hj!¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MXhj¶ubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hj8¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j4¶h´MXhj5¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j4¶h´MXhj¶ubjI)�”}”(hŒ=``unsigned int pipe`` endpoint "pipe" to send the message to ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hjX¶h]”hŒunsigned int pipe”…”�”}”(hjZ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjV¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MYhjR¶ubji)�”}”(hhh]”hë)�”}”(hŒ&endpoint "pipe" to send the message to”h]”hŒ*endpoint “pipeâ€� to send the message to”…”�”}”(hjq¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jm¶h´MYhjn¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjR¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jm¶h´MYhj¶ubjI)�”}”(hŒ+``void *data`` pointer to the data to send ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hj‘¶h]”hŒ void *data”…”�”}”(hj“¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MZhj‹¶ubji)�”}”(hhh]”hë)�”}”(hŒpointer to the data to send”h]”hŒpointer to the data to send”…”�”}”(hjª¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¦¶h´MZhj§¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‹¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¦¶h´MZhj¶ubjI)�”}”(hŒ0``int len`` length in bytes of the data to send ”h]”(jO)�”}”(hŒ ``int len``”h]”jÑ)�”}”(hjʶh]”hŒint len”…”�”}”(hj̶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjȶubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M[hjĶubji)�”}”(hhh]”hë)�”}”(hŒ#length in bytes of the data to send”h]”hŒ#length in bytes of the data to send”…”�”}”(hjã¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jß¶h´M[hjà¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjĶubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jß¶h´M[hj¶ubjI)�”}”(hŒ[``int *actual_length`` pointer to a location to put the actual length transferred in bytes ”h]”(jO)�”}”(hŒ``int *actual_length``”h]”jÑ)�”}”(hj·h]”hŒint *actual_length”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M]hjý¶ubji)�”}”(hhh]”hë)�”}”(hŒCpointer to a location to put the actual length transferred in bytes”h]”hŒCpointer to a location to put the actual length transferred in bytes”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M\hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjý¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j·h´M]hj¶ubjI)�”}”(hŒT``int timeout`` time in msecs to wait for the message to complete before timing out ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hj=·h]”hŒ int timeout”…”�”}”(hj?·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj;·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M^hj7·ubji)�”}”(hhh]”hë)�”}”(hŒCtime in msecs to wait for the message to complete before timing out”h]”hŒCtime in msecs to wait for the message to complete before timing out”…”�”}”(hjV·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jR·h´M^hjS·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj7·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jR·h´M^hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjúµubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjx·h]”hŒContext”…”�”}”(hjz·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjv·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M`hjúµubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjŽ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M`hjúµubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjŸ·h]”hŒ Description”…”�”}”(hj¡·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mbhjúµubhë)�”}”(hŒtThis function sends a simple bulk message to a specified endpoint and waits for the message to complete, or timeout.”h]”hŒtThis function sends a simple bulk message to a specified endpoint and waits for the message to complete, or timeout.”…”�”}”(hjµ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mahjúµubhë)�”}”(hXdDon't use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.”h]”hXjDon’t use this function from within an interrupt context. If you need an asynchronous message, or need to send a message from within interrupt context, use usb_submit_urb() If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. Since you don’t have a handle on the URB used, you can’t cancel the request.”…”�”}”(hjÄ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mdhjúµubhë)�”}”(hXBecause there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT ioctl, users are forced to abuse this routine by using it to submit URBs for interrupt endpoints. We will take the liberty of creating an interrupt URB (with the default interval) if the target is an interrupt endpoint.”h]”hXBecause there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT ioctl, users are forced to abuse this routine by using it to submit URBs for interrupt endpoints. We will take the liberty of creating an interrupt URB (with the default interval) if the target is an interrupt endpoint.”…”�”}”(hjÓ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mjhjúµubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjä·h]”hŒReturn”…”�”}”(hjæ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjâ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mohjúµubhë)�”}”(hŒŽIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hŒrIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the ”…”�”}”(hjú·h²hh³Nh´Nubj.)�”}”(hŒ**actual_length**”h]”hŒ actual_length”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjú·ubhŒ parameter.”…”�”}”(hjú·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mphjúµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+usb_core.usb_bulk_msg_killable (C function)”Œ c.usb_core.usb_bulk_msg_killable”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒint usb_bulk_msg_killable (struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”j+)�”}”(hŒ~int usb_bulk_msg_killable(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj;¸h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj7¸h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M’ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ¸h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7¸h²hh³jI¸h´M’ubj„)�”}”(hŒusb_bulk_msg_killable”h]”jŠ)�”}”(hŒusb_bulk_msg_killable”h]”hŒusb_bulk_msg_killable”…”�”}”(hj\¸h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjX¸ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj7¸h²hh³jI¸h´M’ubj¥)�”}”(hŒe(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)”h]”(j«)�”}”(hŒstruct usb_device *usb_dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjx¸h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjt¸ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…¸h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjt¸ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj–¸h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj“¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j˜¸Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj^¸sbŒ c.usb_core.usb_bulk_msg_killable”†”esbuh1hhjt¸ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·¸h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjt¸ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjt¸ubjŠ)�”}”(hŒusb_dev”h]”hŒusb_dev”…”�”}”(hjÒ¸h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjt¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubj«)�”}”(hŒunsigned int pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjë¸h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjç¸ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¸h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjç¸ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjç¸ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjç¸ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj#¹h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjç¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj<¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj8¹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ¹h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj8¹ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjX¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj8¹ubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hje¹h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj8¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubj«)�”}”(hŒint len”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj~¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjz¹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ¹h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjz¹ubjŠ)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjš¹h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjz¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubj«)�”}”(hŒint *actual_length”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj³¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¯¹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ¹h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¯¹ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjϹh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¯¹ubjŠ)�”}”(hŒ actual_length”h]”hŒ actual_length”…”�”}”(hjܹh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¯¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubj«)�”}”(hŒ int timeout”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjõ¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjñ¹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñ¹ubjŠ)�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñ¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjp¸ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj7¸h²hh³jI¸h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj3¸h²hh³jI¸h´M’ubah}”(h]”j.¸ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jI¸h´M’hj0¸h²hubjü)�”}”(hhh]”hë)�”}”(hŒLBuilds a bulk urb, sends it off and waits for completion in a killable state”h]”hŒLBuilds a bulk urb, sends it off and waits for completion in a killable state”…”�”}”(hj;ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M’hj8ºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj0¸h²hh³jI¸h´M’ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjSºjjSºj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX=**Parameters** ``struct usb_device *usb_dev`` pointer to the usb device to send the message to ``unsigned int pipe`` endpoint "pipe" to send the message to ``void *data`` pointer to the data to send ``int len`` length in bytes of the data to send ``int *actual_length`` pointer to a location to put the actual length transferred in bytes ``int timeout`` time in msecs to wait for the message to complete before timing out (if <= 0, the wait is as long as possible) **Context** task context, might sleep. **Description** This function is just like usb_blk_msg(), except that it waits in a killable state and there is no limit on the timeout length. **Return** If successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj]ºh]”hŒ Parameters”…”�”}”(hj_ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj[ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M–hjWºubjD)�”}”(hhh]”(jI)�”}”(hŒP``struct usb_device *usb_dev`` pointer to the usb device to send the message to ”h]”(jO)�”}”(hŒ``struct usb_device *usb_dev``”h]”jÑ)�”}”(hj|ºh]”hŒstruct usb_device *usb_dev”…”�”}”(hj~ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjzºubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M“hjvºubji)�”}”(hhh]”hë)�”}”(hŒ0pointer to the usb device to send the message to”h]”hŒ0pointer to the usb device to send the message to”…”�”}”(hj•ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‘ºh´M“hj’ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjvºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‘ºh´M“hjsºubjI)�”}”(hŒ=``unsigned int pipe`` endpoint "pipe" to send the message to ”h]”(jO)�”}”(hŒ``unsigned int pipe``”h]”jÑ)�”}”(hjµºh]”hŒunsigned int pipe”…”�”}”(hj·ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M”hj¯ºubji)�”}”(hhh]”hë)�”}”(hŒ&endpoint "pipe" to send the message to”h]”hŒ*endpoint “pipeâ€� to send the message to”…”�”}”(hjκh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jʺh´M”hj˺ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¯ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jʺh´M”hjsºubjI)�”}”(hŒ+``void *data`` pointer to the data to send ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hjîºh]”hŒ void *data”…”�”}”(hjðºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjìºubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M•hjèºubji)�”}”(hhh]”hë)�”}”(hŒpointer to the data to send”h]”hŒpointer to the data to send”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j»h´M•hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjèºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j»h´M•hjsºubjI)�”}”(hŒ0``int len`` length in bytes of the data to send ”h]”(jO)�”}”(hŒ ``int len``”h]”jÑ)�”}”(hj'»h]”hŒint len”…”�”}”(hj)»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj%»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M–hj!»ubji)�”}”(hhh]”hë)�”}”(hŒ#length in bytes of the data to send”h]”hŒ#length in bytes of the data to send”…”�”}”(hj@»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j<»h´M–hj=»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj!»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j<»h´M–hjsºubjI)�”}”(hŒ[``int *actual_length`` pointer to a location to put the actual length transferred in bytes ”h]”(jO)�”}”(hŒ``int *actual_length``”h]”jÑ)�”}”(hj`»h]”hŒint *actual_length”…”�”}”(hjb»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj^»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M˜hjZ»ubji)�”}”(hhh]”hë)�”}”(hŒCpointer to a location to put the actual length transferred in bytes”h]”hŒCpointer to a location to put the actual length transferred in bytes”…”�”}”(hjy»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M—hjv»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjZ»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³ju»h´M˜hjsºubjI)�”}”(hŒ``int timeout`` time in msecs to wait for the message to complete before timing out (if <= 0, the wait is as long as possible) ”h]”(jO)�”}”(hŒ``int timeout``”h]”jÑ)�”}”(hjš»h]”hŒ int timeout”…”�”}”(hjœ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj˜»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mšhj”»ubji)�”}”(hhh]”hë)�”}”(hŒntime in msecs to wait for the message to complete before timing out (if <= 0, the wait is as long as possible)”h]”hŒntime in msecs to wait for the message to complete before timing out (if <= 0, the wait is as long as possible)”…”�”}”(hj³»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M™hj°»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj”»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¯»h´Mšhjsºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjWºubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjÖ»h]”hŒContext”…”�”}”(hjØ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÔ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MœhjWºubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjì»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MœhjWºubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjý»h]”hŒ Description”…”�”}”(hjÿ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjû»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MžhjWºubhë)�”}”(hŒThis function is just like usb_blk_msg(), except that it waits in a killable state and there is no limit on the timeout length.”h•]”hŒThis function is just like usb_blk_msg(), except that it waits in a killable state and there is no limit on the timeout length.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hjWºubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj$¼h]”hŒReturn”…”�”}”(hj&¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj"¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M hjWºubhë)�”}”(hŒŽIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the **actual_length** parameter.”h]”(hŒrIf successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the ”…”�”}”(hj:¼h²hh³Nh´Nubj.)�”}”(hŒ**actual_length**”h]”hŒ actual_length”…”�”}”(hjB¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj:¼ubhŒ parameter.”…”�”}”(hj:¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M¡hjWºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_sg_init (C function)”Œc.usb_core.usb_sg_init”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ¦int usb_sg_init (struct usb_sg_request *io, struct usb_device *dev, unsigned pipe, unsigned period, struct scatterlist *sg, int nents, size_t length, gfp_t mem_flags)”h]”j+)�”}”(hŒ¥int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev, unsigned pipe, unsigned period, struct scatterlist *sg, int nents, size_t length, gfp_t mem_flags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj{¼h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjw¼h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjмh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjw¼h²hh³j‰¼h´Mubj„)�”}”(hŒ usb_sg_init”h]”jŠ)�”}”(hŒ usb_sg_init”h]”hŒ usb_sg_init”…”�”}”(hjœ¼h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj˜¼ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjw¼h²hh³j‰¼h´Mubj¥)�”}”(hŒ–(struct usb_sg_request *io, struct usb_device *dev, unsigned pipe, unsigned period, struct scatterlist *sg, int nents, size_t length, gfp_t mem_flags)”h]”(j«)�”}”(hŒstruct usb_sg_request *io”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¸¼h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj´¼ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjżh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´¼ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_sg_request”h]”hŒusb_sg_request”…”�”}”(hjÖ¼h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÓ¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jؼŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjž¼sbŒc.usb_core.usb_sg_init”†”esbuh1hhj´¼ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷¼h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj´¼ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj´¼ubjŠ)�”}”(hŒio”h]”hŒio”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj´¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj+½h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj'½ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8½h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj'½ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjI½h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjF½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jK½Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jó¼Œc.usb_core.usb_sg_init”†”esbuh1hhj'½ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh½h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj'½ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjv½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj'½ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjƒ½h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒ unsigned pipe”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjœ½h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj˜½ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª½h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj˜½ubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj¸½h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj˜½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒunsigned period”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjѽh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjͽubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß½h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjͽubjŠ)�”}”(hŒperiod”h]”hŒperiod”…”�”}”(hjí½h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjͽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒstruct scatterlist *sg”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¾ubh)�”}”(hhh]”jŠ)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj$¾h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj!¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j&¾Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jó¼Œc.usb_core.usb_sg_init”†”esbuh1hhj¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC¾h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¾ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjQ¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¾ubjŠ)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj^¾h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒ int nents”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjw¾h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjs¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…¾h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjs¾ubjŠ)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj“¾h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjs¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¯¾h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¬¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j±¾Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jó¼Œc.usb_core.usb_sg_init”†”esbuh1hhj¨¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjξh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¨¾ubjŠ)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjܾh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¨¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjø¾h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjõ¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jú¾Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jó¼Œc.usb_core.usb_sg_init”†”esbuh1hhjñ¾ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñ¾ubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hj%¿h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñ¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj°¼ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjw¼h²hh³j‰¼h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjs¼h²hh³j‰¼h´Mubah}”(h]”jn¼ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‰¼h´Mhjp¼h²hubjü)�”}”(hhh]”hë)�”}”(hŒ8initializes scatterlist-based bulk/interrupt I/O request”h]”hŒ8initializes scatterlist-based bulk/interrupt I/O request”…”�”}”(hjO¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjL¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjp¼h²hh³j‰¼h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjg¿jjg¿j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX×**Parameters** ``struct usb_sg_request *io`` request block being initialized. until usb_sg_wait() returns, treat this as a pointer to an opaque block of memory, ``struct usb_device *dev`` the usb device that will send or receive the data ``unsigned pipe`` endpoint "pipe" used to transfer the data ``unsigned period`` polling rate for interrupt endpoints, in frames or (for high speed endpoints) microframes; ignored for bulk ``struct scatterlist *sg`` scatterlist entries ``int nents`` how many entries in the scatterlist ``size_t length`` how many bytes to send from the scatterlist, or zero to send every byte identified in the list. ``gfp_t mem_flags`` SLAB_* flags affecting memory allocations in this call **Description** This initializes a scatter/gather request, allocating resources such as I/O mappings and urb memory (except maybe memory used by USB controller drivers). The request must be issued using usb_sg_wait(), which waits for the I/O to complete (or to be canceled) and then cleans up all resources allocated by usb_sg_init(). The request may be canceled with usb_sg_cancel(), either before or after usb_sg_wait() is called. **Return** Zero for success, else a negative errno value.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjq¿h]”hŒ Parameters”…”�”}”(hjs¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjo¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhjk¿ubjD)�”}”(hhh]”(jI)�”}”(hŒ“``struct usb_sg_request *io`` request block being initialized. until usb_sg_wait() returns, treat this as a pointer to an opaque block of memory, ”h]”(jO)�”}”(hŒ``struct usb_sg_request *io``”h]”jÑ)�”}”(hj�¿h]”hŒstruct usb_sg_request *io”…”�”}”(hj’¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŽ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjŠ¿ubji)�”}”(hhh]”hë)�”}”(hŒtrequest block being initialized. until usb_sg_wait() returns, treat this as a pointer to an opaque block of memory,”h]”hŒtrequest block being initialized. until usb_sg_wait() returns, treat this as a pointer to an opaque block of memory,”…”�”}”(hj©¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj¦¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŠ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¥¿h´Mhj‡¿ubjI)�”}”(hŒM``struct usb_device *dev`` the usb device that will send or receive the data ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjÊ¿h]”hŒstruct usb_device *dev”…”�”}”(hjÌ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjÄ¿ubji)�”}”(hhh]”hë)�”}”(hŒ1the usb device that will send or receive the data”h]”hŒ1the usb device that will send or receive the data”…”�”}”(hjã¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jß¿h´Mhjà¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÄ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jß¿h´Mhj‡¿ubjI)�”}”(hŒ<``unsigned pipe`` endpoint "pipe" used to transfer the data ”h]”(jO)�”}”(hŒ``unsigned pipe``”h]”jÑ)�”}”(hjÀh]”hŒ unsigned pipe”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhjý¿ubji)�”}”(hhh]”hë)�”}”(hŒ)endpoint "pipe" used to transfer the data”h]”hŒ-endpoint “pipeâ€� used to transfer the data”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÀh´MhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjý¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÀh´Mhj‡¿ubjI)�”}”(hŒ€``unsigned period`` polling rate for interrupt endpoints, in frames or (for high speed endpoints) microframes; ignored for bulk ”h]”(jO)�”}”(hŒ``unsigned period``”h]”jÑ)�”}”(hj<Àh]”hŒunsigned period”…”�”}”(hj>Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj:Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj6Àubji)�”}”(hhh]”hë)�”}”(hŒkpolling rate for interrupt endpoints, in frames or (for high speed endpoints) microframes; ignored for bulk”h]”hŒkpolling rate for interrupt endpoints, in frames or (for high speed endpoints) microframes; ignored for bulk”…”�”}”(hjUÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjRÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj6Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jQÀh´Mhj‡¿ubjI)�”}”(hŒ/``struct scatterlist *sg`` scatterlist entries ”h]”(jO)�”}”(hŒ``struct scatterlist *sg``”h]”jÑ)�”}”(hjvÀh]”hŒstruct scatterlist *sg”…”�”}”(hjxÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjtÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjpÀubji)�”}”(hhh]”hë)�”}”(hŒscatterlist entries”h]”hŒscatterlist entries”…”�”}”(hj�Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j‹Àh´MhjŒÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjpÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j‹Àh´Mhj‡¿ubjI)�”}”(hŒ2``int nents`` how many entries in the scatterlist ”h]”(jO)�”}”(hŒ ``int nents``”h]”jÑ)�”}”(hj¯Àh]”hŒ int nents”…”�”}”(hj±Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj­Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj©Àubji)�”}”(hhh]”hë)�”}”(hŒ#how many entries in the scatterlist”h]”hŒ#how many entries in the scatterlist”…”�”}”(hjÈÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÄÀh´MhjÅÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj©Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÄÀh´Mhj‡¿ubjI)�”}”(hŒr``size_t length`` how many bytes to send from the scatterlist, or zero to send every byte identified in the list. ”h]”(jO)�”}”(hŒ``size_t length``”h]”jÑ)�”}”(hjèÀh]”hŒ size_t length”…”�”}”(hjêÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjæÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M hjâÀubji)�”}”(hhh]”hë)�”}”(hŒ_how many bytes to send from the scatterlist, or zero to send every byte identified in the list.”h]”hŒ_how many bytes to send from the scatterlist, or zero to send every byte identified in the list.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjþÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjâÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jýÀh´M hj‡¿ubjI)�”}”(hŒK``gfp_t mem_flags`` SLAB_* flags affecting memory allocations in this call ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hj"Áh]”hŒgfp_t mem_flags”…”�”}”(hj$Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M!hjÁubji)�”}”(hhh]”hë)�”}”(hŒ6SLAB_* flags affecting memory allocations in this call”h]”hŒ6SLAB_* flags affecting memory allocations in this call”…”�”}”(hj;Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j7Áh´M!hj8Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j7Áh´M!hj‡¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjk¿ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj]Áh]”hŒ Description”…”�”}”(hj_Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj[Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M#hjk¿ubhë)�”}”(hŒ™This initializes a scatter/gather request, allocating resources such as I/O mappings and urb memory (except maybe memory used by USB controller drivers).”h]”hŒ™This initializes a scatter/gather request, allocating resources such as I/O mappings and urb memory (except maybe memory used by USB controller drivers).”…”�”}”(hjsÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M"hjk¿ubhë)�”}”(hŒ¤The request must be issued using usb_sg_wait(), which waits for the I/O to complete (or to be canceled) and then cleans up all resources allocated by usb_sg_init().”h]”hŒ¤The request must be issued using usb_sg_wait(), which waits for the I/O to complete (or to be canceled) and then cleans up all resources allocated by usb_sg_init().”…”�”}”(hj‚Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M&hjk¿ubhë)�”}”(hŒaThe request may be canceled with usb_sg_cancel(), either before or after usb_sg_wait() is called.”h]”hŒaThe request may be canceled with usb_sg_cancel(), either before or after usb_sg_wait() is called.”…”�”}”(hj‘Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M*hjk¿ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj¢Áh]”hŒReturn”…”�”}”(hj¤Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M-hjk¿ubhë)�”}”(hŒ.Zero for success, else a negative errno value.”h]”hŒ.Zero for success, else a negative errno value.”…”�”}”(hj¸Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M.hjk¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_sg_wait (C function)”Œc.usb_core.usb_sg_wait”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ,void usb_sg_wait (struct usb_sg_request *io)”h]”j+)�”}”(hŒ+void usb_sg_wait(struct usb_sg_request *io)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjçÁh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjãÁh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M™ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÁh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjãÁh²hh³jõÁh´M™ubj„)�”}”(hŒ usb_sg_wait”h]”jŠ)�”}”(hŒ usb_sg_wait”h]”hŒ usb_sg_wait”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÂubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjãÁh²hh³jõÁh´M™ubj¥)�”}”(hŒ(struct usb_sg_request *io)”h]”j«)�”}”(hŒstruct usb_sg_request *io”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj$Âh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj ÂubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Âh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj Âubh)�”}”(hhh]”jŠ)�”}”(hŒusb_sg_request”h]”hŒusb_sg_request”…”�”}”(hjBÂh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj?Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jDÂŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj ÂsbŒc.usb_core.usb_sg_wait”†”esbuh1hhj ÂubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÂh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj Âubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjqÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ÂubjŠ)�”}”(hŒio”h]”hŒio”…”�”}”(hj~Âh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj Âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÂubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjãÁh²hh³jõÁh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjßÁh²hh³jõÁh´M™ubah}”(h]”jÚÁah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jõÁh´M™hjÜÁh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,synchronously execute scatter/gather request”h]”hŒ,synchronously execute scatter/gather request”…”�”}”(hj¨Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M™hj¥Âh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÜÁh²hh³jõÁh´M™ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÀÂjjÀÂj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX¨**Parameters** ``struct usb_sg_request *io`` request block handle, as initialized with usb_sg_init(). some fields become accessible when this call returns. **Context** task context, might sleep. **Description** This function blocks until the specified I/O operation completes. It leverages the grouping of the related I/O requests to get good transfer rates, by queueing the requests. At higher speeds, such queuing can significantly improve USB throughput. There are three kinds of completion for this function. (1) success, where io->status is zero. The number of io->bytes transferred is as requested. (2) error, where io->status is a negative errno value. The number of io->bytes transferred before the error is usually less than requested, and can be nonzero. (3) cancellation, a type of error with status -ECONNRESET that is initiated by usb_sg_cancel(). When this function returns, all memory allocated through usb_sg_init() or this call will have been freed. The request block parameter may still be passed to usb_sg_cancel(), or it may be freed. It could also be reinitialized and then reused. Data Transfer Rates: Bulk transfers are valid for full or high speed endpoints. The best full speed data rate is 19 packets of 64 bytes each per frame, or 1216 bytes per millisecond. The best high speed data rate is 13 packets of 512 bytes each per microframe, or 52 KBytes per millisecond. The reason to use interrupt transfers through this API would most likely be to reserve high speed bandwidth, where up to 24 KBytes per millisecond could be transferred. That capability is less useful for low or full speed interrupt endpoints, which allow at most one packet per millisecond, of at most 8 or 64 bytes (respectively). It is not necessary to call this function to reserve bandwidth for devices under an xHCI host controller, as the bandwidth is reserved when the configuration or interface alt setting is selected.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÊÂh]”hŒ Parameters”…”�”}”(hjÌÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÈÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hjÄÂubjD)�”}”(hhh]”jI)�”}”(hŒ�``struct usb_sg_request *io`` request block handle, as initialized with usb_sg_init(). some fields become accessible when this call returns. ”h]”(jO)�”}”(hŒ``struct usb_sg_request *io``”h]”jÑ)�”}”(hjéÂh]”hŒstruct usb_sg_request *io”…”�”}”(hjëÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjçÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M›hjãÂubji)�”}”(hhh]”hë)�”}”(hŒnrequest block handle, as initialized with usb_sg_init(). some fields become accessible when this call returns.”h]”hŒnrequest block handle, as initialized with usb_sg_init(). some fields become accessible when this call returns.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MšhjÿÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjãÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jþÂh´M›hjàÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÄÂubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj%Ãh]”hŒContext”…”�”}”(hj'Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj#Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hjÄÂubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj;Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hjÄÂubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjLÃh]”hŒ Description”…”�”}”(hjNÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjJÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MŸhjÄÂubhë)�”}”(hŒøThis function blocks until the specified I/O operation completes. It leverages the grouping of the related I/O requests to get good transfer rates, by queueing the requests. At higher speeds, such queuing can significantly improve USB throughput.”h]”hŒøThis function blocks until the specified I/O operation completes. It leverages the grouping of the related I/O requests to get good transfer rates, by queueing the requests. At higher speeds, such queuing can significantly improve USB throughput.”…”�”}”(hjbÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MžhjÄÂubhë)�”}”(hŒ6There are three kinds of completion for this function.”h]”hŒ6There are three kinds of completion for this function.”…”�”}”(hjqÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M£hjÄÂubjÝ„)�”}”(hhh]”(j»)�”}”(hŒXsuccess, where io->status is zero. The number of io->bytes transferred is as requested.”h]”hë)�”}”(hŒXsuccess, where io->status is zero. The number of io->bytes transferred is as requested.”h]”hŒXsuccess, where io->status is zero. The number of io->bytes transferred is as requested.”…”�”}”(hj‡Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M¥hjƒÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj€Ãubj»)�”}”(hŒœerror, where io->status is a negative errno value. The number of io->bytes transferred before the error is usually less than requested, and can be nonzero.”h]”hë)�”}”(hŒœerror, where io->status is a negative errno value. The number of io->bytes transferred before the error is usually less than requested, and can be nonzero.”h]”hŒœerror, where io->status is a negative errno value. The number of io->bytes transferred before the error is usually less than requested, and can be nonzero.”…”�”}”(hj Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M§hjœÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj€Ãubj»)�”}”(hŒ\cancellation, a type of error with status -ECONNRESET that is initiated by usb_sg_cancel(). ”h]”hë)�”}”(hŒ[cancellation, a type of error with status -ECONNRESET that is initiated by usb_sg_cancel().”h]”hŒ[cancellation, a type of error with status -ECONNRESET that is initiated by usb_sg_cancel().”…”�”}”(hj¹Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MªhjµÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj€Ãubeh}”(h]”h ]”h"]”h$]”h&]”j2…j†j4…j5…j6…j7…uh1jÜ„hjÄÂubhë)�”}”(hŒóWhen this function returns, all memory allocated through usb_sg_init() or this call will have been freed. The request block parameter may still be passed to usb_sg_cancel(), or it may be freed. It could also be reinitialized and then reused.”h]”hŒóWhen this function returns, all memory allocated through usb_sg_init() or this call will have been freed. The request block parameter may still be passed to usb_sg_cancel(), or it may be freed. It could also be reinitialized and then reused.”…”�”}”(hjÔÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M­hjÄÂubhë)�”}”(hŒData Transfer Rates:”h]”hŒData Transfer Rates:”…”�”}”(hjãÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M²hjÄÂubhë)�”}”(hX Bulk transfers are valid for full or high speed endpoints. The best full speed data rate is 19 packets of 64 bytes each per frame, or 1216 bytes per millisecond. The best high speed data rate is 13 packets of 512 bytes each per microframe, or 52 KBytes per millisecond.”h]”hX Bulk transfers are valid for full or high speed endpoints. The best full speed data rate is 19 packets of 64 bytes each per frame, or 1216 bytes per millisecond. The best high speed data rate is 13 packets of 512 bytes each per microframe, or 52 KBytes per millisecond.”…”�”}”(hjòÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M´hjÄÂubhë)�”}”(hXLThe reason to use interrupt transfers through this API would most likely be to reserve high speed bandwidth, where up to 24 KBytes per millisecond could be transferred. That capability is less useful for low or full speed interrupt endpoints, which allow at most one packet per millisecond, of at most 8 or 64 bytes (respectively).”h]”hXLThe reason to use interrupt transfers through this API would most likely be to reserve high speed bandwidth, where up to 24 KBytes per millisecond could be transferred. That capability is less useful for low or full speed interrupt endpoints, which allow at most one packet per millisecond, of at most 8 or 64 bytes (respectively).”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MºhjÄÂubhë)�”}”(hŒÃIt is not necessary to call this function to reserve bandwidth for devices under an xHCI host controller, as the bandwidth is reserved when the configuration or interface alt setting is selected.”h]”hŒÃIt is not necessary to call this function to reserve bandwidth for devices under an xHCI host controller, as the bandwidth is reserved when the configuration or interface alt setting is selected.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÀhjÄÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#usb_core.usb_sg_cancel (C function)”Œc.usb_core.usb_sg_cancel”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ.void usb_sg_cancel (struct usb_sg_request *io)”h]”j+)�”}”(hŒ-void usb_sg_cancel(struct usb_sg_request *io)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj?Äh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj;Äh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNÄh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj;Äh²hh³jMÄh´Mubj„)�”}”(hŒ usb_sg_cancel”h]”jŠ)�”}”(hŒ usb_sg_cancel”h]”hŒ usb_sg_cancel”…”�”}”(hj`Äh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj\Äubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj;Äh²hh³jMÄh´Mubj¥)�”}”(hŒ(struct usb_sg_request *io)”h]”j«)�”}”(hŒstruct usb_sg_request *io”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj|Äh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjxÄubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Äh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjxÄubh)�”}”(hhh]”jŠ)�”}”(hŒusb_sg_request”h]”hŒusb_sg_request”…”�”}”(hjšÄh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj—Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jœÄŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjbÄsbŒc.usb_core.usb_sg_cancel”†”esbuh1hhjxÄubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Äh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjxÄubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÉÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjxÄubjŠ)�”}”(hŒio”h]”hŒio”…”�”}”(hjÖÄh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjxÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjtÄubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj;Äh²hh³jMÄh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj7Äh²hh³jMÄh´Mubah}”(h]”j2Äah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jMÄh´Mhj4Äh²hubjü)�”}”(hhh]”hë)�”}”(hŒ/stop scatter/gather i/o issued by usb_sg_wait()”h]”hŒ/stop scatter/gather i/o issued by usb_sg_wait()”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjýÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj4Äh²hh³jMÄh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÅjjÅj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX1**Parameters** ``struct usb_sg_request *io`` request block, initialized with usb_sg_init() **Description** This stops a request after it has been started by usb_sg_wait(). It can also prevents one initialized by usb_sg_init() from starting, so that call just frees resources allocated to the request.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj"Åh]”hŒ Parameters”…”�”}”(hj$Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjÅubjD)�”}”(hhh]”jI)�”}”(hŒL``struct usb_sg_request *io`` request block, initialized with usb_sg_init() ”h]”(jO)�”}”(hŒ``struct usb_sg_request *io``”h]”jÑ)�”}”(hjAÅh]”hŒstruct usb_sg_request *io”…”�”}”(hjCÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj?Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj;Åubji)�”}”(hhh]”hë)�”}”(hŒ-request block, initialized with usb_sg_init()”h]”hŒ-request block, initialized with usb_sg_init()”…”�”}”(hjZÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jVÅh´MhjWÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj;Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jVÅh´Mhj8Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÅubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj|Åh]”hŒ Description”…”�”}”(hj~Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjzÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjÅubhë)�”}”(hŒÁThis stops a request after it has been started by usb_sg_wait(). It can also prevents one initialized by usb_sg_init() from starting, so that call just frees resources allocated to the request.”h]”hŒÁThis stops a request after it has been started by usb_sg_wait(). It can also prevents one initialized by usb_sg_init() from starting, so that call just frees resources allocated to the request.”…”�”}”(hj’Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_get_descriptor (C function)”Œc.usb_core.usb_get_descriptor”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒmint usb_get_descriptor (struct usb_device *dev, unsigned char type, unsigned char index, void *buf, int size)”h]”j+)�”}”(hŒlint usb_get_descriptor(struct usb_device *dev, unsigned char type, unsigned char index, void *buf, int size)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÁÅh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj½Åh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M1ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐÅh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj½Åh²hh³jÏÅh´M1ubj„)�”}”(hŒusb_get_descriptor”h]”jŠ)�”}”(hŒusb_get_descriptor”h]”hŒusb_get_descriptor”…”�”}”(hjâÅh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÞÅubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj½Åh²hh³jÏÅh´M1ubj¥)�”}”(hŒV(struct usb_device *dev, unsigned char type, unsigned char index, void *buf, int size)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjþÅh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjúÅubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjúÅubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÆŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjäÅsbŒc.usb_core.usb_get_descriptor”†”esbuh1hhjúÅubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Æh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjúÅubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjKÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjúÅubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjXÆh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjúÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjöÅubj«)�”}”(hŒunsigned char type”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjqÆh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjmÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjmÆubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�Æh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjmÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Æh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjmÆubjŠ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj©Æh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjmÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjöÅubj«)�”}”(hŒunsigned char index”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÂÆh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¾ÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐÆh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¾ÆubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÞÆh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¾ÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìÆh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¾ÆubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjúÆh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¾Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjöÅubj«)�”}”(hŒ void *buf”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÇubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Çh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÇubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj/Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÇubjŠ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj<Çh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÇubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjöÅubj«)�”}”(hŒint size”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjUÇh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjQÇubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÇh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjQÇubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjqÇh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjQÇubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjöÅubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj½Åh²hh³jÏÅh´M1ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj¹Åh²hh³jÏÅh´M1ubah}”(h]”j´Åah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÏÅh´M1hj¶Åh²hubjü)�”}”(hhh]”hë)�”}”(hŒ'issues a generic GET_DESCRIPTOR request”h]”hŒ'issues a generic GET_DESCRIPTOR request”…”�”}”(hj›Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M1hj˜Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¶Åh²hh³jÏÅh´M1ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj³Çjj³Çj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXœ**Parameters** ``struct usb_device *dev`` the device whose descriptor is being retrieved ``unsigned char type`` the descriptor type (USB_DT_*) ``unsigned char index`` the number of the descriptor ``void *buf`` where to put the descriptor ``int size`` how big is "buf"? **Context** task context, might sleep. **Description** Gets a USB descriptor. Convenience functions exist to simplify getting some types of descriptors. Use usb_get_string() or usb_string() for USB_DT_STRING. Device (USB_DT_DEVICE) and configuration descriptors (USB_DT_CONFIG) are part of the device structure. In addition to a number of USB-standard descriptors, some devices also use class-specific or vendor-specific descriptors. This call is synchronous, and may not be used in an interrupt context. **Return** The number of bytes received on success, or else the status code returned by the underlying usb_control_msg() call.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj½Çh]”hŒ Parameters”…”�”}”(hj¿Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj»Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M5hj·ÇubjD)�”}”(hhh]”(jI)�”}”(hŒJ``struct usb_device *dev`` the device whose descriptor is being retrieved ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjÜÇh]”hŒstruct usb_device *dev”…”�”}”(hjÞÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÚÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M2hjÖÇubji)�”}”(hhh]”hë)�”}”(hŒ.the device whose descriptor is being retrieved”h]”hŒ.the device whose descriptor is being retrieved”…”�”}”(hjõÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jñÇh´M2hjòÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÖÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jñÇh´M2hjÓÇubjI)�”}”(hŒ6``unsigned char type`` the descriptor type (USB_DT_*) ”h]”(jO)�”}”(hŒ``unsigned char type``”h]”jÑ)�”}”(hjÈh]”hŒunsigned char type”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M3hjÈubji)�”}”(hhh]”hë)�”}”(hŒthe descriptor type (USB_DT_*)”h]”hŒthe descriptor type (USB_DT_*)”…”�”}”(hj.Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j*Èh´M3hj+Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j*Èh´M3hjÓÇubjI)�”}”(hŒ5``unsigned char index`` the number of the descriptor ”h]”(jO)�”}”(hŒ``unsigned char index``”h]”jÑ)�”}”(hjNÈh]”hŒunsigned char index”…”�”}”(hjPÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjLÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M4hjHÈubji)�”}”(hhh]”hë)�”}”(hŒthe number of the descriptor”h]”hŒthe number of the descriptor”…”�”}”(hjgÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jcÈh´M4hjdÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjHÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jcÈh´M4hjÓÇubjI)�”}”(hŒ*``void *buf`` where to put the descriptor ”h]”(jO)�”}”(hŒ ``void *buf``”h]”jÑ)�”}”(hj‡Èh]”hŒ void *buf”…”�”}”(hj‰Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj…Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M5hj�Èubji)�”}”(hhh]”hë)�”}”(hŒwhere to put the descriptor”h]”hŒwhere to put the descriptor”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jœÈh´M5hj�Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�Èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jœÈh´M5hjÓÇubjI)�”}”(hŒ``int size`` how big is "buf"? ”h]”(jO)�”}”(hŒ ``int size``”h]”jÑ)�”}”(hjÀÈh]”hŒint size”…”�”}”(hjÂÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¾Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M6hjºÈubji)�”}”(hhh]”hë)�”}”(hŒhow big is "buf"?”h]”hŒhow big is “bufâ€�?”…”�”}”(hjÙÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÕÈh´M6hjÖÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjºÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÕÈh´M6hjÓÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj·Çubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjûÈh]”hŒContext”…”�”}”(hjýÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjùÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M8hj·Çubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M8hj·Çubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj"Éh]”hŒ Description”…”�”}”(hj$Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M:hj·Çubhë)�”}”(hX|Gets a USB descriptor. Convenience functions exist to simplify getting some types of descriptors. Use usb_get_string() or usb_string() for USB_DT_STRING. Device (USB_DT_DEVICE) and configuration descriptors (USB_DT_CONFIG) are part of the device structure. In addition to a number of USB-standard descriptors, some devices also use class-specific or vendor-specific descriptors.”h]”hX|Gets a USB descriptor. Convenience functions exist to simplify getting some types of descriptors. Use usb_get_string() or usb_string() for USB_DT_STRING. Device (USB_DT_DEVICE) and configuration descriptors (USB_DT_CONFIG) are part of the device structure. In addition to a number of USB-standard descriptors, some devices also use class-specific or vendor-specific descriptors.”…”�”}”(hj8Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M9hj·Çubhë)�”}”(hŒFThis call is synchronous, and may not be used in an interrupt context.”h]”hŒFThis call is synchronous, and may not be used in an interrupt context.”…”�”}”(hjGÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MAhj·Çubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjXÉh]”hŒReturn”…”�”}”(hjZÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjVÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MChj·Çubhë)�”}”(hŒsThe number of bytes received on success, or else the status code returned by the underlying usb_control_msg() call.”h]”hŒsThe number of bytes received on success, or else the status code returned by the underlying usb_control_msg() call.”…”�”}”(hjnÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MDhj·Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ usb_core.usb_string (C function)”Œc.usb_core.usb_string”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒJint usb_string (struct usb_device *dev, int index, char *buf, size_t size)”h]”j+)�”}”(hŒIint usb_string(struct usb_device *dev, int index, char *buf, size_t size)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj�Éh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™Éh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Éh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™Éh²hh³j«Éh´Mñubj„)�”}”(hŒ usb_string”h]”jŠ)�”}”(hŒ usb_string”h]”hŒ usb_string”…”�”}”(hj¾Éh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjºÉubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj™Éh²hh³j«Éh´Mñubj¥)�”}”(hŒ;(struct usb_device *dev, int index, char *buf, size_t size)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÚÉh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÖÉubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçÉh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÖÉubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjøÉh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjõÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”júÉŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÀÉsbŒc.usb_core.usb_string”†”esbuh1hhjÖÉubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÖÉubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj'Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÖÉubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj4Êh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÖÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÒÉubj«)�”}”(hŒ int index”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjMÊh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjIÊubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Êh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjIÊubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjiÊh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjIÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÒÉubj«)�”}”(hŒ char *buf”h]”(jT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj‚Êh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj~ÊubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Êh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj~Êubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjžÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj~ÊubjŠ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj«Êh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj~Êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÒÉubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÇÊh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÄÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÉÊŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÊŒc.usb_core.usb_string”†”esbuh1hhjÀÊubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæÊh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÀÊubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjôÊh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÀÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÒÉubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj™Éh²hh³j«Éh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj•Éh²hh³j«Éh´Mñubah}”(h]”j�Éah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j«Éh´Mñhj’Éh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,returns UTF-8 version of a string descriptor”h]”hŒ,returns UTF-8 version of a string descriptor”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MñhjËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj’Éh²hh³j«Éh´Mñubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj6Ëjj6Ëj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX¹**Parameters** ``struct usb_device *dev`` the device whose string descriptor is being retrieved ``int index`` the number of the descriptor ``char *buf`` where to put the string ``size_t size`` how big is "buf"? **Context** task context, might sleep. **Description** This converts the UTF-16LE encoded strings returned by devices, from usb_get_string_descriptor(), to null-terminated UTF-8 encoded ones that are more usable in most kernel contexts. Note that this function chooses strings in the first language supported by the device. This call is synchronous, and may not be used in an interrupt context. **Return** length of the string (>= 0) or usb_control_msg status (< 0).”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj@Ëh]”hŒ Parameters”…”�”}”(hjBËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj>Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mõhj:ËubjD)�”}”(hhh]”(jI)�”}”(hŒQ``struct usb_device *dev`` the device whose string descriptor is being retrieved ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj_Ëh]”hŒstruct usb_device *dev”…”�”}”(hjaËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj]Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MòhjYËubji)�”}”(hhh]”hë)�”}”(hŒ5the device whose string descriptor is being retrieved”h]”hŒ5the device whose string descriptor is being retrieved”…”�”}”(hjxËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jtËh´MòhjuËubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjYËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jtËh´MòhjVËubjI)�”}”(hŒ+``int index`` the number of the descriptor ”h]”(jO)�”}”(hŒ ``int index``”h]”jÑ)�”}”(hj˜Ëh]”hŒ int index”…”�”}”(hjšËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj–Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Móhj’Ëubji)�”}”(hhh]”hë)�”}”(hŒthe number of the descriptor”h]”hŒthe number of the descriptor”…”�”}”(hj±Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j­Ëh´Móhj®Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj’Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j­Ëh´MóhjVËubjI)�”}”(hŒ&``char *buf`` where to put the string ”h]”(jO)�”}”(hŒ ``char *buf``”h]”jÑ)�”}”(hjÑËh]”hŒ char *buf”…”�”}”(hjÓËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÏËubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MôhjËËubji)�”}”(hhh]”hë)�”}”(hŒwhere to put the string”h]”hŒwhere to put the string”…”�”}”(hjêËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jæËh´MôhjçËubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjËËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jæËh´MôhjVËubjI)�”}”(hŒ"``size_t size`` how big is "buf"? ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hj Ìh]”hŒ size_t size”…”�”}”(hj Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MõhjÌubji)�”}”(hhh]”hë)�”}”(hŒhow big is "buf"?”h]”hŒhow big is “bufâ€�?”…”�”}”(hj#Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÌh´Mõhj Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÌh´MõhjVËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj:Ëubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjEÌh]”hŒContext”…”�”}”(hjGÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjCÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M÷hj:Ëubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj[Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M÷hj:Ëubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjlÌh]”hŒ Description”…”�”}”(hjnÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mùhj:Ëubhë)�”}”(hX This converts the UTF-16LE encoded strings returned by devices, from usb_get_string_descriptor(), to null-terminated UTF-8 encoded ones that are more usable in most kernel contexts. Note that this function chooses strings in the first language supported by the device.”h]”hX This converts the UTF-16LE encoded strings returned by devices, from usb_get_string_descriptor(), to null-terminated UTF-8 encoded ones that are more usable in most kernel contexts. Note that this function chooses strings in the first language supported by the device.”…”�”}”(hj‚Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Møhj:Ëubhë)�”}”(hŒFThis call is synchronous, and may not be used in an interrupt context.”h]”hŒFThis call is synchronous, and may not be used in an interrupt context.”…”�”}”(hj‘Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mýhj:Ëubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj¢Ìh]”hŒReturn”…”�”}”(hj¤Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mÿhj:Ëubhë)�”}”(hŒ= 0) or usb_control_msg status (< 0).”h]”hŒ= 0) or usb_control_msg status (< 0).”…”�”}”(hj¸Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj:Ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_core.usb_cache_string (C function)”Œc.usb_core.usb_cache_string”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒÍh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj-Íubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjOÍh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjLÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jQÍŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÍsbŒc.usb_core.usb_cache_string”†”esbuh1hhj-ÍubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÍh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj-Íubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj~Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj-ÍubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj‹Íh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj-Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj)Íubj«)�”}”(hŒ int index”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¤Íh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ÍubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Íh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ÍubjŠ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjÀÍh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj)Íubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjãÌh²hh³jõÌh´M.ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjßÌh²hh³jõÌh´M.ubah}”(h]”jÚÌah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jõÌh´M.hjÜÌh²hubjü)�”}”(hhh]”hë)�”}”(hŒ3read a string descriptor and cache it for later use”h]”hŒ3read a string descriptor and cache it for later use”…”�”}”(hjêÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M.hjçÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÜÌh²hh³jõÌh´M.ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÎjjÎj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *udev`` the device whose string descriptor is being read ``int index`` the descriptor index **Return** A pointer to a kmalloc'ed buffer containing the descriptor string, or ``NULL`` if the index is 0 or the string could not be read.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj Îh]”hŒ Parameters”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M2hjÎubjD)�”}”(hhh]”(jI)�”}”(hŒM``struct usb_device *udev`` the device whose string descriptor is being read ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hj+Îh]”hŒstruct usb_device *udev”…”�”}”(hj-Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj)Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M/hj%Îubji)�”}”(hhh]”hë)�”}”(hŒ0the device whose string descriptor is being read”h]”hŒ0the device whose string descriptor is being read”…”�”}”(hjDÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j@Îh´M/hjAÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj%Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j@Îh´M/hj"ÎubjI)�”}”(hŒ#``int index`` the descriptor index ”h]”(jO)�”}”(hŒ ``int index``”h]”jÑ)�”}”(hjdÎh]”hŒ int index”…”�”}”(hjfÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjbÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M0hj^Îubji)�”}”(hhh]”hë)�”}”(hŒthe descriptor index”h]”hŒthe descriptor index”…”�”}”(hj}Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jyÎh´M0hjzÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj^Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jyÎh´M0hj"Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÎubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjŸÎh]”hŒReturn”…”�”}”(hj¡Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M2hjÎubhë)�”}”(hŒ�A pointer to a kmalloc'ed buffer containing the descriptor string, or ``NULL`` if the index is 0 or the string could not be read.”h]”(hŒHA pointer to a kmalloc’ed buffer containing the descriptor string, or ”…”�”}”(hjµÎh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj½Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjµÎubhŒ3 if the index is 0 or the string could not be read.”…”�”}”(hjµÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M2hjÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”•q}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$usb_core.usb_get_status (C function)”Œc.usb_core.usb_get_status”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒXint usb_get_status (struct usb_device *dev, int recip, int type, int target, void *data)”h]”j+)�”}”(hŒWint usb_get_status(struct usb_device *dev, int recip, int type, int target, void *data)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjöÎh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjòÎh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M‰ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjòÎh²hh³jÏh´M‰ubj„)�”}”(hŒusb_get_status”h]”jŠ)�”}”(hŒusb_get_status”h]”hŒusb_get_status”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÏubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjòÎh²hh³jÏh´M‰ubj¥)�”}”(hŒE(struct usb_device *dev, int recip, int type, int target, void *data)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj3Ïh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj/ÏubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Ïh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj/Ïubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjQÏh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjNÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jSÏŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÏsbŒc.usb_core.usb_get_status”†”esbuh1hhj/ÏubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrÏh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj/Ïubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj€Ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj/ÏubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj�Ïh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj/Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj+Ïubj«)�”}”(hŒ int recip”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¦Ïh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¢ÏubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Ïh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¢ÏubjŠ)�”}”(hŒrecip”h]”hŒrecip”…”�”}”(hjÂÏh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¢Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj+Ïubj«)�”}”(hŒint type”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÛÏh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj×ÏubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéÏh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj×ÏubjŠ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj÷Ïh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj×Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj+Ïubj«)�”}”(hŒ int target”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ÐubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ÐubjŠ)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj,Ðh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj Ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj+Ïubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjEÐh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjAÐubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSÐh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjAÐubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjaÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjAÐubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjnÐh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjAÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj+Ïubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjòÎh²hh³jÏh´M‰ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjîÎh²hh³jÏh´M‰ubah}”(h]”jéÎah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÏh´M‰hjëÎh²hubjü)�”}”(hhh]”hë)�”}”(hŒissues a GET_STATUS call”h]”hŒissues a GET_STATUS call”…”�”}”(hj˜Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M‰hj•Ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjëÎh²hh³jÏh´M‰ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj°Ðjj°Ðj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *dev`` the device whose status is being checked ``int recip`` USB_RECIP_*; for device, interface, or endpoint ``int type`` USB_STATUS_TYPE_*; for standard or PTM status types ``int target`` zero (for device), else interface or endpoint number ``void *data`` pointer to two bytes of bitmap data **Context** task context, might sleep. **Description** Returns device, interface, or endpoint status. Normally only of interest to see if the device is self powered, or has enabled the remote wakeup facility; or whether a bulk or interrupt endpoint is halted ("stalled"). Bits in these status bitmaps are set using the SET_FEATURE request, and cleared using the CLEAR_FEATURE request. The usb_clear_halt() function should be used to clear halt ("stall") status. This call is synchronous, and may not be used in an interrupt context. Returns 0 and the status value in ***data** (in host byte order) on success, or else the status code from the underlying usb_control_msg() call.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjºÐh]”hŒ Parameters”…”�”}”(hj¼Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¸Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hj´ÐubjD)�”}”(hhh]”(jI)�”}”(hŒD``struct usb_device *dev`` the device whose status is being checked ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjÙÐh]”hŒstruct usb_device *dev”…”�”}”(hjÛÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj×Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MŠhjÓÐubji)�”}”(hhh]”hë)�”}”(hŒ(the device whose status is being checked”h]”hŒ(the device whose status is being checked”…”�”}”(hjòÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jîÐh´MŠhjïÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÓÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jîÐh´MŠhjÐÐubjI)�”}”(hŒ>``int recip`` USB_RECIP_*; for device, interface, or endpoint ”h]”(jO)�”}”(hŒ ``int recip``”h]”jÑ)�”}”(hjÑh]”hŒ int recip”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M‹hj Ñubji)�”}”(hhh]”hë)�”}”(hŒ/USB_RECIP_*; for device, interface, or endpoint”h]”hŒ/USB_RECIP_*; for device, interface, or endpoint”…”�”}”(hj+Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j'Ñh´M‹hj(Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j'Ñh´M‹hjÐÐubjI)�”}”(hŒA``int type`` USB_STATUS_TYPE_*; for standard or PTM status types ”h]”(jO)�”}”(hŒ ``int type``”h]”jÑ)�”}”(hjKÑh]”hŒint type”…”�”}”(hjMÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjIÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MŒhjEÑubji)�”}”(hhh]”hë)�”}”(hŒ3USB_STATUS_TYPE_*; for standard or PTM status types”h]”hŒ3USB_STATUS_TYPE_*; for standard or PTM status types”…”�”}”(hjdÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j`Ñh´MŒhjaÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjEÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j`Ñh´MŒhjÐÐubjI)�”}”(hŒD``int target`` zero (for device), else interface or endpoint number ”h]”(jO)�”}”(hŒ``int target``”h]”jÑ)�”}”(hj„Ñh]”hŒ int target”…”�”}”(hj†Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‚Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hj~Ñubji)�”}”(hhh]”hë)�”}”(hŒ4zero (for device), else interface or endpoint number”h]”hŒ4zero (for device), else interface or endpoint number”…”�”}”(hj�Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j™Ñh´M�hjšÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj~Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j™Ñh´M�hjÐÐubjI)�”}”(hŒ3``void *data`` pointer to two bytes of bitmap data ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hj½Ñh]”hŒ void *data”…”�”}”(hj¿Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj»Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MŽhj·Ñubji)�”}”(hhh]”hë)�”}”(hŒ#pointer to two bytes of bitmap data”h]”hŒ#pointer to two bytes of bitmap data”…”�”}”(hjÖÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÒÑh´MŽhjÓÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj·Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÒÑh´MŽhjÐÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj´Ðubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjøÑh]”hŒContext”…”�”}”(hjúÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjöÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hj´Ðubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M�hj´Ðubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÒh]”hŒ Description”…”�”}”(hj!Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M’hj´Ðubhë)�”}”(hŒÙReturns device, interface, or endpoint status. Normally only of interest to see if the device is self powered, or has enabled the remote wakeup facility; or whether a bulk or interrupt endpoint is halted ("stalled").”h]”hŒÝReturns device, interface, or endpoint status. Normally only of interest to see if the device is self powered, or has enabled the remote wakeup facility; or whether a bulk or interrupt endpoint is halted (“stalledâ€�).”…”�”}”(hj5Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M‘hj´Ðubhë)�”}”(hŒ¾Bits in these status bitmaps are set using the SET_FEATURE request, and cleared using the CLEAR_FEATURE request. The usb_clear_halt() function should be used to clear halt ("stall") status.”h]”hŒÂBits in these status bitmaps are set using the SET_FEATURE request, and cleared using the CLEAR_FEATURE request. The usb_clear_halt() function should be used to clear halt (“stallâ€�) status.”…”�”}”(hjDÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M–hj´Ðubhë)�”}”(hŒFThis call is synchronous, and may not be used in an interrupt context.”h]”hŒFThis call is synchronous, and may not be used in an interrupt context.”…”�”}”(hjSÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mšhj´Ðubhë)�”}”(hŒ�Returns 0 and the status value in ***data** (in host byte order) on success, or else the status code from the underlying usb_control_msg() call.”h]”(hŒ"Returns 0 and the status value in ”…”�”}”(hjbÒh²hh³Nh´Nubj.)�”}”(hŒ ***data**”h]”hŒ*data”…”�”}”(hjjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjbÒubhŒe (in host byte order) on success, or else the status code from the underlying usb_control_msg() call.”…”�”}”(hjbÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mœhj´Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$usb_core.usb_clear_halt (C function)”Œc.usb_core.usb_clear_halt”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ5int usb_clear_halt (struct usb_device *dev, int pipe)”h]”j+)�”}”(hŒ4int usb_clear_halt(struct usb_device *dev, int pipe)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj£Òh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŸÒh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Òh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŸÒh²hh³j±Òh´MÚubj„)�”}”(hŒusb_clear_halt”h]”jŠ)�”}”(hŒusb_clear_halt”h]”hŒusb_clear_halt”…”�”}”(hjÄÒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÀÒubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŸÒh²hh³j±Òh´MÚubj¥)�”}”(hŒ"(struct usb_device *dev, int pipe)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjàÒh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÜÒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíÒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜÒubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjþÒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjûÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÓŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÆÒsbŒc.usb_core.usb_clear_halt”†”esbuh1hhjÜÒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜÒubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj-Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÜÒubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj:Óh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÜÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØÒubj«)�”}”(hŒint pipe”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjSÓh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjOÓubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÓh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjOÓubjŠ)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hjoÓh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjOÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØÒubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŸÒh²hh³j±Òh´MÚubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj›Òh²hh³j±Òh´MÚubah}”(h]”j–Òah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j±Òh´MÚhj˜Òh²hubjü)�”}”(hhh]”hë)�”}”(hŒ3tells device to clear endpoint halt/stall condition”h]”hŒ3tells device to clear endpoint halt/stall condition”…”�”}”(hj™Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÚhj–Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj˜Òh²hh³j±Òh´MÚubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj±Ójj±Ój ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXR**Parameters** ``struct usb_device *dev`` device whose endpoint is halted ``int pipe`` endpoint "pipe" being cleared **Context** task context, might sleep. **Description** This is used to clear halt conditions for bulk and interrupt endpoints, as reported by URB completion status. Endpoints that are halted are sometimes referred to as being "stalled". Such endpoints are unable to transmit or receive data until the halt status is cleared. Any URBs queued for such an endpoint should normally be unlinked by the driver before clearing the halt condition, as described in sections 5.7.5 and 5.8.5 of the USB 2.0 spec. Note that control and isochronous endpoints don't halt, although control endpoints report "protocol stall" (for unsupported requests) using the same status code used to report a true stall. This call is synchronous, and may not be used in an interrupt context. If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. **Return** Zero on success, or else the status code returned by the underlying usb_control_msg() call.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj»Óh]”hŒ Parameters”…”�”}”(hj½Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹Óubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÞhjµÓubjD)�”}”(hhh]”(jI)�”}”(hŒ;``struct usb_device *dev`` device whose endpoint is halted ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjÚÓh]”hŒstruct usb_device *dev”…”�”}”(hjÜÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjØÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÛhjÔÓubji)�”}”(hhh]”hë)�”}”(hŒdevice whose endpoint is halted”h]”hŒdevice whose endpoint is halted”…”�”}”(hjóÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jïÓh´MÛhjðÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÔÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jïÓh´MÛhjÑÓubjI)�”}”(hŒ+``int pipe`` endpoint "pipe" being cleared ”h]”(jO)�”}”(hŒ ``int pipe``”h]”jÑ)�”}”(hjÔh]”hŒint pipe”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÜhj Ôubji)�”}”(hhh]”hë)�”}”(hŒendpoint "pipe" being cleared”h]”hŒ!endpoint “pipeâ€� being cleared”…”�”}”(hj,Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j(Ôh´MÜhj)Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j(Ôh´MÜhjÑÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjµÓubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjNÔh]”hŒContext”…”�”}”(hjPÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjLÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÞhjµÓubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjdÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÞhjµÓubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjuÔh]”hŒ Description”…”�”}”(hjwÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjsÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MàhjµÓubhë)�”}”(hXÁThis is used to clear halt conditions for bulk and interrupt endpoints, as reported by URB completion status. Endpoints that are halted are sometimes referred to as being "stalled". Such endpoints are unable to transmit or receive data until the halt status is cleared. Any URBs queued for such an endpoint should normally be unlinked by the driver before clearing the halt condition, as described in sections 5.7.5 and 5.8.5 of the USB 2.0 spec.”h]”hXÅThis is used to clear halt conditions for bulk and interrupt endpoints, as reported by URB completion status. Endpoints that are halted are sometimes referred to as being “stalledâ€�. Such endpoints are unable to transmit or receive data until the halt status is cleared. Any URBs queued for such an endpoint should normally be unlinked by the driver before clearing the halt condition, as described in sections 5.7.5 and 5.8.5 of the USB 2.0 spec.”…”�”}”(hj‹Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MßhjµÓubhë)�”}”(hŒ½Note that control and isochronous endpoints don't halt, although control endpoints report "protocol stall" (for unsupported requests) using the same status code used to report a true stall.”h]”hŒÃNote that control and isochronous endpoints don’t halt, although control endpoints report “protocol stallâ€� (for unsupported requests) using the same status code used to report a true stall.”…”�”}”(hjšÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MçhjµÓubhë)�”}”(hŒ±This call is synchronous, and may not be used in an interrupt context. If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete.”h]”hŒ±This call is synchronous, and may not be used in an interrupt context. If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete.”…”�”}”(hj©Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MëhjµÓubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjºÔh]”hŒReturn”…”�”}”(hj¼Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¸Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MïhjµÓubhë)�”}”(hŒ[Zero on success, or else the status code returned by the underlying usb_control_msg() call.”h]”hŒ[Zero on success, or else the status code returned by the underlying usb_control_msg() call.”…”�”}”(hjÐÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MðhjµÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_reset_endpoint (C function)”Œc.usb_core.usb_reset_endpoint”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒEvoid usb_reset_endpoint (struct usb_device *dev, unsigned int epaddr)”h]”j+)�”}”(hŒDvoid usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÿÔh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjûÔh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjûÔh²hh³j Õh´M_ubj„)�”}”(hŒusb_reset_endpoint”h]”jŠ)�”}”(hŒusb_reset_endpoint”h]”hŒusb_reset_endpoint”…”�”}”(hj Õh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÕubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjûÔh²hh³j Õh´M_ubj¥)�”}”(hŒ-(struct usb_device *dev, unsigned int epaddr)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj<Õh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj8ÕubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIÕh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj8Õubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjZÕh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjWÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j\ÕŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj"ÕsbŒc.usb_core.usb_reset_endpoint”†”esbuh1hhj8ÕubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Õh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj8Õubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj‰Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj8ÕubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj–Õh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj8Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj4Õubj«)�”}”(hŒunsigned int epaddr”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¯Õh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj«ÕubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Õh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj«ÕubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjËÕh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj«ÕubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÕh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj«ÕubjŠ)�”}”(hŒepaddr”h]”hŒepaddr”…”�”}”(hjçÕh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj«Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj4Õubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjûÔh²hh³j Õh´M_ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj÷Ôh²hh³j Õh´M_ubah}”(h]”jòÔah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j Õh´M_hjôÔh²hubjü)�”}”(hhh]”hë)�”}”(hŒReset an endpoint's state.”h]”hŒReset an endpoint’s state.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M_hjÖh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjôÔh²hh³j Õh´M_ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj)Öjj)Öj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX?**Parameters** ``struct usb_device *dev`` the device whose endpoint is to be reset ``unsigned int epaddr`` the endpoint's address. Endpoint number for output, endpoint number + USB_DIR_IN for input **Description** Resets any host-side endpoint state such as the toggle bit, sequence number or current window.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj3Öh]”hŒ Parameters”…”�”}”(hj5Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj1Öubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mchj-ÖubjD)�”}”(hhh]”(jI)�”}”(hŒD``struct usb_device *dev`` the device whose endpoint is to be reset ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjRÖh]”hŒstruct usb_device *dev”…”�”}”(hjTÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjPÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M`hjLÖubji)�”}”(hhh]”hë)�”}”(hŒ(the device whose endpoint is to be reset”h]”hŒ(the device whose endpoint is to be reset”…”�”}”(hjkÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jgÖh´M`hjhÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjLÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jgÖh´M`hjIÖubjI)�”}”(hŒt``unsigned int epaddr`` the endpoint's address. Endpoint number for output, endpoint number + USB_DIR_IN for input ”h]”(jO)�”}”(hŒ``unsigned int epaddr``”h]”jÑ)�”}”(hj‹Öh]”hŒunsigned int epaddr”…”�”}”(hj�Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‰Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mbhj…Öubji)�”}”(hhh]”hë)�”}”(hŒ[the endpoint's address. Endpoint number for output, endpoint number + USB_DIR_IN for input”h]”hŒ]the endpoint’s address. Endpoint number for output, endpoint number + USB_DIR_IN for input”…”�”}”(hj¤Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mahj¡Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj…Öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j Öh´MbhjIÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj-Öubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÇÖh]”hŒ Description”…”�”}”(hjÉÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÅÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mdhj-Öubhë)�”}”(hŒ^Resets any host-side endpoint state such as the toggle bit, sequence number or current window.”h]”hŒ^Resets any host-side endpoint state such as the toggle bit, sequence number or current window.”…”�”}”(hjÝÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mchj-Öubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_set_interface (C function)”Œc.usb_core.usb_set_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒLint usb_set_interface (struct usb_device *dev, int interface, int alternate)”h]”j+)�”}”(hŒKint usb_set_interface(struct usb_device *dev, int interface, int alternate)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj ×h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj×h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj×h²hh³j×h´Mubj„)�”}”(hŒusb_set_interface”h]”jŠ)�”}”(hŒusb_set_interface”h]”hŒusb_set_interface”…”�”}”(hj-×h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj)×ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj×h²hh³j×h´Mubj¥)�”}”(hŒ6(struct usb_device *dev, int interface, int alternate)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjI×h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjE×ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV×h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjE×ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjg×h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjd×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”ji׌modname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj/×sbŒc.usb_core.usb_set_interface”†”esbuh1hhjE×ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ×h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjE×ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj–×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjE×ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj£×h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjE×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjA×ubj«)�”}”(hŒ int interface”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¼×h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¸×ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ×h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¸×ubjŠ)�”}”(hŒ interface”h]”hŒ interface”…”�”}”(hjØ×h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¸×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjA×ubj«)�”}”(hŒ int alternate”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjñ×h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjí×ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ×h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjí×ubjŠ)�”}”(hŒ alternate”h]”hŒ alternate”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjí×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjA×ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj×h²hh³j×h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj×h²hh³j×h´Mubah}”(h]”jÿÖah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j×h´Mhj×h²hubjü)�”}”(hhh]”hë)�”}”(hŒ/Makes a particular alternate setting be current”h]”hŒ/Makes a particular alternate setting be current”…”�”}”(hj7Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj4Øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj×h²hh³j×h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjOØjjOØj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXk**Parameters** ``struct usb_device *dev`` the device whose interface is being updated ``int interface`` the interface being updated ``int alternate`` the setting being chosen. **Context** task context, might sleep. **Description** This is used to enable data transfers on interfaces that may not be enabled by default. Not all devices support such configurability. Only the driver bound to an interface may change its setting. Within any given configuration, each interface may have several alternative settings. These are often used to control levels of bandwidth consumption. For example, the default setting for a high speed interrupt endpoint may not send more than 64 bytes per microframe, while interrupt transfers of up to 3KBytes per microframe are legal. Also, isochronous endpoints may never be part of an interface's default setting. To access such bandwidth, alternate interface settings must be made current. Note that in the Linux USB subsystem, bandwidth associated with an endpoint in a given alternate setting is not reserved until an URB is submitted that needs that bandwidth. Some other operating systems allocate bandwidth early, when a configuration is chosen. xHCI reserves bandwidth and configures the alternate setting in usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting may be disabled. Drivers cannot rely on any particular alternate setting being in effect after a failure. This call is synchronous, and may not be used in an interrupt context. Also, drivers must not change altsettings while urbs are scheduled for endpoints in that interface; all such urbs must first be completed (perhaps forced by unlinking). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete. **Return** Zero on success, or else the status code returned by the underlying usb_control_msg() call.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjYØh]”hŒ Parameters”…”�”}”(hj[Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjWØubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubjD)�”}”(hhh]”(jI)�”}”(hŒG``struct usb_device *dev`` the device whose interface is being updated ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjxØh]”hŒstruct usb_device *dev”…”�”}”(hjzØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjvØubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjrØubji)�”}”(hhh]”hë)�”}”(hŒ+the device whose interface is being updated”h]”hŒ+the device whose interface is being updated”…”�”}”(hj‘Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�Øh´MhjŽØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjrØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�Øh´MhjoØubjI)�”}”(hŒ.``int interface`` the interface being updated ”h]”(jO)�”}”(hŒ``int interface``”h]”jÑ)�”}”(hj±Øh]”hŒ int interface”…”�”}”(hj³Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¯Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´Mhj«Øubji)�”}”(hhh]”hë)�”}”(hŒthe interface being updated”h]”hŒthe interface being updated”…”�”}”(hjÊØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÆØh´MhjÇØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj«Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÆØh´MhjoØubjI)�”}”(hŒ,``int alternate`` the setting being chosen. ”h]”(jO)�”}”(hŒ``int alternate``”h]”jÑ)�”}”(hjêØh]”hŒ int alternate”…”�”}”(hjìØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjèØubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjäØubji)�”}”(hhh]”hë)�”}”(hŒthe setting being chosen.”h]”hŒthe setting being chosen.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÿØh´MhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjäØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÿØh´MhjoØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjSØubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj%Ùh]”hŒContext”…”�”}”(hj'Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj#Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj;Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjLÙh]”hŒ Description”…”�”}”(hjNÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjJÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubhë)�”}”(hŒÄThis is used to enable data transfers on interfaces that may not be enabled by default. Not all devices support such configurability. Only the driver bound to an interface may change its setting.”h]”hŒÄThis is used to enable data transfers on interfaces that may not be enabled by default. Not all devices support such configurability. Only the driver bound to an interface may change its setting.”…”�”}”(hjbÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubhë)�”}”(hXñWithin any given configuration, each interface may have several alternative settings. These are often used to control levels of bandwidth consumption. For example, the default setting for a high speed interrupt endpoint may not send more than 64 bytes per microframe, while interrupt transfers of up to 3KBytes per microframe are legal. Also, isochronous endpoints may never be part of an interface's default setting. To access such bandwidth, alternate interface settings must be made current.”h]”hXóWithin any given configuration, each interface may have several alternative settings. These are often used to control levels of bandwidth consumption. For example, the default setting for a high speed interrupt endpoint may not send more than 64 bytes per microframe, while interrupt transfers of up to 3KBytes per microframe are legal. Also, isochronous endpoints may never be part of an interface’s default setting. To access such bandwidth, alternate interface settings must be made current.”…”�”}”(hjqÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MhjSØubhë)�”}”(hXNote that in the Linux USB subsystem, bandwidth associated with an endpoint in a given alternate setting is not reserved until an URB is submitted that needs that bandwidth. Some other operating systems allocate bandwidth early, when a configuration is chosen.”h]”hXNote that in the Linux USB subsystem, bandwidth associated with an endpoint in a given alternate setting is not reserved until an URB is submitted that needs that bandwidth. Some other operating systems allocate bandwidth early, when a configuration is chosen.”…”�”}”(hj€Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M%hjSØubhë)�”}”(hŒòxHCI reserves bandwidth and configures the alternate setting in usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting may be disabled. Drivers cannot rely on any particular alternate setting being in effect after a failure.”h]”hŒòxHCI reserves bandwidth and configures the alternate setting in usb_hcd_alloc_bandwidth(). If it fails the original interface altsetting may be disabled. Drivers cannot rely on any particular alternate setting being in effect after a failure.”…”�”}”(hj�Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M*hjSØubhë)�”}”(hXZThis call is synchronous, and may not be used in an interrupt context. Also, drivers must not change altsettings while urbs are scheduled for endpoints in that interface; all such urbs must first be completed (perhaps forced by unlinking). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete.”h]”hXZThis call is synchronous, and may not be used in an interrupt context. Also, drivers must not change altsettings while urbs are scheduled for endpoints in that interface; all such urbs must first be completed (perhaps forced by unlinking). If a thread in your driver uses this call, make sure your disconnect() method can wait for it to complete.”…”�”}”(hjžÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M/hjSØubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj¯Ùh]”hŒReturn”…”�”}”(hj±Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj­Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M5hjSØubhë)�”}”(hŒ[Zero on success, or else the status code returned by the underlying usb_control_msg() call.”h]”hŒ[Zero on success, or else the status code returned by the underlying usb_control_msg() call.”…”�”}”(hjÅÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M6hjSØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_reset_configuration (C function)”Œ"c.usb_core.usb_reset_configuration”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ4int usb_reset_configuration (struct usb_device *dev)”h]”j+)�”}”(hŒ3int usb_reset_configuration(struct usb_device *dev)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjôÙh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjðÙh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjðÙh²hh³jÚh´MÆubj„)�”}”(hŒusb_reset_configuration”h]”jŠ)�”}”(hŒusb_reset_configuration”h]”hŒusb_reset_configuration”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjðÙh²hh³jÚh´MÆubj¥)�”}”(hŒ(struct usb_device *dev)”h]”j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj1Úh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj-ÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Úh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj-Úubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjOÚh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjLÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jQÚŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÚsbŒ"c.usb_core.usb_reset_configuration”†”esbuh1hhj-ÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÚh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj-Úubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj~Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj-ÚubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj‹Úh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj-Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj)Úubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjðÙh²hh³jÚh´MÆubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjìÙh²hh³jÚh´MÆubah}”(h]”jçÙah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÚh´MÆhjéÙh²hubjü)�”}”(hhh]”hë)�”}”(hŒlightweight device reset”h]”hŒlightweight device reset”…”�”}”(hjµÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÆhj²Úh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjéÙh²hh³jÚh´MÆubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÍÚjjÍÚj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXz**Parameters** ``struct usb_device *dev`` the device whose configuration is being reset **Description** This issues a standard SET_CONFIGURATION request to the device using the current configuration. The effect is to reset most USB-related state in the device, including interface altsettings (reset to zero), endpoint halts (cleared), and endpoint state (only for bulk and interrupt endpoints). Other usbcore state is unchanged, including bindings of usb device drivers to interfaces. Because this affects multiple interfaces, avoid using this with composite (multi-interface) devices. Instead, the driver for each interface may use usb_set_interface() on the interfaces it claims. Be careful though; some devices don't support the SET_INTERFACE request, and others won't reset all the interface state (notably endpoint state). Resetting the whole configuration would affect other drivers' interfaces. The caller must own the device lock. If this routine fails the device will probably be in an unusable state with endpoints disabled, and interfaces only partially enabled. **Return** Zero on success, else a negative error code.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj×Úh]”hŒ Parameters”…”�”}”(hjÙÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÕÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÊhjÑÚubjD)�”}”(hhh]”jI)�”}”(hŒI``struct usb_device *dev`` the device whose configuration is being reset ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjöÚh]”hŒstruct usb_device *dev”…”�”}”(hjøÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjôÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÇhjðÚubji)�”}”(hhh]”hë)�”}”(hŒ-the device whose configuration is being reset”h]”hŒ-the device whose configuration is being reset”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j Ûh´MÇhj Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjðÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j Ûh´MÇhjíÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÑÚubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj1Ûh]”hŒ Description”…”�”}”(hj3Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj/Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÉhjÑÚubhë)�”}”(hXThis issues a standard SET_CONFIGURATION request to the device using the current configuration. The effect is to reset most USB-related state in the device, including interface altsettings (reset to zero), endpoint halts (cleared), and endpoint state (only for bulk and interrupt endpoints). Other usbcore state is unchanged, including bindings of usb device drivers to interfaces.”h]”hXThis issues a standard SET_CONFIGURATION request to the device using the current configuration. The effect is to reset most USB-related state in the device, including interface altsettings (reset to zero), endpoint halts (cleared), and endpoint state (only for bulk and interrupt endpoints). Other usbcore state is unchanged, including bindings of usb device drivers to interfaces.”…”�”}”(hjGÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÈhjÑÚubhë)�”}”(hX£Because this affects multiple interfaces, avoid using this with composite (multi-interface) devices. Instead, the driver for each interface may use usb_set_interface() on the interfaces it claims. Be careful though; some devices don't support the SET_INTERFACE request, and others won't reset all the interface state (notably endpoint state). Resetting the whole configuration would affect other drivers' interfaces.”h]”hX©Because this affects multiple interfaces, avoid using this with composite (multi-interface) devices. Instead, the driver for each interface may use usb_set_interface() on the interfaces it claims. Be careful though; some devices don’t support the SET_INTERFACE request, and others won’t reset all the interface state (notably endpoint state). Resetting the whole configuration would affect other drivers’ interfaces.”…”�”}”(hjVÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÏhjÑÚubhë)�”}”(hŒ$The caller must own the device lock.”h]”hŒ$The caller must own the device lock.”…”�”}”(hjeÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÖhjÑÚubhë)�”}”(hŒ†If this routine fails the device will probably be in an unusable state with endpoints disabled, and interfaces only partially enabled.”h]”hŒ†If this routine fails the device will probably be in an unusable state with endpoints disabled, and interfaces only partially enabled.”…”�”}”(hjtÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÙhjÑÚubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj…Ûh]”hŒReturn”…”�”}”(hj‡Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjƒÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÜhjÑÚubhë)�”}”(hŒ,Zero on success, else a negative error code.”h]”hŒ,Zero on success, else a negative error code.”…”�”}”(hj›Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÙhjÑÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_set_wireless_status (C function)”Œ"c.usb_core.usb_set_wireless_status”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒZint usb_set_wireless_status (struct usb_interface *iface, enum usb_wireless_status status)”h]”j+)�”}”(hŒYint usb_set_wireless_status(struct usb_interface *iface, enum usb_wireless_status status)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊÛh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÆÛh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÊubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÛh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÆÛh²hh³jØÛh´MÊubj„)�”}”(hŒusb_set_wireless_status”h]”jŠ)�”}”(hŒusb_set_wireless_status”h]”hŒusb_set_wireless_status”…”�”}”(hjëÛh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjçÛubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÆÛh²hh³jØÛh´MÊubj¥)�”}”(hŒ>(struct usb_interface *iface, enum usb_wireless_status status)”h]”(j«)�”}”(hŒstruct usb_interface *iface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÜubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj%Üh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"Üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j'ÜŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjíÛsbŒ"c.usb_core.usb_set_wireless_status”†”esbuh1hhjÜubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFÜh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjTÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÜubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hjaÜh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÿÛubj«)�”}”(hŒenum usb_wireless_status status”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hjzÜh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjvÜubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Üh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjvÜubh)�”}”(hhh]”jŠ)�”}”(hŒusb_wireless_status”h]”hŒusb_wireless_status”…”�”}”(hj˜Üh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj•Üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jšÜŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jBÜŒ"c.usb_core.usb_set_wireless_status”†”esbuh1hhjvÜubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Üh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjvÜubjŠ)�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hjÅÜh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjvÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÿÛubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÆÛh²hh³jØÛh´MÊubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÂÛh²hh³jØÛh´MÊubah}”(h]”j½Ûah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jØÛh´MÊhj¿Ûh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&sets the wireless_status struct member”h]”hŒ&sets the wireless_status struct member”…”�”}”(hjïÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÊhjìÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¿Ûh²hh³jØÛh´MÊubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÝjjÝj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX,**Parameters** ``struct usb_interface *iface`` the interface to modify ``enum usb_wireless_status status`` the new wireless status **Description** Set the wireless_status struct member to the new value, and emit sysfs changes as necessary. **Return** 0 on success, -EALREADY if already set.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÝh]”hŒ Parameters”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÎhj ÝubjD)�”}”(hhh]”(jI)�”}”(hŒ8``struct usb_interface *iface`` the interface to modify ”h]”(jO)�”}”(hŒ``struct usb_interface *iface``”h]”jÑ)�”}”(hj0Ýh]”hŒstruct usb_interface *iface”…”�”}”(hj2Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj.Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MËhj*Ýubji)�”}”(hhh]”hë)�”}”(hŒthe interface to modify”h]”hŒthe interface to modify”…”�”}”(hjIÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jEÝh´MËhjFÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj*Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jEÝh´MËhj'ÝubjI)�”}”(hŒ<``enum usb_wireless_status status`` the new wireless status ”h]”(jO)�”}”(hŒ#``enum usb_wireless_status status``”h]”jÑ)�”}”(hjiÝh]”hŒenum usb_wireless_status status”…”�”}”(hjkÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjgÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÌhjcÝubji)�”}”(hhh]”hë)�”}”(hŒthe new wireless status”h]”hŒthe new wireless status”…”�”}”(hj‚Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j~Ýh´MÌhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjcÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j~Ýh´MÌhj'Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj Ýubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj¤Ýh]”hŒ Description”…”�”}”(hj¦Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¢Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÎhj Ýubhë)�”}”(hŒ\Set the wireless_status struct member to the new value, and emit sysfs changes as necessary.”h]”hŒ\Set the wireless_status struct member to the new value, and emit sysfs changes as necessary.”…”�”}”(hjºÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÍhj Ýubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjËÝh]”hŒReturn”…”�”}”(hjÍÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÉÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÐhj Ýubhë)�”}”(hŒ'0 on success, -EALREADY if already set.”h]”hŒ'0 on success, -EALREADY if already set.”…”�”}”(hjáÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MÑhj Ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2usb_core.usb_driver_set_configuration (C function)”Œ'c.usb_core.usb_driver_set_configuration”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒFint usb_driver_set_configuration (struct usb_device *udev, int config)”h]”j+)�”}”(hŒEint usb_driver_set_configuration(struct usb_device *udev, int config)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj Þh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M# ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj Þh²hh³jÞh´M# ubj„)�”}”(hŒusb_driver_set_configuration”h]”jŠ)�”}”(hŒusb_driver_set_configuration”h]”hŒusb_driver_set_configuration”…”�”}”(hj1Þh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj-Þubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj Þh²hh³jÞh´M# ubj¥)�”}”(hŒ%(struct usb_device *udev, int config)”h]”(j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjMÞh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjIÞubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÞh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjIÞubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjkÞh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjhÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jmÞŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj3ÞsbŒ'c.usb_core.usb_driver_set_configuration”†”esbuh1hhjIÞubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒÞh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjIÞubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjšÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjIÞubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj§Þh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjIÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjEÞubj«)�”}”(hŒ int config”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀÞh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¼ÞubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÞh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¼ÞubjŠ)�”}”(hŒconfig”h]”hŒconfig”…”�”}”(hjÜÞh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼Þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjEÞubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj Þh²hh³jÞh´M# ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÞh²hh³jÞh´M# ubah}”(h]”jÞah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÞh´M# hjÞh²hubjü)�”}”(hhh]”hë)�”}”(hŒ9Provide a way for drivers to change device configurations”h]”hŒ9Provide a way for drivers to change device configurations”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M# hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÞh²hh³jÞh´M# ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjßjjßj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXO**Parameters** ``struct usb_device *udev`` the device whose configuration is being updated ``int config`` the configuration being chosen. **Context** In process context, must be able to sleep **Description** Device interface drivers are not allowed to change device configurations. This is because changing configurations will destroy the interface the driver is bound to and create new ones; it would be like a floppy-disk driver telling the computer to replace the floppy-disk drive with a tape drive! Still, in certain specialized circumstances the need may arise. This routine gets around the normal restrictions by using a work thread to submit the change-config request. **Return** 0 if the request was successfully queued, error code otherwise. The caller has no way to know whether the queued request will eventually succeed.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj(ßh]”hŒ Parameters”…”�”}”(hj*ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj&ßubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M' hj"ßubjD)�”}”(hhh]”(jI)�”}”(hŒL``struct usb_device *udev`` the device whose configuration is being updated ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hjGßh]”hŒstruct usb_device *udev”…”�”}”(hjIßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjEßubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M$ hjAßubji)�”}”(hhh]”hë)�”}”(hŒ/the device whose configuration is being updated”h]”hŒ/the device whose configuration is being updated”…”�”}”(hj`ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j\ßh´M$ hj]ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjAßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j\ßh´M$ hj>ßubjI)�”}”(hŒ/``int config`` the configuration being chosen. ”h]”(jO)�”}”(hŒ``int config``”h]”jÑ)�”}”(hj€ßh]”hŒ int config”…”�”}”(hj‚ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj~ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M% hjzßubji)�”}”(hhh]”hë)�”}”(hŒthe configuration being chosen.”h]”hŒthe configuration being chosen.”…”�”}”(hj™ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j•ßh´M% hj–ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjzßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j•ßh´M% hj>ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj"ßubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj»ßh]”hŒContext”…”�”}”(hj½ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹ßubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M' hj"ßubhë)�”}”(hŒ)In process context, must be able to sleep”h]”hŒ)In process context, must be able to sleep”…”�”}”(hjÑßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M& hj"ßubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjâßh]”hŒ Description”…”�”}”(hjäßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjàßubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M( hj"ßubhë)�”}”(hX'Device interface drivers are not allowed to change device configurations. This is because changing configurations will destroy the interface the driver is bound to and create new ones; it would be like a floppy-disk driver telling the computer to replace the floppy-disk drive with a tape drive!”h]”hX'Device interface drivers are not allowed to change device configurations. This is because changing configurations will destroy the interface the driver is bound to and create new ones; it would be like a floppy-disk driver telling the computer to replace the floppy-disk drive with a tape drive!”…”�”}”(hjøßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M' hj"ßubhë)�”}”(hŒ­Still, in certain specialized circumstances the need may arise. This routine gets around the normal restrictions by using a work thread to submit the change-config request.”h]”hŒ­Still, in certain specialized circumstances the need may arise. This routine gets around the normal restrictions by using a work thread to submit the change-config request.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M- hj"ßubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjàh]”hŒReturn”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M1 hj"ßubhë)�”}”(hŒ‘0 if the request was successfully queued, error code otherwise. The caller has no way to know whether the queued request will eventually succeed.”h]”hŒ‘0 if the request was successfully queued, error code otherwise. The caller has no way to know whether the queued request will eventually succeed.”…”�”•}”(hj.àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´M2 hj"ßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.cdc_parse_cdc_header (C function)”Œc.usb_core.cdc_parse_cdc_header”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒpint cdc_parse_cdc_header (struct usb_cdc_parsed_header *hdr, struct usb_interface *intf, u8 *buffer, int buflen)”h]”j+)�”}”(hŒoint cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr, struct usb_interface *intf, u8 *buffer, int buflen)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj]àh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjYàh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´ML ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlàh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjYàh²hh³jkàh´ML ubj„)�”}”(hŒcdc_parse_cdc_header”h]”jŠ)�”}”(hŒcdc_parse_cdc_header”h]”hŒcdc_parse_cdc_header”…”�”}”(hj~àh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjzàubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjYàh²hh³jkàh´ML ubj¥)�”}”(hŒW(struct usb_cdc_parsed_header *hdr, struct usb_interface *intf, u8 *buffer, int buflen)”h]”(j«)�”}”(hŒ!struct usb_cdc_parsed_header *hdr”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjšàh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj–àubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§àh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj–àubh)�”}”(hhh]”jŠ)�”}”(hŒusb_cdc_parsed_header”h]”hŒusb_cdc_parsed_header”…”�”}”(hj¸àh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjµàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jºàŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj€àsbŒc.usb_core.cdc_parse_cdc_header”†”esbuh1hhj–àubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙàh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj–àubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjçàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj–àubjŠ)�”}”(hŒhdr”h]”hŒhdr”…”�”}”(hjôàh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj–àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj’àubj«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj áubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj áubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj+áh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj(áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j-áŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÕàŒc.usb_core.cdc_parse_cdc_header”†”esbuh1hhj áubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJáh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj áubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjXáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj áubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjeáh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj’àubj«)�”}”(hŒ u8 *buffer”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj�áh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj~áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jƒáŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÕàŒc.usb_core.cdc_parse_cdc_header”†”esbuh1hhjzáubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjzáubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj®áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjzáubjŠ)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj»áh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjzáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj’àubj«)�”}”(hŒ int buflen”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÔáh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÐáubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâáh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÐáubjŠ)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjðáh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÐáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj’àubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjYàh²hh³jkàh´ML ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjUàh²hh³jkàh´ML ubah}”(h]”jPàah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jkàh´ML hjRàh²hubjü)�”}”(hhh]”hë)�”}”(hŒ.parse the extra headers present in CDC devices”h]”hŒ.parse the extra headers present in CDC devices”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´ML hjâh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjRàh²hh³jkàh´ML ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj2âjj2âj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX2**Parameters** ``struct usb_cdc_parsed_header *hdr`` the place to put the results of the parsing ``struct usb_interface *intf`` the interface for which parsing is requested ``u8 *buffer`` pointer to the extra headers to be parsed ``int buflen`` length of the extra headers **Description** This evaluates the extra headers present in CDC devices which bind the interfaces for data and control and provide details about the capabilities of the device. **Return** number of descriptors parsed or -EINVAL if the header is contradictory beyond salvage”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj<âh]”hŒ Parameters”…”�”}”(hj>âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj:âubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MP hj6âubjD)�”}”(hhh]”(jI)�”}”(hŒR``struct usb_cdc_parsed_header *hdr`` the place to put the results of the parsing ”h]”(jO)�”}”(hŒ%``struct usb_cdc_parsed_header *hdr``”h]”jÑ)�”}”(hj[âh]”hŒ!struct usb_cdc_parsed_header *hdr”…”�”}”(hj]âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjYâubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MM hjUâubji)�”}”(hhh]”hë)�”}”(hŒ+the place to put the results of the parsing”h]”hŒ+the place to put the results of the parsing”…”�”}”(hjtâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jpâh´MM hjqâubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjUâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jpâh´MM hjRâubjI)�”}”(hŒL``struct usb_interface *intf`` the interface for which parsing is requested ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj”âh]”hŒstruct usb_interface *intf”…”�”}”(hj–âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj’âubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MN hjŽâubji)�”}”(hhh]”hë)�”}”(hŒ,the interface for which parsing is requested”h]”hŒ,the interface for which parsing is requested”…”�”}”(hj­âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j©âh´MN hjªâubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŽâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j©âh´MN hjRâubjI)�”}”(hŒ9``u8 *buffer`` pointer to the extra headers to be parsed ”h]”(jO)�”}”(hŒ``u8 *buffer``”h]”jÑ)�”}”(hjÍâh]”hŒ u8 *buffer”…”�”}”(hjÏâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjËâubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MO hjÇâubji)�”}”(hhh]”hë)�”}”(hŒ)pointer to the extra headers to be parsed”h]”hŒ)pointer to the extra headers to be parsed”…”�”}”(hjæâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jââh´MO hjãâubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÇâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jââh´MO hjRâubjI)�”}”(hŒ+``int buflen`` length of the extra headers ”h]”(jO)�”}”(hŒ``int buflen``”h]”jÑ)�”}”(hjãh]”hŒ int buflen”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MP hjãubji)�”}”(hhh]”hë)�”}”(hŒlength of the extra headers”h]”hŒlength of the extra headers”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jãh´MP hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jãh´MP hjRâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj6âubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjAãh]”hŒ Description”…”�”}”(hjCãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj?ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MR hj6âubhë)�”}”(hŒ This evaluates the extra headers present in CDC devices which bind the interfaces for data and control and provide details about the capabilities of the device.”h]”hŒ This evaluates the extra headers present in CDC devices which bind the interfaces for data and control and provide details about the capabilities of the device.”…”�”}”(hjWãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MQ hj6âubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjhãh]”hŒReturn”…”�”}”(hjjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjfãubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MU hj6âubhë)�”}”(hŒUnumber of descriptors parsed or -EINVAL if the header is contradictory beyond salvage”h]”hŒUnumber of descriptors parsed or -EINVAL if the header is contradictory beyond salvage”…”�”}”(hj~ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:165: ./drivers/usb/core/message.c”h´MV hj6âubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_core.usb_register_dev (C function)”Œc.usb_core.usb_register_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒXint usb_register_dev (struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”j+)�”}”(hŒWint usb_register_dev(struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj­ãh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj©ãh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K\ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ãh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj©ãh²hh³j»ãh´K\ubj„)�”}”(hŒusb_register_dev”h]”jŠ)�”}”(hŒusb_register_dev”h]”hŒusb_register_dev”…”�”}”(hjÎãh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÊãubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj©ãh²hh³j»ãh´K\ubj¥)�”}”(hŒC(struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”(j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjêãh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjæãubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ãh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjæãubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j äŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÐãsbŒc.usb_core.usb_register_dev”†”esbuh1hhjæãubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)äh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjæãubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj7äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjæãubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjDäh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjæãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjâãubj«)�”}”(hŒ%struct usb_class_driver *class_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj]äh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjYäubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjäh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjYäubh)�”}”(hhh]”jŠ)�”}”(hŒusb_class_driver”h]”hŒusb_class_driver”…”�”}”(hj{äh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjxäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j}äŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j%äŒc.usb_core.usb_register_dev”†”esbuh1hhjYäubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšäh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjYäubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¨äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjYäubjŠ)�”}”(hŒ class_driver”h]”hŒ class_driver”…”�”}”(hjµäh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjYäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjâãubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj©ãh²hh³j»ãh´K\ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj¥ãh²hh³j»ãh´K\ubah}”(h]”j ãah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j»ãh´K\hj¢ãh²hubjü)�”}”(hhh]”hë)�”}”(hŒ1register a USB device, and ask for a minor number”h]”hŒ1register a USB device, and ask for a minor number”…”�”}”(hjßäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K\hjÜäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¢ãh²hh³j»ãh´K\ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj÷äjj÷äj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX.**Parameters** ``struct usb_interface *intf`` pointer to the usb_interface that is being registered ``struct usb_class_driver *class_driver`` pointer to the usb_class_driver for this device **Description** This should be called by all USB drivers that use the USB major number. If CONFIG_USB_DYNAMIC_MINORS is enabled, the minor number will be dynamically allocated out of the list of available ones. If it is not enabled, the minor number will be based on the next available free minor, starting at the class_driver->minor_base. This function also creates a usb class device in the sysfs tree. usb_deregister_dev() must be called when the driver is done with the minor numbers given out by this function. **Return** -EINVAL if something bad happens with trying to register a device, and 0 on success.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjåh]”hŒ Parameters”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÿäubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K`hjûäubjD)�”}”(hhh]”(jI)�”}”(hŒU``struct usb_interface *intf`` pointer to the usb_interface that is being registered ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj åh]”hŒstruct usb_interface *intf”…”�”}”(hj"åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K]hjåubji)�”}”(hhh]”hë)�”}”(hŒ5pointer to the usb_interface that is being registered”h]”hŒ5pointer to the usb_interface that is being registered”…”�”}”(hj9åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j5åh´K]hj6åubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j5åh´K]hjåubjI)�”}”(hŒZ``struct usb_class_driver *class_driver`` pointer to the usb_class_driver for this device ”h]”(jO)�”}”(hŒ)``struct usb_class_driver *class_driver``”h]”jÑ)�”}”(hjYåh]”hŒ%struct usb_class_driver *class_driver”…”�”}”(hj[åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjWåubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K^hjSåubji)�”}”(hhh]”hë)�”}”(hŒ/pointer to the usb_class_driver for this device”h]”hŒ/pointer to the usb_class_driver for this device”…”�”}”(hjråh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jnåh´K^hjoåubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjSåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jnåh´K^hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjûäubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj”åh]”hŒ Description”…”�”}”(hj–åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj’åubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K`hjûäubhë)�”}”(hXDThis should be called by all USB drivers that use the USB major number. If CONFIG_USB_DYNAMIC_MINORS is enabled, the minor number will be dynamically allocated out of the list of available ones. If it is not enabled, the minor number will be based on the next available free minor, starting at the class_driver->minor_base.”h]”hXDThis should be called by all USB drivers that use the USB major number. If CONFIG_USB_DYNAMIC_MINORS is enabled, the minor number will be dynamically allocated out of the list of available ones. If it is not enabled, the minor number will be based on the next available free minor, starting at the class_driver->minor_base.”…”�”}”(hjªåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K_hjûäubhë)�”}”(hŒ@This function also creates a usb class device in the sysfs tree.”h]”hŒ@This function also creates a usb class device in the sysfs tree.”…”�”}”(hj¹åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´Kehjûäubhë)�”}”(hŒnusb_deregister_dev() must be called when the driver is done with the minor numbers given out by this function.”h]”hŒnusb_deregister_dev() must be called when the driver is done with the minor numbers given out by this function.”…”�”}”(hjÈåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´Kghjûäubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjÙåh]”hŒReturn”…”�”}”(hjÛåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj×åubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´Kjhjûäubhë)�”}”(hŒT-EINVAL if something bad happens with trying to register a device, and 0 on success.”h]”hŒT-EINVAL if something bad happens with trying to register a device, and 0 on success.”…”�”}”(hjïåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´Kkhjûäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_deregister_dev (C function)”Œc.usb_core.usb_deregister_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ[void usb_deregister_dev (struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”j+)�”}”(hŒZvoid usb_deregister_dev(struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjæh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¤ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-æh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjæh²hh³j,æh´K¤ubj„)�”}”(hŒusb_deregister_dev”h]”jŠ)�”}”(hŒusb_deregister_dev”h]”hŒusb_deregister_dev”…”�”}”(hj?æh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj;æubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjæh²hh³j,æh´K¤ubj¥)�”}”(hŒC(struct usb_interface *intf, struct usb_class_driver *class_driver)”h]”(j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj[æh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjWæubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhæh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWæubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjyæh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjvæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j{æŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjAæsbŒc.usb_core.usb_deregister_dev”†”esbuh1hhjWæubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšæh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWæubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¨æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjWæubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjµæh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjWæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjSæubj«)�”}”(hŒ%struct usb_class_driver *class_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÎæh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÊæubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛæh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÊæubh)�”}”(hhh]”jŠ)�”}”(hŒusb_class_driver”h]”hŒusb_class_driver”…”�”}”(hjìæh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjéæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jîæŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j–æŒc.usb_core.usb_deregister_dev”†”esbuh1hhjÊæubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj çh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÊæubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÊæubjŠ)�”}”(hŒ class_driver”h]”hŒ class_driver”…”�”}”(hj&çh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÊæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjSæubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjæh²hh³j,æh´K¤ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjæh²hh³j,æh´K¤ubah}”(h]”jæah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j,æh´K¤hjæh²hubjü)�”}”(hhh]”hë)�”}”(hŒ(deregister a USB device's dynamic minor.”h]”hŒ*deregister a USB device’s dynamic minor.”…”�”}”(hjPçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¤hjMçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjæh²hh³j,æh´K¤ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjhçjjhçj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXC**Parameters** ``struct usb_interface *intf`` pointer to the usb_interface that is being deregistered ``struct usb_class_driver *class_driver`` pointer to the usb_class_driver for this device **Description** Used in conjunction with usb_register_dev(). This function is called when the USB driver is finished with the minor numbers gotten from a call to usb_register_dev() (usually when the device is disconnected from the system.) This function also removes the usb class device from the sysfs tree. This should be called by all drivers that use the USB major number.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjrçh]”hŒ Parameters”…”�”}”(hjtçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjpçubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¨hjlçubjD)�”}”(hhh]”(jI)�”}”(hŒW``struct usb_interface *intf`` pointer to the usb_interface that is being deregistered ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj‘çh]”hŒstruct usb_interface *intf”…”�”}”(hj“çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�çubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¥hj‹çubji)�”}”(hhh]”hë)�”}”(hŒ7pointer to the usb_interface that is being deregistered”h]”hŒ7pointer to the usb_interface that is being deregistered”…”�”}”(hjªçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¦çh´K¥hj§çubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‹çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¦çh´K¥hjˆçubjI)�”}”(hŒZ``struct usb_class_driver *class_driver`` pointer to the usb_class_driver for this device ”h]”(jO)�”}”(hŒ)``struct usb_class_driver *class_driver``”h]”jÑ)�”}”(hjÊçh]”hŒ%struct usb_class_driver *class_driver”…”�”}”(hjÌçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈçubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¦hjÄçubji)�”}”(hhh]”hë)�”}”(hŒ/pointer to the usb_class_driver for this device”h]”hŒ/pointer to the usb_class_driver for this device”…”�”}”(hjãçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jßçh´K¦hjàçubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÄçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jßçh´K¦hjˆçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjlçubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjèh]”hŒ Description”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¨hjlçubhë)�”}”(hŒàUsed in conjunction with usb_register_dev(). This function is called when the USB driver is finished with the minor numbers gotten from a call to usb_register_dev() (usually when the device is disconnected from the system.)”h]”hŒàUsed in conjunction with usb_register_dev(). This function is called when the USB driver is finished with the minor numbers gotten from a call to usb_register_dev() (usually when the device is disconnected from the system.)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K§hjlçubhë)�”}”(hŒDThis function also removes the usb class device from the sysfs tree.”h]”hŒDThis function also removes the usb class device from the sysfs tree.”…”�”}”(hj*èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K¬hjlçubhë)�”}”(hŒCThis should be called by all drivers that use the USB major number.”h]”hŒCThis should be called by all drivers that use the USB major number.”…”�”}”(hj9èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:168: ./drivers/usb/core/file.c”h´K®hjlçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ0usb_core.usb_driver_claim_interface (C function)”Œ%c.usb_core.usb_driver_claim_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒcint usb_driver_claim_interface (struct usb_driver *driver, struct usb_interface *iface, void *data)”h]”j+)�”}”(hŒbint usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void *data)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjhèh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjdèh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwèh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjdèh²hh³jvèh´Mubj„)�”}”(hŒusb_driver_claim_interface”h]”jŠ)�”}”(hŒusb_driver_claim_interface”h]”hŒusb_driver_claim_interface”…”�”}”(hj‰èh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj…èubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjdèh²hh³jvèh´Mubj¥)�”}”(hŒD(struct usb_driver *driver, struct usb_interface *iface, void *data)”h]”(j«)�”}”(hŒstruct usb_driver *driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¥èh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¡èubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²èh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¡èubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_driver”h]”hŒ usb_driver”…”�”}”(hjÃèh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÀèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÅèŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj‹èsbŒ%c.usb_core.usb_driver_claim_interface”†”esbuh1hhj¡èubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäèh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¡èubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjòèh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¡èubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjÿèh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¡èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�èubj«)�”}”(hŒstruct usb_interface *iface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjéubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%éh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjéubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj6éh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj3éubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j8éŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jàèŒ%c.usb_core.usb_driver_claim_interface”†”esbuh1hhjéubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUéh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjéubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjcéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjéubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hjpéh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�èubj«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰éh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj…éubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—éh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj…éubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¥éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj…éubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj²éh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj…éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�èubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjdèh²hh³jvèh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj`èh²hh³jvèh´Mubah}”(h]”j[èah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jvèh´Mhj]èh²hubjü)�”}”(hhh]”hë)�”}”(hŒbind a driver to an interface”h]”hŒbind a driver to an interface”…”�”}”(hjÜéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjÙéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj]èh²hh³jvèh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjôéjjôéj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX³**Parameters** ``struct usb_driver *driver`` the driver to be bound ``struct usb_interface *iface`` the interface to which it will be bound; must be in the usb device's active configuration ``void *data`` driver data associated with that interface **Description** This is used by usb device drivers that need to claim more than one interface on a device when probing (audio and acm are current examples). No device driver should directly modify internal usb_interface or usb_device structure members. Callers must own the device lock, so driver probe() entries don't need extra locking, but other call contexts may need to explicitly claim that lock. **Return** 0 on success.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjþéh]”hŒ Parameters”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjüéubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjøéubjD)�”}”(hhh]”(jI)�”}”(hŒ5``struct usb_driver *driver`` the driver to be bound ”h]”(jO)�”}”(hŒ``struct usb_driver *driver``”h]”jÑ)�”}”(hjêh]”hŒstruct usb_driver *driver”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjêubji)�”}”(hhh]”hë)�”}”(hŒthe driver to be bound”h]”hŒthe driver to be bound”…”�”}”(hj6êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j2êh´Mhj3êubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j2êh´MhjêubjI)�”}”(hŒz``struct usb_interface *iface`` the interface to which it will be bound; must be in the usb device's active configuration ”h]”(jO)�”}”(hŒ``struct usb_interface *iface``”h]”jÑ)�”}”(hjVêh]”hŒstruct usb_interface *iface”…”�”}”(hjXêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjTêubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjPêubji)�”}”(hhh]”hë)�”}”(hŒYthe interface to which it will be bound; must be in the usb device's active configuration”h]”hŒ[the interface to which it will be bound; must be in the usb device’s active configuration”…”�”}”(hjoêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjlêubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjPêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jkêh´MhjêubjI)�”}”(hŒ:``void *data`` driver data associated with that interface ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hj�êh]”hŒ void *data”…”�”}”(hj’êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŽêubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjŠêubji)�”}”(hhh]”hë)�”}”(hŒ*driver data associated with that interface”h]”hŒ*driver data associated with that interface”…”�”}”(hj©êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¥êh´Mhj¦êubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŠêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¥êh´Mhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjøéubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjËêh]”hŒ Description”…”�”}”(hjÍêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÉêubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjøéubhë)�”}”(hŒìThis is used by usb device drivers that need to claim more than one interface on a device when probing (audio and acm are current examples). No device driver should directly modify internal usb_interface or usb_device structure members.”h]”hŒìThis is used by usb device drivers that need to claim more than one interface on a device when probing (audio and acm are current examples). No device driver should directly modify internal usb_interface or usb_device structure members.”…”�”}”(hjáêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjøéubhë)�”}”(hŒ•Callers must own the device lock, so driver probe() entries don't need extra locking, but other call contexts may need to explicitly claim that lock.”h]”hŒ—Callers must own the device lock, so driver probe() entries don’t need extra locking, but other call contexts may need to explicitly claim that lock.”…”�”}”(hjðêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjøéubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjëh]”hŒReturn”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÿêubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M"hjøéubhë)�”}”(hŒ 0 on success.”h]”hŒ 0 on success.”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M#hjøéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2usb_core.usb_driver_release_interface (C function)”Œ'c.usb_core.usb_driver_release_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒZvoid usb_driver_release_interface (struct usb_driver *driver, struct usb_interface *iface)”h]”j+)�”}”(hŒYvoid usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjFëh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjBëh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MbubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUëh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjBëh²hh³jTëh´Mbubj„)�”}”(hŒusb_driver_release_interface”h]”jŠ)�”}”(hŒusb_driver_release_interface”h]”hŒusb_driver_release_interface”…”�”}”(hjgëh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjcëubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjBëh²hh³jTëh´Mbubj¥)�”}”(hŒ8(struct usb_driver *driver, struct usb_interface *iface)”h]”(j«)�”}”(hŒstruct usb_driver *driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjƒëh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjëubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ëh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjëubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_driver”h]”hŒ usb_driver”…”�”}”(hj¡ëh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjžëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j£ëŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjiësbŒ'c.usb_core.usb_driver_release_interface”†”esbuh1hhjëubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂëh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjëubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÐëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjëubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjÝëh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj{ëubj«)�”}”(hŒstruct usb_interface *iface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjöëh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjòëubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjòëubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jìŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¾ëŒ'c.usb_core.usb_driver_release_interface”†”esbuh1hhjòëubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3ìh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjòëubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjAìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjòëubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hjNìh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjòëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj{ëubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjBëh²hh³jTëh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj>ëh²hh³jTëh´Mbubah}”(h]”j9ëah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jTëh´Mbhj;ëh²hubjü)�”}”(hhh]”hë)�”}”(hŒ!unbind a driver from an interface”h]”hŒ!unbind a driver from an interface”…”�”}”(hjxìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mbhjuìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj;ëh²hh³jTëh´Mbubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj�ìjj�ìj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXM**Parameters** ``struct usb_driver *driver`` the driver to be unbound ``struct usb_interface *iface`` the interface from which it will be unbound **Description** This can be used by drivers to release an interface without waiting for their disconnect() methods to be called. In typical cases this also causes the driver disconnect() method to be called. This call is synchronous, and may not be used in an interrupt context. Callers must own the device lock, so driver disconnect() entries don't need extra locking, but other call contexts may need to explicitly claim that lock.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjšìh]”hŒ Parameters”…”�”}”(hjœìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj˜ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mfhj”ìubjD)�”}”(hhh]”(jI)�”}”(hŒ7``struct usb_driver *driver`` the driver to be unbound ”h]”(jO)�”}”(hŒ``struct usb_driver *driver``”h]”jÑ)�”}”(hj¹ìh]”hŒstruct usb_driver *driver”…”�”}”(hj»ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj·ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mchj³ìubji)�”}”(hhh]”hë)�”}”(hŒthe driver to be unbound”h]”hŒthe driver to be unbound”…”�”}”(hjÒìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÎìh´MchjÏìubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj³ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÎìh´Mchj°ìubjI)�”}”(hŒL``struct usb_interface *iface`` the interface from which it will be unbound ”h]”(jO)�”}”(hŒ``struct usb_interface *iface``”h]”jÑ)�”}”(hjòìh]”hŒstruct usb_interface *iface”…”�”}”(hjôìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjðìubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mdhjììubji)�”}”(hhh]”hë)�”}”(hŒ+the interface from which it will be unbound”h]”hŒ+the interface from which it will be unbound”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jíh´Mdhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjììubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jíh´Mdhj°ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj”ìubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj-íh]”hŒ Description”…”�”}”(hj/íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj+íubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mfhj”ìubhë)�”}”(hŒÀThis can be used by drivers to release an interface without waiting for their disconnect() methods to be called. In typical cases this also causes the driver disconnect() method to be called.”h]”hŒÀThis can be used by drivers to release an interface without waiting for their disconnect() methods to be called. In typical cases this also causes the driver disconnect() method to be called.”…”�”}”(hjCíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mehj”ìubhë)�”}”(hŒáThis call is synchronous, and may not be used in an interrupt context. Callers must own the device lock, so driver disconnect() entries don't need extra locking, but other call contexts may need to explicitly claim that lock.”h]”hŒãThis call is synchronous, and may not be used in an interrupt context. Callers must own the device lock, so driver disconnect() entries don’t need extra locking, but other call contexts may need to explicitly claim that lock.”…”�”}”(hjRíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mihj”ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_core.usb_match_id (C function)”Œc.usb_core.usb_match_id”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒkconst struct usb_device_id * usb_match_id (struct usb_interface *interface, const struct usb_device_id *id)”h]”j+)�”}”(hŒiconst struct usb_device_id *usb_match_id(struct usb_interface *interface, const struct usb_device_id *id)”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj}íh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MéubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj}íh²hh³jŽíh´Méubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj}íh²hh³jŽíh´MéubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªíh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj}íh²hh³jŽíh´Méubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device_id”h]”hŒ usb_device_id”…”�”}”(hj»íh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¸íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j½íŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ usb_match_id”sbŒc.usb_core.usb_match_id”†”esbuh1hhj}íh²hh³jŽíh´MéubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝíh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj}íh²hh³jŽíh´Méubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjëíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj}íh²hh³jŽíh´Méubj„)�”}”(hŒ usb_match_id”h]”jŠ)�”}”(hjÚíh]”hŒ usb_match_id”…”�”}”(hjüíh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjøíubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj}íh²hh³jŽíh´Méubj¥)�”}”(hŒA(struct usb_interface *interface, const struct usb_device_id *id)”h]”(j«)�”}”(hŒstruct usb_interface *interface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjîubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$îh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjîubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj5îh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj2îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j7îŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jØíŒc.usb_core.usb_match_id”†”esbuh1hhjîubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTîh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjîubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjbîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjîubjŠ)�”}”(hŒ interface”h]”hŒ interface”…”�”}”(hjoîh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjîubj«)�”}”(hŒconst struct usb_device_id *id”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjˆîh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj„îubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•îh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj„îubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj£îh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj„îubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°îh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj„îubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device_id”h]”hŒ usb_device_id”…”�”}”(hjÁîh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¾îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÃîŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jØíŒc.usb_core.usb_match_id”†”esbuh1hhj„îubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàîh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj„îubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjîîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj„îubjŠ)�”}”(hŒid”h]”hŒid”…”�”}”(hjûîh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj„îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjîubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj}íh²hh³jŽíh´Méubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjyíh²hh³jŽíh´Méubah}”(h]”jtíah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jŽíh´Méhjvíh²hubjü)�”}”(hhh]”hë)�”}”(hŒ5find first usb_device_id matching device or interface”h]”hŒ5find first usb_device_id matching device or interface”…”�”}”(hj%ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Méhj"ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjvíh²hh³jŽíh´Méubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj=ïjj=ïj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX **Parameters** ``struct usb_interface *interface`` the interface of interest ``const struct usb_device_id *id`` array of usb_device_id structures, terminated by zero entry **Description** usb_match_id searches an array of usb_device_id's and returns the first one matching the device or interface, or null. This is used when binding (or rebinding) a driver to an interface. Most USB device drivers will use this indirectly, through the usb core, but some layered driver frameworks use it directly. These device tables are exported with MODULE_DEVICE_TABLE, through modutils, to support the driver loading functionality of USB hotplugging. What Matches: The "match_flags" element in a usb_device_id controls which members are used. If the corresponding bit is set, the value in the device_id must match its corresponding member in the device or interface descriptor, or else the device_id does not match. "driver_info" is normally used only by device drivers, but you can create a wildcard "matches anything" usb_device_id as a driver's "modules.usbmap" entry if you provide an id with only a nonzero "driver_info" field. If you do this, the USB device driver's probe() routine should use additional intelligence to decide whether to bind to the specified interface. What Makes Good usb_device_id Tables: The match algorithm is very simple, so that intelligence in driver selection must come from smart driver id records. Unless you have good reasons to use another selection policy, provide match elements only in related groups, and order match specifiers from specific to general. Use the macros provided for that purpose if you can. The most specific match specifiers use device descriptor data. These are commonly used with product-specific matches; the USB_DEVICE macro lets you provide vendor and product IDs, and you can also match against ranges of product revisions. These are widely used for devices with application or vendor specific bDeviceClass values. Matches based on device class/subclass/protocol specifications are slightly more general; use the USB_DEVICE_INFO macro, or its siblings. These are used with single-function devices where bDeviceClass doesn't specify that each interface has its own class. Matches based on interface class/subclass/protocol are the most general; they let drivers bind to any interface on a multiple-function device. Use the USB_INTERFACE_INFO macro, or its siblings, to match class-per-interface style devices (as recorded in bInterfaceClass). Note that an entry created by USB_INTERFACE_INFO won't match any interface if the device class is set to Vendor-Specific. This is deliberate; according to the USB spec the meanings of the interface class/subclass/protocol for these devices are also vendor-specific, and hence matching against a standard product class wouldn't work anyway. If you really want to use an interface-based match for such a device, create a match record that also specifies the vendor ID. (Unforunately there isn't a standard macro for creating records like this.) Within those groups, remember that not all combinations are meaningful. For example, don't give a product version range without vendor and product IDs; or specify a protocol without its associated class and subclass. **Return** The first matching usb_device_id, or ``NULL``.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjGïh]”hŒ Parameters”…”�”}”(hjIïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjEïubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MíhjAïubjD)�”}”(hhh]”(jI)�”}”(hŒ>``struct usb_interface *interface`` the interface of interest ”h]”(jO)�”}”(hŒ#``struct usb_interface *interface``”h]”jÑ)�”}”(hjfïh]”hŒstruct usb_interface *interface”…”�”}”(hjhïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjdïubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mêhj`ïubji)�”}”(hhh]”hë)�”}”(hŒthe interface of interest”h]”hŒthe interface of interest”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j{ïh´Mêhj|ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj`ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j{ïh´Mêhj]ïubjI)�”}”(hŒ_``const struct usb_device_id *id`` array of usb_device_id structures, terminated by zero entry ”h]”(jO)�”}”(hŒ"``const struct usb_device_id *id``”h]”jÑ)�”}”(hjŸïh]”hŒconst struct usb_device_id *id”…”�”}”(hj¡ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mëhj™ïubji)�”}”(hhh]”hë)�”}”(hŒ;array of usb_device_id structures, terminated by zero entry”h]”hŒ;array of usb_device_id structures, terminated by zero entry”…”�”}”(hj¸ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j´ïh´Mëhjµïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj™ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j´ïh´Mëhj]ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjAïubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÚïh]”hŒ Description”…”�”}”(hjÜïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjØïubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MíhjAïubhë)�”}”(hXÂusb_match_id searches an array of usb_device_id's and returns the first one matching the device or interface, or null. This is used when binding (or rebinding) a driver to an interface. Most USB device drivers will use this indirectly, through the usb core, but some layered driver frameworks use it directly. These device tables are exported with MODULE_DEVICE_TABLE, through modutils, to support the driver loading functionality of USB hotplugging.”h]”hXÄusb_match_id searches an array of usb_device_id’s and returns the first one matching the device or interface, or null. This is used when binding (or rebinding) a driver to an interface. Most USB device drivers will use this indirectly, through the usb core, but some layered driver frameworks use it directly. These device tables are exported with MODULE_DEVICE_TABLE, through modutils, to support the driver loading functionality of USB hotplugging.”…”�”}”(hjðïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MìhjAïubhë)�”}”(hŒ What Matches:”h]”hŒ What Matches:”…”�”}”(hjÿïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MõhjAïubhë)�”}”(hŒûThe "match_flags" element in a usb_device_id controls which members are used. If the corresponding bit is set, the value in the device_id must match its corresponding member in the device or interface descriptor, or else the device_id does not match.”h]”hŒÿThe “match_flagsâ€� element in a usb_device_id controls which members are used. If the corresponding bit is set, the value in the device_id must match its corresponding member in the device or interface descriptor, or else the device_id does not match.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M÷hjAïubhë)�”}”(hXj"driver_info" is normally used only by device drivers, but you can create a wildcard "matches anything" usb_device_id as a driver's "modules.usbmap" entry if you provide an id with only a nonzero "driver_info" field. If you do this, the USB device driver's probe() routine should use additional intelligence to decide whether to bind to the specified interface.”h]”hX~“driver_infoâ€� is normally used only by device drivers, but you can create a wildcard “matches anythingâ€� usb_device_id as a driver’s “modules.usbmapâ€� entry if you provide an id with only a nonzero “driver_infoâ€� field. If you do this, the USB device driver’s probe() routine should use additional intelligence to decide whether to bind to the specified interface.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MýhjAïubhë)�”}”(hŒ%What Makes Good usb_device_id Tables:”h]”hŒ%What Makes Good usb_device_id Tables:”…”�”}”(hj,ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjAïubhë)�”}”(hXLThe match algorithm is very simple, so that intelligence in driver selection must come from smart driver id records. Unless you have good reasons to use another selection policy, provide match elements only in related groups, and order match specifiers from specific to general. Use the macros provided for that purpose if you can.”h]”hXLThe match algorithm is very simple, so that intelligence in driver selection must come from smart driver id records. Unless you have good reasons to use another selection policy, provide match elements only in related groups, and order match specifiers from specific to general. Use the macros provided for that purpose if you can.”…”�”}”(hj;ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjAïubhë)�”}”(hXKThe most specific match specifiers use device descriptor data. These are commonly used with product-specific matches; the USB_DEVICE macro lets you provide vendor and product IDs, and you can also match against ranges of product revisions. These are widely used for devices with application or vendor specific bDeviceClass values.”h]”hXKThe most specific match specifiers use device descriptor data. These are commonly used with product-specific matches; the USB_DEVICE macro lets you provide vendor and product IDs, and you can also match against ranges of product revisions. These are widely used for devices with application or vendor specific bDeviceClass values.”…”�”}”(hjJðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hjAïubhë)�”}”(hXMatches based on device class/subclass/protocol specifications are slightly more general; use the USB_DEVICE_INFO macro, or its siblings. These are used with single-function devices where bDeviceClass doesn't specify that each interface has its own class.”h]”hXMatches based on device class/subclass/protocol specifications are slightly more general; use the USB_DEVICE_INFO macro, or its siblings. These are used with single-function devices where bDeviceClass doesn’t specify that each interface has its own class.”…”�”}”(hjYðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjAïubhë)�”}”(hXMatches based on interface class/subclass/protocol are the most general; they let drivers bind to any interface on a multiple-function device. Use the USB_INTERFACE_INFO macro, or its siblings, to match class-per-interface style devices (as recorded in bInterfaceClass).”h]”hXMatches based on interface class/subclass/protocol are the most general; they let drivers bind to any interface on a multiple-function device. Use the USB_INTERFACE_INFO macro, or its siblings, to match class-per-interface style devices (as recorded in bInterfaceClass).”…”�”}”(hjhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjAïubhë)�”}”(hX Note that an entry created by USB_INTERFACE_INFO won't match any interface if the device class is set to Vendor-Specific. This is deliberate; according to the USB spec the meanings of the interface class/subclass/protocol for these devices are also vendor-specific, and hence matching against a standard product class wouldn't work anyway. If you really want to use an interface-based match for such a device, create a match record that also specifies the vendor ID. (Unforunately there isn't a standard macro for creating records like this.)”h]”hX&Note that an entry created by USB_INTERFACE_INFO won’t match any interface if the device class is set to Vendor-Specific. This is deliberate; according to the USB spec the meanings of the interface class/subclass/protocol for these devices are also vendor-specific, and hence matching against a standard product class wouldn’t work anyway. If you really want to use an interface-based match for such a device, create a match record that also specifies the vendor ID. (Unforunately there isn’t a standard macro for creating records like this.)”…”�”}”(hjwðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hjAïubhë)�”}”(hŒÙWithin those groups, remember that not all combinations are meaningful. For example, don't give a product version range without vendor and product IDs; or specify a protocol without its associated class and subclass.”h]”hŒÛWithin those groups, remember that not all combinations are meaningful. For example, don’t give a product version range without vendor and product IDs; or specify a protocol without its associated class and subclass.”…”�”}”(hj†ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M*hjAïubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj—ðh]”hŒReturn”…”�”}”(hj™ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj•ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M/hjAïubhë)�”}”(hŒ.The first matching usb_device_id, or ``NULL``.”h]”(hŒ%The first matching usb_device_id, or ”…”�”}”(hj­ðh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjµðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj­ðubhŒ.”…”�”}”(hj­ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MõhjAïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2usb_core.__usb_register_device_driver (C function)”Œ'c.usb_core.__usb_register_device_driver”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒtint __usb_register_device_driver (struct usb_device_driver *new_udriver, struct module *owner, const char *mod_name)”h]”j+)�”}”(hŒsint __usb_register_device_driver(struct usb_device_driver *new_udriver, struct module *owner, const char *mod_name)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjîðh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêðh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÚubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýðh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêðh²hh³jüðh´MÚubj„)�”}”(hŒ__usb_register_device_driver”h]”jŠ)�”}”(hŒ__usb_register_device_driver”h]”hŒ__usb_register_device_driver”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ñubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjêðh²hh³jüðh´MÚubj¥)�”}”(hŒS(struct usb_device_driver *new_udriver, struct module *owner, const char *mod_name)”h]”(j«)�”}”(hŒ%struct usb_device_driver *new_udriver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj+ñh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj'ñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8ñh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj'ñubh)�”}”(hhh]”jŠ)�”}”(hŒusb_device_driver”h]”hŒusb_device_driver”…”�”}”(hjIñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjFñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”• jHŒ reftarget”jKñŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjñsbŒ'c.usb_core.__usb_register_device_driver”†”esbuh1hhj'ñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjñh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj'ñubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjxñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj'ñubjŠ)�”}”(hŒ new_udriver”h]”hŒ new_udriver”…”�”}”(hj…ñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj#ñubj«)�”}”(hŒstruct module *owner”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjžñh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjšñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«ñh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjšñubh)�”}”(hhh]”jŠ)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hj¼ñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¹ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¾ñŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jfñŒ'c.usb_core.__usb_register_device_driver”†”esbuh1hhjšñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛñh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjšñubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjéñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjšñubjŠ)�”}”(hŒowner”h]”hŒowner”…”�”}”(hjöñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjšñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj#ñubj«)�”}”(hŒconst char *mod_name”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj òubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj òubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj*òh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj òubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8òh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj òubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjFòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj òubjŠ)�”}”(hŒmod_name”h]”hŒmod_name”…”�”}”(hjSòh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj#ñubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjêðh²hh³jüðh´MÚubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjæðh²hh³jüðh´MÚubah}”(h]”jáðah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jüðh´MÚhjãðh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,register a USB device (not interface) driver”h]”hŒ,register a USB device (not interface) driver”…”�”}”(hj}òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÚhjzòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjãðh²hh³jüðh´MÚubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj•òjj•òj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXÚ**Parameters** ``struct usb_device_driver *new_udriver`` USB operations for the device driver ``struct module *owner`` module owner of this driver. ``const char *mod_name`` module name string **Description** Registers a USB device driver with the USB core. The list of unattached devices will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized devices. **Return** A negative error code on failure and 0 on success.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjŸòh]”hŒ Parameters”…”�”}”(hj¡òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�òubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÞhj™òubjD)�”}”(hhh]”(jI)�”}”(hŒO``struct usb_device_driver *new_udriver`` USB operations for the device driver ”h]”(jO)�”}”(hŒ)``struct usb_device_driver *new_udriver``”h]”jÑ)�”}”(hj¾òh]”hŒ%struct usb_device_driver *new_udriver”…”�”}”(hjÀòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¼òubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÛhj¸òubji)�”}”(hhh]”hë)�”}”(hŒ$USB operations for the device driver”h]”hŒ$USB operations for the device driver”…”�”}”(hj×òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÓòh´MÛhjÔòubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¸òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÓòh´MÛhjµòubjI)�”}”(hŒ6``struct module *owner`` module owner of this driver. ”h]”(jO)�”}”(hŒ``struct module *owner``”h]”jÑ)�”}”(hj÷òh]”hŒstruct module *owner”…”�”}”(hjùòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjõòubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÜhjñòubji)�”}”(hhh]”hë)�”}”(hŒmodule owner of this driver.”h]”hŒmodule owner of this driver.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j óh´MÜhj óubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjñòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j óh´MÜhjµòubjI)�”}”(hŒ,``const char *mod_name`` module name string ”h]”(jO)�”}”(hŒ``const char *mod_name``”h]”jÑ)�”}”(hj0óh]”hŒconst char *mod_name”…”�”}”(hj2óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj.óubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÝhj*óubji)�”}”(hhh]”hë)�”}”(hŒmodule name string”h]”hŒmodule name string”…”�”}”(hjIóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jEóh´MÝhjFóubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj*óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jEóh´MÝhjµòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj™òubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjkóh]”hŒ Description”…”�”}”(hjmóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjióubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mßhj™òubhë)�”}”(hŒ¿Registers a USB device driver with the USB core. The list of unattached devices will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized devices.”h]”hŒ¿Registers a USB device driver with the USB core. The list of unattached devices will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized devices.”…”�”}”(hj�óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MÞhj™òubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj’óh]”hŒReturn”…”�”}”(hj”óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�óubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mâhj™òubhë)�”}”(hŒ2A negative error code on failure and 0 on success.”h]”hŒ2A negative error code on failure and 0 on success.”…”�”}”(hj¨óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mãhj™òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2usb_core.usb_deregister_device_driver (C function)”Œ'c.usb_core.usb_deregister_device_driver”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒEvoid usb_deregister_device_driver (struct usb_device_driver *udriver)”h]”j+)�”}”(hŒDvoid usb_deregister_device_driver(struct usb_device_driver *udriver)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×óh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÓóh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæóh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÓóh²hh³jåóh´M ubj„)�”}”(hŒusb_deregister_device_driver”h]”jŠ)�”}”(hŒusb_deregister_device_driver”h]”hŒusb_deregister_device_driver”…”�”}”(hjøóh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjôóubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÓóh²hh³jåóh´M ubj¥)�”}”(hŒ#(struct usb_device_driver *udriver)”h]”j«)�”}”(hŒ!struct usb_device_driver *udriver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjôubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!ôh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjôubh)�”}”(hhh]”jŠ)�”}”(hŒusb_device_driver”h]”hŒusb_device_driver”…”�”}”(hj2ôh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj/ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j4ôŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjúósbŒ'c.usb_core.usb_deregister_device_driver”†”esbuh1hhjôubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSôh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjôubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjaôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjôubjŠ)�”}”(hŒudriver”h]”hŒudriver”…”�”}”(hjnôh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj ôubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÓóh²hh³jåóh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÏóh²hh³jåóh´M ubah}”(h]”jÊóah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jåóh´M hjÌóh²hubjü)�”}”(hhh]”hë)�”}”(hŒ.unregister a USB device (not interface) driver”h]”hŒ.unregister a USB device (not interface) driver”…”�”}”(hj˜ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hj•ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÌóh²hh³jåóh´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj°ôjj°ôj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒß**Parameters** ``struct usb_device_driver *udriver`` USB operations of the device driver to unregister **Context** must be able to sleep **Description** Unlinks the specified driver from the internal USB driver list.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjºôh]”hŒ Parameters”…”�”}”(hj¼ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¸ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj´ôubjD)�”}”(hhh]”jI)�”}”(hŒX``struct usb_device_driver *udriver`` USB operations of the device driver to unregister ”h]”(jO)�”}”(hŒ%``struct usb_device_driver *udriver``”h]”jÑ)�”}”(hjÙôh]”hŒ!struct usb_device_driver *udriver”…”�”}”(hjÛôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj×ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hjÓôubji)�”}”(hhh]”hë)�”}”(hŒ1USB operations of the device driver to unregister”h]”hŒ1USB operations of the device driver to unregister”…”�”}”(hjòôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jîôh´M hjïôubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÓôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jîôh´M hjÐôubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj´ôubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjõh]”hŒContext”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hj´ôubhë)�”}”(hŒmust be able to sleep”h]”hŒmust be able to sleep”…”�”}”(hj*õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hj´ôubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj;õh]”hŒ Description”…”�”}”(hj=õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj9õubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj´ôubhë)�”}”(hŒ?Unlinks the specified driver from the internal USB driver list.”h]”hŒ?Unlinks the specified driver from the internal USB driver list.”…”�”}”(hjQõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M hj´ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ)usb_core.usb_register_driver (C function)”Œc.usb_core.usb_register_driver”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒcint usb_register_driver (struct usb_driver *new_driver, struct module *owner, const char *mod_name)”h]”j+)�”}”(hŒbint usb_register_driver(struct usb_driver *new_driver, struct module *owner, const char *mod_name)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj€õh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj|õh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�õh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj|õh²hh³jŽõh´Mubj„)�”}”(hŒusb_register_driver”h]”jŠ)�”}”(hŒusb_register_driver”h]”hŒusb_register_driver”…”�”}”(hj¡õh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�õubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj|õh²hh³jŽõh´Mubj¥)�”}”(hŒK(struct usb_driver *new_driver, struct module *owner, const char *mod_name)”h]”(j«)�”}”(hŒstruct usb_driver *new_driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj½õh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¹õubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊõh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¹õubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_driver”h]”hŒ usb_driver”…”�”}”(hjÛõh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjØõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÝõŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj£õsbŒc.usb_core.usb_register_driver”†”esbuh1hhj¹õubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüõh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¹õubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¹õubjŠ)�”}”(hŒ new_driver”h]”hŒ new_driver”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¹õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjµõubj«)�”}”(hŒstruct module *owner”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj0öh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj,öubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=öh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj,öubh)�”}”(hhh]”jŠ)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjNöh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjKöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jPöŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jøõŒc.usb_core.usb_register_driver”†”esbuh1hhj,öubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmöh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj,öubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj{öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj,öubjŠ)�”}”(hŒowner”h]”hŒowner”…”�”}”(hjˆöh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj,öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjµõubj«)�”}”(hŒconst char *mod_name”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj¡öh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj�öubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®öh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�öubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¼öh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�öubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊöh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�öubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjØöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj�öubjŠ)�”}”(hŒmod_name”h]”hŒmod_name”…”�”}”(hjåöh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjµõubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj|õh²hh³jŽõh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjxõh²hh³jŽõh´Mubah}”(h]”jsõah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jŽõh´Mhjuõh²hubjü)�”}”(hhh]”hë)�”}”(hŒregister a USB interface driver”h]”hŒregister a USB interface driver”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj ÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjuõh²hh³jŽõh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj'÷jj'÷j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXŠ**Parameters** ``struct usb_driver *new_driver`` USB operations for the interface driver ``struct module *owner`` module owner of this driver. ``const char *mod_name`` module name string **Description** Registers a USB interface driver with the USB core. The list of unattached interfaces will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized interfaces. **Return** A negative error code on failure and 0 on success. **NOTE** if you want your driver to use the USB major number, you must call usb_register_dev() to enable that functionality. This function no longer takes care of that.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj1÷h]”hŒ Parameters”…”�”}”(hj3÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj/÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj+÷ubjD)�”}”(hhh]”(jI)�”}”(hŒJ``struct usb_driver *new_driver`` USB operations for the interface driver ”h]”(jO)�”}”(hŒ!``struct usb_driver *new_driver``”h]”jÑ)�”}”(hjP÷h]”hŒstruct usb_driver *new_driver”…”�”}”(hjR÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjN÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MhjJ÷ubji)�”}”(hhh]”hë)�”}”(hŒ'USB operations for the interface driver”h]”hŒ'USB operations for the interface driver”…”�”}”(hji÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³je÷h´Mhjf÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjJ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³je÷h´MhjG÷ubjI)�”}”(hŒ6``struct module *owner`` module owner of this driver. ”h]”(jO)�”}”(hŒ``struct module *owner``”h]”jÑ)�”}”(hj‰÷h]”hŒstruct module *owner”…”�”}”(hj‹÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‡÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjƒ÷ubji)�”}”(hhh]”hë)�”}”(hŒmodule owner of this driver.”h]”hŒmodule owner of this driver.”…”�”}”(hj¢÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jž÷h´MhjŸ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjƒ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jž÷h´MhjG÷ubjI)�”}”(hŒ,``const char *mod_name`` module name string ”h]”(jO)�”}”(hŒ``const char *mod_name``”h]”jÑ)�”}”(hjÂ÷h]”hŒconst char *mod_name”…”�”}”(hjÄ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÀ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj¼÷ubji)�”}”(hhh]”hë)�”}”(hŒmodule name string”h]”hŒmodule name string”…”�”}”(hjÛ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j×÷h´MhjØ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¼÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j×÷h´MhjG÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj+÷ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjý÷h]”hŒ Description”…”�”}”(hjÿ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjû÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj+÷ubhë)�”}”(hŒÈRegisters a USB interface driver with the USB core. The list of unattached interfaces will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized interfaces.”h]”hŒÈRegisters a USB interface driver with the USB core. The list of unattached interfaces will be rescanned whenever a new driver is added, allowing the new driver to attach to any recognized interfaces.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj+÷ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj$øh]”hŒReturn”…”�”}”(hj&øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj"øubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M"hj+÷ubhë)�”}”(hŒ2A negative error code on failure and 0 on success.”h]”hŒ2A negative error code on failure and 0 on success.”…”�”}”(hj:øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M#hj+÷ubhë)�”}”(hŒ**NOTE**”h]”j.)�”}”(hjKøh]”hŒNOTE”…”�”}”(hjMøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjIøubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M%hj+÷ubhë)�”}”(hŒ if you want your driver to use the USB major number, you must call usb_register_dev() to enable that functionality. This function no longer takes care of that.”h]”hŒ if you want your driver to use the USB major number, you must call usb_register_dev() to enable that functionality. This function no longer takes care of that.”…”�”}”(hjaøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M%hj+÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$usb_core.usb_deregister (C function)”Œc.usb_core.usb_deregister”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ/void usb_deregister (struct usb_driver *driver)”h]”j+)�”}”(hŒ.void usb_deregister(struct usb_driver *driver)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�øh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŒøh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MRubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸøh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŒøh²hh³jžøh´MRubj„)�”}”(hŒusb_deregister”h]”jŠ)�”}”(hŒusb_deregister”h]”hŒusb_deregister”…”�”}”(hj±øh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj­øubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŒøh²hh³jžøh´MRubj¥)�”}”(hŒ(struct usb_driver *driver)”h]”j«)�”}”(hŒstruct usb_driver *driver”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÍøh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÉøubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚøh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÉøubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_driver”h]”hŒ usb_driver”…”�”}”(hjëøh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjèøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jíøŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj³øsbŒc.usb_core.usb_deregister”†”esbuh1hhjÉøubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÉøubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÉøubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj'ùh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÉøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÅøubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŒøh²hh³jžøh´MRubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjˆøh²hh³jžøh´MRubah}”(h]”jƒøah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jžøh´MRhj…øh²hubjü)�”}”(hhh]”hë)�”}”(hŒ!unregister a USB interface driver”h]”hŒ!unregister a USB interface driver”…”�”}”(hjQùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MRhjNùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj…øh²hh³jžøh´MRubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjiùjjiùj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX�**Parameters** ``struct usb_driver *driver`` USB operations of the interface driver to unregister **Context** must be able to sleep **Description** Unlinks the specified driver from the internal USB driver list. **NOTE** If you called usb_register_dev(), you still need to call usb_deregister_dev() to clean up your driver's allocated minor numbers, this * call will no longer do it for you.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjsùh]”hŒ Parameters”…”�”}”(hjuùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjqùubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MVhjmùubjD)�”}”(hhh]”jI)�”}”(hŒS``struct usb_driver *driver`` USB operations of the interface driver to unregister ”h]”(jO)�”}”(hŒ``struct usb_driver *driver``”h]”jÑ)�”}”(hj’ùh]”hŒstruct usb_driver *driver”…”�”}”(hj”ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MShjŒùubji)�”}”(hhh]”hë)�”}”(hŒ4USB operations of the interface driver to unregister”h]”hŒ4USB operations of the interface driver to unregister”…”�”}”(hj«ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j§ùh´MShj¨ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjŒùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j§ùh´MShj‰ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjmùubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjÍùh]”hŒContext”…”�”}”(hjÏùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjËùubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MUhjmùubhë)�”}”(hŒmust be able to sleep”h]”hŒmust be able to sleep”…”�”}”(hjãùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MThjmùubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjôùh]”hŒ Description”…”�”}”(hjöùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjòùubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MVhjmùubhë)�”}”(hŒ?Unlinks the specified driver from the internal USB driver list.”h]”hŒ?Unlinks the specified driver from the internal USB driver list.”…”�”}”(hj úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MUhjmùubhë)�”}”(hŒ**NOTE**”h]”j.)�”}”(hjúh]”hŒNOTE”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MWhjmùubhë)�”}”(hŒªIf you called usb_register_dev(), you still need to call usb_deregister_dev() to clean up your driver's allocated minor numbers, this * call will no longer do it for you.”h]”hŒ¬If you called usb_register_dev(), you still need to call usb_deregister_dev() to clean up your driver’s allocated minor numbers, this * call will no longer do it for you.”…”�”}”(hj1úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MXhjmùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ,usb_core.usb_enable_autosuspend (C function)”Œ!c.usb_core.usb_enable_autosuspend”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ5void usb_enable_autosuspend (struct usb_device *udev)”h]”j+)�”}”(hŒ4void usb_enable_autosuspend(struct usb_device *udev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj`úh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj\úh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M™ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoúh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj\úh²hh³jnúh´M™ubj„)�”}”(hŒusb_enable_autosuspend”h]”jŠ)�”}”(hŒusb_enable_autosuspend”h]”hŒusb_enable_autosuspend”…”�”}”(hj�úh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj}úubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj\úh²hh³jnúh´M™ubj¥)�”}”(hŒ(struct usb_device *udev)”h]”j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj�úh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj™úubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªúh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™úubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj»úh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¸úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j½úŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjƒúsbŒ!c.usb_core.usb_enable_autosuspend”†”esbuh1hhj™úubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜúh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™úubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjêúh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj™úubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj÷úh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj™úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj•úubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj\úh²hh³jnúh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjXúh²hh³jnúh´M™ubah}”(h]”jSúah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jnúh´M™hjUúh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&allow a USB device to be autosuspended”h]”hŒ&allow a USB device to be autosuspended”…”�”}”(hj!ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M™hjûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjUúh²hh³jnúh´M™ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj9ûjj9ûj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXH**Parameters** ``struct usb_device *udev`` the USB device which may be autosuspended **Description** This routine allows **udev** to be autosuspended. An autosuspend won't take place until the autosuspend_delay has elapsed and all the other necessary conditions are satisfied. The caller must hold **udev**'s device lock.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjCûh]”hŒ Parameters”…”�”}”(hjEûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjAûubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M�hj=ûubjD)�”}”(hhh]”jI)�”}”(hŒF``struct usb_device *udev`` the USB device which may be autosuspended ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hjbûh]”hŒstruct usb_device *udev”…”�”}”(hjdûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj`ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mšhj\ûubji)�”}”(hhh]”hë)�”}”(hŒ)the USB device which may be autosuspended”h]”hŒ)the USB device which may be autosuspended”…”�”}”(hj{ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jwûh´Mšhjxûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj\ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jwûh´MšhjYûubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj=ûubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj�ûh]”hŒ Description”…”�”}”(hjŸûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj›ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mœhj=ûubhë)�”}”(hŒ°This routine allows **udev** to be autosuspended. An autosuspend won't take place until the autosuspend_delay has elapsed and all the other necessary conditions are satisfied.”h]”(hŒThis routine allows ”…”�”}”(hj³ûh²hh³Nh´Nubj.)�”}”(hŒ**udev**”h]”hŒudev”…”�”}”(hj»ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj³ûubhŒ– to be autosuspended. An autosuspend won’t take place until the autosuspend_delay has elapsed and all the other necessary conditions are satisfied.”…”�”}”(hj³ûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M›hj=ûubhë)�”}”(hŒ,The caller must hold **udev**'s device lock.”h]”(hŒThe caller must hold ”…”�”}”(hjÔûh²hh³Nh´Nubj.)�”}”(hŒ**udev**”h]”hŒudev”…”�”}”(hjÜûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÔûubhŒ’s device lock.”…”�”}”(hjÔûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MŸhj=ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_disable_autosuspend (C function)”Œ"c.usb_core.usb_disable_autosuspend”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ6void usb_disable_autosuspend (struct usb_device *udev)”h]”j+)�”}”(hŒ5void usb_disable_autosuspend(struct usb_device *udev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjüh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M©ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$üh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjüh²hh³j#üh´M©ubj„)�”}”(hŒusb_disable_autosuspend”h]”jŠ)�”}”(hŒusb_disable_autosuspend”h]”hŒusb_disable_autosuspend”…”�”}”(hj6üh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj2üubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjüh²hh³j#üh´M©ubj¥)�”}”(hŒ(struct usb_device *udev)”h]”j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjRüh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjNüubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_üh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjNüubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjpüh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjmüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jrüŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj8üsbŒ"c.usb_core.usb_disable_autosuspend”†”esbuh1hhjNüubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘üh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjNüubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŸüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjNüubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj¬üh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjNüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjJüubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjüh²hh³j#üh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj üh²hh³j#üh´M©ubah}”(h]”jüah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j#üh´M©hj üh²hubjü)�”}”(hhh]”hë)�”}”(hŒ-prevent a USB device from being autosuspended”h]”hŒ-prevent a USB device from being autosuspended”…”�”}”(hjÖüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M©hjÓüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj üh²hh³j#üh´M©ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjîüjjîüj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *udev`` the USB device which may not be autosuspended **Description** This routine prevents **udev** from being autosuspended and wakes it up if it is already autosuspended. The caller must hold **udev**'s device lock.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjøüh]”hŒ Parameters”…”�”}”(hjúüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjöüubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M­hjòüubjD)�”}”(hhh]”jI)�”}”(hŒJ``struct usb_device *udev`` the USB device which may not be autosuspended ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hjýh]”hŒstruct usb_device *udev”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mªhjýubji)�”}”(hhh]”hë)�”}”(hŒ-the USB device which may not be autosuspended”h]”hŒ-the USB device which may not be autosuspended”…”�”}”(hj0ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j,ýh´Mªhj-ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j,ýh´Mªhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjòüubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjRýh]”hŒ Description”…”�”}”(hjTýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjPýubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M¬hjòüubhë)�”}”(hŒgThis routine prevents **udev** from being autosuspended and wakes it up if it is already autosuspended.”h]”(hŒThis routine prevents ”…”�”}”(hjhýh²hh³Nh´Nubj.)�”}”(hŒ**udev**”h]”hŒudev”…”�”}”(hjpýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjhýubhŒI from being autosuspended and wakes it up if it is already autosuspended.”…”�”}”(hjhýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M«hjòüubhë)�”}”(hŒ,The caller must hold **udev**'s device lock.”h]”(hŒThe caller must hold ”…”�”}”(hj‰ýh²hh³Nh´Nubj.)�”}”(hŒ**udev**”h]”hŒudev”…”�”}”(hj‘ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj‰ýubhŒ’s device lock.”…”�”}”(hj‰ýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M®hjòüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ.usb_core.usb_autopm_put_interface (C function)”Œ#c.usb_core.usb_autopm_put_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ:void usb_autopm_put_interface (struct usb_interface *intf)”h]”j+)�”}”(hŒ9void usb_autopm_put_interface(struct usb_interface *intf)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊýh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÆýh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MòubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙýh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÆýh²hh³jØýh´Mòubj„)�”}”(hŒusb_autopm_put_interface”h]”jŠ)�”}”(hŒusb_autopm_put_interface”h]”hŒusb_autopm_put_interface”…”�”}”(hjëýh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjçýubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÆýh²hh³jØýh´Mòubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjþubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjþubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj%þh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j'þŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjíýsbŒ#c.usb_core.usb_autopm_put_interface”†”esbuh1hhjþubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFþh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjþubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjTþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjþubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjaþh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÿýubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÆýh²hh³jØýh´Mòubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÂýh²hh³jØýh´Mòubah}”(h]”j½ýah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jØýh´Mòhj¿ýh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,decrement a USB interface's PM-usage counter”h]”hŒ.decrement a USB interface’s PM-usage counter”…”�”}”(hj‹þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mòhjˆþh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¿ýh²hh³jØýh´Mòubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj£þjj£þj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX=**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be decremented **Description** This routine should be called by an interface driver when it is finished using **intf** and wants to allow it to autosuspend. A typical example would be a character-device driver when its device file is closed. The routine decrements **intf**'s usage counter. When the counter reaches 0, a delayed autosuspend request for **intf**'s device is attempted. The attempt may fail (see autosuspend_check()). This routine can run only in process context.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj­þh]”hŒ Parameters”…”�”}”(hj¯þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj«þubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Möhj§þubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be decremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjÌþh]”hŒstruct usb_interface *intf”…”�”}”(hjÎþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÊþubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MóhjÆþubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be decremented”h]”hŒ5the usb_interface whose counter should be decremented”…”�”}”(hjåþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jáþh´Móhjâþubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÆþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jáþh´MóhjÃþubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj§þubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÿh]”hŒ Description”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mõhj§þubhë)�”}”(hŒÓThis routine should be called by an interface driver when it is finished using **intf** and wants to allow it to autosuspend. A typical example would be a character-device driver when its device file is closed.”h]”(hŒOThis routine should be called by an interface driver when it is finished using ”…”�”}”(hjÿh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hj%ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÿubhŒ| and wants to allow it to autosuspend. A typical example would be a character-device driver when its device file is closed.”…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Môhj§þubhë)�”}”(hŒÀThe routine decrements **intf**'s usage counter. When the counter reaches 0, a delayed autosuspend request for **intf**'s device is attempted. The attempt may fail (see autosuspend_check()).”h]”(hŒThe routine decrements ”…”�”}”(hj>ÿh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjFÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj>ÿubhŒS’s usage counter. When the counter reaches 0, a delayed autosuspend request for ”…”�”}”(hj>ÿh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjXÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj>ÿubhŒJ’s device is attempted. The attempt may fail (see autosuspend_check()).”…”�”}”(hj>ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mùhj§þubhë)�”}”(hŒ-This routine can run only in process context.”h]”hŒ-This routine can run only in process context.”…”�”}”(hjqÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mýhj§þubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ4usb_core.usb_autopm_put_interface_async (C function)”Œ)c.usb_core.usb_autopm_put_interface_async”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ@void usb_autopm_put_interface_async (struct usb_interface *intf)”h]”j+)�”}”(hŒ?void usb_autopm_put_interface_async(struct usb_interface *intf)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjœÿh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯ÿh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjœÿh²hh³j®ÿh´Mubj„)�”}”(hŒusb_autopm_put_interface_async”h]”jŠ)�”}”(hŒusb_autopm_put_interface_async”h]”hŒusb_autopm_put_interface_async”…”�”}”(hjÁÿh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj½ÿubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjœÿh²hh³j®ÿh´Mubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÝÿh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÙÿubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêÿh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÙÿubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjûÿh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjøÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jýÿŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÃÿsbŒ)c.usb_core.usb_autopm_put_interface_async”†”esbuh1hhjÙÿubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÙÿubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÙÿubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÙÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÕÿubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjœÿh²hh³j®ÿh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj˜ÿh²hh³j®ÿh´Mubah}”(h]”j“ÿah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j®ÿh´Mhj•ÿh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,decrement a USB interface's PM-usage counter”h]”hŒ.decrement a USB interface’s PM-usage counter”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj•ÿh²hh³j®ÿh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjyjjyj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXU**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be decremented **Description** This routine does much the same thing as usb_autopm_put_interface(): It decrements **intf**'s usage counter and schedules a delayed autosuspend request if the counter is <= 0. The difference is that it does not perform any synchronization; callers should hold a private lock and handle all synchronization issues themselves. Typically a driver would call this routine during an URB's completion handler, if no more URBs were pending. This routine can run in atomic context.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjƒh]”hŒ Parameters”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj}ubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be decremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj¢h]”hŒstruct usb_interface *intf”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhjœubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be decremented”h]”hŒ5the usb_interface whose counter should be decremented”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j·h´Mhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j·h´Mhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj}ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÝh]”hŒ Description”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj}ubhë)�”}”(hXEThis routine does much the same thing as usb_autopm_put_interface(): It decrements **intf**'s usage counter and schedules a delayed autosuspend request if the counter is <= 0. The difference is that it does not perform any synchronization; callers should hold a private lock and handle all synchronization issues themselves.”h]”(hŒSThis routine does much the same thing as usb_autopm_put_interface(): It decrements ”…”�”}”(hjóh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjóubhŒì’s usage counter and schedules a delayed autosuspend request if the counter is <= 0. The difference is that it does not perform any synchronization; callers should hold a private lock and handle all synchronization issues themselves.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj}ubhë)�”}”(hŒlTypically a driver would call this routine during an URB's completion handler, if no more URBs were pending.”h]”hŒnTypically a driver would call this routine during an URB’s completion handler, if no more URBs were pending.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj}ubhë)�”}”(hŒ'This routine can run in atomic context.”h]”hŒ'This routine can run in atomic context.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ9usb_core.usb_autopm_put_interface_no_suspend (C function)”Œ.c.usb_core.usb_autopm_put_interface_no_suspend”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒEvoid usb_autopm_put_interface_no_suspend (struct usb_interface *intf)”h]”j+)�”}”(hŒDvoid usb_autopm_put_interface_no_suspend(struct usb_interface *intf)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjNh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M(ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjNh²hh³j`h´M(ubj„)�”}”(hŒ#usb_autopm_put_interface_no_suspend”h]”jŠ)�”}”(hŒ#usb_autopm_put_interface_no_suspend”h]”hŒ#usb_autopm_put_interface_no_suspend”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjoubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjNh²hh³j`h´M(ubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj‹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‹ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¯Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjusbŒ.c.usb_core.usb_autopm_put_interface_no_suspend”†”esbuh1hhj‹ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‹ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj‹ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj‡ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjNh²hh³j`h´M(ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjJh²hh³j`h´M(ubah}”(h]”jEah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j`h´M(hjGh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,decrement a USB interface's PM-usage counter”h]”hŒ.decrement a USB interface’s PM-usage counter”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M(hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjGh²hh³j`h´M(ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj+jj+j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒù**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be decremented **Description** This routine decrements **intf**'s usage counter but does not carry out an autosuspend. This routine can run in atomic context.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj5h]”hŒ Parameters”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M,hj/ubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be decremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjTh]”hŒstruct usb_interface *intf”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M)hjNubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be decremented”h]”hŒ5the usb_interface whose counter should be decremented”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jih´M)hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jih´M)hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj/ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj�h]”hŒ Description”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M+hj/ubhë)�”}”(hŒWThis routine decrements **intf**'s usage counter but does not carry out an autosuspend.”h]”(hŒThis routine decrements ”…”�”}”(hj¥h²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¥ubhŒ9’s usage counter but does not carry out an autosuspend.”…”�”}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M*hj/ubhë)�”}”(hŒ'This routine can run in atomic context.”h]”hŒ'This routine can run in atomic context.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M-hj/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ.usb_core.usb_autopm_get_interface (C function)”Œ#c.usb_core.usb_autopm_get_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ9int usb_autopm_get_interface (struct usb_interface *intf)”h]”j+)�”}”(hŒ8int usb_autopm_get_interface(struct usb_interface *intf)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjñh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M:ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñh²hh³jh´M:ubj„)�”}”(hŒusb_autopm_get_interface”h]”jŠ)�”}”(hŒusb_autopm_get_interface”h]”hŒusb_autopm_get_interface”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjñh²hh³jh´M:ubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj.ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj.ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jRŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjsbŒ#c.usb_core.usb_autopm_get_interface”†”esbuh1hhj.ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj.ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj.ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj*ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjñh²hh³jh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjíh²hh³jh´M:ubah}”(h]”jèah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jh´M:hjêh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,increment a USB interface's PM-usage counter”h]”hŒ.increment a USB interface’s PM-usage counter”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M:hj³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjêh²hh³jh´M:ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÎjjÎj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX.**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be incremented **Description** This routine should be called by an interface driver when it wants to use **intf** and needs to guarantee that it is not suspended. In addition, the routine prevents **intf** from being autosuspended subsequently. (Note that this will not prevent suspend events originating in the PM core.) This prevention will persist until usb_autopm_put_interface() is called or **intf** is unbound. A typical example would be a character-device driver when its device file is opened. **intf**'s usage counter is incremented to prevent subsequent autosuspends. However if the autoresume fails then the counter is re-decremented. This routine can run only in process context. **Return** 0 on success.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjØh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M>hjÒubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be incremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj÷h]”hŒstruct usb_interface *intf”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M;hjñubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be incremented”h]”hŒ5the usb_interface whose counter should be incremented”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j h´M;hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j h´M;hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÒubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj2h]”hŒ Description”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M=hjÒubhë)�”}”(hXÚThis routine should be called by an interface driver when it wants to use **intf** and needs to guarantee that it is not suspended. In addition, the routine prevents **intf** from being autosuspended subsequently. (Note that this will not prevent suspend events originating in the PM core.) This prevention will persist until usb_autopm_put_interface() is called or **intf** is unbound. A typical example would be a character-device driver when its device file is opened.”h]”(hŒJThis routine should be called by an interface driver when it wants to use ”…”�”}”(hjHh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjHubhŒU and needs to guarantee that it is not suspended. In addition, the routine prevents ”…”�”}”(hjHh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjHubhŒÁ from being autosuspended subsequently. (Note that this will not prevent suspend events originating in the PM core.) This prevention will persist until usb_autopm_put_interface() is called or ”…”�”}”(hjHh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjHubhŒb is unbound. A typical example would be a character-device driver when its device file is opened.”…”�”}”(hjHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M<hjÒubhë)�”}”(hŒ�**intf**'s usage counter is incremented to prevent subsequent autosuspends. However if the autoresume fails then the counter is re-decremented.”h]”(j.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�ubhŒ‰â€™s usage counter is incremented to prevent subsequent autosuspends. However if the autoresume fails then the counter is re-decremented.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MDhjÒubhë)�”}”(hŒ-This routine can run only in process context.”h]”hŒ-This routine can run only in process context.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MGhjÒubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj»h]”hŒReturn”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MIhjÒubhë)�”}”(hŒ 0 on success.”h]”hŒ 0 on success.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”•h´MJhjÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ4usb_core.usb_autopm_get_interface_async (C function)”Œ)c.usb_core.usb_autopm_get_interface_async”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ?int usb_autopm_get_interface_async (struct usb_interface *intf)”h]”j+)�”}”(hŒ>int usb_autopm_get_interface_async(struct usb_interface *intf)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjüh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MYubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjüh²hh³jh´MYubj„)�”}”(hŒusb_autopm_get_interface_async”h]”jŠ)�”}”(hŒusb_autopm_get_interface_async”h]”hŒusb_autopm_get_interface_async”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjüh²hh³jh´MYubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j]Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj#sbŒ)c.usb_core.usb_autopm_get_interface_async”†”esbuh1hhj9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj9ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj5ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjüh²hh³jh´MYubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjøh²hh³jh´MYubah}”(h]”jóah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jh´MYhjõh²hubjü)�”}”(hhh]”hë)�”}”(hŒ,increment a USB interface's PM-usage counter”h]”hŒ.increment a USB interface’s PM-usage counter”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MYhj¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjõh²hh³jh´MYubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÙjjÙj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX§**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be incremented **Description** This routine does much the same thing as usb_autopm_get_interface(): It increments **intf**'s usage counter and queues an autoresume request if the device is suspended. The differences are that it does not perform any synchronization (callers should hold a private lock and handle all synchronization issues themselves), and it does not autoresume the device directly (it only queues a request). After a successful call, the device may not yet be resumed. This routine can run in atomic context. **Return** 0 on success. A negative error code otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjãh]”hŒ Parameters”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M]hjÝubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be incremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjh]”hŒstruct usb_interface *intf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MZhjüubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be incremented”h]”hŒ5the usb_interface whose counter should be incremented”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´MZhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´MZhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÝubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj=h]”hŒ Description”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M\hjÝubhë)�”}”(hXÉThis routine does much the same thing as usb_autopm_get_interface(): It increments **intf**'s usage counter and queues an autoresume request if the device is suspended. The differences are that it does not perform any synchronization (callers should hold a private lock and handle all synchronization issues themselves), and it does not autoresume the device directly (it only queues a request). After a successful call, the device may not yet be resumed.”h]”(hŒSThis routine does much the same thing as usb_autopm_get_interface(): It increments ”…”�”}”(hjSh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjSubhXp’s usage counter and queues an autoresume request if the device is suspended. The differences are that it does not perform any synchronization (callers should hold a private lock and handle all synchronization issues themselves), and it does not autoresume the device directly (it only queues a request). After a successful call, the device may not yet be resumed.”…”�”}”(hjSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M[hjÝubhë)�”}”(hŒ'This routine can run in atomic context.”h]”hŒ'This routine can run in atomic context.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MdhjÝubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj…h]”hŒReturn”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MfhjÝubhë)�”}”(hŒ.0 on success. A negative error code otherwise.”h]”hŒ.0 on success. A negative error code otherwise.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MghjÝubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ8usb_core.usb_autopm_get_interface_no_resume (C function)”Œ-c.usb_core.usb_autopm_get_interface_no_resume”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒDvoid usb_autopm_get_interface_no_resume (struct usb_interface *intf)”h]”j+)�”}”(hŒCvoid usb_autopm_get_interface_no_resume(struct usb_interface *intf)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÆh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´MzubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÆh²hh³jØh´Mzubj„)�”}”(hŒ"usb_autopm_get_interface_no_resume”h]”jŠ)�”}”(hŒ"usb_autopm_get_interface_no_resume”h]”hŒ"usb_autopm_get_interface_no_resume”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjçubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÆh²hh³jØh´Mzubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j'Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjísbŒ-c.usb_core.usb_autopm_get_interface_no_resume”†”esbuh1hhjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÿubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÆh²hh³jØh´Mzubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÂh²hh³jØh´Mzubah}”(h]”j½ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jØh´Mzhj¿h²hubjü)�”}”(hhh]”hë)�”}”(hŒ,increment a USB interface's PM-usage counter”h]”hŒ.increment a USB interface’s PM-usage counter”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mzhjˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¿h²hh³jØh´Mzubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj£jj£j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒø**Parameters** ``struct usb_interface *intf`` the usb_interface whose counter should be incremented **Description** This routine increments **intf**'s usage counter but does not carry out an autoresume. This routine can run in atomic context.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj­h]”hŒ Parameters”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M~hj§ubjD)�”}”(hhh]”jI)�”}”(hŒU``struct usb_interface *intf`` the usb_interface whose counter should be incremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjÌh]”hŒstruct usb_interface *intf”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M{hjÆubji)�”}”(hhh]”hë)�”}”(hŒ5the usb_interface whose counter should be incremented”h]”hŒ5the usb_interface whose counter should be incremented”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jáh´M{hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jáh´M{hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj§ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M}hj§ubhë)�”}”(hŒVThis routine increments **intf**'s usage counter but does not carry out an autoresume.”h]”(hŒThis routine increments ”…”�”}”(hjh²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubhŒ8’s usage counter but does not carry out an autoresume.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´M|hj§ubhë)�”}”(hŒ'This routine can run in atomic context.”h]”hŒ'This routine can run in atomic context.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:171: ./drivers/usb/core/driver.c”h´Mhj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ/usb_core.usb_find_common_endpoints (C function)”Œ$c.usb_core.usb_find_common_endpoints”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒæint usb_find_common_endpoints (struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”j+)�”}”(hŒåint usb_find_common_endpoints(struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjih²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´KxubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjih²hh³j{h´Kxubj„)�”}”(hŒusb_find_common_endpoints”h]”jŠ)�”}”(hŒusb_find_common_endpoints”h]”hŒusb_find_common_endpoints”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŠubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjih²hh³j{h´Kxubj¥)�”}”(hŒÈ(struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”(j«)�”}”(hŒstruct usb_host_interface *alt”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¦ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¦ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_interface”h]”hŒusb_host_interface”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÊŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj�sbŒ$c.usb_core.usb_find_common_endpoints”†”esbuh1hhj¦ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¦ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¦ubjŠ)�”}”(hŒalt”h]”hŒalt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¢ubj«)�”}”(hŒ(struct usb_endpoint_descriptor **bulk_in”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj8 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j= Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jåŒ$c.usb_core.usb_find_common_endpoints”†”esbuh1hhj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ubjŠ)�”}”(hŒbulk_in”h]”hŒbulk_in”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¢ubj«)�”}”(hŒ)struct usb_endpoint_descriptor **bulk_out”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj— ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj— ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¶ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j» Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jåŒ$c.usb_core.usb_find_common_endpoints”†”esbuh1hhj— ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj— ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj— ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj— ubjŠ)�”}”(hŒbulk_out”h]”hŒbulk_out”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj— ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¢ubj«)�”}”(hŒ'struct usb_endpoint_descriptor **int_in”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj4 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j9 Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jåŒ$c.usb_core.usb_find_common_endpoints”†”esbuh1hhj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ubjŠ)�”}”(hŒint_in”h]”hŒint_in”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¢ubj«)�”}”(hŒ(struct usb_endpoint_descriptor **int_out”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj“ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj“ ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj² ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j· Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jåŒ$c.usb_core.usb_find_common_endpoints”†”esbuh1hhj“ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj“ ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj“ ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj“ ubjŠ)�”}”(hŒint_out”h]”hŒint_out”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj“ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjih²hh³j{h´Kxubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjeh²hh³j{h´Kxubah}”(h]”j`ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j{h´Kxhjbh²hubjü)�”}”(hhh]”j¶)�”}”(hhh]”j»)�”}”(hŒ#look up common endpoint descriptors”h]”hë)�”}”(hj+ h]”hŒ#look up common endpoint descriptors”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kxhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj& h²hh³j: h´Nubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³j: h´Kxhj# h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjbh²hh³j{h´Kxubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjP jjP j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_host_interface *alt`` alternate setting to search ``struct usb_endpoint_descriptor **bulk_in`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **bulk_out`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **int_in`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **int_out`` pointer to descriptor pointer, or NULL **Description** Search the alternate setting's endpoint descriptors for the first bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL). If a requested endpoint is not found, the corresponding pointer is set to NULL. **Return** Zero if all requested descriptors were found, or -ENXIO otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjZ h]”hŒ Parameters”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjX ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K|hjT ubjD)�”}”(hhh]”(jI)�”}”(hŒ?``struct usb_host_interface *alt`` alternate setting to search ”h]”(jO)�”}”(hŒ"``struct usb_host_interface *alt``”h]”jÑ)�”}”(hjy h]”hŒstruct usb_host_interface *alt”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kyhjs ubji)�”}”(hhh]”hë)�”}”(hŒalternate setting to search”h]”hŒalternate setting to search”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jŽ h´Kyhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jŽ h´Kyhjp ubjI)�”}”(hŒT``struct usb_endpoint_descriptor **bulk_in`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ,``struct usb_endpoint_descriptor **bulk_in``”h]”jÑ)�”}”(hj² h]”hŒ(struct usb_endpoint_descriptor **bulk_in”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kzhj¬ ubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÇ h´KzhjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¬ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÇ h´Kzhjp ubjI)�”}”(hŒU``struct usb_endpoint_descriptor **bulk_out`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ-``struct usb_endpoint_descriptor **bulk_out``”h]”jÑ)�”}”(hjë h]”hŒ)struct usb_endpoint_descriptor **bulk_out”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K{hjå ubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j h´K{hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjå ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j h´K{hjp ubjI)�”}”(hŒS``struct usb_endpoint_descriptor **int_in`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ+``struct usb_endpoint_descriptor **int_in``”h]”jÑ)�”}”(hj$ h]”hŒ'struct usb_endpoint_descriptor **int_in”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K|hj ubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j9 h´K|hj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j9 h´K|hjp ubjI)�”}”(hŒT``struct usb_endpoint_descriptor **int_out`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ,``struct usb_endpoint_descriptor **int_out``”h]”jÑ)�”}”(hj] h]”hŒ(struct usb_endpoint_descriptor **int_out”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K}hjW ubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jr h´K}hjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjW ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jr h´K}hjp ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjT ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj˜ h]”hŒ Description”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´KhjT ubhë)�”}”(hŒ¾Search the alternate setting's endpoint descriptors for the first bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL).”h]”hŒÀSearch the alternate setting’s endpoint descriptors for the first bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL).”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K~hjT ubhë)�”}”(hŒOIf a requested endpoint is not found, the corresponding pointer is set to NULL.”h]”hŒOIf a requested endpoint is not found, the corresponding pointer is set to NULL.”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K‚hjT ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjÎ h]”hŒReturn”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K…hjT ubhë)�”}”(hŒBZero if all requested descriptors were found, or -ENXIO otherwise.”h]”hŒBZero if all requested descriptors were found, or -ENXIO otherwise.”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K†hjT ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ7usb_core.usb_find_common_endpoints_reverse (C function)”Œ,c.usb_core.usb_find_common_endpoints_reverse”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒîint usb_find_common_endpoints_reverse (struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”j+)�”}”(hŒíint usb_find_common_endpoints_reverse(struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K¦ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj h²hh³j! h´K¦ubj„)�”}”(hŒ!usb_find_common_endpoints_reverse”h]”jŠ)�”}”(hŒ!usb_find_common_endpoints_reverse”h]”hŒ!usb_find_common_endpoints_reverse”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj0 ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj h²hh³j! h´K¦ubj¥)�”}”(hŒÈ(struct usb_host_interface *alt, struct usb_endpoint_descriptor **bulk_in, struct usb_endpoint_descriptor **bulk_out, struct usb_endpoint_descriptor **int_in, struct usb_endpoint_descriptor **int_out)”h]”(j«)�”}”(hŒstruct usb_host_interface *alt”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjL ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjL ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_interface”h]”hŒusb_host_interface”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjk ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jp Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj6 sbŒ,c.usb_core.usb_find_common_endpoints_reverse”†”esbuh1hhjL ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjL ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjL ubjŠ)�”}”(hŒalt”h]”hŒalt”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjL ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjH ubj«)�”}”(hŒ(struct usb_endpoint_descriptor **bulk_in”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¿ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¿ ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÞ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jã Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j‹ Œ,c.usb_core.usb_find_common_endpoints_reverse”†”esbuh1hhj¿ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¿ ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¿ ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¿ ubjŠ)�”}”(hŒbulk_in”h]”hŒbulk_in”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjH ubj«)�”}”(hŒ)struct usb_endpoint_descriptor **bulk_out”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj=ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj=ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jaŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j‹ Œ,c.usb_core.usb_find_common_endpoints_reverse”†”esbuh1hhj=ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj=ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj=ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj=ubjŠ)�”}”(hŒbulk_out”h]”hŒbulk_out”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjH ubj«)�”}”(hŒ'struct usb_endpoint_descriptor **int_in”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj»ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj»ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jߌmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j‹ Œ,c.usb_core.usb_find_common_endpoints_reverse”†”esbuh1hhj»ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj»ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj»ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj»ubjŠ)�”}”(hŒint_in”h]”hŒint_in”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjH ubj«)�”}”(hŒ(struct usb_endpoint_descriptor **int_out”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_endpoint_descriptor”h]”hŒusb_endpoint_descriptor”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j]Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j‹ Œ,c.usb_core.usb_find_common_endpoints_reverse”†”esbuh1hhj9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj9ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj9ubjŠ)�”}”(hŒint_out”h]”hŒint_out”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjH ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj h²hh³j! h´K¦ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj h²hh³j! h´K¦ubah}”(h]”j ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j! h´K¦hj h²hubjü)�”}”(hhh]”j¶)�”}”(hhh]”j»)�”}”(hŒ#look up common endpoint descriptors”h]”hë)�”}”(hjÑh]”hŒ#look up common endpoint descriptors”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K¦hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjÌh²hh³jàh´Nubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³jàh´K¦hjÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj h²hh³j! h´K¦ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjöjjöj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_host_interface *alt`` alternate setting to search ``struct usb_endpoint_descriptor **bulk_in`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **bulk_out`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **int_in`` pointer to descriptor pointer, or NULL ``struct usb_endpoint_descriptor **int_out`` pointer to descriptor pointer, or NULL **Description** Search the alternate setting's endpoint descriptors for the last bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL). If a requested endpoint is not found, the corresponding pointer is set to NULL. **Return** Zero if all requested descriptors were found, or -ENXIO otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´KªhjúubjD)�”}”(hhh]”(jI)�”}”(hŒ?``struct usb_host_interface *alt`` alternate setting to search ”h]”(jO)�”}”(hŒ"``struct usb_host_interface *alt``”h]”jÑ)�”}”(hjh]”hŒstruct usb_host_interface *alt”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K§hjubji)�”}”(hhh]”hë)�”}”(hŒalternate setting to search”h]”hŒalternate setting to search”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j4h´K§hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j4h´K§hjubjI)�”}”(hŒT``struct usb_endpoint_descriptor **bulk_in`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ,``struct usb_endpoint_descriptor **bulk_in``”h]”jÑ)�”}”(hjXh]”hŒ(struct usb_endpoint_descriptor **bulk_in”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K¨hjRubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jmh´K¨hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jmh´K¨hjubjI)�”}”(hŒU``struct usb_endpoint_descriptor **bulk_out`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ-``struct usb_endpoint_descriptor **bulk_out``”h]”jÑ)�”}”(hj‘h]”hŒ)struct usb_endpoint_descriptor **bulk_out”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K©hj‹ubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¦h´K©hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¦h´K©hjubjI)�”}”(hŒS``struct usb_endpoint_descriptor **int_in`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ+``struct usb_endpoint_descriptor **int_in``”h]”jÑ)�”}”(hjÊh]”hŒ'struct usb_endpoint_descriptor **int_in”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´KªhjÄubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jßh´Kªhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jßh´KªhjubjI)�”}”(hŒT``struct usb_endpoint_descriptor **int_out`` pointer to descriptor pointer, or NULL ”h]”(jO)�”}”(hŒ,``struct usb_endpoint_descriptor **int_out``”h]”jÑ)�”}”(hjh]”hŒ(struct usb_endpoint_descriptor **int_out”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K«hjýubji)�”}”(hhh]”hë)�”}”(hŒ&pointer to descriptor pointer, or NULL”h]”hŒ&pointer to descriptor pointer, or NULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´K«hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´K«hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjúubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj>h]”hŒ Description”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K­hjúubhë)�”}”(hŒ½Search the alternate setting's endpoint descriptors for the last bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL).”h]”hŒ¿Search the alternate setting’s endpoint descriptors for the last bulk-in, bulk-out, interrupt-in and interrupt-out endpoints and return them in the provided pointers (unless they are NULL).”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K¬hjúubhë)�”}”(hŒOIf a requested endpoint is not found, the corresponding pointer is set to NULL.”h]”hŒOIf a requested endpoint is not found, the corresponding pointer is set to NULL.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K°hjúubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjth]”hŒReturn”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K³hjúubhë)�”}”(hŒBZero if all requested descriptors were found, or -ENXIO otherwise.”h]”hŒBZero if all requested descriptors were found, or -ENXIO otherwise.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´K´hjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ.usb_core.usb_check_bulk_endpoints (C function)”Œ#c.usb_core.usb_check_bulk_endpoints”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒTbool usb_check_bulk_endpoints (const struct usb_interface *intf, const u8 *ep_addrs)”h]”j+)�”}”(hŒSbool usb_check_bulk_endpoints(const struct usb_interface *intf, const u8 *ep_addrs)”h]”(jT)�”}”(hj›h]”hŒbool”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjµh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´KíubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjµh²hh³jÆh´Kíubj„)�”}”(hŒusb_check_bulk_endpoints”h]”jŠ)�”}”(hŒusb_check_bulk_endpoints”h]”hŒusb_check_bulk_endpoints”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÕubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjµh²hh³jÆh´Kíubj¥)�”}”(hŒ6(const struct usb_interface *intf, const u8 *ep_addrs)”h]”(j«)�”}”(hŒ const struct usb_interface *intf”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñubj1)�”}”(hjh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j0Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÛsbŒ#c.usb_core.usb_check_bulk_endpoints”†”esbuh1hhjñubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjñubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjíubj«)�”}”(hŒconst u8 *ep_addrs”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubh)�”}”(hhh]”jŠ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j£Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jKŒ#c.usb_core.usb_check_bulk_endpoints”†”esbuh1hhjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjubjŠ)�”}”(hŒep_addrs”h]”hŒep_addrs”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjíubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjµh²hh³jÆh´Kíubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj±h²hh³jÆh´Kíubah}”(h]”j¬ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÆh´Kíhj®h²hubjü)�”}”(hhh]”hë)�”}”(hŒjCheck whether an interface's current altsetting contains a set of bulk endpoints with the given addresses.”h]”hŒlCheck whether an interface’s current altsetting contains a set of bulk endpoints with the given addresses.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kíhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj®h²hh³jÆh´Kíubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjjjj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX�**Parameters** ``const struct usb_interface *intf`` the interface whose current altsetting should be searched ``const u8 *ep_addrs`` 0-terminated array of the endpoint addresses (number and direction) to look for **Description** Search for endpoints with the specified addresses and check their types. **Return** ``true`` if all the endpoints are found and are bulk, ``false`` otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kñhj!ubjD)�”}”(hhh]”(jI)�”}”(hŒ_``const struct usb_interface *intf`` the interface whose current altsetting should be searched ”h]”(jO)�”}”(hŒ$``const struct usb_interface *intf``”h]”jÑ)�”}”(hjFh]”hŒ const struct usb_interface *intf”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kïhj@ubji)�”}”(hhh]”hë)�”}”(hŒ9the interface whose current altsetting should be searched”h]”hŒ9the interface whose current altsetting should be searched”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j[h´Kïhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j[h´Kïhj=ubjI)�”}”(hŒg``const u8 *ep_addrs`` 0-terminated array of the endpoint addresses (number and direction) to look for ”h]”(jO)�”}”(hŒ``const u8 *ep_addrs``”h]”jÑ)�”}”(hjh]”hŒconst u8 *ep_addrs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kñhjyubji)�”}”(hhh]”hë)�”}”(hŒO0-terminated array of the endpoint addresses (number and direction) to look for”h]”hŒO0-terminated array of the endpoint addresses (number and direction) to look for”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kðhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j”h´Kñhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj!ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj»h]”hŒ Description”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kóhj!ubhë)�”}”(hŒHSearch for endpoints with the specified addresses and check their types.”h]”hŒHSearch for endpoints with the specified addresses and check their types.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kòhj!ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjâh]”hŒReturn”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kôhj!ubhë)�”}”(hŒJ``true`` if all the endpoints are found and are bulk, ``false`` otherwise.”h]”(jÑ)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjøubhŒ. if all the endpoints are found and are bulk, ”…”�”}”(hjøh²hh³Nh´NubjÑ)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjøubhŒ otherwise.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Kõhj!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_check_int_endpoints (C function)”Œ"c.usb_core.usb_check_int_endpoints”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒSbool usb_check_int_endpoints (const struct usb_interface *intf, const u8 *ep_addrs)”h]”j+)�”}”(hŒRbool usb_check_int_endpoints(const struct usb_interface *intf, const u8 *ep_addrs)”h]”(jT)�”}”(hj›h]”hŒbool”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjCh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjCh²hh³jTh´Mubj„)�”}”(hŒusb_check_int_endpoints”h]”jŠ)�”}”(hŒusb_check_int_endpoints”h]”hŒusb_check_int_endpoints”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjcubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjCh²hh³jTh´Mubj¥)�”}”(hŒ6(const struct usb_interface *intf, const u8 *ep_addrs)”h]”(j«)�”}”(hŒ const struct usb_interface *intf”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubj1)�”}”(hjh]”hŒstruct”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¾Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjisbŒ"c.usb_core.usb_check_int_endpoints”†”esbuh1hhjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj{ubj«)�”}”(hŒconst u8 *ep_addrs”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubh)�”}”(hhh]”jŠ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j1Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÙŒ"c.usb_core.usb_check_int_endpoints”†”esbuh1hhj ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ubjŠ)�”}”(hŒep_addrs”h]”hŒep_addrs”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj{ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjCh²hh³jTh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj?h²hh³jTh´Mubah}”(h]”j:ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jTh´Mhj<h²hubjü)�”}”(hhh]”hë)�”}”(hŒoCheck whether an interface's current altsetting contains a set of interrupt endpoints with the given addresses.”h]”hŒqCheck whether an interface’s current altsetting contains a set of interrupt endpoints with the given addresses.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj<h²hh³jTh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj«jj«j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX”**Parameters** ``const struct usb_interface *intf`` the interface whose current altsetting should be searched ``const u8 *ep_addrs`` 0-terminated array of the endpoint addresses (number and direction) to look for **Description** Search for endpoints with the specified addresses and check their types. **Return** ``true`` if all the endpoints are found and are interrupt, ``false`` otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjµh]”hŒ Parameters”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hj¯ubjD)�”}”(hhh]”(jI)�”}”(hŒ_``const struct usb_interface *intf`` the interface whose current altsetting should be searched ”h]”(jO)�”}”(hŒ$``const struct usb_interface *intf``”h]”jÑ)�”}”(hjÔh]”hŒ const struct usb_interface *intf”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÎubji)�”}”(hhh]”hë)�”}”(hŒ9the interface whose current altsetting should be searched”h]”hŒ9the interface whose current altsetting should be searched”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jéh´Mhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jéh´MhjËubjI)�”}”(hŒg``const u8 *ep_addrs`` 0-terminated array of the endpoint addresses (number and direction) to look for ”h]”(jO)�”}”(hŒ``const u8 *ep_addrs``”h]”jÑ)�”}”(hj h]”hŒconst u8 *ep_addrs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hjubji)�”}”(hhh]”hë)�”}”(hŒO0-terminated array of the endpoint addresses (number and direction) to look for”h]”hŒO0-terminated array of the endpoint addresses (number and direction) to look for”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j"h´M hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¯ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjIh]”hŒ Description”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hj¯ubhë)�”}”(hŒHSearch for endpoints with the specified addresses and check their types.”h]”hŒHSearch for endpoints with the specified addresses and check their types.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hj¯ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjph]”hŒReturn”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hj¯ubhë)�”}”(hŒO``true`` if all the endpoints are found and are interrupt, ``false`` otherwise.”h]”(jÑ)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj†ubhŒ3 if all the endpoints are found and are interrupt, ”…”�”}”(hj†h²hh³Nh´NubjÑ)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj†ubhŒ otherwise.”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_find_alt_setting (C function)”Œc.usb_core.usb_find_alt_setting”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒstruct usb_host_interface * usb_find_alt_setting (struct usb_host_config *config, unsigned int iface_num, unsigned int alt_num)”h]”j+)�”}”(hŒ}struct usb_host_interface *usb_find_alt_setting(struct usb_host_config *config, unsigned int iface_num, unsigned int alt_num)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÑh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÑh²hh³jâh´M ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_interface”h]”hŒusb_host_interface”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jöŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_find_alt_setting”sbŒc.usb_core.usb_find_alt_setting”†”esbuh1hhjÑh²hh³jâh´M ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÑh²hh³jâh´M ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÑh²hh³jâh´M ubj„)�”}”(hŒusb_find_alt_setting”h]”jŠ)�”}”(hjh]”hŒusb_find_alt_setting”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj1ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÑh²hh³jâh´M ubj¥)�”}”(hŒN(struct usb_host_config *config, unsigned int iface_num, unsigned int alt_num)”h]”(j«)�”}”(hŒstruct usb_host_config *config”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjLubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjLubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_config”h]”hŒusb_host_config”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jpŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jŒc.usb_core.usb_find_alt_setting”†”esbuh1hhjLubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjLubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjLubjŠ)�”}”(hŒconfig”h]”hŒconfig”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjHubj«)�”}”(hŒunsigned int iface_num”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj½ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj½ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj½ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj½ubjŠ)�”}”(hŒ iface_num”h]”hŒ iface_num”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjHubj«)�”}”(hŒunsigned int alt_num”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjŠ)�”}”(hŒalt_num”h]”hŒalt_num”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjHubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÑh²hh³jâh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÍh²hh³jâh´M ubah}”(h]”jÈah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jâh´M hjÊh²hubjü)�”}”(hhh]”hë)�”}”(hŒJGiven a configuration, find the alternate setting for the given interface.”h]”hŒJGiven a configuration, find the alternate setting for the given interface.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hjqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÊh²hh³jâh´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjŒjjŒj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXš**Parameters** ``struct usb_host_config *config`` the configuration to search (not necessarily the current config). ``unsigned int iface_num`` interface number to search in ``unsigned int alt_num`` alternate interface setting number to search for. **Description** Search the configuration's interface cache for the given alt setting. **Return** The alternate setting, if found. ``NULL`` otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj–h]”hŒ Parameters”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M$hj�ubjD)�”}”(hhh]”(jI)�”}”(hŒe``struct usb_host_config *config`` the configuration to search (not necessarily the current config). ”h]”(jO)�”}”(hŒ"``struct usb_host_config *config``”h]”jÑ)�”}”(hjµh]”hŒstruct usb_host_config *config”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M"hj¯ubji)�”}”(hhh]”hë)�”}”(hŒAthe configuration to search (not necessarily the current config).”h]”hŒAthe configuration to search (not necessarily the current config).”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÊh´M"hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÊh´M"hj¬ubjI)�”}”(hŒ9``unsigned int iface_num`` interface number to search in ”h]”(jO)�”}”(hŒ``unsigned int iface_num``”h]”jÑ)�”}”(hjîh]”hŒunsigned int iface_num”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M#hjèubji)�”}”(hhh]”hë)�”}”(hŒinterface number to search in”h]”hŒinterface number to search in”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´M#hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´M#hj¬ubjI)�”}”(hŒK``unsigned int alt_num`` alternate interface setting number to search for. ”h]”(jO)�”}”(hŒ``unsigned int alt_num``”h]”jÑ)�”}”(hj'h]”hŒunsigned int alt_num”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M$hj!ubji)�”}”(hhh]”hë)�”}”(hŒ1alternate interface setting number to search for.”h]”hŒ1alternate interface setting number to search for.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j<h´M$hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j<h´M$hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj�ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjbh]”hŒ Description”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M&hj�ubhë)�”}”(hŒESearch the configuration's interface cache for the given alt setting.”•h]”hŒGSearch the configuration’s interface cache for the given alt setting.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M%hj�ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj‰h]”hŒReturn”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M'hj�ubhë)�”}”(hŒ4The alternate setting, if found. ``NULL`` otherwise.”h]”(hŒ!The alternate setting, if found. ”…”�”}”(hjŸh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŸubhŒ otherwise.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M(hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ%usb_core.usb_ifnum_to_if (C function)”Œc.usb_core.usb_ifnum_to_if”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒUstruct usb_interface * usb_ifnum_to_if (const struct usb_device *dev, unsigned ifnum)”h]”j+)�”}”(hŒSstruct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, unsigned ifnum)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÜh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MIubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜh²hh³jíh´MIubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_ifnum_to_if”sbŒc.usb_core.usb_ifnum_to_if”†”esbuh1hhjÜh²hh³jíh´MIubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜh²hh³jíh´MIubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÜh²hh³jíh´MIubj„)�”}”(hŒusb_ifnum_to_if”h]”jŠ)�”}”(hjh]”hŒusb_ifnum_to_if”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj<ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÜh²hh³jíh´MIubj¥)�”}”(hŒ.(const struct usb_device *dev, unsigned ifnum)”h]”(j«)�”}”(hŒconst struct usb_device *dev”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjWubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWubj1)�”}”(hjh]”hŒstruct”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjWubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j–Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jŒc.usb_core.usb_ifnum_to_if”†”esbuh1hhjWubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjWubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjWubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjSubj«)�”}”(hŒunsigned ifnum”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjãubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjãubjŠ)�”}”(hŒifnum”h]”hŒifnum”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjSubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÜh²hh³jíh´MIubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjØh²hh³jíh´MIubah}”(h]”jÓah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jíh´MIhjÕh²hubjü)�”}”(hhh]”hë)�”}”(hŒ6get the interface object with a given interface number”h]”hŒ6get the interface object with a given interface number”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MIhj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÕh²hh³jíh´MIubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjEjjEj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX“**Parameters** ``const struct usb_device *dev`` the device whose current configuration is considered ``unsigned ifnum`` the desired interface **Description** This walks the device descriptor for the currently active configuration to find the interface object with the particular interface number. Note that configuration descriptors are not required to assign interface numbers sequentially, so that it would be incorrect to assume that the first interface in that descriptor corresponds to interface zero. This routine helps device drivers avoid such mistakes. However, you should make sure that you do the right thing with any alternate settings available for this interfaces. Don't call this function unless you are bound to one of the interfaces on this device or you have locked the device! **Return** A pointer to the interface that has **ifnum** as interface number, if found. ``NULL`` otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjOh]”hŒ Parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MMhjIubjD)�”}”(hhh]”(jI)�”}”(hŒV``const struct usb_device *dev`` the device whose current configuration is considered ”h]”(jO)�”}”(hŒ ``const struct usb_device *dev``”h]”jÑ)�”}”(hjnh]”hŒconst struct usb_device *dev”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MJhjhubji)�”}”(hhh]”hë)�”}”(hŒ4the device whose current configuration is considered”h]”hŒ4the device whose current configuration is considered”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jƒh´MJhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jƒh´MJhjeubjI)�”}”(hŒ)``unsigned ifnum`` the desired interface ”h]”(jO)�”}”(hŒ``unsigned ifnum``”h]”jÑ)�”}”(hj§h]”hŒunsigned ifnum”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MKhj¡ubji)�”}”(hhh]”hë)�”}”(hŒthe desired interface”h]”hŒthe desired interface”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¼h´MKhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¼h´MKhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjIubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjâh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MMhjIubhë)�”}”(hŒŠThis walks the device descriptor for the currently active configuration to find the interface object with the particular interface number.”h]”hŒŠThis walks the device descriptor for the currently active configuration to find the interface object with the particular interface number.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MLhjIubhë)�”}”(hX}Note that configuration descriptors are not required to assign interface numbers sequentially, so that it would be incorrect to assume that the first interface in that descriptor corresponds to interface zero. This routine helps device drivers avoid such mistakes. However, you should make sure that you do the right thing with any alternate settings available for this interfaces.”h]”hX}Note that configuration descriptors are not required to assign interface numbers sequentially, so that it would be incorrect to assume that the first interface in that descriptor corresponds to interface zero. This routine helps device drivers avoid such mistakes. However, you should make sure that you do the right thing with any alternate settings available for this interfaces.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MOhjIubhë)�”}”(hŒtDon't call this function unless you are bound to one of the interfaces on this device or you have locked the device!”h]”hŒvDon’t call this function unless you are bound to one of the interfaces on this device or you have locked the device!”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MVhjIubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj'h]”hŒReturn”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MYhjIubhë)�”}”(hŒ`A pointer to the interface that has **ifnum** as interface number, if found. ``NULL`` otherwise.”h]”(hŒ$A pointer to the interface that has ”…”�”}”(hj=h²hh³Nh´Nubj.)�”}”(hŒ **ifnum**”h]”hŒifnum”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj=ubhŒ as interface number, if found. ”…”�”}”(hj=h²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj=ubhŒ otherwise.”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MZhjIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ.usb_core.usb_altnum_to_altsetting (C function)”Œ#c.usb_core.usb_altnum_to_altsetting”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒlstruct usb_host_interface * usb_altnum_to_altsetting (const struct usb_interface *intf, unsigned int altnum)”h]”j+)�”}”(hŒjstruct usb_host_interface *usb_altnum_to_altsetting(const struct usb_interface *intf, unsigned int altnum)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjŒh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MoubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŒh²hh³j�h´Moubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_interface”h]”hŒusb_host_interface”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j±Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_altnum_to_altsetting”sbŒ#c.usb_core.usb_altnum_to_altsetting”†”esbuh1hhjŒh²hh³j�h´MoubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŒh²hh³j�h´Moubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjŒh²hh³j�h´Moubj„)�”}”(hŒusb_altnum_to_altsetting”h]”jŠ)�”}”(hjÎh]”hŒusb_altnum_to_altsetting”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjìubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŒh²hh³j�h´Moubj¥)�”}”(hŒ7(const struct usb_interface *intf, unsigned int altnum)”h]”(j«)�”}”(hŒ const struct usb_interface *intf”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jFŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÌŒ#c.usb_core.usb_altnum_to_altsetting”†”esbuh1hhjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjubj«)�”}”(hŒunsigned int altnum”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj“ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj“ubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj“ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj“ubjŠ)�”}”(hŒaltnum”h]”hŒaltnum”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŒh²hh³j�h´Moubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjˆh²hh³j�h´Moubah}”(h]”jƒah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�h´Mohj…h²hubjü)�”}”(hhh]”hë)�”}”(hŒCget the altsetting structure with a given alternate setting number.”h]”hŒCget the altsetting structure with a given alternate setting number.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mohjöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj…h²hh³j�h´Moubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjjjj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``const struct usb_interface *intf`` the interface containing the altsetting in question ``unsigned int altnum`` the desired alternate setting number **Description** This searches the altsetting array of the specified interface for an entry with the correct bAlternateSetting value. Note that altsettings need not be stored sequentially by number, so it would be incorrect to assume that the first altsetting entry in the array corresponds to altsetting zero. This routine helps device drivers avoid such mistakes. Don't call this function unless you are bound to the intf interface or you have locked the device! **Return** A pointer to the entry of the altsetting array of **intf** that has **altnum** as the alternate setting number. ``NULL`` if not found.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MshjubjD)�”}”(hhh]”(jI)�”}”(hŒY``const struct usb_interface *intf`` the interface containing the altsetting in question ”h]”(jO)�”}”(hŒ$``const struct usb_interface *intf``”h]”jÑ)�”}”(hj:h]”hŒ const struct usb_interface *intf”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mphj4ubji)�”}”(hhh]”hë)�”}”(hŒ3the interface containing the altsetting in question”h]”hŒ3the interface containing the altsetting in question”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jOh´MphjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jOh´Mphj1ubjI)�”}”(hŒ=``unsigned int altnum`` the desired alternate setting number ”h]”(jO)�”}”(hŒ``unsigned int altnum``”h]”jÑ)�”}”(hjsh]”hŒunsigned int altnum”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mqhjmubji)�”}”(hhh]”hë)�”}”(hŒ$the desired alternate setting number”h]”hŒ$the desired alternate setting number”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jˆh´Mqhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jˆh´Mqhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj®h]”hŒ Description”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mshjubhë)�”}”(hŒtThis searches the altsetting array of the specified interface for an entry with the correct bAlternateSetting value.”h]”hŒtThis searches the altsetting array of the specified interface for an entry with the correct bAlternateSetting value.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mrhjubhë)�”}”(hŒèNote that altsettings need not be stored sequentially by number, so it would be incorrect to assume that the first altsetting entry in the array corresponds to altsetting zero. This routine helps device drivers avoid such mistakes.”h]”hŒèNote that altsettings need not be stored sequentially by number, so it would be incorrect to assume that the first altsetting entry in the array corresponds to altsetting zero. This routine helps device drivers avoid such mistakes.”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Muhjubhë)�”}”(hŒbDon't call this function unless you are bound to the intf interface or you have locked the device!”h]”hŒdDon’t call this function unless you are bound to the intf interface or you have locked the device!”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mzhjubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjóh]”hŒReturn”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M}hjubhë)�”}”(hŒ†A pointer to the entry of the altsetting array of **intf** that has **altnum** as the alternate setting number. ``NULL`` if not found.”h]”(hŒ2A pointer to the entry of the altsetting array of ”…”�”}”(hj h²hh³Nh´Nubj.)�”}”(hŒ**intf**”h]”hŒintf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ubhŒ that has ”…”�”}”(hj h²hh³Nh´Nubj.)�”}”(hŒ **altnum**”h]”hŒaltnum”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ubhŒ" as the alternate setting number. ”…”�”}”(hj h²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ubhŒ if not found.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M~hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_find_interface (C function)”Œc.usb_core.usb_find_interface”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒMstruct usb_interface * usb_find_interface (struct usb_driver *drv, int minor)”h]”j+)�”}”(hŒKstruct usb_interface *usb_find_interface(struct usb_driver *drv, int minor)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjjh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M£ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjjh²hh³j{h´M£ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j�Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_find_interface”sbŒc.usb_core.usb_find_interface”†”esbuh1hhjjh²hh³j{h´M£ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjjh²hh³j{h´M£ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjjh²hh³j{h´M£ubj„)�”}”(hŒusb_find_interface”h]”jŠ)�”}”(hj¬h]”hŒusb_find_interface”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÊubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjjh²hh³j{h´M£ubj¥)�”}”(hŒ#(struct usb_driver *drv, int minor)”h]”(j«)�”}”(hŒstruct usb_driver *drv”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjåubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjåubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_driver”h]”hŒ usb_driver”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jªŒc.usb_core.usb_find_interface”†”esbuh1hhjåubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjåubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjåubjŠ)�”}”(hŒdrv”h]”hŒdrv”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjáubj«)�”}”(hŒ int minor”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjV ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjV ubjŠ)�”}”(hŒminor”h]”hŒminor”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjV ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjáubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjjh²hh³j{h´M£ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjfh²hh³j{h´M£ubah}”(h]”jaah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j{h´M£hjch²hubjü)�”}”(hhh]”hë)�”}”(hŒ0find usb_interface pointer for driver and device”h]”hŒ0find usb_interface pointer for driver and device”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M£hj� h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjch²hh³j{h´M£ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¸ jj¸ j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX¨**Parameters** ``struct usb_driver *drv`` the driver whose current configuration is considered ``int minor`` the minor number of the desired device **Description** This walks the bus device list and returns a pointer to the interface with the matching minor and driver. Note, this only works for devices that share the USB major number. **Return** A pointer to the interface with the matching major and **minor**.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj h]”hŒ Parameters”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M§hj¼ ubjD)�”}”(hhh]”(jI)�”}”(hŒP``struct usb_driver *drv`` the driver whose current configuration is considered ”h]”(jO)�”}”(hŒ``struct usb_driver *drv``”h]”jÑ)�”}”(hjá h]”hŒstruct usb_driver *drv”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¤hjÛ ubji)�”}”(hhh]”hë)�”}”(hŒ4the driver whose current configuration is considered”h]”hŒ4the driver whose current configuration is considered”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jö h´M¤hj÷ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jö h´M¤hjØ ubjI)�”}”(hŒ5``int minor`` the minor number of the desired device ”h]”(jO)�”}”(hŒ ``int minor``”h]”jÑ)�”}”(hj!h]”hŒ int minor”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¥hj!ubji)�”}”(hhh]”hë)�”}”(hŒ&the minor number of the desired device”h]”hŒ&the minor number of the desired device”…”�”}”(hj3!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j/!h´M¥hj0!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j/!h´M¥hjØ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¼ ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjU!h]”hŒ Description”…”�”}”(hjW!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjS!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M§hj¼ ubhë)�”}”(hŒ­This walks the bus device list and returns a pointer to the interface with the matching minor and driver. Note, this only works for devices that share the USB major number.”h]”hŒ­This walks the bus device list and returns a pointer to the interface with the matching minor and driver. Note, this only works for devices that share the USB major number.”…”�”}”(hjk!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¦hj¼ ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj|!h]”hŒReturn”…”�”}”(hj~!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjz!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mªhj¼ ubhë)�”}”(hŒAA pointer to the interface with the matching major and **minor**.”h]”(hŒ7A pointer to the interface with the matching major and ”…”�”}”(hj’!h²hh³Nh´Nubj.)�”}”(hŒ **minor**”h]”hŒminor”…”�”}”(hjš!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj’!ubhŒ.”…”�”}”(hj’!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M«hj¼ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_core.usb_for_each_dev (C function)”Œc.usb_core.usb_for_each_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒIint usb_for_each_dev (void *data, int (*fn)(struct usb_device *, void *))”h]”j+)�”}”(hŒFint usb_for_each_dev(void *data, int (*fn)(struct usb_device*, void*))”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÓ!h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÏ!h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÏubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ!h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÏ!h²hh³já!h´MÏubj„)�”}”(hŒusb_for_each_dev”h]”jŠ)�”}”(hŒusb_for_each_dev”h]”hŒusb_for_each_dev”…”�”}”(hjô!h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjð!ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÏ!h²hh³já!h´MÏubj¥)�”}”(hŒ2(void *data, int (*fn)(struct usb_device*, void*))”h]”(j«)�”}”(hŒ void *data”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj "ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj "ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj,"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj "ubjŠ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj9"h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj "ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"ubj«)�”}”(hŒ$int (*fn)(struct usb_device*, void*)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjR"h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjN"ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`"h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjN"ubjs)�”}”(hj5…h]”hŒ(”…”�”}”(hjn"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj{"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjŠ)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjˆ"h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjN"ubjs)�”}”(hj7…h]”hŒ)”…”�”}”(hj–"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjs)�”}”(hj5…h]”hŒ(”…”�”}”(hj£"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj°"h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjN"ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½"h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjN"ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjÎ"h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjË"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÐ"Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjö!sbŒc.usb_core.usb_for_each_dev”†”esbuh1hhjN"ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjs)�”}”(hŒ,”h]”hŒ,”…”�”}”(hjü"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjN"ubjT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjN"ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj&#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubjs)�”}”(hj7…h]”hŒ)”…”�”}”(hj3#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjN"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÏ!h²hh³já!h´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjË!h²hh³já!h´MÏubah}”(h]”jÆ!ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³já!h´MÏhjÈ!h²hubjü)�”}”(hhh]”hë)�”}”(hŒ*iterate over all USB devices in the system”h]”hŒ*iterate over all USB devices in the system”…”�”}”(hj\#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÏhjY#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÈ!h²hh³já!h´MÏubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjt#jjt#j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXx**Parameters** ``void *data`` data pointer that will be handed to the callback function ``int (*fn)(struct usb_device *, void *)`` callback function to be called for each USB device **Description** Iterate over all USB devices and call **fn** for each, passing it **data**. If it returns anything other than 0, we break the iteration prematurely and return that value.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj~#h]”hŒ Parameters”…”�”}”(hj€#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj|#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÓhjx#ubjD)�”}”(hhh]”(jI)�”}”(hŒI``void *data`` data pointer that will be handed to the callback function ”h]”(jO)�”}”(hŒ``void *data``”h]”jÑ)�”}”(hj�#h]”hŒ void *data”…”�”}”(hjŸ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj›#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÐhj—#ubji)�”}”(hhh]”hë)�”}”(hŒ9data pointer that will be handed to the callback function”h]”hŒ9data pointer that will be handed to the callback function”…”�”}”(hj¶#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j²#h´MÐhj³#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj—#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j²#h´MÐhj”#ubjI)�”}”(hŒ^``int (*fn)(struct usb_device *, void *)`` callback function to be called for each USB device ”h]”(jO)�”}”(hŒ*``int (*fn)(struct usb_device *, void *)``”h]”jÑ)�”}”(hjÖ#h]”hŒ&int (*fn)(struct usb_device *, void *)”…”�”}”(hjØ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÔ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÑhjÐ#ubji)�”}”(hhh]”hë)�”}”(hŒ2callback function to be called for each USB device”h]”hŒ2callback function to be called for each USB device”…”�”}”(hjï#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jë#h´MÑhjì#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÐ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jë#h´MÑhj”#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjx#ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj$h]”hŒ Description”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÓhjx#ubhë)�”}”(hŒªIterate over all USB devices and call **fn** for each, passing it **data**. If it returns anything other than 0, we break the iteration prematurely and return that value.”h]”(hŒ&Iterate over all USB devices and call ”…”�”}”(hj'$h²hh³Nh´Nubj.)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj/$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj'$ubhŒ for each, passing it ”…”�”}”(hj'$h²hh³Nh´Nubj.)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hjA$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj'$ubhŒ`. If it returns anything other than 0, we break the iteration prematurely and return that value.”…”�”}”(hj'$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÒhjx#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ#usb_core.usb_alloc_dev (C function)”Œc.usb_core.usb_alloc_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒbstruct usb_device * usb_alloc_dev (struct usb_device *parent, struct usb_bus *bus, unsigned port1)”h]”j+)�”}”(hŒ`struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus, unsigned port1)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjz$h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjv$h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MuubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ$h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjv$h²hh³j‡$h´Muubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj™$h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj–$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j›$Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ usb_alloc_dev”sbŒc.usb_core.usb_alloc_dev”†”esbuh1hhjv$h²hh³j‡$h´MuubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»$h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjv$h²hh³j‡$h´Muubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÉ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjv$h²hh³j‡$h´Muubj„)�”}”(hŒ usb_alloc_dev”h]”jŠ)�”}”(hj¸$h]”hŒ usb_alloc_dev”…”�”}”(hjÚ$h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÖ$ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjv$h²hh³j‡$h´Muubj¥)�”}”(hŒ@(struct usb_device *parent, struct usb_bus *bus, unsigned port1)”h]”(j«)�”}”(hŒstruct usb_device *parent”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjõ$h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjñ$ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñ$ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j%Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¶$Œc.usb_core.usb_alloc_dev”†”esbuh1hhjñ$ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjñ$ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj@%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjñ$ubjŠ)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjM%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjñ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjí$ubj«)�”}”(hŒstruct usb_bus *bus”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjf%h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjb%ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjb%ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_bus”h]”hŒusb_bus”…”�”}”(hj„%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j†%Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¶$Œc.usb_core.usb_alloc_dev”†”esbuh1hhjb%ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjb%ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj±%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjb%ubjŠ)�”}”(hŒbus”h]”hŒbus”…”�”}”(hj¾%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjb%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjí$ubj«)�”}”(hŒunsigned port1”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÓ%ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå%h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÓ%ubjŠ)�”}”(hŒport1”h]”hŒport1”…”�”}”(hjó%h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÓ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjí$ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjv$h²hh³j‡$h´Muubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjr$h²hh³j‡$h´Muubah}”(h]”jm$ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‡$h´Muhjo$h²hubjü)�”}”(hhh]”hë)�”}”(hŒ)usb device constructor (usbcore-internal)”h]”hŒ)usb device constructor (usbcore-internal)”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Muhj&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjo$h²hh³j‡$h´Muubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj5&jj5&j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *parent`` hub to which device is connected; null to allocate a root hub ``struct usb_bus *bus`` bus used to access the device ``unsigned port1`` one-based index of port; ignored for root hubs **Context** task context, might sleep. **Description** Only hub drivers (including virtual root hub drivers for host controllers) should ever call this. This call may not be used in a non-sleeping context. **Return** On success, a pointer to the allocated usb device. ``NULL`` on failure.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj?&h]”hŒ Parameters”…”�”}”(hjA&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj=&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Myhj9&ubjD)�”}”(hhh]”(jI)�”}”(hŒ\``struct usb_device *parent`` hub to which device is connected; null to allocate a root hub ”h]”(jO)�”}”(hŒ``struct usb_device *parent``”h]”jÑ)�”}”(hj^&h]”hŒstruct usb_device *parent”…”�”}”(hj`&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj\&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MvhjX&ubji)�”}”(hhh]”hë)�”}”(hŒ=hub to which device is connected; null to allocate a root hub”h]”hŒ=hub to which device is connected; null to allocate a root hub”…”�”}”(hjw&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³js&h´Mvhjt&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjX&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³js&h´MvhjU&ubjI)�”}”(hŒ6``struct usb_bus *bus`` bus used to access the device ”h]”(jO)�”}”(hŒ``struct usb_bus *bus``”h]”jÑ)�”}”(hj—&h]”hŒstruct usb_bus *bus”…”�”}”(hj™&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj•&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mwhj‘&ubji)�”}”(hhh]”hë)�”}”(hŒbus used to access the device”h]”hŒbus used to access the device”…”�”}”(hj°&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¬&h´Mwhj­&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‘&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¬&h´MwhjU&ubjI)�”}”(hŒB``unsigned port1`` one-based index of port; ignored for root hubs ”h]”(jO)�”}”(hŒ``unsigned port1``”h]”jÑ)�”}”(hjÐ&h]”hŒunsigned port1”…”�”}”(hjÒ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÎ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MxhjÊ&ubji)�”}”(hhh]”hë)�”}”(hŒ.one-based index of port; ignored for root hubs”h]”hŒ.one-based index of port; ignored for root hubs”…”�”}”(hjé&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jå&h´Mxhjæ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÊ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jå&h´MxhjU&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj9&ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj 'h]”hŒContext”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj 'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mzhj9&ubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj!'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mzhj9&ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj2'h]”hŒ Description”…”�”}”(hj4'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj0'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M|hj9&ubhë)�”}”(hŒaOnly hub drivers (including virtual root hub drivers for host controllers) should ever call this.”h]”hŒaOnly hub drivers (including virtual root hub drivers for host controllers) should ever call this.”…”�”}”(hjH'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M{hj9&ubhë)�”}”(hŒ4This call may not be used in a non-sleeping context.”h]”hŒ4This call may not be used in a non-sleeping context.”…”�”}”(hjW'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M~hj9&ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjh'h]”hŒReturn”…”�”}”(hjj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjf'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M€hj9&ubhë)�”}”(hŒGOn success, a pointer to the allocated usb device. ``NULL`` on failure.”h]”(hŒ3On success, a pointer to the allocated usb device. ”…”�”}”(hj~'h²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj†'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj~'ubhŒ on failure.”…”�”}”(hj~'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M�hj9&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_get_dev (C function)”Œc.usb_core.usb_get_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ8struct usb_device * usb_get_dev (struct usb_device *dev)”h]”j+)�”}”(hŒ6struct usb_device *usb_get_dev(struct usb_device *dev)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¿'h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj»'h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MõubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ'h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj»'h²hh³jÌ'h´Mõubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjÞ'h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÛ'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jà'Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ usb_get_dev”sbŒc.usb_core.usb_get_dev”†”esbuh1hhj»'h²hh³jÌ'h´MõubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj»'h²hh³jÌ'h´Mõubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj»'h²hh³jÌ'h´Mõubj„)�”}”(hŒ usb_get_dev”h]”jŠ)�”}”(hjý'h]”hŒ usb_get_dev”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj(ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj»'h²hh³jÌ'h´Mõubj¥)�”}”(hŒ(struct usb_device *dev)”h]”j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj:(h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj6(ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG(h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj6(ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjX(h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjU(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jZ(Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jû'Œc.usb_core.usb_get_dev”†”esbuh1hhj6(ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw(h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj6(ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj…(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj6(ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj’(h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj6(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj2(ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj»'h²hh³jÌ'h´Mõubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj·'h²hh³jÌ'h´Mõubah}”(h]”j²'ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÌ'h´Mõhj´'h²hubjü)�”}”(hhh]”hë)�”}”(hŒ:increments the reference count of the usb device structure”h]”hŒ:increments the reference count of the usb device structure”…”�”}”(hj¼(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mõhj¹(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj´'h²hh³jÌ'h´Mõubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÔ(jjÔ(j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX±**Parameters** ``struct usb_device *dev`` the device being referenced **Description** Each live reference to a device should be refcounted. Drivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_dev(), in their disconnect() methods. However, if a driver does not access the usb_device structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_device will not be deallocated until after all of its interface drivers have been unbound. **Return** A pointer to the device with the incremented reference counter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÞ(h]”hŒ Parameters”…”�”}”(hjà(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÜ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MùhjØ(ubjD)�”}”(hhh]”jI)�”}”(hŒ7``struct usb_device *dev`` the device being referenced ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjý(h]”hŒstruct usb_device *dev”…”�”}”(hjÿ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjû(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Möhj÷(ubji)�”}”(hhh]”hë)�”}”(hŒthe device being referenced”h]”hŒthe device being referenced”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j)h´Möhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj÷(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j)h´Möhjô(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjØ(ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj8)h]”hŒ Description”…”�”}”(hj:)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj6)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MøhjØ(ubhë)�”}”(hŒ5Each live reference to a device should be refcounted.”h]”hŒ5Each live reference to a device should be refcounted.”…”�”}”(hjN)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M÷hjØ(ubhë)�”}”(hXÒDrivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_dev(), in their disconnect() methods. However, if a driver does not access the usb_device structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_device will not be deallocated until after all of its interface drivers have been unbound.”h]”hXÒDrivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_dev(), in their disconnect() methods. However, if a driver does not access the usb_device structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_device will not be deallocated until after all of its interface drivers have been unbound.”…”�”}”(hj])h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MùhjØ(ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjn)h]”hŒReturn”…”�”}”(hjp)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjl)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjØ(ubhë)�”}”(hŒ?A pointer to the device with the incremented reference counter.”h]”hŒ?A pointer to the device with the incremented reference counter.”…”�”}”(hj„)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjØ(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_put_dev (C function)”Œc.usb_core.usb_put_dev”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ)void usb_put_dev (struct usb_device *dev)”h]”j+)�”}”(hŒ(void usb_put_dev(struct usb_device *dev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³)h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¯)h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ)h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¯)h²hh³jÁ)h´M ubj„)�”}”(hŒ usb_put_dev”h]”jŠ)�”}”(hŒ usb_put_dev”h]”hŒ usb_put_dev”…”�”}”(hjÔ)h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÐ)ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj¯)h²hh³jÁ)h´M ubj¥)�”}”(hŒ(struct usb_device *dev)”h]”j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjð)h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjì)ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý)h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjì)ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj *ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j*Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÖ)sbŒc.usb_core.usb_put_dev”†”esbuh1hhjì)ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/*h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjì)ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj=*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjì)ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjJ*h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjì)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjè)ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj¯)h²hh³jÁ)h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj«)h²hh³jÁ)h´M ubah}”(h]”j¦)ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÁ)h´M hj¨)h²hubjü)�”}”(hhh]”hë)�”}”(hŒ)release a use of the usb device structure”h]”hŒ)release a use of the usb device structure”…”�”}”(hjt*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M hjq*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¨)h²hh³jÁ)h´M ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjŒ*jjŒ*j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒô**Parameters** ``struct usb_device *dev`` device that's been disconnected **Description** Must be called when a user of a device is finished with it. When the last user of the device calls this function, the memory of the device is freed.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj–*h]”hŒ Parameters”…”�”}”(hj˜*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj”*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj�*ubjD)�”}”(hhh]”jI)�”}”(hŒ;``struct usb_device *dev`` device that's been disconnected ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjµ*h]”hŒstruct usb_device *dev”…”�”}”(hj·*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj³*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj¯*ubji)�”}”(hhh]”hë)�”}”(hŒdevice that's been disconnected”h]”hŒ!device that’s been disconnected”…”�”}”(hjÎ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÊ*h´MhjË*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¯*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÊ*h´Mhj¬*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj�*ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjð*h]”hŒ Description”…”�”}”(hjò*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjî*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj�*ubhë)�”}”(hŒ•Must be called when a user of a device is finished with it. When the last user of the device calls this function, the memory of the device is freed.”h]”hŒ•Must be called when a user of a device is finished with it. When the last user of the device calls this function, the memory of the device is freed.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj�*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_core.usb_get_intf (C function)”Œc.usb_core.usb_get_intf”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ@struct usb_interface * usb_get_intf (struct usb_interface *intf)”h]”j+)�”}”(hŒ>struct usb_interface *usb_get_intf(struct usb_interface *intf)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj5+h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj1+h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC+h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj1+h²hh³jB+h´Mubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjT+h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjQ+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jV+Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ usb_get_intf”sbŒc.usb_core.usb_get_intf”†”esbuh1hhj1+h²hh³jB+h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv+h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj1+h²hh³jB+h´Mubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj„+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj1+h²hh³jB+h´Mubj„)�”}”(hŒ usb_get_intf”h]”jŠ)�”}”(hjs+h]”hŒ usb_get_intf”…”�”}”(hj•+h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‘+ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj1+h²hh³jB+h´Mubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj°+h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¬+ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½+h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¬+ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjÎ+h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjË+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÐ+Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jq+Œc.usb_core.usb_get_intf”†”esbuh1hhj¬+ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí+h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¬+ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjû+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¬+ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¬+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¨+ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj1+h²hh³jB+h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj-+h²hh³jB+h´Mubah}”(h]”j(+ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jB+h´Mhj*+h²hubjü)�”}”(hhh]”hë)�”}”(hŒ=increments the reference count of the usb interface structure”h]”hŒ=increments the reference count of the usb interface structure”…”�”}”(hj2,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj/,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj*+h²hh³jB+h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjJ,jjJ,j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX°**Parameters** ``struct usb_interface *intf`` the interface being referenced **Description** Each live reference to a interface must be refcounted. Drivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_intf(), in their disconnect() methods. However, if a driver does not access the usb_interface structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_interface will not be deallocated until after its driver has been unbound. **Return** A pointer to the interface with the incremented reference counter.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjT,h]”hŒ Parameters”…”�”}”(hjV,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjR,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjN,ubjD)�”}”(hhh]”jI)�”}”(hŒ>``struct usb_interface *intf`` the interface being referenced ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjs,h]”hŒstruct usb_interface *intf”…”�”}”(hju,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjq,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhjm,ubji)�”}”(hhh]”hë)�”}”(hŒthe interface being referenced”h]”hŒthe interface being referenced”…”�”}”(hjŒ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jˆ,h´Mhj‰,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjm,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jˆ,h´Mhjj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjN,ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj®,h]”hŒ Description”…”�”}”(hj°,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¬,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjN,ubhë)�”}”(hŒ6Each live reference to a interface must be refcounted.”h]”hŒ6Each live reference to a interface must be refcounted.”…”�”}”(hjÄ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjN,ubhë)�”}”(hXÆDrivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_intf(), in their disconnect() methods. However, if a driver does not access the usb_interface structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_interface will not be deallocated until after its driver has been unbound.”h]”hXÆDrivers for USB interfaces should normally record such references in their probe() methods, when they bind to an interface, and release them by calling usb_put_intf(), in their disconnect() methods. However, if a driver does not access the usb_interface structure after its disconnect() method returns then refcounting is not necessary, because the USB core guarantees that a usb_interface will not be deallocated until after its driver has been unbound.”…”�”}”(hjÓ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjN,ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjä,h]”hŒReturn”…”�”}”(hjæ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjâ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M'hjN,ubhë)�”}”(hŒBA pointer to the interface with the incremented reference counter.”h]”hŒBA pointer to the interface with the incremented reference counter.”…”�”}”(hjú,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M(hjN,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ"usb_core.usb_put_intf (C function)”Œc.usb_core.usb_put_intf”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ.void usb_put_intf (struct usb_interface *intf)”h]”j+)�”}”(hŒ-void usb_put_intf(struct usb_interface *intf)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj)-h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj%-h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M3ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8-h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj%-h²hh³j7-•/h´M3ubj„)�”}”(hŒ usb_put_intf”h]”jŠ)�”}”(hŒ usb_put_intf”h]”hŒ usb_put_intf”…”�”}”(hjJ-h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjF-ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj%-h²hh³j7-h´M3ubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjf-h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjb-ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs-h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjb-ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj„-h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j†-Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjL-sbŒc.usb_core.usb_put_intf”†”esbuh1hhjb-ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥-h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjb-ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj³-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjb-ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hjÀ-h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjb-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj^-ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj%-h²hh³j7-h´M3ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj!-h²hh³j7-h´M3ubah}”(h]”j-ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j7-h´M3hj-h²hubjü)�”}”(hhh]”hë)�”}”(hŒ,release a use of the usb interface structure”h]”hŒ,release a use of the usb interface structure”…”�”}”(hjê-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M3hjç-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj-h²hh³j7-h´M3ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj.jj.j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_interface *intf`` interface that's been decremented **Description** Must be called when a user of an interface is finished with it. When the last user of the interface calls this function, the memory of the interface is freed.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj .h]”hŒ Parameters”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M7hj.ubjD)�”}”(hhh]”jI)�”}”(hŒA``struct usb_interface *intf`` interface that's been decremented ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hj+.h]”hŒstruct usb_interface *intf”…”�”}”(hj-.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj).ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M4hj%.ubji)�”}”(hhh]”hë)�”}”(hŒ!interface that's been decremented”h]”hŒ#interface that’s been decremented”…”�”}”(hjD.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j@.h´M4hjA.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj%.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j@.h´M4hj".ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj.ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjf.h]”hŒ Description”…”�”}”(hjh.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjd.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M6hj.ubhë)�”}”(hŒŸMust be called when a user of an interface is finished with it. When the last user of the interface calls this function, the memory of the interface is freed.”h]”hŒŸMust be called when a user of an interface is finished with it. When the last user of the interface calls this function, the memory of the interface is freed.”…”�”}”(hj|.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M5hj.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_intf_get_dma_device (C function)”Œ"c.usb_core.usb_intf_get_dma_device”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒDstruct device * usb_intf_get_dma_device (struct usb_interface *intf)”h]”j+)�”}”(hŒBstruct device *usb_intf_get_dma_device(struct usb_interface *intf)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj«.h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj§.h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MBubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹.h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj§.h²hh³j¸.h´MBubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÊ.h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÇ.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÌ.Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_intf_get_dma_device”sbŒ"c.usb_core.usb_intf_get_dma_device”†”esbuh1hhj§.h²hh³j¸.h´MBubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì.h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj§.h²hh³j¸.h´MBubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjú.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj§.h²hh³j¸.h´MBubj„)�”}”(hŒusb_intf_get_dma_device”h]”jŠ)�”}”(hjé.h]”hŒusb_intf_get_dma_device”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj/ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj§.h²hh³j¸.h´MBubj¥)�”}”(hŒ(struct usb_interface *intf)”h]”j«)�”}”(hŒstruct usb_interface *intf”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj&/h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj"/ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3/h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj"/ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjD/h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjA/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jF/Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jç.Œ"c.usb_core.usb_intf_get_dma_device”†”esbuh1hhj"/ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc/h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj"/ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjq/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj"/ubjŠ)�”}”(hŒintf”h]”hŒintf”…”�”}”(hj~/h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj/ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj§.h²hh³j¸.h´MBubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj£.h²hh³j¸.h´MBubah}”(h]”jž.ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¸.h´MBhj .h²hubjü)�”}”(hhh]”hë)�”}”(hŒ7acquire a reference on the usb interface's DMA endpoint”h]”hŒ9acquire a reference on the usb interface’s DMA endpoint”…”�”}”(hj¨/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MBhj¥/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj .h²hh³j¸.h´MBubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÀ/jjÀ/j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXÄ**Parameters** ``struct usb_interface *intf`` the usb interface **Description** While a USB device cannot perform DMA operations by itself, many USB controllers can. A call to usb_intf_get_dma_device() returns the DMA endpoint for the given USB interface, if any. The returned device structure must be released with put_device(). See also usb_get_dma_device(). **Return** A reference to the usb interface's DMA endpoint; or NULL if none exists.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÊ/h]”hŒ Parameters”…”�”}”(hjÌ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÈ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MFhjÄ/ubjD)�”}”(hhh]”jI)�”}”(hŒ1``struct usb_interface *intf`` the usb interface ”h]”(jO)�”}”(hŒ``struct usb_interface *intf``”h]”jÑ)�”}”(hjé/h]”hŒstruct usb_interface *intf”…”�”}”(hjë/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjç/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MChjã/ubji)�”}”(hhh]”hë)�”}”(hŒthe usb interface”h]”hŒthe usb interface”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jþ/h´MChjÿ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjã/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jþ/h´MChjà/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÄ/ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj$0h]”hŒ Description”…”�”}”(hj&0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj"0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MEhjÄ/ubhë)�”}”(hŒùWhile a USB device cannot perform DMA operations by itself, many USB controllers can. A call to usb_intf_get_dma_device() returns the DMA endpoint for the given USB interface, if any. The returned device structure must be released with put_device().”h]”hŒùWhile a USB device cannot perform DMA operations by itself, many USB controllers can. A call to usb_intf_get_dma_device() returns the DMA endpoint for the given USB interface, if any. The returned device structure must be released with put_device().”…”�”}”(hj:0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MDhjÄ/ubhë)�”}”(hŒSee also usb_get_dma_device().”h]”hŒSee also usb_get_dma_device().”…”�”}”(hjI0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MIhjÄ/ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjZ0h]”hŒReturn”…”�”}”(hj\0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjX0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MKhjÄ/ubhë)�”}”(hŒHA reference to the usb interface's DMA endpoint; or NULL if none exists.”h]”hŒJA reference to the usb interface’s DMA endpoint; or NULL if none exists.”…”�”}”(hjp0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MLhjÄ/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ/usb_core.usb_lock_device_for_reset (C function)”Œ$c.usb_core.usb_lock_device_for_reset”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒZint usb_lock_device_for_reset (struct usb_device *udev, const struct usb_interface *iface)”h]”j+)�”}”(hŒYint usb_lock_device_for_reset(struct usb_device *udev, const struct usb_interface *iface)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjŸ0h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj›0h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MrubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®0h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj›0h²hh³j­0h´Mrubj„)�”}”(hŒusb_lock_device_for_reset”h]”jŠ)�”}”(hŒusb_lock_device_for_reset”h]”hŒusb_lock_device_for_reset”…”�”}”(hjÀ0h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼0ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj›0h²hh³j­0h´Mrubj¥)�”}”(hŒ<(struct usb_device *udev, const struct usb_interface *iface)”h]”(j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÜ0h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjØ0ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé0h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjØ0ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjú0h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj÷0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jü0Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÂ0sbŒ$c.usb_core.usb_lock_device_for_reset”†”esbuh1hhjØ0ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjØ0ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj)1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjØ0ubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj61h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjØ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÔ0ubj«)�”}”(hŒ!const struct usb_interface *iface”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjO1h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjK1ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\1h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjK1ubj1)�”}”(hjh]”hŒstruct”…”�”}”(hjj1h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjK1ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw1h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjK1ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjˆ1h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj…1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jŠ1Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j1Œ$c.usb_core.usb_lock_device_for_reset”†”esbuh1hhjK1ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§1h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjK1ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjµ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjK1ubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hjÂ1h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjK1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÔ0ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj›0h²hh³j­0h´Mrubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj—0h²hh³j­0h´Mrubah}”(h]”j’0ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j­0h´Mrhj”0h²hubjü)�”}”(hhh]”hë)�”}”(hŒ6cautiously acquire the lock for a usb device structure”h]”hŒ6cautiously acquire the lock for a usb device structure”…”�”}”(hjì1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mrhjé1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj”0h²hh³j­0h´Mrubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj2jj2j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX•**Parameters** ``struct usb_device *udev`` device that's being locked ``const struct usb_interface *iface`` interface bound to the driver making the request (optional) **Description** Attempts to acquire the device lock, but fails if the device is NOTATTACHED or SUSPENDED, or if iface is specified and the interface is neither BINDING nor BOUND. Rather than sleeping to wait for the lock, the routine polls repeatedly. This is to prevent deadlock with disconnect; in some drivers (such as usb-storage) the disconnect() or suspend() method will block waiting for a device reset to complete. **Return** A negative error code for failure, otherwise 0.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj2h]”hŒ Parameters”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mvhj2ubjD)�”}”(hhh]”(jI)�”}”(hŒ7``struct usb_device *udev`` device that's being locked ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hj-2h]”hŒstruct usb_device *udev”…”�”}”(hj/2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj+2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mshj'2ubji)�”}”(hhh]”hë)�”}”(hŒdevice that's being locked”h]”hŒdevice that’s being locked”…”�”}”(hjF2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jB2h´MshjC2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj'2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jB2h´Mshj$2ubjI)�”}”(hŒb``const struct usb_interface *iface`` interface bound to the driver making the request (optional) ”h]”(jO)�”}”(hŒ%``const struct usb_interface *iface``”h]”jÑ)�”}”(hjf2h]”hŒ!const struct usb_interface *iface”…”�”}”(hjh2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjd2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mthj`2ubji)�”}”(hhh]”hë)�”}”(hŒ;interface bound to the driver making the request (optional)”h]”hŒ;interface bound to the driver making the request (optional)”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j{2h´Mthj|2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj`2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j{2h´Mthj$2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj2ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj¡2h]”hŒ Description”…”�”}”(hj£2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjŸ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mvhj2ubhë)�”}”(hX˜Attempts to acquire the device lock, but fails if the device is NOTATTACHED or SUSPENDED, or if iface is specified and the interface is neither BINDING nor BOUND. Rather than sleeping to wait for the lock, the routine polls repeatedly. This is to prevent deadlock with disconnect; in some drivers (such as usb-storage) the disconnect() or suspend() method will block waiting for a device reset to complete.”h]”hX˜Attempts to acquire the device lock, but fails if the device is NOTATTACHED or SUSPENDED, or if iface is specified and the interface is neither BINDING nor BOUND. Rather than sleeping to wait for the lock, the routine polls repeatedly. This is to prevent deadlock with disconnect; in some drivers (such as usb-storage) the disconnect() or suspend() method will block waiting for a device reset to complete.”…”�”}”(hj·2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Muhj2ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjÈ2h]”hŒReturn”…”�”}”(hjÊ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÆ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M|hj2ubhë)�”}”(hŒ/A negative error code for failure, otherwise 0.”h]”hŒ/A negative error code for failure, otherwise 0.”…”�”}”(hjÞ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M}hj2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ2usb_core.usb_get_current_frame_number (C function)”Œ'c.usb_core.usb_get_current_frame_number”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ9int usb_get_current_frame_number (struct usb_device *dev)”h]”j+)�”}”(hŒ8int usb_get_current_frame_number(struct usb_device *dev)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj 3h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¡ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj 3h²hh³j3h´M¡ubj„)�”}”(hŒusb_get_current_frame_number”h]”jŠ)�”}”(hŒusb_get_current_frame_number”h]”hŒusb_get_current_frame_number”…”�”}”(hj.3h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj*3ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj 3h²hh³j3h´M¡ubj¥)�”}”(hŒ(struct usb_device *dev)”h]”j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjJ3h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjF3ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW3h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjF3ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjh3h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hje3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jj3Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj03sbŒ'c.usb_core.usb_get_current_frame_number”†”esbuh1hhjF3ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰3h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjF3ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj—3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjF3ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¤3h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjF3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjB3ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj 3h²hh³j3h´M¡ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj3h²hh³j3h´M¡ubah}”(h]”j3ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j3h´M¡hj3h²hubjü)�”}”(hhh]”hë)�”}”(hŒreturn current bus frame number”h]”hŒreturn current bus frame number”…”�”}”(hjÎ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¡hjË3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj3h²hh³j3h´M¡ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjæ3jjæ3j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXÊ**Parameters** ``struct usb_device *dev`` the device whose bus is being queried **Return** The current frame number for the USB host controller used with the given USB device. This can be used when scheduling isochronous requests. **Note** Different kinds of host controller have different "scheduling horizons". While one type might support scheduling only 32 frames into the future, others could support scheduling up to 1024 frames into the future.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjð3h]”hŒ Parameters”…”�”}”(hjò3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjî3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¥hjê3ubjD)�”}”(hhh]”jI)�”}”(hŒA``struct usb_device *dev`` the device whose bus is being queried ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj4h]”hŒstruct usb_device *dev”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj 4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¢hj 4ubji)�”}”(hhh]”hë)�”}”(hŒ%the device whose bus is being queried”h]”hŒ%the device whose bus is being queried”…”�”}”(hj(4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j$4h´M¢hj%4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj 4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j$4h´M¢hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjê3ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjJ4h]”hŒReturn”…”�”}”(hjL4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjH4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¤hjê3ubhë)�”}”(hŒ‹The current frame number for the USB host controller used with the given USB device. This can be used when scheduling isochronous requests.”h]”hŒ‹The current frame number for the USB host controller used with the given USB device. This can be used when scheduling isochronous requests.”…”�”}”(hj`4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¤hjê3ubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hjq4h]”hŒNote”…”�”}”(hjs4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjo4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¨hjê3ubhë)�”}”(hŒÓDifferent kinds of host controller have different "scheduling horizons". While one type might support scheduling only 32 frames into the future, others could support scheduling up to 1024 frames into the future.”h]”hŒ×Different kinds of host controller have different “scheduling horizonsâ€�. While one type might support scheduling only 32 frames into the future, others could support scheduling up to 1024 frames into the future.”…”�”}”(hj‡4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M¨hjê3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_alloc_coherent (C function)”Œc.usb_core.usb_alloc_coherent”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒavoid * usb_alloc_coherent (struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma)”h]”j+)�”}”(hŒ_void *usb_alloc_coherent(struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶4h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj²4h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MØubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ4h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj²4h²hh³jÄ4h´MØubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÓ4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj²4h²hh³jÄ4h´MØubj„)�”}”(hŒusb_alloc_coherent”h]”jŠ)�”}”(hŒusb_alloc_coherent”h]”hŒusb_alloc_coherent”…”�”}”(hjä4h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjà4ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj²4h²hh³jÄ4h´MØubj¥)�”}”(hŒG(struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjü4ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjü4ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j 5Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjæ4sbŒc.usb_core.usb_alloc_coherent”†”esbuh1hhjü4ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?5h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjü4ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjM5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjü4ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjZ5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjü4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjø4ubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjv5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjs5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jx5Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j;5Œc.usb_core.usb_alloc_coherent”†”esbuh1hhjo5ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•5h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjo5ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj£5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjo5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjø4ubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¿5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÁ5Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j;5Œc.usb_core.usb_alloc_coherent”†”esbuh1hhj¸5ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ5h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¸5ubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hjì5h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¸5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjø4ubj«)�”}”(hŒdma_addr_t *dma”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j 6Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j;5Œc.usb_core.usb_alloc_coherent”†”esbuh1hhj6ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'6h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj6ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj56h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj6ubjŠ)�”}”(hŒdma”h]”hŒdma”…”�”}”(hjB6h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjø4ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj²4h²hh³jÄ4h´MØubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj®4h²hh³jÄ4h´MØubah}”(h]”j©4ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÄ4h´MØhj«4h²hubjü)�”}”(hhh]”hë)�”}”(hŒ5allocate dma-consistent buffer for URB_NO_xxx_DMA_MAP”h]”hŒ5allocate dma-consistent buffer for URB_NO_xxx_DMA_MAP”…”�”}”(hjl6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MØhji6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj«4h²hh³jÄ4h´MØubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj„6jj„6j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX!**Parameters** ``struct usb_device *dev`` device the buffer will be used with ``size_t size`` requested buffer size ``gfp_t mem_flags`` affect whether allocation may block ``dma_addr_t *dma`` used to return DMA address of buffer **Return** Either null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided). **Note** These buffers are used with URB_NO_xxx_DMA_MAP set in urb->transfer_flags to avoid behaviors like using "DMA bounce buffers", or thrashing IOMMU hardware during URB completion/resubmit. The implementation varies between platforms, depending on details of how DMA will work to this device. Using these buffers also eliminates cacheline sharing problems on architectures where CPU caches are not DMA-coherent. On systems without bus-snooping caches, these buffers are uncached. When the buffer is no longer used, free it with usb_free_coherent().”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjŽ6h]”hŒ Parameters”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjŒ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÜhjˆ6ubjD)�”}”(hhh]”(jI)�”}”(hŒ?``struct usb_device *dev`` device the buffer will be used with ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hj­6h]”hŒstruct usb_device *dev”…”�”}”(hj¯6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj«6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÙhj§6ubji)�”}”(hhh]”hë)�”}”(hŒ#device the buffer will be used with”h]”hŒ#device the buffer will be used with”…”�”}”(hjÆ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÂ6h´MÙhjÃ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj§6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÂ6h´MÙhj¤6ubjI)�”}”(hŒ&``size_t size`` requested buffer size ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hjæ6h]”hŒ size_t size”…”�”}”(hjè6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjä6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÚhjà6ubji)�”}”(hhh]”hë)�”}”(hŒrequested buffer size”h]”hŒrequested buffer size”…”�”}”(hjÿ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jû6h´MÚhjü6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjà6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jû6h´MÚhj¤6ubjI)�”}”(hŒ8``gfp_t mem_flags`` affect whether allocation may block ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hj7h]”hŒgfp_t mem_flags”…”�”}”(hj!7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÛhj7ubji)�”}”(hhh]”hë)�”}”(hŒ#affect whether allocation may block”h]”hŒ#affect whether allocation may block”…”�”}”(hj87h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j47h´MÛhj57ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j47h´MÛhj¤6ubjI)�”}”(hŒ9``dma_addr_t *dma`` used to return DMA address of buffer ”h]”(jO)�”}”(hŒ``dma_addr_t *dma``”h]”jÑ)�”}”(hjX7h]”hŒdma_addr_t *dma”…”�”}”(hjZ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjV7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÜhjR7ubji)�”}”(hhh]”hë)�”}”(hŒ$used to return DMA address of buffer”h]”hŒ$used to return DMA address of buffer”…”�”}”(hjq7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jm7h´MÜhjn7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjR7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jm7h´MÜhj¤6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjˆ6ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj“7h]”hŒReturn”…”�”}”(hj•7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj‘7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÞhjˆ6ubhë)�”}”(hŒôEither null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided).”h]”hŒôEither null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided).”…”�”}”(hj©7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MÞhjˆ6ubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hjº7h]”hŒNote”…”�”}”(hj¼7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¸7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mãhjˆ6ubhë)�”}”(hXÝThese buffers are used with URB_NO_xxx_DMA_MAP set in urb->transfer_flags to avoid behaviors like using "DMA bounce buffers", or thrashing IOMMU hardware during URB completion/resubmit. The implementation varies between platforms, depending on details of how DMA will work to this device. Using these buffers also eliminates cacheline sharing problems on architectures where CPU caches are not DMA-coherent. On systems without bus-snooping caches, these buffers are uncached.”h]”hXáThese buffers are used with URB_NO_xxx_DMA_MAP set in urb->transfer_flags to avoid behaviors like using “DMA bounce buffersâ€�, or thrashing IOMMU hardware during URB completion/resubmit. The implementation varies between platforms, depending on details of how DMA will work to this device. Using these buffers also eliminates cacheline sharing problems on architectures where CPU caches are not DMA-coherent. On systems without bus-snooping caches, these buffers are uncached.”…”�”}”(hjÐ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mãhjˆ6ubhë)�”}”(hŒDWhen the buffer is no longer used, free it with usb_free_coherent().”h]”hŒDWhen the buffer is no longer used, free it with usb_free_coherent().”…”�”}”(hjß7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mëhjˆ6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_free_coherent (C function)”Œc.usb_core.usb_free_coherent”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒXvoid usb_free_coherent (struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)”h]”j+)�”}”(hŒWvoid usb_free_coherent(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj 8h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MøubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj 8h²hh³j8h´Møubj„)�”}”(hŒusb_free_coherent”h]”jŠ)�”}”(hŒusb_free_coherent”h]”hŒusb_free_coherent”…”�”}”(hj/8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj+8ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj 8h²hh³j8h´Møubj¥)�”}”(hŒA(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjK8h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjG8ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjG8ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hji8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjf8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jk8Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj18sbŒc.usb_core.usb_free_coherent”†”esbuh1hhjG8ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjG8ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj˜8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjG8ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¥8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjG8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjC8ubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÁ8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¾8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÃ8Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j†8Œc.usb_core.usb_free_coherent”†”esbuh1hhjº8ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà8h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjº8ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjî8h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjº8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjC8ubj«)�”}”(hŒ void *addr”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj9ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj#9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj9ubjŠ)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj09h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjC8ubj«)�”}”(hŒdma_addr_t dma”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hjL9h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjI9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jN9Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j†8Œc.usb_core.usb_free_coherent”†”esbuh1hhjE9ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk9h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjE9ubjŠ)�”}”(hŒdma”h]”hŒdma”…”�”}”(hjy9h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjE9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjC8ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj 8h²hh³j8h´Møubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj8h²hh³j8h´Møubah}”(h]”j8ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j8h´Møhj8h²hubjü)�”}”(hhh]”hë)�”}”(hŒ/free memory allocated with usb_alloc_coherent()”h]”hŒ/free memory allocated with usb_alloc_coherent()”…”�”}”(hj£9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Møhj 9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj8h²hh³j8h´Møubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj»9jj»9j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX˜**Parameters** ``struct usb_device *dev`` device the buffer was used with ``size_t size`` requested buffer size ``void *addr`` CPU address of buffer ``dma_addr_t dma`` DMA address of buffer **Description** This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_coherent(), and the parameters must match those provided in that allocation request.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÅ9h]”hŒ Parameters”…”�”}”(hjÇ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÃ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mühj¿9ubjD)�”}”(hhh]”(jI)�”}”(hŒ;``struct usb_device *dev`` device the buffer was used with ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjä9h]”hŒstruct usb_device *dev”…”�”}”(hjæ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjâ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MùhjÞ9ubji)�”}”(hhh]”hë)�”}”(hŒdevice the buffer was used with”h]”hŒdevice the buffer was used with”…”�”}”(hjý9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jù9h´Mùhjú9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÞ9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jù9h´MùhjÛ9ubjI)�”}”(hŒ&``size_t size`` requested buffer size ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hj:h]”hŒ size_t size”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Múhj:ubji)�”}”(hhh]”hë)�”}”(hŒrequested buffer size”h]”hŒrequested buffer size”…”�”}”(hj6:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j2:h´Múhj3:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j2:h´MúhjÛ9ubjI)�”}”(hŒ%``void *addr`` CPU address of buffer ”h]”(jO)�”}”(hŒ``void *addr``”h]”jÑ)�”}”(hjV:h]”hŒ void *addr”…”�”}”(hjX:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjT:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MûhjP:ubji)�”}”(hhh]”hë)�”}”(hŒCPU address of buffer”h]”hŒCPU address of buffer”…”�”}”(hjo:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jk:h´Mûhjl:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjP:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jk:h´MûhjÛ9ubjI)�”}”(hŒ)``dma_addr_t dma`` DMA address of buffer ”h]”(jO)�”}”(hŒ``dma_addr_t dma``”h]”jÑ)�”}”(hj�:h]”hŒdma_addr_t dma”…”�”}”(hj‘:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mühj‰:ubji)�”}”(hhh]”hë)�”}”(hŒDMA address of buffer”h]”hŒDMA address of buffer”…”�”}”(hj¨:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¤:h´Mühj¥:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‰:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¤:h´MühjÛ9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¿9ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjÊ:h]”hŒ Description”…”�”}”(hjÌ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÈ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mþhj¿9ubhë)�”}”(hŒ¼This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_coherent(), and the parameters must match those provided in that allocation request.”h]”hŒ¼This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_coherent(), and the parameters must match those provided in that allocation request.”…”�”}”(hjà:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mýhj¿9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+usb_core.usb_alloc_noncoherent (C function)”Œ c.usb_core.usb_alloc_noncoherent”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒšvoid * usb_alloc_noncoherent (struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma, enum dma_data_direction dir, struct sg_table **table)”h]”j+)�”}”(hŒ˜void *usb_alloc_noncoherent(struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma, enum dma_data_direction dir, struct sg_table **table)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ;h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj ;h²hh³j;h´Mubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj,;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj ;h²hh³j;h´Mubj„)�”}”(hŒusb_alloc_noncoherent”h]”jŠ)�”}”(hŒusb_alloc_noncoherent”h]”hŒusb_alloc_noncoherent”…”�”}”(hj=;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj9;ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj ;h²hh³j;h´Mubj¥)�”}”(hŒ}(struct usb_device *dev, size_t size, gfp_t mem_flags, dma_addr_t *dma, enum dma_data_direction dir, struct sg_table **table)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjY;h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjU;ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjU;ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjw;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjt;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jy;Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj?;sbŒ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhjU;ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjU;ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¦;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjU;ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj³;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjU;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÌ;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÑ;Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”;Œ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhjÈ;ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî;h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÈ;ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjü;h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÈ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j<Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”;Œ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhj<ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7<h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj<ubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hjE<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubj«)�”}”(hŒdma_addr_t *dma”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hja<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj^<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jc<Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”;Œ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhjZ<ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€<h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjZ<ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŽ<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjZ<ubjŠ)�”}”(hŒdma”h]”hŒdma”…”�”}”(hj›<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjZ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubj«)�”}”(hŒenum dma_data_direction dir”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hj´<h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj°<ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ<h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°<ubh)�”}”(hhh]”jŠ)�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjÒ<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÏ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÔ<Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”;Œ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhj°<ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ<h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°<ubjŠ)�”}”(hŒdir”h]”hŒdir”…”�”}”(hjÿ<h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj°<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubj«)�”}”(hŒstruct sg_table **table”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj=ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%=h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj=ubh)�”}”(hhh]”jŠ)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj6=h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj3=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j8=Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j”;Œ c.usb_core.usb_alloc_noncoherent”†”esbuh1hhj=ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU=h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj=ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjc=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj=ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjp=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj=ubjŠ)�”}”(hŒtable”h]”hŒtable”…”�”}”(hj}=h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjQ;ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj ;h²hh³j;h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj;h²hh³j;h´Mubah}”(h]”j;ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j;h´Mhj;h²hubjü)�”}”(hhh]”hë)�”}”(hŒ6allocate dma-noncoherent buffer for URB_NO_xxx_DMA_MAP”h]”hŒ6allocate dma-noncoherent buffer for URB_NO_xxx_DMA_MAP”…”�”}”(hj§=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj¤=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj;h²hh³j;h´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¿=jj¿=j ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXŠ**Parameters** ``struct usb_device *dev`` device the buffer will be used with ``size_t size`` requested buffer size ``gfp_t mem_flags`` affect whether allocation may block ``dma_addr_t *dma`` used to return DMA address of buffer ``enum dma_data_direction dir`` DMA transfer direction ``struct sg_table **table`` used to return sg_table of allocated memory **Description** To explicit manage the memory ownership for the kernel vs the device by USB core, the user needs save sg_table to urb->sgt. Then USB core will do DMA sync for CPU and device properly. When the buffer is no longer used, free it with usb_free_noncoherent(). **Return** Either null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided).”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÉ=h]”hŒ Parameters”…”�”}”(hjË=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÇ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubjD)�”}”(hhh]”(jI)�”}”(hŒ?``struct usb_device *dev`` device the buffer will be used with ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjè=h]”hŒstruct usb_device *dev”…”�”}”(hjê=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjæ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhjâ=ubji)�”}”(hhh]”hë)�”}”(hŒ#device the buffer will be used with”h]”hŒ#device the buffer will be used with”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jý=h´Mhjþ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjâ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jý=h´Mhjß=ubjI)�”}”(hŒ&``size_t size`` requested buffer size ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hj!>h]”hŒ size_t size”…”�”}”(hj#>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj>ubji)�”}”(hhh]”hë)�”}”(hŒrequested buffer size”h]”hŒrequested buffer size”…”�”}”(hj:>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j6>h´Mhj7>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j6>h´Mhjß=ubjI)�”}”(hŒ8``gfp_t mem_flags`` affect whether allocation may block ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hjZ>h]”hŒgfp_t mem_flags”…”�”}”(hj\>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjX>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjT>ubji)�”}”(hhh]”hë)�”}”(hŒ#affect whether allocation may block”h]”hŒ#affect whether allocation may block”…”�”}”(hjs>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jo>h´Mhjp>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjT>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jo>h´Mhjß=ubjI)�”}”(hŒ9``dma_addr_t *dma`` used to return DMA address of buffer ”h]”(jO)�”}”(hŒ``dma_addr_t *dma``”h]”jÑ)�”}”(hj“>h]”hŒdma_addr_t *dma”…”�”}”(hj•>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‘>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhj�>ubji)�”}”(hhh]”hë)�”}”(hŒ$used to return DMA address of buffer”h]”hŒ$used to return DMA address of buffer”…”�”}”(hj¬>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¨>h´Mhj©>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¨>h´Mhjß=ubjI)�”}”(hŒ7``enum dma_data_direction dir`` DMA transfer direction ”h]”(jO)�”}”(hŒ``enum dma_data_direction dir``”h]”jÑ)�”}”(hjÌ>h]”hŒenum dma_data_direction dir”…”�”}”(hjÎ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÊ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÆ>ubji)�”}”(hhh]”hë)�”}”(hŒDMA transfer direction”h]”hŒDMA transfer direction”…”�”}”(hjå>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³já>h´Mhjâ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÆ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³já>h´Mhjß=ubjI)�”}”(hŒH``struct sg_table **table`` used to return sg_table of allocated memory ”h]”(jO)�”}”(hŒ``struct sg_table **table``”h]”jÑ)�”}”(hj?h]”hŒstruct sg_table **table”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´Mhjÿ>ubji)�”}”(hhh]”hë)�”}”(hŒ+used to return sg_table of allocated memory”h]”hŒ+used to return sg_table of allocated memory”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j?h´Mhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÿ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j?h´Mhjß=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÃ=ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj@?h]”hŒ Description”…”�”}”(hjB?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj>?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubhë)�”}”(hŒ·To explicit manage the memory ownership for the kernel vs the device by USB core, the user needs save sg_table to urb->sgt. Then USB core will do DMA sync for CPU and device properly.”h]”hŒ·To explicit manage the memory ownership for the kernel vs the device by USB core, the user needs save sg_table to urb->sgt. Then USB core will do DMA sync for CPU and device properly.”…”�”}”(hjV?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubhë)�”}”(hŒGWhen the buffer is no longer used, free it with usb_free_noncoherent().”h]”hŒGWhen the buffer is no longer used, free it with usb_free_noncoherent().”…”�”}”(hje?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjv?h]”hŒReturn”…”�”}”(hjx?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjt?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubhë)�”}”(hŒôEither null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided).”h]”hŒôEither null (indicating no buffer could be allocated), or the cpu-space pointer to a buffer that may be used to perform DMA to the specified device. Such cpu-space buffers are returned along with the DMA address (through the pointer provided).”…”�”}”(hjŒ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjÃ=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_free_noncoherent (C function)”Œc.usb_core.usb_free_noncoherent”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ€void usb_free_noncoherent (struct usb_device *dev, size_t size, void *addr, enum dma_data_direction dir, struct sg_table *table)”h]”j+)�”}”(hŒvoid usb_free_noncoherent(struct usb_device *dev, size_t size, void *addr, enum dma_data_direction dir, struct sg_table *table)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj»?h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj·?h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MAubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ?h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj·?h²hh³jÉ?h´MAubj„)�”}”(hŒusb_free_noncoherent”h]”jŠ)�”}”(hŒusb_free_noncoherent”h]”hŒusb_free_noncoherent”…”�”}”(hjÜ?h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjØ?ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj·?h²hh³jÉ?h´MAubj¥)�”}”(hŒf(struct usb_device *dev, size_t size, void *addr, enum dma_data_direction dir, struct sg_table *table)”h]”(j«)�”}”(hŒstruct usb_device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjø?h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjô?ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjô?ubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j@Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÞ?sbŒc.usb_core.usb_free_noncoherent”†”esbuh1hhjô?ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7@h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjô?ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjE@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjô?ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjR@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjô?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð?ubj«)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjn@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjk@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jp@Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j3@Œc.usb_core.usb_free_noncoherent”†”esbuh1hhjg@ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjg@ubjŠ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj›@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjg@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð?ubj«)�”}”(hŒ void *addr”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj´@h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj°@ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ@h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°@ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÐ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj°@ubjŠ)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÝ@h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj°@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð?ubj«)�”}”(hŒenum dma_data_direction dir”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hjö@h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjò@ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjò@ubh)�”}”(hhh]”jŠ)�”}”(hŒdma_data_direction”h]”hŒdma_data_direction”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jAŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j3@Œc.usb_core.usb_free_noncoherent”†”esbuh1hhjò@ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Ah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjò@ubjŠ)�”}”(hŒdir”h]”hŒdir”…”�”}”(hjAAh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjò@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð?ubj«)�”}”(hŒstruct sg_table *table”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjZAh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjVAubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgAh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjVAubh)�”}”(hhh]”jŠ)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjxAh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjuAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jzAŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j3@Œc.usb_core.usb_free_noncoherent”†”esbuh1hhjVAubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Ah²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjVAubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¥Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjVAubjŠ)�”}”(hŒtable”h]”hŒtable”…”�”}”(hj²Ah²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjVAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjð?ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj·?h²hh³jÉ?h´MAubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj³?h²hh³jÉ?h´MAubah}”(h]”j®?ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÉ?h´MAhj°?h²hubjü)�”}”(hhh]”hë)�”}”(hŒ2free memory allocated with usb_alloc_noncoherent()”h]”hŒ2free memory allocated with usb_alloc_noncoherent()”…”�”}”(hjÜAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”•h´MAhjÙAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj°?h²hh³jÉ?h´MAubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjôAjjôAj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXõ**Parameters** ``struct usb_device *dev`` device the buffer was used with ``size_t size`` requested buffer size ``void *addr`` CPU address of buffer ``enum dma_data_direction dir`` DMA transfer direction ``struct sg_table *table`` describe the allocated and DMA mapped memory, **Description** This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_noncoherent(), and the parameters must match those provided in that allocation request.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjþAh]”hŒ Parameters”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjüAubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MEhjøAubjD)�”}”(hhh]”(jI)�”}”(hŒ;``struct usb_device *dev`` device the buffer was used with ”h]”(jO)�”}”(hŒ``struct usb_device *dev``”h]”jÑ)�”}”(hjBh]”hŒstruct usb_device *dev”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MBhjBubji)�”}”(hhh]”hë)�”}”(hŒdevice the buffer was used with”h]”hŒdevice the buffer was used with”…”�”}”(hj6Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j2Bh´MBhj3Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j2Bh´MBhjBubjI)�”}”(hŒ&``size_t size`` requested buffer size ”h]”(jO)�”}”(hŒ``size_t size``”h]”jÑ)�”}”(hjVBh]”hŒ size_t size”…”�”}”(hjXBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjTBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MChjPBubji)�”}”(hhh]”hë)�”}”(hŒrequested buffer size”h]”hŒrequested buffer size”…”�”}”(hjoBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jkBh´MChjlBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjPBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jkBh´MChjBubjI)�”}”(hŒ%``void *addr`` CPU address of buffer ”h]”(jO)�”}”(hŒ``void *addr``”h]”jÑ)�”}”(hj�Bh]”hŒ void *addr”…”�”}”(hj‘Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MDhj‰Bubji)�”}”(hhh]”hë)�”}”(hŒCPU address of buffer”h]”hŒCPU address of buffer”…”�”}”(hj¨Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¤Bh´MDhj¥Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‰Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¤Bh´MDhjBubjI)�”}”(hŒ7``enum dma_data_direction dir`` DMA transfer direction ”h]”(jO)�”}”(hŒ``enum dma_data_direction dir``”h]”jÑ)�”}”(hjÈBh]”hŒenum dma_data_direction dir”…”�”}”(hjÊBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÆBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MEhjÂBubji)�”}”(hhh]”hë)�”}”(hŒDMA transfer direction”h]”hŒDMA transfer direction”…”�”}”(hjáBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÝBh´MEhjÞBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÂBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÝBh´MEhjBubjI)�”}”(hŒI``struct sg_table *table`` describe the allocated and DMA mapped memory, ”h]”(jO)�”}”(hŒ``struct sg_table *table``”h]”jÑ)�”}”(hjCh]”hŒstruct sg_table *table”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÿBubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MFhjûBubji)�”}”(hhh]”hë)�”}”(hŒ-describe the allocated and DMA mapped memory,”h]”hŒ-describe the allocated and DMA mapped memory,”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jCh´MFhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjûBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jCh´MFhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjøAubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj:Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MHhjøAubhë)�”}”(hŒ¿This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_noncoherent(), and the parameters must match those provided in that allocation request.”h]”hŒ¿This reclaims an I/O buffer, letting it be reused. The memory must have been allocated using usb_alloc_noncoherent(), and the parameters must match those provided in that allocation request.”…”�”}”(hjRCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MGhjøAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ7usb_core.usb_endpoint_max_periodic_payload (C function)”Œ,c.usb_core.usb_endpoint_max_periodic_payload”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒcu32 usb_endpoint_max_periodic_payload (struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”j+)�”}”(hŒbu32 usb_endpoint_max_periodic_payload(struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj„Ch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j†CŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ!usb_endpoint_max_periodic_payload”sbŒ,c.usb_core.usb_endpoint_max_periodic_payload”†”esbuh1hhj}Ch²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M^ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Ch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj}Ch²hh³j¦Ch´M^ubj„)�”}”(hŒ!usb_endpoint_max_periodic_payload”h]”jŠ)�”}”(hj£Ch]”hŒ!usb_endpoint_max_periodic_payload”…”�”}”(hj¹Ch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjµCubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj}Ch²hh³j¦Ch´M^ubj¥)�”}”(hŒ=(struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”(j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÔCh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÐCubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáCh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÐCubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjòCh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjïCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jôCŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¡CŒ,c.usb_core.usb_endpoint_max_periodic_payload”†”esbuh1hhjÐCubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÐCubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÐCubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj,Dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÐCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÌCubj«)�”}”(hŒ"const struct usb_host_endpoint *ep”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjEDh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjADubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRDh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjADubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj`Dh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjADubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmDh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjADubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_endpoint”h]”hŒusb_host_endpoint”…”�”}”(hj~Dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj{Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j€DŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¡CŒ,c.usb_core.usb_endpoint_max_periodic_payload”†”esbuh1hhjADubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjADubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj«Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjADubjŠ)�”}”(hŒep”h]”hŒep”…”�”}”(hj¸Dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjADubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÌCubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj}Ch²hh³j¦Ch´M^ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjyCh²hh³j¦Ch´M^ubah}”(h]”jtCah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¦Ch´M^hjvCh²hubjü)�”}”(hhh]”hë)�”}”(hŒ.Get maximum payload bytes per service interval”h]”hŒ.Get maximum payload bytes per service interval”…”�”}”(hjâDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M^hjßDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjvCh²hh³j¦Ch´M^ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjúDjjúDj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_device *udev`` The USB device ``const struct usb_host_endpoint *ep`` The endpoint **Return** the maximum number of bytes isochronous or interrupt endpoint **ep** can transfer during a service interval, or 0 for other endpoints.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjEh]”hŒ Parameters”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MbhjþDubjD)�”}”(hhh]”(jI)�”}”(hŒ+``struct usb_device *udev`` The USB device ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hj#Eh]”hŒstruct usb_device *udev”…”�”}”(hj%Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj!Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M`hjEubji)�”}”(hhh]”hë)�”}”(hŒThe USB device”h]”hŒThe USB device”…”�”}”(hjthe maximum number of bytes isochronous or interrupt endpoint ”…”�”}”(hj­Eh²hh³Nh´Nubj.)�”}”(hŒ**ep**”h]”hŒep”…”�”}”(hjµEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj­EubhŒB can transfer during a service interval, or 0 for other endpoints.”…”�”}”(hj­Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MchjþDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ4usb_core.usb_endpoint_is_hs_isoc_double (C function)”Œ)c.usb_core.usb_endpoint_is_hs_isoc_double”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒabool usb_endpoint_is_hs_isoc_double (struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”j+)�”}”(hŒ`bool usb_endpoint_is_hs_isoc_double(struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”(jT)�”}”(hj›h]”hŒbool”…”�”}”(hjîEh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêEh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêEh²hh³jûEh´M}ubj„)�”}”(hŒusb_endpoint_is_hs_isoc_double”h]”jŠ)�”}”(hŒusb_endpoint_is_hs_isoc_double”h]”hŒusb_endpoint_is_hs_isoc_double”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj Fubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjêEh²hh³jûEh´M}ubj¥)�”}”(hŒ=(struct usb_device *udev, const struct usb_host_endpoint *ep)”h]”(j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj*Fh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj&FubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Fh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj&Fubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjHFh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjEFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jJFŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjFsbŒ)c.usb_core.usb_endpoint_is_hs_isoc_double”†”esbuh1hhj&FubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiFh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj&Fubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjwFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj&FubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj„Fh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj&Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"Fubj«)�”}”(hŒ"const struct usb_host_endpoint *ep”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj™FubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªFh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™Fubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj¸Fh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj™FubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅFh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™Fubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_endpoint”h]”hŒusb_host_endpoint”…”�”}”(hjÖFh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÓFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jØFŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jeFŒ)c.usb_core.usb_endpoint_is_hs_isoc_double”†”esbuh1hhj™FubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõFh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™Fubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj™FubjŠ)�”}”(hŒep”h]”hŒep”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj™Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"Fubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjêEh²hh³jûEh´M}ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjæEh²hh³jûEh´M}ubah}”(h]”jáEah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jûEh´M}hjãEh²hubjü)�”}”(hhh]”hë)�”}”(hŒCTell whether an endpoint uses USB 2 Isochronous Double IN Bandwidth”h]”hŒCTell whether an endpoint uses USB 2 Isochronous Double IN Bandwidth”…”�”}”(hj:Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M}hj7Gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjãEh²hh³jûEh´M}ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjRGjjRGj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hŒã**Parameters** ``struct usb_device *udev`` The USB device ``const struct usb_host_endpoint *ep`` The endpoint **Return** true if an endpoint **ep** conforms to USB 2 Isochronous Double IN Bandwidth ECN, false otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj\Gh]”hŒ Parameters”…”�”}”(hj^Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjZGubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M�hjVGubjD)�”}”(hhh]”(jI)�”}”(hŒ+``struct usb_device *udev`` The USB device ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hj{Gh]”hŒstruct usb_device *udev”…”�”}”(hj}Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjyGubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´MhjuGubji)�”}”(hhh]”hë)�”}”(hŒThe USB device”h]”hŒThe USB device”…”�”}”(hj”Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�Gh´Mhj‘Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjuGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�Gh´MhjrGubjI)�”}”(hŒ4``const struct usb_host_endpoint *ep`` The endpoint ”h]”(jO)�”}”(hŒ&``const struct usb_host_endpoint *ep``”h]”jÑ)�”}”(hj´Gh]”hŒ"const struct usb_host_endpoint *ep”…”�”}”(hj¶Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj²Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M€hj®Gubji)�”}”(hhh]”hë)�”}”(hŒ The endpoint”h]”hŒ The endpoint”…”�”}”(hjÍGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÉGh´M€hjÊGubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj®Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÉGh´M€hjrGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjVGubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjïGh]”hŒReturn”…”�”}”(hjñGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjíGubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M‚hjVGubhë)�”}”(hŒbtrue if an endpoint **ep** conforms to USB 2 Isochronous Double IN Bandwidth ECN, false otherwise.”h]”(hŒtrue if an endpoint ”…”�”}”(hjHh²hh³Nh´Nubj.)�”}”(hŒ**ep**”h]”hŒep”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjHubhŒH conforms to USB 2 Isochronous Double IN Bandwidth ECN, false otherwise.”…”�”}”(hjHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:174: ./drivers/usb/core/usb.c”h´M‚hjVGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_hub_clear_tt_buffer (C function)”Œ"c.usb_core.usb_hub_clear_tt_buffer”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ-int usb_hub_clear_tt_buffer (struct urb *urb)”h]”j+)�”}”(hŒ,int usb_hub_clear_tt_buffer(struct urb *urb)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjFHh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjBHh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M‘ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUHh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjBHh²hh³jTHh´M‘ubj„)�”}”(hŒusb_hub_clear_tt_buffer”h]”jŠ)�”}”(hŒusb_hub_clear_tt_buffer”h]”hŒusb_hub_clear_tt_buffer”…”�”}”(hjgHh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjcHubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjBHh²hh³jTHh´M‘ubj¥)�”}”(hŒ(struct urb *urb)”h]”j«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjƒHh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjHubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjHubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj¡Hh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjžHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j£HŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjiHsbŒ"c.usb_core.usb_hub_clear_tt_buffer”†”esbuh1hhjHubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂHh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjHubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÐHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjHubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjÝHh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj{Hubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjBHh²hh³jTHh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj>Hh²hh³jTHh´M‘ubah}”(h]”j9Hah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jTHh´M‘hj;Hh²hubjü)�”}”(hhh]”hë)�”}”(hŒ-clear control/bulk TT state in high speed hub”h]”hŒ-clear control/bulk TT state in high speed hub”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M‘hjIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj;Hh²hh³jTHh´M‘ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjIjjIj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX+**Parameters** ``struct urb *urb`` an URB associated with the failed or incomplete split transaction **Description** High speed HCDs use this to tell the hub driver that some split control or bulk transaction failed in a way that requires clearing internal state of a transaction translator. This is normally detected (and reported) from interrupt context. It may not be possible for that hub to handle additional full (or low) speed transactions until that state is fully cleared out. **Return** 0 if successful. A negative error code otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj)Ih]”hŒ Parameters”…”�”}”(hj+Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj'Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M•hj#IubjD)�”}”(hhh]”jI)�”}”(hŒV``struct urb *urb`` an URB associated with the failed or incomplete split transaction ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjHIh]”hŒstruct urb *urb”…”�”}”(hjJIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjFIubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M’hjBIubji)�”}”(hhh]”hë)�”}”(hŒAan URB associated with the failed or incomplete split transaction”h]”hŒAan URB associated with the failed or incomplete split transaction”…”�”}”(hjaIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j]Ih´M’hj^Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjBIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j]Ih´M’hj?Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj#Iubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjƒIh]”hŒ Description”…”�”}”(hj…Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M”hj#Iubhë)�”}”(hŒðHigh speed HCDs use this to tell the hub driver that some split control or bulk transaction failed in a way that requires clearing internal state of a transaction translator. This is normally detected (and reported) from interrupt context.”h]”hŒðHigh speed HCDs use this to tell the hub driver that some split control or bulk transaction failed in a way that requires clearing internal state of a transaction translator. This is normally detected (and reported) from interrupt context.”…”�”}”(hj™Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M“hj#Iubhë)�”}”(hŒ€It may not be possible for that hub to handle additional full (or low) speed transactions until that state is fully cleared out.”h]”hŒ€It may not be possible for that hub to handle additional full (or low) speed transactions until that state is fully cleared out.”…”�”}”(hj¨Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M˜hj#Iubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj¹Ih]”hŒReturn”…”�”}”(hj»Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj·Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M›hj#Iubhë)�”}”(hŒ10 if successful. A negative error code otherwise.”h]”hŒ10 if successful. A negative error code otherwise.”…”�”}”(hjÏIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´Mœhj#Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_set_device_state (C function)”Œc.usb_core.usb_set_device_state”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒTvoid usb_set_device_state (struct usb_device *udev, enum usb_device_state new_state)”h]”j+)�”}”(hŒSvoid usb_set_device_state(struct usb_device *udev, enum usb_device_state new_state)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþIh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjúIh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MˆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjúIh²hh³j Jh´Mˆubj„)�”}”(hŒusb_set_device_state”h]”jŠ)�”}”(hŒusb_set_device_state”h]”hŒusb_set_device_state”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjJubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjúIh²hh³j Jh´Mˆubj¥)�”}”(hŒ:(struct usb_device *udev, enum usb_device_state new_state)”h]”(j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj;Jh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj7JubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHJh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7Jubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjYJh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjVJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j[JŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj!JsbŒc.usb_core.usb_set_device_state”†”esbuh1hhj7JubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzJh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7Jubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjˆJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj7JubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hj•Jh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj7Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj3Jubj«)�”}”(hŒenum usb_device_state new_state”h]”(j1)�”}”(hjh]”hŒenum”…”�”}”(hj®Jh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjªJubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Jh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjªJubh)�”}”(hhh]”jŠ)�”}”(hŒusb_device_state”h]”hŒusb_device_state”…”�”}”(hjÌJh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÉJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÎJŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jvJŒc.usb_core.usb_set_device_state”†”esbuh1hhjªJubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëJh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjªJubjŠ)�”}”(hŒ new_state”h]”hŒ new_state”…”�”}”(hjùJh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjªJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj3Jubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjúIh²hh³j Jh´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjöIh²hh³j Jh´Mˆubah}”(h]”jñIah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j Jh´MˆhjóIh²hubjü)�”}”(hhh]”hë)�”}”(hŒ/change a device's current state (usbcore, hcds)”h]”hŒ1change a device’s current state (usbcore, hcds)”…”�”}”(hj#Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´Mˆhj Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjóIh²hh³j Jh´Mˆubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj;Kjj;Kj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXá**Parameters** ``struct usb_device *udev`` pointer to device whose state should be changed ``enum usb_device_state new_state`` new state value to be stored **Description** udev->state is _not_ fully protected by the device lock. Although most transitions are made only while holding the lock, the state can can change to USB_STATE_NOTATTACHED at almost any time. This is so that devices can be marked as disconnected as soon as possible, without having to wait for any semaphores to be released. As a result, all changes to any device's state must be protected by the device_state_lock spinlock. Once a device has been added to the device tree, all changes to its state should be made using this routine. The state should _not_ be set directly. If udev->state is already USB_STATE_NOTATTACHED then no change is made. Otherwise udev->state is set to new_state, and if new_state is USB_STATE_NOTATTACHED then all of udev's descendants' states are also set to USB_STATE_NOTATTACHED.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjEKh]”hŒ Parameters”…”�”}”(hjGKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjCKubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MŒhj?KubjD)�”}”(hhh]”(jI)�”}”(hŒL``struct usb_device *udev`` pointer to device whose state should be changed ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hjdKh]”hŒstruct usb_device *udev”…”�”}”(hjfKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjbKubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M‰hj^Kubji)�”}”(hhh]”hë)�”}”(hŒ/pointer to device whose state should be changed”h]”hŒ/pointer to device whose state should be changed”…”�”}”(hj}Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jyKh´M‰hjzKubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj^Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jyKh´M‰hj[KubjI)�”}”(hŒA``enum usb_device_state new_state`` new state value to be stored ”h]”(jO)�”}”(hŒ#``enum usb_device_state new_state``”h]”jÑ)�”}”(hj�Kh]”hŒenum usb_device_state new_state”…”�”}”(hjŸKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj›Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MŠhj—Kubji)�”}”(hhh]”hë)�”}”(hŒnew state value to be stored”h]”hŒnew state value to be stored”…”�”}”(hj¶Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j²Kh´MŠhj³Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj—Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j²Kh´MŠhj[Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj?Kubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjØKh]”hŒ Description”…”�”}”(hjÚKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÖKubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MŒhj?Kubhë)�”}”(hXªudev->state is _not_ fully protected by the device lock. Although most transitions are made only while holding the lock, the state can can change to USB_STATE_NOTATTACHED at almost any time. This is so that devices can be marked as disconnected as soon as possible, without having to wait for any semaphores to be released. As a result, all changes to any device's state must be protected by the device_state_lock spinlock.”h]”hX¬udev->state is _not_ fully protected by the device lock. Although most transitions are made only while holding the lock, the state can can change to USB_STATE_NOTATTACHED at almost any time. This is so that devices can be marked as disconnected as soon as possible, without having to wait for any semaphores to be released. As a result, all changes to any device’s state must be protected by the device_state_lock spinlock.”…”�”}”(hjîKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M‹hj?Kubhë)�”}”(hŒ•Once a device has been added to the device tree, all changes to its state should be made using this routine. The state should _not_ be set directly.”h]”hŒ•Once a device has been added to the device tree, all changes to its state should be made using this routine. The state should _not_ be set directly.”…”�”}”(hjýKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M“hj?Kubhë)�”}”(hŒêIf udev->state is already USB_STATE_NOTATTACHED then no change is made. Otherwise udev->state is set to new_state, and if new_state is USB_STATE_NOTATTACHED then all of udev's descendants' states are also set to USB_STATE_NOTATTACHED.”h]”hŒîIf udev->state is already USB_STATE_NOTATTACHED then no change is made. Otherwise udev->state is set to new_state, and if new_state is USB_STATE_NOTATTACHED then all of udev’s descendants’ states are also set to USB_STATE_NOTATTACHED.”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M–hj?Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_root_hub_lost_power (C function)”Œ"c.usb_core.usb_root_hub_lost_power”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ7void usb_root_hub_lost_power (struct usb_device *rhdev)”h]”j+)�”}”(hŒ6void usb_root_hub_lost_power(struct usb_device *rhdev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj;Lh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj7Lh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MûubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJLh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj7Lh²hh³jILh´Mûubj„)�”}”(hŒusb_root_hub_lost_power”h]”jŠ)�”}”(hŒusb_root_hub_lost_power”h]”hŒusb_root_hub_lost_power”…”�”}”(hj\Lh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjXLubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj7Lh²hh³jILh´Mûubj¥)�”}”(hŒ(struct usb_device *rhdev)”h]”j«)�”}”(hŒstruct usb_device *rhdev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjxLh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjtLubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Lh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjtLubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj–Lh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj“Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j˜LŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj^LsbŒ"c.usb_core.usb_root_hub_lost_power”†”esbuh1hhjtLubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Lh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjtLubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÅLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjtLubjŠ)�”}”(hŒrhdev”h]”hŒrhdev”…”�”}”(hjÒLh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjtLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjpLubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj7Lh²hh³jILh´Mûubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj3Lh²hh³jILh´Mûubah}”(h]”j.Lah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jILh´Mûhj0Lh²hubjü)�”}”(hhh]”hë)�”}”(hŒ-called by HCD if the root hub lost Vbus power”h]”hŒ-called by HCD if the root hub lost Vbus power”…”�”}”(hjüLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MûhjùLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj0Lh²hh³jILh´Mûubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjMjjMj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXÖ**Parameters** ``struct usb_device *rhdev`` struct usb_device for the root hub **Description** The USB host controller driver calls this function when its root hub is resumed and Vbus power has been interrupted or the controller has been reset. The routine marks **rhdev** as having lost power. When the hub driver is resumed it will take notice and carry out power-session recovery for all the "USB-PERSIST"-enabled child devices; the others will be disconnected.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjMh]”hŒ Parameters”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÿhjMubjD)�”}”(hhh]”jI)�”}”(hŒ@``struct usb_device *rhdev`` struct usb_device for the root hub ”h]”(jO)�”}”(hŒ``struct usb_device *rhdev``”h]”jÑ)�”}”(hj=Mh]”hŒstruct usb_device *rhdev”…”�”}”(hj?Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj;Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´Mühj7Mubji)�”}”(hhh]”hë)�”}”(hŒ"struct usb_device for the root hub”h]”hŒ"struct usb_device for the root hub”…”�”}”(hjVMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jRMh´MühjSMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj7Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jRMh´Mühj4Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjMubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjxMh]”hŒ Description”…”�”}”(hjzMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjvMubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MþhjMubhë)�”}”(hXrThe USB host controller driver calls this function when its root hub is resumed and Vbus power has been interrupted or the controller has been reset. The routine marks **rhdev** as having lost power. When the hub driver is resumed it will take notice and carry out power-session recovery for all the "USB-PERSIST"-enabled child devices; the others will be disconnected.”h]”(hŒ©The USB host controller driver calls this function when its root hub is resumed and Vbus power has been interrupted or the controller has been reset. The routine marks ”…”�”}”(hjŽMh²hh³Nh´Nubj.)�”}”(hŒ **rhdev**”h]”hŒrhdev”…”�”}”(hj–Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjŽMubhŒÄ as having lost power. When the hub driver is resumed it will take notice and carry out power-session recovery for all the “USB-PERSISTâ€�-enabled child devices; the others will be disconnected.”…”�”}”(hjŽMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MýhjMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_core.usb_reset_device (C function)”Œc.usb_core.usb_reset_device”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ.int usb_reset_device (struct usb_device *udev)”h]”j+)�”}”(hŒ-int usb_reset_device(struct usb_device *udev)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÏMh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjËMh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÆubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞMh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjËMh²hh³jÝMh´MÆubj„)�”}”(hŒusb_reset_device”h]”jŠ)�”}”(hŒusb_reset_device”h]”hŒusb_reset_device”…”�”}”(hjðMh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjìMubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjËMh²hh³jÝMh´MÆubj¥)�”}”(hŒ(struct usb_device *udev)”h]”j«)�”}”(hŒstruct usb_device *udev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjNubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjNubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj*Nh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j,NŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjòMsbŒc.usb_core.usb_reset_device”†”esbuh1hhjNubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKNh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjNubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjYNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjNubjŠ)�”}”(hŒudev”h]”hŒudev”…”�”}”(hjfNh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjNubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjËMh²hh³jÝMh´MÆubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÇMh²hh³jÝMh´MÆubah}”(h]”jÂMah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÝMh´MÆhjÄMh²hubjü)�”}”(hhh]”hë)�”}”(hŒ3warn interface drivers and perform a USB port reset”h]”hŒ3warn interface drivers and perform a USB port reset”…”�”}”(hj�Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÆhj�Nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÄMh²hh³jÝMh´MÆubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¨Njj¨Nj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXˆ**Parameters** ``struct usb_device *udev`` device to reset (not in NOTATTACHED state) **Description** Warns all drivers bound to registered interfaces (using their pre_reset method), performs the port reset, and then lets the drivers know that the reset is over (using their post_reset method). **Return** The same as for usb_reset_and_verify_device(). However, if a reset is already in progress (for instance, if a driver doesn't have pre_reset() or post_reset() callbacks, and while being unbound or re-bound during the ongoing reset its disconnect() or probe() routine tries to perform a second, nested reset), the routine returns -EINPROGRESS. **Note** The caller must own the device lock. For example, it's safe to use this from a driver probe() routine after downloading new firmware. For calls that might not occur during probe(), drivers should lock the device using usb_lock_device_for_reset(). If an interface is currently being probed or disconnected, we assume its driver knows how to handle resets. For all other interfaces, if the driver doesn't have pre_reset and post_reset methods then we attempt to unbind it and rebind afterward.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj²Nh]”hŒ Parameters”…”�”}”(hj´Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj°Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÊhj¬NubjD)�”}”(hhh]”jI)�”}”(hŒG``struct usb_device *udev`` device to reset (not in NOTATTACHED state) ”h]”(jO)�”}”(hŒ``struct usb_device *udev``”h]”jÑ)�”}”(hjÑNh]”hŒstruct usb_device *udev”…”�”}”(hjÓNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÏNubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÇhjËNubji)�”}”(hhh]”hë)�”}”(hŒ*device to reset (not in NOTATTACHED state)”h]”hŒ*device to reset (not in NOTATTACHED state)”…”�”}”(hjêNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jæNh´MÇhjçNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjËNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jæNh´MÇhjÈNubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj¬Nubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj Oh]”hŒ Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj Oubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÉhj¬Nubhë)�”}”(hŒÀWarns all drivers bound to registered interfaces (using their pre_reset method), performs the port reset, and then lets the drivers know that the reset is over (using their post_reset method).”h]”hŒÀWarns all drivers bound to registered interfaces (using their pre_reset method), performs the port reset, and then lets the drivers know that the reset is over (using their post_reset method).”…”�”}”(hj"Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÈhj¬Nubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj3Oh]”hŒReturn”…”�”}”(hj5Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj1Oubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÌhj¬Nubhë)�”}”(hXUThe same as for usb_reset_and_verify_device(). However, if a reset is already in progress (for instance, if a driver doesn't have pre_reset() or post_reset() callbacks, and while being unbound or re-bound during the ongoing reset its disconnect() or probe() routine tries to perform a second, nested reset), the routine returns -EINPROGRESS.”h]”hXWThe same as for usb_reset_and_verify_device(). However, if a reset is already in progress (for instance, if a driver doesn’t have pre_reset() or post_reset() callbacks, and while being unbound or re-bound during the ongoing reset its disconnect() or probe() routine tries to perform a second, nested reset), the routine returns -EINPROGRESS.”…”�”}”(hjIOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÍhj¬Nubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hjZOh]”hŒNote”…”�”}”(hj\Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjXOubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÔhj¬Nubhë)�”}”(hŒ÷The caller must own the device lock. For example, it's safe to use this from a driver probe() routine after downloading new firmware. For calls that might not occur during probe(), drivers should lock the device using usb_lock_device_for_reset().”h]”hŒùThe caller must own the device lock. For example, it’s safe to use this from a driver probe() routine after downloading new firmware. For calls that might not occur during probe(), drivers should lock the device using usb_lock_device_for_reset().”…”�”}”(hjpOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÔhj¬Nubhë)�”}”(hŒõIf an interface is currently being probed or disconnected, we assume its driver knows how to handle resets. For all other interfaces, if the driver doesn't have pre_reset and post_reset methods then we attempt to unbind it and rebind afterward.”h]”hŒ÷If an interface is currently being probed or disconnected, we assume its driver knows how to handle resets. For all other interfaces, if the driver doesn’t have pre_reset and post_reset methods then we attempt to unbind it and rebind afterward.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MÙhj¬Nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ,usb_core.usb_queue_reset_device (C function)”Œ!c.usb_core.usb_queue_reset_device”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ9void usb_queue_reset_device (struct usb_interface *iface)”h]”j+)�”}”(hŒ8void usb_queue_reset_device(struct usb_interface *iface)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®Oh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjªOh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M?ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Oh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjªOh²hh³j¼Oh´M?ubj„)�”}”(hŒusb_queue_reset_device”h]”jŠ)�”}”(hŒusb_queue_reset_device”h]”hŒusb_queue_reset_device”…”�”}”(hjÏOh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjËOubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjªOh²hh³j¼Oh´M?ubj¥)�”}”(hŒ(struct usb_interface *iface)”h]”j«)�”}”(hŒstruct usb_interface *iface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjëOh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjçOubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøOh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjçOubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j PŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjÑOsbŒ!c.usb_core.usb_queue_reset_device”†”esbuh1hhjçOubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Ph²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjçOubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj8Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjçOubjŠ)�”}”(hŒiface”h]”hŒiface”…”�”}”(hjEPh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjçOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjãOubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjªOh²hh³j¼Oh´M?ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj¦Oh²hh³j¼Oh´M?ubah}”(h]”j¡Oah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¼Oh´M?hj£Oh²hubjü)�”}”(hhh]”hë)�”}”(hŒ)Reset a USB device from an atomic context”h]”hŒ)Reset a USB device from an atomic context”…”�”}”(hjoPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M?hjlPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj£Oh²hh³j¼Oh´M?ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj‡Pjj‡Pj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hX¡**Parameters** ``struct usb_interface *iface`` USB interface belonging to the device to reset **Description** This function can be used to reset a USB device from an atomic context, where usb_reset_device() won't work (as it blocks). Doing a reset via this method is functionally equivalent to calling usb_reset_device(), except for the fact that it is delayed to a workqueue. This means that any drivers bound to other interfaces might be unbound, as well as users from usbfs in user space. Corner cases: - Scheduling two resets at the same time from two different drivers attached to two different interfaces of the same device is possible; depending on how the driver attached to each interface handles ->pre_reset(), the second reset might happen or not. - If the reset is delayed so long that the interface is unbound from its driver, the reset will be skipped. - This function can be called during .probe(). It can also be called during .disconnect(), but doing so is pointless because the reset will not occur. If you really want to reset the device during .disconnect(), call usb_reset_device() directly -- but watch out for nested unbinding issues!”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj‘Ph]”hŒ Parameters”…”�”}”(hj“Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj�Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MChj‹PubjD)�”}”(hhh]”jI)�”}”(hŒO``struct usb_interface *iface`` USB interface belonging to the device to reset ”h]”(jO)�”}”(hŒ``struct usb_interface *iface``”h]”jÑ)�”}”(hj°Ph]”hŒstruct usb_interface *iface”…”�”}”(hj²Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj®Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´M@hjªPubji)�”}”(hhh]”hë)�”}”(hŒ.USB interface belonging to the device to reset”h]”hŒ.USB interface belonging to the device to reset”…”�”}”(hjÉPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÅPh´M@hjÆPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjªPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÅPh´M@hj§Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj‹Pubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjëPh]”hŒ Description”…”�”}”(hjíPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjéPubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MBhj‹Pubhë)�”}”(hŒ{This function can be used to reset a USB device from an atomic context, where usb_reset_device() won't work (as it blocks).”h]”hŒ}This function can be used to reset a USB device from an atomic context, where usb_reset_device() won’t work (as it blocks).”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MAhj‹Pubhë)�”}”(hXDoing a reset via this method is functionally equivalent to calling usb_reset_device(), except for the fact that it is delayed to a workqueue. This means that any drivers bound to other interfaces might be unbound, as well as users from usbfs in user space.”h]”hXDoing a reset via this method is functionally equivalent to calling usb_reset_device(), except for the fact that it is delayed to a workqueue. This means that any drivers bound to other interfaces might be unbound, as well as users from usbfs in user space.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MDhj‹Pubhë)�”}”(hŒ Corner cases:”h]”hŒ Corner cases:”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MIhj‹Pubj¶)�”}”(hhh]”(j»)�”}”(hŒûScheduling two resets at the same time from two different drivers attached to two different interfaces of the same device is possible; depending on how the driver attached to each interface handles ->pre_reset(), the second reset might happen or not. ”h]”hë)�”}”(hŒúScheduling two resets at the same time from two different drivers attached to two different interfaces of the same device is possible; depending on how the driver attached to each interface handles ->pre_reset(), the second reset might happen or not.”h]”hŒúScheduling two resets at the same time from two different drivers attached to two different interfaces of the same device is possible; depending on how the driver attached to each interface handles ->pre_reset(), the second reset might happen or not.”…”�”}”(hj5Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MKhj1Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj.Qubj»)�”}”(hŒjIf the reset is delayed so long that the interface is unbound from its driver, the reset will be skipped. ”h]”hë)�”}”(hŒiIf the reset is delayed so long that the interface is unbound from its driver, the reset will be skipped.”h]”hŒiIf the reset is delayed so long that the interface is unbound from its driver, the reset will be skipped.”…”�”}”(hjNQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MPhjJQubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj.Qubj»)�”}”(hX"This function can be called during .probe(). It can also be called during .disconnect(), but doing so is pointless because the reset will not occur. If you really want to reset the device during .disconnect(), call usb_reset_device() directly -- but watch out for nested unbinding issues!”h]”hë)�”}”(hX"This function can be called during .probe(). It can also be called during .disconnect(), but doing so is pointless because the reset will not occur. If you really want to reset the device during .disconnect(), call usb_reset_device() directly -- but watch out for nested unbinding issues!”h]”hX"This function can be called during .probe(). It can also be called during .disconnect(), but doing so is pointless because the reset will not occur. If you really want to reset the device during .disconnect(), call usb_reset_device() directly -- but watch out for nested unbinding issues!”…”�”}”(hjgQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MShjcQubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj.Qubeh}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³jCQh´MKhj‹Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjÅrh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_hub_find_child (C function)”Œc.usb_core.usb_hub_find_child”hNt”auh1jhjÅrh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒKstruct usb_device * usb_hub_find_child (struct usb_device *hdev, int port1)”h]”j+)�”}”(hŒIstruct usb_device *usb_hub_find_child(struct usb_device *hdev, int port1)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¢Qh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjžQh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MbubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Qh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjžQh²hh³j¯Qh´Mbubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hjÁQh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¾Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÃQŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_hub_find_child”sbŒc.usb_core.usb_hub_find_child”†”esbuh1hhjžQh²hh³j¯Qh´MbubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãQh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjžQh²hh³j¯Qh´Mbubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjñQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjžQh²hh³j¯Qh´Mbubj„)�”}”(hŒusb_hub_find_child”h]”jŠ)�”}”(hjàQh]”hŒusb_hub_find_child”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjþQubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjžQh²hh³j¯Qh´Mbubj¥)�”}”(hŒ$(struct usb_device *hdev, int port1)”h]”(j«)�”}”(hŒstruct usb_device *hdev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjRubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Rh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjRubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_device”h]”hŒ usb_device”…”�”}”(hj;Rh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj8Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j=RŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÞQŒc.usb_core.usb_hub_find_child”†”esbuh1hhjRubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZRh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjRubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjhRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjRubjŠ)�”}”(hŒhdev”h]”hŒhdev”…”�”}”(hjuRh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjRubj«)�”}”(hŒ int port1”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjŽRh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŠRubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœRh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŠRubjŠ)�”}”(hŒport1”h]”hŒport1”…”�”}”(hjªRh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŠRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjRubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjžQh²hh³j¯Qh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjšQh²hh³j¯Qh´Mbubah}”(h]”j•Qah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j¯Qh´Mbhj—Qh²hubjü)�”}”(hhh]”hë)�”}”(hŒUGet the pointer of child device attached to the port which is specified by **port1**.”h]”(hŒKGet the pointer of child device attached to the port which is specified by ”…”�”}”(hjÔRh²hh³Nh´Nubj.)�”}”(hŒ **port1**”h]”hŒport1”…”�”}”(hjÜRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÔRubhŒ.”…”�”}”(hjÔRh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MbhjÑRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj—Qh²hh³j¯Qh´Mbubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjþRjjþRj ‰j!‰j"‰uh1jh²hhjÅrh³Nh´Nubj$)�”}”(hXU**Parameters** ``struct usb_device *hdev`` USB device belonging to the usb hub ``int port1`` port num to indicate which port the child device is attached to. **Description** USB drivers call this function to get hub's child device pointer. **Return** ``NULL`` if input param is invalid and child's usb_device pointer if non-NULL.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjSh]”hŒ Parameters”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´MfhjSubjD)�”}”(hhh]”(jI)�”}”(hŒ@``struct usb_device *hdev`` USB device belonging to the usb hub ”h]”(jO)�”}”(hŒ``struct usb_device *hdev``”h]”jÑ)�”}”(hj'Sh]”hŒstruct usb_device *hdev”…”�”}”(hj)Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj%Subah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:177: ./drivers/usb/core/hub.c”h´Mdhj!Subji)�”}”(hhh]”hë)�”}”(hŒ#USB device belonging to the usb hub”h]”hŒ#USB device belonging to the usb hub”…”�”}”(hj@Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j` is a rather thin layer that became available in the 2.2 kernels, while :c:type:`struct usb_hcd ` is a more featureful layer that lets HCDs share common code, to shrink driver size and significantly reduce hcd-specific behaviors.”h]”(hŒwThe same basic APIs are available to drivers for all those controllers. For historical reasons they are in two layers: ”…”�”}”(hj2Th²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct usb_bus `”h]”jÑ)�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”(jdjŒc-type”eh"]”h$]”h&]”uh1jÐhj:Tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j dŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jLjO)�”}”jR]”j4�N†”asbj)dŒusb_bus”uh1hh³hÃh´KÆhj2TubhŒH is a rather thin layer that became available in the 2.2 kernels, while ”…”�”}”(hj2Th²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct usb_hcd `”h]”jÑ)�”}”(hjcTh]”hŒstruct usb_hcd”…”�”}”(hjeTh²hh³Nh´Nubah}”(h]”h ]”(jdjŒc-type”eh"]”h$]”h&]”uh1jÐhjaTubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j dŒ refdomain”jŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jLjXTj)dŒusb_hcd”uh1hh³hÃh´KÆhj2TubhŒ„ is a more featureful layer that lets HCDs share common code, to shrink driver size and significantly reduce hcd-specific behaviors.”…”�”}”(hj2Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´KÆhjTh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_calc_bus_time (C function)”Œc.usb_core.usb_calc_bus_time”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒIlong usb_calc_bus_time (int speed, int is_input, int isoc, int bytecount)”h]”j+)�”}”(hŒHlong usb_calc_bus_time(int speed, int is_input, int isoc, int bytecount)”h]”(jT)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj£Th²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŸTh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Th²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŸTh²hh³j±Th´Mubj„)�”}”(hŒusb_calc_bus_time”h]”jŠ)�”}”(hŒusb_calc_bus_time”h]”hŒusb_calc_bus_time”…”�”}”(hjÄTh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÀTubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŸTh²hh³j±Th´Mubj¥)�”}”(hŒ2(int speed, int is_input, int isoc, int bytecount)”h]”(j«)�”}”(hŒ int speed”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjàTh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÜTubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîTh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÜTubjŠ)�”}”(hŒspeed”h]”hŒspeed”…”�”}”(hjüTh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÜTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØTubj«)�”}”(hŒ int is_input”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjUubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Uh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjUubjŠ)�”}”(hŒis_input”h]”hŒis_input”…”�”}”(hj1Uh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØTubj«)�”}”(hŒint isoc”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjJUh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjFUubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXUh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjFUubjŠ)�”}”(hŒisoc”h]”hŒisoc”…”�”}”(hjfUh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjFUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØTubj«)�”}”(hŒ int bytecount”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj{UubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj{UubjŠ)�”}”(hŒ bytecount”h]”hŒ bytecount”…”�”}”(hj›Uh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj{Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjØTubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŸTh²hh³j±Th´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj›Th²hh³j±Th´Mubah}”(h]”j–Tah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j±Th´Mhj˜Th²hubjü)�”}”(hhh]”hë)�”}”(hŒ4approximate periodic transaction time in nanoseconds”h]”hŒ4approximate periodic transaction time in nanoseconds”…”�”}”(hjÅUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MhjÂUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj˜Th²hh³j±Th´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÝUjjÝUj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXõ**Parameters** ``int speed`` from dev->speed; USB_SPEED_{LOW,FULL,HIGH} ``int is_input`` true iff the transaction sends data to the host ``int isoc`` true for isochronous transactions, false for interrupt ones ``int bytecount`` how many bytes in the transaction. **Return** Approximate bus time in nanoseconds for a periodic transaction. **Note** See USB 2.0 spec section 5.11.3; only periodic transfers need to be scheduled in software, this function is only used for such scheduling.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjçUh]”hŒ Parameters”…”�”}”(hjéUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjåUubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M#hjáUubjD)�”}”(hhh]”(jI)�”}”(hŒ9``int speed`` from dev->speed; USB_SPEED_{LOW,FULL,HIGH} ”h]”(jO)�”}”(hŒ ``int speed``”h]”jÑ)�”}”(hjVh]”hŒ int speed”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M hjVubji)�”}”(hhh]”hë)�”}”(hŒ*from dev->speed; USB_SPEED_{LOW,FULL,HIGH}”h]”hŒ*from dev->speed; USB_SPEED_{LOW,FULL,HIGH}”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jVh´M hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jVh´M hjýUubjI)�”}”(hŒA``int is_input`` true iff the transaction sends data to the host ”h]”(jO)�”}”(hŒ``int is_input``”h]”jÑ)�”}”(hj?Vh]”hŒ int is_input”…”�”}”(hjAVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj=Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M!hj9Vubji)�”}”(hhh]”hë)�”}”(hŒ/true iff the transaction sends data to the host”h]”hŒ/true iff the transaction sends data to the host”…”�”}”(hjXVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jTVh´M!hjUVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj9Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jTVh´M!hjýUubjI)�”}”(hŒI``int isoc`` true for isochronous transactions, false for interrupt ones ”h]”(jO)�”}”(hŒ ``int isoc``”h]”jÑ)�”}”(hjxVh]”hŒint isoc”…”�”}”(hjzVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjvVubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M"hjrVubji)�”}”(hhh]”hë)�”}”(hŒ;true for isochronous transactions, false for interrupt ones”h]”hŒ;true for isochronous transactions, false for interrupt ones”…”�”}”(hj‘Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j�Vh´M"hjŽVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjrVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j�Vh´M"hjýUubjI)�”}”(hŒ5``int bytecount`` how many bytes in the transaction. ”h]”(jO)�”}”(hŒ``int bytecount``”h]”jÑ)�”}”(hj±Vh]”hŒ int bytecount”…”�”}”(hj³Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¯Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M#hj«Vubji)�”}”(hhh]”hë)�”}”(hŒ"how many bytes in the transaction.”h]”hŒ"how many bytes in the transaction.”…”�”}”(hjÊVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÆVh´M#hjÇVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj«Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÆVh´M#hjýUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjáUubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjìVh]”hŒReturn”…”�”}”(hjîVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjêVubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M%hjáUubhë)�”}”(hŒ?Approximate bus time in nanoseconds for a periodic transaction.”h]”hŒ?Approximate bus time in nanoseconds for a periodic transaction.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M%hjáUubhë)�”}”(hŒ**Note**”h]”j.)�”}”(hjWh]”hŒNote”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M'hjáUubhë)�”}”(hŒŠSee USB 2.0 spec section 5.11.3; only periodic transfers need to be scheduled in software, this function is only used for such scheduling.”h]”hŒŠSee USB 2.0 spec section 5.11.3; only periodic transfers need to be scheduled in software, this function is only used for such scheduling.”…”�”}”(hj)Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M'hjáUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ,usb_core.usb_hcd_link_urb_to_ep (C function)”Œ!c.usb_core.usb_hcd_link_urb_to_ep”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒAint usb_hcd_link_urb_to_ep (struct usb_hcd *hcd, struct urb *urb)”h]”j+)�”}”(hŒ@int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjXWh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjTWh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MXubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgWh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjTWh²hh³jfWh´MXubj„)�”}”(hŒusb_hcd_link_urb_to_ep”h]”jŠ)�”}”(hŒusb_hcd_link_urb_to_ep”h]”hŒusb_hcd_link_urb_to_ep”…”�”}”(hjyWh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjuWubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjTWh²hh³jfWh´MXubj¥)�”}”(hŒ&(struct usb_hcd *hcd, struct urb *urb)”h]”(j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj•Wh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj‘WubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Wh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‘Wubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj³Wh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj°Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jµWŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj{WsbŒ!c.usb_core.usb_hcd_link_urb_to_ep”†”esbuh1hhj‘WubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔWh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj‘Wubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjâWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj‘WubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjïWh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‘Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�Wubj«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjXubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjXubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj&Xh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj#Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j(XŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÐWŒ!c.usb_core.usb_hcd_link_urb_to_ep”†”esbuh1hhjXubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEXh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjXubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjSXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjXubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj`Xh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj�Wubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjTWh²hh³jfWh´MXubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjPWh²hh³jfWh´MXubah}”(h]”jKWah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jfWh´MXhjMWh²hubjü)�”}”(hhh]”hë)�”}”(hŒ add an URB to its endpoint queue”h]”hŒ add an URB to its endpoint queue”…”�”}”(hjŠXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MXhj‡Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjMWh²hh³jfWh´MXubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¢Xjj¢Xj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX�**Parameters** ``struct usb_hcd *hcd`` host controller to which **urb** was submitted ``struct urb *urb`` URB being submitted **Description** Host controller drivers should call this routine in their enqueue() method. The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB submission, as well as for endpoint shutdown and for usb_kill_urb. **Return** 0 for no error, otherwise a negative error code (in which case the enqueue() method must fail). If no error occurs but enqueue() fails anyway, it must call usb_hcd_unlink_urb_from_ep() before releasing the private spinlock and returning.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¬Xh]”hŒ Parameters”…”�”}”(hj®Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjªXubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M\hj¦XubjD)�”}”(hhh]”(jI)�”}”(hŒG``struct usb_hcd *hcd`` host controller to which **urb** was submitted ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjËXh]”hŒstruct usb_hcd *hcd”…”�”}”(hjÍXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÉXubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MYhjÅXubji)�”}”(hhh]”hë)�”}”(hŒ.host controller to which **urb** was submitted”h]”(hŒhost controller to which ”…”�”}”(hjäXh²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hjìXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjäXubhŒ was submitted”…”�”}”(hjäXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jàXh´MYhjáXubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÅXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jàXh´MYhjÂXubjI)�”}”(hŒ(``struct urb *urb`` URB being submitted ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hjYh]”hŒstruct urb *urb”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MZhjYubji)�”}”(hhh]”hë)�”}”(hŒURB being submitted”h]”hŒURB being submitted”…”�”}”(hj/Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j+Yh´MZhj,Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j+Yh´MZhjÂXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj¦Xubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjQYh]”hŒ Description”…”�”}”(hjSYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjOYubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M\hj¦Xubhë)�”}”(hX Host controller drivers should call this routine in their enqueue() method. The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB submission, as well as for endpoint shutdown and for usb_kill_urb.”h]”hX Host controller drivers should call this routine in their enqueue() method. The HCD’s private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB submission, as well as for endpoint shutdown and for usb_kill_urb.”…”�”}”(hjgYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M[hj¦Xubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjxYh]”hŒReturn”…”�”}”(hjzYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjvYubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M`hj¦Xubhë)�”}”(hŒî0 for no error, otherwise a negative error code (in which case the enqueue() method must fail). If no error occurs but enqueue() fails anyway, it must call usb_hcd_unlink_urb_from_ep() before releasing the private spinlock and returning.”h]”hŒî0 for no error, otherwise a negative error code (in which case the enqueue() method must fail). If no error occurs but enqueue() fails anyway, it must call usb_hcd_unlink_urb_from_ep() before releasing the private spinlock and returning.”…”�”}”(hjŽYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mahj¦Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ.usb_core.usb_hcd_check_unlink_urb (C function)”Œ#c.usb_core.usb_hcd_check_unlink_urb”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒOint usb_hcd_check_unlink_urb (struct usb_hcd *hcd, struct urb *urb, int status)”h]”j+)�”}”(hŒNint usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, int status)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj½Yh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¹Yh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MŽubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌYh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¹Yh²hh³jËYh´MŽubj„)�”}”(hŒusb_hcd_check_unlink_urb”h]”jŠ)�”}”(hŒusb_hcd_check_unlink_urb”h]”hŒusb_hcd_check_unlink_urb”…”�”}”(hjÞYh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚYubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj¹Yh²hh³jËYh´MŽubj¥)�”}”(hŒ2(struct usb_hcd *hcd, struct urb *urb, int status)”h]”(j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjúYh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjöYubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjöYubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jZŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjàYsbŒ#c.usb_core.usb_hcd_check_unlink_urb”†”esbuh1hhjöYubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Zh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjöYubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjGZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjöYubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjTZh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjöYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòYubj«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjmZh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjiZubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzZh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjiZubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj‹Zh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjˆZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j�ZŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j5ZŒ#c.usb_core.usb_hcd_check_unlink_urb”†”esbuh1hhjiZubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªZh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjiZubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¸Zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjiZubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjÅZh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjiZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòYubj«)�”}”(hŒ int status”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÞZh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÚZubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìZh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÚZubjŠ)�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hjúZh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÚZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjòYubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj¹Yh²hh³jËYh´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjµYh²hh³jËYh´MŽubah}”(h]”j°Yah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jËYh´MŽhj²Yh²hubjü)�”}”(hhh]”hë)�”}”(hŒ$check whether an URB may be unlinked”h]”hŒ$check whether an URB may be unlinked”…”�”}”(hj$[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MŽhj![h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj²Yh²hh³jËYh´MŽubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj<[jj<[j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX**Parameters** ``struct usb_hcd *hcd`` host controller to which **urb** was submitted ``struct urb *urb`` URB being checked for unlinkability ``int status`` error code to store in **urb** if the unlink succeeds **Description** Host controller drivers should call this routine in their dequeue() method. The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for making sure than an unlink is valid. -EIDRM: **urb** was not submitted or has already completed. The completion function may not have been called yet. -EBUSY: **urb** has already been unlinked. **Return** 0 for no error, otherwise a negative error code (in which case the dequeue() method must fail). The possible error codes are:”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjF[h]”hŒ Parameters”…”�”}”(hjH[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjD[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M’hj@[ubjD)�”}”(hhh]”(jI)�”}”(hŒG``struct usb_hcd *hcd`` host controller to which **urb** was submitted ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hje[h]”hŒstruct usb_hcd *hcd”…”�”}”(hjg[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjc[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M�hj_[ubji)�”}”(hhh]”hë)�”}”(hŒ.host controller to which **urb** was submitted”h]”(hŒhost controller to which ”…”�”}”(hj~[h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hj†[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj~[ubhŒ was submitted”…”�”}”(hj~[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jz[h´M�hj{[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj_[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jz[h´M�hj\[ubjI)�”}”(hŒ8``struct urb *urb`` URB being checked for unlinkability ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj°[h]”hŒstruct urb *urb”…”�”}”(hj²[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj®[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M�hjª[ubji)�”}”(hhh]”hë)�”}”(hŒ#URB being checked for unlinkability”h]”hŒ#URB being checked for unlinkability”…”�”}”(hjÉ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÅ[h´M�hjÆ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjª[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÅ[h´M�hj\[ubjI)�”}”(hŒE``int status`` error code to store in **urb** if the unlink succeeds ”h]”(jO)�”}”(hŒ``int status``”h]”jÑ)�”}”(hjé[h]”hŒ int status”…”�”}”(hjë[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjç[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M‘hjã[ubji)�”}”(hhh]”hë)�”}”(hŒ5error code to store in **urb** if the unlink succeeds”h]”(hŒerror code to store in ”…”�”}”(hj\h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj\ubhŒ if the unlink succeeds”…”�”}”(hj\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jþ[h´M‘hjÿ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjã[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jþ[h´M‘hj\[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj@[ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj6\h]”hŒ Description”…”�”}”(hj8\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj4\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M“hj@[ubhë)�”}”(hŒéHost controller drivers should call this routine in their dequeue() method. The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for making sure than an unlink is valid.”h]”hŒëHost controller drivers should call this routine in their dequeue() method. The HCD’s private spinlock must be held and interrupts must be disabled. The actions carried out here are required for making sure than an unlink is valid.”…”�”}”(hjL\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M’hj@[ubjŒ7)�”}”(hŒ¦-EIDRM: **urb** was not submitted or has already completed. The completion function may not have been called yet. -EBUSY: **urb** has already been unlinked. ”h]”(jD)�”}”(hhh]”jI)�”}”(hŒr-EIDRM: **urb** was not submitted or has already completed. The completion function may not have been called yet. ”h]”(jO)�”}”(hŒ;-EIDRM: **urb** was not submitted or has already completed.”h]”(hŒ-EIDRM: ”…”�”}”(hjf\h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hjn\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjf\ubhŒ, was not submitted or has already completed.”…”�”}”(hjf\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M™hjb\ubji)�”}”(hhh]”hë)�”}”(hŒ5The completion function may not have been called yet.”h]”hŒ5The completion function may not have been called yet.”…”�”}”(hjŠ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j†\h´M™hj‡\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjb\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j†\h´M™hj_\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj[\ubhë)�”}”(hŒ*-EBUSY: **urb** has already been unlinked.”h]”(hŒ-EBUSY: ”…”�”}”(hjª\h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hj²\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjª\ubhŒ has already been unlinked.”…”�”}”(hjª\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M›hj[\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M˜hj@[ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjÔ\h]”hŒReturn”…”�”}”(hjÖ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÒ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M�hj@[ubhë)�”}”(hŒ~0 for no error, otherwise a negative error code (in which case the dequeue() method must fail). The possible error codes are:”h]”hŒ~0 for no error, otherwise a negative error code (in which case the dequeue() method must fail). The possible error codes are:”…”�”}”(hjê\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M˜hj@[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ0usb_core.usb_hcd_unlink_urb_from_ep (C function)”Œ%c.usb_core.usb_hcd_unlink_urb_from_ep”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒFvoid usb_hcd_unlink_urb_from_ep (struct usb_hcd *hcd, struct urb *urb)”h]”j+)�”}”(hŒEvoid usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj]h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¸ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(]h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj]h²hh³j']h´M¸ubj„)�”}”(hŒusb_hcd_unlink_urb_from_ep”h]”jŠ)�”}”(hŒusb_hcd_unlink_urb_from_ep”h]”hŒusb_hcd_unlink_urb_from_ep”…”�”}”(hj:]h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj6]ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj]h²hh³j']h´M¸ubj¥)�”}”(hŒ&(struct usb_hcd *hcd, struct urb *urb)”h]”(j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjV]h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjR]ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc]h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjR]ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjt]h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjq]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jv]Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj<]sbŒ%c.usb_core.usb_hcd_unlink_urb_from_ep”†”esbuh1hhjR]ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•]h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjR]ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj£]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjR]ubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hj°]h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjR]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjN]ubj«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÉ]h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÅ]ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ]h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅ]ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hjç]h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjä]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jé]Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j‘]Œ%c.usb_core.usb_hcd_unlink_urb_from_ep”†”esbuh1hhjÅ]ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÅ]ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÅ]ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj!^h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÅ]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjN]ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj]h²hh³j']h´M¸ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj]h²hh³j']h´M¸ubah}”(h]”j ]ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j']h´M¸hj]h²hubjü)�”}”(hhh]”hë)�”}”(hŒ%remove an URB from its endpoint queue”h]”hŒ%remove an URB from its endpoint queue”…”�”}”(hjK^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¸hjH^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj]h²hh³j']h´M¸ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjc^jjc^j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXu**Parameters** ``struct usb_hcd *hcd`` host controller to which **urb** was submitted ``struct urb *urb`` URB being unlinked **Description** Host controller drivers should call this routine before calling usb_hcd_giveback_urb(). The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB completion.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjm^h]”hŒ Parameters”…”�”}”(hjo^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjk^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¼hjg^ubjD)�”}”(hhh]”(jI)�”}”(hŒG``struct usb_hcd *hcd`` host controller to which **urb** was submitted ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjŒ^h]”hŒstruct usb_hcd *hcd”…”�”}”(hjŽ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjŠ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¹hj†^ubji)�”}”(hhh]”hë)�”}”(hŒ.host controller to which **urb** was submitted”h]”(hŒhost controller to which ”…”�”}”(hj¥^h²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hj­^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¥^ubhŒ was submitted”…”�”}”(hj¥^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¡^h´M¹hj¢^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj†^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¡^h´M¹hjƒ^ubjI)�”}”(hŒ'``struct urb *urb`` URB being unlinked ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj×^h]”hŒstruct urb *urb”…”�”}”(hjÙ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÕ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MºhjÑ^ubji)�”}”(hhh]”hë)�”}”(hŒURB being unlinked”h]”hŒURB being unlinked”…”�”}”(hjð^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jì^h´Mºhjí^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÑ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jì^h´Mºhjƒ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjg^ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj_h]”hŒ Description”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¼hjg^ubhë)�”}”(hŒàHost controller drivers should call this routine before calling usb_hcd_giveback_urb(). The HCD's private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB completion.”h]”hŒâHost controller drivers should call this routine before calling usb_hcd_giveback_urb(). The HCD’s private spinlock must be held and interrupts must be disabled. The actions carried out here are required for URB completion.”…”�”}”(hj(_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M»hjg^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_hcd_giveback_urb (C function)”Œc.usb_core.usb_hcd_giveback_urb”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒLvoid usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, int status)”h]”j+)�”}”(hŒKvoid usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjW_h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjS_h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¯ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjS_h²hh³je_h´M¯ubj„)�”}”(hŒusb_hcd_giveback_urb”h]”jŠ)�”}”(hŒusb_hcd_giveback_urb”h]”hŒusb_hcd_giveback_urb”…”�”}”(hjx_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjt_ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjS_h²hh³je_h´M¯ubj¥)�”}”(hŒ2(struct usb_hcd *hcd, struct urb *urb, int status)”h]”(j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj”_h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj�_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�_ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj²_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¯_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j´_Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjz_sbŒc.usb_core.usb_hcd_giveback_urb”†”esbuh1hhj�_ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ_h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj�_ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjá_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj�_ubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjî_h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjŒ_ubj«)�”}”(hŒstruct urb *urb”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj`ubh)�”}”(hhh]”jŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj%`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj"`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j'`Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jÏ_Œc.usb_core.usb_hcd_giveback_urb”†”esbuh1hhj`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj`ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjR`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj`ubjŠ)�”}”(hŒurb”h]”hŒurb”…”�”}”(hj_`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjŒ_ubj«)�”}”(hŒ int status”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjx`h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjt`ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†`h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjt`ubjŠ)�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hj”`h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjt`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjŒ_ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjS_h²hh³je_h´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjO_h²hh³je_h´M¯ubah}”(h]”jJ_ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³je_h´M¯hjL_h²hubjü)�”}”(hhh]”hë)�”}”(hŒ$return URB from HCD to device driver”h]”hŒ$return URB from HCD to device driver”…”�”}”(hj¾`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¯hj»`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjL_h²hh³je_h´M¯ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjÖ`jjÖ`j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX¡**Parameters** ``struct usb_hcd *hcd`` host controller returning the URB ``struct urb *urb`` urb being returned to the USB device driver. ``int status`` completion status code for the URB. **Context** atomic. The completion callback is invoked either in a work queue (BH) context or in the caller's context, depending on whether the HCD_BH flag is set in the **hcd** structure, except that URBs submitted to the root hub always complete in BH context. **Description** This hands the URB from HCD to its USB device driver, using its completion function. The HCD has freed all per-urb resources (and is done using urb->hcpriv). It also released all HCD locks; the device driver won't cause problems if it frees, modifies, or resubmits this URB. If **urb** was unlinked, the value of **status** will be overridden by **urb->unlinked**. Erroneous short transfers are detected in case the HCD hasn't checked for them.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjà`h]”hŒ Parameters”…”�”}”(hjâ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÞ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M³hjÚ`ubjD)�”}”(hhh]”(jI)�”}”(hŒ:``struct usb_hcd *hcd`` host controller returning the URB ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjÿ`h]”hŒstruct usb_hcd *hcd”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjý`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M°hjù`ubji)�”}”(hhh]”hë)�”}”(hŒ!host controller returning the URB”h]”hŒ!host controller returning the URB”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jah´M°hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjù`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jah´M°hjö`ubjI)�”}”(hŒA``struct urb *urb`` urb being returned to the USB device driver. ”h]”(jO)�”}”(hŒ``struct urb *urb``”h]”jÑ)�”}”(hj8ah]”hŒstruct urb *urb”…”�”}”(hj:ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj6aubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M±hj2aubji)�”}”(hhh]”hë)�”}”(hŒ,urb being returned to the USB device driver.”h]”hŒ,urb being returned to the USB device driver.”…”�”}”(hjQah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jMah´M±hjNaubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj2aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jMah´M±hjö`ubjI)�”}”(hŒ3``int status`` completion status code for the URB. ”h]”(jO)�”}”(hŒ``int status``”h]”jÑ)�”}”(hjqah]”hŒ int status”…”�”}”(hjsah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjoaubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M²hjkaubji)�”}”(hhh]”hë)�”}”(hŒ#completion status code for the URB.”h]”hŒ#completion status code for the URB.”…”�”}”(hjŠah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j†ah´M²hj‡aubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjkaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j†ah´M²hjö`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÚ`ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj¬ah]”hŒContext”…”�”}”(hj®ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjªaubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M´hjÚ`ubhë)�”}”(hŒúatomic. The completion callback is invoked either in a work queue (BH) context or in the caller's context, depending on whether the HCD_BH flag is set in the **hcd** structure, except that URBs submitted to the root hub always complete in BH context.”h]”(hŒ atomic. The completion callback is invoked either in a work queue (BH) context or in the caller’s context, depending on whether the HCD_BH flag is set in the ”…”�”}”(hjÂah²hh³Nh´Nubj.)�”}”(hŒ**hcd**”h]”hŒhcd”…”�”}”(hjÊah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÂaubhŒU structure, except that URBs submitted to the root hub always complete in BH context.”…”�”}”(hjÂah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M´hjÚ`ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjåah]”hŒ Description”…”�”}”(hjçah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjãaubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¹hjÚ`ubhë)�”}”(hXThis hands the URB from HCD to its USB device driver, using its completion function. The HCD has freed all per-urb resources (and is done using urb->hcpriv). It also released all HCD locks; the device driver won't cause problems if it frees, modifies, or resubmits this URB.”h]”hXThis hands the URB from HCD to its USB device driver, using its completion function. The HCD has freed all per-urb resources (and is done using urb->hcpriv). It also released all HCD locks; the device driver won’t cause problems if it frees, modifies, or resubmits this URB.”…”�”}”(hjûah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¸hjÚ`ubhë)�”}”(hŒªIf **urb** was unlinked, the value of **status** will be overridden by **urb->unlinked**. Erroneous short transfers are detected in case the HCD hasn't checked for them.”h]”(hŒIf ”…”�”}”(hj bh²hh³Nh´Nubj.)�”}”(hŒ**urb**”h]”hŒurb”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj bubhŒ was unlinked, the value of ”…”�”}”(hj bh²hh³Nh´Nubj.)�”}”(hŒ **status**”h]”hŒstatus”…”�”}”(hj$bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj bubhŒ will be overridden by ”…”�”}”(hj bh²hh³Nh´Nubj.)�”}”(hŒ**urb->unlinked**”h]”hŒ urb->unlinked”…”�”}”(hj6bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj bubhŒT. Erroneous short transfers are detected in case the HCD hasn’t checked for them.”…”�”}”(hj bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¾hjÚ`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_alloc_streams (C function)”Œc.usb_core.usb_alloc_streams”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ˜int usb_alloc_streams (struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, unsigned int num_streams, gfp_t mem_flags)”h]”j+)�”}”(hŒ—int usb_alloc_streams(struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, unsigned int num_streams, gfp_t mem_flags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjobh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjkbh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÙubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~bh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjkbh²hh³j}bh´MÙubj„)�”}”(hŒusb_alloc_streams”h]”jŠ)�”}”(hŒusb_alloc_streams”h]”hŒusb_alloc_streams”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjŒbubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjkbh²hh³j}bh´MÙubj¥)�”}”(hŒ‚(struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, unsigned int num_streams, gfp_t mem_flags)”h]”(j«)�”}”(hŒstruct usb_interface *interface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¬bh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¨bubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹bh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¨bubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjÊbh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÇbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÌbŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj’bsbŒc.usb_core.usb_alloc_streams”†”esbuh1hhj¨bubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëbh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¨bubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjùbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¨bubjŠ)�”}”(hŒ interface”h]”hŒ interface”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¨bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¤bubj«)�”}”(hŒstruct usb_host_endpoint **eps”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjcubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,ch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjcubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_endpoint”h]”hŒusb_host_endpoint”…”�”}”(hj=ch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj:cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j?cŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jçbŒc.usb_core.usb_alloc_streams”†”esbuh1hhjcubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjcubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjcubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjwch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjcubjŠ)�”}”(hŒeps”h]”hŒeps”…”�”}”(hj„ch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¤bubj«)�”}”(hŒunsigned int num_eps”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�ch²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™cubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«ch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™cubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¹ch²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™cubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™cubjŠ)�”}”(hŒnum_eps”h]”hŒnum_eps”…”�”}”(hjÕch²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj™cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¤bubj«)�”}”(hŒunsigned int num_streams”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjîch²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêcubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüch²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêcubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêcubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêcubjŠ)�”}”(hŒ num_streams”h]”hŒ num_streams”…”�”}”(hj&dh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjêcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¤bubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjBdh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj?dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jDdŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jçbŒc.usb_core.usb_alloc_streams”†”esbuh1hhj;dubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjadh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj;dubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hjodh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj;dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¤bubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjkbh²hh³j}bh´MÙubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjgbh²hh³j}bh´MÙubah}”(h]”jbbah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j}bh´MÙhjdbh²hubjü)�”}”(hhh]”hë)�”}”(hŒ"allocate bulk endpoint stream IDs.”h]”hŒ"allocate bulk endpoint stream IDs.”…”�”}”(hj™dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÙhj–dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjdbh²hh³j}bh´MÙubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj±djj±dj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX©**Parameters** ``struct usb_interface *interface`` alternate setting that includes all endpoints. ``struct usb_host_endpoint **eps`` array of endpoints that need streams. ``unsigned int num_eps`` number of endpoints in the array. ``unsigned int num_streams`` number of streams to allocate. ``gfp_t mem_flags`` flags hcd should use to allocate memory. **Description** Sets up a group of bulk endpoints to have **num_streams** stream IDs available. Drivers may queue multiple transfers to different stream IDs, which may complete in a different order than they were queued. **Return** On success, the number of allocated streams. On failure, a negative error code.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj»dh]”hŒ Parameters”…”�”}”(hj½dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¹dubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÝhjµdubjD)�”}”(hhh]”(jI)�”}”(hŒS``struct usb_interface *interface`` alternate setting that includes all endpoints. ”h]”(jO)�”}”(hŒ#``struct usb_interface *interface``”h]”jÑ)�”}”(hjÚdh]”hŒstruct usb_interface *interface”…”�”}”(hjÜdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjØdubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÚhjÔdubji)�”}”(hhh]”hë)�”}”(hŒ.alternate setting that includes all endpoints.”h]”hŒ.alternate setting that includes all endpoints.”…”�”}”(hjódh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jïdh´MÚhjðdubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÔdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jïdh´MÚhjÑdubjI)�”}”(hŒI``struct usb_host_endpoint **eps`` array of endpoints that need streams. ”h]”(jO)�”}”(hŒ"``struct usb_host_endpoint **eps``”h]”jÑ)�”}”(hjeh]”hŒstruct usb_host_endpoint **eps”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÛhj eubji)�”}”(hhh]”hë)�”}”(hŒ%array of endpoints that need streams.”h]”hŒ%array of endpoints that need streams.”…”�”}”(hj,eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j(eh´MÛhj)eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j(eh´MÛhjÑdubjI)�”}”(hŒ;``unsigned int num_eps`` number of endpoints in the array. ”h]”(jO)�”}”(hŒ``unsigned int num_eps``”h]”jÑ)�”}”(hjLeh]”hŒunsigned int num_eps”…”�”}”(hjNeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjJeubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÜhjFeubji)�”}”(hhh]”hë)�”}”(hŒ!number of endpoints in the array.”h]”hŒ!number of endpoints in the array.”…”�”}”(hjeeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jaeh´MÜhjbeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjFeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jaeh´MÜhjÑdubjI)�”}”(hŒ<``unsigned int num_streams`` number of streams to allocate. ”h]”(jO)�”}”(hŒ``unsigned int num_streams``”h]”jÑ)�”}”(hj…eh]”hŒunsigned int num_streams”…”�”}”(hj‡eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjƒeubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÝhjeubji)�”}”(hhh]”hë)�”}”(hŒnumber of streams to allocate.”h]”hŒnumber of streams to allocate.”…”�”}”(hjžeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jšeh´MÝhj›eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jšeh´MÝhjÑdubjI)�”}”(hŒ=``gfp_t mem_flags`` flags hcd should use to allocate memory. ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hj¾eh]”hŒgfp_t mem_flags”…”�”}”(hjÀeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¼eubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÞhj¸eubji)�”}”(hhh]”hë)�”}”(hŒ(flags hcd should use to allocate memory.”h]”hŒ(flags hcd should use to allocate memory.”…”�”}”(hj×eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÓeh´MÞhjÔeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¸eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÓeh´MÞhjÑdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjµdubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjùeh]”hŒ Description”…”�”}”(hjûeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj÷eubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Màhjµdubhë)�”}”(hŒÌSets up a group of bulk endpoints to have **num_streams** stream IDs available. Drivers may queue multiple transfers to different stream IDs, which may complete in a different order than they were queued.”h]”(hŒ*Sets up a group of bulk endpoints to have ”…”�”}”(hjfh²hh³Nh´Nubj.)�”}”(hŒ**num_streams**”h]”hŒ num_streams”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjfubhŒ“ stream IDs available. Drivers may queue multiple transfers to different stream IDs, which may complete in a different order than they were queued.”…”�”}”(hjfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mßhjµdubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj2fh]”hŒReturn”…”�”}”(hj4fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj0fubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mãhjµdubhë)�”}”(hŒOOn success, the number of allocated streams. On failure, a negative error code.”h]”hŒOOn success, the number of allocated streams. On failure, a negative error code.”…”�”}”(hjHfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mähjµdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ&usb_core.usb_free_streams (C function)”Œc.usb_core.usb_free_streams”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ}int usb_free_streams (struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, gfp_t mem_flags)”h]”j+)�”}”(hŒ|int usb_free_streams(struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, gfp_t mem_flags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjwfh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjsfh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†fh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjsfh²hh³j…fh´Mubj„)�”}”(hŒusb_free_streams”h]”jŠ)�”}”(hŒusb_free_streams”h]”hŒusb_free_streams”…”�”}”(hj˜fh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj”fubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjsfh²hh³j…fh´Mubj¥)�”}”(hŒh(struct usb_interface *interface, struct usb_host_endpoint **eps, unsigned int num_eps, gfp_t mem_flags)”h]”(j«)�”}”(hŒstruct usb_interface *interface”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj´fh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj°fubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁfh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°fubh)�”}”(hhh]”jŠ)�”}”(hŒ usb_interface”h]”hŒ usb_interface”…”�”}”(hjÒfh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÏfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÔfŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjšfsbŒc.usb_core.usb_free_streams”†”esbuh1hhj°fubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjófh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj°fubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj°fubjŠ)�”}”(hŒ interface”h]”hŒ interface”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj°fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬fubj«)�”}”(hŒstruct usb_host_endpoint **eps”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj'gh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj#gubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#gubh)�”}”(hhh]”jŠ)�”}”(hŒusb_host_endpoint”h]”hŒusb_host_endpoint”…”�”}”(hjEgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjBgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jGgŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jïfŒc.usb_core.usb_free_streams”†”esbuh1hhj#gubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdgh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj#gubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjrgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj#gubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj#gubjŠ)�”}”(hŒeps”h]”hŒeps”…”�”}”(hjŒgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj#gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬fubj«)�”}”(hŒunsigned int num_eps”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¥gh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¡gubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³gh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¡gubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hjÁgh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¡gubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏgh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¡gubjŠ)�”}”(hŒnum_eps”h]”hŒnum_eps”…”�”}”(hjÝgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¡gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬fubj«)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjùgh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjögubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jûgŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jïfŒc.usb_core.usb_free_streams”†”esbuh1hhjògubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjògubjŠ)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hj&hh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjògubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¬fubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjsfh²hh³j…fh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjofh²hh³j…fh´Mubah}”(h]”jjfah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j…fh´Mh•jlfh²hubjü)�”}”(hhh]”hë)�”}”(hŒfree bulk endpoint stream IDs.”h]”hŒfree bulk endpoint stream IDs.”…”�”}”(hjPhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MhjMhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjlfh²hh³j…fh´Mubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjhhjjhhj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXý**Parameters** ``struct usb_interface *interface`` alternate setting that includes all endpoints. ``struct usb_host_endpoint **eps`` array of endpoints to remove streams from. ``unsigned int num_eps`` number of endpoints in the array. ``gfp_t mem_flags`` flags hcd should use to allocate memory. **Description** Reverts a group of bulk endpoints back to not using stream IDs. Can fail if we are given bad arguments, or HCD is broken. **Return** 0 on success. On failure, a negative error code.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjrhh]”hŒ Parameters”…”�”}”(hjthh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjphubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MhjlhubjD)�”}”(hhh]”(jI)�”}”(hŒS``struct usb_interface *interface`` alternate setting that includes all endpoints. ”h]”(jO)�”}”(hŒ#``struct usb_interface *interface``”h]”jÑ)�”}”(hj‘hh]”hŒstruct usb_interface *interface”…”�”}”(hj“hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�hubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhj‹hubji)�”}”(hhh]”hë)�”}”(hŒ.alternate setting that includes all endpoints.”h]”hŒ.alternate setting that includes all endpoints.”…”�”}”(hjªhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¦hh´Mhj§hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‹hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¦hh´MhjˆhubjI)�”}”(hŒN``struct usb_host_endpoint **eps`` array of endpoints to remove streams from. ”h]”(jO)�”}”(hŒ"``struct usb_host_endpoint **eps``”h]”jÑ)�”}”(hjÊhh]”hŒstruct usb_host_endpoint **eps”…”�”}”(hjÌhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈhubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MhjÄhubji)�”}”(hhh]”hë)�”}”(hŒ*array of endpoints to remove streams from.”h]”hŒ*array of endpoints to remove streams from.”…”�”}”(hjãhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jßhh´Mhjàhubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÄhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jßhh´MhjˆhubjI)�”}”(hŒ;``unsigned int num_eps`` number of endpoints in the array. ”h]”(jO)�”}”(hŒ``unsigned int num_eps``”h]”jÑ)�”}”(hjih]”hŒunsigned int num_eps”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhjýhubji)�”}”(hhh]”hë)�”}”(hŒ!number of endpoints in the array.”h]”hŒ!number of endpoints in the array.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jih´Mhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjýhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jih´MhjˆhubjI)�”}”(hŒ=``gfp_t mem_flags`` flags hcd should use to allocate memory. ”h]”(jO)�”}”(hŒ``gfp_t mem_flags``”h]”jÑ)�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj:iubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhj6iubji)�”}”(hhh]”hë)�”}”(hŒ(flags hcd should use to allocate memory.”h]”hŒ(flags hcd should use to allocate memory.”…”�”}”(hjUih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jQih´MhjRiubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj6iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jQih´Mhjˆhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjlhubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjwih]”hŒ Description”…”�”}”(hjyih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjuiubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhjlhubhë)�”}”(hŒyReverts a group of bulk endpoints back to not using stream IDs. Can fail if we are given bad arguments, or HCD is broken.”h]”hŒyReverts a group of bulk endpoints back to not using stream IDs. Can fail if we are given bad arguments, or HCD is broken.”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhjlhubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjžih]”hŒReturn”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjœiubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhjlhubhë)�”}”(hŒ00 on success. On failure, a negative error code.”h]”hŒ00 on success. On failure, a negative error code.”…”�”}”(hj´ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mhjlhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ-usb_core.usb_hcd_resume_root_hub (C function)”Œ"c.usb_core.usb_hcd_resume_root_hub”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ2void usb_hcd_resume_root_hub (struct usb_hcd *hcd)”h]”j+)�”}”(hŒ1void usb_hcd_resume_root_hub(struct usb_hcd *hcd)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjãih²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjßih²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MV ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòih²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjßih²hh³jñih´MV ubj„)�”}”(hŒusb_hcd_resume_root_hub”h]”jŠ)�”}”(hŒusb_hcd_resume_root_hub”h]”hŒusb_hcd_resume_root_hub”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjjubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjßih²hh³jñih´MV ubj¥)�”}”(hŒ(struct usb_hcd *hcd)”h]”j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-jh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjjubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj>jh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj;jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j@jŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjjsbŒ"c.usb_core.usb_hcd_resume_root_hub”†”esbuh1hhjjubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_jh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjjubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjmjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjjubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjzjh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjjubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjßih²hh³jñih´MV ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÛih²hh³jñih´MV ubah}”(h]”jÖiah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jñih´MV hjØih²hubjü)�”}”(hhh]”hë)�”}”(hŒ$called by HCD to resume its root hub”h]”hŒ$called by HCD to resume its root hub”…”�”}”(hj¤jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MV hj¡jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjØih²hh³jñih´MV ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¼jjj¼jj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXh**Parameters** ``struct usb_hcd *hcd`` host controller for this root hub **Description** The USB host controller calls this function when its root hub is suspended (with the remote wakeup feature enabled) and a remote wakeup request is received. The routine submits a workqueue request to resume the root hub (that is, manage its downstream ports again).”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÆjh]”hŒ Parameters”…”�”}”(hjÈjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÄjubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MZ hjÀjubjD)�”}”(hhh]”jI)�”}”(hŒ:``struct usb_hcd *hcd`` host controller for this root hub ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjåjh]”hŒstruct usb_hcd *hcd”…”�”}”(hjçjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjãjubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MW hjßjubji)�”}”(hhh]”hë)�”}”(hŒ!host controller for this root hub”h]”hŒ!host controller for this root hub”…”�”}”(hjþjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jújh´MW hjûjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjßjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jújh´MW hjÜjubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÀjubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj kh]”hŒ Description”…”�”}”(hj"kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MY hjÀjubhë)�”}”(hX The USB host controller calls this function when its root hub is suspended (with the remote wakeup feature enabled) and a remote wakeup request is received. The routine submits a workqueue request to resume the root hub (that is, manage its downstream ports again).”h]”hX The USB host controller calls this function when its root hub is suspended (with the remote wakeup feature enabled) and a remote wakeup request is received. The routine submits a workqueue request to resume the root hub (that is, manage its downstream ports again).”…”�”}”(hj6kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MX hjÀjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_bus_start_enum (C function)”Œc.usb_core.usb_bus_start_enum”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ?int usb_bus_start_enum (struct usb_bus *bus, unsigned port_num)”h]”j+)�”}”(hŒ>int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjekh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjakh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Ms ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtkh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjakh²hh³jskh´Ms ubj„)�”}”(hŒusb_bus_start_enum”h]”jŠ)�”}”(hŒusb_bus_start_enum”h]”hŒusb_bus_start_enum”…”�”}”(hj†kh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj‚kubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjakh²hh³jskh´Ms ubj¥)�”}”(hŒ((struct usb_bus *bus, unsigned port_num)”h]”(j«)�”}”(hŒstruct usb_bus *bus”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj¢kh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjžkubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯kh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjžkubh)�”}”(hhh]”jŠ)�”}”(hŒusb_bus”h]”hŒusb_bus”…”�”}”(hjÀkh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj½kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jÂkŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjˆksbŒc.usb_core.usb_bus_start_enum”†”esbuh1hhjžkubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjákh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjžkubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjïkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjžkubjŠ)�”}”(hŒbus”h]”hŒbus”…”�”}”(hjükh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjžkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjškubj«)�”}”(hŒunsigned port_num”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjlubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#lh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjlubjŠ)�”}”(hŒport_num”h]”hŒport_num”…”�”}”(hj1lh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjškubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjakh²hh³jskh´Ms ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj]kh²hh³jskh´Ms ubah}”(h]”jXkah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jskh´Ms hjZkh²hubjü)�”}”(hhh]”hë)�”}”(hŒ%start immediate enumeration (for OTG)”h]”hŒ%start immediate enumeration (for OTG)”…”�”}”(hj[lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Ms hjXlh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjZkh²hh³jskh´Ms ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjsljjslj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXÆ**Parameters** ``struct usb_bus *bus`` the bus (must use hcd framework) ``unsigned port_num`` 1-based number of port; usually bus->otg_port **Context** atomic **Description** Starts enumeration, with an immediate reset followed later by hub_wq identifying and possibly configuring the device. This is needed by OTG controller drivers, where it helps meet HNP protocol timing requirements for starting a port reset. **Return** 0 if successful.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj}lh]”hŒ Parameters”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj{lubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mw hjwlubjD)�”}”(hhh]”(jI)�”}”(hŒ9``struct usb_bus *bus`` the bus (must use hcd framework) ”h]”(jO)�”}”(hŒ``struct usb_bus *bus``”h]”jÑ)�”}”(hjœlh]”hŒstruct usb_bus *bus”…”�”}”(hjžlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjšlubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mt hj–lubji)�”}”(hhh]”hë)�”}”(hŒ the bus (must use hcd framework)”h]”hŒ the bus (must use hcd framework)”…”�”}”(hjµlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j±lh´Mt hj²lubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj–lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j±lh´Mt hj“lubjI)�”}”(hŒD``unsigned port_num`` 1-based number of port; usually bus->otg_port ”h]”(jO)�”}”(hŒ``unsigned port_num``”h]”jÑ)�”}”(hjÕlh]”hŒunsigned port_num”…”�”}”(hj×lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÓlubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mu hjÏlubji)�”}”(hhh]”hë)�”}”(hŒ-1-based number of port; usually bus->otg_port”h]”hŒ-1-based number of port; usually bus->otg_port”…”�”}”(hjîlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jêlh´Mu hjëlubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÏlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jêlh´Mu hj“lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjwlubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjmh]”hŒContext”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mw hjwlubhë)�”}”(hŒatomic”h]”hŒatomic”…”�”}”(hj&mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mv hjwlubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj7mh]”hŒ Description”…”�”}”(hj9mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj5mubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mx hjwlubhë)�”}”(hŒïStarts enumeration, with an immediate reset followed later by hub_wq identifying and possibly configuring the device. This is needed by OTG controller drivers, where it helps meet HNP protocol timing requirements for starting a port reset.”h]”hŒïStarts enumeration, with an immediate reset followed later by hub_wq identifying and possibly configuring the device. This is needed by OTG controller drivers, where it helps meet HNP protocol timing requirements for starting a port reset.”…”�”}”(hjMmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mw hjwlubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj^mh]”hŒReturn”…”�”}”(hj`mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj\mubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M| hjwlubhë)�”}”(hŒ0 if successful.”h]”hŒ0 if successful.”…”�”}”(hjtmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M} hjwlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_hcd_irq (C function)”Œc.usb_core.usb_hcd_irq”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ.irqreturn_t usb_hcd_irq (int irq, void *__hcd)”h]”j+)�”}”(hŒ-irqreturn_t usb_hcd_irq(int irq, void *__hcd)”h]”(h)�”}”(hhh]”jŠ)�”}”(hŒ irqreturn_t”h]”hŒ irqreturn_t”…”�”}”(hj¦mh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj£mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j¨mŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒ usb_hcd_irq”sbŒc.usb_core.usb_hcd_irq”†”esbuh1hhjŸmh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mš ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉmh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjŸmh²hh³jÈmh´Mš ubj„)�”}”(hŒ usb_hcd_irq”h]”jŠ)�”}”(hjÅmh]”hŒ usb_hcd_irq”…”�”}”(hjÛmh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj×mubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjŸmh²hh³jÈmh´Mš ubj¥)�”}”(hŒ(int irq, void *__hcd)”h]”(j«)�”}”(hŒint irq”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjömh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjòmubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjòmubjŠ)�”}”(hŒirq”h]”hŒirq”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjòmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjîmubj«)�”}”(hŒ void *__hcd”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj'nubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9nh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj'nubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjGnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj'nubjŠ)�”}”(hŒ__hcd”h]”hŒ__hcd”…”�”}”(hjTnh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj'nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjîmubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjŸmh²hh³jÈmh´Mš ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj›mh²hh³jÈmh´Mš ubah}”(h]”j–mah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÈmh´Mš hj˜mh²hubjü)�”}”(hhh]”hë)�”}”(hŒ%hook IRQs to HCD framework (bus glue)”h]”hŒ%hook IRQs to HCD framework (bus glue)”…”�”}”(hj~nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mš hj{nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj˜mh²hh³jÈmh´Mš ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj–njj–nj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX>**Parameters** ``int irq`` the IRQ being raised ``void *__hcd`` pointer to the HCD whose IRQ is being signaled **Description** If the controller isn't HALTed, calls the driver's irq handler. Checks whether the controller is now dead. **Return** ``IRQ_HANDLED`` if the IRQ was handled. ``IRQ_NONE`` otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj nh]”hŒ Parameters”…”�”}”(hj¢nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjžnubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mž hjšnubjD)�”}”(hhh]”(jI)�”}”(hŒ!``int irq`` the IRQ being raised ”h]”(jO)�”}”(hŒ ``int irq``”h]”jÑ)�”}”(hj¿nh]”hŒint irq”…”�”}”(hjÁnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj½nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M› hj¹nubji)�”}”(hhh]”hë)�”}”(hŒthe IRQ being raised”h]”hŒthe IRQ being raised”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÔnh´M› hjÕnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¹nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÔnh´M› hj¶nubjI)�”}”(hŒ?``void *__hcd`` pointer to the HCD whose IRQ is being signaled ”h]”(jO)�”}”(hŒ``void *__hcd``”h]”jÑ)�”}”(hjønh]”hŒ void *__hcd”…”�”}”(hjúnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjönubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mœ hjònubji)�”}”(hhh]”hë)�”}”(hŒ.pointer to the HCD whose IRQ is being signaled”h]”hŒ.pointer to the HCD whose IRQ is being signaled”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j oh´Mœ hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjònubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j oh´Mœ hj¶nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjšnubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj3oh]”hŒ Description”…”�”}”(hj5oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj1oubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mž hjšnubhë)�”}”(hŒjIf the controller isn't HALTed, calls the driver's irq handler. Checks whether the controller is now dead.”h]”hŒnIf the controller isn’t HALTed, calls the driver’s irq handler. Checks whether the controller is now dead.”…”�”}”(hjIoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M� hjšnubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjZoh]”hŒReturn”…”�”}”(hj\oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjXoubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M  hjšnubhë)�”}”(hŒ?``IRQ_HANDLED`` if the IRQ was handled. ``IRQ_NONE`` otherwise.”h]”(jÑ)�”}”(hŒ``IRQ_HANDLED``”h]”hŒ IRQ_HANDLED”…”�”}”(hjtoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjpoubhŒ if the IRQ was handled. ”…”�”}”(hjpoh²hh³Nh´NubjÑ)�”}”(hŒ ``IRQ_NONE``”h]”hŒIRQ_NONE”…”�”}”(hj†oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjpoubhŒ otherwise.”…”�”}”(hjpoh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M¡ hjšnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_hc_died (C function)”Œc.usb_core.usb_hc_died”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ&void usb_hc_died (struct usb_hcd *hcd)”h]”j+)�”}”(hŒ%void usb_hc_died(struct usb_hcd *hcd)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¿oh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj»oh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mà ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎoh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj»oh²hh³jÍoh´Mà ubj„)�”}”(hŒ usb_hc_died”h]”jŠ)�”}”(hŒ usb_hc_died”h]”hŒ usb_hc_died”…”�”}”(hjàoh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÜoubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj»oh²hh³jÍoh´Mà ubj¥)�”}”(hŒ(struct usb_hcd *hcd)”h]”j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjüoh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjøoubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjøoubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jpŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjâosbŒc.usb_core.usb_hc_died”†”esbuh1hhjøoubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;ph²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjøoubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjIph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjøoubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjVph²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjøoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjôoubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj»oh²hh³jÍoh´Mà ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj·oh²hh³jÍoh´Mà ubah}”(h]”j²oah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÍoh´Mà hj´oh²hubjü)�”}”(hhh]”hë)�”}”(hŒ8report abnormal shutdown of a host controller (bus glue)”h]”hŒ8report abnormal shutdown of a host controller (bus glue)”…”�”}”(hj€ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mà hj}ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj´oh²hh³jÍoh´Mà ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj˜pjj˜pj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXp**Parameters** ``struct usb_hcd *hcd`` pointer to the HCD representing the controller **Description** This is called by bus glue to report a USB host controller that died while operations may still have been pending. It's called automatically by the PCI glue, so only glue for non-PCI busses should need to call it. Only call this function with the primary HCD.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¢ph]”hŒ Parameters”…”�”}”(hj¤ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj pubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÇ hjœpubjD)�”}”(hhh]”jI)�”}”(hŒG``struct usb_hcd *hcd`` pointer to the HCD representing the controller ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjÁph]”hŒstruct usb_hcd *hcd”…”�”}”(hjÃph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¿pubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÄ hj»pubji)�”}”(hhh]”hë)�”}”(hŒ.pointer to the HCD representing the controller”h]”hŒ.pointer to the HCD representing the controller”…”�”}”(hjÚph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÖph´MÄ hj×pubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj»pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÖph´MÄ hj¸pubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjœpubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjüph]”hŒ Description”…”�”}”(hjþph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjúpubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÆ hjœpubhë)�”}”(hŒÖThis is called by bus glue to report a USB host controller that died while operations may still have been pending. It's called automatically by the PCI glue, so only glue for non-PCI busses should need to call it.”h]”hŒØThis is called by bus glue to report a USB host controller that died while operations may still have been pending. It’s called automatically by the PCI glue, so only glue for non-PCI busses should need to call it.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÅ hjœpubhë)�”}”(hŒ-Only call this function with the primary HCD.”h]”hŒ-Only call this function with the primary HCD.”…”�”}”(hj!qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÉ hjœpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ+usb_core.usb_create_shared_hcd (C function)”Œ c.usb_core.usb_create_shared_hcd”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒŽstruct usb_hcd * usb_create_shared_hcd (const struct hc_driver *driver, struct device *dev, const char *bus_name, struct usb_hcd *primary_hcd)”h]”j+)�”}”(hŒŒstruct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver, struct device *dev, const char *bus_name, struct usb_hcd *primary_hcd)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjPqh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjLqh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M< ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^qh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjLqh²hh³j]qh´M< ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjoqh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjlqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jqqŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_create_shared_hcd”sbŒ c.usb_core.usb_create_shared_hcd”†”esbuh1hhjLqh²hh³j]qh´M< ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘qh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjLqh²hh³j]qh´M< ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjŸqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjLqh²hh³j]qh´M< ubj„)�”}”(hŒusb_create_shared_hcd”h]”jŠ)�”}”(hjŽqh]”hŒusb_create_shared_hcd”…”�”}”(hj°qh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¬qubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjLqh²hh³j]qh´M< ubj¥)�”}”(hŒg(const struct hc_driver *driver, struct device *dev, const char *bus_name, struct usb_hcd *primary_hcd)”h]”(j«)�”}”(hŒconst struct hc_driver *driver”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjËqh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÇqubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØqh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÇqubj1)�”}”(hjh]”hŒstruct”…”�”}”(hjæqh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÇqubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóqh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÇqubh)�”}”(hhh]”jŠ)�”}”(hŒ hc_driver”h]”hŒ hc_driver”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jrŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jŒqŒ c.usb_core.usb_create_shared_hcd”†”esbuh1hhjÇqubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#rh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÇqubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj1rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÇqubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj>rh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÇqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÃqubj«)�”}”(hŒstruct device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjWrh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjSrubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdrh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjSrubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjurh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjrrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jwrŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jŒqŒ c.usb_core.usb_create_shared_hcd”†”esbuh1hhjSrubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”rh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjSrubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¢rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjSrubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¯rh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjSrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÃqubj«)�”}”(hŒconst char *bus_name”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjÈrh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÄrubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕrh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÄrubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjãrh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÄrubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñrh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÄrubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÿrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÄrubjŠ)�”}”(hŒbus_name”h]”hŒbus_name”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÄrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÃqubj«)�”}”(hŒstruct usb_hcd *primary_hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj%sh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj!subjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2sh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj!subh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjCsh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj@subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jEsŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jŒqŒ c.usb_core.usb_create_shared_hcd”†”esbuh1hhj!subjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbsh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj!subjs)�”}”(hjvh]”hŒ*”…”�”}”(hjpsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj!subjŠ)�”}”(hŒ primary_hcd”h]”hŒ primary_hcd”…”�”}”(hj}sh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj!subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjÃqubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjLqh²hh³j]qh´M< ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjHqh²hh³j]qh´M< ubah}”(h]”jCqah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j]qh´M< hjEqh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&create and initialize an HCD structure”h]”hŒ&create and initialize an HCD structure”…”�”}”(hj§sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M< hj¤sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjEqh²hh³j]qh´M< ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj¿sjj¿sj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXÑ**Parameters** ``const struct hc_driver *driver`` HC driver that will use this hcd ``struct device *dev`` device for this HC, stored in hcd->self.controller ``const char *bus_name`` value to store in hcd->self.bus_name ``struct usb_hcd *primary_hcd`` a pointer to the usb_hcd structure that is sharing the PCI device. Only allocate certain resources for the primary HCD **Context** task context, might sleep. **Description** Allocate a struct usb_hcd, with extra space at the end for the HC driver's private data. Initialize the generic members of the hcd structure. **Return** On success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ``NULL``.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjÉsh]”hŒ Parameters”…”�”}”(hjËsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÇsubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M@ hjÃsubjD)�”}”(hhh]”(jI)�”}”(hŒD``const struct hc_driver *driver`` HC driver that will use this hcd ”h]”(jO)�”}”(hŒ"``const struct hc_driver *driver``”h]”jÑ)�”}”(hjèsh]”hŒconst struct hc_driver *driver”…”�”}”(hjêsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjæsubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M= hjâsubji)�”}”(hhh]”hë)�”}”(hŒ HC driver that will use this hcd”h]”hŒ HC driver that will use this hcd”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jýsh´M= hjþsubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjâsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jýsh´M= hjßsubjI)�”}”(hŒJ``struct device *dev`` device for this HC, stored in hcd->self.controller ”h]”(jO)�”}”(hŒ``struct device *dev``”h]”jÑ)�”}”(hj!th]”hŒstruct device *dev”…”�”}”(hj#th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M> hjtubji)�”}”(hhh]”hë)�”}”(hŒ2device for this HC, stored in hcd->self.controller”h]”hŒ2device for this HC, stored in hcd->self.controller”…”�”}”(hj:th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j6th´M> hj7tubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j6th´M> hjßsubjI)�”}”(hŒ>``const char *bus_name`` value to store in hcd->self.bus_name ”h]”(jO)�”}”(hŒ``const char *bus_name``”h]”jÑ)�”}”(hjZth]”hŒconst char *bus_name”…”�”}”(hj\th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjXtubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M? hjTtubji)�”}”(hhh]”hë)�”}”(hŒ$value to store in hcd->self.bus_name”h]”hŒ$value to store in hcd->self.bus_name”…”�”}”(hjsth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³joth´M? hjptubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjTtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³joth´M? hjßsubjI)�”}”(hŒ˜``struct usb_hcd *primary_hcd`` a pointer to the usb_hcd structure that is sharing the PCI device. Only allocate certain resources for the primary HCD ”h]”(jO)�”}”(hŒ``struct usb_hcd *primary_hcd``”h]”jÑ)�”}”(hj“th]”hŒstruct usb_hcd *primary_hcd”…”�”}”(hj•th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj‘tubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MA hj�tubji)�”}”(hhh]”hë)�”}”(hŒwa pointer to the usb_hcd structure that is sharing the PCI device. Only allocate certain resources for the primary HCD”h]”hŒwa pointer to the usb_hcd structure that is sharing the PCI device. Only allocate certain resources for the primary HCD”…”�”}”(hj¬th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M@ hj©tubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¨th´MA hjßsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjÃsubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjÏth]”hŒContext”…”�”}”(hjÑth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÍtubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MC hjÃsubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjåth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MC hjÃsubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjöth]”hŒ Description”…”�”}”(hjøth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjôtubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´ME hjÃsubhë)�”}”(hŒŽAllocate a struct usb_hcd, with extra space at the end for the HC driver's private data. Initialize the generic members of the hcd structure.”h]”hŒ�Allocate a struct usb_hcd, with extra space at the end for the HC driver’s private data. Initialize the generic members of the hcd structure.”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MD hjÃsubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hjuh]”hŒReturn”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MH hjÃsubhë)�”}”(hŒyOn success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ``NULL``.”h]”(hŒpOn success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ”…”�”}”(hj3uh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj;uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj3uubhŒ.”…”�”}”(hj3uh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MI hjÃsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$usb_core.usb_create_hcd (C function)”Œc.usb_core.usb_create_hcd”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒjstruct usb_hcd * usb_create_hcd (const struct hc_driver *driver, struct device *dev, const char *bus_name)”h]”j+)�”}”(hŒhstruct usb_hcd *usb_create_hcd(const struct hc_driver *driver, struct device *dev, const char *bus_name)”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjtuh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjpuh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MU ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚uh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjpuh²hh³j�uh´MU ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj“uh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj�uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j•uŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHŒusb_create_hcd”sbŒc.usb_core.usb_create_hcd”†”esbuh1hhjpuh²hh³j�uh´MU ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµuh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjpuh²hh³j�uh´MU ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÃuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjpuh²hh³j�uh´MU ubj„)�”}”(hŒusb_create_hcd”h]”jŠ)�”}”(hj²uh]”hŒusb_create_hcd”…”�”}”(hjÔuh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÐuubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjpuh²hh³j�uh´MU ubj¥)�”}”(hŒJ(const struct hc_driver *driver, struct device *dev, const char *bus_name)”h]”(j«)�”}”(hŒconst struct hc_driver *driver”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjïuh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjëuubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüuh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjëuubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjëuubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjëuubh)�”}”(hhh]”jŠ)�”}”(hŒ hc_driver”h]”hŒ hc_driver”…”�”}”(hj(vh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj%vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j*vŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j°uŒc.usb_core.usb_create_hcd”†”esbuh1hhjëuubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGvh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjëuubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjUvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjëuubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjbvh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjëuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjçuubj«)�”}”(hŒstruct device *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj{vh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjwvubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆvh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjwvubh)�”}”(hhh]”jŠ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj™vh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj–vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j›vŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j°uŒc.usb_core.usb_create_hcd”†”esbuh1hhjwvubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸vh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjwvubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjÆvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjwvubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÓvh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjwvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjçuubj«)�”}”(hŒconst char *bus_name”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjìvh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjèvubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùvh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjèvubjT)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjèvubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjèvubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj#wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjèvubjŠ)�”}”(hŒbus_name”h]”hŒbus_name”…”�”}”(hj0wh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjèvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjçuubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjpuh²hh³j�uh´MU ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjluh²hh³j�uh´MU ubah}”(h]”jguah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j�uh´MU hjiuh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&create and initialize an HCD structure”h]”hŒ&create and initialize an HCD structure”…”�”}”(hjZwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MU hjWwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjiuh²hh³j�uh´MU ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjrwjjrwj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX4**Parameters** ``const struct hc_driver *driver`` HC driver that will use this hcd ``struct device *dev`` device for this HC, stored in hcd->self.controller ``const char *bus_name`` value to store in hcd->self.bus_name **Context** task context, might sleep. **Description** Allocate a struct usb_hcd, with extra space at the end for the HC driver's private data. Initialize the generic members of the hcd structure. **Return** On success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ``NULL``.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj|wh]”hŒ Parameters”…”�”}”(hj~wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjzwubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MY hjvwubjD)�”}”(hhh]”(jI)�”}”(hŒD``const struct hc_driver *driver`` HC driver that will use this hcd ”h]”(jO)�”}”(hŒ"``const struct hc_driver *driver``”h]”jÑ)�”}”(hj›wh]”hŒconst struct hc_driver *driver”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj™wubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MV hj•wubji)�”}”(hhh]”hë)�”}”(hŒ HC driver that will use this hcd”h]”hŒ HC driver that will use this hcd”…”�”}”(hj´wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j°wh´MV hj±wubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj•wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j°wh´MV hj’wubjI)�”}”(hŒJ``struct device *dev`` device for this HC, stored in hcd->self.controller ”h]”(jO)�”}”(hŒ``struct device *dev``”h]”jÑ)�”}”(hjÔwh]”hŒstruct device *dev”…”�”}”(hjÖwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÒwubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MW hjÎwubji)�”}”(hhh]”hë)�”}”(hŒ2device for this HC, stored in hcd->self.controller”h]”hŒ2device for this HC, stored in hcd->self.controller”…”�”}”(hjíwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jéwh´MW hjêwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÎwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jéwh´MW hj’wubjI)�”}”(hŒ>``const char *bus_name`` value to store in hcd->self.bus_name ”h]”(jO)�”}”(hŒ``const char *bus_name``”h]”jÑ)�”}”(hj xh]”hŒconst char *bus_name”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj xubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MX hjxubji)�”}”(hhh]”hë)�”}”(hŒ$value to store in hcd->self.bus_name”h]”hŒ$value to store in hcd->self.bus_name”…”�”}”(hj&xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j"xh´MX hj#xubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j"xh´MX hj’wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjvwubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjHxh]”hŒContext”…”�”}”(hjJxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjFxubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MZ hjvwubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hj^xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MZ hjvwubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjoxh]”hŒ Description”…”�”}”(hjqxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjmxubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M\ hjvwubhë)�”}”(hŒŽAllocate a struct usb_hcd, with extra space at the end for the HC driver's private data. Initialize the generic members of the hcd structure.”h]”hŒ�Allocate a struct usb_hcd, with extra space at the end for the HC driver’s private data. Initialize the generic members of the hcd structure.”…”�”}”(hj…xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M[ hjvwubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj–xh]”hŒReturn”…”�”}”(hj˜xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj”xubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M_ hjvwubhë)�”}”(hŒyOn success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ``NULL``.”h]”(hŒpOn success, a pointer to the created and initialized HCD structure. On failure (e.g. if memory is unavailable), ”…”�”}”(hj¬xh²hh³Nh´NubjÑ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj´xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¬xubhŒ.”…”�”}”(hj¬xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´M` hjvwubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!usb_core.usb_add_hcd (C function)”Œc.usb_core.usb_add_hcd”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒRint usb_add_hcd (struct usb_hcd *hcd, unsigned int irqnum, unsigned long irqflags)”h]”j+)�”}”(hŒQint usb_add_hcd(struct usb_hcd *hcd, unsigned int irqnum, unsigned long irqflags)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjíxh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjéxh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mé ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüxh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjéxh²hh³jûxh´Mé ubj„)�”}”(hŒ usb_add_hcd”h]”jŠ)�”}”(hŒ usb_add_hcd”h]”hŒ usb_add_hcd”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj yubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjéxh²hh³jûxh´Mé ubj¥)�”}”(hŒB(struct usb_hcd *hcd, unsigned int irqnum, unsigned long irqflags)”h]”(j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj*yh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj&yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7yh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj&yubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjHyh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjEyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jJyŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjysbŒc.usb_core.usb_add_hcd”†”esbuh1hhj&yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiyh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj&yubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjwyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj&yubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hj„yh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj&yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"yubj«)�”}”(hŒunsigned int irqnum”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«yh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™yubjT)�”}”(hŒint”h]”hŒint”…”�”}”(hj¹yh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj™yubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇyh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj™yubjŠ)�”}”(hŒirqnum”h]”hŒirqnum”…”�”}”(hjÕyh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj™yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"yubj«)�”}”(hŒunsigned long irqflags”h]”(jT)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjîyh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêyubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüyh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêyubjT)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjêyubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjêyubjŠ)�”}”(hŒirqflags”h]”hŒirqflags”…”�”}”(hj&zh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjêyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj"yubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjéxh²hh³jûxh´Mé ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjåxh²hh³jûxh´Mé ubah}”(h]”jàxah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jûxh´Mé hjâxh²hubjü)�”}”(hhh]”hë)�”}”(hŒ8finish generic HCD structure initialization and register”h]”hŒ8finish generic HCD structure initialization and register”…”�”}”(hjPzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mé hjMzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjâxh²hh³jûxh´Mé ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjhzjjhzj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hX‰**Parameters** ``struct usb_hcd *hcd`` the usb_hcd structure to initialize ``unsigned int irqnum`` Interrupt line to allocate ``unsigned long irqflags`` Interrupt type flags **Description** Finish the remaining parts of generic HCD initialization: allocate the buffers of consistent memory, register the bus, request the IRQ line, and call the driver's reset() and start() routines.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjrzh]”hŒ Parameters”…”�”}”(hjtzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjpzubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mí hjlzubjD)�”}”(hhh]”(jI)�”}”(hŒ<``struct usb_hcd *hcd`` the usb_hcd structure to initialize ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hj‘zh]”hŒstruct usb_hcd *hcd”…”�”}”(hj“zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj�zubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mê hj‹zubji)�”}”(hhh]”hë)�”}”(hŒ#the usb_hcd structure to initialize”h]”hŒ#the usb_hcd structure to initialize”…”�”}”(hjªzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j¦zh´Mê hj§zubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj‹zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j¦zh´Mê hjˆzubjI)�”}”(hŒ3``unsigned int irqnum`` Interrupt line to allocate ”h]”(jO)�”}”(hŒ``unsigned int irqnum``”h]”jÑ)�”}”(hjÊzh]”hŒunsigned int irqnum”…”�”}”(hjÌzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÈzubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Më hjÄzubji)�”}”(hhh]”hë)�”}”(hŒInterrupt line to allocate”h]”hŒInterrupt line to allocate”…”�”}”(hjãzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jßzh´Më hjàzubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÄzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jßzh´Më hjˆzubjI)�”}”(hŒ0``unsigned long irqflags`` Interrupt type flags ”h]”(jO)�”}”(hŒ``unsigned long irqflags``”h]”jÑ)�”}”(hj{h]”hŒunsigned long irqflags”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mì hjýzubji)�”}”(hhh]”hë)�”}”(hŒInterrupt type flags”h]”hŒInterrupt type flags”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³j{h´Mì hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjýzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³j{h´Mì hjˆzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjlzubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj>{h]”hŒ Description”…”�”}”(hj@{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj<{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mî hjlzubhë)�”}”(hŒÀFinish the remaining parts of generic HCD initialization: allocate the buffers of consistent memory, register the bus, request the IRQ line, and call the driver's reset() and start() routines.”h]”hŒÂFinish the remaining parts of generic HCD initialization: allocate the buffers of consistent memory, register the bus, request the IRQ line, and call the driver’s reset() and start() routines.”…”�”}”(hjT{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´Mí hjlzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ$usb_core.usb_remove_hcd (C function)”Œc.usb_core.usb_remove_hcd”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ)void usb_remove_hcd (struct usb_hcd *hcd)”h]”j+)�”}”(hŒ(void usb_remove_hcd(struct usb_hcd *hcd)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒ{h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj{h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÌ ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’{h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj{h²hh³j‘{h´MÌ ubj„)�”}”(hŒusb_remove_hcd”h]”jŠ)�”}”(hŒusb_remove_hcd”h]”hŒusb_remove_hcd”…”�”}”(hj¤{h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj {ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj{h²hh³j‘{h´MÌ ubj¥)�”}”(hŒ(struct usb_hcd *hcd)”h]”j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÀ{h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj¼{ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ{h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¼{ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hjÞ{h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÛ{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jà{Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj¦{sbŒc.usb_core.usb_remove_hcd”†”esbuh1hhj¼{ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ{h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¼{ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj¼{ubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¼{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj¸{ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj{h²hh³j‘{h´MÌ ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj{{h²hh³j‘{h´MÌ ubah}”(h]”jv{ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j‘{h´MÌ hjx{h²hubjü)�”}”(hhh]”hë)�”}”(hŒ$shutdown processing for generic HCDs”h]”hŒ$shutdown processing for generic HCDs”…”�”}”(hjD|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÌ hjA|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjx{h²hh³j‘{h´MÌ ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj\|jj\|j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hŒì**Parameters** ``struct usb_hcd *hcd`` the usb_hcd structure to remove **Context** task context, might sleep. **Description** Disconnects the root hub, then reverses the effects of usb_add_hcd(), invoking the HCD's stop() method.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjf|h]”hŒ Parameters”…”�”}”(hjh|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjd|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÐ hj`|ubjD)�”}”(hhh]”jI)�”}”(hŒ8``struct usb_hcd *hcd`` the usb_hcd structure to remove ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hj…|h]”hŒstruct usb_hcd *hcd”…”�”}”(hj‡|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjƒ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÍ hj|ubji)�”}”(hhh]”hë)�”}”(hŒthe usb_hcd structure to remove”h]”hŒthe usb_hcd structure to remove”…”�”}”(hjž|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jš|h´MÍ hj›|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jš|h´MÍ hj||ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj`|ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hjÀ|h]”hŒContext”…”�”}”(hjÂ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¾|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÏ hj`|ubhë)�”}”(hŒtask context, might sleep.”h]”hŒtask context, might sleep.”…”�”}”(hjÖ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÏ hj`|ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjç|h]”hŒ Description”…”�”}”(hjé|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjå|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÑ hj`|ubhë)�”}”(hŒgDisconnects the root hub, then reverses the effects of usb_add_hcd(), invoking the HCD's stop() method.”h]”hŒiDisconnects the root hub, then reverses the effects of usb_add_hcd(), invoking the HCD’s stop() method.”…”�”}”(hjý|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³ŒZ/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:206: ./drivers/usb/core/hcd.c”h´MÐ hj`|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.usb_hcd_pci_probe (C function)”Œc.usb_core.usb_hcd_pci_probe”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒKint usb_hcd_pci_probe (struct pci_dev *dev, const struct hc_driver *driver)”•h]”j+)�”}”(hŒJint usb_hcd_pci_probe(struct pci_dev *dev, const struct hc_driver *driver)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hj,}h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj(}h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´KžubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj(}h²hh³j:}h´Kžubj„)�”}”(hŒusb_hcd_pci_probe”h]”jŠ)�”}”(hŒusb_hcd_pci_probe”h]”hŒusb_hcd_pci_probe”…”�”}”(hjM}h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjI}ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj(}h²hh³j:}h´Kžubj¥)�”}”(hŒ5(struct pci_dev *dev, const struct hc_driver *driver)”h]”(j«)�”}”(hŒstruct pci_dev *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hji}h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hje}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhje}ubh)�”}”(hhh]”jŠ)�”}”(hŒpci_dev”h]”hŒpci_dev”…”�”}”(hj‡}h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj„}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j‰}Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjO}sbŒc.usb_core.usb_hcd_pci_probe”†”esbuh1hhje}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhje}ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj¶}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhje}ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÃ}h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hje}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhja}ubj«)�”}”(hŒconst struct hc_driver *driver”h]”(j1)�”}”(hj4h]”hŒconst”…”�”}”(hjÜ}h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjØ}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé}h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjØ}ubj1)�”}”(hjh]”hŒstruct”…”�”}”(hj÷}h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjØ}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjØ}ubh)�”}”(hhh]”jŠ)�”}”(hŒ hc_driver”h]”hŒ hc_driver”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j~Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”j¤}Œc.usb_core.usb_hcd_pci_probe”†”esbuh1hhjØ}ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4~h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjØ}ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjB~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjØ}ubjŠ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjO~h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjØ}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhja}ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj(}h²hh³j:}h´Kžubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj$}h²hh³j:}h´Kžubah}”(h]”j}ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j:}h´Kžhj!}h²hubjü)�”}”(hhh]”hë)�”}”(hŒinitialize PCI-based HCDs”h]”hŒinitialize PCI-based HCDs”…”�”}”(hjy~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´Kžhjv~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj!}h²hh³j:}h´Kžubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj‘~jj‘~j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXÅ**Parameters** ``struct pci_dev *dev`` USB Host Controller being probed ``const struct hc_driver *driver`` USB HC driver handle **Context** task context, might sleep **Description** Allocates basic PCI resources for this USB host controller, and then invokes the start() method for the HCD associated with it through the hotplug entry's driver_data. Store this function in the HCD's struct pci_driver as probe(). **Return** 0 if successful.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj›~h]”hŒ Parameters”…”�”}”(hj�~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj™~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K¢hj•~ubjD)�”}”(hhh]”(jI)�”}”(hŒ9``struct pci_dev *dev`` USB Host Controller being probed ”h]”(jO)�”}”(hŒ``struct pci_dev *dev``”h]”jÑ)�”}”(hjº~h]”hŒstruct pci_dev *dev”…”�”}”(hj¼~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¸~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´KŸhj´~ubji)�”}”(hhh]”hë)�”}”(hŒ USB Host Controller being probed”h]”hŒ USB Host Controller being probed”…”�”}”(hjÓ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÏ~h´KŸhjÐ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj´~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÏ~h´KŸhj±~ubjI)�”}”(hŒ8``const struct hc_driver *driver`` USB HC driver handle ”h]”(jO)�”}”(hŒ"``const struct hc_driver *driver``”h]”jÑ)�”}”(hjó~h]”hŒconst struct hc_driver *driver”…”�”}”(hjõ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjñ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K hjí~ubji)�”}”(hhh]”hë)�”}”(hŒUSB HC driver handle”h]”hŒUSB HC driver handle”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jh´K hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjí~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jh´K hj±~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj•~ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj.h]”hŒContext”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K¢hj•~ubhë)�”}”(hŒtask context, might sleep”h]”hŒtask context, might sleep”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K¢hj•~ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjUh]”hŒ Description”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K¤hj•~ubhë)�”}”(hŒ§Allocates basic PCI resources for this USB host controller, and then invokes the start() method for the HCD associated with it through the hotplug entry's driver_data.”h]”hŒ©Allocates basic PCI resources for this USB host controller, and then invokes the start() method for the HCD associated with it through the hotplug entry’s driver_data.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K£hj•~ubhë)�”}”(hŒ>Store this function in the HCD's struct pci_driver as probe().”h]”hŒ@Store this function in the HCD’s struct pci_driver as probe().”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K§hj•~ubhë)�”}”(hŒ **Return**”h]”j.)�”}”(hj‹h]”hŒReturn”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´K©hj•~ubhë)�”}”(hŒ0 if successful.”h]”hŒ0 if successful.”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´Kªhj•~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.usb_hcd_pci_remove (C function)”Œc.usb_core.usb_hcd_pci_remove”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ-void usb_hcd_pci_remove (struct pci_dev *dev)”h]”j+)�”}”(hŒ,void usb_hcd_pci_remove(struct pci_dev *dev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÌh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M,ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÌh²hh³jÞh´M,ubj„)�”}”(hŒusb_hcd_pci_remove”h]”jŠ)�”}”(hŒusb_hcd_pci_remove”h]”hŒusb_hcd_pci_remove”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjíubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjÌh²hh³jÞh´M,ubj¥)�”}”(hŒ(struct pci_dev *dev)”h]”j«)�”}”(hŒstruct pci_dev *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hj €ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj €ubh)�”}”(hhh]”jŠ)�”}”(hŒpci_dev”h]”hŒpci_dev”…”�”}”(hj+€h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj(€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j-€Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjósbŒc.usb_core.usb_hcd_pci_remove”†”esbuh1hhj €ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL€h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj €ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjZ€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhj €ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjg€h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj €ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj€ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjÌh²hh³jÞh´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÈh²hh³jÞh´M,ubah}”(h]”jÃah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÞh´M,hjÅh²hubjü)�”}”(hhh]”hë)�”}”(hŒ&shutdown processing for PCI-based HCDs”h]”hŒ&shutdown processing for PCI-based HCDs”…”�”}”(hj‘€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M,hjŽ€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÅh²hh³jÞh´M,ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj©€jj©€j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXv**Parameters** ``struct pci_dev *dev`` USB Host Controller being removed **Context** task context, might sleep **Description** Reverses the effect of usb_hcd_pci_probe(), first invoking the HCD's stop() method. It is always called from a thread context, normally "rmmod", "apmd", or something similar. Store this function in the HCD's struct pci_driver as remove().”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj³€h]”hŒ Parameters”…”�”}”(hjµ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj±€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M0hj­€ubjD)�”}”(hhh]”jI)�”}”(hŒ:``struct pci_dev *dev`` USB Host Controller being removed ”h]”(jO)�”}”(hŒ``struct pci_dev *dev``”h]”jÑ)�”}”(hjÒ€h]”hŒstruct pci_dev *dev”…”�”}”(hjÔ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЀubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M-hjÌ€ubji)�”}”(hhh]”hë)�”}”(hŒ!USB Host Controller being removed”h]”hŒ!USB Host Controller being removed”…”�”}”(hjë€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jç€h´M-hjè€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÌ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jç€h´M-hjÉ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj­€ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj �h]”hŒContext”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M/hj­€ubhë)�”}”(hŒtask context, might sleep”h]”hŒtask context, might sleep”…”�”}”(hj#�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M/hj­€ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj4�h]”hŒ Description”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj2�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M1hj­€ubhë)�”}”(hŒ¯Reverses the effect of usb_hcd_pci_probe(), first invoking the HCD's stop() method. It is always called from a thread context, normally "rmmod", "apmd", or something similar.”h]”hŒ¹Reverses the effect of usb_hcd_pci_probe(), first invoking the HCD’s stop() method. It is always called from a thread context, normally “rmmodâ€�, “apmdâ€�, or something similar.”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M0hj­€ubhë)�”}”(hŒ?Store this function in the HCD's struct pci_driver as remove().”h]”hŒAStore this function in the HCD’s struct pci_driver as remove().”…”�”}”(hjY�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´M4hj­€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ*usb_core.usb_hcd_pci_shutdown (C function)”Œc.usb_core.usb_hcd_pci_shutdown”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ/void usb_hcd_pci_shutdown (struct pci_dev *dev)”h]”j+)�”}”(hŒ.void usb_hcd_pci_shutdown(struct pci_dev *dev)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjˆ�h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj„�h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´MdubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj„�h²hh³j–�h´Mdubj„)�”}”(hŒusb_hcd_pci_shutdown”h]”jŠ)�”}”(hŒusb_hcd_pci_shutdown”h]”hŒusb_hcd_pci_shutdown”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj¥�ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj„�h²hh³j–�h´Mdubj¥)�”}”(hŒ(struct pci_dev *dev)”h]”j«)�”}”(hŒstruct pci_dev *dev”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjÁ�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÁ�ubh)�”}”(hhh]”jŠ)�”}”(hŒpci_dev”h]”hŒpci_dev”…”�”}”(hjã�h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjà�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jå�Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHj«�sbŒc.usb_core.usb_hcd_pci_shutdown”†”esbuh1hhjÁ�ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjÁ�ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjÁ�ubjŠ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjÁ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhj½�ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj„�h²hh³j–�h´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj€�h²hh³j–�h´Mdubah}”(h]”j{�ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³j–�h´Mdhj}�h²hubjü)�”}”(hhh]”hë)�”}”(hŒshutdown host controller”h]”hŒshutdown host controller”…”�”}”(hjI‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´MdhjF‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj}�h²hh³j–�h´Mdubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjja‚jja‚j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hŒL**Parameters** ``struct pci_dev *dev`` USB Host Controller being shutdown”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjk‚h]”hŒ Parameters”…”�”}”(hjm‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hji‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´Mhhje‚ubjD)�”}”(hhh]”jI)�”}”(hŒ:``struct pci_dev *dev`` USB Host Controller being shutdown”h]”(jO)�”}”(hŒ``struct pci_dev *dev``”h]”jÑ)�”}”(hjŠ‚h]”hŒstruct pci_dev *dev”…”�”}”(hjŒ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjˆ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´Mjhj„‚ubji)�”}”(hhh]”hë)�”}”(hŒ"USB Host Controller being shutdown”h]”hŒ"USB Host Controller being shutdown”…”�”}”(hj£‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:209: ./drivers/usb/core/hcd-pci.c”h´Mehj ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj„‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jŸ‚h´Mjhj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChje‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ'usb_core.hcd_buffer_create (C function)”Œc.usb_core.hcd_buffer_create”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ+int hcd_buffer_create (struct usb_hcd *hcd)”h]”j+)�”}”(hŒ*int hcd_buffer_create(struct usb_hcd *hcd)”h]”(jT)�”}”(hŒint”h]”hŒint”…”�”}”(hjä‚h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjà‚h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K4ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó‚h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjà‚h²hh³jò‚h´K4ubj„)�”}”(hŒhcd_buffer_create”h]”jŠ)�”}”(hŒhcd_buffer_create”h]”hŒhcd_buffer_create”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjƒubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhjà‚h²hh³jò‚h´K4ubj¥)�”}”(hŒ(struct usb_hcd *hcd)”h]”j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj!ƒh²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjƒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ƒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjƒubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj?ƒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj<ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”jAƒŒmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjƒsbŒc.usb_core.hcd_buffer_create”†”esbuh1hhjƒubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`ƒh²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjƒubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjnƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjƒubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hj{ƒh²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjƒubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hjà‚h²hh³jò‚h´K4ubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhjÜ‚h²hh³jò‚h´K4ubah}”(h]”jׂah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jò‚h´K4hjÙ‚h²hubjü)�”}”(hhh]”hë)�”}”(hŒinitialize buffer pools”h]”hŒinitialize buffer pools”…”�”}”(hj¥ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K4hj¢ƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhjÙ‚h²hh³jò‚h´K4ubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjj½ƒjj½ƒj ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hXÙ**Parameters** ``struct usb_hcd *hcd`` the bus whose buffer pools are to be initialized **Context** task context, might sleep **Description** Call this as part of initializing a host controller that uses the dma memory allocators. It initializes some pools of dma-coherent memory that will be shared by all drivers using that controller. Call hcd_buffer_destroy() to clean up after using those pools. **Return** 0 if successful. A negative errno value otherwise.”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hjǃh]”hŒ Parameters”…”�”}”(hjɃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjŃubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K8hjÁƒubjD)�”}”(hhh]”jI)�”}”(hŒI``struct usb_hcd *hcd`` the bus whose buffer pools are to be initialized ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjæƒh]”hŒstruct usb_hcd *hcd”…”�”}”(hjèƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjäƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K5hjàƒubji)�”}”(hhh]”hë)�”}”(hŒ0the bus whose buffer pools are to be initialized”h]”hŒ0the bus whose buffer pools are to be initialized”…”�”}”(hjÿƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jûƒh´K5hjüƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjàƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jûƒh´K5hj݃ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÁƒubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj!„h]”hŒContext”…”�”}”(hj#„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K7hjÁƒubhë)�”}”(hŒtask context, might sleep”h]”hŒtask context, might sleep”…”�”}”(hj7„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K7hjÁƒubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hjH„h]”hŒ Description”…”�”}”(hjJ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjF„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K9hjÁƒubhë)�”}”(hŒÄCall this as part of initializing a host controller that uses the dma memory allocators. It initializes some pools of dma-coherent memory that will be shared by all drivers using that controller.”h]”hŒÄCall this as part of initializing a host controller that uses the dma memory allocators. It initializes some pools of dma-coherent memory that will be shared by all drivers using that controller.”…”�”}”(hj^„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K8hjÁƒubhë)�”}”(hŒ>Call hcd_buffer_destroy() to clean up after using those pools.”h]”hŒ>Call hcd_buffer_destroy() to clean up after using those pools.”…”�”}”(hjm„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´KhjÁƒubhë)�”}”(hŒ20 if successful. A negative errno value otherwise.”h]”hŒ20 if successful. A negative errno value otherwise.”…”�”}”(hj”„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K?hjÁƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ(usb_core.hcd_buffer_destroy (C function)”Œc.usb_core.hcd_buffer_destroy”hNt”auh1jhjTh²hh³Nh´Nubj )�”}”(hhh]”(j%)�”}”(hŒ-void hcd_buffer_destroy (struct usb_hcd *hcd)”h]”j+)�”}”(hŒ,void hcd_buffer_destroy(struct usb_hcd *hcd)”h]”(jT)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¿„h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´KZubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ„h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhj¿„h²hh³jÑ„h´KZubj„)�”}”(hŒhcd_buffer_destroy”h]”jŠ)�”}”(hŒhcd_buffer_destroy”h]”hŒhcd_buffer_destroy”…”�”}”(hjä„h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjà„ubah}”(h]”h ]”(j�jžeh"]”h$]”h&]”j¢j£uh1jƒhj¿„h²hh³jÑ„h´KZubj¥)�”}”(hŒ(struct usb_hcd *hcd)”h]”j«)�”}”(hŒstruct usb_hcd *hcd”h]”(j1)�”}”(hjh]”hŒstruct”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j=ah"]”h$]”h&]”uh1j0hjü„ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjü„ubh)�”}”(hhh]”jŠ)�”}”(hŒusb_hcd”h]”hŒusb_hcd”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hj…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jŒreftype”jHŒ reftarget”j …Œmodname”NŒ classname”NjLjO)�”}”jR]”(j4�N†”jU)�”}”jHjæ„sbŒc.usb_core.hcd_buffer_destroy”†”esbuh1hhjü„ubjC)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?…h²hh³Nh´Nubah}”(h]”h ]”jOah"]”h$]”h&]”uh1jBhjü„ubjs)�”}”(hjvh]”hŒ*”…”�”}”(hjM…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jrhjü„ubjŠ)�”}”(hŒhcd”h]”hŒhcd”…”�”}”(hjZ…h²hh³Nh´Nubah}”(h]”h ]”j–ah"]”h$]”h&]”uh1j‰hjü„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj¢j£uh1jªhjø„ubah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1j¤hj¿„h²hh³jÑ„h´KZubeh}”(h]”h ]”h"]”h$]”h&]”j¢j£jíˆuh1j*jîjïhj»„h²hh³jÑ„h´KZubah}”(h]”j¶„ah ]”(jójôeh"]”h$]”h&]”jøˆjù)júhuh1j$h³jÑ„h´KZhj¸„h²hubjü)�”}”(hhh]”hë)�”}”(hŒdeallocate buffer pools”h]”hŒdeallocate buffer pools”…”�”}”(hj„…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´KZhj�…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jûhj¸„h²hh³jÑ„h´KZubeh}”(h]”h ]”(jŒfunction”eh"]”h$]”h&]”jjjjœ…jjœ…j ‰j!‰j"‰uh1jh²hhjTh³Nh´Nubj$)�”}”(hŒÎ**Parameters** ``struct usb_hcd *hcd`` the bus whose buffer pools are to be destroyed **Context** task context, might sleep **Description** This frees the buffer pools created by hcd_buffer_create().”h]”(hë)�”}”(hŒ**Parameters**”h]”j.)�”}”(hj¦…h]”hŒ Parameters”…”�”}”(hj¨…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj¤…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K^hj …ubjD)�”}”(hhh]”jI)�”}”(hŒG``struct usb_hcd *hcd`` the bus whose buffer pools are to be destroyed ”h]”(jO)�”}”(hŒ``struct usb_hcd *hcd``”h]”jÑ)�”}”(hjÅ…h]”hŒstruct usb_hcd *hcd”…”�”}”(hjÇ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjÃ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K[hj¿…ubji)�”}”(hhh]”hë)�”}”(hŒ.the bus whose buffer pools are to be destroyed”h]”hŒ.the bus whose buffer pools are to be destroyed”…”�”}”(hjÞ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³jÚ…h´K[hjÛ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj¿…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³jÚ…h´K[hj¼…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj …ubhë)�”}”(hŒ **Context**”h]”j.)�”}”(hj†h]”hŒContext”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjþ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K]hj …ubhë)�”}”(hŒtask context, might sleep”h]”hŒtask context, might sleep”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K]hj …ubhë)�”}”(hŒ**Description**”h]”j.)�”}”(hj'†h]”hŒ Description”…”�”}”(hj)†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj%†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K_hj …ubhë)�”}”(hŒ;This frees the buffer pools created by hcd_buffer_create().”h]”hŒ;This frees the buffer pools created by hcd_buffer_create().”…”�”}”(hj=†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/usb/usb:212: ./drivers/usb/core/buffer.c”h´K^hj …ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j#hjTh²hh³Nh´Nubeh}”(h]”Œhost-controller-apis”ah ]”h"]”Œhost controller apis”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KµubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒThe USB character device nodes”h]”hŒThe USB character device nodes”…”�”}”(hj^†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj[†h²hh³hÃh´KØubhë)�”}”(hX.This chapter presents the Linux character device nodes. You may prefer to avoid writing new kernel code for your USB driver. User mode device drivers are usually packaged as applications or libraries, and may use character devices through some programming library that wraps it. Such libraries include:”h]”hX.This chapter presents the Linux character device nodes. You may prefer to avoid writing new kernel code for your USB driver. User mode device drivers are usually packaged as applications or libraries, and may use character devices through some programming library that wraps it. Such libraries include:”…”�”}”(hjl†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´KÚhj[†h²hubjŒ7)�”}”(hŒo- `libusb `__ for C/C++, and - `jUSB `__ for Java. ”h]”j¶)�”}”(hhh]”(j»)�”}”(hŒ9`libusb `__ for C/C++, and”h]”hë)�”}”(hjƒ†h]”(hŒ reference”“”)�”}”(hŒ*`libusb `__”h]”hŒlibusb”…”�”}”(hjІh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œlibusb”Œrefuri”Œhttp://libusb.sourceforge.net”uh1jˆ†hj…†ubhŒ for C/C++, and”…”�”}”(hj…†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kàhj�†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj~†ubj»)�”}”(hŒ1`jUSB `__ for Java. ”h]”hë)�”}”(hŒ0`jUSB `__ for Java.”h]”(j‰†)�”}”(hŒ&`jUSB `__”h]”hŒjUSB”…”�”}”(hj´†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒjUSB”jš†Œhttp://jUSB.sourceforge.net”uh1jˆ†hj°†ubhŒ for Java.”…”�”}”(hj°†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Káhj¬†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj~†ubeh}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´Kàhjz†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³hÃh´Kàhj[†h²hubhë)�”}”(hŒ­Some old information about it can be seen at the "USB Device Filesystem" section of the USB Guide. The latest copy of the USB Guide can be found at http://www.linux-usb.org/”h]”(hŒ˜Some old information about it can be seen at the “USB Device Filesystemâ€� section of the USB Guide. The latest copy of the USB Guide can be found at ”…”�”}”(hjá†h²hh³Nh´Nubj‰†)�”}”(hŒhttp://www.linux-usb.org/”h]”hŒhttp://www.linux-usb.org/”…”�”}”(hjé†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jë†uh1jˆ†hjá†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kãhj[†h²hubhŒnote”“”)�”}”(hX"- They were used to be implemented via *usbfs*, but this is not part of the sysfs debug interface. - This particular documentation is incomplete, especially with respect to the asynchronous mode. As of kernel 2.5.66 the code and this (new) documentation need to be cross-reviewed.”h]”(j¶)�”}”(hhh]”j»)�”}”(hŒaThey were used to be implemented via *usbfs*, but this is not part of the sysfs debug interface. ”h]”hë)�”}”(hŒ`They were used to be implemented via *usbfs*, but this is not part of the sysfs debug interface.”h]”(hŒ%They were used to be implemented via ”…”�”}”(hj ‡h²hh³Nh´Nubj)�”}”(hŒ*usbfs*”h]”hŒusbfs”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ‡ubhŒ4, but this is not part of the sysfs debug interface.”…”�”}”(hj ‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kéhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj‡ubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´Kéhj‡ubjŒ7)�”}”(hŒ¹- This particular documentation is incomplete, especially with respect to the asynchronous mode. As of kernel 2.5.66 the code and this (new) documentation need to be cross-reviewed.”h]”j¶)�”}”(hhh]”j»)�”}”(hŒ³This particular documentation is incomplete, especially with respect to the asynchronous mode. As of kernel 2.5.66 the code and this (new) documentation need to be cross-reviewed.”h]”hë)�”}”(hŒ³This particular documentation is incomplete, especially with respect to the asynchronous mode. As of kernel 2.5.66 the code and this (new) documentation need to be cross-reviewed.”h]”hŒ³This particular documentation is incomplete, especially with respect to the asynchronous mode. As of kernel 2.5.66 the code and this (new) documentation need to be cross-reviewed.”…”�”}”(hjB‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kìhj>‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj;‡ubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´Kìhj7‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³hÃh´Kìhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jþ†hj[†h²hh³hÃh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒWhat files are in "devtmpfs"?”h]”hŒ!What files are in “devtmpfsâ€�?”…”�”}”(hjk‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjh‡h²hh³hÃh´Kñubhë)�”}”(hŒDConventionally mounted at ``/dev/bus/usb/``, usbfs features include:”h]”(hŒConventionally mounted at ”…”�”}”(hjy‡h²hh³Nh´NubjÑ)�”}”(hŒ``/dev/bus/usb/``”h]”hŒ /dev/bus/usb/”…”�”}”(hj�‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjy‡ubhŒ, usbfs features include:”…”�”}”(hjy‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kóhjh‡h²hubj¶)�”}”(hhh]”j»)�”}”(hŒØ``/dev/bus/usb/BBB/DDD`` ... magic files exposing the each device's configuration descriptors, and supporting a series of ioctls for making device requests, including I/O to devices. (Purely for access by programs.) ”h]”hë)�”}”(hŒ×``/dev/bus/usb/BBB/DDD`` ... magic files exposing the each device's configuration descriptors, and supporting a series of ioctls for making device requests, including I/O to devices. (Purely for access by programs.)”h]”(jÑ)�”}”(hŒ``/dev/bus/usb/BBB/DDD``”h]”hŒ/dev/bus/usb/BBB/DDD”…”�”}”(hj¤‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj ‡ubhŒÁ ... magic files exposing the each device’s configuration descriptors, and supporting a series of ioctls for making device requests, including I/O to devices. (Purely for access by programs.)”…”�”}”(hj ‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kõhjœ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhj™‡h²hh³hÃh´Nubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´Kõhjh‡h²hubhë)�”}”(hX}Each bus is given a number (``BBB``) based on when it was enumerated; within each bus, each device is given a similar number (``DDD``). Those ``BBB/DDD`` paths are not "stable" identifiers; expect them to change even if you always leave the devices plugged in to the same hub port. *Don't even think of saving these in application configuration files.* Stable identifiers are available, for user mode applications that want to use them. HID and networking devices expose these stable IDs, so that for example you can be sure that you told the right UPS to power down its second server. Pleast note that it doesn't (yet) expose those IDs.”h]”(hŒEach bus is given a number (”…”�”}”(hjȇh²hh³Nh´NubjÑ)�”}”(hŒ``BBB``”h]”hŒBBB”…”�”}”(hjЇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjȇubhŒ[) based on when it was enumerated; within each bus, each device is given a similar number (”…”�”}”(hjȇh²hh³Nh´NubjÑ)�”}”(hŒ``DDD``”h]”hŒDDD”…”�”}”(hjâ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjȇubhŒ ). Those ”…”�”}”(hjȇh²hh³Nh´NubjÑ)�”}”(hŒ ``BBB/DDD``”h]”hŒBBB/DDD”…”�”}”(hjô‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjȇubhŒ… paths are not “stableâ€� identifiers; expect them to change even if you always leave the devices plugged in to the same hub port. ”…”�”}”(hjȇh²hh³Nh´Nubj)�”}”(hŒF*Don't even think of saving these in application configuration files.*”h]”hŒFDon’t even think of saving these in application configuration files.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjȇubhX Stable identifiers are available, for user mode applications that want to use them. HID and networking devices expose these stable IDs, so that for example you can be sure that you told the right UPS to power down its second server. Pleast note that it doesn’t (yet) expose those IDs.”…”�”}”(hjȇh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Kúhjh‡h²hubeh}”(h]”Œwhat-files-are-in-devtmpfs”ah ]”h"]”Œwhat files are in "devtmpfs"?”ah$]”h&]”uh1hÄhj[†h²hh³hÃh´KñubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ/dev/bus/usb/BBB/DDD”h]”hŒ/dev/bus/usb/BBB/DDD”…”�”}”(hj)ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj&ˆh²hh³hÃh´Mubhë)�”}”(hŒ+Use these files in one of these basic ways:”h]”hŒ+Use these files in one of these basic ways:”…”�”}”(hj7ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj&ˆh²hubj¶)�”}”(hhh]”(j»)�”}”(hXB*They can be read,* producing first the device descriptor (18 bytes) and then the descriptors for the current configuration. See the USB 2.0 spec for details about those binary data formats. You'll need to convert most multibyte values from little endian format to your native host byte order, although a few of the fields in the device descriptor (both of the BCD-encoded fields, and the vendor and product IDs) will be byteswapped for you. Note that configuration descriptors include descriptors for interfaces, altsettings, endpoints, and maybe additional class descriptors. ”h]”hë)�”}”(hXA*They can be read,* producing first the device descriptor (18 bytes) and then the descriptors for the current configuration. See the USB 2.0 spec for details about those binary data formats. You'll need to convert most multibyte values from little endian format to your native host byte order, although a few of the fields in the device descriptor (both of the BCD-encoded fields, and the vendor and product IDs) will be byteswapped for you. Note that configuration descriptors include descriptors for interfaces, altsettings, endpoints, and maybe additional class descriptors.”h]”(j)�”}”(hŒ*They can be read,*”h]”hŒThey can be read,”…”�”}”(hjPˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLˆubhX0 producing first the device descriptor (18 bytes) and then the descriptors for the current configuration. See the USB 2.0 spec for details about those binary data formats. You’ll need to convert most multibyte values from little endian format to your native host byte order, although a few of the fields in the device descriptor (both of the BCD-encoded fields, and the vendor and product IDs) will be byteswapped for you. Note that configuration descriptors include descriptors for interfaces, altsettings, endpoints, and maybe additional class descriptors.”…”�”}”(hjLˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjHˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjEˆh²hh³hÃh´Nubj»)�”}”(hX=*Perform USB operations* using *ioctl()* requests to make endpoint I/O requests (synchronously or asynchronously) or manage the device. These requests need the ``CAP_SYS_RAWIO`` capability, as well as filesystem access permissions. Only one ioctl request can be made on one of these device files at a time. This means that if you are synchronously reading an endpoint from one thread, you won't be able to write to a different endpoint from another thread until the read completes. This works for *half duplex* protocols, but otherwise you'd use asynchronous i/o requests. ”h]”hë)�”}”(hX<*Perform USB operations* using *ioctl()* requests to make endpoint I/O requests (synchronously or asynchronously) or manage the device. These requests need the ``CAP_SYS_RAWIO`` capability, as well as filesystem access permissions. Only one ioctl request can be made on one of these device files at a time. This means that if you are synchronously reading an endpoint from one thread, you won't be able to write to a different endpoint from another thread until the read completes. This works for *half duplex* protocols, but otherwise you'd use asynchronous i/o requests.”h]”(j)�”}”(hŒ*Perform USB operations*”h]”hŒPerform USB operations”…”�”}”(hjvˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrˆubhŒ using ”…”�”}”(hjrˆh²hh³Nh´Nubj)�”}”(hŒ *ioctl()*”h]”hŒioctl()”…”�”}”(hjˆˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrˆubhŒx requests to make endpoint I/O requests (synchronously or asynchronously) or manage the device. These requests need the ”…”�”}”(hjrˆh²hh³Nh´NubjÑ)�”}”(hŒ``CAP_SYS_RAWIO``”h]”hŒ CAP_SYS_RAWIO”…”�”}”(hjšˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjrˆubhXB capability, as well as filesystem access permissions. Only one ioctl request can be made on one of these device files at a time. This means that if you are synchronously reading an endpoint from one thread, you won’t be able to write to a different endpoint from another thread until the read completes. This works for ”…”�”}”(hjrˆh²hh³Nh´Nubj)�”}”(hŒ *half duplex*”h]”hŒ half duplex”…”�”}”(hj¬ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrˆubhŒ@ protocols, but otherwise you’d use asynchronous i/o requests.”…”�”}”(hjrˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhjnˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjEˆh²hh³hÃh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´M hj&ˆh²hubhë)�”}”(hXþEach connected USB device has one file. The ``BBB`` indicates the bus number. The ``DDD`` indicates the device address on that bus. Both of these numbers are assigned sequentially, and can be reused, so you can't rely on them for stable access to devices. For example, it's relatively common for devices to re-enumerate while they are still connected (perhaps someone jostled their power supply, hub, or USB cable), so a device might be ``002/027`` when you first connect it and ``002/048`` sometime later.”h]”(hŒ-Each connected USB device has one file. The ”…”�”}”(hjЈh²hh³Nh´NubjÑ)�”}”(hŒ``BBB``”h]”hŒBBB”…”�”}”(hj؈h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЈubhŒ indicates the bus number. The ”…”�”}”(hjЈh²hh³Nh´NubjÑ)�”}”(hŒ``DDD``”h]”hŒDDD”…”�”}”(hjêˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЈubhXb indicates the device address on that bus. Both of these numbers are assigned sequentially, and can be reused, so you can’t rely on them for stable access to devices. For example, it’s relatively common for devices to re-enumerate while they are still connected (perhaps someone jostled their power supply, hub, or USB cable), so a device might be ”…”�”}”(hjЈh²hh³Nh´NubjÑ)�”}”(hŒ ``002/027``”h]”hŒ002/027”…”�”}”(hjüˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЈubhŒ when you first connect it and ”…”�”}”(hjЈh²hh³Nh´NubjÑ)�”}”(hŒ ``002/048``”h]”hŒ002/048”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЈubhŒ sometime later.”…”�”}”(hjЈh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj&ˆh²hubhë)�”}”(hXgThese files can be read as binary data. The binary data consists of first the device descriptor, then the descriptors for each configuration of the device. Multi-byte fields in the device descriptor are converted to host endianness by the kernel. The configuration descriptors are in bus endian format! The configuration descriptor are wTotalLength bytes apart. If a device returns less configuration descriptor data than indicated by wTotalLength there will be a hole in the file for the missing bytes. This information is also shown in text form by the ``/sys/kernel/debug/usb/devices`` file, described later.”h]”(hX/These files can be read as binary data. The binary data consists of first the device descriptor, then the descriptors for each configuration of the device. Multi-byte fields in the device descriptor are converted to host endianness by the kernel. The configuration descriptors are in bus endian format! The configuration descriptor are wTotalLength bytes apart. If a device returns less configuration descriptor data than indicated by wTotalLength there will be a hole in the file for the missing bytes. This information is also shown in text form by the ”…”�”}”(hj&‰h²hh³Nh´NubjÑ)�”}”(hŒ!``/sys/kernel/debug/usb/devices``”h]”hŒ/sys/kernel/debug/usb/devices”…”�”}”(hj.‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj&‰ubhŒ file, described later.”…”�”}”(hj&‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M&hj&ˆh²hubhë)�”}”(hXWThese files may also be used to write user-level drivers for the USB devices. You would open the ``/dev/bus/usb/BBB/DDD`` file read/write, read its descriptors to make sure it's the device you expect, and then bind to an interface (or perhaps several) using an ioctl call. You would issue more ioctls to the device to communicate to it using control, bulk, or other kinds of USB transfers. The IOCTLs are listed in the ```` file, and at this writing the source code (``linux/drivers/usb/core/devio.c``) is the primary reference for how to access devices through those files.”h]”(hŒbThese files may also be used to write user-level drivers for the USB devices. You would open the ”…”�”}”(hjF‰h²hh³Nh´NubjÑ)�”}”(hŒ``/dev/bus/usb/BBB/DDD``”h]”hŒ/dev/bus/usb/BBB/DDD”…”�”}”(hjN‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjF‰ubhX. file read/write, read its descriptors to make sure it’s the device you expect, and then bind to an interface (or perhaps several) using an ioctl call. You would issue more ioctls to the device to communicate to it using control, bulk, or other kinds of USB transfers. The IOCTLs are listed in the ”…”�”}”(hjF‰h²hh³Nh´NubjÑ)�”}”(hŒ````”h]”hŒ”…”�”}”(hj`‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjF‰ubhŒ, file, and at this writing the source code (”…”�”}”(hjF‰h²hh³Nh´NubjÑ)�”}”(hŒ"``linux/drivers/usb/core/devio.c``”h]”hŒlinux/drivers/usb/core/devio.c”…”�”}”(hjr‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjF‰ubhŒI) is the primary reference for how to access devices through those files.”…”�”}”(hjF‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M0hj&ˆh²hubhë)�”}”(hXNote that since by default these ``BBB/DDD`` files are writable only by root, only root can write such user mode drivers. You can selectively grant read/write permissions to other users by using ``chmod``. Also, usbfs mount options such as ``devmode=0666`` may be helpful.”h]”(hŒ!Note that since by default these ”…”�”}”(hjЉh²hh³Nh´NubjÑ)�”}”(hŒ ``BBB/DDD``”h]”hŒBBB/DDD”…”�”}”(hj’‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЉubhŒ˜ files are writable only by root, only root can write such user mode drivers. You can selectively grant read/write permissions to other users by using ”…”�”}”(hjЉh²hh³Nh´NubjÑ)�”}”(hŒ ``chmod``”h]”hŒchmod”…”�”}”(hj¤‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЉubhŒ%. Also, usbfs mount options such as ”…”�”}”(hjЉh²hh³Nh´NubjÑ)�”}”(hŒ``devmode=0666``”h]”hŒ devmode=0666”…”�”}”(hj¶‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjЉubhŒ may be helpful.”…”�”}”(hjЉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M:hj&ˆh²hubeh}”(h]”Œdev-bus-usb-bbb-ddd”ah ]”h"]”Œ/dev/bus/usb/bbb/ddd”ah$]”h&]”uh1hÄhj[†h²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒLife Cycle of User Mode Drivers”h]”hŒLife Cycle of User Mode Drivers”…”�”}”(hjÙ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÖ‰h²hh³hÃh´MAubhë)�”}”(hX(Such a driver first needs to find a device file for a device it knows how to handle. Maybe it was told about it because a ``/sbin/hotplug`` event handling agent chose that driver to handle the new device. Or maybe it's an application that scans all the ``/dev/bus/usb`` device files, and ignores most devices. In either case, it should :c:func:`read()` all the descriptors from the device file, and check them against what it knows how to handle. It might just reject everything except a particular vendor and product ID, or need a more complex policy.”h]”(hŒzSuch a driver first needs to find a device file for a device it knows how to handle. Maybe it was told about it because a ”…”�”}”(hjç‰h²hh³Nh´NubjÑ)�”}”(hŒ``/sbin/hotplug``”h]”hŒ /sbin/hotplug”…”�”}”(hjï‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjç‰ubhŒt event handling agent chose that driver to handle the new device. Or maybe it’s an application that scans all the ”…”�”}”(hjç‰h²hh³Nh´NubjÑ)�”}”(hŒ``/dev/bus/usb``”h]”hŒ /dev/bus/usb”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjç‰ubhŒC device files, and ignores most devices. In either case, it should ”…”�”}”(hjç‰h²hh³Nh´Nubh)�”}”(hŒ:c:func:`read()`”h]”jÑ)�”}”(hjŠh]”hŒread()”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”(jdjŒc-func”eh"]”h$]”h&]”uh1jÐhjŠubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j dŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jLjXTj)dŒread”uh1hh³hÃh´MChjç‰ubhŒÈ all the descriptors from the device file, and check them against what it knows how to handle. It might just reject everything except a particular vendor and product ID, or need a more complex policy.”…”�”}”(hjç‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MChjÖ‰h²hubhë)�”}”(hŒÞNever assume there will only be one such device on the system at a time! If your code can't handle more than one device at a time, at least detect when there's more than one, and have your users choose which device to use.”h]”hŒâNever assume there will only be one such device on the system at a time! If your code can’t handle more than one device at a time, at least detect when there’s more than one, and have your users choose which device to use.”…”�”}”(hj<Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MLhjÖ‰h²hubhë)�”}”(hXlOnce your user mode driver knows what device to use, it interacts with it in either of two styles. The simple style is to make only control requests; some devices don't need more complex interactions than those. (An example might be software using vendor-specific control requests for some initialization or configuration tasks, with a kernel driver for the rest.)”h]”hXnOnce your user mode driver knows what device to use, it interacts with it in either of two styles. The simple style is to make only control requests; some devices don’t need more complex interactions than those. (An example might be software using vendor-specific control requests for some initialization or configuration tasks, with a kernel driver for the rest.)”…”�”}”(hjJŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MQhjÖ‰h²hubhë)�”}”(hX(More likely, you need a more complex style driver: one using non-control endpoints, reading or writing data and claiming exclusive use of an interface. *Bulk* transfers are easiest to use, but only their sibling *interrupt* transfers work with low speed devices. Both interrupt and *isochronous* transfers offer service guarantees because their bandwidth is reserved. Such "periodic" transfers are awkward to use through usbfs, unless you're using the asynchronous calls. However, interrupt transfers can also be used in a synchronous "one shot" style.”h]”(hŒ˜More likely, you need a more complex style driver: one using non-control endpoints, reading or writing data and claiming exclusive use of an interface. ”…”�”}”(hjXŠh²hh³Nh´Nubj)�”}”(hŒ*Bulk*”h]”hŒBulk”…”�”}”(hj`Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXŠubhŒ6 transfers are easiest to use, but only their sibling ”…”�”}”(hjXŠh²hh³Nh´Nubj)�”}”(hŒ *interrupt*”h]”hŒ interrupt”…”�”}”(hjrŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXŠubhŒ; transfers work with low speed devices. Both interrupt and ”…”�”}”(hjXŠh²hh³Nh´Nubj)�”}”(hŒ *isochronous*”h]”hŒ isochronous”…”�”}”(hj„Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXŠubhX  transfers offer service guarantees because their bandwidth is reserved. Such “periodicâ€� transfers are awkward to use through usbfs, unless you’re using the asynchronous calls. However, interrupt transfers can also be used in a synchronous “one shotâ€� style.”…”�”}”(hjXŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MXhjÖ‰h²hubhë)�”}”(hŒÓYour user-mode driver should never need to worry about cleaning up request state when the device is disconnected, although it should close its open file descriptors as soon as it starts seeing the ENODEV errors.”h]”hŒÓYour user-mode driver should never need to worry about cleaning up request state when the device is disconnected, although it should close its open file descriptors as soon as it starts seeing the ENODEV errors.”…”�”}”(hjœŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MahjÖ‰h²hubeh}”(h]”Œlife-cycle-of-user-mode-drivers”ah ]”h"]”Œlife cycle of user mode drivers”ah$]”h&]”uh1hÄhj[†h²hh³hÃh´MAubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒThe ioctl() Requests”h]”hŒThe ioctl() Requests”…”�”}”(hjµŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj²Šh²hh³hÃh´Mfubhë)�”}”(hŒZTo use these ioctls, you need to include the following headers in your userspace program::”h]”hŒYTo use these ioctls, you need to include the following headers in your userspace program:”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhhj²Šh²hubj )�”}”(hŒQ#include #include #include ”h]”hŒQ#include #include #include ”…”�”}”hjÑŠsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mkhj²Šh²hubhë)�”}”(hŒ˜The standard USB device model requests, from "Chapter 9" of the USB 2.0 specification, are automatically included from the ```` header.”h]”(hŒThe standard USB device model requests, from “Chapter 9â€� of the USB 2.0 specification, are automatically included from the ”…”�”}”(hjߊh²hh³Nh´NubjÑ)�”}”(hŒ````”h]”hŒ”…”�”}”(hjçŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjߊubhŒ header.”…”�”}”(hjߊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mohj²Šh²hubhë)�”}”(hX"Unless noted otherwise, the ioctl requests described here will update the modification time on the usbfs file to which they are applied (unless they fail). A return of zero indicates success; otherwise, a standard USB error code is returned (These are documented in :ref:`usb-error-codes`).”h]”(hX Unless noted otherwise, the ioctl requests described here will update the modification time on the usbfs file to which they are applied (unless they fail). A return of zero indicates success; otherwise, a standard USB error code is returned (These are documented in ”…”�”}”(hjÿŠh²hh³Nh´Nubh)�”}”(hŒ:ref:`usb-error-codes`”h]”hŒinline”“”)�”}”(hj ‹h]”hŒusb-error-codes”…”�”}”(hj ‹h²hh³Nh´Nubah}”(h]”h ]”(jdŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j ‹hj‹ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j dŒ refdomain”j‹Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆj)dŒusb-error-codes”uh1hh³hÃh´MshjÿŠubhŒ).”…”�”}”(hjÿŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mshj²Šh²hubhë)�”}”(hXJEach of these files multiplexes access to several I/O streams, one per endpoint. Each device has one control endpoint (endpoint zero) which supports a limited RPC style RPC access. Devices are configured by hub_wq (in the kernel) setting a device-wide *configuration* that affects things like power consumption and basic functionality. The endpoints are part of USB *interfaces*, which may have *altsettings* affecting things like which endpoints are available. Many devices only have a single configuration and interface, so drivers for them will ignore configurations and altsettings.”h]”(hŒüEach of these files multiplexes access to several I/O streams, one per endpoint. Each device has one control endpoint (endpoint zero) which supports a limited RPC style RPC access. Devices are configured by hub_wq (in the kernel) setting a device-wide ”…”�”}”(hj3‹h²hh³Nh´Nubj)�”}”(hŒ*configuration*”h]”hŒ configuration”…”�”}”(hj;‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3‹ubhŒc that affects things like power consumption and basic functionality. The endpoints are part of USB ”…”�”}”(hj3‹h²hh³Nh´Nubj)�”}”(hŒ *interfaces*”h]”hŒ interfaces”…”�”}”(hjM‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3‹ubhŒ, which may have ”…”�”}”(hj3‹h²hh³Nh´Nubj)�”}”(hŒ *altsettings*”h]”hŒ altsettings”…”�”}”(hj_‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3‹ubhŒ² affecting things like which endpoints are available. Many devices only have a single configuration and interface, so drivers for them will ignore configurations and altsettings.”…”�”}”(hj3‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Myhj²Šh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒManagement/Status Requests”h]”hŒManagement/Status Requests”…”�”}”(hjz‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjw‹h²hh³hÃh´M„ubhë)�”}”(hŒœA number of usbfs requests don't deal very directly with device I/O. They mostly relate to device management and status. These are all synchronous requests.”h]”hŒžA number of usbfs requests don’t deal very directly with device I/O. They mostly relate to device management and status. These are all synchronous requests.”…”�”}”(hjˆ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M†hjw‹h²hubjD)�”}”(hhh]”(jI)�”}”(hXWUSBDEVFS_CLAIMINTERFACE This is used to force usbfs to claim a specific interface, which has not previously been claimed by usbfs or any other kernel driver. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor). Note that if your driver doesn't claim an interface before trying to use one of its endpoints, and no other driver has bound to it, then the interface is automatically claimed by usbfs. This claim will be released by a RELEASEINTERFACE ioctl, or by closing the file descriptor. File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_CLAIMINTERFACE”h]”hŒUSBDEVFS_CLAIMINTERFACE”…”�”}”(hj�‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M–hj™‹ubji)�”}”(hhh]”(hë)�”}”(hŒïThis is used to force usbfs to claim a specific interface, which has not previously been claimed by usbfs or any other kernel driver. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor).”h]”hŒïThis is used to force usbfs to claim a specific interface, which has not previously been claimed by usbfs or any other kernel driver. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor).”…”�”}”(hj®‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M‹hj«‹ubhë)�”}”(hŒ¹Note that if your driver doesn't claim an interface before trying to use one of its endpoints, and no other driver has bound to it, then the interface is automatically claimed by usbfs.”h]”hŒ»Note that if your driver doesn’t claim an interface before trying to use one of its endpoints, and no other driver has bound to it, then the interface is automatically claimed by usbfs.”…”�”}”(hj¼‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M�hj«‹ubhë)�”}”(hŒ’This claim will be released by a RELEASEINTERFACE ioctl, or by closing the file descriptor. File modification time is not updated by this request.”h]”hŒ’This claim will be released by a RELEASEINTERFACE ioctl, or by closing the file descriptor. File modification time is not updated by this request.”…”�”}”(hjÊ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M”hj«‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhj™‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M–hj–‹ubjI)�”}”(hXæUSBDEVFS_CONNECTINFO Says whether the device is lowspeed. The ioctl parameter points to a structure like this:: struct usbdevfs_connectinfo { unsigned int devnum; unsigned char slow; }; File modification time is not updated by this request. *You can't tell whether a "not slow" device is connected at high speed (480 MBit/sec) or just full speed (12 MBit/sec).* You should know the devnum value already, it's the DDD value of the device file name. ”h]”(jO)�”}”(hŒUSBDEVFS_CONNECTINFO”h]”hŒUSBDEVFS_CONNECTINFO”…”�”}”(hjè‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M¦hjä‹ubji)�”}”(hhh]”(hë)�”}”(hŒZSays whether the device is lowspeed. The ioctl parameter points to a structure like this::”h]”hŒYSays whether the device is lowspeed. The ioctl parameter points to a structure like this:”…”�”}”(hjù‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M™hjö‹ubj )�”}”(hŒ\struct usbdevfs_connectinfo { unsigned int devnum; unsigned char slow; };”h]”hŒ\struct usbdevfs_connectinfo { unsigned int devnum; unsigned char slow; };”…”�”}”hjŒsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mœhjö‹ubhë)�”}”(hŒ6File modification time is not updated by this request.”h]”hŒ6File modification time is not updated by this request.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¡hjö‹ubhë)�”}”(hŒÎ*You can't tell whether a "not slow" device is connected at high speed (480 MBit/sec) or just full speed (12 MBit/sec).* You should know the devnum value already, it's the DDD value of the device file name.”h]”(j)�”}”(hŒx*You can't tell whether a "not slow" device is connected at high speed (480 MBit/sec) or just full speed (12 MBit/sec).*”h]”hŒ|You can’t tell whether a “not slowâ€� device is connected at high speed (480 MBit/sec) or just full speed (12 MBit/sec).”…”�”}”(hj'Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ŒubhŒX You should know the devnum value already, it’s the DDD value of the device file name.”…”�”}”(hj#Œh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M£hjö‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjä‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M¦hj–‹h²hubjI)�”}”(hŒÀUSBDEVFS_GET_SPEED Returns the speed of the device. The speed is returned as a numerical value in accordance with enum usb_device_speed File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_GET_SPEED”h]”hŒUSBDEVFS_GET_SPEED”…”�”}”(hjOŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M¬hjKŒubji)�”}”(hhh]”(hë)�”}”(hŒtReturns the speed of the device. The speed is returned as a numerical value in accordance with enum usb_device_speed”h]”hŒtReturns the speed of the device. The speed is returned as a numerical value in accordance with enum usb_device_speed”…”�”}”(hj`Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M©hj]Œubhë)�”}”(hŒ6File modification time is not updated by this request.”h]”hŒ6File modification time is not updated by this request.”…”�”}”(hjnŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¬hj]Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjKŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M¬hj–‹h²hubjI)�”}”(hXaUSBDEVFS_GETDRIVER Returns the name of the kernel driver bound to a given interface (a string). Parameter is a pointer to this structure, which is modified:: struct usbdevfs_getdriver { unsigned int interface; char driver[USBDEVFS_MAXDRIVERNAME + 1]; }; File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_GETDRIVER”h]”hŒUSBDEVFS_GETDRIVER”…”�”}”(hjŒŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M¸hjˆŒubji)�”}”(hhh]”(hë)�”}”(hŒŠReturns the name of the kernel driver bound to a given interface (a string). Parameter is a pointer to this structure, which is modified::”h]”hŒ‰Returns the name of the kernel driver bound to a given interface (a string). Parameter is a pointer to this structure, which is modified:”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¯hjšŒubj )�”}”(hŒystruct usbdevfs_getdriver { unsigned int interface; char driver[USBDEVFS_MAXDRIVERNAME + 1]; };”h]”hŒystruct usbdevfs_getdriver { unsigned int interface; char driver[USBDEVFS_MAXDRIVERNAME + 1]; };”…”�”}”hj«Œsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´M³hjšŒubhë)�”}”(hŒ6File modification time is not updated by this request.”•äh]”hŒ6File modification time is not updated by this request.”…”�”}”(hj¹Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¸hjšŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjˆŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M¸hj–‹h²hubjI)�”}”(hXõUSBDEVFS_IOCTL Passes a request from userspace through to a kernel driver that has an ioctl entry in the *struct usb_driver* it registered:: struct usbdevfs_ioctl { int ifno; int ioctl_code; void *data; }; /* user mode call looks like this. * 'request' becomes the driver->ioctl() 'code' parameter. * the size of 'param' is encoded in 'request', and that data * is copied to or from the driver->ioctl() 'buf' parameter. */ static int usbdev_ioctl (int fd, int ifno, unsigned request, void *param) { struct usbdevfs_ioctl wrapper; wrapper.ifno = ifno; wrapper.ioctl_code = request; wrapper.data = param; return ioctl (fd, USBDEVFS_IOCTL, &wrapper); } File modification time is not updated by this request. This request lets kernel drivers talk to user mode code through filesystem operations even when they don't create a character or block special device. It's also been used to do things like ask devices what device special file should be used. Two pre-defined ioctls are used to disconnect and reconnect kernel drivers, so that user mode code can completely manage binding and configuration of devices. ”h]”(jO)�”}”(hŒUSBDEVFS_IOCTL”h]”hŒUSBDEVFS_IOCTL”…”�”}”(hj׌h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´MÝhjÓŒubji)�”}”(hhh]”(hë)�”}”(hŒ}Passes a request from userspace through to a kernel driver that has an ioctl entry in the *struct usb_driver* it registered::”h]”(hŒZPasses a request from userspace through to a kernel driver that has an ioctl entry in the ”…”�”}”(hjèŒh²hh³Nh´Nubj)�”}”(hŒ*struct usb_driver*”h]”hŒstruct usb_driver”…”�”}”(hjðŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèŒubhŒ it registered:”…”�”}”(hjèŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M»hjåŒubj )�”}”(hXPstruct usbdevfs_ioctl { int ifno; int ioctl_code; void *data; }; /* user mode call looks like this. * 'request' becomes the driver->ioctl() 'code' parameter. * the size of 'param' is encoded in 'request', and that data * is copied to or from the driver->ioctl() 'buf' parameter. */ static int usbdev_ioctl (int fd, int ifno, unsigned request, void *param) { struct usbdevfs_ioctl wrapper; wrapper.ifno = ifno; wrapper.ioctl_code = request; wrapper.data = param; return ioctl (fd, USBDEVFS_IOCTL, &wrapper); }”h]”hXPstruct usbdevfs_ioctl { int ifno; int ioctl_code; void *data; }; /* user mode call looks like this. * 'request' becomes the driver->ioctl() 'code' parameter. * the size of 'param' is encoded in 'request', and that data * is copied to or from the driver->ioctl() 'buf' parameter. */ static int usbdev_ioctl (int fd, int ifno, unsigned request, void *param) { struct usbdevfs_ioctl wrapper; wrapper.ifno = ifno; wrapper.ioctl_code = request; wrapper.data = param; return ioctl (fd, USBDEVFS_IOCTL, &wrapper); }”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´M¾hjåŒubhë)�”}”(hŒ6File modification time is not updated by this request.”h]”hŒ6File modification time is not updated by this request.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÕhjåŒubhë)�”}”(hX�This request lets kernel drivers talk to user mode code through filesystem operations even when they don't create a character or block special device. It's also been used to do things like ask devices what device special file should be used. Two pre-defined ioctls are used to disconnect and reconnect kernel drivers, so that user mode code can completely manage binding and configuration of devices.”h]”hX”This request lets kernel drivers talk to user mode code through filesystem operations even when they don’t create a character or block special device. It’s also been used to do things like ask devices what device special file should be used. Two pre-defined ioctls are used to disconnect and reconnect kernel drivers, so that user mode code can completely manage binding and configuration of devices.”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M×hjåŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÓŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´MÝhj–‹h²hubjI)�”}”(hXUSBDEVFS_RELEASEINTERFACE This is used to release the claim usbfs made on interface, either implicitly or because of a USBDEVFS_CLAIMINTERFACE call, before the file descriptor is closed. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor); File modification time is not updated by this request. .. warning:: *No security check is made to ensure that the task which made the claim is the one which is releasing it. This means that user mode driver may interfere other ones.* ”h]”(jO)�”}”(hŒUSBDEVFS_RELEASEINTERFACE”h]”hŒUSBDEVFS_RELEASEINTERFACE”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´Mêhj>�ubji)�”}”(hhh]”(hë)�”}”(hXAThis is used to release the claim usbfs made on interface, either implicitly or because of a USBDEVFS_CLAIMINTERFACE call, before the file descriptor is closed. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor); File modification time is not updated by this request.”h]”hXAThis is used to release the claim usbfs made on interface, either implicitly or because of a USBDEVFS_CLAIMINTERFACE call, before the file descriptor is closed. The ioctl parameter is an integer holding the number of the interface (bInterfaceNumber from descriptor); File modification time is not updated by this request.”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MàhjP�ubhŒwarning”“”)�”}”(hŒ¥*No security check is made to ensure that the task which made the claim is the one which is releasing it. This means that user mode driver may interfere other ones.*”h]”hë)�”}”(hŒ¥*No security check is made to ensure that the task which made the claim is the one which is releasing it. This means that user mode driver may interfere other ones.*”h]”j)�”}”(hji�h]”hŒ£No security check is made to ensure that the task which made the claim is the one which is releasing it. This means that user mode driver may interfere other ones.”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mèhjc�ubah}”(h]”h ]”h"]”h$]”h&]”uh1ja�hjP�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhj>�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´Mêhj–‹h²hubjI)�”}”(hXHUSBDEVFS_RESETEP Resets the data toggle value for an endpoint (bulk or interrupt) to DATA0. The ioctl parameter is an integer endpoint number (1 to 15, as identified in the endpoint descriptor), with USB_DIR_IN added if the device's endpoint sends data to the host. .. Warning:: *Avoid using this request. It should probably be removed.* Using it typically means the device and driver will lose toggle synchronization. If you really lost synchronization, you likely need to completely handshake with the device, using a request like CLEAR_HALT or SET_INTERFACE. ”h]”(jO)�”}”(hŒUSBDEVFS_RESETEP”h]”hŒUSBDEVFS_RESETEP”…”�”}”(hj”�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´Møhj��ubji)�”}”(hhh]”(hë)�”}”(hŒøResets the data toggle value for an endpoint (bulk or interrupt) to DATA0. The ioctl parameter is an integer endpoint number (1 to 15, as identified in the endpoint descriptor), with USB_DIR_IN added if the device's endpoint sends data to the host.”h]”hŒúResets the data toggle value for an endpoint (bulk or interrupt) to DATA0. The ioctl parameter is an integer endpoint number (1 to 15, as identified in the endpoint descriptor), with USB_DIR_IN added if the device’s endpoint sends data to the host.”…”�”}”(hj¥�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Míhj¢�ubjb�)�”}”(hX*Avoid using this request. It should probably be removed.* Using it typically means the device and driver will lose toggle synchronization. If you really lost synchronization, you likely need to completely handshake with the device, using a request like CLEAR_HALT or SET_INTERFACE.”h]”hë)�”}”(hX*Avoid using this request. It should probably be removed.* Using it typically means the device and driver will lose toggle synchronization. If you really lost synchronization, you likely need to completely handshake with the device, using a request like CLEAR_HALT or SET_INTERFACE.”h]”(j)�”}”(hŒ:*Avoid using this request. It should probably be removed.*”h]”hŒ8Avoid using this request. It should probably be removed.”…”�”}”(hj»�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·�ubhŒà Using it typically means the device and driver will lose toggle synchronization. If you really lost synchronization, you likely need to completely handshake with the device, using a request like CLEAR_HALT or SET_INTERFACE.”…”�”}”(hj·�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Môhj³�ubah}”(h]”h ]”h"]”h$]”h&]”uh1ja�hj¢�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhj��ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´Møhj–‹h²hubjI)�”}”(hXéUSBDEVFS_DROP_PRIVILEGES This is used to relinquish the ability to do certain operations which are considered to be privileged on a usbfs file descriptor. This includes claiming arbitrary interfaces, resetting a device on which there are currently claimed interfaces from other users, and issuing USBDEVFS_IOCTL calls. The ioctl parameter is a 32 bit mask of interfaces the user is allowed to claim on this file descriptor. You may issue this ioctl more than one time to narrow said mask. ”h]”(jO)�”}”(hŒUSBDEVFS_DROP_PRIVILEGES”h]”hŒUSBDEVFS_DROP_PRIVILEGES”…”�”}”(hjé�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´Mhjå�ubji)�”}”(hhh]”hë)�”}”(hXÏThis is used to relinquish the ability to do certain operations which are considered to be privileged on a usbfs file descriptor. This includes claiming arbitrary interfaces, resetting a device on which there are currently claimed interfaces from other users, and issuing USBDEVFS_IOCTL calls. The ioctl parameter is a 32 bit mask of interfaces the user is allowed to claim on this file descriptor. You may issue this ioctl more than one time to narrow said mask.”h]”hXÏThis is used to relinquish the ability to do certain operations which are considered to be privileged on a usbfs file descriptor. This includes claiming arbitrary interfaces, resetting a device on which there are currently claimed interfaces from other users, and issuing USBDEVFS_IOCTL calls. The ioctl parameter is a 32 bit mask of interfaces the user is allowed to claim on this file descriptor. You may issue this ioctl more than one time to narrow said mask.”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mûhj÷�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjå�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´Mhj–‹h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChjw‹h²hh³hÃh´Nubeh}”(h]”Œmanagement-status-requests”ah ]”h"]”Œmanagement/status requests”ah$]”h&]”uh1hÄhj²Šh²hh³hÃh´M„ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒSynchronous I/O Support”h]”hŒSynchronous I/O Support”…”�”}”(hj%Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj"Žh²hh³hÃh´Mubhë)�”}”(hX#Synchronous requests involve the kernel blocking until the user mode request completes, either by finishing successfully or by reporting an error. In most cases this is the simplest way to use usbfs, although as noted above it does prevent performing I/O to more than one endpoint at a time.”h]”hX#Synchronous requests involve the kernel blocking until the user mode request completes, either by finishing successfully or by reporting an error. In most cases this is the simplest way to use usbfs, although as noted above it does prevent performing I/O to more than one endpoint at a time.”…”�”}”(hj3Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj"Žh²hubjD)�”}”(hhh]”(jI)�”}”(hX½USBDEVFS_BULK Issues a bulk read or write request to the device. The ioctl parameter is a pointer to this structure:: struct usbdevfs_bulktransfer { unsigned int ep; unsigned int len; unsigned int timeout; /* in milliseconds */ void *data; }; The ``ep`` value identifies a bulk endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device. The length of the data buffer is identified by ``len``; Recent kernels support requests up to about 128KBytes. *FIXME say how read length is returned, and how short reads are handled.*. ”h]”(jO)�”}”(hŒ USBDEVFS_BULK”h]”hŒ USBDEVFS_BULK”…”�”}”(hjHŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´MhjDŽubji)�”}”(hhh]”(hë)�”}”(hŒgIssues a bulk read or write request to the device. The ioctl parameter is a pointer to this structure::”h]”hŒfIssues a bulk read or write request to the device. The ioctl parameter is a pointer to this structure:”…”�”}”(hjYŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjVŽubj )�”}”(hŒ¨struct usbdevfs_bulktransfer { unsigned int ep; unsigned int len; unsigned int timeout; /* in milliseconds */ void *data; };”h]”hŒ¨struct usbdevfs_bulktransfer { unsigned int ep; unsigned int len; unsigned int timeout; /* in milliseconds */ void *data; };”…”�”}”hjgŽsbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MhjVŽubhë)�”}”(hXƒThe ``ep`` value identifies a bulk endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device. The length of the data buffer is identified by ``len``; Recent kernels support requests up to about 128KBytes. *FIXME say how read length is returned, and how short reads are handled.*.”h]”(hŒThe ”…”�”}”(hjuŽh²hh³Nh´NubjÑ)�”}”(hŒ``ep``”h]”hŒep”…”�”}”(hj}Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjuŽubhŒï value identifies a bulk endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device. The length of the data buffer is identified by ”…”�”}”(hjuŽh²hh³Nh´NubjÑ)�”}”(hŒ``len``”h]”hŒlen”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjuŽubhŒ9; Recent kernels support requests up to about 128KBytes. ”…”�”}”(hjuŽh²hh³Nh´Nubj)�”}”(hŒI*FIXME say how read length is returned, and how short reads are handled.*”h]”hŒGFIXME say how read length is returned, and how short reads are handled.”…”�”}”(hj¡Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuŽubhŒ.”…”�”}”(hjuŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MhjVŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjDŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´MhjAŽubjI)�”}”(hX5USBDEVFS_CLEAR_HALT Clears endpoint halt (stall) and resets the endpoint toggle. This is only meaningful for bulk or interrupt endpoints. The ioctl parameter is an integer endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device. Use this on bulk or interrupt endpoints which have stalled, returning ``-EPIPE`` status to a data transfer request. Do not issue the control request directly, since that could invalidate the host's record of the data toggle. ”h]”(jO)�”}”(hŒUSBDEVFS_CLEAR_HALT”h]”hŒUSBDEVFS_CLEAR_HALT”…”�”}”(hjÉŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M(hjÅŽubji)�”}”(hhh]”(hë)�”}”(hX>Clears endpoint halt (stall) and resets the endpoint toggle. This is only meaningful for bulk or interrupt endpoints. The ioctl parameter is an integer endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device.”h]”hX>Clears endpoint halt (stall) and resets the endpoint toggle. This is only meaningful for bulk or interrupt endpoints. The ioctl parameter is an integer endpoint number (1 to 15, as identified in an endpoint descriptor), masked with USB_DIR_IN when referring to an endpoint which sends data to the host from the device.”…”�”}”(hjÚŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj׎ubhë)�”}”(hŒàUse this on bulk or interrupt endpoints which have stalled, returning ``-EPIPE`` status to a data transfer request. Do not issue the control request directly, since that could invalidate the host's record of the data toggle.”h]”(hŒFUse this on bulk or interrupt endpoints which have stalled, returning ”…”�”}”(hjèŽh²hh³Nh´NubjÑ)�”}”(hŒ ``-EPIPE``”h]”hŒ-EPIPE”…”�”}”(hjðŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjèŽubhŒ’ status to a data transfer request. Do not issue the control request directly, since that could invalidate the host’s record of the data toggle.”…”�”}”(hjèŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M%hj׎ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÅŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M(hjAŽh²hubjI)�”}”(hXDUSBDEVFS_CONTROL Issues a control request to the device. The ioctl parameter points to a structure like this:: struct usbdevfs_ctrltransfer { __u8 bRequestType; __u8 bRequest; __u16 wValue; __u16 wIndex; __u16 wLength; __u32 timeout; /* in milliseconds */ void *data; }; The first eight bytes of this structure are the contents of the SETUP packet to be sent to the device; see the USB 2.0 specification for details. The bRequestType value is composed by combining a ``USB_TYPE_*`` value, a ``USB_DIR_*`` value, and a ``USB_RECIP_*`` value (from ``linux/usb.h``). If wLength is nonzero, it describes the length of the data buffer, which is either written to the device (USB_DIR_OUT) or read from the device (USB_DIR_IN). At this writing, you can't transfer more than 4 KBytes of data to or from a device; usbfs has a limit, and some host controller drivers have a limit. (That's not usually a problem.) *Also* there's no way to say it's not OK to get a short read back from the device. ”h]”(jO)�”}”(hŒUSBDEVFS_CONTROL”h]”hŒUSBDEVFS_CONTROL”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´MChj�ubji)�”}”(hhh]”(hë)�”}”(hŒ]Issues a control request to the device. The ioctl parameter points to a structure like this::”h]”hŒ\Issues a control request to the device. The ioctl parameter points to a structure like this:”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M+hj&�ubj )�”}”(hŒâstruct usbdevfs_ctrltransfer { __u8 bRequestType; __u8 bRequest; __u16 wValue; __u16 wIndex; __u16 wLength; __u32 timeout; /* in milliseconds */ void *data; };”h]”hŒâstruct usbdevfs_ctrltransfer { __u8 bRequestType; __u8 bRequest; __u16 wValue; __u16 wIndex; __u16 wLength; __u32 timeout; /* in milliseconds */ void *data; };”…”�”}”hj7�sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´M.hj&�ubhë)�”}”(hXÁThe first eight bytes of this structure are the contents of the SETUP packet to be sent to the device; see the USB 2.0 specification for details. The bRequestType value is composed by combining a ``USB_TYPE_*`` value, a ``USB_DIR_*`` value, and a ``USB_RECIP_*`` value (from ``linux/usb.h``). If wLength is nonzero, it describes the length of the data buffer, which is either written to the device (USB_DIR_OUT) or read from the device (USB_DIR_IN).”h]”(hŒÄThe first eight bytes of this structure are the contents of the SETUP packet to be sent to the device; see the USB 2.0 specification for details. The bRequestType value is composed by combining a ”…”�”}”(hjE�h²hh³Nh´NubjÑ)�”}”(hŒ``USB_TYPE_*``”h]”hŒ USB_TYPE_*”…”�”}”(hjM�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjE�ubhŒ value, a ”…”�”}”(hjE�h²hh³Nh´NubjÑ)�”}”(hŒ ``USB_DIR_*``”h]”hŒ USB_DIR_*”…”�”}”(hj_�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjE�ubhŒ value, and a ”…”�”}”(hjE�h²hh³Nh´NubjÑ)�”}”(hŒ``USB_RECIP_*``”h]”hŒ USB_RECIP_*”…”�”}”(hjq�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjE�ubhŒ value (from ”…”�”}”(hjE�h²hh³Nh´NubjÑ)�”}”(hŒ``linux/usb.h``”h]”hŒ linux/usb.h”…”�”}”(hjƒ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjE�ubhŒŸ). If wLength is nonzero, it describes the length of the data buffer, which is either written to the device (USB_DIR_OUT) or read from the device (USB_DIR_IN).”…”�”}”(hjE�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M8hj&�ubhë)�”}”(hXAt this writing, you can't transfer more than 4 KBytes of data to or from a device; usbfs has a limit, and some host controller drivers have a limit. (That's not usually a problem.) *Also* there's no way to say it's not OK to get a short read back from the device.”h]”(hŒºAt this writing, you can’t transfer more than 4 KBytes of data to or from a device; usbfs has a limit, and some host controller drivers have a limit. (That’s not usually a problem.) ”…”�”}”(hj›�h²hh³Nh´Nubj)�”}”(hŒ*Also*”h]”hŒAlso”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›�ubhŒP there’s no way to say it’s not OK to get a short read back from the device.”…”�”}”(hj›�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M@hj&�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´MChjAŽh²hubjI)�”}”(hŒºUSBDEVFS_RESET Does a USB level device reset. The ioctl parameter is ignored. After the reset, this rebinds all device interfaces. File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_RESET”h]”hŒUSBDEVFS_RESET”…”�”}”(hjË�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´MHhjÇ�ubji)�”}”(hhh]”hë)�”}”(hŒªDoes a USB level device reset. The ioctl parameter is ignored. After the reset, this rebinds all device interfaces. File modification time is not updated by this request.”h]”hŒªDoes a USB level device reset. The ioctl parameter is ignored. After the reset, this rebinds all device interfaces. File modification time is not updated by this request.”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MFhjÙ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjÇ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´MHhjAŽh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj"Žh²hh³hÃh´Nubjb�)�”}”(hŒ”*Avoid using this call* until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”h]”hë)�”}”(hŒ”*Avoid using this call* until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”h]”(j)�”}”(hŒ*Avoid using this call*”h]”hŒAvoid using this call”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubhŒ} until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MLhjü�ubah}”(h]”h ]”h"]”h$]”h&]”uh1ja�hj"Žh²hh³hÃh´NubjD)�”}”(hhh]”(jI)�”}”(hX)USBDEVFS_SETINTERFACE Sets the alternate setting for an interface. The ioctl parameter is a pointer to a structure like this:: struct usbdevfs_setinterface { unsigned int interface; unsigned int altsetting; }; File modification time is not updated by this request. Those struct members are from some interface descriptor applying to the current configuration. The interface number is the bInterfaceNumber value, and the altsetting number is the bAlternateSetting value. (This resets each endpoint in the interface.) ”h]”(jO)�”}”(hŒUSBDEVFS_SETINTERFACE”h]”hŒUSBDEVFS_SETINTERFACE”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M_hj%�ubji)�”}”(hhh]”(hë)�”}”(hŒhSets the alternate setting for an interface. The ioctl parameter is a pointer to a structure like this::”h]”hŒgSets the alternate setting for an interface. The ioctl parameter is a pointer to a structure like this:”…”�”}”(hj:�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MQhj7�ubj )�”}”(hŒdstruct usbdevfs_setinterface { unsigned int interface; unsigned int altsetting; };”h]”hŒdstruct usbdevfs_setinterface { unsigned int interface; unsigned int altsetting; };”…”�”}”hjH�sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MThj7�ubhë)�”}”(hŒ6File modification time is not updated by this request.”h]”hŒ6File modification time is not updated by this request.”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MYhj7�ubhë)�”}”(hŒúThose struct members are from some interface descriptor applying to the current configuration. The interface number is the bInterfaceNumber value, and the altsetting number is the bAlternateSetting value. (This resets each endpoint in the interface.)”h]”hŒúThose struct members are from some interface descriptor applying to the current configuration. The interface number is the bInterfaceNumber value, and the altsetting number is the bAlternateSetting value. (This resets each endpoint in the interface.)”…”�”}”(hjd�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M[hj7�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhhj%�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M_hj"�ubjI)�”}”(hŒüUSBDEVFS_SETCONFIGURATION Issues the :c:func:`usb_set_configuration()` call for the device. The parameter is an integer holding the number of a configuration (bConfigurationValue from descriptor). File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_SETCONFIGURATION”h]”hŒUSBDEVFS_SETCONFIGURATION”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´Mehj~�ubji)�”}”(hhh]”hë)�”}”(hŒáIssues the :c:func:`usb_set_configuration()` call for the device. The parameter is an integer holding the number of a configuration (bConfigurationValue from descriptor). File modification time is not updated by this request.”h]”(hŒ Issues the ”…”�”}”(hj“�h²hh³Nh´Nubh)�”}”(hŒ!:c:func:`usb_set_configuration()`”h]”jÑ)�”}”(hj��h]”hŒusb_set_configuration()”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”(jdjŒc-func”eh"]”h$]”h&]”uh1jÐhj›�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j dŒ refdomain”jŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jLjXTj)dŒusb_set_configuration”uh1hh³hÃh´Mbhj“�ubhŒµ call for the device. The parameter is an integer holding the number of a configuration (bConfigurationValue from descriptor). File modification time is not updated by this request.”…”�”}”(hj“�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mbhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj~�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´Mehj"�h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj"Žh²hh³hÃh´Nubjb�)�”}”(hŒ”*Avoid using this call* until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”h]”hë)�”}”(hŒ”*Avoid using this call* until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”h]”(j)�”}”(hŒ*Avoid using this call*”h]”hŒAvoid using this call”…”�”}”(hjÞ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚ�ubhŒ} until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.”…”�”}”(hjÚ�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MihjÖ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1ja�hj"Žh²hh³hÃh´Nubeh}”(h]”Œsynchronous-i-o-support”ah ]”h"]”Œsynchronous i/o support”ah$]”h&]”uh1hÄhj²Šh²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒAsynchronous I/O Support”h]”hŒAsynchronous I/O Support”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj‘h²hh³hÃh´Mnubhë)�”}”(hX¸As mentioned above, there are situations where it may be important to initiate concurrent operations from user mode code. This is particularly important for periodic transfers (interrupt and isochronous), but it can be used for other kinds of USB requests too. In such cases, the asynchronous requests described here are essential. Rather than submitting one request and having the kernel block until it completes, the blocking is separate.”h]”hX¸As mentioned above, there are situations where it may be important to initiate concurrent operations from user mode code. This is particularly important for periodic transfers (interrupt and isochronous), but it can be used for other kinds of USB requests too. In such cases, the asynchronous requests described here are essential. Rather than submitting one request and having the kernel block until it completes, the blocking is separate.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mphj‘h²hubhë)�”}”(hXÑThese requests are packaged into a structure that resembles the URB used by kernel device drivers. (No POSIX Async I/O support here, sorry.) It identifies the endpoint type (``USBDEVFS_URB_TYPE_*``), endpoint (number, masked with USB_DIR_IN as appropriate), buffer and length, and a user "context" value serving to uniquely identify each request. (It's usually a pointer to per-request data.) Flags can modify requests (not as many as supported for kernel drivers).”h]”(hŒ®These requests are packaged into a structure that resembles the URB used by kernel device drivers. (No POSIX Async I/O support here, sorry.) It identifies the endpoint type (”…”�”}”(hj#‘h²hh³Nh´NubjÑ)�”}”(hŒ``USBDEVFS_URB_TYPE_*``”h]”hŒUSBDEVFS_URB_TYPE_*”…”�”}”(hj+‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj#‘ubhX), endpoint (number, masked with USB_DIR_IN as appropriate), buffer and length, and a user “contextâ€� value serving to uniquely identify each request. (It’s usually a pointer to per-request data.) Flags can modify requests (not as many as supported for kernel drivers).”…”�”}”(hj#‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mxhj‘h²hubhë)�”}”(hŒ”Each request can specify a realtime signal number (between SIGRTMIN and SIGRTMAX, inclusive) to request a signal be sent when the request completes.”h]”hŒ”Each request can specify a realtime signal number (between SIGRTMIN and SIGRTMAX, inclusive) to request a signal be sent when the request completes.”…”�”}”(hjC‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M€hj‘h²hubhë)�”}”(hX_When usbfs returns these urbs, the status value is updated, and the buffer may have been modified. Except for isochronous transfers, the actual_length is updated to say how many bytes were transferred; if the USBDEVFS_URB_DISABLE_SPD flag is set ("short packets are not OK"), if fewer bytes were read than were requested then you get an error report::”h]”hXbWhen usbfs returns these urbs, the status value is updated, and the buffer may have been modified. Except for isochronous transfers, the actual_length is updated to say how many bytes were transferred; if the USBDEVFS_URB_DISABLE_SPD flag is set (“short packets are not OKâ€�), if fewer bytes were read than were requested then you get an error report:”…”�”}”(hjQ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M„hj‘h²hubj )�”}”(hX‡struct usbdevfs_iso_packet_desc { unsigned int length; unsigned int actual_length; unsigned int status; }; struct usbdevfs_urb { unsigned char type; unsigned char endpoint; int status; unsigned int flags; void *buffer; int buffer_length; int actual_length; int start_frame; int number_of_packets; int error_count; unsigned int signr; void *usercontext; struct usbdevfs_iso_packet_desc iso_frame_desc[]; };”h]”hX‡struct usbdevfs_iso_packet_desc { unsigned int length; unsigned int actual_length; unsigned int status; }; struct usbdevfs_urb { unsigned char type; unsigned char endpoint; int status; unsigned int flags; void *buffer; int buffer_length; int actual_length; int start_frame; int number_of_packets; int error_count; unsigned int signr; void *usercontext; struct usbdevfs_iso_packet_desc iso_frame_desc[]; };”…”�”}”hj_‘sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MŠhj‘h²hubhë)�”}”(hŒËFor these asynchronous requests, the file modification time reflects when the request was initiated. This contrasts with their use with the synchronous requests, where it reflects when requests complete.”h]”hŒËFor these asynchronous requests, the file modification time reflects when the request was initiated. This contrasts with their use with the synchronous requests, where it reflects when requests complete.”…”�”}”(hjm‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hj‘h²hubjD)�”}”(hhh]”(jI)�”}”(hŒQUSBDEVFS_DISCARDURB *TBS* File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_DISCARDURB”h]”hŒUSBDEVFS_DISCARDURB”…”�”}”(hj‚‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M¥hj~‘ubji)�”}”(hhh]”hë)�”}”(hŒ<*TBS* File modification time is not updated by this request.”h]”(j)�”}”(hŒ*TBS*”h]”hŒTBS”…”�”}”(hj—‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“‘ubhŒ7 File modification time is not updated by this request.”…”�”}”(hj“‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¥hj�‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj~‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M¥hj{‘ubjI)�”}”(hŒQUSBDEVFS_DISCSIGNAL *TBS* File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_DISCSIGNAL”h]”hŒUSBDEVFS_DISCSIGNAL”…”�”}”(hj¿‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M¨hj»‘ubji)�”}”(hhh]”hë)�”}”(hŒ<*TBS* File modification time is not updated by this request.”h]”(j)�”}”(hŒ*TBS*”h]”hŒTBS”…”�”}”(hjÔ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjБubhŒ7 File modification time is not updated by this request.”…”�”}”(hjБh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¨hjÍ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj»‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M¨hj{‘h²hubjI)�”}”(hŒNUSBDEVFS_REAPURB *TBS* File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_REAPURB”h]”hŒUSBDEVFS_REAPURB”…”�”}”(hjü‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M«hjø‘ubji)�”}”(hhh]”hë)�”}”(hŒ<*TBS* File modification time is not updated by this request.”h]”(j)�”}”(hŒ*TBS*”h]”hŒTBS”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ’ubhŒ7 File modification time is not updated by this request.”…”�”}”(hj ’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M«hj ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjø‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M«hj{‘h²hubjI)�”}”(hŒTUSBDEVFS_REAPURBNDELAY *TBS* File modification time is not updated by this request. ”h]”(jO)�”}”(hŒUSBDEVFS_REAPURBNDELAY”h]”hŒUSBDEVFS_REAPURBNDELAY”…”�”}”(hj9’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M®hj5’ubji)�”}”(hhh]”hë)�”}”(hŒ<*TBS* File modification time is not updated by this request.”h]”(j)�”}”(hŒ*TBS*”h]”hŒTBS”…”�”}”(hjN’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ’ubhŒ7 File modification time is not updated by this request.”…”�”}”(hjJ’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M®hjG’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj5’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M®hj{‘h²hubjI)�”}”(hŒUSBDEVFS_SUBMITURB *TBS* ”h]”(jO)�”}”(hŒUSBDEVFS_SUBMITURB”h]”hŒUSBDEVFS_SUBMITURB”…”�”}”(hjv’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´M±hjr’ubji)�”}”(hhh]”hë)�”}”(hŒ*TBS*”h]”j)�”}”(hj‰’h]”hŒTBS”…”�”}”(hj‹’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M±hj„’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhjr’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´M±hj{‘h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jChj‘h²hh³hÃh´Nubeh}”(h]”Œasynchronous-i-o-support”ah ]”h"]”Œasynchronous i/o support”ah$]”h&]”uh1hÄhj²Šh²hh³hÃh´Mnubeh}”(h]”Œthe-ioctl-requests”ah ]”h"]”Œthe ioctl() requests”ah$]”h&]”uh1hÄhj[†h²hh³hÃh´Mfubeh}”(h]”Œthe-usb-character-device-nodes”ah ]”h"]”Œthe usb character device nodes”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KØubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒThe USB devices”h]”hŒThe USB devices”…”�”}”(hjË’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÈ’h²hh³hÃh´M´ubhë)�”}”(hŒ-The USB devices are now exported via debugfs:”h]”hŒ-The USB devices are now exported via debugfs:”…”�”}”(hjÙ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¶hjÈ’h²hubj¶)�”}”(hhh]”j»)�”}”(hŒÄ``/sys/kernel/debug/usb/devices`` ... a text file showing each of the USB devices on known to the kernel, and their configuration descriptors. You can also poll() this to learn about new devices. ”h]”hë)�”}”(hŒÃ``/sys/kernel/debug/usb/devices`` ... a text file showing each of the USB devices on known to the kernel, and their configuration descriptors. You can also poll() this to learn about new devices.”h]”(jÑ)�”}”(hŒ!``/sys/kernel/debug/usb/devices``”h]”hŒ/sys/kernel/debug/usb/devices”…”�”}”(hjò’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjî’ubhŒ¢ ... a text file showing each of the USB devices on known to the kernel, and their configuration descriptors. You can also poll() this to learn about new devices.”…”�”}”(hjî’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¸hjê’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jºhjç’h²hh³hÃh´Nubah}”(h]”h ]”h"]”h$]”h&]”j†j‡uh1jµh³hÃh´M¸hjÈ’h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ/sys/kernel/debug/usb/devices”h]”hŒ/sys/kernel/debug/usb/devices”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj“h²hh³hÃh´M½ubhë)�”}”(hXThis file is handy for status viewing tools in user mode, which can scan the text format and ignore most of it. More detailed device status (including class and vendor status) is available from device-specific files. For information about the current format of this file, see below.”h]”hXThis file is handy for status viewing tools in user mode, which can scan the text format and ignore most of it. More detailed device status (including class and vendor status) is available from device-specific files. For information about the current format of this file, see below.”…”�”}”(hj'“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¿hj“h²hubhë)�”}”(hŒuThis file, in combination with the poll() system call, can also be used to detect when devices are added or removed::”h]”hŒtThis file, in combination with the poll() system call, can also be used to detect when devices are added or removed:”…”�”}”(hj5“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÄhj“h²hubj )�”}”(hXbint fd; struct pollfd pfd; fd = open("/sys/kernel/debug/usb/devices", O_RDONLY); pfd = { fd, POLLIN, 0 }; for (;;) { /* The first time through, this call will return immediately. */ poll(&pfd, 1, -1); /* To see what's changed, compare the file's previous and current contents or scan the filesystem. (Scanning is more precise.) */ }”h]”hXbint fd; struct pollfd pfd; fd = open("/sys/kernel/debug/usb/devices", O_RDONLY); pfd = { fd, POLLIN, 0 }; for (;;) { /* The first time through, this call will return immediately. */ poll(&pfd, 1, -1); /* To see what's changed, compare the file's previous and current contents or scan the filesystem. (Scanning is more precise.) */ }”…”�”}”hjC“sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MÇhj“h²hubhë)�”}”(hŒßNote that this behavior is intended to be used for informational and debug purposes. It would be more appropriate to use programs such as udev or HAL to initialize a device or start a user-mode helper program, for instance.”h]”hŒßNote that this behavior is intended to be used for informational and debug purposes. It would be more appropriate to use programs such as udev or HAL to initialize a device or start a user-mode helper program, for instance.”…”�”}”(hjQ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÔhj“h²hubhë)�”}”(hŒFIn this file, each device's output has multiple lines of ASCII output.”h]”hŒHIn this file, each device’s output has multiple lines of ASCII output.”…”�”}”(hj_“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÙhj“h²hubhë)�”}”(hX9I made it ASCII instead of binary on purpose, so that someone can obtain some useful data from it without the use of an auxiliary program. However, with an auxiliary program, the numbers in the first 4 columns of each ``T:`` line (topology info: Lev, Prnt, Port, Cnt) can be used to build a USB topology diagram.”h]”(hŒÛI made it ASCII instead of binary on purpose, so that someone can obtain some useful data from it without the use of an auxiliary program. However, with an auxiliary program, the numbers in the first 4 columns of each ”…”�”}”(hjm“h²hh³Nh´NubjÑ)�”}”(hŒ``T:``”h]”hŒT:”…”�”}”(hju“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjm“ubhŒX line (topology info: Lev, Prnt, Port, Cnt) can be used to build a USB topology diagram.”…”�”}”(hjm“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÛhj“h²hubhë)�”}”(hŒ;Each line is tagged with a one-character ID for that line::”h]”hŒ:Each line is tagged with a one-character ID for that line:”…”�”}”(hj�“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Máhj“h²hubj )�”}”(hXrT = Topology (etc.) B = Bandwidth (applies only to USB host controllers, which are virtualized as root hubs) D = Device descriptor info. P = Product ID info. (from Device descriptor, but they won't fit together on one line) S = String descriptors. C = Configuration descriptor info. (* = active configuration) I = Interface descriptor info. E = Endpoint descriptor info.”h]”hXrT = Topology (etc.) B = Bandwidth (applies only to USB host controllers, which are virtualized as root hubs) D = Device descriptor info. P = Product ID info. (from Device descriptor, but they won't fit together on one line) S = String descriptors. C = Configuration descriptor info. (* = active configuration) I = Interface descriptor info. E = Endpoint descriptor info.”…”�”}”hj›“sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mãhj“h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ+/sys/kernel/debug/usb/devices output format”h]”hŒ+/sys/kernel/debug/usb/devices output format”…”�”}”(hj¬“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj©“h²hh³hÃh´MïubjD)�”}”(hhh]”jI)�”}”(hŒ‚Legend:: d = decimal number (may have leading spaces or 0's) x = hexadecimal number (may have leading spaces or 0's) s = string ”h]”(jO)�”}”(hŒLegend::”h]”hŒLegend::”…”�”}”(hjÁ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNh³hÃh´Möhj½“ubji)�”}”(hhh]”hë)�”}”(hŒvd = decimal number (may have leading spaces or 0's) x = hexadecimal number (may have leading spaces or 0's) s = string”h]”hŒzd = decimal number (may have leading spaces or 0’s) x = hexadecimal number (may have leading spaces or 0’s) s = string”…”�”}”(hjÒ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MòhjÏ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhj½“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jHh³hÃh´Möhjº“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj©“h²hh³hÃh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Topology info”h]”hŒ Topology info”…”�”}”(hjõ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjò“h²hh³hÃh´Mùubj )�”}”(hXT: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd | | | | | | | | |__MaxChildren | | | | | | | |__Device Speed in Mbps | | | | | | |__DeviceNumber | | | | | |__Count of devices at this level | | | | |__Connector/Port on Parent for this device | | | |__Parent DeviceNumber | | |__Level in topology for this bus | |__Bus number |__Topology info tag”h]”hXT: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd | | | | | | | | |__MaxChildren | | | | | | | |__Device Speed in Mbps | | | | | | |__DeviceNumber | | | | | |__Count of devices at this level | | | | |__Connector/Port on Parent for this device | | | |__Parent DeviceNumber | | |__Level in topology for this bus | |__Bus number |__Topology info tag”…”�”}”hj”sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mýhjò“h²hubhë)�”}”(hŒ Speed may be:”h]”hŒ Speed may be:”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhjò“h²hubjŒ7)�”}”(hX-======= ====================================================== 1.5 Mbit/s for low speed USB 12 Mbit/s for full speed USB 480 Mbit/s for high speed USB (added for USB 2.0) 5000 Mbit/s for SuperSpeed USB (added for USB 3.0) ======= ====================================================== ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j-”hj*”ubj.”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K6uh1j-”hj*”ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hë)�”}”(hŒ1.5”h]”hŒ1.5”…”�”}”(hjR”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjO”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjJ”ubjN”)�”}”(hhh]”hë)�”}”(hŒMbit/s for low speed USB”h]”hŒMbit/s for low speed USB”…”�”}”(hji”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjf”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjJ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jH”hjE”ubjI”)�”}”(hhh]”(jN”)�”}”(hhh]”hë)�”}”(hŒ12”h]”hŒ12”…”�”}”(hj‰”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hj†”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjƒ”ubjN”)�”}”(hhh]”hë)�”}”(hŒMbit/s for full speed USB”h]”hŒMbit/s for full speed USB”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hj�”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjƒ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jH”hjE”ubjI”)�”}”(hhh]”(jN”)�”}”(hhh]”hë)�”}”(hŒ480”h]”hŒ480”…”�”}”(hjÀ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hj½”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjº”ubjN”)�”}”(hhh]”hë)�”}”(hŒ-Mbit/s for high speed USB (added for USB 2.0)”h]”hŒ-Mbit/s for high speed USB (added for USB 2.0)”…”�”}”(hj×”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hjÔ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjº”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jH”hjE”ubjI”)�”}”(hhh]”(jN”)�”}”(hhh]”hë)�”}”(hŒ5000”h]”hŒ5000”…”�”}”(hj÷”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhjô”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjñ”ubjN”)�”}”(hhh]”hë)�”}”(hŒ-Mbit/s for SuperSpeed USB (added for USB 3.0)”h]”hŒ-Mbit/s for SuperSpeed USB (added for USB 3.0)”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj •ubah}”(h]”h ]”h"]”h$]”h&]”uh1jM”hjñ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jH”hjE”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jC”hj*”ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j(”hj%”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#”hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‹7h³hÃh´M hjò“h²hubhë)�”}”(hŒ˜For reasons lost in the mists of time, the Port number is always too low by 1. For example, a device plugged into port 4 will show up with ``Port=03``.”h]”(hŒŒFor reasons lost in the mists of time, the Port number is always too low by 1. For example, a device plugged into port 4 will show up with ”…”�”}”(hjA•h²hh³Nh´NubjÑ)�”}”(hŒ ``Port=03``”h]”hŒPort=03”…”�”}”(hjI•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjA•ubhŒ.”…”�”}”(hjA•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhjò“h²hubeh}”(h]”Œ topology-info”ah ]”h"]”Œ topology info”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´MùubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒBandwidth info”h]”hŒBandwidth info”…”�”}”(hjl•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhji•h²hh³hÃh´Mubj )�”}”(hŒõB: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd | | | |__Number of isochronous requests | | |__Number of interrupt requests | |__Total Bandwidth allocated to this bus |__Bandwidth info tag”h]”hŒõB: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd | | | |__Number of isochronous requests | | |__Number of interrupt requests | |__Total Bandwidth allocated to this bus |__Bandwidth info tag”…”�”}”hjz•sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mhji•h²hubhë)�”}”(hXCBandwidth allocation is an approximation of how much of one frame (millisecond) is in use. It reflects only periodic transfers, which are the only transfers that reserve bandwidth. Control and bulk transfers use all other bandwidth, including reserved bandwidth that is not used for transfers (such as for short packets).”h]”hXCBandwidth allocation is an approximation of how much of one frame (millisecond) is in use. It reflects only periodic transfers, which are the only transfers that reserve bandwidth. Control and bulk transfers use all other bandwidth, including reserved bandwidth that is not used for transfers (such as for short packets).”…”�”}”(hjˆ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M hji•h²hubhë)�”}”(hŒìThe percentage is how much of the "reserved" bandwidth is scheduled by those transfers. For a low or full speed bus (loosely, "USB 1.1"), 90% of the bus bandwidth is reserved. For a high speed bus (loosely, "USB 2.0") 80% is reserved.”h]”hŒøThe percentage is how much of the “reservedâ€� bandwidth is scheduled by those transfers. For a low or full speed bus (loosely, “USB 1.1â€�), 90% of the bus bandwidth is reserved. For a high speed bus (loosely, “USB 2.0â€�) 80% is reserved.”…”�”}”(hj–•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M&hji•h²hubeh}”(h]”Œbandwidth-info”ah ]”h"]”Œbandwidth info”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ(Device descriptor info & Product ID info”h]”hŒ(Device descriptor info & Product ID info”…”�”}”(hj¯•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj¬•h²hh³hÃh´M-ubj )�”}”(hŒ\D: Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd P: Vendor=xxxx ProdID=xxxx Rev=xx.xx”h]”hŒ\D: Ver=x.xx Cls=xx(s) Sub=xx Prot=xx MxPS=dd #Cfgs=dd P: Vendor=xxxx ProdID=xxxx Rev=xx.xx”…”�”}”hj½•sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´M1hj¬•h²hubhë)�”}”(hŒwhere::”h]”hŒwhere:”…”�”}”(hjË•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M4hj¬•h²hubj )�”}”(hX€D: Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd | | | | | | |__NumberConfigurations | | | | | |__MaxPacketSize of Default Endpoint | | | | |__DeviceProtocol | | | |__DeviceSubClass | | |__DeviceClass | |__Device USB version |__Device info tag #1”h]”hX€D: Ver=x.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd | | | | | | |__NumberConfigurations | | | | | |__MaxPacketSize of Default Endpoint | | | | |__DeviceProtocol | | | |__DeviceSubClass | | |__DeviceClass | |__Device USB version |__Device info tag #1”…”�”}”hjÙ•sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´M6hj¬•h²hubhë)�”}”(hŒwhere::”h]”hŒwhere:”…”�”}”(hjç•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M?hj¬•h²hubj )�”}”(hŒ«P: Vendor=xxxx ProdID=xxxx Rev=xx.xx | | | |__Product revision number | | |__Product ID code | |__Vendor ID code |__Device info tag #2”h]”hŒ«P: Vendor=xxxx ProdID=xxxx Rev=xx.xx | | | |__Product revision number | | |__Product ID code | |__Vendor ID code |__Device info tag #2”…”�”}”hjõ•sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MAhj¬•h²hubeh}”(h]”Œ&device-descriptor-info-product-id-info”ah ]”h"]”Œ(device descriptor info & product id info”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´M-ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒString descriptor info”h]”hŒString descriptor info”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj –h²hh³hÃh´MIubj )�”}”(hX‡S: Manufacturer=ssss | |__Manufacturer of this device as read from the device. | For USB host controller drivers (virtual root hubs) this may | be omitted, or (for newer drivers) will identify the kernel | version and the driver which provides this hub emulation. |__String info tag S: Product=ssss | |__Product description of this device as read from the device. | For older USB host controller drivers (virtual root hubs) this | indicates the driver; for newer ones, it's a product (and vendor) | description that often comes from the kernel's PCI ID database. |__String info tag S: SerialNumber=ssss | |__Serial Number of this device as read from the device. | For USB host controller drivers (virtual root hubs) this is | some unique ID, normally a bus ID (address or slot name) that | can't be shared with any other device. |__String info tag”h]”hX‡S: Manufacturer=ssss | |__Manufacturer of this device as read from the device. | For USB host controller drivers (virtual root hubs) this may | be omitted, or (for newer drivers) will identify the kernel | version and the driver which provides this hub emulation. |__String info tag S: Product=ssss | |__Product description of this device as read from the device. | For older USB host controller drivers (virtual root hubs) this | indicates the driver; for newer ones, it's a product (and vendor) | description that often comes from the kernel's PCI ID database. |__String info tag S: SerialNumber=ssss | |__Serial Number of this device as read from the device. | For USB host controller drivers (virtual root hubs) this is | some unique ID, normally a bus ID (address or slot name) that | can't be shared with any other device. |__String info tag”…”�”}”hj–sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MLhj –h²hubeh}”(h]”Œstring-descriptor-info”ah ]”h"]”Œstring descriptor info”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´MIubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒConfiguration descriptor info”h]”hŒConfiguration descriptor info”…”�”}”(hj5–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj2–h²hh³hÃh´Mdubj )�”}”(hXC:* #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA | | | | | |__MaxPower in mA | | | | |__Attributes | | | |__ConfiguratioNumber | | |__NumberOfInterfaces | |__ "*" indicates the active configuration (others are " ") |__Config info tag”h]”hXC:* #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA | | | | | |__MaxPower in mA | | | | |__Attributes | | | |__ConfiguratioNumber | | |__NumberOfInterfaces | |__ "*" indicates the active configuration (others are " ") |__Config info tag”…”�”}”hjC–sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mghj2–h²hubhë)�”}”(hXUSB devices may have multiple configurations, each of which act rather differently. For example, a bus-powered configuration might be much less capable than one that is self-powered. Only one device configuration can be active at a time; most devices have only one configuration.”h]”hXUSB devices may have multiple configurations, each of which act rather differently. For example, a bus-powered configuration might be much less capable than one that is self-powered. Only one device configuration can be active at a time; most devices have only one configuration.”…”�”}”(hjQ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mohj2–h²hubhë)�”}”(hX$Each configuration consists of one or more interfaces. Each interface serves a distinct "function", which is typically bound to a different USB device driver. One common example is a USB speaker with an audio interface for playback, and a HID interface for use with software volume control.”h]”hX(Each configuration consists of one or more interfaces. Each interface serves a distinct “functionâ€�, which is typically bound to a different USB device driver. One common example is a USB speaker with an audio interface for playback, and a HID interface for use with software volume control.”…”�”}”(hj_–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Muhj2–h²hubeh}”(h]”Œconfiguration-descriptor-info”ah ]”h"]”Œconfiguration descriptor info”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´MdubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ6Interface descriptor info (can be multiple per Config)”h]”hŒ6Interface descriptor info (can be multiple per Config)”…”�”}”(hjx–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhju–h²hh³hÃh´M|ubj )�”}”(hX/I:* If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss | | | | | | | | |__Driver name | | | | | | | | or "(none)" | | | | | | | |__InterfaceProtocol | | | | | | |__InterfaceSubClass | | | | | |__InterfaceClass | | | | |__NumberOfEndpoints | | | |__AlternateSettingNumber | | |__InterfaceNumber | |__ "*" indicates the active altsetting (others are " ") |__Interface info tag”h]”hX/I:* If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss | | | | | | | | |__Driver name | | | | | | | | or "(none)" | | | | | | | |__InterfaceProtocol | | | | | | |__InterfaceSubClass | | | | | |__InterfaceClass | | | | |__NumberOfEndpoints | | | |__AlternateSettingNumber | | |__InterfaceNumber | |__ "*" indicates the active altsetting (others are " ") |__Interface info tag”…”�”}”hj†–sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mhju–h²hubhë)�”}”(hŒôA given interface may have one or more "alternate" settings. For example, default settings may not use more than a small amount of periodic bandwidth. To use significant fractions of bus bandwidth, drivers must select a non-default altsetting.”h]”hŒøA given interface may have one or more “alternateâ€� settings. For example, default settings may not use more than a small amount of periodic bandwidth. To use significant fractions of bus bandwidth, drivers must select a non-default altsetting.”…”�”}”(hj”–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M‹hju–h²hubhë)�”}”(hŒ¯Only one setting for an interface may be active at a time, and only one driver may bind to an interface at a time. Most devices have only one alternate setting per interface.”h]”hŒ¯Only one setting for an interface may be active at a time, and only one driver may bind to an interface at a time. Most devices have only one alternate setting per interface.”…”�”}”(hj¢–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M�hju–h²hubeh}”(h]”Œ4interface-descriptor-info-can-be-multiple-per-config”ah ]”h"]”Œ6interface descriptor info (can be multiple per config)”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´M|ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ8Endpoint descriptor info (can be multiple per Interface)”h]”hŒ8Endpoint descriptor info (can be multiple per Interface)”…”�”}”(hj»–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj¸–h²hh³hÃh´M–ubj )�”}”(hX E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddss | | | | |__Interval (max) between transfers | | | |__EndpointMaxPacketSize | | |__Attributes(EndpointType) | |__EndpointAddress(I=In,O=Out) |__Endpoint info tag”h]”hX E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=dddss | | | | |__Interval (max) between transfers | | | |__EndpointMaxPacketSize | | |__Attributes(EndpointType) | |__EndpointAddress(I=In,O=Out) |__Endpoint info tag”…”�”}”hjÉ–sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mšhj¸–h²hubhë)�”}”(hŒ¸The interval is nonzero for all periodic (interrupt or isochronous) endpoints. For high speed endpoints the transfer interval may be measured in microseconds rather than milliseconds.”h]”hŒ¸The interval is nonzero for all periodic (interrupt or isochronous) endpoints. For high speed endpoints the transfer interval may be measured in microseconds rather than milliseconds.”…”�”}”(hj×–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¡hj¸–h²hubhë)�”}”(hŒèFor high speed periodic endpoints, the ``EndpointMaxPacketSize`` reflects the per-microframe data transfer size. For "high bandwidth" endpoints, that can reflect two or three packets (for up to 3KBytes every 125 usec) per endpoint.”h]”(hŒ'For high speed periodic endpoints, the ”…”�”}”(hjå–h²hh³Nh´NubjÑ)�”}”(hŒ``EndpointMaxPacketSize``”h]”hŒEndpointMaxPacketSize”…”�”}”(hjí–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjå–ubhŒ¬ reflects the per-microframe data transfer size. For “high bandwidthâ€� endpoints, that can reflect two or three packets (for up to 3KBytes every 125 usec) per endpoint.”…”�”}”(hjå–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M¥hj¸–h²hubhë)�”}”(hŒ«With the Linux-USB stack, periodic bandwidth reservations use the transfer intervals and sizes provided by URBs, which can be less than those found in endpoint descriptor.”h]”hŒ«With the Linux-USB stack, periodic bandwidth reservations use the transfer intervals and sizes provided by URBs, which can be less than those found in endpoint descriptor.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mªhj¸–h²hubeh}”(h]”Œ6endpoint-descriptor-info-can-be-multiple-per-interface”ah ]”h"]”Œ8endpoint descriptor info (can be multiple per interface)”ah$]”h&]”uh1hÄhj©“h²hh³hÃh´M–ubeh}”(h]”Œ*sys-kernel-debug-usb-devices-output-format”ah ]”h"]”Œ+/sys/kernel/debug/usb/devices output format”ah$]”h&]”uh1hÄhj“h²hh³hÃh´MïubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒUsage examples”h]”hŒUsage examples”…”�”}”(hj&—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj#—h²hh³hÃh´M¯ubhë)�”}”(hXšIf a user or script is interested only in Topology info, for example, use something like ``grep ^T: /sys/kernel/debug/usb/devices`` for only the Topology lines. A command like ``grep -i ^[tdp]: /sys/kernel/debug/usb/devices`` can be used to list only the lines that begin with the characters in square brackets, where the valid characters are TDPCIE. With a slightly more able script, it can display any selected lines (for example, only T, D, and P lines) and change their output format. (The ``procusb`` Perl script is the beginning of this idea. It will list only selected lines [selected from TBDPSCIE] or "All" lines from ``/sys/kernel/debug/usb/devices``.)”h]”(hŒYIf a user or script is interested only in Topology info, for example, use something like ”…”�”}”(hj4—h²hh³Nh´NubjÑ)�”}”(hŒ*``grep ^T: /sys/kernel/debug/usb/devices``”h]”hŒ&grep ^T: /sys/kernel/debug/usb/devices”…”�”}”(hj<—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4—ubhŒ. for only the Topology lines. A command like ”…”�”}”(hj4—h²hh³Nh´NubjÑ)�”}”(hŒ1``grep -i ^[tdp]: /sys/kernel/debug/usb/devices``”h]”hŒ-grep -i ^[tdp]: /sys/kernel/debug/usb/devices”…”�”}”(hjN—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4—ubhX can be used to list only the lines that begin with the characters in square brackets, where the valid characters are TDPCIE. With a slightly more able script, it can display any selected lines (for example, only T, D, and P lines) and change their output format. (The ”…”�”•œ=}”(hj4—h²hh³Nh´NubjÑ)�”}”(hŒ ``procusb``”h]”hŒprocusb”…”�”}”(hj`—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4—ubhŒ Perl script is the beginning of this idea. It will list only selected lines [selected from TBDPSCIE] or “Allâ€� lines from ”…”�”}”(hj4—h²hh³Nh´NubjÑ)�”}”(hŒ!``/sys/kernel/debug/usb/devices``”h]”hŒ/sys/kernel/debug/usb/devices”…”�”}”(hjr—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj4—ubhŒ.)”…”�”}”(hj4—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M±hj#—h²hubhë)�”}”(hŒŽThe Topology lines can be used to generate a graphic/pictorial of the USB devices on a system's root hub. (See more below on how to do this.)”h]”hŒ�The Topology lines can be used to generate a graphic/pictorial of the USB devices on a system’s root hub. (See more below on how to do this.)”…”�”}”(hjŠ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´M½hj#—h²hubhë)�”}”(hŒzThe Interface lines can be used to determine what driver is being used for each device, and which altsetting it activated.”h]”hŒzThe Interface lines can be used to determine what driver is being used for each device, and which altsetting it activated.”…”�”}”(hj˜—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÁhj#—h²hubhë)�”}”(hŒªThe Configuration lines could be used to list maximum power (in milliamps) that a system's USB devices are using. For example, ``grep ^C: /sys/kernel/debug/usb/devices``.”h]”(hŒ�The Configuration lines could be used to list maximum power (in milliamps) that a system’s USB devices are using. For example, ”…”�”}”(hj¦—h²hh³Nh´NubjÑ)�”}”(hŒ*``grep ^C: /sys/kernel/debug/usb/devices``”h]”hŒ&grep ^C: /sys/kernel/debug/usb/devices”…”�”}”(hj®—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhj¦—ubhŒ.”…”�”}”(hj¦—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÄhj#—h²hubhë)�”}”(hŒ¨Here's an example, from a system which has a UHCI root hub, an external hub connected to the root hub, and a mouse and a serial converter connected to the external hub.”h]”hŒªHere’s an example, from a system which has a UHCI root hub, an external hub connected to the root hub, and a mouse and a serial converter connected to the external hub.”…”�”}”(hjÆ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´MÉhj#—h²hubj )�”}”(hXT: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=dce0 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0451 ProdID=1446 Rev= 1.00 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=04b4 ProdID=0001 Rev= 0.00 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse E: Ad=81(I) Atr=03(Int.) MxPS= 3 Ivl= 10ms T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0565 ProdID=0001 Rev= 1.08 S: Manufacturer=Peracom Networks, Inc. S: Product=Peracom USB to Serial Converter C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 16ms E: Ad=01(O) Atr=02(Bulk) MxPS= 16 Ivl= 16ms E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl= 8ms”h]”hXT: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=dce0 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0451 ProdID=1446 Rev= 1.00 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=04b4 ProdID=0001 Rev= 0.00 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse E: Ad=81(I) Atr=03(Int.) MxPS= 3 Ivl= 10ms T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0565 ProdID=0001 Rev= 1.08 S: Manufacturer=Peracom Networks, Inc. S: Product=Peracom USB to Serial Converter C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 16ms E: Ad=01(O) Atr=02(Bulk) MxPS= 16 Ivl= 16ms E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl= 8ms”…”�”}”hjÔ—sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´MÏhj#—h²hubhë)�”}”(hŒdSelecting only the ``T:`` and ``I:`` lines from this (for example, by using ``procusb ti``), we have”h]”(hŒSelecting only the ”…”�”}”(hjâ—h²hh³Nh´NubjÑ)�”}”(hŒ``T:``”h]”hŒT:”…”�”}”(hjê—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjâ—ubhŒ and ”…”�”}”(hjâ—h²hh³Nh´NubjÑ)�”}”(hŒ``I:``”h]”hŒI:”…”�”}”(hjü—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjâ—ubhŒ( lines from this (for example, by using ”…”�”}”(hjâ—h²hh³Nh´NubjÑ)�”}”(hŒ``procusb ti``”h]”hŒ procusb ti”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÐhjâ—ubhŒ ), we have”…”�”}”(hjâ—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Móhj#—h²hubj )�”}”(hXÖT: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial”h]”hXÖT: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial”…”�”}”hj&˜sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Møhj#—h²hubhë)�”}”(hŒ7Physically this looks like (or could be converted to)::”h]”hŒ6Physically this looks like (or could be converted to):”…”�”}”(hj4˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj#—h²hubj )�”}”(hX; +------------------+ | PC/root_hub (12)| Dev# = 1 +------------------+ (nn) is Mbps. Level 0 | CN.0 | CN.1 | [CN = connector/port #] +------------------+ / / +-----------------------+ Level 1 | Dev#2: 4-port hub (12)| +-----------------------+ |CN.0 |CN.1 |CN.2 |CN.3 | +-----------------------+ \ \____________________ \_____ \ \ \ +--------------------+ +--------------------+ Level 2 | Dev# 3: mouse (1.5)| | Dev# 4: serial (12)| +--------------------+ +--------------------+”h]”hX; +------------------+ | PC/root_hub (12)| Dev# = 1 +------------------+ (nn) is Mbps. Level 0 | CN.0 | CN.1 | [CN = connector/port #] +------------------+ / / +-----------------------+ Level 1 | Dev#2: 4-port hub (12)| +-----------------------+ |CN.0 |CN.1 |CN.2 |CN.3 | +-----------------------+ \ \____________________ \_____ \ \ \ +--------------------+ +--------------------+ Level 2 | Dev# 3: mouse (1.5)| | Dev# 4: serial (12)| +--------------------+ +--------------------+”…”�”}”hjB˜sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mhj#—h²hubhë)�”}”(hŒ]Or, in a more tree-like structure (ports [Connectors] without connections could be omitted)::”h]”hŒ\Or, in a more tree-like structure (ports [Connectors] without connections could be omitted):”…”�”}”(hjP˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêh³hÃh´Mhj#—h²hubj )�”}”(hŒÂPC: Dev# 1, root hub, 2 ports, 12 Mbps |_ CN.0: Dev# 2, hub, 4 ports, 12 Mbps |_ CN.0: Dev #3, mouse, 1.5 Mbps |_ CN.1: |_ CN.2: Dev #4, serial, 12 Mbps |_ CN.3: |_ CN.1:”h]”hŒÂPC: Dev# 1, root hub, 2 ports, 12 Mbps |_ CN.0: Dev# 2, hub, 4 ports, 12 Mbps |_ CN.0: Dev #3, mouse, 1.5 Mbps |_ CN.1: |_ CN.2: Dev #4, serial, 12 Mbps |_ CN.3: |_ CN.1:”…”�”}”hj^˜sbah}”(h]”h ]”h"]”h$]”h&]”j¢j£uh1jh³hÃh´Mhj#—h²hubeh}”(h]”Œusage-examples”ah ]”h"]”Œusage examples”ah$]”h&]”uh1hÄhj“h²hh³hÃh´M¯ubeh}”(h]”Œsys-kernel-debug-usb-devices”ah ]”h"]”Œ/sys/kernel/debug/usb/devices”ah$]”h&]”uh1hÄhjÈ’h²hh³hÃh´M½ubeh}”(h]”Œthe-usb-devices”ah ]”h"]”Œthe usb devices”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´M´ubeh}”(h]”(Œthe-linux-usb-host-side-api”hÂeh ]”h"]”(Œthe linux-usb host side api”Œusb-hostside-api”eh$]”h&]”uh1hÄhhh²hh³hÃh´Kjc}”jŠ˜h·sje}”hÂh·subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÃuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÉNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jM”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j±˜Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÃŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”(hÂ]”h·aj®]”j¤ajY]”jOauŒnameids”}”(jŠ˜hÂj‰˜j†˜j=j:j´j±j`j®j_j\jÀrjYj¿rj¼rjTjÿSjX†jU†jÅ’jÂ’j#ˆj ˆjÓ‰jЉj¯Šj¬Šj½’jº’jŽjŽj‘jþ�jµ’j²’j�˜j~˜jy˜jv˜j —j—jf•jc•j©•j¦•j–j–j/–j,–jr–jo–jµ–j²–j—j—jq˜jn˜uŒ nametypes”}”(jŠ˜ˆj‰˜‰j=‰j´‰j`ˆj_‰jÀrˆj¿r‰jT‰jX†‰jÅ’‰j#ˆ‰jÓ‰‰j¯Š‰j½’‰jމj‘‰jµ’‰j�˜‰jy˜‰j —‰jf•‰j©•‰j–‰j/–‰jr–‰jµ–‰j—‰jq˜‰uh}”(hÂhÆj†˜hÆj:hÙj±j@j®j·j\j·jj&j¡j¦j j%j–j›jF jK jõ jú jk jp jjjnjsjŒj‘j jj7j<jYjgj¼rjgj’j˜jjjj!jo!ju#jz#j%j%j¿'jÄ'j27j77jŠ8j�8jR:jW:j=j =jH>jM>jý?j@jyAj~AjõBjúBjqDjvDjíEjòEjiGjnGjfIjkIj*Kj/KjNPjSPj TjTjæUjëUjðVjõVjß^jä^jIdjNdjòhj÷hjnjnj¬oj±oj?qjDqjÿSjÅrjþrjsj�tj¢tj÷vjüvjŸxj¤xj‚zj‡zj¬|j±|j-~j2~j8€j=€jÔ�jÙ�jl†jq†jÒˆj׈j�Šj•ŠjNŒjSŒjÞ�jã�jn�js�jþ�j‘j’j„’jñ“jö“jc•jh•j•—jš—j®™j³™j/›j4›j°œjµœj�¢j”¢j©j©jƒ¯jˆ¯jѳjÖ³j.¸j3¸jn¼js¼jÚÁjßÁj2Äj7Äj´Åj¹Åj�Éj•ÉjÚÌjßÌjéÎjîÎj–Òj›ÒjòÔj÷ÔjÿÖj×jçÙjìÙj½ÛjÂÛjÞjÞjPàjUàj ãj¥ãjæjæj[èj`èj9ëj>ëjtíjyíjáðjæðjÊójÏójsõjxõjƒøjˆøjSújXújüj üj½ýjÂýj“ÿj˜ÿjEjJjèjíjójøj½jÂj`jej j j¬j±j:j?jÈjÍjÓjØjƒjˆjajfjÆ!jË!jm$jr$j²'j·'j¦)j«)j(+j-+j-j!-jž.j£.j’0j—0j3j3j©4j®4j8j8j;j;j®?j³?jtCjyCjáEjæEj9Hj>HjñIjöIj.Lj3LjÂMjÇMj¡Oj¦Oj•QjšQjU†jTj–Tj›TjKWjPWj°YjµYj ]j]jJ_jO_jbbjgbjjfjofjÖijÛijXkj]kj–mj›mj²oj·ojCqjHqjgujlujàxjåxjv{j{{j}j$}jÃjÈj{�j€�jׂjÜ‚j¶„j»„jÂ’j[†j ˆjh‡jЉj&ˆj¬ŠjÖ‰jº’j²ŠjŽjw‹jþ�j"Žj²’j‘j~˜jÈ’jv˜j“j—j©“jc•jò“j¦•ji•j–j¬•j,–j –jo–j2–j²–ju–j—j¸–jn˜j#—uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hë)�”}”(hŒ`Blank line missing before literal block (after the "::")? Interpreted as a definition list item.”h]”hŒdBlank line missing before literal block (after the “::â€�)? Interpreted as a definition list item.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hêhj™ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œline”M÷Œsource”hÃuh1j™hjÏ“ubaŒtransform_messages”]”(j™)�”}”(hhh]”hë)�”}”(hhh]”hŒ6Hyperlink target "usb-hostside-api" is not referenced.”…”�”}”hj9™sbah}”(h]”h ]”h"]”h$]”h&]”uh1hêhj6™ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j1™Œsource”hÃŒline”Kuh1j™ubj™)�”}”(hhh]”hë)�”}”(hhh]”hŒ2Hyperlink target "usb-chapter9" is not referenced.”…”�”}”hjS™sbah}”(h]”h ]”h"]”h$]”h&]”uh1hêhjP™ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j1™Œsource”hÃŒline”Kkuh1j™ubj™)�”}”(hhh]”hë)�”}”(hhh]”hŒ0Hyperlink target "usb-header" is not referenced.”…”�”}”hjm™sbah}”(h]”h ]”h"]”h$]”h&]”uh1hêhjj™ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j1™Œsource”hÃŒline”K~uh1j™ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.