Lines Matching refs:midi

55 wf_mpu_status (snd_wavefront_midi_t *midi)
58 return inb (midi->mpu_status_port);
62 input_avail (snd_wavefront_midi_t *midi)
65 return !(wf_mpu_status(midi) & INPUT_AVAIL);
69 output_ready (snd_wavefront_midi_t *midi)
72 return !(wf_mpu_status(midi) & OUTPUT_READY);
76 read_data (snd_wavefront_midi_t *midi)
79 return inb (midi->mpu_data_port);
83 write_data (snd_wavefront_midi_t *midi, unsigned char byte)
86 outb (byte, midi->mpu_data_port);
109 return &acard->wavefront.midi;
114 snd_wavefront_midi_t *midi = &card->wavefront.midi;
132 if (midi->substream_output[midi->output_mpu] == NULL) {
141 if (output_ready (midi))
145 spin_lock_irqsave (&midi->virtual, flags);
146 if ((midi->mode[midi->output_mpu] & MPU401_MODE_OUTPUT) == 0) {
147 spin_unlock_irqrestore (&midi->virtual, flags);
150 if (output_ready (midi)) {
151 if (snd_rawmidi_transmit(midi->substream_output[midi->output_mpu], &midi_byte, 1) == 1) {
152 if (!midi->isvirtual ||
155 write_data(midi, midi_byte);
158 if (midi->istimer) {
159 if (--midi->istimer <= 0)
160 del_timer(&midi->timer);
162 midi->mode[midi->output_mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
163 spin_unlock_irqrestore (&midi->virtual, flags);
167 spin_unlock_irqrestore (&midi->virtual, flags);
170 spin_unlock_irqrestore (&midi->virtual, flags);
175 if (midi->substream_output[!midi->output_mpu] == NULL) {
184 if (output_ready (midi))
188 spin_lock_irqsave (&midi->virtual, flags);
189 if (!midi->isvirtual)
191 mpu = midi->output_mpu ^ mask;
193 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT) == 0) {
194 spin_unlock_irqrestore (&midi->virtual, flags);
197 if (snd_rawmidi_transmit_empty(midi->substream_output[mpu]))
199 if (output_ready (midi)) {
200 if (mpu != midi->output_mpu) {
201 write_data(midi, mpu == internal_mpu ?
204 midi->output_mpu = mpu;
205 } else if (snd_rawmidi_transmit(midi->substream_output[mpu], &midi_byte, 1) == 1) {
206 if (!midi->isvirtual ||
209 write_data(midi, midi_byte);
213 if (midi->istimer) {
214 if (--midi->istimer <= 0)
215 del_timer(&midi->timer);
217 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
218 spin_unlock_irqrestore (&midi->virtual, flags);
222 spin_unlock_irqrestore (&midi->virtual, flags);
225 spin_unlock_irqrestore (&midi->virtual, flags);
232 snd_wavefront_midi_t *midi;
242 if ((midi = get_wavefront_midi (substream)) == NULL)
245 spin_lock_irqsave (&midi->open, flags);
246 midi->mode[mpu] |= MPU401_MODE_INPUT;
247 midi->substream_input[mpu] = substream;
248 spin_unlock_irqrestore (&midi->open, flags);
256 snd_wavefront_midi_t *midi;
266 if ((midi = get_wavefront_midi (substream)) == NULL)
269 spin_lock_irqsave (&midi->open, flags);
270 midi->mode[mpu] |= MPU401_MODE_OUTPUT;
271 midi->substream_output[mpu] = substream;
272 spin_unlock_irqrestore (&midi->open, flags);
280 snd_wavefront_midi_t *midi;
290 if ((midi = get_wavefront_midi (substream)) == NULL)
293 spin_lock_irqsave (&midi->open, flags);
294 midi->mode[mpu] &= ~MPU401_MODE_INPUT;
295 spin_unlock_irqrestore (&midi->open, flags);
303 snd_wavefront_midi_t *midi;
313 if ((midi = get_wavefront_midi (substream)) == NULL)
316 spin_lock_irqsave (&midi->open, flags);
317 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT;
318 spin_unlock_irqrestore (&midi->open, flags);
325 snd_wavefront_midi_t *midi;
336 if ((midi = get_wavefront_midi (substream)) == NULL) {
340 spin_lock_irqsave (&midi->virtual, flags);
342 midi->mode[mpu] |= MPU401_MODE_INPUT_TRIGGER;
344 midi->mode[mpu] &= ~MPU401_MODE_INPUT_TRIGGER;
346 spin_unlock_irqrestore (&midi->virtual, flags);
351 snd_wavefront_midi_t *midi = from_timer(midi, t, timer);
352 snd_wavefront_card_t *card = midi->timer_card;
355 spin_lock_irqsave (&midi->virtual, flags);
356 mod_timer(&midi->timer, 1 + jiffies);
357 spin_unlock_irqrestore (&midi->virtual, flags);
364 snd_wavefront_midi_t *midi;
375 if ((midi = get_wavefront_midi (substream)) == NULL) {
379 spin_lock_irqsave (&midi->virtual, flags);
381 if ((midi->mode[mpu] & MPU401_MODE_OUTPUT_TRIGGER) == 0) {
382 if (!midi->istimer) {
383 timer_setup(&midi->timer,
386 mod_timer(&midi->timer, 1 + jiffies);
388 midi->istimer++;
389 midi->mode[mpu] |= MPU401_MODE_OUTPUT_TRIGGER;
392 midi->mode[mpu] &= ~MPU401_MODE_OUTPUT_TRIGGER;
394 spin_unlock_irqrestore (&midi->virtual, flags);
405 snd_wavefront_midi_t *midi;
411 midi = &card->wavefront.midi;
413 if (!input_avail (midi)) { /* not for us */
418 spin_lock_irqsave (&midi->virtual, flags);
421 if (input_avail (midi)) {
422 byte = read_data (midi);
424 if (midi->isvirtual) {
426 substream = midi->substream_input[external_mpu];
429 substream = midi->substream_output[internal_mpu];
433 substream = midi->substream_input[internal_mpu];
441 if (midi->mode[mpu] & MPU401_MODE_INPUT_TRIGGER) {
448 spin_unlock_irqrestore (&midi->virtual, flags);
459 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
460 card->wavefront.midi.isvirtual = 1;
461 card->wavefront.midi.output_mpu = internal_mpu;
462 card->wavefront.midi.input_mpu = internal_mpu;
463 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
472 spin_lock_irqsave (&card->wavefront.midi.virtual, flags);
475 card->wavefront.midi.isvirtual = 0;
476 spin_unlock_irqrestore (&card->wavefront.midi.virtual, flags);
486 snd_wavefront_midi_t *midi;
489 midi = &dev->midi;
497 for (i = 0; i < 30000 && !output_ready (midi); i++);
499 if (!output_ready (midi)) {
510 outb (UART_MODE_ON, midi->mpu_command_port);
513 if (input_avail (midi)) {
514 if (read_data (midi) == MPU_ACK) {