1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 */
4
5 #include <linux/gfp.h>
6 #include <linux/init.h>
7 #include <linux/ratelimit.h>
8 #include <linux/usb.h>
9 #include <linux/usb/audio.h>
10 #include <linux/slab.h>
11
12 #include <sound/core.h>
13 #include <sound/pcm.h>
14 #include <sound/pcm_params.h>
15
16 #include "usbaudio.h"
17 #include "helper.h"
18 #include "card.h"
19 #include "endpoint.h"
20 #include "pcm.h"
21 #include "clock.h"
22 #include "quirks.h"
23
24 enum {
25 EP_STATE_STOPPED,
26 EP_STATE_RUNNING,
27 EP_STATE_STOPPING,
28 };
29
30 /* interface refcounting */
31 struct snd_usb_iface_ref {
32 unsigned char iface;
33 bool need_setup;
34 int opened;
35 struct list_head list;
36 };
37
38 /* clock refcounting */
39 struct snd_usb_clock_ref {
40 unsigned char clock;
41 atomic_t locked;
42 int rate;
43 struct list_head list;
44 };
45
46 /*
47 * snd_usb_endpoint is a model that abstracts everything related to an
48 * USB endpoint and its streaming.
49 *
50 * There are functions to activate and deactivate the streaming URBs and
51 * optional callbacks to let the pcm logic handle the actual content of the
52 * packets for playback and record. Thus, the bus streaming and the audio
53 * handlers are fully decoupled.
54 *
55 * There are two different types of endpoints in audio applications.
56 *
57 * SND_USB_ENDPOINT_TYPE_DATA handles full audio data payload for both
58 * inbound and outbound traffic.
59 *
60 * SND_USB_ENDPOINT_TYPE_SYNC endpoints are for inbound traffic only and
61 * expect the payload to carry Q10.14 / Q16.16 formatted sync information
62 * (3 or 4 bytes).
63 *
64 * Each endpoint has to be configured prior to being used by calling
65 * snd_usb_endpoint_set_params().
66 *
67 * The model incorporates a reference counting, so that multiple users
68 * can call snd_usb_endpoint_start() and snd_usb_endpoint_stop(), and
69 * only the first user will effectively start the URBs, and only the last
70 * one to stop it will tear the URBs down again.
71 */
72
73 /*
74 * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
75 * this will overflow at approx 524 kHz
76 */
get_usb_full_speed_rate(unsigned int rate)77 static inline unsigned get_usb_full_speed_rate(unsigned int rate)
78 {
79 return ((rate << 13) + 62) / 125;
80 }
81
82 /*
83 * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
84 * this will overflow at approx 4 MHz
85 */
get_usb_high_speed_rate(unsigned int rate)86 static inline unsigned get_usb_high_speed_rate(unsigned int rate)
87 {
88 return ((rate << 10) + 62) / 125;
89 }
90
91 /*
92 * release a urb data
93 */
release_urb_ctx(struct snd_urb_ctx * u)94 static void release_urb_ctx(struct snd_urb_ctx *u)
95 {
96 if (u->buffer_size)
97 usb_free_coherent(u->ep->chip->dev, u->buffer_size,
98 u->urb->transfer_buffer,
99 u->urb->transfer_dma);
100 usb_free_urb(u->urb);
101 u->urb = NULL;
102 }
103
usb_error_string(int err)104 static const char *usb_error_string(int err)
105 {
106 switch (err) {
107 case -ENODEV:
108 return "no device";
109 case -ENOENT:
110 return "endpoint not enabled";
111 case -EPIPE:
112 return "endpoint stalled";
113 case -ENOSPC:
114 return "not enough bandwidth";
115 case -ESHUTDOWN:
116 return "device disabled";
117 case -EHOSTUNREACH:
118 return "device suspended";
119 case -EINVAL:
120 case -EAGAIN:
121 case -EFBIG:
122 case -EMSGSIZE:
123 return "internal error";
124 default:
125 return "unknown error";
126 }
127 }
128
ep_state_running(struct snd_usb_endpoint * ep)129 static inline bool ep_state_running(struct snd_usb_endpoint *ep)
130 {
131 return atomic_read(&ep->state) == EP_STATE_RUNNING;
132 }
133
ep_state_update(struct snd_usb_endpoint * ep,int old,int new)134 static inline bool ep_state_update(struct snd_usb_endpoint *ep, int old, int new)
135 {
136 return atomic_cmpxchg(&ep->state, old, new) == old;
137 }
138
139 /**
140 * snd_usb_endpoint_implicit_feedback_sink: Report endpoint usage type
141 *
142 * @ep: The snd_usb_endpoint
143 *
144 * Determine whether an endpoint is driven by an implicit feedback
145 * data endpoint source.
146 */
snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint * ep)147 int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
148 {
149 return ep->implicit_fb_sync && usb_pipeout(ep->pipe);
150 }
151
152 /*
153 * Return the number of samples to be sent in the next packet
154 * for streaming based on information derived from sync endpoints
155 *
156 * This won't be used for implicit feedback which takes the packet size
157 * returned from the sync source
158 */
slave_next_packet_size(struct snd_usb_endpoint * ep,unsigned int avail)159 static int slave_next_packet_size(struct snd_usb_endpoint *ep,
160 unsigned int avail)
161 {
162 unsigned long flags;
163 unsigned int phase;
164 int ret;
165
166 if (ep->fill_max)
167 return ep->maxframesize;
168
169 spin_lock_irqsave(&ep->lock, flags);
170 phase = (ep->phase & 0xffff) + (ep->freqm << ep->datainterval);
171 ret = min(phase >> 16, ep->maxframesize);
172 if (avail && ret >= avail)
173 ret = -EAGAIN;
174 else
175 ep->phase = phase;
176 spin_unlock_irqrestore(&ep->lock, flags);
177
178 return ret;
179 }
180
181 /*
182 * Return the number of samples to be sent in the next packet
183 * for adaptive and synchronous endpoints
184 */
next_packet_size(struct snd_usb_endpoint * ep,unsigned int avail)185 static int next_packet_size(struct snd_usb_endpoint *ep, unsigned int avail)
186 {
187 unsigned int sample_accum;
188 int ret;
189
190 if (ep->fill_max)
191 return ep->maxframesize;
192
193 sample_accum = ep->sample_accum + ep->sample_rem;
194 if (sample_accum >= ep->pps) {
195 sample_accum -= ep->pps;
196 ret = ep->packsize[1];
197 } else {
198 ret = ep->packsize[0];
199 }
200 if (avail && ret >= avail)
201 ret = -EAGAIN;
202 else
203 ep->sample_accum = sample_accum;
204
205 return ret;
206 }
207
208 /*
209 * snd_usb_endpoint_next_packet_size: Return the number of samples to be sent
210 * in the next packet
211 *
212 * If the size is equal or exceeds @avail, don't proceed but return -EAGAIN
213 * Exception: @avail = 0 for skipping the check.
214 */
snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint * ep,struct snd_urb_ctx * ctx,int idx,unsigned int avail)215 int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep,
216 struct snd_urb_ctx *ctx, int idx,
217 unsigned int avail)
218 {
219 unsigned int packet;
220
221 packet = ctx->packet_size[idx];
222 if (packet) {
223 if (avail && packet >= avail)
224 return -EAGAIN;
225 return packet;
226 }
227
228 if (ep->sync_source)
229 return slave_next_packet_size(ep, avail);
230 else
231 return next_packet_size(ep, avail);
232 }
233
call_retire_callback(struct snd_usb_endpoint * ep,struct urb * urb)234 static void call_retire_callback(struct snd_usb_endpoint *ep,
235 struct urb *urb)
236 {
237 struct snd_usb_substream *data_subs;
238
239 data_subs = READ_ONCE(ep->data_subs);
240 if (data_subs && ep->retire_data_urb)
241 ep->retire_data_urb(data_subs, urb);
242 }
243
retire_outbound_urb(struct snd_usb_endpoint * ep,struct snd_urb_ctx * urb_ctx)244 static void retire_outbound_urb(struct snd_usb_endpoint *ep,
245 struct snd_urb_ctx *urb_ctx)
246 {
247 call_retire_callback(ep, urb_ctx->urb);
248 }
249
250 static void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
251 struct snd_usb_endpoint *sender,
252 const struct urb *urb);
253
retire_inbound_urb(struct snd_usb_endpoint * ep,struct snd_urb_ctx * urb_ctx)254 static void retire_inbound_urb(struct snd_usb_endpoint *ep,
255 struct snd_urb_ctx *urb_ctx)
256 {
257 struct urb *urb = urb_ctx->urb;
258 struct snd_usb_endpoint *sync_sink;
259
260 if (unlikely(ep->skip_packets > 0)) {
261 ep->skip_packets--;
262 return;
263 }
264
265 sync_sink = READ_ONCE(ep->sync_sink);
266 if (sync_sink)
267 snd_usb_handle_sync_urb(sync_sink, ep, urb);
268
269 call_retire_callback(ep, urb);
270 }
271
has_tx_length_quirk(struct snd_usb_audio * chip)272 static inline bool has_tx_length_quirk(struct snd_usb_audio *chip)
273 {
274 return chip->quirk_flags & QUIRK_FLAG_TX_LENGTH;
275 }
276
prepare_silent_urb(struct snd_usb_endpoint * ep,struct snd_urb_ctx * ctx)277 static void prepare_silent_urb(struct snd_usb_endpoint *ep,
278 struct snd_urb_ctx *ctx)
279 {
280 struct urb *urb = ctx->urb;
281 unsigned int offs = 0;
282 unsigned int extra = 0;
283 __le32 packet_length;
284 int i;
285
286 /* For tx_length_quirk, put packet length at start of packet */
287 if (has_tx_length_quirk(ep->chip))
288 extra = sizeof(packet_length);
289
290 for (i = 0; i < ctx->packets; ++i) {
291 unsigned int offset;
292 unsigned int length;
293 int counts;
294
295 counts = snd_usb_endpoint_next_packet_size(ep, ctx, i, 0);
296 length = counts * ep->stride; /* number of silent bytes */
297 offset = offs * ep->stride + extra * i;
298 urb->iso_frame_desc[i].offset = offset;
299 urb->iso_frame_desc[i].length = length + extra;
300 if (extra) {
301 packet_length = cpu_to_le32(length);
302 memcpy(urb->transfer_buffer + offset,
303 &packet_length, sizeof(packet_length));
304 }
305 memset(urb->transfer_buffer + offset + extra,
306 ep->silence_value, length);
307 offs += counts;
308 }
309
310 urb->number_of_packets = ctx->packets;
311 urb->transfer_buffer_length = offs * ep->stride + ctx->packets * extra;
312 ctx->queued = 0;
313 }
314
315 /*
316 * Prepare a PLAYBACK urb for submission to the bus.
317 */
prepare_outbound_urb(struct snd_usb_endpoint * ep,struct snd_urb_ctx * ctx,bool in_stream_lock)318 static int prepare_outbound_urb(struct snd_usb_endpoint *ep,
319 struct snd_urb_ctx *ctx,
320 bool in_stream_lock)
321 {
322 struct urb *urb = ctx->urb;
323 unsigned char *cp = urb->transfer_buffer;
324 struct snd_usb_substream *data_subs;
325
326 urb->dev = ep->chip->dev; /* we need to set this at each time */
327
328 switch (ep->type) {
329 case SND_USB_ENDPOINT_TYPE_DATA:
330 data_subs = READ_ONCE(ep->data_subs);
331 if (data_subs && ep->prepare_data_urb)
332 return ep->prepare_data_urb(data_subs, urb, in_stream_lock);
333 /* no data provider, so send silence */
334 prepare_silent_urb(ep, ctx);
335 break;
336
337 case SND_USB_ENDPOINT_TYPE_SYNC:
338 if (snd_usb_get_speed(ep->chip->dev) >= USB_SPEED_HIGH) {
339 /*
340 * fill the length and offset of each urb descriptor.
341 * the fixed 12.13 frequency is passed as 16.16 through the pipe.
342 */
343 urb->iso_frame_desc[0].length = 4;
344 urb->iso_frame_desc[0].offset = 0;
345 cp[0] = ep->freqn;
346 cp[1] = ep->freqn >> 8;
347 cp[2] = ep->freqn >> 16;
348 cp[3] = ep->freqn >> 24;
349 } else {
350 /*
351 * fill the length and offset of each urb descriptor.
352 * the fixed 10.14 frequency is passed through the pipe.
353 */
354 urb->iso_frame_desc[0].length = 3;
355 urb->iso_frame_desc[0].offset = 0;
356 cp[0] = ep->freqn >> 2;
357 cp[1] = ep->freqn >> 10;
358 cp[2] = ep->freqn >> 18;
359 }
360
361 break;
362 }
363 return 0;
364 }
365
366 /*
367 * Prepare a CAPTURE or SYNC urb for submission to the bus.
368 */
prepare_inbound_urb(struct snd_usb_endpoint * ep,struct snd_urb_ctx * urb_ctx)369 static int prepare_inbound_urb(struct snd_usb_endpoint *ep,
370 struct snd_urb_ctx *urb_ctx)
371 {
372 int i, offs;
373 struct urb *urb = urb_ctx->urb;
374
375 urb->dev = ep->chip->dev; /* we need to set this at each time */
376
377 switch (ep->type) {
378 case SND_USB_ENDPOINT_TYPE_DATA:
379 offs = 0;
380 for (i = 0; i < urb_ctx->packets; i++) {
381 urb->iso_frame_desc[i].offset = offs;
382 urb->iso_frame_desc[i].length = ep->curpacksize;
383 offs += ep->curpacksize;
384 }
385
386 urb->transfer_buffer_length = offs;
387 urb->number_of_packets = urb_ctx->packets;
388 break;
389
390 case SND_USB_ENDPOINT_TYPE_SYNC:
391 urb->iso_frame_desc[0].length = min(4u, ep->syncmaxsize);
392 urb->iso_frame_desc[0].offset = 0;
393 break;
394 }
395 return 0;
396 }
397
398 /* notify an error as XRUN to the assigned PCM data substream */
notify_xrun(struct snd_usb_endpoint * ep)399 static void notify_xrun(struct snd_usb_endpoint *ep)
400 {
401 struct snd_usb_substream *data_subs;
402
403 data_subs = READ_ONCE(ep->data_subs);
404 if (data_subs && data_subs->pcm_substream)
405 snd_pcm_stop_xrun(data_subs->pcm_substream);
406 }
407
408 static struct snd_usb_packet_info *
next_packet_fifo_enqueue(struct snd_usb_endpoint * ep)409 next_packet_fifo_enqueue(struct snd_usb_endpoint *ep)
410 {
411 struct snd_usb_packet_info *p;
412
413 p = ep->next_packet + (ep->next_packet_head + ep->next_packet_queued) %
414 ARRAY_SIZE(ep->next_packet);
415 ep->next_packet_queued++;
416 return p;
417 }
418
419 static struct snd_usb_packet_info *
next_packet_fifo_dequeue(struct snd_usb_endpoint * ep)420 next_packet_fifo_dequeue(struct snd_usb_endpoint *ep)
421 {
422 struct snd_usb_packet_info *p;
423
424 p = ep->next_packet + ep->next_packet_head;
425 ep->next_packet_head++;
426 ep->next_packet_head %= ARRAY_SIZE(ep->next_packet);
427 ep->next_packet_queued--;
428 return p;
429 }
430
push_back_to_ready_list(struct snd_usb_endpoint * ep,struct snd_urb_ctx * ctx)431 static void push_back_to_ready_list(struct snd_usb_endpoint *ep,
432 struct snd_urb_ctx *ctx)
433 {
434 unsigned long flags;
435
436 spin_lock_irqsave(&ep->lock, flags);
437 list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
438 spin_unlock_irqrestore(&ep->lock, flags);
439 }
440
441 /*
442 * Send output urbs that have been prepared previously. URBs are dequeued
443 * from ep->ready_playback_urbs and in case there aren't any available
444 * or there are no packets that have been prepared, this function does
445 * nothing.
446 *
447 * The reason why the functionality of sending and preparing URBs is separated
448 * is that host controllers don't guarantee the order in which they return
449 * inbound and outbound packets to their submitters.
450 *
451 * This function is used both for implicit feedback endpoints and in low-
452 * latency playback mode.
453 */
snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint * ep,bool in_stream_lock)454 void snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
455 bool in_stream_lock)
456 {
457 bool implicit_fb = snd_usb_endpoint_implicit_feedback_sink(ep);
458
459 while (ep_state_running(ep)) {
460
461 unsigned long flags;
462 struct snd_usb_packet_info *packet;
463 struct snd_urb_ctx *ctx = NULL;
464 int err, i;
465
466 spin_lock_irqsave(&ep->lock, flags);
467 if ((!implicit_fb || ep->next_packet_queued > 0) &&
468 !list_empty(&ep->ready_playback_urbs)) {
469 /* take URB out of FIFO */
470 ctx = list_first_entry(&ep->ready_playback_urbs,
471 struct snd_urb_ctx, ready_list);
472 list_del_init(&ctx->ready_list);
473 if (implicit_fb)
474 packet = next_packet_fifo_dequeue(ep);
475 }
476 spin_unlock_irqrestore(&ep->lock, flags);
477
478 if (ctx == NULL)
479 return;
480
481 /* copy over the length information */
482 if (implicit_fb) {
483 for (i = 0; i < packet->packets; i++)
484 ctx->packet_size[i] = packet->packet_size[i];
485 }
486
487 /* call the data handler to fill in playback data */
488 err = prepare_outbound_urb(ep, ctx, in_stream_lock);
489 /* can be stopped during prepare callback */
490 if (unlikely(!ep_state_running(ep)))
491 break;
492 if (err < 0) {
493 /* push back to ready list again for -EAGAIN */
494 if (err == -EAGAIN)
495 push_back_to_ready_list(ep, ctx);
496 else
497 notify_xrun(ep);
498 return;
499 }
500
501 err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
502 if (err < 0) {
503 usb_audio_err(ep->chip,
504 "Unable to submit urb #%d: %d at %s\n",
505 ctx->index, err, __func__);
506 notify_xrun(ep);
507 return;
508 }
509
510 set_bit(ctx->index, &ep->active_mask);
511 atomic_inc(&ep->submitted_urbs);
512 }
513 }
514
515 /*
516 * complete callback for urbs
517 */
snd_complete_urb(struct urb * urb)518 static void snd_complete_urb(struct urb *urb)
519 {
520 struct snd_urb_ctx *ctx = urb->context;
521 struct snd_usb_endpoint *ep = ctx->ep;
522 int err;
523
524 if (unlikely(urb->status == -ENOENT || /* unlinked */
525 urb->status == -ENODEV || /* device removed */
526 urb->status == -ECONNRESET || /* unlinked */
527 urb->status == -ESHUTDOWN)) /* device disabled */
528 goto exit_clear;
529 /* device disconnected */
530 if (unlikely(atomic_read(&ep->chip->shutdown)))
531 goto exit_clear;
532
533 if (unlikely(!ep_state_running(ep)))
534 goto exit_clear;
535
536 if (usb_pipeout(ep->pipe)) {
537 retire_outbound_urb(ep, ctx);
538 /* can be stopped during retire callback */
539 if (unlikely(!ep_state_running(ep)))
540 goto exit_clear;
541
542 /* in low-latency and implicit-feedback modes, push back the
543 * URB to ready list at first, then process as much as possible
544 */
545 if (ep->lowlatency_playback ||
546 snd_usb_endpoint_implicit_feedback_sink(ep)) {
547 push_back_to_ready_list(ep, ctx);
548 clear_bit(ctx->index, &ep->active_mask);
549 snd_usb_queue_pending_output_urbs(ep, false);
550 atomic_dec(&ep->submitted_urbs); /* decrement at last */
551 return;
552 }
553
554 /* in non-lowlatency mode, no error handling for prepare */
555 prepare_outbound_urb(ep, ctx, false);
556 /* can be stopped during prepare callback */
557 if (unlikely(!ep_state_running(ep)))
558 goto exit_clear;
559 } else {
560 retire_inbound_urb(ep, ctx);
561 /* can be stopped during retire callback */
562 if (unlikely(!ep_state_running(ep)))
563 goto exit_clear;
564
565 prepare_inbound_urb(ep, ctx);
566 }
567
568 err = usb_submit_urb(urb, GFP_ATOMIC);
569 if (err == 0)
570 return;
571
572 usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err);
573 notify_xrun(ep);
574
575 exit_clear:
576 clear_bit(ctx->index, &ep->active_mask);
577 atomic_dec(&ep->submitted_urbs);
578 }
579
580 /*
581 * Find or create a refcount object for the given interface
582 *
583 * The objects are released altogether in snd_usb_endpoint_free_all()
584 */
585 static struct snd_usb_iface_ref *
iface_ref_find(struct snd_usb_audio * chip,int iface)586 iface_ref_find(struct snd_usb_audio *chip, int iface)
587 {
588 struct snd_usb_iface_ref *ip;
589
590 list_for_each_entry(ip, &chip->iface_ref_list, list)
591 if (ip->iface == iface)
592 return ip;
593
594 ip = kzalloc(sizeof(*ip), GFP_KERNEL);
595 if (!ip)
596 return NULL;
597 ip->iface = iface;
598 list_add_tail(&ip->list, &chip->iface_ref_list);
599 return ip;
600 }
601
602 /* Similarly, a refcount object for clock */
603 static struct snd_usb_clock_ref *
clock_ref_find(struct snd_usb_audio * chip,int clock)604 clock_ref_find(struct snd_usb_audio *chip, int clock)
605 {
606 struct snd_usb_clock_ref *ref;
607
608 list_for_each_entry(ref, &chip->clock_ref_list, list)
609 if (ref->clock == clock)
610 return ref;
611
612 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
613 if (!ref)
614 return NULL;
615 ref->clock = clock;
616 atomic_set(&ref->locked, 0);
617 list_add_tail(&ref->list, &chip->clock_ref_list);
618 return ref;
619 }
620
621 /*
622 * Get the existing endpoint object corresponding EP
623 * Returns NULL if not present.
624 */
625 struct snd_usb_endpoint *
snd_usb_get_endpoint(struct snd_usb_audio * chip,int ep_num)626 snd_usb_get_endpoint(struct snd_usb_audio *chip, int ep_num)
627 {
628 struct snd_usb_endpoint *ep;
629
630 list_for_each_entry(ep, &chip->ep_list, list) {
631 if (ep->ep_num == ep_num)
632 return ep;
633 }
634
635 return NULL;
636 }
637
638 #define ep_type_name(type) \
639 (type == SND_USB_ENDPOINT_TYPE_DATA ? "data" : "sync")
640
641 /**
642 * snd_usb_add_endpoint: Add an endpoint to an USB audio chip
643 *
644 * @chip: The chip
645 * @ep_num: The number of the endpoint to use
646 * @type: SND_USB_ENDPOINT_TYPE_DATA or SND_USB_ENDPOINT_TYPE_SYNC
647 *
648 * If the requested endpoint has not been added to the given chip before,
649 * a new instance is created.
650 *
651 * Returns zero on success or a negative error code.
652 *
653 * New endpoints will be added to chip->ep_list and freed by
654 * calling snd_usb_endpoint_free_all().
655 *
656 * For SND_USB_ENDPOINT_TYPE_SYNC, the caller needs to guarantee that
657 * bNumEndpoints > 1 beforehand.
658 */
snd_usb_add_endpoint(struct snd_usb_audio * chip,int ep_num,int type)659 int snd_usb_add_endpoint(struct snd_usb_audio *chip, int ep_num, int type)
660 {
661 struct snd_usb_endpoint *ep;
662 bool is_playback;
663
664 ep = snd_usb_get_endpoint(chip, ep_num);
665 if (ep)
666 return 0;
667
668 usb_audio_dbg(chip, "Creating new %s endpoint #%x\n",
669 ep_type_name(type),
670 ep_num);
671 ep = kzalloc(sizeof(*ep), GFP_KERNEL);
672 if (!ep)
673 return -ENOMEM;
674
675 ep->chip = chip;
676 spin_lock_init(&ep->lock);
677 ep->type = type;
678 ep->ep_num = ep_num;
679 INIT_LIST_HEAD(&ep->ready_playback_urbs);
680 atomic_set(&ep->submitted_urbs, 0);
681
682 is_playback = ((ep_num & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
683 ep_num &= USB_ENDPOINT_NUMBER_MASK;
684 if (is_playback)
685 ep->pipe = usb_sndisocpipe(chip->dev, ep_num);
686 else
687 ep->pipe = usb_rcvisocpipe(chip->dev, ep_num);
688
689 list_add_tail(&ep->list, &chip->ep_list);
690 return 0;
691 }
692
693 /* Set up syncinterval and maxsyncsize for a sync EP */
endpoint_set_syncinterval(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep)694 static void endpoint_set_syncinterval(struct snd_usb_audio *chip,
695 struct snd_usb_endpoint *ep)
696 {
697 struct usb_host_interface *alts;
698 struct usb_endpoint_descriptor *desc;
699
700 alts = snd_usb_get_host_interface(chip, ep->iface, ep->altsetting);
701 if (!alts)
702 return;
703
704 desc = get_endpoint(alts, ep->ep_idx);
705 if (desc->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
706 desc->bRefresh >= 1 && desc->bRefresh <= 9)
707 ep->syncinterval = desc->bRefresh;
708 else if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL)
709 ep->syncinterval = 1;
710 else if (desc->bInterval >= 1 && desc->bInterval <= 16)
711 ep->syncinterval = desc->bInterval - 1;
712 else
713 ep->syncinterval = 3;
714
715 ep->syncmaxsize = le16_to_cpu(desc->wMaxPacketSize);
716 }
717
endpoint_compatible(struct snd_usb_endpoint * ep,const struct audioformat * fp,const struct snd_pcm_hw_params * params)718 static bool endpoint_compatible(struct snd_usb_endpoint *ep,
719 const struct audioformat *fp,
720 const struct snd_pcm_hw_params *params)
721 {
722 if (!ep->opened)
723 return false;
724 if (ep->cur_audiofmt != fp)
725 return false;
726 if (ep->cur_rate != params_rate(params) ||
727 ep->cur_format != params_format(params) ||
728 ep->cur_period_frames != params_period_size(params) ||
729 ep->cur_buffer_periods != params_periods(params))
730 return false;
731 return true;
732 }
733
734 /*
735 * Check whether the given fp and hw params are compatible with the current
736 * setup of the target EP for implicit feedback sync
737 */
snd_usb_endpoint_compatible(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep,const struct audioformat * fp,const struct snd_pcm_hw_params * params)738 bool snd_usb_endpoint_compatible(struct snd_usb_audio *chip,
739 struct snd_usb_endpoint *ep,
740 const struct audioformat *fp,
741 const struct snd_pcm_hw_params *params)
742 {
743 bool ret;
744
745 mutex_lock(&chip->mutex);
746 ret = endpoint_compatible(ep, fp, params);
747 mutex_unlock(&chip->mutex);
748 return ret;
749 }
750
751 /*
752 * snd_usb_endpoint_open: Open the endpoint
753 *
754 * Called from hw_params to assign the endpoint to the substream.
755 * It's reference-counted, and only the first opener is allowed to set up
756 * arbitrary parameters. The later opener must be compatible with the
757 * former opened parameters.
758 * The endpoint needs to be closed via snd_usb_endpoint_close() later.
759 *
760 * Note that this function doesn't configure the endpoint. The substream
761 * needs to set it up later via snd_usb_endpoint_set_params() and
762 * snd_usb_endpoint_prepare().
763 */
764 struct snd_usb_endpoint *
snd_usb_endpoint_open(struct snd_usb_audio * chip,const struct audioformat * fp,const struct snd_pcm_hw_params * params,bool is_sync_ep)765 snd_usb_endpoint_open(struct snd_usb_audio *chip,
766 const struct audioformat *fp,
767 const struct snd_pcm_hw_params *params,
768 bool is_sync_ep)
769 {
770 struct snd_usb_endpoint *ep;
771 int ep_num = is_sync_ep ? fp->sync_ep : fp->endpoint;
772
773 mutex_lock(&chip->mutex);
774 ep = snd_usb_get_endpoint(chip, ep_num);
775 if (!ep) {
776 usb_audio_err(chip, "Cannot find EP 0x%x to open\n", ep_num);
777 goto unlock;
778 }
779
780 if (!ep->opened) {
781 if (is_sync_ep) {
782 ep->iface = fp->sync_iface;
783 ep->altsetting = fp->sync_altsetting;
784 ep->ep_idx = fp->sync_ep_idx;
785 } else {
786 ep->iface = fp->iface;
787 ep->altsetting = fp->altsetting;
788 ep->ep_idx = fp->ep_idx;
789 }
790 usb_audio_dbg(chip, "Open EP 0x%x, iface=%d:%d, idx=%d\n",
791 ep_num, ep->iface, ep->altsetting, ep->ep_idx);
792
793 ep->iface_ref = iface_ref_find(chip, ep->iface);
794 if (!ep->iface_ref) {
795 ep = NULL;
796 goto unlock;
797 }
798
799 if (fp->protocol != UAC_VERSION_1) {
800 ep->clock_ref = clock_ref_find(chip, fp->clock);
801 if (!ep->clock_ref) {
802 ep = NULL;
803 goto unlock;
804 }
805 }
806
807 ep->cur_audiofmt = fp;
808 ep->cur_channels = fp->channels;
809 ep->cur_rate = params_rate(params);
810 ep->cur_format = params_format(params);
811 ep->cur_frame_bytes = snd_pcm_format_physical_width(ep->cur_format) *
812 ep->cur_channels / 8;
813 ep->cur_period_frames = params_period_size(params);
814 ep->cur_period_bytes = ep->cur_period_frames * ep->cur_frame_bytes;
815 ep->cur_buffer_periods = params_periods(params);
816
817 if (ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
818 endpoint_set_syncinterval(chip, ep);
819
820 ep->implicit_fb_sync = fp->implicit_fb;
821 ep->need_setup = true;
822
823 usb_audio_dbg(chip, " channels=%d, rate=%d, format=%s, period_bytes=%d, periods=%d, implicit_fb=%d\n",
824 ep->cur_channels, ep->cur_rate,
825 snd_pcm_format_name(ep->cur_format),
826 ep->cur_period_bytes, ep->cur_buffer_periods,
827 ep->implicit_fb_sync);
828
829 } else {
830 if (WARN_ON(!ep->iface_ref)) {
831 ep = NULL;
832 goto unlock;
833 }
834
835 if (!endpoint_compatible(ep, fp, params)) {
836 usb_audio_err(chip, "Incompatible EP setup for 0x%x\n",
837 ep_num);
838 ep = NULL;
839 goto unlock;
840 }
841
842 usb_audio_dbg(chip, "Reopened EP 0x%x (count %d)\n",
843 ep_num, ep->opened);
844 }
845
846 if (!ep->iface_ref->opened++)
847 ep->iface_ref->need_setup = true;
848
849 ep->opened++;
850
851 unlock:
852 mutex_unlock(&chip->mutex);
853 return ep;
854 }
855
856 /*
857 * snd_usb_endpoint_set_sync: Link data and sync endpoints
858 *
859 * Pass NULL to sync_ep to unlink again
860 */
snd_usb_endpoint_set_sync(struct snd_usb_audio * chip,struct snd_usb_endpoint * data_ep,struct snd_usb_endpoint * sync_ep)861 void snd_usb_endpoint_set_sync(struct snd_usb_audio *chip,
862 struct snd_usb_endpoint *data_ep,
863 struct snd_usb_endpoint *sync_ep)
864 {
865 data_ep->sync_source = sync_ep;
866 }
867
868 /*
869 * Set data endpoint callbacks and the assigned data stream
870 *
871 * Called at PCM trigger and cleanups.
872 * Pass NULL to deactivate each callback.
873 */
snd_usb_endpoint_set_callback(struct snd_usb_endpoint * ep,int (* prepare)(struct snd_usb_substream * subs,struct urb * urb,bool in_stream_lock),void (* retire)(struct snd_usb_substream * subs,struct urb * urb),struct snd_usb_substream * data_subs)874 void snd_usb_endpoint_set_callback(struct snd_usb_endpoint *ep,
875 int (*prepare)(struct snd_usb_substream *subs,
876 struct urb *urb,
877 bool in_stream_lock),
878 void (*retire)(struct snd_usb_substream *subs,
879 struct urb *urb),
880 struct snd_usb_substream *data_subs)
881 {
882 ep->prepare_data_urb = prepare;
883 ep->retire_data_urb = retire;
884 if (data_subs)
885 ep->lowlatency_playback = data_subs->lowlatency_playback;
886 else
887 ep->lowlatency_playback = false;
888 WRITE_ONCE(ep->data_subs, data_subs);
889 }
890
endpoint_set_interface(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep,bool set)891 static int endpoint_set_interface(struct snd_usb_audio *chip,
892 struct snd_usb_endpoint *ep,
893 bool set)
894 {
895 int altset = set ? ep->altsetting : 0;
896 int err;
897
898 usb_audio_dbg(chip, "Setting usb interface %d:%d for EP 0x%x\n",
899 ep->iface, altset, ep->ep_num);
900 err = usb_set_interface(chip->dev, ep->iface, altset);
901 if (err < 0) {
902 usb_audio_err(chip, "%d:%d: usb_set_interface failed (%d)\n",
903 ep->iface, altset, err);
904 return err;
905 }
906
907 if (chip->quirk_flags & QUIRK_FLAG_IFACE_DELAY)
908 msleep(50);
909 return 0;
910 }
911
912 /*
913 * snd_usb_endpoint_close: Close the endpoint
914 *
915 * Unreference the already opened endpoint via snd_usb_endpoint_open().
916 */
snd_usb_endpoint_close(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep)917 void snd_usb_endpoint_close(struct snd_usb_audio *chip,
918 struct snd_usb_endpoint *ep)
919 {
920 mutex_lock(&chip->mutex);
921 usb_audio_dbg(chip, "Closing EP 0x%x (count %d)\n",
922 ep->ep_num, ep->opened);
923
924 if (!--ep->iface_ref->opened)
925 endpoint_set_interface(chip, ep, false);
926
927 if (!--ep->opened) {
928 if (ep->clock_ref && !atomic_read(&ep->clock_ref->locked))
929 ep->clock_ref->rate = 0;
930 ep->iface = 0;
931 ep->altsetting = 0;
932 ep->cur_audiofmt = NULL;
933 ep->cur_rate = 0;
934 ep->iface_ref = NULL;
935 ep->clock_ref = NULL;
936 usb_audio_dbg(chip, "EP 0x%x closed\n", ep->ep_num);
937 }
938 mutex_unlock(&chip->mutex);
939 }
940
941 /* Prepare for suspening EP, called from the main suspend handler */
snd_usb_endpoint_suspend(struct snd_usb_endpoint * ep)942 void snd_usb_endpoint_suspend(struct snd_usb_endpoint *ep)
943 {
944 ep->need_setup = true;
945 if (ep->iface_ref)
946 ep->iface_ref->need_setup = true;
947 if (ep->clock_ref)
948 ep->clock_ref->rate = 0;
949 }
950
951 /*
952 * wait until all urbs are processed.
953 */
wait_clear_urbs(struct snd_usb_endpoint * ep)954 static int wait_clear_urbs(struct snd_usb_endpoint *ep)
955 {
956 unsigned long end_time = jiffies + msecs_to_jiffies(1000);
957 int alive;
958
959 if (atomic_read(&ep->state) != EP_STATE_STOPPING)
960 return 0;
961
962 do {
963 alive = atomic_read(&ep->submitted_urbs);
964 if (!alive)
965 break;
966
967 schedule_timeout_uninterruptible(1);
968 } while (time_before(jiffies, end_time));
969
970 if (alive)
971 usb_audio_err(ep->chip,
972 "timeout: still %d active urbs on EP #%x\n",
973 alive, ep->ep_num);
974
975 if (ep_state_update(ep, EP_STATE_STOPPING, EP_STATE_STOPPED)) {
976 ep->sync_sink = NULL;
977 snd_usb_endpoint_set_callback(ep, NULL, NULL, NULL);
978 }
979
980 return 0;
981 }
982
983 /* sync the pending stop operation;
984 * this function itself doesn't trigger the stop operation
985 */
snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint * ep)986 void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep)
987 {
988 if (ep)
989 wait_clear_urbs(ep);
990 }
991
992 /*
993 * Stop active urbs
994 *
995 * This function moves the EP to STOPPING state if it's being RUNNING.
996 */
stop_urbs(struct snd_usb_endpoint * ep,bool force,bool keep_pending)997 static int stop_urbs(struct snd_usb_endpoint *ep, bool force, bool keep_pending)
998 {
999 unsigned int i;
1000 unsigned long flags;
1001
1002 if (!force && atomic_read(&ep->running))
1003 return -EBUSY;
1004
1005 if (!ep_state_update(ep, EP_STATE_RUNNING, EP_STATE_STOPPING))
1006 return 0;
1007
1008 spin_lock_irqsave(&ep->lock, flags);
1009 INIT_LIST_HEAD(&ep->ready_playback_urbs);
1010 ep->next_packet_head = 0;
1011 ep->next_packet_queued = 0;
1012 spin_unlock_irqrestore(&ep->lock, flags);
1013
1014 if (keep_pending)
1015 return 0;
1016
1017 for (i = 0; i < ep->nurbs; i++) {
1018 if (test_bit(i, &ep->active_mask)) {
1019 if (!test_and_set_bit(i, &ep->unlink_mask)) {
1020 struct urb *u = ep->urb[i].urb;
1021 usb_unlink_urb(u);
1022 }
1023 }
1024 }
1025
1026 return 0;
1027 }
1028
1029 /*
1030 * release an endpoint's urbs
1031 */
release_urbs(struct snd_usb_endpoint * ep,bool force)1032 static int release_urbs(struct snd_usb_endpoint *ep, bool force)
1033 {
1034 int i, err;
1035
1036 /* route incoming urbs to nirvana */
1037 snd_usb_endpoint_set_callback(ep, NULL, NULL, NULL);
1038
1039 /* stop and unlink urbs */
1040 err = stop_urbs(ep, force, false);
1041 if (err)
1042 return err;
1043
1044 wait_clear_urbs(ep);
1045
1046 for (i = 0; i < ep->nurbs; i++)
1047 release_urb_ctx(&ep->urb[i]);
1048
1049 usb_free_coherent(ep->chip->dev, SYNC_URBS * 4,
1050 ep->syncbuf, ep->sync_dma);
1051
1052 ep->syncbuf = NULL;
1053 ep->nurbs = 0;
1054 return 0;
1055 }
1056
1057 /*
1058 * configure a data endpoint
1059 */
data_ep_set_params(struct snd_usb_endpoint * ep)1060 static int data_ep_set_params(struct snd_usb_endpoint *ep)
1061 {
1062 struct snd_usb_audio *chip = ep->chip;
1063 unsigned int maxsize, minsize, packs_per_ms, max_packs_per_urb;
1064 unsigned int max_packs_per_period, urbs_per_period, urb_packs;
1065 unsigned int max_urbs, i;
1066 const struct audioformat *fmt = ep->cur_audiofmt;
1067 int frame_bits = ep->cur_frame_bytes * 8;
1068 int tx_length_quirk = (has_tx_length_quirk(chip) &&
1069 usb_pipeout(ep->pipe));
1070
1071 usb_audio_dbg(chip, "Setting params for data EP 0x%x, pipe 0x%x\n",
1072 ep->ep_num, ep->pipe);
1073
1074 if (ep->cur_format == SNDRV_PCM_FORMAT_DSD_U16_LE && fmt->dsd_dop) {
1075 /*
1076 * When operating in DSD DOP mode, the size of a sample frame
1077 * in hardware differs from the actual physical format width
1078 * because we need to make room for the DOP markers.
1079 */
1080 frame_bits += ep->cur_channels << 3;
1081 }
1082
1083 ep->datainterval = fmt->datainterval;
1084 ep->stride = frame_bits >> 3;
1085
1086 switch (ep->cur_format) {
1087 case SNDRV_PCM_FORMAT_U8:
1088 ep->silence_value = 0x80;
1089 break;
1090 case SNDRV_PCM_FORMAT_DSD_U8:
1091 case SNDRV_PCM_FORMAT_DSD_U16_LE:
1092 case SNDRV_PCM_FORMAT_DSD_U32_LE:
1093 case SNDRV_PCM_FORMAT_DSD_U16_BE:
1094 case SNDRV_PCM_FORMAT_DSD_U32_BE:
1095 ep->silence_value = 0x69;
1096 break;
1097 default:
1098 ep->silence_value = 0;
1099 }
1100
1101 /* assume max. frequency is 50% higher than nominal */
1102 ep->freqmax = ep->freqn + (ep->freqn >> 1);
1103 /* Round up freqmax to nearest integer in order to calculate maximum
1104 * packet size, which must represent a whole number of frames.
1105 * This is accomplished by adding 0x0.ffff before converting the
1106 * Q16.16 format into integer.
1107 * In order to accurately calculate the maximum packet size when
1108 * the data interval is more than 1 (i.e. ep->datainterval > 0),
1109 * multiply by the data interval prior to rounding. For instance,
1110 * a freqmax of 41 kHz will result in a max packet size of 6 (5.125)
1111 * frames with a data interval of 1, but 11 (10.25) frames with a
1112 * data interval of 2.
1113 * (ep->freqmax << ep->datainterval overflows at 8.192 MHz for the
1114 * maximum datainterval value of 3, at USB full speed, higher for
1115 * USB high speed, noting that ep->freqmax is in units of
1116 * frames per packet in Q16.16 format.)
1117 */
1118 maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) *
1119 (frame_bits >> 3);
1120 if (tx_length_quirk)
1121 maxsize += sizeof(__le32); /* Space for length descriptor */
1122 /* but wMaxPacketSize might reduce this */
1123 if (ep->maxpacksize && ep->maxpacksize < maxsize) {
1124 /* whatever fits into a max. size packet */
1125 unsigned int data_maxsize = maxsize = ep->maxpacksize;
1126
1127 if (tx_length_quirk)
1128 /* Need to remove the length descriptor to calc freq */
1129 data_maxsize -= sizeof(__le32);
1130 ep->freqmax = (data_maxsize / (frame_bits >> 3))
1131 << (16 - ep->datainterval);
1132 }
1133
1134 if (ep->fill_max)
1135 ep->curpacksize = ep->maxpacksize;
1136 else
1137 ep->curpacksize = maxsize;
1138
1139 if (snd_usb_get_speed(chip->dev) != USB_SPEED_FULL) {
1140 packs_per_ms = 8 >> ep->datainterval;
1141 max_packs_per_urb = MAX_PACKS_HS;
1142 } else {
1143 packs_per_ms = 1;
1144 max_packs_per_urb = MAX_PACKS;
1145 }
1146 if (ep->sync_source && !ep->implicit_fb_sync)
1147 max_packs_per_urb = min(max_packs_per_urb,
1148 1U << ep->sync_source->syncinterval);
1149 max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval);
1150
1151 /*
1152 * Capture endpoints need to use small URBs because there's no way
1153 * to tell in advance where the next period will end, and we don't
1154 * want the next URB to complete much after the period ends.
1155 *
1156 * Playback endpoints with implicit sync much use the same parameters
1157 * as their corresponding capture endpoint.
1158 */
1159 if (usb_pipein(ep->pipe) || ep->implicit_fb_sync) {
1160
1161 urb_packs = packs_per_ms;
1162 /*
1163 * Wireless devices can poll at a max rate of once per 4ms.
1164 * For dataintervals less than 5, increase the packet count to
1165 * allow the host controller to use bursting to fill in the
1166 * gaps.
1167 */
1168 if (snd_usb_get_speed(chip->dev) == USB_SPEED_WIRELESS) {
1169 int interval = ep->datainterval;
1170 while (interval < 5) {
1171 urb_packs <<= 1;
1172 ++interval;
1173 }
1174 }
1175 /* make capture URBs <= 1 ms and smaller than a period */
1176 urb_packs = min(max_packs_per_urb, urb_packs);
1177 while (urb_packs > 1 && urb_packs * maxsize >= ep->cur_period_bytes)
1178 urb_packs >>= 1;
1179 ep->nurbs = MAX_URBS;
1180
1181 /*
1182 * Playback endpoints without implicit sync are adjusted so that
1183 * a period fits as evenly as possible in the smallest number of
1184 * URBs. The total number of URBs is adjusted to the size of the
1185 * ALSA buffer, subject to the MAX_URBS and MAX_QUEUE limits.
1186 */
1187 } else {
1188 /* determine how small a packet can be */
1189 minsize = (ep->freqn >> (16 - ep->datainterval)) *
1190 (frame_bits >> 3);
1191 /* with sync from device, assume it can be 12% lower */
1192 if (ep->sync_source)
1193 minsize -= minsize >> 3;
1194 minsize = max(minsize, 1u);
1195
1196 /* how many packets will contain an entire ALSA period? */
1197 max_packs_per_period = DIV_ROUND_UP(ep->cur_period_bytes, minsize);
1198
1199 /* how many URBs will contain a period? */
1200 urbs_per_period = DIV_ROUND_UP(max_packs_per_period,
1201 max_packs_per_urb);
1202 /* how many packets are needed in each URB? */
1203 urb_packs = DIV_ROUND_UP(max_packs_per_period, urbs_per_period);
1204
1205 /* limit the number of frames in a single URB */
1206 ep->max_urb_frames = DIV_ROUND_UP(ep->cur_period_frames,
1207 urbs_per_period);
1208
1209 /* try to use enough URBs to contain an entire ALSA buffer */
1210 max_urbs = min((unsigned) MAX_URBS,
1211 MAX_QUEUE * packs_per_ms / urb_packs);
1212 ep->nurbs = min(max_urbs, urbs_per_period * ep->cur_buffer_periods);
1213 }
1214
1215 /* allocate and initialize data urbs */
1216 for (i = 0; i < ep->nurbs; i++) {
1217 struct snd_urb_ctx *u = &ep->urb[i];
1218 u->index = i;
1219 u->ep = ep;
1220 u->packets = urb_packs;
1221 u->buffer_size = maxsize * u->packets;
1222
1223 if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
1224 u->packets++; /* for transfer delimiter */
1225 u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
1226 if (!u->urb)
1227 goto out_of_memory;
1228
1229 u->urb->transfer_buffer =
1230 usb_alloc_coherent(chip->dev, u->buffer_size,
1231 GFP_KERNEL, &u->urb->transfer_dma);
1232 if (!u->urb->transfer_buffer)
1233 goto out_of_memory;
1234 u->urb->pipe = ep->pipe;
1235 u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1236 u->urb->interval = 1 << ep->datainterval;
1237 u->urb->context = u;
1238 u->urb->complete = snd_complete_urb;
1239 INIT_LIST_HEAD(&u->ready_list);
1240 }
1241
1242 return 0;
1243
1244 out_of_memory:
1245 release_urbs(ep, false);
1246 return -ENOMEM;
1247 }
1248
1249 /*
1250 * configure a sync endpoint
1251 */
sync_ep_set_params(struct snd_usb_endpoint * ep)1252 static int sync_ep_set_params(struct snd_usb_endpoint *ep)
1253 {
1254 struct snd_usb_audio *chip = ep->chip;
1255 int i;
1256
1257 usb_audio_dbg(chip, "Setting params for sync EP 0x%x, pipe 0x%x\n",
1258 ep->ep_num, ep->pipe);
1259
1260 ep->syncbuf = usb_alloc_coherent(chip->dev, SYNC_URBS * 4,
1261 GFP_KERNEL, &ep->sync_dma);
1262 if (!ep->syncbuf)
1263 return -ENOMEM;
1264
1265 for (i = 0; i < SYNC_URBS; i++) {
1266 struct snd_urb_ctx *u = &ep->urb[i];
1267 u->index = i;
1268 u->ep = ep;
1269 u->packets = 1;
1270 u->urb = usb_alloc_urb(1, GFP_KERNEL);
1271 if (!u->urb)
1272 goto out_of_memory;
1273 u->urb->transfer_buffer = ep->syncbuf + i * 4;
1274 u->urb->transfer_dma = ep->sync_dma + i * 4;
1275 u->urb->transfer_buffer_length = 4;
1276 u->urb->pipe = ep->pipe;
1277 u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1278 u->urb->number_of_packets = 1;
1279 u->urb->interval = 1 << ep->syncinterval;
1280 u->urb->context = u;
1281 u->urb->complete = snd_complete_urb;
1282 }
1283
1284 ep->nurbs = SYNC_URBS;
1285
1286 return 0;
1287
1288 out_of_memory:
1289 release_urbs(ep, false);
1290 return -ENOMEM;
1291 }
1292
1293 /*
1294 * snd_usb_endpoint_set_params: configure an snd_usb_endpoint
1295 *
1296 * It's called either from hw_params callback.
1297 * Determine the number of URBs to be used on this endpoint.
1298 * An endpoint must be configured before it can be started.
1299 * An endpoint that is already running can not be reconfigured.
1300 */
snd_usb_endpoint_set_params(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep)1301 int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
1302 struct snd_usb_endpoint *ep)
1303 {
1304 const struct audioformat *fmt = ep->cur_audiofmt;
1305 int err;
1306
1307 /* release old buffers, if any */
1308 err = release_urbs(ep, false);
1309 if (err < 0)
1310 return err;
1311
1312 ep->datainterval = fmt->datainterval;
1313 ep->maxpacksize = fmt->maxpacksize;
1314 ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
1315
1316 if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL) {
1317 ep->freqn = get_usb_full_speed_rate(ep->cur_rate);
1318 ep->pps = 1000 >> ep->datainterval;
1319 } else {
1320 ep->freqn = get_usb_high_speed_rate(ep->cur_rate);
1321 ep->pps = 8000 >> ep->datainterval;
1322 }
1323
1324 ep->sample_rem = ep->cur_rate % ep->pps;
1325 ep->packsize[0] = ep->cur_rate / ep->pps;
1326 ep->packsize[1] = (ep->cur_rate + (ep->pps - 1)) / ep->pps;
1327
1328 /* calculate the frequency in 16.16 format */
1329 ep->freqm = ep->freqn;
1330 ep->freqshift = INT_MIN;
1331
1332 ep->phase = 0;
1333
1334 switch (ep->type) {
1335 case SND_USB_ENDPOINT_TYPE_DATA:
1336 err = data_ep_set_params(ep);
1337 break;
1338 case SND_USB_ENDPOINT_TYPE_SYNC:
1339 err = sync_ep_set_params(ep);
1340 break;
1341 default:
1342 err = -EINVAL;
1343 }
1344
1345 usb_audio_dbg(chip, "Set up %d URBS, ret=%d\n", ep->nurbs, err);
1346
1347 if (err < 0)
1348 return err;
1349
1350 /* some unit conversions in runtime */
1351 ep->maxframesize = ep->maxpacksize / ep->cur_frame_bytes;
1352 ep->curframesize = ep->curpacksize / ep->cur_frame_bytes;
1353
1354 return 0;
1355 }
1356
init_sample_rate(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep)1357 static int init_sample_rate(struct snd_usb_audio *chip,
1358 struct snd_usb_endpoint *ep)
1359 {
1360 struct snd_usb_clock_ref *clock = ep->clock_ref;
1361 int err;
1362
1363 if (clock) {
1364 if (atomic_read(&clock->locked))
1365 return 0;
1366 if (clock->rate == ep->cur_rate)
1367 return 0;
1368 if (clock->rate && clock->rate != ep->cur_rate) {
1369 usb_audio_dbg(chip, "Mismatched sample rate %d vs %d for EP 0x%x\n",
1370 clock->rate, ep->cur_rate, ep->ep_num);
1371 return -EINVAL;
1372 }
1373 }
1374
1375 err = snd_usb_init_sample_rate(chip, ep->cur_audiofmt, ep->cur_rate);
1376 if (err < 0)
1377 return err;
1378
1379 if (clock)
1380 clock->rate = ep->cur_rate;
1381 return 0;
1382 }
1383
1384 /*
1385 * snd_usb_endpoint_prepare: Prepare the endpoint
1386 *
1387 * This function sets up the EP to be fully usable state.
1388 * It's called either from prepare callback.
1389 * The function checks need_setup flag, and performs nothing unless needed,
1390 * so it's safe to call this multiple times.
1391 *
1392 * This returns zero if unchanged, 1 if the configuration has changed,
1393 * or a negative error code.
1394 */
snd_usb_endpoint_prepare(struct snd_usb_audio * chip,struct snd_usb_endpoint * ep)1395 int snd_usb_endpoint_prepare(struct snd_usb_audio *chip,
1396 struct snd_usb_endpoint *ep)
1397 {
1398 bool iface_first;
1399 int err = 0;
1400
1401 mutex_lock(&chip->mutex);
1402 if (WARN_ON(!ep->iface_ref))
1403 goto unlock;
1404 if (!ep->need_setup)
1405 goto unlock;
1406
1407 /* If the interface has been already set up, just set EP parameters */
1408 if (!ep->iface_ref->need_setup) {
1409 /* sample rate setup of UAC1 is per endpoint, and we need
1410 * to update at each EP configuration
1411 */
1412 if (ep->cur_audiofmt->protocol == UAC_VERSION_1) {
1413 err = init_sample_rate(chip, ep);
1414 if (err < 0)
1415 goto unlock;
1416 }
1417 goto done;
1418 }
1419
1420 /* Need to deselect altsetting at first */
1421 endpoint_set_interface(chip, ep, false);
1422
1423 /* Some UAC1 devices (e.g. Yamaha THR10) need the host interface
1424 * to be set up before parameter setups
1425 */
1426 iface_first = ep->cur_audiofmt->protocol == UAC_VERSION_1;
1427 /* Workaround for devices that require the interface setup at first like UAC1 */
1428 if (chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST)
1429 iface_first = true;
1430 if (iface_first) {
1431 err = endpoint_set_interface(chip, ep, true);
1432 if (err < 0)
1433 goto unlock;
1434 }
1435
1436 err = snd_usb_init_pitch(chip, ep->cur_audiofmt);
1437 if (err < 0)
1438 goto unlock;
1439
1440 err = init_sample_rate(chip, ep);
1441 if (err < 0)
1442 goto unlock;
1443
1444 err = snd_usb_select_mode_quirk(chip, ep->cur_audiofmt);
1445 if (err < 0)
1446 goto unlock;
1447
1448 /* for UAC2/3, enable the interface altset here at last */
1449 if (!iface_first) {
1450 err = endpoint_set_interface(chip, ep, true);
1451 if (err < 0)
1452 goto unlock;
1453 }
1454
1455 ep->iface_ref->need_setup = false;
1456
1457 done:
1458 ep->need_setup = false;
1459 err = 1;
1460
1461 unlock:
1462 mutex_unlock(&chip->mutex);
1463 return err;
1464 }
1465
1466 /* get the current rate set to the given clock by any endpoint */
snd_usb_endpoint_get_clock_rate(struct snd_usb_audio * chip,int clock)1467 int snd_usb_endpoint_get_clock_rate(struct snd_usb_audio *chip, int clock)
1468 {
1469 struct snd_usb_clock_ref *ref;
1470 int rate = 0;
1471
1472 if (!clock)
1473 return 0;
1474 mutex_lock(&chip->mutex);
1475 list_for_each_entry(ref, &chip->clock_ref_list, list) {
1476 if (ref->clock == clock) {
1477 rate = ref->rate;
1478 break;
1479 }
1480 }
1481 mutex_unlock(&chip->mutex);
1482 return rate;
1483 }
1484
1485 /**
1486 * snd_usb_endpoint_start: start an snd_usb_endpoint
1487 *
1488 * @ep: the endpoint to start
1489 *
1490 * A call to this function will increment the running count of the endpoint.
1491 * In case it is not already running, the URBs for this endpoint will be
1492 * submitted. Otherwise, this function does nothing.
1493 *
1494 * Must be balanced to calls of snd_usb_endpoint_stop().
1495 *
1496 * Returns an error if the URB submission failed, 0 in all other cases.
1497 */
snd_usb_endpoint_start(struct snd_usb_endpoint * ep)1498 int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
1499 {
1500 bool is_playback = usb_pipeout(ep->pipe);
1501 int err;
1502 unsigned int i;
1503
1504 if (atomic_read(&ep->chip->shutdown))
1505 return -EBADFD;
1506
1507 if (ep->sync_source)
1508 WRITE_ONCE(ep->sync_source->sync_sink, ep);
1509
1510 usb_audio_dbg(ep->chip, "Starting %s EP 0x%x (running %d)\n",
1511 ep_type_name(ep->type), ep->ep_num,
1512 atomic_read(&ep->running));
1513
1514 /* already running? */
1515 if (atomic_inc_return(&ep->running) != 1)
1516 return 0;
1517
1518 if (ep->clock_ref)
1519 atomic_inc(&ep->clock_ref->locked);
1520
1521 ep->active_mask = 0;
1522 ep->unlink_mask = 0;
1523 ep->phase = 0;
1524 ep->sample_accum = 0;
1525
1526 snd_usb_endpoint_start_quirk(ep);
1527
1528 /*
1529 * If this endpoint has a data endpoint as implicit feedback source,
1530 * don't start the urbs here. Instead, mark them all as available,
1531 * wait for the record urbs to return and queue the playback urbs
1532 * from that context.
1533 */
1534
1535 if (!ep_state_update(ep, EP_STATE_STOPPED, EP_STATE_RUNNING))
1536 goto __error;
1537
1538 if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
1539 !(ep->chip->quirk_flags & QUIRK_FLAG_PLAYBACK_FIRST)) {
1540 usb_audio_dbg(ep->chip, "No URB submission due to implicit fb sync\n");
1541 i = 0;
1542 goto fill_rest;
1543 }
1544
1545 for (i = 0; i < ep->nurbs; i++) {
1546 struct urb *urb = ep->urb[i].urb;
1547
1548 if (snd_BUG_ON(!urb))
1549 goto __error;
1550
1551 if (is_playback)
1552 err = prepare_outbound_urb(ep, urb->context, true);
1553 else
1554 err = prepare_inbound_urb(ep, urb->context);
1555 if (err < 0) {
1556 /* stop filling at applptr */
1557 if (err == -EAGAIN)
1558 break;
1559 usb_audio_dbg(ep->chip,
1560 "EP 0x%x: failed to prepare urb: %d\n",
1561 ep->ep_num, err);
1562 goto __error;
1563 }
1564
1565 err = usb_submit_urb(urb, GFP_ATOMIC);
1566 if (err < 0) {
1567 usb_audio_err(ep->chip,
1568 "cannot submit urb %d, error %d: %s\n",
1569 i, err, usb_error_string(err));
1570 goto __error;
1571 }
1572 set_bit(i, &ep->active_mask);
1573 atomic_inc(&ep->submitted_urbs);
1574 }
1575
1576 if (!i) {
1577 usb_audio_dbg(ep->chip, "XRUN at starting EP 0x%x\n",
1578 ep->ep_num);
1579 goto __error;
1580 }
1581
1582 usb_audio_dbg(ep->chip, "%d URBs submitted for EP 0x%x\n",
1583 i, ep->ep_num);
1584
1585 fill_rest:
1586 /* put the remaining URBs to ready list */
1587 if (is_playback) {
1588 for (; i < ep->nurbs; i++)
1589 push_back_to_ready_list(ep, ep->urb + i);
1590 }
1591
1592 return 0;
1593
1594 __error:
1595 snd_usb_endpoint_stop(ep, false);
1596 return -EPIPE;
1597 }
1598
1599 /**
1600 * snd_usb_endpoint_stop: stop an snd_usb_endpoint
1601 *
1602 * @ep: the endpoint to stop (may be NULL)
1603 * @keep_pending: keep in-flight URBs
1604 *
1605 * A call to this function will decrement the running count of the endpoint.
1606 * In case the last user has requested the endpoint stop, the URBs will
1607 * actually be deactivated.
1608 *
1609 * Must be balanced to calls of snd_usb_endpoint_start().
1610 *
1611 * The caller needs to synchronize the pending stop operation via
1612 * snd_usb_endpoint_sync_pending_stop().
1613 */
snd_usb_endpoint_stop(struct snd_usb_endpoint * ep,bool keep_pending)1614 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, bool keep_pending)
1615 {
1616 if (!ep)
1617 return;
1618
1619 usb_audio_dbg(ep->chip, "Stopping %s EP 0x%x (running %d)\n",
1620 ep_type_name(ep->type), ep->ep_num,
1621 atomic_read(&ep->running));
1622
1623 if (snd_BUG_ON(!atomic_read(&ep->running)))
1624 return;
1625
1626 if (!atomic_dec_return(&ep->running)) {
1627 if (ep->sync_source)
1628 WRITE_ONCE(ep->sync_source->sync_sink, NULL);
1629 stop_urbs(ep, false, keep_pending);
1630 if (ep->clock_ref)
1631 if (!atomic_dec_return(&ep->clock_ref->locked))
1632 ep->clock_ref->rate = 0;
1633 }
1634 }
1635
1636 /**
1637 * snd_usb_endpoint_release: Tear down an snd_usb_endpoint
1638 *
1639 * @ep: the endpoint to release
1640 *
1641 * This function does not care for the endpoint's running count but will tear
1642 * down all the streaming URBs immediately.
1643 */
snd_usb_endpoint_release(struct snd_usb_endpoint * ep)1644 void snd_usb_endpoint_release(struct snd_usb_endpoint *ep)
1645 {
1646 release_urbs(ep, true);
1647 }
1648
1649 /**
1650 * snd_usb_endpoint_free_all: Free the resources of an snd_usb_endpoint
1651 * @chip: The chip
1652 *
1653 * This free all endpoints and those resources
1654 */
snd_usb_endpoint_free_all(struct snd_usb_audio * chip)1655 void snd_usb_endpoint_free_all(struct snd_usb_audio *chip)
1656 {
1657 struct snd_usb_endpoint *ep, *en;
1658 struct snd_usb_iface_ref *ip, *in;
1659 struct snd_usb_clock_ref *cp, *cn;
1660
1661 list_for_each_entry_safe(ep, en, &chip->ep_list, list)
1662 kfree(ep);
1663
1664 list_for_each_entry_safe(ip, in, &chip->iface_ref_list, list)
1665 kfree(ip);
1666
1667 list_for_each_entry_safe(cp, cn, &chip->clock_ref_list, list)
1668 kfree(cp);
1669 }
1670
1671 /*
1672 * snd_usb_handle_sync_urb: parse an USB sync packet
1673 *
1674 * @ep: the endpoint to handle the packet
1675 * @sender: the sending endpoint
1676 * @urb: the received packet
1677 *
1678 * This function is called from the context of an endpoint that received
1679 * the packet and is used to let another endpoint object handle the payload.
1680 */
snd_usb_handle_sync_urb(struct snd_usb_endpoint * ep,struct snd_usb_endpoint * sender,const struct urb * urb)1681 static void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
1682 struct snd_usb_endpoint *sender,
1683 const struct urb *urb)
1684 {
1685 int shift;
1686 unsigned int f;
1687 unsigned long flags;
1688
1689 snd_BUG_ON(ep == sender);
1690
1691 /*
1692 * In case the endpoint is operating in implicit feedback mode, prepare
1693 * a new outbound URB that has the same layout as the received packet
1694 * and add it to the list of pending urbs. queue_pending_output_urbs()
1695 * will take care of them later.
1696 */
1697 if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
1698 atomic_read(&ep->running)) {
1699
1700 /* implicit feedback case */
1701 int i, bytes = 0;
1702 struct snd_urb_ctx *in_ctx;
1703 struct snd_usb_packet_info *out_packet;
1704
1705 in_ctx = urb->context;
1706
1707 /* Count overall packet size */
1708 for (i = 0; i < in_ctx->packets; i++)
1709 if (urb->iso_frame_desc[i].status == 0)
1710 bytes += urb->iso_frame_desc[i].actual_length;
1711
1712 /*
1713 * skip empty packets. At least M-Audio's Fast Track Ultra stops
1714 * streaming once it received a 0-byte OUT URB
1715 */
1716 if (bytes == 0)
1717 return;
1718
1719 spin_lock_irqsave(&ep->lock, flags);
1720 if (ep->next_packet_queued >= ARRAY_SIZE(ep->next_packet)) {
1721 spin_unlock_irqrestore(&ep->lock, flags);
1722 usb_audio_err(ep->chip,
1723 "next package FIFO overflow EP 0x%x\n",
1724 ep->ep_num);
1725 notify_xrun(ep);
1726 return;
1727 }
1728
1729 out_packet = next_packet_fifo_enqueue(ep);
1730
1731 /*
1732 * Iterate through the inbound packet and prepare the lengths
1733 * for the output packet. The OUT packet we are about to send
1734 * will have the same amount of payload bytes per stride as the
1735 * IN packet we just received. Since the actual size is scaled
1736 * by the stride, use the sender stride to calculate the length
1737 * in case the number of channels differ between the implicitly
1738 * fed-back endpoint and the synchronizing endpoint.
1739 */
1740
1741 out_packet->packets = in_ctx->packets;
1742 for (i = 0; i < in_ctx->packets; i++) {
1743 if (urb->iso_frame_desc[i].status == 0)
1744 out_packet->packet_size[i] =
1745 urb->iso_frame_desc[i].actual_length / sender->stride;
1746 else
1747 out_packet->packet_size[i] = 0;
1748 }
1749
1750 spin_unlock_irqrestore(&ep->lock, flags);
1751 snd_usb_queue_pending_output_urbs(ep, false);
1752
1753 return;
1754 }
1755
1756 /*
1757 * process after playback sync complete
1758 *
1759 * Full speed devices report feedback values in 10.14 format as samples
1760 * per frame, high speed devices in 16.16 format as samples per
1761 * microframe.
1762 *
1763 * Because the Audio Class 1 spec was written before USB 2.0, many high
1764 * speed devices use a wrong interpretation, some others use an
1765 * entirely different format.
1766 *
1767 * Therefore, we cannot predict what format any particular device uses
1768 * and must detect it automatically.
1769 */
1770
1771 if (urb->iso_frame_desc[0].status != 0 ||
1772 urb->iso_frame_desc[0].actual_length < 3)
1773 return;
1774
1775 f = le32_to_cpup(urb->transfer_buffer);
1776 if (urb->iso_frame_desc[0].actual_length == 3)
1777 f &= 0x00ffffff;
1778 else
1779 f &= 0x0fffffff;
1780
1781 if (f == 0)
1782 return;
1783
1784 if (unlikely(sender->tenor_fb_quirk)) {
1785 /*
1786 * Devices based on Tenor 8802 chipsets (TEAC UD-H01
1787 * and others) sometimes change the feedback value
1788 * by +/- 0x1.0000.
1789 */
1790 if (f < ep->freqn - 0x8000)
1791 f += 0xf000;
1792 else if (f > ep->freqn + 0x8000)
1793 f -= 0xf000;
1794 } else if (unlikely(ep->freqshift == INT_MIN)) {
1795 /*
1796 * The first time we see a feedback value, determine its format
1797 * by shifting it left or right until it matches the nominal
1798 * frequency value. This assumes that the feedback does not
1799 * differ from the nominal value more than +50% or -25%.
1800 */
1801 shift = 0;
1802 while (f < ep->freqn - ep->freqn / 4) {
1803 f <<= 1;
1804 shift++;
1805 }
1806 while (f > ep->freqn + ep->freqn / 2) {
1807 f >>= 1;
1808 shift--;
1809 }
1810 ep->freqshift = shift;
1811 } else if (ep->freqshift >= 0)
1812 f <<= ep->freqshift;
1813 else
1814 f >>= -ep->freqshift;
1815
1816 if (likely(f >= ep->freqn - ep->freqn / 8 && f <= ep->freqmax)) {
1817 /*
1818 * If the frequency looks valid, set it.
1819 * This value is referred to in prepare_playback_urb().
1820 */
1821 spin_lock_irqsave(&ep->lock, flags);
1822 ep->freqm = f;
1823 spin_unlock_irqrestore(&ep->lock, flags);
1824 } else {
1825 /*
1826 * Out of range; maybe the shift value is wrong.
1827 * Reset it so that we autodetect again the next time.
1828 */
1829 ep->freqshift = INT_MIN;
1830 }
1831 }
1832
1833