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