hcd-ohci.c 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087
  1. /*
  2. * QEMU USB OHCI Emulation
  3. * Copyright (c) 2004 Gianni Tedesco
  4. * Copyright (c) 2006 CodeSourcery
  5. * Copyright (c) 2006 Openedhand Ltd.
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  19. *
  20. * TODO:
  21. * o Isochronous transfers
  22. * o Allocate bandwidth in frames properly
  23. * o Disable timers when nothing needs to be done, or remove timer usage
  24. * all together.
  25. * o BIOS work to boot from USB storage
  26. */
  27. #include "qemu/osdep.h"
  28. #include "hw/irq.h"
  29. #include "qapi/error.h"
  30. #include "qemu/module.h"
  31. #include "qemu/timer.h"
  32. #include "hw/usb.h"
  33. #include "migration/vmstate.h"
  34. #include "hw/sysbus.h"
  35. #include "hw/qdev-dma.h"
  36. #include "hw/qdev-properties.h"
  37. #include "trace.h"
  38. #include "hcd-ohci.h"
  39. /* This causes frames to occur 1000x slower */
  40. /*#define OHCI_TIME_WARP 1*/
  41. #define ED_LINK_LIMIT 32
  42. static int64_t usb_frame_time;
  43. static int64_t usb_bit_time;
  44. /* Host Controller Communications Area */
  45. struct ohci_hcca {
  46. uint32_t intr[32];
  47. uint16_t frame, pad;
  48. uint32_t done;
  49. };
  50. #define HCCA_WRITEBACK_OFFSET offsetof(struct ohci_hcca, frame)
  51. #define HCCA_WRITEBACK_SIZE 8 /* frame, pad, done */
  52. #define ED_WBACK_OFFSET offsetof(struct ohci_ed, head)
  53. #define ED_WBACK_SIZE 4
  54. /* Bitfields for the first word of an Endpoint Descriptor. */
  55. #define OHCI_ED_FA_SHIFT 0
  56. #define OHCI_ED_FA_MASK (0x7f << OHCI_ED_FA_SHIFT)
  57. #define OHCI_ED_EN_SHIFT 7
  58. #define OHCI_ED_EN_MASK (0xf << OHCI_ED_EN_SHIFT)
  59. #define OHCI_ED_D_SHIFT 11
  60. #define OHCI_ED_D_MASK (3 << OHCI_ED_D_SHIFT)
  61. #define OHCI_ED_S (1 << 13)
  62. #define OHCI_ED_K (1 << 14)
  63. #define OHCI_ED_F (1 << 15)
  64. #define OHCI_ED_MPS_SHIFT 16
  65. #define OHCI_ED_MPS_MASK (0x7ff << OHCI_ED_MPS_SHIFT)
  66. /* Flags in the head field of an Endpoint Descriptor. */
  67. #define OHCI_ED_H 1
  68. #define OHCI_ED_C 2
  69. /* Bitfields for the first word of a Transfer Descriptor. */
  70. #define OHCI_TD_R (1 << 18)
  71. #define OHCI_TD_DP_SHIFT 19
  72. #define OHCI_TD_DP_MASK (3 << OHCI_TD_DP_SHIFT)
  73. #define OHCI_TD_DI_SHIFT 21
  74. #define OHCI_TD_DI_MASK (7 << OHCI_TD_DI_SHIFT)
  75. #define OHCI_TD_T0 (1 << 24)
  76. #define OHCI_TD_T1 (1 << 25)
  77. #define OHCI_TD_EC_SHIFT 26
  78. #define OHCI_TD_EC_MASK (3 << OHCI_TD_EC_SHIFT)
  79. #define OHCI_TD_CC_SHIFT 28
  80. #define OHCI_TD_CC_MASK (0xf << OHCI_TD_CC_SHIFT)
  81. /* Bitfields for the first word of an Isochronous Transfer Descriptor. */
  82. /* CC & DI - same as in the General Transfer Descriptor */
  83. #define OHCI_TD_SF_SHIFT 0
  84. #define OHCI_TD_SF_MASK (0xffff << OHCI_TD_SF_SHIFT)
  85. #define OHCI_TD_FC_SHIFT 24
  86. #define OHCI_TD_FC_MASK (7 << OHCI_TD_FC_SHIFT)
  87. /* Isochronous Transfer Descriptor - Offset / PacketStatusWord */
  88. #define OHCI_TD_PSW_CC_SHIFT 12
  89. #define OHCI_TD_PSW_CC_MASK (0xf << OHCI_TD_PSW_CC_SHIFT)
  90. #define OHCI_TD_PSW_SIZE_SHIFT 0
  91. #define OHCI_TD_PSW_SIZE_MASK (0xfff << OHCI_TD_PSW_SIZE_SHIFT)
  92. #define OHCI_PAGE_MASK 0xfffff000
  93. #define OHCI_OFFSET_MASK 0xfff
  94. #define OHCI_DPTR_MASK 0xfffffff0
  95. #define OHCI_BM(val, field) \
  96. (((val) & OHCI_##field##_MASK) >> OHCI_##field##_SHIFT)
  97. #define OHCI_SET_BM(val, field, newval) do { \
  98. val &= ~OHCI_##field##_MASK; \
  99. val |= ((newval) << OHCI_##field##_SHIFT) & OHCI_##field##_MASK; \
  100. } while (0)
  101. /* endpoint descriptor */
  102. struct ohci_ed {
  103. uint32_t flags;
  104. uint32_t tail;
  105. uint32_t head;
  106. uint32_t next;
  107. };
  108. /* General transfer descriptor */
  109. struct ohci_td {
  110. uint32_t flags;
  111. uint32_t cbp;
  112. uint32_t next;
  113. uint32_t be;
  114. };
  115. /* Isochronous transfer descriptor */
  116. struct ohci_iso_td {
  117. uint32_t flags;
  118. uint32_t bp;
  119. uint32_t next;
  120. uint32_t be;
  121. uint16_t offset[8];
  122. };
  123. #define USB_HZ 12000000
  124. /* OHCI Local stuff */
  125. #define OHCI_CTL_CBSR ((1 << 0) | (1 << 1))
  126. #define OHCI_CTL_PLE (1 << 2)
  127. #define OHCI_CTL_IE (1 << 3)
  128. #define OHCI_CTL_CLE (1 << 4)
  129. #define OHCI_CTL_BLE (1 << 5)
  130. #define OHCI_CTL_HCFS ((1 << 6) | (1 << 7))
  131. #define OHCI_USB_RESET 0x00
  132. #define OHCI_USB_RESUME 0x40
  133. #define OHCI_USB_OPERATIONAL 0x80
  134. #define OHCI_USB_SUSPEND 0xc0
  135. #define OHCI_CTL_IR (1 << 8)
  136. #define OHCI_CTL_RWC (1 << 9)
  137. #define OHCI_CTL_RWE (1 << 10)
  138. #define OHCI_STATUS_HCR (1 << 0)
  139. #define OHCI_STATUS_CLF (1 << 1)
  140. #define OHCI_STATUS_BLF (1 << 2)
  141. #define OHCI_STATUS_OCR (1 << 3)
  142. #define OHCI_STATUS_SOC ((1 << 6) | (1 << 7))
  143. #define OHCI_INTR_SO (1U << 0) /* Scheduling overrun */
  144. #define OHCI_INTR_WD (1U << 1) /* HcDoneHead writeback */
  145. #define OHCI_INTR_SF (1U << 2) /* Start of frame */
  146. #define OHCI_INTR_RD (1U << 3) /* Resume detect */
  147. #define OHCI_INTR_UE (1U << 4) /* Unrecoverable error */
  148. #define OHCI_INTR_FNO (1U << 5) /* Frame number overflow */
  149. #define OHCI_INTR_RHSC (1U << 6) /* Root hub status change */
  150. #define OHCI_INTR_OC (1U << 30) /* Ownership change */
  151. #define OHCI_INTR_MIE (1U << 31) /* Master Interrupt Enable */
  152. #define OHCI_HCCA_SIZE 0x100
  153. #define OHCI_HCCA_MASK 0xffffff00
  154. #define OHCI_EDPTR_MASK 0xfffffff0
  155. #define OHCI_FMI_FI 0x00003fff
  156. #define OHCI_FMI_FSMPS 0xffff0000
  157. #define OHCI_FMI_FIT 0x80000000
  158. #define OHCI_FR_RT (1U << 31)
  159. #define OHCI_LS_THRESH 0x628
  160. #define OHCI_RHA_RW_MASK 0x00000000 /* Mask of supported features. */
  161. #define OHCI_RHA_PSM (1 << 8)
  162. #define OHCI_RHA_NPS (1 << 9)
  163. #define OHCI_RHA_DT (1 << 10)
  164. #define OHCI_RHA_OCPM (1 << 11)
  165. #define OHCI_RHA_NOCP (1 << 12)
  166. #define OHCI_RHA_POTPGT_MASK 0xff000000
  167. #define OHCI_RHS_LPS (1U << 0)
  168. #define OHCI_RHS_OCI (1U << 1)
  169. #define OHCI_RHS_DRWE (1U << 15)
  170. #define OHCI_RHS_LPSC (1U << 16)
  171. #define OHCI_RHS_OCIC (1U << 17)
  172. #define OHCI_RHS_CRWE (1U << 31)
  173. #define OHCI_PORT_CCS (1 << 0)
  174. #define OHCI_PORT_PES (1 << 1)
  175. #define OHCI_PORT_PSS (1 << 2)
  176. #define OHCI_PORT_POCI (1 << 3)
  177. #define OHCI_PORT_PRS (1 << 4)
  178. #define OHCI_PORT_PPS (1 << 8)
  179. #define OHCI_PORT_LSDA (1 << 9)
  180. #define OHCI_PORT_CSC (1 << 16)
  181. #define OHCI_PORT_PESC (1 << 17)
  182. #define OHCI_PORT_PSSC (1 << 18)
  183. #define OHCI_PORT_OCIC (1 << 19)
  184. #define OHCI_PORT_PRSC (1 << 20)
  185. #define OHCI_PORT_WTC (OHCI_PORT_CSC | OHCI_PORT_PESC | \
  186. OHCI_PORT_PSSC | OHCI_PORT_OCIC | \
  187. OHCI_PORT_PRSC)
  188. #define OHCI_TD_DIR_SETUP 0x0
  189. #define OHCI_TD_DIR_OUT 0x1
  190. #define OHCI_TD_DIR_IN 0x2
  191. #define OHCI_TD_DIR_RESERVED 0x3
  192. #define OHCI_CC_NOERROR 0x0
  193. #define OHCI_CC_CRC 0x1
  194. #define OHCI_CC_BITSTUFFING 0x2
  195. #define OHCI_CC_DATATOGGLEMISMATCH 0x3
  196. #define OHCI_CC_STALL 0x4
  197. #define OHCI_CC_DEVICENOTRESPONDING 0x5
  198. #define OHCI_CC_PIDCHECKFAILURE 0x6
  199. #define OHCI_CC_UNDEXPETEDPID 0x7
  200. #define OHCI_CC_DATAOVERRUN 0x8
  201. #define OHCI_CC_DATAUNDERRUN 0x9
  202. #define OHCI_CC_BUFFEROVERRUN 0xc
  203. #define OHCI_CC_BUFFERUNDERRUN 0xd
  204. #define OHCI_HRESET_FSBIR (1 << 0)
  205. static const char *ohci_reg_names[] = {
  206. "HcRevision", "HcControl", "HcCommandStatus", "HcInterruptStatus",
  207. "HcInterruptEnable", "HcInterruptDisable", "HcHCCA", "HcPeriodCurrentED",
  208. "HcControlHeadED", "HcControlCurrentED", "HcBulkHeadED", "HcBulkCurrentED",
  209. "HcDoneHead", "HcFmInterval", "HcFmRemaining", "HcFmNumber",
  210. "HcPeriodicStart", "HcLSThreshold", "HcRhDescriptorA", "HcRhDescriptorB",
  211. "HcRhStatus"
  212. };
  213. static const char *ohci_reg_name(hwaddr addr)
  214. {
  215. if (addr >> 2 < ARRAY_SIZE(ohci_reg_names)) {
  216. return ohci_reg_names[addr >> 2];
  217. } else {
  218. return "<unknown>";
  219. }
  220. }
  221. static void ohci_die(OHCIState *ohci)
  222. {
  223. ohci->ohci_die(ohci);
  224. }
  225. /* Update IRQ levels */
  226. static inline void ohci_intr_update(OHCIState *ohci)
  227. {
  228. int level = 0;
  229. if ((ohci->intr & OHCI_INTR_MIE) &&
  230. (ohci->intr_status & ohci->intr))
  231. level = 1;
  232. qemu_set_irq(ohci->irq, level);
  233. }
  234. /* Set an interrupt */
  235. static inline void ohci_set_interrupt(OHCIState *ohci, uint32_t intr)
  236. {
  237. ohci->intr_status |= intr;
  238. ohci_intr_update(ohci);
  239. }
  240. static USBDevice *ohci_find_device(OHCIState *ohci, uint8_t addr)
  241. {
  242. USBDevice *dev;
  243. int i;
  244. for (i = 0; i < ohci->num_ports; i++) {
  245. if ((ohci->rhport[i].ctrl & OHCI_PORT_PES) == 0) {
  246. continue;
  247. }
  248. dev = usb_find_device(&ohci->rhport[i].port, addr);
  249. if (dev != NULL) {
  250. return dev;
  251. }
  252. }
  253. return NULL;
  254. }
  255. void ohci_stop_endpoints(OHCIState *ohci)
  256. {
  257. USBDevice *dev;
  258. int i, j;
  259. if (ohci->async_td) {
  260. usb_cancel_packet(&ohci->usb_packet);
  261. ohci->async_td = 0;
  262. }
  263. for (i = 0; i < ohci->num_ports; i++) {
  264. dev = ohci->rhport[i].port.dev;
  265. if (dev && dev->attached) {
  266. usb_device_ep_stopped(dev, &dev->ep_ctl);
  267. for (j = 0; j < USB_MAX_ENDPOINTS; j++) {
  268. usb_device_ep_stopped(dev, &dev->ep_in[j]);
  269. usb_device_ep_stopped(dev, &dev->ep_out[j]);
  270. }
  271. }
  272. }
  273. }
  274. static void ohci_roothub_reset(OHCIState *ohci)
  275. {
  276. OHCIPort *port;
  277. int i;
  278. ohci_bus_stop(ohci);
  279. ohci->rhdesc_a = OHCI_RHA_NPS | ohci->num_ports;
  280. ohci->rhdesc_b = 0x0; /* Impl. specific */
  281. ohci->rhstatus = 0;
  282. for (i = 0; i < ohci->num_ports; i++) {
  283. port = &ohci->rhport[i];
  284. port->ctrl = 0;
  285. if (port->port.dev && port->port.dev->attached) {
  286. usb_port_reset(&port->port);
  287. }
  288. }
  289. ohci_stop_endpoints(ohci);
  290. }
  291. /* Reset the controller */
  292. static void ohci_soft_reset(OHCIState *ohci)
  293. {
  294. trace_usb_ohci_reset(ohci->name);
  295. ohci_bus_stop(ohci);
  296. ohci->ctl = (ohci->ctl & OHCI_CTL_IR) | OHCI_USB_SUSPEND;
  297. ohci->old_ctl = 0;
  298. ohci->status = 0;
  299. ohci->intr_status = 0;
  300. ohci->intr = OHCI_INTR_MIE;
  301. ohci->hcca = 0;
  302. ohci->ctrl_head = ohci->ctrl_cur = 0;
  303. ohci->bulk_head = ohci->bulk_cur = 0;
  304. ohci->per_cur = 0;
  305. ohci->done = 0;
  306. ohci->done_count = 7;
  307. /*
  308. * FSMPS is marked TBD in OCHI 1.0, what gives ffs?
  309. * I took the value linux sets ...
  310. */
  311. ohci->fsmps = 0x2778;
  312. ohci->fi = 0x2edf;
  313. ohci->fit = 0;
  314. ohci->frt = 0;
  315. ohci->frame_number = 0;
  316. ohci->pstart = 0;
  317. ohci->lst = OHCI_LS_THRESH;
  318. }
  319. void ohci_hard_reset(OHCIState *ohci)
  320. {
  321. ohci_soft_reset(ohci);
  322. ohci->ctl = 0;
  323. ohci_roothub_reset(ohci);
  324. }
  325. /* Get an array of dwords from main memory */
  326. static inline int get_dwords(OHCIState *ohci,
  327. dma_addr_t addr, uint32_t *buf, int num)
  328. {
  329. int i;
  330. addr += ohci->localmem_base;
  331. for (i = 0; i < num; i++, buf++, addr += sizeof(*buf)) {
  332. if (dma_memory_read(ohci->as, addr,
  333. buf, sizeof(*buf), MEMTXATTRS_UNSPECIFIED)) {
  334. return -1;
  335. }
  336. *buf = le32_to_cpu(*buf);
  337. }
  338. return 0;
  339. }
  340. /* Put an array of dwords in to main memory */
  341. static inline int put_dwords(OHCIState *ohci,
  342. dma_addr_t addr, uint32_t *buf, int num)
  343. {
  344. int i;
  345. addr += ohci->localmem_base;
  346. for (i = 0; i < num; i++, buf++, addr += sizeof(*buf)) {
  347. uint32_t tmp = cpu_to_le32(*buf);
  348. if (dma_memory_write(ohci->as, addr,
  349. &tmp, sizeof(tmp), MEMTXATTRS_UNSPECIFIED)) {
  350. return -1;
  351. }
  352. }
  353. return 0;
  354. }
  355. /* Get an array of words from main memory */
  356. static inline int get_words(OHCIState *ohci,
  357. dma_addr_t addr, uint16_t *buf, int num)
  358. {
  359. int i;
  360. addr += ohci->localmem_base;
  361. for (i = 0; i < num; i++, buf++, addr += sizeof(*buf)) {
  362. if (dma_memory_read(ohci->as, addr,
  363. buf, sizeof(*buf), MEMTXATTRS_UNSPECIFIED)) {
  364. return -1;
  365. }
  366. *buf = le16_to_cpu(*buf);
  367. }
  368. return 0;
  369. }
  370. /* Put an array of words in to main memory */
  371. static inline int put_words(OHCIState *ohci,
  372. dma_addr_t addr, uint16_t *buf, int num)
  373. {
  374. int i;
  375. addr += ohci->localmem_base;
  376. for (i = 0; i < num; i++, buf++, addr += sizeof(*buf)) {
  377. uint16_t tmp = cpu_to_le16(*buf);
  378. if (dma_memory_write(ohci->as, addr,
  379. &tmp, sizeof(tmp), MEMTXATTRS_UNSPECIFIED)) {
  380. return -1;
  381. }
  382. }
  383. return 0;
  384. }
  385. static inline int ohci_read_ed(OHCIState *ohci,
  386. dma_addr_t addr, struct ohci_ed *ed)
  387. {
  388. return get_dwords(ohci, addr, (uint32_t *)ed, sizeof(*ed) >> 2);
  389. }
  390. static inline int ohci_read_td(OHCIState *ohci,
  391. dma_addr_t addr, struct ohci_td *td)
  392. {
  393. return get_dwords(ohci, addr, (uint32_t *)td, sizeof(*td) >> 2);
  394. }
  395. static inline int ohci_read_iso_td(OHCIState *ohci,
  396. dma_addr_t addr, struct ohci_iso_td *td)
  397. {
  398. return get_dwords(ohci, addr, (uint32_t *)td, 4) ||
  399. get_words(ohci, addr + 16, td->offset, 8);
  400. }
  401. static inline int ohci_read_hcca(OHCIState *ohci,
  402. dma_addr_t addr, struct ohci_hcca *hcca)
  403. {
  404. return dma_memory_read(ohci->as, addr + ohci->localmem_base, hcca,
  405. sizeof(*hcca), MEMTXATTRS_UNSPECIFIED);
  406. }
  407. static inline int ohci_put_ed(OHCIState *ohci,
  408. dma_addr_t addr, struct ohci_ed *ed)
  409. {
  410. /*
  411. * ed->tail is under control of the HCD.
  412. * Since just ed->head is changed by HC, just write back this
  413. */
  414. return put_dwords(ohci, addr + ED_WBACK_OFFSET,
  415. (uint32_t *)((char *)ed + ED_WBACK_OFFSET),
  416. ED_WBACK_SIZE >> 2);
  417. }
  418. static inline int ohci_put_td(OHCIState *ohci,
  419. dma_addr_t addr, struct ohci_td *td)
  420. {
  421. return put_dwords(ohci, addr, (uint32_t *)td, sizeof(*td) >> 2);
  422. }
  423. static inline int ohci_put_iso_td(OHCIState *ohci,
  424. dma_addr_t addr, struct ohci_iso_td *td)
  425. {
  426. return put_dwords(ohci, addr, (uint32_t *)td, 4) ||
  427. put_words(ohci, addr + 16, td->offset, 8);
  428. }
  429. static inline int ohci_put_hcca(OHCIState *ohci,
  430. dma_addr_t addr, struct ohci_hcca *hcca)
  431. {
  432. return dma_memory_write(ohci->as,
  433. addr + ohci->localmem_base + HCCA_WRITEBACK_OFFSET,
  434. (char *)hcca + HCCA_WRITEBACK_OFFSET,
  435. HCCA_WRITEBACK_SIZE, MEMTXATTRS_UNSPECIFIED);
  436. }
  437. /* Read/Write the contents of a TD from/to main memory. */
  438. static int ohci_copy_td(OHCIState *ohci, struct ohci_td *td,
  439. uint8_t *buf, int len, DMADirection dir)
  440. {
  441. dma_addr_t ptr, n;
  442. ptr = td->cbp;
  443. n = 0x1000 - (ptr & 0xfff);
  444. if (n > len) {
  445. n = len;
  446. }
  447. if (dma_memory_rw(ohci->as, ptr + ohci->localmem_base, buf,
  448. n, dir, MEMTXATTRS_UNSPECIFIED)) {
  449. return -1;
  450. }
  451. if (n == len) {
  452. return 0;
  453. }
  454. ptr = td->be & ~0xfffu;
  455. buf += n;
  456. if (dma_memory_rw(ohci->as, ptr + ohci->localmem_base, buf,
  457. len - n, dir, MEMTXATTRS_UNSPECIFIED)) {
  458. return -1;
  459. }
  460. return 0;
  461. }
  462. /* Read/Write the contents of an ISO TD from/to main memory. */
  463. static int ohci_copy_iso_td(OHCIState *ohci,
  464. uint32_t start_addr, uint32_t end_addr,
  465. uint8_t *buf, int len, DMADirection dir)
  466. {
  467. dma_addr_t ptr, n;
  468. ptr = start_addr;
  469. n = 0x1000 - (ptr & 0xfff);
  470. if (n > len) {
  471. n = len;
  472. }
  473. if (dma_memory_rw(ohci->as, ptr + ohci->localmem_base, buf,
  474. n, dir, MEMTXATTRS_UNSPECIFIED)) {
  475. return -1;
  476. }
  477. if (n == len) {
  478. return 0;
  479. }
  480. ptr = end_addr & ~0xfffu;
  481. buf += n;
  482. if (dma_memory_rw(ohci->as, ptr + ohci->localmem_base, buf,
  483. len - n, dir, MEMTXATTRS_UNSPECIFIED)) {
  484. return -1;
  485. }
  486. return 0;
  487. }
  488. #define USUB(a, b) ((int16_t)((uint16_t)(a) - (uint16_t)(b)))
  489. static int ohci_service_iso_td(OHCIState *ohci, struct ohci_ed *ed)
  490. {
  491. int dir;
  492. size_t len = 0;
  493. const char *str = NULL;
  494. int pid;
  495. int ret;
  496. int i;
  497. USBDevice *dev;
  498. USBEndpoint *ep;
  499. USBPacket *pkt;
  500. uint8_t buf[8192];
  501. bool int_req;
  502. struct ohci_iso_td iso_td;
  503. uint32_t addr;
  504. uint16_t starting_frame;
  505. int16_t relative_frame_number;
  506. int frame_count;
  507. uint32_t start_offset, next_offset, end_offset = 0;
  508. uint32_t start_addr, end_addr;
  509. addr = ed->head & OHCI_DPTR_MASK;
  510. if (addr == 0) {
  511. ohci_die(ohci);
  512. return 1;
  513. }
  514. if (ohci_read_iso_td(ohci, addr, &iso_td)) {
  515. trace_usb_ohci_iso_td_read_failed(addr);
  516. ohci_die(ohci);
  517. return 1;
  518. }
  519. starting_frame = OHCI_BM(iso_td.flags, TD_SF);
  520. frame_count = OHCI_BM(iso_td.flags, TD_FC);
  521. relative_frame_number = USUB(ohci->frame_number, starting_frame);
  522. trace_usb_ohci_iso_td_head(
  523. ed->head & OHCI_DPTR_MASK, ed->tail & OHCI_DPTR_MASK,
  524. iso_td.flags, iso_td.bp, iso_td.next, iso_td.be,
  525. ohci->frame_number, starting_frame,
  526. frame_count, relative_frame_number);
  527. trace_usb_ohci_iso_td_head_offset(
  528. iso_td.offset[0], iso_td.offset[1],
  529. iso_td.offset[2], iso_td.offset[3],
  530. iso_td.offset[4], iso_td.offset[5],
  531. iso_td.offset[6], iso_td.offset[7]);
  532. if (relative_frame_number < 0) {
  533. trace_usb_ohci_iso_td_relative_frame_number_neg(relative_frame_number);
  534. return 1;
  535. } else if (relative_frame_number > frame_count) {
  536. /*
  537. * ISO TD expired - retire the TD to the Done Queue and continue with
  538. * the next ISO TD of the same ED
  539. */
  540. trace_usb_ohci_iso_td_relative_frame_number_big(relative_frame_number,
  541. frame_count);
  542. if (OHCI_CC_DATAOVERRUN == OHCI_BM(iso_td.flags, TD_CC)) {
  543. /* avoid infinite loop */
  544. return 1;
  545. }
  546. OHCI_SET_BM(iso_td.flags, TD_CC, OHCI_CC_DATAOVERRUN);
  547. ed->head &= ~OHCI_DPTR_MASK;
  548. ed->head |= (iso_td.next & OHCI_DPTR_MASK);
  549. iso_td.next = ohci->done;
  550. ohci->done = addr;
  551. i = OHCI_BM(iso_td.flags, TD_DI);
  552. if (i < ohci->done_count) {
  553. ohci->done_count = i;
  554. }
  555. if (ohci_put_iso_td(ohci, addr, &iso_td)) {
  556. ohci_die(ohci);
  557. return 1;
  558. }
  559. return 0;
  560. }
  561. dir = OHCI_BM(ed->flags, ED_D);
  562. switch (dir) {
  563. case OHCI_TD_DIR_IN:
  564. str = "in";
  565. pid = USB_TOKEN_IN;
  566. break;
  567. case OHCI_TD_DIR_OUT:
  568. str = "out";
  569. pid = USB_TOKEN_OUT;
  570. break;
  571. case OHCI_TD_DIR_SETUP:
  572. str = "setup";
  573. pid = USB_TOKEN_SETUP;
  574. break;
  575. default:
  576. trace_usb_ohci_iso_td_bad_direction(dir);
  577. return 1;
  578. }
  579. if (!iso_td.bp || !iso_td.be) {
  580. trace_usb_ohci_iso_td_bad_bp_be(iso_td.bp, iso_td.be);
  581. return 1;
  582. }
  583. start_offset = iso_td.offset[relative_frame_number];
  584. if (relative_frame_number < frame_count) {
  585. next_offset = iso_td.offset[relative_frame_number + 1];
  586. } else {
  587. next_offset = iso_td.be;
  588. }
  589. if (!(OHCI_BM(start_offset, TD_PSW_CC) & 0xe) ||
  590. ((relative_frame_number < frame_count) &&
  591. !(OHCI_BM(next_offset, TD_PSW_CC) & 0xe))) {
  592. trace_usb_ohci_iso_td_bad_cc_not_accessed(start_offset, next_offset);
  593. return 1;
  594. }
  595. if ((relative_frame_number < frame_count) && (start_offset > next_offset)) {
  596. trace_usb_ohci_iso_td_bad_cc_overrun(start_offset, next_offset);
  597. return 1;
  598. }
  599. if ((start_offset & 0x1000) == 0) {
  600. start_addr = (iso_td.bp & OHCI_PAGE_MASK) |
  601. (start_offset & OHCI_OFFSET_MASK);
  602. } else {
  603. start_addr = (iso_td.be & OHCI_PAGE_MASK) |
  604. (start_offset & OHCI_OFFSET_MASK);
  605. }
  606. if (relative_frame_number < frame_count) {
  607. end_offset = next_offset - 1;
  608. if ((end_offset & 0x1000) == 0) {
  609. end_addr = (iso_td.bp & OHCI_PAGE_MASK) |
  610. (end_offset & OHCI_OFFSET_MASK);
  611. } else {
  612. end_addr = (iso_td.be & OHCI_PAGE_MASK) |
  613. (end_offset & OHCI_OFFSET_MASK);
  614. }
  615. } else {
  616. /* Last packet in the ISO TD */
  617. end_addr = next_offset;
  618. }
  619. if (start_addr > end_addr) {
  620. trace_usb_ohci_iso_td_bad_cc_overrun(start_addr, end_addr);
  621. return 1;
  622. }
  623. if ((start_addr & OHCI_PAGE_MASK) != (end_addr & OHCI_PAGE_MASK)) {
  624. len = (end_addr & OHCI_OFFSET_MASK) + 0x1001
  625. - (start_addr & OHCI_OFFSET_MASK);
  626. } else {
  627. len = end_addr - start_addr + 1;
  628. }
  629. if (len > sizeof(buf)) {
  630. len = sizeof(buf);
  631. }
  632. if (len && dir != OHCI_TD_DIR_IN) {
  633. if (ohci_copy_iso_td(ohci, start_addr, end_addr, buf, len,
  634. DMA_DIRECTION_TO_DEVICE)) {
  635. ohci_die(ohci);
  636. return 1;
  637. }
  638. }
  639. dev = ohci_find_device(ohci, OHCI_BM(ed->flags, ED_FA));
  640. if (dev == NULL) {
  641. trace_usb_ohci_td_dev_error();
  642. return 1;
  643. }
  644. ep = usb_ep_get(dev, pid, OHCI_BM(ed->flags, ED_EN));
  645. pkt = g_new0(USBPacket, 1);
  646. usb_packet_init(pkt);
  647. int_req = relative_frame_number == frame_count &&
  648. OHCI_BM(iso_td.flags, TD_DI) == 0;
  649. usb_packet_setup(pkt, pid, ep, 0, addr, false, int_req);
  650. usb_packet_addbuf(pkt, buf, len);
  651. usb_handle_packet(dev, pkt);
  652. if (pkt->status == USB_RET_ASYNC) {
  653. usb_device_flush_ep_queue(dev, ep);
  654. g_free(pkt);
  655. return 1;
  656. }
  657. if (pkt->status == USB_RET_SUCCESS) {
  658. ret = pkt->actual_length;
  659. } else {
  660. ret = pkt->status;
  661. }
  662. g_free(pkt);
  663. trace_usb_ohci_iso_td_so(start_offset, end_offset, start_addr, end_addr,
  664. str, len, ret);
  665. /* Writeback */
  666. if (dir == OHCI_TD_DIR_IN && ret >= 0 && ret <= len) {
  667. /* IN transfer succeeded */
  668. if (ohci_copy_iso_td(ohci, start_addr, end_addr, buf, ret,
  669. DMA_DIRECTION_FROM_DEVICE)) {
  670. ohci_die(ohci);
  671. return 1;
  672. }
  673. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  674. OHCI_CC_NOERROR);
  675. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_SIZE, ret);
  676. } else if (dir == OHCI_TD_DIR_OUT && ret == len) {
  677. /* OUT transfer succeeded */
  678. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  679. OHCI_CC_NOERROR);
  680. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_SIZE, 0);
  681. } else {
  682. if (ret > (ssize_t) len) {
  683. trace_usb_ohci_iso_td_data_overrun(ret, len);
  684. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  685. OHCI_CC_DATAOVERRUN);
  686. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_SIZE,
  687. len);
  688. } else if (ret >= 0) {
  689. trace_usb_ohci_iso_td_data_underrun(ret);
  690. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  691. OHCI_CC_DATAUNDERRUN);
  692. } else {
  693. switch (ret) {
  694. case USB_RET_IOERROR:
  695. case USB_RET_NODEV:
  696. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  697. OHCI_CC_DEVICENOTRESPONDING);
  698. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_SIZE,
  699. 0);
  700. break;
  701. case USB_RET_NAK:
  702. case USB_RET_STALL:
  703. trace_usb_ohci_iso_td_nak(ret);
  704. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  705. OHCI_CC_STALL);
  706. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_SIZE,
  707. 0);
  708. break;
  709. default:
  710. trace_usb_ohci_iso_td_bad_response(ret);
  711. OHCI_SET_BM(iso_td.offset[relative_frame_number], TD_PSW_CC,
  712. OHCI_CC_UNDEXPETEDPID);
  713. break;
  714. }
  715. }
  716. }
  717. if (relative_frame_number == frame_count) {
  718. /* Last data packet of ISO TD - retire the TD to the Done Queue */
  719. OHCI_SET_BM(iso_td.flags, TD_CC, OHCI_CC_NOERROR);
  720. ed->head &= ~OHCI_DPTR_MASK;
  721. ed->head |= (iso_td.next & OHCI_DPTR_MASK);
  722. iso_td.next = ohci->done;
  723. ohci->done = addr;
  724. i = OHCI_BM(iso_td.flags, TD_DI);
  725. if (i < ohci->done_count) {
  726. ohci->done_count = i;
  727. }
  728. }
  729. if (ohci_put_iso_td(ohci, addr, &iso_td)) {
  730. ohci_die(ohci);
  731. }
  732. return 1;
  733. }
  734. #define HEX_CHAR_PER_LINE 16
  735. static void ohci_td_pkt(const char *msg, const uint8_t *buf, size_t len)
  736. {
  737. bool print16;
  738. bool printall;
  739. int i;
  740. char tmp[3 * HEX_CHAR_PER_LINE + 1];
  741. char *p = tmp;
  742. print16 = !!trace_event_get_state_backends(TRACE_USB_OHCI_TD_PKT_SHORT);
  743. printall = !!trace_event_get_state_backends(TRACE_USB_OHCI_TD_PKT_FULL);
  744. if (!printall && !print16) {
  745. return;
  746. }
  747. for (i = 0; ; i++) {
  748. if (i && (!(i % HEX_CHAR_PER_LINE) || (i == len))) {
  749. if (!printall) {
  750. trace_usb_ohci_td_pkt_short(msg, tmp);
  751. break;
  752. }
  753. trace_usb_ohci_td_pkt_full(msg, tmp);
  754. p = tmp;
  755. *p = 0;
  756. }
  757. if (i == len) {
  758. break;
  759. }
  760. p += sprintf(p, " %.2x", buf[i]);
  761. }
  762. }
  763. /*
  764. * Service a transport descriptor.
  765. * Returns nonzero to terminate processing of this endpoint.
  766. */
  767. static int ohci_service_td(OHCIState *ohci, struct ohci_ed *ed)
  768. {
  769. int dir;
  770. size_t len = 0, pktlen = 0;
  771. const char *str = NULL;
  772. int pid;
  773. int ret;
  774. int i;
  775. USBDevice *dev;
  776. USBEndpoint *ep;
  777. struct ohci_td td;
  778. uint32_t addr;
  779. int flag_r;
  780. int completion;
  781. addr = ed->head & OHCI_DPTR_MASK;
  782. if (addr == 0) {
  783. ohci_die(ohci);
  784. return 1;
  785. }
  786. /* See if this TD has already been submitted to the device. */
  787. completion = (addr == ohci->async_td);
  788. if (completion && !ohci->async_complete) {
  789. trace_usb_ohci_td_skip_async();
  790. return 1;
  791. }
  792. if (ohci_read_td(ohci, addr, &td)) {
  793. trace_usb_ohci_td_read_error(addr);
  794. ohci_die(ohci);
  795. return 1;
  796. }
  797. dir = OHCI_BM(ed->flags, ED_D);
  798. switch (dir) {
  799. case OHCI_TD_DIR_OUT:
  800. case OHCI_TD_DIR_IN:
  801. /* Same value. */
  802. break;
  803. default:
  804. dir = OHCI_BM(td.flags, TD_DP);
  805. break;
  806. }
  807. switch (dir) {
  808. case OHCI_TD_DIR_IN:
  809. str = "in";
  810. pid = USB_TOKEN_IN;
  811. break;
  812. case OHCI_TD_DIR_OUT:
  813. str = "out";
  814. pid = USB_TOKEN_OUT;
  815. break;
  816. case OHCI_TD_DIR_SETUP:
  817. str = "setup";
  818. pid = USB_TOKEN_SETUP;
  819. break;
  820. default:
  821. trace_usb_ohci_td_bad_direction(dir);
  822. return 1;
  823. }
  824. if (td.cbp && td.be) {
  825. if ((td.cbp & 0xfffff000) != (td.be & 0xfffff000)) {
  826. len = (td.be & 0xfff) + 0x1001 - (td.cbp & 0xfff);
  827. } else {
  828. if (td.cbp > td.be) {
  829. trace_usb_ohci_iso_td_bad_cc_overrun(td.cbp, td.be);
  830. ohci_die(ohci);
  831. return 1;
  832. }
  833. len = (td.be - td.cbp) + 1;
  834. }
  835. if (len > sizeof(ohci->usb_buf)) {
  836. len = sizeof(ohci->usb_buf);
  837. }
  838. pktlen = len;
  839. if (len && dir != OHCI_TD_DIR_IN) {
  840. /* The endpoint may not allow us to transfer it all now */
  841. pktlen = (ed->flags & OHCI_ED_MPS_MASK) >> OHCI_ED_MPS_SHIFT;
  842. if (pktlen > len) {
  843. pktlen = len;
  844. }
  845. if (!completion) {
  846. if (ohci_copy_td(ohci, &td, ohci->usb_buf, pktlen,
  847. DMA_DIRECTION_TO_DEVICE)) {
  848. ohci_die(ohci);
  849. }
  850. }
  851. }
  852. }
  853. flag_r = (td.flags & OHCI_TD_R) != 0;
  854. trace_usb_ohci_td_pkt_hdr(addr, (int64_t)pktlen, (int64_t)len, str,
  855. flag_r, td.cbp, td.be);
  856. ohci_td_pkt("OUT", ohci->usb_buf, pktlen);
  857. if (completion) {
  858. ohci->async_td = 0;
  859. ohci->async_complete = false;
  860. } else {
  861. dev = ohci_find_device(ohci, OHCI_BM(ed->flags, ED_FA));
  862. if (dev == NULL) {
  863. trace_usb_ohci_td_dev_error();
  864. return 1;
  865. }
  866. ep = usb_ep_get(dev, pid, OHCI_BM(ed->flags, ED_EN));
  867. if (ohci->async_td) {
  868. /*
  869. * ??? The hardware should allow one active packet per
  870. * endpoint. We only allow one active packet per controller.
  871. * This should be sufficient as long as devices respond in a
  872. * timely manner.
  873. */
  874. trace_usb_ohci_td_too_many_pending(ep->nr);
  875. return 1;
  876. }
  877. usb_packet_setup(&ohci->usb_packet, pid, ep, 0, addr, !flag_r,
  878. OHCI_BM(td.flags, TD_DI) == 0);
  879. usb_packet_addbuf(&ohci->usb_packet, ohci->usb_buf, pktlen);
  880. usb_handle_packet(dev, &ohci->usb_packet);
  881. trace_usb_ohci_td_packet_status(ohci->usb_packet.status);
  882. if (ohci->usb_packet.status == USB_RET_ASYNC) {
  883. usb_device_flush_ep_queue(dev, ep);
  884. ohci->async_td = addr;
  885. return 1;
  886. }
  887. }
  888. if (ohci->usb_packet.status == USB_RET_SUCCESS) {
  889. ret = ohci->usb_packet.actual_length;
  890. } else {
  891. ret = ohci->usb_packet.status;
  892. }
  893. if (ret >= 0) {
  894. if (dir == OHCI_TD_DIR_IN) {
  895. if (ohci_copy_td(ohci, &td, ohci->usb_buf, ret,
  896. DMA_DIRECTION_FROM_DEVICE)) {
  897. ohci_die(ohci);
  898. }
  899. ohci_td_pkt("IN", ohci->usb_buf, pktlen);
  900. } else {
  901. ret = pktlen;
  902. }
  903. }
  904. /* Writeback */
  905. if (ret == pktlen || (dir == OHCI_TD_DIR_IN && ret >= 0 && flag_r)) {
  906. /* Transmission succeeded. */
  907. if (ret == len) {
  908. td.cbp = 0;
  909. } else {
  910. if ((td.cbp & 0xfff) + ret > 0xfff) {
  911. td.cbp = (td.be & ~0xfff) + ((td.cbp + ret) & 0xfff);
  912. } else {
  913. td.cbp += ret;
  914. }
  915. }
  916. td.flags |= OHCI_TD_T1;
  917. td.flags ^= OHCI_TD_T0;
  918. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_NOERROR);
  919. OHCI_SET_BM(td.flags, TD_EC, 0);
  920. if ((dir != OHCI_TD_DIR_IN) && (ret != len)) {
  921. /* Partial packet transfer: TD not ready to retire yet */
  922. goto exit_no_retire;
  923. }
  924. /* Setting ED_C is part of the TD retirement process */
  925. ed->head &= ~OHCI_ED_C;
  926. if (td.flags & OHCI_TD_T0) {
  927. ed->head |= OHCI_ED_C;
  928. }
  929. } else {
  930. if (ret >= 0) {
  931. trace_usb_ohci_td_underrun();
  932. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_DATAUNDERRUN);
  933. } else {
  934. switch (ret) {
  935. case USB_RET_IOERROR:
  936. case USB_RET_NODEV:
  937. trace_usb_ohci_td_dev_error();
  938. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_DEVICENOTRESPONDING);
  939. break;
  940. case USB_RET_NAK:
  941. trace_usb_ohci_td_nak();
  942. return 1;
  943. case USB_RET_STALL:
  944. trace_usb_ohci_td_stall();
  945. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_STALL);
  946. break;
  947. case USB_RET_BABBLE:
  948. trace_usb_ohci_td_babble();
  949. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_DATAOVERRUN);
  950. break;
  951. default:
  952. trace_usb_ohci_td_bad_device_response(ret);
  953. OHCI_SET_BM(td.flags, TD_CC, OHCI_CC_UNDEXPETEDPID);
  954. OHCI_SET_BM(td.flags, TD_EC, 3);
  955. break;
  956. }
  957. /*
  958. * An error occurred so we have to clear the interrupt counter.
  959. * See spec at 6.4.4 on page 104
  960. */
  961. ohci->done_count = 0;
  962. }
  963. ed->head |= OHCI_ED_H;
  964. }
  965. /* Retire this TD */
  966. ed->head &= ~OHCI_DPTR_MASK;
  967. ed->head |= td.next & OHCI_DPTR_MASK;
  968. td.next = ohci->done;
  969. ohci->done = addr;
  970. i = OHCI_BM(td.flags, TD_DI);
  971. if (i < ohci->done_count) {
  972. ohci->done_count = i;
  973. }
  974. exit_no_retire:
  975. if (ohci_put_td(ohci, addr, &td)) {
  976. ohci_die(ohci);
  977. return 1;
  978. }
  979. return OHCI_BM(td.flags, TD_CC) != OHCI_CC_NOERROR;
  980. }
  981. /* Service an endpoint list. Returns nonzero if active TD were found. */
  982. static int ohci_service_ed_list(OHCIState *ohci, uint32_t head)
  983. {
  984. struct ohci_ed ed;
  985. uint32_t next_ed;
  986. uint32_t cur;
  987. int active;
  988. uint32_t link_cnt = 0;
  989. active = 0;
  990. if (head == 0) {
  991. return 0;
  992. }
  993. for (cur = head; cur && link_cnt++ < ED_LINK_LIMIT; cur = next_ed) {
  994. if (ohci_read_ed(ohci, cur, &ed)) {
  995. trace_usb_ohci_ed_read_error(cur);
  996. ohci_die(ohci);
  997. return 0;
  998. }
  999. next_ed = ed.next & OHCI_DPTR_MASK;
  1000. if ((ed.head & OHCI_ED_H) || (ed.flags & OHCI_ED_K)) {
  1001. uint32_t addr;
  1002. /* Cancel pending packets for ED that have been paused. */
  1003. addr = ed.head & OHCI_DPTR_MASK;
  1004. if (ohci->async_td && addr == ohci->async_td) {
  1005. usb_cancel_packet(&ohci->usb_packet);
  1006. ohci->async_td = 0;
  1007. usb_device_ep_stopped(ohci->usb_packet.ep->dev,
  1008. ohci->usb_packet.ep);
  1009. }
  1010. continue;
  1011. }
  1012. while ((ed.head & OHCI_DPTR_MASK) != ed.tail) {
  1013. trace_usb_ohci_ed_pkt(cur, (ed.head & OHCI_ED_H) != 0,
  1014. (ed.head & OHCI_ED_C) != 0, ed.head & OHCI_DPTR_MASK,
  1015. ed.tail & OHCI_DPTR_MASK, ed.next & OHCI_DPTR_MASK);
  1016. trace_usb_ohci_ed_pkt_flags(
  1017. OHCI_BM(ed.flags, ED_FA), OHCI_BM(ed.flags, ED_EN),
  1018. OHCI_BM(ed.flags, ED_D), (ed.flags & OHCI_ED_S) != 0,
  1019. (ed.flags & OHCI_ED_K) != 0, (ed.flags & OHCI_ED_F) != 0,
  1020. OHCI_BM(ed.flags, ED_MPS));
  1021. active = 1;
  1022. if ((ed.flags & OHCI_ED_F) == 0) {
  1023. if (ohci_service_td(ohci, &ed)) {
  1024. break;
  1025. }
  1026. } else {
  1027. /* Handle isochronous endpoints */
  1028. if (ohci_service_iso_td(ohci, &ed)) {
  1029. break;
  1030. }
  1031. }
  1032. }
  1033. if (ohci_put_ed(ohci, cur, &ed)) {
  1034. ohci_die(ohci);
  1035. return 0;
  1036. }
  1037. }
  1038. return active;
  1039. }
  1040. /* set a timer for EOF */
  1041. static void ohci_eof_timer(OHCIState *ohci)
  1042. {
  1043. timer_mod(ohci->eof_timer, ohci->sof_time + usb_frame_time);
  1044. }
  1045. /* Set a timer for EOF and generate a SOF event */
  1046. static void ohci_sof(OHCIState *ohci)
  1047. {
  1048. ohci->sof_time += usb_frame_time;
  1049. ohci_eof_timer(ohci);
  1050. ohci_set_interrupt(ohci, OHCI_INTR_SF);
  1051. }
  1052. /* Process Control and Bulk lists. */
  1053. static void ohci_process_lists(OHCIState *ohci)
  1054. {
  1055. if ((ohci->ctl & OHCI_CTL_CLE) && (ohci->status & OHCI_STATUS_CLF)) {
  1056. if (ohci->ctrl_cur && ohci->ctrl_cur != ohci->ctrl_head) {
  1057. trace_usb_ohci_process_lists(ohci->ctrl_head, ohci->ctrl_cur);
  1058. }
  1059. if (!ohci_service_ed_list(ohci, ohci->ctrl_head)) {
  1060. ohci->ctrl_cur = 0;
  1061. ohci->status &= ~OHCI_STATUS_CLF;
  1062. }
  1063. }
  1064. if ((ohci->ctl & OHCI_CTL_BLE) && (ohci->status & OHCI_STATUS_BLF)) {
  1065. if (!ohci_service_ed_list(ohci, ohci->bulk_head)) {
  1066. ohci->bulk_cur = 0;
  1067. ohci->status &= ~OHCI_STATUS_BLF;
  1068. }
  1069. }
  1070. }
  1071. /* Do frame processing on frame boundary */
  1072. static void ohci_frame_boundary(void *opaque)
  1073. {
  1074. OHCIState *ohci = opaque;
  1075. struct ohci_hcca hcca;
  1076. if (ohci_read_hcca(ohci, ohci->hcca, &hcca)) {
  1077. trace_usb_ohci_hcca_read_error(ohci->hcca);
  1078. ohci_die(ohci);
  1079. return;
  1080. }
  1081. /* Process all the lists at the end of the frame */
  1082. if (ohci->ctl & OHCI_CTL_PLE) {
  1083. int n;
  1084. n = ohci->frame_number & 0x1f;
  1085. ohci_service_ed_list(ohci, le32_to_cpu(hcca.intr[n]));
  1086. }
  1087. /* Cancel all pending packets if either of the lists has been disabled. */
  1088. if (ohci->old_ctl & (~ohci->ctl) & (OHCI_CTL_BLE | OHCI_CTL_CLE)) {
  1089. ohci_stop_endpoints(ohci);
  1090. }
  1091. ohci->old_ctl = ohci->ctl;
  1092. ohci_process_lists(ohci);
  1093. /* Stop if UnrecoverableError happened or ohci_sof will crash */
  1094. if (ohci->intr_status & OHCI_INTR_UE) {
  1095. return;
  1096. }
  1097. /* Frame boundary, so do EOF stuf here */
  1098. ohci->frt = ohci->fit;
  1099. /* Increment frame number and take care of endianness. */
  1100. ohci->frame_number = (ohci->frame_number + 1) & 0xffff;
  1101. hcca.frame = cpu_to_le16(ohci->frame_number);
  1102. if (ohci->done_count == 0 && !(ohci->intr_status & OHCI_INTR_WD)) {
  1103. if (!ohci->done) {
  1104. abort();
  1105. }
  1106. if (ohci->intr & ohci->intr_status) {
  1107. ohci->done |= 1;
  1108. }
  1109. hcca.done = cpu_to_le32(ohci->done);
  1110. ohci->done = 0;
  1111. ohci->done_count = 7;
  1112. ohci_set_interrupt(ohci, OHCI_INTR_WD);
  1113. }
  1114. if (ohci->done_count != 7 && ohci->done_count != 0) {
  1115. ohci->done_count--;
  1116. }
  1117. /* Do SOF stuff here */
  1118. ohci_sof(ohci);
  1119. /* Writeback HCCA */
  1120. if (ohci_put_hcca(ohci, ohci->hcca, &hcca)) {
  1121. ohci_die(ohci);
  1122. }
  1123. }
  1124. /*
  1125. * Start sending SOF tokens across the USB bus, lists are processed in
  1126. * next frame
  1127. */
  1128. static int ohci_bus_start(OHCIState *ohci)
  1129. {
  1130. trace_usb_ohci_start(ohci->name);
  1131. /*
  1132. * Delay the first SOF event by one frame time as linux driver is
  1133. * not ready to receive it and can meet some race conditions
  1134. */
  1135. ohci->sof_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
  1136. ohci_eof_timer(ohci);
  1137. return 1;
  1138. }
  1139. /* Stop sending SOF tokens on the bus */
  1140. void ohci_bus_stop(OHCIState *ohci)
  1141. {
  1142. trace_usb_ohci_stop(ohci->name);
  1143. timer_del(ohci->eof_timer);
  1144. }
  1145. /* Frame interval toggle is manipulated by the hcd only */
  1146. static void ohci_set_frame_interval(OHCIState *ohci, uint16_t val)
  1147. {
  1148. val &= OHCI_FMI_FI;
  1149. if (val != ohci->fi) {
  1150. trace_usb_ohci_set_frame_interval(ohci->name, ohci->fi, ohci->fi);
  1151. }
  1152. ohci->fi = val;
  1153. }
  1154. static void ohci_port_power(OHCIState *ohci, int i, int p)
  1155. {
  1156. if (p) {
  1157. ohci->rhport[i].ctrl |= OHCI_PORT_PPS;
  1158. } else {
  1159. ohci->rhport[i].ctrl &= ~(OHCI_PORT_PPS | OHCI_PORT_CCS |
  1160. OHCI_PORT_PSS | OHCI_PORT_PRS);
  1161. }
  1162. }
  1163. /* Set HcControlRegister */
  1164. static void ohci_set_ctl(OHCIState *ohci, uint32_t val)
  1165. {
  1166. uint32_t old_state;
  1167. uint32_t new_state;
  1168. old_state = ohci->ctl & OHCI_CTL_HCFS;
  1169. ohci->ctl = val;
  1170. new_state = ohci->ctl & OHCI_CTL_HCFS;
  1171. /* no state change */
  1172. if (old_state == new_state) {
  1173. return;
  1174. }
  1175. trace_usb_ohci_set_ctl(ohci->name, new_state);
  1176. switch (new_state) {
  1177. case OHCI_USB_OPERATIONAL:
  1178. ohci_bus_start(ohci);
  1179. break;
  1180. case OHCI_USB_SUSPEND:
  1181. ohci_bus_stop(ohci);
  1182. /* clear pending SF otherwise linux driver loops in ohci_irq() */
  1183. ohci->intr_status &= ~OHCI_INTR_SF;
  1184. ohci_intr_update(ohci);
  1185. break;
  1186. case OHCI_USB_RESUME:
  1187. trace_usb_ohci_resume(ohci->name);
  1188. break;
  1189. case OHCI_USB_RESET:
  1190. ohci_roothub_reset(ohci);
  1191. break;
  1192. }
  1193. }
  1194. static uint32_t ohci_get_frame_remaining(OHCIState *ohci)
  1195. {
  1196. uint16_t fr;
  1197. int64_t tks;
  1198. if ((ohci->ctl & OHCI_CTL_HCFS) != OHCI_USB_OPERATIONAL) {
  1199. return ohci->frt << 31;
  1200. }
  1201. /* Being in USB operational state guarnatees sof_time was set already. */
  1202. tks = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - ohci->sof_time;
  1203. if (tks < 0) {
  1204. tks = 0;
  1205. }
  1206. /* avoid muldiv if possible */
  1207. if (tks >= usb_frame_time) {
  1208. return ohci->frt << 31;
  1209. }
  1210. tks = tks / usb_bit_time;
  1211. fr = (uint16_t)(ohci->fi - tks);
  1212. return (ohci->frt << 31) | fr;
  1213. }
  1214. /* Set root hub status */
  1215. static void ohci_set_hub_status(OHCIState *ohci, uint32_t val)
  1216. {
  1217. uint32_t old_state;
  1218. old_state = ohci->rhstatus;
  1219. /* write 1 to clear OCIC */
  1220. if (val & OHCI_RHS_OCIC) {
  1221. ohci->rhstatus &= ~OHCI_RHS_OCIC;
  1222. }
  1223. if (val & OHCI_RHS_LPS) {
  1224. int i;
  1225. for (i = 0; i < ohci->num_ports; i++) {
  1226. ohci_port_power(ohci, i, 0);
  1227. }
  1228. trace_usb_ohci_hub_power_down();
  1229. }
  1230. if (val & OHCI_RHS_LPSC) {
  1231. int i;
  1232. for (i = 0; i < ohci->num_ports; i++) {
  1233. ohci_port_power(ohci, i, 1);
  1234. }
  1235. trace_usb_ohci_hub_power_up();
  1236. }
  1237. if (val & OHCI_RHS_DRWE) {
  1238. ohci->rhstatus |= OHCI_RHS_DRWE;
  1239. }
  1240. if (val & OHCI_RHS_CRWE) {
  1241. ohci->rhstatus &= ~OHCI_RHS_DRWE;
  1242. }
  1243. if (old_state != ohci->rhstatus) {
  1244. ohci_set_interrupt(ohci, OHCI_INTR_RHSC);
  1245. }
  1246. }
  1247. /* This is the one state transition the controller can do by itself */
  1248. static bool ohci_resume(OHCIState *s)
  1249. {
  1250. if ((s->ctl & OHCI_CTL_HCFS) == OHCI_USB_SUSPEND) {
  1251. trace_usb_ohci_remote_wakeup(s->name);
  1252. s->ctl &= ~OHCI_CTL_HCFS;
  1253. s->ctl |= OHCI_USB_RESUME;
  1254. return true;
  1255. }
  1256. return false;
  1257. }
  1258. /*
  1259. * Sets a flag in a port status reg but only set it if the port is connected.
  1260. * If not set ConnectStatusChange flag. If flag is enabled return 1.
  1261. */
  1262. static int ohci_port_set_if_connected(OHCIState *ohci, int i, uint32_t val)
  1263. {
  1264. int ret = 1;
  1265. /* writing a 0 has no effect */
  1266. if (val == 0) {
  1267. return 0;
  1268. }
  1269. /* If CurrentConnectStatus is cleared we set ConnectStatusChange */
  1270. if (!(ohci->rhport[i].ctrl & OHCI_PORT_CCS)) {
  1271. ohci->rhport[i].ctrl |= OHCI_PORT_CSC;
  1272. if (ohci->rhstatus & OHCI_RHS_DRWE) {
  1273. /* CSC is a wakeup event */
  1274. if (ohci_resume(ohci)) {
  1275. ohci_set_interrupt(ohci, OHCI_INTR_RD);
  1276. }
  1277. }
  1278. return 0;
  1279. }
  1280. if (ohci->rhport[i].ctrl & val) {
  1281. ret = 0;
  1282. }
  1283. /* set the bit */
  1284. ohci->rhport[i].ctrl |= val;
  1285. return ret;
  1286. }
  1287. /* Set root hub port status */
  1288. static void ohci_port_set_status(OHCIState *ohci, int portnum, uint32_t val)
  1289. {
  1290. uint32_t old_state;
  1291. OHCIPort *port;
  1292. port = &ohci->rhport[portnum];
  1293. old_state = port->ctrl;
  1294. /* Write to clear CSC, PESC, PSSC, OCIC, PRSC */
  1295. if (val & OHCI_PORT_WTC) {
  1296. port->ctrl &= ~(val & OHCI_PORT_WTC);
  1297. }
  1298. if (val & OHCI_PORT_CCS) {
  1299. port->ctrl &= ~OHCI_PORT_PES;
  1300. }
  1301. ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PES);
  1302. if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PSS)) {
  1303. trace_usb_ohci_port_suspend(portnum);
  1304. }
  1305. if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PRS)) {
  1306. trace_usb_ohci_port_reset(portnum);
  1307. usb_device_reset(port->port.dev);
  1308. port->ctrl &= ~OHCI_PORT_PRS;
  1309. /* ??? Should this also set OHCI_PORT_PESC. */
  1310. port->ctrl |= OHCI_PORT_PES | OHCI_PORT_PRSC;
  1311. }
  1312. /* Invert order here to ensure in ambiguous case, device is powered up. */
  1313. if (val & OHCI_PORT_LSDA) {
  1314. ohci_port_power(ohci, portnum, 0);
  1315. }
  1316. if (val & OHCI_PORT_PPS) {
  1317. ohci_port_power(ohci, portnum, 1);
  1318. }
  1319. if (old_state != port->ctrl) {
  1320. ohci_set_interrupt(ohci, OHCI_INTR_RHSC);
  1321. }
  1322. }
  1323. static uint64_t ohci_mem_read(void *opaque,
  1324. hwaddr addr,
  1325. unsigned size)
  1326. {
  1327. OHCIState *ohci = opaque;
  1328. uint32_t retval;
  1329. /* Only aligned reads are allowed on OHCI */
  1330. if (addr & 3) {
  1331. trace_usb_ohci_mem_read_unaligned(addr);
  1332. return 0xffffffff;
  1333. } else if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {
  1334. /* HcRhPortStatus */
  1335. retval = ohci->rhport[(addr - 0x54) >> 2].ctrl | OHCI_PORT_PPS;
  1336. trace_usb_ohci_mem_port_read(size, "HcRhPortStatus", (addr - 0x50) >> 2,
  1337. addr, addr >> 2, retval);
  1338. } else {
  1339. switch (addr >> 2) {
  1340. case 0: /* HcRevision */
  1341. retval = 0x10;
  1342. break;
  1343. case 1: /* HcControl */
  1344. retval = ohci->ctl;
  1345. break;
  1346. case 2: /* HcCommandStatus */
  1347. retval = ohci->status;
  1348. break;
  1349. case 3: /* HcInterruptStatus */
  1350. retval = ohci->intr_status;
  1351. break;
  1352. case 4: /* HcInterruptEnable */
  1353. case 5: /* HcInterruptDisable */
  1354. retval = ohci->intr;
  1355. break;
  1356. case 6: /* HcHCCA */
  1357. retval = ohci->hcca;
  1358. break;
  1359. case 7: /* HcPeriodCurrentED */
  1360. retval = ohci->per_cur;
  1361. break;
  1362. case 8: /* HcControlHeadED */
  1363. retval = ohci->ctrl_head;
  1364. break;
  1365. case 9: /* HcControlCurrentED */
  1366. retval = ohci->ctrl_cur;
  1367. break;
  1368. case 10: /* HcBulkHeadED */
  1369. retval = ohci->bulk_head;
  1370. break;
  1371. case 11: /* HcBulkCurrentED */
  1372. retval = ohci->bulk_cur;
  1373. break;
  1374. case 12: /* HcDoneHead */
  1375. retval = ohci->done;
  1376. break;
  1377. case 13: /* HcFmInterretval */
  1378. retval = (ohci->fit << 31) | (ohci->fsmps << 16) | (ohci->fi);
  1379. break;
  1380. case 14: /* HcFmRemaining */
  1381. retval = ohci_get_frame_remaining(ohci);
  1382. break;
  1383. case 15: /* HcFmNumber */
  1384. retval = ohci->frame_number;
  1385. break;
  1386. case 16: /* HcPeriodicStart */
  1387. retval = ohci->pstart;
  1388. break;
  1389. case 17: /* HcLSThreshold */
  1390. retval = ohci->lst;
  1391. break;
  1392. case 18: /* HcRhDescriptorA */
  1393. retval = ohci->rhdesc_a;
  1394. break;
  1395. case 19: /* HcRhDescriptorB */
  1396. retval = ohci->rhdesc_b;
  1397. break;
  1398. case 20: /* HcRhStatus */
  1399. retval = ohci->rhstatus;
  1400. break;
  1401. /* PXA27x specific registers */
  1402. case 24: /* HcStatus */
  1403. retval = ohci->hstatus & ohci->hmask;
  1404. break;
  1405. case 25: /* HcHReset */
  1406. retval = ohci->hreset;
  1407. break;
  1408. case 26: /* HcHInterruptEnable */
  1409. retval = ohci->hmask;
  1410. break;
  1411. case 27: /* HcHInterruptTest */
  1412. retval = ohci->htest;
  1413. break;
  1414. default:
  1415. trace_usb_ohci_mem_read_bad_offset(addr);
  1416. retval = 0xffffffff;
  1417. }
  1418. if (addr != 0xc || retval) {
  1419. trace_usb_ohci_mem_read(size, ohci_reg_name(addr), addr, addr >> 2,
  1420. retval);
  1421. }
  1422. }
  1423. return retval;
  1424. }
  1425. static void ohci_mem_write(void *opaque,
  1426. hwaddr addr,
  1427. uint64_t val,
  1428. unsigned size)
  1429. {
  1430. OHCIState *ohci = opaque;
  1431. /* Only aligned reads are allowed on OHCI */
  1432. if (addr & 3) {
  1433. trace_usb_ohci_mem_write_unaligned(addr);
  1434. return;
  1435. }
  1436. if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {
  1437. /* HcRhPortStatus */
  1438. trace_usb_ohci_mem_port_write(size, "HcRhPortStatus",
  1439. (addr - 0x50) >> 2, addr, addr >> 2, val);
  1440. ohci_port_set_status(ohci, (addr - 0x54) >> 2, val);
  1441. return;
  1442. }
  1443. trace_usb_ohci_mem_write(size, ohci_reg_name(addr), addr, addr >> 2, val);
  1444. switch (addr >> 2) {
  1445. case 1: /* HcControl */
  1446. ohci_set_ctl(ohci, val);
  1447. break;
  1448. case 2: /* HcCommandStatus */
  1449. /* SOC is read-only */
  1450. val = (val & ~OHCI_STATUS_SOC);
  1451. /* Bits written as '0' remain unchanged in the register */
  1452. ohci->status |= val;
  1453. if (ohci->status & OHCI_STATUS_HCR) {
  1454. ohci_soft_reset(ohci);
  1455. }
  1456. break;
  1457. case 3: /* HcInterruptStatus */
  1458. ohci->intr_status &= ~val;
  1459. ohci_intr_update(ohci);
  1460. break;
  1461. case 4: /* HcInterruptEnable */
  1462. ohci->intr |= val;
  1463. ohci_intr_update(ohci);
  1464. break;
  1465. case 5: /* HcInterruptDisable */
  1466. ohci->intr &= ~val;
  1467. ohci_intr_update(ohci);
  1468. break;
  1469. case 6: /* HcHCCA */
  1470. ohci->hcca = val & OHCI_HCCA_MASK;
  1471. break;
  1472. case 7: /* HcPeriodCurrentED */
  1473. /* Ignore writes to this read-only register, Linux does them */
  1474. break;
  1475. case 8: /* HcControlHeadED */
  1476. ohci->ctrl_head = val & OHCI_EDPTR_MASK;
  1477. break;
  1478. case 9: /* HcControlCurrentED */
  1479. ohci->ctrl_cur = val & OHCI_EDPTR_MASK;
  1480. break;
  1481. case 10: /* HcBulkHeadED */
  1482. ohci->bulk_head = val & OHCI_EDPTR_MASK;
  1483. break;
  1484. case 11: /* HcBulkCurrentED */
  1485. ohci->bulk_cur = val & OHCI_EDPTR_MASK;
  1486. break;
  1487. case 13: /* HcFmInterval */
  1488. ohci->fsmps = (val & OHCI_FMI_FSMPS) >> 16;
  1489. ohci->fit = (val & OHCI_FMI_FIT) >> 31;
  1490. ohci_set_frame_interval(ohci, val);
  1491. break;
  1492. case 15: /* HcFmNumber */
  1493. break;
  1494. case 16: /* HcPeriodicStart */
  1495. ohci->pstart = val & 0xffff;
  1496. break;
  1497. case 17: /* HcLSThreshold */
  1498. ohci->lst = val & 0xffff;
  1499. break;
  1500. case 18: /* HcRhDescriptorA */
  1501. ohci->rhdesc_a &= ~OHCI_RHA_RW_MASK;
  1502. ohci->rhdesc_a |= val & OHCI_RHA_RW_MASK;
  1503. break;
  1504. case 19: /* HcRhDescriptorB */
  1505. break;
  1506. case 20: /* HcRhStatus */
  1507. ohci_set_hub_status(ohci, val);
  1508. break;
  1509. /* PXA27x specific registers */
  1510. case 24: /* HcStatus */
  1511. ohci->hstatus &= ~(val & ohci->hmask);
  1512. break;
  1513. case 25: /* HcHReset */
  1514. ohci->hreset = val & ~OHCI_HRESET_FSBIR;
  1515. if (val & OHCI_HRESET_FSBIR) {
  1516. ohci_hard_reset(ohci);
  1517. }
  1518. break;
  1519. case 26: /* HcHInterruptEnable */
  1520. ohci->hmask = val;
  1521. break;
  1522. case 27: /* HcHInterruptTest */
  1523. ohci->htest = val;
  1524. break;
  1525. default:
  1526. trace_usb_ohci_mem_write_bad_offset(addr);
  1527. break;
  1528. }
  1529. }
  1530. static const MemoryRegionOps ohci_mem_ops = {
  1531. .read = ohci_mem_read,
  1532. .write = ohci_mem_write,
  1533. .endianness = DEVICE_LITTLE_ENDIAN,
  1534. };
  1535. /* USBPortOps */
  1536. static void ohci_attach(USBPort *port1)
  1537. {
  1538. OHCIState *s = port1->opaque;
  1539. OHCIPort *port = &s->rhport[port1->index];
  1540. uint32_t old_state = port->ctrl;
  1541. /* set connect status */
  1542. port->ctrl |= OHCI_PORT_CCS | OHCI_PORT_CSC;
  1543. /* update speed */
  1544. if (port->port.dev->speed == USB_SPEED_LOW) {
  1545. port->ctrl |= OHCI_PORT_LSDA;
  1546. } else {
  1547. port->ctrl &= ~OHCI_PORT_LSDA;
  1548. }
  1549. /* notify of remote-wakeup */
  1550. if ((s->ctl & OHCI_CTL_HCFS) == OHCI_USB_SUSPEND) {
  1551. ohci_set_interrupt(s, OHCI_INTR_RD);
  1552. }
  1553. trace_usb_ohci_port_attach(port1->index);
  1554. if (old_state != port->ctrl) {
  1555. ohci_set_interrupt(s, OHCI_INTR_RHSC);
  1556. }
  1557. }
  1558. static void ohci_child_detach(USBPort *port1, USBDevice *dev)
  1559. {
  1560. OHCIState *ohci = port1->opaque;
  1561. if (ohci->async_td &&
  1562. usb_packet_is_inflight(&ohci->usb_packet) &&
  1563. ohci->usb_packet.ep->dev == dev) {
  1564. usb_cancel_packet(&ohci->usb_packet);
  1565. ohci->async_td = 0;
  1566. }
  1567. }
  1568. static void ohci_detach(USBPort *port1)
  1569. {
  1570. OHCIState *s = port1->opaque;
  1571. OHCIPort *port = &s->rhport[port1->index];
  1572. uint32_t old_state = port->ctrl;
  1573. ohci_child_detach(port1, port1->dev);
  1574. /* set connect status */
  1575. if (port->ctrl & OHCI_PORT_CCS) {
  1576. port->ctrl &= ~OHCI_PORT_CCS;
  1577. port->ctrl |= OHCI_PORT_CSC;
  1578. }
  1579. /* disable port */
  1580. if (port->ctrl & OHCI_PORT_PES) {
  1581. port->ctrl &= ~OHCI_PORT_PES;
  1582. port->ctrl |= OHCI_PORT_PESC;
  1583. }
  1584. trace_usb_ohci_port_detach(port1->index);
  1585. if (old_state != port->ctrl) {
  1586. ohci_set_interrupt(s, OHCI_INTR_RHSC);
  1587. }
  1588. }
  1589. static void ohci_wakeup(USBPort *port1)
  1590. {
  1591. OHCIState *s = port1->opaque;
  1592. OHCIPort *port = &s->rhport[port1->index];
  1593. uint32_t intr = 0;
  1594. if (port->ctrl & OHCI_PORT_PSS) {
  1595. trace_usb_ohci_port_wakeup(port1->index);
  1596. port->ctrl |= OHCI_PORT_PSSC;
  1597. port->ctrl &= ~OHCI_PORT_PSS;
  1598. intr = OHCI_INTR_RHSC;
  1599. }
  1600. /* Note that the controller can be suspended even if this port is not */
  1601. if (ohci_resume(s)) {
  1602. /*
  1603. * In suspend mode only ResumeDetected is possible, not RHSC:
  1604. * see the OHCI spec 5.1.2.3.
  1605. */
  1606. intr = OHCI_INTR_RD;
  1607. }
  1608. ohci_set_interrupt(s, intr);
  1609. }
  1610. static void ohci_async_complete_packet(USBPort *port, USBPacket *packet)
  1611. {
  1612. OHCIState *ohci = container_of(packet, OHCIState, usb_packet);
  1613. trace_usb_ohci_async_complete();
  1614. ohci->async_complete = true;
  1615. ohci_process_lists(ohci);
  1616. }
  1617. static USBPortOps ohci_port_ops = {
  1618. .attach = ohci_attach,
  1619. .detach = ohci_detach,
  1620. .child_detach = ohci_child_detach,
  1621. .wakeup = ohci_wakeup,
  1622. .complete = ohci_async_complete_packet,
  1623. };
  1624. static USBBusOps ohci_bus_ops = {
  1625. };
  1626. void usb_ohci_init(OHCIState *ohci, DeviceState *dev, uint32_t num_ports,
  1627. dma_addr_t localmem_base, char *masterbus,
  1628. uint32_t firstport, AddressSpace *as,
  1629. void (*ohci_die_fn)(OHCIState *), Error **errp)
  1630. {
  1631. Error *err = NULL;
  1632. int i;
  1633. ohci->as = as;
  1634. ohci->ohci_die = ohci_die_fn;
  1635. if (num_ports > OHCI_MAX_PORTS) {
  1636. error_setg(errp, "OHCI num-ports=%u is too big (limit is %u ports)",
  1637. num_ports, OHCI_MAX_PORTS);
  1638. return;
  1639. }
  1640. if (usb_frame_time == 0) {
  1641. #ifdef OHCI_TIME_WARP
  1642. usb_frame_time = NANOSECONDS_PER_SECOND;
  1643. usb_bit_time = NANOSECONDS_PER_SECOND / (USB_HZ / 1000);
  1644. #else
  1645. usb_frame_time = NANOSECONDS_PER_SECOND / 1000;
  1646. if (NANOSECONDS_PER_SECOND >= USB_HZ) {
  1647. usb_bit_time = NANOSECONDS_PER_SECOND / USB_HZ;
  1648. } else {
  1649. usb_bit_time = 1;
  1650. }
  1651. #endif
  1652. trace_usb_ohci_init_time(usb_frame_time, usb_bit_time);
  1653. }
  1654. ohci->num_ports = num_ports;
  1655. if (masterbus) {
  1656. USBPort *ports[OHCI_MAX_PORTS];
  1657. for (i = 0; i < num_ports; i++) {
  1658. ports[i] = &ohci->rhport[i].port;
  1659. }
  1660. usb_register_companion(masterbus, ports, num_ports,
  1661. firstport, ohci, &ohci_port_ops,
  1662. USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL,
  1663. &err);
  1664. if (err) {
  1665. error_propagate(errp, err);
  1666. return;
  1667. }
  1668. } else {
  1669. usb_bus_new(&ohci->bus, sizeof(ohci->bus), &ohci_bus_ops, dev);
  1670. for (i = 0; i < num_ports; i++) {
  1671. usb_register_port(&ohci->bus, &ohci->rhport[i].port,
  1672. ohci, i, &ohci_port_ops,
  1673. USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
  1674. }
  1675. }
  1676. memory_region_init_io(&ohci->mem, OBJECT(dev), &ohci_mem_ops,
  1677. ohci, "ohci", 256);
  1678. ohci->localmem_base = localmem_base;
  1679. ohci->name = object_get_typename(OBJECT(dev));
  1680. usb_packet_init(&ohci->usb_packet);
  1681. ohci->async_td = 0;
  1682. ohci->eof_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
  1683. ohci_frame_boundary, ohci);
  1684. }
  1685. /*
  1686. * A typical OHCI will stop operating and set itself into error state
  1687. * (which can be queried by MMIO) to signal that it got an error.
  1688. */
  1689. void ohci_sysbus_die(struct OHCIState *ohci)
  1690. {
  1691. trace_usb_ohci_die();
  1692. ohci_set_interrupt(ohci, OHCI_INTR_UE);
  1693. ohci_bus_stop(ohci);
  1694. }
  1695. static void ohci_realize_pxa(DeviceState *dev, Error **errp)
  1696. {
  1697. OHCISysBusState *s = SYSBUS_OHCI(dev);
  1698. SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
  1699. Error *err = NULL;
  1700. usb_ohci_init(&s->ohci, dev, s->num_ports, s->dma_offset,
  1701. s->masterbus, s->firstport,
  1702. &address_space_memory, ohci_sysbus_die, &err);
  1703. if (err) {
  1704. error_propagate(errp, err);
  1705. return;
  1706. }
  1707. sysbus_init_irq(sbd, &s->ohci.irq);
  1708. sysbus_init_mmio(sbd, &s->ohci.mem);
  1709. }
  1710. static void usb_ohci_reset_sysbus(DeviceState *dev)
  1711. {
  1712. OHCISysBusState *s = SYSBUS_OHCI(dev);
  1713. OHCIState *ohci = &s->ohci;
  1714. ohci_hard_reset(ohci);
  1715. }
  1716. static const VMStateDescription vmstate_ohci_state_port = {
  1717. .name = "ohci-core/port",
  1718. .version_id = 1,
  1719. .minimum_version_id = 1,
  1720. .fields = (VMStateField[]) {
  1721. VMSTATE_UINT32(ctrl, OHCIPort),
  1722. VMSTATE_END_OF_LIST()
  1723. },
  1724. };
  1725. static bool ohci_eof_timer_needed(void *opaque)
  1726. {
  1727. OHCIState *ohci = opaque;
  1728. return timer_pending(ohci->eof_timer);
  1729. }
  1730. static const VMStateDescription vmstate_ohci_eof_timer = {
  1731. .name = "ohci-core/eof-timer",
  1732. .version_id = 1,
  1733. .minimum_version_id = 1,
  1734. .needed = ohci_eof_timer_needed,
  1735. .fields = (VMStateField[]) {
  1736. VMSTATE_TIMER_PTR(eof_timer, OHCIState),
  1737. VMSTATE_END_OF_LIST()
  1738. },
  1739. };
  1740. const VMStateDescription vmstate_ohci_state = {
  1741. .name = "ohci-core",
  1742. .version_id = 1,
  1743. .minimum_version_id = 1,
  1744. .fields = (VMStateField[]) {
  1745. VMSTATE_INT64(sof_time, OHCIState),
  1746. VMSTATE_UINT32(ctl, OHCIState),
  1747. VMSTATE_UINT32(status, OHCIState),
  1748. VMSTATE_UINT32(intr_status, OHCIState),
  1749. VMSTATE_UINT32(intr, OHCIState),
  1750. VMSTATE_UINT32(hcca, OHCIState),
  1751. VMSTATE_UINT32(ctrl_head, OHCIState),
  1752. VMSTATE_UINT32(ctrl_cur, OHCIState),
  1753. VMSTATE_UINT32(bulk_head, OHCIState),
  1754. VMSTATE_UINT32(bulk_cur, OHCIState),
  1755. VMSTATE_UINT32(per_cur, OHCIState),
  1756. VMSTATE_UINT32(done, OHCIState),
  1757. VMSTATE_INT32(done_count, OHCIState),
  1758. VMSTATE_UINT16(fsmps, OHCIState),
  1759. VMSTATE_UINT8(fit, OHCIState),
  1760. VMSTATE_UINT16(fi, OHCIState),
  1761. VMSTATE_UINT8(frt, OHCIState),
  1762. VMSTATE_UINT16(frame_number, OHCIState),
  1763. VMSTATE_UINT16(padding, OHCIState),
  1764. VMSTATE_UINT32(pstart, OHCIState),
  1765. VMSTATE_UINT32(lst, OHCIState),
  1766. VMSTATE_UINT32(rhdesc_a, OHCIState),
  1767. VMSTATE_UINT32(rhdesc_b, OHCIState),
  1768. VMSTATE_UINT32(rhstatus, OHCIState),
  1769. VMSTATE_STRUCT_ARRAY(rhport, OHCIState, OHCI_MAX_PORTS, 0,
  1770. vmstate_ohci_state_port, OHCIPort),
  1771. VMSTATE_UINT32(hstatus, OHCIState),
  1772. VMSTATE_UINT32(hmask, OHCIState),
  1773. VMSTATE_UINT32(hreset, OHCIState),
  1774. VMSTATE_UINT32(htest, OHCIState),
  1775. VMSTATE_UINT32(old_ctl, OHCIState),
  1776. VMSTATE_UINT8_ARRAY(usb_buf, OHCIState, 8192),
  1777. VMSTATE_UINT32(async_td, OHCIState),
  1778. VMSTATE_BOOL(async_complete, OHCIState),
  1779. VMSTATE_END_OF_LIST()
  1780. },
  1781. .subsections = (const VMStateDescription*[]) {
  1782. &vmstate_ohci_eof_timer,
  1783. NULL
  1784. }
  1785. };
  1786. static Property ohci_sysbus_properties[] = {
  1787. DEFINE_PROP_STRING("masterbus", OHCISysBusState, masterbus),
  1788. DEFINE_PROP_UINT32("num-ports", OHCISysBusState, num_ports, 3),
  1789. DEFINE_PROP_UINT32("firstport", OHCISysBusState, firstport, 0),
  1790. DEFINE_PROP_DMAADDR("dma-offset", OHCISysBusState, dma_offset, 0),
  1791. DEFINE_PROP_END_OF_LIST(),
  1792. };
  1793. static void ohci_sysbus_class_init(ObjectClass *klass, void *data)
  1794. {
  1795. DeviceClass *dc = DEVICE_CLASS(klass);
  1796. dc->realize = ohci_realize_pxa;
  1797. set_bit(DEVICE_CATEGORY_USB, dc->categories);
  1798. dc->desc = "OHCI USB Controller";
  1799. device_class_set_props(dc, ohci_sysbus_properties);
  1800. dc->reset = usb_ohci_reset_sysbus;
  1801. }
  1802. static const TypeInfo ohci_sysbus_info = {
  1803. .name = TYPE_SYSBUS_OHCI,
  1804. .parent = TYPE_SYS_BUS_DEVICE,
  1805. .instance_size = sizeof(OHCISysBusState),
  1806. .class_init = ohci_sysbus_class_init,
  1807. };
  1808. static void ohci_register_types(void)
  1809. {
  1810. type_register_static(&ohci_sysbus_info);
  1811. }
  1812. type_init(ohci_register_types)