[PATCH 34.5 v2 6/6] LEON3: added TX-wait-complete and CR on NL support for UART
Daniel Hellstrom
daniel at gaisler.com
Fri Apr 20 06:23:16 UTC 2012
On 04/19/2012 07:26 PM, Joel Sherrill wrote:
> 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.
Ok, thanks.
>> 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 devel
mailing list