[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