[PATCH 34.5 v2 6/6] LEON3: added TX-wait-complete and CR on NL support for UART

Joel Sherrill joel.sherrill at OARcorp.com
Thu Apr 19 17:26:01 UTC 2012


On 04/19/2012 11:31 AM, Daniel Hellstrom wrote:
> On 04/19/2012 06:25 PM, Gedare Bloom wrote:
>> To be more clear, I'm OK with the patch as-is. I think the bool might
>> help readability and should be considered down the road.
> Ok, I will keep it in mind for the future.
Ok to commit as is.

bool is an improvement but doesn't say much about what
the parameters mean logically. But given this is a BSP
private routine called only in a few places, it would read better.

Daniel.. please add changing it to bool to your list for a
follow up patch.
> Daniel
>
>> On Thu, Apr 19, 2012 at 12:23 PM, Gedare Bloom<gedare at rtems.org>   wrote:
>>> Are the new do_cr_on_newline and wait_sent boolean flags? can we use a
>>> bool type? Maybe I'm being difficult but it just will be a little
>>> easier to read the code I think. Otherwise I think this looks ok given
>>> the rename patch coming up.
>>>
>>> On Thu, Apr 19, 2012 at 9:21 AM, Daniel Hellstrom<daniel at gaisler.com>   wrote:
>>>> Signed-off-by: Daniel Hellstrom<daniel at gaisler.com>
>>>> ---
>>>>    c/src/lib/libbsp/sparc/leon3/console/console.c   |   11 +++++++----
>>>>    c/src/lib/libbsp/sparc/leon3/console/debugputs.c |   18 ++++++++++++++++--
>>>>    2 files changed, 23 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>> index aece47a..fc6d5b0 100644
>>>> --- a/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>> +++ b/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>> @@ -50,8 +50,11 @@ int syscon_uart_index __attribute__((weak)) = 0;
>>>>
>>>>    extern void apbuart_outbyte_polled(
>>>>     ambapp_apb_uart *regs,
>>>> -  char ch
>>>> -);
>>>> +  unsigned char ch,
>>>> +  int do_cr_on_newline,
>>>> +  int wait_sent
>>>> +  );
>>>> +
>>>>
>>>>    /* body is in debugputs.c */
>>>>
>>>> @@ -157,7 +160,7 @@ ssize_t console_write_polled(int minor, const char *buf, size_t len)
>>>>       port = minor - 1;
>>>>
>>>>     while (nwrite<   len) {
>>>> -    apbuart_outbyte_polled(apbuarts[port].regs, *buf++);
>>>> +    apbuart_outbyte_polled(apbuarts[port].regs, *buf++, 1, 0);
>>>>       nwrite++;
>>>>     }
>>>>     return nwrite;
>>>> @@ -324,7 +327,7 @@ rtems_device_driver console_initialize(
>>>>      * On a MP system one should not open UARTs that other OS instances use.
>>>>      */
>>>>     if (syscon_uart_index<   uarts) {
>>>> -    status = rtems_io_register_name( "/dev/console", major, 0 );
>>>> +    status = rtems_io_register_name("/dev/console", major, 0);
>>>>       if (status != RTEMS_SUCCESSFUL)
>>>>         rtems_fatal_error_occurred(status);
>>>>     }
>>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>> index 7058cf8..080d4fa 100644
>>>> --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>> +++ b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>> @@ -89,9 +89,12 @@ int bsp_debug_uart_init(void)
>>>>    */
>>>>    void apbuart_outbyte_polled(
>>>>     ambapp_apb_uart *regs,
>>>> -  unsigned char ch
>>>> +  unsigned char ch,
>>>> +  int do_cr_on_newline,
>>>> +  int wait_sent
>>>>    )
>>>>    {
>>>> +send:
>>>>     while ( (regs->status&   LEON_REG_UART_STATUS_THE) == 0 ) {
>>>>       /* Lower bus utilization while waiting for UART */
>>>>       asm volatile ("nop"::); asm volatile ("nop"::);
>>>> @@ -100,6 +103,17 @@ void apbuart_outbyte_polled(
>>>>       asm volatile ("nop"::); asm volatile ("nop"::);
>>>>     }
>>>>     regs->data = (unsigned int) ch;
>>>> +
>>>> +  if ((ch == '\n')&&   do_cr_on_newline) {
>>>> +    ch = '\r';
>>>> +    goto send;
>>>> +  }
>>>> +
>>>> +  /* Wait until the character has been sent? */
>>>> +  if (wait_sent) {
>>>> +    while ((regs->status&   LEON_REG_UART_STATUS_THE) == 0)
>>>> +      ;
>>>> +  }
>>>>    }
>>>>
>>>>    /*
>>>> @@ -129,7 +143,7 @@ static void bsp_out_char(char c)
>>>>       return;
>>>>     }
>>>>
>>>> -  apbuart_outbyte_polled(dbg_uart, c);
>>>> +  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>>>>    }
>>>>
>>>>    /*
>>>> --
>>>> 1.7.0.4
>>>>


-- 
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