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

Gedare Bloom gedare at rtems.org
Thu Apr 19 16:25:02 UTC 2012


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.

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 devel mailing list