• Home
  • Raw
  • Download

Lines Matching refs:rmidi

215 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice,  in assign_substream()  argument
220 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
226 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
247 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
267 rmidi->streams[substream->stream].substream_opened++; in open_substream()
273 static void close_substream(struct snd_rawmidi *rmidi,
277 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
285 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
292 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
300 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
305 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
308 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
313 rfile->rmidi = rmidi; in rawmidi_open_priv()
323 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_open() local
330 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_kernel_open()
331 if (rmidi == NULL) { in snd_rawmidi_kernel_open()
335 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_kernel_open()
341 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
342 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
343 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
345 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
356 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
369 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
373 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
379 if (rmidi == NULL) in snd_rawmidi_open()
382 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
383 snd_card_unref(rmidi->card); in snd_rawmidi_open()
387 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
388 card = rmidi->card; in snd_rawmidi_open()
401 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
413 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
424 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
426 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
427 if (rmidi->card->shutdown) { in snd_rawmidi_open()
436 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
448 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
449 snd_card_unref(rmidi->card); in snd_rawmidi_open()
455 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
456 module_put(rmidi->card->module); in snd_rawmidi_open()
457 snd_card_unref(rmidi->card); in snd_rawmidi_open()
461 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
491 rmidi->streams[substream->stream].substream_opened--; in close_substream()
496 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
498 rmidi = rfile->rmidi; in rawmidi_release_priv()
499 mutex_lock(&rmidi->open_mutex); in rawmidi_release_priv()
501 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
505 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
508 rfile->rmidi = NULL; in rawmidi_release_priv()
509 mutex_unlock(&rmidi->open_mutex); in rawmidi_release_priv()
510 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
516 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
521 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
523 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
530 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
534 rmidi = rfile->rmidi; in snd_rawmidi_release()
537 module = rmidi->card->module; in snd_rawmidi_release()
538 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
546 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
550 rmidi = substream->rmidi; in snd_rawmidi_info()
552 info->card = rmidi->card->number; in snd_rawmidi_info()
553 info->device = rmidi->device; in snd_rawmidi_info()
556 info->flags = rmidi->info_flags; in snd_rawmidi_info()
557 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
558 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
580 struct snd_rawmidi *rmidi; in snd_rawmidi_info_select() local
585 rmidi = snd_rawmidi_search(card, info->device); in snd_rawmidi_info_select()
587 if (!rmidi) in snd_rawmidi_info_select()
591 pstr = &rmidi->streams[info->stream]; in snd_rawmidi_info_select()
1002 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1247 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1330 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1334 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1335 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1336 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1337 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1339 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1361 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1363 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1385 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1405 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1421 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1447 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1459 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1460 if (rmidi == NULL) { in snd_rawmidi_new()
1464 rmidi->card = card; in snd_rawmidi_new()
1465 rmidi->device = device; in snd_rawmidi_new()
1466 mutex_init(&rmidi->open_mutex); in snd_rawmidi_new()
1467 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_new()
1468 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_new()
1469 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_new()
1472 strlcpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_new()
1473 if ((err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1474 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_new()
1477 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1480 if ((err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1481 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_new()
1484 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1487 if ((err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops)) < 0) { in snd_rawmidi_new()
1488 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1492 *rrawmidi = rmidi; in snd_rawmidi_new()
1507 static int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1509 if (!rmidi) in snd_rawmidi_free()
1512 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1513 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1515 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1516 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1519 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1520 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1521 if (rmidi->private_free) in snd_rawmidi_free()
1522 rmidi->private_free(rmidi); in snd_rawmidi_free()
1523 kfree(rmidi); in snd_rawmidi_free()
1529 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1530 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1536 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1537 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1546 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1548 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1551 if (snd_rawmidi_search(rmidi->card, rmidi->device)) { in snd_rawmidi_dev_register()
1555 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1556 sprintf(name, "midiC%iD%i", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1558 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1559 &snd_rawmidi_f_ops, rmidi, name)) < 0) { in snd_rawmidi_dev_register()
1560 …snd_printk(KERN_ERR "unable to register rawmidi device %i:%i\n", rmidi->card->number, rmidi->devic… in snd_rawmidi_dev_register()
1561 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1565 if (rmidi->ops && rmidi->ops->dev_register && in snd_rawmidi_dev_register()
1566 (err = rmidi->ops->dev_register(rmidi)) < 0) { in snd_rawmidi_dev_register()
1567 snd_unregister_device(SNDRV_DEVICE_TYPE_RAWMIDI, rmidi->card, rmidi->device); in snd_rawmidi_dev_register()
1568 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1573 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1574 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1576 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1577 rmidi, name) < 0) { in snd_rawmidi_dev_register()
1578 snd_printk(KERN_ERR "unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 0); in snd_rawmidi_dev_register()
1580 rmidi->ossreg++; in snd_rawmidi_dev_register()
1582 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
1586 if ((int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1588 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1589 rmidi, name) < 0) { in snd_rawmidi_dev_register()
1590 snd_printk(KERN_ERR "unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 1); in snd_rawmidi_dev_register()
1592 rmidi->ossreg++; in snd_rawmidi_dev_register()
1597 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
1598 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
1600 entry->private_data = rmidi; in snd_rawmidi_dev_register()
1607 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
1609 if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */ in snd_rawmidi_dev_register()
1610 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
1611 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
1612 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
1613 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1614 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
1623 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
1627 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1628 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
1629 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
1632 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
1639 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
1640 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
1641 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
1643 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
1646 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
1647 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
1648 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
1651 snd_unregister_device(SNDRV_DEVICE_TYPE_RAWMIDI, rmidi->card, rmidi->device); in snd_rawmidi_dev_disconnect()
1652 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1665 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
1670 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()