From e60e862c64ee0c90cc8ddb51315694a4fa893f5d Mon Sep 17 00:00:00 2001 From: Daniel Hellstrom Date: Thu, 5 Apr 2012 10:23:19 -0500 Subject: LEON3: console use register pointers instead of UART indexes Signed-off-by: Daniel Hellstrom --- c/src/lib/libbsp/sparc/leon3/console/console.c | 16 ++++---- c/src/lib/libbsp/sparc/leon3/console/debugputs.c | 50 ++++++++++++------------ 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c index a07fb154b9..320aa373a5 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/console.c +++ b/c/src/lib/libbsp/sparc/leon3/console/console.c @@ -40,13 +40,13 @@ int syscon_uart_index __attribute__((weak)) = 0; */ /* - * console_outbyte_polled + * apbuart_outbyte_polled * * This routine transmits a character using polling. */ -void console_outbyte_polled( - int port, +extern void apbuart_outbyte_polled( + ambapp_apb_uart *regs, char ch ); @@ -58,7 +58,7 @@ void console_outbyte_polled( * This routine polls for a character. */ -int apbuart_inbyte_nonblocking(int port); +extern int apbuart_inbyte_nonblocking(ambapp_apb_uart *regs); /* body is in debugputs.c */ @@ -78,13 +78,13 @@ ssize_t console_write_support (int minor, const char *buf, size_t len) port = minor - 1; while (nwrite < len) { - console_outbyte_polled(port, *buf++); + apbuart_outbyte_polled((ambapp_apb_uart*)LEON3_Console_Uart[port], *buf++); nwrite++; } return nwrite; } -int console_inbyte_nonblocking(int minor) +int console_pollRead(int minor) { int port; @@ -93,7 +93,7 @@ int console_inbyte_nonblocking(int minor) else port = minor - 1; - return apbuart_inbyte_nonblocking(port); + return apbuart_inbyte_nonblocking((ambapp_apb_uart*)LEON3_Console_Uart[port]); } /* @@ -168,7 +168,7 @@ rtems_device_driver console_open( static const rtems_termios_callbacks pollCallbacks = { NULL, /* firstOpen */ NULL, /* lastClose */ - console_inbyte_nonblocking, /* pollRead */ + console_pollRead, /* pollRead */ console_write_support, /* write */ NULL, /* setAttributes */ NULL, /* stopRemoteTx */ diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c index cf3f280520..43c6d7d816 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c +++ b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c @@ -21,6 +21,7 @@ #include #include #include +#include /* * Number of uarts on AMBA bus @@ -37,6 +38,7 @@ static int isinit = 0; * ... */ int debug_uart_index __attribute__((weak)) = 0; +ambapp_apb_uart *dbg_uart = NULL; /* * Scan for UARTS in configuration @@ -74,9 +76,9 @@ int scan_uarts(void) /* initialize debug uart if present for printk */ if (debug_uart_index < uarts) { - LEON3_Console_Uart[debug_uart_index]->ctrl |= LEON_REG_UART_CTRL_RE | - LEON_REG_UART_CTRL_TE; - LEON3_Console_Uart[debug_uart_index]->status = 0; + dbg_uart = (ambapp_apb_uart *)LEON3_Console_Uart[debug_uart_index]; + dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE; + dbg_uart->status = 0; } isinit = 1; } @@ -85,48 +87,43 @@ int scan_uarts(void) } /* - * console_outbyte_polled + * apbuart_outbyte_polled * * This routine transmits a character using polling. */ -void console_outbyte_polled( - int port, +void apbuart_outbyte_polled( + ambapp_apb_uart *regs, unsigned char ch ) { - if ((port >= 0) && (port < uarts)) { - return; - - while ( (LEON3_Console_Uart[port]->status & LEON_REG_UART_STATUS_THE) == 0 ); - LEON3_Console_Uart[port]->data = (unsigned int) ch; + while ( (regs->status & LEON_REG_UART_STATUS_THE) == 0 ); + regs->data = (unsigned int) ch; } /* - * console_inbyte_nonblocking + * apbuart_inbyte_nonblocking * * This routine polls for a character. */ -int apbuart_inbyte_nonblocking(int port) +int apbuart_inbyte_nonblocking(ambapp_apb_uart *regs) { - if ((port >= 0) && (port < uarts)) { - assert( 0 ); - return -1; - } - /* Clear errors */ - if (LEON3_Console_Uart[port]->status & LEON_REG_UART_STATUS_ERR) - LEON3_Console_Uart[port]->status = ~LEON_REG_UART_STATUS_ERR; + if (regs->status & LEON_REG_UART_STATUS_ERR) + regs->status = ~LEON_REG_UART_STATUS_ERR; - if ((LEON3_Console_Uart[port]->status & LEON_REG_UART_STATUS_DR) == 0) - return -1; + if ((regs->status & LEON_REG_UART_STATUS_DR) == 0) + return EOF; else - return (int) LEON3_Console_Uart[port]->data; + return (int) regs->data; } /* putchar/getchar for printk */ static void bsp_out_char(char c) { - console_outbyte_polled(debug_uart_index, c); + if (dbg_uart == NULL) + return; + + apbuart_outbyte_polled(dbg_uart, c); } /* @@ -141,7 +138,10 @@ static int bsp_in_char(void) { int tmp; - while ((tmp = apbuart_inbyte_nonblocking(debug_uart_index)) < 0) + if (dbg_uart == NULL) + return EOF; + + while ((tmp = apbuart_inbyte_nonblocking(dbg_uart)) < 0) ; return tmp; } -- cgit v1.2.3