[PATCH 37] LEON3: renamed console/debugputs.c to printk_support.c
Gedare Bloom
gedare at rtems.org
Thu Apr 19 17:36:12 UTC 2012
patch didn't apply cleanly but I was able to recreate it and
apply/push. please verify.
-Gedare
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