[PATCH 37] LEON3: renamed console/debugputs.c to printk_support.c

Joel Sherrill joel.sherrill at OARcorp.com
Thu Apr 19 16:55:51 UTC 2012


Ok to commit

Gedare Bloom <gedare at rtems.org> wrote:

>looks good to me
>
>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/Makefile.am           |    2 +-
>>  c/src/lib/libbsp/sparc/leon3/console/debugputs.c   |  169 --------------------
>>  .../libbsp/sparc/leon3/console/printk_support.c    |  169 ++++++++++++++++++++
>>  3 files changed, 170 insertions(+), 170 deletions(-)
>>  delete mode 100644 c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>  create mode 100644 c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>>
>> diff --git a/c/src/lib/libbsp/sparc/leon3/Makefile.am b/c/src/lib/libbsp/sparc/leon3/Makefile.am
>> index 09d8b8e..a9badce 100644
>> --- a/c/src/lib/libbsp/sparc/leon3/Makefile.am
>> +++ b/c/src/lib/libbsp/sparc/leon3/Makefile.am
>> @@ -63,7 +63,7 @@ libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp_show.c
>>  # console
>>  libbsp_a_SOURCES += console/console.c
>>  # debugio
>> -libbsp_a_SOURCES += console/debugputs.c
>> +libbsp_a_SOURCES += console/printk_support.c
>>  # clock
>>  libbsp_a_SOURCES += clock/ckinit.c
>>  libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>> deleted file mode 100644
>> index 9815053..0000000
>> --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>> +++ /dev/null
>> @@ -1,169 +0,0 @@
>> -/*
>> - *  This file contains the TTY driver for the serial ports on the LEON.
>> - *
>> - *  This driver uses the termios pseudo driver.
>> - *
>> - *  COPYRIGHT (c) 1989-1999.
>> - *  On-Line Applications Research Corporation (OAR).
>> - *
>> - *  Modified for LEON3 BSP.
>> - *  COPYRIGHT (c) 2011.
>> - *  Aeroflex Gaisler.
>> - *
>> - *  The license and distribution terms for this file may be
>> - *  found in the file LICENSE in this distribution or at
>> - *  http://www.rtems.com/license/LICENSE.
>> - */
>> -
>> -#include <bsp.h>
>> -#include <rtems/libio.h>
>> -#include <stdlib.h>
>> -#include <assert.h>
>> -#include <stdio.h>
>> -
>> -/* Let user override which on-chip APBUART will be debug UART
>> - * 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
>> - * 1 = APBUART[0]
>> - * 2 = APBUART[1]
>> - * 3 = APBUART[2]
>> - * ...
>> - */
>> -int debug_uart_index __attribute__((weak)) = 0;
>> -struct apbuart_regs *dbg_uart = NULL;
>> -
>> -/* Before UART driver has registered (or when no UART is available), calls to
>> - * printk that gets to bsp_out_char() will be filling data into the
>> - * pre_printk_dbgbuf[] buffer, hopefully the buffer can help debugging the
>> - * early BSP boot.. At least the last printk() will be caught.
>> - */
>> -char pre_printk_dbgbuf[32] = {0};
>> -int pre_printk_pos = 0;
>> -
>> -/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
>> - * for a debug APBUART and enable RX/TX for that UART.
>> - */
>> -int bsp_debug_uart_init(void)
>> -{
>> -  int i;
>> -  struct ambapp_dev *adev;
>> -  struct ambapp_apb_info *apb;
>> -
>> -  /* Update debug_uart_index to index used as debug console.
>> -   * Let user select Debug console by setting debug_uart_index. If the
>> -   * BSP is to provide the default UART (debug_uart_index==0):
>> -   *   non-MP: APBUART[0] is debug console
>> -   *   MP: LEON CPU index select UART
>> -   */
>> -  if (debug_uart_index == 0) {
>> -#if defined(RTEMS_MULTIPROCESSING)
>> -    debug_uart_index = LEON3_Cpu_Index;
>> -#else
>> -    debug_uart_index = 0;
>> -#endif
>> -  } else {
>> -    debug_uart_index = debug_uart_index - 1; /* User selected dbg-console */
>> -  }
>> -
>> -  /* Find APBUART core for System Debug Console */
>> -  i = debug_uart_index;
>> -  adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
>> -                                 VENDOR_GAISLER, GAISLER_APBUART,
>> -                                 ambapp_find_by_idx, (void *)&i);
>> -  if (adev) {
>> -    /* Found a matching debug console, initialize debug uart if present
>> -     * for printk
>> -     */
>> -    apb = (struct ambapp_apb_info *)adev->devinfo;
>> -    dbg_uart = (struct apbuart_regs *)apb->start;
>> -    dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE;
>> -    dbg_uart->status = 0;
>> -    return 1;
>> -  } else
>> -    return 0;
>> -}
>> -
>> -/*
>> - *  apbuart_outbyte_polled
>> - *
>> - *  This routine transmits a character using polling.
>> - */
>> -void apbuart_outbyte_polled(
>> -  struct apbuart_regs *regs,
>> -  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"::);
>> -    asm volatile ("nop"::); asm volatile ("nop"::);
>> -    asm volatile ("nop"::); asm volatile ("nop"::);
>> -    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)
>> -      ;
>> -  }
>> -}
>> -
>> -/*
>> - *  apbuart_inbyte_nonblocking
>> - *
>> - *  This routine polls for a character.
>> - */
>> -int apbuart_inbyte_nonblocking(struct apbuart_regs *regs)
>> -{
>> -  /* Clear errors */
>> -  if (regs->status & LEON_REG_UART_STATUS_ERR)
>> -    regs->status = ~LEON_REG_UART_STATUS_ERR;
>> -
>> -  if ((regs->status & LEON_REG_UART_STATUS_DR) == 0)
>> -    return EOF;
>> -  else
>> -    return (int) regs->data;
>> -}
>> -
>> -/* putchar/getchar for printk */
>> -static void bsp_out_char(char c)
>> -{
>> -  if (dbg_uart == NULL) {
>> -    /* Local debug buffer when UART driver has not registered */
>> -    pre_printk_dbgbuf[pre_printk_pos++] = c;
>> -    pre_printk_pos = pre_printk_pos & (sizeof(pre_printk_dbgbuf)-1);
>> -    return;
>> -  }
>> -
>> -  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>> -}
>> -
>> -/*
>> - *  To support printk
>> - */
>> -
>> -#include <rtems/bspIo.h>
>> -
>> -BSP_output_char_function_type BSP_output_char = bsp_out_char;
>> -
>> -static int bsp_in_char(void)
>> -{
>> -  int tmp;
>> -
>> -  if (dbg_uart == NULL)
>> -    return EOF;
>> -
>> -  while ((tmp = apbuart_inbyte_nonblocking(dbg_uart)) < 0)
>> -    ;
>> -  return tmp;
>> -}
>> -
>> -BSP_polling_getchar_function_type BSP_poll_char = bsp_in_char;
>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/printk_support.c b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>> new file mode 100644
>> index 0000000..9815053
>> --- /dev/null
>> +++ b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>> @@ -0,0 +1,169 @@
>> +/*
>> + *  This file contains the TTY driver for the serial ports on the LEON.
>> + *
>> + *  This driver uses the termios pseudo driver.
>> + *
>> + *  COPYRIGHT (c) 1989-1999.
>> + *  On-Line Applications Research Corporation (OAR).
>> + *
>> + *  Modified for LEON3 BSP.
>> + *  COPYRIGHT (c) 2011.
>> + *  Aeroflex Gaisler.
>> + *
>> + *  The license and distribution terms for this file may be
>> + *  found in the file LICENSE in this distribution or at
>> + *  http://www.rtems.com/license/LICENSE.
>> + */
>> +
>> +#include <bsp.h>
>> +#include <rtems/libio.h>
>> +#include <stdlib.h>
>> +#include <assert.h>
>> +#include <stdio.h>
>> +
>> +/* Let user override which on-chip APBUART will be debug UART
>> + * 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
>> + * 1 = APBUART[0]
>> + * 2 = APBUART[1]
>> + * 3 = APBUART[2]
>> + * ...
>> + */
>> +int debug_uart_index __attribute__((weak)) = 0;
>> +struct apbuart_regs *dbg_uart = NULL;
>> +
>> +/* Before UART driver has registered (or when no UART is available), calls to
>> + * printk that gets to bsp_out_char() will be filling data into the
>> + * pre_printk_dbgbuf[] buffer, hopefully the buffer can help debugging the
>> + * early BSP boot.. At least the last printk() will be caught.
>> + */
>> +char pre_printk_dbgbuf[32] = {0};
>> +int pre_printk_pos = 0;
>> +
>> +/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
>> + * for a debug APBUART and enable RX/TX for that UART.
>> + */
>> +int bsp_debug_uart_init(void)
>> +{
>> +  int i;
>> +  struct ambapp_dev *adev;
>> +  struct ambapp_apb_info *apb;
>> +
>> +  /* Update debug_uart_index to index used as debug console.
>> +   * Let user select Debug console by setting debug_uart_index. If the
>> +   * BSP is to provide the default UART (debug_uart_index==0):
>> +   *   non-MP: APBUART[0] is debug console
>> +   *   MP: LEON CPU index select UART
>> +   */
>> +  if (debug_uart_index == 0) {
>> +#if defined(RTEMS_MULTIPROCESSING)
>> +    debug_uart_index = LEON3_Cpu_Index;
>> +#else
>> +    debug_uart_index = 0;
>> +#endif
>> +  } else {
>> +    debug_uart_index = debug_uart_index - 1; /* User selected dbg-console */
>> +  }
>> +
>> +  /* Find APBUART core for System Debug Console */
>> +  i = debug_uart_index;
>> +  adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
>> +                                 VENDOR_GAISLER, GAISLER_APBUART,
>> +                                 ambapp_find_by_idx, (void *)&i);
>> +  if (adev) {
>> +    /* Found a matching debug console, initialize debug uart if present
>> +     * for printk
>> +     */
>> +    apb = (struct ambapp_apb_info *)adev->devinfo;
>> +    dbg_uart = (struct apbuart_regs *)apb->start;
>> +    dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE;
>> +    dbg_uart->status = 0;
>> +    return 1;
>> +  } else
>> +    return 0;
>> +}
>> +
>> +/*
>> + *  apbuart_outbyte_polled
>> + *
>> + *  This routine transmits a character using polling.
>> + */
>> +void apbuart_outbyte_polled(
>> +  struct apbuart_regs *regs,
>> +  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"::);
>> +    asm volatile ("nop"::); asm volatile ("nop"::);
>> +    asm volatile ("nop"::); asm volatile ("nop"::);
>> +    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)
>> +      ;
>> +  }
>> +}
>> +
>> +/*
>> + *  apbuart_inbyte_nonblocking
>> + *
>> + *  This routine polls for a character.
>> + */
>> +int apbuart_inbyte_nonblocking(struct apbuart_regs *regs)
>> +{
>> +  /* Clear errors */
>> +  if (regs->status & LEON_REG_UART_STATUS_ERR)
>> +    regs->status = ~LEON_REG_UART_STATUS_ERR;
>> +
>> +  if ((regs->status & LEON_REG_UART_STATUS_DR) == 0)
>> +    return EOF;
>> +  else
>> +    return (int) regs->data;
>> +}
>> +
>> +/* putchar/getchar for printk */
>> +static void bsp_out_char(char c)
>> +{
>> +  if (dbg_uart == NULL) {
>> +    /* Local debug buffer when UART driver has not registered */
>> +    pre_printk_dbgbuf[pre_printk_pos++] = c;
>> +    pre_printk_pos = pre_printk_pos & (sizeof(pre_printk_dbgbuf)-1);
>> +    return;
>> +  }
>> +
>> +  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>> +}
>> +
>> +/*
>> + *  To support printk
>> + */
>> +
>> +#include <rtems/bspIo.h>
>> +
>> +BSP_output_char_function_type BSP_output_char = bsp_out_char;
>> +
>> +static int bsp_in_char(void)
>> +{
>> +  int tmp;
>> +
>> +  if (dbg_uart == NULL)
>> +    return EOF;
>> +
>> +  while ((tmp = apbuart_inbyte_nonblocking(dbg_uart)) < 0)
>> +    ;
>> +  return tmp;
>> +}
>> +
>> +BSP_polling_getchar_function_type BSP_poll_char = bsp_in_char;
>> --
>> 1.7.0.4
>>




More information about the devel mailing list