Lines Matching refs: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)
76 #define rawmidi_is_ump(rmidi) \ argument
77 (IS_ENABLED(CONFIG_SND_UMP) && ((rmidi)->info_flags & SNDRV_RAWMIDI_INFO_UMP))
149 rmidi_err(substream->rmidi, "Buffer ref sync timeout\n"); in snd_rawmidi_buffer_ref_sync()
182 if (rawmidi_is_ump(substream->rmidi)) in snd_rawmidi_runtime_create()
271 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
306 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice, in assign_substream() argument
311 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
317 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
338 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
359 rmidi->streams[substream->stream].substream_opened++; in open_substream()
365 static void close_substream(struct snd_rawmidi *rmidi,
369 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
377 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
384 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
392 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
397 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
400 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
405 rfile->rmidi = rmidi; in rawmidi_open_priv()
412 int snd_rawmidi_kernel_open(struct snd_rawmidi *rmidi, int subdevice, in snd_rawmidi_kernel_open() argument
419 if (!try_module_get(rmidi->card->module)) in snd_rawmidi_kernel_open()
422 guard(mutex)(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
423 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
425 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
437 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
449 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
453 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
459 if (rmidi == NULL) in snd_rawmidi_open()
462 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
463 snd_card_unref(rmidi->card); in snd_rawmidi_open()
467 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
468 card = rmidi->card; in snd_rawmidi_open()
482 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
485 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
496 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
498 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
499 if (rmidi->card->shutdown) { in snd_rawmidi_open()
508 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
520 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
521 snd_card_unref(rmidi->card); in snd_rawmidi_open()
527 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
528 module_put(rmidi->card->module); in snd_rawmidi_open()
529 snd_card_unref(rmidi->card); in snd_rawmidi_open()
533 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
566 rmidi->streams[substream->stream].substream_opened--; in close_substream()
571 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
573 rmidi = rfile->rmidi; in rawmidi_release_priv()
574 guard(mutex)(&rmidi->open_mutex); in rawmidi_release_priv()
576 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
580 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
583 rfile->rmidi = NULL; in rawmidi_release_priv()
584 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
590 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
595 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
597 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
605 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
609 rmidi = rfile->rmidi; in snd_rawmidi_release()
612 module = rmidi->card->module; in snd_rawmidi_release()
613 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
621 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
625 rmidi = substream->rmidi; in snd_rawmidi_info()
627 info->card = rmidi->card->number; in snd_rawmidi_info()
628 info->device = rmidi->device; in snd_rawmidi_info()
631 info->flags = rmidi->info_flags; in snd_rawmidi_info()
632 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
633 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
658 struct snd_rawmidi *rmidi; in __snd_rawmidi_info_select() local
662 rmidi = snd_rawmidi_search(card, info->device); in __snd_rawmidi_info_select()
663 if (!rmidi) in __snd_rawmidi_info_select()
668 pstr = &rmidi->streams[info->stream]; in __snd_rawmidi_info_select()
748 guard(mutex)(&substream->rmidi->open_mutex); in snd_rawmidi_output_params()
766 guard(mutex)(&substream->rmidi->open_mutex); in snd_rawmidi_input_params()
887 struct snd_rawmidi *rmidi; in snd_rawmidi_ioctl() local
979 rmidi = rfile->rmidi; in snd_rawmidi_ioctl()
980 if (rmidi->ops && rmidi->ops->ioctl) in snd_rawmidi_ioctl()
981 return rmidi->ops->ioctl(rmidi, cmd, argp); in snd_rawmidi_ioctl()
982 rmidi_dbg(rmidi, "rawmidi: unknown command = 0x%x\n", cmd); in snd_rawmidi_ioctl()
992 struct snd_rawmidi *rmidi; in snd_rawmidi_next_device() local
1003 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_next_device()
1004 if (!rmidi) in snd_rawmidi_next_device()
1006 is_ump = rawmidi_is_ump(rmidi); in snd_rawmidi_next_device()
1024 struct snd_rawmidi *rmidi; in snd_rawmidi_call_ump_ioctl() local
1030 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_call_ump_ioctl()
1031 if (rmidi && rmidi->ops && rmidi->ops->ioctl) in snd_rawmidi_call_ump_ioctl()
1032 return rmidi->ops->ioctl(rmidi, cmd, argp); in snd_rawmidi_call_ump_ioctl()
1150 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1296 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1333 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1356 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1431 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1613 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1698 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1705 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1706 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1709 rawmidi_is_ump(rmidi) ? "UMP" : "Legacy"); in snd_rawmidi_proc_info_read()
1710 if (rmidi->ops && rmidi->ops->proc_read) in snd_rawmidi_proc_info_read()
1711 rmidi->ops->proc_read(entry, buffer); in snd_rawmidi_proc_info_read()
1712 guard(mutex)(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1713 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1715 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1740 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1742 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1792 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1806 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1816 int snd_rawmidi_init(struct snd_rawmidi *rmidi, in snd_rawmidi_init() argument
1828 rmidi->card = card; in snd_rawmidi_init()
1829 rmidi->device = device; in snd_rawmidi_init()
1830 mutex_init(&rmidi->open_mutex); in snd_rawmidi_init()
1831 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_init()
1832 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_init()
1833 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_init()
1834 rmidi->info_flags = info_flags; in snd_rawmidi_init()
1837 strscpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_init()
1839 err = snd_device_alloc(&rmidi->dev, card); in snd_rawmidi_init()
1842 if (rawmidi_is_ump(rmidi)) in snd_rawmidi_init()
1843 dev_set_name(rmidi->dev, "umpC%iD%i", card->number, device); in snd_rawmidi_init()
1845 dev_set_name(rmidi->dev, "midiC%iD%i", card->number, device); in snd_rawmidi_init()
1847 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_init()
1848 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_init()
1853 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_init()
1854 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_init()
1859 err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops); in snd_rawmidi_init()
1884 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1889 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1890 if (!rmidi) in snd_rawmidi_new()
1892 err = snd_rawmidi_init(rmidi, card, id, device, in snd_rawmidi_new()
1895 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1899 *rrawmidi = rmidi; in snd_rawmidi_new()
1916 int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1918 if (!rmidi) in snd_rawmidi_free()
1921 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1922 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1923 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1924 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1926 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1927 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1928 if (rmidi->private_free) in snd_rawmidi_free()
1929 rmidi->private_free(rmidi); in snd_rawmidi_free()
1930 put_device(rmidi->dev); in snd_rawmidi_free()
1931 kfree(rmidi); in snd_rawmidi_free()
1938 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1940 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1946 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1948 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1957 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1959 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1963 if (snd_rawmidi_search(rmidi->card, rmidi->device)) in snd_rawmidi_dev_register()
1966 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1972 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1973 &snd_rawmidi_f_ops, rmidi, rmidi->dev); in snd_rawmidi_dev_register()
1975 rmidi_err(rmidi, "unable to register\n"); in snd_rawmidi_dev_register()
1978 if (rmidi->ops && rmidi->ops->dev_register) { in snd_rawmidi_dev_register()
1979 err = rmidi->ops->dev_register(rmidi); in snd_rawmidi_dev_register()
1984 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1985 if (!rawmidi_is_ump(rmidi) && in snd_rawmidi_dev_register()
1986 (int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1988 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1989 rmidi) < 0) { in snd_rawmidi_dev_register()
1990 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1992 rmidi->card->number, 0); in snd_rawmidi_dev_register()
1994 rmidi->ossreg++; in snd_rawmidi_dev_register()
1996 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
2000 if (!rawmidi_is_ump(rmidi) && in snd_rawmidi_dev_register()
2001 (int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
2003 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
2004 rmidi) < 0) { in snd_rawmidi_dev_register()
2005 rmidi_err(rmidi, in snd_rawmidi_dev_register()
2007 rmidi->card->number, 1); in snd_rawmidi_dev_register()
2009 rmidi->ossreg++; in snd_rawmidi_dev_register()
2013 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
2014 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
2016 entry->private_data = rmidi; in snd_rawmidi_dev_register()
2023 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
2026 if (!rmidi->ops || !rmidi->ops->dev_register) { in snd_rawmidi_dev_register()
2027 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
2028 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
2029 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
2030 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
2031 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
2038 snd_unregister_device(rmidi->dev); in snd_rawmidi_dev_register()
2041 list_del(&rmidi->list); in snd_rawmidi_dev_register()
2047 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
2051 guard(mutex)(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
2052 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
2053 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
2057 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
2064 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
2065 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
2066 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
2068 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
2071 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
2072 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
2073 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
2076 snd_unregister_device(rmidi->dev); in snd_rawmidi_dev_disconnect()
2088 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
2093 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()