[a91dc98b] | 1 | /* |
---|
[116ef2e9] | 2 | * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. |
---|
[a91dc98b] | 3 | * |
---|
| 4 | * embedded brains GmbH |
---|
| 5 | * Dornierstr. 4 |
---|
| 6 | * 82178 Puchheim |
---|
| 7 | * Germany |
---|
| 8 | * <info@embedded-brains.de> |
---|
| 9 | * |
---|
| 10 | * The license and distribution terms for this file may be |
---|
| 11 | * found in the file LICENSE in this distribution or at |
---|
[c499856] | 12 | * http://www.rtems.org/license/LICENSE. |
---|
[a91dc98b] | 13 | */ |
---|
| 14 | |
---|
[3b645c1] | 15 | #include <rtems/serial_mouse.h> |
---|
[116ef2e9] | 16 | #include <rtems/bspIo.h> |
---|
[a91dc98b] | 17 | |
---|
| 18 | #include <bsp.h> |
---|
| 19 | #include <bsp/irq.h> |
---|
| 20 | #include <bsp/arm-pl011.h> |
---|
[3b645c1] | 21 | #include <bsp/arm-pl050.h> |
---|
[116ef2e9] | 22 | #include <bsp/console-termios.h> |
---|
| 23 | |
---|
| 24 | static arm_pl011_context pl011_context = { |
---|
| 25 | .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("PL011"), |
---|
| 26 | .regs = (volatile pl011 *) 0x10009000, |
---|
| 27 | .irq = RVPBXA9_IRQ_UART_0, |
---|
| 28 | .initial_baud = 115200 |
---|
| 29 | }; |
---|
| 30 | |
---|
| 31 | static arm_pl050_context pl050_context = { |
---|
| 32 | .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("PL050"), |
---|
| 33 | .regs = (volatile pl050 *) 0x10007000, |
---|
| 34 | .irq = RVPBXA9_IRQ_KMI1, |
---|
| 35 | .initial_baud = 115200 |
---|
| 36 | }; |
---|
| 37 | |
---|
| 38 | static void output_char(char c) |
---|
| 39 | { |
---|
| 40 | if (c == '\n') { |
---|
| 41 | arm_pl011_write_polled(&pl011_context.base, '\r'); |
---|
| 42 | } |
---|
| 43 | |
---|
| 44 | arm_pl011_write_polled(&pl011_context.base, c); |
---|
| 45 | } |
---|
| 46 | |
---|
| 47 | static bool pl011_probe(rtems_termios_device_context *base) |
---|
| 48 | { |
---|
| 49 | BSP_output_char = output_char; |
---|
| 50 | |
---|
| 51 | return arm_pl011_probe(base); |
---|
| 52 | } |
---|
| 53 | |
---|
| 54 | static void output_char_init(char c) |
---|
| 55 | { |
---|
| 56 | pl011_probe(&pl011_context.base); |
---|
| 57 | output_char(c); |
---|
| 58 | } |
---|
| 59 | |
---|
| 60 | BSP_output_char_function_type BSP_output_char = output_char_init; |
---|
| 61 | |
---|
| 62 | BSP_polling_getchar_function_type BSP_poll_char = NULL; |
---|
[3b645c1] | 63 | |
---|
[116ef2e9] | 64 | const console_device console_device_table[] = { |
---|
[a91dc98b] | 65 | { |
---|
[116ef2e9] | 66 | .device_file = "/dev/ttyS0", |
---|
| 67 | .probe = pl011_probe, |
---|
| 68 | .handler = &arm_pl011_fns, |
---|
| 69 | .context = &pl011_context.base |
---|
[3b645c1] | 70 | }, { |
---|
[116ef2e9] | 71 | .device_file = SERIAL_MOUSE_DEVICE_PS2, |
---|
| 72 | .probe = console_device_probe_default, |
---|
| 73 | .handler = &arm_pl050_fns, |
---|
| 74 | .context = &pl050_context.base |
---|
[a91dc98b] | 75 | } |
---|
| 76 | }; |
---|
| 77 | |
---|
[116ef2e9] | 78 | const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table); |
---|