[PATCH 29] LEON3: console use register pointers instead of UART indexes

Joel Sherrill joel.sherrill at OARcorp.com
Thu Apr 5 15:29:46 UTC 2012


Looks OK to me.

On 04/05/2012 10:23 AM, Daniel Hellstrom wrote:
> Signed-off-by: Daniel Hellstrom<daniel at gaisler.com>
> ---
>   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 a07fb15..320aa37 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 cf3f280..43c6d7d 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<rtems/libio.h>
>   #include<stdlib.h>
>   #include<assert.h>
> +#include<stdio.h>
>
>   /*
>    * 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;
>   }


-- 
Joel Sherrill, Ph.D.             Director of Research&   Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
     Support Available             (256) 722-9985





More information about the devel mailing list