Lines Matching refs:stream
15 int usb_urb_reconfig(struct usb_data_stream *stream,
20 struct usb_data_stream *stream = urb->context; in usb_urb_complete() local
25 dev_dbg_ratelimited(&stream->udev->dev, in usb_urb_complete()
41 dev_dbg_ratelimited(&stream->udev->dev, in usb_urb_complete()
52 dev_dbg(&stream->udev->dev, in usb_urb_complete()
57 stream->complete(stream, in usb_urb_complete()
67 stream->complete(stream, b, urb->actual_length); in usb_urb_complete()
70 dev_err(&stream->udev->dev, in usb_urb_complete()
78 int usb_urb_killv2(struct usb_data_stream *stream) in usb_urb_killv2() argument
81 for (i = 0; i < stream->urbs_submitted; i++) { in usb_urb_killv2()
82 dev_dbg(&stream->udev->dev, "%s: kill urb=%d\n", __func__, i); in usb_urb_killv2()
84 usb_kill_urb(stream->urb_list[i]); in usb_urb_killv2()
86 stream->urbs_submitted = 0; in usb_urb_killv2()
90 int usb_urb_submitv2(struct usb_data_stream *stream, in usb_urb_submitv2() argument
96 ret = usb_urb_reconfig(stream, props); in usb_urb_submitv2()
101 for (i = 0; i < stream->urbs_initialized; i++) { in usb_urb_submitv2()
102 dev_dbg(&stream->udev->dev, "%s: submit urb=%d\n", __func__, i); in usb_urb_submitv2()
103 ret = usb_submit_urb(stream->urb_list[i], GFP_ATOMIC); in usb_urb_submitv2()
105 dev_err(&stream->udev->dev, in usb_urb_submitv2()
108 usb_urb_killv2(stream); in usb_urb_submitv2()
111 stream->urbs_submitted++; in usb_urb_submitv2()
116 static int usb_urb_free_urbs(struct usb_data_stream *stream) in usb_urb_free_urbs() argument
120 usb_urb_killv2(stream); in usb_urb_free_urbs()
122 for (i = stream->urbs_initialized - 1; i >= 0; i--) { in usb_urb_free_urbs()
123 if (stream->urb_list[i]) { in usb_urb_free_urbs()
124 dev_dbg(&stream->udev->dev, "%s: free urb=%d\n", in usb_urb_free_urbs()
127 usb_free_urb(stream->urb_list[i]); in usb_urb_free_urbs()
130 stream->urbs_initialized = 0; in usb_urb_free_urbs()
135 static int usb_urb_alloc_bulk_urbs(struct usb_data_stream *stream) in usb_urb_alloc_bulk_urbs() argument
140 for (i = 0; i < stream->props.count; i++) { in usb_urb_alloc_bulk_urbs()
141 dev_dbg(&stream->udev->dev, "%s: alloc urb=%d\n", __func__, i); in usb_urb_alloc_bulk_urbs()
142 stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC); in usb_urb_alloc_bulk_urbs()
143 if (!stream->urb_list[i]) { in usb_urb_alloc_bulk_urbs()
144 dev_dbg(&stream->udev->dev, "%s: failed\n", __func__); in usb_urb_alloc_bulk_urbs()
146 usb_free_urb(stream->urb_list[j]); in usb_urb_alloc_bulk_urbs()
149 usb_fill_bulk_urb(stream->urb_list[i], in usb_urb_alloc_bulk_urbs()
150 stream->udev, in usb_urb_alloc_bulk_urbs()
151 usb_rcvbulkpipe(stream->udev, in usb_urb_alloc_bulk_urbs()
152 stream->props.endpoint), in usb_urb_alloc_bulk_urbs()
153 stream->buf_list[i], in usb_urb_alloc_bulk_urbs()
154 stream->props.u.bulk.buffersize, in usb_urb_alloc_bulk_urbs()
155 usb_urb_complete, stream); in usb_urb_alloc_bulk_urbs()
157 stream->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP; in usb_urb_alloc_bulk_urbs()
158 stream->urb_list[i]->transfer_dma = stream->dma_addr[i]; in usb_urb_alloc_bulk_urbs()
159 stream->urbs_initialized++; in usb_urb_alloc_bulk_urbs()
164 static int usb_urb_alloc_isoc_urbs(struct usb_data_stream *stream) in usb_urb_alloc_isoc_urbs() argument
169 for (i = 0; i < stream->props.count; i++) { in usb_urb_alloc_isoc_urbs()
172 dev_dbg(&stream->udev->dev, "%s: alloc urb=%d\n", __func__, i); in usb_urb_alloc_isoc_urbs()
173 stream->urb_list[i] = usb_alloc_urb( in usb_urb_alloc_isoc_urbs()
174 stream->props.u.isoc.framesperurb, GFP_ATOMIC); in usb_urb_alloc_isoc_urbs()
175 if (!stream->urb_list[i]) { in usb_urb_alloc_isoc_urbs()
176 dev_dbg(&stream->udev->dev, "%s: failed\n", __func__); in usb_urb_alloc_isoc_urbs()
178 usb_free_urb(stream->urb_list[j]); in usb_urb_alloc_isoc_urbs()
182 urb = stream->urb_list[i]; in usb_urb_alloc_isoc_urbs()
184 urb->dev = stream->udev; in usb_urb_alloc_isoc_urbs()
185 urb->context = stream; in usb_urb_alloc_isoc_urbs()
187 urb->pipe = usb_rcvisocpipe(stream->udev, in usb_urb_alloc_isoc_urbs()
188 stream->props.endpoint); in usb_urb_alloc_isoc_urbs()
190 urb->interval = stream->props.u.isoc.interval; in usb_urb_alloc_isoc_urbs()
191 urb->number_of_packets = stream->props.u.isoc.framesperurb; in usb_urb_alloc_isoc_urbs()
192 urb->transfer_buffer_length = stream->props.u.isoc.framesize * in usb_urb_alloc_isoc_urbs()
193 stream->props.u.isoc.framesperurb; in usb_urb_alloc_isoc_urbs()
194 urb->transfer_buffer = stream->buf_list[i]; in usb_urb_alloc_isoc_urbs()
195 urb->transfer_dma = stream->dma_addr[i]; in usb_urb_alloc_isoc_urbs()
197 for (j = 0; j < stream->props.u.isoc.framesperurb; j++) { in usb_urb_alloc_isoc_urbs()
200 stream->props.u.isoc.framesize; in usb_urb_alloc_isoc_urbs()
201 frame_offset += stream->props.u.isoc.framesize; in usb_urb_alloc_isoc_urbs()
204 stream->urbs_initialized++; in usb_urb_alloc_isoc_urbs()
209 static int usb_free_stream_buffers(struct usb_data_stream *stream) in usb_free_stream_buffers() argument
211 if (stream->state & USB_STATE_URB_BUF) { in usb_free_stream_buffers()
212 while (stream->buf_num) { in usb_free_stream_buffers()
213 stream->buf_num--; in usb_free_stream_buffers()
214 dev_dbg(&stream->udev->dev, "%s: free buf=%d\n", in usb_free_stream_buffers()
215 __func__, stream->buf_num); in usb_free_stream_buffers()
216 usb_free_coherent(stream->udev, stream->buf_size, in usb_free_stream_buffers()
217 stream->buf_list[stream->buf_num], in usb_free_stream_buffers()
218 stream->dma_addr[stream->buf_num]); in usb_free_stream_buffers()
222 stream->state &= ~USB_STATE_URB_BUF; in usb_free_stream_buffers()
227 static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num, in usb_alloc_stream_buffers() argument
230 stream->buf_num = 0; in usb_alloc_stream_buffers()
231 stream->buf_size = size; in usb_alloc_stream_buffers()
233 dev_dbg(&stream->udev->dev, in usb_alloc_stream_buffers()
237 for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) { in usb_alloc_stream_buffers()
238 stream->buf_list[stream->buf_num] = usb_alloc_coherent( in usb_alloc_stream_buffers()
239 stream->udev, size, GFP_ATOMIC, in usb_alloc_stream_buffers()
240 &stream->dma_addr[stream->buf_num]); in usb_alloc_stream_buffers()
241 if (!stream->buf_list[stream->buf_num]) { in usb_alloc_stream_buffers()
242 dev_dbg(&stream->udev->dev, "%s: alloc buf=%d failed\n", in usb_alloc_stream_buffers()
243 __func__, stream->buf_num); in usb_alloc_stream_buffers()
244 usb_free_stream_buffers(stream); in usb_alloc_stream_buffers()
248 dev_dbg(&stream->udev->dev, "%s: alloc buf=%d %p (dma %llu)\n", in usb_alloc_stream_buffers()
249 __func__, stream->buf_num, in usb_alloc_stream_buffers()
250 stream->buf_list[stream->buf_num], in usb_alloc_stream_buffers()
251 (long long)stream->dma_addr[stream->buf_num]); in usb_alloc_stream_buffers()
252 memset(stream->buf_list[stream->buf_num], 0, size); in usb_alloc_stream_buffers()
253 stream->state |= USB_STATE_URB_BUF; in usb_alloc_stream_buffers()
259 int usb_urb_reconfig(struct usb_data_stream *stream, in usb_urb_reconfig() argument
269 buf_size = stream->props.u.bulk.buffersize; in usb_urb_reconfig()
273 dev_err(&stream->udev->dev, "%s: invalid endpoint type=%d\n", in usb_urb_reconfig()
278 if (stream->buf_num < props->count || stream->buf_size < buf_size) { in usb_urb_reconfig()
279 dev_err(&stream->udev->dev, in usb_urb_reconfig()
286 if (stream->props.type == props->type && in usb_urb_reconfig()
287 stream->props.count == props->count && in usb_urb_reconfig()
288 stream->props.endpoint == props->endpoint) { in usb_urb_reconfig()
291 stream->props.u.bulk.buffersize) in usb_urb_reconfig()
295 stream->props.u.isoc.framesperurb && in usb_urb_reconfig()
297 stream->props.u.isoc.framesize && in usb_urb_reconfig()
299 stream->props.u.isoc.interval) in usb_urb_reconfig()
303 dev_dbg(&stream->udev->dev, "%s: re-alloc urbs\n", __func__); in usb_urb_reconfig()
305 usb_urb_free_urbs(stream); in usb_urb_reconfig()
306 memcpy(&stream->props, props, sizeof(*props)); in usb_urb_reconfig()
308 return usb_urb_alloc_bulk_urbs(stream); in usb_urb_reconfig()
310 return usb_urb_alloc_isoc_urbs(stream); in usb_urb_reconfig()
315 int usb_urb_initv2(struct usb_data_stream *stream, in usb_urb_initv2() argument
320 if (!stream || !props) in usb_urb_initv2()
323 memcpy(&stream->props, props, sizeof(*props)); in usb_urb_initv2()
325 if (!stream->complete) { in usb_urb_initv2()
326 dev_err(&stream->udev->dev, in usb_urb_initv2()
332 switch (stream->props.type) { in usb_urb_initv2()
334 ret = usb_alloc_stream_buffers(stream, stream->props.count, in usb_urb_initv2()
335 stream->props.u.bulk.buffersize); in usb_urb_initv2()
339 return usb_urb_alloc_bulk_urbs(stream); in usb_urb_initv2()
341 ret = usb_alloc_stream_buffers(stream, stream->props.count, in usb_urb_initv2()
342 stream->props.u.isoc.framesize * in usb_urb_initv2()
343 stream->props.u.isoc.framesperurb); in usb_urb_initv2()
347 return usb_urb_alloc_isoc_urbs(stream); in usb_urb_initv2()
349 dev_err(&stream->udev->dev, in usb_urb_initv2()
356 int usb_urb_exitv2(struct usb_data_stream *stream) in usb_urb_exitv2() argument
358 usb_urb_free_urbs(stream); in usb_urb_exitv2()
359 usb_free_stream_buffers(stream); in usb_urb_exitv2()