Lines Matching defs:rdev

72 static int snd_virmidi_dev_receive_event(struct snd_virmidi_dev *rdev,
81 read_lock(&rdev->filelist_lock);
83 down_read(&rdev->filelist_sem);
84 list_for_each_entry(vmidi, &rdev->filelist, list) {
99 read_unlock(&rdev->filelist_lock);
101 up_read(&rdev->filelist_sem);
112 struct snd_virmidi_dev *rdev;
114 rdev = private_data;
115 if (!(rdev->flags & SNDRV_VIRMIDI_USE))
117 return snd_virmidi_dev_receive_event(rdev, ev, atomic);
145 !(vmidi->rdev->flags & SNDRV_VIRMIDI_SUBSCRIBE)) {
186 struct snd_virmidi_dev *rdev = substream->rmidi->private_data;
198 vmidi->seq_mode = rdev->seq_mode;
199 vmidi->client = rdev->client;
200 vmidi->port = rdev->port;
202 scoped_guard(rwsem_write, &rdev->filelist_sem) {
203 guard(write_lock_irq)(&rdev->filelist_lock);
204 list_add_tail(&vmidi->list, &rdev->filelist);
206 vmidi->rdev = rdev;
215 struct snd_virmidi_dev *rdev = substream->rmidi->private_data;
227 vmidi->seq_mode = rdev->seq_mode;
228 vmidi->client = rdev->client;
229 vmidi->port = rdev->port;
231 vmidi->rdev = rdev;
242 struct snd_virmidi_dev *rdev = substream->rmidi->private_data;
245 scoped_guard(rwsem_write, &rdev->filelist_sem) {
246 guard(write_lock_irq)(&rdev->filelist_lock);
286 struct snd_virmidi_dev *rdev;
288 rdev = private_data;
289 if (!try_module_get(rdev->card->module))
291 rdev->flags |= SNDRV_VIRMIDI_SUBSCRIBE;
301 struct snd_virmidi_dev *rdev;
303 rdev = private_data;
304 rdev->flags &= ~SNDRV_VIRMIDI_SUBSCRIBE;
305 module_put(rdev->card->module);
316 struct snd_virmidi_dev *rdev;
318 rdev = private_data;
319 if (!try_module_get(rdev->card->module))
321 rdev->flags |= SNDRV_VIRMIDI_USE;
331 struct snd_virmidi_dev *rdev;
333 rdev = private_data;
334 rdev->flags &= ~SNDRV_VIRMIDI_USE;
335 module_put(rdev->card->module);
360 static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev)
367 if (rdev->client >= 0)
374 client = snd_seq_create_kernel_client(rdev->card, rdev->device,
375 "%s %d-%d", rdev->rmidi->name,
376 rdev->card->number,
377 rdev->device);
380 rdev->client = client;
384 sprintf(pinfo->name, "VirMIDI %d-%d", rdev->card->number, rdev->device);
396 pcallbacks.private_data = rdev;
406 rdev->client = -1;
410 rdev->port = pinfo->addr.port;
418 static void snd_virmidi_dev_detach_seq(struct snd_virmidi_dev *rdev)
420 if (rdev->client >= 0) {
421 snd_seq_delete_kernel_client(rdev->client);
422 rdev->client = -1;
431 struct snd_virmidi_dev *rdev = rmidi->private_data;
434 switch (rdev->seq_mode) {
436 err = snd_virmidi_dev_attach_seq(rdev);
441 if (rdev->client == 0)
446 pr_err("ALSA: seq_virmidi: seq_mode is not set: %d\n", rdev->seq_mode);
458 struct snd_virmidi_dev *rdev = rmidi->private_data;
460 if (rdev->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH)
461 snd_virmidi_dev_detach_seq(rdev);
478 struct snd_virmidi_dev *rdev = rmidi->private_data;
479 kfree(rdev);
490 struct snd_virmidi_dev *rdev;
501 rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
502 if (rdev == NULL) {
506 rdev->card = card;
507 rdev->rmidi = rmidi;
508 rdev->device = device;
509 rdev->client = -1;
510 init_rwsem(&rdev->filelist_sem);
511 rwlock_init(&rdev->filelist_lock);
512 INIT_LIST_HEAD(&rdev->filelist);
513 rdev->seq_mode = SNDRV_VIRMIDI_SEQ_DISPATCH;
514 rmidi->private_data = rdev;