1 /* 2 * Routines for driver control interface 3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz> 4 * 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * 20 */ 21 22 #include <linux/threads.h> 23 #include <linux/interrupt.h> 24 #include <linux/module.h> 25 #include <linux/slab.h> 26 #include <linux/vmalloc.h> 27 #include <linux/time.h> 28 #include <linux/mm.h> 29 #include <linux/sched/signal.h> 30 #include <sound/core.h> 31 #include <sound/minors.h> 32 #include <sound/info.h> 33 #include <sound/control.h> 34 35 /* max number of user-defined controls */ 36 #define MAX_USER_CONTROLS 32 37 #define MAX_CONTROL_COUNT 1028 38 39 struct snd_kctl_ioctl { 40 struct list_head list; /* list of all ioctls */ 41 snd_kctl_ioctl_func_t fioctl; 42 }; 43 44 static DECLARE_RWSEM(snd_ioctl_rwsem); 45 static LIST_HEAD(snd_control_ioctls); 46 #ifdef CONFIG_COMPAT 47 static LIST_HEAD(snd_control_compat_ioctls); 48 #endif 49 50 static int snd_ctl_open(struct inode *inode, struct file *file) 51 { 52 unsigned long flags; 53 struct snd_card *card; 54 struct snd_ctl_file *ctl; 55 int i, err; 56 57 err = nonseekable_open(inode, file); 58 if (err < 0) 59 return err; 60 61 card = snd_lookup_minor_data(iminor(inode), SNDRV_DEVICE_TYPE_CONTROL); 62 if (!card) { 63 err = -ENODEV; 64 goto __error1; 65 } 66 err = snd_card_file_add(card, file); 67 if (err < 0) { 68 err = -ENODEV; 69 goto __error1; 70 } 71 if (!try_module_get(card->module)) { 72 err = -EFAULT; 73 goto __error2; 74 } 75 ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); 76 if (ctl == NULL) { 77 err = -ENOMEM; 78 goto __error; 79 } 80 INIT_LIST_HEAD(&ctl->events); 81 init_waitqueue_head(&ctl->change_sleep); 82 spin_lock_init(&ctl->read_lock); 83 ctl->card = card; 84 for (i = 0; i < SND_CTL_SUBDEV_ITEMS; i++) 85 ctl->preferred_subdevice[i] = -1; 86 ctl->pid = get_pid(task_pid(current)); 87 file->private_data = ctl; 88 write_lock_irqsave(&card->ctl_files_rwlock, flags); 89 list_add_tail(&ctl->list, &card->ctl_files); 90 write_unlock_irqrestore(&card->ctl_files_rwlock, flags); 91 snd_card_unref(card); 92 return 0; 93 94 __error: 95 module_put(card->module); 96 __error2: 97 snd_card_file_remove(card, file); 98 __error1: 99 if (card) 100 snd_card_unref(card); 101 return err; 102 } 103 104 static void snd_ctl_empty_read_queue(struct snd_ctl_file * ctl) 105 { 106 unsigned long flags; 107 struct snd_kctl_event *cread; 108 109 spin_lock_irqsave(&ctl->read_lock, flags); 110 while (!list_empty(&ctl->events)) { 111 cread = snd_kctl_event(ctl->events.next); 112 list_del(&cread->list); 113 kfree(cread); 114 } 115 spin_unlock_irqrestore(&ctl->read_lock, flags); 116 } 117 118 static int snd_ctl_release(struct inode *inode, struct file *file) 119 { 120 unsigned long flags; 121 struct snd_card *card; 122 struct snd_ctl_file *ctl; 123 struct snd_kcontrol *control; 124 unsigned int idx; 125 126 ctl = file->private_data; 127 file->private_data = NULL; 128 card = ctl->card; 129 write_lock_irqsave(&card->ctl_files_rwlock, flags); 130 list_del(&ctl->list); 131 write_unlock_irqrestore(&card->ctl_files_rwlock, flags); 132 down_write(&card->controls_rwsem); 133 list_for_each_entry(control, &card->controls, list) 134 for (idx = 0; idx < control->count; idx++) 135 if (control->vd[idx].owner == ctl) 136 control->vd[idx].owner = NULL; 137 up_write(&card->controls_rwsem); 138 snd_ctl_empty_read_queue(ctl); 139 put_pid(ctl->pid); 140 kfree(ctl); 141 module_put(card->module); 142 snd_card_file_remove(card, file); 143 return 0; 144 } 145 146 /** 147 * snd_ctl_notify - Send notification to user-space for a control change 148 * @card: the card to send notification 149 * @mask: the event mask, SNDRV_CTL_EVENT_* 150 * @id: the ctl element id to send notification 151 * 152 * This function adds an event record with the given id and mask, appends 153 * to the list and wakes up the user-space for notification. This can be 154 * called in the atomic context. 155 */ 156 void snd_ctl_notify(struct snd_card *card, unsigned int mask, 157 struct snd_ctl_elem_id *id) 158 { 159 unsigned long flags; 160 struct snd_ctl_file *ctl; 161 struct snd_kctl_event *ev; 162 163 if (snd_BUG_ON(!card || !id)) 164 return; 165 if (card->shutdown) 166 return; 167 read_lock(&card->ctl_files_rwlock); 168 #if IS_ENABLED(CONFIG_SND_MIXER_OSS) 169 card->mixer_oss_change_count++; 170 #endif 171 list_for_each_entry(ctl, &card->ctl_files, list) { 172 if (!ctl->subscribed) 173 continue; 174 spin_lock_irqsave(&ctl->read_lock, flags); 175 list_for_each_entry(ev, &ctl->events, list) { 176 if (ev->id.numid == id->numid) { 177 ev->mask |= mask; 178 goto _found; 179 } 180 } 181 ev = kzalloc(sizeof(*ev), GFP_ATOMIC); 182 if (ev) { 183 ev->id = *id; 184 ev->mask = mask; 185 list_add_tail(&ev->list, &ctl->events); 186 } else { 187 dev_err(card->dev, "No memory available to allocate event\n"); 188 } 189 _found: 190 wake_up(&ctl->change_sleep); 191 spin_unlock_irqrestore(&ctl->read_lock, flags); 192 kill_fasync(&ctl->fasync, SIGIO, POLL_IN); 193 } 194 read_unlock(&card->ctl_files_rwlock); 195 } 196 EXPORT_SYMBOL(snd_ctl_notify); 197 198 /** 199 * snd_ctl_new - create a new control instance with some elements 200 * @kctl: the pointer to store new control instance 201 * @count: the number of elements in this control 202 * @access: the default access flags for elements in this control 203 * @file: given when locking these elements 204 * 205 * Allocates a memory object for a new control instance. The instance has 206 * elements as many as the given number (@count). Each element has given 207 * access permissions (@access). Each element is locked when @file is given. 208 * 209 * Return: 0 on success, error code on failure 210 */ 211 static int snd_ctl_new(struct snd_kcontrol **kctl, unsigned int count, 212 unsigned int access, struct snd_ctl_file *file) 213 { 214 unsigned int size; 215 unsigned int idx; 216 217 if (count == 0 || count > MAX_CONTROL_COUNT) 218 return -EINVAL; 219 220 size = sizeof(struct snd_kcontrol); 221 size += sizeof(struct snd_kcontrol_volatile) * count; 222 223 *kctl = kzalloc(size, GFP_KERNEL); 224 if (!*kctl) 225 return -ENOMEM; 226 227 for (idx = 0; idx < count; idx++) { 228 (*kctl)->vd[idx].access = access; 229 (*kctl)->vd[idx].owner = file; 230 } 231 (*kctl)->count = count; 232 233 return 0; 234 } 235 236 /** 237 * snd_ctl_new1 - create a control instance from the template 238 * @ncontrol: the initialization record 239 * @private_data: the private data to set 240 * 241 * Allocates a new struct snd_kcontrol instance and initialize from the given 242 * template. When the access field of ncontrol is 0, it's assumed as 243 * READWRITE access. When the count field is 0, it's assumes as one. 244 * 245 * Return: The pointer of the newly generated instance, or %NULL on failure. 246 */ 247 struct snd_kcontrol *snd_ctl_new1(const struct snd_kcontrol_new *ncontrol, 248 void *private_data) 249 { 250 struct snd_kcontrol *kctl; 251 unsigned int count; 252 unsigned int access; 253 int err; 254 255 if (snd_BUG_ON(!ncontrol || !ncontrol->info)) 256 return NULL; 257 258 count = ncontrol->count; 259 if (count == 0) 260 count = 1; 261 262 access = ncontrol->access; 263 if (access == 0) 264 access = SNDRV_CTL_ELEM_ACCESS_READWRITE; 265 access &= (SNDRV_CTL_ELEM_ACCESS_READWRITE | 266 SNDRV_CTL_ELEM_ACCESS_VOLATILE | 267 SNDRV_CTL_ELEM_ACCESS_INACTIVE | 268 SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE | 269 SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND | 270 SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK); 271 272 err = snd_ctl_new(&kctl, count, access, NULL); 273 if (err < 0) 274 return NULL; 275 276 /* The 'numid' member is decided when calling snd_ctl_add(). */ 277 kctl->id.iface = ncontrol->iface; 278 kctl->id.device = ncontrol->device; 279 kctl->id.subdevice = ncontrol->subdevice; 280 if (ncontrol->name) { 281 strlcpy(kctl->id.name, ncontrol->name, sizeof(kctl->id.name)); 282 if (strcmp(ncontrol->name, kctl->id.name) != 0) 283 pr_warn("ALSA: Control name '%s' truncated to '%s'\n", 284 ncontrol->name, kctl->id.name); 285 } 286 kctl->id.index = ncontrol->index; 287 288 kctl->info = ncontrol->info; 289 kctl->get = ncontrol->get; 290 kctl->put = ncontrol->put; 291 kctl->tlv.p = ncontrol->tlv.p; 292 293 kctl->private_value = ncontrol->private_value; 294 kctl->private_data = private_data; 295 296 return kctl; 297 } 298 EXPORT_SYMBOL(snd_ctl_new1); 299 300 /** 301 * snd_ctl_free_one - release the control instance 302 * @kcontrol: the control instance 303 * 304 * Releases the control instance created via snd_ctl_new() 305 * or snd_ctl_new1(). 306 * Don't call this after the control was added to the card. 307 */ 308 void snd_ctl_free_one(struct snd_kcontrol *kcontrol) 309 { 310 if (kcontrol) { 311 if (kcontrol->private_free) 312 kcontrol->private_free(kcontrol); 313 kfree(kcontrol); 314 } 315 } 316 EXPORT_SYMBOL(snd_ctl_free_one); 317 318 static bool snd_ctl_remove_numid_conflict(struct snd_card *card, 319 unsigned int count) 320 { 321 struct snd_kcontrol *kctl; 322 323 /* Make sure that the ids assigned to the control do not wrap around */ 324 if (card->last_numid >= UINT_MAX - count) 325 card->last_numid = 0; 326 327 list_for_each_entry(kctl, &card->controls, list) { 328 if (kctl->id.numid < card->last_numid + 1 + count && 329 kctl->id.numid + kctl->count > card->last_numid + 1) { 330 card->last_numid = kctl->id.numid + kctl->count - 1; 331 return true; 332 } 333 } 334 return false; 335 } 336 337 static int snd_ctl_find_hole(struct snd_card *card, unsigned int count) 338 { 339 unsigned int iter = 100000; 340 341 while (snd_ctl_remove_numid_conflict(card, count)) { 342 if (--iter == 0) { 343 /* this situation is very unlikely */ 344 dev_err(card->dev, "unable to allocate new control numid\n"); 345 return -ENOMEM; 346 } 347 } 348 return 0; 349 } 350 351 /** 352 * snd_ctl_add - add the control instance to the card 353 * @card: the card instance 354 * @kcontrol: the control instance to add 355 * 356 * Adds the control instance created via snd_ctl_new() or 357 * snd_ctl_new1() to the given card. Assigns also an unique 358 * numid used for fast search. 359 * 360 * It frees automatically the control which cannot be added. 361 * 362 * Return: Zero if successful, or a negative error code on failure. 363 * 364 */ 365 int snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol) 366 { 367 struct snd_ctl_elem_id id; 368 unsigned int idx; 369 unsigned int count; 370 int err = -EINVAL; 371 372 if (! kcontrol) 373 return err; 374 if (snd_BUG_ON(!card || !kcontrol->info)) 375 goto error; 376 id = kcontrol->id; 377 if (id.index > UINT_MAX - kcontrol->count) 378 goto error; 379 380 down_write(&card->controls_rwsem); 381 if (snd_ctl_find_id(card, &id)) { 382 up_write(&card->controls_rwsem); 383 dev_err(card->dev, "control %i:%i:%i:%s:%i is already present\n", 384 id.iface, 385 id.device, 386 id.subdevice, 387 id.name, 388 id.index); 389 err = -EBUSY; 390 goto error; 391 } 392 if (snd_ctl_find_hole(card, kcontrol->count) < 0) { 393 up_write(&card->controls_rwsem); 394 err = -ENOMEM; 395 goto error; 396 } 397 list_add_tail(&kcontrol->list, &card->controls); 398 card->controls_count += kcontrol->count; 399 kcontrol->id.numid = card->last_numid + 1; 400 card->last_numid += kcontrol->count; 401 id = kcontrol->id; 402 count = kcontrol->count; 403 up_write(&card->controls_rwsem); 404 for (idx = 0; idx < count; idx++, id.index++, id.numid++) 405 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &id); 406 return 0; 407 408 error: 409 snd_ctl_free_one(kcontrol); 410 return err; 411 } 412 EXPORT_SYMBOL(snd_ctl_add); 413 414 /** 415 * snd_ctl_replace - replace the control instance of the card 416 * @card: the card instance 417 * @kcontrol: the control instance to replace 418 * @add_on_replace: add the control if not already added 419 * 420 * Replaces the given control. If the given control does not exist 421 * and the add_on_replace flag is set, the control is added. If the 422 * control exists, it is destroyed first. 423 * 424 * It frees automatically the control which cannot be added or replaced. 425 * 426 * Return: Zero if successful, or a negative error code on failure. 427 */ 428 int snd_ctl_replace(struct snd_card *card, struct snd_kcontrol *kcontrol, 429 bool add_on_replace) 430 { 431 struct snd_ctl_elem_id id; 432 unsigned int count; 433 unsigned int idx; 434 struct snd_kcontrol *old; 435 int ret; 436 437 if (!kcontrol) 438 return -EINVAL; 439 if (snd_BUG_ON(!card || !kcontrol->info)) { 440 ret = -EINVAL; 441 goto error; 442 } 443 id = kcontrol->id; 444 down_write(&card->controls_rwsem); 445 old = snd_ctl_find_id(card, &id); 446 if (!old) { 447 if (add_on_replace) 448 goto add; 449 up_write(&card->controls_rwsem); 450 ret = -EINVAL; 451 goto error; 452 } 453 ret = snd_ctl_remove(card, old); 454 if (ret < 0) { 455 up_write(&card->controls_rwsem); 456 goto error; 457 } 458 add: 459 if (snd_ctl_find_hole(card, kcontrol->count) < 0) { 460 up_write(&card->controls_rwsem); 461 ret = -ENOMEM; 462 goto error; 463 } 464 list_add_tail(&kcontrol->list, &card->controls); 465 card->controls_count += kcontrol->count; 466 kcontrol->id.numid = card->last_numid + 1; 467 card->last_numid += kcontrol->count; 468 id = kcontrol->id; 469 count = kcontrol->count; 470 up_write(&card->controls_rwsem); 471 for (idx = 0; idx < count; idx++, id.index++, id.numid++) 472 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &id); 473 return 0; 474 475 error: 476 snd_ctl_free_one(kcontrol); 477 return ret; 478 } 479 EXPORT_SYMBOL(snd_ctl_replace); 480 481 /** 482 * snd_ctl_remove - remove the control from the card and release it 483 * @card: the card instance 484 * @kcontrol: the control instance to remove 485 * 486 * Removes the control from the card and then releases the instance. 487 * You don't need to call snd_ctl_free_one(). You must be in 488 * the write lock - down_write(&card->controls_rwsem). 489 * 490 * Return: 0 if successful, or a negative error code on failure. 491 */ 492 int snd_ctl_remove(struct snd_card *card, struct snd_kcontrol *kcontrol) 493 { 494 struct snd_ctl_elem_id id; 495 unsigned int idx; 496 497 if (snd_BUG_ON(!card || !kcontrol)) 498 return -EINVAL; 499 list_del(&kcontrol->list); 500 card->controls_count -= kcontrol->count; 501 id = kcontrol->id; 502 for (idx = 0; idx < kcontrol->count; idx++, id.index++, id.numid++) 503 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_REMOVE, &id); 504 snd_ctl_free_one(kcontrol); 505 return 0; 506 } 507 EXPORT_SYMBOL(snd_ctl_remove); 508 509 /** 510 * snd_ctl_remove_id - remove the control of the given id and release it 511 * @card: the card instance 512 * @id: the control id to remove 513 * 514 * Finds the control instance with the given id, removes it from the 515 * card list and releases it. 516 * 517 * Return: 0 if successful, or a negative error code on failure. 518 */ 519 int snd_ctl_remove_id(struct snd_card *card, struct snd_ctl_elem_id *id) 520 { 521 struct snd_kcontrol *kctl; 522 int ret; 523 524 down_write(&card->controls_rwsem); 525 kctl = snd_ctl_find_id(card, id); 526 if (kctl == NULL) { 527 up_write(&card->controls_rwsem); 528 return -ENOENT; 529 } 530 ret = snd_ctl_remove(card, kctl); 531 up_write(&card->controls_rwsem); 532 return ret; 533 } 534 EXPORT_SYMBOL(snd_ctl_remove_id); 535 536 /** 537 * snd_ctl_remove_user_ctl - remove and release the unlocked user control 538 * @file: active control handle 539 * @id: the control id to remove 540 * 541 * Finds the control instance with the given id, removes it from the 542 * card list and releases it. 543 * 544 * Return: 0 if successful, or a negative error code on failure. 545 */ 546 static int snd_ctl_remove_user_ctl(struct snd_ctl_file * file, 547 struct snd_ctl_elem_id *id) 548 { 549 struct snd_card *card = file->card; 550 struct snd_kcontrol *kctl; 551 int idx, ret; 552 553 down_write(&card->controls_rwsem); 554 kctl = snd_ctl_find_id(card, id); 555 if (kctl == NULL) { 556 ret = -ENOENT; 557 goto error; 558 } 559 if (!(kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_USER)) { 560 ret = -EINVAL; 561 goto error; 562 } 563 for (idx = 0; idx < kctl->count; idx++) 564 if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) { 565 ret = -EBUSY; 566 goto error; 567 } 568 ret = snd_ctl_remove(card, kctl); 569 if (ret < 0) 570 goto error; 571 card->user_ctl_count--; 572 error: 573 up_write(&card->controls_rwsem); 574 return ret; 575 } 576 577 /** 578 * snd_ctl_activate_id - activate/inactivate the control of the given id 579 * @card: the card instance 580 * @id: the control id to activate/inactivate 581 * @active: non-zero to activate 582 * 583 * Finds the control instance with the given id, and activate or 584 * inactivate the control together with notification, if changed. 585 * The given ID data is filled with full information. 586 * 587 * Return: 0 if unchanged, 1 if changed, or a negative error code on failure. 588 */ 589 int snd_ctl_activate_id(struct snd_card *card, struct snd_ctl_elem_id *id, 590 int active) 591 { 592 struct snd_kcontrol *kctl; 593 struct snd_kcontrol_volatile *vd; 594 unsigned int index_offset; 595 int ret; 596 597 down_write(&card->controls_rwsem); 598 kctl = snd_ctl_find_id(card, id); 599 if (kctl == NULL) { 600 ret = -ENOENT; 601 goto unlock; 602 } 603 index_offset = snd_ctl_get_ioff(kctl, id); 604 vd = &kctl->vd[index_offset]; 605 ret = 0; 606 if (active) { 607 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_INACTIVE)) 608 goto unlock; 609 vd->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; 610 } else { 611 if (vd->access & SNDRV_CTL_ELEM_ACCESS_INACTIVE) 612 goto unlock; 613 vd->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; 614 } 615 snd_ctl_build_ioff(id, kctl, index_offset); 616 ret = 1; 617 unlock: 618 up_write(&card->controls_rwsem); 619 if (ret > 0) 620 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO, id); 621 return ret; 622 } 623 EXPORT_SYMBOL_GPL(snd_ctl_activate_id); 624 625 /** 626 * snd_ctl_rename_id - replace the id of a control on the card 627 * @card: the card instance 628 * @src_id: the old id 629 * @dst_id: the new id 630 * 631 * Finds the control with the old id from the card, and replaces the 632 * id with the new one. 633 * 634 * Return: Zero if successful, or a negative error code on failure. 635 */ 636 int snd_ctl_rename_id(struct snd_card *card, struct snd_ctl_elem_id *src_id, 637 struct snd_ctl_elem_id *dst_id) 638 { 639 struct snd_kcontrol *kctl; 640 641 down_write(&card->controls_rwsem); 642 kctl = snd_ctl_find_id(card, src_id); 643 if (kctl == NULL) { 644 up_write(&card->controls_rwsem); 645 return -ENOENT; 646 } 647 kctl->id = *dst_id; 648 kctl->id.numid = card->last_numid + 1; 649 card->last_numid += kctl->count; 650 up_write(&card->controls_rwsem); 651 return 0; 652 } 653 EXPORT_SYMBOL(snd_ctl_rename_id); 654 655 /** 656 * snd_ctl_find_numid - find the control instance with the given number-id 657 * @card: the card instance 658 * @numid: the number-id to search 659 * 660 * Finds the control instance with the given number-id from the card. 661 * 662 * The caller must down card->controls_rwsem before calling this function 663 * (if the race condition can happen). 664 * 665 * Return: The pointer of the instance if found, or %NULL if not. 666 * 667 */ 668 struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numid) 669 { 670 struct snd_kcontrol *kctl; 671 672 if (snd_BUG_ON(!card || !numid)) 673 return NULL; 674 list_for_each_entry(kctl, &card->controls, list) { 675 if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) 676 return kctl; 677 } 678 return NULL; 679 } 680 EXPORT_SYMBOL(snd_ctl_find_numid); 681 682 /** 683 * snd_ctl_find_id - find the control instance with the given id 684 * @card: the card instance 685 * @id: the id to search 686 * 687 * Finds the control instance with the given id from the card. 688 * 689 * The caller must down card->controls_rwsem before calling this function 690 * (if the race condition can happen). 691 * 692 * Return: The pointer of the instance if found, or %NULL if not. 693 * 694 */ 695 struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, 696 struct snd_ctl_elem_id *id) 697 { 698 struct snd_kcontrol *kctl; 699 700 if (snd_BUG_ON(!card || !id)) 701 return NULL; 702 if (id->numid != 0) 703 return snd_ctl_find_numid(card, id->numid); 704 list_for_each_entry(kctl, &card->controls, list) { 705 if (kctl->id.iface != id->iface) 706 continue; 707 if (kctl->id.device != id->device) 708 continue; 709 if (kctl->id.subdevice != id->subdevice) 710 continue; 711 if (strncmp(kctl->id.name, id->name, sizeof(kctl->id.name))) 712 continue; 713 if (kctl->id.index > id->index) 714 continue; 715 if (kctl->id.index + kctl->count <= id->index) 716 continue; 717 return kctl; 718 } 719 return NULL; 720 } 721 EXPORT_SYMBOL(snd_ctl_find_id); 722 723 static int snd_ctl_card_info(struct snd_card *card, struct snd_ctl_file * ctl, 724 unsigned int cmd, void __user *arg) 725 { 726 struct snd_ctl_card_info *info; 727 728 info = kzalloc(sizeof(*info), GFP_KERNEL); 729 if (! info) 730 return -ENOMEM; 731 down_read(&snd_ioctl_rwsem); 732 info->card = card->number; 733 strlcpy(info->id, card->id, sizeof(info->id)); 734 strlcpy(info->driver, card->driver, sizeof(info->driver)); 735 strlcpy(info->name, card->shortname, sizeof(info->name)); 736 strlcpy(info->longname, card->longname, sizeof(info->longname)); 737 strlcpy(info->mixername, card->mixername, sizeof(info->mixername)); 738 strlcpy(info->components, card->components, sizeof(info->components)); 739 up_read(&snd_ioctl_rwsem); 740 if (copy_to_user(arg, info, sizeof(struct snd_ctl_card_info))) { 741 kfree(info); 742 return -EFAULT; 743 } 744 kfree(info); 745 return 0; 746 } 747 748 static int snd_ctl_elem_list(struct snd_card *card, 749 struct snd_ctl_elem_list __user *_list) 750 { 751 struct snd_ctl_elem_list list; 752 struct snd_kcontrol *kctl; 753 struct snd_ctl_elem_id id; 754 unsigned int offset, space, jidx; 755 int err = 0; 756 757 if (copy_from_user(&list, _list, sizeof(list))) 758 return -EFAULT; 759 offset = list.offset; 760 space = list.space; 761 762 down_read(&card->controls_rwsem); 763 list.count = card->controls_count; 764 list.used = 0; 765 if (space > 0) { 766 list_for_each_entry(kctl, &card->controls, list) { 767 if (offset >= kctl->count) { 768 offset -= kctl->count; 769 continue; 770 } 771 for (jidx = offset; jidx < kctl->count; jidx++) { 772 snd_ctl_build_ioff(&id, kctl, jidx); 773 if (copy_to_user(list.pids + list.used, &id, 774 sizeof(id))) { 775 err = -EFAULT; 776 goto out; 777 } 778 list.used++; 779 if (!--space) 780 goto out; 781 } 782 offset = 0; 783 } 784 } 785 out: 786 up_read(&card->controls_rwsem); 787 if (!err && copy_to_user(_list, &list, sizeof(list))) 788 err = -EFAULT; 789 return err; 790 } 791 792 static bool validate_element_member_dimension(struct snd_ctl_elem_info *info) 793 { 794 unsigned int members; 795 unsigned int i; 796 797 if (info->dimen.d[0] == 0) 798 return true; 799 800 members = 1; 801 for (i = 0; i < ARRAY_SIZE(info->dimen.d); ++i) { 802 if (info->dimen.d[i] == 0) 803 break; 804 members *= info->dimen.d[i]; 805 806 /* 807 * info->count should be validated in advance, to guarantee 808 * calculation soundness. 809 */ 810 if (members > info->count) 811 return false; 812 } 813 814 for (++i; i < ARRAY_SIZE(info->dimen.d); ++i) { 815 if (info->dimen.d[i] > 0) 816 return false; 817 } 818 819 return members == info->count; 820 } 821 822 static int snd_ctl_elem_info(struct snd_ctl_file *ctl, 823 struct snd_ctl_elem_info *info) 824 { 825 struct snd_card *card = ctl->card; 826 struct snd_kcontrol *kctl; 827 struct snd_kcontrol_volatile *vd; 828 unsigned int index_offset; 829 int result; 830 831 down_read(&card->controls_rwsem); 832 kctl = snd_ctl_find_id(card, &info->id); 833 if (kctl == NULL) { 834 up_read(&card->controls_rwsem); 835 return -ENOENT; 836 } 837 #ifdef CONFIG_SND_DEBUG 838 info->access = 0; 839 #endif 840 result = kctl->info(kctl, info); 841 if (result >= 0) { 842 snd_BUG_ON(info->access); 843 index_offset = snd_ctl_get_ioff(kctl, &info->id); 844 vd = &kctl->vd[index_offset]; 845 snd_ctl_build_ioff(&info->id, kctl, index_offset); 846 info->access = vd->access; 847 if (vd->owner) { 848 info->access |= SNDRV_CTL_ELEM_ACCESS_LOCK; 849 if (vd->owner == ctl) 850 info->access |= SNDRV_CTL_ELEM_ACCESS_OWNER; 851 info->owner = pid_vnr(vd->owner->pid); 852 } else { 853 info->owner = -1; 854 } 855 } 856 up_read(&card->controls_rwsem); 857 return result; 858 } 859 860 static int snd_ctl_elem_info_user(struct snd_ctl_file *ctl, 861 struct snd_ctl_elem_info __user *_info) 862 { 863 struct snd_ctl_elem_info info; 864 int result; 865 866 if (copy_from_user(&info, _info, sizeof(info))) 867 return -EFAULT; 868 result = snd_power_wait(ctl->card, SNDRV_CTL_POWER_D0); 869 if (result < 0) 870 return result; 871 result = snd_ctl_elem_info(ctl, &info); 872 if (result < 0) 873 return result; 874 if (copy_to_user(_info, &info, sizeof(info))) 875 return -EFAULT; 876 return result; 877 } 878 879 static int snd_ctl_elem_read(struct snd_card *card, 880 struct snd_ctl_elem_value *control) 881 { 882 struct snd_kcontrol *kctl; 883 struct snd_kcontrol_volatile *vd; 884 unsigned int index_offset; 885 886 kctl = snd_ctl_find_id(card, &control->id); 887 if (kctl == NULL) 888 return -ENOENT; 889 890 index_offset = snd_ctl_get_ioff(kctl, &control->id); 891 vd = &kctl->vd[index_offset]; 892 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_READ) || kctl->get == NULL) 893 return -EPERM; 894 895 snd_ctl_build_ioff(&control->id, kctl, index_offset); 896 return kctl->get(kctl, control); 897 } 898 899 static int snd_ctl_elem_read_user(struct snd_card *card, 900 struct snd_ctl_elem_value __user *_control) 901 { 902 struct snd_ctl_elem_value *control; 903 int result; 904 905 control = memdup_user(_control, sizeof(*control)); 906 if (IS_ERR(control)) 907 return PTR_ERR(control); 908 909 result = snd_power_wait(card, SNDRV_CTL_POWER_D0); 910 if (result < 0) 911 goto error; 912 913 down_read(&card->controls_rwsem); 914 result = snd_ctl_elem_read(card, control); 915 up_read(&card->controls_rwsem); 916 if (result < 0) 917 goto error; 918 919 if (copy_to_user(_control, control, sizeof(*control))) 920 result = -EFAULT; 921 error: 922 kfree(control); 923 return result; 924 } 925 926 static int snd_ctl_elem_write(struct snd_card *card, struct snd_ctl_file *file, 927 struct snd_ctl_elem_value *control) 928 { 929 struct snd_kcontrol *kctl; 930 struct snd_kcontrol_volatile *vd; 931 unsigned int index_offset; 932 int result; 933 934 kctl = snd_ctl_find_id(card, &control->id); 935 if (kctl == NULL) 936 return -ENOENT; 937 938 index_offset = snd_ctl_get_ioff(kctl, &control->id); 939 vd = &kctl->vd[index_offset]; 940 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kctl->put == NULL || 941 (file && vd->owner && vd->owner != file)) { 942 return -EPERM; 943 } 944 945 snd_ctl_build_ioff(&control->id, kctl, index_offset); 946 result = kctl->put(kctl, control); 947 if (result < 0) 948 return result; 949 950 if (result > 0) { 951 struct snd_ctl_elem_id id = control->id; 952 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &id); 953 } 954 955 return 0; 956 } 957 958 static int snd_ctl_elem_write_user(struct snd_ctl_file *file, 959 struct snd_ctl_elem_value __user *_control) 960 { 961 struct snd_ctl_elem_value *control; 962 struct snd_card *card; 963 int result; 964 965 control = memdup_user(_control, sizeof(*control)); 966 if (IS_ERR(control)) 967 return PTR_ERR(control); 968 969 card = file->card; 970 result = snd_power_wait(card, SNDRV_CTL_POWER_D0); 971 if (result < 0) 972 goto error; 973 974 down_write(&card->controls_rwsem); 975 result = snd_ctl_elem_write(card, file, control); 976 up_write(&card->controls_rwsem); 977 if (result < 0) 978 goto error; 979 980 if (copy_to_user(_control, control, sizeof(*control))) 981 result = -EFAULT; 982 error: 983 kfree(control); 984 return result; 985 } 986 987 static int snd_ctl_elem_lock(struct snd_ctl_file *file, 988 struct snd_ctl_elem_id __user *_id) 989 { 990 struct snd_card *card = file->card; 991 struct snd_ctl_elem_id id; 992 struct snd_kcontrol *kctl; 993 struct snd_kcontrol_volatile *vd; 994 int result; 995 996 if (copy_from_user(&id, _id, sizeof(id))) 997 return -EFAULT; 998 down_write(&card->controls_rwsem); 999 kctl = snd_ctl_find_id(card, &id); 1000 if (kctl == NULL) { 1001 result = -ENOENT; 1002 } else { 1003 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; 1004 if (vd->owner != NULL) 1005 result = -EBUSY; 1006 else { 1007 vd->owner = file; 1008 result = 0; 1009 } 1010 } 1011 up_write(&card->controls_rwsem); 1012 return result; 1013 } 1014 1015 static int snd_ctl_elem_unlock(struct snd_ctl_file *file, 1016 struct snd_ctl_elem_id __user *_id) 1017 { 1018 struct snd_card *card = file->card; 1019 struct snd_ctl_elem_id id; 1020 struct snd_kcontrol *kctl; 1021 struct snd_kcontrol_volatile *vd; 1022 int result; 1023 1024 if (copy_from_user(&id, _id, sizeof(id))) 1025 return -EFAULT; 1026 down_write(&card->controls_rwsem); 1027 kctl = snd_ctl_find_id(card, &id); 1028 if (kctl == NULL) { 1029 result = -ENOENT; 1030 } else { 1031 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; 1032 if (vd->owner == NULL) 1033 result = -EINVAL; 1034 else if (vd->owner != file) 1035 result = -EPERM; 1036 else { 1037 vd->owner = NULL; 1038 result = 0; 1039 } 1040 } 1041 up_write(&card->controls_rwsem); 1042 return result; 1043 } 1044 1045 struct user_element { 1046 struct snd_ctl_elem_info info; 1047 struct snd_card *card; 1048 char *elem_data; /* element data */ 1049 unsigned long elem_data_size; /* size of element data in bytes */ 1050 void *tlv_data; /* TLV data */ 1051 unsigned long tlv_data_size; /* TLV data size */ 1052 void *priv_data; /* private data (like strings for enumerated type) */ 1053 }; 1054 1055 static int snd_ctl_elem_user_info(struct snd_kcontrol *kcontrol, 1056 struct snd_ctl_elem_info *uinfo) 1057 { 1058 struct user_element *ue = kcontrol->private_data; 1059 unsigned int offset; 1060 1061 offset = snd_ctl_get_ioff(kcontrol, &uinfo->id); 1062 *uinfo = ue->info; 1063 snd_ctl_build_ioff(&uinfo->id, kcontrol, offset); 1064 1065 return 0; 1066 } 1067 1068 static int snd_ctl_elem_user_enum_info(struct snd_kcontrol *kcontrol, 1069 struct snd_ctl_elem_info *uinfo) 1070 { 1071 struct user_element *ue = kcontrol->private_data; 1072 const char *names; 1073 unsigned int item; 1074 unsigned int offset; 1075 1076 item = uinfo->value.enumerated.item; 1077 1078 offset = snd_ctl_get_ioff(kcontrol, &uinfo->id); 1079 *uinfo = ue->info; 1080 snd_ctl_build_ioff(&uinfo->id, kcontrol, offset); 1081 1082 item = min(item, uinfo->value.enumerated.items - 1); 1083 uinfo->value.enumerated.item = item; 1084 1085 names = ue->priv_data; 1086 for (; item > 0; --item) 1087 names += strlen(names) + 1; 1088 strcpy(uinfo->value.enumerated.name, names); 1089 1090 return 0; 1091 } 1092 1093 static int snd_ctl_elem_user_get(struct snd_kcontrol *kcontrol, 1094 struct snd_ctl_elem_value *ucontrol) 1095 { 1096 struct user_element *ue = kcontrol->private_data; 1097 unsigned int size = ue->elem_data_size; 1098 char *src = ue->elem_data + 1099 snd_ctl_get_ioff(kcontrol, &ucontrol->id) * size; 1100 1101 memcpy(&ucontrol->value, src, size); 1102 return 0; 1103 } 1104 1105 static int snd_ctl_elem_user_put(struct snd_kcontrol *kcontrol, 1106 struct snd_ctl_elem_value *ucontrol) 1107 { 1108 int change; 1109 struct user_element *ue = kcontrol->private_data; 1110 unsigned int size = ue->elem_data_size; 1111 char *dst = ue->elem_data + 1112 snd_ctl_get_ioff(kcontrol, &ucontrol->id) * size; 1113 1114 change = memcmp(&ucontrol->value, dst, size) != 0; 1115 if (change) 1116 memcpy(dst, &ucontrol->value, size); 1117 return change; 1118 } 1119 1120 static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, 1121 unsigned int size) 1122 { 1123 struct user_element *ue = kctl->private_data; 1124 unsigned int *container; 1125 struct snd_ctl_elem_id id; 1126 unsigned int mask = 0; 1127 int i; 1128 int change; 1129 1130 if (size > 1024 * 128) /* sane value */ 1131 return -EINVAL; 1132 1133 container = vmemdup_user(buf, size); 1134 if (IS_ERR(container)) 1135 return PTR_ERR(container); 1136 1137 change = ue->tlv_data_size != size; 1138 if (!change) 1139 change = memcmp(ue->tlv_data, container, size) != 0; 1140 if (!change) { 1141 kvfree(container); 1142 return 0; 1143 } 1144 1145 if (ue->tlv_data == NULL) { 1146 /* Now TLV data is available. */ 1147 for (i = 0; i < kctl->count; ++i) 1148 kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; 1149 mask = SNDRV_CTL_EVENT_MASK_INFO; 1150 } 1151 1152 kvfree(ue->tlv_data); 1153 ue->tlv_data = container; 1154 ue->tlv_data_size = size; 1155 1156 mask |= SNDRV_CTL_EVENT_MASK_TLV; 1157 for (i = 0; i < kctl->count; ++i) { 1158 snd_ctl_build_ioff(&id, kctl, i); 1159 snd_ctl_notify(ue->card, mask, &id); 1160 } 1161 1162 return change; 1163 } 1164 1165 static int read_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, 1166 unsigned int size) 1167 { 1168 struct user_element *ue = kctl->private_data; 1169 1170 if (ue->tlv_data_size == 0 || ue->tlv_data == NULL) 1171 return -ENXIO; 1172 1173 if (size < ue->tlv_data_size) 1174 return -ENOSPC; 1175 1176 if (copy_to_user(buf, ue->tlv_data, ue->tlv_data_size)) 1177 return -EFAULT; 1178 1179 return 0; 1180 } 1181 1182 static int snd_ctl_elem_user_tlv(struct snd_kcontrol *kctl, int op_flag, 1183 unsigned int size, unsigned int __user *buf) 1184 { 1185 if (op_flag == SNDRV_CTL_TLV_OP_WRITE) 1186 return replace_user_tlv(kctl, buf, size); 1187 else 1188 return read_user_tlv(kctl, buf, size); 1189 } 1190 1191 static int snd_ctl_elem_init_enum_names(struct user_element *ue) 1192 { 1193 char *names, *p; 1194 size_t buf_len, name_len; 1195 unsigned int i; 1196 const uintptr_t user_ptrval = ue->info.value.enumerated.names_ptr; 1197 1198 if (ue->info.value.enumerated.names_length > 64 * 1024) 1199 return -EINVAL; 1200 1201 names = vmemdup_user((const void __user *)user_ptrval, 1202 ue->info.value.enumerated.names_length); 1203 if (IS_ERR(names)) 1204 return PTR_ERR(names); 1205 1206 /* check that there are enough valid names */ 1207 buf_len = ue->info.value.enumerated.names_length; 1208 p = names; 1209 for (i = 0; i < ue->info.value.enumerated.items; ++i) { 1210 name_len = strnlen(p, buf_len); 1211 if (name_len == 0 || name_len >= 64 || name_len == buf_len) { 1212 kvfree(names); 1213 return -EINVAL; 1214 } 1215 p += name_len + 1; 1216 buf_len -= name_len + 1; 1217 } 1218 1219 ue->priv_data = names; 1220 ue->info.value.enumerated.names_ptr = 0; 1221 1222 return 0; 1223 } 1224 1225 static void snd_ctl_elem_user_free(struct snd_kcontrol *kcontrol) 1226 { 1227 struct user_element *ue = kcontrol->private_data; 1228 1229 kvfree(ue->tlv_data); 1230 kvfree(ue->priv_data); 1231 kfree(ue); 1232 } 1233 1234 static int snd_ctl_elem_add(struct snd_ctl_file *file, 1235 struct snd_ctl_elem_info *info, int replace) 1236 { 1237 /* The capacity of struct snd_ctl_elem_value.value.*/ 1238 static const unsigned int value_sizes[] = { 1239 [SNDRV_CTL_ELEM_TYPE_BOOLEAN] = sizeof(long), 1240 [SNDRV_CTL_ELEM_TYPE_INTEGER] = sizeof(long), 1241 [SNDRV_CTL_ELEM_TYPE_ENUMERATED] = sizeof(unsigned int), 1242 [SNDRV_CTL_ELEM_TYPE_BYTES] = sizeof(unsigned char), 1243 [SNDRV_CTL_ELEM_TYPE_IEC958] = sizeof(struct snd_aes_iec958), 1244 [SNDRV_CTL_ELEM_TYPE_INTEGER64] = sizeof(long long), 1245 }; 1246 static const unsigned int max_value_counts[] = { 1247 [SNDRV_CTL_ELEM_TYPE_BOOLEAN] = 128, 1248 [SNDRV_CTL_ELEM_TYPE_INTEGER] = 128, 1249 [SNDRV_CTL_ELEM_TYPE_ENUMERATED] = 128, 1250 [SNDRV_CTL_ELEM_TYPE_BYTES] = 512, 1251 [SNDRV_CTL_ELEM_TYPE_IEC958] = 1, 1252 [SNDRV_CTL_ELEM_TYPE_INTEGER64] = 64, 1253 }; 1254 struct snd_card *card = file->card; 1255 struct snd_kcontrol *kctl; 1256 unsigned int count; 1257 unsigned int access; 1258 long private_size; 1259 struct user_element *ue; 1260 unsigned int offset; 1261 int err; 1262 1263 if (!*info->id.name) 1264 return -EINVAL; 1265 if (strnlen(info->id.name, sizeof(info->id.name)) >= sizeof(info->id.name)) 1266 return -EINVAL; 1267 1268 /* Delete a control to replace them if needed. */ 1269 if (replace) { 1270 info->id.numid = 0; 1271 err = snd_ctl_remove_user_ctl(file, &info->id); 1272 if (err) 1273 return err; 1274 } 1275 1276 /* 1277 * The number of userspace controls are counted control by control, 1278 * not element by element. 1279 */ 1280 if (card->user_ctl_count + 1 > MAX_USER_CONTROLS) 1281 return -ENOMEM; 1282 1283 /* Check the number of elements for this userspace control. */ 1284 count = info->owner; 1285 if (count == 0) 1286 count = 1; 1287 1288 /* Arrange access permissions if needed. */ 1289 access = info->access; 1290 if (access == 0) 1291 access = SNDRV_CTL_ELEM_ACCESS_READWRITE; 1292 access &= (SNDRV_CTL_ELEM_ACCESS_READWRITE | 1293 SNDRV_CTL_ELEM_ACCESS_INACTIVE | 1294 SNDRV_CTL_ELEM_ACCESS_TLV_WRITE); 1295 1296 /* In initial state, nothing is available as TLV container. */ 1297 if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) 1298 access |= SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK; 1299 access |= SNDRV_CTL_ELEM_ACCESS_USER; 1300 1301 /* 1302 * Check information and calculate the size of data specific to 1303 * this userspace control. 1304 */ 1305 if (info->type < SNDRV_CTL_ELEM_TYPE_BOOLEAN || 1306 info->type > SNDRV_CTL_ELEM_TYPE_INTEGER64) 1307 return -EINVAL; 1308 if (info->type == SNDRV_CTL_ELEM_TYPE_ENUMERATED && 1309 info->value.enumerated.items == 0) 1310 return -EINVAL; 1311 if (info->count < 1 || 1312 info->count > max_value_counts[info->type]) 1313 return -EINVAL; 1314 if (!validate_element_member_dimension(info)) 1315 return -EINVAL; 1316 private_size = value_sizes[info->type] * info->count; 1317 1318 /* 1319 * Keep memory object for this userspace control. After passing this 1320 * code block, the instance should be freed by snd_ctl_free_one(). 1321 * 1322 * Note that these elements in this control are locked. 1323 */ 1324 err = snd_ctl_new(&kctl, count, access, file); 1325 if (err < 0) 1326 return err; 1327 memcpy(&kctl->id, &info->id, sizeof(kctl->id)); 1328 kctl->private_data = kzalloc(sizeof(struct user_element) + private_size * count, 1329 GFP_KERNEL); 1330 if (kctl->private_data == NULL) { 1331 kfree(kctl); 1332 return -ENOMEM; 1333 } 1334 kctl->private_free = snd_ctl_elem_user_free; 1335 1336 /* Set private data for this userspace control. */ 1337 ue = (struct user_element *)kctl->private_data; 1338 ue->card = card; 1339 ue->info = *info; 1340 ue->info.access = 0; 1341 ue->elem_data = (char *)ue + sizeof(*ue); 1342 ue->elem_data_size = private_size; 1343 if (ue->info.type == SNDRV_CTL_ELEM_TYPE_ENUMERATED) { 1344 err = snd_ctl_elem_init_enum_names(ue); 1345 if (err < 0) { 1346 snd_ctl_free_one(kctl); 1347 return err; 1348 } 1349 } 1350 1351 /* Set callback functions. */ 1352 if (info->type == SNDRV_CTL_ELEM_TYPE_ENUMERATED) 1353 kctl->info = snd_ctl_elem_user_enum_info; 1354 else 1355 kctl->info = snd_ctl_elem_user_info; 1356 if (access & SNDRV_CTL_ELEM_ACCESS_READ) 1357 kctl->get = snd_ctl_elem_user_get; 1358 if (access & SNDRV_CTL_ELEM_ACCESS_WRITE) 1359 kctl->put = snd_ctl_elem_user_put; 1360 if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE) 1361 kctl->tlv.c = snd_ctl_elem_user_tlv; 1362 1363 /* This function manage to free the instance on failure. */ 1364 err = snd_ctl_add(card, kctl); 1365 if (err < 0) 1366 return err; 1367 offset = snd_ctl_get_ioff(kctl, &info->id); 1368 snd_ctl_build_ioff(&info->id, kctl, offset); 1369 /* 1370 * Here we cannot fill any field for the number of elements added by 1371 * this operation because there're no specific fields. The usage of 1372 * 'owner' field for this purpose may cause any bugs to userspace 1373 * applications because the field originally means PID of a process 1374 * which locks the element. 1375 */ 1376 1377 down_write(&card->controls_rwsem); 1378 card->user_ctl_count++; 1379 up_write(&card->controls_rwsem); 1380 1381 return 0; 1382 } 1383 1384 static int snd_ctl_elem_add_user(struct snd_ctl_file *file, 1385 struct snd_ctl_elem_info __user *_info, int replace) 1386 { 1387 struct snd_ctl_elem_info info; 1388 int err; 1389 1390 if (copy_from_user(&info, _info, sizeof(info))) 1391 return -EFAULT; 1392 err = snd_ctl_elem_add(file, &info, replace); 1393 if (err < 0) 1394 return err; 1395 if (copy_to_user(_info, &info, sizeof(info))) { 1396 snd_ctl_remove_user_ctl(file, &info.id); 1397 return -EFAULT; 1398 } 1399 1400 return 0; 1401 } 1402 1403 static int snd_ctl_elem_remove(struct snd_ctl_file *file, 1404 struct snd_ctl_elem_id __user *_id) 1405 { 1406 struct snd_ctl_elem_id id; 1407 1408 if (copy_from_user(&id, _id, sizeof(id))) 1409 return -EFAULT; 1410 return snd_ctl_remove_user_ctl(file, &id); 1411 } 1412 1413 static int snd_ctl_subscribe_events(struct snd_ctl_file *file, int __user *ptr) 1414 { 1415 int subscribe; 1416 if (get_user(subscribe, ptr)) 1417 return -EFAULT; 1418 if (subscribe < 0) { 1419 subscribe = file->subscribed; 1420 if (put_user(subscribe, ptr)) 1421 return -EFAULT; 1422 return 0; 1423 } 1424 if (subscribe) { 1425 file->subscribed = 1; 1426 return 0; 1427 } else if (file->subscribed) { 1428 snd_ctl_empty_read_queue(file); 1429 file->subscribed = 0; 1430 } 1431 return 0; 1432 } 1433 1434 static int call_tlv_handler(struct snd_ctl_file *file, int op_flag, 1435 struct snd_kcontrol *kctl, 1436 struct snd_ctl_elem_id *id, 1437 unsigned int __user *buf, unsigned int size) 1438 { 1439 static const struct { 1440 int op; 1441 int perm; 1442 } pairs[] = { 1443 {SNDRV_CTL_TLV_OP_READ, SNDRV_CTL_ELEM_ACCESS_TLV_READ}, 1444 {SNDRV_CTL_TLV_OP_WRITE, SNDRV_CTL_ELEM_ACCESS_TLV_WRITE}, 1445 {SNDRV_CTL_TLV_OP_CMD, SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND}, 1446 }; 1447 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; 1448 int i; 1449 1450 /* Check support of the request for this element. */ 1451 for (i = 0; i < ARRAY_SIZE(pairs); ++i) { 1452 if (op_flag == pairs[i].op && (vd->access & pairs[i].perm)) 1453 break; 1454 } 1455 if (i == ARRAY_SIZE(pairs)) 1456 return -ENXIO; 1457 1458 if (kctl->tlv.c == NULL) 1459 return -ENXIO; 1460 1461 /* When locked, this is unavailable. */ 1462 if (vd->owner != NULL && vd->owner != file) 1463 return -EPERM; 1464 1465 return kctl->tlv.c(kctl, op_flag, size, buf); 1466 } 1467 1468 static int read_tlv_buf(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id, 1469 unsigned int __user *buf, unsigned int size) 1470 { 1471 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; 1472 unsigned int len; 1473 1474 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)) 1475 return -ENXIO; 1476 1477 if (kctl->tlv.p == NULL) 1478 return -ENXIO; 1479 1480 len = sizeof(unsigned int) * 2 + kctl->tlv.p[1]; 1481 if (size < len) 1482 return -ENOMEM; 1483 1484 if (copy_to_user(buf, kctl->tlv.p, len)) 1485 return -EFAULT; 1486 1487 return 0; 1488 } 1489 1490 static int snd_ctl_tlv_ioctl(struct snd_ctl_file *file, 1491 struct snd_ctl_tlv __user *buf, 1492 int op_flag) 1493 { 1494 struct snd_ctl_tlv header; 1495 unsigned int *container; 1496 unsigned int container_size; 1497 struct snd_kcontrol *kctl; 1498 struct snd_ctl_elem_id id; 1499 struct snd_kcontrol_volatile *vd; 1500 1501 if (copy_from_user(&header, buf, sizeof(header))) 1502 return -EFAULT; 1503 1504 /* In design of control core, numerical ID starts at 1. */ 1505 if (header.numid == 0) 1506 return -EINVAL; 1507 1508 /* At least, container should include type and length fields. */ 1509 if (header.length < sizeof(unsigned int) * 2) 1510 return -EINVAL; 1511 container_size = header.length; 1512 container = buf->tlv; 1513 1514 kctl = snd_ctl_find_numid(file->card, header.numid); 1515 if (kctl == NULL) 1516 return -ENOENT; 1517 1518 /* Calculate index of the element in this set. */ 1519 id = kctl->id; 1520 snd_ctl_build_ioff(&id, kctl, header.numid - id.numid); 1521 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; 1522 1523 if (vd->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) { 1524 return call_tlv_handler(file, op_flag, kctl, &id, container, 1525 container_size); 1526 } else { 1527 if (op_flag == SNDRV_CTL_TLV_OP_READ) { 1528 return read_tlv_buf(kctl, &id, container, 1529 container_size); 1530 } 1531 } 1532 1533 /* Not supported. */ 1534 return -ENXIO; 1535 } 1536 1537 static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 1538 { 1539 struct snd_ctl_file *ctl; 1540 struct snd_card *card; 1541 struct snd_kctl_ioctl *p; 1542 void __user *argp = (void __user *)arg; 1543 int __user *ip = argp; 1544 int err; 1545 1546 ctl = file->private_data; 1547 card = ctl->card; 1548 if (snd_BUG_ON(!card)) 1549 return -ENXIO; 1550 switch (cmd) { 1551 case SNDRV_CTL_IOCTL_PVERSION: 1552 return put_user(SNDRV_CTL_VERSION, ip) ? -EFAULT : 0; 1553 case SNDRV_CTL_IOCTL_CARD_INFO: 1554 return snd_ctl_card_info(card, ctl, cmd, argp); 1555 case SNDRV_CTL_IOCTL_ELEM_LIST: 1556 return snd_ctl_elem_list(card, argp); 1557 case SNDRV_CTL_IOCTL_ELEM_INFO: 1558 return snd_ctl_elem_info_user(ctl, argp); 1559 case SNDRV_CTL_IOCTL_ELEM_READ: 1560 return snd_ctl_elem_read_user(card, argp); 1561 case SNDRV_CTL_IOCTL_ELEM_WRITE: 1562 return snd_ctl_elem_write_user(ctl, argp); 1563 case SNDRV_CTL_IOCTL_ELEM_LOCK: 1564 return snd_ctl_elem_lock(ctl, argp); 1565 case SNDRV_CTL_IOCTL_ELEM_UNLOCK: 1566 return snd_ctl_elem_unlock(ctl, argp); 1567 case SNDRV_CTL_IOCTL_ELEM_ADD: 1568 return snd_ctl_elem_add_user(ctl, argp, 0); 1569 case SNDRV_CTL_IOCTL_ELEM_REPLACE: 1570 return snd_ctl_elem_add_user(ctl, argp, 1); 1571 case SNDRV_CTL_IOCTL_ELEM_REMOVE: 1572 return snd_ctl_elem_remove(ctl, argp); 1573 case SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS: 1574 return snd_ctl_subscribe_events(ctl, ip); 1575 case SNDRV_CTL_IOCTL_TLV_READ: 1576 down_read(&ctl->card->controls_rwsem); 1577 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_READ); 1578 up_read(&ctl->card->controls_rwsem); 1579 return err; 1580 case SNDRV_CTL_IOCTL_TLV_WRITE: 1581 down_write(&ctl->card->controls_rwsem); 1582 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_WRITE); 1583 up_write(&ctl->card->controls_rwsem); 1584 return err; 1585 case SNDRV_CTL_IOCTL_TLV_COMMAND: 1586 down_write(&ctl->card->controls_rwsem); 1587 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_CMD); 1588 up_write(&ctl->card->controls_rwsem); 1589 return err; 1590 case SNDRV_CTL_IOCTL_POWER: 1591 return -ENOPROTOOPT; 1592 case SNDRV_CTL_IOCTL_POWER_STATE: 1593 #ifdef CONFIG_PM 1594 return put_user(card->power_state, ip) ? -EFAULT : 0; 1595 #else 1596 return put_user(SNDRV_CTL_POWER_D0, ip) ? -EFAULT : 0; 1597 #endif 1598 } 1599 down_read(&snd_ioctl_rwsem); 1600 list_for_each_entry(p, &snd_control_ioctls, list) { 1601 err = p->fioctl(card, ctl, cmd, arg); 1602 if (err != -ENOIOCTLCMD) { 1603 up_read(&snd_ioctl_rwsem); 1604 return err; 1605 } 1606 } 1607 up_read(&snd_ioctl_rwsem); 1608 dev_dbg(card->dev, "unknown ioctl = 0x%x\n", cmd); 1609 return -ENOTTY; 1610 } 1611 1612 static ssize_t snd_ctl_read(struct file *file, char __user *buffer, 1613 size_t count, loff_t * offset) 1614 { 1615 struct snd_ctl_file *ctl; 1616 int err = 0; 1617 ssize_t result = 0; 1618 1619 ctl = file->private_data; 1620 if (snd_BUG_ON(!ctl || !ctl->card)) 1621 return -ENXIO; 1622 if (!ctl->subscribed) 1623 return -EBADFD; 1624 if (count < sizeof(struct snd_ctl_event)) 1625 return -EINVAL; 1626 spin_lock_irq(&ctl->read_lock); 1627 while (count >= sizeof(struct snd_ctl_event)) { 1628 struct snd_ctl_event ev; 1629 struct snd_kctl_event *kev; 1630 while (list_empty(&ctl->events)) { 1631 wait_queue_entry_t wait; 1632 if ((file->f_flags & O_NONBLOCK) != 0 || result > 0) { 1633 err = -EAGAIN; 1634 goto __end_lock; 1635 } 1636 init_waitqueue_entry(&wait, current); 1637 add_wait_queue(&ctl->change_sleep, &wait); 1638 set_current_state(TASK_INTERRUPTIBLE); 1639 spin_unlock_irq(&ctl->read_lock); 1640 schedule(); 1641 remove_wait_queue(&ctl->change_sleep, &wait); 1642 if (ctl->card->shutdown) 1643 return -ENODEV; 1644 if (signal_pending(current)) 1645 return -ERESTARTSYS; 1646 spin_lock_irq(&ctl->read_lock); 1647 } 1648 kev = snd_kctl_event(ctl->events.next); 1649 ev.type = SNDRV_CTL_EVENT_ELEM; 1650 ev.data.elem.mask = kev->mask; 1651 ev.data.elem.id = kev->id; 1652 list_del(&kev->list); 1653 spin_unlock_irq(&ctl->read_lock); 1654 kfree(kev); 1655 if (copy_to_user(buffer, &ev, sizeof(struct snd_ctl_event))) { 1656 err = -EFAULT; 1657 goto __end; 1658 } 1659 spin_lock_irq(&ctl->read_lock); 1660 buffer += sizeof(struct snd_ctl_event); 1661 count -= sizeof(struct snd_ctl_event); 1662 result += sizeof(struct snd_ctl_event); 1663 } 1664 __end_lock: 1665 spin_unlock_irq(&ctl->read_lock); 1666 __end: 1667 return result > 0 ? result : err; 1668 } 1669 1670 static __poll_t snd_ctl_poll(struct file *file, poll_table * wait) 1671 { 1672 __poll_t mask; 1673 struct snd_ctl_file *ctl; 1674 1675 ctl = file->private_data; 1676 if (!ctl->subscribed) 1677 return 0; 1678 poll_wait(file, &ctl->change_sleep, wait); 1679 1680 mask = 0; 1681 if (!list_empty(&ctl->events)) 1682 mask |= EPOLLIN | EPOLLRDNORM; 1683 1684 return mask; 1685 } 1686 1687 /* 1688 * register the device-specific control-ioctls. 1689 * called from each device manager like pcm.c, hwdep.c, etc. 1690 */ 1691 static int _snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn, struct list_head *lists) 1692 { 1693 struct snd_kctl_ioctl *pn; 1694 1695 pn = kzalloc(sizeof(struct snd_kctl_ioctl), GFP_KERNEL); 1696 if (pn == NULL) 1697 return -ENOMEM; 1698 pn->fioctl = fcn; 1699 down_write(&snd_ioctl_rwsem); 1700 list_add_tail(&pn->list, lists); 1701 up_write(&snd_ioctl_rwsem); 1702 return 0; 1703 } 1704 1705 /** 1706 * snd_ctl_register_ioctl - register the device-specific control-ioctls 1707 * @fcn: ioctl callback function 1708 * 1709 * called from each device manager like pcm.c, hwdep.c, etc. 1710 */ 1711 int snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn) 1712 { 1713 return _snd_ctl_register_ioctl(fcn, &snd_control_ioctls); 1714 } 1715 EXPORT_SYMBOL(snd_ctl_register_ioctl); 1716 1717 #ifdef CONFIG_COMPAT 1718 /** 1719 * snd_ctl_register_ioctl_compat - register the device-specific 32bit compat 1720 * control-ioctls 1721 * @fcn: ioctl callback function 1722 */ 1723 int snd_ctl_register_ioctl_compat(snd_kctl_ioctl_func_t fcn) 1724 { 1725 return _snd_ctl_register_ioctl(fcn, &snd_control_compat_ioctls); 1726 } 1727 EXPORT_SYMBOL(snd_ctl_register_ioctl_compat); 1728 #endif 1729 1730 /* 1731 * de-register the device-specific control-ioctls. 1732 */ 1733 static int _snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn, 1734 struct list_head *lists) 1735 { 1736 struct snd_kctl_ioctl *p; 1737 1738 if (snd_BUG_ON(!fcn)) 1739 return -EINVAL; 1740 down_write(&snd_ioctl_rwsem); 1741 list_for_each_entry(p, lists, list) { 1742 if (p->fioctl == fcn) { 1743 list_del(&p->list); 1744 up_write(&snd_ioctl_rwsem); 1745 kfree(p); 1746 return 0; 1747 } 1748 } 1749 up_write(&snd_ioctl_rwsem); 1750 snd_BUG(); 1751 return -EINVAL; 1752 } 1753 1754 /** 1755 * snd_ctl_unregister_ioctl - de-register the device-specific control-ioctls 1756 * @fcn: ioctl callback function to unregister 1757 */ 1758 int snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn) 1759 { 1760 return _snd_ctl_unregister_ioctl(fcn, &snd_control_ioctls); 1761 } 1762 EXPORT_SYMBOL(snd_ctl_unregister_ioctl); 1763 1764 #ifdef CONFIG_COMPAT 1765 /** 1766 * snd_ctl_unregister_ioctl - de-register the device-specific compat 32bit 1767 * control-ioctls 1768 * @fcn: ioctl callback function to unregister 1769 */ 1770 int snd_ctl_unregister_ioctl_compat(snd_kctl_ioctl_func_t fcn) 1771 { 1772 return _snd_ctl_unregister_ioctl(fcn, &snd_control_compat_ioctls); 1773 } 1774 EXPORT_SYMBOL(snd_ctl_unregister_ioctl_compat); 1775 #endif 1776 1777 static int snd_ctl_fasync(int fd, struct file * file, int on) 1778 { 1779 struct snd_ctl_file *ctl; 1780 1781 ctl = file->private_data; 1782 return fasync_helper(fd, file, on, &ctl->fasync); 1783 } 1784 1785 /* return the preferred subdevice number if already assigned; 1786 * otherwise return -1 1787 */ 1788 int snd_ctl_get_preferred_subdevice(struct snd_card *card, int type) 1789 { 1790 struct snd_ctl_file *kctl; 1791 int subdevice = -1; 1792 1793 read_lock(&card->ctl_files_rwlock); 1794 list_for_each_entry(kctl, &card->ctl_files, list) { 1795 if (kctl->pid == task_pid(current)) { 1796 subdevice = kctl->preferred_subdevice[type]; 1797 if (subdevice != -1) 1798 break; 1799 } 1800 } 1801 read_unlock(&card->ctl_files_rwlock); 1802 return subdevice; 1803 } 1804 EXPORT_SYMBOL_GPL(snd_ctl_get_preferred_subdevice); 1805 1806 /* 1807 * ioctl32 compat 1808 */ 1809 #ifdef CONFIG_COMPAT 1810 #include "control_compat.c" 1811 #else 1812 #define snd_ctl_ioctl_compat NULL 1813 #endif 1814 1815 /* 1816 * INIT PART 1817 */ 1818 1819 static const struct file_operations snd_ctl_f_ops = 1820 { 1821 .owner = THIS_MODULE, 1822 .read = snd_ctl_read, 1823 .open = snd_ctl_open, 1824 .release = snd_ctl_release, 1825 .llseek = no_llseek, 1826 .poll = snd_ctl_poll, 1827 .unlocked_ioctl = snd_ctl_ioctl, 1828 .compat_ioctl = snd_ctl_ioctl_compat, 1829 .fasync = snd_ctl_fasync, 1830 }; 1831 1832 /* 1833 * registration of the control device 1834 */ 1835 static int snd_ctl_dev_register(struct snd_device *device) 1836 { 1837 struct snd_card *card = device->device_data; 1838 1839 return snd_register_device(SNDRV_DEVICE_TYPE_CONTROL, card, -1, 1840 &snd_ctl_f_ops, card, &card->ctl_dev); 1841 } 1842 1843 /* 1844 * disconnection of the control device 1845 */ 1846 static int snd_ctl_dev_disconnect(struct snd_device *device) 1847 { 1848 struct snd_card *card = device->device_data; 1849 struct snd_ctl_file *ctl; 1850 1851 read_lock(&card->ctl_files_rwlock); 1852 list_for_each_entry(ctl, &card->ctl_files, list) { 1853 wake_up(&ctl->change_sleep); 1854 kill_fasync(&ctl->fasync, SIGIO, POLL_ERR); 1855 } 1856 read_unlock(&card->ctl_files_rwlock); 1857 1858 return snd_unregister_device(&card->ctl_dev); 1859 } 1860 1861 /* 1862 * free all controls 1863 */ 1864 static int snd_ctl_dev_free(struct snd_device *device) 1865 { 1866 struct snd_card *card = device->device_data; 1867 struct snd_kcontrol *control; 1868 1869 down_write(&card->controls_rwsem); 1870 while (!list_empty(&card->controls)) { 1871 control = snd_kcontrol(card->controls.next); 1872 snd_ctl_remove(card, control); 1873 } 1874 up_write(&card->controls_rwsem); 1875 put_device(&card->ctl_dev); 1876 return 0; 1877 } 1878 1879 /* 1880 * create control core: 1881 * called from init.c 1882 */ 1883 int snd_ctl_create(struct snd_card *card) 1884 { 1885 static struct snd_device_ops ops = { 1886 .dev_free = snd_ctl_dev_free, 1887 .dev_register = snd_ctl_dev_register, 1888 .dev_disconnect = snd_ctl_dev_disconnect, 1889 }; 1890 int err; 1891 1892 if (snd_BUG_ON(!card)) 1893 return -ENXIO; 1894 if (snd_BUG_ON(card->number < 0 || card->number >= SNDRV_CARDS)) 1895 return -ENXIO; 1896 1897 snd_device_initialize(&card->ctl_dev, card); 1898 dev_set_name(&card->ctl_dev, "controlC%d", card->number); 1899 1900 err = snd_device_new(card, SNDRV_DEV_CONTROL, card, &ops); 1901 if (err < 0) 1902 put_device(&card->ctl_dev); 1903 return err; 1904 } 1905 1906 /* 1907 * Frequently used control callbacks/helpers 1908 */ 1909 1910 /** 1911 * snd_ctl_boolean_mono_info - Helper function for a standard boolean info 1912 * callback with a mono channel 1913 * @kcontrol: the kcontrol instance 1914 * @uinfo: info to store 1915 * 1916 * This is a function that can be used as info callback for a standard 1917 * boolean control with a single mono channel. 1918 */ 1919 int snd_ctl_boolean_mono_info(struct snd_kcontrol *kcontrol, 1920 struct snd_ctl_elem_info *uinfo) 1921 { 1922 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1923 uinfo->count = 1; 1924 uinfo->value.integer.min = 0; 1925 uinfo->value.integer.max = 1; 1926 return 0; 1927 } 1928 EXPORT_SYMBOL(snd_ctl_boolean_mono_info); 1929 1930 /** 1931 * snd_ctl_boolean_stereo_info - Helper function for a standard boolean info 1932 * callback with stereo two channels 1933 * @kcontrol: the kcontrol instance 1934 * @uinfo: info to store 1935 * 1936 * This is a function that can be used as info callback for a standard 1937 * boolean control with stereo two channels. 1938 */ 1939 int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, 1940 struct snd_ctl_elem_info *uinfo) 1941 { 1942 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; 1943 uinfo->count = 2; 1944 uinfo->value.integer.min = 0; 1945 uinfo->value.integer.max = 1; 1946 return 0; 1947 } 1948 EXPORT_SYMBOL(snd_ctl_boolean_stereo_info); 1949 1950 /** 1951 * snd_ctl_enum_info - fills the info structure for an enumerated control 1952 * @info: the structure to be filled 1953 * @channels: the number of the control's channels; often one 1954 * @items: the number of control values; also the size of @names 1955 * @names: an array containing the names of all control values 1956 * 1957 * Sets all required fields in @info to their appropriate values. 1958 * If the control's accessibility is not the default (readable and writable), 1959 * the caller has to fill @info->access. 1960 * 1961 * Return: Zero. 1962 */ 1963 int snd_ctl_enum_info(struct snd_ctl_elem_info *info, unsigned int channels, 1964 unsigned int items, const char *const names[]) 1965 { 1966 info->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; 1967 info->count = channels; 1968 info->value.enumerated.items = items; 1969 if (!items) 1970 return 0; 1971 if (info->value.enumerated.item >= items) 1972 info->value.enumerated.item = items - 1; 1973 WARN(strlen(names[info->value.enumerated.item]) >= sizeof(info->value.enumerated.name), 1974 "ALSA: too long item name '%s'\n", 1975 names[info->value.enumerated.item]); 1976 strlcpy(info->value.enumerated.name, 1977 names[info->value.enumerated.item], 1978 sizeof(info->value.enumerated.name)); 1979 return 0; 1980 } 1981 EXPORT_SYMBOL(snd_ctl_enum_info); 1982