Lines Matching refs:rmidi

59 #define rmidi_err(rmidi, fmt, args...) \  argument
60 dev_err(&(rmidi)->dev, fmt, ##args)
61 #define rmidi_warn(rmidi, fmt, args...) \ argument
62 dev_warn(&(rmidi)->dev, fmt, ##args)
63 #define rmidi_dbg(rmidi, fmt, args...) \ argument
64 dev_dbg(&(rmidi)->dev, fmt, ##args)
191 rmidi_warn(substream->rmidi, in snd_rawmidi_drain_output()
227 static int assign_substream(struct snd_rawmidi *rmidi, int subdevice, in assign_substream() argument
232 struct snd_rawmidi_str *s = &rmidi->streams[stream]; in assign_substream()
238 if (!(rmidi->info_flags & info_flags[stream])) in assign_substream()
259 static int open_substream(struct snd_rawmidi *rmidi, in open_substream() argument
279 rmidi->streams[substream->stream].substream_opened++; in open_substream()
285 static void close_substream(struct snd_rawmidi *rmidi,
289 static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode, in rawmidi_open_priv() argument
297 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
304 err = assign_substream(rmidi, subdevice, in rawmidi_open_priv()
312 err = open_substream(rmidi, sinput, mode); in rawmidi_open_priv()
317 err = open_substream(rmidi, soutput, mode); in rawmidi_open_priv()
320 close_substream(rmidi, sinput, 0); in rawmidi_open_priv()
325 rfile->rmidi = rmidi; in rawmidi_open_priv()
335 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_open() local
342 rmidi = snd_rawmidi_search(card, device); in snd_rawmidi_kernel_open()
343 if (rmidi == NULL) { in snd_rawmidi_kernel_open()
347 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_kernel_open()
353 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
354 err = rawmidi_open_priv(rmidi, subdevice, mode, rfile); in snd_rawmidi_kernel_open()
355 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_kernel_open()
357 module_put(rmidi->card->module); in snd_rawmidi_kernel_open()
369 struct snd_rawmidi *rmidi; in snd_rawmidi_open() local
381 rmidi = snd_lookup_minor_data(iminor(inode), in snd_rawmidi_open()
385 rmidi = snd_lookup_oss_minor_data(iminor(inode), in snd_rawmidi_open()
391 if (rmidi == NULL) in snd_rawmidi_open()
394 if (!try_module_get(rmidi->card->module)) { in snd_rawmidi_open()
395 snd_card_unref(rmidi->card); in snd_rawmidi_open()
399 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
400 card = rmidi->card; in snd_rawmidi_open()
413 add_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
416 err = rawmidi_open_priv(rmidi, subdevice, fflags, rawmidi_file); in snd_rawmidi_open()
427 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
429 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_open()
430 if (rmidi->card->shutdown) { in snd_rawmidi_open()
439 remove_wait_queue(&rmidi->open_wait, &wait); in snd_rawmidi_open()
451 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
452 snd_card_unref(rmidi->card); in snd_rawmidi_open()
458 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_open()
459 module_put(rmidi->card->module); in snd_rawmidi_open()
460 snd_card_unref(rmidi->card); in snd_rawmidi_open()
464 static void close_substream(struct snd_rawmidi *rmidi, in close_substream() argument
494 rmidi->streams[substream->stream].substream_opened--; in close_substream()
499 struct snd_rawmidi *rmidi; in rawmidi_release_priv() local
501 rmidi = rfile->rmidi; in rawmidi_release_priv()
502 mutex_lock(&rmidi->open_mutex); in rawmidi_release_priv()
504 close_substream(rmidi, rfile->input, 1); in rawmidi_release_priv()
508 close_substream(rmidi, rfile->output, 1); in rawmidi_release_priv()
511 rfile->rmidi = NULL; in rawmidi_release_priv()
512 mutex_unlock(&rmidi->open_mutex); in rawmidi_release_priv()
513 wake_up(&rmidi->open_wait); in rawmidi_release_priv()
519 struct snd_rawmidi *rmidi; in snd_rawmidi_kernel_release() local
524 rmidi = rfile->rmidi; in snd_rawmidi_kernel_release()
526 module_put(rmidi->card->module); in snd_rawmidi_kernel_release()
534 struct snd_rawmidi *rmidi; in snd_rawmidi_release() local
538 rmidi = rfile->rmidi; in snd_rawmidi_release()
541 module = rmidi->card->module; in snd_rawmidi_release()
542 snd_card_file_remove(rmidi->card, file); in snd_rawmidi_release()
550 struct snd_rawmidi *rmidi; in snd_rawmidi_info() local
554 rmidi = substream->rmidi; in snd_rawmidi_info()
556 info->card = rmidi->card->number; in snd_rawmidi_info()
557 info->device = rmidi->device; in snd_rawmidi_info()
560 info->flags = rmidi->info_flags; in snd_rawmidi_info()
561 strcpy(info->id, rmidi->id); in snd_rawmidi_info()
562 strcpy(info->name, rmidi->name); in snd_rawmidi_info()
584 struct snd_rawmidi *rmidi; in snd_rawmidi_info_select() local
589 rmidi = snd_rawmidi_search(card, info->device); in snd_rawmidi_info_select()
591 if (!rmidi) in snd_rawmidi_info_select()
595 pstr = &rmidi->streams[info->stream]; in snd_rawmidi_info_select()
813 rmidi_dbg(rfile->rmidi, in snd_rawmidi_ioctl()
884 rmidi_dbg(substream->rmidi, in snd_rawmidi_receive()
1016 if (rfile->rmidi->card->shutdown) in snd_rawmidi_read()
1051 rmidi_dbg(substream->rmidi, in snd_rawmidi_transmit_empty()
1077 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_peek()
1150 rmidi_dbg(substream->rmidi, in __snd_rawmidi_transmit_ack()
1320 if (rfile->rmidi->card->shutdown) in snd_rawmidi_write()
1403 struct snd_rawmidi *rmidi; in snd_rawmidi_proc_info_read() local
1407 rmidi = entry->private_data; in snd_rawmidi_proc_info_read()
1408 snd_iprintf(buffer, "%s\n\n", rmidi->name); in snd_rawmidi_proc_info_read()
1409 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1410 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { in snd_rawmidi_proc_info_read()
1412 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, in snd_rawmidi_proc_info_read()
1434 if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { in snd_rawmidi_proc_info_read()
1436 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, in snd_rawmidi_proc_info_read()
1458 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_proc_info_read()
1478 static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi, in snd_rawmidi_alloc_substreams() argument
1492 substream->rmidi = rmidi; in snd_rawmidi_alloc_substreams()
1523 struct snd_rawmidi *rmidi; in snd_rawmidi_new() local
1535 rmidi = kzalloc(sizeof(*rmidi), GFP_KERNEL); in snd_rawmidi_new()
1536 if (!rmidi) in snd_rawmidi_new()
1538 rmidi->card = card; in snd_rawmidi_new()
1539 rmidi->device = device; in snd_rawmidi_new()
1540 mutex_init(&rmidi->open_mutex); in snd_rawmidi_new()
1541 init_waitqueue_head(&rmidi->open_wait); in snd_rawmidi_new()
1542 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams); in snd_rawmidi_new()
1543 INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams); in snd_rawmidi_new()
1546 strlcpy(rmidi->id, id, sizeof(rmidi->id)); in snd_rawmidi_new()
1548 snd_device_initialize(&rmidi->dev, card); in snd_rawmidi_new()
1549 rmidi->dev.release = release_rawmidi_device; in snd_rawmidi_new()
1550 dev_set_name(&rmidi->dev, "midiC%iD%i", card->number, device); in snd_rawmidi_new()
1552 if ((err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1553 &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT], in snd_rawmidi_new()
1556 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1559 if ((err = snd_rawmidi_alloc_substreams(rmidi, in snd_rawmidi_new()
1560 &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT], in snd_rawmidi_new()
1563 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1566 if ((err = snd_device_new(card, SNDRV_DEV_RAWMIDI, rmidi, &ops)) < 0) { in snd_rawmidi_new()
1567 snd_rawmidi_free(rmidi); in snd_rawmidi_new()
1571 *rrawmidi = rmidi; in snd_rawmidi_new()
1587 static int snd_rawmidi_free(struct snd_rawmidi *rmidi) in snd_rawmidi_free() argument
1589 if (!rmidi) in snd_rawmidi_free()
1592 snd_info_free_entry(rmidi->proc_entry); in snd_rawmidi_free()
1593 rmidi->proc_entry = NULL; in snd_rawmidi_free()
1595 if (rmidi->ops && rmidi->ops->dev_unregister) in snd_rawmidi_free()
1596 rmidi->ops->dev_unregister(rmidi); in snd_rawmidi_free()
1599 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT]); in snd_rawmidi_free()
1600 snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]); in snd_rawmidi_free()
1601 if (rmidi->private_free) in snd_rawmidi_free()
1602 rmidi->private_free(rmidi); in snd_rawmidi_free()
1603 put_device(&rmidi->dev); in snd_rawmidi_free()
1609 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_free() local
1610 return snd_rawmidi_free(rmidi); in snd_rawmidi_dev_free()
1616 struct snd_rawmidi *rmidi = device->private_data; in snd_rawmidi_dev_seq_free() local
1617 rmidi->seq_dev = NULL; in snd_rawmidi_dev_seq_free()
1626 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_register() local
1628 if (rmidi->device >= SNDRV_RAWMIDI_DEVICES) in snd_rawmidi_dev_register()
1631 if (snd_rawmidi_search(rmidi->card, rmidi->device)) { in snd_rawmidi_dev_register()
1635 list_add_tail(&rmidi->list, &snd_rawmidi_devices); in snd_rawmidi_dev_register()
1637 rmidi->card, rmidi->device, in snd_rawmidi_dev_register()
1638 &snd_rawmidi_f_ops, rmidi, &rmidi->dev); in snd_rawmidi_dev_register()
1640 rmidi_err(rmidi, "unable to register\n"); in snd_rawmidi_dev_register()
1641 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1645 if (rmidi->ops && rmidi->ops->dev_register && in snd_rawmidi_dev_register()
1646 (err = rmidi->ops->dev_register(rmidi)) < 0) { in snd_rawmidi_dev_register()
1647 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_register()
1648 list_del(&rmidi->list); in snd_rawmidi_dev_register()
1653 rmidi->ossreg = 0; in snd_rawmidi_dev_register()
1654 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1656 rmidi->card, 0, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1657 rmidi) < 0) { in snd_rawmidi_dev_register()
1658 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1660 rmidi->card->number, 0); in snd_rawmidi_dev_register()
1662 rmidi->ossreg++; in snd_rawmidi_dev_register()
1664 snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name); in snd_rawmidi_dev_register()
1668 if ((int)rmidi->device == amidi_map[rmidi->card->number]) { in snd_rawmidi_dev_register()
1670 rmidi->card, 1, &snd_rawmidi_f_ops, in snd_rawmidi_dev_register()
1671 rmidi) < 0) { in snd_rawmidi_dev_register()
1672 rmidi_err(rmidi, in snd_rawmidi_dev_register()
1674 rmidi->card->number, 1); in snd_rawmidi_dev_register()
1676 rmidi->ossreg++; in snd_rawmidi_dev_register()
1681 sprintf(name, "midi%d", rmidi->device); in snd_rawmidi_dev_register()
1682 entry = snd_info_create_card_entry(rmidi->card, name, rmidi->card->proc_root); in snd_rawmidi_dev_register()
1684 entry->private_data = rmidi; in snd_rawmidi_dev_register()
1691 rmidi->proc_entry = entry; in snd_rawmidi_dev_register()
1693 if (!rmidi->ops || !rmidi->ops->dev_register) { /* own registration mechanism */ in snd_rawmidi_dev_register()
1694 …if (snd_seq_device_new(rmidi->card, rmidi->device, SNDRV_SEQ_DEV_ID_MIDISYNTH, 0, &rmidi->seq_dev)… in snd_rawmidi_dev_register()
1695 rmidi->seq_dev->private_data = rmidi; in snd_rawmidi_dev_register()
1696 rmidi->seq_dev->private_free = snd_rawmidi_dev_seq_free; in snd_rawmidi_dev_register()
1697 sprintf(rmidi->seq_dev->name, "MIDI %d-%d", rmidi->card->number, rmidi->device); in snd_rawmidi_dev_register()
1698 snd_device_register(rmidi->card, rmidi->seq_dev); in snd_rawmidi_dev_register()
1707 struct snd_rawmidi *rmidi = device->device_data; in snd_rawmidi_dev_disconnect() local
1711 mutex_lock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1712 wake_up(&rmidi->open_wait); in snd_rawmidi_dev_disconnect()
1713 list_del_init(&rmidi->list); in snd_rawmidi_dev_disconnect()
1716 list_for_each_entry(s, &rmidi->streams[dir].substreams, list) { in snd_rawmidi_dev_disconnect()
1723 if (rmidi->ossreg) { in snd_rawmidi_dev_disconnect()
1724 if ((int)rmidi->device == midi_map[rmidi->card->number]) { in snd_rawmidi_dev_disconnect()
1725 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 0); in snd_rawmidi_dev_disconnect()
1727 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number); in snd_rawmidi_dev_disconnect()
1730 if ((int)rmidi->device == amidi_map[rmidi->card->number]) in snd_rawmidi_dev_disconnect()
1731 snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI, rmidi->card, 1); in snd_rawmidi_dev_disconnect()
1732 rmidi->ossreg = 0; in snd_rawmidi_dev_disconnect()
1735 snd_unregister_device(&rmidi->dev); in snd_rawmidi_dev_disconnect()
1736 mutex_unlock(&rmidi->open_mutex); in snd_rawmidi_dev_disconnect()
1749 void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, in snd_rawmidi_set_ops() argument
1754 list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) in snd_rawmidi_set_ops()