1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved. 4 */ 5 6 #include <linux/auxiliary_bus.h> 7 #include <linux/ctype.h> 8 #include <linux/dma-mapping.h> 9 #include <linux/dma-map-ops.h> 10 #include <linux/init.h> 11 #include <linux/iommu.h> 12 #include <linux/module.h> 13 #include <linux/moduleparam.h> 14 #include <linux/soc/qcom/qmi.h> 15 #include <linux/usb.h> 16 #include <linux/usb/audio.h> 17 #include <linux/usb/audio-v2.h> 18 #include <linux/usb/audio-v3.h> 19 #include <linux/usb/hcd.h> 20 #include <linux/usb/quirks.h> 21 #include <linux/usb/xhci-sideband.h> 22 23 #include <sound/control.h> 24 #include <sound/core.h> 25 #include <sound/info.h> 26 #include <sound/initval.h> 27 #include <sound/pcm.h> 28 #include <sound/pcm_params.h> 29 #include <sound/q6usboffload.h> 30 #include <sound/soc.h> 31 #include <sound/soc-usb.h> 32 33 #include "../usbaudio.h" 34 #include "../card.h" 35 #include "../endpoint.h" 36 #include "../format.h" 37 #include "../helper.h" 38 #include "../pcm.h" 39 #include "../power.h" 40 41 #include "mixer_usb_offload.h" 42 #include "usb_audio_qmi_v01.h" 43 44 /* Stream disable request timeout during USB device disconnect */ 45 #define DEV_RELEASE_WAIT_TIMEOUT 10000 /* in ms */ 46 47 /* Data interval calculation parameters */ 48 #define BUS_INTERVAL_FULL_SPEED 1000 /* in us */ 49 #define BUS_INTERVAL_HIGHSPEED_AND_ABOVE 125 /* in us */ 50 #define MAX_BINTERVAL_ISOC_EP 16 51 52 #define QMI_STREAM_REQ_CARD_NUM_MASK 0xffff0000 53 #define QMI_STREAM_REQ_DEV_NUM_MASK 0xff00 54 #define QMI_STREAM_REQ_DIRECTION 0xff 55 56 /* iommu resource parameters and management */ 57 #define PREPEND_SID_TO_IOVA(iova, sid) ((u64)(((u64)(iova)) | \ 58 (((u64)sid) << 32))) 59 #define IOVA_MASK(iova) (((u64)(iova)) & 0xFFFFFFFF) 60 #define IOVA_BASE 0x1000 61 #define IOVA_XFER_RING_BASE (IOVA_BASE + PAGE_SIZE * (SNDRV_CARDS + 1)) 62 #define IOVA_XFER_BUF_BASE (IOVA_XFER_RING_BASE + PAGE_SIZE * SNDRV_CARDS * 32) 63 #define IOVA_XFER_RING_MAX (IOVA_XFER_BUF_BASE - PAGE_SIZE) 64 #define IOVA_XFER_BUF_MAX (0xfffff000 - PAGE_SIZE) 65 66 #define MAX_XFER_BUFF_LEN (24 * PAGE_SIZE) 67 68 struct iova_info { 69 struct list_head list; 70 unsigned long start_iova; 71 size_t size; 72 bool in_use; 73 }; 74 75 struct intf_info { 76 /* IOMMU ring/buffer mapping information */ 77 unsigned long data_xfer_ring_va; 78 size_t data_xfer_ring_size; 79 unsigned long sync_xfer_ring_va; 80 size_t sync_xfer_ring_size; 81 unsigned long xfer_buf_va; 82 size_t xfer_buf_size; 83 phys_addr_t xfer_buf_pa; 84 u8 *xfer_buf; 85 86 /* USB endpoint information */ 87 unsigned int data_ep_pipe; 88 unsigned int sync_ep_pipe; 89 unsigned int data_ep_idx; 90 unsigned int sync_ep_idx; 91 92 u8 intf_num; 93 u8 pcm_card_num; 94 u8 pcm_dev_num; 95 u8 direction; 96 bool in_use; 97 }; 98 99 struct uaudio_qmi_dev { 100 struct device *dev; 101 struct q6usb_offload *data; 102 struct auxiliary_device *auxdev; 103 104 /* list to keep track of available iova */ 105 struct list_head xfer_ring_list; 106 size_t xfer_ring_iova_size; 107 unsigned long curr_xfer_ring_iova; 108 struct list_head xfer_buf_list; 109 size_t xfer_buf_iova_size; 110 unsigned long curr_xfer_buf_iova; 111 112 /* bit fields representing pcm card enabled */ 113 unsigned long card_slot; 114 /* indicate event ring mapped or not */ 115 bool er_mapped; 116 }; 117 118 struct uaudio_dev { 119 struct usb_device *udev; 120 /* audio control interface */ 121 struct usb_host_interface *ctrl_intf; 122 unsigned int usb_core_id; 123 atomic_t in_use; 124 struct kref kref; 125 wait_queue_head_t disconnect_wq; 126 127 /* interface specific */ 128 int num_intf; 129 struct intf_info *info; 130 struct snd_usb_audio *chip; 131 132 /* xhci sideband */ 133 struct xhci_sideband *sb; 134 135 /* SoC USB device */ 136 struct snd_soc_usb_device *sdev; 137 }; 138 139 static struct uaudio_dev uadev[SNDRV_CARDS]; 140 static struct uaudio_qmi_dev *uaudio_qdev; 141 static struct uaudio_qmi_svc *uaudio_svc; 142 static DEFINE_MUTEX(qdev_mutex); 143 144 struct uaudio_qmi_svc { 145 struct qmi_handle *uaudio_svc_hdl; 146 struct sockaddr_qrtr client_sq; 147 bool client_connected; 148 }; 149 150 enum mem_type { 151 MEM_EVENT_RING, 152 MEM_XFER_RING, 153 MEM_XFER_BUF, 154 }; 155 156 /* Supported audio formats */ 157 enum usb_qmi_audio_format { 158 USB_QMI_PCM_FORMAT_S8 = 0, 159 USB_QMI_PCM_FORMAT_U8, 160 USB_QMI_PCM_FORMAT_S16_LE, 161 USB_QMI_PCM_FORMAT_S16_BE, 162 USB_QMI_PCM_FORMAT_U16_LE, 163 USB_QMI_PCM_FORMAT_U16_BE, 164 USB_QMI_PCM_FORMAT_S24_LE, 165 USB_QMI_PCM_FORMAT_S24_BE, 166 USB_QMI_PCM_FORMAT_U24_LE, 167 USB_QMI_PCM_FORMAT_U24_BE, 168 USB_QMI_PCM_FORMAT_S24_3LE, 169 USB_QMI_PCM_FORMAT_S24_3BE, 170 USB_QMI_PCM_FORMAT_U24_3LE, 171 USB_QMI_PCM_FORMAT_U24_3BE, 172 USB_QMI_PCM_FORMAT_S32_LE, 173 USB_QMI_PCM_FORMAT_S32_BE, 174 USB_QMI_PCM_FORMAT_U32_LE, 175 USB_QMI_PCM_FORMAT_U32_BE, 176 }; 177 178 static int usb_qmi_get_pcm_num(struct snd_usb_audio *chip, int direction) 179 { 180 struct snd_usb_substream *subs = NULL; 181 struct snd_usb_stream *as; 182 int count = 0; 183 184 list_for_each_entry(as, &chip->pcm_list, list) { 185 subs = &as->substream[direction]; 186 if (subs->ep_num) 187 count++; 188 } 189 190 return count; 191 } 192 193 static enum usb_qmi_audio_device_speed_enum_v01 194 get_speed_info(enum usb_device_speed udev_speed) 195 { 196 switch (udev_speed) { 197 case USB_SPEED_LOW: 198 return USB_QMI_DEVICE_SPEED_LOW_V01; 199 case USB_SPEED_FULL: 200 return USB_QMI_DEVICE_SPEED_FULL_V01; 201 case USB_SPEED_HIGH: 202 return USB_QMI_DEVICE_SPEED_HIGH_V01; 203 case USB_SPEED_SUPER: 204 return USB_QMI_DEVICE_SPEED_SUPER_V01; 205 case USB_SPEED_SUPER_PLUS: 206 return USB_QMI_DEVICE_SPEED_SUPER_PLUS_V01; 207 default: 208 return USB_QMI_DEVICE_SPEED_INVALID_V01; 209 } 210 } 211 212 static struct snd_usb_substream *find_substream(unsigned int card_num, 213 unsigned int pcm_idx, 214 unsigned int direction) 215 { 216 struct snd_usb_substream *subs = NULL; 217 struct snd_usb_audio *chip; 218 struct snd_usb_stream *as; 219 220 chip = uadev[card_num].chip; 221 if (!chip || atomic_read(&chip->shutdown)) 222 goto done; 223 224 if (pcm_idx >= chip->pcm_devs) 225 goto done; 226 227 if (direction > SNDRV_PCM_STREAM_CAPTURE) 228 goto done; 229 230 list_for_each_entry(as, &chip->pcm_list, list) { 231 if (as->pcm_index == pcm_idx) { 232 subs = &as->substream[direction]; 233 goto done; 234 } 235 } 236 237 done: 238 return subs; 239 } 240 241 static int info_idx_from_ifnum(int card_num, int intf_num, bool enable) 242 { 243 int i; 244 245 /* 246 * default index 0 is used when info is allocated upon 247 * first enable audio stream req for a pcm device 248 */ 249 if (enable && !uadev[card_num].info) 250 return 0; 251 252 for (i = 0; i < uadev[card_num].num_intf; i++) { 253 if (enable && !uadev[card_num].info[i].in_use) 254 return i; 255 else if (!enable && 256 uadev[card_num].info[i].intf_num == intf_num) 257 return i; 258 } 259 260 return -EINVAL; 261 } 262 263 static int get_data_interval_from_si(struct snd_usb_substream *subs, 264 u32 service_interval) 265 { 266 unsigned int bus_intval_mult; 267 unsigned int bus_intval; 268 unsigned int binterval; 269 270 if (subs->dev->speed >= USB_SPEED_HIGH) 271 bus_intval = BUS_INTERVAL_HIGHSPEED_AND_ABOVE; 272 else 273 bus_intval = BUS_INTERVAL_FULL_SPEED; 274 275 if (service_interval % bus_intval) 276 return -EINVAL; 277 278 bus_intval_mult = service_interval / bus_intval; 279 binterval = ffs(bus_intval_mult); 280 if (!binterval || binterval > MAX_BINTERVAL_ISOC_EP) 281 return -EINVAL; 282 283 /* check if another bit is set then bail out */ 284 bus_intval_mult = bus_intval_mult >> binterval; 285 if (bus_intval_mult) 286 return -EINVAL; 287 288 return (binterval - 1); 289 } 290 291 /* maps audio format received over QMI to asound.h based pcm format */ 292 static snd_pcm_format_t map_pcm_format(enum usb_qmi_audio_format fmt_received) 293 { 294 switch (fmt_received) { 295 case USB_QMI_PCM_FORMAT_S8: 296 return SNDRV_PCM_FORMAT_S8; 297 case USB_QMI_PCM_FORMAT_U8: 298 return SNDRV_PCM_FORMAT_U8; 299 case USB_QMI_PCM_FORMAT_S16_LE: 300 return SNDRV_PCM_FORMAT_S16_LE; 301 case USB_QMI_PCM_FORMAT_S16_BE: 302 return SNDRV_PCM_FORMAT_S16_BE; 303 case USB_QMI_PCM_FORMAT_U16_LE: 304 return SNDRV_PCM_FORMAT_U16_LE; 305 case USB_QMI_PCM_FORMAT_U16_BE: 306 return SNDRV_PCM_FORMAT_U16_BE; 307 case USB_QMI_PCM_FORMAT_S24_LE: 308 return SNDRV_PCM_FORMAT_S24_LE; 309 case USB_QMI_PCM_FORMAT_S24_BE: 310 return SNDRV_PCM_FORMAT_S24_BE; 311 case USB_QMI_PCM_FORMAT_U24_LE: 312 return SNDRV_PCM_FORMAT_U24_LE; 313 case USB_QMI_PCM_FORMAT_U24_BE: 314 return SNDRV_PCM_FORMAT_U24_BE; 315 case USB_QMI_PCM_FORMAT_S24_3LE: 316 return SNDRV_PCM_FORMAT_S24_3LE; 317 case USB_QMI_PCM_FORMAT_S24_3BE: 318 return SNDRV_PCM_FORMAT_S24_3BE; 319 case USB_QMI_PCM_FORMAT_U24_3LE: 320 return SNDRV_PCM_FORMAT_U24_3LE; 321 case USB_QMI_PCM_FORMAT_U24_3BE: 322 return SNDRV_PCM_FORMAT_U24_3BE; 323 case USB_QMI_PCM_FORMAT_S32_LE: 324 return SNDRV_PCM_FORMAT_S32_LE; 325 case USB_QMI_PCM_FORMAT_S32_BE: 326 return SNDRV_PCM_FORMAT_S32_BE; 327 case USB_QMI_PCM_FORMAT_U32_LE: 328 return SNDRV_PCM_FORMAT_U32_LE; 329 case USB_QMI_PCM_FORMAT_U32_BE: 330 return SNDRV_PCM_FORMAT_U32_BE; 331 default: 332 /* 333 * We expect the caller to do input validation so we should 334 * never hit this. But we do have to return a proper 335 * snd_pcm_format_t value due to the __bitwise attribute; so 336 * just return the equivalent of 0 in case of bad input. 337 */ 338 return SNDRV_PCM_FORMAT_S8; 339 } 340 } 341 342 /* 343 * Sends QMI disconnect indication message, assumes chip->mutex and qdev_mutex 344 * lock held by caller. 345 */ 346 static int uaudio_send_disconnect_ind(struct snd_usb_audio *chip) 347 { 348 struct qmi_uaudio_stream_ind_msg_v01 disconnect_ind = {0}; 349 struct uaudio_qmi_svc *svc = uaudio_svc; 350 struct uaudio_dev *dev; 351 int ret = 0; 352 353 dev = &uadev[chip->card->number]; 354 355 if (atomic_read(&dev->in_use)) { 356 mutex_unlock(&chip->mutex); 357 mutex_unlock(&qdev_mutex); 358 dev_dbg(uaudio_qdev->data->dev, "sending qmi indication suspend\n"); 359 disconnect_ind.dev_event = USB_QMI_DEV_DISCONNECT_V01; 360 disconnect_ind.slot_id = dev->udev->slot_id; 361 disconnect_ind.controller_num = dev->usb_core_id; 362 disconnect_ind.controller_num_valid = 1; 363 ret = qmi_send_indication(svc->uaudio_svc_hdl, &svc->client_sq, 364 QMI_UAUDIO_STREAM_IND_V01, 365 QMI_UAUDIO_STREAM_IND_MSG_V01_MAX_MSG_LEN, 366 qmi_uaudio_stream_ind_msg_v01_ei, 367 &disconnect_ind); 368 if (ret < 0) 369 dev_err(uaudio_qdev->data->dev, 370 "qmi send failed with err: %d\n", ret); 371 372 ret = wait_event_interruptible_timeout(dev->disconnect_wq, 373 !atomic_read(&dev->in_use), 374 msecs_to_jiffies(DEV_RELEASE_WAIT_TIMEOUT)); 375 if (!ret) { 376 dev_err(uaudio_qdev->data->dev, 377 "timeout while waiting for dev_release\n"); 378 atomic_set(&dev->in_use, 0); 379 } else if (ret < 0) { 380 dev_err(uaudio_qdev->data->dev, 381 "failed with ret %d\n", ret); 382 atomic_set(&dev->in_use, 0); 383 } 384 mutex_lock(&qdev_mutex); 385 mutex_lock(&chip->mutex); 386 } 387 388 return ret; 389 } 390 391 /* Offloading IOMMU management */ 392 static unsigned long uaudio_get_iova(unsigned long *curr_iova, 393 size_t *curr_iova_size, 394 struct list_head *head, size_t size) 395 { 396 struct iova_info *info, *new_info = NULL; 397 struct list_head *curr_head; 398 size_t tmp_size = size; 399 unsigned long va = 0; 400 401 if (size % PAGE_SIZE) 402 goto done; 403 404 if (size > *curr_iova_size) 405 goto done; 406 407 if (*curr_iova_size == 0) 408 goto done; 409 410 list_for_each_entry(info, head, list) { 411 /* exact size iova_info */ 412 if (!info->in_use && info->size == size) { 413 info->in_use = true; 414 va = info->start_iova; 415 *curr_iova_size -= size; 416 goto done; 417 } else if (!info->in_use && tmp_size >= info->size) { 418 if (!new_info) 419 new_info = info; 420 tmp_size -= info->size; 421 if (tmp_size) 422 continue; 423 424 va = new_info->start_iova; 425 for (curr_head = &new_info->list; curr_head != 426 &info->list; curr_head = curr_head->next) { 427 new_info = list_entry(curr_head, struct 428 iova_info, list); 429 new_info->in_use = true; 430 } 431 info->in_use = true; 432 *curr_iova_size -= size; 433 goto done; 434 } else { 435 /* iova region in use */ 436 new_info = NULL; 437 tmp_size = size; 438 } 439 } 440 441 info = kzalloc(sizeof(*info), GFP_KERNEL); 442 if (!info) { 443 va = 0; 444 goto done; 445 } 446 447 va = *curr_iova; 448 info->start_iova = *curr_iova; 449 info->size = size; 450 info->in_use = true; 451 *curr_iova += size; 452 *curr_iova_size -= size; 453 list_add_tail(&info->list, head); 454 455 done: 456 return va; 457 } 458 459 static void uaudio_put_iova(unsigned long va, size_t size, struct list_head 460 *head, size_t *curr_iova_size) 461 { 462 struct iova_info *info; 463 size_t tmp_size = size; 464 bool found = false; 465 466 list_for_each_entry(info, head, list) { 467 if (info->start_iova == va) { 468 if (!info->in_use) 469 return; 470 471 found = true; 472 info->in_use = false; 473 if (info->size == size) 474 goto done; 475 } 476 477 if (found && tmp_size >= info->size) { 478 info->in_use = false; 479 tmp_size -= info->size; 480 if (!tmp_size) 481 goto done; 482 } 483 } 484 485 if (!found) 486 return; 487 488 done: 489 *curr_iova_size += size; 490 } 491 492 /** 493 * uaudio_iommu_unmap() - unmaps iommu memory for adsp 494 * @mtype: ring type 495 * @va: virtual address to unmap 496 * @iova_size: region size 497 * @mapped_iova_size: mapped region size 498 * 499 * Unmaps the memory region that was previously assigned to the adsp. 500 * 501 */ 502 static void uaudio_iommu_unmap(enum mem_type mtype, unsigned long va, 503 size_t iova_size, size_t mapped_iova_size) 504 { 505 size_t umap_size; 506 bool unmap = true; 507 508 if (!va || !iova_size) 509 return; 510 511 switch (mtype) { 512 case MEM_EVENT_RING: 513 if (uaudio_qdev->er_mapped) 514 uaudio_qdev->er_mapped = false; 515 else 516 unmap = false; 517 break; 518 519 case MEM_XFER_RING: 520 uaudio_put_iova(va, iova_size, &uaudio_qdev->xfer_ring_list, 521 &uaudio_qdev->xfer_ring_iova_size); 522 break; 523 case MEM_XFER_BUF: 524 uaudio_put_iova(va, iova_size, &uaudio_qdev->xfer_buf_list, 525 &uaudio_qdev->xfer_buf_iova_size); 526 break; 527 default: 528 unmap = false; 529 } 530 531 if (!unmap || !mapped_iova_size) 532 return; 533 534 umap_size = iommu_unmap(uaudio_qdev->data->domain, va, mapped_iova_size); 535 if (umap_size != mapped_iova_size) 536 dev_err(uaudio_qdev->data->dev, 537 "unmapped size %zu for iova 0x%08lx of mapped size %zu\n", 538 umap_size, va, mapped_iova_size); 539 } 540 541 /** 542 * uaudio_iommu_map() - maps iommu memory for adsp 543 * @mtype: ring type 544 * @dma_coherent: dma coherent 545 * @pa: physical address for ring/buffer 546 * @size: size of memory region 547 * @sgt: sg table for memory region 548 * 549 * Maps the XHCI related resources to a memory region that is assigned to be 550 * used by the adsp. This will be mapped to the domain, which is created by 551 * the ASoC USB backend driver. 552 * 553 */ 554 static unsigned long uaudio_iommu_map(enum mem_type mtype, bool dma_coherent, 555 phys_addr_t pa, size_t size, 556 struct sg_table *sgt) 557 { 558 struct scatterlist *sg; 559 unsigned long va = 0; 560 size_t total_len = 0; 561 unsigned long va_sg; 562 phys_addr_t pa_sg; 563 bool map = true; 564 size_t sg_len; 565 int prot; 566 int ret; 567 int i; 568 569 prot = IOMMU_READ | IOMMU_WRITE; 570 571 if (dma_coherent) 572 prot |= IOMMU_CACHE; 573 574 switch (mtype) { 575 case MEM_EVENT_RING: 576 va = IOVA_BASE; 577 /* er already mapped */ 578 if (uaudio_qdev->er_mapped) 579 map = false; 580 break; 581 case MEM_XFER_RING: 582 va = uaudio_get_iova(&uaudio_qdev->curr_xfer_ring_iova, 583 &uaudio_qdev->xfer_ring_iova_size, 584 &uaudio_qdev->xfer_ring_list, size); 585 break; 586 case MEM_XFER_BUF: 587 va = uaudio_get_iova(&uaudio_qdev->curr_xfer_buf_iova, 588 &uaudio_qdev->xfer_buf_iova_size, 589 &uaudio_qdev->xfer_buf_list, size); 590 break; 591 default: 592 dev_err(uaudio_qdev->data->dev, "unknown mem type %d\n", mtype); 593 } 594 595 if (!va || !map) 596 goto done; 597 598 if (!sgt) 599 goto skip_sgt_map; 600 601 va_sg = va; 602 for_each_sg(sgt->sgl, sg, sgt->nents, i) { 603 sg_len = PAGE_ALIGN(sg->offset + sg->length); 604 pa_sg = page_to_phys(sg_page(sg)); 605 ret = iommu_map(uaudio_qdev->data->domain, va_sg, pa_sg, sg_len, 606 prot, GFP_KERNEL); 607 if (ret) { 608 uaudio_iommu_unmap(MEM_XFER_BUF, va, size, total_len); 609 va = 0; 610 goto done; 611 } 612 613 va_sg += sg_len; 614 total_len += sg_len; 615 } 616 617 if (size != total_len) { 618 uaudio_iommu_unmap(MEM_XFER_BUF, va, size, total_len); 619 va = 0; 620 } 621 return va; 622 623 skip_sgt_map: 624 iommu_map(uaudio_qdev->data->domain, va, pa, size, prot, GFP_KERNEL); 625 626 done: 627 return va; 628 } 629 630 /* looks up alias, if any, for controller DT node and returns the index */ 631 static int usb_get_controller_id(struct usb_device *udev) 632 { 633 if (udev->bus->sysdev && udev->bus->sysdev->of_node) 634 return of_alias_get_id(udev->bus->sysdev->of_node, "usb"); 635 636 return -ENODEV; 637 } 638 639 /** 640 * uaudio_dev_intf_cleanup() - cleanup transfer resources 641 * @udev: usb device 642 * @info: usb offloading interface 643 * 644 * Cleans up the transfer ring related resources which are assigned per 645 * endpoint from XHCI. This is invoked when the USB endpoints are no 646 * longer in use by the adsp. 647 * 648 */ 649 static void uaudio_dev_intf_cleanup(struct usb_device *udev, struct intf_info *info) 650 { 651 uaudio_iommu_unmap(MEM_XFER_RING, info->data_xfer_ring_va, 652 info->data_xfer_ring_size, info->data_xfer_ring_size); 653 info->data_xfer_ring_va = 0; 654 info->data_xfer_ring_size = 0; 655 656 uaudio_iommu_unmap(MEM_XFER_RING, info->sync_xfer_ring_va, 657 info->sync_xfer_ring_size, info->sync_xfer_ring_size); 658 info->sync_xfer_ring_va = 0; 659 info->sync_xfer_ring_size = 0; 660 661 uaudio_iommu_unmap(MEM_XFER_BUF, info->xfer_buf_va, info->xfer_buf_size, 662 info->xfer_buf_size); 663 info->xfer_buf_va = 0; 664 665 usb_free_coherent(udev, info->xfer_buf_size, info->xfer_buf, 666 info->xfer_buf_pa); 667 info->xfer_buf_size = 0; 668 info->xfer_buf = NULL; 669 info->xfer_buf_pa = 0; 670 671 info->in_use = false; 672 } 673 674 /** 675 * uaudio_event_ring_cleanup_free() - cleanup secondary event ring 676 * @dev: usb offload device 677 * 678 * Cleans up the secondary event ring that was requested. This will 679 * occur when the adsp is no longer transferring data on the USB bus 680 * across all endpoints. 681 * 682 */ 683 static void uaudio_event_ring_cleanup_free(struct uaudio_dev *dev) 684 { 685 clear_bit(dev->chip->card->number, &uaudio_qdev->card_slot); 686 /* all audio devices are disconnected */ 687 if (!uaudio_qdev->card_slot) { 688 uaudio_iommu_unmap(MEM_EVENT_RING, IOVA_BASE, PAGE_SIZE, 689 PAGE_SIZE); 690 xhci_sideband_remove_interrupter(uadev[dev->chip->card->number].sb); 691 } 692 } 693 694 static void uaudio_dev_cleanup(struct uaudio_dev *dev) 695 { 696 int if_idx; 697 698 if (!dev->udev) 699 return; 700 701 /* free xfer buffer and unmap xfer ring and buf per interface */ 702 for (if_idx = 0; if_idx < dev->num_intf; if_idx++) { 703 if (!dev->info[if_idx].in_use) 704 continue; 705 uaudio_dev_intf_cleanup(dev->udev, &dev->info[if_idx]); 706 dev_dbg(uaudio_qdev->data->dev, 707 "release resources: intf# %d card# %d\n", 708 dev->info[if_idx].intf_num, dev->chip->card->number); 709 } 710 711 dev->num_intf = 0; 712 713 /* free interface info */ 714 kfree(dev->info); 715 dev->info = NULL; 716 uaudio_event_ring_cleanup_free(dev); 717 dev->udev = NULL; 718 } 719 720 /** 721 * disable_audio_stream() - disable usb snd endpoints 722 * @subs: usb substream 723 * 724 * Closes the USB SND endpoints associated with the current audio stream 725 * used. This will decrement the USB SND endpoint opened reference count. 726 * 727 */ 728 static void disable_audio_stream(struct snd_usb_substream *subs) 729 { 730 struct snd_usb_audio *chip = subs->stream->chip; 731 732 snd_usb_hw_free(subs); 733 snd_usb_autosuspend(chip); 734 } 735 736 /* QMI service disconnect handlers */ 737 static void qmi_stop_session(void) 738 { 739 struct snd_usb_substream *subs; 740 struct usb_host_endpoint *ep; 741 struct snd_usb_audio *chip; 742 struct intf_info *info; 743 int pcm_card_num; 744 int if_idx; 745 int idx; 746 747 mutex_lock(&qdev_mutex); 748 /* find all active intf for set alt 0 and cleanup usb audio dev */ 749 for (idx = 0; idx < SNDRV_CARDS; idx++) { 750 if (!atomic_read(&uadev[idx].in_use)) 751 continue; 752 753 chip = uadev[idx].chip; 754 for (if_idx = 0; if_idx < uadev[idx].num_intf; if_idx++) { 755 if (!uadev[idx].info || !uadev[idx].info[if_idx].in_use) 756 continue; 757 info = &uadev[idx].info[if_idx]; 758 pcm_card_num = info->pcm_card_num; 759 subs = find_substream(pcm_card_num, info->pcm_dev_num, 760 info->direction); 761 if (!subs || !chip || atomic_read(&chip->shutdown)) { 762 dev_err(&subs->dev->dev, 763 "no sub for c#%u dev#%u dir%u\n", 764 info->pcm_card_num, 765 info->pcm_dev_num, 766 info->direction); 767 continue; 768 } 769 /* Release XHCI endpoints */ 770 if (info->data_ep_pipe) 771 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev, 772 info->data_ep_pipe); 773 xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, ep); 774 775 if (info->sync_ep_pipe) 776 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev, 777 info->sync_ep_pipe); 778 xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, ep); 779 780 disable_audio_stream(subs); 781 } 782 atomic_set(&uadev[idx].in_use, 0); 783 mutex_lock(&chip->mutex); 784 uaudio_dev_cleanup(&uadev[idx]); 785 mutex_unlock(&chip->mutex); 786 } 787 mutex_unlock(&qdev_mutex); 788 } 789 790 /** 791 * uaudio_sideband_notifier() - xHCI sideband event handler 792 * @intf: USB interface handle 793 * @evt: xHCI sideband event type 794 * 795 * This callback is executed when the xHCI sideband encounters a sequence 796 * that requires the sideband clients to take action. An example, is when 797 * xHCI frees the transfer ring, so the client has to ensure that the 798 * offload path is halted. 799 * 800 */ 801 static int uaudio_sideband_notifier(struct usb_interface *intf, 802 struct xhci_sideband_event *evt) 803 { 804 struct snd_usb_audio *chip; 805 struct uaudio_dev *dev; 806 int if_idx; 807 808 if (!intf || !evt) 809 return 0; 810 811 chip = usb_get_intfdata(intf); 812 813 mutex_lock(&qdev_mutex); 814 mutex_lock(&chip->mutex); 815 816 dev = &uadev[chip->card->number]; 817 818 if (evt->type == XHCI_SIDEBAND_XFER_RING_FREE) { 819 unsigned int *ep = (unsigned int *) evt->evt_data; 820 821 for (if_idx = 0; if_idx < dev->num_intf; if_idx++) { 822 if (dev->info[if_idx].data_ep_idx == *ep || 823 dev->info[if_idx].sync_ep_idx == *ep) 824 uaudio_send_disconnect_ind(chip); 825 } 826 } 827 828 mutex_unlock(&qdev_mutex); 829 mutex_unlock(&chip->mutex); 830 831 return 0; 832 } 833 834 /** 835 * qmi_bye_cb() - qmi bye message callback 836 * @handle: QMI handle 837 * @node: id of the dying node 838 * 839 * This callback is invoked when the QMI bye control message is received 840 * from the QMI client. Handle the message accordingly by ensuring that 841 * the USB offload path is disabled and cleaned up. At this point, ADSP 842 * is not utilizing the USB bus. 843 * 844 */ 845 static void qmi_bye_cb(struct qmi_handle *handle, unsigned int node) 846 { 847 struct uaudio_qmi_svc *svc = uaudio_svc; 848 849 if (svc->uaudio_svc_hdl != handle) 850 return; 851 852 if (svc->client_connected && svc->client_sq.sq_node == node) { 853 qmi_stop_session(); 854 855 /* clear QMI client parameters to block further QMI messages */ 856 svc->client_sq.sq_node = 0; 857 svc->client_sq.sq_port = 0; 858 svc->client_sq.sq_family = 0; 859 svc->client_connected = false; 860 } 861 } 862 863 /** 864 * qmi_svc_disconnect_cb() - qmi client disconnected 865 * @handle: QMI handle 866 * @node: id of the dying node 867 * @port: port of the dying client 868 * 869 * Invoked when the remote QMI client is disconnected. Handle this event 870 * the same way as when the QMI bye message is received. This will ensure 871 * the USB offloading path is disabled and cleaned up. 872 * 873 */ 874 static void qmi_svc_disconnect_cb(struct qmi_handle *handle, 875 unsigned int node, unsigned int port) 876 { 877 struct uaudio_qmi_svc *svc; 878 879 if (!uaudio_svc) 880 return; 881 882 svc = uaudio_svc; 883 if (svc->uaudio_svc_hdl != handle) 884 return; 885 886 if (svc->client_connected && svc->client_sq.sq_node == node && 887 svc->client_sq.sq_port == port) { 888 qmi_stop_session(); 889 890 /* clear QMI client parameters to block further QMI messages */ 891 svc->client_sq.sq_node = 0; 892 svc->client_sq.sq_port = 0; 893 svc->client_sq.sq_family = 0; 894 svc->client_connected = false; 895 } 896 } 897 898 /* QMI client callback handlers from QMI interface */ 899 static struct qmi_ops uaudio_svc_ops_options = { 900 .bye = qmi_bye_cb, 901 .del_client = qmi_svc_disconnect_cb, 902 }; 903 904 /* kref release callback when all streams are disabled */ 905 static void uaudio_dev_release(struct kref *kref) 906 { 907 struct uaudio_dev *dev = container_of(kref, struct uaudio_dev, kref); 908 909 uaudio_event_ring_cleanup_free(dev); 910 atomic_set(&dev->in_use, 0); 911 wake_up(&dev->disconnect_wq); 912 } 913 914 /** 915 * enable_audio_stream() - enable usb snd endpoints 916 * @subs: usb substream 917 * @pcm_format: pcm format requested 918 * @channels: number of channels 919 * @cur_rate: sample rate 920 * @datainterval: interval 921 * 922 * Opens all USB SND endpoints used for the data interface. This will increment 923 * the USB SND endpoint's opened count. Requests to keep the interface resumed 924 * until the audio stream is stopped. Will issue the USB set interface control 925 * message to enable the data interface. 926 * 927 */ 928 static int enable_audio_stream(struct snd_usb_substream *subs, 929 snd_pcm_format_t pcm_format, 930 unsigned int channels, unsigned int cur_rate, 931 int datainterval) 932 { 933 struct snd_pcm_hw_params params; 934 struct snd_usb_audio *chip; 935 struct snd_interval *i; 936 struct snd_mask *m; 937 int ret; 938 939 chip = subs->stream->chip; 940 941 _snd_pcm_hw_params_any(¶ms); 942 943 m = hw_param_mask(¶ms, SNDRV_PCM_HW_PARAM_FORMAT); 944 snd_mask_leave(m, pcm_format); 945 946 i = hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_CHANNELS); 947 snd_interval_setinteger(i); 948 i->min = channels; 949 i->max = channels; 950 951 i = hw_param_interval(¶ms, SNDRV_PCM_HW_PARAM_RATE); 952 snd_interval_setinteger(i); 953 i->min = cur_rate; 954 i->max = cur_rate; 955 956 pm_runtime_barrier(&chip->intf[0]->dev); 957 snd_usb_autoresume(chip); 958 959 ret = snd_usb_hw_params(subs, ¶ms); 960 if (ret < 0) 961 goto put_suspend; 962 963 if (!atomic_read(&chip->shutdown)) { 964 ret = snd_usb_lock_shutdown(chip); 965 if (ret < 0) 966 goto detach_ep; 967 968 if (subs->sync_endpoint) { 969 ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint); 970 if (ret < 0) 971 goto unlock; 972 } 973 974 ret = snd_usb_endpoint_prepare(chip, subs->data_endpoint); 975 if (ret < 0) 976 goto unlock; 977 978 snd_usb_unlock_shutdown(chip); 979 980 dev_dbg(uaudio_qdev->data->dev, 981 "selected %s iface:%d altsetting:%d datainterval:%dus\n", 982 subs->direction ? "capture" : "playback", 983 subs->cur_audiofmt->iface, subs->cur_audiofmt->altsetting, 984 (1 << subs->cur_audiofmt->datainterval) * 985 (subs->dev->speed >= USB_SPEED_HIGH ? 986 BUS_INTERVAL_HIGHSPEED_AND_ABOVE : 987 BUS_INTERVAL_FULL_SPEED)); 988 } 989 990 return 0; 991 992 unlock: 993 snd_usb_unlock_shutdown(chip); 994 995 detach_ep: 996 snd_usb_hw_free(subs); 997 998 put_suspend: 999 snd_usb_autosuspend(chip); 1000 1001 return ret; 1002 } 1003 1004 /** 1005 * uaudio_transfer_buffer_setup() - fetch and populate xfer buffer params 1006 * @subs: usb substream 1007 * @xfer_buf: xfer buf to be allocated 1008 * @xfer_buf_len: size of allocation 1009 * @mem_info: QMI response info 1010 * 1011 * Allocates and maps the transfer buffers that will be utilized by the 1012 * audio DSP. Will populate the information in the QMI response that is 1013 * sent back to the stream enable request. 1014 * 1015 */ 1016 static int uaudio_transfer_buffer_setup(struct snd_usb_substream *subs, 1017 u8 *xfer_buf, u32 xfer_buf_len, 1018 struct mem_info_v01 *mem_info) 1019 { 1020 struct sg_table xfer_buf_sgt; 1021 phys_addr_t xfer_buf_pa; 1022 u32 len = xfer_buf_len; 1023 bool dma_coherent; 1024 unsigned long va; 1025 u32 remainder; 1026 u32 mult; 1027 int ret; 1028 1029 dma_coherent = dev_is_dma_coherent(subs->dev->bus->sysdev); 1030 1031 /* xfer buffer, multiple of 4K only */ 1032 if (!len) 1033 len = PAGE_SIZE; 1034 1035 mult = len / PAGE_SIZE; 1036 remainder = len % PAGE_SIZE; 1037 len = mult * PAGE_SIZE; 1038 len += remainder ? PAGE_SIZE : 0; 1039 1040 if (len > MAX_XFER_BUFF_LEN) { 1041 dev_err(uaudio_qdev->data->dev, 1042 "req buf len %d > max buf len %lu, setting %lu\n", 1043 len, MAX_XFER_BUFF_LEN, MAX_XFER_BUFF_LEN); 1044 len = MAX_XFER_BUFF_LEN; 1045 } 1046 1047 xfer_buf = usb_alloc_coherent(subs->dev, len, GFP_KERNEL, &xfer_buf_pa); 1048 if (!xfer_buf) 1049 return -ENOMEM; 1050 1051 dma_get_sgtable(subs->dev->bus->sysdev, &xfer_buf_sgt, xfer_buf, 1052 xfer_buf_pa, len); 1053 va = uaudio_iommu_map(MEM_XFER_BUF, dma_coherent, xfer_buf_pa, len, 1054 &xfer_buf_sgt); 1055 if (!va) { 1056 ret = -ENOMEM; 1057 goto unmap_sync; 1058 } 1059 1060 mem_info->pa = xfer_buf_pa; 1061 mem_info->size = len; 1062 mem_info->va = PREPEND_SID_TO_IOVA(va, uaudio_qdev->data->sid); 1063 sg_free_table(&xfer_buf_sgt); 1064 1065 return 0; 1066 1067 unmap_sync: 1068 usb_free_coherent(subs->dev, len, xfer_buf, xfer_buf_pa); 1069 1070 return ret; 1071 } 1072 1073 /** 1074 * uaudio_endpoint_setup() - fetch and populate endpoint params 1075 * @subs: usb substream 1076 * @endpoint: usb endpoint to add 1077 * @card_num: uadev index 1078 * @mem_info: QMI response info 1079 * @ep_desc: QMI ep desc response field 1080 * 1081 * Initialize the USB endpoint being used for a particular USB 1082 * stream. Will request XHCI sec intr to reserve the EP for 1083 * offloading as well as populating the QMI response with the 1084 * transfer ring parameters. 1085 * 1086 */ 1087 static phys_addr_t 1088 uaudio_endpoint_setup(struct snd_usb_substream *subs, 1089 struct snd_usb_endpoint *endpoint, int card_num, 1090 struct mem_info_v01 *mem_info, 1091 struct usb_endpoint_descriptor_v01 *ep_desc) 1092 { 1093 struct usb_host_endpoint *ep; 1094 phys_addr_t tr_pa = 0; 1095 struct sg_table *sgt; 1096 bool dma_coherent; 1097 unsigned long va; 1098 struct page *pg; 1099 int ret = -ENODEV; 1100 1101 dma_coherent = dev_is_dma_coherent(subs->dev->bus->sysdev); 1102 1103 ep = usb_pipe_endpoint(subs->dev, endpoint->pipe); 1104 if (!ep) { 1105 dev_err(uaudio_qdev->data->dev, "data ep # %d context is null\n", 1106 subs->data_endpoint->ep_num); 1107 goto exit; 1108 } 1109 1110 memcpy(ep_desc, &ep->desc, sizeof(ep->desc)); 1111 1112 ret = xhci_sideband_add_endpoint(uadev[card_num].sb, ep); 1113 if (ret < 0) { 1114 dev_err(&subs->dev->dev, 1115 "failed to add data ep to sec intr\n"); 1116 ret = -ENODEV; 1117 goto exit; 1118 } 1119 1120 sgt = xhci_sideband_get_endpoint_buffer(uadev[card_num].sb, ep); 1121 if (!sgt) { 1122 dev_err(&subs->dev->dev, 1123 "failed to get data ep ring address\n"); 1124 ret = -ENODEV; 1125 goto remove_ep; 1126 } 1127 1128 pg = sg_page(sgt->sgl); 1129 tr_pa = page_to_phys(pg); 1130 mem_info->pa = sg_dma_address(sgt->sgl); 1131 sg_free_table(sgt); 1132 1133 /* data transfer ring */ 1134 va = uaudio_iommu_map(MEM_XFER_RING, dma_coherent, tr_pa, 1135 PAGE_SIZE, NULL); 1136 if (!va) { 1137 ret = -ENOMEM; 1138 goto clear_pa; 1139 } 1140 1141 mem_info->va = PREPEND_SID_TO_IOVA(va, uaudio_qdev->data->sid); 1142 mem_info->size = PAGE_SIZE; 1143 1144 return 0; 1145 1146 clear_pa: 1147 mem_info->pa = 0; 1148 remove_ep: 1149 xhci_sideband_remove_endpoint(uadev[card_num].sb, ep); 1150 exit: 1151 return ret; 1152 } 1153 1154 /** 1155 * uaudio_event_ring_setup() - fetch and populate event ring params 1156 * @subs: usb substream 1157 * @card_num: uadev index 1158 * @mem_info: QMI response info 1159 * 1160 * Register secondary interrupter to XHCI and fetch the event buffer info 1161 * and populate the information into the QMI response. 1162 * 1163 */ 1164 static int uaudio_event_ring_setup(struct snd_usb_substream *subs, 1165 int card_num, struct mem_info_v01 *mem_info) 1166 { 1167 struct sg_table *sgt; 1168 phys_addr_t er_pa; 1169 bool dma_coherent; 1170 unsigned long va; 1171 struct page *pg; 1172 int ret; 1173 1174 dma_coherent = dev_is_dma_coherent(subs->dev->bus->sysdev); 1175 er_pa = 0; 1176 1177 /* event ring */ 1178 ret = xhci_sideband_create_interrupter(uadev[card_num].sb, 1, false, 1179 0, uaudio_qdev->data->intr_num); 1180 if (ret < 0) { 1181 dev_err(&subs->dev->dev, "failed to fetch interrupter\n"); 1182 goto exit; 1183 } 1184 1185 sgt = xhci_sideband_get_event_buffer(uadev[card_num].sb); 1186 if (!sgt) { 1187 dev_err(&subs->dev->dev, 1188 "failed to get event ring address\n"); 1189 ret = -ENODEV; 1190 goto remove_interrupter; 1191 } 1192 1193 pg = sg_page(sgt->sgl); 1194 er_pa = page_to_phys(pg); 1195 mem_info->pa = sg_dma_address(sgt->sgl); 1196 sg_free_table(sgt); 1197 1198 va = uaudio_iommu_map(MEM_EVENT_RING, dma_coherent, er_pa, 1199 PAGE_SIZE, NULL); 1200 if (!va) { 1201 ret = -ENOMEM; 1202 goto clear_pa; 1203 } 1204 1205 mem_info->va = PREPEND_SID_TO_IOVA(va, uaudio_qdev->data->sid); 1206 mem_info->size = PAGE_SIZE; 1207 1208 return 0; 1209 1210 clear_pa: 1211 mem_info->pa = 0; 1212 remove_interrupter: 1213 xhci_sideband_remove_interrupter(uadev[card_num].sb); 1214 exit: 1215 return ret; 1216 } 1217 1218 /** 1219 * uaudio_populate_uac_desc() - parse UAC parameters and populate QMI resp 1220 * @subs: usb substream 1221 * @resp: QMI response buffer 1222 * 1223 * Parses information specified within UAC descriptors which explain the 1224 * sample parameters that the device expects. This information is populated 1225 * to the QMI response sent back to the audio DSP. 1226 * 1227 */ 1228 static int uaudio_populate_uac_desc(struct snd_usb_substream *subs, 1229 struct qmi_uaudio_stream_resp_msg_v01 *resp) 1230 { 1231 struct usb_interface_descriptor *altsd; 1232 struct usb_host_interface *alts; 1233 struct usb_interface *iface; 1234 int protocol; 1235 1236 iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface); 1237 if (!iface) { 1238 dev_err(&subs->dev->dev, "interface # %d does not exist\n", 1239 subs->cur_audiofmt->iface); 1240 return -ENODEV; 1241 } 1242 1243 alts = &iface->altsetting[subs->cur_audiofmt->altset_idx]; 1244 altsd = get_iface_desc(alts); 1245 protocol = altsd->bInterfaceProtocol; 1246 1247 if (protocol == UAC_VERSION_1) { 1248 struct uac1_as_header_descriptor *as; 1249 1250 as = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, 1251 UAC_AS_GENERAL); 1252 if (!as) { 1253 dev_err(&subs->dev->dev, 1254 "%u:%d : no UAC_AS_GENERAL desc\n", 1255 subs->cur_audiofmt->iface, 1256 subs->cur_audiofmt->altset_idx); 1257 return -ENODEV; 1258 } 1259 1260 resp->data_path_delay = as->bDelay; 1261 resp->data_path_delay_valid = 1; 1262 1263 resp->usb_audio_subslot_size = subs->cur_audiofmt->fmt_sz; 1264 resp->usb_audio_subslot_size_valid = 1; 1265 1266 resp->usb_audio_spec_revision = le16_to_cpu((__force __le16)0x0100); 1267 resp->usb_audio_spec_revision_valid = 1; 1268 } else if (protocol == UAC_VERSION_2) { 1269 resp->usb_audio_subslot_size = subs->cur_audiofmt->fmt_sz; 1270 resp->usb_audio_subslot_size_valid = 1; 1271 1272 resp->usb_audio_spec_revision = le16_to_cpu((__force __le16)0x0200); 1273 resp->usb_audio_spec_revision_valid = 1; 1274 } else if (protocol == UAC_VERSION_3) { 1275 if (iface->intf_assoc->bFunctionSubClass == 1276 UAC3_FUNCTION_SUBCLASS_FULL_ADC_3_0) { 1277 dev_err(&subs->dev->dev, 1278 "full adc is not supported\n"); 1279 return -EINVAL; 1280 } 1281 1282 switch (le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize)) { 1283 case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16: 1284 case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16: 1285 case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16: 1286 case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16: { 1287 resp->usb_audio_subslot_size = 0x2; 1288 break; 1289 } 1290 1291 case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24: 1292 case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24: 1293 case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24: 1294 case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24: { 1295 resp->usb_audio_subslot_size = 0x3; 1296 break; 1297 } 1298 1299 default: 1300 dev_err(&subs->dev->dev, 1301 "%d: %u: Invalid wMaxPacketSize\n", 1302 subs->cur_audiofmt->iface, 1303 subs->cur_audiofmt->altset_idx); 1304 return -EINVAL; 1305 } 1306 resp->usb_audio_subslot_size_valid = 1; 1307 } else { 1308 dev_err(&subs->dev->dev, "unknown protocol version %x\n", 1309 protocol); 1310 return -ENODEV; 1311 } 1312 1313 memcpy(&resp->std_as_opr_intf_desc, &alts->desc, sizeof(alts->desc)); 1314 1315 return 0; 1316 } 1317 1318 /** 1319 * prepare_qmi_response() - prepare stream enable response 1320 * @subs: usb substream 1321 * @req_msg: QMI request message 1322 * @resp: QMI response buffer 1323 * @info_idx: usb interface array index 1324 * 1325 * Prepares the QMI response for a USB QMI stream enable request. Will parse 1326 * out the parameters within the stream enable request, in order to match 1327 * requested audio profile to the ones exposed by the USB device connected. 1328 * 1329 * In addition, will fetch the XHCI transfer resources needed for the handoff to 1330 * happen. This includes, transfer ring and buffer addresses and secondary event 1331 * ring address. These parameters will be communicated as part of the USB QMI 1332 * stream enable response. 1333 * 1334 */ 1335 static int prepare_qmi_response(struct snd_usb_substream *subs, 1336 struct qmi_uaudio_stream_req_msg_v01 *req_msg, 1337 struct qmi_uaudio_stream_resp_msg_v01 *resp, 1338 int info_idx) 1339 { 1340 struct q6usb_offload *data; 1341 int pcm_dev_num; 1342 int card_num; 1343 u8 *xfer_buf = NULL; 1344 int ret; 1345 1346 pcm_dev_num = (req_msg->usb_token & QMI_STREAM_REQ_DEV_NUM_MASK) >> 8; 1347 card_num = (req_msg->usb_token & QMI_STREAM_REQ_CARD_NUM_MASK) >> 16; 1348 1349 if (!uadev[card_num].ctrl_intf) { 1350 dev_err(&subs->dev->dev, "audio ctrl intf info not cached\n"); 1351 ret = -ENODEV; 1352 goto err; 1353 } 1354 1355 ret = uaudio_populate_uac_desc(subs, resp); 1356 if (ret < 0) 1357 goto err; 1358 1359 resp->slot_id = subs->dev->slot_id; 1360 resp->slot_id_valid = 1; 1361 1362 data = snd_soc_usb_find_priv_data(uaudio_qdev->auxdev->dev.parent); 1363 if (!data) 1364 goto err; 1365 1366 uaudio_qdev->data = data; 1367 1368 resp->std_as_opr_intf_desc_valid = 1; 1369 ret = uaudio_endpoint_setup(subs, subs->data_endpoint, card_num, 1370 &resp->xhci_mem_info.tr_data, 1371 &resp->std_as_data_ep_desc); 1372 if (ret < 0) 1373 goto err; 1374 1375 resp->std_as_data_ep_desc_valid = 1; 1376 1377 if (subs->sync_endpoint) { 1378 ret = uaudio_endpoint_setup(subs, subs->sync_endpoint, card_num, 1379 &resp->xhci_mem_info.tr_sync, 1380 &resp->std_as_sync_ep_desc); 1381 if (ret < 0) 1382 goto drop_data_ep; 1383 1384 resp->std_as_sync_ep_desc_valid = 1; 1385 } 1386 1387 resp->interrupter_num_valid = 1; 1388 resp->controller_num_valid = 0; 1389 ret = usb_get_controller_id(subs->dev); 1390 if (ret >= 0) { 1391 resp->controller_num = ret; 1392 resp->controller_num_valid = 1; 1393 } 1394 1395 /* event ring */ 1396 ret = uaudio_event_ring_setup(subs, card_num, 1397 &resp->xhci_mem_info.evt_ring); 1398 if (ret < 0) 1399 goto drop_sync_ep; 1400 1401 uaudio_qdev->er_mapped = true; 1402 resp->interrupter_num = xhci_sideband_interrupter_id(uadev[card_num].sb); 1403 1404 resp->speed_info = get_speed_info(subs->dev->speed); 1405 if (resp->speed_info == USB_QMI_DEVICE_SPEED_INVALID_V01) { 1406 ret = -ENODEV; 1407 goto free_sec_ring; 1408 } 1409 1410 resp->speed_info_valid = 1; 1411 1412 ret = uaudio_transfer_buffer_setup(subs, xfer_buf, req_msg->xfer_buff_size, 1413 &resp->xhci_mem_info.xfer_buff); 1414 if (ret < 0) { 1415 ret = -ENOMEM; 1416 goto free_sec_ring; 1417 } 1418 1419 resp->xhci_mem_info_valid = 1; 1420 1421 if (!atomic_read(&uadev[card_num].in_use)) { 1422 kref_init(&uadev[card_num].kref); 1423 init_waitqueue_head(&uadev[card_num].disconnect_wq); 1424 uadev[card_num].num_intf = 1425 subs->dev->config->desc.bNumInterfaces; 1426 uadev[card_num].info = kcalloc(uadev[card_num].num_intf, 1427 sizeof(struct intf_info), 1428 GFP_KERNEL); 1429 if (!uadev[card_num].info) { 1430 ret = -ENOMEM; 1431 goto unmap_er; 1432 } 1433 uadev[card_num].udev = subs->dev; 1434 atomic_set(&uadev[card_num].in_use, 1); 1435 } else { 1436 kref_get(&uadev[card_num].kref); 1437 } 1438 1439 uadev[card_num].usb_core_id = resp->controller_num; 1440 1441 /* cache intf specific info to use it for unmap and free xfer buf */ 1442 uadev[card_num].info[info_idx].data_xfer_ring_va = 1443 IOVA_MASK(resp->xhci_mem_info.tr_data.va); 1444 uadev[card_num].info[info_idx].data_xfer_ring_size = PAGE_SIZE; 1445 uadev[card_num].info[info_idx].sync_xfer_ring_va = 1446 IOVA_MASK(resp->xhci_mem_info.tr_sync.va); 1447 uadev[card_num].info[info_idx].sync_xfer_ring_size = PAGE_SIZE; 1448 uadev[card_num].info[info_idx].xfer_buf_va = 1449 IOVA_MASK(resp->xhci_mem_info.xfer_buff.va); 1450 uadev[card_num].info[info_idx].xfer_buf_pa = 1451 resp->xhci_mem_info.xfer_buff.pa; 1452 uadev[card_num].info[info_idx].xfer_buf_size = 1453 resp->xhci_mem_info.xfer_buff.size; 1454 uadev[card_num].info[info_idx].data_ep_pipe = subs->data_endpoint ? 1455 subs->data_endpoint->pipe : 0; 1456 uadev[card_num].info[info_idx].sync_ep_pipe = subs->sync_endpoint ? 1457 subs->sync_endpoint->pipe : 0; 1458 uadev[card_num].info[info_idx].data_ep_idx = subs->data_endpoint ? 1459 subs->data_endpoint->ep_num : 0; 1460 uadev[card_num].info[info_idx].sync_ep_idx = subs->sync_endpoint ? 1461 subs->sync_endpoint->ep_num : 0; 1462 uadev[card_num].info[info_idx].xfer_buf = xfer_buf; 1463 uadev[card_num].info[info_idx].pcm_card_num = card_num; 1464 uadev[card_num].info[info_idx].pcm_dev_num = pcm_dev_num; 1465 uadev[card_num].info[info_idx].direction = subs->direction; 1466 uadev[card_num].info[info_idx].intf_num = subs->cur_audiofmt->iface; 1467 uadev[card_num].info[info_idx].in_use = true; 1468 1469 set_bit(card_num, &uaudio_qdev->card_slot); 1470 1471 return 0; 1472 1473 unmap_er: 1474 uaudio_iommu_unmap(MEM_EVENT_RING, IOVA_BASE, PAGE_SIZE, PAGE_SIZE); 1475 free_sec_ring: 1476 xhci_sideband_remove_interrupter(uadev[card_num].sb); 1477 drop_sync_ep: 1478 if (subs->sync_endpoint) { 1479 uaudio_iommu_unmap(MEM_XFER_RING, 1480 IOVA_MASK(resp->xhci_mem_info.tr_sync.va), 1481 PAGE_SIZE, PAGE_SIZE); 1482 xhci_sideband_remove_endpoint(uadev[card_num].sb, 1483 usb_pipe_endpoint(subs->dev, subs->sync_endpoint->pipe)); 1484 } 1485 drop_data_ep: 1486 uaudio_iommu_unmap(MEM_XFER_RING, IOVA_MASK(resp->xhci_mem_info.tr_data.va), 1487 PAGE_SIZE, PAGE_SIZE); 1488 xhci_sideband_remove_endpoint(uadev[card_num].sb, 1489 usb_pipe_endpoint(subs->dev, subs->data_endpoint->pipe)); 1490 1491 err: 1492 return ret; 1493 } 1494 1495 /** 1496 * handle_uaudio_stream_req() - handle stream enable/disable request 1497 * @handle: QMI client handle 1498 * @sq: qrtr socket 1499 * @txn: QMI transaction context 1500 * @decoded_msg: decoded QMI message 1501 * 1502 * Main handler for the QMI stream enable/disable requests. This executes the 1503 * corresponding enable/disable stream apis, respectively. 1504 * 1505 */ 1506 static void handle_uaudio_stream_req(struct qmi_handle *handle, 1507 struct sockaddr_qrtr *sq, 1508 struct qmi_txn *txn, 1509 const void *decoded_msg) 1510 { 1511 struct qmi_uaudio_stream_req_msg_v01 *req_msg; 1512 struct qmi_uaudio_stream_resp_msg_v01 resp = {{0}, 0}; 1513 struct uaudio_qmi_svc *svc = uaudio_svc; 1514 struct snd_usb_audio *chip = NULL; 1515 struct snd_usb_substream *subs; 1516 struct usb_host_endpoint *ep; 1517 int datainterval = -EINVAL; 1518 int info_idx = -EINVAL; 1519 struct intf_info *info; 1520 u8 pcm_card_num; 1521 u8 pcm_dev_num; 1522 u8 direction; 1523 int ret = 0; 1524 1525 if (!svc->client_connected) { 1526 svc->client_sq = *sq; 1527 svc->client_connected = true; 1528 } 1529 1530 mutex_lock(&qdev_mutex); 1531 req_msg = (struct qmi_uaudio_stream_req_msg_v01 *)decoded_msg; 1532 if (!req_msg->audio_format_valid || !req_msg->bit_rate_valid || 1533 !req_msg->number_of_ch_valid || !req_msg->xfer_buff_size_valid) { 1534 ret = -EINVAL; 1535 goto response; 1536 } 1537 1538 if (!uaudio_qdev) { 1539 ret = -EINVAL; 1540 goto response; 1541 } 1542 1543 direction = (req_msg->usb_token & QMI_STREAM_REQ_DIRECTION); 1544 pcm_dev_num = (req_msg->usb_token & QMI_STREAM_REQ_DEV_NUM_MASK) >> 8; 1545 pcm_card_num = (req_msg->usb_token & QMI_STREAM_REQ_CARD_NUM_MASK) >> 16; 1546 if (pcm_card_num >= SNDRV_CARDS) { 1547 ret = -EINVAL; 1548 goto response; 1549 } 1550 1551 if (req_msg->audio_format > USB_QMI_PCM_FORMAT_U32_BE) { 1552 ret = -EINVAL; 1553 goto response; 1554 } 1555 1556 subs = find_substream(pcm_card_num, pcm_dev_num, direction); 1557 chip = uadev[pcm_card_num].chip; 1558 if (!subs || !chip || atomic_read(&chip->shutdown)) { 1559 ret = -ENODEV; 1560 goto response; 1561 } 1562 1563 info_idx = info_idx_from_ifnum(pcm_card_num, subs->cur_audiofmt ? 1564 subs->cur_audiofmt->iface : -1, req_msg->enable); 1565 if (atomic_read(&chip->shutdown) || !subs->stream || !subs->stream->pcm || 1566 !subs->stream->chip) { 1567 ret = -ENODEV; 1568 goto response; 1569 } 1570 1571 mutex_lock(&chip->mutex); 1572 if (req_msg->enable) { 1573 if (info_idx < 0 || chip->system_suspend || subs->opened) { 1574 ret = -EBUSY; 1575 mutex_unlock(&chip->mutex); 1576 1577 goto response; 1578 } 1579 subs->opened = 1; 1580 } 1581 mutex_unlock(&chip->mutex); 1582 1583 if (req_msg->service_interval_valid) { 1584 ret = get_data_interval_from_si(subs, 1585 req_msg->service_interval); 1586 if (ret == -EINVAL) 1587 goto response; 1588 1589 datainterval = ret; 1590 } 1591 1592 uadev[pcm_card_num].ctrl_intf = chip->ctrl_intf; 1593 1594 if (req_msg->enable) { 1595 ret = enable_audio_stream(subs, 1596 map_pcm_format(req_msg->audio_format), 1597 req_msg->number_of_ch, req_msg->bit_rate, 1598 datainterval); 1599 1600 if (!ret) 1601 ret = prepare_qmi_response(subs, req_msg, &resp, 1602 info_idx); 1603 if (ret < 0) { 1604 mutex_lock(&chip->mutex); 1605 subs->opened = 0; 1606 mutex_unlock(&chip->mutex); 1607 } 1608 } else { 1609 info = &uadev[pcm_card_num].info[info_idx]; 1610 if (info->data_ep_pipe) { 1611 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev, 1612 info->data_ep_pipe); 1613 if (ep) { 1614 xhci_sideband_stop_endpoint(uadev[pcm_card_num].sb, 1615 ep); 1616 xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, 1617 ep); 1618 } 1619 1620 info->data_ep_pipe = 0; 1621 } 1622 1623 if (info->sync_ep_pipe) { 1624 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev, 1625 info->sync_ep_pipe); 1626 if (ep) { 1627 xhci_sideband_stop_endpoint(uadev[pcm_card_num].sb, 1628 ep); 1629 xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, 1630 ep); 1631 } 1632 1633 info->sync_ep_pipe = 0; 1634 } 1635 1636 disable_audio_stream(subs); 1637 mutex_lock(&chip->mutex); 1638 subs->opened = 0; 1639 mutex_unlock(&chip->mutex); 1640 } 1641 1642 response: 1643 if (!req_msg->enable && ret != -EINVAL && ret != -ENODEV) { 1644 mutex_lock(&chip->mutex); 1645 if (info_idx >= 0) { 1646 info = &uadev[pcm_card_num].info[info_idx]; 1647 uaudio_dev_intf_cleanup(uadev[pcm_card_num].udev, 1648 info); 1649 } 1650 if (atomic_read(&uadev[pcm_card_num].in_use)) 1651 kref_put(&uadev[pcm_card_num].kref, 1652 uaudio_dev_release); 1653 mutex_unlock(&chip->mutex); 1654 } 1655 mutex_unlock(&qdev_mutex); 1656 1657 resp.usb_token = req_msg->usb_token; 1658 resp.usb_token_valid = 1; 1659 resp.internal_status = ret; 1660 resp.internal_status_valid = 1; 1661 resp.status = ret ? USB_QMI_STREAM_REQ_FAILURE_V01 : ret; 1662 resp.status_valid = 1; 1663 ret = qmi_send_response(svc->uaudio_svc_hdl, sq, txn, 1664 QMI_UAUDIO_STREAM_RESP_V01, 1665 QMI_UAUDIO_STREAM_RESP_MSG_V01_MAX_MSG_LEN, 1666 qmi_uaudio_stream_resp_msg_v01_ei, &resp); 1667 } 1668 1669 static struct qmi_msg_handler uaudio_stream_req_handlers = { 1670 .type = QMI_REQUEST, 1671 .msg_id = QMI_UAUDIO_STREAM_REQ_V01, 1672 .ei = qmi_uaudio_stream_req_msg_v01_ei, 1673 .decoded_size = QMI_UAUDIO_STREAM_REQ_MSG_V01_MAX_MSG_LEN, 1674 .fn = handle_uaudio_stream_req, 1675 }; 1676 1677 /** 1678 * qc_usb_audio_offload_init_qmi_dev() - initializes qmi dev 1679 * 1680 * Initializes the USB qdev, which is used to carry information pertaining to 1681 * the offloading resources. This device is freed only when there are no longer 1682 * any offloading candidates. (i.e, when all audio devices are disconnected) 1683 * 1684 */ 1685 static int qc_usb_audio_offload_init_qmi_dev(void) 1686 { 1687 uaudio_qdev = kzalloc(sizeof(*uaudio_qdev), GFP_KERNEL); 1688 if (!uaudio_qdev) 1689 return -ENOMEM; 1690 1691 /* initialize xfer ring and xfer buf iova list */ 1692 INIT_LIST_HEAD(&uaudio_qdev->xfer_ring_list); 1693 uaudio_qdev->curr_xfer_ring_iova = IOVA_XFER_RING_BASE; 1694 uaudio_qdev->xfer_ring_iova_size = 1695 IOVA_XFER_RING_MAX - IOVA_XFER_RING_BASE; 1696 1697 INIT_LIST_HEAD(&uaudio_qdev->xfer_buf_list); 1698 uaudio_qdev->curr_xfer_buf_iova = IOVA_XFER_BUF_BASE; 1699 uaudio_qdev->xfer_buf_iova_size = 1700 IOVA_XFER_BUF_MAX - IOVA_XFER_BUF_BASE; 1701 1702 return 0; 1703 } 1704 1705 /* Populates ppcm_idx array with supported PCM indexes */ 1706 static int qc_usb_audio_offload_fill_avail_pcms(struct snd_usb_audio *chip, 1707 struct snd_soc_usb_device *sdev) 1708 { 1709 struct snd_usb_stream *as; 1710 struct snd_usb_substream *subs; 1711 int idx = 0; 1712 1713 list_for_each_entry(as, &chip->pcm_list, list) { 1714 subs = &as->substream[SNDRV_PCM_STREAM_PLAYBACK]; 1715 if (subs->ep_num) { 1716 sdev->ppcm_idx[idx] = as->pcm->device; 1717 idx++; 1718 } 1719 /* 1720 * Break if the current index exceeds the number of possible 1721 * playback streams counted from the UAC descriptors. 1722 */ 1723 if (idx >= sdev->num_playback) 1724 break; 1725 } 1726 1727 return -1; 1728 } 1729 1730 /** 1731 * qc_usb_audio_offload_probe() - platform op connect handler 1732 * @chip: USB SND device 1733 * 1734 * Platform connect handler when a USB SND device is detected. Will 1735 * notify SOC USB about the connection to enable the USB ASoC backend 1736 * and populate internal USB chip array. 1737 * 1738 */ 1739 static void qc_usb_audio_offload_probe(struct snd_usb_audio *chip) 1740 { 1741 struct usb_interface *intf = chip->intf[chip->num_interfaces - 1]; 1742 struct usb_interface_descriptor *altsd; 1743 struct usb_host_interface *alts; 1744 struct snd_soc_usb_device *sdev; 1745 struct xhci_sideband *sb; 1746 1747 /* 1748 * If there is no priv_data, or no playback paths, the connected 1749 * device doesn't support offloading. Avoid populating entries for 1750 * this device. 1751 */ 1752 if (!snd_soc_usb_find_priv_data(uaudio_qdev->auxdev->dev.parent) || 1753 !usb_qmi_get_pcm_num(chip, 0)) 1754 return; 1755 1756 mutex_lock(&qdev_mutex); 1757 mutex_lock(&chip->mutex); 1758 if (!uadev[chip->card->number].chip) { 1759 sdev = kzalloc(sizeof(*sdev), GFP_KERNEL); 1760 if (!sdev) 1761 goto exit; 1762 1763 sb = xhci_sideband_register(intf, XHCI_SIDEBAND_VENDOR, 1764 uaudio_sideband_notifier); 1765 if (!sb) 1766 goto free_sdev; 1767 } else { 1768 sb = uadev[chip->card->number].sb; 1769 sdev = uadev[chip->card->number].sdev; 1770 } 1771 1772 uadev[chip->card->number].sb = sb; 1773 uadev[chip->card->number].chip = chip; 1774 uadev[chip->card->number].sdev = sdev; 1775 1776 alts = &intf->altsetting[0]; 1777 altsd = get_iface_desc(alts); 1778 1779 /* Wait until all PCM devices are populated before notifying soc-usb */ 1780 if (altsd->bInterfaceNumber == chip->last_iface) { 1781 sdev->num_playback = usb_qmi_get_pcm_num(chip, 0); 1782 1783 /* 1784 * Allocate playback pcm index array based on number of possible 1785 * playback paths within the UAC descriptors. 1786 */ 1787 sdev->ppcm_idx = kcalloc(sdev->num_playback, sizeof(unsigned int), 1788 GFP_KERNEL); 1789 if (!sdev->ppcm_idx) 1790 goto unreg_xhci; 1791 1792 qc_usb_audio_offload_fill_avail_pcms(chip, sdev); 1793 sdev->card_idx = chip->card->number; 1794 sdev->chip_idx = chip->index; 1795 1796 snd_usb_offload_create_ctl(chip, uaudio_qdev->auxdev->dev.parent); 1797 snd_soc_usb_connect(uaudio_qdev->auxdev->dev.parent, sdev); 1798 } 1799 1800 mutex_unlock(&chip->mutex); 1801 mutex_unlock(&qdev_mutex); 1802 1803 return; 1804 1805 unreg_xhci: 1806 xhci_sideband_unregister(sb); 1807 uadev[chip->card->number].sb = NULL; 1808 free_sdev: 1809 kfree(sdev); 1810 uadev[chip->card->number].sdev = NULL; 1811 uadev[chip->card->number].chip = NULL; 1812 exit: 1813 mutex_unlock(&chip->mutex); 1814 mutex_unlock(&qdev_mutex); 1815 } 1816 1817 /** 1818 * qc_usb_audio_cleanup_qmi_dev() - release qmi device 1819 * 1820 * Frees the USB qdev. Only occurs when there are no longer any potential 1821 * devices that can utilize USB audio offloading. 1822 * 1823 */ 1824 static void qc_usb_audio_cleanup_qmi_dev(void) 1825 { 1826 kfree(uaudio_qdev); 1827 uaudio_qdev = NULL; 1828 } 1829 1830 /** 1831 * qc_usb_audio_offload_disconnect() - platform op disconnect handler 1832 * @chip: USB SND device 1833 * 1834 * Platform disconnect handler. Will ensure that any pending stream is 1835 * halted by issuing a QMI disconnect indication packet to the adsp. 1836 * 1837 */ 1838 static void qc_usb_audio_offload_disconnect(struct snd_usb_audio *chip) 1839 { 1840 struct uaudio_dev *dev; 1841 int card_num; 1842 1843 if (!chip) 1844 return; 1845 1846 card_num = chip->card->number; 1847 if (card_num >= SNDRV_CARDS) 1848 return; 1849 1850 mutex_lock(&qdev_mutex); 1851 mutex_lock(&chip->mutex); 1852 dev = &uadev[card_num]; 1853 1854 /* Device has already been cleaned up, or never populated */ 1855 if (!dev->chip) { 1856 mutex_unlock(&qdev_mutex); 1857 mutex_unlock(&chip->mutex); 1858 return; 1859 } 1860 1861 /* cleaned up already */ 1862 if (!dev->udev) 1863 goto done; 1864 1865 uaudio_send_disconnect_ind(chip); 1866 uaudio_dev_cleanup(dev); 1867 done: 1868 /* 1869 * If num_interfaces == 1, the last USB SND interface is being removed. 1870 * This is to accommodate for devices w/ multiple UAC functions. 1871 */ 1872 if (chip->num_interfaces == 1) { 1873 snd_soc_usb_disconnect(uaudio_qdev->auxdev->dev.parent, dev->sdev); 1874 xhci_sideband_unregister(dev->sb); 1875 dev->chip = NULL; 1876 kfree(dev->sdev->ppcm_idx); 1877 kfree(dev->sdev); 1878 dev->sdev = NULL; 1879 } 1880 mutex_unlock(&chip->mutex); 1881 1882 mutex_unlock(&qdev_mutex); 1883 } 1884 1885 /** 1886 * qc_usb_audio_offload_suspend() - USB offload PM suspend handler 1887 * @intf: USB interface 1888 * @message: suspend type 1889 * 1890 * PM suspend handler to ensure that the USB offloading driver is able to stop 1891 * any pending traffic, so that the bus can be suspended. 1892 * 1893 */ 1894 static void qc_usb_audio_offload_suspend(struct usb_interface *intf, 1895 pm_message_t message) 1896 { 1897 struct snd_usb_audio *chip = usb_get_intfdata(intf); 1898 int card_num; 1899 1900 if (!chip) 1901 return; 1902 1903 card_num = chip->card->number; 1904 if (card_num >= SNDRV_CARDS) 1905 return; 1906 1907 mutex_lock(&qdev_mutex); 1908 mutex_lock(&chip->mutex); 1909 1910 uaudio_send_disconnect_ind(chip); 1911 1912 mutex_unlock(&qdev_mutex); 1913 mutex_unlock(&chip->mutex); 1914 } 1915 1916 static struct snd_usb_platform_ops offload_ops = { 1917 .connect_cb = qc_usb_audio_offload_probe, 1918 .disconnect_cb = qc_usb_audio_offload_disconnect, 1919 .suspend_cb = qc_usb_audio_offload_suspend, 1920 }; 1921 1922 static int qc_usb_audio_probe(struct auxiliary_device *auxdev, 1923 const struct auxiliary_device_id *id) 1924 1925 { 1926 struct uaudio_qmi_svc *svc; 1927 int ret; 1928 1929 svc = kzalloc(sizeof(*svc), GFP_KERNEL); 1930 if (!svc) 1931 return -ENOMEM; 1932 1933 svc->uaudio_svc_hdl = kzalloc(sizeof(*svc->uaudio_svc_hdl), GFP_KERNEL); 1934 if (!svc->uaudio_svc_hdl) { 1935 ret = -ENOMEM; 1936 goto free_svc; 1937 } 1938 1939 ret = qmi_handle_init(svc->uaudio_svc_hdl, 1940 QMI_UAUDIO_STREAM_REQ_MSG_V01_MAX_MSG_LEN, 1941 &uaudio_svc_ops_options, 1942 &uaudio_stream_req_handlers); 1943 ret = qmi_add_server(svc->uaudio_svc_hdl, UAUDIO_STREAM_SERVICE_ID_V01, 1944 UAUDIO_STREAM_SERVICE_VERS_V01, 0); 1945 1946 uaudio_svc = svc; 1947 1948 qc_usb_audio_offload_init_qmi_dev(); 1949 uaudio_qdev->auxdev = auxdev; 1950 1951 ret = snd_usb_register_platform_ops(&offload_ops); 1952 if (ret < 0) 1953 goto release_qmi; 1954 1955 snd_usb_rediscover_devices(); 1956 1957 return 0; 1958 1959 release_qmi: 1960 qmi_handle_release(svc->uaudio_svc_hdl); 1961 free_svc: 1962 kfree(svc); 1963 1964 return ret; 1965 } 1966 1967 static void qc_usb_audio_remove(struct auxiliary_device *auxdev) 1968 { 1969 struct uaudio_qmi_svc *svc = uaudio_svc; 1970 int idx; 1971 1972 /* 1973 * Remove all connected devices after unregistering ops, to ensure 1974 * that no further connect events will occur. The disconnect routine 1975 * will issue the QMI disconnect indication, which results in the 1976 * external DSP to stop issuing transfers. 1977 */ 1978 snd_usb_unregister_platform_ops(); 1979 for (idx = 0; idx < SNDRV_CARDS; idx++) 1980 qc_usb_audio_offload_disconnect(uadev[idx].chip); 1981 1982 qc_usb_audio_cleanup_qmi_dev(); 1983 1984 qmi_handle_release(svc->uaudio_svc_hdl); 1985 kfree(svc); 1986 uaudio_svc = NULL; 1987 } 1988 1989 static const struct auxiliary_device_id qc_usb_audio_table[] = { 1990 { .name = "q6usb.qc-usb-audio-offload" }, 1991 {}, 1992 }; 1993 MODULE_DEVICE_TABLE(auxiliary, qc_usb_audio_table); 1994 1995 static struct auxiliary_driver qc_usb_audio_offload_drv = { 1996 .name = "qc-usb-audio-offload", 1997 .id_table = qc_usb_audio_table, 1998 .probe = qc_usb_audio_probe, 1999 .remove = qc_usb_audio_remove, 2000 }; 2001 module_auxiliary_driver(qc_usb_audio_offload_drv); 2002 2003 MODULE_DESCRIPTION("QC USB Audio Offloading"); 2004 MODULE_LICENSE("GPL"); 2005