1 /* 2 * Digital Audio (PCM) abstract layer 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/init.h> 23 #include <linux/slab.h> 24 #include <linux/module.h> 25 #include <linux/time.h> 26 #include <linux/mutex.h> 27 #include <linux/device.h> 28 #include <sound/core.h> 29 #include <sound/minors.h> 30 #include <sound/pcm.h> 31 #include <sound/control.h> 32 #include <sound/info.h> 33 34 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, Abramo Bagnara <abramo@alsa-project.org>"); 35 MODULE_DESCRIPTION("Midlevel PCM code for ALSA."); 36 MODULE_LICENSE("GPL"); 37 38 static LIST_HEAD(snd_pcm_devices); 39 static LIST_HEAD(snd_pcm_notify_list); 40 static DEFINE_MUTEX(register_mutex); 41 42 static int snd_pcm_free(struct snd_pcm *pcm); 43 static int snd_pcm_dev_free(struct snd_device *device); 44 static int snd_pcm_dev_register(struct snd_device *device); 45 static int snd_pcm_dev_disconnect(struct snd_device *device); 46 47 static struct snd_pcm *snd_pcm_get(struct snd_card *card, int device) 48 { 49 struct snd_pcm *pcm; 50 51 list_for_each_entry(pcm, &snd_pcm_devices, list) { 52 if (pcm->internal) 53 continue; 54 if (pcm->card == card && pcm->device == device) 55 return pcm; 56 } 57 return NULL; 58 } 59 60 static int snd_pcm_next(struct snd_card *card, int device) 61 { 62 struct snd_pcm *pcm; 63 64 list_for_each_entry(pcm, &snd_pcm_devices, list) { 65 if (pcm->internal) 66 continue; 67 if (pcm->card == card && pcm->device > device) 68 return pcm->device; 69 else if (pcm->card->number > card->number) 70 return -1; 71 } 72 return -1; 73 } 74 75 static int snd_pcm_add(struct snd_pcm *newpcm) 76 { 77 struct snd_pcm *pcm; 78 79 list_for_each_entry(pcm, &snd_pcm_devices, list) { 80 if (pcm->card == newpcm->card && pcm->device == newpcm->device) 81 return -EBUSY; 82 if (pcm->card->number > newpcm->card->number || 83 (pcm->card == newpcm->card && 84 pcm->device > newpcm->device)) { 85 list_add(&newpcm->list, pcm->list.prev); 86 return 0; 87 } 88 } 89 list_add_tail(&newpcm->list, &snd_pcm_devices); 90 return 0; 91 } 92 93 static int snd_pcm_control_ioctl(struct snd_card *card, 94 struct snd_ctl_file *control, 95 unsigned int cmd, unsigned long arg) 96 { 97 switch (cmd) { 98 case SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE: 99 { 100 int device; 101 102 if (get_user(device, (int __user *)arg)) 103 return -EFAULT; 104 mutex_lock(®ister_mutex); 105 device = snd_pcm_next(card, device); 106 mutex_unlock(®ister_mutex); 107 if (put_user(device, (int __user *)arg)) 108 return -EFAULT; 109 return 0; 110 } 111 case SNDRV_CTL_IOCTL_PCM_INFO: 112 { 113 struct snd_pcm_info __user *info; 114 unsigned int device, subdevice; 115 int stream; 116 struct snd_pcm *pcm; 117 struct snd_pcm_str *pstr; 118 struct snd_pcm_substream *substream; 119 int err; 120 121 info = (struct snd_pcm_info __user *)arg; 122 if (get_user(device, &info->device)) 123 return -EFAULT; 124 if (get_user(stream, &info->stream)) 125 return -EFAULT; 126 if (stream < 0 || stream > 1) 127 return -EINVAL; 128 if (get_user(subdevice, &info->subdevice)) 129 return -EFAULT; 130 mutex_lock(®ister_mutex); 131 pcm = snd_pcm_get(card, device); 132 if (pcm == NULL) { 133 err = -ENXIO; 134 goto _error; 135 } 136 pstr = &pcm->streams[stream]; 137 if (pstr->substream_count == 0) { 138 err = -ENOENT; 139 goto _error; 140 } 141 if (subdevice >= pstr->substream_count) { 142 err = -ENXIO; 143 goto _error; 144 } 145 for (substream = pstr->substream; substream; 146 substream = substream->next) 147 if (substream->number == (int)subdevice) 148 break; 149 if (substream == NULL) { 150 err = -ENXIO; 151 goto _error; 152 } 153 err = snd_pcm_info_user(substream, info); 154 _error: 155 mutex_unlock(®ister_mutex); 156 return err; 157 } 158 case SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE: 159 { 160 int val; 161 162 if (get_user(val, (int __user *)arg)) 163 return -EFAULT; 164 control->prefer_pcm_subdevice = val; 165 return 0; 166 } 167 } 168 return -ENOIOCTLCMD; 169 } 170 171 #define FORMAT(v) [SNDRV_PCM_FORMAT_##v] = #v 172 173 static char *snd_pcm_format_names[] = { 174 FORMAT(S8), 175 FORMAT(U8), 176 FORMAT(S16_LE), 177 FORMAT(S16_BE), 178 FORMAT(U16_LE), 179 FORMAT(U16_BE), 180 FORMAT(S24_LE), 181 FORMAT(S24_BE), 182 FORMAT(U24_LE), 183 FORMAT(U24_BE), 184 FORMAT(S32_LE), 185 FORMAT(S32_BE), 186 FORMAT(U32_LE), 187 FORMAT(U32_BE), 188 FORMAT(FLOAT_LE), 189 FORMAT(FLOAT_BE), 190 FORMAT(FLOAT64_LE), 191 FORMAT(FLOAT64_BE), 192 FORMAT(IEC958_SUBFRAME_LE), 193 FORMAT(IEC958_SUBFRAME_BE), 194 FORMAT(MU_LAW), 195 FORMAT(A_LAW), 196 FORMAT(IMA_ADPCM), 197 FORMAT(MPEG), 198 FORMAT(GSM), 199 FORMAT(SPECIAL), 200 FORMAT(S24_3LE), 201 FORMAT(S24_3BE), 202 FORMAT(U24_3LE), 203 FORMAT(U24_3BE), 204 FORMAT(S20_3LE), 205 FORMAT(S20_3BE), 206 FORMAT(U20_3LE), 207 FORMAT(U20_3BE), 208 FORMAT(S18_3LE), 209 FORMAT(S18_3BE), 210 FORMAT(U18_3LE), 211 FORMAT(U18_3BE), 212 FORMAT(G723_24), 213 FORMAT(G723_24_1B), 214 FORMAT(G723_40), 215 FORMAT(G723_40_1B), 216 FORMAT(DSD_U8), 217 FORMAT(DSD_U16_LE), 218 }; 219 220 const char *snd_pcm_format_name(snd_pcm_format_t format) 221 { 222 if ((__force unsigned int)format >= ARRAY_SIZE(snd_pcm_format_names)) 223 return "Unknown"; 224 return snd_pcm_format_names[(__force unsigned int)format]; 225 } 226 EXPORT_SYMBOL_GPL(snd_pcm_format_name); 227 228 #ifdef CONFIG_SND_VERBOSE_PROCFS 229 230 #define STATE(v) [SNDRV_PCM_STATE_##v] = #v 231 #define STREAM(v) [SNDRV_PCM_STREAM_##v] = #v 232 #define READY(v) [SNDRV_PCM_READY_##v] = #v 233 #define XRUN(v) [SNDRV_PCM_XRUN_##v] = #v 234 #define SILENCE(v) [SNDRV_PCM_SILENCE_##v] = #v 235 #define TSTAMP(v) [SNDRV_PCM_TSTAMP_##v] = #v 236 #define ACCESS(v) [SNDRV_PCM_ACCESS_##v] = #v 237 #define START(v) [SNDRV_PCM_START_##v] = #v 238 #define SUBFORMAT(v) [SNDRV_PCM_SUBFORMAT_##v] = #v 239 240 static char *snd_pcm_stream_names[] = { 241 STREAM(PLAYBACK), 242 STREAM(CAPTURE), 243 }; 244 245 static char *snd_pcm_state_names[] = { 246 STATE(OPEN), 247 STATE(SETUP), 248 STATE(PREPARED), 249 STATE(RUNNING), 250 STATE(XRUN), 251 STATE(DRAINING), 252 STATE(PAUSED), 253 STATE(SUSPENDED), 254 }; 255 256 static char *snd_pcm_access_names[] = { 257 ACCESS(MMAP_INTERLEAVED), 258 ACCESS(MMAP_NONINTERLEAVED), 259 ACCESS(MMAP_COMPLEX), 260 ACCESS(RW_INTERLEAVED), 261 ACCESS(RW_NONINTERLEAVED), 262 }; 263 264 static char *snd_pcm_subformat_names[] = { 265 SUBFORMAT(STD), 266 }; 267 268 static char *snd_pcm_tstamp_mode_names[] = { 269 TSTAMP(NONE), 270 TSTAMP(ENABLE), 271 }; 272 273 static const char *snd_pcm_stream_name(int stream) 274 { 275 return snd_pcm_stream_names[stream]; 276 } 277 278 static const char *snd_pcm_access_name(snd_pcm_access_t access) 279 { 280 return snd_pcm_access_names[(__force int)access]; 281 } 282 283 static const char *snd_pcm_subformat_name(snd_pcm_subformat_t subformat) 284 { 285 return snd_pcm_subformat_names[(__force int)subformat]; 286 } 287 288 static const char *snd_pcm_tstamp_mode_name(int mode) 289 { 290 return snd_pcm_tstamp_mode_names[mode]; 291 } 292 293 static const char *snd_pcm_state_name(snd_pcm_state_t state) 294 { 295 return snd_pcm_state_names[(__force int)state]; 296 } 297 298 #if IS_ENABLED(CONFIG_SND_PCM_OSS) 299 #include <linux/soundcard.h> 300 301 static const char *snd_pcm_oss_format_name(int format) 302 { 303 switch (format) { 304 case AFMT_MU_LAW: 305 return "MU_LAW"; 306 case AFMT_A_LAW: 307 return "A_LAW"; 308 case AFMT_IMA_ADPCM: 309 return "IMA_ADPCM"; 310 case AFMT_U8: 311 return "U8"; 312 case AFMT_S16_LE: 313 return "S16_LE"; 314 case AFMT_S16_BE: 315 return "S16_BE"; 316 case AFMT_S8: 317 return "S8"; 318 case AFMT_U16_LE: 319 return "U16_LE"; 320 case AFMT_U16_BE: 321 return "U16_BE"; 322 case AFMT_MPEG: 323 return "MPEG"; 324 default: 325 return "unknown"; 326 } 327 } 328 #endif 329 330 static void snd_pcm_proc_info_read(struct snd_pcm_substream *substream, 331 struct snd_info_buffer *buffer) 332 { 333 struct snd_pcm_info *info; 334 int err; 335 336 if (! substream) 337 return; 338 339 info = kmalloc(sizeof(*info), GFP_KERNEL); 340 if (! info) { 341 pcm_dbg(substream->pcm, 342 "snd_pcm_proc_info_read: cannot malloc\n"); 343 return; 344 } 345 346 err = snd_pcm_info(substream, info); 347 if (err < 0) { 348 snd_iprintf(buffer, "error %d\n", err); 349 kfree(info); 350 return; 351 } 352 snd_iprintf(buffer, "card: %d\n", info->card); 353 snd_iprintf(buffer, "device: %d\n", info->device); 354 snd_iprintf(buffer, "subdevice: %d\n", info->subdevice); 355 snd_iprintf(buffer, "stream: %s\n", snd_pcm_stream_name(info->stream)); 356 snd_iprintf(buffer, "id: %s\n", info->id); 357 snd_iprintf(buffer, "name: %s\n", info->name); 358 snd_iprintf(buffer, "subname: %s\n", info->subname); 359 snd_iprintf(buffer, "class: %d\n", info->dev_class); 360 snd_iprintf(buffer, "subclass: %d\n", info->dev_subclass); 361 snd_iprintf(buffer, "subdevices_count: %d\n", info->subdevices_count); 362 snd_iprintf(buffer, "subdevices_avail: %d\n", info->subdevices_avail); 363 kfree(info); 364 } 365 366 static void snd_pcm_stream_proc_info_read(struct snd_info_entry *entry, 367 struct snd_info_buffer *buffer) 368 { 369 snd_pcm_proc_info_read(((struct snd_pcm_str *)entry->private_data)->substream, 370 buffer); 371 } 372 373 static void snd_pcm_substream_proc_info_read(struct snd_info_entry *entry, 374 struct snd_info_buffer *buffer) 375 { 376 snd_pcm_proc_info_read(entry->private_data, buffer); 377 } 378 379 static void snd_pcm_substream_proc_hw_params_read(struct snd_info_entry *entry, 380 struct snd_info_buffer *buffer) 381 { 382 struct snd_pcm_substream *substream = entry->private_data; 383 struct snd_pcm_runtime *runtime; 384 385 mutex_lock(&substream->pcm->open_mutex); 386 runtime = substream->runtime; 387 if (!runtime) { 388 snd_iprintf(buffer, "closed\n"); 389 goto unlock; 390 } 391 if (runtime->status->state == SNDRV_PCM_STATE_OPEN) { 392 snd_iprintf(buffer, "no setup\n"); 393 goto unlock; 394 } 395 snd_iprintf(buffer, "access: %s\n", snd_pcm_access_name(runtime->access)); 396 snd_iprintf(buffer, "format: %s\n", snd_pcm_format_name(runtime->format)); 397 snd_iprintf(buffer, "subformat: %s\n", snd_pcm_subformat_name(runtime->subformat)); 398 snd_iprintf(buffer, "channels: %u\n", runtime->channels); 399 snd_iprintf(buffer, "rate: %u (%u/%u)\n", runtime->rate, runtime->rate_num, runtime->rate_den); 400 snd_iprintf(buffer, "period_size: %lu\n", runtime->period_size); 401 snd_iprintf(buffer, "buffer_size: %lu\n", runtime->buffer_size); 402 #if IS_ENABLED(CONFIG_SND_PCM_OSS) 403 if (substream->oss.oss) { 404 snd_iprintf(buffer, "OSS format: %s\n", snd_pcm_oss_format_name(runtime->oss.format)); 405 snd_iprintf(buffer, "OSS channels: %u\n", runtime->oss.channels); 406 snd_iprintf(buffer, "OSS rate: %u\n", runtime->oss.rate); 407 snd_iprintf(buffer, "OSS period bytes: %lu\n", (unsigned long)runtime->oss.period_bytes); 408 snd_iprintf(buffer, "OSS periods: %u\n", runtime->oss.periods); 409 snd_iprintf(buffer, "OSS period frames: %lu\n", (unsigned long)runtime->oss.period_frames); 410 } 411 #endif 412 unlock: 413 mutex_unlock(&substream->pcm->open_mutex); 414 } 415 416 static void snd_pcm_substream_proc_sw_params_read(struct snd_info_entry *entry, 417 struct snd_info_buffer *buffer) 418 { 419 struct snd_pcm_substream *substream = entry->private_data; 420 struct snd_pcm_runtime *runtime; 421 422 mutex_lock(&substream->pcm->open_mutex); 423 runtime = substream->runtime; 424 if (!runtime) { 425 snd_iprintf(buffer, "closed\n"); 426 goto unlock; 427 } 428 if (runtime->status->state == SNDRV_PCM_STATE_OPEN) { 429 snd_iprintf(buffer, "no setup\n"); 430 goto unlock; 431 } 432 snd_iprintf(buffer, "tstamp_mode: %s\n", snd_pcm_tstamp_mode_name(runtime->tstamp_mode)); 433 snd_iprintf(buffer, "period_step: %u\n", runtime->period_step); 434 snd_iprintf(buffer, "avail_min: %lu\n", runtime->control->avail_min); 435 snd_iprintf(buffer, "start_threshold: %lu\n", runtime->start_threshold); 436 snd_iprintf(buffer, "stop_threshold: %lu\n", runtime->stop_threshold); 437 snd_iprintf(buffer, "silence_threshold: %lu\n", runtime->silence_threshold); 438 snd_iprintf(buffer, "silence_size: %lu\n", runtime->silence_size); 439 snd_iprintf(buffer, "boundary: %lu\n", runtime->boundary); 440 unlock: 441 mutex_unlock(&substream->pcm->open_mutex); 442 } 443 444 static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry, 445 struct snd_info_buffer *buffer) 446 { 447 struct snd_pcm_substream *substream = entry->private_data; 448 struct snd_pcm_runtime *runtime; 449 struct snd_pcm_status status; 450 int err; 451 452 mutex_lock(&substream->pcm->open_mutex); 453 runtime = substream->runtime; 454 if (!runtime) { 455 snd_iprintf(buffer, "closed\n"); 456 goto unlock; 457 } 458 memset(&status, 0, sizeof(status)); 459 err = snd_pcm_status(substream, &status); 460 if (err < 0) { 461 snd_iprintf(buffer, "error %d\n", err); 462 goto unlock; 463 } 464 snd_iprintf(buffer, "state: %s\n", snd_pcm_state_name(status.state)); 465 snd_iprintf(buffer, "owner_pid : %d\n", pid_vnr(substream->pid)); 466 snd_iprintf(buffer, "trigger_time: %ld.%09ld\n", 467 status.trigger_tstamp.tv_sec, status.trigger_tstamp.tv_nsec); 468 snd_iprintf(buffer, "tstamp : %ld.%09ld\n", 469 status.tstamp.tv_sec, status.tstamp.tv_nsec); 470 snd_iprintf(buffer, "delay : %ld\n", status.delay); 471 snd_iprintf(buffer, "avail : %ld\n", status.avail); 472 snd_iprintf(buffer, "avail_max : %ld\n", status.avail_max); 473 snd_iprintf(buffer, "-----\n"); 474 snd_iprintf(buffer, "hw_ptr : %ld\n", runtime->status->hw_ptr); 475 snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr); 476 unlock: 477 mutex_unlock(&substream->pcm->open_mutex); 478 } 479 480 #ifdef CONFIG_SND_PCM_XRUN_DEBUG 481 static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry, 482 struct snd_info_buffer *buffer) 483 { 484 struct snd_pcm_str *pstr = entry->private_data; 485 snd_iprintf(buffer, "%d\n", pstr->xrun_debug); 486 } 487 488 static void snd_pcm_xrun_debug_write(struct snd_info_entry *entry, 489 struct snd_info_buffer *buffer) 490 { 491 struct snd_pcm_str *pstr = entry->private_data; 492 char line[64]; 493 if (!snd_info_get_line(buffer, line, sizeof(line))) 494 pstr->xrun_debug = simple_strtoul(line, NULL, 10); 495 } 496 #endif 497 498 static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) 499 { 500 struct snd_pcm *pcm = pstr->pcm; 501 struct snd_info_entry *entry; 502 char name[16]; 503 504 sprintf(name, "pcm%i%c", pcm->device, 505 pstr->stream == SNDRV_PCM_STREAM_PLAYBACK ? 'p' : 'c'); 506 if ((entry = snd_info_create_card_entry(pcm->card, name, pcm->card->proc_root)) == NULL) 507 return -ENOMEM; 508 entry->mode = S_IFDIR | S_IRUGO | S_IXUGO; 509 if (snd_info_register(entry) < 0) { 510 snd_info_free_entry(entry); 511 return -ENOMEM; 512 } 513 pstr->proc_root = entry; 514 515 if ((entry = snd_info_create_card_entry(pcm->card, "info", pstr->proc_root)) != NULL) { 516 snd_info_set_text_ops(entry, pstr, snd_pcm_stream_proc_info_read); 517 if (snd_info_register(entry) < 0) { 518 snd_info_free_entry(entry); 519 entry = NULL; 520 } 521 } 522 pstr->proc_info_entry = entry; 523 524 #ifdef CONFIG_SND_PCM_XRUN_DEBUG 525 if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug", 526 pstr->proc_root)) != NULL) { 527 entry->c.text.read = snd_pcm_xrun_debug_read; 528 entry->c.text.write = snd_pcm_xrun_debug_write; 529 entry->mode |= S_IWUSR; 530 entry->private_data = pstr; 531 if (snd_info_register(entry) < 0) { 532 snd_info_free_entry(entry); 533 entry = NULL; 534 } 535 } 536 pstr->proc_xrun_debug_entry = entry; 537 #endif 538 return 0; 539 } 540 541 static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) 542 { 543 #ifdef CONFIG_SND_PCM_XRUN_DEBUG 544 snd_info_free_entry(pstr->proc_xrun_debug_entry); 545 pstr->proc_xrun_debug_entry = NULL; 546 #endif 547 snd_info_free_entry(pstr->proc_info_entry); 548 pstr->proc_info_entry = NULL; 549 snd_info_free_entry(pstr->proc_root); 550 pstr->proc_root = NULL; 551 return 0; 552 } 553 554 static int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) 555 { 556 struct snd_info_entry *entry; 557 struct snd_card *card; 558 char name[16]; 559 560 card = substream->pcm->card; 561 562 sprintf(name, "sub%i", substream->number); 563 if ((entry = snd_info_create_card_entry(card, name, substream->pstr->proc_root)) == NULL) 564 return -ENOMEM; 565 entry->mode = S_IFDIR | S_IRUGO | S_IXUGO; 566 if (snd_info_register(entry) < 0) { 567 snd_info_free_entry(entry); 568 return -ENOMEM; 569 } 570 substream->proc_root = entry; 571 572 if ((entry = snd_info_create_card_entry(card, "info", substream->proc_root)) != NULL) { 573 snd_info_set_text_ops(entry, substream, 574 snd_pcm_substream_proc_info_read); 575 if (snd_info_register(entry) < 0) { 576 snd_info_free_entry(entry); 577 entry = NULL; 578 } 579 } 580 substream->proc_info_entry = entry; 581 582 if ((entry = snd_info_create_card_entry(card, "hw_params", substream->proc_root)) != NULL) { 583 snd_info_set_text_ops(entry, substream, 584 snd_pcm_substream_proc_hw_params_read); 585 if (snd_info_register(entry) < 0) { 586 snd_info_free_entry(entry); 587 entry = NULL; 588 } 589 } 590 substream->proc_hw_params_entry = entry; 591 592 if ((entry = snd_info_create_card_entry(card, "sw_params", substream->proc_root)) != NULL) { 593 snd_info_set_text_ops(entry, substream, 594 snd_pcm_substream_proc_sw_params_read); 595 if (snd_info_register(entry) < 0) { 596 snd_info_free_entry(entry); 597 entry = NULL; 598 } 599 } 600 substream->proc_sw_params_entry = entry; 601 602 if ((entry = snd_info_create_card_entry(card, "status", substream->proc_root)) != NULL) { 603 snd_info_set_text_ops(entry, substream, 604 snd_pcm_substream_proc_status_read); 605 if (snd_info_register(entry) < 0) { 606 snd_info_free_entry(entry); 607 entry = NULL; 608 } 609 } 610 substream->proc_status_entry = entry; 611 612 return 0; 613 } 614 615 static int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) 616 { 617 snd_info_free_entry(substream->proc_info_entry); 618 substream->proc_info_entry = NULL; 619 snd_info_free_entry(substream->proc_hw_params_entry); 620 substream->proc_hw_params_entry = NULL; 621 snd_info_free_entry(substream->proc_sw_params_entry); 622 substream->proc_sw_params_entry = NULL; 623 snd_info_free_entry(substream->proc_status_entry); 624 substream->proc_status_entry = NULL; 625 snd_info_free_entry(substream->proc_root); 626 substream->proc_root = NULL; 627 return 0; 628 } 629 #else /* !CONFIG_SND_VERBOSE_PROCFS */ 630 static inline int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr) { return 0; } 631 static inline int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr) { return 0; } 632 static inline int snd_pcm_substream_proc_init(struct snd_pcm_substream *substream) { return 0; } 633 static inline int snd_pcm_substream_proc_done(struct snd_pcm_substream *substream) { return 0; } 634 #endif /* CONFIG_SND_VERBOSE_PROCFS */ 635 636 /** 637 * snd_pcm_new_stream - create a new PCM stream 638 * @pcm: the pcm instance 639 * @stream: the stream direction, SNDRV_PCM_STREAM_XXX 640 * @substream_count: the number of substreams 641 * 642 * Creates a new stream for the pcm. 643 * The corresponding stream on the pcm must have been empty before 644 * calling this, i.e. zero must be given to the argument of 645 * snd_pcm_new(). 646 * 647 * Return: Zero if successful, or a negative error code on failure. 648 */ 649 int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count) 650 { 651 int idx, err; 652 struct snd_pcm_str *pstr = &pcm->streams[stream]; 653 struct snd_pcm_substream *substream, *prev; 654 655 #if IS_ENABLED(CONFIG_SND_PCM_OSS) 656 mutex_init(&pstr->oss.setup_mutex); 657 #endif 658 pstr->stream = stream; 659 pstr->pcm = pcm; 660 pstr->substream_count = substream_count; 661 if (substream_count > 0 && !pcm->internal) { 662 err = snd_pcm_stream_proc_init(pstr); 663 if (err < 0) { 664 pcm_err(pcm, "Error in snd_pcm_stream_proc_init\n"); 665 return err; 666 } 667 } 668 prev = NULL; 669 for (idx = 0, prev = NULL; idx < substream_count; idx++) { 670 substream = kzalloc(sizeof(*substream), GFP_KERNEL); 671 if (substream == NULL) { 672 pcm_err(pcm, "Cannot allocate PCM substream\n"); 673 return -ENOMEM; 674 } 675 substream->pcm = pcm; 676 substream->pstr = pstr; 677 substream->number = idx; 678 substream->stream = stream; 679 sprintf(substream->name, "subdevice #%i", idx); 680 substream->buffer_bytes_max = UINT_MAX; 681 if (prev == NULL) 682 pstr->substream = substream; 683 else 684 prev->next = substream; 685 686 if (!pcm->internal) { 687 err = snd_pcm_substream_proc_init(substream); 688 if (err < 0) { 689 pcm_err(pcm, 690 "Error in snd_pcm_stream_proc_init\n"); 691 if (prev == NULL) 692 pstr->substream = NULL; 693 else 694 prev->next = NULL; 695 kfree(substream); 696 return err; 697 } 698 } 699 substream->group = &substream->self_group; 700 spin_lock_init(&substream->self_group.lock); 701 INIT_LIST_HEAD(&substream->self_group.substreams); 702 list_add_tail(&substream->link_list, &substream->self_group.substreams); 703 atomic_set(&substream->mmap_count, 0); 704 prev = substream; 705 } 706 return 0; 707 } 708 709 EXPORT_SYMBOL(snd_pcm_new_stream); 710 711 static int _snd_pcm_new(struct snd_card *card, const char *id, int device, 712 int playback_count, int capture_count, bool internal, 713 struct snd_pcm **rpcm) 714 { 715 struct snd_pcm *pcm; 716 int err; 717 static struct snd_device_ops ops = { 718 .dev_free = snd_pcm_dev_free, 719 .dev_register = snd_pcm_dev_register, 720 .dev_disconnect = snd_pcm_dev_disconnect, 721 }; 722 723 if (snd_BUG_ON(!card)) 724 return -ENXIO; 725 if (rpcm) 726 *rpcm = NULL; 727 pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); 728 if (pcm == NULL) { 729 dev_err(card->dev, "Cannot allocate PCM\n"); 730 return -ENOMEM; 731 } 732 pcm->card = card; 733 pcm->device = device; 734 pcm->internal = internal; 735 if (id) 736 strlcpy(pcm->id, id, sizeof(pcm->id)); 737 if ((err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_PLAYBACK, playback_count)) < 0) { 738 snd_pcm_free(pcm); 739 return err; 740 } 741 if ((err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_CAPTURE, capture_count)) < 0) { 742 snd_pcm_free(pcm); 743 return err; 744 } 745 mutex_init(&pcm->open_mutex); 746 init_waitqueue_head(&pcm->open_wait); 747 if ((err = snd_device_new(card, SNDRV_DEV_PCM, pcm, &ops)) < 0) { 748 snd_pcm_free(pcm); 749 return err; 750 } 751 if (rpcm) 752 *rpcm = pcm; 753 return 0; 754 } 755 756 /** 757 * snd_pcm_new - create a new PCM instance 758 * @card: the card instance 759 * @id: the id string 760 * @device: the device index (zero based) 761 * @playback_count: the number of substreams for playback 762 * @capture_count: the number of substreams for capture 763 * @rpcm: the pointer to store the new pcm instance 764 * 765 * Creates a new PCM instance. 766 * 767 * The pcm operators have to be set afterwards to the new instance 768 * via snd_pcm_set_ops(). 769 * 770 * Return: Zero if successful, or a negative error code on failure. 771 */ 772 int snd_pcm_new(struct snd_card *card, const char *id, int device, 773 int playback_count, int capture_count, struct snd_pcm **rpcm) 774 { 775 return _snd_pcm_new(card, id, device, playback_count, capture_count, 776 false, rpcm); 777 } 778 EXPORT_SYMBOL(snd_pcm_new); 779 780 /** 781 * snd_pcm_new_internal - create a new internal PCM instance 782 * @card: the card instance 783 * @id: the id string 784 * @device: the device index (zero based - shared with normal PCMs) 785 * @playback_count: the number of substreams for playback 786 * @capture_count: the number of substreams for capture 787 * @rpcm: the pointer to store the new pcm instance 788 * 789 * Creates a new internal PCM instance with no userspace device or procfs 790 * entries. This is used by ASoC Back End PCMs in order to create a PCM that 791 * will only be used internally by kernel drivers. i.e. it cannot be opened 792 * by userspace. It provides existing ASoC components drivers with a substream 793 * and access to any private data. 794 * 795 * The pcm operators have to be set afterwards to the new instance 796 * via snd_pcm_set_ops(). 797 * 798 * Return: Zero if successful, or a negative error code on failure. 799 */ 800 int snd_pcm_new_internal(struct snd_card *card, const char *id, int device, 801 int playback_count, int capture_count, 802 struct snd_pcm **rpcm) 803 { 804 return _snd_pcm_new(card, id, device, playback_count, capture_count, 805 true, rpcm); 806 } 807 EXPORT_SYMBOL(snd_pcm_new_internal); 808 809 static void snd_pcm_free_stream(struct snd_pcm_str * pstr) 810 { 811 struct snd_pcm_substream *substream, *substream_next; 812 #if IS_ENABLED(CONFIG_SND_PCM_OSS) 813 struct snd_pcm_oss_setup *setup, *setupn; 814 #endif 815 substream = pstr->substream; 816 while (substream) { 817 substream_next = substream->next; 818 snd_pcm_timer_done(substream); 819 snd_pcm_substream_proc_done(substream); 820 kfree(substream); 821 substream = substream_next; 822 } 823 snd_pcm_stream_proc_done(pstr); 824 #if IS_ENABLED(CONFIG_SND_PCM_OSS) 825 for (setup = pstr->oss.setup_list; setup; setup = setupn) { 826 setupn = setup->next; 827 kfree(setup->task_name); 828 kfree(setup); 829 } 830 #endif 831 } 832 833 static int snd_pcm_free(struct snd_pcm *pcm) 834 { 835 struct snd_pcm_notify *notify; 836 837 if (!pcm) 838 return 0; 839 list_for_each_entry(notify, &snd_pcm_notify_list, list) { 840 notify->n_unregister(pcm); 841 } 842 if (pcm->private_free) 843 pcm->private_free(pcm); 844 snd_pcm_lib_preallocate_free_for_all(pcm); 845 snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_PLAYBACK]); 846 snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_CAPTURE]); 847 kfree(pcm); 848 return 0; 849 } 850 851 static int snd_pcm_dev_free(struct snd_device *device) 852 { 853 struct snd_pcm *pcm = device->device_data; 854 return snd_pcm_free(pcm); 855 } 856 857 int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, 858 struct file *file, 859 struct snd_pcm_substream **rsubstream) 860 { 861 struct snd_pcm_str * pstr; 862 struct snd_pcm_substream *substream; 863 struct snd_pcm_runtime *runtime; 864 struct snd_ctl_file *kctl; 865 struct snd_card *card; 866 int prefer_subdevice = -1; 867 size_t size; 868 869 if (snd_BUG_ON(!pcm || !rsubstream)) 870 return -ENXIO; 871 *rsubstream = NULL; 872 pstr = &pcm->streams[stream]; 873 if (pstr->substream == NULL || pstr->substream_count == 0) 874 return -ENODEV; 875 876 card = pcm->card; 877 read_lock(&card->ctl_files_rwlock); 878 list_for_each_entry(kctl, &card->ctl_files, list) { 879 if (kctl->pid == task_pid(current)) { 880 prefer_subdevice = kctl->prefer_pcm_subdevice; 881 if (prefer_subdevice != -1) 882 break; 883 } 884 } 885 read_unlock(&card->ctl_files_rwlock); 886 887 switch (stream) { 888 case SNDRV_PCM_STREAM_PLAYBACK: 889 if (pcm->info_flags & SNDRV_PCM_INFO_HALF_DUPLEX) { 890 for (substream = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream; substream; substream = substream->next) { 891 if (SUBSTREAM_BUSY(substream)) 892 return -EAGAIN; 893 } 894 } 895 break; 896 case SNDRV_PCM_STREAM_CAPTURE: 897 if (pcm->info_flags & SNDRV_PCM_INFO_HALF_DUPLEX) { 898 for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream; substream; substream = substream->next) { 899 if (SUBSTREAM_BUSY(substream)) 900 return -EAGAIN; 901 } 902 } 903 break; 904 default: 905 return -EINVAL; 906 } 907 908 if (file->f_flags & O_APPEND) { 909 if (prefer_subdevice < 0) { 910 if (pstr->substream_count > 1) 911 return -EINVAL; /* must be unique */ 912 substream = pstr->substream; 913 } else { 914 for (substream = pstr->substream; substream; 915 substream = substream->next) 916 if (substream->number == prefer_subdevice) 917 break; 918 } 919 if (! substream) 920 return -ENODEV; 921 if (! SUBSTREAM_BUSY(substream)) 922 return -EBADFD; 923 substream->ref_count++; 924 *rsubstream = substream; 925 return 0; 926 } 927 928 if (prefer_subdevice >= 0) { 929 for (substream = pstr->substream; substream; substream = substream->next) 930 if (!SUBSTREAM_BUSY(substream) && substream->number == prefer_subdevice) 931 goto __ok; 932 } 933 for (substream = pstr->substream; substream; substream = substream->next) 934 if (!SUBSTREAM_BUSY(substream)) 935 break; 936 __ok: 937 if (substream == NULL) 938 return -EAGAIN; 939 940 runtime = kzalloc(sizeof(*runtime), GFP_KERNEL); 941 if (runtime == NULL) 942 return -ENOMEM; 943 944 size = PAGE_ALIGN(sizeof(struct snd_pcm_mmap_status)); 945 runtime->status = snd_malloc_pages(size, GFP_KERNEL); 946 if (runtime->status == NULL) { 947 kfree(runtime); 948 return -ENOMEM; 949 } 950 memset((void*)runtime->status, 0, size); 951 952 size = PAGE_ALIGN(sizeof(struct snd_pcm_mmap_control)); 953 runtime->control = snd_malloc_pages(size, GFP_KERNEL); 954 if (runtime->control == NULL) { 955 snd_free_pages((void*)runtime->status, 956 PAGE_ALIGN(sizeof(struct snd_pcm_mmap_status))); 957 kfree(runtime); 958 return -ENOMEM; 959 } 960 memset((void*)runtime->control, 0, size); 961 962 init_waitqueue_head(&runtime->sleep); 963 init_waitqueue_head(&runtime->tsleep); 964 965 runtime->status->state = SNDRV_PCM_STATE_OPEN; 966 967 substream->runtime = runtime; 968 substream->private_data = pcm->private_data; 969 substream->ref_count = 1; 970 substream->f_flags = file->f_flags; 971 substream->pid = get_pid(task_pid(current)); 972 pstr->substream_opened++; 973 *rsubstream = substream; 974 return 0; 975 } 976 977 void snd_pcm_detach_substream(struct snd_pcm_substream *substream) 978 { 979 struct snd_pcm_runtime *runtime; 980 981 if (PCM_RUNTIME_CHECK(substream)) 982 return; 983 runtime = substream->runtime; 984 if (runtime->private_free != NULL) 985 runtime->private_free(runtime); 986 snd_free_pages((void*)runtime->status, 987 PAGE_ALIGN(sizeof(struct snd_pcm_mmap_status))); 988 snd_free_pages((void*)runtime->control, 989 PAGE_ALIGN(sizeof(struct snd_pcm_mmap_control))); 990 kfree(runtime->hw_constraints.rules); 991 #ifdef CONFIG_SND_PCM_XRUN_DEBUG 992 kfree(runtime->hwptr_log); 993 #endif 994 kfree(runtime); 995 substream->runtime = NULL; 996 put_pid(substream->pid); 997 substream->pid = NULL; 998 substream->pstr->substream_opened--; 999 } 1000 1001 static ssize_t show_pcm_class(struct device *dev, 1002 struct device_attribute *attr, char *buf) 1003 { 1004 struct snd_pcm *pcm; 1005 const char *str; 1006 static const char *strs[SNDRV_PCM_CLASS_LAST + 1] = { 1007 [SNDRV_PCM_CLASS_GENERIC] = "generic", 1008 [SNDRV_PCM_CLASS_MULTI] = "multi", 1009 [SNDRV_PCM_CLASS_MODEM] = "modem", 1010 [SNDRV_PCM_CLASS_DIGITIZER] = "digitizer", 1011 }; 1012 1013 if (! (pcm = dev_get_drvdata(dev)) || 1014 pcm->dev_class > SNDRV_PCM_CLASS_LAST) 1015 str = "none"; 1016 else 1017 str = strs[pcm->dev_class]; 1018 return snprintf(buf, PAGE_SIZE, "%s\n", str); 1019 } 1020 1021 static DEVICE_ATTR(pcm_class, S_IRUGO, show_pcm_class, NULL); 1022 static struct attribute *pcm_dev_attrs[] = { 1023 &dev_attr_pcm_class.attr, 1024 NULL 1025 }; 1026 1027 static struct attribute_group pcm_dev_attr_group = { 1028 .attrs = pcm_dev_attrs, 1029 }; 1030 1031 static const struct attribute_group *pcm_dev_attr_groups[] = { 1032 &pcm_dev_attr_group, 1033 NULL 1034 }; 1035 1036 static int snd_pcm_dev_register(struct snd_device *device) 1037 { 1038 int cidx, err; 1039 struct snd_pcm_substream *substream; 1040 struct snd_pcm_notify *notify; 1041 char str[16]; 1042 struct snd_pcm *pcm; 1043 struct device *dev; 1044 1045 if (snd_BUG_ON(!device || !device->device_data)) 1046 return -ENXIO; 1047 pcm = device->device_data; 1048 mutex_lock(®ister_mutex); 1049 err = snd_pcm_add(pcm); 1050 if (err) { 1051 mutex_unlock(®ister_mutex); 1052 return err; 1053 } 1054 for (cidx = 0; cidx < 2; cidx++) { 1055 int devtype = -1; 1056 if (pcm->streams[cidx].substream == NULL || pcm->internal) 1057 continue; 1058 switch (cidx) { 1059 case SNDRV_PCM_STREAM_PLAYBACK: 1060 sprintf(str, "pcmC%iD%ip", pcm->card->number, pcm->device); 1061 devtype = SNDRV_DEVICE_TYPE_PCM_PLAYBACK; 1062 break; 1063 case SNDRV_PCM_STREAM_CAPTURE: 1064 sprintf(str, "pcmC%iD%ic", pcm->card->number, pcm->device); 1065 devtype = SNDRV_DEVICE_TYPE_PCM_CAPTURE; 1066 break; 1067 } 1068 /* device pointer to use, pcm->dev takes precedence if 1069 * it is assigned, otherwise fall back to card's device 1070 * if possible */ 1071 dev = pcm->dev; 1072 if (!dev) 1073 dev = snd_card_get_device_link(pcm->card); 1074 /* register pcm */ 1075 err = snd_register_device_for_dev(devtype, pcm->card, 1076 pcm->device, 1077 &snd_pcm_f_ops[cidx], 1078 pcm, str, dev); 1079 if (err < 0) { 1080 list_del(&pcm->list); 1081 mutex_unlock(®ister_mutex); 1082 return err; 1083 } 1084 1085 dev = snd_get_device(devtype, pcm->card, pcm->device); 1086 if (dev) { 1087 err = sysfs_create_groups(&dev->kobj, 1088 pcm_dev_attr_groups); 1089 if (err < 0) 1090 dev_warn(dev, 1091 "pcm %d:%d: cannot create sysfs groups\n", 1092 pcm->card->number, pcm->device); 1093 put_device(dev); 1094 } 1095 1096 for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) 1097 snd_pcm_timer_init(substream); 1098 } 1099 1100 list_for_each_entry(notify, &snd_pcm_notify_list, list) 1101 notify->n_register(pcm); 1102 1103 mutex_unlock(®ister_mutex); 1104 return 0; 1105 } 1106 1107 static int snd_pcm_dev_disconnect(struct snd_device *device) 1108 { 1109 struct snd_pcm *pcm = device->device_data; 1110 struct snd_pcm_notify *notify; 1111 struct snd_pcm_substream *substream; 1112 int cidx, devtype; 1113 1114 mutex_lock(®ister_mutex); 1115 if (list_empty(&pcm->list)) 1116 goto unlock; 1117 1118 mutex_lock(&pcm->open_mutex); 1119 wake_up(&pcm->open_wait); 1120 list_del_init(&pcm->list); 1121 for (cidx = 0; cidx < 2; cidx++) 1122 for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) { 1123 snd_pcm_stream_lock_irq(substream); 1124 if (substream->runtime) { 1125 substream->runtime->status->state = SNDRV_PCM_STATE_DISCONNECTED; 1126 wake_up(&substream->runtime->sleep); 1127 wake_up(&substream->runtime->tsleep); 1128 } 1129 snd_pcm_stream_unlock_irq(substream); 1130 } 1131 list_for_each_entry(notify, &snd_pcm_notify_list, list) { 1132 notify->n_disconnect(pcm); 1133 } 1134 for (cidx = 0; cidx < 2; cidx++) { 1135 devtype = -1; 1136 switch (cidx) { 1137 case SNDRV_PCM_STREAM_PLAYBACK: 1138 devtype = SNDRV_DEVICE_TYPE_PCM_PLAYBACK; 1139 break; 1140 case SNDRV_PCM_STREAM_CAPTURE: 1141 devtype = SNDRV_DEVICE_TYPE_PCM_CAPTURE; 1142 break; 1143 } 1144 snd_unregister_device(devtype, pcm->card, pcm->device); 1145 if (pcm->streams[cidx].chmap_kctl) { 1146 snd_ctl_remove(pcm->card, pcm->streams[cidx].chmap_kctl); 1147 pcm->streams[cidx].chmap_kctl = NULL; 1148 } 1149 } 1150 mutex_unlock(&pcm->open_mutex); 1151 unlock: 1152 mutex_unlock(®ister_mutex); 1153 return 0; 1154 } 1155 1156 int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree) 1157 { 1158 struct snd_pcm *pcm; 1159 1160 if (snd_BUG_ON(!notify || 1161 !notify->n_register || 1162 !notify->n_unregister || 1163 !notify->n_disconnect)) 1164 return -EINVAL; 1165 mutex_lock(®ister_mutex); 1166 if (nfree) { 1167 list_del(¬ify->list); 1168 list_for_each_entry(pcm, &snd_pcm_devices, list) 1169 notify->n_unregister(pcm); 1170 } else { 1171 list_add_tail(¬ify->list, &snd_pcm_notify_list); 1172 list_for_each_entry(pcm, &snd_pcm_devices, list) 1173 notify->n_register(pcm); 1174 } 1175 mutex_unlock(®ister_mutex); 1176 return 0; 1177 } 1178 1179 EXPORT_SYMBOL(snd_pcm_notify); 1180 1181 #ifdef CONFIG_PROC_FS 1182 /* 1183 * Info interface 1184 */ 1185 1186 static void snd_pcm_proc_read(struct snd_info_entry *entry, 1187 struct snd_info_buffer *buffer) 1188 { 1189 struct snd_pcm *pcm; 1190 1191 mutex_lock(®ister_mutex); 1192 list_for_each_entry(pcm, &snd_pcm_devices, list) { 1193 snd_iprintf(buffer, "%02i-%02i: %s : %s", 1194 pcm->card->number, pcm->device, pcm->id, pcm->name); 1195 if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) 1196 snd_iprintf(buffer, " : playback %i", 1197 pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_count); 1198 if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) 1199 snd_iprintf(buffer, " : capture %i", 1200 pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_count); 1201 snd_iprintf(buffer, "\n"); 1202 } 1203 mutex_unlock(®ister_mutex); 1204 } 1205 1206 static struct snd_info_entry *snd_pcm_proc_entry; 1207 1208 static void snd_pcm_proc_init(void) 1209 { 1210 struct snd_info_entry *entry; 1211 1212 if ((entry = snd_info_create_module_entry(THIS_MODULE, "pcm", NULL)) != NULL) { 1213 snd_info_set_text_ops(entry, NULL, snd_pcm_proc_read); 1214 if (snd_info_register(entry) < 0) { 1215 snd_info_free_entry(entry); 1216 entry = NULL; 1217 } 1218 } 1219 snd_pcm_proc_entry = entry; 1220 } 1221 1222 static void snd_pcm_proc_done(void) 1223 { 1224 snd_info_free_entry(snd_pcm_proc_entry); 1225 } 1226 1227 #else /* !CONFIG_PROC_FS */ 1228 #define snd_pcm_proc_init() 1229 #define snd_pcm_proc_done() 1230 #endif /* CONFIG_PROC_FS */ 1231 1232 1233 /* 1234 * ENTRY functions 1235 */ 1236 1237 static int __init alsa_pcm_init(void) 1238 { 1239 snd_ctl_register_ioctl(snd_pcm_control_ioctl); 1240 snd_ctl_register_ioctl_compat(snd_pcm_control_ioctl); 1241 snd_pcm_proc_init(); 1242 return 0; 1243 } 1244 1245 static void __exit alsa_pcm_exit(void) 1246 { 1247 snd_ctl_unregister_ioctl(snd_pcm_control_ioctl); 1248 snd_ctl_unregister_ioctl_compat(snd_pcm_control_ioctl); 1249 snd_pcm_proc_done(); 1250 } 1251 1252 module_init(alsa_pcm_init) 1253 module_exit(alsa_pcm_exit) 1254