Lines Matching refs:stream

1027 	struct ehci_iso_stream *stream;  in iso_stream_alloc()  local
1029 stream = kzalloc(sizeof *stream, mem_flags); in iso_stream_alloc()
1030 if (likely (stream != NULL)) { in iso_stream_alloc()
1031 INIT_LIST_HEAD(&stream->td_list); in iso_stream_alloc()
1032 INIT_LIST_HEAD(&stream->free_list); in iso_stream_alloc()
1033 stream->next_uframe = NO_FRAME; in iso_stream_alloc()
1034 stream->ps.phase = NO_FRAME; in iso_stream_alloc()
1036 return stream; in iso_stream_alloc()
1042 struct ehci_iso_stream *stream, in iso_stream_init() argument
1071 stream->highspeed = 1; in iso_stream_init()
1077 stream->buf0 = cpu_to_hc32(ehci, (epnum << 8) | dev->devnum); in iso_stream_init()
1078 stream->buf1 = cpu_to_hc32(ehci, buf1); in iso_stream_init()
1079 stream->buf2 = cpu_to_hc32(ehci, multi); in iso_stream_init()
1084 stream->ps.usecs = HS_USECS_ISO(maxp); in iso_stream_init()
1091 stream->ps.bw_uperiod = min_t(unsigned, tmp, urb->interval); in iso_stream_init()
1093 stream->uperiod = urb->interval; in iso_stream_init()
1094 stream->ps.period = urb->interval >> 3; in iso_stream_init()
1095 stream->bandwidth = stream->ps.usecs * 8 / in iso_stream_init()
1096 stream->ps.bw_uperiod; in iso_stream_init()
1110 stream->ps.usecs = HS_USECS_ISO(maxp); in iso_stream_init()
1112 stream->ps.tt_usecs = NS_TO_US(think_time + usb_calc_bus_time( in iso_stream_init()
1119 stream->ps.c_usecs = stream->ps.usecs; in iso_stream_init()
1120 stream->ps.usecs = HS_USECS_ISO(1); in iso_stream_init()
1121 stream->ps.cs_mask = 1; in iso_stream_init()
1125 stream->ps.cs_mask |= tmp << (8 + 2); in iso_stream_init()
1127 stream->ps.cs_mask = smask_out[hs_transfers - 1]; in iso_stream_init()
1134 stream->ps.bw_period = min_t(unsigned, tmp, urb->interval); in iso_stream_init()
1135 stream->ps.bw_uperiod = stream->ps.bw_period << 3; in iso_stream_init()
1137 stream->ps.period = urb->interval; in iso_stream_init()
1138 stream->uperiod = urb->interval << 3; in iso_stream_init()
1139 stream->bandwidth = (stream->ps.usecs + stream->ps.c_usecs) / in iso_stream_init()
1140 stream->ps.bw_period; in iso_stream_init()
1143 stream->address = cpu_to_hc32(ehci, addr); in iso_stream_init()
1146 stream->ps.udev = dev; in iso_stream_init()
1147 stream->ps.ep = urb->ep; in iso_stream_init()
1149 stream->bEndpointAddress = is_input | epnum; in iso_stream_init()
1150 stream->maxp = maxp; in iso_stream_init()
1157 struct ehci_iso_stream *stream; in iso_stream_find() local
1168 stream = ep->hcpriv; in iso_stream_find()
1170 if (unlikely (stream == NULL)) { in iso_stream_find()
1171 stream = iso_stream_alloc(GFP_ATOMIC); in iso_stream_find()
1172 if (likely (stream != NULL)) { in iso_stream_find()
1173 ep->hcpriv = stream; in iso_stream_find()
1174 iso_stream_init(ehci, stream, urb); in iso_stream_find()
1178 } else if (unlikely (stream->hw != NULL)) { in iso_stream_find()
1182 stream = NULL; in iso_stream_find()
1186 return stream; in iso_stream_find()
1211 struct ehci_iso_stream *stream, in itd_sched_init() argument
1219 iso_sched->span = urb->number_of_packets * stream->uperiod; in itd_sched_init()
1251 struct ehci_iso_stream *stream, in iso_sched_free() argument
1258 list_splice (&iso_sched->td_list, &stream->free_list); in iso_sched_free()
1264 struct ehci_iso_stream *stream, in itd_urb_transaction() argument
1281 itd_sched_init(ehci, sched, stream, urb); in itd_urb_transaction()
1296 if (likely(!list_empty(&stream->free_list))) { in itd_urb_transaction()
1297 itd = list_first_entry(&stream->free_list, in itd_urb_transaction()
1310 iso_sched_free(stream, sched); in itd_urb_transaction()
1332 struct ehci_iso_stream *stream, int sign) in reserve_release_iso_bandwidth() argument
1337 int usecs = stream->ps.usecs; in reserve_release_iso_bandwidth()
1338 int c_usecs = stream->ps.c_usecs; in reserve_release_iso_bandwidth()
1339 int tt_usecs = stream->ps.tt_usecs; in reserve_release_iso_bandwidth()
1342 if (stream->ps.phase == NO_FRAME) /* Bandwidth wasn't reserved */ in reserve_release_iso_bandwidth()
1344 uframe = stream->ps.bw_phase << 3; in reserve_release_iso_bandwidth()
1346 bandwidth_dbg(ehci, sign, "iso", &stream->ps); in reserve_release_iso_bandwidth()
1354 if (!stream->splits) { /* High speed */ in reserve_release_iso_bandwidth()
1355 for (i = uframe + stream->ps.phase_uf; i < EHCI_BANDWIDTH_SIZE; in reserve_release_iso_bandwidth()
1356 i += stream->ps.bw_uperiod) in reserve_release_iso_bandwidth()
1360 s_mask = stream->ps.cs_mask; in reserve_release_iso_bandwidth()
1365 i += stream->ps.bw_uperiod) { in reserve_release_iso_bandwidth()
1366 for ((j = stream->ps.phase_uf, m = 1 << j); j < 8; in reserve_release_iso_bandwidth()
1375 tt = find_tt(stream->ps.udev); in reserve_release_iso_bandwidth()
1377 list_add_tail(&stream->ps.ps_list, &tt->ps_list); in reserve_release_iso_bandwidth()
1379 list_del(&stream->ps.ps_list); in reserve_release_iso_bandwidth()
1382 i += stream->ps.bw_period) in reserve_release_iso_bandwidth()
1390 struct ehci_iso_stream *stream, in itd_slot_ok() argument
1397 usecs = ehci->uframe_periodic_max - stream->ps.usecs; in itd_slot_ok()
1399 for (uframe &= stream->ps.bw_uperiod - 1; uframe < EHCI_BANDWIDTH_SIZE; in itd_slot_ok()
1400 uframe += stream->ps.bw_uperiod) { in itd_slot_ok()
1410 struct ehci_iso_stream *stream, in sitd_slot_ok() argument
1419 mask = stream->ps.cs_mask << (uframe & 7); in sitd_slot_ok()
1422 if (((stream->ps.cs_mask & 0xff) << (uframe & 7)) >= (1 << 7)) in sitd_slot_ok()
1430 uframe &= stream->ps.bw_uperiod - 1; in sitd_slot_ok()
1438 if (!tt_available(ehci, &stream->ps, tt, frame, uf)) in sitd_slot_ok()
1444 if (!tt_no_collision(ehci, stream->ps.bw_period, in sitd_slot_ok()
1445 stream->ps.udev, frame, mask)) in sitd_slot_ok()
1455 max_used = ehci->uframe_periodic_max - stream->ps.usecs; in sitd_slot_ok()
1456 for (tmp = stream->ps.cs_mask & 0xff; tmp; tmp >>= 1, uf++) { in sitd_slot_ok()
1462 if (stream->ps.c_usecs) { in sitd_slot_ok()
1464 stream->ps.c_usecs; in sitd_slot_ok()
1468 if ((stream->ps.cs_mask & tmp) == 0) in sitd_slot_ok()
1475 uframe += stream->ps.bw_uperiod; in sitd_slot_ok()
1478 stream->ps.cs_mask <<= uframe & 7; in sitd_slot_ok()
1479 stream->splits = cpu_to_hc32(ehci, stream->ps.cs_mask); in sitd_slot_ok()
1498 struct ehci_iso_stream *stream in iso_stream_schedule() argument
1506 bool empty = list_empty(&stream->td_list); in iso_stream_schedule()
1509 period = stream->uperiod; in iso_stream_schedule()
1511 if (!stream->highspeed) in iso_stream_schedule()
1519 if (stream->ps.phase == NO_FRAME) { in iso_stream_schedule()
1521 struct ehci_tt *tt = find_tt(stream->ps.udev); in iso_stream_schedule()
1541 if (stream->highspeed) { in iso_stream_schedule()
1542 if (itd_slot_ok(ehci, stream, start)) in iso_stream_schedule()
1547 if (sitd_slot_ok(ehci, stream, start, in iso_stream_schedule()
1559 stream->ps.phase = (start >> 3) & in iso_stream_schedule()
1560 (stream->ps.period - 1); in iso_stream_schedule()
1561 stream->ps.bw_phase = stream->ps.phase & in iso_stream_schedule()
1562 (stream->ps.bw_period - 1); in iso_stream_schedule()
1563 stream->ps.phase_uf = start & 7; in iso_stream_schedule()
1564 reserve_release_iso_bandwidth(ehci, stream, 1); in iso_stream_schedule()
1569 start = (stream->ps.phase << 3) + stream->ps.phase_uf; in iso_stream_schedule()
1572 stream->next_uframe = start; in iso_stream_schedule()
1594 start = (stream->next_uframe - base) & (mod - 1); in iso_stream_schedule()
1610 urb, stream->next_uframe, base, period, mod); in iso_stream_schedule()
1649 iso_sched_free(stream, sched); in iso_stream_schedule()
1672 stream->next_uframe = (start + skip) & (mod - 1); in iso_stream_schedule()
1676 if (!stream->highspeed) in iso_stream_schedule()
1681 iso_sched_free(stream, sched); in iso_stream_schedule()
1689 itd_init(struct ehci_hcd *ehci, struct ehci_iso_stream *stream, in itd_init() argument
1696 itd->hw_bufp [0] = stream->buf0; in itd_init()
1697 itd->hw_bufp [1] = stream->buf1; in itd_init()
1698 itd->hw_bufp [2] = stream->buf2; in itd_init()
1769 struct ehci_iso_stream *stream in itd_link_urb() argument
1777 next_uframe = stream->next_uframe & (mod - 1); in itd_link_urb()
1779 if (unlikely (list_empty(&stream->td_list))) in itd_link_urb()
1781 += stream->bandwidth; in itd_link_urb()
1801 list_move_tail (&itd->itd_list, &stream->td_list); in itd_link_urb()
1802 itd->stream = stream; in itd_link_urb()
1804 itd_init (ehci, stream, itd); in itd_link_urb()
1812 next_uframe += stream->uperiod; in itd_link_urb()
1823 stream->next_uframe = next_uframe; in itd_link_urb()
1826 iso_sched_free (stream, iso_sched); in itd_link_urb()
1827 urb->hcpriv = stream; in itd_link_urb()
1852 struct ehci_iso_stream *stream = itd->stream; in itd_complete() local
1917 if (unlikely(list_is_singular(&stream->td_list))) in itd_complete()
1919 -= stream->bandwidth; in itd_complete()
1925 list_move_tail(&itd->itd_list, &stream->free_list); in itd_complete()
1928 if (list_empty(&stream->td_list)) { in itd_complete()
1929 list_splice_tail_init(&stream->free_list, in itd_complete()
1944 struct ehci_iso_stream *stream; in itd_submit() local
1947 stream = iso_stream_find (ehci, urb); in itd_submit()
1948 if (unlikely (stream == NULL)) { in itd_submit()
1952 if (unlikely(urb->interval != stream->uperiod)) { in itd_submit()
1954 stream->uperiod, urb->interval); in itd_submit()
1966 stream); in itd_submit()
1970 status = itd_urb_transaction (stream, ehci, urb, mem_flags); in itd_submit()
1985 status = iso_stream_schedule(ehci, urb, stream); in itd_submit()
1987 itd_link_urb (ehci, urb, ehci->periodic_size << 3, stream); in itd_submit()
2011 struct ehci_iso_stream *stream, in sitd_sched_init() argument
2019 iso_sched->span = urb->number_of_packets * stream->ps.period; in sitd_sched_init()
2047 if (stream->bEndpointAddress & USB_DIR_IN) in sitd_sched_init()
2058 struct ehci_iso_stream *stream, in sitd_urb_transaction() argument
2074 sitd_sched_init(ehci, iso_sched, stream, urb); in sitd_urb_transaction()
2089 if (likely(!list_empty(&stream->free_list))) { in sitd_urb_transaction()
2090 sitd = list_first_entry(&stream->free_list, in sitd_urb_transaction()
2103 iso_sched_free(stream, iso_sched); in sitd_urb_transaction()
2128 struct ehci_iso_stream *stream, in sitd_patch() argument
2138 sitd->hw_fullspeed_ep = stream->address; in sitd_patch()
2139 sitd->hw_uframe = stream->splits; in sitd_patch()
2171 struct ehci_iso_stream *stream in sitd_link_urb() argument
2179 next_uframe = stream->next_uframe; in sitd_link_urb()
2181 if (list_empty(&stream->td_list)) in sitd_link_urb()
2184 += stream->bandwidth; in sitd_link_urb()
2205 list_move_tail (&sitd->sitd_list, &stream->td_list); in sitd_link_urb()
2206 sitd->stream = stream; in sitd_link_urb()
2209 sitd_patch(ehci, stream, sitd, sched, packet); in sitd_link_urb()
2213 next_uframe += stream->uperiod; in sitd_link_urb()
2215 stream->next_uframe = next_uframe & (mod - 1); in sitd_link_urb()
2218 iso_sched_free (stream, sched); in sitd_link_urb()
2219 urb->hcpriv = stream; in sitd_link_urb()
2246 struct ehci_iso_stream *stream = sitd->stream; in sitd_complete() local
2298 if (list_is_singular(&stream->td_list)) in sitd_complete()
2300 -= stream->bandwidth; in sitd_complete()
2306 list_move_tail(&sitd->sitd_list, &stream->free_list); in sitd_complete()
2309 if (list_empty(&stream->td_list)) { in sitd_complete()
2310 list_splice_tail_init(&stream->free_list, in sitd_complete()
2324 struct ehci_iso_stream *stream; in sitd_submit() local
2327 stream = iso_stream_find (ehci, urb); in sitd_submit()
2328 if (stream == NULL) { in sitd_submit()
2332 if (urb->interval != stream->ps.period) { in sitd_submit()
2334 stream->ps.period, urb->interval); in sitd_submit()
2348 status = sitd_urb_transaction (stream, ehci, urb, mem_flags); in sitd_submit()
2363 status = iso_stream_schedule(ehci, urb, stream); in sitd_submit()
2365 sitd_link_urb (ehci, urb, ehci->periodic_size << 3, stream); in sitd_submit()