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

Joel Sherrill joel.sherrill at OARcorp.com
Thu Apr 5 19:36:16 UTC 2012


Committed.

Thanks.

On 04/05/2012 10:29 AM, Joel Sherrill wrote:
> 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