Lines Matching refs:devc
46 #define DATAPORT (devc->base)
47 #define COMDPORT (devc->base+1)
48 #define STATPORT (devc->base+1)
50 static int uart401_status(struct uart401_devc *devc) in uart401_status() argument
55 #define input_avail(devc) (!(uart401_status(devc)&INPUT_AVAIL)) argument
56 #define output_ready(devc) (!(uart401_status(devc)&OUTPUT_READY)) argument
58 static void uart401_cmd(struct uart401_devc *devc, unsigned char cmd) in uart401_cmd() argument
63 static int uart401_read(struct uart401_devc *devc) in uart401_read() argument
68 static void uart401_write(struct uart401_devc *devc, unsigned char byte) in uart401_write() argument
79 static int reset_uart401(struct uart401_devc *devc);
80 static void enter_uart_mode(struct uart401_devc *devc);
82 static void uart401_input_loop(struct uart401_devc *devc) in uart401_input_loop() argument
86 while (input_avail(devc) && --work_limit) in uart401_input_loop()
88 unsigned char c = uart401_read(devc); in uart401_input_loop()
91 devc->input_byte = c; in uart401_input_loop()
92 else if (devc->opened & OPEN_READ && devc->midi_input_intr) in uart401_input_loop()
93 devc->midi_input_intr(devc->my_dev, c); in uart401_input_loop()
96 …printk(KERN_WARNING "Too much work in interrupt on uart401 (0x%X). UART jabbering ??\n", devc->bas… in uart401_input_loop()
101 struct uart401_devc *devc = dev_id; in uart401intr() local
103 if (devc == NULL) in uart401intr()
109 if (input_avail(devc)) in uart401intr()
110 uart401_input_loop(devc); in uart401intr()
120 struct uart401_devc *devc = (struct uart401_devc *) in uart401_open() local
121 midi_devs[dev]->devc; in uart401_open()
123 if (devc->opened) in uart401_open()
128 while (input_avail(devc)) in uart401_open()
129 uart401_read(devc); in uart401_open()
131 devc->midi_input_intr = input; in uart401_open()
132 devc->opened = mode; in uart401_open()
133 enter_uart_mode(devc); in uart401_open()
134 devc->disabled = 0; in uart401_open()
141 struct uart401_devc *devc = (struct uart401_devc *) in uart401_close() local
142 midi_devs[dev]->devc; in uart401_close()
144 reset_uart401(devc); in uart401_close()
145 devc->opened = 0; in uart401_close()
152 struct uart401_devc *devc = (struct uart401_devc *) in uart401_out() local
153 midi_devs[dev]->devc; in uart401_out()
155 if (devc->disabled) in uart401_out()
161 spin_lock_irqsave(&devc->lock,flags); in uart401_out()
162 if (input_avail(devc)) in uart401_out()
163 uart401_input_loop(devc); in uart401_out()
165 spin_unlock_irqrestore(&devc->lock,flags); in uart401_out()
172 for (timeout = 30000; timeout > 0 && !output_ready(devc); timeout--); in uart401_out()
174 if (!output_ready(devc)) in uart401_out()
177 devc->disabled = 1; in uart401_out()
178 reset_uart401(devc); in uart401_out()
179 enter_uart_mode(devc); in uart401_out()
182 uart401_write(devc, midi_byte); in uart401_out()
224 static void enter_uart_mode(struct uart401_devc *devc) in enter_uart_mode() argument
229 spin_lock_irqsave(&devc->lock,flags); in enter_uart_mode()
230 for (timeout = 30000; timeout > 0 && !output_ready(devc); timeout--); in enter_uart_mode()
232 devc->input_byte = 0; in enter_uart_mode()
233 uart401_cmd(devc, UART_MODE_ON); in enter_uart_mode()
237 if (devc->input_byte == MPU_ACK) in enter_uart_mode()
239 else if (input_avail(devc)) in enter_uart_mode()
240 if (uart401_read(devc) == MPU_ACK) in enter_uart_mode()
243 spin_unlock_irqrestore(&devc->lock,flags); in enter_uart_mode()
246 static int reset_uart401(struct uart401_devc *devc) in reset_uart401() argument
258 for (timeout = 30000; timeout > 0 && !output_ready(devc); timeout--); in reset_uart401()
259 devc->input_byte = 0; in reset_uart401()
260 uart401_cmd(devc, MPU_RESET); in reset_uart401()
269 if (devc->input_byte == MPU_ACK) /* Interrupt */ in reset_uart401()
271 else if (input_avail(devc)) in reset_uart401()
273 if (uart401_read(devc) == MPU_ACK) in reset_uart401()
281 uart401_input_loop(devc); in reset_uart401()
290 struct uart401_devc *devc; in probe_uart401() local
305 devc = kmalloc(sizeof(struct uart401_devc), GFP_KERNEL); in probe_uart401()
306 if (!devc) { in probe_uart401()
311 devc->base = hw_config->io_base; in probe_uart401()
312 devc->irq = hw_config->irq; in probe_uart401()
313 devc->osp = hw_config->osp; in probe_uart401()
314 devc->midi_input_intr = NULL; in probe_uart401()
315 devc->opened = 0; in probe_uart401()
316 devc->input_byte = 0; in probe_uart401()
317 devc->my_dev = 0; in probe_uart401()
318 devc->share_irq = 0; in probe_uart401()
319 spin_lock_init(&devc->lock); in probe_uart401()
321 spin_lock_irqsave(&devc->lock,flags); in probe_uart401()
322 ok = reset_uart401(devc); in probe_uart401()
323 spin_unlock_irqrestore(&devc->lock,flags); in probe_uart401()
331 if (devc->irq < 0) { in probe_uart401()
332 devc->share_irq = 1; in probe_uart401()
333 devc->irq *= -1; in probe_uart401()
335 devc->share_irq = 0; in probe_uart401()
337 if (!devc->share_irq) in probe_uart401()
338 if (request_irq(devc->irq, uart401intr, 0, "MPU-401 UART", devc) < 0) { in probe_uart401()
339 printk(KERN_WARNING "uart401: Failed to allocate IRQ%d\n", devc->irq); in probe_uart401()
340 devc->share_irq = 1; in probe_uart401()
342 devc->my_dev = sound_alloc_mididev(); in probe_uart401()
343 enter_uart_mode(devc); in probe_uart401()
345 if (devc->my_dev == -1) { in probe_uart401()
350 midi_devs[devc->my_dev] = kmemdup(&uart401_operations, in probe_uart401()
353 if (!midi_devs[devc->my_dev]) { in probe_uart401()
359 midi_devs[devc->my_dev]->owner = owner; in probe_uart401()
361 midi_devs[devc->my_dev]->devc = devc; in probe_uart401()
362 midi_devs[devc->my_dev]->converter = kmemdup(&std_midi_synth, in probe_uart401()
366 if (!midi_devs[devc->my_dev]->converter) { in probe_uart401()
370 strcpy(midi_devs[devc->my_dev]->info.name, name); in probe_uart401()
371 midi_devs[devc->my_dev]->converter->id = "UART401"; in probe_uart401()
372 midi_devs[devc->my_dev]->converter->midi_dev = devc->my_dev; in probe_uart401()
375 midi_devs[devc->my_dev]->converter->owner = owner; in probe_uart401()
377 hw_config->slots[4] = devc->my_dev; in probe_uart401()
379 devc->opened = 0; in probe_uart401()
382 kfree(midi_devs[devc->my_dev]); in probe_uart401()
384 sound_unload_mididev(devc->my_dev); in probe_uart401()
386 if (!devc->share_irq) in probe_uart401()
387 free_irq(devc->irq, devc); in probe_uart401()
389 kfree(devc); in probe_uart401()
397 struct uart401_devc *devc; in unload_uart401() local
406 devc = midi_devs[hw_config->slots[4]]->devc; in unload_uart401()
407 if (devc == NULL) in unload_uart401()
410 reset_uart401(devc); in unload_uart401()
413 if (!devc->share_irq) in unload_uart401()
414 free_irq(devc->irq, devc); in unload_uart401()
415 kfree(midi_devs[devc->my_dev]->converter); in unload_uart401()
416 kfree(midi_devs[devc->my_dev]); in unload_uart401()
417 kfree(devc); in unload_uart401()