Lines Matching refs:async

259 static void ehci_set_state(EHCIState *s, int async, int state)  in ehci_set_state()  argument
261 if (async) { in ehci_set_state()
282 static int ehci_get_state(EHCIState *s, int async) in ehci_get_state() argument
284 return async ? s->astate : s->pstate; in ehci_get_state()
287 static void ehci_set_fetch_addr(EHCIState *s, int async, uint32_t addr) in ehci_set_fetch_addr() argument
289 if (async) { in ehci_set_fetch_addr()
296 static int ehci_get_fetch_addr(EHCIState *s, int async) in ehci_get_fetch_addr() argument
298 return async ? s->a_fetch_addr : s->p_fetch_addr; in ehci_get_fetch_addr()
438 (q->async && qh->next_qtd != q->qh.next_qtd) || in ehci_verify_qh()
451 (p->queue->async && !NLPTR_TBIT(p->qtd.next) && in ehci_verify_qtd()
490 p->async = EHCI_ASYNC_INITIALIZED; in ehci_writeback_async_complete_packet()
495 state = ehci_get_state(q->ehci, q->async); in ehci_writeback_async_complete_packet()
501 ehci_set_state(q->ehci, q->async, state); in ehci_writeback_async_complete_packet()
520 if (p->async == EHCI_ASYNC_FINISHED && in ehci_free_packet()
526 if (p->async == EHCI_ASYNC_INFLIGHT) { in ehci_free_packet()
529 if (p->async == EHCI_ASYNC_FINISHED && in ehci_free_packet()
536 if (p->async != EHCI_ASYNC_NONE) { in ehci_free_packet()
547 static EHCIQueue *ehci_alloc_queue(EHCIState *ehci, uint32_t addr, int async) in ehci_alloc_queue() argument
549 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_alloc_queue()
555 q->async = async; in ehci_alloc_queue()
608 EHCIQueueHead *head = q->async ? &q->ehci->aqueues : &q->ehci->pqueues; in ehci_free_queue()
621 int async) in ehci_find_queue_by_qh() argument
623 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_find_queue_by_qh()
634 static void ehci_queues_rip_unused(EHCIState *ehci, int async) in ehci_queues_rip_unused() argument
636 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_queues_rip_unused()
637 const char *warn = async ? "guest unlinked busy QH" : NULL; in ehci_queues_rip_unused()
654 static void ehci_queues_rip_unseen(EHCIState *ehci, int async) in ehci_queues_rip_unseen() argument
656 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_queues_rip_unseen()
666 static void ehci_queues_rip_device(EHCIState *ehci, USBDevice *dev, int async) in ehci_queues_rip_device() argument
668 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_queues_rip_device()
679 static void ehci_queues_rip_all(EHCIState *ehci, int async) in ehci_queues_rip_all() argument
681 EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues; in ehci_queues_rip_all()
682 const char *warn = async ? "guest stopped busy async schedule" : NULL; in ehci_queues_rip_all()
1250 assert(p->async == EHCI_ASYNC_INFLIGHT); in ehci_async_complete_packet()
1259 p->async = EHCI_ASYNC_FINISHED; in ehci_async_complete_packet()
1261 if (!p->queue->async) { in ehci_async_complete_packet()
1274 assert(p->async == EHCI_ASYNC_INITIALIZED || in ehci_execute_complete()
1275 p->async == EHCI_ASYNC_FINISHED); in ehci_execute_complete()
1315 if (q->async) { in ehci_execute_complete()
1328 p->async = EHCI_ASYNC_NONE; in ehci_execute_complete()
1335 if (q->async) { in ehci_execute_complete()
1348 assert(p->async == EHCI_ASYNC_NONE || in ehci_execute()
1349 p->async == EHCI_ASYNC_INITIALIZED); in ehci_execute()
1370 if (p->async == EHCI_ASYNC_NONE) { in ehci_execute()
1382 p->async = EHCI_ASYNC_INITIALIZED; in ehci_execute()
1519 static int ehci_state_waitlisthead(EHCIState *ehci, int async) in ehci_state_waitlisthead() argument
1527 if (async) { in ehci_state_waitlisthead()
1531 ehci_queues_rip_unused(ehci, async); in ehci_state_waitlisthead()
1542 if (async) { in ehci_state_waitlisthead()
1546 ehci_set_fetch_addr(ehci, async, entry); in ehci_state_waitlisthead()
1547 ehci_set_state(ehci, async, EST_FETCHENTRY); in ehci_state_waitlisthead()
1560 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_state_waitlisthead()
1570 static int ehci_state_fetchentry(EHCIState *ehci, int async) in ehci_state_fetchentry() argument
1573 uint32_t entry = ehci_get_fetch_addr(ehci, async); in ehci_state_fetchentry()
1576 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_state_fetchentry()
1581 if (async && (NLPTR_TYPE_GET(entry) != NLPTR_TYPE_QH)) { in ehci_state_fetchentry()
1588 ehci_set_state(ehci, async, EST_FETCHQH); in ehci_state_fetchentry()
1593 ehci_set_state(ehci, async, EST_FETCHITD); in ehci_state_fetchentry()
1598 ehci_set_state(ehci, async, EST_FETCHSITD); in ehci_state_fetchentry()
1613 static EHCIQueue *ehci_state_fetchqh(EHCIState *ehci, int async) in ehci_state_fetchqh() argument
1619 entry = ehci_get_fetch_addr(ehci, async); in ehci_state_fetchqh()
1620 q = ehci_find_queue_by_qh(ehci, entry, async); in ehci_state_fetchqh()
1622 q = ehci_alloc_queue(ehci, entry, async); in ehci_state_fetchqh()
1628 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_state_fetchqh()
1661 if (async && (q->qh.epchar & QH_EPCHAR_H)) { in ehci_state_fetchqh()
1669 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_state_fetchqh()
1687 ehci_set_state(ehci, async, EST_HORIZONTALQH); in ehci_state_fetchqh()
1693 ehci_set_state(ehci, async, EST_FETCHQTD); in ehci_state_fetchqh()
1697 ehci_set_state(ehci, async, EST_ADVANCEQUEUE); in ehci_state_fetchqh()
1704 static int ehci_state_fetchitd(EHCIState *ehci, int async) in ehci_state_fetchitd() argument
1709 assert(!async); in ehci_state_fetchitd()
1710 entry = ehci_get_fetch_addr(ehci, async); in ehci_state_fetchitd()
1724 ehci_set_fetch_addr(ehci, async, itd.next); in ehci_state_fetchitd()
1725 ehci_set_state(ehci, async, EST_FETCHENTRY); in ehci_state_fetchitd()
1730 static int ehci_state_fetchsitd(EHCIState *ehci, int async) in ehci_state_fetchsitd() argument
1735 assert(!async); in ehci_state_fetchsitd()
1736 entry = ehci_get_fetch_addr(ehci, async); in ehci_state_fetchsitd()
1751 ehci_set_fetch_addr(ehci, async, sitd.next); in ehci_state_fetchsitd()
1752 ehci_set_state(ehci, async, EST_FETCHENTRY); in ehci_state_fetchsitd()
1765 ehci_set_state(ehci, async, EST_HORIZONTALQH); in ehci_state_advqueue()
1776 ehci_set_state(q->ehci, q->async, EST_FETCHQTD); in ehci_state_advqueue()
1783 ehci_set_state(q->ehci, q->async, EST_FETCHQTD); in ehci_state_advqueue()
1789 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_advqueue()
1831 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_fetchqtd()
1833 switch (p->async) { in ehci_state_fetchqtd()
1837 ehci_set_state(q->ehci, q->async, EST_EXECUTE); in ehci_state_fetchqtd()
1843 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_fetchqtd()
1847 ehci_set_state(q->ehci, q->async, EST_EXECUTING); in ehci_state_fetchqtd()
1852 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_fetchqtd()
1857 ehci_set_state(q->ehci, q->async, EST_EXECUTE); in ehci_state_fetchqtd()
1867 if (ehci_get_fetch_addr(q->ehci, q->async) != q->qh.next) { in ehci_state_horizqh()
1868 ehci_set_fetch_addr(q->ehci, q->async, q->qh.next); in ehci_state_horizqh()
1869 ehci_set_state(q->ehci, q->async, EST_FETCHENTRY); in ehci_state_horizqh()
1872 ehci_set_state(q->ehci, q->async, EST_ACTIVE); in ehci_state_horizqh()
1919 p->async = EHCI_ASYNC_INFLIGHT; in ehci_fill_queue()
1942 if (!q->async && q->transact_ctr == 0) { in ehci_state_execute()
1943 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_execute()
1948 if (q->async) { in ehci_state_execute()
1959 p->async = EHCI_ASYNC_INFLIGHT; in ehci_state_execute()
1960 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_execute()
1961 if (q->async) { in ehci_state_execute()
1969 ehci_set_state(q->ehci, q->async, EST_EXECUTING); in ehci_state_execute()
1986 if (!q->async && q->transact_ctr > 0) { in ehci_state_executing()
1992 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_executing()
1994 ehci_set_state(q->ehci, q->async, EST_WRITEBACK); in ehci_state_executing()
2030 ehci_set_state(q->ehci, q->async, EST_HORIZONTALQH); in ehci_state_writeback()
2033 ehci_set_state(q->ehci, q->async, EST_ADVANCEQUEUE); in ehci_state_writeback()
2043 static void ehci_advance_state(EHCIState *ehci, int async) in ehci_advance_state() argument
2050 switch(ehci_get_state(ehci, async)) { in ehci_advance_state()
2052 again = ehci_state_waitlisthead(ehci, async); in ehci_advance_state()
2056 again = ehci_state_fetchentry(ehci, async); in ehci_advance_state()
2060 q = ehci_state_fetchqh(ehci, async); in ehci_advance_state()
2062 assert(q->async == async); in ehci_advance_state()
2070 again = ehci_state_fetchitd(ehci, async); in ehci_advance_state()
2075 again = ehci_state_fetchsitd(ehci, async); in ehci_advance_state()
2097 if (async) { in ehci_advance_state()
2104 if (async) { in ehci_advance_state()
2113 if (!async) { in ehci_advance_state()
2135 const int async = 1; in ehci_advance_async_state() local
2137 switch(ehci_get_state(ehci, async)) { in ehci_advance_async_state()
2142 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_advance_async_state()
2147 ehci_queues_rip_all(ehci, async); in ehci_advance_async_state()
2148 ehci_set_state(ehci, async, EST_INACTIVE); in ehci_advance_async_state()
2164 ehci_set_state(ehci, async, EST_WAITLISTHEAD); in ehci_advance_async_state()
2165 ehci_advance_state(ehci, async); in ehci_advance_async_state()
2173 ehci_queues_rip_unseen(ehci, async); in ehci_advance_async_state()
2192 const int async = 0; in ehci_advance_periodic_state() local
2196 switch(ehci_get_state(ehci, async)) { in ehci_advance_periodic_state()
2199 ehci_set_state(ehci, async, EST_ACTIVE); in ehci_advance_periodic_state()
2206 ehci_queues_rip_all(ehci, async); in ehci_advance_periodic_state()
2207 ehci_set_state(ehci, async, EST_INACTIVE); in ehci_advance_periodic_state()
2224 ehci_set_fetch_addr(ehci, async,entry); in ehci_advance_periodic_state()
2225 ehci_set_state(ehci, async, EST_FETCHENTRY); in ehci_advance_periodic_state()
2226 ehci_advance_state(ehci, async); in ehci_advance_periodic_state()
2227 ehci_queues_rip_unused(ehci, async); in ehci_advance_periodic_state()