diff options
| -rw-r--r-- | sound/core/seq/oss/seq_oss_midi.c | 4 | ||||
| -rw-r--r-- | sound/core/seq/oss/seq_oss_readq.c | 29 | ||||
| -rw-r--r-- | sound/core/seq/oss/seq_oss_readq.h | 2 |
3 files changed, 32 insertions, 3 deletions
diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c index aaff9ee32695..b30b2139e3f0 100644 --- a/sound/core/seq/oss/seq_oss_midi.c +++ b/sound/core/seq/oss/seq_oss_midi.c | |||
| @@ -612,9 +612,7 @@ send_midi_event(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, struct seq | |||
| 612 | if (!dp->timer->running) | 612 | if (!dp->timer->running) |
| 613 | len = snd_seq_oss_timer_start(dp->timer); | 613 | len = snd_seq_oss_timer_start(dp->timer); |
| 614 | if (ev->type == SNDRV_SEQ_EVENT_SYSEX) { | 614 | if (ev->type == SNDRV_SEQ_EVENT_SYSEX) { |
| 615 | if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) == SNDRV_SEQ_EVENT_LENGTH_VARIABLE) | 615 | snd_seq_oss_readq_sysex(dp->readq, mdev->seq_device, ev); |
| 616 | snd_seq_oss_readq_puts(dp->readq, mdev->seq_device, | ||
| 617 | ev->data.ext.ptr, ev->data.ext.len); | ||
| 618 | } else { | 616 | } else { |
| 619 | len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev); | 617 | len = snd_midi_event_decode(mdev->coder, msg, sizeof(msg), ev); |
| 620 | if (len > 0) | 618 | if (len > 0) |
diff --git a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c index 046cb586fb2f..06b21226b4e7 100644 --- a/sound/core/seq/oss/seq_oss_readq.c +++ b/sound/core/seq/oss/seq_oss_readq.c | |||
| @@ -118,6 +118,35 @@ snd_seq_oss_readq_puts(struct seq_oss_readq *q, int dev, unsigned char *data, in | |||
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | /* | 120 | /* |
| 121 | * put MIDI sysex bytes; the event buffer may be chained, thus it has | ||
| 122 | * to be expanded via snd_seq_dump_var_event(). | ||
| 123 | */ | ||
| 124 | struct readq_sysex_ctx { | ||
| 125 | struct seq_oss_readq *readq; | ||
| 126 | int dev; | ||
| 127 | }; | ||
| 128 | |||
| 129 | static int readq_dump_sysex(void *ptr, void *buf, int count) | ||
| 130 | { | ||
| 131 | struct readq_sysex_ctx *ctx = ptr; | ||
| 132 | |||
| 133 | return snd_seq_oss_readq_puts(ctx->readq, ctx->dev, buf, count); | ||
| 134 | } | ||
| 135 | |||
| 136 | int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev, | ||
| 137 | struct snd_seq_event *ev) | ||
| 138 | { | ||
| 139 | struct readq_sysex_ctx ctx = { | ||
| 140 | .readq = q, | ||
| 141 | .dev = dev | ||
| 142 | }; | ||
| 143 | |||
| 144 | if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE) | ||
| 145 | return 0; | ||
| 146 | return snd_seq_dump_var_event(ev, readq_dump_sysex, &ctx); | ||
| 147 | } | ||
| 148 | |||
| 149 | /* | ||
| 121 | * copy an event to input queue: | 150 | * copy an event to input queue: |
| 122 | * return zero if enqueued | 151 | * return zero if enqueued |
| 123 | */ | 152 | */ |
diff --git a/sound/core/seq/oss/seq_oss_readq.h b/sound/core/seq/oss/seq_oss_readq.h index f1463f1f449e..8d033ca2d23f 100644 --- a/sound/core/seq/oss/seq_oss_readq.h +++ b/sound/core/seq/oss/seq_oss_readq.h | |||
| @@ -44,6 +44,8 @@ void snd_seq_oss_readq_delete(struct seq_oss_readq *q); | |||
| 44 | void snd_seq_oss_readq_clear(struct seq_oss_readq *readq); | 44 | void snd_seq_oss_readq_clear(struct seq_oss_readq *readq); |
| 45 | unsigned int snd_seq_oss_readq_poll(struct seq_oss_readq *readq, struct file *file, poll_table *wait); | 45 | unsigned int snd_seq_oss_readq_poll(struct seq_oss_readq *readq, struct file *file, poll_table *wait); |
| 46 | int snd_seq_oss_readq_puts(struct seq_oss_readq *readq, int dev, unsigned char *data, int len); | 46 | int snd_seq_oss_readq_puts(struct seq_oss_readq *readq, int dev, unsigned char *data, int len); |
| 47 | int snd_seq_oss_readq_sysex(struct seq_oss_readq *q, int dev, | ||
| 48 | struct snd_seq_event *ev); | ||
| 47 | int snd_seq_oss_readq_put_event(struct seq_oss_readq *readq, union evrec *ev); | 49 | int snd_seq_oss_readq_put_event(struct seq_oss_readq *readq, union evrec *ev); |
| 48 | int snd_seq_oss_readq_put_timestamp(struct seq_oss_readq *readq, unsigned long curt, int seq_mode); | 50 | int snd_seq_oss_readq_put_timestamp(struct seq_oss_readq *readq, unsigned long curt, int seq_mode); |
| 49 | int snd_seq_oss_readq_pick(struct seq_oss_readq *q, union evrec *rec); | 51 | int snd_seq_oss_readq_pick(struct seq_oss_readq *q, union evrec *rec); |
