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)
194 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
223 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice, in assign_substream() argument
228 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
234 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
255 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
275 rmidi->streams[substream->stream].substream_opened++; in open_substream()
281 static void close_substream(struct snd_rawmidi *rmidi,
285 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
293 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
300 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
308 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
313 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
316 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
321 rfile->rmidi = rmidi; in rawmidi_open_priv()
331 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_open() local
338 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_kernel_open()
339 if (!rmidi) in snd_rawmidi_kernel_open()
341 else if (!try_module_get(rmidi->card->module)) in snd_rawmidi_kernel_open()
347 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
348 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
349 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
351 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
363 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
375 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
379 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
385 if (rmidi == NULL) in snd_rawmidi_open()
388 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
389 snd_card_unref(rmidi->card); in snd_rawmidi_open()
393 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
394 card = rmidi->card; in snd_rawmidi_open()
407 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
410 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
421 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
423 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
424 if (rmidi->card->shutdown) { in snd_rawmidi_open()
433 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
445 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
446 snd_card_unref(rmidi->card); in snd_rawmidi_open()
452 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
453 module_put(rmidi->card->module); in snd_rawmidi_open()
454 snd_card_unref(rmidi->card); in snd_rawmidi_open()
458 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
488 rmidi->streams[substream->stream].substream_opened--; in close_substream()
493 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
495 rmidi = rfile->rmidi; in rawmidi_release_priv()
496 mutex_lock(&rmidi->open_mutex); in rawmidi_release_priv()
498 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
502 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
505 rfile->rmidi = NULL; in rawmidi_release_priv()
506 mutex_unlock(&rmidi->open_mutex); in rawmidi_release_priv()
507 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
513 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
518 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
520 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
528 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
532 rmidi = rfile->rmidi; in snd_rawmidi_release()
535 module = rmidi->card->module; in snd_rawmidi_release()
536 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
544 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
548 rmidi = substream->rmidi; in snd_rawmidi_info()
550 info->card = rmidi->card->number; in snd_rawmidi_info()
551 info->device = rmidi->device; in snd_rawmidi_info()
554 info->flags = rmidi->info_flags; in snd_rawmidi_info()
555 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
556 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
581 struct snd_rawmidi *rmidi; in __snd_rawmidi_info_select() local
585 rmidi = snd_rawmidi_search(card, info->device); in __snd_rawmidi_info_select()
586 if (!rmidi) in __snd_rawmidi_info_select()
591 pstr = &rmidi->streams[info->stream]; in __snd_rawmidi_info_select()
815 rmidi_dbg(rfile->rmidi, in snd_rawmidi_ioctl()
886 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1019 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1054 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1080 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1153 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1346 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1429 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1433 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1434 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1435 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1436 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1438 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1460 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1462 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1484 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1503 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1517 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1548 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1560 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1561 if (!rmidi) in snd_rawmidi_new()
1563 rmidi->card = card; in snd_rawmidi_new()
1564 rmidi->device = device; in snd_rawmidi_new()
1565 mutex_init(&rmidi->open_mutex); in snd_rawmidi_new()
1566 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_new()
1567 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_new()
1568 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_new()
1571 strlcpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_new()
1573 snd_device_initialize(&rmidi->dev, card); in snd_rawmidi_new()
1574 rmidi->dev.release = release_rawmidi_device; in snd_rawmidi_new()
1575 dev_set_name(&rmidi->dev, "midiC%iD%i", card->number, device); in snd_rawmidi_new()
1577 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1578 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_new()
1583 err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1584 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_new()
1589 err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops); in snd_rawmidi_new()
1594 *rrawmidi = rmidi; in snd_rawmidi_new()
1598 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1614 static int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1616 if (!rmidi) in snd_rawmidi_free()
1619 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1620 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1622 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1623 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1626 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1627 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1628 if (rmidi->private_free) in snd_rawmidi_free()
1629 rmidi->private_free(rmidi); in snd_rawmidi_free()
1630 put_device(&rmidi->dev); in snd_rawmidi_free()
1636 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1638 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1644 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1646 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1655 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1657 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1661 if (snd_rawmidi_search(rmidi->card, rmidi->device)) in snd_rawmidi_dev_register()
1664 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1670 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1671 &snd_rawmidi_f_ops, rmidi, &rmidi->dev); in snd_rawmidi_dev_register()
1673 rmidi_err(rmidi, "unable to register\n"); in snd_rawmidi_dev_register()
1676 if (rmidi->ops && rmidi->ops->dev_register) { in snd_rawmidi_dev_register()
1677 err = rmidi->ops->dev_register(rmidi); in snd_rawmidi_dev_register()
1682 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1683 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1685 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1686 rmidi) < 0) { in snd_rawmidi_dev_register()
1687 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1689 rmidi->card->number, 0); in snd_rawmidi_dev_register()
1691 rmidi->ossreg++; in snd_rawmidi_dev_register()
1693 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
1697 if ((int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1699 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1700 rmidi) < 0) { in snd_rawmidi_dev_register()
1701 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1703 rmidi->card->number, 1); in snd_rawmidi_dev_register()
1705 rmidi->ossreg++; in snd_rawmidi_dev_register()
1709 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
1710 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
1712 entry->private_data = rmidi; in snd_rawmidi_dev_register()
1719 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
1721 if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */ in snd_rawmidi_dev_register()
1722 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
1723 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
1724 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
1725 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1726 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
1733 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_register()
1736 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1743 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
1747 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1748 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
1749 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
1753 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
1760 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
1761 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
1762 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
1764 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
1767 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
1768 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
1769 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
1772 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_disconnect()
1773 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1786 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
1791 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()