sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget'/translations/zh_CN/driver-api/usb/dwc3modnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/zh_TW/driver-api/usb/dwc3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/it_IT/driver-api/usb/dwc3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ja_JP/driver-api/usb/dwc3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ko_KR/driver-api/usb/dwc3modnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/sp_SP/driver-api/usb/dwc3modnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h6Synopsys DesignWare Core SuperSpeed USB 3.0 Controllerh]h6Synopsys DesignWare Core SuperSpeed USB 3.0 Controller}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhA/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3.rsthKubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h+Felipe Balbi h]h paragraph)}(hhh](hFelipe Balbi <}(hhhhhNhNubh reference)}(hfelipe.balbi@linux.intel.comh]hfelipe.balbi@linux.intel.com}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:felipe.balbi@linux.intel.comuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hDateh]hDate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(h April 2017 h]h)}(h April 2017h]h April 2017}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhK ubh)}(hThe *Synopsys DesignWare Core SuperSpeed USB 3.0 Controller* (hereinafter referred to as *DWC3*) is a USB SuperSpeed compliant controller which can be configured in one of 4 ways:h](hThe }(hjNhhhNhNubhemphasis)}(h8*Synopsys DesignWare Core SuperSpeed USB 3.0 Controller*h]h6Synopsys DesignWare Core SuperSpeed USB 3.0 Controller}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjNubh (hereinafter referred to as }(hjNhhhNhNubjW)}(h*DWC3*h]hDWC3}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjNubhT) is a USB SuperSpeed compliant controller which can be configured in one of 4 ways:}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hj=hhubh block_quote)}(hl1. Peripheral-only configuration 2. Host-only configuration 3. Dual-Role configuration 4. Hub configuration h]henumerated_list)}(hhh](h list_item)}(hPeripheral-only configurationh]h)}(hjh]hPeripheral-only configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hHost-only configurationh]h)}(hjh]hHost-only configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hDual-Role configurationh]h)}(hjh]hDual-Role configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hHub configuration h]h)}(hHub configurationh]hHub configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj=hhubh)}(hXLinux currently supports several versions of this controller. In all likelihood, the version in your SoC is already supported. At the time of this writing, known tested versions range from 2.02a to 3.10a. As a rule of thumb, anything above 2.02a should work reliably well.h]hXLinux currently supports several versions of this controller. In all likelihood, the version in your SoC is already supported. At the time of this writing, known tested versions range from 2.02a to 3.10a. As a rule of thumb, anything above 2.02a should work reliably well.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubh)}(hKCurrently, we have many known users for this driver. In alphabetical order:h]hKCurrently, we have many known users for this driver. In alphabetical order:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubj)}(hg1. Cavium 2. Intel Corporation 3. Qualcomm 4. Rockchip 5. ST 6. Samsung 7. Texas Instruments 8. Xilinx h]j)}(hhh](j)}(hCaviumh]h)}(hj"h]hCavium}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hIntel Corporationh]h)}(hj9h]hIntel Corporation}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hQualcommh]h)}(hjPh]hQualcomm}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjNubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hRockchiph]h)}(hjgh]hRockchip}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjeubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hSTh]h)}(hj~h]hST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj|ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hSamsungh]h)}(hjh]hSamsung}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hTexas Instrumentsh]h)}(hjh]hTexas Instruments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXilinx h]h)}(hXilinxh]hXilinx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj=hhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSummary of Featuresh]hSummary of Features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK&ubh)}(hFor details about features supported by your version of DWC3, consult your IP team and/or *Synopsys DesignWare Core SuperSpeed USB 3.0 Controller Databook*. Following is a list of features supported by the driver at the time of this writing:h](hZFor details about features supported by your version of DWC3, consult your IP team and/or }(hjhhhNhNubjW)}(hA*Synopsys DesignWare Core SuperSpeed USB 3.0 Controller Databook*h]h?Synopsys DesignWare Core SuperSpeed USB 3.0 Controller Databook}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubhV. Following is a list of features supported by the driver at the time of this writing:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubj)}(hX1. Up to 16 bidirectional endpoints (including the control pipe - ep0) 2. Flexible endpoint configuration 3. Simultaneous IN and OUT transfer support 4. Scatter-list support 5. Up to 256 TRBs [#trb]_ per endpoint 6. Support for all transfer types (*Control*, *Bulk*, *Interrupt*, and *Isochronous*) 7. SuperSpeed Bulk Streams 8. Link Power Management 9. Trace Events for debugging 10. DebugFS [#debugfs]_ interface h]j)}(hhh](j)}(hCUp to 16 bidirectional endpoints (including the control pipe - ep0)h]h)}(hCUp to 16 bidirectional endpoints (including the control pipe - ep0)h]hCUp to 16 bidirectional endpoints (including the control pipe - ep0)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj%ubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hFlexible endpoint configurationh]h)}(hj?h]hFlexible endpoint configuration}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hj=ubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(h(Simultaneous IN and OUT transfer supporth]h)}(hjVh]h(Simultaneous IN and OUT transfer support}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjTubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hScatter-list supporth]h)}(hjmh]hScatter-list support}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjkubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(h#Up to 256 TRBs [#trb]_ per endpointh]h)}(hjh](hUp to 256 TRBs }(hjhhhNhNubhfootnote_reference)}(h[#trb]_h]h1}(hjhhhNhNubah}(h]id1ah ]h"]h$]h&]autoKrefidtrbdocnamedriver-api/usb/dwc3uh1jhjresolvedKubh per endpoint}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK2hjubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hRSupport for all transfer types (*Control*, *Bulk*, *Interrupt*, and *Isochronous*)h]h)}(hRSupport for all transfer types (*Control*, *Bulk*, *Interrupt*, and *Isochronous*)h](h Support for all transfer types (}(hjhhhNhNubjW)}(h *Control*h]hControl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh, }(hjhhhNhNubjW)}(h*Bulk*h]hBulk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh, }(hjhhhNhNubjW)}(h *Interrupt*h]h Interrupt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh, and }(hjhhhNhNubjW)}(h *Isochronous*h]h Isochronous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hSuperSpeed Bulk Streamsh]h)}(hjh]hSuperSpeed Bulk Streams}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hLink Power Managementh]h)}(hj-h]hLink Power Management}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj+ubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hTrace Events for debuggingh]h)}(hjDh]hTrace Events for debugging}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjBubah}(h]h ]h"]h$]h&]uh1jhj"ubj)}(hDebugFS [#debugfs]_ interface h]h)}(hDebugFS [#debugfs]_ interfaceh](hDebugFS }(hj]hhhNhNubj)}(h [#debugfs]_h]h3}(hjehhhNhNubah}(h]id2ah ]h"]h$]h&]jKjid9jjuh1jhj]jKubh interface}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK8hjYubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK-hjhhubh)}(hThese features have all been exercised with many of the **in-tree** gadget drivers. We have verified both *ConfigFS* [#configfs]_ and legacy gadget drivers.h](h8These features have all been exercised with many of the }(hjhhhNhNubhstrong)}(h **in-tree**h]hin-tree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' gadget drivers. We have verified both }(hjhhhNhNubjW)}(h *ConfigFS*h]hConfigFS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh }(hjhhhNhNubj)}(h [#configfs]_h]h4}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]jKjconfigfsjjuh1jhjjKubh and legacy gadget drivers.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubeh}(h]summary-of-featuresah ]h"]summary of featuresah$]h&]uh1hhhhhhhhK&ubh)}(hhh](h)}(h Driver Designh]h Driver Design}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK?ubh)}(hThe DWC3 driver sits on the *drivers/usb/dwc3/* directory. All files related to this driver are in this one directory. This makes it easy for new-comers to read the code and understand how it behaves.h](hThe DWC3 driver sits on the }(hjhhhNhNubjW)}(h*drivers/usb/dwc3/*h]hdrivers/usb/dwc3/}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh directory. All files related to this driver are in this one directory. This makes it easy for new-comers to read the code and understand how it behaves.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKAhjhhubh)}(hBecause of DWC3's configuration flexibility, the driver is a little complex in some places but it should be rather straightforward to understand.h]hBecause of DWC3’s configuration flexibility, the driver is a little complex in some places but it should be rather straightforward to understand.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjhhubh)}(h8The biggest part of the driver refers to the Gadget API.h]h8The biggest part of the driver refers to the Gadget API.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjhhubeh}(h] driver-designah ]h"] driver designah$]h&]uh1hhhhhhhhK?ubh)}(hhh](h)}(hKnown Limitationsh]hKnown Limitations}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hhhhhKLubh)}(hLike any other HW, DWC3 has its own set of limitations. To avoid constant questions about such problems, we decided to document them here and have a single location to where we could point users.h]hLike any other HW, DWC3 has its own set of limitations. To avoid constant questions about such problems, we decided to document them here and have a single location to where we could point users.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj6hhubh)}(hhh](h)}(hOUT Transfer Size Requirementsh]hOUT Transfer Size Requirements}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhhhhKSubh)}(hXAccording to Synopsys Databook, all OUT transfer TRBs [#trb]_ must have their *size* field set to a value which is integer divisible by the endpoint's *wMaxPacketSize*. This means that *e.g.* in order to receive a Mass Storage *CBW* [#cbw]_, req->length must either be set to a value that's divisible by *wMaxPacketSize* (1024 on SuperSpeed, 512 on HighSpeed, etc), or DWC3 driver must add a Chained TRB pointing to a throw-away buffer for the remaining length. Without this, OUT transfers will **NOT** start.h](h6According to Synopsys Databook, all OUT transfer TRBs }(hjfhhhNhNubj)}(h[#trb]_h]h1}(hjnhhhNhNubah}(h]id4ah ]h"]h$]h&]jKjjjjuh1jhjfjKubh must have their }(hjfhhhNhNubjW)}(h*size*h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjfubhE field set to a value which is integer divisible by the endpoint’s }(hjfhhhNhNubjW)}(h*wMaxPacketSize*h]hwMaxPacketSize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjfubh. This means that }(hjfhhhNhNubjW)}(h*e.g.*h]he.g.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjfubh$ in order to receive a Mass Storage }(hjfhhhNhNubjW)}(h*CBW*h]hCBW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjfubh }(hjfhhhNhNubj)}(h[#cbw]_h]h5}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]jKjcbwjjuh1jhjfjKubhB, req->length must either be set to a value that’s divisible by }(hjfhhhNhNubjW)}(h*wMaxPacketSize*h]hwMaxPacketSize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjfubh (1024 on SuperSpeed, 512 on HighSpeed, etc), or DWC3 driver must add a Chained TRB pointing to a throw-away buffer for the remaining length. Without this, OUT transfers will }(hjfhhhNhNubj)}(h**NOT**h]hNOT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh start.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKUhjUhhubh)}(hX:Note that as of this writing, this won't be a problem because DWC3 is fully capable of appending a chained TRB for the remaining length and completely hide this detail from the gadget driver. It's still worth mentioning because this seems to be the largest source of queries about DWC3 and *non-working transfers*.h](hX&Note that as of this writing, this won’t be a problem because DWC3 is fully capable of appending a chained TRB for the remaining length and completely hide this detail from the gadget driver. It’s still worth mentioning because this seems to be the largest source of queries about DWC3 and }(hjhhhNhNubjW)}(h*non-working transfers*h]hnon-working transfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jVhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hjUhhubeh}(h]out-transfer-size-requirementsah ]h"]out transfer size requirementsah$]h&]uh1hhj6hhhhhKSubh)}(hhh](h)}(hTRB Ring Size Limitationh]hTRB Ring Size Limitation}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhKeubh)}(hWe, currently, have a hard limit of 256 TRBs [#trb]_ per endpoint, with the last TRB being a Link TRB [#link_trb]_ pointing back to the first. This limit is arbitrary but it has the benefit of adding up to exactly 4096 bytes, or 1 Page.h](h-We, currently, have a hard limit of 256 TRBs }(hj@hhhNhNubj)}(h[#trb]_h]h1}(hjHhhhNhNubah}(h]id6ah ]h"]h$]h&]jKjjjjuh1jhj@jKubh2 per endpoint, with the last TRB being a Link TRB }(hj@hhhNhNubj)}(h [#link_trb]_h]h2}(hj[hhhNhNubah}(h]id7ah ]h"]h$]h&]jKjlink-trbjjuh1jhj@jKubhz pointing back to the first. This limit is arbitrary but it has the benefit of adding up to exactly 4096 bytes, or 1 Page.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKghj/hhubh)}(hDWC3 driver will try its best to cope with more than 255 requests and, for the most part, it should work normally. However this is not something that has been exercised very frequently. If you experience any problems, see section **Reporting Bugs** below.h](hDWC3 driver will try its best to cope with more than 255 requests and, for the most part, it should work normally. However this is not something that has been exercised very frequently. If you experience any problems, see section }(hjuhhhNhNubj)}(h**Reporting Bugs**h]hReporting Bugs}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh below.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKlhj/hhubeh}(h]trb-ring-size-limitationah ]h"]trb ring size limitationah$]h&]uh1hhj6hhhhhKeubeh}(h]known-limitationsah ]h"]known limitationsah$]h&]uh1hhhhhhhhKLubh)}(hhh](h)}(hReporting Bugsh]hReporting Bugs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKrubh)}(hYWhenever you encounter a problem with DWC3, first and foremost you should make sure that:h]hYWhenever you encounter a problem with DWC3, first and foremost you should make sure that:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjhhubj)}(h1. You're running latest tag from `Linus' tree`_ 2. You can reproduce the error without any out-of-tree changes to DWC3 3. You have checked that it's not a fault on the host machine h]j)}(hhh](j)}(h-You're running latest tag from `Linus' tree`_h]h)}(hjh](h!You’re running latest tag from }(hjhhhNhNubh)}(h`Linus' tree`_h]h Linus’ tree}(hjhhhNhNubah}(h]h ]h"]h$]h&]name Linus' treerefuriChttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/uh1hhjjKubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hCYou can reproduce the error without any out-of-tree changes to DWC3h]h)}(hCYou can reproduce the error without any out-of-tree changes to DWC3h]hCYou can reproduce the error without any out-of-tree changes to DWC3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h;You have checked that it's not a fault on the host machine h]h)}(h:You have checked that it's not a fault on the host machineh]hhhhhhKubh)}(hDWC3 relies exclusively on Trace Events for debugging. Everything is exposed there, with some extra bits being exposed to DebugFS [#debugfs]_.h](hDWC3 relies exclusively on Trace Events for debugging. Everything is exposed there, with some extra bits being exposed to DebugFS }(hjOhhhNhNubj)}(h [#debugfs]_h]h3}(hjWhhhNhNubah}(h]id8ah ]h"]h$]h&]jKjjtjjuh1jhjOjKubh.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubh)}(hIn order to capture DWC3's Trace Events you should run the following commands **before** plugging the USB cable to a host machine:h](hPIn order to capture DWC3’s Trace Events you should run the following commands }(hjphhhNhNubj)}(h **before**h]hbefore}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh* plugging the USB cable to a host machine:}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubh literal_block)}(h# mkdir -p /d # mkdir -p /t # mount -t debugfs none /d # mount -t tracefs none /t # echo 81920 > /t/buffer_size_kb # echo 1 > /t/events/dwc3/enableh]h# mkdir -p /d # mkdir -p /t # mount -t debugfs none /d # mount -t tracefs none /t # echo 81920 > /t/buffer_size_kb # echo 1 > /t/events/dwc3/enable}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveforcelanguageshhighlight_args}uh1jhhhKhj>hhubh)}(hAfter this is done, you can connect your USB cable and reproduce the problem. As soon as the fault is reproduced, make a copy of files ``trace`` and ``regdump``, like so:h](hAfter this is done, you can connect your USB cable and reproduce the problem. As soon as the fault is reproduced, make a copy of files }(hjhhhNhNubhliteral)}(h ``trace``h]htrace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h ``regdump``h]hregdump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , like so:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubj)}(hI# cp /t/trace /root/trace.txt # cat /d/*dwc3*/regdump > /root/regdump.txth]hI# cp /t/trace /root/trace.txt # cat /d/*dwc3*/regdump > /root/regdump.txt}hjsbah}(h]h ]h"]h$]h&]jjjjshj}uh1jhhhKhj>hhubh)}(hMake sure to compress ``trace.txt`` and ``regdump.txt`` in a tarball and email it to `me`_ with `linux-usb`_ in Cc. If you want to be extra sure that I'll help you, write your subject line in the following format:h](hMake sure to compress }(hjhhhNhNubj)}(h ``trace.txt``h]h trace.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h``regdump.txt``h]h regdump.txt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh in a tarball and email it to }(hjhhhNhNubh)}(h`me`_h]hme}(hjhhhNhNubah}(h]h ]h"]h$]h&]namemej#mailto:felipe.balbi@linux.intel.comuh1hhjjKubh with }(hjhhhNhNubh)}(h `linux-usb`_h]h linux-usb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]name linux-usbj mailto:linux-usb@vger.kernel.orguh1hhjjKubhk in Cc. If you want to be extra sure that I’ll help you, write your subject line in the following format:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubj)}(h0**[BUG REPORT] usb: dwc3: Bug while doing XYZ** h]h)}(h/**[BUG REPORT] usb: dwc3: Bug while doing XYZ**h]j)}(hjMh]h+[BUG REPORT] usb: dwc3: Bug while doing XYZ}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jhhhKhj>hhubh)}(hOn the email body, make sure to detail what you doing, which gadget driver you were using, how to reproduce the problem, what SoC you're using, which OS (and its version) was running on the Host machine.h]hOn the email body, make sure to detail what you doing, which gadget driver you were using, how to reproduce the problem, what SoC you’re using, which OS (and its version) was running on the Host machine.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubh)}(haWith all this information, we should be able to understand what's going on and be helpful to you.h]hcWith all this information, we should be able to understand what’s going on and be helpful to you.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj>hhubeh}(h]required-informationah ]h"]required informationah$]h&]uh1hhjhhhhhKubeh}(h]reporting-bugsah ]h"]reporting bugsah$]h&]uh1hhhhhhhhKrubh)}(hhh](h)}(h Debuggingh]h Debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h!First and foremost a disclaimer::h]h First and foremost a disclaimer:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hDISCLAIMER: The information available on DebugFS and/or TraceFS can change at any time at any Major Linux Kernel Release. If writing scripts, do **NOT** assume information to be available in the current format.h]hDISCLAIMER: The information available on DebugFS and/or TraceFS can change at any time at any Major Linux Kernel Release. If writing scripts, do **NOT** assume information to be available in the current format.}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(h)With that out of the way, let's carry on.h]h+With that out of the way, let’s carry on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hPIf you're willing to debug your own problem, you deserve a round of applause :-)h]hRIf you’re willing to debug your own problem, you deserve a round of applause :-)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hAnyway, there isn't much to say here other than Trace Events will be really helpful in figuring out issues with DWC3. Also, access to Synopsys Databook will be **really** valuable in this case.h](hAnyway, there isn’t much to say here other than Trace Events will be really helpful in figuring out issues with DWC3. Also, access to Synopsys Databook will be }(hjhhhNhNubj)}(h **really**h]hreally}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh valuable in this case.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hA USB Sniffer can be helpful at times but it's not entirely required, there's a lot that can be understood without looking at the wire.h]hA USB Sniffer can be helpful at times but it’s not entirely required, there’s a lot that can be understood without looking at the wire.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hBFeel free to email `me`_ and Cc `linux-usb`_ if you need any help.h](hFeel free to email }(hj hhhNhNubh)}(h`me`_h]hme}(hj hhhNhNubah}(h]h ]h"]h$]h&]namemejj'uh1hhj jKubh and Cc }(hj hhhNhNubh)}(h `linux-usb`_h]h linux-usb}(hj' hhhNhNubah}(h]h ]h"]h$]h&]name linux-usbjj<uh1hhj jKubh if you need any help.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hhh](h)}(h ``DebugFS``h]j)}(hjF h]hDebugFS}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubah}(h]h ]h"]h$]h&]uh1hhjA hhhhhKubh)}(hb``DebugFS`` is very good for gathering snapshots of what's going on with DWC3 and/or any endpoint.h](j)}(h ``DebugFS``h]hDebugFS}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ ubhY is very good for gathering snapshots of what’s going on with DWC3 and/or any endpoint.}(hj[ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(hSOn DWC3's ``DebugFS`` directory, you will find the following files and directories:h](h On DWC3’s }(hjw hhhNhNubj)}(h ``DebugFS``h]hDebugFS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh> directory, you will find the following files and directories:}(hjw hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(h>``ep[0..15]{in,out}/`` ``link_state`` ``regdump`` ``testmode``h](j)}(h``ep[0..15]{in,out}/``h]hep[0..15]{in,out}/}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj)}(h``link_state``h]h link_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h ``regdump``h]hregdump}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h ``testmode``h]htestmode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(hhh](h)}(h``link_state``h]j)}(hj h]h link_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hWhen read, ``link_state`` will print out one of ``U0``, ``U1``, ``U2``, ``U3``, ``SS.Disabled``, ``RX.Detect``, ``SS.Inactive``, ``Polling``, ``Recovery``, ``Hot Reset``, ``Compliance``, ``Loopback``, ``Reset``, ``Resume`` or ``UNKNOWN link state``.h](h When read, }(hj hhhNhNubj)}(h``link_state``h]h link_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh will print out one of }(hj hhhNhNubj)}(h``U0``h]hU0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h``U1``h]hU1}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h``U2``h]hU2}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``U3``h]hU3}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``SS.Disabled``h]h SS.Disabled}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``RX.Detect``h]h RX.Detect}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``SS.Inactive``h]h SS.Inactive}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Polling``h]hPolling}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Recovery``h]hRecovery}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Hot Reset``h]h Hot Reset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``Compliance``h]h Compliance}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Loopback``h]hLoopback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Reset``h]hReset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h ``Resume``h]hResume}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh or }(hj hhhNhNubj)}(h``UNKNOWN link state``h]hUNKNOWN link state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hSThis file can also be written to in order to force link to one of the states above.h]hSThis file can also be written to in order to force link to one of the states above.}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] link-stateah ]h"] link_stateah$]h&]uh1hhjA hhhhhKubh)}(hhh](h)}(h ``regdump``h]j)}(hjH h]hregdump}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubah}(h]h ]h"]h$]h&]uh1hhjC hhhhhKubh)}(hFile name is self-explanatory. When read, ``regdump`` will print out a register dump of DWC3. Note that this file can be grepped to find the information you want.h](h*File name is self-explanatory. When read, }(hj] hhhNhNubj)}(h ``regdump``h]hregdump}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubhm will print out a register dump of DWC3. Note that this file can be grepped to find the information you want.}(hj] hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjC hhubeh}(h]regdumpah ]h"]regdumpah$]h&]uh1hhjA hhhhhKubh)}(hhh](h)}(h ``testmode``h]j)}(hj h]htestmode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hWhen read, ``testmode`` will print out a name of one of the specified USB 2.0 Testmodes (``test_j``, ``test_k``, ``test_se0_nak``, ``test_packet``, ``test_force_enable``) or the string ``no test`` in case no tests are currently being executed.h](h When read, }(hj hhhNhNubj)}(h ``testmode``h]htestmode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhB will print out a name of one of the specified USB 2.0 Testmodes (}(hj hhhNhNubj)}(h ``test_j``h]htest_j}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h ``test_k``h]htest_k}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``test_se0_nak``h]h test_se0_nak}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }(hj hhhNhNubj)}(h``test_packet``h]h test_packet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, }hj sbj)}(h``test_force_enable``h]htest_force_enable}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) or the string }(hj hhhNhNubj)}(h ``no test``h]hno test}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh/ in case no tests are currently being executed.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hIn order to start any of these test modes, the same strings can be written to the file and DWC3 will enter the requested test mode.h]hIn order to start any of these test modes, the same strings can be written to the file and DWC3 will enter the requested test mode.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]testmodeah ]h"]testmodeah$]h&]uh1hhjA hhhhhKubh)}(hhh](h)}(h``ep[0..15]{in,out}``h]j)}(hjF h]hep[0..15]{in,out}}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD ubah}(h]h ]h"]h$]h&]uh1hhjA hhhhhKubh)}(hFor each endpoint we expose one directory following the naming convention ``ep$num$dir`` *(ep0in, ep0out, ep1in, ...)*. Inside each of these directories you will find the following files:h](hJFor each endpoint we expose one directory following the naming convention }(hj[ hhhNhNubj)}(h``ep$num$dir``h]h ep$num$dir}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ ubh }(hj[ hhhNhNubjW)}(h*(ep0in, ep0out, ep1in, ...)*h]h(ep0in, ep0out, ep1in, ...)}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jVhj[ ubhE. Inside each of these directories you will find the following files:}(hj[ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(h``descriptor_fetch_queue`` ``event_queue`` ``rx_fifo_queue`` ``rx_info_queue`` ``rx_request_queue`` ``transfer_type`` ``trb_ring`` ``tx_fifo_queue`` ``tx_request_queue``h](j)}(h``descriptor_fetch_queue``h]hdescriptor_fetch_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj)}(h``event_queue``h]h event_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``rx_fifo_queue``h]h rx_fifo_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``rx_info_queue``h]h rx_info_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``rx_request_queue``h]hrx_request_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``transfer_type``h]h transfer_type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h ``trb_ring``h]htrb_ring}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``tx_fifo_queue``h]h tx_fifo_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h``tx_request_queue``h]htx_request_queue}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(hIWith access to Synopsys Databook, you can decode the information on them.h]hIWith access to Synopsys Databook, you can decode the information on them.}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubh)}(hhh](h)}(h``transfer_type``h]j)}(hjH h]h transfer_type}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubah}(h]h ]h"]h$]h&]uh1hhjC hhhhhMubh)}(hWhen read, ``transfer_type`` will print out one of ``control``, ``bulk``, ``interrupt`` or ``isochronous`` depending on what the endpoint descriptor says. If the endpoint hasn't been enabled yet, it will print ``--``.h](h When read, }(hj] hhhNhNubj)}(h``transfer_type``h]h transfer_type}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh will print out one of }(hj] hhhNhNubj)}(h ``control``h]hcontrol}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh, }(hj] hhhNhNubj)}(h``bulk``h]hbulk}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh, }(hj] hhhNhNubj)}(h ``interrupt``h]h interrupt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh or }(hj] hhhNhNubj)}(h``isochronous``h]h isochronous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubhj depending on what the endpoint descriptor says. If the endpoint hasn’t been enabled yet, it will print }(hj] hhhNhNubj)}(h``--``h]h--}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh.}(hj] hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjC hhubeh}(h] transfer-typeah ]h"] transfer_typeah$]h&]uh1hhjA hhhhhMubh)}(hhh](h)}(h ``trb_ring``h]j)}(hj h]htrb_ring}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM ubh)}(hWhen read, ``trb_ring`` will print out details about all TRBs on the ring. It will also tell you where our enqueue and dequeue pointers are located in the ring:h](h When read, }(hj hhhNhNubj)}(h ``trb_ring``h]htrb_ring}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh will print out details about all TRBs on the ring. It will also tell you where our enqueue and dequeue pointers are located in the ring:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj hhubj)}(hX'buffer_addr,size,type,ioc,isp_imi,csp,chn,lst,hwo 000000002c754000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c75c000,512,normal,1,0,1,0,0,1 D 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 E 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 00000000381ab000,0,link,0,0,0,0,0,1h]hX'buffer_addr,size,type,ioc,isp_imi,csp,chn,lst,hwo 000000002c754000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c75c000,481,normal,1,0,1,0,0,0 000000002c780000,481,normal,1,0,1,0,0,0 000000002c784000,481,normal,1,0,1,0,0,0 000000002c788000,481,normal,1,0,1,0,0,0 000000002c78c000,481,normal,1,0,1,0,0,0 000000002c790000,481,normal,1,0,1,0,0,0 000000002c754000,481,normal,1,0,1,0,0,0 000000002c758000,481,normal,1,0,1,0,0,0 000000002c75c000,512,normal,1,0,1,0,0,1 D 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 E 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 0000000000000000,0,UNKNOWN,0,0,0,0,0,0 00000000381ab000,0,link,0,0,0,0,0,1}hjsbah}(h]h ]h"]h$]h&]jjjjshj}uh1jhhhMhj hhubeh}(h]trb-ringah ]h"]trb_ringah$]h&]uh1hhjA hhhhhM ubeh}(h]ep-0-15-in-outah ]h"]ep[0..15]{in,out}ah$]h&]uh1hhjA hhhhhKubeh}(h]debugfsah ]h"]h$]debugfsah&]uh1hhjhhhhhKŒ referencedKubh)}(hhh](h)}(h Trace Eventsh]h Trace Events}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhMubh)}(h|DWC3 also provides several trace events which help us gathering information about the behavior of the driver during runtime.h]h|DWC3 also provides several trace events which help us gathering information about the behavior of the driver during runtime.}(hjShhYhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjBhhubh)}(hVIn order to use these events, you must enable ``CONFIG_FTRACE`` in your kernel config.h](h.In order to use these events, you must enable }(hjahhhNhNubj)}(h``CONFIG_FTRACE``h]h CONFIG_FTRACE}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh in your kernel config.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjBhhubh)}(hIFor details about how enable DWC3 events, see section **Reporting Bugs**.h](h6For details about how enable DWC3 events, see section }(hjhhhNhNubj)}(h**Reporting Bugs**h]hReporting Bugs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjBhhubh)}(hbThe following subsections will give details about each Event Class and each Event defined by DWC3.h]hbThe following subsections will give details about each Event Class and each Event defined by DWC3.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM!hjBhhubh)}(hhh](h)}(hMMIOh]hMMIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM%ubh)}(hIt is sometimes useful to look at every MMIO access when looking for bugs. Because of that, DWC3 offers two Trace Events (one for dwc3_readl() and one for dwc3_writel()). ``TP_printk`` follows::h](hIt is sometimes useful to look at every MMIO access when looking for bugs. Because of that, DWC3 offers two Trace Events (one for dwc3_readl() and one for dwc3_writel()). }(hjhhhNhNubj)}(h ``TP_printk``h]h TP_printk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh follows:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM'hjhhubj)}(h^TP_printk("addr %p value %08x", __entry->base + __entry->offset, __entry->value)h]h^TP_printk("addr %p value %08x", __entry->base + __entry->offset, __entry->value)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM+hjhhubeh}(h]mmioah ]h"]mmioah$]h&]uh1hhjBhhhhhM%ubh)}(hhh](h)}(hInterrupt Eventsh]hInterrupt Events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM/ubh)}(hEvery IRQ event can be logged and decoded into a human readable string. Because every event will be different, we don't give an example other than the ``TP_printk`` format used::h](hEvery IRQ event can be logged and decoded into a human readable string. Because every event will be different, we don’t give an example other than the }(hjhhhNhNubj)}(h ``TP_printk``h]h TP_printk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh format used:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM1hjhhubj)}(hqTP_printk("event (%08x): %s", __entry->event, dwc3_decode_event(__entry->event, __entry->ep0state))h]hqTP_printk("event (%08x): %s", __entry->event, dwc3_decode_event(__entry->event, __entry->ep0state))}hj'sbah}(h]h ]h"]h$]h&]jjuh1jhhhM5hjhhubeh}(h]interrupt-eventsah ]h"]interrupt eventsah$]h&]uh1hhjBhhhhhM/ubh)}(hhh](h)}(hControl Requesth]hControl Request}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhM9ubh)}(hSEvery USB Control Request can be logged to the trace buffer. The output format is::h]hREvery USB Control Request can be logged to the trace buffer. The output format is:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hj=hhubj)}(hTP_printk("%s", dwc3_decode_ctrl(__entry->bRequestType, __entry->bRequest, __entry->wValue, __entry->wIndex, __entry->wLength) )h]hTP_printk("%s", dwc3_decode_ctrl(__entry->bRequestType, __entry->bRequest, __entry->wValue, __entry->wIndex, __entry->wLength) )}hj\sbah}(h]h ]h"]h$]h&]jjuh1jhhhM>hj=hhubh)}(hNote that Standard Control Requests will be decoded into human-readable strings with their respective arguments. Class and Vendor requests will be printed out a sequence of 8 bytes in hex format.h]hNote that Standard Control Requests will be decoded into human-readable strings with their respective arguments. Class and Vendor requests will be printed out a sequence of 8 bytes in hex format.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMChj=hhubeh}(h]control-requestah ]h"]control requestah$]h&]uh1hhjBhhhhhM9ubh)}(hhh](h)}(h$Lifetime of a ``struct usb_request``h](hLifetime of a }(hjhhhNhNubj)}(h``struct usb_request``h]hstruct usb_request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhhhhhMIubh)}(hThe entire lifetime of a ``struct usb_request`` can be tracked on the trace buffer. We have one event for each of allocation, free, queueing, dequeueing, and giveback. Output format is::h](hThe entire lifetime of a }(hjhhhNhNubj)}(h``struct usb_request``h]hstruct usb_request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be tracked on the trace buffer. We have one event for each of allocation, free, queueing, dequeueing, and giveback. Output format is:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMKhjhhubj)}(hXTP_printk("%s: req %p length %u/%u %s%s%s ==> %d", __get_str(name), __entry->req, __entry->actual, __entry->length, __entry->zero ? "Z" : "z", __entry->short_not_ok ? "S" : "s", __entry->no_interrupt ? "i" : "I", __entry->status )h]hXTP_printk("%s: req %p length %u/%u %s%s%s ==> %d", __get_str(name), __entry->req, __entry->actual, __entry->length, __entry->zero ? "Z" : "z", __entry->short_not_ok ? "S" : "s", __entry->no_interrupt ? "i" : "I", __entry->status )}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMOhjhhubeh}(h] lifetime-of-a-struct-usb-requestah ]h"] lifetime of a struct usb_requestah$]h&]uh1hhjBhhhhhMIubh)}(hhh](h)}(hGeneric Commandsh]hGeneric Commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMXubh)}(hQWe can log and decode every Generic Command with its completion code. Format is::h]hPWe can log and decode every Generic Command with its completion code. Format is:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhjhhubj)}(hTP_printk("cmd '%s' [%x] param %08x --> status: %s", dwc3_gadget_generic_cmd_string(__entry->cmd), __entry->cmd, __entry->param, dwc3_gadget_generic_cmd_status_string(__entry->status) )h]hTP_printk("cmd '%s' [%x] param %08x --> status: %s", dwc3_gadget_generic_cmd_string(__entry->cmd), __entry->cmd, __entry->param, dwc3_gadget_generic_cmd_status_string(__entry->status) )}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhM]hjhhubeh}(h]generic-commandsah ]h"]generic commandsah$]h&]uh1hhjBhhhhhMXubh)}(hhh](h)}(hEndpoint Commandsh]hEndpoint Commands}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMdubh)}(hPEndpoints commands can also be logged together with completion code. Format is::h]hOEndpoints commands can also be logged together with completion code. Format is:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhj hhubj)}(hXTP_printk("%s: cmd '%s' [%d] params %08x %08x %08x --> status: %s", __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd), __entry->cmd, __entry->param0, __entry->param1, __entry->param2, dwc3_ep_cmd_status_string(__entry->cmd_status) )h]hXTP_printk("%s: cmd '%s' [%d] params %08x %08x %08x --> status: %s", __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd), __entry->cmd, __entry->param0, __entry->param1, __entry->param2, dwc3_ep_cmd_status_string(__entry->cmd_status) )}hj)sbah}(h]h ]h"]h$]h&]jjuh1jhhhMihj hhubeh}(h]endpoint-commandsah ]h"]endpoint commandsah$]h&]uh1hhjBhhhhhMdubh)}(hhh](h)}(hLifetime of a ``TRB``h](hLifetime of a }(hjBhhhNhNubj)}(h``TRB``h]hTRB}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1hhj?hhhhhMqubh)}(hA ``TRB`` Lifetime is simple. We are either preparing a ``TRB`` or completing it. With these two events, we can see how a ``TRB`` changes over time. Format is::h](hA }(hj^hhhNhNubj)}(h``TRB``h]hTRB}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh/ Lifetime is simple. We are either preparing a }(hj^hhhNhNubj)}(h``TRB``h]hTRB}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh; or completing it. With these two events, we can see how a }(hj^hhhNhNubj)}(h``TRB``h]hTRB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh changes over time. Format is:}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMshj?hhubj)}(hXxTP_printk("%s: %d/%d trb %p buf %08x%08x size %s%d ctrl %08x (%c%c%c%c:%c%c:%s)", __get_str(name), __entry->queued, __entry->allocated, __entry->trb, __entry->bph, __entry->bpl, ({char *s; int pcm = ((__entry->size >> 24) & 3) + 1; switch (__entry->type) { case USB_ENDPOINT_XFER_INT: case USB_ENDPOINT_XFER_ISOC: switch (pcm) { case 1: s = "1x "; break; case 2: s = "2x "; break; case 3: s = "3x "; break; } default: s = ""; } s; }), DWC3_TRB_SIZE_LENGTH(__entry->size), __entry->ctrl, __entry->ctrl & DWC3_TRB_CTRL_HWO ? 'H' : 'h', __entry->ctrl & DWC3_TRB_CTRL_LST ? 'L' : 'l', __entry->ctrl & DWC3_TRB_CTRL_CHN ? 'C' : 'c', __entry->ctrl & DWC3_TRB_CTRL_CSP ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_ISP_IMI ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_IOC ? 'C' : 'c', dwc3_trb_type_string(DWC3_TRBCTL_TYPE(__entry->ctrl)) )h]hXxTP_printk("%s: %d/%d trb %p buf %08x%08x size %s%d ctrl %08x (%c%c%c%c:%c%c:%s)", __get_str(name), __entry->queued, __entry->allocated, __entry->trb, __entry->bph, __entry->bpl, ({char *s; int pcm = ((__entry->size >> 24) & 3) + 1; switch (__entry->type) { case USB_ENDPOINT_XFER_INT: case USB_ENDPOINT_XFER_ISOC: switch (pcm) { case 1: s = "1x "; break; case 2: s = "2x "; break; case 3: s = "3x "; break; } default: s = ""; } s; }), DWC3_TRB_SIZE_LENGTH(__entry->size), __entry->ctrl, __entry->ctrl & DWC3_TRB_CTRL_HWO ? 'H' : 'h', __entry->ctrl & DWC3_TRB_CTRL_LST ? 'L' : 'l', __entry->ctrl & DWC3_TRB_CTRL_CHN ? 'C' : 'c', __entry->ctrl & DWC3_TRB_CTRL_CSP ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_ISP_IMI ? 'S' : 's', __entry->ctrl & DWC3_TRB_CTRL_IOC ? 'C' : 'c', dwc3_trb_type_string(DWC3_TRBCTL_TYPE(__entry->ctrl)) )}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMwhj?hhubeh}(h]lifetime-of-a-trbah ]h"]lifetime of a trbah$]h&]uh1hhjBhhhhhMqubh)}(hhh](h)}(hLifetime of an Endpointh]hLifetime of an Endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hrAnd endpoint's lifetime is summarized with enable and disable operations, both of which can be traced. Format is::h]hsAnd endpoint’s lifetime is summarized with enable and disable operations, both of which can be traced. Format is:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(hXxTP_printk("%s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c%c:%c:%c", __get_str(name), __entry->maxpacket, __entry->maxpacket_limit, __entry->max_streams, __entry->maxburst, __entry->trb_enqueue, __entry->trb_dequeue, __entry->flags & DWC3_EP_ENABLED ? 'E' : 'e', __entry->flags & DWC3_EP_STALL ? 'S' : 's', __entry->flags & DWC3_EP_WEDGE ? 'W' : 'w', __entry->flags & DWC3_EP_TRANSFER_STARTED ? 'B' : 'b', __entry->flags & DWC3_EP_PENDING_REQUEST ? 'P' : 'p', __entry->flags & DWC3_EP_END_TRANSFER_PENDING ? 'E' : 'e', __entry->direction ? '<' : '>' )h]hXxTP_printk("%s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c%c:%c:%c", __get_str(name), __entry->maxpacket, __entry->maxpacket_limit, __entry->max_streams, __entry->maxburst, __entry->trb_enqueue, __entry->trb_dequeue, __entry->flags & DWC3_EP_ENABLED ? 'E' : 'e', __entry->flags & DWC3_EP_STALL ? 'S' : 's', __entry->flags & DWC3_EP_WEDGE ? 'W' : 'w', __entry->flags & DWC3_EP_TRANSFER_STARTED ? 'B' : 'b', __entry->flags & DWC3_EP_PENDING_REQUEST ? 'P' : 'p', __entry->flags & DWC3_EP_END_TRANSFER_PENDING ? 'E' : 'e', __entry->direction ? '<' : '>' )}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhMhjhhubeh}(h]lifetime-of-an-endpointah ]h"]lifetime of an endpointah$]h&]uh1hhjBhhhhhMubeh}(h] trace-eventsah ]h"] trace eventsah$]h&]uh1hhjhhhhhMubeh}(h] debuggingah ]h"] debuggingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h#Structures, Methods and Definitionsh]h#Structures, Methods and Definitions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singledwc3_event_buffer (C struct)c.dwc3_event_bufferhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hdwc3_event_bufferh]hdesc_signature_line)}(hstruct dwc3_event_bufferh](hdesc_sig_keyword)}(hstructh]hstruct}(hj2hhhNhNubah}(h]h ]kah"]h$]h&]uh1j0hj,hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhKubhdesc_sig_space)}(h h]h }(hjDhhhNhNubah}(h]h ]wah"]h$]h&]uh1jBhj,hhhjAhKubh desc_name)}(hdwc3_event_bufferh]h desc_sig_name)}(hj(h]hdwc3_event_buffer}(hj[hhhNhNubah}(h]h ]nah"]h$]h&]uh1jYhjUubah}(h]h ](sig-namedescnameeh"]h$]h&]jjuh1jShj,hhhjAhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j*sphinx_line_type declaratorhj&hhhjAhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j$hjAhKhj!hhubh desc_content)}(hhh]h)}(h$Software event buffer representationh]h$Software event buffer representation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhj!hhhjAhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Definition**:: struct dwc3_event_buffer { void *buf; void *cache; unsigned int length; unsigned int lpos; unsigned int count; unsigned int flags; #define DWC3_EVENT_PENDING BIT(0); dma_addr_t dma; struct dwc3 *dwc; }; **Members** ``buf`` _THE_ buffer ``cache`` The buffer cache used in the threaded interrupt ``length`` size of this buffer ``lpos`` event offset ``count`` cache of last read event count register ``flags`` flags related to this event buffer ``dma`` dma_addr_t ``dwc`` pointer to DWC controllerh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hX'struct dwc3_event_buffer { void *buf; void *cache; unsigned int length; unsigned int lpos; unsigned int count; unsigned int flags; #define DWC3_EVENT_PENDING BIT(0); dma_addr_t dma; struct dwc3 *dwc; };h]hX'struct dwc3_event_buffer { void *buf; void *cache; unsigned int length; unsigned int lpos; unsigned int count; unsigned int flags; #define DWC3_EVENT_PENDING BIT(0); dma_addr_t dma; struct dwc3 *dwc; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h``buf`` _THE_ buffer h](hterm)}(h``buf``h]j)}(hjh]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubh definition)}(hhh]h)}(h _THE_ bufferh]h _THE_ buffer}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``cache`` The buffer cache used in the threaded interrupt h](j)}(h ``cache``h]j)}(hjAh]hcache}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj;ubj)}(hhh]h)}(h/The buffer cache used in the threaded interrupth]h/The buffer cache used in the threaded interrupt}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubj)}(h``length`` size of this buffer h](j)}(h ``length``h]j)}(hjzh]hlength}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjtubj)}(hhh]h)}(hsize of this bufferh]hsize of this buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``lpos`` event offset h](j)}(h``lpos``h]j)}(hjh]hlpos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h event offseth]h event offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``count`` cache of last read event count register h](j)}(h ``count``h]j)}(hjh]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h'cache of last read event count registerh]h'cache of last read event count register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``flags`` flags related to this event buffer h](j)}(h ``flags``h]j)}(hj%h]hflags}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h"flags related to this event bufferh]h"flags related to this event buffer}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h``dma`` dma_addr_t h](j)}(h``dma``h]j)}(hj^h]hdma}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjXubj)}(hhh]h)}(h dma_addr_th]h dma_addr_t}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(h!``dwc`` pointer to DWC controllerh](j)}(h``dwc``h]j)}(hjh]hdwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(hpointer to DWC controllerh]hpointer to DWC controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_ep (C struct) c.dwc3_ephNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_eph]j+)}(hstruct dwc3_eph](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMubjT)}(hdwc3_eph]jZ)}(hjh]hdwc3_ep}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhjhhubj)}(hhh]h)}(h#device side endpoint representationh]h#device side endpoint representation}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hXD **Definition**:: struct dwc3_ep { struct usb_ep endpoint; struct delayed_work nostream_work; struct list_head cancelled_list; struct list_head pending_list; struct list_head started_list; void __iomem *regs; struct dwc3_trb *trb_pool; dma_addr_t trb_pool_dma; struct dwc3 *dwc; u32 saved_state; unsigned int flags; #define DWC3_EP_ENABLED BIT(0); #define DWC3_EP_STALL BIT(1); #define DWC3_EP_WEDGE BIT(2); #define DWC3_EP_TRANSFER_STARTED BIT(3); #define DWC3_EP_END_TRANSFER_PENDING BIT(4); #define DWC3_EP_PENDING_REQUEST BIT(5); #define DWC3_EP_DELAY_START BIT(6); #define DWC3_EP_WAIT_TRANSFER_COMPLETE BIT(7); #define DWC3_EP_IGNORE_NEXT_NOSTREAM BIT(8); #define DWC3_EP_FORCE_RESTART_STREAM BIT(9); #define DWC3_EP_STREAM_PRIMED BIT(10); #define DWC3_EP_PENDING_CLEAR_STALL BIT(11); #define DWC3_EP_TXFIFO_RESIZED BIT(12); #define DWC3_EP_DELAY_STOP BIT(13); #define DWC3_EP_RESOURCE_ALLOCATED BIT(14); #define DWC3_EP0_DIR_IN BIT(31); u8 trb_enqueue; u8 trb_dequeue; u8 number; u8 type; u8 resource_index; u32 frame_number; u32 interval; char name[20]; unsigned direction:1; unsigned stream_capable:1; u8 combo_num; int start_cmd_status; }; **Members** ``endpoint`` usb endpoint ``nostream_work`` work for handling bulk NoStream ``cancelled_list`` list of cancelled requests for this endpoint ``pending_list`` list of pending requests for this endpoint ``started_list`` list of started requests on this endpoint ``regs`` pointer to first endpoint register ``trb_pool`` array of transaction buffers ``trb_pool_dma`` dma address of **trb_pool** ``dwc`` pointer to DWC controller ``saved_state`` ep state saved during hibernation ``flags`` endpoint flags (wedged, stalled, ...) ``trb_enqueue`` enqueue 'pointer' into TRB array ``trb_dequeue`` dequeue 'pointer' into TRB array ``number`` endpoint number (1 - 15) ``type`` set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK ``resource_index`` Resource transfer index ``frame_number`` set to the frame number we want this transfer to start (ISOC) ``interval`` the interval on which the ISOC transfer is started ``name`` a human readable name e.g. ep1out-bulk ``direction`` true for TX, false for RX ``stream_capable`` true when streams are enabled ``combo_num`` the test combination BIT[15:14] of the frame number to test isochronous START TRANSFER command failure workaround ``start_cmd_status`` the status of testing START TRANSFER command with combo_num = 'b00h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjOubj)}(hXstruct dwc3_ep { struct usb_ep endpoint; struct delayed_work nostream_work; struct list_head cancelled_list; struct list_head pending_list; struct list_head started_list; void __iomem *regs; struct dwc3_trb *trb_pool; dma_addr_t trb_pool_dma; struct dwc3 *dwc; u32 saved_state; unsigned int flags; #define DWC3_EP_ENABLED BIT(0); #define DWC3_EP_STALL BIT(1); #define DWC3_EP_WEDGE BIT(2); #define DWC3_EP_TRANSFER_STARTED BIT(3); #define DWC3_EP_END_TRANSFER_PENDING BIT(4); #define DWC3_EP_PENDING_REQUEST BIT(5); #define DWC3_EP_DELAY_START BIT(6); #define DWC3_EP_WAIT_TRANSFER_COMPLETE BIT(7); #define DWC3_EP_IGNORE_NEXT_NOSTREAM BIT(8); #define DWC3_EP_FORCE_RESTART_STREAM BIT(9); #define DWC3_EP_STREAM_PRIMED BIT(10); #define DWC3_EP_PENDING_CLEAR_STALL BIT(11); #define DWC3_EP_TXFIFO_RESIZED BIT(12); #define DWC3_EP_DELAY_STOP BIT(13); #define DWC3_EP_RESOURCE_ALLOCATED BIT(14); #define DWC3_EP0_DIR_IN BIT(31); u8 trb_enqueue; u8 trb_dequeue; u8 number; u8 type; u8 resource_index; u32 frame_number; u32 interval; char name[20]; unsigned direction:1; unsigned stream_capable:1; u8 combo_num; int start_cmd_status; };h]hXstruct dwc3_ep { struct usb_ep endpoint; struct delayed_work nostream_work; struct list_head cancelled_list; struct list_head pending_list; struct list_head started_list; void __iomem *regs; struct dwc3_trb *trb_pool; dma_addr_t trb_pool_dma; struct dwc3 *dwc; u32 saved_state; unsigned int flags; #define DWC3_EP_ENABLED BIT(0); #define DWC3_EP_STALL BIT(1); #define DWC3_EP_WEDGE BIT(2); #define DWC3_EP_TRANSFER_STARTED BIT(3); #define DWC3_EP_END_TRANSFER_PENDING BIT(4); #define DWC3_EP_PENDING_REQUEST BIT(5); #define DWC3_EP_DELAY_START BIT(6); #define DWC3_EP_WAIT_TRANSFER_COMPLETE BIT(7); #define DWC3_EP_IGNORE_NEXT_NOSTREAM BIT(8); #define DWC3_EP_FORCE_RESTART_STREAM BIT(9); #define DWC3_EP_STREAM_PRIMED BIT(10); #define DWC3_EP_PENDING_CLEAR_STALL BIT(11); #define DWC3_EP_TXFIFO_RESIZED BIT(12); #define DWC3_EP_DELAY_STOP BIT(13); #define DWC3_EP_RESOURCE_ALLOCATED BIT(14); #define DWC3_EP0_DIR_IN BIT(31); u8 trb_enqueue; u8 trb_dequeue; u8 number; u8 type; u8 resource_index; u32 frame_number; u32 interval; char name[20]; unsigned direction:1; unsigned stream_capable:1; u8 combo_num; int start_cmd_status; };}hjpsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjOubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjOubj)}(hhh](j)}(h``endpoint`` usb endpoint h](j)}(h ``endpoint``h]j)}(hjh]hendpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h usb endpointh]h usb endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``nostream_work`` work for handling bulk NoStream h](j)}(h``nostream_work``h]j)}(hjh]h nostream_work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(hwork for handling bulk NoStreamh]hwork for handling bulk NoStream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``cancelled_list`` list of cancelled requests for this endpoint h](j)}(h``cancelled_list``h]j)}(hjh]hcancelled_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hhh]h)}(h,list of cancelled requests for this endpointh]h,list of cancelled requests for this endpoint}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjubj)}(h<``pending_list`` list of pending requests for this endpoint h](j)}(h``pending_list``h]j)}(hjKh]h pending_list}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjEubj)}(hhh]h)}(h*list of pending requests for this endpointh]h*list of pending requests for this endpoint}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjubj)}(h;``started_list`` list of started requests on this endpoint h](j)}(h``started_list``h]j)}(hjh]h started_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj~ubj)}(hhh]h)}(h)list of started requests on this endpointh]h)list of started requests on this endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``regs`` pointer to first endpoint register h](j)}(h``regs``h]j)}(hjh]hregs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h"pointer to first endpoint registerh]h"pointer to first endpoint register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``trb_pool`` array of transaction buffers h](j)}(h ``trb_pool``h]j)}(hjh]htrb_pool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(harray of transaction buffersh]harray of transaction buffers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h-``trb_pool_dma`` dma address of **trb_pool** h](j)}(h``trb_pool_dma``h]j)}(hj/h]h trb_pool_dma}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj)ubj)}(hhh]h)}(hdma address of **trb_pool**h](hdma address of }(hjHhhhNhNubj)}(h **trb_pool**h]htrb_pool}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(h"``dwc`` pointer to DWC controller h](j)}(h``dwc``h]j)}(hjvh]hdwc}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjpubj)}(hhh]h)}(hpointer to DWC controllerh]hpointer to DWC controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``saved_state`` ep state saved during hibernation h](j)}(h``saved_state``h]j)}(hjh]h saved_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h!ep state saved during hibernationh]h!ep state saved during hibernation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``flags`` endpoint flags (wedged, stalled, ...) h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h%endpoint flags (wedged, stalled, ...)h]h%endpoint flags (wedged, stalled, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``trb_enqueue`` enqueue 'pointer' into TRB array h](j)}(h``trb_enqueue``h]j)}(hj!h]h trb_enqueue}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h enqueue 'pointer' into TRB arrayh]h$enqueue ‘pointer’ into TRB array}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubj)}(h1``trb_dequeue`` dequeue 'pointer' into TRB array h](j)}(h``trb_dequeue``h]j)}(hjZh]h trb_dequeue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjTubj)}(hhh]h)}(h dequeue 'pointer' into TRB arrayh]h$dequeue ‘pointer’ into TRB array}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjubj)}(h$``number`` endpoint number (1 - 15) h](j)}(h ``number``h]j)}(hjh]hnumber}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(hendpoint number (1 - 15)h]hendpoint number (1 - 15)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``type`` set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h0set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASKh]h0set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``resource_index`` Resource transfer index h](j)}(h``resource_index``h]j)}(hjh]hresource_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(hResource transfer indexh]hResource transfer index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hO``frame_number`` set to the frame number we want this transfer to start (ISOC) h](j)}(h``frame_number``h]j)}(hj>h]h frame_number}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj8ubj)}(hhh]h)}(h=set to the frame number we want this transfer to start (ISOC)h]h=set to the frame number we want this transfer to start (ISOC)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubj)}(h@``interval`` the interval on which the ISOC transfer is started h](j)}(h ``interval``h]j)}(hjwh]hinterval}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjqubj)}(hhh]h)}(h2the interval on which the ISOC transfer is startedh]h2the interval on which the ISOC transfer is started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``name`` a human readable name e.g. ep1out-bulk h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h&a human readable name e.g. ep1out-bulkh]h&a human readable name e.g. ep1out-bulk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``direction`` true for TX, false for RX h](j)}(h ``direction``h]j)}(hjh]h direction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(htrue for TX, false for RXh]htrue for TX, false for RX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``stream_capable`` true when streams are enabled h](j)}(h``stream_capable``h]j)}(hj"h]hstream_capable}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(htrue when streams are enabledh]htrue when streams are enabled}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h``combo_num`` the test combination BIT[15:14] of the frame number to test isochronous START TRANSFER command failure workaround h](j)}(h ``combo_num``h]j)}(hj[h]h combo_num}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjUubj)}(hhh]h)}(hqthe test combination BIT[15:14] of the frame number to test isochronous START TRANSFER command failure workaroundh]hqthe test combination BIT[15:14] of the frame number to test isochronous START TRANSFER command failure workaround}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(hW``start_cmd_status`` the status of testing START TRANSFER command with combo_num = 'b00h](j)}(h``start_cmd_status``h]j)}(hjh]hstart_cmd_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(hBthe status of testing START TRANSFER command with combo_num = 'b00h]hDthe status of testing START TRANSFER command with combo_num = ‘b00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_trb (C struct) c.dwc3_trbhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_trbh]j+)}(hstruct dwc3_trbh](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMubjT)}(hdwc3_trbh]jZ)}(hjh]hdwc3_trb}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhjhhubj)}(hhh]h)}(h"transfer request block (hw format)h]h"transfer request block (hw format)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMohj-hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjHjjHjjjuh1jhhhjhNhNubj)}(h**Definition**:: struct dwc3_trb { u32 bpl; u32 bph; u32 size; u32 ctrl; }; **Members** ``bpl`` DW0-3 ``bph`` DW4-7 ``size`` DW8-B ``ctrl`` DWC-Fh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh:}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMshjLubj)}(hJstruct dwc3_trb { u32 bpl; u32 bph; u32 size; u32 ctrl; };h]hJstruct dwc3_trb { u32 bpl; u32 bph; u32 size; u32 ctrl; };}hjmsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMuhjLubh)}(h **Members**h]j)}(hj~h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM|hjLubj)}(hhh](j)}(h``bpl`` DW0-3 h](j)}(h``bpl``h]j)}(hjh]hbpl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMqhjubj)}(hhh]h)}(hDW0-3h]hDW0-3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubj)}(h``bph`` DW4-7 h](j)}(h``bph``h]j)}(hjh]hbph}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMrhjubj)}(hhh]h)}(hDW4-7h]hDW4-7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubj)}(h``size`` DW8-B h](j)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMshj ubj)}(hhh]h)}(hDW8-Bh]hDW8-B}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMshj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMshjubj)}(h``ctrl`` DWC-Fh](j)}(h``ctrl``h]j)}(hjHh]hctrl}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMshjBubj)}(hhh]h)}(hDWC-Fh]hDWC-F}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMthj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMshjubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_hwparams (C struct)c.dwc3_hwparamshNtauh1jhjhhhNhNubj )}(hhh](j%)}(h dwc3_hwparamsh]j+)}(hstruct dwc3_hwparamsh](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMzubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMzubjT)}(h dwc3_hwparamsh]jZ)}(hjh]h dwc3_hwparams}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMzubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMzubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMzhjhhubj)}(hhh]h)}(hcopy of HWPARAMS registersh]hcopy of HWPARAMS registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM}hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMzubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX&**Definition**:: struct dwc3_hwparams { u32 hwparams0; u32 hwparams1; u32 hwparams2; u32 hwparams3; u32 hwparams4; u32 hwparams5; u32 hwparams6; u32 hwparams7; u32 hwparams8; u32 hwparams9; }; **Members** ``hwparams0`` GHWPARAMS0 ``hwparams1`` GHWPARAMS1 ``hwparams2`` GHWPARAMS2 ``hwparams3`` GHWPARAMS3 ``hwparams4`` GHWPARAMS4 ``hwparams5`` GHWPARAMS5 ``hwparams6`` GHWPARAMS6 ``hwparams7`` GHWPARAMS7 ``hwparams8`` GHWPARAMS8 ``hwparams9`` GHWPARAMS9h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hstruct dwc3_hwparams { u32 hwparams0; u32 hwparams1; u32 hwparams2; u32 hwparams3; u32 hwparams4; u32 hwparams5; u32 hwparams6; u32 hwparams7; u32 hwparams8; u32 hwparams9; };h]hstruct dwc3_hwparams { u32 hwparams0; u32 hwparams1; u32 hwparams2; u32 hwparams3; u32 hwparams4; u32 hwparams5; u32 hwparams6; u32 hwparams7; u32 hwparams8; u32 hwparams9; };}hj!sbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubh)}(h **Members**h]j)}(hj2h]hMembers}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh](j)}(h``hwparams0`` GHWPARAMS0 h](j)}(h ``hwparams0``h]j)}(hjQh]h hwparams0}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjKubj)}(hhh]h)}(h GHWPARAMS0h]h GHWPARAMS0}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubj)}(h``hwparams1`` GHWPARAMS1 h](j)}(h ``hwparams1``h]j)}(hjh]h hwparams1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS1h]h GHWPARAMS1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams2`` GHWPARAMS2 h](j)}(h ``hwparams2``h]j)}(hjh]h hwparams2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS2h]h GHWPARAMS2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams3`` GHWPARAMS3 h](j)}(h ``hwparams3``h]j)}(hjh]h hwparams3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS3h]h GHWPARAMS3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams4`` GHWPARAMS4 h](j)}(h ``hwparams4``h]j)}(hj5h]h hwparams4}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj/ubj)}(hhh]h)}(h GHWPARAMS4h]h GHWPARAMS4}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjHubj)}(h``hwparams5`` GHWPARAMS5 h](j)}(h ``hwparams5``h]j)}(hjnh]h hwparams5}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjhubj)}(hhh]h)}(h GHWPARAMS5h]h GHWPARAMS5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams6`` GHWPARAMS6 h](j)}(h ``hwparams6``h]j)}(hjh]h hwparams6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS6h]h GHWPARAMS6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams7`` GHWPARAMS7 h](j)}(h ``hwparams7``h]j)}(hjh]h hwparams7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS7h]h GHWPARAMS7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubj)}(h``hwparams8`` GHWPARAMS8 h](j)}(h ``hwparams8``h]j)}(hjh]h hwparams8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h GHWPARAMS8h]h GHWPARAMS8}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjHubj)}(h``hwparams9`` GHWPARAMS9h](j)}(h ``hwparams9``h]j)}(hjRh]h hwparams9}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjLubj)}(hhh]h)}(h GHWPARAMS9h]h GHWPARAMS9}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjHubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_request (C struct)c.dwc3_requesthNtauh1jhjhhhNhNubj )}(hhh](j%)}(h dwc3_requesth]j+)}(hstruct dwc3_requesth](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMubjT)}(h dwc3_requesth]jZ)}(hjh]h dwc3_request}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhjhhubj)}(hhh]h)}(h$representation of a transfer requesth]h$representation of a transfer request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct dwc3_request { struct usb_request request; struct list_head list; struct dwc3_ep *dep; struct scatterlist *start_sg; unsigned int num_pending_sgs; unsigned int remaining; unsigned int status; #define DWC3_REQUEST_STATUS_QUEUED 0; #define DWC3_REQUEST_STATUS_STARTED 1; #define DWC3_REQUEST_STATUS_DISCONNECTED 2; #define DWC3_REQUEST_STATUS_DEQUEUED 3; #define DWC3_REQUEST_STATUS_STALLED 4; #define DWC3_REQUEST_STATUS_COMPLETED 5; #define DWC3_REQUEST_STATUS_UNKNOWN -1; u8 epnum; struct dwc3_trb *trb; dma_addr_t trb_dma; unsigned int num_trbs; unsigned int direction:1; unsigned int mapped:1; }; **Members** ``request`` struct usb_request to be transferred ``list`` a list_head used for request queueing ``dep`` struct dwc3_ep owning this request ``start_sg`` pointer to the sg which should be queued next ``num_pending_sgs`` counter to pending sgs ``remaining`` amount of data remaining ``status`` internal dwc3 request status tracking ``epnum`` endpoint number to which this request refers ``trb`` pointer to struct dwc3_trb ``trb_dma`` DMA address of **trb** ``num_trbs`` number of TRBs used by this request ``direction`` IN or OUT direction flag ``mapped`` true when request has been dma-mappedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hXCstruct dwc3_request { struct usb_request request; struct list_head list; struct dwc3_ep *dep; struct scatterlist *start_sg; unsigned int num_pending_sgs; unsigned int remaining; unsigned int status; #define DWC3_REQUEST_STATUS_QUEUED 0; #define DWC3_REQUEST_STATUS_STARTED 1; #define DWC3_REQUEST_STATUS_DISCONNECTED 2; #define DWC3_REQUEST_STATUS_DEQUEUED 3; #define DWC3_REQUEST_STATUS_STALLED 4; #define DWC3_REQUEST_STATUS_COMPLETED 5; #define DWC3_REQUEST_STATUS_UNKNOWN -1; u8 epnum; struct dwc3_trb *trb; dma_addr_t trb_dma; unsigned int num_trbs; unsigned int direction:1; unsigned int mapped:1; };h]hXCstruct dwc3_request { struct usb_request request; struct list_head list; struct dwc3_ep *dep; struct scatterlist *start_sg; unsigned int num_pending_sgs; unsigned int remaining; unsigned int status; #define DWC3_REQUEST_STATUS_QUEUED 0; #define DWC3_REQUEST_STATUS_STARTED 1; #define DWC3_REQUEST_STATUS_DISCONNECTED 2; #define DWC3_REQUEST_STATUS_DEQUEUED 3; #define DWC3_REQUEST_STATUS_STALLED 4; #define DWC3_REQUEST_STATUS_COMPLETED 5; #define DWC3_REQUEST_STATUS_UNKNOWN -1; u8 epnum; struct dwc3_trb *trb; dma_addr_t trb_dma; unsigned int num_trbs; unsigned int direction:1; unsigned int mapped:1; };}hj+sbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hhh](j)}(h1``request`` struct usb_request to be transferred h](j)}(h ``request``h]j)}(hj[h]hrequest}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjUubj)}(hhh]h)}(h$struct usb_request to be transferredh]h$struct usb_request to be transferred}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubj)}(h/``list`` a list_head used for request queueing h](j)}(h``list``h]j)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h%a list_head used for request queueingh]h%a list_head used for request queueing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(h+``dep`` struct dwc3_ep owning this request h](j)}(h``dep``h]j)}(hjh]hdep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjubj)}(hhh]h)}(h"struct dwc3_ep owning this requesth]h"struct dwc3_ep owning this request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubj)}(h;``start_sg`` pointer to the sg which should be queued next h](j)}(h ``start_sg``h]j)}(hj h]hstart_sg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hhh]h)}(h-pointer to the sg which should be queued nexth]h-pointer to the sg which should be queued next}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjRubj)}(h+``num_pending_sgs`` counter to pending sgs h](j)}(h``num_pending_sgs``h]j)}(hj? h]hnum_pending_sgs}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj9 ubj)}(hhh]h)}(hcounter to pending sgsh]hcounter to pending sgs}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT hMhjU ubah}(h]h ]h"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]uh1jhjT hMhjRubj)}(h'``remaining`` amount of data remaining h](j)}(h ``remaining``h]j)}(hjx h]h remaining}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjr ubj)}(hhh]h)}(hamount of data remainingh]hamount of data remaining}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjRubj)}(h1``status`` internal dwc3 request status tracking h](j)}(h ``status``h]j)}(hj h]hstatus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hhh]h)}(h%internal dwc3 request status trackingh]h%internal dwc3 request status tracking}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjRubj)}(h7``epnum`` endpoint number to which this request refers h](j)}(h ``epnum``h]j)}(hj h]hepnum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj ubj)}(hhh]h)}(h,endpoint number to which this request refersh]h,endpoint number to which this request refers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjRubj)}(h#``trb`` pointer to struct dwc3_trb h](j)}(h``trb``h]j)}(hj#!h]htrb}(hj%!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!!ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj!ubj)}(hhh]h)}(hpointer to struct dwc3_trbh]hpointer to struct dwc3_trb}(hj**Definition**:: struct dwc3 { struct work_struct drd_work; struct dwc3_trb *ep0_trb; void *bounce; u8 *setup_buf; dma_addr_t ep0_trb_addr; dma_addr_t bounce_addr; struct dwc3_request ep0_usb_req; struct completion ep0_in_setup; spinlock_t lock; struct mutex mutex; struct device *dev; struct device *sysdev; struct platform_device *xhci; struct resource xhci_resources[DWC3_XHCI_RESOURCES_NUM]; struct dwc3_event_buffer *ev_buf; struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM]; struct usb_gadget *gadget; struct usb_gadget_driver *gadget_driver; struct clk *bus_clk; struct clk *ref_clk; struct clk *susp_clk; struct clk *utmi_clk; struct clk *pipe_clk; struct reset_control *reset; struct usb_phy *usb2_phy; struct usb_phy *usb3_phy; struct phy *usb2_generic_phy[DWC3_USB2_MAX_PORTS]; struct phy *usb3_generic_phy[DWC3_USB3_MAX_PORTS]; u8 num_usb2_ports; u8 num_usb3_ports; bool phys_ready; struct ulpi *ulpi; bool ulpi_ready; void __iomem *regs; size_t regs_size; enum usb_dr_mode dr_mode; u32 current_dr_role; u32 desired_dr_role; struct extcon_dev *edev; struct notifier_block edev_nb; enum usb_phy_interface hsphy_mode; struct usb_role_switch *role_sw; enum usb_dr_mode role_switch_default_mode; struct power_supply *usb_psy; u32 fladj; u32 ref_clk_per; u32 irq_gadget; u32 otg_irq; u32 current_otg_role; u32 desired_otg_role; bool otg_restart_host; u32 u1u2; u32 maximum_speed; u32 gadget_max_speed; enum usb_ssp_rate max_ssp_rate; enum usb_ssp_rate gadget_ssp_rate; u32 ip; #define DWC3_IP 0x5533; #define DWC31_IP 0x3331; #define DWC32_IP 0x3332; u32 revision; #define DWC3_REVISION_ANY 0x0; #define DWC3_REVISION_173A 0x5533173a; #define DWC3_REVISION_175A 0x5533175a; #define DWC3_REVISION_180A 0x5533180a; #define DWC3_REVISION_183A 0x5533183a; #define DWC3_REVISION_185A 0x5533185a; #define DWC3_REVISION_187A 0x5533187a; #define DWC3_REVISION_188A 0x5533188a; #define DWC3_REVISION_190A 0x5533190a; #define DWC3_REVISION_194A 0x5533194a; #define DWC3_REVISION_200A 0x5533200a; #define DWC3_REVISION_202A 0x5533202a; #define DWC3_REVISION_210A 0x5533210a; #define DWC3_REVISION_220A 0x5533220a; #define DWC3_REVISION_230A 0x5533230a; #define DWC3_REVISION_240A 0x5533240a; #define DWC3_REVISION_250A 0x5533250a; #define DWC3_REVISION_260A 0x5533260a; #define DWC3_REVISION_270A 0x5533270a; #define DWC3_REVISION_280A 0x5533280a; #define DWC3_REVISION_290A 0x5533290a; #define DWC3_REVISION_300A 0x5533300a; #define DWC3_REVISION_310A 0x5533310a; #define DWC3_REVISION_320A 0x5533320a; #define DWC3_REVISION_330A 0x5533330a; #define DWC31_REVISION_ANY 0x0; #define DWC31_REVISION_110A 0x3131302a; #define DWC31_REVISION_120A 0x3132302a; #define DWC31_REVISION_160A 0x3136302a; #define DWC31_REVISION_170A 0x3137302a; #define DWC31_REVISION_180A 0x3138302a; #define DWC31_REVISION_190A 0x3139302a; #define DWC31_REVISION_200A 0x3230302a; #define DWC32_REVISION_ANY 0x0; #define DWC32_REVISION_100A 0x3130302a; u32 version_type; #define DWC31_VERSIONTYPE_ANY 0x0; #define DWC31_VERSIONTYPE_EA01 0x65613031; #define DWC31_VERSIONTYPE_EA02 0x65613032; #define DWC31_VERSIONTYPE_EA03 0x65613033; #define DWC31_VERSIONTYPE_EA04 0x65613034; #define DWC31_VERSIONTYPE_EA05 0x65613035; #define DWC31_VERSIONTYPE_EA06 0x65613036; enum dwc3_ep0_next ep0_next_event; enum dwc3_ep0_state ep0state; enum dwc3_link_state link_state; u16 u2sel; u16 u2pel; u8 u1sel; u8 u1pel; u8 speed; u8 num_eps; struct dwc3_hwparams hwparams; struct debugfs_regset32 *regset; u32 dbg_lsp_select; u8 test_mode; u8 test_mode_nr; u8 lpm_nyet_threshold; u8 hird_threshold; u8 rx_thr_num_pkt; u8 rx_max_burst; u8 tx_thr_num_pkt; u8 tx_max_burst; u8 rx_thr_num_pkt_prd; u8 rx_max_burst_prd; u8 tx_thr_num_pkt_prd; u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; const char *hsphy_interface; unsigned connected:1; unsigned softconnect:1; unsigned delayed_status:1; unsigned ep0_bounced:1; unsigned ep0_expect_in:1; unsigned sysdev_is_parent:1; unsigned has_lpm_erratum:1; unsigned is_utmi_l1_suspend:1; unsigned is_fpga:1; unsigned pending_events:1; unsigned do_fifo_resize:1; unsigned pullups_connected:1; unsigned setup_packet_pending:1; unsigned three_stage_setup:1; unsigned dis_start_transfer_quirk:1; unsigned usb3_lpm_capable:1; unsigned usb2_lpm_disable:1; unsigned usb2_gadget_lpm_disable:1; unsigned disable_scramble_quirk:1; unsigned u2exit_lfps_quirk:1; unsigned u2ss_inp3_quirk:1; unsigned req_p1p2p3_quirk:1; unsigned del_p1p2p3_quirk:1; unsigned del_phy_power_chg_quirk:1; unsigned lfps_filter_quirk:1; unsigned rx_detect_poll_quirk:1; unsigned dis_u3_susphy_quirk:1; unsigned dis_u2_susphy_quirk:1; unsigned dis_enblslpm_quirk:1; unsigned dis_u1_entry_quirk:1; unsigned dis_u2_entry_quirk:1; unsigned dis_rxdet_inp3_quirk:1; unsigned dis_u2_freeclk_exists_quirk:1; unsigned dis_del_phy_power_chg_quirk:1; unsigned dis_tx_ipgap_linecheck_quirk:1; unsigned resume_hs_terminations:1; unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; unsigned gfladj_refclk_lpm_sel:1; unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; unsigned dis_metastability_quirk:1; unsigned dis_split_quirk:1; unsigned async_callbacks:1; unsigned sys_wakeup:1; unsigned wakeup_configured:1; unsigned suspended:1; unsigned susphy_state:1; u16 imod_interval; int max_cfg_eps; int last_fifo_depth; int num_ep_resized; struct dentry *debug_root; u32 gsbuscfg0_reqinfo; }; **Members** ``drd_work`` workqueue used for role swapping ``ep0_trb`` trb which is used for the ctrl_req ``bounce`` address of bounce buffer ``setup_buf`` used while precessing STD USB requests ``ep0_trb_addr`` dma address of **ep0_trb** ``bounce_addr`` dma address of **bounce** ``ep0_usb_req`` dummy req used while handling STD USB requests ``ep0_in_setup`` one control transfer is completed and enter setup phase ``lock`` for synchronizing ``mutex`` for mode switching ``dev`` pointer to our struct device ``sysdev`` pointer to the DMA-capable device ``xhci`` pointer to our xHCI child ``xhci_resources`` struct resources for our **xhci** child ``ev_buf`` struct dwc3_event_buffer pointer ``eps`` endpoint array ``gadget`` device side representation of the peripheral controller ``gadget_driver`` pointer to the gadget driver ``bus_clk`` clock for accessing the registers ``ref_clk`` reference clock ``susp_clk`` clock used when the SS phy is in low power (S3) state ``utmi_clk`` clock used for USB2 PHY communication ``pipe_clk`` clock used for USB3 PHY communication ``reset`` reset control ``usb2_phy`` pointer to USB2 PHY ``usb3_phy`` pointer to USB3 PHY ``usb2_generic_phy`` pointer to array of USB2 PHYs ``usb3_generic_phy`` pointer to array of USB3 PHYs ``num_usb2_ports`` number of USB2 ports ``num_usb3_ports`` number of USB3 ports ``phys_ready`` flag to indicate that PHYs are ready ``ulpi`` pointer to ulpi interface ``ulpi_ready`` flag to indicate that ULPI is initialized ``regs`` base address for our registers ``regs_size`` address space size ``dr_mode`` requested mode of operation ``current_dr_role`` current role of operation when in dual-role mode ``desired_dr_role`` desired role of operation when in dual-role mode ``edev`` extcon handle ``edev_nb`` extcon notifier ``hsphy_mode`` UTMI phy mode, one of following: - USBPHY_INTERFACE_MODE_UTMI - USBPHY_INTERFACE_MODE_UTMIW ``role_sw`` usb_role_switch handle ``role_switch_default_mode`` default operation mode of controller while usb role is USB_ROLE_NONE. ``usb_psy`` pointer to power supply interface. ``fladj`` frame length adjustment ``ref_clk_per`` reference clock period configuration ``irq_gadget`` peripheral controller's IRQ number ``otg_irq`` IRQ number for OTG IRQs ``current_otg_role`` current role of operation while using the OTG block ``desired_otg_role`` desired role of operation while using the OTG block ``otg_restart_host`` flag that OTG controller needs to restart host ``u1u2`` only used on revisions <1.83a for workaround ``maximum_speed`` maximum speed requested (mainly for testing purposes) ``gadget_max_speed`` maximum gadget speed requested ``max_ssp_rate`` SuperSpeed Plus maximum signaling rate and lane count ``gadget_ssp_rate`` Gadget driver's maximum supported SuperSpeed Plus signaling rate and lane count. ``ip`` controller's ID ``revision`` controller's version of an IP ``version_type`` VERSIONTYPE register contents, a sub release of a revision ``ep0_next_event`` hold the next expected event ``ep0state`` state of endpoint zero ``link_state`` link state ``u2sel`` parameter from Set SEL request. ``u2pel`` parameter from Set SEL request. ``u1sel`` parameter from Set SEL request. ``u1pel`` parameter from Set SEL request. ``speed`` device speed (super, high, full, low) ``num_eps`` number of endpoints ``hwparams`` copy of hwparams registers ``regset`` debugfs pointer to regdump file ``dbg_lsp_select`` current debug lsp mux register selection ``test_mode`` true when we're entering a USB test mode ``test_mode_nr`` test feature selector ``lpm_nyet_threshold`` LPM NYET response threshold ``hird_threshold`` HIRD threshold ``rx_thr_num_pkt`` USB receive packet count ``rx_max_burst`` max USB receive burst size ``tx_thr_num_pkt`` USB transmit packet count ``tx_max_burst`` max USB transmit burst size ``rx_thr_num_pkt_prd`` periodic ESS receive packet count ``rx_max_burst_prd`` max periodic ESS receive burst size ``tx_thr_num_pkt_prd`` periodic ESS transmit packet count ``tx_max_burst_prd`` max periodic ESS transmit burst size ``tx_fifo_resize_max_num`` max number of fifos allocated during txfifo resize ``clear_stall_protocol`` endpoint number that requires a delayed status phase ``hsphy_interface`` "utmi" or "ulpi" ``connected`` true when we're connected to a host, false otherwise ``softconnect`` true when gadget connect is called, false when disconnect runs ``delayed_status`` true when gadget driver asks for delayed status ``ep0_bounced`` true when we used bounce buffer ``ep0_expect_in`` true when we expect a DATA IN transfer ``sysdev_is_parent`` true when dwc3 device has a parent driver ``has_lpm_erratum`` true when core was configured with LPM Erratum. Note that there's now way for software to detect this in runtime. ``is_utmi_l1_suspend`` the core asserts output signal 0 - utmi_sleep_n 1 - utmi_l1_suspend_n ``is_fpga`` true when we are using the FPGA board ``pending_events`` true when we have pending IRQs to be handled ``do_fifo_resize`` true when txfifo resizing is enabled for dwc3 endpoints ``pullups_connected`` true when Run/Stop bit is set ``setup_packet_pending`` true when there's a Setup Packet in FIFO. Workaround ``three_stage_setup`` set if we perform a three phase setup ``dis_start_transfer_quirk`` set if start_transfer failure SW workaround is not needed for DWC_usb31 version 1.70a-ea06 and below ``usb3_lpm_capable`` set if hadrware supports Link Power Management ``usb2_lpm_disable`` set to disable usb2 lpm for host ``usb2_gadget_lpm_disable`` set to disable usb2 lpm for gadget ``disable_scramble_quirk`` set if we enable the disable scramble quirk ``u2exit_lfps_quirk`` set if we enable u2exit lfps quirk ``u2ss_inp3_quirk`` set if we enable P3 OK for U2/SS Inactive quirk ``req_p1p2p3_quirk`` set if we enable request p1p2p3 quirk ``del_p1p2p3_quirk`` set if we enable delay p1p2p3 quirk ``del_phy_power_chg_quirk`` set if we enable delay phy power change quirk ``lfps_filter_quirk`` set if we enable LFPS filter quirk ``rx_detect_poll_quirk`` set if we enable rx_detect to polling lfps quirk ``dis_u3_susphy_quirk`` set if we disable usb3 suspend phy ``dis_u2_susphy_quirk`` set if we disable usb2 suspend phy ``dis_enblslpm_quirk`` set if we clear enblslpm in GUSB2PHYCFG, disabling the suspend signal to the PHY. ``dis_u1_entry_quirk`` set if link entering into U1 state needs to be disabled. ``dis_u2_entry_quirk`` set if link entering into U2 state needs to be disabled. ``dis_rxdet_inp3_quirk`` set if we disable Rx.Detect in P3 ``dis_u2_freeclk_exists_quirk`` set if we clear u2_freeclk_exists in GUSB2PHYCFG, specify that USB2 PHY doesn't provide a free-running PHY clock. ``dis_del_phy_power_chg_quirk`` set if we disable delay phy power change quirk. ``dis_tx_ipgap_linecheck_quirk`` set if we disable u2mac linestate check during HS transmit. ``resume_hs_terminations`` Set if we enable quirk for fixing improper crc generation after resume from suspend. ``ulpi_ext_vbus_drv`` Set to confiure the upli chip to drives CPEN pin VBUS with an external supply. ``parkmode_disable_ss_quirk`` set if we need to disable all SuperSpeed instances in park mode. ``parkmode_disable_hs_quirk`` set if we need to disable all HishSpeed instances in park mode. ``gfladj_refclk_lpm_sel`` set if we need to enable SOF/ITP counter running based on ref_clk ``tx_de_emphasis_quirk`` set if we enable Tx de-emphasis quirk ``tx_de_emphasis`` Tx de-emphasis value 0 - -6dB de-emphasis 1 - -3.5dB de-emphasis 2 - No de-emphasis 3 - Reserved ``dis_metastability_quirk`` set to disable metastability quirk. ``dis_split_quirk`` set to disable split boundary. ``async_callbacks`` if set, indicate that async callbacks will be used. ``sys_wakeup`` set if the device may do system wakeup. ``wakeup_configured`` set if the device is configured for remote wakeup. ``suspended`` set to track suspend event due to U3/L2. ``susphy_state`` state of DWC3_GUSB2PHYCFG_SUSPHY + DWC3_GUSB3PIPECTL_SUSPHY before PM suspend. ``imod_interval`` set the interrupt moderation interval in 250ns increments or 0 to disable. ``max_cfg_eps`` current max number of IN eps used across all USB configs. ``last_fifo_depth`` last fifo depth used to determine next fifo ram start address. ``num_ep_resized`` carries the current number endpoints which have had its tx fifo resized. ``debug_root`` root debugfs directory for this device to put its files in. ``gsbuscfg0_reqinfo`` store GSBUSCFG0.DATRDREQINFO, DESRDREQINFO, DATWRREQINFO, and DESWRREQINFO value passed from glue driver.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh:}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj"ubj)}(hX~struct dwc3 { struct work_struct drd_work; struct dwc3_trb *ep0_trb; void *bounce; u8 *setup_buf; dma_addr_t ep0_trb_addr; dma_addr_t bounce_addr; struct dwc3_request ep0_usb_req; struct completion ep0_in_setup; spinlock_t lock; struct mutex mutex; struct device *dev; struct device *sysdev; struct platform_device *xhci; struct resource xhci_resources[DWC3_XHCI_RESOURCES_NUM]; struct dwc3_event_buffer *ev_buf; struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM]; struct usb_gadget *gadget; struct usb_gadget_driver *gadget_driver; struct clk *bus_clk; struct clk *ref_clk; struct clk *susp_clk; struct clk *utmi_clk; struct clk *pipe_clk; struct reset_control *reset; struct usb_phy *usb2_phy; struct usb_phy *usb3_phy; struct phy *usb2_generic_phy[DWC3_USB2_MAX_PORTS]; struct phy *usb3_generic_phy[DWC3_USB3_MAX_PORTS]; u8 num_usb2_ports; u8 num_usb3_ports; bool phys_ready; struct ulpi *ulpi; bool ulpi_ready; void __iomem *regs; size_t regs_size; enum usb_dr_mode dr_mode; u32 current_dr_role; u32 desired_dr_role; struct extcon_dev *edev; struct notifier_block edev_nb; enum usb_phy_interface hsphy_mode; struct usb_role_switch *role_sw; enum usb_dr_mode role_switch_default_mode; struct power_supply *usb_psy; u32 fladj; u32 ref_clk_per; u32 irq_gadget; u32 otg_irq; u32 current_otg_role; u32 desired_otg_role; bool otg_restart_host; u32 u1u2; u32 maximum_speed; u32 gadget_max_speed; enum usb_ssp_rate max_ssp_rate; enum usb_ssp_rate gadget_ssp_rate; u32 ip; #define DWC3_IP 0x5533; #define DWC31_IP 0x3331; #define DWC32_IP 0x3332; u32 revision; #define DWC3_REVISION_ANY 0x0; #define DWC3_REVISION_173A 0x5533173a; #define DWC3_REVISION_175A 0x5533175a; #define DWC3_REVISION_180A 0x5533180a; #define DWC3_REVISION_183A 0x5533183a; #define DWC3_REVISION_185A 0x5533185a; #define DWC3_REVISION_187A 0x5533187a; #define DWC3_REVISION_188A 0x5533188a; #define DWC3_REVISION_190A 0x5533190a; #define DWC3_REVISION_194A 0x5533194a; #define DWC3_REVISION_200A 0x5533200a; #define DWC3_REVISION_202A 0x5533202a; #define DWC3_REVISION_210A 0x5533210a; #define DWC3_REVISION_220A 0x5533220a; #define DWC3_REVISION_230A 0x5533230a; #define DWC3_REVISION_240A 0x5533240a; #define DWC3_REVISION_250A 0x5533250a; #define DWC3_REVISION_260A 0x5533260a; #define DWC3_REVISION_270A 0x5533270a; #define DWC3_REVISION_280A 0x5533280a; #define DWC3_REVISION_290A 0x5533290a; #define DWC3_REVISION_300A 0x5533300a; #define DWC3_REVISION_310A 0x5533310a; #define DWC3_REVISION_320A 0x5533320a; #define DWC3_REVISION_330A 0x5533330a; #define DWC31_REVISION_ANY 0x0; #define DWC31_REVISION_110A 0x3131302a; #define DWC31_REVISION_120A 0x3132302a; #define DWC31_REVISION_160A 0x3136302a; #define DWC31_REVISION_170A 0x3137302a; #define DWC31_REVISION_180A 0x3138302a; #define DWC31_REVISION_190A 0x3139302a; #define DWC31_REVISION_200A 0x3230302a; #define DWC32_REVISION_ANY 0x0; #define DWC32_REVISION_100A 0x3130302a; u32 version_type; #define DWC31_VERSIONTYPE_ANY 0x0; #define DWC31_VERSIONTYPE_EA01 0x65613031; #define DWC31_VERSIONTYPE_EA02 0x65613032; #define DWC31_VERSIONTYPE_EA03 0x65613033; #define DWC31_VERSIONTYPE_EA04 0x65613034; #define DWC31_VERSIONTYPE_EA05 0x65613035; #define DWC31_VERSIONTYPE_EA06 0x65613036; enum dwc3_ep0_next ep0_next_event; enum dwc3_ep0_state ep0state; enum dwc3_link_state link_state; u16 u2sel; u16 u2pel; u8 u1sel; u8 u1pel; u8 speed; u8 num_eps; struct dwc3_hwparams hwparams; struct debugfs_regset32 *regset; u32 dbg_lsp_select; u8 test_mode; u8 test_mode_nr; u8 lpm_nyet_threshold; u8 hird_threshold; u8 rx_thr_num_pkt; u8 rx_max_burst; u8 tx_thr_num_pkt; u8 tx_max_burst; u8 rx_thr_num_pkt_prd; u8 rx_max_burst_prd; u8 tx_thr_num_pkt_prd; u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; const char *hsphy_interface; unsigned connected:1; unsigned softconnect:1; unsigned delayed_status:1; unsigned ep0_bounced:1; unsigned ep0_expect_in:1; unsigned sysdev_is_parent:1; unsigned has_lpm_erratum:1; unsigned is_utmi_l1_suspend:1; unsigned is_fpga:1; unsigned pending_events:1; unsigned do_fifo_resize:1; unsigned pullups_connected:1; unsigned setup_packet_pending:1; unsigned three_stage_setup:1; unsigned dis_start_transfer_quirk:1; unsigned usb3_lpm_capable:1; unsigned usb2_lpm_disable:1; unsigned usb2_gadget_lpm_disable:1; unsigned disable_scramble_quirk:1; unsigned u2exit_lfps_quirk:1; unsigned u2ss_inp3_quirk:1; unsigned req_p1p2p3_quirk:1; unsigned del_p1p2p3_quirk:1; unsigned del_phy_power_chg_quirk:1; unsigned lfps_filter_quirk:1; unsigned rx_detect_poll_quirk:1; unsigned dis_u3_susphy_quirk:1; unsigned dis_u2_susphy_quirk:1; unsigned dis_enblslpm_quirk:1; unsigned dis_u1_entry_quirk:1; unsigned dis_u2_entry_quirk:1; unsigned dis_rxdet_inp3_quirk:1; unsigned dis_u2_freeclk_exists_quirk:1; unsigned dis_del_phy_power_chg_quirk:1; unsigned dis_tx_ipgap_linecheck_quirk:1; unsigned resume_hs_terminations:1; unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; unsigned gfladj_refclk_lpm_sel:1; unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; unsigned dis_metastability_quirk:1; unsigned dis_split_quirk:1; unsigned async_callbacks:1; unsigned sys_wakeup:1; unsigned wakeup_configured:1; unsigned suspended:1; unsigned susphy_state:1; u16 imod_interval; int max_cfg_eps; int last_fifo_depth; int num_ep_resized; struct dentry *debug_root; u32 gsbuscfg0_reqinfo; };h]hX~struct dwc3 { struct work_struct drd_work; struct dwc3_trb *ep0_trb; void *bounce; u8 *setup_buf; dma_addr_t ep0_trb_addr; dma_addr_t bounce_addr; struct dwc3_request ep0_usb_req; struct completion ep0_in_setup; spinlock_t lock; struct mutex mutex; struct device *dev; struct device *sysdev; struct platform_device *xhci; struct resource xhci_resources[DWC3_XHCI_RESOURCES_NUM]; struct dwc3_event_buffer *ev_buf; struct dwc3_ep *eps[DWC3_ENDPOINTS_NUM]; struct usb_gadget *gadget; struct usb_gadget_driver *gadget_driver; struct clk *bus_clk; struct clk *ref_clk; struct clk *susp_clk; struct clk *utmi_clk; struct clk *pipe_clk; struct reset_control *reset; struct usb_phy *usb2_phy; struct usb_phy *usb3_phy; struct phy *usb2_generic_phy[DWC3_USB2_MAX_PORTS]; struct phy *usb3_generic_phy[DWC3_USB3_MAX_PORTS]; u8 num_usb2_ports; u8 num_usb3_ports; bool phys_ready; struct ulpi *ulpi; bool ulpi_ready; void __iomem *regs; size_t regs_size; enum usb_dr_mode dr_mode; u32 current_dr_role; u32 desired_dr_role; struct extcon_dev *edev; struct notifier_block edev_nb; enum usb_phy_interface hsphy_mode; struct usb_role_switch *role_sw; enum usb_dr_mode role_switch_default_mode; struct power_supply *usb_psy; u32 fladj; u32 ref_clk_per; u32 irq_gadget; u32 otg_irq; u32 current_otg_role; u32 desired_otg_role; bool otg_restart_host; u32 u1u2; u32 maximum_speed; u32 gadget_max_speed; enum usb_ssp_rate max_ssp_rate; enum usb_ssp_rate gadget_ssp_rate; u32 ip; #define DWC3_IP 0x5533; #define DWC31_IP 0x3331; #define DWC32_IP 0x3332; u32 revision; #define DWC3_REVISION_ANY 0x0; #define DWC3_REVISION_173A 0x5533173a; #define DWC3_REVISION_175A 0x5533175a; #define DWC3_REVISION_180A 0x5533180a; #define DWC3_REVISION_183A 0x5533183a; #define DWC3_REVISION_185A 0x5533185a; #define DWC3_REVISION_187A 0x5533187a; #define DWC3_REVISION_188A 0x5533188a; #define DWC3_REVISION_190A 0x5533190a; #define DWC3_REVISION_194A 0x5533194a; #define DWC3_REVISION_200A 0x5533200a; #define DWC3_REVISION_202A 0x5533202a; #define DWC3_REVISION_210A 0x5533210a; #define DWC3_REVISION_220A 0x5533220a; #define DWC3_REVISION_230A 0x5533230a; #define DWC3_REVISION_240A 0x5533240a; #define DWC3_REVISION_250A 0x5533250a; #define DWC3_REVISION_260A 0x5533260a; #define DWC3_REVISION_270A 0x5533270a; #define DWC3_REVISION_280A 0x5533280a; #define DWC3_REVISION_290A 0x5533290a; #define DWC3_REVISION_300A 0x5533300a; #define DWC3_REVISION_310A 0x5533310a; #define DWC3_REVISION_320A 0x5533320a; #define DWC3_REVISION_330A 0x5533330a; #define DWC31_REVISION_ANY 0x0; #define DWC31_REVISION_110A 0x3131302a; #define DWC31_REVISION_120A 0x3132302a; #define DWC31_REVISION_160A 0x3136302a; #define DWC31_REVISION_170A 0x3137302a; #define DWC31_REVISION_180A 0x3138302a; #define DWC31_REVISION_190A 0x3139302a; #define DWC31_REVISION_200A 0x3230302a; #define DWC32_REVISION_ANY 0x0; #define DWC32_REVISION_100A 0x3130302a; u32 version_type; #define DWC31_VERSIONTYPE_ANY 0x0; #define DWC31_VERSIONTYPE_EA01 0x65613031; #define DWC31_VERSIONTYPE_EA02 0x65613032; #define DWC31_VERSIONTYPE_EA03 0x65613033; #define DWC31_VERSIONTYPE_EA04 0x65613034; #define DWC31_VERSIONTYPE_EA05 0x65613035; #define DWC31_VERSIONTYPE_EA06 0x65613036; enum dwc3_ep0_next ep0_next_event; enum dwc3_ep0_state ep0state; enum dwc3_link_state link_state; u16 u2sel; u16 u2pel; u8 u1sel; u8 u1pel; u8 speed; u8 num_eps; struct dwc3_hwparams hwparams; struct debugfs_regset32 *regset; u32 dbg_lsp_select; u8 test_mode; u8 test_mode_nr; u8 lpm_nyet_threshold; u8 hird_threshold; u8 rx_thr_num_pkt; u8 rx_max_burst; u8 tx_thr_num_pkt; u8 tx_max_burst; u8 rx_thr_num_pkt_prd; u8 rx_max_burst_prd; u8 tx_thr_num_pkt_prd; u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; const char *hsphy_interface; unsigned connected:1; unsigned softconnect:1; unsigned delayed_status:1; unsigned ep0_bounced:1; unsigned ep0_expect_in:1; unsigned sysdev_is_parent:1; unsigned has_lpm_erratum:1; unsigned is_utmi_l1_suspend:1; unsigned is_fpga:1; unsigned pending_events:1; unsigned do_fifo_resize:1; unsigned pullups_connected:1; unsigned setup_packet_pending:1; unsigned three_stage_setup:1; unsigned dis_start_transfer_quirk:1; unsigned usb3_lpm_capable:1; unsigned usb2_lpm_disable:1; unsigned usb2_gadget_lpm_disable:1; unsigned disable_scramble_quirk:1; unsigned u2exit_lfps_quirk:1; unsigned u2ss_inp3_quirk:1; unsigned req_p1p2p3_quirk:1; unsigned del_p1p2p3_quirk:1; unsigned del_phy_power_chg_quirk:1; unsigned lfps_filter_quirk:1; unsigned rx_detect_poll_quirk:1; unsigned dis_u3_susphy_quirk:1; unsigned dis_u2_susphy_quirk:1; unsigned dis_enblslpm_quirk:1; unsigned dis_u1_entry_quirk:1; unsigned dis_u2_entry_quirk:1; unsigned dis_rxdet_inp3_quirk:1; unsigned dis_u2_freeclk_exists_quirk:1; unsigned dis_del_phy_power_chg_quirk:1; unsigned dis_tx_ipgap_linecheck_quirk:1; unsigned resume_hs_terminations:1; unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; unsigned gfladj_refclk_lpm_sel:1; unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; unsigned dis_metastability_quirk:1; unsigned dis_split_quirk:1; unsigned async_callbacks:1; unsigned sys_wakeup:1; unsigned wakeup_configured:1; unsigned suspended:1; unsigned susphy_state:1; u16 imod_interval; int max_cfg_eps; int last_fifo_depth; int num_ep_resized; struct dentry *debug_root; u32 gsbuscfg0_reqinfo; };}hj"sbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj"ubh)}(h **Members**h]j)}(hj"h]hMembers}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj"ubj)}(hhh](j)}(h.``drd_work`` workqueue used for role swapping h](j)}(h ``drd_work``h]j)}(hj#h]hdrd_work}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj#ubj)}(hhh]h)}(h workqueue used for role swappingh]h workqueue used for role swapping}(hj7#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3#hMhj4#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj3#hMhj#ubj)}(h/``ep0_trb`` trb which is used for the ctrl_req h](j)}(h ``ep0_trb``h]j)}(hjW#h]hep0_trb}(hjY#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU#ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjQ#ubj)}(hhh]h)}(h"trb which is used for the ctrl_reqh]h"trb which is used for the ctrl_req}(hjp#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl#hMhjm#ubah}(h]h ]h"]h$]h&]uh1jhjQ#ubeh}(h]h ]h"]h$]h&]uh1jhjl#hMhj#ubj)}(h$``bounce`` address of bounce buffer h](j)}(h ``bounce``h]j)}(hj#h]hbounce}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj#ubj)}(hhh]h)}(haddress of bounce bufferh]haddress of bounce buffer}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubj)}(h5``setup_buf`` used while precessing STD USB requests h](j)}(h ``setup_buf``h]j)}(hj#h]h setup_buf}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj#ubj)}(hhh]h)}(h&used while precessing STD USB requestsh]h&used while precessing STD USB requests}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubj)}(h,``ep0_trb_addr`` dma address of **ep0_trb** h](j)}(h``ep0_trb_addr``h]j)}(hj$h]h ep0_trb_addr}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj#ubj)}(hhh]h)}(hdma address of **ep0_trb**h](hdma address of }(hj$hhhNhNubj)}(h **ep0_trb**h]hep0_trb}(hj#$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj#ubj)}(h*``bounce_addr`` dma address of **bounce** h](j)}(h``bounce_addr``h]j)}(hjI$h]h bounce_addr}(hjK$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjC$ubj)}(hhh]h)}(hdma address of **bounce**h](hdma address of }(hjb$hhhNhNubj)}(h **bounce**h]hbounce}(hjj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb$ubeh}(h]h ]h"]h$]h&]uh1hhj^$hMhj_$ubah}(h]h ]h"]h$]h&]uh1jhjC$ubeh}(h]h ]h"]h$]h&]uh1jhj^$hMhj#ubj)}(h?``ep0_usb_req`` dummy req used while handling STD USB requests h](j)}(h``ep0_usb_req``h]j)}(hj$h]h ep0_usb_req}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj$ubj)}(hhh]h)}(h.dummy req used while handling STD USB requestsh]h.dummy req used while handling STD USB requests}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj#ubj)}(hI``ep0_in_setup`` one control transfer is completed and enter setup phase h](j)}(h``ep0_in_setup``h]j)}(hj$h]h ep0_in_setup}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj$ubj)}(hhh]h)}(h7one control transfer is completed and enter setup phaseh]h7one control transfer is completed and enter setup phase}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj#ubj)}(h``lock`` for synchronizing h](j)}(h``lock``h]j)}(hj%h]hlock}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj$ubj)}(hhh]h)}(hfor synchronizingh]hfor synchronizing}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj#ubj)}(h``mutex`` for mode switching h](j)}(h ``mutex``h]j)}(hj;%h]hmutex}(hj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj5%ubj)}(hhh]h)}(hfor mode switchingh]hfor mode switching}(hjT%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP%hMhjQ%ubah}(h]h ]h"]h$]h&]uh1jhj5%ubeh}(h]h ]h"]h$]h&]uh1jhjP%hMhj#ubj)}(h%``dev`` pointer to our struct device h](j)}(h``dev``h]j)}(hjt%h]hdev}(hjv%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjn%ubj)}(hhh]h)}(hpointer to our struct deviceh]hpointer to our struct device}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhjn%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj#ubj)}(h-``sysdev`` pointer to the DMA-capable device h](j)}(h ``sysdev``h]j)}(hj%h]hsysdev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj%ubj)}(hhh]h)}(h!pointer to the DMA-capable deviceh]h!pointer to the DMA-capable device}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj#ubj)}(h#``xhci`` pointer to our xHCI child h](j)}(h``xhci``h]j)}(hj%h]hxhci}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj%ubj)}(hhh]h)}(hpointer to our xHCI childh]hpointer to our xHCI child}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj#ubj)}(h;``xhci_resources`` struct resources for our **xhci** child h](j)}(h``xhci_resources``h]j)}(hj&h]hxhci_resources}(hj!&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj&ubj)}(hhh]h)}(h'struct resources for our **xhci** childh](hstruct resources for our }(hj8&hhhNhNubj)}(h**xhci**h]hxhci}(hj@&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8&ubh child}(hj8&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4&hMhj5&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj4&hMhj#ubj)}(h,``ev_buf`` struct dwc3_event_buffer pointer h](j)}(h ``ev_buf``h]j)}(hjj&h]hev_buf}(hjl&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh&ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjd&ubj)}(hhh]h)}(h struct dwc3_event_buffer pointerh]h struct dwc3_event_buffer pointer}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjd&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj#ubj)}(h``eps`` endpoint array h](j)}(h``eps``h]j)}(hj&h]heps}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj&ubj)}(hhh]h)}(hendpoint arrayh]hendpoint array}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj#ubj)}(hC``gadget`` device side representation of the peripheral controller h](j)}(h ``gadget``h]j)}(hj&h]hgadget}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj&ubj)}(hhh]h)}(h7device side representation of the peripheral controllerh]h7device side representation of the peripheral controller}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj#ubj)}(h/``gadget_driver`` pointer to the gadget driver h](j)}(h``gadget_driver``h]j)}(hj'h]h gadget_driver}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj'ubj)}(hhh]h)}(hpointer to the gadget driverh]hpointer to the gadget driver}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*'hMhj+'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj*'hMhj#ubj)}(h.``bus_clk`` clock for accessing the registers h](j)}(h ``bus_clk``h]j)}(hjN'h]hbus_clk}(hjP'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjH'ubj)}(hhh]h)}(h!clock for accessing the registersh]h!clock for accessing the registers}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc'hMhjd'ubah}(h]h ]h"]h$]h&]uh1jhjH'ubeh}(h]h ]h"]h$]h&]uh1jhjc'hMhj#ubj)}(h``ref_clk`` reference clock h](j)}(h ``ref_clk``h]j)}(hj'h]href_clk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj'ubj)}(hhh]h)}(hreference clockh]hreference clock}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj#ubj)}(hC``susp_clk`` clock used when the SS phy is in low power (S3) state h](j)}(h ``susp_clk``h]j)}(hj'h]hsusp_clk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj'ubj)}(hhh]h)}(h5clock used when the SS phy is in low power (S3) stateh]h5clock used when the SS phy is in low power (S3) state}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj#ubj)}(h3``utmi_clk`` clock used for USB2 PHY communication h](j)}(h ``utmi_clk``h]j)}(hj'h]hutmi_clk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj'ubj)}(hhh]h)}(h%clock used for USB2 PHY communicationh]h%clock used for USB2 PHY communication}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj#ubj)}(h3``pipe_clk`` clock used for USB3 PHY communication h](j)}(h ``pipe_clk``h]j)}(hj2(h]hpipe_clk}(hj4(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0(ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj,(ubj)}(hhh]h)}(h%clock used for USB3 PHY communicationh]h%clock used for USB3 PHY communication}(hjK(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG(hMhjH(ubah}(h]h ]h"]h$]h&]uh1jhj,(ubeh}(h]h ]h"]h$]h&]uh1jhjG(hMhj#ubj)}(h``reset`` reset control h](j)}(h ``reset``h]j)}(hjk(h]hreset}(hjm(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji(ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhje(ubj)}(hhh]h)}(h reset controlh]h reset control}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhje(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj#ubj)}(h!``usb2_phy`` pointer to USB2 PHY h](j)}(h ``usb2_phy``h]j)}(hj(h]husb2_phy}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj(ubj)}(hhh]h)}(hpointer to USB2 PHYh]hpointer to USB2 PHY}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj#ubj)}(h!``usb3_phy`` pointer to USB3 PHY h](j)}(h ``usb3_phy``h]j)}(hj(h]husb3_phy}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj(ubj)}(hhh]h)}(hpointer to USB3 PHYh]hpointer to USB3 PHY}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj#ubj)}(h3``usb2_generic_phy`` pointer to array of USB2 PHYs h](j)}(h``usb2_generic_phy``h]j)}(hj)h]husb2_generic_phy}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj)ubj)}(hhh]h)}(hpointer to array of USB2 PHYsh]hpointer to array of USB2 PHYs}(hj/)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+)hMhj,)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj+)hMhj#ubj)}(h3``usb3_generic_phy`` pointer to array of USB3 PHYs h](j)}(h``usb3_generic_phy``h]j)}(hjO)h]husb3_generic_phy}(hjQ)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjI)ubj)}(hhh]h)}(hpointer to array of USB3 PHYsh]hpointer to array of USB3 PHYs}(hjh)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd)hMhje)ubah}(h]h ]h"]h$]h&]uh1jhjI)ubeh}(h]h ]h"]h$]h&]uh1jhjd)hMhj#ubj)}(h(``num_usb2_ports`` number of USB2 ports h](j)}(h``num_usb2_ports``h]j)}(hj)h]hnum_usb2_ports}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hj)ubj)}(hhh]h)}(hnumber of USB2 portsh]hnumber of USB2 ports}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM hj#ubj)}(h(``num_usb3_ports`` number of USB3 ports h](j)}(h``num_usb3_ports``h]j)}(hj)h]hnum_usb3_ports}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM!hj)ubj)}(hhh]h)}(hnumber of USB3 portsh]hnumber of USB3 ports}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM!hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hM!hj#ubj)}(h4``phys_ready`` flag to indicate that PHYs are ready h](j)}(h``phys_ready``h]j)}(hj)h]h phys_ready}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM"hj)ubj)}(hhh]h)}(h$flag to indicate that PHYs are readyh]h$flag to indicate that PHYs are ready}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM"hj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hM"hj#ubj)}(h#``ulpi`` pointer to ulpi interface h](j)}(h``ulpi``h]j)}(hj3*h]hulpi}(hj5*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1*ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM#hj-*ubj)}(hhh]h)}(hpointer to ulpi interfaceh]hpointer to ulpi interface}(hjL*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH*hM#hjI*ubah}(h]h ]h"]h$]h&]uh1jhj-*ubeh}(h]h ]h"]h$]h&]uh1jhjH*hM#hj#ubj)}(h9``ulpi_ready`` flag to indicate that ULPI is initialized h](j)}(h``ulpi_ready``h]j)}(hjl*h]h ulpi_ready}(hjn*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj*ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM$hjf*ubj)}(hhh]h)}(h)flag to indicate that ULPI is initializedh]h)flag to indicate that ULPI is initialized}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM$hj*ubah}(h]h ]h"]h$]h&]uh1jhjf*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM$hj#ubj)}(h(``regs`` base address for our registers h](j)}(h``regs``h]j)}(hj*h]hregs}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj*ubj)}(hhh]h)}(hbase address for our registersh]hbase address for our registers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj#ubj)}(h!``regs_size`` address space size h](j)}(h ``regs_size``h]j)}(hj*h]h regs_size}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj*ubj)}(hhh]h)}(haddress space sizeh]haddress space size}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj#ubj)}(h(``dr_mode`` requested mode of operation h](j)}(h ``dr_mode``h]j)}(hj+h]hdr_mode}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj+ubj)}(hhh]h)}(hrequested mode of operationh]hrequested mode of operation}(hj0+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,+hMhj-+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,+hMhj#ubj)}(hE``current_dr_role`` current role of operation when in dual-role mode h](j)}(h``current_dr_role``h]j)}(hjP+h]hcurrent_dr_role}(hjR+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjJ+ubj)}(hhh]h)}(h0current role of operation when in dual-role modeh]h0current role of operation when in dual-role mode}(hji+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje+hMhjf+ubah}(h]h ]h"]h$]h&]uh1jhjJ+ubeh}(h]h ]h"]h$]h&]uh1jhje+hMhj#ubj)}(hE``desired_dr_role`` desired role of operation when in dual-role mode h](j)}(h``desired_dr_role``h]j)}(hj+h]hdesired_dr_role}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj+ubj)}(hhh]h)}(h0desired role of operation when in dual-role modeh]h0desired role of operation when in dual-role mode}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj#ubj)}(h``edev`` extcon handle h](j)}(h``edev``h]j)}(hj+h]hedev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj+ubj)}(hhh]h)}(h extcon handleh]h extcon handle}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMhj#ubj)}(h``edev_nb`` extcon notifier h](j)}(h ``edev_nb``h]j)}(hj+h]hedev_nb}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj+ubj)}(hhh]h)}(hextcon notifierh]hextcon notifier}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj#ubj)}(hk``hsphy_mode`` UTMI phy mode, one of following: - USBPHY_INTERFACE_MODE_UTMI - USBPHY_INTERFACE_MODE_UTMIW h](j)}(h``hsphy_mode``h]j)}(hj4,h]h hsphy_mode}(hj6,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2,ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj.,ubj)}(hhh]h)}(h[UTMI phy mode, one of following: - USBPHY_INTERFACE_MODE_UTMI - USBPHY_INTERFACE_MODE_UTMIWh]h[UTMI phy mode, one of following: - USBPHY_INTERFACE_MODE_UTMI - USBPHY_INTERFACE_MODE_UTMIW}(hjM,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjJ,ubah}(h]h ]h"]h$]h&]uh1jhj.,ubeh}(h]h ]h"]h$]h&]uh1jhjI,hMhj#ubj)}(h#``role_sw`` usb_role_switch handle h](j)}(h ``role_sw``h]j)}(hjn,h]hrole_sw}(hjp,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl,ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjh,ubj)}(hhh]h)}(husb_role_switch handleh]husb_role_switch handle}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjh,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj#ubj)}(hc``role_switch_default_mode`` default operation mode of controller while usb role is USB_ROLE_NONE. h](j)}(h``role_switch_default_mode``h]j)}(hj,h]hrole_switch_default_mode}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj,ubj)}(hhh]h)}(hEdefault operation mode of controller while usb role is USB_ROLE_NONE.h]hEdefault operation mode of controller while usb role is USB_ROLE_NONE.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj#ubj)}(h/``usb_psy`` pointer to power supply interface. h](j)}(h ``usb_psy``h]j)}(hj,h]husb_psy}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj,ubj)}(hhh]h)}(h"pointer to power supply interface.h]h"pointer to power supply interface.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj#ubj)}(h"``fladj`` frame length adjustment h](j)}(h ``fladj``h]j)}(hj-h]hfladj}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj-ubj)}(hhh]h)}(hframe length adjustmenth]hframe length adjustment}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/-hMhj0-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj/-hMhj#ubj)}(h5``ref_clk_per`` reference clock period configuration h](j)}(h``ref_clk_per``h]j)}(hjS-h]h ref_clk_per}(hjU-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjM-ubj)}(hhh]h)}(h$reference clock period configurationh]h$reference clock period configuration}(hjl-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh-hMhji-ubah}(h]h ]h"]h$]h&]uh1jhjM-ubeh}(h]h ]h"]h$]h&]uh1jhjh-hMhj#ubj)}(h2``irq_gadget`` peripheral controller's IRQ number h](j)}(h``irq_gadget``h]j)}(hj-h]h irq_gadget}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj-ubj)}(hhh]h)}(h"peripheral controller's IRQ numberh]h$peripheral controller’s IRQ number}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj#ubj)}(h$``otg_irq`` IRQ number for OTG IRQs h](j)}(h ``otg_irq``h]j)}(hj-h]hotg_irq}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj-ubj)}(hhh]h)}(hIRQ number for OTG IRQsh]hIRQ number for OTG IRQs}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj#ubj)}(hI``current_otg_role`` current role of operation while using the OTG block h](j)}(h``current_otg_role``h]j)}(hj-h]hcurrent_otg_role}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj-ubj)}(hhh]h)}(h3current role of operation while using the OTG blockh]h3current role of operation while using the OTG block}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj#ubj)}(hI``desired_otg_role`` desired role of operation while using the OTG block h](j)}(h``desired_otg_role``h]j)}(hj7.h]hdesired_otg_role}(hj9.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5.ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj1.ubj)}(hhh]h)}(h3desired role of operation while using the OTG blockh]h3desired role of operation while using the OTG block}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL.hMhjM.ubah}(h]h ]h"]h$]h&]uh1jhj1.ubeh}(h]h ]h"]h$]h&]uh1jhjL.hMhj#ubj)}(hD``otg_restart_host`` flag that OTG controller needs to restart host h](j)}(h``otg_restart_host``h]j)}(hjp.h]hotg_restart_host}(hjr.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn.ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjj.ubj)}(hhh]h)}(h.flag that OTG controller needs to restart hosth]h.flag that OTG controller needs to restart host}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj#ubj)}(h6``u1u2`` only used on revisions <1.83a for workaround h](j)}(h``u1u2``h]j)}(hj.h]hu1u2}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj.ubj)}(hhh]h)}(h,only used on revisions <1.83a for workaroundh]h,only used on revisions <1.83a for workaround}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj#ubj)}(hH``maximum_speed`` maximum speed requested (mainly for testing purposes) h](j)}(h``maximum_speed``h]j)}(hj.h]h maximum_speed}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj.ubj)}(hhh]h)}(h5maximum speed requested (mainly for testing purposes)h]h5maximum speed requested (mainly for testing purposes)}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj#ubj)}(h4``gadget_max_speed`` maximum gadget speed requested h](j)}(h``gadget_max_speed``h]j)}(hj/h]hgadget_max_speed}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hj/ubj)}(hhh]h)}(hmaximum gadget speed requestedh]hmaximum gadget speed requested}(hj4/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0/hM hj1/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0/hM hj#ubj)}(hG``max_ssp_rate`` SuperSpeed Plus maximum signaling rate and lane count h](j)}(h``max_ssp_rate``h]j)}(hjT/h]h max_ssp_rate}(hjV/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hjN/ubj)}(hhh]h)}(h5SuperSpeed Plus maximum signaling rate and lane counth]h5SuperSpeed Plus maximum signaling rate and lane count}(hjm/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji/hM hjj/ubah}(h]h ]h"]h$]h&]uh1jhjN/ubeh}(h]h ]h"]h$]h&]uh1jhji/hM hj#ubj)}(he``gadget_ssp_rate`` Gadget driver's maximum supported SuperSpeed Plus signaling rate and lane count. h](j)}(h``gadget_ssp_rate``h]j)}(hj/h]hgadget_ssp_rate}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hj/ubj)}(hhh]h)}(hPGadget driver's maximum supported SuperSpeed Plus signaling rate and lane count.h]hRGadget driver’s maximum supported SuperSpeed Plus signaling rate and lane count.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj#ubj)}(h``ip`` controller's ID h](j)}(h``ip``h]j)}(hj/h]hip}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM hj/ubj)}(hhh]h)}(hcontroller's IDh]hcontroller’s ID}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hM hj#ubj)}(h+``revision`` controller's version of an IP h](j)}(h ``revision``h]j)}(hj0h]hrevision}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj/ubj)}(hhh]h)}(hcontroller's version of an IPh]hcontroller’s version of an IP}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj#ubj)}(hL``version_type`` VERSIONTYPE register contents, a sub release of a revision h](j)}(h``version_type``h]j)}(hj90h]h version_type}(hj;0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj70ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj30ubj)}(hhh]h)}(h:VERSIONTYPE register contents, a sub release of a revisionh]h:VERSIONTYPE register contents, a sub release of a revision}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN0hMhjO0ubah}(h]h ]h"]h$]h&]uh1jhj30ubeh}(h]h ]h"]h$]h&]uh1jhjN0hMhj#ubj)}(h0``ep0_next_event`` hold the next expected event h](j)}(h``ep0_next_event``h]j)}(hjr0h]hep0_next_event}(hjt0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp0ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM*hjl0ubj)}(hhh]h)}(hhold the next expected eventh]hhold the next expected event}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM*hj0ubah}(h]h ]h"]h$]h&]uh1jhjl0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM*hj#ubj)}(h$``ep0state`` state of endpoint zero h](j)}(h ``ep0state``h]j)}(hj0h]hep0state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM+hj0ubj)}(hhh]h)}(hstate of endpoint zeroh]hstate of endpoint zero}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM+hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM+hj#ubj)}(h``link_state`` link state h](j)}(h``link_state``h]j)}(hj0h]h link_state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM,hj0ubj)}(hhh]h)}(h link stateh]h link state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM,hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hM,hj#ubj)}(h*``u2sel`` parameter from Set SEL request. h](j)}(h ``u2sel``h]j)}(hj1h]hu2sel}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM%hj1ubj)}(hhh]h)}(hparameter from Set SEL request.h]hparameter from Set SEL request.}(hj61hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj21hM%hj31ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj21hM%hj#ubj)}(h*``u2pel`` parameter from Set SEL request. h](j)}(h ``u2pel``h]j)}(hjV1h]hu2pel}(hjX1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM&hjP1ubj)}(hhh]h)}(hparameter from Set SEL request.h]hparameter from Set SEL request.}(hjo1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk1hM&hjl1ubah}(h]h ]h"]h$]h&]uh1jhjP1ubeh}(h]h ]h"]h$]h&]uh1jhjk1hM&hj#ubj)}(h*``u1sel`` parameter from Set SEL request. h](j)}(h ``u1sel``h]j)}(hj1h]hu1sel}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM'hj1ubj)}(hhh]h)}(hparameter from Set SEL request.h]hparameter from Set SEL request.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM'hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM'hj#ubj)}(h*``u1pel`` parameter from Set SEL request. h](j)}(h ``u1pel``h]j)}(hj1h]hu1pel}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM(hj1ubj)}(hhh]h)}(hparameter from Set SEL request.h]hparameter from Set SEL request.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM(hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM(hj#ubj)}(h0``speed`` device speed (super, high, full, low) h](j)}(h ``speed``h]j)}(hj2h]hspeed}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM-hj1ubj)}(hhh]h)}(h%device speed (super, high, full, low)h]h%device speed (super, high, full, low)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM-hj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hM-hj#ubj)}(h ``num_eps`` number of endpoints h](j)}(h ``num_eps``h]j)}(hj:2h]hnum_eps}(hj<2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj82ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM)hj42ubj)}(hhh]h)}(hnumber of endpointsh]hnumber of endpoints}(hjS2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO2hM)hjP2ubah}(h]h ]h"]h$]h&]uh1jhj42ubeh}(h]h ]h"]h$]h&]uh1jhjO2hM)hj#ubj)}(h(``hwparams`` copy of hwparams registers h](j)}(h ``hwparams``h]j)}(hjs2h]hhwparams}(hju2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM.hjm2ubj)}(hhh]h)}(hcopy of hwparams registersh]hcopy of hwparams registers}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM.hj2ubah}(h]h ]h"]h$]h&]uh1jhjm2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM.hj#ubj)}(h+``regset`` debugfs pointer to regdump file h](j)}(h ``regset``h]j)}(hj2h]hregset}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM/hj2ubj)}(hhh]h)}(hdebugfs pointer to regdump fileh]hdebugfs pointer to regdump file}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM/hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM/hj#ubj)}(h<``dbg_lsp_select`` current debug lsp mux register selection h](j)}(h``dbg_lsp_select``h]j)}(hj2h]hdbg_lsp_select}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM0hj2ubj)}(hhh]h)}(h(current debug lsp mux register selectionh]h(current debug lsp mux register selection}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM0hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM0hj#ubj)}(h7``test_mode`` true when we're entering a USB test mode h](j)}(h ``test_mode``h]j)}(hj3h]h test_mode}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM1hj3ubj)}(hhh]h)}(h(true when we're entering a USB test modeh]h*true when we’re entering a USB test mode}(hj73hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj33hM1hj43ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj33hM1hj#ubj)}(h'``test_mode_nr`` test feature selector h](j)}(h``test_mode_nr``h]j)}(hjW3h]h test_mode_nr}(hjY3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM2hjQ3ubj)}(hhh]h)}(htest feature selectorh]htest feature selector}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl3hM2hjm3ubah}(h]h ]h"]h$]h&]uh1jhjQ3ubeh}(h]h ]h"]h$]h&]uh1jhjl3hM2hj#ubj)}(h3``lpm_nyet_threshold`` LPM NYET response threshold h](j)}(h``lpm_nyet_threshold``h]j)}(hj3h]hlpm_nyet_threshold}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM3hj3ubj)}(hhh]h)}(hLPM NYET response thresholdh]hLPM NYET response threshold}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM3hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM3hj#ubj)}(h"``hird_threshold`` HIRD threshold h](j)}(h``hird_threshold``h]j)}(hj3h]hhird_threshold}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM4hj3ubj)}(hhh]h)}(hHIRD thresholdh]hHIRD threshold}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM4hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM4hj#ubj)}(h,``rx_thr_num_pkt`` USB receive packet count h](j)}(h``rx_thr_num_pkt``h]j)}(hj4h]hrx_thr_num_pkt}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM5hj3ubj)}(hhh]h)}(hUSB receive packet counth]hUSB receive packet count}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM5hj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hM5hj#ubj)}(h,``rx_max_burst`` max USB receive burst size h](j)}(h``rx_max_burst``h]j)}(hj;4h]h rx_max_burst}(hj=4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj94ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM6hj54ubj)}(hhh]h)}(hmax USB receive burst sizeh]hmax USB receive burst size}(hjT4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP4hM6hjQ4ubah}(h]h ]h"]h$]h&]uh1jhj54ubeh}(h]h ]h"]h$]h&]uh1jhjP4hM6hj#ubj)}(h-``tx_thr_num_pkt`` USB transmit packet count h](j)}(h``tx_thr_num_pkt``h]j)}(hjt4h]htx_thr_num_pkt}(hjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr4ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM7hjn4ubj)}(hhh]h)}(hUSB transmit packet counth]hUSB transmit packet count}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM7hj4ubah}(h]h ]h"]h$]h&]uh1jhjn4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM7hj#ubj)}(h-``tx_max_burst`` max USB transmit burst size h](j)}(h``tx_max_burst``h]j)}(hj4h]h tx_max_burst}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM8hj4ubj)}(hhh]h)}(hmax USB transmit burst sizeh]hmax USB transmit burst size}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM8hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM8hj#ubj)}(h9``rx_thr_num_pkt_prd`` periodic ESS receive packet count h](j)}(h``rx_thr_num_pkt_prd``h]j)}(hj4h]hrx_thr_num_pkt_prd}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM9hj4ubj)}(hhh]h)}(h!periodic ESS receive packet counth]h!periodic ESS receive packet count}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM9hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM9hj#ubj)}(h9``rx_max_burst_prd`` max periodic ESS receive burst size h](j)}(h``rx_max_burst_prd``h]j)}(hj5h]hrx_max_burst_prd}(hj!5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM:hj5ubj)}(hhh]h)}(h#max periodic ESS receive burst sizeh]h#max periodic ESS receive burst size}(hj85hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj45hM:hj55ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj45hM:hj#ubj)}(h:``tx_thr_num_pkt_prd`` periodic ESS transmit packet count h](j)}(h``tx_thr_num_pkt_prd``h]j)}(hjX5h]htx_thr_num_pkt_prd}(hjZ5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV5ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM;hjR5ubj)}(hhh]h)}(h"periodic ESS transmit packet counth]h"periodic ESS transmit packet count}(hjq5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm5hM;hjn5ubah}(h]h ]h"]h$]h&]uh1jhjR5ubeh}(h]h ]h"]h$]h&]uh1jhjm5hM;hj#ubj)}(h:``tx_max_burst_prd`` max periodic ESS transmit burst size h](j)}(h``tx_max_burst_prd``h]j)}(hj5h]htx_max_burst_prd}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM<hj5ubj)}(hhh]h)}(h$max periodic ESS transmit burst sizeh]h$max periodic ESS transmit burst size}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM<hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM<hj#ubj)}(hN``tx_fifo_resize_max_num`` max number of fifos allocated during txfifo resize h](j)}(h``tx_fifo_resize_max_num``h]j)}(hj5h]htx_fifo_resize_max_num}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM=hj5ubj)}(hhh]h)}(h2max number of fifos allocated during txfifo resizeh]h2max number of fifos allocated during txfifo resize}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM=hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hM=hj#ubj)}(hN``clear_stall_protocol`` endpoint number that requires a delayed status phase h](j)}(h``clear_stall_protocol``h]j)}(hj6h]hclear_stall_protocol}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM>hj5ubj)}(hhh]h)}(h4endpoint number that requires a delayed status phaseh]h4endpoint number that requires a delayed status phase}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM>hj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hM>hj#ubj)}(h%``hsphy_interface`` "utmi" or "ulpi" h](j)}(h``hsphy_interface``h]j)}(hj<6h]hhsphy_interface}(hj>6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM?hj66ubj)}(hhh]h)}(h"utmi" or "ulpi"h]h“utmi” or “ulpi”}(hjU6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ6hM?hjR6ubah}(h]h ]h"]h$]h&]uh1jhj66ubeh}(h]h ]h"]h$]h&]uh1jhjQ6hM?hj#ubj)}(hC``connected`` true when we're connected to a host, false otherwise h](j)}(h ``connected``h]j)}(hju6h]h connected}(hjw6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM@hjo6ubj)}(hhh]h)}(h4true when we're connected to a host, false otherwiseh]h6true when we’re connected to a host, false otherwise}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM@hj6ubah}(h]h ]h"]h$]h&]uh1jhjo6ubeh}(h]h ]h"]h$]h&]uh1jhj6hM@hj#ubj)}(hO``softconnect`` true when gadget connect is called, false when disconnect runs h](j)}(h``softconnect``h]j)}(hj6h]h softconnect}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMAhj6ubj)}(hhh]h)}(h>true when gadget connect is called, false when disconnect runsh]h>true when gadget connect is called, false when disconnect runs}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMAhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMAhj#ubj)}(hC``delayed_status`` true when gadget driver asks for delayed status h](j)}(h``delayed_status``h]j)}(hj6h]hdelayed_status}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMBhj6ubj)}(hhh]h)}(h/true when gadget driver asks for delayed statush]h/true when gadget driver asks for delayed status}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMBhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMBhj#ubj)}(h0``ep0_bounced`` true when we used bounce buffer h](j)}(h``ep0_bounced``h]j)}(hj 7h]h ep0_bounced}(hj"7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMChj7ubj)}(hhh]h)}(htrue when we used bounce bufferh]htrue when we used bounce buffer}(hj97hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj57hMChj67ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj57hMChj#ubj)}(h9``ep0_expect_in`` true when we expect a DATA IN transfer h](j)}(h``ep0_expect_in``h]j)}(hjY7h]h ep0_expect_in}(hj[7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW7ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMDhjS7ubj)}(hhh]h)}(h&true when we expect a DATA IN transferh]h&true when we expect a DATA IN transfer}(hjr7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn7hMDhjo7ubah}(h]h ]h"]h$]h&]uh1jhjS7ubeh}(h]h ]h"]h$]h&]uh1jhjn7hMDhj#ubj)}(h?``sysdev_is_parent`` true when dwc3 device has a parent driver h](j)}(h``sysdev_is_parent``h]j)}(hj7h]hsysdev_is_parent}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMEhj7ubj)}(hhh]h)}(h)true when dwc3 device has a parent driverh]h)true when dwc3 device has a parent driver}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMEhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMEhj#ubj)}(h``has_lpm_erratum`` true when core was configured with LPM Erratum. Note that there's now way for software to detect this in runtime. h](j)}(h``has_lpm_erratum``h]j)}(hj7h]hhas_lpm_erratum}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMGhj7ubj)}(hhh]h)}(hqtrue when core was configured with LPM Erratum. Note that there's now way for software to detect this in runtime.h]hstrue when core was configured with LPM Erratum. Note that there’s now way for software to detect this in runtime.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMFhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMGhj#ubj)}(hi``is_utmi_l1_suspend`` the core asserts output signal 0 - utmi_sleep_n 1 - utmi_l1_suspend_n h](j)}(h``is_utmi_l1_suspend``h]j)}(hj8h]his_utmi_l1_suspend}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMJhj7ubj)}(hhh]h)}(hQthe core asserts output signal 0 - utmi_sleep_n 1 - utmi_l1_suspend_nh]hQthe core asserts output signal 0 - utmi_sleep_n 1 - utmi_l1_suspend_n}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMHhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMJhj#ubj)}(h2``is_fpga`` true when we are using the FPGA board h](j)}(h ``is_fpga``h]j)}(hj?8h]his_fpga}(hjA8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=8ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMKhj98ubj)}(hhh]h)}(h%true when we are using the FPGA boardh]h%true when we are using the FPGA board}(hjX8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT8hMKhjU8ubah}(h]h ]h"]h$]h&]uh1jhj98ubeh}(h]h ]h"]h$]h&]uh1jhjT8hMKhj#ubj)}(h@``pending_events`` true when we have pending IRQs to be handled h](j)}(h``pending_events``h]j)}(hjx8h]hpending_events}(hjz8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv8ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMLhjr8ubj)}(hhh]h)}(h,true when we have pending IRQs to be handledh]h,true when we have pending IRQs to be handled}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMLhj8ubah}(h]h ]h"]h$]h&]uh1jhjr8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMLhj#ubj)}(hK``do_fifo_resize`` true when txfifo resizing is enabled for dwc3 endpoints h](j)}(h``do_fifo_resize``h]j)}(hj8h]hdo_fifo_resize}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMMhj8ubj)}(hhh]h)}(h7true when txfifo resizing is enabled for dwc3 endpointsh]h7true when txfifo resizing is enabled for dwc3 endpoints}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMMhj#ubj)}(h4``pullups_connected`` true when Run/Stop bit is set h](j)}(h``pullups_connected``h]j)}(hj8h]hpullups_connected}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMNhj8ubj)}(hhh]h)}(htrue when Run/Stop bit is seth]htrue when Run/Stop bit is set}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMNhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMNhj#ubj)}(hN``setup_packet_pending`` true when there's a Setup Packet in FIFO. Workaround h](j)}(h``setup_packet_pending``h]j)}(hj#9h]hsetup_packet_pending}(hj%9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMOhj9ubj)}(hhh]h)}(h4true when there's a Setup Packet in FIFO. Workaroundh]h6true when there’s a Setup Packet in FIFO. Workaround}(hj<9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj89hMOhj99ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj89hMOhj#ubj)}(h<``three_stage_setup`` set if we perform a three phase setup h](j)}(h``three_stage_setup``h]j)}(hj\9h]hthree_stage_setup}(hj^9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMPhjV9ubj)}(hhh]h)}(h%set if we perform a three phase setuph]h%set if we perform a three phase setup}(hju9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq9hMPhjr9ubah}(h]h ]h"]h$]h&]uh1jhjV9ubeh}(h]h ]h"]h$]h&]uh1jhjq9hMPhj#ubj)}(h``dis_start_transfer_quirk`` set if start_transfer failure SW workaround is not needed for DWC_usb31 version 1.70a-ea06 and below h](j)}(h``dis_start_transfer_quirk``h]j)}(hj9h]hdis_start_transfer_quirk}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMRhj9ubj)}(hhh]h)}(hdset if start_transfer failure SW workaround is not needed for DWC_usb31 version 1.70a-ea06 and belowh]hdset if start_transfer failure SW workaround is not needed for DWC_usb31 version 1.70a-ea06 and below}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMQhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMRhj#ubj)}(hD``usb3_lpm_capable`` set if hadrware supports Link Power Management h](j)}(h``usb3_lpm_capable``h]j)}(hj9h]husb3_lpm_capable}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMShj9ubj)}(hhh]h)}(h.set if hadrware supports Link Power Managementh]h.set if hadrware supports Link Power Management}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMShj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMShj#ubj)}(h6``usb2_lpm_disable`` set to disable usb2 lpm for host h](j)}(h``usb2_lpm_disable``h]j)}(hj:h]husb2_lpm_disable}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMThj:ubj)}(hhh]h)}(h set to disable usb2 lpm for hosth]h set to disable usb2 lpm for host}(hj!:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMThj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMThj#ubj)}(h?``usb2_gadget_lpm_disable`` set to disable usb2 lpm for gadget h](j)}(h``usb2_gadget_lpm_disable``h]j)}(hjA:h]husb2_gadget_lpm_disable}(hjC:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMUhj;:ubj)}(hhh]h)}(h"set to disable usb2 lpm for gadgeth]h"set to disable usb2 lpm for gadget}(hjZ:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV:hMUhjW:ubah}(h]h ]h"]h$]h&]uh1jhj;:ubeh}(h]h ]h"]h$]h&]uh1jhjV:hMUhj#ubj)}(hG``disable_scramble_quirk`` set if we enable the disable scramble quirk h](j)}(h``disable_scramble_quirk``h]j)}(hjz:h]hdisable_scramble_quirk}(hj|:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMVhjt:ubj)}(hhh]h)}(h+set if we enable the disable scramble quirkh]h+set if we enable the disable scramble quirk}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMVhj:ubah}(h]h ]h"]h$]h&]uh1jhjt:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMVhj#ubj)}(h9``u2exit_lfps_quirk`` set if we enable u2exit lfps quirk h](j)}(h``u2exit_lfps_quirk``h]j)}(hj:h]hu2exit_lfps_quirk}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMWhj:ubj)}(hhh]h)}(h"set if we enable u2exit lfps quirkh]h"set if we enable u2exit lfps quirk}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMWhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMWhj#ubj)}(hD``u2ss_inp3_quirk`` set if we enable P3 OK for U2/SS Inactive quirk h](j)}(h``u2ss_inp3_quirk``h]j)}(hj:h]hu2ss_inp3_quirk}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMXhj:ubj)}(hhh]h)}(h/set if we enable P3 OK for U2/SS Inactive quirkh]h/set if we enable P3 OK for U2/SS Inactive quirk}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMXhj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj;hMXhj#ubj)}(h;``req_p1p2p3_quirk`` set if we enable request p1p2p3 quirk h](j)}(h``req_p1p2p3_quirk``h]j)}(hj%;h]hreq_p1p2p3_quirk}(hj';hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMYhj;ubj)}(hhh]h)}(h%set if we enable request p1p2p3 quirkh]h%set if we enable request p1p2p3 quirk}(hj>;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:;hMYhj;;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj:;hMYhj#ubj)}(h9``del_p1p2p3_quirk`` set if we enable delay p1p2p3 quirk h](j)}(h``del_p1p2p3_quirk``h]j)}(hj^;h]hdel_p1p2p3_quirk}(hj`;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMZhjX;ubj)}(hhh]h)}(h#set if we enable delay p1p2p3 quirkh]h#set if we enable delay p1p2p3 quirk}(hjw;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs;hMZhjt;ubah}(h]h ]h"]h$]h&]uh1jhjX;ubeh}(h]h ]h"]h$]h&]uh1jhjs;hMZhj#ubj)}(hJ``del_phy_power_chg_quirk`` set if we enable delay phy power change quirk h](j)}(h``del_phy_power_chg_quirk``h]j)}(hj;h]hdel_phy_power_chg_quirk}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM[hj;ubj)}(hhh]h)}(h-set if we enable delay phy power change quirkh]h-set if we enable delay phy power change quirk}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM[hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM[hj#ubj)}(h9``lfps_filter_quirk`` set if we enable LFPS filter quirk h](j)}(h``lfps_filter_quirk``h]j)}(hj;h]hlfps_filter_quirk}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM\hj;ubj)}(hhh]h)}(h"set if we enable LFPS filter quirkh]h"set if we enable LFPS filter quirk}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM\hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM\hj#ubj)}(hJ``rx_detect_poll_quirk`` set if we enable rx_detect to polling lfps quirk h](j)}(h``rx_detect_poll_quirk``h]j)}(hj <h]hrx_detect_poll_quirk}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM]hj<ubj)}(hhh]h)}(h0set if we enable rx_detect to polling lfps quirkh]h0set if we enable rx_detect to polling lfps quirk}(hj"<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM]hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM]hj#ubj)}(h;``dis_u3_susphy_quirk`` set if we disable usb3 suspend phy h](j)}(h``dis_u3_susphy_quirk``h]j)}(hjB<h]hdis_u3_susphy_quirk}(hjD<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM^hj<<ubj)}(hhh]h)}(h"set if we disable usb3 suspend phyh]h"set if we disable usb3 suspend phy}(hj[<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW<hM^hjX<ubah}(h]h ]h"]h$]h&]uh1jhj<<ubeh}(h]h ]h"]h$]h&]uh1jhjW<hM^hj#ubj)}(h;``dis_u2_susphy_quirk`` set if we disable usb2 suspend phy h](j)}(h``dis_u2_susphy_quirk``h]j)}(hj{<h]hdis_u2_susphy_quirk}(hj}<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM_hju<ubj)}(hhh]h)}(h"set if we disable usb2 suspend phyh]h"set if we disable usb2 suspend phy}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM_hj<ubah}(h]h ]h"]h$]h&]uh1jhju<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM_hj#ubj)}(hi``dis_enblslpm_quirk`` set if we clear enblslpm in GUSB2PHYCFG, disabling the suspend signal to the PHY. h](j)}(h``dis_enblslpm_quirk``h]j)}(hj<h]hdis_enblslpm_quirk}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMahj<ubj)}(hhh]h)}(hQset if we clear enblslpm in GUSB2PHYCFG, disabling the suspend signal to the PHY.h]hQset if we clear enblslpm in GUSB2PHYCFG, disabling the suspend signal to the PHY.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM`hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMahj#ubj)}(hP``dis_u1_entry_quirk`` set if link entering into U1 state needs to be disabled. h](j)}(h``dis_u1_entry_quirk``h]j)}(hj<h]hdis_u1_entry_quirk}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMbhj<ubj)}(hhh]h)}(h8set if link entering into U1 state needs to be disabled.h]h8set if link entering into U1 state needs to be disabled.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMbhj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hMbhj#ubj)}(hP``dis_u2_entry_quirk`` set if link entering into U2 state needs to be disabled. h](j)}(h``dis_u2_entry_quirk``h]j)}(hj'=h]hdis_u2_entry_quirk}(hj)=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%=ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMchj!=ubj)}(hhh]h)}(h8set if link entering into U2 state needs to be disabled.h]h8set if link entering into U2 state needs to be disabled.}(hj@=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<=hMchj==ubah}(h]h ]h"]h$]h&]uh1jhj!=ubeh}(h]h ]h"]h$]h&]uh1jhj<=hMchj#ubj)}(h;``dis_rxdet_inp3_quirk`` set if we disable Rx.Detect in P3 h](j)}(h``dis_rxdet_inp3_quirk``h]j)}(hj`=h]hdis_rxdet_inp3_quirk}(hjb=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^=ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMdhjZ=ubj)}(hhh]h)}(h!set if we disable Rx.Detect in P3h]h!set if we disable Rx.Detect in P3}(hjy=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju=hMdhjv=ubah}(h]h ]h"]h$]h&]uh1jhjZ=ubeh}(h]h ]h"]h$]h&]uh1jhju=hMdhj#ubj)}(h``dis_u2_freeclk_exists_quirk`` set if we clear u2_freeclk_exists in GUSB2PHYCFG, specify that USB2 PHY doesn't provide a free-running PHY clock. h](j)}(h``dis_u2_freeclk_exists_quirk``h]j)}(hj=h]hdis_u2_freeclk_exists_quirk}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMihj=ubj)}(hhh]h)}(hqset if we clear u2_freeclk_exists in GUSB2PHYCFG, specify that USB2 PHY doesn't provide a free-running PHY clock.h]hsset if we clear u2_freeclk_exists in GUSB2PHYCFG, specify that USB2 PHY doesn’t provide a free-running PHY clock.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMghj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMihj#ubj)}(hP``dis_del_phy_power_chg_quirk`` set if we disable delay phy power change quirk. h](j)}(h``dis_del_phy_power_chg_quirk``h]j)}(hj=h]hdis_del_phy_power_chg_quirk}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMkhj=ubj)}(hhh]h)}(h/set if we disable delay phy power change quirk.h]h/set if we disable delay phy power change quirk.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMjhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMkhj#ubj)}(h]``dis_tx_ipgap_linecheck_quirk`` set if we disable u2mac linestate check during HS transmit. h](j)}(h ``dis_tx_ipgap_linecheck_quirk``h]j)}(hj >h]hdis_tx_ipgap_linecheck_quirk}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj >ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMmhj>ubj)}(hhh]h)}(h;set if we disable u2mac linestate check during HS transmit.h]h;set if we disable u2mac linestate check during HS transmit.}(hj&>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMlhj#>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj">hMmhj#ubj)}(hp``resume_hs_terminations`` Set if we enable quirk for fixing improper crc generation after resume from suspend. h](j)}(h``resume_hs_terminations``h]j)}(hjG>h]hresume_hs_terminations}(hjI>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE>ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMohjA>ubj)}(hhh]h)}(hTSet if we enable quirk for fixing improper crc generation after resume from suspend.h]hTSet if we enable quirk for fixing improper crc generation after resume from suspend.}(hj`>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMnhj]>ubah}(h]h ]h"]h$]h&]uh1jhjA>ubeh}(h]h ]h"]h$]h&]uh1jhj\>hMohj#ubj)}(he``ulpi_ext_vbus_drv`` Set to confiure the upli chip to drives CPEN pin VBUS with an external supply. h](j)}(h``ulpi_ext_vbus_drv``h]j)}(hj>h]hulpi_ext_vbus_drv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMqhj{>ubj)}(hhh]h)}(hNSet to confiure the upli chip to drives CPEN pin VBUS with an external supply.h]hNSet to confiure the upli chip to drives CPEN pin VBUS with an external supply.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMphj>ubah}(h]h ]h"]h$]h&]uh1jhj{>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMqhj#ubj)}(h_``parkmode_disable_ss_quirk`` set if we need to disable all SuperSpeed instances in park mode. h](j)}(h``parkmode_disable_ss_quirk``h]j)}(hj>h]hparkmode_disable_ss_quirk}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMshj>ubj)}(hhh]h)}(h@set if we need to disable all SuperSpeed instances in park mode.h]h@set if we need to disable all SuperSpeed instances in park mode.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMrhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMshj#ubj)}(h^``parkmode_disable_hs_quirk`` set if we need to disable all HishSpeed instances in park mode. h](j)}(h``parkmode_disable_hs_quirk``h]j)}(hj>h]hparkmode_disable_hs_quirk}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMuhj>ubj)}(hhh]h)}(h?set if we need to disable all HishSpeed instances in park mode.h]h?set if we need to disable all HishSpeed instances in park mode.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMthj ?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj ?hMuhj#ubj)}(h\``gfladj_refclk_lpm_sel`` set if we need to enable SOF/ITP counter running based on ref_clk h](j)}(h``gfladj_refclk_lpm_sel``h]j)}(hj/?h]hgfladj_refclk_lpm_sel}(hj1?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMwhj)?ubj)}(hhh]h)}(hAset if we need to enable SOF/ITP counter running based on ref_clkh]hAset if we need to enable SOF/ITP counter running based on ref_clk}(hjH?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMvhjE?ubah}(h]h ]h"]h$]h&]uh1jhj)?ubeh}(h]h ]h"]h$]h&]uh1jhjD?hMwhj#ubj)}(h?``tx_de_emphasis_quirk`` set if we enable Tx de-emphasis quirk h](j)}(h``tx_de_emphasis_quirk``h]j)}(hji?h]htx_de_emphasis_quirk}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMxhjc?ubj)}(hhh]h)}(h%set if we enable Tx de-emphasis quirkh]h%set if we enable Tx de-emphasis quirk}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~?hMxhj?ubah}(h]h ]h"]h$]h&]uh1jhjc?ubeh}(h]h ]h"]h$]h&]uh1jhj~?hMxhj#ubj)}(h``tx_de_emphasis`` Tx de-emphasis value 0 - -6dB de-emphasis 1 - -3.5dB de-emphasis 2 - No de-emphasis 3 - Reserved h](j)}(h``tx_de_emphasis``h]j)}(hj?h]htx_de_emphasis}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM}hj?ubj)}(hhh]h)}(hxTx de-emphasis value 0 - -6dB de-emphasis 1 - -3.5dB de-emphasis 2 - No de-emphasis 3 - Reservedh]hxTx de-emphasis value 0 - -6dB de-emphasis 1 - -3.5dB de-emphasis 2 - No de-emphasis 3 - Reserved}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMyhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM}hj#ubj)}(h@``dis_metastability_quirk`` set to disable metastability quirk. h](j)}(h``dis_metastability_quirk``h]j)}(hj?h]hdis_metastability_quirk}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhM~hj?ubj)}(hhh]h)}(h#set to disable metastability quirk.h]h#set to disable metastability quirk.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM~hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM~hj#ubj)}(h3``dis_split_quirk`` set to disable split boundary. h](j)}(h``dis_split_quirk``h]j)}(hj@h]hdis_split_quirk}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj@ubj)}(hhh]h)}(hset to disable split boundary.h]hset to disable split boundary.}(hj.@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*@hMhj+@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj*@hMhj#ubj)}(hH``async_callbacks`` if set, indicate that async callbacks will be used. h](j)}(h``async_callbacks``h]j)}(hjN@h]hasync_callbacks}(hjP@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL@ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMehjH@ubj)}(hhh]h)}(h3if set, indicate that async callbacks will be used.h]h3if set, indicate that async callbacks will be used.}(hjg@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc@hMehjd@ubah}(h]h ]h"]h$]h&]uh1jhjH@ubeh}(h]h ]h"]h$]h&]uh1jhjc@hMehj#ubj)}(h7``sys_wakeup`` set if the device may do system wakeup. h](j)}(h``sys_wakeup``h]j)}(hj@h]h sys_wakeup}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj@ubj)}(hhh]h)}(h'set if the device may do system wakeup.h]h'set if the device may do system wakeup.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj#ubj)}(hI``wakeup_configured`` set if the device is configured for remote wakeup. h](j)}(h``wakeup_configured``h]j)}(hj@h]hwakeup_configured}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj@ubj)}(hhh]h)}(h2set if the device is configured for remote wakeup.h]h2set if the device is configured for remote wakeup.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj#ubj)}(h7``suspended`` set to track suspend event due to U3/L2. h](j)}(h ``suspended``h]j)}(hj@h]h suspended}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj@ubj)}(hhh]h)}(h(set to track suspend event due to U3/L2.h]h(set to track suspend event due to U3/L2.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(h```susphy_state`` state of DWC3_GUSB2PHYCFG_SUSPHY + DWC3_GUSB3PIPECTL_SUSPHY before PM suspend. h](j)}(h``susphy_state``h]j)}(hj2Ah]h susphy_state}(hj4AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Aubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj,Aubj)}(hhh]h)}(hNstate of DWC3_GUSB2PHYCFG_SUSPHY + DWC3_GUSB3PIPECTL_SUSPHY before PM suspend.h]hNstate of DWC3_GUSB2PHYCFG_SUSPHY + DWC3_GUSB3PIPECTL_SUSPHY before PM suspend.}(hjKAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjHAubah}(h]h ]h"]h$]h&]uh1jhj,Aubeh}(h]h ]h"]h$]h&]uh1jhjGAhMhj#ubj)}(h]``imod_interval`` set the interrupt moderation interval in 250ns increments or 0 to disable. h](j)}(h``imod_interval``h]j)}(hjlAh]h imod_interval}(hjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjAubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjfAubj)}(hhh]h)}(hJset the interrupt moderation interval in 250ns increments or 0 to disable.h]hJset the interrupt moderation interval in 250ns increments or 0 to disable.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjAubah}(h]h ]h"]h$]h&]uh1jhjfAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(hJ``max_cfg_eps`` current max number of IN eps used across all USB configs. h](j)}(h``max_cfg_eps``h]j)}(hjAh]h max_cfg_eps}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjAubj)}(hhh]h)}(h9current max number of IN eps used across all USB configs.h]h9current max number of IN eps used across all USB configs.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(hS``last_fifo_depth`` last fifo depth used to determine next fifo ram start address. h](j)}(h``last_fifo_depth``h]j)}(hjAh]hlast_fifo_depth}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjAubj)}(hhh]h)}(h>last fifo depth used to determine next fifo ram start address.h]h>last fifo depth used to determine next fifo ram start address.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(h\``num_ep_resized`` carries the current number endpoints which have had its tx fifo resized. h](j)}(h``num_ep_resized``h]j)}(hjBh]hnum_ep_resized}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjBubj)}(hhh]h)}(hHcarries the current number endpoints which have had its tx fifo resized.h]hHcarries the current number endpoints which have had its tx fifo resized.}(hj2BhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj/Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj.BhMhj#ubj)}(hK``debug_root`` root debugfs directory for this device to put its files in. h](j)}(h``debug_root``h]j)}(hjSBh]h debug_root}(hjUBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQBubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjMBubj)}(hhh]h)}(h;root debugfs directory for this device to put its files in.h]h;root debugfs directory for this device to put its files in.}(hjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhBhMhjiBubah}(h]h ]h"]h$]h&]uh1jhjMBubeh}(h]h ]h"]h$]h&]uh1jhjhBhMhj#ubj)}(h``gsbuscfg0_reqinfo`` store GSBUSCFG0.DATRDREQINFO, DESRDREQINFO, DATWRREQINFO, and DESWRREQINFO value passed from glue driver.h](j)}(h``gsbuscfg0_reqinfo``h]j)}(hjBh]hgsbuscfg0_reqinfo}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjBubj)}(hhh]h)}(histore GSBUSCFG0.DATRDREQINFO, DESRDREQINFO, DATWRREQINFO, and DESWRREQINFO value passed from glue driver.h]histore GSBUSCFG0.DATRDREQINFO, DESRDREQINFO, DATWRREQINFO, and DESWRREQINFO value passed from glue driver.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_event_depevt (C struct)c.dwc3_event_depevthNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_event_depevth]j+)}(hstruct dwc3_event_depevth](j1)}(hj4h]hstruct}(hjBhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjBhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjBhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjBhhhjBhMubjT)}(hdwc3_event_depevth]jZ)}(hjBh]hdwc3_event_depevt}(hjChhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjCubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjBhhhjBhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjBhhhjBhMubah}(h]jBah ](j}j~eh"]h$]h&]jj)jhuh1j$hjBhMhjBhhubj)}(hhh]h)}(hDevice Endpoint Eventsh]hDevice Endpoint Events}(hj(ChhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj%Chhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjBhMubeh}(h]h ](jstructeh"]h$]h&]jjjj@Cjj@Cjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct dwc3_event_depevt { u32 one_bit:1; u32 endpoint_number:5; u32 endpoint_event:4; u32 reserved11_10:2; u32 status:4; #define DEPEVT_STATUS_TRANSFER_ACTIVE BIT(3); #define DEPEVT_STATUS_BUSERR BIT(0); #define DEPEVT_STATUS_SHORT BIT(1); #define DEPEVT_STATUS_IOC BIT(2); #define DEPEVT_STATUS_LST BIT(3) ; #define DEPEVT_STATUS_MISSED_ISOC BIT(3) ; #define DEPEVT_STREAMEVT_FOUND 1; #define DEPEVT_STREAMEVT_NOTFOUND 2; #define DEPEVT_STREAM_PRIME 0xfffe; #define DEPEVT_STREAM_NOSTREAM 0x0; #define DEPEVT_STATUS_CONTROL_DATA 1; #define DEPEVT_STATUS_CONTROL_STATUS 2; #define DEPEVT_STATUS_CONTROL_PHASE(n) ((n) & 3); #define DEPEVT_TRANSFER_NO_RESOURCE 1; #define DEPEVT_TRANSFER_BUS_EXPIRY 2; u32 parameters:16; #define DEPEVT_PARAMETER_CMD(n) (((n) & (0xf << 8)) >> 8); }; **Members** ``one_bit`` indicates this is an endpoint event (not used) ``endpoint_number`` number of the endpoint ``endpoint_event`` The event we have: 0x00 - Reserved 0x01 - XferComplete 0x02 - XferInProgress 0x03 - XferNotReady 0x04 - RxTxFifoEvt (IN->Underrun, OUT->Overrun) 0x05 - Reserved 0x06 - StreamEvt 0x07 - EPCmdCmplt ``reserved11_10`` Reserved, don't use. ``status`` Indicates the status of the event. Refer to databook for more information. ``parameters`` Parameters of the current event. Refer to databook for more information.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjLChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHCubh:}(hjHChhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDCubj)}(hXpstruct dwc3_event_depevt { u32 one_bit:1; u32 endpoint_number:5; u32 endpoint_event:4; u32 reserved11_10:2; u32 status:4; #define DEPEVT_STATUS_TRANSFER_ACTIVE BIT(3); #define DEPEVT_STATUS_BUSERR BIT(0); #define DEPEVT_STATUS_SHORT BIT(1); #define DEPEVT_STATUS_IOC BIT(2); #define DEPEVT_STATUS_LST BIT(3) ; #define DEPEVT_STATUS_MISSED_ISOC BIT(3) ; #define DEPEVT_STREAMEVT_FOUND 1; #define DEPEVT_STREAMEVT_NOTFOUND 2; #define DEPEVT_STREAM_PRIME 0xfffe; #define DEPEVT_STREAM_NOSTREAM 0x0; #define DEPEVT_STATUS_CONTROL_DATA 1; #define DEPEVT_STATUS_CONTROL_STATUS 2; #define DEPEVT_STATUS_CONTROL_PHASE(n) ((n) & 3); #define DEPEVT_TRANSFER_NO_RESOURCE 1; #define DEPEVT_TRANSFER_BUS_EXPIRY 2; u32 parameters:16; #define DEPEVT_PARAMETER_CMD(n) (((n) & (0xf << 8)) >> 8); };h]hXpstruct dwc3_event_depevt { u32 one_bit:1; u32 endpoint_number:5; u32 endpoint_event:4; u32 reserved11_10:2; u32 status:4; #define DEPEVT_STATUS_TRANSFER_ACTIVE BIT(3); #define DEPEVT_STATUS_BUSERR BIT(0); #define DEPEVT_STATUS_SHORT BIT(1); #define DEPEVT_STATUS_IOC BIT(2); #define DEPEVT_STATUS_LST BIT(3) ; #define DEPEVT_STATUS_MISSED_ISOC BIT(3) ; #define DEPEVT_STREAMEVT_FOUND 1; #define DEPEVT_STREAMEVT_NOTFOUND 2; #define DEPEVT_STREAM_PRIME 0xfffe; #define DEPEVT_STREAM_NOSTREAM 0x0; #define DEPEVT_STATUS_CONTROL_DATA 1; #define DEPEVT_STATUS_CONTROL_STATUS 2; #define DEPEVT_STATUS_CONTROL_PHASE(n) ((n) & 3); #define DEPEVT_TRANSFER_NO_RESOURCE 1; #define DEPEVT_TRANSFER_BUS_EXPIRY 2; u32 parameters:16; #define DEPEVT_PARAMETER_CMD(n) (((n) & (0xf << 8)) >> 8); };}hjeCsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDCubh)}(h **Members**h]j)}(hjvCh]hMembers}(hjxChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtCubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDCubj)}(hhh](j)}(h;``one_bit`` indicates this is an endpoint event (not used) h](j)}(h ``one_bit``h]j)}(hjCh]hone_bit}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjCubj)}(hhh]h)}(h.indicates this is an endpoint event (not used)h]h.indicates this is an endpoint event (not used)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubj)}(h+``endpoint_number`` number of the endpoint h](j)}(h``endpoint_number``h]j)}(hjCh]hendpoint_number}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjCubj)}(hhh]h)}(hnumber of the endpointh]hnumber of the endpoint}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubj)}(h``endpoint_event`` The event we have: 0x00 - Reserved 0x01 - XferComplete 0x02 - XferInProgress 0x03 - XferNotReady 0x04 - RxTxFifoEvt (IN->Underrun, OUT->Overrun) 0x05 - Reserved 0x06 - StreamEvt 0x07 - EPCmdCmplt h](j)}(h``endpoint_event``h]j)}(hjDh]hendpoint_event}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDubj)}(hhh]h)}(hThe event we have: 0x00 - Reserved 0x01 - XferComplete 0x02 - XferInProgress 0x03 - XferNotReady 0x04 - RxTxFifoEvt (IN->Underrun, OUT->Overrun) 0x05 - Reserved 0x06 - StreamEvt 0x07 - EPCmdCmplth]hThe event we have: 0x00 - Reserved 0x01 - XferComplete 0x02 - XferInProgress 0x03 - XferNotReady 0x04 - RxTxFifoEvt (IN->Underrun, OUT->Overrun) 0x05 - Reserved 0x06 - StreamEvt 0x07 - EPCmdCmplt}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(h'``reserved11_10`` Reserved, don't use. h](j)}(h``reserved11_10``h]j)}(hjADh]h reserved11_10}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Dubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj;Dubj)}(hhh]h)}(hReserved, don't use.h]hReserved, don’t use.}(hjZDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVDhMhjWDubah}(h]h ]h"]h$]h&]uh1jhj;Dubeh}(h]h ]h"]h$]h&]uh1jhjVDhMhjCubj)}(hV``status`` Indicates the status of the event. Refer to databook for more information. h](j)}(h ``status``h]j)}(hjzDh]hstatus}(hj|DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxDubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjtDubj)}(hhh]h)}(hJIndicates the status of the event. Refer to databook for more information.h]hJIndicates the status of the event. Refer to databook for more information.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDubah}(h]h ]h"]h$]h&]uh1jhjtDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubj)}(hW``parameters`` Parameters of the current event. Refer to databook for more information.h](j)}(h``parameters``h]j)}(hjDh]h parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDubj)}(hhh]h)}(hHParameters of the current event. Refer to databook for more information.h]hHParameters of the current event. Refer to databook for more information.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjCubeh}(h]h ]h"]h$]h&]uh1jhjDCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_event_devt (C struct)c.dwc3_event_devthNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_event_devth]j+)}(hstruct dwc3_event_devth](j1)}(hj4h]hstruct}(hj EhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj Ehhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjEhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj EhhhjEhMubjT)}(hdwc3_event_devth]jZ)}(hjEh]hdwc3_event_devt}(hj-EhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj)Eubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj EhhhjEhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjEhhhjEhMubah}(h]jEah ](j}j~eh"]h$]h&]jj)jhuh1j$hjEhMhjEhhubj)}(hhh]h)}(h Device Eventsh]h Device Events}(hjOEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjLEhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhMubeh}(h]h ](jstructeh"]h$]h&]jjjjgEjjgEjjjuh1jhhhjhNhNubj)}(hXA**Definition**:: struct dwc3_event_devt { u32 one_bit:1; u32 device_event:7; u32 type:4; u32 reserved15_12:4; u32 event_info:9; u32 reserved31_25:7; }; **Members** ``one_bit`` indicates this is a non-endpoint event (not used) ``device_event`` indicates it's a device event. Should read as 0x00 ``type`` indicates the type of device event. 0 - DisconnEvt 1 - USBRst 2 - ConnectDone 3 - ULStChng 4 - WkUpEvt 5 - Reserved 6 - Suspend (EOPF on revisions 2.10a and prior) 7 - SOF 8 - Reserved 9 - ErrticErr 10 - CmdCmplt 11 - EvntOverflow 12 - VndrDevTstRcved ``reserved15_12`` Reserved, not used ``event_info`` Information about this event ``reserved31_25`` Reserved, not usedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjsEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoEubh:}(hjoEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjkEubj)}(hstruct dwc3_event_devt { u32 one_bit:1; u32 device_event:7; u32 type:4; u32 reserved15_12:4; u32 event_info:9; u32 reserved31_25:7; };h]hstruct dwc3_event_devt { u32 one_bit:1; u32 device_event:7; u32 type:4; u32 reserved15_12:4; u32 event_info:9; u32 reserved31_25:7; };}hjEsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjkEubh)}(h **Members**h]j)}(hjEh]hMembers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjkEubj)}(hhh](j)}(h>``one_bit`` indicates this is a non-endpoint event (not used) h](j)}(h ``one_bit``h]j)}(hjEh]hone_bit}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjEubj)}(hhh]h)}(h1indicates this is a non-endpoint event (not used)h]h1indicates this is a non-endpoint event (not used)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(hD``device_event`` indicates it's a device event. Should read as 0x00 h](j)}(h``device_event``h]j)}(hjEh]h device_event}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjEubj)}(hhh]h)}(h2indicates it's a device event. Should read as 0x00h]h4indicates it’s a device event. Should read as 0x00}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj FhMhj Fubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj FhMhjEubj)}(hXP``type`` indicates the type of device event. 0 - DisconnEvt 1 - USBRst 2 - ConnectDone 3 - ULStChng 4 - WkUpEvt 5 - Reserved 6 - Suspend (EOPF on revisions 2.10a and prior) 7 - SOF 8 - Reserved 9 - ErrticErr 10 - CmdCmplt 11 - EvntOverflow 12 - VndrDevTstRcved h](j)}(h``type``h]j)}(hj.Fh]htype}(hj0FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Fubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj(Fubj)}(hhh]h)}(hXFindicates the type of device event. 0 - DisconnEvt 1 - USBRst 2 - ConnectDone 3 - ULStChng 4 - WkUpEvt 5 - Reserved 6 - Suspend (EOPF on revisions 2.10a and prior) 7 - SOF 8 - Reserved 9 - ErrticErr 10 - CmdCmplt 11 - EvntOverflow 12 - VndrDevTstRcvedh]hXFindicates the type of device event. 0 - DisconnEvt 1 - USBRst 2 - ConnectDone 3 - ULStChng 4 - WkUpEvt 5 - Reserved 6 - Suspend (EOPF on revisions 2.10a and prior) 7 - SOF 8 - Reserved 9 - ErrticErr 10 - CmdCmplt 11 - EvntOverflow 12 - VndrDevTstRcved}(hjGFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjDFubah}(h]h ]h"]h$]h&]uh1jhj(Fubeh}(h]h ]h"]h$]h&]uh1jhjCFhMhjEubj)}(h%``reserved15_12`` Reserved, not used h](j)}(h``reserved15_12``h]j)}(hjhFh]h reserved15_12}(hjjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjbFubj)}(hhh]h)}(hReserved, not usedh]hReserved, not used}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}FhMhj~Fubah}(h]h ]h"]h$]h&]uh1jhjbFubeh}(h]h ]h"]h$]h&]uh1jhj}FhMhjEubj)}(h,``event_info`` Information about this event h](j)}(h``event_info``h]j)}(hjFh]h event_info}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjFubj)}(hhh]h)}(hInformation about this eventh]hInformation about this event}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(h$``reserved31_25`` Reserved, not usedh](j)}(h``reserved31_25``h]j)}(hjFh]h reserved31_25}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjFubj)}(hhh]h)}(hReserved, not usedh]hReserved, not used}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjkEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_event_gevt (C struct)c.dwc3_event_gevthNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_event_gevth]j+)}(hstruct dwc3_event_gevth](j1)}(hj4h]hstruct}(hj4GhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj0Ghhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjBGhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj0GhhhjAGhMubjT)}(hdwc3_event_gevth]jZ)}(hj.Gh]hdwc3_event_gevt}(hjTGhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjPGubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj0GhhhjAGhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj,GhhhjAGhMubah}(h]j'Gah ](j}j~eh"]h$]h&]jj)jhuh1j$hjAGhMhj)Ghhubj)}(hhh]h)}(hOther Core Eventsh]hOther Core Events}(hjvGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjsGhhubah}(h]h ]h"]h$]h&]uh1jhj)GhhhjAGhMubeh}(h]h ](jstructeh"]h$]h&]jjjjGjjGjjjuh1jhhhjhNhNubj)}(hX~**Definition**:: struct dwc3_event_gevt { u32 one_bit:1; u32 device_event:7; u32 phy_port_number:4; u32 reserved31_12:20; }; **Members** ``one_bit`` indicates this is a non-endpoint event (not used) ``device_event`` indicates it's (0x03) Carkit or (0x04) I2C event. ``phy_port_number`` self-explanatory ``reserved31_12`` Reserved, not used.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh:}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGubj)}(h{struct dwc3_event_gevt { u32 one_bit:1; u32 device_event:7; u32 phy_port_number:4; u32 reserved31_12:20; };h]h{struct dwc3_event_gevt { u32 one_bit:1; u32 device_event:7; u32 phy_port_number:4; u32 reserved31_12:20; };}hjGsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGubh)}(h **Members**h]j)}(hjGh]hMembers}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGubj)}(hhh](j)}(h>``one_bit`` indicates this is a non-endpoint event (not used) h](j)}(h ``one_bit``h]j)}(hjGh]hone_bit}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGubj)}(hhh]h)}(h1indicates this is a non-endpoint event (not used)h]h1indicates this is a non-endpoint event (not used)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjGubj)}(hC``device_event`` indicates it's (0x03) Carkit or (0x04) I2C event. h](j)}(h``device_event``h]j)}(hjHh]h device_event}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjHubj)}(hhh]h)}(h1indicates it's (0x03) Carkit or (0x04) I2C event.h]h3indicates it’s (0x03) Carkit or (0x04) I2C event.}(hj5HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1HhMhj2Hubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhj1HhMhjGubj)}(h%``phy_port_number`` self-explanatory h](j)}(h``phy_port_number``h]j)}(hjUHh]hphy_port_number}(hjWHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjOHubj)}(hhh]h)}(hself-explanatoryh]hself-explanatory}(hjnHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjHhMhjkHubah}(h]h ]h"]h$]h&]uh1jhjOHubeh}(h]h ]h"]h$]h&]uh1jhjjHhMhjGubj)}(h%``reserved31_12`` Reserved, not used.h](j)}(h``reserved31_12``h]j)}(hjHh]h reserved31_12}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjHubj)}(hhh]h)}(hReserved, not used.h]hReserved, not used.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubeh}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_event (C union) c.dwc3_eventhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h dwc3_eventh]j+)}(hunion dwc3_eventh](j1)}(hunionh]hunion}(hjHhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjHhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjHhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjHhhhjHhMubjT)}(h dwc3_eventh]jZ)}(hjHh]h dwc3_event}(hj IhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjIubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjHhhhjHhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjHhhhjHhMubah}(h]jHah ](j}j~eh"]h$]h&]jj)jhuh1j$hjHhMhjHhhubj)}(hhh]h)}(h'representation of Event Buffer contentsh]h'representation of Event Buffer contents}(hj+IhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj(Ihhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhMubeh}(h]h ](junioneh"]h$]h&]jjjjCIjjCIjjjuh1jhhhjhNhNubj)}(hX**Definition**:: union dwc3_event { u32 raw; struct dwc3_event_type type; struct dwc3_event_depevt depevt; struct dwc3_event_devt devt; struct dwc3_event_gevt gevt; }; **Members** ``raw`` raw 32-bit event ``type`` the type of the event ``depevt`` Device Endpoint Event ``devt`` Device Event ``gevt`` Global Eventh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjOIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKIubh:}(hjKIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGIubj)}(hunion dwc3_event { u32 raw; struct dwc3_event_type type; struct dwc3_event_depevt depevt; struct dwc3_event_devt devt; struct dwc3_event_gevt gevt; };h]hunion dwc3_event { u32 raw; struct dwc3_event_type type; struct dwc3_event_depevt depevt; struct dwc3_event_devt devt; struct dwc3_event_gevt gevt; };}hjhIsbah}(h]h ]h"]h$]h&]jjuh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGIubh)}(h **Members**h]j)}(hjyIh]hMembers}(hj{IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwIubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjGIubj)}(hhh](j)}(h``raw`` raw 32-bit event h](j)}(h``raw``h]j)}(hjIh]hraw}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjIubj)}(hhh]h)}(hraw 32-bit eventh]hraw 32-bit event}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(h``type`` the type of the event h](j)}(h``type``h]j)}(hjIh]htype}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjIubj)}(hhh]h)}(hthe type of the eventh]hthe type of the event}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjIubj)}(h!``depevt`` Device Endpoint Event h](j)}(h ``depevt``h]j)}(hj Jh]hdepevt}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjJubj)}(hhh]h)}(hDevice Endpoint Eventh]hDevice Endpoint Event}(hj#JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhj Jubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(h``devt`` Device Event h](j)}(h``devt``h]j)}(hjCJh]hdevt}(hjEJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAJubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhj=Jubj)}(hhh]h)}(h Device Eventh]h Device Event}(hj\JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXJhMhjYJubah}(h]h ]h"]h$]h&]uh1jhj=Jubeh}(h]h ]h"]h$]h&]uh1jhjXJhMhjIubj)}(h``gevt`` Global Eventh](j)}(h``gevt``h]j)}(hj|Jh]hgevt}(hj~JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzJubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjvJubj)}(hhh]h)}(h Global Eventh]h Global Event}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhjvJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubeh}(h]h ]h"]h$]h&]uh1jhjGIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$dwc3_gadget_ep_cmd_params (C struct)c.dwc3_gadget_ep_cmd_paramshNtauh1jhjhhhNhNubj )}(hhh](j%)}(hdwc3_gadget_ep_cmd_paramsh]j+)}(h struct dwc3_gadget_ep_cmd_paramsh](j1)}(hj4h]hstruct}(hjJhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjJhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMubjC)}(h h]h }(hjJhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjJhhhjJhMubjT)}(hdwc3_gadget_ep_cmd_paramsh]jZ)}(hjJh]hdwc3_gadget_ep_cmd_params}(hjJhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjJubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjJhhhjJhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjJhhhjJhMubah}(h]jJah ](j}j~eh"]h$]h&]jj)jhuh1j$hjJhMhjJhhubj)}(hhh]h)}(h-representation of endpoint command parametersh]h-representation of endpoint command parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:687: ./drivers/usb/dwc3/core.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jhjJhhhjJhMubeh}(h]h ](jstructeh"]h$]h&]jjjj0Kjj0Kjjjuh1jhhhjhNhNubj)}(h**Definition**:: struct dwc3_gadget_ep_cmd_params { u32 param2; u32 param1; u32 param0; }; **Members** ``param2`` third parameter ``param1`` second parameter ``param0`` first parameterh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj``unsigned int reason`` cancelled reason for the dwc3 request h](j)}(h``unsigned int reason``h]j)}(hjSh]hunsigned int reason}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:691: ./drivers/usb/dwc3/gadget.hhK]hjSubj)}(hhh]h)}(h%cancelled reason for the dwc3 requesth]h%cancelled reason for the dwc3 request}(hj3ShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ShK]hj0Subah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhj/ShK]hjRubeh}(h]h ]h"]h$]h&]uh1jhjRubh)}(h**Description**h]j)}(hjUSh]h Description}(hjWShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSSubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:691: ./drivers/usb/dwc3/gadget.hhK_hjRubh)}(h{Caller should take care of locking. This function will move **req** from its current list to the endpoint's cancelled_list.h](hvoid dwc3_gadget_dctl_write_safe (struct dwc3 *dwc, u32 value)h]j+)}(h=void dwc3_gadget_dctl_write_safe(struct dwc3 *dwc, u32 value)h](jO)}(hvoidh]hvoid}(hj-UhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj)Uhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:691: ./drivers/usb/dwc3/gadget.hhKubjC)}(h h]h }(hjWhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj+Whhhj=WhK)ubjT)}(hdwc3_gadget_set_test_modeh]jZ)}(hdwc3_gadget_set_test_modeh]hdwc3_gadget_set_test_mode}(hjPWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjLWubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj+Whhhj=WhK)ubjL)}(h(struct dwc3 *dwc, int mode)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjlWhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjhWubjC)}(h h]h }(hjyWhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhWubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjWubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjWmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjRWsbc.dwc3_gadget_set_test_modeasbuh1hhjhWubjC)}(h h]h }(hjWhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhWubjL)}(hjLh]h*}(hjWhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjhWubjZ)}(hdwch]hdwc}(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjhWubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjdWubjL)}(hint modeh](jO)}(hinth]hint}(hjWhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjWubjC)}(h h]h }(hjWhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjWubjZ)}(hmodeh]hmode}(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjdWubeh}(h]h ]h"]h$]h&]jjuh1jLhj+Whhhj=WhK)ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj'Whhhj=WhK)ubah}(h]j"Wah ](j}j~eh"]h$]h&]jj)jhuh1j$hj=WhK)hj$Whhubj)}(hhh]h)}(henables usb2 test modesh]henables usb2 test modes}(hj$XhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chK"hj!Xhhubah}(h]h ]h"]h$]h&]uh1jhj$Whhhj=WhK)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj= 0) or -ETIMEDOUT.h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKFhjYubj)}(hhh]j)}(h6``struct dwc3 *dwc`` pointer to our context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjZh]hstruct dwc3 *dwc}(hj!ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKChjZubj)}(hhh]h)}(h pointer to our context structureh]h pointer to our context structure}(hj8ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ZhKChj5Zubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj4ZhKChjZubah}(h]h ]h"]h$]h&]uh1jhjYubh)}(h**Description**h]j)}(hjZZh]h Description}(hj\ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXZubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKEhjYubh)}(hmCaller should take care of locking. This function will return the link state on success (>= 0) or -ETIMEDOUT.h]hmCaller should take care of locking. This function will return the link state on success (>= 0) or -ETIMEDOUT.}(hjpZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKEhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'dwc3_gadget_set_link_state (C function)c.dwc3_gadget_set_link_statehNtauh1jhjhhhNhNubj )}(hhh](j%)}(hMint dwc3_gadget_set_link_state (struct dwc3 *dwc, enum dwc3_link_state state)h]j+)}(hLint dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)h](jO)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjZhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKYubjC)}(h h]h }(hjZhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjZhhhjZhKYubjT)}(hdwc3_gadget_set_link_stateh]jZ)}(hdwc3_gadget_set_link_stateh]hdwc3_gadget_set_link_state}(hjZhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjZubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjZhhhjZhKYubjL)}(h.(struct dwc3 *dwc, enum dwc3_link_state state)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjZhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjZubjC)}(h h]h }(hjZhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjZubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjZhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjZubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjZmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjZsbc.dwc3_gadget_set_link_stateasbuh1hhjZubjC)}(h h]h }(hj[hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjZubjL)}(hjLh]h*}(hj([hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjZubjZ)}(hdwch]hdwc}(hj5[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjZubjL)}(henum dwc3_link_state stateh](j1)}(henumh]henum}(hjN[hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjJ[ubjC)}(h h]h }(hj\[hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjJ[ubh)}(hhh]jZ)}(hdwc3_link_stateh]hdwc3_link_state}(hjm[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjj[ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjo[modnameN classnameNjnLjqL)}jtL]j[c.dwc3_gadget_set_link_stateasbuh1hhjJ[ubjC)}(h h]h }(hj[hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjJ[ubjZ)}(hstateh]hstate}(hj[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjJ[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjZubeh}(h]h ]h"]h$]h&]jjuh1jLhjZhhhjZhKYubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjZhhhjZhKYubah}(h]jZah ](j}j~eh"]h$]h&]jj)jhuh1j$hjZhKYhjZhhubj)}(hhh]h)}(h#sets usb link to a particular stateh]h#sets usb link to a particular state}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKRhj[hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjZhKYubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[jj[jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` pointer to our context structure ``enum dwc3_link_state state`` the state to put link into **Description** Caller should take care of locking. This function will return 0 on success or -ETIMEDOUT.h](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKVhj[ubj)}(hhh](j)}(h6``struct dwc3 *dwc`` pointer to our context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hj\h]hstruct dwc3 *dwc}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKShj[ubj)}(hhh]h)}(h pointer to our context structureh]h pointer to our context structure}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKShj\ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj\hKShj[ubj)}(h:``enum dwc3_link_state state`` the state to put link into h](j)}(h``enum dwc3_link_state state``h]j)}(hj=\h]henum dwc3_link_state state}(hj?\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;\ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKThj7\ubj)}(hhh]h)}(hthe state to put link intoh]hthe state to put link into}(hjV\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR\hKThjS\ubah}(h]h ]h"]h$]h&]uh1jhj7\ubeh}(h]h ]h"]h$]h&]uh1jhjR\hKThj[ubeh}(h]h ]h"]h$]h&]uh1jhj[ubh)}(h**Description**h]j)}(hjx\h]h Description}(hjz\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv\ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKVhj[ubh)}(hYCaller should take care of locking. This function will return 0 on success or -ETIMEDOUT.h]hYCaller should take care of locking. This function will return 0 on success or -ETIMEDOUT.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKVhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_ep_inc_trb (C function)c.dwc3_ep_inc_trbhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h void dwc3_ep_inc_trb (u8 *index)h]j+)}(hvoid dwc3_ep_inc_trb(u8 *index)h](jO)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj\hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKubjC)}(h h]h }(hj\hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj\hhhj\hKubjT)}(hdwc3_ep_inc_trbh]jZ)}(hdwc3_ep_inc_trbh]hdwc3_ep_inc_trb}(hj\hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj\ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj\hhhj\hKubjL)}(h (u8 *index)h]jL)}(h u8 *indexh](h)}(hhh]jZ)}(hu8h]hu8}(hj\hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj\modnameN classnameNjnLjqL)}jtL]jwL)}jjLj\sbc.dwc3_ep_inc_trbasbuh1hhj\ubjC)}(h h]h }(hj]hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj\ubjL)}(hjLh]h*}(hj+]hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj\ubjZ)}(hindexh]hindex}(hj8]hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj\ubah}(h]h ]h"]h$]h&]jjuh1jLhj\hhhj\hKubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj\hhhj\hKubah}(h]j\ah ](j}j~eh"]h$]h&]jj)jhuh1j$hj\hKhj\hhubj)}(hhh]h)}(hincrement a trb index.h]hincrement a trb index.}(hjb]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj_]hhubah}(h]h ]h"]h$]h&]uh1jhj\hhhj\hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjz]jjz]jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``u8 *index`` Pointer to the TRB index to increment. **Description** The index should never point to the link TRB. After incrementing, if it is point to the link TRB, wrap around to the beginning. The link TRB is always at the last TRB entry.h](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj~]ubj)}(hhh]j)}(h5``u8 *index`` Pointer to the TRB index to increment. h](j)}(h ``u8 *index``h]j)}(hj]h]h u8 *index}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj]ubj)}(hhh]h)}(h&Pointer to the TRB index to increment.h]h&Pointer to the TRB index to increment.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKhj]ubah}(h]h ]h"]h$]h&]uh1jhj~]ubh)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj~]ubh)}(hThe index should never point to the link TRB. After incrementing, if it is point to the link TRB, wrap around to the beginning. The link TRB is always at the last TRB entry.h]hThe index should never point to the link TRB. After incrementing, if it is point to the link TRB, wrap around to the beginning. The link TRB is always at the last TRB entry.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj~]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_ep_inc_enq (C function)c.dwc3_ep_inc_enqhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h*void dwc3_ep_inc_enq (struct dwc3_ep *dep)h]j+)}(h)void dwc3_ep_inc_enq(struct dwc3_ep *dep)h](jO)}(hvoidh]hvoid}(hj#^hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj^hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKubjC)}(h h]h }(hj2^hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj^hhhj1^hKubjT)}(hdwc3_ep_inc_enqh]jZ)}(hdwc3_ep_inc_enqh]hdwc3_ep_inc_enq}(hjD^hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj@^ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj^hhhj1^hKubjL)}(h(struct dwc3_ep *dep)h]jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hj`^hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj\^ubjC)}(h h]h }(hjm^hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj\^ubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hj~^hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{^ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj^modnameN classnameNjnLjqL)}jtL]jwL)}jjLjF^sbc.dwc3_ep_inc_enqasbuh1hhj\^ubjC)}(h h]h }(hj^hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj\^ubjL)}(hjLh]h*}(hj^hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj\^ubjZ)}(hdeph]hdep}(hj^hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj\^ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjX^ubah}(h]h ]h"]h$]h&]jjuh1jLhj^hhhj1^hKubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj^hhhj1^hKubah}(h]j^ah ](j}j~eh"]h$]h&]jj)jhuh1j$hj1^hKhj^hhubj)}(hhh]h)}(h$increment endpoint's enqueue pointerh]h&increment endpoint’s enqueue pointer}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj^hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj1^hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(h_**Parameters** ``struct dwc3_ep *dep`` The endpoint whose enqueue pointer we're incrementingh](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj^ubj)}(hhh]j)}(hM``struct dwc3_ep *dep`` The endpoint whose enqueue pointer we're incrementingh](j)}(h``struct dwc3_ep *dep``h]j)}(hj$_h]hstruct dwc3_ep *dep}(hj&_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"_ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj_ubj)}(hhh]h)}(h5The endpoint whose enqueue pointer we're incrementingh]h7The endpoint whose enqueue pointer we’re incrementing}(hj=_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj:_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj9_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_ep_inc_deq (C function)c.dwc3_ep_inc_deqhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h*void dwc3_ep_inc_deq (struct dwc3_ep *dep)h]j+)}(h)void dwc3_ep_inc_deq(struct dwc3_ep *dep)h](jO)}(hvoidh]hvoid}(hj~_hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjz_hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKubjC)}(h h]h }(hj_hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjz_hhhj_hKubjT)}(hdwc3_ep_inc_deqh]jZ)}(hdwc3_ep_inc_deqh]hdwc3_ep_inc_deq}(hj_hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj_ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjz_hhhj_hKubjL)}(h(struct dwc3_ep *dep)h]jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hj_hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj_ubjC)}(h h]h }(hj_hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj_ubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hj_hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj_modnameN classnameNjnLjqL)}jtL]jwL)}jjLj_sbc.dwc3_ep_inc_deqasbuh1hhj_ubjC)}(h h]h }(hj_hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj_ubjL)}(hjLh]h*}(hj`hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj_ubjZ)}(hdeph]hdep}(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj_ubah}(h]h ]h"]h$]h&]jjuh1jLhjz_hhhj_hKubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjv_hhhj_hKubah}(h]jq_ah ](j}j~eh"]h$]h&]jj)jhuh1j$hj_hKhjs_hhubj)}(hhh]h)}(h$increment endpoint's dequeue pointerh]h&increment endpoint’s dequeue pointer}(hj>`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj;`hhubah}(h]h ]h"]h$]h&]uh1jhjs_hhhj_hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjV`jjV`jjjuh1jhhhjhNhNubj)}(h_**Parameters** ``struct dwc3_ep *dep`` The endpoint whose enqueue pointer we're incrementingh](h)}(h**Parameters**h]j)}(hj``h]h Parameters}(hjb`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^`ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjZ`ubj)}(hhh]j)}(hM``struct dwc3_ep *dep`` The endpoint whose enqueue pointer we're incrementingh](j)}(h``struct dwc3_ep *dep``h]j)}(hj`h]hstruct dwc3_ep *dep}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}`ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjy`ubj)}(hhh]h)}(h5The endpoint whose enqueue pointer we're incrementingh]h7The endpoint whose enqueue pointer we’re incrementing}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj`ubah}(h]h ]h"]h$]h&]uh1jhjy`ubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjv`ubah}(h]h ]h"]h$]h&]uh1jhjZ`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!dwc3_gadget_giveback (C function)c.dwc3_gadget_givebackhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hUvoid dwc3_gadget_giveback (struct dwc3_ep *dep, struct dwc3_request *req, int status)h]j+)}(hTvoid dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, int status)h](jO)}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj`hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKubjC)}(h h]h }(hj`hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj`hhhj`hKubjT)}(hdwc3_gadget_givebackh]jZ)}(hdwc3_gadget_givebackh]hdwc3_gadget_giveback}(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj`ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj`hhhj`hKubjL)}(h;(struct dwc3_ep *dep, struct dwc3_request *req, int status)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjahhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjaubjC)}(h h]h }(hj#ahhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjaubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hj4ahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj1aubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj6amodnameN classnameNjnLjqL)}jtL]jwL)}jjLj`sbc.dwc3_gadget_givebackasbuh1hhjaubjC)}(h h]h }(hjTahhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjaubjL)}(hjLh]h*}(hjbahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjaubjZ)}(hdeph]hdep}(hjoahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjaubjL)}(hstruct dwc3_request *reqh](j1)}(hj4h]hstruct}(hjahhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjaubjC)}(h h]h }(hjahhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjaubh)}(hhh]jZ)}(h dwc3_requesth]h dwc3_request}(hjahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjaubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjamodnameN classnameNjnLjqL)}jtL]jPac.dwc3_gadget_givebackasbuh1hhjaubjC)}(h h]h }(hjahhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjaubjL)}(hjLh]h*}(hjahhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjaubjZ)}(hreqh]hreq}(hjahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjaubjL)}(h int statush](jO)}(hinth]hint}(hjahhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjaubjC)}(h h]h }(hjbhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjaubjZ)}(hstatush]hstatus}(hjbhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjaubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjaubeh}(h]h ]h"]h$]h&]jjuh1jLhj`hhhj`hKubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj`hhhj`hKubah}(h]j`ah ](j}j~eh"]h$]h&]jj)jhuh1j$hj`hKhj`hhubj)}(hhh]h)}(h-call struct usb_request's ->complete callbackh]h/call struct usb_request’s ->complete callback}(hj>bhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhj;bhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVbjjVbjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3_ep *dep`` The endpoint to whom the request belongs to ``struct dwc3_request *req`` The request we're giving back ``int status`` completion code for the request **Description** Must be called with controller's lock held and interrupts disabled. This function will unmap **req** and call its ->complete() callback to notify upper layers that it has completed.h](h)}(h**Parameters**h]j)}(hj`bh]h Parameters}(hjbbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^bubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjZbubj)}(hhh](j)}(hD``struct dwc3_ep *dep`` The endpoint to whom the request belongs to h](j)}(h``struct dwc3_ep *dep``h]j)}(hjbh]hstruct dwc3_ep *dep}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}bubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjybubj)}(hhh]h)}(h+The endpoint to whom the request belongs toh]h+The endpoint to whom the request belongs to}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjybubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjvbubj)}(h;``struct dwc3_request *req`` The request we're giving back h](j)}(h``struct dwc3_request *req``h]j)}(hjbh]hstruct dwc3_request *req}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjbubj)}(hhh]h)}(hThe request we're giving backh]hThe request we’re giving back}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjvbubj)}(h/``int status`` completion code for the request h](j)}(h``int status``h]j)}(hjbh]h int status}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjbubj)}(hhh]h)}(hcompletion code for the requesth]hcompletion code for the request}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjchKhjvbubeh}(h]h ]h"]h$]h&]uh1jhjZbubh)}(h**Description**h]j)}(hj,ch]h Description}(hj.chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*cubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjZbubh)}(hMust be called with controller's lock held and interrupts disabled. This function will unmap **req** and call its ->complete() callback to notify upper layers that it has completed.h](h_Must be called with controller’s lock held and interrupts disabled. This function will unmap }(hjBchhhNhNubj)}(h**req**h]hreq}(hjJchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBcubhQ and call its ->complete() callback to notify upper layers that it has completed.}(hjBchhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjZbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-dwc3_send_gadget_generic_command (C function)"c.dwc3_send_gadget_generic_commandhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hTint dwc3_send_gadget_generic_command (struct dwc3 *dwc, unsigned int cmd, u32 param)h]j+)}(hSint dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned int cmd, u32 param)h](jO)}(hinth]hint}(hjchhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjchhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKubjC)}(h h]h }(hjchhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjchhhjchKubjT)}(h dwc3_send_gadget_generic_commandh]jZ)}(h dwc3_send_gadget_generic_commandh]h dwc3_send_gadget_generic_command}(hjchhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjcubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjchhhjchKubjL)}(h/(struct dwc3 *dwc, unsigned int cmd, u32 param)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjchhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjcubjC)}(h h]h }(hjchhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjcubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjchhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjcubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjcmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjcsb"c.dwc3_send_gadget_generic_commandasbuh1hhjcubjC)}(h h]h }(hjchhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjcubjL)}(hjLh]h*}(hj dhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjcubjZ)}(hdwch]hdwc}(hjdhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjcubjL)}(hunsigned int cmdh](jO)}(hunsignedh]hunsigned}(hj2dhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj.dubjC)}(h h]h }(hj@dhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj.dubjO)}(hinth]hint}(hjNdhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj.dubjC)}(h h]h }(hj\dhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj.dubjZ)}(hcmdh]hcmd}(hjjdhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj.dubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjcubjL)}(h u32 paramh](h)}(hhh]jZ)}(hu32h]hu32}(hjdhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjdubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjdmodnameN classnameNjnLjqL)}jtL]jc"c.dwc3_send_gadget_generic_commandasbuh1hhjdubjC)}(h h]h }(hjdhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjdubjZ)}(hparamh]hparam}(hjdhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjcubeh}(h]h ]h"]h$]h&]jjuh1jLhjchhhjchKubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj{chhhjchKubah}(h]jvcah ](j}j~eh"]h$]h&]jj)jhuh1j$hjchKhjxchhubj)}(hhh]h)}(h*issue a generic command for the controllerh]h*issue a generic command for the controller}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjdhhubah}(h]h ]h"]h$]h&]uh1jhjxchhhjchKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3 *dwc`` pointer to the controller context ``unsigned int cmd`` the command to be issued ``u32 param`` command parameter **Description** Caller should take care of locking. Issue **cmd** with a given **param** to **dwc** and wait for its completion.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjdubj)}(hhh](j)}(h7``struct dwc3 *dwc`` pointer to the controller context h](j)}(h``struct dwc3 *dwc``h]j)}(hjeh]hstruct dwc3 *dwc}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjeubj)}(hhh]h)}(h!pointer to the controller contexth]h!pointer to the controller context}(hj6ehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ehKhj3eubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhj2ehKhjeubj)}(h.``unsigned int cmd`` the command to be issued h](j)}(h``unsigned int cmd``h]j)}(hjVeh]hunsigned int cmd}(hjXehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTeubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjPeubj)}(hhh]h)}(hthe command to be issuedh]hthe command to be issued}(hjoehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkehKhjleubah}(h]h ]h"]h$]h&]uh1jhjPeubeh}(h]h ]h"]h$]h&]uh1jhjkehKhjeubj)}(h ``u32 param`` command parameter h](j)}(h ``u32 param``h]j)}(hjeh]h u32 param}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjeubj)}(hhh]h)}(hcommand parameterh]hcommand parameter}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehKhjeubeh}(h]h ]h"]h$]h&]uh1jhjdubh)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjdubh)}(hpCaller should take care of locking. Issue **cmd** with a given **param** to **dwc** and wait for its completion.h](h*Caller should take care of locking. Issue }(hjehhhNhNubj)}(h**cmd**h]hcmd}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh with a given }(hjehhhNhNubj)}(h **param**h]hparam}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh to }(hjehhhNhNubj)}(h**dwc**h]hdwc}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh and wait for its completion.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chKhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$dwc3_send_gadget_ep_cmd (C function)c.dwc3_send_gadget_ep_cmdhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hmint dwc3_send_gadget_ep_cmd (struct dwc3_ep *dep, unsigned int cmd, struct dwc3_gadget_ep_cmd_params *params)h]j+)}(hlint dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, struct dwc3_gadget_ep_cmd_params *params)h](jO)}(hinth]hint}(hjEfhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjAfhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM3ubjC)}(h h]h }(hjTfhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjAfhhhjSfhM3ubjT)}(hdwc3_send_gadget_ep_cmdh]jZ)}(hdwc3_send_gadget_ep_cmdh]hdwc3_send_gadget_ep_cmd}(hjffhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjbfubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjAfhhhjSfhM3ubjL)}(hQ(struct dwc3_ep *dep, unsigned int cmd, struct dwc3_gadget_ep_cmd_params *params)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjfhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj~fubjC)}(h h]h }(hjfhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj~fubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjfhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjfubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjfmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjhfsbc.dwc3_send_gadget_ep_cmdasbuh1hhj~fubjC)}(h h]h }(hjfhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj~fubjL)}(hjLh]h*}(hjfhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj~fubjZ)}(hdeph]hdep}(hjfhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj~fubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjzfubjL)}(hunsigned int cmdh](jO)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjfubjC)}(h h]h }(hjghhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjfubjO)}(hinth]hint}(hjghhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjfubjC)}(h h]h }(hjghhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjfubjZ)}(hcmdh]hcmd}(hj,ghhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjzfubjL)}(h(struct dwc3_gadget_ep_cmd_params *paramsh](j1)}(hj4h]hstruct}(hjEghhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjAgubjC)}(h h]h }(hjRghhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjAgubh)}(hhh]jZ)}(hdwc3_gadget_ep_cmd_paramsh]hdwc3_gadget_ep_cmd_params}(hjcghhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj`gubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjegmodnameN classnameNjnLjqL)}jtL]jfc.dwc3_send_gadget_ep_cmdasbuh1hhjAgubjC)}(h h]h }(hjghhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjAgubjL)}(hjLh]h*}(hjghhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjAgubjZ)}(hparamsh]hparams}(hjghhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjAgubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjzfubeh}(h]h ]h"]h$]h&]jjuh1jLhjAfhhhjSfhM3ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj=fhhhjSfhM3ubah}(h]j8fah ](j}j~eh"]h$]h&]jj)jhuh1j$hjSfhM3hj:fhhubj)}(hhh]h)}(hissue an endpoint commandh]hissue an endpoint command}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhj:fhhhjSfhM3ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3_ep *dep`` the endpoint to which the command is going to be issued ``unsigned int cmd`` the command to be issued ``struct dwc3_gadget_ep_cmd_params *params`` parameters to the command **Description** Caller should handle locking. This function will issue **cmd** with given **params** to **dep** and wait for its completion. According to the programming guide, if the link state is in L1/L2/U3, then sending the Start Transfer command may not complete. The programming guide suggested to bring the link state back to ON/U0 by performing remote wakeup prior to sending the command. However, don't initiate remote wakeup when the user/function does not send wakeup request via wakeup ops. Send the command when it's allowed. For L2 or U3 link state, the gadget is in USB suspend. Care should be taken when sending Start Transfer command to ensure that it's done after USB resume. **Notes** For L1 link state, issuing a command requires the clearing of GUSB2PHYCFG.SUSPENDUSB2, which turns on the signal required to complete the given command (usually within 50us). This should happen within the command timeout set by driver. No additional step is needed.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjgubj)}(hhh](j)}(hP``struct dwc3_ep *dep`` the endpoint to which the command is going to be issued h](j)}(h``struct dwc3_ep *dep``h]j)}(hjhh]hstruct dwc3_ep *dep}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjhubj)}(hhh]h)}(h7the endpoint to which the command is going to be issuedh]h7the endpoint to which the command is going to be issued}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubj)}(h.``unsigned int cmd`` the command to be issued h](j)}(h``unsigned int cmd``h]j)}(hj@hh]hunsigned int cmd}(hjBhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>hubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj:hubj)}(hhh]h)}(hthe command to be issuedh]hthe command to be issued}(hjYhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhMhjVhubah}(h]h ]h"]h$]h&]uh1jhj:hubeh}(h]h ]h"]h$]h&]uh1jhjUhhMhjgubj)}(hG``struct dwc3_gadget_ep_cmd_params *params`` parameters to the command h](j)}(h,``struct dwc3_gadget_ep_cmd_params *params``h]j)}(hjyhh]h(struct dwc3_gadget_ep_cmd_params *params}(hj{hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwhubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjshubj)}(hhh]h)}(hparameters to the commandh]hparameters to the command}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjshubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjgubh)}(h|Caller should handle locking. This function will issue **cmd** with given **params** to **dep** and wait for its completion.h](h7Caller should handle locking. This function will issue }(hjhhhhNhNubj)}(h**cmd**h]hcmd}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh with given }(hjhhhhNhNubj)}(h **params**h]hparams}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh to }(hjhhhhNhNubj)}(h**dep**h]hdep}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh and wait for its completion.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjgubh)}(hXAccording to the programming guide, if the link state is in L1/L2/U3, then sending the Start Transfer command may not complete. The programming guide suggested to bring the link state back to ON/U0 by performing remote wakeup prior to sending the command. However, don't initiate remote wakeup when the user/function does not send wakeup request via wakeup ops. Send the command when it's allowed.h]hXAccording to the programming guide, if the link state is in L1/L2/U3, then sending the Start Transfer command may not complete. The programming guide suggested to bring the link state back to ON/U0 by performing remote wakeup prior to sending the command. However, don’t initiate remote wakeup when the user/function does not send wakeup request via wakeup ops. Send the command when it’s allowed.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM"hjgubh)}(hFor L2 or U3 link state, the gadget is in USB suspend. Care should be taken when sending Start Transfer command to ensure that it's done after USB resume.h]hFor L2 or U3 link state, the gadget is in USB suspend. Care should be taken when sending Start Transfer command to ensure that it’s done after USB resume.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM)hjgubh)}(h **Notes**h]j)}(hj/ih]hNotes}(hj1ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-iubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM-hjgubh)}(hX For L1 link state, issuing a command requires the clearing of GUSB2PHYCFG.SUSPENDUSB2, which turns on the signal required to complete the given command (usually within 50us). This should happen within the command timeout set by driver. No additional step is needed.h]hX For L1 link state, issuing a command requires the clearing of GUSB2PHYCFG.SUSPENDUSB2, which turns on the signal required to complete the given command (usually within 50us). This should happen within the command timeout set by driver. No additional step is needed.}(hjEihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM)hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dwc3_gadget_start_config (C function)c.dwc3_gadget_start_confighNtauh1jhjhhhNhNubj )}(hhh](j%)}(hLint dwc3_gadget_start_config (struct dwc3 *dwc, unsigned int resource_index)h]j+)}(hKint dwc3_gadget_start_config(struct dwc3 *dwc, unsigned int resource_index)h](jO)}(hinth]hint}(hjtihhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjpihhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM#ubjC)}(h h]h }(hjihhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjpihhhjihM#ubjT)}(hdwc3_gadget_start_configh]jZ)}(hdwc3_gadget_start_configh]hdwc3_gadget_start_config}(hjihhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjiubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjpihhhjihM#ubjL)}(h/(struct dwc3 *dwc, unsigned int resource_index)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjihhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjiubjC)}(h h]h }(hjihhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjiubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjihhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjiubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjimodnameN classnameNjnLjqL)}jtL]jwL)}jjLjisbc.dwc3_gadget_start_configasbuh1hhjiubjC)}(h h]h }(hjihhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjiubjL)}(hjLh]h*}(hjihhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjiubjZ)}(hdwch]hdwc}(hj jhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjiubjL)}(hunsigned int resource_indexh](jO)}(hunsignedh]hunsigned}(hj#jhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjjubjC)}(h h]h }(hj1jhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjjubjO)}(hinth]hint}(hj?jhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjjubjC)}(h h]h }(hjMjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjjubjZ)}(hresource_indexh]hresource_index}(hj[jhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjiubeh}(h]h ]h"]h$]h&]jjuh1jLhjpihhhjihM#ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjlihhhjihM#ubah}(h]jgiah ](j}j~eh"]h$]h&]jj)jhuh1j$hjihM#hjiihhubj)}(hhh]h)}(hreset endpoint resourcesh]hreset endpoint resources}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jhjiihhhjihM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3 *dwc`` pointer to the DWC3 context ``unsigned int resource_index`` DEPSTARTCFG.XferRscIdx value (must be 0 or 2) **Description** Set resource_index=0 to reset all endpoints' resources allocation. Do this as part of the power-on/soft-reset initialization. Set resource_index=2 to reset only non-control endpoints' resources. Do this on receiving the SET_CONFIGURATION request or hibernation resume.h](h)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjjubj)}(hhh](j)}(h1``struct dwc3 *dwc`` pointer to the DWC3 context h](j)}(h``struct dwc3 *dwc``h]j)}(hjjh]hstruct dwc3 *dwc}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjjubj)}(hhh]h)}(hpointer to the DWC3 contexth]hpointer to the DWC3 context}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(hN``unsigned int resource_index`` DEPSTARTCFG.XferRscIdx value (must be 0 or 2) h](j)}(h``unsigned int resource_index``h]j)}(hjjh]hunsigned int resource_index}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjjubj)}(hhh]h)}(h-DEPSTARTCFG.XferRscIdx value (must be 0 or 2)h]h-DEPSTARTCFG.XferRscIdx value (must be 0 or 2)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubh)}(h**Description**h]j)}(hj:kh]h Description}(hjint dwc3_gadget_calc_tx_fifo_size (struct dwc3 *dwc, int mult)h]j+)}(h=int dwc3_gadget_calc_tx_fifo_size(struct dwc3 *dwc, int mult)h](jO)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjkhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjkhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjkhhhjkhMubjT)}(hdwc3_gadget_calc_tx_fifo_sizeh]jZ)}(hdwc3_gadget_calc_tx_fifo_sizeh]hdwc3_gadget_calc_tx_fifo_size}(hjkhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjkubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjkhhhjkhMubjL)}(h(struct dwc3 *dwc, int mult)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjkhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjkubjC)}(h h]h }(hjkhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjkubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjkhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjkubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjkmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjksbc.dwc3_gadget_calc_tx_fifo_sizeasbuh1hhjkubjC)}(h h]h }(hj lhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjkubjL)}(hjLh]h*}(hjlhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjkubjZ)}(hdwch]hdwc}(hj$lhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjkubjL)}(hint multh](jO)}(hinth]hint}(hj=lhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj9lubjC)}(h h]h }(hjKlhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj9lubjZ)}(hmulth]hmult}(hjYlhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj9lubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjkubeh}(h]h ]h"]h$]h&]jjuh1jLhjkhhhjkhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjkhhhjkhMubah}(h]jkah ](j}j~eh"]h$]h&]jj)jhuh1j$hjkhMhjkhhubj)}(hhh]h)}(h calculates the txfifo size valueh]h calculates the txfifo size value}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jhhhjhNhNubj)}(hXJ**Parameters** ``struct dwc3 *dwc`` pointer to the DWC3 context ``int mult`` multiplier to be used when calculating the fifo_size **Description** Calculates the size value based on the equation below: DWC3 revision 280A and prior: fifo_size = mult * (max_packet / mdwidth) + 1; DWC3 revision 290A and onwards: fifo_size = mult * ((max_packet + mdwidth)/mdwidth + 1) + 1 The max packet size is set to 1024, as the txfifo requirements mainly apply to super speed USB use cases. However, it is safe to overestimate the fifo allocations for other scenarios, i.e. high speed USB.h](h)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubj)}(hhh](j)}(h1``struct dwc3 *dwc`` pointer to the DWC3 context h](j)}(h``struct dwc3 *dwc``h]j)}(hjlh]hstruct dwc3 *dwc}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubj)}(hhh]h)}(hpointer to the DWC3 contexth]hpointer to the DWC3 context}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjlubj)}(hB``int mult`` multiplier to be used when calculating the fifo_size h](j)}(h ``int mult``h]j)}(hjlh]hint mult}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubj)}(hhh]h)}(h4multiplier to be used when calculating the fifo_sizeh]h4multiplier to be used when calculating the fifo_size}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjlubeh}(h]h ]h"]h$]h&]uh1jhjlubh)}(h**Description**h]j)}(hj8mh]h Description}(hj:mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6mubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubh)}(h6Calculates the size value based on the equation below:h]h6Calculates the size value based on the equation below:}(hjNmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubh)}(hLDWC3 revision 280A and prior: fifo_size = mult * (max_packet / mdwidth) + 1;h]hLDWC3 revision 280A and prior: fifo_size = mult * (max_packet / mdwidth) + 1;}(hj]mhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubh)}(h[DWC3 revision 290A and onwards: fifo_size = mult * ((max_packet + mdwidth)/mdwidth + 1) + 1h]h[DWC3 revision 290A and onwards: fifo_size = mult * ((max_packet + mdwidth)/mdwidth + 1) + 1}(hjlmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubh)}(hThe max packet size is set to 1024, as the txfifo requirements mainly apply to super speed USB use cases. However, it is safe to overestimate the fifo allocations for other scenarios, i.e. high speed USB.h]hThe max packet size is set to 1024, as the txfifo requirements mainly apply to super speed USB use cases. However, it is safe to overestimate the fifo allocations for other scenarios, i.e. high speed USB.}(hj{mhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'dwc3_gadget_calc_ram_depth (C function)c.dwc3_gadget_calc_ram_depthhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h1int dwc3_gadget_calc_ram_depth (struct dwc3 *dwc)h]j+)}(h0int dwc3_gadget_calc_ram_depth(struct dwc3 *dwc)h](jO)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjmhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjmhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjmhhhjmhMubjT)}(hdwc3_gadget_calc_ram_depthh]jZ)}(hdwc3_gadget_calc_ram_depthh]hdwc3_gadget_calc_ram_depth}(hjmhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjmubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjmhhhjmhMubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjmhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjmubjC)}(h h]h }(hjmhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjmubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjnhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjnubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjnmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjmsbc.dwc3_gadget_calc_ram_depthasbuh1hhjmubjC)}(h h]h }(hj%nhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjmubjL)}(hjLh]h*}(hj3nhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjmubjZ)}(hdwch]hdwc}(hj@nhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjmubah}(h]h ]h"]h$]h&]jjuh1jLhjmhhhjmhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjmhhhjmhMubah}(h]jmah ](j}j~eh"]h$]h&]jj)jhuh1j$hjmhMhjmhhubj)}(hhh]h)}(h#calculates the ram depth for txfifoh]h#calculates the ram depth for txfifo}(hjjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjgnhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjnjjnjjjuh1jhhhjhNhNubj)}(hB**Parameters** ``struct dwc3 *dwc`` pointer to the DWC3 contexth](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjnubj)}(hhh]j)}(h0``struct dwc3 *dwc`` pointer to the DWC3 contexth](j)}(h``struct dwc3 *dwc``h]j)}(hjnh]hstruct dwc3 *dwc}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjnubj)}(hhh]h)}(hpointer to the DWC3 contexth]hpointer to the DWC3 context}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'dwc3_gadget_clear_tx_fifos (C function)c.dwc3_gadget_clear_tx_fifoshNtauh1jhjhhhNhNubj )}(hhh](j%)}(h2void dwc3_gadget_clear_tx_fifos (struct dwc3 *dwc)h]j+)}(h1void dwc3_gadget_clear_tx_fifos(struct dwc3 *dwc)h](jO)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjohhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjohhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjohhhjohMubjT)}(hdwc3_gadget_clear_tx_fifosh]jZ)}(hdwc3_gadget_clear_tx_fifosh]hdwc3_gadget_clear_tx_fifos}(hj&ohhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj"oubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjohhhjohMubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjBohhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj>oubjC)}(h h]h }(hjOohhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj>oubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hj`ohhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj]oubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjbomodnameN classnameNjnLjqL)}jtL]jwL)}jjLj(osbc.dwc3_gadget_clear_tx_fifosasbuh1hhj>oubjC)}(h h]h }(hjohhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj>oubjL)}(hjLh]h*}(hjohhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj>oubjZ)}(hdwch]hdwc}(hjohhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj>oubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj:oubah}(h]h ]h"]h$]h&]jjuh1jLhjohhhjohMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjnhhhjohMubah}(h]jnah ](j}j~eh"]h$]h&]jj)jhuh1j$hjohMhjnhhubj)}(hhh]h)}(hClears txfifo allocationh]hClears txfifo allocation}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhjnhhhjohMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` pointer to the DWC3 context **Description** Iterates through all the endpoint registers and clears the previous txfifo allocations.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjoubj)}(hhh]j)}(h1``struct dwc3 *dwc`` pointer to the DWC3 context h](j)}(h``struct dwc3 *dwc``h]j)}(hjph]hstruct dwc3 *dwc}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjpubj)}(hhh]h)}(hpointer to the DWC3 contexth]hpointer to the DWC3 context}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjAph]h Description}(hjCphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?pubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjoubh)}(hWIterates through all the endpoint registers and clears the previous txfifo allocations.h]hWIterates through all the endpoint registers and clears the previous txfifo allocations.}(hjWphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$__dwc3_gadget_ep_enable (C function)c.__dwc3_gadget_ep_enablehNtauh1jhjhhhNhNubj )}(hhh](j%)}(hFint __dwc3_gadget_ep_enable (struct dwc3_ep *dep, unsigned int action)h]j+)}(hEint __dwc3_gadget_ep_enable(struct dwc3_ep *dep, unsigned int action)h](jO)}(hinth]hint}(hjphhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjphhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjphhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjphhhjphMubjT)}(h__dwc3_gadget_ep_enableh]jZ)}(h__dwc3_gadget_ep_enableh]h__dwc3_gadget_ep_enable}(hjphhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjpubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjphhhjphMubjL)}(h*(struct dwc3_ep *dep, unsigned int action)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjphhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjpubjC)}(h h]h }(hjphhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjpubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjphhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjpubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjpmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjpsbc.__dwc3_gadget_ep_enableasbuh1hhjpubjC)}(h h]h }(hjqhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjpubjL)}(hjLh]h*}(hjqhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjpubjZ)}(hdeph]hdep}(hjqhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjpubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjpubjL)}(hunsigned int actionh](jO)}(hunsignedh]hunsigned}(hj5qhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj1qubjC)}(h h]h }(hjCqhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj1qubjO)}(hinth]hint}(hjQqhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj1qubjC)}(h h]h }(hj_qhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj1qubjZ)}(hactionh]haction}(hjmqhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj1qubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjpubeh}(h]h ]h"]h$]h&]jjuh1jLhjphhhjphMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj~phhhjphMubah}(h]jypah ](j}j~eh"]h$]h&]jj)jhuh1j$hjphMhj{phhubj)}(hhh]h)}(hinitializes a hw endpointh]hinitializes a hw endpoint}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jhj{phhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3_ep *dep`` endpoint to be initialized ``unsigned int action`` one of INIT, MODIFY or RESTORE **Description** Caller should take care of locking. Execute all necessary commands to initialize a HW endpoint so it can be used by a gadget driver.h](h)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjqubj)}(hhh](j)}(h3``struct dwc3_ep *dep`` endpoint to be initialized h](j)}(h``struct dwc3_ep *dep``h]j)}(hjqh]hstruct dwc3_ep *dep}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjqubj)}(hhh]h)}(hendpoint to be initializedh]hendpoint to be initialized}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjqubj)}(h7``unsigned int action`` one of INIT, MODIFY or RESTORE h](j)}(h``unsigned int action``h]j)}(hjrh]hunsigned int action}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj rubj)}(hhh]h)}(hone of INIT, MODIFY or RESTOREh]hone of INIT, MODIFY or RESTORE}(hj*rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&rhMhj'rubah}(h]h ]h"]h$]h&]uh1jhj rubeh}(h]h ]h"]h$]h&]uh1jhj&rhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjLrh]h Description}(hjNrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJrubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjqubh)}(hCaller should take care of locking. Execute all necessary commands to initialize a HW endpoint so it can be used by a gadget driver.h]hCaller should take care of locking. Execute all necessary commands to initialize a HW endpoint so it can be used by a gadget driver.}(hjbrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%__dwc3_gadget_ep_disable (C function)c.__dwc3_gadget_ep_disablehNtauh1jhjhhhNhNubj )}(hhh](j%)}(h2int __dwc3_gadget_ep_disable (struct dwc3_ep *dep)h]j+)}(h1int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)h](jO)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjrhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM+ubjC)}(h h]h }(hjrhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjrhhhjrhM+ubjT)}(h__dwc3_gadget_ep_disableh]jZ)}(h__dwc3_gadget_ep_disableh]h__dwc3_gadget_ep_disable}(hjrhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjrubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjrhhhjrhM+ubjL)}(h(struct dwc3_ep *dep)h]jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjrhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjrubjC)}(h h]h }(hjrhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjrubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjrhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjrubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjrmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjrsbc.__dwc3_gadget_ep_disableasbuh1hhjrubjC)}(h h]h }(hj shhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjrubjL)}(hjLh]h*}(hjshhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjrubjZ)}(hdeph]hdep}(hj'shhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjrubah}(h]h ]h"]h$]h&]jjuh1jLhjrhhhjrhM+ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjrhhhjrhM+ubah}(h]jrah ](j}j~eh"]h$]h&]jj)jhuh1j$hjrhM+hjrhhubj)}(hhh]h)}(hdisables a hw endpointh]hdisables a hw endpoint}(hjQshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM"hjNshhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhM+ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjisjjisjjjuh1jhhhjhNhNubj)}(hX#**Parameters** ``struct dwc3_ep *dep`` the endpoint to disable **Description** This function undoes what __dwc3_gadget_ep_enable did and also removes requests which are currently being processed by the hardware and those which are not yet scheduled. Caller should take care of locking.h](h)}(h**Parameters**h]j)}(hjssh]h Parameters}(hjushhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM&hjmsubj)}(hhh]j)}(h0``struct dwc3_ep *dep`` the endpoint to disable h](j)}(h``struct dwc3_ep *dep``h]j)}(hjsh]hstruct dwc3_ep *dep}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM#hjsubj)}(hhh]h)}(hthe endpoint to disableh]hthe endpoint to disable}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshM#hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM#hjsubah}(h]h ]h"]h$]h&]uh1jhjmsubh)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM%hjmsubh)}(hThis function undoes what __dwc3_gadget_ep_enable did and also removes requests which are currently being processed by the hardware and those which are not yet scheduled.h]hThis function undoes what __dwc3_gadget_ep_enable did and also removes requests which are currently being processed by the hardware and those which are not yet scheduled.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM%hjmsubh)}(h#Caller should take care of locking.h]h#Caller should take care of locking.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM)hjmsubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_ep_prev_trb (C function)c.dwc3_ep_prev_trbhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hBstruct dwc3_trb * dwc3_ep_prev_trb (struct dwc3_ep *dep, u8 index)h]j+)}(h@struct dwc3_trb *dwc3_ep_prev_trb(struct dwc3_ep *dep, u8 index)h](j1)}(hj4h]hstruct}(hj!thhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjthhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hj/thhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjthhhj.thMubh)}(hhh]jZ)}(hdwc3_trbh]hdwc3_trb}(hj@thhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj=tubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjBtmodnameN classnameNjnLjqL)}jtL]jwL)}jjLdwc3_ep_prev_trbsbc.dwc3_ep_prev_trbasbuh1hhjthhhj.thMubjC)}(h h]h }(hjathhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjthhhj.thMubjL)}(hjLh]h*}(hjothhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjthhhj.thMubjT)}(hdwc3_ep_prev_trbh]jZ)}(hj^th]hdwc3_ep_prev_trb}(hjthhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj|tubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjthhhj.thMubjL)}(h(struct dwc3_ep *dep, u8 index)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjthhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjtubjC)}(h h]h }(hjthhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjtubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjthhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjtmodnameN classnameNjnLjqL)}jtL]j\tc.dwc3_ep_prev_trbasbuh1hhjtubjC)}(h h]h }(hjthhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjtubjL)}(hjLh]h*}(hjthhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjtubjZ)}(hdeph]hdep}(hjthhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjtubjL)}(hu8 indexh](h)}(hhh]jZ)}(hu8h]hu8}(hjuhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj uubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjumodnameN classnameNjnLjqL)}jtL]j\tc.dwc3_ep_prev_trbasbuh1hhjuubjC)}(h h]h }(hj,uhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjuubjZ)}(hindexh]hindex}(hj:uhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjtubeh}(h]h ]h"]h$]h&]jjuh1jLhjthhhj.thMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjthhhj.thMubah}(h]jtah ](j}j~eh"]h$]h&]jj)jhuh1j$hj.thMhjthhubj)}(hhh]h)}(h$returns the previous TRB in the ringh]h$returns the previous TRB in the ring}(hjduhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjauhhubah}(h]h ]h"]h$]h&]uh1jhjthhhj.thMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|ujj|ujjjuh1jhhhjhNhNubj)}(hX0**Parameters** ``struct dwc3_ep *dep`` The endpoint with the TRB ring ``u8 index`` The index of the current TRB in the ring **Description** Returns the TRB prior to the one pointed to by the index. If the index is 0, we will wrap backwards, skip the link TRB, and return the one just before that.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjuubj)}(hhh](j)}(h7``struct dwc3_ep *dep`` The endpoint with the TRB ring h](j)}(h``struct dwc3_ep *dep``h]j)}(hjuh]hstruct dwc3_ep *dep}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjuubj)}(hhh]h)}(hThe endpoint with the TRB ringh]hThe endpoint with the TRB ring}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjuubj)}(h6``u8 index`` The index of the current TRB in the ring h](j)}(h ``u8 index``h]j)}(hjuh]hu8 index}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjuubj)}(hhh]h)}(h(The index of the current TRB in the ringh]h(The index of the current TRB in the ring}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjuubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjuubh)}(hReturns the TRB prior to the one pointed to by the index. If the index is 0, we will wrap backwards, skip the link TRB, and return the one just before that.h]hReturns the TRB prior to the one pointed to by the index. If the index is 0, we will wrap backwards, skip the link TRB, and return the one just before that.}(hj/vhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!dwc3_prepare_one_trb (C function)c.dwc3_prepare_one_trbhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hvoid dwc3_prepare_one_trb (struct dwc3_ep *dep, struct dwc3_request *req, unsigned int trb_length, unsigned int chain, unsigned int node, bool use_bounce_buffer, bool must_interrupt)h]j+)}(hvoid dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_request *req, unsigned int trb_length, unsigned int chain, unsigned int node, bool use_bounce_buffer, bool must_interrupt)h](jO)}(hvoidh]hvoid}(hj^vhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjZvhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjmvhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjZvhhhjlvhMubjT)}(hdwc3_prepare_one_trbh]jZ)}(hdwc3_prepare_one_trbh]hdwc3_prepare_one_trb}(hjvhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{vubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjZvhhhjlvhMubjL)}(h(struct dwc3_ep *dep, struct dwc3_request *req, unsigned int trb_length, unsigned int chain, unsigned int node, bool use_bounce_buffer, bool must_interrupt)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjvhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjvubjC)}(h h]h }(hjvhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjvubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjvhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjvubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjvmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjvsbc.dwc3_prepare_one_trbasbuh1hhjvubjC)}(h h]h }(hjvhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjvubjL)}(hjLh]h*}(hjvhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjvubjZ)}(hdeph]hdep}(hjvhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hstruct dwc3_request *reqh](j1)}(hj4h]hstruct}(hj whhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj wubjC)}(h h]h }(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj wubh)}(hhh]jZ)}(h dwc3_requesth]h dwc3_request}(hj+whhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj(wubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj-wmodnameN classnameNjnLjqL)}jtL]jvc.dwc3_prepare_one_trbasbuh1hhj wubjC)}(h h]h }(hjIwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj wubjL)}(hjLh]h*}(hjWwhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj wubjZ)}(hreqh]hreq}(hjdwhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj wubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hunsigned int trb_lengthh](jO)}(hunsignedh]hunsigned}(hj}whhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjywubjC)}(h h]h }(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjywubjO)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjywubjC)}(h h]h }(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjywubjZ)}(h trb_lengthh]h trb_length}(hjwhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjywubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hunsigned int chainh](jO)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjwubjC)}(h h]h }(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjwubjO)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjwubjC)}(h h]h }(hjwhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjwubjZ)}(hchainh]hchain}(hjxhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hunsigned int nodeh](jO)}(hunsignedh]hunsigned}(hjxhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjxubjC)}(h h]h }(hj-xhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjxubjO)}(hinth]hint}(hj;xhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjxubjC)}(h h]h }(hjIxhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjxubjZ)}(hnodeh]hnode}(hjWxhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hbool use_bounce_bufferh](jO)}(hboolh]hbool}(hjpxhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjlxubjC)}(h h]h }(hj~xhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjlxubjZ)}(huse_bounce_bufferh]huse_bounce_buffer}(hjxhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjlxubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubjL)}(hbool must_interrupth](jO)}(hjrxh]hbool}(hjxhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjxubjC)}(h h]h }(hjxhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjxubjZ)}(hmust_interrupth]hmust_interrupt}(hjxhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjvubeh}(h]h ]h"]h$]h&]jjuh1jLhjZvhhhjlvhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjVvhhhjlvhMubah}(h]jQvah ](j}j~eh"]h$]h&]jj)jhuh1j$hjlvhMhjSvhhubj)}(hhh]h)}(hsetup one TRB from one requesth]hsetup one TRB from one request}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjxhhubah}(h]h ]h"]h$]h&]uh1jhjSvhhhjlvhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3_ep *dep`` endpoint for which this request is prepared ``struct dwc3_request *req`` dwc3_request pointer ``unsigned int trb_length`` buffer size of the TRB ``unsigned int chain`` should this TRB be chained to the next? ``unsigned int node`` only for isochronous endpoints. First TRB needs different type. ``bool use_bounce_buffer`` set to use bounce buffer ``bool must_interrupt`` set to interrupt on TRB completionh](h)}(h**Parameters**h]j)}(hj yh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj yubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjyubj)}(hhh](j)}(hD``struct dwc3_ep *dep`` endpoint for which this request is prepared h](j)}(h``struct dwc3_ep *dep``h]j)}(hj+yh]hstruct dwc3_ep *dep}(hj-yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)yubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj%yubj)}(hhh]h)}(h+endpoint for which this request is preparedh]h+endpoint for which this request is prepared}(hjDyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@yhMhjAyubah}(h]h ]h"]h$]h&]uh1jhj%yubeh}(h]h ]h"]h$]h&]uh1jhj@yhMhj"yubj)}(h2``struct dwc3_request *req`` dwc3_request pointer h](j)}(h``struct dwc3_request *req``h]j)}(hjdyh]hstruct dwc3_request *req}(hjfyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbyubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj^yubj)}(hhh]h)}(hdwc3_request pointerh]hdwc3_request pointer}(hj}yhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyyhMhjzyubah}(h]h ]h"]h$]h&]uh1jhj^yubeh}(h]h ]h"]h$]h&]uh1jhjyyhMhj"yubj)}(h3``unsigned int trb_length`` buffer size of the TRB h](j)}(h``unsigned int trb_length``h]j)}(hjyh]hunsigned int trb_length}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjyubj)}(hhh]h)}(hbuffer size of the TRBh]hbuffer size of the TRB}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj"yubj)}(h?``unsigned int chain`` should this TRB be chained to the next? h](j)}(h``unsigned int chain``h]j)}(hjyh]hunsigned int chain}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjyubj)}(hhh]h)}(h'should this TRB be chained to the next?h]h'should this TRB be chained to the next?}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj"yubj)}(hV``unsigned int node`` only for isochronous endpoints. First TRB needs different type. h](j)}(h``unsigned int node``h]j)}(hjzh]hunsigned int node}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj zubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj zubj)}(hhh]h)}(h?only for isochronous endpoints. First TRB needs different type.h]h?only for isochronous endpoints. First TRB needs different type.}(hj(zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$zhMhj%zubah}(h]h ]h"]h$]h&]uh1jhj zubeh}(h]h ]h"]h$]h&]uh1jhj$zhMhj"yubj)}(h4``bool use_bounce_buffer`` set to use bounce buffer h](j)}(h``bool use_bounce_buffer``h]j)}(hjHzh]hbool use_bounce_buffer}(hjJzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFzubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjBzubj)}(hhh]h)}(hset to use bounce bufferh]hset to use bounce buffer}(hjazhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]zhMhj^zubah}(h]h ]h"]h$]h&]uh1jhjBzubeh}(h]h ]h"]h$]h&]uh1jhj]zhMhj"yubj)}(h:``bool must_interrupt`` set to interrupt on TRB completionh](j)}(h``bool must_interrupt``h]j)}(hjzh]hbool must_interrupt}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj{zubj)}(hhh]h)}(h"set to interrupt on TRB completionh]h"set to interrupt on TRB completion}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjzubah}(h]h ]h"]h$]h&]uh1jhj{zubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj"yubeh}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!dwc3_prepare_last_sg (C function)c.dwc3_prepare_last_sghNtauh1jhjhhhNhNubj )}(hhh](j%)}(hvint dwc3_prepare_last_sg (struct dwc3_ep *dep, struct dwc3_request *req, unsigned int entry_length, unsigned int node)h]j+)}(huint dwc3_prepare_last_sg(struct dwc3_ep *dep, struct dwc3_request *req, unsigned int entry_length, unsigned int node)h](jO)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjzhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hjzhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjzhhhjzhMubjT)}(hdwc3_prepare_last_sgh]jZ)}(hdwc3_prepare_last_sgh]hdwc3_prepare_last_sg}(hjzhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjzubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjzhhhjzhMubjL)}(h](struct dwc3_ep *dep, struct dwc3_request *req, unsigned int entry_length, unsigned int node)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hj{hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj{ubjC)}(h h]h }(hj%{hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hj6{hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj3{ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj8{modnameN classnameNjnLjqL)}jtL]jwL)}jjLjzsbc.dwc3_prepare_last_sgasbuh1hhj{ubjC)}(h h]h }(hjV{hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubjL)}(hjLh]h*}(hjd{hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj{ubjZ)}(hdeph]hdep}(hjq{hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj{ubjL)}(hstruct dwc3_request *reqh](j1)}(hj4h]hstruct}(hj{hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj{ubjC)}(h h]h }(hj{hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubh)}(hhh]jZ)}(h dwc3_requesth]h dwc3_request}(hj{hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj{modnameN classnameNjnLjqL)}jtL]jR{c.dwc3_prepare_last_sgasbuh1hhj{ubjC)}(h h]h }(hj{hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubjL)}(hjLh]h*}(hj{hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj{ubjZ)}(hreqh]hreq}(hj{hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj{ubjL)}(hunsigned int entry_lengthh](jO)}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj{ubjC)}(h h]h }(hj|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubjO)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj{ubjC)}(h h]h }(hj$|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj{ubjZ)}(h entry_lengthh]h entry_length}(hj2|hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj{ubjL)}(hunsigned int nodeh](jO)}(hunsignedh]hunsigned}(hjK|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjG|ubjC)}(h h]h }(hjY|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjG|ubjO)}(hinth]hint}(hjg|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjG|ubjC)}(h h]h }(hju|hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjG|ubjZ)}(hnodeh]hnode}(hj|hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjG|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj{ubeh}(h]h ]h"]h$]h&]jjuh1jLhjzhhhjzhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjzhhhjzhMubah}(h]jzah ](j}j~eh"]h$]h&]jj)jhuh1j$hjzhMhjzhhubj)}(hhh]h)}(h"prepare TRBs for the last SG entryh]h"prepare TRBs for the last SG entry}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjzhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jhhhjhNhNubj)}(hXN**Parameters** ``struct dwc3_ep *dep`` The endpoint that the request belongs to ``struct dwc3_request *req`` The request to prepare ``unsigned int entry_length`` The last SG entry size ``unsigned int node`` Indicates whether this is not the first entry (for isoc only) **Description** Return the number of TRBs prepared.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|ubj)}(hhh](j)}(hA``struct dwc3_ep *dep`` The endpoint that the request belongs to h](j)}(h``struct dwc3_ep *dep``h]j)}(hj|h]hstruct dwc3_ep *dep}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|ubj)}(hhh]h)}(h(The endpoint that the request belongs toh]h(The endpoint that the request belongs to}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj|ubj)}(h4``struct dwc3_request *req`` The request to prepare h](j)}(h``struct dwc3_request *req``h]j)}(hj'}h]hstruct dwc3_request *req}(hj)}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%}ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj!}ubj)}(hhh]h)}(hThe request to prepareh]hThe request to prepare}(hj@}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<}hMhj=}ubah}(h]h ]h"]h$]h&]uh1jhj!}ubeh}(h]h ]h"]h$]h&]uh1jhj<}hMhj|ubj)}(h5``unsigned int entry_length`` The last SG entry size h](j)}(h``unsigned int entry_length``h]j)}(hj`}h]hunsigned int entry_length}(hjb}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^}ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjZ}ubj)}(hhh]h)}(hThe last SG entry sizeh]hThe last SG entry size}(hjy}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju}hMhjv}ubah}(h]h ]h"]h$]h&]uh1jhjZ}ubeh}(h]h ]h"]h$]h&]uh1jhju}hMhj|ubj)}(hT``unsigned int node`` Indicates whether this is not the first entry (for isoc only) h](j)}(h``unsigned int node``h]j)}(hj}h]hunsigned int node}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj}ubj)}(hhh]h)}(h=Indicates whether this is not the first entry (for isoc only)h]h=Indicates whether this is not the first entry (for isoc only)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|ubh)}(h#Return the number of TRBs prepared.h]h#Return the number of TRBs prepared.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(__dwc3_stop_active_transfer (C function)c.__dwc3_stop_active_transferhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hQint __dwc3_stop_active_transfer (struct dwc3_ep *dep, bool force, bool interrupt)h]j+)}(hPint __dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, bool interrupt)h](jO)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj~hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMubjC)}(h h]h }(hj(~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj~hhhj'~hMubjT)}(h__dwc3_stop_active_transferh]jZ)}(h__dwc3_stop_active_transferh]h__dwc3_stop_active_transfer}(hj:~hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj6~ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj~hhhj'~hMubjL)}(h1(struct dwc3_ep *dep, bool force, bool interrupt)h](jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjV~hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjR~ubjC)}(h h]h }(hjc~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjR~ubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjt~hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjq~ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjv~modnameN classnameNjnLjqL)}jtL]jwL)}jjLj<~sbc.__dwc3_stop_active_transferasbuh1hhjR~ubjC)}(h h]h }(hj~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjR~ubjL)}(hjLh]h*}(hj~hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjR~ubjZ)}(hdeph]hdep}(hj~hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjR~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjN~ubjL)}(h bool forceh](jO)}(hjrxh]hbool}(hj~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj~ubjC)}(h h]h }(hj~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj~ubjZ)}(hforceh]hforce}(hj~hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjN~ubjL)}(hbool interrupth](jO)}(hjrxh]hbool}(hj~hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj~ubjC)}(h h]h }(hj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj~ubjZ)}(h interrupth]h interrupt}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjN~ubeh}(h]h ]h"]h$]h&]jjuh1jLhj~hhhj'~hMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj~hhhj'~hMubah}(h]j ~ah ](j}j~eh"]h$]h&]jj)jhuh1j$hj'~hMhj~hhubj)}(hhh]h)}(h stop the current active transferh]h stop the current active transfer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj~hhhj'~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjYjjYjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3_ep *dep`` isoc endpoint ``bool force`` set forcerm bit in the command ``bool interrupt`` command complete interrupt after End Transfer command **Description** When setting force, the ForceRM bit will be set. In that case the controller won't update the TRB progress on command completion. It also won't clear the HWO bit in the TRB. The command will also not complete immediately in that case.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj]ubj)}(hhh](j)}(h&``struct dwc3_ep *dep`` isoc endpoint h](j)}(h``struct dwc3_ep *dep``h]j)}(hjh]hstruct dwc3_ep *dep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj|ubj)}(hhh]h)}(h isoc endpointh]h isoc endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(h.``bool force`` set forcerm bit in the command h](j)}(h``bool force``h]j)}(hjh]h bool force}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjubj)}(hhh]h)}(hset forcerm bit in the commandh]hset forcerm bit in the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubj)}(hI``bool interrupt`` command complete interrupt after End Transfer command h](j)}(h``bool interrupt``h]j)}(hjh]hbool interrupt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjubj)}(hhh]h)}(h5command complete interrupt after End Transfer commandh]h5command complete interrupt after End Transfer command}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubh)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj]ubh)}(hWhen setting force, the ForceRM bit will be set. In that case the controller won't update the TRB progress on command completion. It also won't clear the HWO bit in the TRB. The command will also not complete immediately in that case.h]hWhen setting force, the ForceRM bit will be set. In that case the controller won’t update the TRB progress on command completion. It also won’t clear the HWO bit in the TRB. The command will also not complete immediately in that case.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)dwc3_gadget_start_isoc_quirk (C function)c.dwc3_gadget_start_isoc_quirkhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h6int dwc3_gadget_start_isoc_quirk (struct dwc3_ep *dep)h]j+)}(h5int dwc3_gadget_start_isoc_quirk(struct dwc3_ep *dep)h](jO)}(hinth]hint}(hjthhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjphhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM)ubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjphhhjhM)ubjT)}(hdwc3_gadget_start_isoc_quirkh]jZ)}(hdwc3_gadget_start_isoc_quirkh]hdwc3_gadget_start_isoc_quirk}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjphhhjhM)ubjL)}(h(struct dwc3_ep *dep)h]jL)}(hstruct dwc3_ep *deph](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3_eph]hdwc3_ep}(hjπhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj̀ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjрmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_gadget_start_isoc_quirkasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdeph]hdep}(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubah}(h]h ]h"]h$]h&]jjuh1jLhjphhhjhM)ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjlhhhjhM)ubah}(h]jgah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhM)hjihhubj)}(hhh]h)}(hworkaround invalid frame numberh]hworkaround invalid frame number}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhjihhhjhM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(hXB**Parameters** ``struct dwc3_ep *dep`` isoc endpoint **Description** This function tests for the correct combination of BIT[15:14] from the 16-bit microframe number reported by the XferNotReady event for the future frame number to start the isoc transfer. In DWC_usb31 version 1.70a-ea06 and prior, for highspeed and fullspeed isochronous IN, BIT[15:14] of the 16-bit microframe number reported by the XferNotReady event are invalid. The driver uses this number to schedule the isochronous transfer and passes it to the START TRANSFER command. Because this number is invalid, the command may fail. If BIT[15:14] matches the internal 16-bit microframe, the START TRANSFER command will pass and the transfer will start at the scheduled time, if it is off by 1, the command will still pass, but the transfer will start 2 seconds in the future. For all other conditions, the START TRANSFER command will fail with bus-expiry. In order to workaround this issue, we can test for the correct combination of BIT[15:14] by sending START TRANSFER commands with different values of BIT[15:14]: 'b00, 'b01, 'b10, and 'b11. Each combination is 2^14 uframe apart (or 2 seconds). 4 seconds into the future will result in a bus-expiry status. As the result, within the 4 possible combinations for BIT[15:14], there will be 2 successful and 2 failure START COMMAND status. One of the 2 successful command status will result in a 2-second delay start. The smaller BIT[15:14] value is the correct combination. Since there are only 4 outcomes and the results are ordered, we can simply test 2 START TRANSFER commands with BIT[15:14] combinations 'b00 and 'b01 to deduce the smaller successful combination. Let test0 = test status for combination 'b00 and test1 = test status for 'b01 of BIT[15:14]. The correct combination is as follow: if test0 fails and test1 passes, BIT[15:14] is 'b01 if test0 fails and test1 fails, BIT[15:14] is 'b10 if test0 passes and test1 fails, BIT[15:14] is 'b11 if test0 passes and test1 passes, BIT[15:14] is 'b00 Synopsys STAR 9001202023: Wrong microframe number for isochronous IN endpoints.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubj)}(hhh]j)}(h&``struct dwc3_ep *dep`` isoc endpoint h](j)}(h``struct dwc3_ep *dep``h]j)}(hjuh]hstruct dwc3_ep *dep}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjoubj)}(hhh]h)}(h isoc endpointh]h isoc endpoint}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hThis function tests for the correct combination of BIT[15:14] from the 16-bit microframe number reported by the XferNotReady event for the future frame number to start the isoc transfer.h]hThis function tests for the correct combination of BIT[15:14] from the 16-bit microframe number reported by the XferNotReady event for the future frame number to start the isoc transfer.}(hjƁhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hXIn DWC_usb31 version 1.70a-ea06 and prior, for highspeed and fullspeed isochronous IN, BIT[15:14] of the 16-bit microframe number reported by the XferNotReady event are invalid. The driver uses this number to schedule the isochronous transfer and passes it to the START TRANSFER command. Because this number is invalid, the command may fail. If BIT[15:14] matches the internal 16-bit microframe, the START TRANSFER command will pass and the transfer will start at the scheduled time, if it is off by 1, the command will still pass, but the transfer will start 2 seconds in the future. For all other conditions, the START TRANSFER command will fail with bus-expiry.h]hXIn DWC_usb31 version 1.70a-ea06 and prior, for highspeed and fullspeed isochronous IN, BIT[15:14] of the 16-bit microframe number reported by the XferNotReady event are invalid. The driver uses this number to schedule the isochronous transfer and passes it to the START TRANSFER command. Because this number is invalid, the command may fail. If BIT[15:14] matches the internal 16-bit microframe, the START TRANSFER command will pass and the transfer will start at the scheduled time, if it is off by 1, the command will still pass, but the transfer will start 2 seconds in the future. For all other conditions, the START TRANSFER command will fail with bus-expiry.}(hjՁhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hX8In order to workaround this issue, we can test for the correct combination of BIT[15:14] by sending START TRANSFER commands with different values of BIT[15:14]: 'b00, 'b01, 'b10, and 'b11. Each combination is 2^14 uframe apart (or 2 seconds). 4 seconds into the future will result in a bus-expiry status. As the result, within the 4 possible combinations for BIT[15:14], there will be 2 successful and 2 failure START COMMAND status. One of the 2 successful command status will result in a 2-second delay start. The smaller BIT[15:14] value is the correct combination.h]hX@In order to workaround this issue, we can test for the correct combination of BIT[15:14] by sending START TRANSFER commands with different values of BIT[15:14]: ‘b00, ‘b01, ‘b10, and ‘b11. Each combination is 2^14 uframe apart (or 2 seconds). 4 seconds into the future will result in a bus-expiry status. As the result, within the 4 possible combinations for BIT[15:14], there will be 2 successful and 2 failure START COMMAND status. One of the 2 successful command status will result in a 2-second delay start. The smaller BIT[15:14] value is the correct combination.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hSince there are only 4 outcomes and the results are ordered, we can simply test 2 START TRANSFER commands with BIT[15:14] combinations 'b00 and 'b01 to deduce the smaller successful combination.h]hSince there are only 4 outcomes and the results are ordered, we can simply test 2 START TRANSFER commands with BIT[15:14] combinations ‘b00 and ‘b01 to deduce the smaller successful combination.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hLet test0 = test status for combination 'b00 and test1 = test status for 'b01 of BIT[15:14]. The correct combination is as follow:h]hLet test0 = test status for combination ‘b00 and test1 = test status for ‘b01 of BIT[15:14]. The correct combination is as follow:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMhjPubh)}(hif test0 fails and test1 passes, BIT[15:14] is 'b01 if test0 fails and test1 fails, BIT[15:14] is 'b10 if test0 passes and test1 fails, BIT[15:14] is 'b11 if test0 passes and test1 passes, BIT[15:14] is 'b00h]hif test0 fails and test1 passes, BIT[15:14] is ‘b01 if test0 fails and test1 fails, BIT[15:14] is ‘b10 if test0 passes and test1 fails, BIT[15:14] is ‘b11 if test0 passes and test1 passes, BIT[15:14] is ‘b00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM!hjPubh)}(hOSynopsys STAR 9001202023: Wrong microframe number for isochronous IN endpoints.h]hOSynopsys STAR 9001202023: Wrong microframe number for isochronous IN endpoints.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM&hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#dwc3_gadget_setup_nump (C function)c.dwc3_gadget_setup_numphNtauh1jhjhhhNhNubj )}(hhh](j%)}(h.void dwc3_gadget_setup_nump (struct dwc3 *dwc)h]j+)}(h-void dwc3_gadget_setup_nump(struct dwc3 *dwc)h](jO)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjKhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM_ ubjC)}(h h]h }(hj^hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjKhhhj]hM_ ubjT)}(hdwc3_gadget_setup_numph]jZ)}(hdwc3_gadget_setup_numph]hdwc3_gadget_setup_nump}(hjphhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjlubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjKhhhj]hM_ ubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjrsbc.dwc3_gadget_setup_numpasbuh1hhjubjC)}(h h]h }(hjʂhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hj؂hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubah}(h]h ]h"]h$]h&]jjuh1jLhjKhhhj]hM_ ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjGhhhj]hM_ ubah}(h]jBah ](j}j~eh"]h$]h&]jj)jhuh1j$hj]hM_ hjDhhubj)}(hhh]h)}(h4calculate and initialize NUMP field of ``DWC3_DCFG``h](h'calculate and initialize NUMP field of }(hjhhhNhNubj)}(h ``DWC3_DCFG``h]h DWC3_DCFG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMK hj hhubah}(h]h ]h"]h$]h&]uh1jhjDhhhj]hM_ ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3 *dwc`` pointer to our context structure **Description** The following looks like complex but it's actually very simple. In order to calculate the number of packets we can burst at once on OUT transfers, we're gonna use RxFIFO size. To calculate RxFIFO size we need two numbers: MDWIDTH = size, in bits, of the internal memory bus RAM2_DEPTH = depth, in MDWIDTH, of internal RAM2 (where RxFIFO sits) Given these two numbers, the formula is simple: RxFIFO Size = (RAM2_DEPTH * MDWIDTH / 8) - 24 - 16; 24 bytes is for 3x SETUP packets 16 bytes is a clock domain crossing tolerance Given RxFIFO Size, NUMP = RxFIFOSize / 1024;h](h)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMO hj9ubj)}(hhh]j)}(h6``struct dwc3 *dwc`` pointer to our context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hj^h]hstruct dwc3 *dwc}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chML hjXubj)}(hhh]h)}(h pointer to our context structureh]h pointer to our context structure}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshML hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshML hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMN hj9ubh)}(hThe following looks like complex but it's actually very simple. In order to calculate the number of packets we can burst at once on OUT transfers, we're gonna use RxFIFO size.h]hThe following looks like complex but it’s actually very simple. In order to calculate the number of packets we can burst at once on OUT transfers, we’re gonna use RxFIFO size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMN hj9ubh)}(hTo calculate RxFIFO size we need two numbers: MDWIDTH = size, in bits, of the internal memory bus RAM2_DEPTH = depth, in MDWIDTH, of internal RAM2 (where RxFIFO sits)h]hTo calculate RxFIFO size we need two numbers: MDWIDTH = size, in bits, of the internal memory bus RAM2_DEPTH = depth, in MDWIDTH, of internal RAM2 (where RxFIFO sits)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMR hj9ubh)}(h/Given these two numbers, the formula is simple:h]h/Given these two numbers, the formula is simple:}(hj̓hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMV hj9ubh)}(h3RxFIFO Size = (RAM2_DEPTH * MDWIDTH / 8) - 24 - 16;h]h3RxFIFO Size = (RAM2_DEPTH * MDWIDTH / 8) - 24 - 16;}(hj܃hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMX hj9ubh)}(hN24 bytes is for 3x SETUP packets 16 bytes is a clock domain crossing toleranceh]hN24 bytes is for 3x SETUP packets 16 bytes is a clock domain crossing tolerance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMZ hj9ubh)}(h,Given RxFIFO Size, NUMP = RxFIFOSize / 1024;h]h,Given RxFIFO Size, NUMP = RxFIFOSize / 1024;}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM] hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dwc3_gadget_check_config (C function)c.dwc3_gadget_check_confighNtauh1jhjhhhNhNubj )}(hhh](j%)}(h3int dwc3_gadget_check_config (struct usb_gadget *g)h]j+)}(h2int dwc3_gadget_check_config(struct usb_gadget *g)h](jO)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj%hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMa ubjC)}(h h]h }(hj8hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj%hhhj7hMa ubjT)}(hdwc3_gadget_check_configh]jZ)}(hdwc3_gadget_check_configh]hdwc3_gadget_check_config}(hjJhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjFubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj%hhhj7hMa ubjL)}(h(struct usb_gadget *g)h]jL)}(hstruct usb_gadget *gh](j1)}(hj4h]hstruct}(hjfhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjbubjC)}(h h]h }(hjshhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjbubh)}(hhh]jZ)}(h usb_gadgeth]h usb_gadget}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjLsbc.dwc3_gadget_check_configasbuh1hhjbubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjbubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjbubjZ)}(hgh]hg}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj^ubah}(h]h ]h"]h$]h&]jjuh1jLhj%hhhj7hMa ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj!hhhj7hMa ubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hj7hMa hjhhubj)}(hhh]h)}(h-ensure dwc3 can support the USB configurationh]h-ensure dwc3 can support the USB configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMX hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj7hMa ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct usb_gadget *g`` pointer to the USB gadget **Description** Used to record the maximum number of endpoints being used in a USB composite device. (across all configurations) This is to be used in the calculation of the TXFIFO sizes when resizing internal memory for individual endpoints. It will help ensured that the resizing logic reserves enough space for at least one max packet.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM\ hjubj)}(hhh]j)}(h3``struct usb_gadget *g`` pointer to the USB gadget h](j)}(h``struct usb_gadget *g``h]j)}(hj*h]hstruct usb_gadget *g}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMY hj$ubj)}(hhh]h)}(hpointer to the USB gadgeth]hpointer to the USB gadget}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMY hj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMY hj!ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjeh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM[ hjubh)}(hXCUsed to record the maximum number of endpoints being used in a USB composite device. (across all configurations) This is to be used in the calculation of the TXFIFO sizes when resizing internal memory for individual endpoints. It will help ensured that the resizing logic reserves enough space for at least one max packet.h]hXCUsed to record the maximum number of endpoints being used in a USB composite device. (across all configurations) This is to be used in the calculation of the TXFIFO sizes when resizing internal memory for individual endpoints. It will help ensured that the resizing logic reserves enough space for at least one max packet.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chM[ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_gadget_init (C function)c.dwc3_gadget_inithNtauh1jhjhhhNhNubj )}(hhh](j%)}(h'int dwc3_gadget_init (struct dwc3 *dwc)h]j+)}(h&int dwc3_gadget_init(struct dwc3 *dwc)h](jO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMQubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMQubjT)}(hdwc3_gadget_inith]jZ)}(hdwc3_gadget_inith]hdwc3_gadget_init}(hj˅hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjDžubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMQubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjͅsbc.dwc3_gadget_initasbuh1hhjubjC)}(h h]h }(hj%hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hj3hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hj@hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj߅ubah}(h]h ]h"]h$]h&]jjuh1jLhjhhhjhMQubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMQubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMQhjhhubj)}(hhh]h)}(h$initializes gadget related registersh]h$initializes gadget related registers}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMLhjghhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` pointer to our controller context structure **Description** Returns 0 on success otherwise negative errno.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMPhjubj)}(hhh]j)}(hA``struct dwc3 *dwc`` pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMMhjubj)}(hhh]h)}(h+pointer to our controller context structureh]h+pointer to our controller context structure}(hjĆhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMOhjubh)}(h.Returns 0 on success otherwise negative errno.h]h.Returns 0 on success otherwise negative errno.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:695: ./drivers/usb/dwc3/gadget.chMOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_get_dr_mode (C function)c.dwc3_get_dr_modehNtauh1jhjhhhNhNubj )}(hhh](j%)}(h'int dwc3_get_dr_mode (struct dwc3 *dwc)h]j+)}(h&int dwc3_get_dr_mode(struct dwc3 *dwc)h](jO)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj'hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chK2ubjC)}(h h]h }(hj:hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj'hhhj9hK2ubjT)}(hdwc3_get_dr_modeh]jZ)}(hdwc3_get_dr_modeh]hdwc3_get_dr_mode}(hjLhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjHubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj'hhhj9hK2ubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjdubjC)}(h h]h }(hjuhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjdubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjNsbc.dwc3_get_dr_modeasbuh1hhjdubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjdubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjdubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj`ubah}(h]h ]h"]h$]h&]jjuh1jLhj'hhhj9hK2ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj#hhhj9hK2ubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hj9hK2hj hhubj)}(hhh]h)}(hValidates and sets dr_modeh]hValidates and sets dr_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chK/hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj9hK2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hG**Parameters** ``struct dwc3 *dwc`` pointer to our context structureh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chK3hjubj)}(hhh]j)}(h5``struct dwc3 *dwc`` pointer to our context structureh](j)}(h``struct dwc3 *dwc``h]j)}(hj,h]hstruct dwc3 *dwc}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chK5hj&ubj)}(hhh]h)}(h pointer to our context structureh]h pointer to our context structure}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chK0hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhK5hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!dwc3_core_soft_reset (C function)c.dwc3_core_soft_resethNtauh1jhjhhhNhNubj )}(hhh](j%)}(h+int dwc3_core_soft_reset (struct dwc3 *dwc)h]j+)}(h*int dwc3_core_soft_reset(struct dwc3 *dwc)h](jO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM=ubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhM=ubjT)}(hdwc3_core_soft_reseth]jZ)}(hdwc3_core_soft_reseth]hdwc3_core_soft_reset}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhM=ubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjÈhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjЈhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjވubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_core_soft_resetasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubah}(h]h ]h"]h$]h&]jjuh1jLhjhhhjhM=ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj~hhhjhM=ubah}(h]jyah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhM=hj{hhubj)}(hhh]h)}(h$Issues core soft reset and PHY reseth]h$Issues core soft reset and PHY reset}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM:hjChhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(hG**Parameters** ``struct dwc3 *dwc`` pointer to our context structureh](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM>hjbubj)}(hhh]j)}(h5``struct dwc3 *dwc`` pointer to our context structureh](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM@hjubj)}(hhh]h)}(h pointer to our context structureh]h pointer to our context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j dwc3_ref_clk_period (C function)c.dwc3_ref_clk_periodhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h+void dwc3_ref_clk_period (struct dwc3 *dwc)h]j+)}(h*void dwc3_ref_clk_period(struct dwc3 *dwc)h](jO)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj݉hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj݉hhhjhMubjT)}(hdwc3_ref_clk_periodh]jZ)}(hdwc3_ref_clk_periodh]hdwc3_ref_clk_period}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj݉hhhjhMubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hj+hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hj<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj>modnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_ref_clk_periodasbuh1hhjubjC)}(h h]h }(hj\hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjwhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubah}(h]h ]h"]h$]h&]jjuh1jLhj݉hhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjىhhhjhMubah}(h]jԉah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhj։hhubj)}(hhh]h)}(hReference clock period configuration Default reference clock period depends on hardware configuration. For systems with reference clock that differs from the default, this will set clock period in DWC3_GUCTL register.h]hReference clock period configuration Default reference clock period depends on hardware configuration. For systems with reference clock that differs from the default, this will set clock period in DWC3_GUCTL register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj։hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hR**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structureh](h)}(h**Parameters**h]j)}(hjÊh]h Parameters}(hjŊhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]j)}(h@``struct dwc3 *dwc`` Pointer to our controller context structureh](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhj܊ubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhj܊ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjيubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'dwc3_free_one_event_buffer (C function)c.dwc3_free_one_event_bufferhNtauh1jhjhhhNhNubj )}(hhh](j%)}(hQvoid dwc3_free_one_event_buffer (struct dwc3 *dwc, struct dwc3_event_buffer *evt)h]j+)}(hPvoid dwc3_free_one_event_buffer(struct dwc3 *dwc, struct dwc3_event_buffer *evt)h](jO)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj8hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjKhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj8hhhjJhMubjT)}(hdwc3_free_one_event_bufferh]jZ)}(hdwc3_free_one_event_bufferh]hdwc3_free_one_event_buffer}(hj]hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjYubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj8hhhjJhMubjL)}(h1(struct dwc3 *dwc, struct dwc3_event_buffer *evt)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjyhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjuubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjuubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLj_sbc.dwc3_free_one_event_bufferasbuh1hhjuubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjuubjL)}(hjLh]h*}(hjŋhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjuubjZ)}(hdwch]hdwc}(hjҋhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjqubjL)}(hstruct dwc3_event_buffer *evth](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3_event_bufferh]hdwc3_event_buffer}(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj modnameN classnameNjnLjqL)}jtL]jc.dwc3_free_one_event_bufferasbuh1hhjubjC)}(h h]h }(hj'hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hj5hhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hevth]hevt}(hjBhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjqubeh}(h]h ]h"]h$]h&]jjuh1jLhj8hhhjJhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj4hhhjJhMubah}(h]j/ah ](j}j~eh"]h$]h&]jj)jhuh1j$hjJhMhj1hhubj)}(hhh]h)}(hFrees one event bufferh]hFrees one event buffer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjihhubah}(h]h ]h"]h$]h&]uh1jhj1hhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structure ``struct dwc3_event_buffer *evt`` Pointer to event buffer to be freedh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh](j)}(hA``struct dwc3 *dwc`` Pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hjƌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjŒhMhjÌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŒhMhjubj)}(hE``struct dwc3_event_buffer *evt`` Pointer to event buffer to be freedh](j)}(h!``struct dwc3_event_buffer *evt``h]j)}(hjh]hstruct dwc3_event_buffer *evt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]h)}(h#Pointer to event buffer to be freedh]h#Pointer to event buffer to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(dwc3_alloc_one_event_buffer (C function)c.dwc3_alloc_one_event_bufferhNtauh1jhjhhhNhNubj )}(hhh](j%)}(h^struct dwc3_event_buffer * dwc3_alloc_one_event_buffer (struct dwc3 *dwc, unsigned int length)h]j+)}(h\struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc, unsigned int length)h](j1)}(hj4h]hstruct}(hj@hhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hj<hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjNhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj<hhhjMhMubh)}(hhh]jZ)}(hdwc3_event_bufferh]hdwc3_event_buffer}(hj_hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjamodnameN classnameNjnLjqL)}jtL]jwL)}jjLdwc3_alloc_one_event_buffersbc.dwc3_alloc_one_event_bufferasbuh1hhj<hhhjMhMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj<hhhjMhMubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhj<hhhjMhMubjT)}(hdwc3_alloc_one_event_bufferh]jZ)}(hj}h]hdwc3_alloc_one_event_buffer}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj<hhhjMhMubjL)}(h'(struct dwc3 *dwc, unsigned int length)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjǍhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hj؍hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjՍubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjڍmodnameN classnameNjnLjqL)}jtL]j{c.dwc3_alloc_one_event_bufferasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubjL)}(hunsigned int lengthh](jO)}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj&ubjC)}(h h]h }(hj8hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj&ubjO)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj&ubjC)}(h h]h }(hjThhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj&ubjZ)}(hlengthh]hlength}(hjbhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubeh}(h]h ]h"]h$]h&]jjuh1jLhj<hhhjMhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj8hhhjMhMubah}(h]j3ah ](j}j~eh"]h$]h&]jj)jhuh1j$hjMhMhj5hhubj)}(hhh]h)}(h$Allocates one event buffer structureh]h$Allocates one event buffer structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structure ``unsigned int length`` size of the event buffer **Description** Returns a pointer to the allocated event buffer structure on success otherwise ERR_PTR(errno).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh](j)}(hA``struct dwc3 *dwc`` Pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hj͎h]hstruct dwc3 *dwc}(hjώhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˎubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjǎubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǎubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĎubj)}(h1``unsigned int length`` size of the event buffer h](j)}(h``unsigned int length``h]j)}(hjh]hunsigned int length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]h)}(hsize of the event bufferh]hsize of the event buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjĎubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubh)}(h^Returns a pointer to the allocated event buffer structure on success otherwise ERR_PTR(errno).h]h^Returns a pointer to the allocated event buffer structure on success otherwise ERR_PTR(errno).}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$dwc3_free_event_buffers (C function)c.dwc3_free_event_buffershNtauh1jhjhhhNhNubj )}(hhh](j%)}(h/void dwc3_free_event_buffers (struct dwc3 *dwc)h]j+)}(h.void dwc3_free_event_buffers(struct dwc3 *dwc)h](jO)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMubjT)}(hdwc3_free_event_buffersh]jZ)}(hdwc3_free_event_buffersh]hdwc3_free_event_buffers}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjÏhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hjЏhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjޏubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_free_event_buffersasbuh1hhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubah}(h]h ]h"]h$]h&]jjuh1jLhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhj~hhhjhMubah}(h]jyah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhj{hhubj)}(hhh]h)}(h!frees all allocated event buffersh]h!frees all allocated event buffers}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhj{hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(hR**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structureh](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjbubj)}(hhh]j)}(h@``struct dwc3 *dwc`` Pointer to our controller context structureh](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dwc3_alloc_event_buffers (C function)c.dwc3_alloc_event_buffershNtauh1jhjhhhNhNubj )}(hhh](j%)}(hDint dwc3_alloc_event_buffers (struct dwc3 *dwc, unsigned int length)h]j+)}(hCint dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned int length)h](jO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjݐhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjݐhhhjhMubjT)}(hdwc3_alloc_event_buffersh]jZ)}(hdwc3_alloc_event_buffersh]hdwc3_alloc_event_buffers}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjݐhhhjhMubjL)}(h'(struct dwc3 *dwc, unsigned int length)h](jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjubjC)}(h h]h }(hj+hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hj<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetj>modnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_alloc_event_buffersasbuh1hhjubjC)}(h h]h }(hj\hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjL)}(hjLh]h*}(hjjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjubjZ)}(hdwch]hdwc}(hjwhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubjL)}(hunsigned int lengthh](jO)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjubjZ)}(hlengthh]hlength}(hjȑhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjubeh}(h]h ]h"]h$]h&]jjuh1jLhjݐhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjِhhhjhMubah}(h]jԐah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhj֐hhubj)}(hhh]h)}(h2Allocates **num** event buffers of size **length**h](h Allocates }(hjhhhNhNubj)}(h**num**h]hnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh event buffers of size }(hjhhhNhNubj)}(h **length**h]hlength}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhj֐hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj*jj*jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3 *dwc`` pointer to our controller context structure ``unsigned int length`` size of event buffer **Description** Returns 0 on success otherwise negative errno. In the error case, dwc may contain some buffers allocated but not all which were requested.h](h)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhj.ubj)}(hhh](j)}(hA``struct dwc3 *dwc`` pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjSh]hstruct dwc3 *dwc}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM hjMubj)}(hhh]h)}(h+pointer to our controller context structureh]h+pointer to our controller context structure}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM hjJubj)}(h-``unsigned int length`` size of event buffer h](j)}(h``unsigned int length``h]j)}(hjh]hunsigned int length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM hjubj)}(hhh]h)}(hsize of event bufferh]hsize of event buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjJubeh}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjǒh]h Description}(hjɒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŒubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhj.ubh)}(hReturns 0 on success otherwise negative errno. In the error case, dwc may contain some buffers allocated but not all which were requested.h]hReturns 0 on success otherwise negative errno. In the error case, dwc may contain some buffers allocated but not all which were requested.}(hjݒhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%dwc3_event_buffers_setup (C function)c.dwc3_event_buffers_setuphNtauh1jhjhhhNhNubj )}(hhh](j%)}(h/int dwc3_event_buffers_setup (struct dwc3 *dwc)h]j+)}(h.int dwc3_event_buffers_setup(struct dwc3 *dwc)h](jO)}(hinth]hint}(hj hhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM-ubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhM-ubjT)}(hdwc3_event_buffers_setuph]jZ)}(hdwc3_event_buffers_setuph]hdwc3_event_buffers_setup}(hj-hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj)ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhM-ubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjIKhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjEubjC)}(h h]h }(hjVhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjEubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjghhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjdubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjimodnameN classnameNjnLjqL)}jtL]jwL)}jjLj/sbc.dwc3_event_buffers_setupasbuh1hhjEubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjEubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjEubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjAubah}(h]h ]h"]h$]h&]jjuh1jLhjhhhjhM-ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhM-ubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhM-hjhhubj)}(hhh]h)}(h!setup our allocated event buffersh]h!setup our allocated event buffers}(hj̓hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM(hjɓhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM-ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` pointer to our controller context structure **Description** Returns 0 on success otherwise negative errno.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM,hjubj)}(hhh]j)}(hA``struct dwc3 *dwc`` pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hj h]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM)hjubj)}(hhh]h)}(h+pointer to our controller context structureh]h+pointer to our controller context structure}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM)hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM)hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM+hjubh)}(h.Returns 0 on success otherwise negative errno.h]h.Returns 0 on success otherwise negative errno.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM+hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_phy_setup (C function)c.dwc3_phy_setuphNtauh1jhjhhhNhNubj )}(hhh](j%)}(h%int dwc3_phy_setup (struct dwc3 *dwc)h]j+)}(h$int dwc3_phy_setup(struct dwc3 *dwc)h](jO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhjhhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjhhhjhMubjT)}(hdwc3_phy_setuph]jZ)}(hdwc3_phy_setuph]hdwc3_phy_setup}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ](jljmeh"]h$]h&]jjuh1jShjhhhjhMubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjʔhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjƔubjC)}(h h]h }(hjהhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjƔubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjmodnameN classnameNjnLjqL)}jtL]jwL)}jjLjsbc.dwc3_phy_setupasbuh1hhjƔubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjƔubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjƔubjZ)}(hdwch]hdwc}(hj#hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjƔubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhj”ubah}(h]h ]h"]h$]h&]jjuh1jLhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhMubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhMhjhhubj)}(hhh]h)}(h(Configure USB PHY Interface of DWC3 Coreh]h(Configure USB PHY Interface of DWC3 Core}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM hjJhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structure **Description** Returns 0 on success. The USB PHY interfaces are configured but not initialized. The PHY interfaces and the PHYs get initialized together with the core in dwc3_core_init.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjiubj)}(hhh]j)}(hA``struct dwc3 *dwc`` Pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j)}(hjɕh]h Description}(hj˕hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǕubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjiubh)}(hReturns 0 on success. The USB PHY interfaces are configured but not initialized. The PHY interfaces and the PHYs get initialized together with the core in dwc3_core_init.h]hReturns 0 on success. The USB PHY interfaces are configured but not initialized. The PHY interfaces and the PHYs get initialized together with the core in dwc3_core_init.}(hjߕhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdwc3_core_init (C function)c.dwc3_core_inithNtauh1jhjhhhNhNubj )}(hhh](j%)}(h%int dwc3_core_init (struct dwc3 *dwc)h]j+)}(h$int dwc3_core_init(struct dwc3 *dwc)h](jO)}(hinth]hint}(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jOhj hhh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM0ubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhj hhhjhM0ubjT)}(hdwc3_core_inith]jZ)}(hdwc3_core_inith]hdwc3_core_init}(hj/hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhj+ubah}(h]h ](jljmeh"]h$]h&]jjuh1jShj hhhjhM0ubjL)}(h(struct dwc3 *dwc)h]jL)}(hstruct dwc3 *dwch](j1)}(hj4h]hstruct}(hjKhhhNhNubah}(h]h ]j=ah"]h$]h&]uh1j0hjGubjC)}(h h]h }(hjXhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjGubh)}(hhh]jZ)}(hdwc3h]hdwc3}(hjihhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjfubah}(h]h ]h"]h$]h&] refdomainjreftypejjL reftargetjkmodnameN classnameNjnLjqL)}jtL]jwL)}jjLj1sbc.dwc3_core_initasbuh1hhjGubjC)}(h h]h }(hjhhhNhNubah}(h]h ]jOah"]h$]h&]uh1jBhjGubjL)}(hjLh]h*}(hjhhhNhNubah}(h]h ]jMah"]h$]h&]uh1jLhjGubjZ)}(hdwch]hdwc}(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jYhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jLhjCubah}(h]h ]h"]h$]h&]jjuh1jLhj hhhjhM0ubeh}(h]h ]h"]h$]h&]jjjwuh1j*jxjyhjhhhjhM0ubah}(h]jah ](j}j~eh"]h$]h&]jj)jhuh1j$hjhM0hjhhubj)}(hhh]h)}(h%Low-level initialization of DWC3 Coreh]h%Low-level initialization of DWC3 Core}(hjΖhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM+hj˖hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct dwc3 *dwc`` Pointer to our controller context structure **Description** Returns 0 on success otherwise negative errno.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM/hjubj)}(hhh]j)}(hA``struct dwc3 *dwc`` Pointer to our controller context structure h](j)}(h``struct dwc3 *dwc``h]j)}(hjh]hstruct dwc3 *dwc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM,hj ubj)}(hhh]h)}(h+Pointer to our controller context structureh]h+Pointer to our controller context structure}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM,hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM,hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM.hjubh)}(h.Returns 0 on success otherwise negative errno.h]h.Returns 0 on success otherwise negative errno.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/driver-api/usb/dwc3:699: ./drivers/usb/dwc3/core.chM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubhfootnote)}(hTransfer Request Blockh](hlabel)}(hhh]h1}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j|hjxhhhNhNubh)}(hjzh]hTransfer Request Block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjxubeh}(h]jah ]h"]trbah$]h&](jjxjRejKjjuh1jvhhhMhjhhubjw)}(hBTransfer Request Block pointing to another Transfer Request Block.h](j})}(hhh]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j|hjhhhNhNubh)}(hBTransfer Request Block pointing to another Transfer Request Block.h]hBTransfer Request Block pointing to another Transfer Request Block.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]jjah ]h"]link_trbah$]h&]jeajKjjuh1jvhhhMhjhhubjw)}(hThe Debug File Systemh](j})}(hhh]h3}(hjɗhhhNhNubah}(h]h ]h"]h$]h&]uh1j|hjŗhhhNhNubh)}(hjǗh]hThe Debug File System}(hj֗hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjŗubeh}(h]jtah ]h"]j?ah$]h&](jojaejKjjuh1jvhhhMhjhhubjw)}(hThe Config File Systemh](j})}(hhh]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j|hjhhhNhNubh)}(hjh]hThe Config File System}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]jah ]h"]configfsah$]h&]jajKjjuh1jvhhhMhjhhubjw)}(hCommand Block Wrapperh](j})}(hhh]h5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j|hjhhhNhNubh)}(hjh]hCommand Block Wrapper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]jah ]h"]cbwah$]h&]jajKjjuh1jvhhhMhjhhubhtarget)}(hT.. _Linus' tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/h]h}(h] linus-treeah ]h"] linus' treeah$]h&]jjuh1j3hMhjhhhhjAKubj4)}(h$.. _me: felipe.balbi@linux.intel.comh]h}(h]meah ]h"]meah$]h&]jj'uh1j3hMhjhhhhjAKubj4)}(h(.. _linux-usb: linux-usb@vger.kernel.orgh]h}(h] linux-usbah ]h"] linux-usbah$]h&]jj<uh1j3hMhjhhhhjAKubeh}(h]"structures-methods-and-definitionsah ]h"]#structures, methods and definitionsah$]h&]uh1hhhhhhhhMubeh}(h]6synopsys-designware-core-superspeed-usb-3-0-controllerah ]h"]6synopsys designware core superspeed usb 3.0 controllerah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}(trb](jjnjHedebugfs](jejWeconfigfs]jacbw]jalink_trb]j[a linus' tree]jame](jj e linux-usb](j,j' eurefids}(j](jjnjHejj]j[ajt](jejWej]jaj]jaunameids}(jfjcjjjjj3j0jjj,j)jjjjjjjjdebugfsjtj@ j= j j j> j; j6j3j j j.j+jjjjj:j7j}jzjjjjj<j9jjjjj^j[jjj—jjj jj0jj>j;jJjGjVjSu nametypes}(jfjjj3jj,jjjjjj@ j j> j6j j.jjj:j}jjj<jjj^jj—j j0j>jJjVuh}(jchjj=jjjjjojejjj0jjj6j)jUjxjnjjjj/jRjHjej[jjjj>jajWjjj;jA j= j j jC j; j j3jA j jC j+j jjBjjj7jjzj=jjjjj9j jj?jjj[jjj&jjjjjjjjjb"jg"jBjBjEjEj'Gj,GjHjHjJjJjDLjILjMjMjOjOjpQjuQjSjSj Uj%Uj"Wj'WjYjYjZjZj\j\j^j^jq_jv_j`j`jvcj{cj8fj=fjgijlijkjkjmjmjnjnjypj~pjrjrjtjtjQvjVvjzjzj ~j~jgjljBjGjj!jjjj#jyj~jԉjىj/j4j3j8jyj~jԐjِjjjjjjjjxjjjjtjŗjjjjj;j5jGjAjSjMu footnote_refs}(j̘](jjnjHejΘ](jejWejИ]jajҘ]jajԘ]j[au citation_refs} autofootnotes](jxjjŗjjeautofootnote_refs](jjejjnjjHj[jWesymbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages]hsystem_message)}(hhh]h)}(h*Duplicate implicit target name: "debugfs".h]h.Duplicate implicit target name: “debugfs”.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jtalevelKtypeINFOsourcehlineMuh1j hjŗubatransform_messages] transformerN include_log] decorationNhhub.