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

Daniel Hellstrom daniel at gaisler.com
Thu Apr 19 11:31:22 CDT 2012


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.

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



More information about the rtems-devel mailing list