Lines Matching refs:stream

16 int usb_urb_reconfig(struct usb_data_stream *stream,
21 struct usb_data_stream *stream = urb->context;
26 dev_dbg_ratelimited(&stream->udev->dev,
42 dev_dbg_ratelimited(&stream->udev->dev,
53 dev_dbg(&stream->udev->dev,
58 stream->complete(stream,
68 stream->complete(stream, b, urb->actual_length);
71 dev_err(&stream->udev->dev,
79 int usb_urb_killv2(struct usb_data_stream *stream)
82 for (i = 0; i < stream->urbs_submitted; i++) {
83 dev_dbg(&stream->udev->dev, "%s: kill urb=%d\n", __func__, i);
85 usb_kill_urb(stream->urb_list[i]);
87 stream->urbs_submitted = 0;
91 int usb_urb_submitv2(struct usb_data_stream *stream,
97 ret = usb_urb_reconfig(stream, props);
102 for (i = 0; i < stream->urbs_initialized; i++) {
103 dev_dbg(&stream->udev->dev, "%s: submit urb=%d\n", __func__, i);
104 ret = usb_submit_urb(stream->urb_list[i], GFP_ATOMIC);
106 dev_err(&stream->udev->dev,
109 usb_urb_killv2(stream);
112 stream->urbs_submitted++;
117 static int usb_urb_free_urbs(struct usb_data_stream *stream)
121 usb_urb_killv2(stream);
123 for (i = stream->urbs_initialized - 1; i >= 0; i--) {
124 if (stream->urb_list[i]) {
125 dev_dbg(&stream->udev->dev, "%s: free urb=%d\n",
128 usb_free_urb(stream->urb_list[i]);
131 stream->urbs_initialized = 0;
136 static int usb_urb_alloc_bulk_urbs(struct usb_data_stream *stream)
141 for (i = 0; i < stream->props.count; i++) {
142 dev_dbg(&stream->udev->dev, "%s: alloc urb=%d\n", __func__, i);
143 stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC);
144 if (!stream->urb_list[i]) {
145 dev_dbg(&stream->udev->dev, "%s: failed\n", __func__);
147 usb_free_urb(stream->urb_list[j]);
150 usb_fill_bulk_urb(stream->urb_list[i],
151 stream->udev,
152 usb_rcvbulkpipe(stream->udev,
153 stream->props.endpoint),
154 stream->buf_list[i],
155 stream->props.u.bulk.buffersize,
156 usb_urb_complete, stream);
158 stream->urbs_initialized++;
163 static int usb_urb_alloc_isoc_urbs(struct usb_data_stream *stream)
168 for (i = 0; i < stream->props.count; i++) {
171 dev_dbg(&stream->udev->dev, "%s: alloc urb=%d\n", __func__, i);
172 stream->urb_list[i] = usb_alloc_urb(
173 stream->props.u.isoc.framesperurb, GFP_ATOMIC);
174 if (!stream->urb_list[i]) {
175 dev_dbg(&stream->udev->dev, "%s: failed\n", __func__);
177 usb_free_urb(stream->urb_list[j]);
181 urb = stream->urb_list[i];
183 urb->dev = stream->udev;
184 urb->context = stream;
186 urb->pipe = usb_rcvisocpipe(stream->udev,
187 stream->props.endpoint);
189 urb->interval = stream->props.u.isoc.interval;
190 urb->number_of_packets = stream->props.u.isoc.framesperurb;
191 urb->transfer_buffer_length = stream->props.u.isoc.framesize *
192 stream->props.u.isoc.framesperurb;
193 urb->transfer_buffer = stream->buf_list[i];
195 for (j = 0; j < stream->props.u.isoc.framesperurb; j++) {
198 stream->props.u.isoc.framesize;
199 frame_offset += stream->props.u.isoc.framesize;
202 stream->urbs_initialized++;
207 static int usb_free_stream_buffers(struct usb_data_stream *stream)
209 if (stream->state & USB_STATE_URB_BUF) {
210 while (stream->buf_num) {
211 stream->buf_num--;
212 kfree(stream->buf_list[stream->buf_num]);
216 stream->state &= ~USB_STATE_URB_BUF;
221 static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
224 stream->buf_num = 0;
225 stream->buf_size = size;
227 dev_dbg(&stream->udev->dev,
231 for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) {
232 stream->buf_list[stream->buf_num] = kzalloc(size, GFP_ATOMIC);
233 if (!stream->buf_list[stream->buf_num]) {
234 dev_dbg(&stream->udev->dev, "%s: alloc buf=%d failed\n",
235 __func__, stream->buf_num);
236 usb_free_stream_buffers(stream);
240 dev_dbg(&stream->udev->dev, "%s: alloc buf=%d %p (dma %llu)\n",
241 __func__, stream->buf_num,
242 stream->buf_list[stream->buf_num],
243 (long long)stream->dma_addr[stream->buf_num]);
244 stream->state |= USB_STATE_URB_BUF;
250 int usb_urb_reconfig(struct usb_data_stream *stream,
260 buf_size = stream->props.u.bulk.buffersize;
264 dev_err(&stream->udev->dev, "%s: invalid endpoint type=%d\n",
269 if (stream->buf_num < props->count || stream->buf_size < buf_size) {
270 dev_err(&stream->udev->dev,
277 if (stream->props.type == props->type &&
278 stream->props.count == props->count &&
279 stream->props.endpoint == props->endpoint) {
282 stream->props.u.bulk.buffersize)
286 stream->props.u.isoc.framesperurb &&
288 stream->props.u.isoc.framesize &&
290 stream->props.u.isoc.interval)
294 dev_dbg(&stream->udev->dev, "%s: re-alloc urbs\n", __func__);
296 usb_urb_free_urbs(stream);
297 memcpy(&stream->props, props, sizeof(*props));
299 return usb_urb_alloc_bulk_urbs(stream);
301 return usb_urb_alloc_isoc_urbs(stream);
306 int usb_urb_initv2(struct usb_data_stream *stream,
311 if (!stream || !props)
314 memcpy(&stream->props, props, sizeof(*props));
316 if (!stream->complete) {
317 dev_err(&stream->udev->dev,
323 switch (stream->props.type) {
325 ret = usb_alloc_stream_buffers(stream, stream->props.count,
326 stream->props.u.bulk.buffersize);
330 return usb_urb_alloc_bulk_urbs(stream);
332 ret = usb_alloc_stream_buffers(stream, stream->props.count,
333 stream->props.u.isoc.framesize *
334 stream->props.u.isoc.framesperurb);
338 return usb_urb_alloc_isoc_urbs(stream);
340 dev_err(&stream->udev->dev,
347 int usb_urb_exitv2(struct usb_data_stream *stream)
349 usb_urb_free_urbs(stream);
350 usb_free_stream_buffers(stream);