Lines Matching refs:rmidi

38 static int snd_rawmidi_free(struct snd_rawmidi *rmidi);
46 #define rmidi_err(rmidi, fmt, args...) \ argument
47 dev_err(&(rmidi)->dev, fmt, ##args)
48 #define rmidi_warn(rmidi, fmt, args...) \ argument
49 dev_warn(&(rmidi)->dev, fmt, ##args)
50 #define rmidi_dbg(rmidi, fmt, args...) \ argument
51 dev_dbg(&(rmidi)->dev, fmt, ##args)
238 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
267 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice, in assign_substream() argument
272 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
278 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
299 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
319 rmidi->streams[substream->stream].substream_opened++; in open_substream()
325 static void close_substream(struct snd_rawmidi *rmidi,
329 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
337 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
344 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
352 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
357 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
360 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
365 rfile->rmidi = rmidi; in rawmidi_open_priv()
375 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_open() local
382 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_kernel_open()
383 if (!rmidi) in snd_rawmidi_kernel_open()
385 else if (!try_module_get(rmidi->card->module)) in snd_rawmidi_kernel_open()
391 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
392 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
393 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
395 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
407 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
419 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
423 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
429 if (rmidi == NULL) in snd_rawmidi_open()
432 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
433 snd_card_unref(rmidi->card); in snd_rawmidi_open()
437 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
438 card = rmidi->card; in snd_rawmidi_open()
451 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
454 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
465 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
467 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
468 if (rmidi->card->shutdown) { in snd_rawmidi_open()
477 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
489 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
490 snd_card_unref(rmidi->card); in snd_rawmidi_open()
496 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
497 module_put(rmidi->card->module); in snd_rawmidi_open()
498 snd_card_unref(rmidi->card); in snd_rawmidi_open()
502 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
532 rmidi->streams[substream->stream].substream_opened--; in close_substream()
537 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
539 rmidi = rfile->rmidi; in rawmidi_release_priv()
540 mutex_lock(&rmidi->open_mutex); in rawmidi_release_priv()
542 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
546 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
549 rfile->rmidi = NULL; in rawmidi_release_priv()
550 mutex_unlock(&rmidi->open_mutex); in rawmidi_release_priv()
551 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
557 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
562 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
564 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
572 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
576 rmidi = rfile->rmidi; in snd_rawmidi_release()
579 module = rmidi->card->module; in snd_rawmidi_release()
580 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
588 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
592 rmidi = substream->rmidi; in snd_rawmidi_info()
594 info->card = rmidi->card->number; in snd_rawmidi_info()
595 info->device = rmidi->device; in snd_rawmidi_info()
598 info->flags = rmidi->info_flags; in snd_rawmidi_info()
599 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
600 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
625 struct snd_rawmidi *rmidi; in __snd_rawmidi_info_select() local
629 rmidi = snd_rawmidi_search(card, info->device); in __snd_rawmidi_info_select()
630 if (!rmidi) in __snd_rawmidi_info_select()
635 pstr = &rmidi->streams[info->stream]; in __snd_rawmidi_info_select()
915 rmidi_dbg(rfile->rmidi, in snd_rawmidi_ioctl()
986 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1124 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1161 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1187 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1260 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1455 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1540 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1545 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1546 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1547 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1548 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1550 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1575 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1577 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1602 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1621 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1635 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1666 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1678 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1679 if (!rmidi) in snd_rawmidi_new()
1681 rmidi->card = card; in snd_rawmidi_new()
1682 rmidi->device = device; in snd_rawmidi_new()
1683 mutex_init(&rmidi->open_mutex); in snd_rawmidi_new()
1684 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_new()
1685 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_new()
1686 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_new()
1689 strlcpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_new()
1691 snd_device_initialize(&rmidi->dev, card); in snd_rawmidi_new()
1692 rmidi->dev.release = release_rawmidi_device; in snd_rawmidi_new()
1693 dev_set_name(&rmidi->dev, "midiC%iD%i", card->number, device); in snd_rawmidi_new()
1695 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1696 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_new()
1701 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1702 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_new()
1707 err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops); in snd_rawmidi_new()
1712 *rrawmidi = rmidi; in snd_rawmidi_new()
1716 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1732 static int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1734 if (!rmidi) in snd_rawmidi_free()
1737 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1738 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1739 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1740 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1742 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1743 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1744 if (rmidi->private_free) in snd_rawmidi_free()
1745 rmidi->private_free(rmidi); in snd_rawmidi_free()
1746 put_device(&rmidi->dev); in snd_rawmidi_free()
1752 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1754 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1760 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1762 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1771 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1773 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1777 if (snd_rawmidi_search(rmidi->card, rmidi->device)) in snd_rawmidi_dev_register()
1780 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1786 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1787 &snd_rawmidi_f_ops, rmidi, &rmidi->dev); in snd_rawmidi_dev_register()
1789 rmidi_err(rmidi, "unable to register\n"); in snd_rawmidi_dev_register()
1792 if (rmidi->ops && rmidi->ops->dev_register) { in snd_rawmidi_dev_register()
1793 err = rmidi->ops->dev_register(rmidi); in snd_rawmidi_dev_register()
1798 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1799 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1801 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1802 rmidi) < 0) { in snd_rawmidi_dev_register()
1803 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1805 rmidi->card->number, 0); in snd_rawmidi_dev_register()
1807 rmidi->ossreg++; in snd_rawmidi_dev_register()
1809 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
1813 if ((int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1815 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1816 rmidi) < 0) { in snd_rawmidi_dev_register()
1817 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1819 rmidi->card->number, 1); in snd_rawmidi_dev_register()
1821 rmidi->ossreg++; in snd_rawmidi_dev_register()
1825 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
1826 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
1828 entry->private_data = rmidi; in snd_rawmidi_dev_register()
1835 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
1837 if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */ in snd_rawmidi_dev_register()
1838 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
1839 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
1840 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
1841 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1842 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
1849 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_register()
1852 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1859 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
1863 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1864 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
1865 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
1869 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
1876 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
1877 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
1878 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
1880 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
1883 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
1884 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
1885 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
1888 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_disconnect()
1889 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1902 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
1907 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()