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