hcd-ohci.c 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089
  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. /* When the HC updates frame number, set pad to 0. Ref OHCI Spec 4.4.1*/
  1103. hcca.pad = 0;
  1104. if (ohci->done_count == 0 && !(ohci->intr_status & OHCI_INTR_WD)) {
  1105. if (!ohci->done) {
  1106. abort();
  1107. }
  1108. if (ohci->intr & ohci->intr_status) {
  1109. ohci->done |= 1;
  1110. }
  1111. hcca.done = cpu_to_le32(ohci->done);
  1112. ohci->done = 0;
  1113. ohci->done_count = 7;
  1114. ohci_set_interrupt(ohci, OHCI_INTR_WD);
  1115. }
  1116. if (ohci->done_count != 7 && ohci->done_count != 0) {
  1117. ohci->done_count--;
  1118. }
  1119. /* Do SOF stuff here */
  1120. ohci_sof(ohci);
  1121. /* Writeback HCCA */
  1122. if (ohci_put_hcca(ohci, ohci->hcca, &hcca)) {
  1123. ohci_die(ohci);
  1124. }
  1125. }
  1126. /*
  1127. * Start sending SOF tokens across the USB bus, lists are processed in
  1128. * next frame
  1129. */
  1130. static int ohci_bus_start(OHCIState *ohci)
  1131. {
  1132. trace_usb_ohci_start(ohci->name);
  1133. /*
  1134. * Delay the first SOF event by one frame time as linux driver is
  1135. * not ready to receive it and can meet some race conditions
  1136. */
  1137. ohci->sof_time = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
  1138. ohci_eof_timer(ohci);
  1139. return 1;
  1140. }
  1141. /* Stop sending SOF tokens on the bus */
  1142. void ohci_bus_stop(OHCIState *ohci)
  1143. {
  1144. trace_usb_ohci_stop(ohci->name);
  1145. timer_del(ohci->eof_timer);
  1146. }
  1147. /* Frame interval toggle is manipulated by the hcd only */
  1148. static void ohci_set_frame_interval(OHCIState *ohci, uint16_t val)
  1149. {
  1150. val &= OHCI_FMI_FI;
  1151. if (val != ohci->fi) {
  1152. trace_usb_ohci_set_frame_interval(ohci->name, ohci->fi, ohci->fi);
  1153. }
  1154. ohci->fi = val;
  1155. }
  1156. static void ohci_port_power(OHCIState *ohci, int i, int p)
  1157. {
  1158. if (p) {
  1159. ohci->rhport[i].ctrl |= OHCI_PORT_PPS;
  1160. } else {
  1161. ohci->rhport[i].ctrl &= ~(OHCI_PORT_PPS | OHCI_PORT_CCS |
  1162. OHCI_PORT_PSS | OHCI_PORT_PRS);
  1163. }
  1164. }
  1165. /* Set HcControlRegister */
  1166. static void ohci_set_ctl(OHCIState *ohci, uint32_t val)
  1167. {
  1168. uint32_t old_state;
  1169. uint32_t new_state;
  1170. old_state = ohci->ctl & OHCI_CTL_HCFS;
  1171. ohci->ctl = val;
  1172. new_state = ohci->ctl & OHCI_CTL_HCFS;
  1173. /* no state change */
  1174. if (old_state == new_state) {
  1175. return;
  1176. }
  1177. trace_usb_ohci_set_ctl(ohci->name, new_state);
  1178. switch (new_state) {
  1179. case OHCI_USB_OPERATIONAL:
  1180. ohci_bus_start(ohci);
  1181. break;
  1182. case OHCI_USB_SUSPEND:
  1183. ohci_bus_stop(ohci);
  1184. /* clear pending SF otherwise linux driver loops in ohci_irq() */
  1185. ohci->intr_status &= ~OHCI_INTR_SF;
  1186. ohci_intr_update(ohci);
  1187. break;
  1188. case OHCI_USB_RESUME:
  1189. trace_usb_ohci_resume(ohci->name);
  1190. break;
  1191. case OHCI_USB_RESET:
  1192. ohci_roothub_reset(ohci);
  1193. break;
  1194. }
  1195. }
  1196. static uint32_t ohci_get_frame_remaining(OHCIState *ohci)
  1197. {
  1198. uint16_t fr;
  1199. int64_t tks;
  1200. if ((ohci->ctl & OHCI_CTL_HCFS) != OHCI_USB_OPERATIONAL) {
  1201. return ohci->frt << 31;
  1202. }
  1203. /* Being in USB operational state guarnatees sof_time was set already. */
  1204. tks = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - ohci->sof_time;
  1205. if (tks < 0) {
  1206. tks = 0;
  1207. }
  1208. /* avoid muldiv if possible */
  1209. if (tks >= usb_frame_time) {
  1210. return ohci->frt << 31;
  1211. }
  1212. tks = tks / usb_bit_time;
  1213. fr = (uint16_t)(ohci->fi - tks);
  1214. return (ohci->frt << 31) | fr;
  1215. }
  1216. /* Set root hub status */
  1217. static void ohci_set_hub_status(OHCIState *ohci, uint32_t val)
  1218. {
  1219. uint32_t old_state;
  1220. old_state = ohci->rhstatus;
  1221. /* write 1 to clear OCIC */
  1222. if (val & OHCI_RHS_OCIC) {
  1223. ohci->rhstatus &= ~OHCI_RHS_OCIC;
  1224. }
  1225. if (val & OHCI_RHS_LPS) {
  1226. int i;
  1227. for (i = 0; i < ohci->num_ports; i++) {
  1228. ohci_port_power(ohci, i, 0);
  1229. }
  1230. trace_usb_ohci_hub_power_down();
  1231. }
  1232. if (val & OHCI_RHS_LPSC) {
  1233. int i;
  1234. for (i = 0; i < ohci->num_ports; i++) {
  1235. ohci_port_power(ohci, i, 1);
  1236. }
  1237. trace_usb_ohci_hub_power_up();
  1238. }
  1239. if (val & OHCI_RHS_DRWE) {
  1240. ohci->rhstatus |= OHCI_RHS_DRWE;
  1241. }
  1242. if (val & OHCI_RHS_CRWE) {
  1243. ohci->rhstatus &= ~OHCI_RHS_DRWE;
  1244. }
  1245. if (old_state != ohci->rhstatus) {
  1246. ohci_set_interrupt(ohci, OHCI_INTR_RHSC);
  1247. }
  1248. }
  1249. /* This is the one state transition the controller can do by itself */
  1250. static bool ohci_resume(OHCIState *s)
  1251. {
  1252. if ((s->ctl & OHCI_CTL_HCFS) == OHCI_USB_SUSPEND) {
  1253. trace_usb_ohci_remote_wakeup(s->name);
  1254. s->ctl &= ~OHCI_CTL_HCFS;
  1255. s->ctl |= OHCI_USB_RESUME;
  1256. return true;
  1257. }
  1258. return false;
  1259. }
  1260. /*
  1261. * Sets a flag in a port status reg but only set it if the port is connected.
  1262. * If not set ConnectStatusChange flag. If flag is enabled return 1.
  1263. */
  1264. static int ohci_port_set_if_connected(OHCIState *ohci, int i, uint32_t val)
  1265. {
  1266. int ret = 1;
  1267. /* writing a 0 has no effect */
  1268. if (val == 0) {
  1269. return 0;
  1270. }
  1271. /* If CurrentConnectStatus is cleared we set ConnectStatusChange */
  1272. if (!(ohci->rhport[i].ctrl & OHCI_PORT_CCS)) {
  1273. ohci->rhport[i].ctrl |= OHCI_PORT_CSC;
  1274. if (ohci->rhstatus & OHCI_RHS_DRWE) {
  1275. /* CSC is a wakeup event */
  1276. if (ohci_resume(ohci)) {
  1277. ohci_set_interrupt(ohci, OHCI_INTR_RD);
  1278. }
  1279. }
  1280. return 0;
  1281. }
  1282. if (ohci->rhport[i].ctrl & val) {
  1283. ret = 0;
  1284. }
  1285. /* set the bit */
  1286. ohci->rhport[i].ctrl |= val;
  1287. return ret;
  1288. }
  1289. /* Set root hub port status */
  1290. static void ohci_port_set_status(OHCIState *ohci, int portnum, uint32_t val)
  1291. {
  1292. uint32_t old_state;
  1293. OHCIPort *port;
  1294. port = &ohci->rhport[portnum];
  1295. old_state = port->ctrl;
  1296. /* Write to clear CSC, PESC, PSSC, OCIC, PRSC */
  1297. if (val & OHCI_PORT_WTC) {
  1298. port->ctrl &= ~(val & OHCI_PORT_WTC);
  1299. }
  1300. if (val & OHCI_PORT_CCS) {
  1301. port->ctrl &= ~OHCI_PORT_PES;
  1302. }
  1303. ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PES);
  1304. if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PSS)) {
  1305. trace_usb_ohci_port_suspend(portnum);
  1306. }
  1307. if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PRS)) {
  1308. trace_usb_ohci_port_reset(portnum);
  1309. usb_device_reset(port->port.dev);
  1310. port->ctrl &= ~OHCI_PORT_PRS;
  1311. /* ??? Should this also set OHCI_PORT_PESC. */
  1312. port->ctrl |= OHCI_PORT_PES | OHCI_PORT_PRSC;
  1313. }
  1314. /* Invert order here to ensure in ambiguous case, device is powered up. */
  1315. if (val & OHCI_PORT_LSDA) {
  1316. ohci_port_power(ohci, portnum, 0);
  1317. }
  1318. if (val & OHCI_PORT_PPS) {
  1319. ohci_port_power(ohci, portnum, 1);
  1320. }
  1321. if (old_state != port->ctrl) {
  1322. ohci_set_interrupt(ohci, OHCI_INTR_RHSC);
  1323. }
  1324. }
  1325. static uint64_t ohci_mem_read(void *opaque,
  1326. hwaddr addr,
  1327. unsigned size)
  1328. {
  1329. OHCIState *ohci = opaque;
  1330. uint32_t retval;
  1331. /* Only aligned reads are allowed on OHCI */
  1332. if (addr & 3) {
  1333. trace_usb_ohci_mem_read_unaligned(addr);
  1334. return 0xffffffff;
  1335. } else if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {
  1336. /* HcRhPortStatus */
  1337. retval = ohci->rhport[(addr - 0x54) >> 2].ctrl | OHCI_PORT_PPS;
  1338. trace_usb_ohci_mem_port_read(size, "HcRhPortStatus", (addr - 0x50) >> 2,
  1339. addr, addr >> 2, retval);
  1340. } else {
  1341. switch (addr >> 2) {
  1342. case 0: /* HcRevision */
  1343. retval = 0x10;
  1344. break;
  1345. case 1: /* HcControl */
  1346. retval = ohci->ctl;
  1347. break;
  1348. case 2: /* HcCommandStatus */
  1349. retval = ohci->status;
  1350. break;
  1351. case 3: /* HcInterruptStatus */
  1352. retval = ohci->intr_status;
  1353. break;
  1354. case 4: /* HcInterruptEnable */
  1355. case 5: /* HcInterruptDisable */
  1356. retval = ohci->intr;
  1357. break;
  1358. case 6: /* HcHCCA */
  1359. retval = ohci->hcca;
  1360. break;
  1361. case 7: /* HcPeriodCurrentED */
  1362. retval = ohci->per_cur;
  1363. break;
  1364. case 8: /* HcControlHeadED */
  1365. retval = ohci->ctrl_head;
  1366. break;
  1367. case 9: /* HcControlCurrentED */
  1368. retval = ohci->ctrl_cur;
  1369. break;
  1370. case 10: /* HcBulkHeadED */
  1371. retval = ohci->bulk_head;
  1372. break;
  1373. case 11: /* HcBulkCurrentED */
  1374. retval = ohci->bulk_cur;
  1375. break;
  1376. case 12: /* HcDoneHead */
  1377. retval = ohci->done;
  1378. break;
  1379. case 13: /* HcFmInterretval */
  1380. retval = (ohci->fit << 31) | (ohci->fsmps << 16) | (ohci->fi);
  1381. break;
  1382. case 14: /* HcFmRemaining */
  1383. retval = ohci_get_frame_remaining(ohci);
  1384. break;
  1385. case 15: /* HcFmNumber */
  1386. retval = ohci->frame_number;
  1387. break;
  1388. case 16: /* HcPeriodicStart */
  1389. retval = ohci->pstart;
  1390. break;
  1391. case 17: /* HcLSThreshold */
  1392. retval = ohci->lst;
  1393. break;
  1394. case 18: /* HcRhDescriptorA */
  1395. retval = ohci->rhdesc_a;
  1396. break;
  1397. case 19: /* HcRhDescriptorB */
  1398. retval = ohci->rhdesc_b;
  1399. break;
  1400. case 20: /* HcRhStatus */
  1401. retval = ohci->rhstatus;
  1402. break;
  1403. /* PXA27x specific registers */
  1404. case 24: /* HcStatus */
  1405. retval = ohci->hstatus & ohci->hmask;
  1406. break;
  1407. case 25: /* HcHReset */
  1408. retval = ohci->hreset;
  1409. break;
  1410. case 26: /* HcHInterruptEnable */
  1411. retval = ohci->hmask;
  1412. break;
  1413. case 27: /* HcHInterruptTest */
  1414. retval = ohci->htest;
  1415. break;
  1416. default:
  1417. trace_usb_ohci_mem_read_bad_offset(addr);
  1418. retval = 0xffffffff;
  1419. }
  1420. if (addr != 0xc || retval) {
  1421. trace_usb_ohci_mem_read(size, ohci_reg_name(addr), addr, addr >> 2,
  1422. retval);
  1423. }
  1424. }
  1425. return retval;
  1426. }
  1427. static void ohci_mem_write(void *opaque,
  1428. hwaddr addr,
  1429. uint64_t val,
  1430. unsigned size)
  1431. {
  1432. OHCIState *ohci = opaque;
  1433. /* Only aligned reads are allowed on OHCI */
  1434. if (addr & 3) {
  1435. trace_usb_ohci_mem_write_unaligned(addr);
  1436. return;
  1437. }
  1438. if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {
  1439. /* HcRhPortStatus */
  1440. trace_usb_ohci_mem_port_write(size, "HcRhPortStatus",
  1441. (addr - 0x50) >> 2, addr, addr >> 2, val);
  1442. ohci_port_set_status(ohci, (addr - 0x54) >> 2, val);
  1443. return;
  1444. }
  1445. trace_usb_ohci_mem_write(size, ohci_reg_name(addr), addr, addr >> 2, val);
  1446. switch (addr >> 2) {
  1447. case 1: /* HcControl */
  1448. ohci_set_ctl(ohci, val);
  1449. break;
  1450. case 2: /* HcCommandStatus */
  1451. /* SOC is read-only */
  1452. val = (val & ~OHCI_STATUS_SOC);
  1453. /* Bits written as '0' remain unchanged in the register */
  1454. ohci->status |= val;
  1455. if (ohci->status & OHCI_STATUS_HCR) {
  1456. ohci_soft_reset(ohci);
  1457. }
  1458. break;
  1459. case 3: /* HcInterruptStatus */
  1460. ohci->intr_status &= ~val;
  1461. ohci_intr_update(ohci);
  1462. break;
  1463. case 4: /* HcInterruptEnable */
  1464. ohci->intr |= val;
  1465. ohci_intr_update(ohci);
  1466. break;
  1467. case 5: /* HcInterruptDisable */
  1468. ohci->intr &= ~val;
  1469. ohci_intr_update(ohci);
  1470. break;
  1471. case 6: /* HcHCCA */
  1472. ohci->hcca = val & OHCI_HCCA_MASK;
  1473. break;
  1474. case 7: /* HcPeriodCurrentED */
  1475. /* Ignore writes to this read-only register, Linux does them */
  1476. break;
  1477. case 8: /* HcControlHeadED */
  1478. ohci->ctrl_head = val & OHCI_EDPTR_MASK;
  1479. break;
  1480. case 9: /* HcControlCurrentED */
  1481. ohci->ctrl_cur = val & OHCI_EDPTR_MASK;
  1482. break;
  1483. case 10: /* HcBulkHeadED */
  1484. ohci->bulk_head = val & OHCI_EDPTR_MASK;
  1485. break;
  1486. case 11: /* HcBulkCurrentED */
  1487. ohci->bulk_cur = val & OHCI_EDPTR_MASK;
  1488. break;
  1489. case 13: /* HcFmInterval */
  1490. ohci->fsmps = (val & OHCI_FMI_FSMPS) >> 16;
  1491. ohci->fit = (val & OHCI_FMI_FIT) >> 31;
  1492. ohci_set_frame_interval(ohci, val);
  1493. break;
  1494. case 15: /* HcFmNumber */
  1495. break;
  1496. case 16: /* HcPeriodicStart */
  1497. ohci->pstart = val & 0xffff;
  1498. break;
  1499. case 17: /* HcLSThreshold */
  1500. ohci->lst = val & 0xffff;
  1501. break;
  1502. case 18: /* HcRhDescriptorA */
  1503. ohci->rhdesc_a &= ~OHCI_RHA_RW_MASK;
  1504. ohci->rhdesc_a |= val & OHCI_RHA_RW_MASK;
  1505. break;
  1506. case 19: /* HcRhDescriptorB */
  1507. break;
  1508. case 20: /* HcRhStatus */
  1509. ohci_set_hub_status(ohci, val);
  1510. break;
  1511. /* PXA27x specific registers */
  1512. case 24: /* HcStatus */
  1513. ohci->hstatus &= ~(val & ohci->hmask);
  1514. break;
  1515. case 25: /* HcHReset */
  1516. ohci->hreset = val & ~OHCI_HRESET_FSBIR;
  1517. if (val & OHCI_HRESET_FSBIR) {
  1518. ohci_hard_reset(ohci);
  1519. }
  1520. break;
  1521. case 26: /* HcHInterruptEnable */
  1522. ohci->hmask = val;
  1523. break;
  1524. case 27: /* HcHInterruptTest */
  1525. ohci->htest = val;
  1526. break;
  1527. default:
  1528. trace_usb_ohci_mem_write_bad_offset(addr);
  1529. break;
  1530. }
  1531. }
  1532. static const MemoryRegionOps ohci_mem_ops = {
  1533. .read = ohci_mem_read,
  1534. .write = ohci_mem_write,
  1535. .endianness = DEVICE_LITTLE_ENDIAN,
  1536. };
  1537. /* USBPortOps */
  1538. static void ohci_attach(USBPort *port1)
  1539. {
  1540. OHCIState *s = port1->opaque;
  1541. OHCIPort *port = &s->rhport[port1->index];
  1542. uint32_t old_state = port->ctrl;
  1543. /* set connect status */
  1544. port->ctrl |= OHCI_PORT_CCS | OHCI_PORT_CSC;
  1545. /* update speed */
  1546. if (port->port.dev->speed == USB_SPEED_LOW) {
  1547. port->ctrl |= OHCI_PORT_LSDA;
  1548. } else {
  1549. port->ctrl &= ~OHCI_PORT_LSDA;
  1550. }
  1551. /* notify of remote-wakeup */
  1552. if ((s->ctl & OHCI_CTL_HCFS) == OHCI_USB_SUSPEND) {
  1553. ohci_set_interrupt(s, OHCI_INTR_RD);
  1554. }
  1555. trace_usb_ohci_port_attach(port1->index);
  1556. if (old_state != port->ctrl) {
  1557. ohci_set_interrupt(s, OHCI_INTR_RHSC);
  1558. }
  1559. }
  1560. static void ohci_child_detach(USBPort *port1, USBDevice *dev)
  1561. {
  1562. OHCIState *ohci = port1->opaque;
  1563. if (ohci->async_td &&
  1564. usb_packet_is_inflight(&ohci->usb_packet) &&
  1565. ohci->usb_packet.ep->dev == dev) {
  1566. usb_cancel_packet(&ohci->usb_packet);
  1567. ohci->async_td = 0;
  1568. }
  1569. }
  1570. static void ohci_detach(USBPort *port1)
  1571. {
  1572. OHCIState *s = port1->opaque;
  1573. OHCIPort *port = &s->rhport[port1->index];
  1574. uint32_t old_state = port->ctrl;
  1575. ohci_child_detach(port1, port1->dev);
  1576. /* set connect status */
  1577. if (port->ctrl & OHCI_PORT_CCS) {
  1578. port->ctrl &= ~OHCI_PORT_CCS;
  1579. port->ctrl |= OHCI_PORT_CSC;
  1580. }
  1581. /* disable port */
  1582. if (port->ctrl & OHCI_PORT_PES) {
  1583. port->ctrl &= ~OHCI_PORT_PES;
  1584. port->ctrl |= OHCI_PORT_PESC;
  1585. }
  1586. trace_usb_ohci_port_detach(port1->index);
  1587. if (old_state != port->ctrl) {
  1588. ohci_set_interrupt(s, OHCI_INTR_RHSC);
  1589. }
  1590. }
  1591. static void ohci_wakeup(USBPort *port1)
  1592. {
  1593. OHCIState *s = port1->opaque;
  1594. OHCIPort *port = &s->rhport[port1->index];
  1595. uint32_t intr = 0;
  1596. if (port->ctrl & OHCI_PORT_PSS) {
  1597. trace_usb_ohci_port_wakeup(port1->index);
  1598. port->ctrl |= OHCI_PORT_PSSC;
  1599. port->ctrl &= ~OHCI_PORT_PSS;
  1600. intr = OHCI_INTR_RHSC;
  1601. }
  1602. /* Note that the controller can be suspended even if this port is not */
  1603. if (ohci_resume(s)) {
  1604. /*
  1605. * In suspend mode only ResumeDetected is possible, not RHSC:
  1606. * see the OHCI spec 5.1.2.3.
  1607. */
  1608. intr = OHCI_INTR_RD;
  1609. }
  1610. ohci_set_interrupt(s, intr);
  1611. }
  1612. static void ohci_async_complete_packet(USBPort *port, USBPacket *packet)
  1613. {
  1614. OHCIState *ohci = container_of(packet, OHCIState, usb_packet);
  1615. trace_usb_ohci_async_complete();
  1616. ohci->async_complete = true;
  1617. ohci_process_lists(ohci);
  1618. }
  1619. static USBPortOps ohci_port_ops = {
  1620. .attach = ohci_attach,
  1621. .detach = ohci_detach,
  1622. .child_detach = ohci_child_detach,
  1623. .wakeup = ohci_wakeup,
  1624. .complete = ohci_async_complete_packet,
  1625. };
  1626. static USBBusOps ohci_bus_ops = {
  1627. };
  1628. void usb_ohci_init(OHCIState *ohci, DeviceState *dev, uint32_t num_ports,
  1629. dma_addr_t localmem_base, char *masterbus,
  1630. uint32_t firstport, AddressSpace *as,
  1631. void (*ohci_die_fn)(OHCIState *), Error **errp)
  1632. {
  1633. Error *err = NULL;
  1634. int i;
  1635. ohci->as = as;
  1636. ohci->ohci_die = ohci_die_fn;
  1637. if (num_ports > OHCI_MAX_PORTS) {
  1638. error_setg(errp, "OHCI num-ports=%u is too big (limit is %u ports)",
  1639. num_ports, OHCI_MAX_PORTS);
  1640. return;
  1641. }
  1642. if (usb_frame_time == 0) {
  1643. #ifdef OHCI_TIME_WARP
  1644. usb_frame_time = NANOSECONDS_PER_SECOND;
  1645. usb_bit_time = NANOSECONDS_PER_SECOND / (USB_HZ / 1000);
  1646. #else
  1647. usb_frame_time = NANOSECONDS_PER_SECOND / 1000;
  1648. if (NANOSECONDS_PER_SECOND >= USB_HZ) {
  1649. usb_bit_time = NANOSECONDS_PER_SECOND / USB_HZ;
  1650. } else {
  1651. usb_bit_time = 1;
  1652. }
  1653. #endif
  1654. trace_usb_ohci_init_time(usb_frame_time, usb_bit_time);
  1655. }
  1656. ohci->num_ports = num_ports;
  1657. if (masterbus) {
  1658. USBPort *ports[OHCI_MAX_PORTS];
  1659. for (i = 0; i < num_ports; i++) {
  1660. ports[i] = &ohci->rhport[i].port;
  1661. }
  1662. usb_register_companion(masterbus, ports, num_ports,
  1663. firstport, ohci, &ohci_port_ops,
  1664. USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL,
  1665. &err);
  1666. if (err) {
  1667. error_propagate(errp, err);
  1668. return;
  1669. }
  1670. } else {
  1671. usb_bus_new(&ohci->bus, sizeof(ohci->bus), &ohci_bus_ops, dev);
  1672. for (i = 0; i < num_ports; i++) {
  1673. usb_register_port(&ohci->bus, &ohci->rhport[i].port,
  1674. ohci, i, &ohci_port_ops,
  1675. USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
  1676. }
  1677. }
  1678. memory_region_init_io(&ohci->mem, OBJECT(dev), &ohci_mem_ops,
  1679. ohci, "ohci", 256);
  1680. ohci->localmem_base = localmem_base;
  1681. ohci->name = object_get_typename(OBJECT(dev));
  1682. usb_packet_init(&ohci->usb_packet);
  1683. ohci->async_td = 0;
  1684. ohci->eof_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
  1685. ohci_frame_boundary, ohci);
  1686. }
  1687. /*
  1688. * A typical OHCI will stop operating and set itself into error state
  1689. * (which can be queried by MMIO) to signal that it got an error.
  1690. */
  1691. void ohci_sysbus_die(struct OHCIState *ohci)
  1692. {
  1693. trace_usb_ohci_die();
  1694. ohci_set_interrupt(ohci, OHCI_INTR_UE);
  1695. ohci_bus_stop(ohci);
  1696. }
  1697. static void ohci_realize_pxa(DeviceState *dev, Error **errp)
  1698. {
  1699. OHCISysBusState *s = SYSBUS_OHCI(dev);
  1700. SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
  1701. Error *err = NULL;
  1702. usb_ohci_init(&s->ohci, dev, s->num_ports, s->dma_offset,
  1703. s->masterbus, s->firstport,
  1704. &address_space_memory, ohci_sysbus_die, &err);
  1705. if (err) {
  1706. error_propagate(errp, err);
  1707. return;
  1708. }
  1709. sysbus_init_irq(sbd, &s->ohci.irq);
  1710. sysbus_init_mmio(sbd, &s->ohci.mem);
  1711. }
  1712. static void usb_ohci_reset_sysbus(DeviceState *dev)
  1713. {
  1714. OHCISysBusState *s = SYSBUS_OHCI(dev);
  1715. OHCIState *ohci = &s->ohci;
  1716. ohci_hard_reset(ohci);
  1717. }
  1718. static const VMStateDescription vmstate_ohci_state_port = {
  1719. .name = "ohci-core/port",
  1720. .version_id = 1,
  1721. .minimum_version_id = 1,
  1722. .fields = (VMStateField[]) {
  1723. VMSTATE_UINT32(ctrl, OHCIPort),
  1724. VMSTATE_END_OF_LIST()
  1725. },
  1726. };
  1727. static bool ohci_eof_timer_needed(void *opaque)
  1728. {
  1729. OHCIState *ohci = opaque;
  1730. return timer_pending(ohci->eof_timer);
  1731. }
  1732. static const VMStateDescription vmstate_ohci_eof_timer = {
  1733. .name = "ohci-core/eof-timer",
  1734. .version_id = 1,
  1735. .minimum_version_id = 1,
  1736. .needed = ohci_eof_timer_needed,
  1737. .fields = (VMStateField[]) {
  1738. VMSTATE_TIMER_PTR(eof_timer, OHCIState),
  1739. VMSTATE_END_OF_LIST()
  1740. },
  1741. };
  1742. const VMStateDescription vmstate_ohci_state = {
  1743. .name = "ohci-core",
  1744. .version_id = 1,
  1745. .minimum_version_id = 1,
  1746. .fields = (VMStateField[]) {
  1747. VMSTATE_INT64(sof_time, OHCIState),
  1748. VMSTATE_UINT32(ctl, OHCIState),
  1749. VMSTATE_UINT32(status, OHCIState),
  1750. VMSTATE_UINT32(intr_status, OHCIState),
  1751. VMSTATE_UINT32(intr, OHCIState),
  1752. VMSTATE_UINT32(hcca, OHCIState),
  1753. VMSTATE_UINT32(ctrl_head, OHCIState),
  1754. VMSTATE_UINT32(ctrl_cur, OHCIState),
  1755. VMSTATE_UINT32(bulk_head, OHCIState),
  1756. VMSTATE_UINT32(bulk_cur, OHCIState),
  1757. VMSTATE_UINT32(per_cur, OHCIState),
  1758. VMSTATE_UINT32(done, OHCIState),
  1759. VMSTATE_INT32(done_count, OHCIState),
  1760. VMSTATE_UINT16(fsmps, OHCIState),
  1761. VMSTATE_UINT8(fit, OHCIState),
  1762. VMSTATE_UINT16(fi, OHCIState),
  1763. VMSTATE_UINT8(frt, OHCIState),
  1764. VMSTATE_UINT16(frame_number, OHCIState),
  1765. VMSTATE_UINT16(padding, OHCIState),
  1766. VMSTATE_UINT32(pstart, OHCIState),
  1767. VMSTATE_UINT32(lst, OHCIState),
  1768. VMSTATE_UINT32(rhdesc_a, OHCIState),
  1769. VMSTATE_UINT32(rhdesc_b, OHCIState),
  1770. VMSTATE_UINT32(rhstatus, OHCIState),
  1771. VMSTATE_STRUCT_ARRAY(rhport, OHCIState, OHCI_MAX_PORTS, 0,
  1772. vmstate_ohci_state_port, OHCIPort),
  1773. VMSTATE_UINT32(hstatus, OHCIState),
  1774. VMSTATE_UINT32(hmask, OHCIState),
  1775. VMSTATE_UINT32(hreset, OHCIState),
  1776. VMSTATE_UINT32(htest, OHCIState),
  1777. VMSTATE_UINT32(old_ctl, OHCIState),
  1778. VMSTATE_UINT8_ARRAY(usb_buf, OHCIState, 8192),
  1779. VMSTATE_UINT32(async_td, OHCIState),
  1780. VMSTATE_BOOL(async_complete, OHCIState),
  1781. VMSTATE_END_OF_LIST()
  1782. },
  1783. .subsections = (const VMStateDescription*[]) {
  1784. &vmstate_ohci_eof_timer,
  1785. NULL
  1786. }
  1787. };
  1788. static Property ohci_sysbus_properties[] = {
  1789. DEFINE_PROP_STRING("masterbus", OHCISysBusState, masterbus),
  1790. DEFINE_PROP_UINT32("num-ports", OHCISysBusState, num_ports, 3),
  1791. DEFINE_PROP_UINT32("firstport", OHCISysBusState, firstport, 0),
  1792. DEFINE_PROP_DMAADDR("dma-offset", OHCISysBusState, dma_offset, 0),
  1793. DEFINE_PROP_END_OF_LIST(),
  1794. };
  1795. static void ohci_sysbus_class_init(ObjectClass *klass, void *data)
  1796. {
  1797. DeviceClass *dc = DEVICE_CLASS(klass);
  1798. dc->realize = ohci_realize_pxa;
  1799. set_bit(DEVICE_CATEGORY_USB, dc->categories);
  1800. dc->desc = "OHCI USB Controller";
  1801. device_class_set_props(dc, ohci_sysbus_properties);
  1802. dc->reset = usb_ohci_reset_sysbus;
  1803. }
  1804. static const TypeInfo ohci_sysbus_info = {
  1805. .name = TYPE_SYSBUS_OHCI,
  1806. .parent = TYPE_SYS_BUS_DEVICE,
  1807. .instance_size = sizeof(OHCISysBusState),
  1808. .class_init = ohci_sysbus_class_init,
  1809. };
  1810. static void ohci_register_types(void)
  1811. {
  1812. type_register_static(&ohci_sysbus_info);
  1813. }
  1814. type_init(ohci_register_types)