Lines Matching refs:rmidi
60 #define rmidi_err(rmidi, fmt, args...) \ argument
61 dev_err(&(rmidi)->dev, fmt, ##args)
62 #define rmidi_warn(rmidi, fmt, args...) \ argument
63 dev_warn(&(rmidi)->dev, fmt, ##args)
64 #define rmidi_dbg(rmidi, fmt, args...) \ argument
65 dev_dbg(&(rmidi)->dev, fmt, ##args)
208 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
237 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice, in assign_substream() argument
242 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
248 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
269 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
289 rmidi->streams[substream->stream].substream_opened++; in open_substream()
295 static void close_substream(struct snd_rawmidi *rmidi,
299 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
307 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
314 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
322 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
327 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
330 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
335 rfile->rmidi = rmidi; in rawmidi_open_priv()
345 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_open() local
352 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_kernel_open()
353 if (!rmidi) in snd_rawmidi_kernel_open()
355 else if (!try_module_get(rmidi->card->module)) in snd_rawmidi_kernel_open()
361 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
362 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
363 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
365 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
377 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
389 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
393 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
399 if (rmidi == NULL) in snd_rawmidi_open()
402 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
403 snd_card_unref(rmidi->card); in snd_rawmidi_open()
407 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
408 card = rmidi->card; in snd_rawmidi_open()
421 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
424 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
435 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
437 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
438 if (rmidi->card->shutdown) { in snd_rawmidi_open()
447 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
459 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
460 snd_card_unref(rmidi->card); in snd_rawmidi_open()
466 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
467 module_put(rmidi->card->module); in snd_rawmidi_open()
468 snd_card_unref(rmidi->card); in snd_rawmidi_open()
472 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
502 rmidi->streams[substream->stream].substream_opened--; in close_substream()
507 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
509 rmidi = rfile->rmidi; in rawmidi_release_priv()
510 mutex_lock(&rmidi->open_mutex); in rawmidi_release_priv()
512 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
516 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
519 rfile->rmidi = NULL; in rawmidi_release_priv()
520 mutex_unlock(&rmidi->open_mutex); in rawmidi_release_priv()
521 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
527 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
532 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
534 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
542 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
546 rmidi = rfile->rmidi; in snd_rawmidi_release()
549 module = rmidi->card->module; in snd_rawmidi_release()
550 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
558 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
562 rmidi = substream->rmidi; in snd_rawmidi_info()
564 info->card = rmidi->card->number; in snd_rawmidi_info()
565 info->device = rmidi->device; in snd_rawmidi_info()
568 info->flags = rmidi->info_flags; in snd_rawmidi_info()
569 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
570 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
595 struct snd_rawmidi *rmidi; in __snd_rawmidi_info_select() local
599 rmidi = snd_rawmidi_search(card, info->device); in __snd_rawmidi_info_select()
600 if (!rmidi) in __snd_rawmidi_info_select()
604 pstr = &rmidi->streams[info->stream]; in __snd_rawmidi_info_select()
828 rmidi_dbg(rfile->rmidi, in snd_rawmidi_ioctl()
899 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1032 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1067 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1093 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1166 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1337 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1420 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1424 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1425 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1426 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1427 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1429 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1451 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1453 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1475 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1494 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1508 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1539 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1551 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1552 if (!rmidi) in snd_rawmidi_new()
1554 rmidi->card = card; in snd_rawmidi_new()
1555 rmidi->device = device; in snd_rawmidi_new()
1556 mutex_init(&rmidi->open_mutex); in snd_rawmidi_new()
1557 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_new()
1558 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_new()
1559 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_new()
1562 strlcpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_new()
1564 snd_device_initialize(&rmidi->dev, card); in snd_rawmidi_new()
1565 rmidi->dev.release = release_rawmidi_device; in snd_rawmidi_new()
1566 dev_set_name(&rmidi->dev, "midiC%iD%i", card->number, device); in snd_rawmidi_new()
1568 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1569 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_new()
1574 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1575 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_new()
1580 err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops); in snd_rawmidi_new()
1585 *rrawmidi = rmidi; in snd_rawmidi_new()
1589 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1605 static int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1607 if (!rmidi) in snd_rawmidi_free()
1610 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1611 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1613 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1614 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1617 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1618 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1619 if (rmidi->private_free) in snd_rawmidi_free()
1620 rmidi->private_free(rmidi); in snd_rawmidi_free()
1621 put_device(&rmidi->dev); in snd_rawmidi_free()
1627 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1629 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1635 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1637 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1646 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1648 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1652 if (snd_rawmidi_search(rmidi->card, rmidi->device)) in snd_rawmidi_dev_register()
1655 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1661 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1662 &snd_rawmidi_f_ops, rmidi, &rmidi->dev); in snd_rawmidi_dev_register()
1664 rmidi_err(rmidi, "unable to register\n"); in snd_rawmidi_dev_register()
1667 if (rmidi->ops && rmidi->ops->dev_register) { in snd_rawmidi_dev_register()
1668 err = rmidi->ops->dev_register(rmidi); in snd_rawmidi_dev_register()
1673 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1674 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1676 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1677 rmidi) < 0) { in snd_rawmidi_dev_register()
1678 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1680 rmidi->card->number, 0); in snd_rawmidi_dev_register()
1682 rmidi->ossreg++; in snd_rawmidi_dev_register()
1684 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
1688 if ((int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1690 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1691 rmidi) < 0) { in snd_rawmidi_dev_register()
1692 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1694 rmidi->card->number, 1); in snd_rawmidi_dev_register()
1696 rmidi->ossreg++; in snd_rawmidi_dev_register()
1700 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
1701 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
1703 entry->private_data = rmidi; in snd_rawmidi_dev_register()
1710 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
1712 if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */ in snd_rawmidi_dev_register()
1713 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
1714 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
1715 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
1716 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1717 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
1724 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_register()
1727 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1734 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
1738 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1739 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
1740 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
1744 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
1751 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
1752 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
1753 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
1755 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
1758 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
1759 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
1760 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
1763 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_disconnect()
1764 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1777 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
1782 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()