Lines Matching refs:dev
81 static void drain_midi_queue(int dev) in drain_midi_queue() argument
88 if (midi_devs[dev]->buffer_status != NULL) in drain_midi_queue()
89 wait_event_interruptible_timeout(midi_sleeper[dev], in drain_midi_queue()
90 !midi_devs[dev]->buffer_status(dev), HZ/10); in drain_midi_queue()
93 static void midi_input_intr(int dev, unsigned char data) in midi_input_intr() argument
95 if (midi_in_buf[dev] == NULL) in midi_input_intr()
105 if (SPACE_AVAIL(midi_in_buf[dev])) { in midi_input_intr()
106 QUEUE_BYTE(midi_in_buf[dev], data); in midi_input_intr()
107 wake_up(&input_sleeper[dev]); in midi_input_intr()
111 static void midi_output_intr(int dev) in midi_output_intr() argument
121 int dev; in midi_poll() local
126 for (dev = 0; dev < num_midis; dev++) in midi_poll()
127 if (midi_devs[dev] != NULL && midi_out_buf[dev] != NULL) in midi_poll()
129 while (DATA_AVAIL(midi_out_buf[dev])) in midi_poll()
132 int c = midi_out_buf[dev]->queue[midi_out_buf[dev]->head]; in midi_poll()
135 ok = midi_devs[dev]->outputc(dev, c); in midi_poll()
139 midi_out_buf[dev]->head = (midi_out_buf[dev]->head + 1) % MAX_QUEUE_SIZE; in midi_poll()
140 midi_out_buf[dev]->len--; in midi_poll()
143 if (DATA_AVAIL(midi_out_buf[dev]) < 100) in midi_poll()
144 wake_up(&midi_sleeper[dev]); in midi_poll()
155 int MIDIbuf_open(int dev, struct file *file) in MIDIbuf_open() argument
159 dev = dev >> 4; in MIDIbuf_open()
167 if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL) in MIDIbuf_open()
173 module_put(midi_devs[dev]->owner); in MIDIbuf_open()
175 if ((err = midi_devs[dev]->open(dev, mode, in MIDIbuf_open()
179 parms[dev].prech_timeout = MAX_SCHEDULE_TIMEOUT; in MIDIbuf_open()
180 midi_in_buf[dev] = vmalloc(sizeof(struct midi_buf)); in MIDIbuf_open()
182 if (midi_in_buf[dev] == NULL) in MIDIbuf_open()
185 midi_devs[dev]->close(dev); in MIDIbuf_open()
188 midi_in_buf[dev]->len = midi_in_buf[dev]->head = midi_in_buf[dev]->tail = 0; in MIDIbuf_open()
190 midi_out_buf[dev] = vmalloc(sizeof(struct midi_buf)); in MIDIbuf_open()
192 if (midi_out_buf[dev] == NULL) in MIDIbuf_open()
195 midi_devs[dev]->close(dev); in MIDIbuf_open()
196 vfree(midi_in_buf[dev]); in MIDIbuf_open()
197 midi_in_buf[dev] = NULL; in MIDIbuf_open()
200 midi_out_buf[dev]->len = midi_out_buf[dev]->head = midi_out_buf[dev]->tail = 0; in MIDIbuf_open()
203 init_waitqueue_head(&midi_sleeper[dev]); in MIDIbuf_open()
204 init_waitqueue_head(&input_sleeper[dev]); in MIDIbuf_open()
214 void MIDIbuf_release(int dev, struct file *file) in MIDIbuf_release() argument
218 dev = dev >> 4; in MIDIbuf_release()
221 if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL) in MIDIbuf_release()
230 midi_devs[dev]->outputc(dev, 0xfe); /* in MIDIbuf_release()
235 wait_event_interruptible(midi_sleeper[dev], in MIDIbuf_release()
236 !DATA_AVAIL(midi_out_buf[dev])); in MIDIbuf_release()
241 drain_midi_queue(dev); /* in MIDIbuf_release()
246 midi_devs[dev]->close(dev); in MIDIbuf_release()
251 vfree(midi_in_buf[dev]); in MIDIbuf_release()
252 vfree(midi_out_buf[dev]); in MIDIbuf_release()
253 midi_in_buf[dev] = NULL; in MIDIbuf_release()
254 midi_out_buf[dev] = NULL; in MIDIbuf_release()
256 module_put(midi_devs[dev]->owner); in MIDIbuf_release()
259 int MIDIbuf_write(int dev, struct file *file, const char __user *buf, int count) in MIDIbuf_write() argument
264 dev = dev >> 4; in MIDIbuf_write()
273 n = SPACE_AVAIL(midi_out_buf[dev]); in MIDIbuf_write()
284 if (wait_event_interruptible(midi_sleeper[dev], in MIDIbuf_write()
285 SPACE_AVAIL(midi_out_buf[dev]))) in MIDIbuf_write()
290 n = SPACE_AVAIL(midi_out_buf[dev]); in MIDIbuf_write()
304 QUEUE_BYTE(midi_out_buf[dev], tmp_data); in MIDIbuf_write()
313 int MIDIbuf_read(int dev, struct file *file, char __user *buf, int count) in MIDIbuf_read() argument
318 dev = dev >> 4; in MIDIbuf_read()
320 if (!DATA_AVAIL(midi_in_buf[dev])) { /* in MIDIbuf_read()
327 wait_event_interruptible_timeout(input_sleeper[dev], in MIDIbuf_read()
328 DATA_AVAIL(midi_in_buf[dev]), in MIDIbuf_read()
329 parms[dev].prech_timeout); in MIDIbuf_read()
334 if (c == 0 && DATA_AVAIL(midi_in_buf[dev])) /* in MIDIbuf_read()
338 n = DATA_AVAIL(midi_in_buf[dev]); in MIDIbuf_read()
346 REMOVE_BYTE(midi_in_buf[dev], tmp_data); in MIDIbuf_read()
362 int MIDIbuf_ioctl(int dev, struct file *file, in MIDIbuf_ioctl() argument
367 dev = dev >> 4; in MIDIbuf_ioctl()
371 if (midi_devs[dev]->coproc) /* Coprocessor ioctl */ in MIDIbuf_ioctl()
372 return midi_devs[dev]->coproc->ioctl(midi_devs[dev]->coproc->devc, cmd, arg, 0); in MIDIbuf_ioctl()
386 parms[dev].prech_timeout = val; in MIDIbuf_ioctl()
390 if (!midi_devs[dev]->ioctl) in MIDIbuf_ioctl()
392 return midi_devs[dev]->ioctl(dev, cmd, arg); in MIDIbuf_ioctl()
398 unsigned int MIDIbuf_poll(int dev, struct file *file, poll_table * wait) in MIDIbuf_poll() argument
402 dev = dev >> 4; in MIDIbuf_poll()
405 poll_wait(file, &input_sleeper[dev], wait); in MIDIbuf_poll()
406 if (DATA_AVAIL(midi_in_buf[dev])) in MIDIbuf_poll()
410 poll_wait(file, &midi_sleeper[dev], wait); in MIDIbuf_poll()
411 if (!SPACE_AVAIL(midi_out_buf[dev])) in MIDIbuf_poll()
418 int MIDIbuf_avail(int dev) in MIDIbuf_avail() argument
420 if (midi_in_buf[dev]) in MIDIbuf_avail()
421 return DATA_AVAIL (midi_in_buf[dev]); in MIDIbuf_avail()