0001
0002
0003
0004
0005 #include <linux/gfp.h>
0006 #include <linux/init.h>
0007 #include <linux/ratelimit.h>
0008 #include <linux/usb.h>
0009 #include <linux/usb/audio.h>
0010 #include <linux/slab.h>
0011
0012 #include <sound/core.h>
0013 #include <sound/pcm.h>
0014 #include <sound/pcm_params.h>
0015
0016 #include "usbaudio.h"
0017 #include "helper.h"
0018 #include "card.h"
0019 #include "endpoint.h"
0020 #include "pcm.h"
0021 #include "clock.h"
0022 #include "quirks.h"
0023
0024 enum {
0025 EP_STATE_STOPPED,
0026 EP_STATE_RUNNING,
0027 EP_STATE_STOPPING,
0028 };
0029
0030
0031 struct snd_usb_iface_ref {
0032 unsigned char iface;
0033 bool need_setup;
0034 int opened;
0035 struct list_head list;
0036 };
0037
0038
0039 struct snd_usb_clock_ref {
0040 unsigned char clock;
0041 atomic_t locked;
0042 int rate;
0043 struct list_head list;
0044 };
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077 static inline unsigned get_usb_full_speed_rate(unsigned int rate)
0078 {
0079 return ((rate << 13) + 62) / 125;
0080 }
0081
0082
0083
0084
0085
0086 static inline unsigned get_usb_high_speed_rate(unsigned int rate)
0087 {
0088 return ((rate << 10) + 62) / 125;
0089 }
0090
0091
0092
0093
0094 static void release_urb_ctx(struct snd_urb_ctx *u)
0095 {
0096 if (u->buffer_size)
0097 usb_free_coherent(u->ep->chip->dev, u->buffer_size,
0098 u->urb->transfer_buffer,
0099 u->urb->transfer_dma);
0100 usb_free_urb(u->urb);
0101 u->urb = NULL;
0102 }
0103
0104 static const char *usb_error_string(int err)
0105 {
0106 switch (err) {
0107 case -ENODEV:
0108 return "no device";
0109 case -ENOENT:
0110 return "endpoint not enabled";
0111 case -EPIPE:
0112 return "endpoint stalled";
0113 case -ENOSPC:
0114 return "not enough bandwidth";
0115 case -ESHUTDOWN:
0116 return "device disabled";
0117 case -EHOSTUNREACH:
0118 return "device suspended";
0119 case -EINVAL:
0120 case -EAGAIN:
0121 case -EFBIG:
0122 case -EMSGSIZE:
0123 return "internal error";
0124 default:
0125 return "unknown error";
0126 }
0127 }
0128
0129 static inline bool ep_state_running(struct snd_usb_endpoint *ep)
0130 {
0131 return atomic_read(&ep->state) == EP_STATE_RUNNING;
0132 }
0133
0134 static inline bool ep_state_update(struct snd_usb_endpoint *ep, int old, int new)
0135 {
0136 return atomic_try_cmpxchg(&ep->state, &old, new);
0137 }
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147 int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep)
0148 {
0149 return ep->implicit_fb_sync && usb_pipeout(ep->pipe);
0150 }
0151
0152
0153
0154
0155
0156
0157
0158
0159 static int slave_next_packet_size(struct snd_usb_endpoint *ep,
0160 unsigned int avail)
0161 {
0162 unsigned long flags;
0163 unsigned int phase;
0164 int ret;
0165
0166 if (ep->fill_max)
0167 return ep->maxframesize;
0168
0169 spin_lock_irqsave(&ep->lock, flags);
0170 phase = (ep->phase & 0xffff) + (ep->freqm << ep->datainterval);
0171 ret = min(phase >> 16, ep->maxframesize);
0172 if (avail && ret >= avail)
0173 ret = -EAGAIN;
0174 else
0175 ep->phase = phase;
0176 spin_unlock_irqrestore(&ep->lock, flags);
0177
0178 return ret;
0179 }
0180
0181
0182
0183
0184
0185 static int next_packet_size(struct snd_usb_endpoint *ep, unsigned int avail)
0186 {
0187 unsigned int sample_accum;
0188 int ret;
0189
0190 if (ep->fill_max)
0191 return ep->maxframesize;
0192
0193 sample_accum = ep->sample_accum + ep->sample_rem;
0194 if (sample_accum >= ep->pps) {
0195 sample_accum -= ep->pps;
0196 ret = ep->packsize[1];
0197 } else {
0198 ret = ep->packsize[0];
0199 }
0200 if (avail && ret >= avail)
0201 ret = -EAGAIN;
0202 else
0203 ep->sample_accum = sample_accum;
0204
0205 return ret;
0206 }
0207
0208
0209
0210
0211
0212
0213
0214
0215 int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep,
0216 struct snd_urb_ctx *ctx, int idx,
0217 unsigned int avail)
0218 {
0219 unsigned int packet;
0220
0221 packet = ctx->packet_size[idx];
0222 if (packet) {
0223 if (avail && packet >= avail)
0224 return -EAGAIN;
0225 return packet;
0226 }
0227
0228 if (ep->sync_source)
0229 return slave_next_packet_size(ep, avail);
0230 else
0231 return next_packet_size(ep, avail);
0232 }
0233
0234 static void call_retire_callback(struct snd_usb_endpoint *ep,
0235 struct urb *urb)
0236 {
0237 struct snd_usb_substream *data_subs;
0238
0239 data_subs = READ_ONCE(ep->data_subs);
0240 if (data_subs && ep->retire_data_urb)
0241 ep->retire_data_urb(data_subs, urb);
0242 }
0243
0244 static void retire_outbound_urb(struct snd_usb_endpoint *ep,
0245 struct snd_urb_ctx *urb_ctx)
0246 {
0247 call_retire_callback(ep, urb_ctx->urb);
0248 }
0249
0250 static void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
0251 struct snd_usb_endpoint *sender,
0252 const struct urb *urb);
0253
0254 static void retire_inbound_urb(struct snd_usb_endpoint *ep,
0255 struct snd_urb_ctx *urb_ctx)
0256 {
0257 struct urb *urb = urb_ctx->urb;
0258 struct snd_usb_endpoint *sync_sink;
0259
0260 if (unlikely(ep->skip_packets > 0)) {
0261 ep->skip_packets--;
0262 return;
0263 }
0264
0265 sync_sink = READ_ONCE(ep->sync_sink);
0266 if (sync_sink)
0267 snd_usb_handle_sync_urb(sync_sink, ep, urb);
0268
0269 call_retire_callback(ep, urb);
0270 }
0271
0272 static inline bool has_tx_length_quirk(struct snd_usb_audio *chip)
0273 {
0274 return chip->quirk_flags & QUIRK_FLAG_TX_LENGTH;
0275 }
0276
0277 static void prepare_silent_urb(struct snd_usb_endpoint *ep,
0278 struct snd_urb_ctx *ctx)
0279 {
0280 struct urb *urb = ctx->urb;
0281 unsigned int offs = 0;
0282 unsigned int extra = 0;
0283 __le32 packet_length;
0284 int i;
0285
0286
0287 if (has_tx_length_quirk(ep->chip))
0288 extra = sizeof(packet_length);
0289
0290 for (i = 0; i < ctx->packets; ++i) {
0291 unsigned int offset;
0292 unsigned int length;
0293 int counts;
0294
0295 counts = snd_usb_endpoint_next_packet_size(ep, ctx, i, 0);
0296 length = counts * ep->stride;
0297 offset = offs * ep->stride + extra * i;
0298 urb->iso_frame_desc[i].offset = offset;
0299 urb->iso_frame_desc[i].length = length + extra;
0300 if (extra) {
0301 packet_length = cpu_to_le32(length);
0302 memcpy(urb->transfer_buffer + offset,
0303 &packet_length, sizeof(packet_length));
0304 }
0305 memset(urb->transfer_buffer + offset + extra,
0306 ep->silence_value, length);
0307 offs += counts;
0308 }
0309
0310 urb->number_of_packets = ctx->packets;
0311 urb->transfer_buffer_length = offs * ep->stride + ctx->packets * extra;
0312 ctx->queued = 0;
0313 }
0314
0315
0316
0317
0318 static int prepare_outbound_urb(struct snd_usb_endpoint *ep,
0319 struct snd_urb_ctx *ctx,
0320 bool in_stream_lock)
0321 {
0322 struct urb *urb = ctx->urb;
0323 unsigned char *cp = urb->transfer_buffer;
0324 struct snd_usb_substream *data_subs;
0325
0326 urb->dev = ep->chip->dev;
0327
0328 switch (ep->type) {
0329 case SND_USB_ENDPOINT_TYPE_DATA:
0330 data_subs = READ_ONCE(ep->data_subs);
0331 if (data_subs && ep->prepare_data_urb)
0332 return ep->prepare_data_urb(data_subs, urb, in_stream_lock);
0333
0334 prepare_silent_urb(ep, ctx);
0335 break;
0336
0337 case SND_USB_ENDPOINT_TYPE_SYNC:
0338 if (snd_usb_get_speed(ep->chip->dev) >= USB_SPEED_HIGH) {
0339
0340
0341
0342
0343 urb->iso_frame_desc[0].length = 4;
0344 urb->iso_frame_desc[0].offset = 0;
0345 cp[0] = ep->freqn;
0346 cp[1] = ep->freqn >> 8;
0347 cp[2] = ep->freqn >> 16;
0348 cp[3] = ep->freqn >> 24;
0349 } else {
0350
0351
0352
0353
0354 urb->iso_frame_desc[0].length = 3;
0355 urb->iso_frame_desc[0].offset = 0;
0356 cp[0] = ep->freqn >> 2;
0357 cp[1] = ep->freqn >> 10;
0358 cp[2] = ep->freqn >> 18;
0359 }
0360
0361 break;
0362 }
0363 return 0;
0364 }
0365
0366
0367
0368
0369 static int prepare_inbound_urb(struct snd_usb_endpoint *ep,
0370 struct snd_urb_ctx *urb_ctx)
0371 {
0372 int i, offs;
0373 struct urb *urb = urb_ctx->urb;
0374
0375 urb->dev = ep->chip->dev;
0376
0377 switch (ep->type) {
0378 case SND_USB_ENDPOINT_TYPE_DATA:
0379 offs = 0;
0380 for (i = 0; i < urb_ctx->packets; i++) {
0381 urb->iso_frame_desc[i].offset = offs;
0382 urb->iso_frame_desc[i].length = ep->curpacksize;
0383 offs += ep->curpacksize;
0384 }
0385
0386 urb->transfer_buffer_length = offs;
0387 urb->number_of_packets = urb_ctx->packets;
0388 break;
0389
0390 case SND_USB_ENDPOINT_TYPE_SYNC:
0391 urb->iso_frame_desc[0].length = min(4u, ep->syncmaxsize);
0392 urb->iso_frame_desc[0].offset = 0;
0393 break;
0394 }
0395 return 0;
0396 }
0397
0398
0399 static void notify_xrun(struct snd_usb_endpoint *ep)
0400 {
0401 struct snd_usb_substream *data_subs;
0402
0403 data_subs = READ_ONCE(ep->data_subs);
0404 if (data_subs && data_subs->pcm_substream)
0405 snd_pcm_stop_xrun(data_subs->pcm_substream);
0406 }
0407
0408 static struct snd_usb_packet_info *
0409 next_packet_fifo_enqueue(struct snd_usb_endpoint *ep)
0410 {
0411 struct snd_usb_packet_info *p;
0412
0413 p = ep->next_packet + (ep->next_packet_head + ep->next_packet_queued) %
0414 ARRAY_SIZE(ep->next_packet);
0415 ep->next_packet_queued++;
0416 return p;
0417 }
0418
0419 static struct snd_usb_packet_info *
0420 next_packet_fifo_dequeue(struct snd_usb_endpoint *ep)
0421 {
0422 struct snd_usb_packet_info *p;
0423
0424 p = ep->next_packet + ep->next_packet_head;
0425 ep->next_packet_head++;
0426 ep->next_packet_head %= ARRAY_SIZE(ep->next_packet);
0427 ep->next_packet_queued--;
0428 return p;
0429 }
0430
0431 static void push_back_to_ready_list(struct snd_usb_endpoint *ep,
0432 struct snd_urb_ctx *ctx)
0433 {
0434 unsigned long flags;
0435
0436 spin_lock_irqsave(&ep->lock, flags);
0437 list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs);
0438 spin_unlock_irqrestore(&ep->lock, flags);
0439 }
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454 void snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
0455 bool in_stream_lock)
0456 {
0457 bool implicit_fb = snd_usb_endpoint_implicit_feedback_sink(ep);
0458
0459 while (ep_state_running(ep)) {
0460
0461 unsigned long flags;
0462 struct snd_usb_packet_info *packet;
0463 struct snd_urb_ctx *ctx = NULL;
0464 int err, i;
0465
0466 spin_lock_irqsave(&ep->lock, flags);
0467 if ((!implicit_fb || ep->next_packet_queued > 0) &&
0468 !list_empty(&ep->ready_playback_urbs)) {
0469
0470 ctx = list_first_entry(&ep->ready_playback_urbs,
0471 struct snd_urb_ctx, ready_list);
0472 list_del_init(&ctx->ready_list);
0473 if (implicit_fb)
0474 packet = next_packet_fifo_dequeue(ep);
0475 }
0476 spin_unlock_irqrestore(&ep->lock, flags);
0477
0478 if (ctx == NULL)
0479 return;
0480
0481
0482 if (implicit_fb) {
0483 for (i = 0; i < packet->packets; i++)
0484 ctx->packet_size[i] = packet->packet_size[i];
0485 }
0486
0487
0488 err = prepare_outbound_urb(ep, ctx, in_stream_lock);
0489
0490 if (unlikely(!ep_state_running(ep)))
0491 break;
0492 if (err < 0) {
0493
0494 if (err == -EAGAIN)
0495 push_back_to_ready_list(ep, ctx);
0496 else
0497 notify_xrun(ep);
0498 return;
0499 }
0500
0501 err = usb_submit_urb(ctx->urb, GFP_ATOMIC);
0502 if (err < 0) {
0503 usb_audio_err(ep->chip,
0504 "Unable to submit urb #%d: %d at %s\n",
0505 ctx->index, err, __func__);
0506 notify_xrun(ep);
0507 return;
0508 }
0509
0510 set_bit(ctx->index, &ep->active_mask);
0511 atomic_inc(&ep->submitted_urbs);
0512 }
0513 }
0514
0515
0516
0517
0518 static void snd_complete_urb(struct urb *urb)
0519 {
0520 struct snd_urb_ctx *ctx = urb->context;
0521 struct snd_usb_endpoint *ep = ctx->ep;
0522 int err;
0523
0524 if (unlikely(urb->status == -ENOENT ||
0525 urb->status == -ENODEV ||
0526 urb->status == -ECONNRESET ||
0527 urb->status == -ESHUTDOWN))
0528 goto exit_clear;
0529
0530 if (unlikely(atomic_read(&ep->chip->shutdown)))
0531 goto exit_clear;
0532
0533 if (unlikely(!ep_state_running(ep)))
0534 goto exit_clear;
0535
0536 if (usb_pipeout(ep->pipe)) {
0537 retire_outbound_urb(ep, ctx);
0538
0539 if (unlikely(!ep_state_running(ep)))
0540 goto exit_clear;
0541
0542
0543
0544
0545 if (ep->lowlatency_playback ||
0546 snd_usb_endpoint_implicit_feedback_sink(ep)) {
0547 push_back_to_ready_list(ep, ctx);
0548 clear_bit(ctx->index, &ep->active_mask);
0549 snd_usb_queue_pending_output_urbs(ep, false);
0550 atomic_dec(&ep->submitted_urbs);
0551 return;
0552 }
0553
0554
0555 prepare_outbound_urb(ep, ctx, false);
0556
0557 if (unlikely(!ep_state_running(ep)))
0558 goto exit_clear;
0559 } else {
0560 retire_inbound_urb(ep, ctx);
0561
0562 if (unlikely(!ep_state_running(ep)))
0563 goto exit_clear;
0564
0565 prepare_inbound_urb(ep, ctx);
0566 }
0567
0568 err = usb_submit_urb(urb, GFP_ATOMIC);
0569 if (err == 0)
0570 return;
0571
0572 usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err);
0573 notify_xrun(ep);
0574
0575 exit_clear:
0576 clear_bit(ctx->index, &ep->active_mask);
0577 atomic_dec(&ep->submitted_urbs);
0578 }
0579
0580
0581
0582
0583
0584
0585 static struct snd_usb_iface_ref *
0586 iface_ref_find(struct snd_usb_audio *chip, int iface)
0587 {
0588 struct snd_usb_iface_ref *ip;
0589
0590 list_for_each_entry(ip, &chip->iface_ref_list, list)
0591 if (ip->iface == iface)
0592 return ip;
0593
0594 ip = kzalloc(sizeof(*ip), GFP_KERNEL);
0595 if (!ip)
0596 return NULL;
0597 ip->iface = iface;
0598 list_add_tail(&ip->list, &chip->iface_ref_list);
0599 return ip;
0600 }
0601
0602
0603 static struct snd_usb_clock_ref *
0604 clock_ref_find(struct snd_usb_audio *chip, int clock)
0605 {
0606 struct snd_usb_clock_ref *ref;
0607
0608 list_for_each_entry(ref, &chip->clock_ref_list, list)
0609 if (ref->clock == clock)
0610 return ref;
0611
0612 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
0613 if (!ref)
0614 return NULL;
0615 ref->clock = clock;
0616 atomic_set(&ref->locked, 0);
0617 list_add_tail(&ref->list, &chip->clock_ref_list);
0618 return ref;
0619 }
0620
0621
0622
0623
0624
0625 struct snd_usb_endpoint *
0626 snd_usb_get_endpoint(struct snd_usb_audio *chip, int ep_num)
0627 {
0628 struct snd_usb_endpoint *ep;
0629
0630 list_for_each_entry(ep, &chip->ep_list, list) {
0631 if (ep->ep_num == ep_num)
0632 return ep;
0633 }
0634
0635 return NULL;
0636 }
0637
0638 #define ep_type_name(type) \
0639 (type == SND_USB_ENDPOINT_TYPE_DATA ? "data" : "sync")
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659 int snd_usb_add_endpoint(struct snd_usb_audio *chip, int ep_num, int type)
0660 {
0661 struct snd_usb_endpoint *ep;
0662 bool is_playback;
0663
0664 ep = snd_usb_get_endpoint(chip, ep_num);
0665 if (ep)
0666 return 0;
0667
0668 usb_audio_dbg(chip, "Creating new %s endpoint #%x\n",
0669 ep_type_name(type),
0670 ep_num);
0671 ep = kzalloc(sizeof(*ep), GFP_KERNEL);
0672 if (!ep)
0673 return -ENOMEM;
0674
0675 ep->chip = chip;
0676 spin_lock_init(&ep->lock);
0677 ep->type = type;
0678 ep->ep_num = ep_num;
0679 INIT_LIST_HEAD(&ep->ready_playback_urbs);
0680 atomic_set(&ep->submitted_urbs, 0);
0681
0682 is_playback = ((ep_num & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
0683 ep_num &= USB_ENDPOINT_NUMBER_MASK;
0684 if (is_playback)
0685 ep->pipe = usb_sndisocpipe(chip->dev, ep_num);
0686 else
0687 ep->pipe = usb_rcvisocpipe(chip->dev, ep_num);
0688
0689 list_add_tail(&ep->list, &chip->ep_list);
0690 return 0;
0691 }
0692
0693
0694 static void endpoint_set_syncinterval(struct snd_usb_audio *chip,
0695 struct snd_usb_endpoint *ep)
0696 {
0697 struct usb_host_interface *alts;
0698 struct usb_endpoint_descriptor *desc;
0699
0700 alts = snd_usb_get_host_interface(chip, ep->iface, ep->altsetting);
0701 if (!alts)
0702 return;
0703
0704 desc = get_endpoint(alts, ep->ep_idx);
0705 if (desc->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
0706 desc->bRefresh >= 1 && desc->bRefresh <= 9)
0707 ep->syncinterval = desc->bRefresh;
0708 else if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL)
0709 ep->syncinterval = 1;
0710 else if (desc->bInterval >= 1 && desc->bInterval <= 16)
0711 ep->syncinterval = desc->bInterval - 1;
0712 else
0713 ep->syncinterval = 3;
0714
0715 ep->syncmaxsize = le16_to_cpu(desc->wMaxPacketSize);
0716 }
0717
0718 static bool endpoint_compatible(struct snd_usb_endpoint *ep,
0719 const struct audioformat *fp,
0720 const struct snd_pcm_hw_params *params)
0721 {
0722 if (!ep->opened)
0723 return false;
0724 if (ep->cur_audiofmt != fp)
0725 return false;
0726 if (ep->cur_rate != params_rate(params) ||
0727 ep->cur_format != params_format(params) ||
0728 ep->cur_period_frames != params_period_size(params) ||
0729 ep->cur_buffer_periods != params_periods(params))
0730 return false;
0731 return true;
0732 }
0733
0734
0735
0736
0737
0738 bool snd_usb_endpoint_compatible(struct snd_usb_audio *chip,
0739 struct snd_usb_endpoint *ep,
0740 const struct audioformat *fp,
0741 const struct snd_pcm_hw_params *params)
0742 {
0743 bool ret;
0744
0745 mutex_lock(&chip->mutex);
0746 ret = endpoint_compatible(ep, fp, params);
0747 mutex_unlock(&chip->mutex);
0748 return ret;
0749 }
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763 struct snd_usb_endpoint *
0764 snd_usb_endpoint_open(struct snd_usb_audio *chip,
0765 const struct audioformat *fp,
0766 const struct snd_pcm_hw_params *params,
0767 bool is_sync_ep)
0768 {
0769 struct snd_usb_endpoint *ep;
0770 int ep_num = is_sync_ep ? fp->sync_ep : fp->endpoint;
0771
0772 mutex_lock(&chip->mutex);
0773 ep = snd_usb_get_endpoint(chip, ep_num);
0774 if (!ep) {
0775 usb_audio_err(chip, "Cannot find EP 0x%x to open\n", ep_num);
0776 goto unlock;
0777 }
0778
0779 if (!ep->opened) {
0780 if (is_sync_ep) {
0781 ep->iface = fp->sync_iface;
0782 ep->altsetting = fp->sync_altsetting;
0783 ep->ep_idx = fp->sync_ep_idx;
0784 } else {
0785 ep->iface = fp->iface;
0786 ep->altsetting = fp->altsetting;
0787 ep->ep_idx = fp->ep_idx;
0788 }
0789 usb_audio_dbg(chip, "Open EP 0x%x, iface=%d:%d, idx=%d\n",
0790 ep_num, ep->iface, ep->altsetting, ep->ep_idx);
0791
0792 ep->iface_ref = iface_ref_find(chip, ep->iface);
0793 if (!ep->iface_ref) {
0794 ep = NULL;
0795 goto unlock;
0796 }
0797
0798 if (fp->protocol != UAC_VERSION_1) {
0799 ep->clock_ref = clock_ref_find(chip, fp->clock);
0800 if (!ep->clock_ref) {
0801 ep = NULL;
0802 goto unlock;
0803 }
0804 }
0805
0806 ep->cur_audiofmt = fp;
0807 ep->cur_channels = fp->channels;
0808 ep->cur_rate = params_rate(params);
0809 ep->cur_format = params_format(params);
0810 ep->cur_frame_bytes = snd_pcm_format_physical_width(ep->cur_format) *
0811 ep->cur_channels / 8;
0812 ep->cur_period_frames = params_period_size(params);
0813 ep->cur_period_bytes = ep->cur_period_frames * ep->cur_frame_bytes;
0814 ep->cur_buffer_periods = params_periods(params);
0815
0816 if (ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
0817 endpoint_set_syncinterval(chip, ep);
0818
0819 ep->implicit_fb_sync = fp->implicit_fb;
0820 ep->need_setup = true;
0821
0822 usb_audio_dbg(chip, " channels=%d, rate=%d, format=%s, period_bytes=%d, periods=%d, implicit_fb=%d\n",
0823 ep->cur_channels, ep->cur_rate,
0824 snd_pcm_format_name(ep->cur_format),
0825 ep->cur_period_bytes, ep->cur_buffer_periods,
0826 ep->implicit_fb_sync);
0827
0828 } else {
0829 if (WARN_ON(!ep->iface_ref)) {
0830 ep = NULL;
0831 goto unlock;
0832 }
0833
0834 if (!endpoint_compatible(ep, fp, params)) {
0835 usb_audio_err(chip, "Incompatible EP setup for 0x%x\n",
0836 ep_num);
0837 ep = NULL;
0838 goto unlock;
0839 }
0840
0841 usb_audio_dbg(chip, "Reopened EP 0x%x (count %d)\n",
0842 ep_num, ep->opened);
0843 }
0844
0845 if (!ep->iface_ref->opened++)
0846 ep->iface_ref->need_setup = true;
0847
0848 ep->opened++;
0849
0850 unlock:
0851 mutex_unlock(&chip->mutex);
0852 return ep;
0853 }
0854
0855
0856
0857
0858
0859
0860 void snd_usb_endpoint_set_sync(struct snd_usb_audio *chip,
0861 struct snd_usb_endpoint *data_ep,
0862 struct snd_usb_endpoint *sync_ep)
0863 {
0864 data_ep->sync_source = sync_ep;
0865 }
0866
0867
0868
0869
0870
0871
0872
0873 void snd_usb_endpoint_set_callback(struct snd_usb_endpoint *ep,
0874 int (*prepare)(struct snd_usb_substream *subs,
0875 struct urb *urb,
0876 bool in_stream_lock),
0877 void (*retire)(struct snd_usb_substream *subs,
0878 struct urb *urb),
0879 struct snd_usb_substream *data_subs)
0880 {
0881 ep->prepare_data_urb = prepare;
0882 ep->retire_data_urb = retire;
0883 if (data_subs)
0884 ep->lowlatency_playback = data_subs->lowlatency_playback;
0885 else
0886 ep->lowlatency_playback = false;
0887 WRITE_ONCE(ep->data_subs, data_subs);
0888 }
0889
0890 static int endpoint_set_interface(struct snd_usb_audio *chip,
0891 struct snd_usb_endpoint *ep,
0892 bool set)
0893 {
0894 int altset = set ? ep->altsetting : 0;
0895 int err;
0896
0897 usb_audio_dbg(chip, "Setting usb interface %d:%d for EP 0x%x\n",
0898 ep->iface, altset, ep->ep_num);
0899 err = usb_set_interface(chip->dev, ep->iface, altset);
0900 if (err < 0) {
0901 usb_audio_err(chip, "%d:%d: usb_set_interface failed (%d)\n",
0902 ep->iface, altset, err);
0903 return err;
0904 }
0905
0906 if (chip->quirk_flags & QUIRK_FLAG_IFACE_DELAY)
0907 msleep(50);
0908 return 0;
0909 }
0910
0911
0912
0913
0914
0915
0916 void snd_usb_endpoint_close(struct snd_usb_audio *chip,
0917 struct snd_usb_endpoint *ep)
0918 {
0919 mutex_lock(&chip->mutex);
0920 usb_audio_dbg(chip, "Closing EP 0x%x (count %d)\n",
0921 ep->ep_num, ep->opened);
0922
0923 if (!--ep->iface_ref->opened)
0924 endpoint_set_interface(chip, ep, false);
0925
0926 if (!--ep->opened) {
0927 if (ep->clock_ref && !atomic_read(&ep->clock_ref->locked))
0928 ep->clock_ref->rate = 0;
0929 ep->iface = 0;
0930 ep->altsetting = 0;
0931 ep->cur_audiofmt = NULL;
0932 ep->cur_rate = 0;
0933 ep->iface_ref = NULL;
0934 ep->clock_ref = NULL;
0935 usb_audio_dbg(chip, "EP 0x%x closed\n", ep->ep_num);
0936 }
0937 mutex_unlock(&chip->mutex);
0938 }
0939
0940
0941 void snd_usb_endpoint_suspend(struct snd_usb_endpoint *ep)
0942 {
0943 ep->need_setup = true;
0944 if (ep->iface_ref)
0945 ep->iface_ref->need_setup = true;
0946 if (ep->clock_ref)
0947 ep->clock_ref->rate = 0;
0948 }
0949
0950
0951
0952
0953 static int wait_clear_urbs(struct snd_usb_endpoint *ep)
0954 {
0955 unsigned long end_time = jiffies + msecs_to_jiffies(1000);
0956 int alive;
0957
0958 if (atomic_read(&ep->state) != EP_STATE_STOPPING)
0959 return 0;
0960
0961 do {
0962 alive = atomic_read(&ep->submitted_urbs);
0963 if (!alive)
0964 break;
0965
0966 schedule_timeout_uninterruptible(1);
0967 } while (time_before(jiffies, end_time));
0968
0969 if (alive)
0970 usb_audio_err(ep->chip,
0971 "timeout: still %d active urbs on EP #%x\n",
0972 alive, ep->ep_num);
0973
0974 if (ep_state_update(ep, EP_STATE_STOPPING, EP_STATE_STOPPED)) {
0975 ep->sync_sink = NULL;
0976 snd_usb_endpoint_set_callback(ep, NULL, NULL, NULL);
0977 }
0978
0979 return 0;
0980 }
0981
0982
0983
0984
0985 void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep)
0986 {
0987 if (ep)
0988 wait_clear_urbs(ep);
0989 }
0990
0991
0992
0993
0994
0995
0996 static int stop_urbs(struct snd_usb_endpoint *ep, bool force, bool keep_pending)
0997 {
0998 unsigned int i;
0999 unsigned long flags;
1000
1001 if (!force && atomic_read(&ep->running))
1002 return -EBUSY;
1003
1004 if (!ep_state_update(ep, EP_STATE_RUNNING, EP_STATE_STOPPING))
1005 return 0;
1006
1007 spin_lock_irqsave(&ep->lock, flags);
1008 INIT_LIST_HEAD(&ep->ready_playback_urbs);
1009 ep->next_packet_head = 0;
1010 ep->next_packet_queued = 0;
1011 spin_unlock_irqrestore(&ep->lock, flags);
1012
1013 if (keep_pending)
1014 return 0;
1015
1016 for (i = 0; i < ep->nurbs; i++) {
1017 if (test_bit(i, &ep->active_mask)) {
1018 if (!test_and_set_bit(i, &ep->unlink_mask)) {
1019 struct urb *u = ep->urb[i].urb;
1020 usb_unlink_urb(u);
1021 }
1022 }
1023 }
1024
1025 return 0;
1026 }
1027
1028
1029
1030
1031 static int release_urbs(struct snd_usb_endpoint *ep, bool force)
1032 {
1033 int i, err;
1034
1035
1036 snd_usb_endpoint_set_callback(ep, NULL, NULL, NULL);
1037
1038
1039 err = stop_urbs(ep, force, false);
1040 if (err)
1041 return err;
1042
1043 wait_clear_urbs(ep);
1044
1045 for (i = 0; i < ep->nurbs; i++)
1046 release_urb_ctx(&ep->urb[i]);
1047
1048 usb_free_coherent(ep->chip->dev, SYNC_URBS * 4,
1049 ep->syncbuf, ep->sync_dma);
1050
1051 ep->syncbuf = NULL;
1052 ep->nurbs = 0;
1053 return 0;
1054 }
1055
1056
1057
1058
1059 static int data_ep_set_params(struct snd_usb_endpoint *ep)
1060 {
1061 struct snd_usb_audio *chip = ep->chip;
1062 unsigned int maxsize, minsize, packs_per_ms, max_packs_per_urb;
1063 unsigned int max_packs_per_period, urbs_per_period, urb_packs;
1064 unsigned int max_urbs, i;
1065 const struct audioformat *fmt = ep->cur_audiofmt;
1066 int frame_bits = ep->cur_frame_bytes * 8;
1067 int tx_length_quirk = (has_tx_length_quirk(chip) &&
1068 usb_pipeout(ep->pipe));
1069
1070 usb_audio_dbg(chip, "Setting params for data EP 0x%x, pipe 0x%x\n",
1071 ep->ep_num, ep->pipe);
1072
1073 if (ep->cur_format == SNDRV_PCM_FORMAT_DSD_U16_LE && fmt->dsd_dop) {
1074
1075
1076
1077
1078
1079 frame_bits += ep->cur_channels << 3;
1080 }
1081
1082 ep->datainterval = fmt->datainterval;
1083 ep->stride = frame_bits >> 3;
1084
1085 switch (ep->cur_format) {
1086 case SNDRV_PCM_FORMAT_U8:
1087 ep->silence_value = 0x80;
1088 break;
1089 case SNDRV_PCM_FORMAT_DSD_U8:
1090 case SNDRV_PCM_FORMAT_DSD_U16_LE:
1091 case SNDRV_PCM_FORMAT_DSD_U32_LE:
1092 case SNDRV_PCM_FORMAT_DSD_U16_BE:
1093 case SNDRV_PCM_FORMAT_DSD_U32_BE:
1094 ep->silence_value = 0x69;
1095 break;
1096 default:
1097 ep->silence_value = 0;
1098 }
1099
1100
1101 ep->freqmax = ep->freqn + (ep->freqn >> 1);
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117 maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) *
1118 (frame_bits >> 3);
1119 if (tx_length_quirk)
1120 maxsize += sizeof(__le32);
1121
1122 if (ep->maxpacksize && ep->maxpacksize < maxsize) {
1123
1124 unsigned int data_maxsize = maxsize = ep->maxpacksize;
1125
1126 if (tx_length_quirk)
1127
1128 data_maxsize -= sizeof(__le32);
1129 ep->freqmax = (data_maxsize / (frame_bits >> 3))
1130 << (16 - ep->datainterval);
1131 }
1132
1133 if (ep->fill_max)
1134 ep->curpacksize = ep->maxpacksize;
1135 else
1136 ep->curpacksize = maxsize;
1137
1138 if (snd_usb_get_speed(chip->dev) != USB_SPEED_FULL) {
1139 packs_per_ms = 8 >> ep->datainterval;
1140 max_packs_per_urb = MAX_PACKS_HS;
1141 } else {
1142 packs_per_ms = 1;
1143 max_packs_per_urb = MAX_PACKS;
1144 }
1145 if (ep->sync_source && !ep->implicit_fb_sync)
1146 max_packs_per_urb = min(max_packs_per_urb,
1147 1U << ep->sync_source->syncinterval);
1148 max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval);
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158 if (usb_pipein(ep->pipe) || ep->implicit_fb_sync) {
1159
1160 urb_packs = packs_per_ms;
1161
1162
1163
1164
1165
1166
1167 if (snd_usb_get_speed(chip->dev) == USB_SPEED_WIRELESS) {
1168 int interval = ep->datainterval;
1169 while (interval < 5) {
1170 urb_packs <<= 1;
1171 ++interval;
1172 }
1173 }
1174
1175 urb_packs = min(max_packs_per_urb, urb_packs);
1176 while (urb_packs > 1 && urb_packs * maxsize >= ep->cur_period_bytes)
1177 urb_packs >>= 1;
1178 ep->nurbs = MAX_URBS;
1179
1180
1181
1182
1183
1184
1185
1186 } else {
1187
1188 minsize = (ep->freqn >> (16 - ep->datainterval)) *
1189 (frame_bits >> 3);
1190
1191 if (ep->sync_source)
1192 minsize -= minsize >> 3;
1193 minsize = max(minsize, 1u);
1194
1195
1196 max_packs_per_period = DIV_ROUND_UP(ep->cur_period_bytes, minsize);
1197
1198
1199 urbs_per_period = DIV_ROUND_UP(max_packs_per_period,
1200 max_packs_per_urb);
1201
1202 urb_packs = DIV_ROUND_UP(max_packs_per_period, urbs_per_period);
1203
1204
1205 ep->max_urb_frames = DIV_ROUND_UP(ep->cur_period_frames,
1206 urbs_per_period);
1207
1208
1209 max_urbs = min((unsigned) MAX_URBS,
1210 MAX_QUEUE * packs_per_ms / urb_packs);
1211 ep->nurbs = min(max_urbs, urbs_per_period * ep->cur_buffer_periods);
1212 }
1213
1214
1215 for (i = 0; i < ep->nurbs; i++) {
1216 struct snd_urb_ctx *u = &ep->urb[i];
1217 u->index = i;
1218 u->ep = ep;
1219 u->packets = urb_packs;
1220 u->buffer_size = maxsize * u->packets;
1221
1222 if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
1223 u->packets++;
1224 u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
1225 if (!u->urb)
1226 goto out_of_memory;
1227
1228 u->urb->transfer_buffer =
1229 usb_alloc_coherent(chip->dev, u->buffer_size,
1230 GFP_KERNEL, &u->urb->transfer_dma);
1231 if (!u->urb->transfer_buffer)
1232 goto out_of_memory;
1233 u->urb->pipe = ep->pipe;
1234 u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1235 u->urb->interval = 1 << ep->datainterval;
1236 u->urb->context = u;
1237 u->urb->complete = snd_complete_urb;
1238 INIT_LIST_HEAD(&u->ready_list);
1239 }
1240
1241 return 0;
1242
1243 out_of_memory:
1244 release_urbs(ep, false);
1245 return -ENOMEM;
1246 }
1247
1248
1249
1250
1251 static int sync_ep_set_params(struct snd_usb_endpoint *ep)
1252 {
1253 struct snd_usb_audio *chip = ep->chip;
1254 int i;
1255
1256 usb_audio_dbg(chip, "Setting params for sync EP 0x%x, pipe 0x%x\n",
1257 ep->ep_num, ep->pipe);
1258
1259 ep->syncbuf = usb_alloc_coherent(chip->dev, SYNC_URBS * 4,
1260 GFP_KERNEL, &ep->sync_dma);
1261 if (!ep->syncbuf)
1262 return -ENOMEM;
1263
1264 for (i = 0; i < SYNC_URBS; i++) {
1265 struct snd_urb_ctx *u = &ep->urb[i];
1266 u->index = i;
1267 u->ep = ep;
1268 u->packets = 1;
1269 u->urb = usb_alloc_urb(1, GFP_KERNEL);
1270 if (!u->urb)
1271 goto out_of_memory;
1272 u->urb->transfer_buffer = ep->syncbuf + i * 4;
1273 u->urb->transfer_dma = ep->sync_dma + i * 4;
1274 u->urb->transfer_buffer_length = 4;
1275 u->urb->pipe = ep->pipe;
1276 u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1277 u->urb->number_of_packets = 1;
1278 u->urb->interval = 1 << ep->syncinterval;
1279 u->urb->context = u;
1280 u->urb->complete = snd_complete_urb;
1281 }
1282
1283 ep->nurbs = SYNC_URBS;
1284
1285 return 0;
1286
1287 out_of_memory:
1288 release_urbs(ep, false);
1289 return -ENOMEM;
1290 }
1291
1292
1293
1294
1295
1296
1297
1298
1299 static int snd_usb_endpoint_set_params(struct snd_usb_audio *chip,
1300 struct snd_usb_endpoint *ep)
1301 {
1302 const struct audioformat *fmt = ep->cur_audiofmt;
1303 int err;
1304
1305
1306 err = release_urbs(ep, false);
1307 if (err < 0)
1308 return err;
1309
1310 ep->datainterval = fmt->datainterval;
1311 ep->maxpacksize = fmt->maxpacksize;
1312 ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX);
1313
1314 if (snd_usb_get_speed(chip->dev) == USB_SPEED_FULL) {
1315 ep->freqn = get_usb_full_speed_rate(ep->cur_rate);
1316 ep->pps = 1000 >> ep->datainterval;
1317 } else {
1318 ep->freqn = get_usb_high_speed_rate(ep->cur_rate);
1319 ep->pps = 8000 >> ep->datainterval;
1320 }
1321
1322 ep->sample_rem = ep->cur_rate % ep->pps;
1323 ep->packsize[0] = ep->cur_rate / ep->pps;
1324 ep->packsize[1] = (ep->cur_rate + (ep->pps - 1)) / ep->pps;
1325
1326
1327 ep->freqm = ep->freqn;
1328 ep->freqshift = INT_MIN;
1329
1330 ep->phase = 0;
1331
1332 switch (ep->type) {
1333 case SND_USB_ENDPOINT_TYPE_DATA:
1334 err = data_ep_set_params(ep);
1335 break;
1336 case SND_USB_ENDPOINT_TYPE_SYNC:
1337 err = sync_ep_set_params(ep);
1338 break;
1339 default:
1340 err = -EINVAL;
1341 }
1342
1343 usb_audio_dbg(chip, "Set up %d URBS, ret=%d\n", ep->nurbs, err);
1344
1345 if (err < 0)
1346 return err;
1347
1348
1349 ep->maxframesize = ep->maxpacksize / ep->cur_frame_bytes;
1350 ep->curframesize = ep->curpacksize / ep->cur_frame_bytes;
1351
1352 return 0;
1353 }
1354
1355 static int init_sample_rate(struct snd_usb_audio *chip,
1356 struct snd_usb_endpoint *ep)
1357 {
1358 struct snd_usb_clock_ref *clock = ep->clock_ref;
1359 int err;
1360
1361 if (clock) {
1362 if (atomic_read(&clock->locked))
1363 return 0;
1364 if (clock->rate == ep->cur_rate)
1365 return 0;
1366 if (clock->rate && clock->rate != ep->cur_rate) {
1367 usb_audio_dbg(chip, "Mismatched sample rate %d vs %d for EP 0x%x\n",
1368 clock->rate, ep->cur_rate, ep->ep_num);
1369 return -EINVAL;
1370 }
1371 }
1372
1373 err = snd_usb_init_sample_rate(chip, ep->cur_audiofmt, ep->cur_rate);
1374 if (err < 0)
1375 return err;
1376
1377 if (clock)
1378 clock->rate = ep->cur_rate;
1379 return 0;
1380 }
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 int snd_usb_endpoint_configure(struct snd_usb_audio *chip,
1394 struct snd_usb_endpoint *ep)
1395 {
1396 bool iface_first;
1397 int err = 0;
1398
1399 mutex_lock(&chip->mutex);
1400 if (WARN_ON(!ep->iface_ref))
1401 goto unlock;
1402 if (!ep->need_setup)
1403 goto unlock;
1404
1405
1406 if (!ep->iface_ref->need_setup) {
1407
1408
1409
1410 if (ep->cur_audiofmt->protocol == UAC_VERSION_1) {
1411 err = init_sample_rate(chip, ep);
1412 if (err < 0)
1413 goto unlock;
1414 }
1415 err = snd_usb_endpoint_set_params(chip, ep);
1416 if (err < 0)
1417 goto unlock;
1418 goto done;
1419 }
1420
1421
1422 endpoint_set_interface(chip, ep, false);
1423
1424
1425
1426
1427 iface_first = ep->cur_audiofmt->protocol == UAC_VERSION_1;
1428
1429 if (chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST)
1430 iface_first = true;
1431 if (iface_first) {
1432 err = endpoint_set_interface(chip, ep, true);
1433 if (err < 0)
1434 goto unlock;
1435 }
1436
1437 err = snd_usb_init_pitch(chip, ep->cur_audiofmt);
1438 if (err < 0)
1439 goto unlock;
1440
1441 err = init_sample_rate(chip, ep);
1442 if (err < 0)
1443 goto unlock;
1444
1445 err = snd_usb_endpoint_set_params(chip, ep);
1446 if (err < 0)
1447 goto unlock;
1448
1449 err = snd_usb_select_mode_quirk(chip, ep->cur_audiofmt);
1450 if (err < 0)
1451 goto unlock;
1452
1453
1454 if (!iface_first) {
1455 err = endpoint_set_interface(chip, ep, true);
1456 if (err < 0)
1457 goto unlock;
1458 }
1459
1460 ep->iface_ref->need_setup = false;
1461
1462 done:
1463 ep->need_setup = false;
1464 err = 1;
1465
1466 unlock:
1467 mutex_unlock(&chip->mutex);
1468 return err;
1469 }
1470
1471
1472 int snd_usb_endpoint_get_clock_rate(struct snd_usb_audio *chip, int clock)
1473 {
1474 struct snd_usb_clock_ref *ref;
1475 int rate = 0;
1476
1477 if (!clock)
1478 return 0;
1479 mutex_lock(&chip->mutex);
1480 list_for_each_entry(ref, &chip->clock_ref_list, list) {
1481 if (ref->clock == clock) {
1482 rate = ref->rate;
1483 break;
1484 }
1485 }
1486 mutex_unlock(&chip->mutex);
1487 return rate;
1488 }
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503 int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
1504 {
1505 bool is_playback = usb_pipeout(ep->pipe);
1506 int err;
1507 unsigned int i;
1508
1509 if (atomic_read(&ep->chip->shutdown))
1510 return -EBADFD;
1511
1512 if (ep->sync_source)
1513 WRITE_ONCE(ep->sync_source->sync_sink, ep);
1514
1515 usb_audio_dbg(ep->chip, "Starting %s EP 0x%x (running %d)\n",
1516 ep_type_name(ep->type), ep->ep_num,
1517 atomic_read(&ep->running));
1518
1519
1520 if (atomic_inc_return(&ep->running) != 1)
1521 return 0;
1522
1523 if (ep->clock_ref)
1524 atomic_inc(&ep->clock_ref->locked);
1525
1526 ep->active_mask = 0;
1527 ep->unlink_mask = 0;
1528 ep->phase = 0;
1529 ep->sample_accum = 0;
1530
1531 snd_usb_endpoint_start_quirk(ep);
1532
1533
1534
1535
1536
1537
1538
1539
1540 if (!ep_state_update(ep, EP_STATE_STOPPED, EP_STATE_RUNNING))
1541 goto __error;
1542
1543 if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
1544 !(ep->chip->quirk_flags & QUIRK_FLAG_PLAYBACK_FIRST)) {
1545 usb_audio_dbg(ep->chip, "No URB submission due to implicit fb sync\n");
1546 i = 0;
1547 goto fill_rest;
1548 }
1549
1550 for (i = 0; i < ep->nurbs; i++) {
1551 struct urb *urb = ep->urb[i].urb;
1552
1553 if (snd_BUG_ON(!urb))
1554 goto __error;
1555
1556 if (is_playback)
1557 err = prepare_outbound_urb(ep, urb->context, true);
1558 else
1559 err = prepare_inbound_urb(ep, urb->context);
1560 if (err < 0) {
1561
1562 if (err == -EAGAIN)
1563 break;
1564 usb_audio_dbg(ep->chip,
1565 "EP 0x%x: failed to prepare urb: %d\n",
1566 ep->ep_num, err);
1567 goto __error;
1568 }
1569
1570 err = usb_submit_urb(urb, GFP_ATOMIC);
1571 if (err < 0) {
1572 usb_audio_err(ep->chip,
1573 "cannot submit urb %d, error %d: %s\n",
1574 i, err, usb_error_string(err));
1575 goto __error;
1576 }
1577 set_bit(i, &ep->active_mask);
1578 atomic_inc(&ep->submitted_urbs);
1579 }
1580
1581 if (!i) {
1582 usb_audio_dbg(ep->chip, "XRUN at starting EP 0x%x\n",
1583 ep->ep_num);
1584 goto __error;
1585 }
1586
1587 usb_audio_dbg(ep->chip, "%d URBs submitted for EP 0x%x\n",
1588 i, ep->ep_num);
1589
1590 fill_rest:
1591
1592 if (is_playback) {
1593 for (; i < ep->nurbs; i++)
1594 push_back_to_ready_list(ep, ep->urb + i);
1595 }
1596
1597 return 0;
1598
1599 __error:
1600 snd_usb_endpoint_stop(ep, false);
1601 return -EPIPE;
1602 }
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep, bool keep_pending)
1620 {
1621 if (!ep)
1622 return;
1623
1624 usb_audio_dbg(ep->chip, "Stopping %s EP 0x%x (running %d)\n",
1625 ep_type_name(ep->type), ep->ep_num,
1626 atomic_read(&ep->running));
1627
1628 if (snd_BUG_ON(!atomic_read(&ep->running)))
1629 return;
1630
1631 if (!atomic_dec_return(&ep->running)) {
1632 if (ep->sync_source)
1633 WRITE_ONCE(ep->sync_source->sync_sink, NULL);
1634 stop_urbs(ep, false, keep_pending);
1635 if (ep->clock_ref)
1636 if (!atomic_dec_return(&ep->clock_ref->locked))
1637 ep->clock_ref->rate = 0;
1638 }
1639 }
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649 void snd_usb_endpoint_release(struct snd_usb_endpoint *ep)
1650 {
1651 release_urbs(ep, true);
1652 }
1653
1654
1655
1656
1657
1658
1659
1660 void snd_usb_endpoint_free_all(struct snd_usb_audio *chip)
1661 {
1662 struct snd_usb_endpoint *ep, *en;
1663 struct snd_usb_iface_ref *ip, *in;
1664 struct snd_usb_clock_ref *cp, *cn;
1665
1666 list_for_each_entry_safe(ep, en, &chip->ep_list, list)
1667 kfree(ep);
1668
1669 list_for_each_entry_safe(ip, in, &chip->iface_ref_list, list)
1670 kfree(ip);
1671
1672 list_for_each_entry_safe(cp, cn, &chip->clock_ref_list, list)
1673 kfree(cp);
1674 }
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686 static void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep,
1687 struct snd_usb_endpoint *sender,
1688 const struct urb *urb)
1689 {
1690 int shift;
1691 unsigned int f;
1692 unsigned long flags;
1693
1694 snd_BUG_ON(ep == sender);
1695
1696
1697
1698
1699
1700
1701
1702 if (snd_usb_endpoint_implicit_feedback_sink(ep) &&
1703 atomic_read(&ep->running)) {
1704
1705
1706 int i, bytes = 0;
1707 struct snd_urb_ctx *in_ctx;
1708 struct snd_usb_packet_info *out_packet;
1709
1710 in_ctx = urb->context;
1711
1712
1713 for (i = 0; i < in_ctx->packets; i++)
1714 if (urb->iso_frame_desc[i].status == 0)
1715 bytes += urb->iso_frame_desc[i].actual_length;
1716
1717
1718
1719
1720
1721 if (bytes == 0)
1722 return;
1723
1724 spin_lock_irqsave(&ep->lock, flags);
1725 if (ep->next_packet_queued >= ARRAY_SIZE(ep->next_packet)) {
1726 spin_unlock_irqrestore(&ep->lock, flags);
1727 usb_audio_err(ep->chip,
1728 "next package FIFO overflow EP 0x%x\n",
1729 ep->ep_num);
1730 notify_xrun(ep);
1731 return;
1732 }
1733
1734 out_packet = next_packet_fifo_enqueue(ep);
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746 out_packet->packets = in_ctx->packets;
1747 for (i = 0; i < in_ctx->packets; i++) {
1748 if (urb->iso_frame_desc[i].status == 0)
1749 out_packet->packet_size[i] =
1750 urb->iso_frame_desc[i].actual_length / sender->stride;
1751 else
1752 out_packet->packet_size[i] = 0;
1753 }
1754
1755 spin_unlock_irqrestore(&ep->lock, flags);
1756 snd_usb_queue_pending_output_urbs(ep, false);
1757
1758 return;
1759 }
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776 if (urb->iso_frame_desc[0].status != 0 ||
1777 urb->iso_frame_desc[0].actual_length < 3)
1778 return;
1779
1780 f = le32_to_cpup(urb->transfer_buffer);
1781 if (urb->iso_frame_desc[0].actual_length == 3)
1782 f &= 0x00ffffff;
1783 else
1784 f &= 0x0fffffff;
1785
1786 if (f == 0)
1787 return;
1788
1789 if (unlikely(sender->tenor_fb_quirk)) {
1790
1791
1792
1793
1794
1795 if (f < ep->freqn - 0x8000)
1796 f += 0xf000;
1797 else if (f > ep->freqn + 0x8000)
1798 f -= 0xf000;
1799 } else if (unlikely(ep->freqshift == INT_MIN)) {
1800
1801
1802
1803
1804
1805
1806 shift = 0;
1807 while (f < ep->freqn - ep->freqn / 4) {
1808 f <<= 1;
1809 shift++;
1810 }
1811 while (f > ep->freqn + ep->freqn / 2) {
1812 f >>= 1;
1813 shift--;
1814 }
1815 ep->freqshift = shift;
1816 } else if (ep->freqshift >= 0)
1817 f <<= ep->freqshift;
1818 else
1819 f >>= -ep->freqshift;
1820
1821 if (likely(f >= ep->freqn - ep->freqn / 8 && f <= ep->freqmax)) {
1822
1823
1824
1825
1826 spin_lock_irqsave(&ep->lock, flags);
1827 ep->freqm = f;
1828 spin_unlock_irqrestore(&ep->lock, flags);
1829 } else {
1830
1831
1832
1833
1834 ep->freqshift = INT_MIN;
1835 }
1836 }
1837