PageRenderTime 91ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/usb/host/dwc_otg/doc/html/dwc__otg__hcd__intr_8c-source.html

https://bitbucket.org/agherzan/raspberrypi-linux
HTML | 1873 lines | 1872 code | 0 blank | 1 comment | 0 complexity | ea8ac060f57fc71c1c1a6f4c7efb5612 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
  3. <title>DesignWare USB 2.0 OTG Controller (DWC_otg) Device Driver: dwc_otg_hcd_intr.c Source File</title>
  4. <link href="doxygen.css" rel="stylesheet" type="text/css">
  5. <link href="tabs.css" rel="stylesheet" type="text/css">
  6. </head><body>
  7. <!-- Generated by Doxygen 1.4.7 -->
  8. <div class="tabs">
  9. <ul>
  10. <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
  11. <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
  12. <li id="current"><a href="files.html"><span>Files</span></a></li>
  13. <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  14. </ul></div>
  15. <div class="tabs">
  16. <ul>
  17. <li><a href="files.html"><span>File&nbsp;List</span></a></li>
  18. <li><a href="globals.html"><span>Globals</span></a></li>
  19. </ul></div>
  20. <h1>dwc_otg_hcd_intr.c</h1><a href="dwc__otg__hcd__intr_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ==========================================================================</span>
  21. <a name="l00002"></a>00002 <span class="comment"> * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_intr.c $</span>
  22. <a name="l00003"></a>00003 <span class="comment"> * $Revision: #77 $</span>
  23. <a name="l00004"></a>00004 <span class="comment"> * $Date: 2009/04/21 $</span>
  24. <a name="l00005"></a>00005 <span class="comment"> * $Change: 1237475 $</span>
  25. <a name="l00006"></a>00006 <span class="comment"> *</span>
  26. <a name="l00007"></a>00007 <span class="comment"> * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,</span>
  27. <a name="l00008"></a>00008 <span class="comment"> * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless</span>
  28. <a name="l00009"></a>00009 <span class="comment"> * otherwise expressly agreed to in writing between Synopsys and you.</span>
  29. <a name="l00010"></a>00010 <span class="comment"> *</span>
  30. <a name="l00011"></a>00011 <span class="comment"> * The Software IS NOT an item of Licensed Software or Licensed Product under</span>
  31. <a name="l00012"></a>00012 <span class="comment"> * any End User Software License Agreement or Agreement for Licensed Product</span>
  32. <a name="l00013"></a>00013 <span class="comment"> * with Synopsys or any supplement thereto. You are permitted to use and</span>
  33. <a name="l00014"></a>00014 <span class="comment"> * redistribute this Software in source and binary forms, with or without</span>
  34. <a name="l00015"></a>00015 <span class="comment"> * modification, provided that redistributions of source code must retain this</span>
  35. <a name="l00016"></a>00016 <span class="comment"> * notice. You may not view, use, disclose, copy or distribute this file or</span>
  36. <a name="l00017"></a>00017 <span class="comment"> * any information contained herein except pursuant to this license grant from</span>
  37. <a name="l00018"></a>00018 <span class="comment"> * Synopsys. If you do not agree with this notice, including the disclaimer</span>
  38. <a name="l00019"></a>00019 <span class="comment"> * below, then you are not authorized to use the Software.</span>
  39. <a name="l00020"></a>00020 <span class="comment"> *</span>
  40. <a name="l00021"></a>00021 <span class="comment"> * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS</span>
  41. <a name="l00022"></a>00022 <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
  42. <a name="l00023"></a>00023 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
  43. <a name="l00024"></a>00024 <span class="comment"> * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,</span>
  44. <a name="l00025"></a>00025 <span class="comment"> * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span>
  45. <a name="l00026"></a>00026 <span class="comment"> * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR</span>
  46. <a name="l00027"></a>00027 <span class="comment"> * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER</span>
  47. <a name="l00028"></a>00028 <span class="comment"> * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
  48. <a name="l00029"></a>00029 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
  49. <a name="l00030"></a>00030 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH</span>
  50. <a name="l00031"></a>00031 <span class="comment"> * DAMAGE.</span>
  51. <a name="l00032"></a>00032 <span class="comment"> * ========================================================================== */</span>
  52. <a name="l00033"></a>00033 <span class="preprocessor">#ifndef DWC_DEVICE_ONLY</span>
  53. <a name="l00034"></a>00034 <span class="preprocessor"></span>
  54. <a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="dwc__otg__hcd_8h.html">dwc_otg_hcd.h</a>"</span>
  55. <a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="dwc__otg__regs_8h.html">dwc_otg_regs.h</a>"</span>
  56. <a name="l00037"></a>00037
  57. <a name="l00043"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#b9dde24773f2741b9ff67e2d46760dc0">00043</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#b9dde24773f2741b9ff67e2d46760dc0">dwc_otg_hcd_handle_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * <a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd</a>)
  58. <a name="l00044"></a>00044 {
  59. <a name="l00045"></a>00045 <span class="keywordtype">int</span> retval = 0;
  60. <a name="l00046"></a>00046
  61. <a name="l00047"></a>00047 <a class="code" href="structdwc__otg__core__if.html">dwc_otg_core_if_t</a> *core_if = dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>;
  62. <a name="l00048"></a>00048 <a class="code" href="uniongintsts__data.html">gintsts_data_t</a> gintsts;
  63. <a name="l00049"></a>00049 <span class="preprocessor">#ifdef DEBUG</span>
  64. <a name="l00050"></a>00050 <span class="preprocessor"></span> <a class="code" href="structdwc__otg__core__global__regs.html">dwc_otg_core_global_regs_t</a> *global_regs = core_if-&gt;<a class="code" href="structdwc__otg__core__if.html#909eae7e3b9432ca1e278b99f7811f52">core_global_regs</a>;
  65. <a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
  66. <a name="l00052"></a>00052 <span class="preprocessor"></span>
  67. <a name="l00053"></a>00053 <span class="comment">/* Check if HOST Mode */</span>
  68. <a name="l00054"></a>00054 <span class="keywordflow">if</span> (<a class="code" href="dwc__otg__cil_8c.html#f0bfe5f933e21a94ea06c96ffc086e72">dwc_otg_is_host_mode</a>(core_if)) {
  69. <a name="l00055"></a>00055 gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a> = <a class="code" href="dwc__otg__cil_8h.html#639809e3c27026b8f956c2a133b1d433">dwc_otg_read_core_intr</a>(core_if);
  70. <a name="l00056"></a>00056 <span class="keywordflow">if</span> (!gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a>) {
  71. <a name="l00057"></a>00057 <span class="keywordflow">return</span> 0;
  72. <a name="l00058"></a>00058 }
  73. <a name="l00059"></a>00059 <span class="preprocessor">#ifdef DEBUG</span>
  74. <a name="l00060"></a>00060 <span class="preprocessor"></span> <span class="comment">/* Don't print debug message in the interrupt handler on SOF */</span>
  75. <a name="l00061"></a>00061 <span class="preprocessor">#ifndef DEBUG_SOF</span>
  76. <a name="l00062"></a>00062 <span class="preprocessor"></span> <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a> != <a class="code" href="dwc__otg__regs_8h.html#8cd1d59e0700e5b528deebdea7a7ac76">DWC_SOF_INTR_MASK</a>)
  77. <a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
  78. <a name="l00064"></a>00064 <span class="preprocessor"></span> <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"\n"</span>);
  79. <a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
  80. <a name="l00066"></a>00066 <span class="preprocessor"></span>
  81. <a name="l00067"></a>00067 <span class="preprocessor">#ifdef DEBUG</span>
  82. <a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#ifndef DEBUG_SOF</span>
  83. <a name="l00069"></a>00069 <span class="preprocessor"></span> <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a> != <a class="code" href="dwc__otg__regs_8h.html#8cd1d59e0700e5b528deebdea7a7ac76">DWC_SOF_INTR_MASK</a>)
  84. <a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
  85. <a name="l00071"></a>00071 <span class="preprocessor"></span> <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(DBG_HCD,
  86. <a name="l00072"></a>00072 <span class="stringliteral">"DWC OTG HCD Interrupt Detected gintsts&amp;gintmsk=0x%08x\n"</span>,
  87. <a name="l00073"></a>00073 gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a>);
  88. <a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
  89. <a name="l00075"></a>00075 <span class="preprocessor"></span>
  90. <a name="l00076"></a>00076 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#3f6ba377d6b1449884bb4da1b155c61b">sofintr</a>) {
  91. <a name="l00077"></a>00077 retval |= <a class="code" href="dwc__otg__hcd_8h.html#0eea8527657802e9cf0a62a00bd44a1d">dwc_otg_hcd_handle_sof_intr</a>(dwc_otg_hcd);
  92. <a name="l00078"></a>00078 }
  93. <a name="l00079"></a>00079 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#7595576956c3a0ced9ea387880943012">rxstsqlvl</a>) {
  94. <a name="l00080"></a>00080 retval |=
  95. <a name="l00081"></a>00081 <a class="code" href="dwc__otg__hcd_8h.html#9d979e33e04fc694a72242dec63aeb89">dwc_otg_hcd_handle_rx_status_q_level_intr</a>
  96. <a name="l00082"></a>00082 (dwc_otg_hcd);
  97. <a name="l00083"></a>00083 }
  98. <a name="l00084"></a>00084 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#adebf5ff5bdf69a2bcf0bd4b2ba55ef4">nptxfempty</a>) {
  99. <a name="l00085"></a>00085 retval |=
  100. <a name="l00086"></a>00086 <a class="code" href="dwc__otg__hcd_8h.html#51c953aefbc2382adee9f585fdb26f35">dwc_otg_hcd_handle_np_tx_fifo_empty_intr</a>
  101. <a name="l00087"></a>00087 (dwc_otg_hcd);
  102. <a name="l00088"></a>00088 }
  103. <a name="l00089"></a>00089 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#2e8bd51ad285fd46db48f9fb5bbb7993">i2cintr</a>) {
  104. <a name="l00091"></a>00091 }
  105. <a name="l00092"></a>00092 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#7490e48c2c93d20c182f00161f18b8e5">portintr</a>) {
  106. <a name="l00093"></a>00093 retval |= <a class="code" href="dwc__otg__hcd_8h.html#18bb807c86935a45f5fe5940e5ded70c">dwc_otg_hcd_handle_port_intr</a>(dwc_otg_hcd);
  107. <a name="l00094"></a>00094 }
  108. <a name="l00095"></a>00095 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#e02f1a50b20ed1c4248fd76e155147e8">hcintr</a>) {
  109. <a name="l00096"></a>00096 retval |= <a class="code" href="dwc__otg__hcd_8h.html#1f28e296c0bc4146da309385d95b5d7e">dwc_otg_hcd_handle_hc_intr</a>(dwc_otg_hcd);
  110. <a name="l00097"></a>00097 }
  111. <a name="l00098"></a>00098 <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#54ed752629e9b8916507beca28d76162">ptxfempty</a>) {
  112. <a name="l00099"></a>00099 retval |=
  113. <a name="l00100"></a>00100 <a class="code" href="dwc__otg__hcd_8h.html#dcfa21f80c7732df9aaf3db59a86eb1d">dwc_otg_hcd_handle_perio_tx_fifo_empty_intr</a>
  114. <a name="l00101"></a>00101 (dwc_otg_hcd);
  115. <a name="l00102"></a>00102 }
  116. <a name="l00103"></a>00103 <span class="preprocessor">#ifdef DEBUG</span>
  117. <a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#ifndef DEBUG_SOF</span>
  118. <a name="l00105"></a>00105 <span class="preprocessor"></span> <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a> != <a class="code" href="dwc__otg__regs_8h.html#8cd1d59e0700e5b528deebdea7a7ac76">DWC_SOF_INTR_MASK</a>)
  119. <a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
  120. <a name="l00107"></a>00107 <span class="preprocessor"></span> {
  121. <a name="l00108"></a>00108 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(DBG_HCD,
  122. <a name="l00109"></a>00109 <span class="stringliteral">"DWC OTG HCD Finished Servicing Interrupts\n"</span>);
  123. <a name="l00110"></a>00110 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">"DWC OTG HCD gintsts=0x%08x\n"</span>,
  124. <a name="l00111"></a>00111 dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#aa1d909e3b0a60a56bf612968ff09019">gintsts</a>));
  125. <a name="l00112"></a>00112 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">"DWC OTG HCD gintmsk=0x%08x\n"</span>,
  126. <a name="l00113"></a>00113 dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#48827c76da2c6b18f369e2f2483cc4b6">gintmsk</a>));
  127. <a name="l00114"></a>00114 }
  128. <a name="l00115"></a>00115 <span class="preprocessor">#endif</span>
  129. <a name="l00116"></a>00116 <span class="preprocessor"></span>
  130. <a name="l00117"></a>00117 <span class="preprocessor">#ifdef DEBUG</span>
  131. <a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#ifndef DEBUG_SOF</span>
  132. <a name="l00119"></a>00119 <span class="preprocessor"></span> <span class="keywordflow">if</span> (gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a> != <a class="code" href="dwc__otg__regs_8h.html#8cd1d59e0700e5b528deebdea7a7ac76">DWC_SOF_INTR_MASK</a>)
  133. <a name="l00120"></a>00120 <span class="preprocessor">#endif</span>
  134. <a name="l00121"></a>00121 <span class="preprocessor"></span> <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(DBG_HCD, <span class="stringliteral">"\n"</span>);
  135. <a name="l00122"></a>00122 <span class="preprocessor">#endif</span>
  136. <a name="l00123"></a>00123 <span class="preprocessor"></span>
  137. <a name="l00124"></a>00124 }
  138. <a name="l00125"></a>00125
  139. <a name="l00126"></a>00126 <span class="keywordflow">return</span> retval;
  140. <a name="l00127"></a>00127 }
  141. <a name="l00128"></a>00128
  142. <a name="l00129"></a>00129 <span class="preprocessor">#ifdef DWC_TRACK_MISSED_SOFS</span>
  143. <a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#warning Compiling code to track missed SOFs</span>
  144. <a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#define FRAME_NUM_ARRAY_SIZE 1000</span>
  145. <a name="l00132"></a>00132 <span class="preprocessor"></span>
  146. <a name="l00135"></a>00135 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> track_missed_sofs(uint16_t curr_frame_number)
  147. <a name="l00136"></a>00136 {
  148. <a name="l00137"></a>00137 <span class="keyword">static</span> uint16_t frame_num_array[FRAME_NUM_ARRAY_SIZE];
  149. <a name="l00138"></a>00138 <span class="keyword">static</span> uint16_t last_frame_num_array[FRAME_NUM_ARRAY_SIZE];
  150. <a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">int</span> frame_num_idx = 0;
  151. <a name="l00140"></a>00140 <span class="keyword">static</span> uint16_t last_frame_num = <a class="code" href="dwc__otg__regs_8h.html#4903938414e67044883b7df5582d6eed">DWC_HFNUM_MAX_FRNUM</a>;
  152. <a name="l00141"></a>00141 <span class="keyword">static</span> <span class="keywordtype">int</span> dumped_frame_num_array = 0;
  153. <a name="l00142"></a>00142
  154. <a name="l00143"></a>00143 <span class="keywordflow">if</span> (frame_num_idx &lt; FRAME_NUM_ARRAY_SIZE) {
  155. <a name="l00144"></a>00144 <span class="keywordflow">if</span> (((last_frame_num + 1) &amp; <a class="code" href="dwc__otg__regs_8h.html#4903938414e67044883b7df5582d6eed">DWC_HFNUM_MAX_FRNUM</a>) !=
  156. <a name="l00145"></a>00145 curr_frame_number) {
  157. <a name="l00146"></a>00146 frame_num_array[frame_num_idx] = curr_frame_number;
  158. <a name="l00147"></a>00147 last_frame_num_array[frame_num_idx++] = last_frame_num;
  159. <a name="l00148"></a>00148 }
  160. <a name="l00149"></a>00149 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!dumped_frame_num_array) {
  161. <a name="l00150"></a>00150 <span class="keywordtype">int</span> i;
  162. <a name="l00151"></a>00151 DWC_PRINTF(<span class="stringliteral">"Frame Last Frame\n"</span>);
  163. <a name="l00152"></a>00152 DWC_PRINTF(<span class="stringliteral">"----- ----------\n"</span>);
  164. <a name="l00153"></a>00153 <span class="keywordflow">for</span> (i = 0; i &lt; FRAME_NUM_ARRAY_SIZE; i++) {
  165. <a name="l00154"></a>00154 DWC_PRINTF(<span class="stringliteral">"0x%04x 0x%04x\n"</span>,
  166. <a name="l00155"></a>00155 frame_num_array[i], last_frame_num_array[i]);
  167. <a name="l00156"></a>00156 }
  168. <a name="l00157"></a>00157 dumped_frame_num_array = 1;
  169. <a name="l00158"></a>00158 }
  170. <a name="l00159"></a>00159 last_frame_num = curr_frame_number;
  171. <a name="l00160"></a>00160 }
  172. <a name="l00161"></a>00161 <span class="preprocessor">#endif</span>
  173. <a name="l00162"></a>00162 <span class="preprocessor"></span>
  174. <a name="l00169"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#bbf5740390826d69bba80651ef9bd725">00169</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#0eea8527657802e9cf0a62a00bd44a1d">dwc_otg_hcd_handle_sof_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * hcd)
  175. <a name="l00170"></a>00170 {
  176. <a name="l00171"></a>00171 <a class="code" href="unionhfnum__data.html">hfnum_data_t</a> hfnum;
  177. <a name="l00172"></a>00172 dwc_list_link_t *qh_entry;
  178. <a name="l00173"></a>00173 <a class="code" href="structdwc__otg__qh.html">dwc_otg_qh_t</a> *qh;
  179. <a name="l00174"></a>00174 <a class="code" href="dwc__otg__hcd_8h.html#92c49783eebc5bcffa8b8a51c2127be9">dwc_otg_transaction_type_e</a> tr_type;
  180. <a name="l00175"></a>00175 <a class="code" href="uniongintsts__data.html">gintsts_data_t</a> gintsts = {.d32 = 0 };
  181. <a name="l00176"></a>00176
  182. <a name="l00177"></a>00177 hfnum.<a class="code" href="unionhfnum__data.html#e5ccbed3af86ac88577ded328e6c9932">d32</a> =
  183. <a name="l00178"></a>00178 dwc_read_reg32(&amp;hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#51bac71891b5f6f435d7fc4582b974c1">host_if</a>-&gt;<a class="code" href="structdwc__otg__host__if.html#ff9692c2e10ca2bc7e24f981f25179c2">host_global_regs</a>-&gt;<a class="code" href="structdwc__otg__host__global__regs.html#cebb0d86d0776473ef30eeac61e8692c">hfnum</a>);
  184. <a name="l00179"></a>00179
  185. <a name="l00180"></a>00180 <span class="preprocessor">#ifdef DEBUG_SOF</span>
  186. <a name="l00181"></a>00181 <span class="preprocessor"></span> <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"--Start of Frame Interrupt--\n"</span>);
  187. <a name="l00182"></a>00182 <span class="preprocessor">#endif</span>
  188. <a name="l00183"></a>00183 <span class="preprocessor"></span> hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#f79fefeb7908c0ddf702331253acb292">frame_number</a> = hfnum.<a class="code" href="unionhfnum__data.html#81df6fbd20a454665803eb5790855c66">b</a>.<a class="code" href="unionhfnum__data.html#a64e8b6c4a1cd262dbc30e158f3cb8bc">frnum</a>;
  189. <a name="l00184"></a>00184
  190. <a name="l00185"></a>00185 <span class="preprocessor">#ifdef DEBUG</span>
  191. <a name="l00186"></a>00186 <span class="preprocessor"></span> hcd-&gt;frrem_accum += hfnum.<a class="code" href="unionhfnum__data.html#81df6fbd20a454665803eb5790855c66">b</a>.<a class="code" href="unionhfnum__data.html#2a2ce50ebd4c4da5347a2d93c4bbc996">frrem</a>;
  192. <a name="l00187"></a>00187 hcd-&gt;frrem_samples++;
  193. <a name="l00188"></a>00188 <span class="preprocessor">#endif</span>
  194. <a name="l00189"></a>00189 <span class="preprocessor"></span>
  195. <a name="l00190"></a>00190 <span class="preprocessor">#ifdef DWC_TRACK_MISSED_SOFS</span>
  196. <a name="l00191"></a>00191 <span class="preprocessor"></span> track_missed_sofs(hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#f79fefeb7908c0ddf702331253acb292">frame_number</a>);
  197. <a name="l00192"></a>00192 <span class="preprocessor">#endif</span>
  198. <a name="l00193"></a>00193 <span class="preprocessor"></span> <span class="comment">/* Determine whether any periodic QHs should be executed. */</span>
  199. <a name="l00194"></a>00194 qh_entry = DWC_LIST_FIRST(&amp;hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#2a747cacd6bdbacbef86d4157c34a312">periodic_sched_inactive</a>);
  200. <a name="l00195"></a>00195 <span class="keywordflow">while</span> (qh_entry != &amp;hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#2a747cacd6bdbacbef86d4157c34a312">periodic_sched_inactive</a>) {
  201. <a name="l00196"></a>00196 qh = DWC_LIST_ENTRY(qh_entry, <a class="code" href="structdwc__otg__qh.html">dwc_otg_qh_t</a>, qh_list_entry);
  202. <a name="l00197"></a>00197 qh_entry = qh_entry-&gt;next;
  203. <a name="l00198"></a>00198 <span class="keywordflow">if</span> (<a class="code" href="dwc__otg__hcd_8h.html#02aa5e9853fcc705b9b5c839a249e2f8">dwc_frame_num_le</a>(qh-&gt;<a class="code" href="structdwc__otg__qh.html#977a8032f08e45a9e9bdcd558a6965d3">sched_frame</a>, hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#f79fefeb7908c0ddf702331253acb292">frame_number</a>)) {
  204. <a name="l00199"></a>00199 <span class="comment">/*</span>
  205. <a name="l00200"></a>00200 <span class="comment"> * Move QH to the ready list to be executed next</span>
  206. <a name="l00201"></a>00201 <span class="comment"> * (micro)frame.</span>
  207. <a name="l00202"></a>00202 <span class="comment"> */</span>
  208. <a name="l00203"></a>00203 DWC_LIST_MOVE_HEAD(&amp;hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#74b089e094911a558f7b5f24681d3242">periodic_sched_ready</a>,
  209. <a name="l00204"></a>00204 &amp;qh-&gt;<a class="code" href="structdwc__otg__qh.html#3e1cb9863dc72139e1832c04244c25ff">qh_list_entry</a>);
  210. <a name="l00205"></a>00205 }
  211. <a name="l00206"></a>00206 }
  212. <a name="l00207"></a>00207 tr_type = <a class="code" href="dwc__otg__hcd_8c.html#96cc299f4f0478187ed7ba49b975ffc3">dwc_otg_hcd_select_transactions</a>(hcd);
  213. <a name="l00208"></a>00208 <span class="keywordflow">if</span> (tr_type != DWC_OTG_TRANSACTION_NONE) {
  214. <a name="l00209"></a>00209 <a class="code" href="dwc__otg__hcd_8c.html#2f57bf2fc3013d63101f112702b913a0">dwc_otg_hcd_queue_transactions</a>(hcd, tr_type);
  215. <a name="l00210"></a>00210 }
  216. <a name="l00211"></a>00211
  217. <a name="l00212"></a>00212 <span class="comment">/* Clear interrupt */</span>
  218. <a name="l00213"></a>00213 gintsts.<a class="code" href="uniongintsts__data.html#781da5558468e5dbdc93ae95e4cb872e">b</a>.<a class="code" href="uniongintsts__data.html#3f6ba377d6b1449884bb4da1b155c61b">sofintr</a> = 1;
  219. <a name="l00214"></a>00214 dwc_write_reg32(&amp;hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#909eae7e3b9432ca1e278b99f7811f52">core_global_regs</a>-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#aa1d909e3b0a60a56bf612968ff09019">gintsts</a>, gintsts.<a class="code" href="uniongintsts__data.html#379f34f5a95628b735e3a965f9cea12d">d32</a>);
  220. <a name="l00215"></a>00215
  221. <a name="l00216"></a>00216 <span class="keywordflow">return</span> 1;
  222. <a name="l00217"></a>00217 }
  223. <a name="l00218"></a>00218
  224. <a name="l00222"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#9d979e33e04fc694a72242dec63aeb89">00222</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#9d979e33e04fc694a72242dec63aeb89">dwc_otg_hcd_handle_rx_status_q_level_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * <a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd</a>)
  225. <a name="l00223"></a>00223 {
  226. <a name="l00224"></a>00224 <a class="code" href="unionhost__grxsts__data.html">host_grxsts_data_t</a> grxsts;
  227. <a name="l00225"></a>00225 <a class="code" href="structdwc__hc.html">dwc_hc_t</a> *hc = NULL;
  228. <a name="l00226"></a>00226
  229. <a name="l00227"></a>00227 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"--RxStsQ Level Interrupt--\n"</span>);
  230. <a name="l00228"></a>00228
  231. <a name="l00229"></a>00229 grxsts.<a class="code" href="unionhost__grxsts__data.html#993969735da9c3615652391aae76359a">d32</a> =
  232. <a name="l00230"></a>00230 dwc_read_reg32(&amp;dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#909eae7e3b9432ca1e278b99f7811f52">core_global_regs</a>-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#763b05035799e1c16d34957fb62a2d17">grxstsp</a>);
  233. <a name="l00231"></a>00231
  234. <a name="l00232"></a>00232 hc = dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#cb393f6a676fb106e0e3d35396fb97f9">hc_ptr_array</a>[grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#684095394d11ec74a327f945c9e678bf">chnum</a>];
  235. <a name="l00233"></a>00233
  236. <a name="l00234"></a>00234 <span class="comment">/* Packet Status */</span>
  237. <a name="l00235"></a>00235 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">" Ch num = %d\n"</span>, grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#684095394d11ec74a327f945c9e678bf">chnum</a>);
  238. <a name="l00236"></a>00236 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">" Count = %d\n"</span>, grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#026fd4d8ab68825fab038c083b8e9c60">bcnt</a>);
  239. <a name="l00237"></a>00237 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">" DPID = %d, hc.dpid = %d\n"</span>, grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#5c4ca6a6c4a85064dd024095607a634d">dpid</a>,
  240. <a name="l00238"></a>00238 hc-&gt;<a class="code" href="structdwc__hc.html#513427c5e8c4603ba344d4e7f9191064">data_pid_start</a>);
  241. <a name="l00239"></a>00239 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#39931d908ba215b3d5d590e42d8408b5">DBG_HCDV</a>, <span class="stringliteral">" PStatus = %d\n"</span>, grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#6dc2553475a56a445c6e6f319feffac8">pktsts</a>);
  242. <a name="l00240"></a>00240
  243. <a name="l00241"></a>00241 <span class="keywordflow">switch</span> (grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#6dc2553475a56a445c6e6f319feffac8">pktsts</a>) {
  244. <a name="l00242"></a>00242 <span class="keywordflow">case</span> <a class="code" href="dwc__otg__regs_8h.html#d81c89ef7c3e40cfffe9ed08b7136e90">DWC_GRXSTS_PKTSTS_IN</a>:
  245. <a name="l00243"></a>00243 <span class="comment">/* Read the data into the host buffer. */</span>
  246. <a name="l00244"></a>00244 <span class="keywordflow">if</span> (grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#026fd4d8ab68825fab038c083b8e9c60">bcnt</a> &gt; 0) {
  247. <a name="l00245"></a>00245 <a class="code" href="dwc__otg__cil_8c.html#68f59dd23ccfffa9aa1dc590e99b7668">dwc_otg_read_packet</a>(dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>,
  248. <a name="l00246"></a>00246 hc-&gt;<a class="code" href="structdwc__hc.html#9dc781cb9e4bc639765beee37ce76673">xfer_buff</a>, grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#026fd4d8ab68825fab038c083b8e9c60">bcnt</a>);
  249. <a name="l00247"></a>00247
  250. <a name="l00248"></a>00248 <span class="comment">/* Update the HC fields for the next packet received. */</span>
  251. <a name="l00249"></a>00249 hc-&gt;<a class="code" href="structdwc__hc.html#6199aaeab2d64954311c410b30270293">xfer_count</a> += grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#026fd4d8ab68825fab038c083b8e9c60">bcnt</a>;
  252. <a name="l00250"></a>00250 hc-&gt;<a class="code" href="structdwc__hc.html#9dc781cb9e4bc639765beee37ce76673">xfer_buff</a> += grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#026fd4d8ab68825fab038c083b8e9c60">bcnt</a>;
  253. <a name="l00251"></a>00251 }
  254. <a name="l00252"></a>00252
  255. <a name="l00253"></a>00253 <span class="keywordflow">case</span> <a class="code" href="dwc__otg__regs_8h.html#c5c019a36ea5cb66d3cb436292d8c3de">DWC_GRXSTS_PKTSTS_IN_XFER_COMP</a>:
  256. <a name="l00254"></a>00254 <span class="keywordflow">case</span> <a class="code" href="dwc__otg__regs_8h.html#63be63fa3258a785d81ded62ab27b30d">DWC_GRXSTS_PKTSTS_DATA_TOGGLE_ERR</a>:
  257. <a name="l00255"></a>00255 <span class="keywordflow">case</span> <a class="code" href="dwc__otg__regs_8h.html#a6d1e988dc17e285244c4e587440cbef">DWC_GRXSTS_PKTSTS_CH_HALTED</a>:
  258. <a name="l00256"></a>00256 <span class="comment">/* Handled in interrupt, just ignore data */</span>
  259. <a name="l00257"></a>00257 <span class="keywordflow">break</span>;
  260. <a name="l00258"></a>00258 <span class="keywordflow">default</span>:
  261. <a name="l00259"></a>00259 DWC_ERROR(<span class="stringliteral">"RX_STS_Q Interrupt: Unknown status %d\n"</span>,
  262. <a name="l00260"></a>00260 grxsts.<a class="code" href="unionhost__grxsts__data.html#9d67ba193008dd6afa7fe613c665238d">b</a>.<a class="code" href="unionhost__grxsts__data.html#6dc2553475a56a445c6e6f319feffac8">pktsts</a>);
  263. <a name="l00261"></a>00261 <span class="keywordflow">break</span>;
  264. <a name="l00262"></a>00262 }
  265. <a name="l00263"></a>00263
  266. <a name="l00264"></a>00264 <span class="keywordflow">return</span> 1;
  267. <a name="l00265"></a>00265 }
  268. <a name="l00266"></a>00266
  269. <a name="l00271"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#51c953aefbc2382adee9f585fdb26f35">00271</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#51c953aefbc2382adee9f585fdb26f35">dwc_otg_hcd_handle_np_tx_fifo_empty_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * <a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd</a>)
  270. <a name="l00272"></a>00272 {
  271. <a name="l00273"></a>00273 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"--Non-Periodic TxFIFO Empty Interrupt--\n"</span>);
  272. <a name="l00274"></a>00274 <a class="code" href="dwc__otg__hcd_8c.html#2f57bf2fc3013d63101f112702b913a0">dwc_otg_hcd_queue_transactions</a>(dwc_otg_hcd,
  273. <a name="l00275"></a>00275 DWC_OTG_TRANSACTION_NON_PERIODIC);
  274. <a name="l00276"></a>00276 <span class="keywordflow">return</span> 1;
  275. <a name="l00277"></a>00277 }
  276. <a name="l00278"></a>00278
  277. <a name="l00283"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#dcfa21f80c7732df9aaf3db59a86eb1d">00283</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#dcfa21f80c7732df9aaf3db59a86eb1d">dwc_otg_hcd_handle_perio_tx_fifo_empty_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * <a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd</a>)
  278. <a name="l00284"></a>00284 {
  279. <a name="l00285"></a>00285 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"--Periodic TxFIFO Empty Interrupt--\n"</span>);
  280. <a name="l00286"></a>00286 <a class="code" href="dwc__otg__hcd_8c.html#2f57bf2fc3013d63101f112702b913a0">dwc_otg_hcd_queue_transactions</a>(dwc_otg_hcd,
  281. <a name="l00287"></a>00287 DWC_OTG_TRANSACTION_PERIODIC);
  282. <a name="l00288"></a>00288 <span class="keywordflow">return</span> 1;
  283. <a name="l00289"></a>00289 }
  284. <a name="l00290"></a>00290
  285. <a name="l00294"></a><a class="code" href="dwc__otg__hcd__intr_8c.html#18bb807c86935a45f5fe5940e5ded70c">00294</a> int32_t <a class="code" href="dwc__otg__hcd_8h.html#18bb807c86935a45f5fe5940e5ded70c">dwc_otg_hcd_handle_port_intr</a>(<a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd_t</a> * <a class="code" href="structdwc__otg__hcd.html">dwc_otg_hcd</a>)
  286. <a name="l00295"></a>00295 {
  287. <a name="l00296"></a>00296 <span class="keywordtype">int</span> retval = 0;
  288. <a name="l00297"></a>00297 <a class="code" href="unionhprt0__data.html">hprt0_data_t</a> hprt0;
  289. <a name="l00298"></a>00298 <a class="code" href="unionhprt0__data.html">hprt0_data_t</a> hprt0_modify;
  290. <a name="l00299"></a>00299
  291. <a name="l00300"></a>00300 hprt0.<a class="code" href="unionhprt0__data.html#88e9271f697d2ec209fc6a6da67fe216">d32</a> = dwc_read_reg32(dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#51bac71891b5f6f435d7fc4582b974c1">host_if</a>-&gt;<a class="code" href="structdwc__otg__host__if.html#dc8fe33e0bb3829cafa884d5fc603c4d">hprt0</a>);
  292. <a name="l00301"></a>00301 hprt0_modify.<a class="code" href="unionhprt0__data.html#88e9271f697d2ec209fc6a6da67fe216">d32</a> = dwc_read_reg32(dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#51bac71891b5f6f435d7fc4582b974c1">host_if</a>-&gt;<a class="code" href="structdwc__otg__host__if.html#dc8fe33e0bb3829cafa884d5fc603c4d">hprt0</a>);
  293. <a name="l00302"></a>00302
  294. <a name="l00303"></a>00303 <span class="comment">/* Clear appropriate bits in HPRT0 to clear the interrupt bit in</span>
  295. <a name="l00304"></a>00304 <span class="comment"> * GINTSTS */</span>
  296. <a name="l00305"></a>00305
  297. <a name="l00306"></a>00306 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#a964274b5d22e89ca4490f66dff3c763">prtena</a> = 0;
  298. <a name="l00307"></a>00307 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#5124a40eeafd92c9632c91a2c3132937">prtconndet</a> = 0;
  299. <a name="l00308"></a>00308 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#75eae10eb537e49cc1ae2dc01c18aa47">prtenchng</a> = 0;
  300. <a name="l00309"></a>00309 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#cc51da1d52cb824d419ef3feb6ba70b6">prtovrcurrchng</a> = 0;
  301. <a name="l00310"></a>00310
  302. <a name="l00311"></a>00311 <span class="comment">/* Port Connect Detected</span>
  303. <a name="l00312"></a>00312 <span class="comment"> * Set flag and clear if detected */</span>
  304. <a name="l00313"></a>00313 <span class="keywordflow">if</span> (hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#5124a40eeafd92c9632c91a2c3132937">prtconndet</a>) {
  305. <a name="l00314"></a>00314 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">"--Port Interrupt HPRT0=0x%08x "</span>
  306. <a name="l00315"></a>00315 <span class="stringliteral">"Port Connect Detected--\n"</span>, hprt0.<a class="code" href="unionhprt0__data.html#88e9271f697d2ec209fc6a6da67fe216">d32</a>);
  307. <a name="l00316"></a>00316 dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#9aaf2a112f5794f92dedd826342bd637">flags</a>.<a class="code" href="uniondwc__otg__hcd_1_1dwc__otg__hcd__internal__flags.html#76f573861d9316238ded198c58c228c7">b</a>.<a class="code" href="uniondwc__otg__hcd_1_1dwc__otg__hcd__internal__flags.html#cd31ac4b9658265e90773448f354f0e1">port_connect_status_change</a> = 1;
  308. <a name="l00317"></a>00317 dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#9aaf2a112f5794f92dedd826342bd637">flags</a>.<a class="code" href="uniondwc__otg__hcd_1_1dwc__otg__hcd__internal__flags.html#76f573861d9316238ded198c58c228c7">b</a>.<a class="code" href="uniondwc__otg__hcd_1_1dwc__otg__hcd__internal__flags.html#9314ac02ed140807687793b512f78c63">port_connect_status</a> = 1;
  309. <a name="l00318"></a>00318 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#5124a40eeafd92c9632c91a2c3132937">prtconndet</a> = 1;
  310. <a name="l00319"></a>00319
  311. <a name="l00320"></a>00320 <span class="comment">/* B-Device has connected, Delete the connection timer. */</span>
  312. <a name="l00321"></a>00321 DWC_TIMER_CANCEL(dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#de7796a41bb7d1e45ed9dbc20c995342">conn_timer</a>);
  313. <a name="l00322"></a>00322
  314. <a name="l00323"></a>00323 <span class="comment">/* The Hub driver asserts a reset when it sees port connect</span>
  315. <a name="l00324"></a>00324 <span class="comment"> * status change flag */</span>
  316. <a name="l00325"></a>00325 retval |= 1;
  317. <a name="l00326"></a>00326 }
  318. <a name="l00327"></a>00327
  319. <a name="l00328"></a>00328 <span class="comment">/* Port Enable Changed</span>
  320. <a name="l00329"></a>00329 <span class="comment"> * Clear if detected - Set internal flag if disabled */</span>
  321. <a name="l00330"></a>00330 <span class="keywordflow">if</span> (hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#75eae10eb537e49cc1ae2dc01c18aa47">prtenchng</a>) {
  322. <a name="l00331"></a>00331 <a class="code" href="dwc__otg__dbg_8h.html#ed38f5a57cb756e97a17c0926cc9a10e">DWC_DEBUGPL</a>(<a class="code" href="dwc__otg__dbg_8h.html#e4a050e176c1c4f556da2b276a8c2b37">DBG_HCD</a>, <span class="stringliteral">" --Port Interrupt HPRT0=0x%08x "</span>
  323. <a name="l00332"></a>00332 <span class="stringliteral">"Port Enable Changed--\n"</span>, hprt0.<a class="code" href="unionhprt0__data.html#88e9271f697d2ec209fc6a6da67fe216">d32</a>);
  324. <a name="l00333"></a>00333 hprt0_modify.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#75eae10eb537e49cc1ae2dc01c18aa47">prtenchng</a> = 1;
  325. <a name="l00334"></a>00334 <span class="keywordflow">if</span> (hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#a964274b5d22e89ca4490f66dff3c763">prtena</a> == 1) {
  326. <a name="l00335"></a>00335 <span class="keywordtype">int</span> do_reset = 0;
  327. <a name="l00336"></a>00336 <a class="code" href="structdwc__otg__core__params.html">dwc_otg_core_params_t</a> *params =
  328. <a name="l00337"></a>00337 dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#63ffc9b8e36340bd59bf1fab9ca490ad">core_params</a>;
  329. <a name="l00338"></a>00338 <a class="code" href="structdwc__otg__core__global__regs.html">dwc_otg_core_global_regs_t</a> *global_regs =
  330. <a name="l00339"></a>00339 dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#909eae7e3b9432ca1e278b99f7811f52">core_global_regs</a>;
  331. <a name="l00340"></a>00340 <a class="code" href="structdwc__otg__host__if.html">dwc_otg_host_if_t</a> *host_if =
  332. <a name="l00341"></a>00341 dwc_otg_hcd-&gt;<a class="code" href="structdwc__otg__hcd.html#e36b9560ce538a7d2ea9bd266d4041f0">core_if</a>-&gt;<a class="code" href="structdwc__otg__core__if.html#51bac71891b5f6f435d7fc4582b974c1">host_if</a>;
  333. <a name="l00342"></a>00342
  334. <a name="l00343"></a>00343 <span class="comment">/* Check if we need to adjust the PHY clock speed for</span>
  335. <a name="l00344"></a>00344 <span class="comment"> * low power and adjust it */</span>
  336. <a name="l00345"></a>00345 <span class="keywordflow">if</span> (params-&gt;<a class="code" href="structdwc__otg__core__params.html#85cad588a450b8497347af9cf166bfde">host_support_fs_ls_low_power</a>) {
  337. <a name="l00346"></a>00346 <a class="code" href="uniongusbcfg__data.html">gusbcfg_data_t</a> usbcfg;
  338. <a name="l00347"></a>00347
  339. <a name="l00348"></a>00348 usbcfg.<a class="code" href="uniongusbcfg__data.html#c3d8f2d95fd61a172eb108cb72a85b47">d32</a> =
  340. <a name="l00349"></a>00349 dwc_read_reg32(&amp;global_regs-&gt;<a class="code" href="structdwc__otg__core__global__regs.html#ef39e181e246447df47c56aa4e37cc42">gusbcfg</a>);
  341. <a name="l00350"></a>00350
  342. <a name="l00351"></a>00351 <span class="keywordflow">if</span> (hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#59f1c27b8c912de0237d2d2974fc2a22">prtspd</a> == <a class="code" href="dwc__otg__regs_8h.html#db9e36d1ab76c334f6e004ee270bd36f">DWC_HPRT0_PRTSPD_LOW_SPEED</a>
  343. <a name="l00352"></a>00352 || hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#59f1c27b8c912de0237d2d2974fc2a22">prtspd</a> ==
  344. <a name="l00353"></a>00353 <a class="code" href="dwc__otg__regs_8h.html#1d144361f6655bb79e7503e7159e6be5">DWC_HPRT0_PRTSPD_FULL_SPEED</a>) {
  345. <a name="l00354"></a>00354 <span class="comment">/*</span>
  346. <a name="l00355"></a>00355 <span class="comment"> * Low power</span>
  347. <a name="l00356"></a>00356 <span class="comment"> */</span>
  348. <a name="l00357"></a>00357 <a class="code" href="unionhcfg__data.html">hcfg_data_t</a> hcfg;
  349. <a name="l00358"></a>00358 <span class="keywordflow">if</span> (usbcfg.<a class="code" href="uniongusbcfg__data.html#1dab81bf7260b1e23f97298c34abea06">b</a>.<a class="code" href="uniongusbcfg__data.html#9e4bac4a0ef0a045f97792f68c5f35df">phylpwrclksel</a> == 0) {
  350. <a name="l00359"></a>00359 <span class="comment">/* Set PHY low power clock select for FS/LS devices */</span>
  351. <a name="l00360"></a>00360 usbcfg.<a class="code" href="uniongusbcfg__data.html#1dab81bf7260b1e23f97298c34abea06">b</a>.<a class="code" href="uniongusbcfg__data.html#9e4bac4a0ef0a045f97792f68c5f35df">phylpwrclksel</a> = 1;
  352. <a name="l00361"></a>00361 dwc_write_reg32(&amp;global_regs-&gt;
  353. <a name="l00362"></a>00362 gusbcfg,
  354. <a name="l00363"></a>00363 usbcfg.<a class="code" href="uniongusbcfg__data.html#c3d8f2d95fd61a172eb108cb72a85b47">d32</a>);
  355. <a name="l00364"></a>00364 do_reset = 1;
  356. <a name="l00365"></a>00365 }
  357. <a name="l00366"></a>00366
  358. <a name="l00367"></a>00367 hcfg.<a class="code" href="unionhcfg__data.html#381a253b3a38a7f943dcbb42f7bf10be">d32</a> =
  359. <a name="l00368"></a>00368 dwc_read_reg32(&amp;host_if-&gt;
  360. <a name="l00369"></a>00369 host_global_regs-&gt;hcfg);
  361. <a name="l00370"></a>00370
  362. <a name="l00371"></a>00371 <span class="keywordflow">if</span> (hprt0.<a class="code" href="unionhprt0__data.html#08cd86ce6da6462fc53601db7e2b73f3">b</a>.<a class="code" href="unionhprt0__data.html#59f1c27b8c912de0237d2d2974fc2a22">prtspd</a> ==
  363. <a name="l00372"></a>00372 <a class="code" href="dwc__otg__regs_8h.html#db9e36d1ab76c334f6e004ee270bd36f">DWC_HPRT0_PRTSPD_LOW_SPEED</a>
  364. <a name="l00373"></a>00373 &amp;&amp; params-&gt;
  365. <a name="l00374"></a>0

Large files files are truncated, but you can click here to view the full file