summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-19 06:28:01 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 13:08:32 +0200
commitd7d66d7d4523b904c8ccc6aea3709dc0d5aa5bdc (patch)
treecaa54b4229e86a68c84ab5961af34e087dce5302 /c/src/lib/libbsp/arm
parentbsps/powerpc: Move shared btimer support (diff)
downloadrtems-d7d66d7d4523b904c8ccc6aea3709dc0d5aa5bdc.tar.bz2
bsps: Move console drivers to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'c/src/lib/libbsp/arm')
-rw-r--r--c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am6
-rw-r--r--c/src/lib/libbsp/arm/altera-cyclone-v/console/console-config.c158
-rw-r--r--c/src/lib/libbsp/arm/atsam/Makefile.am6
-rw-r--r--c/src/lib/libbsp/arm/atsam/console/console.c526
-rw-r--r--c/src/lib/libbsp/arm/atsam/console/debug-console.c52
-rw-r--r--c/src/lib/libbsp/arm/beagle/Makefile.am2
-rw-r--r--c/src/lib/libbsp/arm/beagle/console/console-config.c152
-rw-r--r--c/src/lib/libbsp/arm/csb336/Makefile.am2
-rw-r--r--c/src/lib/libbsp/arm/csb336/console/uart.c476
-rw-r--r--c/src/lib/libbsp/arm/csb337/Makefile.am10
-rw-r--r--c/src/lib/libbsp/arm/csb337/console/dbgu.c223
-rw-r--r--c/src/lib/libbsp/arm/csb337/console/fbcons.c125
-rw-r--r--c/src/lib/libbsp/arm/csb337/console/sed1356.c461
-rw-r--r--c/src/lib/libbsp/arm/csb337/console/uarts.c243
-rw-r--r--c/src/lib/libbsp/arm/csb337/console/usart.c261
-rw-r--r--c/src/lib/libbsp/arm/edb7312/Makefile.am2
-rw-r--r--c/src/lib/libbsp/arm/edb7312/console/uart.c169
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/Makefile.am4
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/console/console-io.c58
-rw-r--r--c/src/lib/libbsp/arm/gumstix/Makefile.am4
-rw-r--r--c/src/lib/libbsp/arm/gumstix/console/ffuart.c227
-rw-r--r--c/src/lib/libbsp/arm/gumstix/console/uarts.c66
-rw-r--r--c/src/lib/libbsp/arm/imx/Makefile.am4
-rw-r--r--c/src/lib/libbsp/arm/imx/console/console-config.c382
-rw-r--r--c/src/lib/libbsp/arm/lm3s69xx/Makefile.am4
-rw-r--r--c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c78
-rw-r--r--c/src/lib/libbsp/arm/lm3s69xx/console/uart.c167
-rw-r--r--c/src/lib/libbsp/arm/lpc176x/Makefile.am6
-rw-r--r--c/src/lib/libbsp/arm/lpc176x/console/console-config.c192
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/Makefile.am12
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/console-config.c134
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c40
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c40
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c40
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/Makefile.am8
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/console/console-config.c225
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/console/hsu.c208
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/Makefile.am14
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/console-config.c68
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/console_select.c114
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/fb.c437
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/fbcons.c177
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/font_data.h4639
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/outch.c463
-rw-r--r--c/src/lib/libbsp/arm/raspberrypi/console/usart.c167
-rw-r--r--c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am8
-rw-r--r--c/src/lib/libbsp/arm/realview-pbx-a9/console/console-config.c74
-rw-r--r--c/src/lib/libbsp/arm/rtl22xx/Makefile.am2
-rw-r--r--c/src/lib/libbsp/arm/rtl22xx/console/lpc22xx_uart.h187
-rw-r--r--c/src/lib/libbsp/arm/rtl22xx/console/uart.c283
-rw-r--r--c/src/lib/libbsp/arm/smdk2410/Makefile.am2
-rw-r--r--c/src/lib/libbsp/arm/smdk2410/console/uart.c242
-rw-r--r--c/src/lib/libbsp/arm/stm32f4/Makefile.am4
-rw-r--r--c/src/lib/libbsp/arm/stm32f4/console/console-config.c109
-rw-r--r--c/src/lib/libbsp/arm/stm32f4/console/usart.c214
-rw-r--r--c/src/lib/libbsp/arm/tms570/Makefile.am6
-rw-r--r--c/src/lib/libbsp/arm/tms570/console/printk-support.c126
-rw-r--r--c/src/lib/libbsp/arm/tms570/console/tms570-sci.c642
-rw-r--r--c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am8
-rw-r--r--c/src/lib/libbsp/arm/xilinx-zynq/console/console-config.c62
-rw-r--r--c/src/lib/libbsp/arm/xilinx-zynq/console/debug-console.c64
-rw-r--r--c/src/lib/libbsp/arm/xilinx-zynq/console/zynq-uart.c315
62 files changed, 57 insertions, 13143 deletions
diff --git a/c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am b/c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am
index 8fff55e7c8..63449347ad 100644
--- a/c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am
+++ b/c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am
@@ -106,9 +106,9 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += ../shared/arm-gic-irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios-init.c
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/altera-cyclone-v/console/console-config.c
# Clock
librtemsbsp_a_SOURCES += ../shared/arm-a9mpcore-clock-config.c
diff --git a/c/src/lib/libbsp/arm/altera-cyclone-v/console/console-config.c b/c/src/lib/libbsp/arm/altera-cyclone-v/console/console-config.c
deleted file mode 100644
index e4dfec9f62..0000000000
--- a/c/src/lib/libbsp/arm/altera-cyclone-v/console/console-config.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <info@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <rtems/bspIo.h>
-
-#include <bsp.h>
-#include <bsp/irq.h>
-#include <bsp/alt_clock_manager.h>
-#include <bsp/console-termios.h>
-#include <bsp/socal/alt_rstmgr.h>
-#include <bsp/socal/socal.h>
-#include <bsp/socal/alt_uart.h>
-#include <bsp/socal/hps.h>
-
-#ifdef BSP_USE_UART_INTERRUPTS
- #define DEVICE_FNS &ns16550_handler_interrupt
-#else
- #define DEVICE_FNS &ns16550_handler_polled
-#endif
-
-static uint8_t altera_cyclone_v_uart_get_register(uintptr_t addr, uint8_t i)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- return (uint8_t) reg [i];
-}
-
-static void altera_cyclone_v_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- reg [i] = val;
-}
-
-static bool altera_cyclone_v_uart_probe(
- rtems_termios_device_context *base,
- uint32_t uart_set_mask
-)
-{
- ns16550_context *ctx = (ns16550_context *) base;
- bool ret = true;
- uint32_t ucr;
- ALT_STATUS_CODE sc;
- void* location = (void *) ctx->port;
-
- /* The ALT_CLK_L4_SP is required for all SoCFPGA UARTs.
- * Check that it's enabled. */
- if ( alt_clk_is_enabled(ALT_CLK_L4_SP) != ALT_E_TRUE ) {
- ret = false;
- }
-
- if ( ret ) {
- sc = alt_clk_freq_get(ALT_CLK_L4_SP, &ctx->clock);
- if ( sc != ALT_E_SUCCESS ) {
- ret = false;
- }
- }
-
- if ( ret ) {
- // Bring UART out of reset.
- alt_clrbits_word(ALT_RSTMGR_PERMODRST_ADDR, uart_set_mask);
-
- // Verify the UCR (UART Component Version)
- ucr = alt_read_word( ALT_UART_UCV_ADDR( location ) );
- if ( ucr != ALT_UART_UCV_UART_COMPONENT_VER_RESET ) {
- ret = false;
- }
- }
-
- if ( ret ) {
- // Write SRR::UR (Shadow Reset Register :: UART Reset)
- alt_write_word( ALT_UART_SRR_ADDR( location ), ALT_UART_SRR_UR_SET_MSK );
-
- // Read the MSR to work around case:119085.
- (void)alt_read_word( ALT_UART_MSR_ADDR( location ) );
-
- ret = ns16550_probe( base );
- }
-
- return ret;
-}
-
-#ifdef CYCLONE_V_CONFIG_CONSOLE
-static bool altera_cyclone_v_uart_probe_0(rtems_termios_device_context *base)
-{
- return altera_cyclone_v_uart_probe(base, ALT_RSTMGR_PERMODRST_UART0_SET_MSK);
-}
-
-static ns16550_context altera_cyclone_v_uart_context_0 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 0"),
- .get_reg = altera_cyclone_v_uart_get_register,
- .set_reg = altera_cyclone_v_uart_set_register,
- .port = (uintptr_t) ALT_UART0_ADDR,
- .irq = ALT_INT_INTERRUPT_UART0,
- .initial_baud = CYCLONE_V_UART_BAUD
-};
-#endif
-
-#ifdef CYCLONE_V_CONFIG_UART_1
-static bool altera_cyclone_v_uart_probe_1(rtems_termios_device_context *base)
-{
- return altera_cyclone_v_uart_probe(base, ALT_RSTMGR_PERMODRST_UART1_SET_MSK);
-}
-
-static ns16550_context altera_cyclone_v_uart_context_1 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"),
- .get_reg = altera_cyclone_v_uart_get_register,
- .set_reg = altera_cyclone_v_uart_set_register,
- .port = (uintptr_t) ALT_UART1_ADDR,
- .irq = ALT_INT_INTERRUPT_UART1,
- .initial_baud = CYCLONE_V_UART_BAUD
-};
-#endif
-
-const console_device console_device_table[] = {
- #ifdef CYCLONE_V_CONFIG_CONSOLE
- {
- .device_file = "/dev/ttyS0",
- .probe = altera_cyclone_v_uart_probe_0,
- .handler = DEVICE_FNS,
- .context = &altera_cyclone_v_uart_context_0.base
- },
- #endif
- #ifdef CYCLONE_V_CONFIG_UART_1
- {
- .device_file = "/dev/ttyS1",
- .probe = altera_cyclone_v_uart_probe_1,
- .handler = DEVICE_FNS,
- .context = &altera_cyclone_v_uart_context_1.base
- },
- #endif
-};
-
-const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table);
-
-static void output_char(char c)
-{
- rtems_termios_device_context *ctx = console_device_table[0].context;
-
- ns16550_polled_putchar( ctx, c );
-}
-
-BSP_output_char_function_type BSP_output_char = output_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/arm/atsam/Makefile.am b/c/src/lib/libbsp/arm/atsam/Makefile.am
index 4472869d5c..758b84b343 100644
--- a/c/src/lib/libbsp/arm/atsam/Makefile.am
+++ b/c/src/lib/libbsp/arm/atsam/Makefile.am
@@ -113,9 +113,9 @@ librtemsbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq.c
librtemsbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq-dispatch.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console.c
-librtemsbsp_a_SOURCES += console/debug-console.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/atsam/console/console.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/atsam/console/debug-console.c
# Clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-armv7m.c
diff --git a/c/src/lib/libbsp/arm/atsam/console/console.c b/c/src/lib/libbsp/arm/atsam/console/console.c
deleted file mode 100644
index d51d2ace7d..0000000000
--- a/c/src/lib/libbsp/arm/atsam/console/console.c
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <bsp/irq.h>
-#include <bsp/fatal.h>
-#include <rtems/console.h>
-
-#include <rtems/termiostypes.h>
-
-#include <chip.h>
-
-#include <unistd.h>
-
-typedef struct {
- rtems_termios_device_context base;
- Usart *regs;
- rtems_vector_number irq;
- uint32_t id;
- bool console;
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- bool transmitting;
-#endif
-} atsam_usart_context;
-
-static atsam_usart_context atsam_usart_instances[] = {
- {
- .regs = USART0,
- .irq = USART0_IRQn,
- .id = ID_USART0
- }
-#ifdef USART1
- , {
- .regs = USART1,
- .irq = USART1_IRQn,
- .id = ID_USART1
- }
-#endif
-#ifdef USART2
- , {
- .regs = USART2,
- .irq = USART2_IRQn,
- .id = ID_USART2
- }
-#endif
-};
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
-static void atsam_usart_interrupt(void *arg)
-{
- rtems_termios_tty *tty = arg;
- atsam_usart_context *ctx = rtems_termios_get_device_context(tty);
- Usart *regs = ctx->regs;
- uint32_t csr = regs->US_CSR;
-
- while ((csr & US_CSR_RXRDY) != 0) {
- char c = (char) regs->US_RHR;
-
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
-
- csr = regs->US_CSR;
- }
-
- if (ctx->transmitting && (csr & US_CSR_TXEMPTY) != 0) {
- rtems_termios_dequeue_characters(tty, 1);
- }
-}
-#endif
-
-static bool atsam_usart_set_attributes(
- rtems_termios_device_context *base,
- const struct termios *term
-)
-{
- atsam_usart_context *ctx = (atsam_usart_context *) base;
- Usart *regs = ctx->regs;
- rtems_termios_baud_t baud;
- uint32_t mr;
-
- baud = rtems_termios_baud_to_number(term->c_ospeed);
- regs->US_BRGR = (BOARD_MCK / baud) / 16;
-
- if ((term->c_cflag & CREAD) != 0) {
- regs->US_CR = US_CR_RXEN | US_CR_TXEN;
- } else {
- regs->US_CR = US_CR_TXEN;
- }
-
- mr = US_MR_USART_MODE_NORMAL | US_MR_USCLKS_MCK;
-
- switch (term->c_cflag & CSIZE) {
- case CS5:
- mr |= US_MR_CHRL_5_BIT;
- break;
- case CS6:
- mr |= US_MR_CHRL_6_BIT;
- break;
- case CS7:
- mr |= US_MR_CHRL_7_BIT;
- break;
- default:
- mr |= US_MR_CHRL_8_BIT;
- break;
- }
-
- if ((term->c_cflag & PARENB) != 0) {
- if ((term->c_cflag & PARODD) != 0) {
- mr |= US_MR_PAR_ODD;
- } else {
- mr |= US_MR_PAR_EVEN;
- }
- } else {
- mr |= US_MR_PAR_NO;
- }
-
- if ((term->c_cflag & CSTOPB) != 0) {
- mr |= US_MR_NBSTOP_2_BIT;
- } else {
- mr |= US_MR_NBSTOP_1_BIT;
- }
-
- regs->US_MR = mr;
-
- return true;
-}
-
-static bool atsam_usart_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- atsam_usart_context *ctx = (atsam_usart_context *) base;
- Usart *regs = ctx->regs;
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- rtems_status_code sc;
-#endif
-
- regs->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RSTSTA;
- regs->US_IDR = 0xffffffff;
-
- PMC_EnablePeripheral(ctx->id);
-
- rtems_termios_set_initial_baud(tty, ATSAM_CONSOLE_BAUD);
- atsam_usart_set_attributes(base, term);
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- regs->US_IER = US_IDR_RXRDY;
- sc = rtems_interrupt_handler_install(
- ctx->irq,
- "USART",
- RTEMS_INTERRUPT_SHARED,
- atsam_usart_interrupt,
- tty
- );
- if (sc != RTEMS_SUCCESSFUL) {
- return false;
- }
-#endif
-
- return true;
-}
-
-static void atsam_usart_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- atsam_usart_context *ctx = (atsam_usart_context *) base;
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- rtems_interrupt_handler_remove(ctx->irq, atsam_usart_interrupt, tty);
-#endif
-
- if (!ctx->console) {
- PMC_DisablePeripheral(ctx->id);
- }
-}
-
-static void atsam_usart_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
- atsam_usart_context *ctx = (atsam_usart_context *) base;
- Usart *regs = ctx->regs;
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- if (len > 0) {
- ctx->transmitting = true;
- regs->US_THR = buf[0];
- regs->US_IER = US_IDR_TXEMPTY;
- } else {
- ctx->transmitting = false;
- regs->US_IDR = US_IDR_TXEMPTY;
- }
-#else
- size_t i;
-
- for (i = 0; i < len; ++i) {
- while ((regs->US_CSR & US_CSR_TXEMPTY) == 0) {
- /* Wait */
- }
-
- regs->US_THR = buf[i];
- }
-#endif
-}
-
-#ifndef ATSAM_CONSOLE_USE_INTERRUPTS
-static int atsam_usart_read(rtems_termios_device_context *base)
-{
- atsam_usart_context *ctx = (atsam_usart_context *) base;
- Usart *regs = ctx->regs;
-
- if ((regs->US_CSR & US_CSR_RXRDY) != 0) {
- return (char) regs->US_RHR;
- } else {
- return -1;
- }
-}
-#endif
-
-static const rtems_termios_device_handler atsam_usart_handler = {
- .first_open = atsam_usart_first_open,
- .last_close = atsam_usart_last_close,
- .write = atsam_usart_write,
- .set_attributes = atsam_usart_set_attributes,
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- .mode = TERMIOS_IRQ_DRIVEN
-#else
- .poll_read = atsam_usart_read,
- .mode = TERMIOS_POLLED
-#endif
-};
-
-typedef struct {
- rtems_termios_device_context base;
- Uart *regs;
- rtems_vector_number irq;
- uint32_t id;
- bool console;
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- bool transmitting;
-#endif
-} atsam_uart_context;
-
-static atsam_uart_context atsam_uart_instances[] = {
- {
- .regs = UART0,
- .irq = UART0_IRQn,
- .id = ID_UART0
- }
-#ifdef UART1
- , {
- .regs = UART1,
- .irq = UART1_IRQn,
- .id = ID_UART1
- }
-#endif
-#ifdef UART2
- , {
- .regs = UART2,
- .irq = UART2_IRQn,
- .id = ID_UART2
- }
-#endif
-#ifdef UART3
- , {
- .regs = UART3,
- .irq = UART3_IRQn,
- .id = ID_UART3
- }
-#endif
-#ifdef UART4
- , {
- .regs = UART4,
- .irq = UART4_IRQn,
- .id = ID_UART4
- }
-#endif
-};
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
-static void atsam_uart_interrupt(void *arg)
-{
- rtems_termios_tty *tty = arg;
- atsam_uart_context *ctx = rtems_termios_get_device_context(tty);
- Uart *regs = ctx->regs;
- uint32_t sr = regs->UART_SR;
-
- while ((sr & UART_SR_RXRDY) != 0) {
- char c = (char) regs->UART_RHR;
-
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
-
- sr = regs->UART_SR;
- }
-
- if (ctx->transmitting && (sr & UART_SR_TXEMPTY) != 0) {
- rtems_termios_dequeue_characters(tty, 1);
- }
-}
-#endif
-
-static bool atsam_uart_set_attributes(
- rtems_termios_device_context *base,
- const struct termios *term
-)
-{
- atsam_uart_context *ctx = (atsam_uart_context *) base;
- Uart *regs = ctx->regs;
- rtems_termios_baud_t baud;
- uint32_t mr;
-
- baud = rtems_termios_baud_to_number(term->c_ospeed);
- regs->UART_BRGR = (BOARD_MCK / baud) / 16;
-
- if ((term->c_cflag & CREAD) != 0) {
- regs->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
- } else {
- regs->UART_CR = UART_CR_TXEN;
- }
-
- mr = UART_MR_FILTER_DISABLED | UART_MR_BRSRCCK_PERIPH_CLK;
-
- if ((term->c_cflag & CSIZE) != CS8) {
- return false;
- }
-
- if ((term->c_cflag & PARENB) != 0) {
- if ((term->c_cflag & PARODD) != 0) {
- mr |= UART_MR_PAR_ODD;
- } else {
- mr |= UART_MR_PAR_EVEN;
- }
- } else {
- mr |= UART_MR_PAR_NO;
- }
-
- if ((term->c_cflag & CSTOPB) != 0) {
- return false;
- }
-
- regs->UART_MR = mr;
-
- return true;
-}
-
-static bool atsam_uart_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- atsam_uart_context *ctx = (atsam_uart_context *) base;
- Uart *regs = ctx->regs;
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- rtems_status_code sc;
-#endif
-
- regs->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RSTSTA;
- regs->UART_IDR = 0xffffffff;
-
- PMC_EnablePeripheral(ctx->id);
-
- rtems_termios_set_initial_baud(tty, ATSAM_CONSOLE_BAUD);
- atsam_uart_set_attributes(base, term);
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- regs->UART_IER = UART_IDR_RXRDY;
- sc = rtems_interrupt_handler_install(
- ctx->irq,
- "UART",
- RTEMS_INTERRUPT_SHARED,
- atsam_uart_interrupt,
- tty
- );
- if (sc != RTEMS_SUCCESSFUL) {
- return false;
- }
-#endif
-
- return true;
-}
-
-static void atsam_uart_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- atsam_uart_context *ctx = (atsam_uart_context *) base;
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- rtems_interrupt_handler_remove(ctx->irq, atsam_uart_interrupt, tty);
-#endif
-
- if (!ctx->console) {
- PMC_DisablePeripheral(ctx->id);
- }
-}
-
-static void atsam_uart_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
- atsam_uart_context *ctx = (atsam_uart_context *) base;
- Uart *regs = ctx->regs;
-
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- if (len > 0) {
- ctx->transmitting = true;
- regs->UART_THR = buf[0];
- regs->UART_IER = UART_IDR_TXEMPTY;
- } else {
- ctx->transmitting = false;
- regs->UART_IDR = UART_IDR_TXEMPTY;
- }
-#else
- size_t i;
-
- for (i = 0; i < len; ++i) {
- while ((regs->UART_SR & UART_SR_TXEMPTY) == 0) {
- /* Wait */
- }
-
- regs->UART_THR = buf[i];
- }
-#endif
-}
-
-#ifndef ATSAM_CONSOLE_USE_INTERRUPTS
-static int atsam_uart_read(rtems_termios_device_context *base)
-{
- atsam_uart_context *ctx = (atsam_uart_context *) base;
- Uart *regs = ctx->regs;
-
- if ((regs->UART_SR & UART_SR_RXRDY) != 0) {
- return (char) regs->UART_RHR;
- } else {
- return -1;
- }
-}
-#endif
-
-static const rtems_termios_device_handler atsam_uart_handler = {
- .first_open = atsam_uart_first_open,
- .last_close = atsam_uart_last_close,
- .write = atsam_uart_write,
- .set_attributes = atsam_uart_set_attributes,
-#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
- .mode = TERMIOS_IRQ_DRIVEN
-#else
- .poll_read = atsam_uart_read,
- .mode = TERMIOS_POLLED
-#endif
-};
-
-rtems_status_code console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- size_t i;
-
- rtems_termios_initialize();
-
- for (i = 0; i < RTEMS_ARRAY_SIZE(atsam_usart_instances); ++i) {
- char usart[] = "/dev/ttyUSARTX";
-
- usart[sizeof(usart) - 2] = (char) ('0' + i);
- rtems_termios_device_install(
- &usart[0],
- &atsam_usart_handler,
- NULL,
- &atsam_usart_instances[i].base
- );
-
-#if ATSAM_CONSOLE_DEVICE_TYPE == 0
- if (i == ATSAM_CONSOLE_DEVICE_INDEX) {
- atsam_usart_instances[i].console = true;
- link(&usart[0], CONSOLE_DEVICE_NAME);
- }
-#endif
- }
-
- for (i = 0; i < RTEMS_ARRAY_SIZE(atsam_uart_instances); ++i) {
- char uart[] = "/dev/ttyUARTX";
-
- uart[sizeof(uart) - 2] = (char) ('0' + i);
- rtems_termios_device_install(
- &uart[0],
- &atsam_uart_handler,
- NULL,
- &atsam_uart_instances[i].base
- );
-
-#if ATSAM_CONSOLE_DEVICE_TYPE == 1
- if (i == ATSAM_CONSOLE_DEVICE_INDEX) {
- atsam_uart_instances[i].console = true;
- link(&uart[0], CONSOLE_DEVICE_NAME);
- }
-#endif
- }
-
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/arm/atsam/console/debug-console.c b/c/src/lib/libbsp/arm/atsam/console/debug-console.c
deleted file mode 100644
index a405fe9665..0000000000
--- a/c/src/lib/libbsp/arm/atsam/console/debug-console.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/bspIo.h>
-#include <rtems/sysinit.h>
-
-#include <bsp/atsam-clock-config.h>
-#include <chip.h>
-#include <include/dbg_console.h>
-
-static void atsam_debug_console_out(char c)
-{
- DBG_PutChar((uint8_t) c);
-}
-
-static void atsam_debug_console_init(void)
-{
- DBG_Configure(115200, BOARD_MCK);
- BSP_output_char = atsam_debug_console_out;
-}
-
-static void atsam_debug_console_early_init(char c)
-{
- atsam_debug_console_init();
- atsam_debug_console_out(c);
-}
-
-static int atsam_debug_console_in(void)
-{
- return (int) DBG_GetChar();
-}
-
-BSP_output_char_function_type BSP_output_char = atsam_debug_console_early_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = atsam_debug_console_in;
-
-RTEMS_SYSINIT_ITEM(
- atsam_debug_console_init,
- RTEMS_SYSINIT_BSP_START,
- RTEMS_SYSINIT_ORDER_LAST
-);
diff --git a/c/src/lib/libbsp/arm/beagle/Makefile.am b/c/src/lib/libbsp/arm/beagle/Makefile.am
index 079bc3d342..9e351295a3 100644
--- a/c/src/lib/libbsp/arm/beagle/Makefile.am
+++ b/c/src/lib/libbsp/arm/beagle/Makefile.am
@@ -65,7 +65,7 @@ librtemsbsp_a_SOURCES += irq.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/beagle/console/console-config.c
# I2C
librtemsbsp_a_SOURCES += i2c/bbb-i2c.c
diff --git a/c/src/lib/libbsp/arm/beagle/console/console-config.c b/c/src/lib/libbsp/arm/beagle/console/console-config.c
deleted file mode 100644
index 78af5f6a93..0000000000
--- a/c/src/lib/libbsp/arm/beagle/console/console-config.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * @file
- *
- * @ingroup arm_beagle
- *
- * @brief Console configuration.
- */
-
-/*
- * Copyright (c) 2012 Claas Ziemke. All rights reserved.
- *
- * Claas Ziemke
- * Kernerstrasse 11
- * 70182 Stuttgart
- * Germany
- * <claas.ziemke@gmx.net>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- *
- * Modified by Ben Gras <beng@shrike-systems.com> to make
- * interrupt-driven uart i/o work for beagleboards; beaglebone support added.
- */
-
-#include <libchip/serial.h>
-#include <libchip/ns16550.h>
-
-#include <rtems/bspIo.h>
-
-#include <bsp.h>
-#include <bsp/irq.h>
-#include <bsp/uart-output-char.h>
-
-#define CONSOLE_UART_THR (*(volatile unsigned int *)BSP_CONSOLE_UART_BASE)
-#define CONSOLE_UART_RHR (*(volatile unsigned int *)BSP_CONSOLE_UART_BASE)
-#define CONSOLE_UART_LSR (*(volatile unsigned int *)(BSP_CONSOLE_UART_BASE+0x14))
-#define CONSOLE_SYSC (*(volatile uint32_t *) (BSP_CONSOLE_UART_BASE + 0x54))
-#define CONSOLE_SYSS (*(volatile uint32_t *) (BSP_CONSOLE_UART_BASE + 0x58))
-
-#define TX_FIFO_E (1<<5)
-#define RX_FIFO_E (1<<0)
-
-static uint8_t beagle_uart_get_register(uintptr_t addr, uint8_t i)
-{
- uint8_t v;
- volatile uint32_t *reg_r = (volatile uint32_t *) addr + i;
-
- if(reg_r == (uint32_t*) BSP_CONSOLE_UART_BASE /* reading RHR */ ) {
- /* check there should be anything in the RHR before accessing it */
- if(!(CONSOLE_UART_LSR & 0x01)) {
- return 0;
- }
- }
-
- v = (uint8_t) *reg_r;
-
- return v;
-}
-
-static void beagle_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- reg [i] = val;
-}
-
-console_tbl Console_Configuration_Ports [] = {
- {
- .sDeviceName = "/dev/ttyS0",
- .deviceType = SERIAL_NS16550,
-#if CONSOLE_POLLED /* option to facilitate running the tests */
- .pDeviceFns = &ns16550_fns_polled,
-#else
- .pDeviceFns = &ns16550_fns,
-#endif
- .ulMargin = 16,
- .ulHysteresis = 8,
- .pDeviceParams = (void *) CONSOLE_BAUD,
- .ulCtrlPort1 = BSP_CONSOLE_UART_BASE,
- .ulDataPort = BSP_CONSOLE_UART_BASE,
- .ulIntVector = BSP_CONSOLE_UART_IRQ,
- .getRegister = beagle_uart_get_register,
- .setRegister = beagle_uart_set_register,
- .ulClock = UART_CLOCK, /* 48MHz base clock */
- },
-};
-
-unsigned long Console_Configuration_Count = 1;
-
-static int init_needed = 1; // don't rely on bss being 0
-
-static void beagle_console_init(void)
-{
- if(init_needed) {
- const uint32_t div = UART_CLOCK / 16 / CONSOLE_BAUD;
- CONSOLE_SYSC = 2;
- while ((CONSOLE_SYSS & 1) == 0)
- ;
- if ((CONSOLE_LSR & (CONSOLE_LSR_THRE | CONSOLE_LSR_TEMT)) == CONSOLE_LSR_THRE) {
- CONSOLE_LCR = 0x83;
- CONSOLE_DLL = div;
- CONSOLE_DLM = (div >> 8) & 0xff;
- CONSOLE_LCR = 0x03;
- CONSOLE_ACR = 0x00;
- }
-
- while ((CONSOLE_LSR & CONSOLE_LSR_TEMT) == 0)
- ;
-
- CONSOLE_LCR = 0x80 | 0x03;
- CONSOLE_DLL = 0x00;
- CONSOLE_DLM = 0x00;
- CONSOLE_LCR = 0x03;
- CONSOLE_MCR = 0x03;
- CONSOLE_FCR = 0x07;
- CONSOLE_LCR = 0x83;
- CONSOLE_DLL = div;
- CONSOLE_DLM = (div >> 8) & 0xff;
- CONSOLE_LCR = 0x03;
- CONSOLE_ACR = 0x00;
- init_needed = 0;
- }
-}
-
-#define CONSOLE_THR8 (*(volatile uint8_t *) (BSP_CONSOLE_UART_BASE + 0x00))
-
-static void uart_write_polled( char c )
-{
- if(init_needed) beagle_console_init();
-
- while( ( CONSOLE_LSR & TX_FIFO_E ) == 0 )
- ;
- CONSOLE_THR8 = c;
-}
-
-static void _BSP_put_char( char c ) {
- uart_write_polled( c );
-}
-
-static int _BSP_get_char(void)
-{
- if ((CONSOLE_LSR & CONSOLE_LSR_RDR) != 0) {
- return CONSOLE_RBR;
- } else {
- return -1;
- }
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_put_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_get_char;
diff --git a/c/src/lib/libbsp/arm/csb336/Makefile.am b/c/src/lib/libbsp/arm/csb336/Makefile.am
index 04deee4f90..45f9ce342e 100644
--- a/c/src/lib/libbsp/arm/csb336/Makefile.am
+++ b/c/src/lib/libbsp/arm/csb336/Makefile.am
@@ -30,7 +30,7 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounter
librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/csb336/clock/clockdrv.c
librtemsbsp_a_SOURCES += timer/timer.c
# console
-librtemsbsp_a_SOURCES += console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb336/console/uart.c
# IRQ
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
diff --git a/c/src/lib/libbsp/arm/csb336/console/uart.c b/c/src/lib/libbsp/arm/csb336/console/uart.c
deleted file mode 100644
index 8d8a0c1ed0..0000000000
--- a/c/src/lib/libbsp/arm/csb336/console/uart.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Console driver for MC9328XML UARTs.
- *
- * Written Jay Monkman <jtm@lopingdog.com>
- * Copyright (c) 2005 by Loping Dog Embedded Systems
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license
- */
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <libchip/sersupp.h>
-#include <rtems/error.h>
-#include <rtems/bspIo.h>
-#include <assert.h>
-#include <termios.h>
-#include <rtems/irq.h>
-#include <bsp/irq.h>
-#include <mc9328mxl.h>
-#include <rtems/console.h>
-#include <inttypes.h>
-
-/* Define this to use interrupt driver UART driver */
-#define USE_INTERRUPTS 1
-
-/* How many serial ports? */
-#define NUM_DEVS 2
-#define poll_write(c) imx_uart_poll_write_char(0, c)
-#define poll_read() imx_uart_poll_read_char(0)
-
-static int imx_uart_first_open(int, int, void *);
-static int imx_uart_last_close(int, int, void *);
-static int imx_uart_poll_read(int);
-static int imx_uart_set_attrs(int, const struct termios *);
-static void imx_uart_init(int minor);
-static void imx_uart_set_baud(int, int);
-static ssize_t imx_uart_poll_write(int, const char *, size_t);
-static int imx_uart_poll_read_char(int minor);
-static void imx_uart_poll_write_char(int minor, char c);
-static void _BSP_output_char(char c);
-static int _BSP_poll_char(void);
-
-#if USE_INTERRUPTS
-static void imx_uart_tx_isr(void *);
-static void imx_uart_rx_isr(void *);
-static void imx_uart_isr_on(rtems_vector_number);
-static void imx_uart_isr_off(rtems_vector_number);
-static ssize_t imx_uart_intr_write(int, const char *, size_t);
-static rtems_vector_number imx_uart_name_transmit(int minor);
-static rtems_vector_number imx_uart_name_receive(int minor);
-#endif
-
-/* TERMIOS callbacks */
-#if USE_INTERRUPTS
-rtems_termios_callbacks imx_uart_cbacks = {
- .firstOpen = imx_uart_first_open,
- .lastClose = imx_uart_last_close,
- .pollRead = NULL,
- .write = imx_uart_intr_write,
- .setAttributes = imx_uart_set_attrs,
- .stopRemoteTx = NULL,
- .startRemoteTx = NULL,
- .outputUsesInterrupts = 1,
-};
-#else
-rtems_termios_callbacks imx_uart_cbacks = {
- .firstOpen = imx_uart_first_open,
- .lastClose = imx_uart_last_close,
- .pollRead = imx_uart_poll_read,
- .write = imx_uart_poll_write,
- .setAttributes = imx_uart_set_attrs,
- .stopRemoteTx = NULL,
- .startRemoteTx = NULL,
- .outputUsesInterrupts = 0,
-};
-#endif
-
-typedef struct {
- int minor;
- mc9328mxl_uart_regs_t * regs;
- volatile const char *buf;
- volatile int len;
- volatile int idx;
- void *tty;
-} imx_uart_data_t;
-
-static imx_uart_data_t imx_uart_data[NUM_DEVS];
-
-rtems_device_driver console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code status;
- int i;
-
- for (i = 0; i < NUM_DEVS; i++) {
- imx_uart_init(i);
- }
-
- rtems_termios_initialize();
-
- /* /dev/console and /dev/tty0 are the same */
- status = rtems_io_register_name("/dev/console", major, 0);
- if (status != RTEMS_SUCCESSFUL) {
- rtems_panic("%s:%d Error registering /dev/console :: %d\n",
- __FUNCTION__, __LINE__, status);
- }
-
- status = rtems_io_register_name("/dev/tty0", major, 0);
- if (status != RTEMS_SUCCESSFUL) {
- rtems_panic("%s:%d Error registering /dev/tty0 :: %d\n",
- __FUNCTION__, __LINE__, status);
- }
-
- status = rtems_io_register_name("/dev/tty1", major, 1);
- if (status != RTEMS_SUCCESSFUL) {
- rtems_panic("%s:%d Error registering /dev/tty1 :: %d\n",
- __FUNCTION__, __LINE__, status);
- }
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_device_driver console_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void * arg
-)
-{
- rtems_status_code rc;
-
- if (minor > (NUM_DEVS - 1)) {
- return RTEMS_INVALID_NUMBER;
- }
-
- rc = rtems_termios_open(major, minor, arg, &imx_uart_cbacks);
-
- return rc;
-}
-
-rtems_device_driver console_close(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void * arg
-)
-{
- return rtems_termios_close(arg);
-}
-
-rtems_device_driver console_read(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void * arg
-)
-{
- return rtems_termios_read(arg);
-}
-
-rtems_device_driver console_write(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void * arg
-)
-{
- return rtems_termios_write(arg);
-}
-
-rtems_device_driver console_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void * arg
-)
-{
- return rtems_termios_ioctl(arg);
-}
-
-static void imx_uart_init(int minor)
-{
- imx_uart_data[minor].minor = minor;
- imx_uart_data[minor].buf = NULL;
- imx_uart_data[minor].len = 0;
- imx_uart_data[minor].idx = 0;
-
- if (minor == 0) {
- imx_uart_data[minor].regs =
- (mc9328mxl_uart_regs_t *) MC9328MXL_UART1_BASE;
- } else if (minor == 1) {
- imx_uart_data[minor].regs =
- (mc9328mxl_uart_regs_t *) MC9328MXL_UART2_BASE;
- } else {
- rtems_panic("%s:%d Unknown UART minor number %d\n",
- __FUNCTION__, __LINE__, minor);
- }
-
- imx_uart_data[minor].regs->cr1 = (
- MC9328MXL_UART_CR1_UARTCLKEN |
- MC9328MXL_UART_CR1_UARTEN);
-
- imx_uart_data[minor].regs->cr2 = (
- MC9328MXL_UART_CR2_IRTS |
- MC9328MXL_UART_CR2_WS |
- MC9328MXL_UART_CR2_TXEN |
- MC9328MXL_UART_CR2_RXEN |
- MC9328MXL_UART_CR2_SRST);
-
- imx_uart_data[minor].regs->cr3 = 0;
-
- imx_uart_data[minor].regs->cr4 = 0;
-
- imx_uart_data[minor].regs->fcr = (
- MC9328MXL_UART_FCR_TXTL(32) |
- MC9328MXL_UART_FCR_RFDIV_1 |
- MC9328MXL_UART_FCR_RXTL(1));
-
- imx_uart_set_baud(minor, 38400);
-
-}
-
-static int imx_uart_first_open(int major, int minor, void *arg)
-{
- rtems_libio_open_close_args_t *args = arg;
- rtems_status_code status = RTEMS_SUCCESSFUL;
-
- imx_uart_data[minor].tty = args->iop->data1;
-
-#if USE_INTERRUPTS
- status = rtems_interrupt_handler_install(
- imx_uart_name_transmit(minor),
- "UART",
- RTEMS_INTERRUPT_UNIQUE,
- imx_uart_tx_isr,
- &imx_uart_data[minor]
- );
- assert(status == RTEMS_SUCCESSFUL);
- imx_uart_isr_on(imx_uart_name_transmit(minor));
-
- status = rtems_interrupt_handler_install(
- imx_uart_name_receive(minor),
- "UART",
- RTEMS_INTERRUPT_UNIQUE,
- imx_uart_rx_isr,
- &imx_uart_data[minor]
- );
- assert(status == RTEMS_SUCCESSFUL);
- imx_uart_isr_on(imx_uart_name_receive(minor));
-
- imx_uart_data[minor].regs->cr1 |= MC9328MXL_UART_CR1_RRDYEN;
-#endif
-
- return 0;
-}
-
-static int imx_uart_last_close(int major, int minor, void *arg)
-{
-#if USE_INTERRUPTS
- rtems_status_code status = RTEMS_SUCCESSFUL;
-
- imx_uart_isr_off(imx_uart_name_transmit(minor));
- status = rtems_interrupt_handler_remove(
- imx_uart_name_transmit(minor),
- imx_uart_tx_isr,
- &imx_uart_data[minor]
- );
- assert(status == RTEMS_SUCCESSFUL);
-
- imx_uart_isr_off(imx_uart_name_receive(minor));
- status = rtems_interrupt_handler_remove(
- imx_uart_name_receive(minor),
- imx_uart_rx_isr,
- &imx_uart_data[minor]
- );
- assert(status == RTEMS_SUCCESSFUL);
-#endif
-
- return 0;
-}
-
-static int imx_uart_poll_read(int minor)
-{
- if (imx_uart_data[minor].regs->sr2 & MC9328MXL_UART_SR2_RDR) {
- return imx_uart_data[minor].regs->rxd & 0xff;
- } else {
- return -1;
- }
-}
-
-
-static ssize_t imx_uart_poll_write(int minor, const char *buf, size_t len)
-{
- int i;
- for (i = 0; i < len; i++) {
- /* Wait for there to be room in the fifo */
- while (!(imx_uart_data[minor].regs->sr2 & MC9328MXL_UART_SR2_TXDC)) {
- continue;
- }
-
- imx_uart_data[minor].regs->txd = buf[i];
- }
- return 1;
-
-}
-
-#if USE_INTERRUPTS
-static ssize_t imx_uart_intr_write(int minor, const char *buf, size_t len)
-{
- if (len > 0) {
- imx_uart_data[minor].buf = buf;
- imx_uart_data[minor].len = len;
- imx_uart_data[minor].idx = 0;
-
- imx_uart_data[minor].regs->cr1 |= MC9328MXL_UART_CR1_TXMPTYEN;
- }
-
- return 1;
-}
-#endif
-
-
-/* This is for setting baud rate, bits, etc. */
-static int imx_uart_set_attrs(int minor, const struct termios *t)
-{
- int baud;
-
- baud = rtems_termios_baud_to_number(t->c_ospeed);
- imx_uart_set_baud(minor, baud);
-
- return 0;
-}
-
-#if USE_INTERRUPTS
-static void imx_uart_isr_on(rtems_vector_number name)
-{
- MC9328MXL_AITC_INTENNUM = name;
-}
-static void imx_uart_isr_off(rtems_vector_number name)
-{
- MC9328MXL_AITC_INTDISNUM = name;
-}
-
-static void imx_uart_rx_isr(void * param)
-{
- imx_uart_data_t *uart_data = param;
- char buf[32];
- int i=0;
-
- while (uart_data->regs->sr2 & MC9328MXL_UART_SR2_RDR) {
- buf[i] = uart_data->regs->rxd & 0xff;
- i++;
- }
-
- rtems_termios_enqueue_raw_characters(uart_data->tty, buf, i);
-}
-
-static void imx_uart_tx_isr(void * param)
-{
- imx_uart_data_t *uart_data = param;
- int len;
- int minor = uart_data->minor;
-
-
- if (uart_data->idx < uart_data->len) {
- while ( (uart_data->regs->sr1 & MC9328MXL_UART_SR1_TRDY) &&
- (uart_data->idx < uart_data->len)) {
- uart_data->regs->txd = uart_data->buf[uart_data->idx];
- uart_data->idx++;
- }
- } else {
- len = uart_data->len;
- uart_data->len = 0;
- imx_uart_data[minor].regs->cr1 &= ~MC9328MXL_UART_CR1_TXMPTYEN;
- rtems_termios_dequeue_characters(uart_data->tty, len);
- }
-}
-
-static rtems_vector_number imx_uart_name_transmit(int minor)
-{
- if (minor == 0) {
- return BSP_INT_UART1_TX;
- } else if (minor == 1) {
- return BSP_INT_UART2_TX;
- }
-
- assert(0);
-}
-
-static rtems_vector_number imx_uart_name_receive(int minor)
-{
- if (minor == 0) {
- return BSP_INT_UART1_RX;
- } else if (minor == 1) {
- return BSP_INT_UART2_RX;
- }
-
- assert(0);
-}
-#endif
-
-/*
- * Set the UART's baud rate. The calculation is:
- * (baud * 16) / ref_freq = num/demom
- *
- * ref_freq = perclk1 / RFDIV[2:0]
- * BIR = num - 1
- * BMR = demom - 1
- *
- * Setting 'num' to 16 yields this equation:
- * demom = ref_freq / baud
- */
-static void imx_uart_set_baud(int minor, int baud)
-{
- unsigned int perclk1;
- unsigned int denom;
- unsigned int ref_freq = 0;
- uint32_t fcr;
-
- perclk1 = get_perclk1_freq();
- fcr = imx_uart_data[minor].regs->fcr;
-
- switch(fcr & MC9328MXL_UART_FCR_RFDIV_MASK) {
- case MC9328MXL_UART_FCR_RFDIV_1: ref_freq = perclk1/1; break;
- case MC9328MXL_UART_FCR_RFDIV_2: ref_freq = perclk1/2; break;
- case MC9328MXL_UART_FCR_RFDIV_3: ref_freq = perclk1/3; break;
- case MC9328MXL_UART_FCR_RFDIV_4: ref_freq = perclk1/4; break;
- case MC9328MXL_UART_FCR_RFDIV_5: ref_freq = perclk1/5; break;
- case MC9328MXL_UART_FCR_RFDIV_6: ref_freq = perclk1/6; break;
- case MC9328MXL_UART_FCR_RFDIV_7: ref_freq = perclk1/7; break;
- default:
- rtems_panic("%s:%d Unknown RFDIV: 0x%" PRIx32,
- __FUNCTION__, __LINE__,
- fcr & MC9328MXL_UART_FCR_RFDIV_MASK);
- break;
- }
-
- denom = ref_freq / baud;
-
- imx_uart_data[minor].regs->bir = 0xf;
- imx_uart_data[minor].regs->bmr = denom;
-}
-
-
-/*
- * Polled, non-blocking read from UART
- */
-static int imx_uart_poll_read_char(int minor)
-{
- return imx_uart_poll_read(minor);
-}
-
-/*
- * Polled, blocking write from UART
- */
-static void imx_uart_poll_write_char(int minor, char c)
-{
- imx_uart_poll_write(minor, &c, 1);
-}
-
-/*
- * Functions for printk() and friends.
- */
-static void _BSP_output_char(char c)
-{
- poll_write(c);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_output_char;
-
-static int _BSP_poll_char(void)
-{
- return poll_read();
-}
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_poll_char;
-
-
diff --git a/c/src/lib/libbsp/arm/csb337/Makefile.am b/c/src/lib/libbsp/arm/csb337/Makefile.am
index 23a87975bb..523f4a5523 100644
--- a/c/src/lib/libbsp/arm/csb337/Makefile.am
+++ b/c/src/lib/libbsp/arm/csb337/Makefile.am
@@ -43,15 +43,15 @@ librtemsbsp_a_SOURCES += timer/timer.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/uarts.c
-librtemsbsp_a_SOURCES += console/dbgu.c
-librtemsbsp_a_SOURCES += console/usart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/console/uarts.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/console/dbgu.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/console/usart.c
# IRQ
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
if ENABLE_LCD
-librtemsbsp_a_SOURCES += console/sed1356.c
-librtemsbsp_a_SOURCES += console/fbcons.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/console/sed1356.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/console/fbcons.c
endif
# umon
if ENABLE_UMON
diff --git a/c/src/lib/libbsp/arm/csb337/console/dbgu.c b/c/src/lib/libbsp/arm/csb337/console/dbgu.c
deleted file mode 100644
index 1a16762e32..0000000000
--- a/c/src/lib/libbsp/arm/csb337/console/dbgu.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Console driver for AT91RM9200 DBGU port
- *
- * This driver uses the shared console driver in
- * ...../libbsp/shared/console.c
- *
- * Copyright (c) 2003 by Cogent Computer Systems
- * Written by Mike Kelly <mike@cogcomp.com>
- * and Jay Monkman <jtm@lopingdog.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-
-#include <at91rm9200.h>
-#include <at91rm9200_dbgu.h>
-#include <at91rm9200_pmc.h>
-#include <rtems/bspIo.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-volatile int dbg_dly;
-
-/* static function prototypes */
-static int dbgu_first_open(int major, int minor, void *arg);
-static int dbgu_last_close(int major, int minor, void *arg);
-static int dbgu_read(int minor);
-static ssize_t dbgu_write(int minor, const char *buf, size_t len);
-static void dbgu_init(int minor);
-static void dbgu_write_polled(int minor, char c);
-static int dbgu_set_attributes(int minor, const struct termios *t);
-
-/* Pointers to functions for handling the UART. */
-const console_fns dbgu_fns =
-{
- libchip_serial_default_probe,
- dbgu_first_open,
- dbgu_last_close,
- dbgu_read,
- dbgu_write,
- dbgu_init,
- dbgu_write_polled, /* not used in this driver */
- dbgu_set_attributes,
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-/*********************************************************************/
-/* Functions called via callbacks (i.e. the ones in uart_fns */
-/*********************************************************************/
-
-/*
- * This is called the first time each device is opened. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd enable interrupts here.
- */
-static int dbgu_first_open(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * This is called the last time each device is closed. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd disable interrupts here.
- */
-static int dbgu_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * Read one character from UART.
- *
- * return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int dbgu_read(int minor)
-{
- char c;
- console_tbl *console_entry;
- at91rm9200_dbgu_regs_t *dbgu;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL) {
- return -1;
- }
-
- dbgu = (at91rm9200_dbgu_regs_t *)console_entry->ulCtrlPort1;
-
- if (!(dbgu->sr & DBGU_INT_RXRDY)) {
- return -1;
- }
-
- c = dbgu->rhr & 0xff;
-
- return c;
-}
-
-
-/*
- * Write buffer to UART
- *
- * return 1 on success, -1 on error
- */
-static ssize_t dbgu_write(int minor, const char *buf, size_t len)
-{
- int i, x;
- char c;
- console_tbl *console_entry;
- at91rm9200_dbgu_regs_t *dbgu;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL) {
- return -1;
- }
-
- dbgu = (at91rm9200_dbgu_regs_t *)console_entry->ulCtrlPort1;
-
- for (i = 0; i < len; i++) {
- /* Wait for fifo to have room */
- while(1) {
- if (dbgu->sr & DBGU_INT_TXRDY) {
- break;
- }
- }
-
- c = (char) buf[i];
- dbgu->thr = c;
-
- /* the TXRDY flag does not seem to update right away (is this true?) */
- /* so we wait a bit before continuing */
- for (x = 0; x < 100; x++) {
- dbg_dly++; /* using a global so this doesn't get optimized out */
- }
- }
-
- return 1;
-}
-
-
-/* Set up the UART. */
-static void dbgu_init(int minor)
-{
- console_tbl *console_entry;
- at91rm9200_dbgu_regs_t *dbgu;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL) {
- return;
- }
-
- dbgu = (at91rm9200_dbgu_regs_t *)console_entry->ulCtrlPort1;
-
- /* Clear error bits, and reset */
- dbgu->cr = (DBGU_CR_RSTSTA | DBGU_CR_RSTTX | DBGU_CR_RSTRX);
-
- /* Clear pending interrupts */
- dbgu->idr = DBGU_INT_ALL;
- dbgu->imr = 0;
-
- /* Set port to no parity, no loopback */
- dbgu->mr = DBGU_MR_PAR_NONE | DBGU_MR_CHMODE_NORM;
-
- /* Set the baud rate */
- dbgu->brgr = (at91rm9200_get_mck() / 16) / BSP_get_baud();
-
- /* Enable the DBGU */
- dbgu->cr = (DBGU_CR_TXEN | DBGU_CR_RXEN);
-}
-
-/* This is used for getchark support */
-static void dbgu_write_polled(int minor, char c)
-{
- dbgu_write(minor, &c, 1);
-}
-
-/* This is for setting baud rate, bits, etc. */
-static int dbgu_set_attributes(int minor, const struct termios *t)
-{
- return 0;
-}
-
-/***********************************************************************/
-/*
- * The following functions are not used by TERMIOS, but other RTEMS
- * functions use them instead.
- */
-/***********************************************************************/
-/*
- * Read from UART. This is used in the exit code, and can't
- * rely on interrupts.
- */
-static int dbgu_poll_read(int minor)
-{
- return dbgu_read(minor);
-}
-
-
-/*
- * Write a character to the console. This is used by printk() and
- * maybe other low level functions. It should not use interrupts or any
- * RTEMS system calls. It needs to be very simple
- */
-static void _BSP_put_char( char c ) {
- dbgu_write_polled(0, c);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_put_char;
-
-static int _BSP_poll_char(void)
-{
- return dbgu_poll_read(0);
-}
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_poll_char;
diff --git a/c/src/lib/libbsp/arm/csb337/console/fbcons.c b/c/src/lib/libbsp/arm/csb337/console/fbcons.c
deleted file mode 100644
index 62e840938d..0000000000
--- a/c/src/lib/libbsp/arm/csb337/console/fbcons.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * LCD Console Output Driver for CSBx37
- */
-
-/*
- * COPYRIGHT (c) 1989-2014.
- * On-Line Applications Research Corporation (OAR).
- *
- * Modified by Fernando Nicodemos <fgnicodemos@terra.com.br>
- * from NCB - Sistemas Embarcados Ltda. (Brazil)
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-
-#include <rtems/bspIo.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-#include "sed1356.h"
-
-/* static function prototypes */
-static int fbcons_first_open(int major, int minor, void *arg);
-static int fbcons_last_close(int major, int minor, void *arg);
-static int fbcons_read(int minor);
-static ssize_t fbcons_write(int minor, const char *buf, size_t len);
-static void fbcons_init(int minor);
-static void fbcons_write_polled(int minor, char c);
-static int fbcons_set_attributes(int minor, const struct termios *t);
-
-/* Pointers to functions for handling the UART. */
-const console_fns fbcons_fns =
-{
- libchip_serial_default_probe,
- fbcons_first_open,
- fbcons_last_close,
- fbcons_read,
- fbcons_write,
- fbcons_init,
- fbcons_write_polled, /* not used in this driver */
- fbcons_set_attributes,
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-/*********************************************************************/
-/* Functions called via callbacks (i.e. the ones in uart_fns */
-/*********************************************************************/
-
-/*
- * This is called the first time each device is opened. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd enable interrupts here.
- */
-static int fbcons_first_open(int major, int minor, void *arg)
-{
- /* printk( "Frame buffer -- first open\n" ); */
- return 0;
-}
-
-
-/*
- * This is called the last time each device is closed. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd disable interrupts here.
- */
-static int fbcons_last_close(int major, int minor, void *arg)
-{
- /* printk( "Frame buffer -- last close\n" ); */
- return 0;
-}
-
-
-/*
- * Read one character from UART.
- *
- * return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int fbcons_read(int minor)
-{
- /* printk( "Frame buffer -- read\n" ); */
- return -1;
-}
-
-
-/*
- * Write buffer to LCD
- *
- * return 1 on success, -1 on error
- */
-static ssize_t fbcons_write(int minor, const char *buf, size_t len)
-{
- int i;
-
- /* printk( "Frame buffer -- write\n" ); */
- for ( i=0 ; i<len ; i++ )
- sed_putchar( buf[i] );
-
- return 1;
-}
-
-
-/* Set up the LCD controller. */
-static void fbcons_init(int minor)
-{
- /* printk( "Initializing frame buffer\n" ); */
- sed_init();
-}
-
-/* This is used for putchark support */
-static void fbcons_write_polled(int minor, char c)
-{
- /* printk( "frame buffer -- write polled\n" ); */
- sed_putchar( c );
-}
-
-/* This is for setting baud rate, bits, etc. */
-static int fbcons_set_attributes(int minor, const struct termios *t)
-{
- /* printk( "frame buffer -- set attributes\n" ); */
- return 0;
-}
diff --git a/c/src/lib/libbsp/arm/csb337/console/sed1356.c b/c/src/lib/libbsp/arm/csb337/console/sed1356.c
deleted file mode 100644
index f87a322a01..0000000000
--- a/c/src/lib/libbsp/arm/csb337/console/sed1356.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * SED1356 Support for KIT637_V6 (CSB637)
- *
- * Based upon code from MicroMonitor 1.17 from http://www.umonfw.com/
- * which includes this notice:
- */
-
-/*
- **************************************************************************
- * General notice:
- * This code is part of a boot-monitor package developed as a generic base
- * platform for embedded system designs. As such, it is likely to be
- * distributed to various projects beyond the control of the original
- * author. Please notify the author of any enhancements made or bugs found
- * so that all may benefit from the changes. In addition, notification back
- * to the author will allow the new user to pick up changes that may have
- * been made by other users after this version of the code was distributed.
- *
- * Note1: the majority of this code was edited with 4-space tabs.
- * Note2: as more and more contributions are accepted, the term "author"
- * is becoming a mis-representation of credit.
- *
- * Original author: Ed Sutter
- * Email: esutter@alcatel-lucent.com
- * Phone: 908-582-2351
- **************************************************************************
- *
- * Ed Sutter has been informed that this code is being used in RTEMS.
- *
- * This code was reformatted by Joel Sherrill from OAR Corporation and
- * Fernando Nicodemos <fgnicodemos@terra.com.br> from NCB - Sistemas
- * Embarcados Ltda. (Brazil) to be more compliant with RTEMS coding
- * standards and to eliminate C++ style comments.
- */
-
-#include <bsp.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "sed1356.h"
-#include "font8x16.h"
-
-int mode900lq;
-long PIXELS_PER_ROW;
-long PIXELS_PER_COL;
-long COLS_PER_SCREEN;
-long ROWS_PER_SCREEN;
-long SED_HOR_PULSE_WIDTH_LCD;
-long SED_VER_PULSE_START_LCD;
-long SED_HOR_PULSE_START_LCD;
-long SED_HOR_NONDISP_LCD;
-long SED_VER_NONDISP_LCD;
-long SED_VER_PULSE_WIDTH_LCD;
-
-/* globals to keep track of foreground, background colors and x,y position */
-int sed_color_depth; /* 4, 8 or 16 */
-int sed_fg_color; /* 0 to 15, used as lookup into VGA color table */
-int sed_bg_color; /* 0 to 15, used as lookup into VGA color table */
-int sed_col; /* current column, 0 to COLS_PER_SCREEN - 1 */
-int sed_row; /* current row, 0 to (ROWS_PER_SCREEN * 2) - 1 */
-int sed_disp_mode_crt; /* CRT=1, LCD=0 */
-int sed135x_ok;
-int sed135x_tst;
-uint32_t sed_fb_offset; /* current offset into frame buffer for sed_putchar */
-
-void sed_writechar(uint8_t c);
-void sed_scroll(void);
-
-#define SED_REG_BASE 0x30000000 /* *CS2 */
-#define SED_MEM_BASE (SED_REG_BASE + 0x00200000)
-#define SED_STEP 1 /* 16-bit port on 16-bit boundry */
-
-#define SED_REG16(_x_) *(volatile uint16_t *)((uint32_t)SED_REG_BASE + (((uint32_t)_x_ * SED_STEP) ^ 0)) /* Control/Status Registers, 16-bit mode */
-#define RD_FB16(_reg_,_val_) ((_val_) = *((volatile uint16_t *)(((uint32_t)SED_MEM_BASE + ((uint32_t)(_reg_ * SED_STEP) ^ 0)))))
-#define WR_FB16(_reg_,_val_) (*((volatile uint16_t *)(((uint32_t)SED_MEM_BASE + ((uint32_t)(_reg_ * SED_STEP) ^ 0)))) = (_val_))
-
-#if 0
-#define SED1356_REG_LCD_HOR_DISP SED_REG16(0x32)
-#define SED1356_REG_LCD_HOR_NONDISP_and_START SED_REG16(0x34)
-#define SED1356_REG_LCD_HOR_PULSE SED_REG16(0x36)
-#define SED1356_REG_LCD_VER_DISP_HT_LO_and_HI SED_REG16(0x38)
-#define SED1356_REG_LCD_VER_NONDISP_and_START SED_REG16(0x3a)
-#define SED1356_REG_LCD_VER_PULSE SED_REG16(0x3c)
-#define SED1356_REG_LCD_DISP_MODE_and_MISC SED_REG16(0x40)
-#define SED1356_REG_LCD_DISP_START_LO_and_MID SED_REG16(0x42)
-#define SED1356_REG_LCD_DISP_START_HI SED_REG16(0x44)
-#define SED1356_REG_LCD_ADD_OFFSET_LO_and_HI SED_REG16(0x46)
-#define SED1356_REG_LCD_PIXEL_PAN SED_REG16(0x48)
-#define SED1356_REG_LCD_FIFO_THRESH_LO_and_HI SED_REG16(0x4a)
-#endif
-
-
-#define H2SED(_x_) (_x_)
-
-#define FB_SIZE (640 * 480)
-#define SED_ROW_SIZE(_depth_) ((PIXELS_PER_ROW * _depth_) / 8)
-#define SED_FB_SIZE(_depth_) (((PIXELS_PER_COL * PIXELS_PER_ROW) * _depth_) / 8)
-
-#define FONT_WIDTH 8
-#define FONT_HEIGHT 16
-
-#define SED_GET_ADD(_row_, _col_, _depth_) \
- (((((_row_ * PIXELS_PER_ROW) * FONT_HEIGHT) \
- + (_col_ * FONT_WIDTH)) \
- * _depth_) / 8)
-
-
-#define SED_GET_PHYS_ADD(_reg_) \
- (volatile unsigned long)(SED_MEM_BASE + ((_reg_ * SED_STEP) ^ 0))
-
-
-#include "sed1356_16bit.h"
-
-/* #define SED_DBG */
-int sed135x_tst = 0;
-
-void sed_write_frame_buffer(
- uint32_t i,
- uint16_t wr16
-)
-{
- WR_FB16(i, wr16);
-}
-
-int sed_frame_buffer_size(void)
-{
- return SED_FB_SIZE(sed_color_depth);
-}
-
-void sed_clr_row(int char_row)
-{
- unsigned long sed_mem_add;
- int i;
- uint16_t wr16;
-
- /* clear the desired row */
- sed_mem_add = SED_GET_ADD(char_row, 0, sed_color_depth);
-
-#ifdef SED_DBG
- sed135x_tst = 1;
- printf("SED Clear Row %d, FB Add 0x%08lx, CPU Add 0x%08lx.\n ", char_row, sed_mem_add, SED_GET_PHYS_ADD(sed_mem_add));
- sed135x_tst = 0;
-#endif
-
- switch (sed_color_depth)
- {
- case 4:
- wr16 = ((sed_bg_color << 12) | (sed_bg_color << 8) | (sed_bg_color << 4) | (sed_bg_color << 0));
-#ifdef SED_DBG
- sed135x_tst = 1;
- printf("SED Clear Row %d, FB Add 0x%08lx to 0x%08lx.\n ", char_row, sed_mem_add, sed_mem_add + ((PIXELS_PER_ROW * FONT_HEIGHT) / 2));
- sed135x_tst = 0;
-#endif
- for (i = 0; i < ((PIXELS_PER_ROW * FONT_HEIGHT) / 2); i += 2){
- WR_FB16(sed_mem_add, wr16);
- sed_mem_add += 2;
- } /* for font_row */
- break;
- case 8:
- wr16 = ((sed_bg_color << 8) | (sed_bg_color << 0));
- for (i = 0; i < (PIXELS_PER_ROW * FONT_HEIGHT); i += 2){
- WR_FB16(sed_mem_add, wr16);
- sed_mem_add += 2;
- } /* for font_row */
- break;
- case 16:
- wr16 = ((vga_lookup[sed_bg_color]));
- for (i = 0; i < ((PIXELS_PER_ROW * FONT_HEIGHT) * 2); i += 2){
- WR_FB16(sed_mem_add, wr16);
- sed_mem_add += 2;
- } /* for font_row */
- break;
- } /* switch sed_color_depth */
-} /* sed_clr_row */
-
-void sed_init(void)
-{
- mode900lq = 0;
- PIXELS_PER_ROW = 640;
- PIXELS_PER_COL = 480;
- COLS_PER_SCREEN = 80;
- ROWS_PER_SCREEN = 30;
- SED_HOR_PULSE_WIDTH_LCD = 0x0b;
- SED_HOR_NONDISP_LCD = 0x13;
- SED_VER_PULSE_WIDTH_LCD = 0x01;
- SED_VER_PULSE_START_LCD = 0x09;
- SED_VER_NONDISP_LCD = 0x2c;
-
- sed_color_depth = 16; /* 16 => vga lookup */
- sed_fg_color = 14; /* Bright Yellow */
- sed_bg_color = 1; /* Blue */
- sed_disp_mode_crt = 0; /* default to LCD */
- sed_fb_offset = 0x00;
- sed_row = 0;
- sed_col = 0;
-
- sed135x_ok = 1;
- sed135x_tst = 0;
- sed_clearscreen();
-}
-
-/*
- * sed_putchar()
- *
- * This routine parses the character and calls sed_writechar if it is a
- * printable character
- */
-void sed_putchar(char c)
-{
-
- if ((sed135x_ok == 0) || (sed135x_tst == 1)) return;
-
- /* First parse the character to see if it printable or an
- * acceptable control character.
- */
- switch (c) {
- case '\r':
- sed_col = 0;
- return;
- case '\n':
- sed_col = 0;
- sed_scroll();
- return;
- case '\b':
- sed_col--;
- if (sed_col < 0) {
- sed_row--;
- if (sed_row < 0)
- sed_row = 0;
- sed_col = COLS_PER_SCREEN - 1;
- }
- c = 0; /* erase the character */
- sed_writechar(c);
- break;
- default:
- if (((uint8_t)c < FIRST_CHAR) || ((uint8_t)c > LAST_CHAR))
- return; /* drop anything we can't print */
- c -= FIRST_CHAR; /* get aligned to the first printable character */
- sed_writechar(c);
- /* advance to next column */
- sed_col++;
- if (sed_col == COLS_PER_SCREEN) {
- sed_col = 0;
- sed_scroll();
- }
- break;
- }
-
-} /* sed_putchar() */
-
-/*
- * sed_writechar()
- *
- * This routine writes the character to the screen at the current cursor
- * location.
- */
-void sed_writechar(uint8_t c)
-{
- uint32_t sed_mem_add;
- int font_row, font_col;
- uint8_t font_data8;
- uint16_t wr16;
-
- /* Convert the current row,col and color depth values
- * into an address
- */
- sed_mem_add = SED_GET_ADD(sed_row, sed_col, sed_color_depth);
-
-#ifdef SED_DBG
- sed135x_tst = 1;
- printf("SED writechar at row %d, col %d, FB Add 0x%08lx, CPU Add 0x%08lx.\n ", sed_row, sed_col, sed_mem_add, SED_GET_PHYS_ADD(sed_mem_add));
- sed135x_tst = 0;
-#endif
-
- if (FONT_WIDTH == 8) {
- switch (sed_color_depth) {
- case 4:
- /* Now render the font by painting one font row at a time */
- for (font_row = 0; font_row < FONT_HEIGHT; font_row++) {
- /* get the font row of data */
- font_data8 = font8x16[(c * FONT_HEIGHT) + font_row];
-
-
- for (font_col = 0; font_col < 8; font_col += 4)
- {
- /* get a words worth of pixels */
- wr16 = (((font_data8 & 0x80) ? sed_fg_color << 12 : sed_bg_color << 12)
- | ((font_data8 & 0x40) ? sed_fg_color << 8 : sed_bg_color << 8)
- | ((font_data8 & 0x20) ? sed_fg_color << 4 : sed_bg_color << 4)
- | ((font_data8 & 0x10) ? sed_fg_color << 0 : sed_bg_color << 0));
- font_data8 = font_data8 << 4;
- WR_FB16(sed_mem_add, wr16);
- /* if we are in the 2nd frame buffer, write to the 1st
- * frame buffer also
- */
- if (sed_row > (ROWS_PER_SCREEN - 1)) {
- WR_FB16((sed_mem_add - SED_FB_SIZE(sed_color_depth)), wr16);
- }
- sed_mem_add += 2;
- } /* for font_col */
- /* go to the next pixel row */
- sed_mem_add += (SED_ROW_SIZE(sed_color_depth) - ((FONT_WIDTH * sed_color_depth) / 8));
- } /* for font_row */
- break;
-
- case 8:
- /* Now render the font by painting one font row at a time */
- for (font_row = 0; font_row < FONT_HEIGHT; font_row++) {
- /* get the font row of data */
- font_data8 = font8x16[(c * FONT_HEIGHT) + font_row];
- for (font_col = 0; font_col < 8; font_col += 2)
- {
- /* get a words worth of pixels */
- wr16 = (((font_data8 & 0x80) ? sed_fg_color << 8 : sed_bg_color << 8)
- | ((font_data8 & 0x40) ? sed_fg_color << 0 : sed_bg_color << 0));
- font_data8 = font_data8 << 2;
- WR_FB16(sed_mem_add, wr16);
- /* if we are in the 2nd frame buffer, write to the 1st
- * frame buffer also
- */
- if (sed_row > (ROWS_PER_SCREEN - 1)) {
- WR_FB16((sed_mem_add - SED_FB_SIZE(sed_color_depth)), wr16);
- }
- sed_mem_add += 2;
- } /* for font_col */
- /* go to the next pixel row */
- sed_mem_add += (SED_ROW_SIZE(sed_color_depth) - ((FONT_WIDTH * sed_color_depth) / 8));
- } /* for font_row */
- break;
-
- case 16:
- /* Now render the font by painting one font row at a time */
- for (font_row = 0; font_row < FONT_HEIGHT; font_row++) {
- /* get the font row of data */
- font_data8 = font8x16[(c * FONT_HEIGHT) + font_row];
- for (font_col = 0; font_col < 8; font_col++)
- {
- /* get a words worth of pixels */
- wr16 = ((font_data8 & 0x80) ?
- vga_lookup[sed_fg_color] : vga_lookup[sed_bg_color]);
- font_data8 = font_data8 << 1;
- WR_FB16(sed_mem_add, wr16);
- /* if we are in the 2nd frame buffer, write to the 1st
- * frame buffer also.
- */
- if (sed_row > (ROWS_PER_SCREEN - 1)) {
- WR_FB16((sed_mem_add - SED_FB_SIZE(sed_color_depth)), wr16);
- }
- sed_mem_add += 2;
- } /* for font_col */
- /* go to the next pixel row */
- sed_mem_add += (SED_ROW_SIZE(sed_color_depth) - ((FONT_WIDTH * sed_color_depth) / 8));
- } /* for font_row */
- break;
-
- } /* switch sed_color depth */
- } /* FONT_WIDTH == 8 */
- else
- {
- return;
- }
-} /* sed_writechar() */
-
-static void sed_update_fb_offset(void)
-{
- /* write the new sed_fb_offset value */
- if (sed_disp_mode_crt) {
- /* before we change the address offset, wait for the display to
- * go from active to non-active, unless the display is not enabled
- */
- if (SED1356_REG_DISP_MODE & H2SED(SED1356_DISP_MODE_CRT)) { /* CRT is on */
- while ((SED1356_REG_CRT_VER_NONDISP_and_START & H2SED(SED1356_VER_NONDISP)) == 0) {}
- while ((SED1356_REG_CRT_VER_NONDISP_and_START & H2SED(SED1356_VER_NONDISP)) == 1) {}
- }
- SED1356_REG_CRT_DISP_START_LO_and_MID = H2SED(((sed_fb_offset & 0x00ffff) >> 0));
- SED1356_REG_CRT_DISP_START_HI = H2SED(((sed_fb_offset & 0x070000) >> 16));
- }
- else /* LCD */
- {
- if (SED1356_REG_DISP_MODE & H2SED(SED1356_DISP_MODE_LCD)) { /* LCD is on */
- while ((SED1356_REG_LCD_VER_NONDISP_and_START & H2SED(SED1356_VER_NONDISP)) == 0) {}
- while ((SED1356_REG_LCD_VER_NONDISP_and_START & H2SED(SED1356_VER_NONDISP)) == 1) {}
- }
- SED1356_REG_LCD_DISP_START_LO_and_MID = H2SED(((sed_fb_offset & 0x00ffff) >> 0));
- SED1356_REG_LCD_DISP_START_HI = H2SED(((sed_fb_offset & 0x070000) >> 16));
- }
-}
-
-/* sed_scroll()
- *
- * Because we are most likely running out of FLASH and probably also with
- * cache disabled, a brute force memcpy of the whole screen would be very
- * slow, even with reduced color depths. Instead, we define a frame buffer
- * that is twice the size of our actual display. This does limit us to a
- * 1Mbyte active display size, but 640 x 480 @ 16-bits/pixel = 614K so it
- * works just fine. 800 x 600 can be had by reducing the color depth to
- * 8-bits/pixel and using the look up tables.
- *
- * With the double buffering, we always write to the first buffer, even
- * when the second buffer is active. This allows us to scroll by adjusting
- * the starting and ending addresses in the SED135x by one row. When we
- * reach the end of our virtual buffer, we reset the starting and ending
- * addresses to the first buffer. Note that we can not adjust the SED135x
- * registers until it is in vertical retrace. That means we have to wait
- * until it is in active display, then goes to non-display, unless the
- * screen is blanked, in which case we can update immediately.
- */
-void sed_scroll(void)
-{
- sed_row++;
-
- /* clear the new row(s) */
- sed_clr_row(sed_row);
- if (sed_row > (ROWS_PER_SCREEN - 1)) {
- sed_clr_row(sed_row - ROWS_PER_SCREEN);
- }
- /* when sed_y_pos is greater than ROWS_PER_SCREEN we just adjust the
- * start and end addresses in the SED135x. If it is equal to 2 *
- * ROWS_PER_SCREEN, we reset the start and end addresses to SED_MEM_BASE.
- */
- if (sed_row > (ROWS_PER_SCREEN - 1)) {
- if (sed_row > ((ROWS_PER_SCREEN * 2) - 1)) {
- sed_fb_offset = 0x00;
- sed_row = 0;
- sed_clearscreen();
- } else {
- /* calculate the new offset address of the frame buffer in words */
- sed_fb_offset += (SED_GET_ADD(1, 0, sed_color_depth) / 2);
- }
- sed_update_fb_offset();
- } /* if (sed_row > (ROWS_PER_SCREEN - 1)) */
-}
-
-void sed_putstring(char *s)
-{
- char *p = s;
- while (*p)
- sed_putchar(*p++);
-}
-
-void sed_clearscreen(void)
-{
- int i;
- uint16_t wr16;
- int bg = sed_bg_color;
- int fbsize = sed_frame_buffer_size();
-
- /* we double buffer so clear ALL of memory */
- fbsize *= 2;
-
- /* fill the frame buffer with incrementing color values */
- switch (sed_color_depth){
- case 4: wr16 = bg | bg << 4 | bg << 8 | bg << 12; break;
- case 8: wr16 = bg | bg << 8; break;
- /* 16-bits bypasses the lookup table */
- default: wr16 = vga_lookup[bg]; break;
- }
- for (i = 0; i < fbsize; i += 2){
- sed_write_frame_buffer(i, wr16);
- }
-}
diff --git a/c/src/lib/libbsp/arm/csb337/console/uarts.c b/c/src/lib/libbsp/arm/csb337/console/uarts.c
deleted file mode 100644
index b705a477b7..0000000000
--- a/c/src/lib/libbsp/arm/csb337/console/uarts.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Console driver for for KIT637_V6 (CSB637)
- *
- * This driver uses the shared console driver in
- * ...../libbsp/shared/console.c
- *
- * Copyright (c) 2003 by Cogent Computer Systems
- * Written by Jay Monkman <jtm@lopingdog.com>
- *
- * Modified by Fernando Nicodemos <fgnicodemos@terra.com.br>
- * from NCB - Sistemas Embarcados Ltda. (Brazil)
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- *
- * Modified and FrameBuffer Console Device Support added by
- * Joel Sherrill, 2009.
- */
-
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-#include <rtems/bspIo.h>
-
-#include <at91rm9200.h>
-#include <at91rm9200_dbgu.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-#include <bspopts.h>
-
-extern const console_fns dbgu_fns;
-
-#if ENABLE_LCD
- extern const console_fns fbcons_fns;
- #define LCD_DEV 1
-#else
- #define LCD_DEV 0
-#endif
-
-#if (ENABLE_UMON && ENABLE_UMON_CONSOLE)
- extern const console_fns umoncons_fns;
- #define UMON_CONS_DEV 1
-#else
- #define UMON_CONS_DEV 0
-#endif
-
-#if ENABLE_USART0 || ENABLE_USART1 || ENABLE_USART2 || ENABLE_USART3
- extern const console_fns usart_polling_fns;
-#endif
-
-#if ENABLE_USART0
- #define USART0_DEV 1
-#else
- #define USART0_DEV 0
-#endif
-
-#if ENABLE_USART1
- #define USART1_DEV 1
-#else
- #define USART1_DEV 0
-#endif
-
-#if ENABLE_USART2
- #define USART2_DEV 1
-#else
- #define USART2_DEV 0
-#endif
-
-#if ENABLE_USART3
- #define USART3_DEV 1
-#else
- #define USART3_DEV 0
-#endif
-
-#define NUM_DEVS \
- (1 + LCD_DEV + UMON_CONS_DEV + \
- USART0_DEV + USART1_DEV + USART2_DEV + USART3_DEV)
-
-/* These are used by code in console.c */
-unsigned long Console_Configuration_Count = NUM_DEVS;
-
-/*
- * There's one item in array for each UART.
- *
- * Some of these fields are marked "NOT USED". They are not used
- * by console.c, but may be used by drivers in libchip
- *
- * when we add other types of UARTS we will need to move this
- * structure to a generic uart.c file with only this in it
- */
-console_tbl Console_Configuration_Ports[] = {
- {
- "/dev/com0", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &dbgu_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- DBGU_BASE, /* ulCtrlPort1 - Pointer to DBGU regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#if ENABLE_LCD
- {
- "/dev/fbcons", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &fbcons_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- 0, /* ulCtrlPort1 - Pointer to DBGU regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#endif
-#if (ENABLE_UMON && ENABLE_UMON_CONSOLE)
- {
- "/dev/umon", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &umoncons_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- 0, /* ulCtrlPort1 - Pointer to UMON regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#endif
-#if ENABLE_USART0
- {
- "/dev/com1", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &usart_polling_fns,/* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- USART0_BASE, /* ulCtrlPort1 - Pointer to USART 0 regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#endif
-#if ENABLE_USART1
- {
- "/dev/com2", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &usart_polling_fns,/* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- USART1_BASE, /* ulCtrlPort1 - Pointer to USART 1 regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#endif
-#if ENABLE_USART2
- {
- "/dev/com3", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &usart_polling_fns,/* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- USART2_BASE, /* ulCtrlPort1 - Pointer to USART 2 regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- },
-#endif
-#if ENABLE_USART3
- {
- "/dev/com4", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &usart_polling_fns,/* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- USART3_BASE, /* ulCtrlPort1 - Pointer to USART 3 regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- }
-#endif
-};
-
-console_tbl *BSP_get_uart_from_minor(int minor)
-{
- return Console_Port_Tbl[minor];
-}
diff --git a/c/src/lib/libbsp/arm/csb337/console/usart.c b/c/src/lib/libbsp/arm/csb337/console/usart.c
deleted file mode 100644
index 23b877ce64..0000000000
--- a/c/src/lib/libbsp/arm/csb337/console/usart.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Driver for AT91RM9200 USART ports
- */
-
-/*
- * COPYRIGHT (c) 2006-2009.
- * NCB - Sistemas Embarcados Ltda. (Brazil)
- * Fernando Nicodemos <fgnicodemos@terra.com.br>
- *
- * and
- *
- * COPYRIGHT (c) 1989-2009.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
-*/
-
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-
-#include <at91rm9200.h>
-#include <at91rm9200_usart.h>
-#include <at91rm9200_pmc.h>
-#include <rtems/bspIo.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-/* static function prototypes */
-static int usart_first_open(int major, int minor, void *arg);
-static int usart_last_close(int major, int minor, void *arg);
-static int usart_read_polled(int minor);
-static ssize_t usart_write_polled_support(int minor, const char *buf, size_t len);
-static void usart_init(int minor);
-static void usart_write_polled(int minor, char c);
-static int usart_set_attributes(int minor, const struct termios *t);
-at91rm9200_usart_regs_t *usart_get_base(int minor);
-
-/* Pointers to functions for handling the UART polled. */
-const console_fns usart_polling_fns = {
- libchip_serial_default_probe, /* deviceProbe */
- usart_first_open, /* deviceFirstOpen */
- usart_last_close, /* deviceLastClose */
- usart_read_polled, /* deviceRead */
- usart_write_polled_support, /* deviceWrite */
- usart_init, /* deviceInitialize */
- usart_write_polled, /* deviceWritePolled */
- usart_set_attributes, /* deviceSetAttributes */
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-
-at91rm9200_usart_regs_t *usart_get_base(int minor)
-{
- console_tbl *console_entry;
- at91rm9200_usart_regs_t *port;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL)
- return 0;
-
- port = (at91rm9200_usart_regs_t *) console_entry->ulCtrlPort1;
- //printk( "minor=%d entry=%p port=%p\n", minor, console_entry, port );
-
- return port;
-}
-
-/*
- * Functions called via callbacks (i.e. the ones in uart_fns
- */
-
-/*
- * This is called the first time each device is opened. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd enable interrupts here.
- */
-static int usart_first_open(int major, int minor, void *arg)
-{
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return -1;
-
- /* XXX port isn't being initialized or enabled */
-
- /* XXX I hope this is enough */
- usart->cr = (US_CR_RXEN | US_CR_TXEN);
- return 0;
-}
-
-/*
- * This is called the last time each device is closed. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd disable interrupts here.
- */
-static int usart_last_close(int major, int minor, void *arg)
-{
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return -1;
-
- return 0;
-}
-
-/*
- * Read one character from UART.
- *
- * return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int usart_read_polled(int minor)
-{
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return -1;
-
- /* if nothing ready return -1 */
- if ( (usart->sr & US_IER_RXRDY) == 0 )
- return -1;
-
- return usart->rhr;
-}
-
-
-/*
- * Write character out
- */
-static void usart_write_polled(int minor, char c)
-{
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return;
-
- /* delay until TX empty */
- while ( (usart->sr & US_IER_TXEMPTY) == 0 )
- ;
-
- usart->thr = c;
-}
-
-/*
- * Write buffer to UART
- *
- * return 1 on success, -1 on error
- */
-static ssize_t usart_write_polled_support(int minor, const char *buf, size_t len)
-{
- at91rm9200_usart_regs_t *usart;
- int nwrite=0;
-
- /*
- * Verify the minor number
- */
- usart = usart_get_base(minor);
- if ( !usart )
- return -1;
-
- /*
- * poll each byte in the string out of the port.
- */
- while (nwrite < len) {
- usart_write_polled(minor, *buf++);
- nwrite++;
- }
-
- /*
- * return the number of bytes written.
- */
- return nwrite;
-
- return 1;
-}
-
-
-/* Set up the UART. */
-static void usart_init(int minor)
-{
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return;
-
-}
-
-
-/* This is for setting baud rate, bits, etc. */
-static int usart_set_attributes(int minor, const struct termios *t)
-{
- uint32_t brgr;
- uint32_t mode, baud, baud_requested;
- at91rm9200_usart_regs_t *usart;
-
- usart = usart_get_base(minor);
- if ( !usart )
- return -1;
-
- /* Get current mode register */
- mode = usart->mr & ~(US_MR_USMODE | US_MR_USCLKS | US_MR_CHRL
- | US_MR_PAR | US_MR_NBSTOP);
-
- /* Byte size */
- switch (t->c_cflag & CSIZE){
- case CS5:
- mode |= US_MR_CHRL_5;
- break;
- case CS6:
- mode |= US_MR_CHRL_6;
- break;
- case CS7:
- mode |= US_MR_CHRL_7;
- break;
- default:
- mode |= US_MR_CHRL_8;
- break;
- }
-
- /* Stop bits */
- if (t->c_cflag & CSTOPB){
- mode |= US_MR_NBSTOP_2; /* 2 stop bits */
- } else
- mode |= US_MR_NBSTOP_1; /* 1 stop bits */
-
- /* Parity */
- if (t->c_cflag & PARENB){
- /* Mark or Space parity */
- if (t->c_cflag & PARODD){
- mode |= US_MR_PAR_ODD;
- } else
- mode |= US_MR_PAR_EVEN;
- } else
- mode |= US_MR_PAR_NONE;
-
- baud_requested = t->c_ospeed;
-
- /* If not, set the dbgu console baud as USART baud default */
- if (!baud_requested)
- baud_requested = BSP_get_baud();
-
- baud = rtems_termios_baud_to_number(baud_requested);
-
- brgr = (at91rm9200_get_mck() / 16) / baud;
-
- if (brgr > 65535){ /* BRGR is 16-bit, so switch to slower clock */
- brgr /= 8;
- mode |= US_MR_USCLKS_MCK_DIV8;
- }
-
- usart->mr = mode;
- usart->brgr = brgr;
- return 0;
-}
diff --git a/c/src/lib/libbsp/arm/edb7312/Makefile.am b/c/src/lib/libbsp/arm/edb7312/Makefile.am
index 612afe1f99..6404930f8f 100644
--- a/c/src/lib/libbsp/arm/edb7312/Makefile.am
+++ b/c/src/lib/libbsp/arm/edb7312/Makefile.am
@@ -32,7 +32,7 @@ librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/edb7312/clock/clockdrv.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/edb7312/console/uart.c
# timer
librtemsbsp_a_SOURCES += timer/timer.c
diff --git a/c/src/lib/libbsp/arm/edb7312/console/uart.c b/c/src/lib/libbsp/arm/edb7312/console/uart.c
deleted file mode 100644
index 4ba71c8cc2..0000000000
--- a/c/src/lib/libbsp/arm/edb7312/console/uart.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Cirrus EP7312 Console Driver
- *
- * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h> /* Must be before libio.h */
-#include <rtems/libio.h>
-#include <termios.h>
-#include <rtems/bspIo.h>
-
-#include <ep7312.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-#define NUM_DEVS 1
-int uart_poll_read(int minor);
-
-static int uart_first_open(int major, int minor, void *arg);
-static int uart_last_close(int major, int minor, void *arg);
-static int uart_read(int minor);
-static ssize_t uart_write(int minor, const char *buf, size_t len);
-static void uart_init(int minor);
-static void uart_write_polled(int minor, char c);
-static int uart_set_attributes(int minor, const struct termios *t);
-
-unsigned long Console_Configuration_Count = NUM_DEVS;
-
-const console_fns uart_fns =
-{
- libchip_serial_default_probe,
- uart_first_open,
- uart_last_close,
- uart_read,
- uart_write,
- uart_init,
- uart_write_polled,
- uart_set_attributes,
- FALSE
-};
-console_tbl Console_Configuration_Ports[] = {
- {
- "/dev/com0", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &uart_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 16, /* ulMargin */
- 8, /* ulHysteresis */
- NULL, /* pDeviceParams */
- (uint32_t)EP7312_UARTCR1, /* ulCtrlPort1 */
- (uint32_t)EP7312_SYSFLG1, /* ulCtrlPort2 */
- (uint32_t)EP7312_UARTDR1, /* ulDataPort */
- 0, /* getRegister */
- 0, /* setRegister */
- 0, /* getData */
- 0, /* setData */
- 0, /* ulClock */
- 0 /* ulIntVector */
- }};
-
-static int uart_first_open(int major, int minor, void *arg) {return 0;}
-static int uart_last_close(int major, int minor, void *arg) {return 0;}
-static int uart_read(int minor)
-{
- return uart_poll_read(minor);
-}
-
-static void uart_write_polled(int minor, char c)
-{
- uart_write(minor, &c, 1);
-}
-
-static int uart_set_attributes(int minor, const struct termios *t)
-{
- return 0;
-}
-
-int uart_poll_read(int minor)
-{
- volatile uint32_t *data_reg;
- volatile uint32_t *ctrl_reg2;
- char c;
- int err;
-
- data_reg = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort;
- ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2;
-
- if ((*ctrl_reg2 & EP7312_UART_URXFE1) != 0) {
- return -1;
- }
-
- err = *data_reg;
- c = err & 0xff;
- err &= (EP7312_UART_FRMERR | EP7312_UART_PARERR | EP7312_UART_OVERR);
-
- return c;
-}
-
-static ssize_t uart_do_write(
- volatile uint32_t *uartdr,
- const char *buf,
- size_t len,
- volatile uint32_t *sysflg
-)
-{
- size_t i;
-
- for (i = 0; i < len; i++) {
- /* Wait for fifo to have room */
- while ((*sysflg & EP7312_UART_UTXFF1) != 0) {
- continue;
- }
-
- *uartdr = buf[i];
- }
-
- return len;
-}
-
-static ssize_t uart_write(int minor, const char *buf, size_t len)
-{
- volatile uint32_t *data_reg;
- volatile uint32_t *ctrl_reg2;
-
- data_reg = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort;
- ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2;
-
- return uart_do_write(data_reg, buf, len, ctrl_reg2);
-}
-
-static void uart_init(int minor)
-{
- volatile uint32_t *ctrl_reg1;
-
- ctrl_reg1 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort1;
-
- /* *ctrl_reg = (BSP_UART_DATA8 |
- BSP_UART_STOP1 |
- BSP_UART_PARITY_NONE |
- EP7312_UART_FIFOEN |
- BSP_UART_BAUD_9600);
- */
- *ctrl_reg1 = (EP7312_UART_WRDLEN8 |
- EP7312_UART_FIFOEN |
- 0x17); /* 9600 baud */
-
-}
-
-/*
- * Debug IO support
- */
-static void _BSP_null_char(char c)
-{
- uart_do_write(EP7312_UARTDR1, &c, 1, EP7312_SYSFLG1);
-}
-
-static int _BSP_get_char(void)
-{
- return uart_poll_read(0);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_null_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_get_char;
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/Makefile.am b/c/src/lib/libbsp/arm/gdbarmsim/Makefile.am
index 83bbda0094..68521ca1c2 100644
--- a/c/src/lib/libbsp/arm/gdbarmsim/Makefile.am
+++ b/c/src/lib/libbsp/arm/gdbarmsim/Makefile.am
@@ -28,8 +28,8 @@ librtemsbsp_a_SOURCES += startup/syscalls.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
# console
-librtemsbsp_a_SOURCES += ../../shared/console-polled.c
-librtemsbsp_a_SOURCES += console/console-io.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/gdbarmsim/console/console-io.c
# clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/clock/clock-simidle.c
# timer
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/console/console-io.c b/c/src/lib/libbsp/arm/gdbarmsim/console/console-io.c
deleted file mode 100644
index 8bea74d934..0000000000
--- a/c/src/lib/libbsp/arm/gdbarmsim/console/console-io.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * COPYRIGHT (c) 1989-2009.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <bsp/console-polled.h>
-#include <rtems/libio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-/*
- * console_initialize_hardware
- *
- * This routine initializes the console hardware.
- *
- */
-void console_initialize_hardware(void)
-{
- return;
-}
-
-/*
- * console_outbyte_polled
- *
- * This routine transmits a character using polling.
- */
-void console_outbyte_polled(
- int port,
- char ch
-)
-{
- gdbarmsim_writec(ch);
-}
-
-/*
- * console_inbyte_nonblocking
- *
- * This routine polls for a character.
- */
-
-int console_inbyte_nonblocking(
- int port
-)
-{
- return -1;
-}
-
-#include <rtems/bspIo.h>
-
-static void MyBSP_output_char(char c) { console_outbyte_polled( 0, c ); }
-
-BSP_output_char_function_type BSP_output_char = MyBSP_output_char;
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/arm/gumstix/Makefile.am b/c/src/lib/libbsp/arm/gumstix/Makefile.am
index ec5d8c910e..d262811e47 100644
--- a/c/src/lib/libbsp/arm/gumstix/Makefile.am
+++ b/c/src/lib/libbsp/arm/gumstix/Makefile.am
@@ -33,8 +33,8 @@ librtemsbsp_a_SOURCES += timer/timer.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/uarts.c
-librtemsbsp_a_SOURCES += console/ffuart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/gumstix/console/uarts.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/gumstix/console/ffuart.c
# IRQ
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
diff --git a/c/src/lib/libbsp/arm/gumstix/console/ffuart.c b/c/src/lib/libbsp/arm/gumstix/console/ffuart.c
deleted file mode 100644
index 335fc6f4de..0000000000
--- a/c/src/lib/libbsp/arm/gumstix/console/ffuart.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Console driver for pxa255 full function port by Yang Xi <hiyangxi@gmail.com>
- * Copyright (c) 2004 by Jay Monkman <jtm@lopingdog.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-
-#include <pxa255.h>
-#include <ffuart.h>
-#include <rtems/bspIo.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-volatile int dbg_dly;
-
-/* static function prototypes */
-static int ffuart_first_open(int major, int minor, void *arg);
-static int ffuart_last_close(int major, int minor, void *arg);
-static int ffuart_read(int minor);
-static ssize_t ffuart_write(int minor, const char *buf, size_t len);
-static void ffuart_init(int minor);
-static void ffuart_write_polled(int minor, char c);
-static int ffuart_set_attributes(int minor, const struct termios *t);
-
-/* Pointers to functions for handling the UART. */
-const console_fns ffuart_fns =
-{
- libchip_serial_default_probe,
- ffuart_first_open,
- ffuart_last_close,
- ffuart_read,
- ffuart_write,
- ffuart_init,
- ffuart_write_polled, /* not used in this driver */
- ffuart_set_attributes,
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-
-
-/*
- * This is called the first time each device is opened. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd enable interrupts here.
- */
-static int ffuart_first_open(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * This is called the last time each device is closed. Since
- * the driver is polled, we don't have to do anything. If the driver
- * were interrupt driven, we'd disable interrupts here.
- */
-static int ffuart_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * Read one character from UART.
- *
- * return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int ffuart_read(int minor)
-{
- char c;
- console_tbl *console_entry;
- ffuart_reg_t *ffuart;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL) {
- return -1;
- }
-
- ffuart = (ffuart_reg_t *)console_entry->ulCtrlPort1;
-
- if (!(ffuart->lsr & FULL_RECEIVE)) {
- return -1;
- }
-
- c = ffuart->rbr & 0xff;
-
- return c;
-}
-
-
-/*
- * Write buffer to UART
- *
- * return 1 on success, -1 on error
- */
-static ssize_t ffuart_write(int minor, const char *buf, size_t len)
-{
- size_t i, x;
- char c;
- console_tbl *console_entry;
- ffuart_reg_t *ffuart;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
- if (console_entry == NULL) {
- return -1;
- }
-
- ffuart = (ffuart_reg_t *)console_entry->ulCtrlPort1;
-
- for (i = 0; i < len; i++) {
-
- while(1) {
- if (ffuart->lsr & SEND_EMPTY) {
- break;
- }
- }
-
- c = (char) buf[i];
-#if ON_SKYEYE != 1
- if(c=='\n'){
- ffuart->rbr = '\r';
- for (x = 0; x < 100; x++) {
- dbg_dly++; /* using a global so this doesn't get optimized out */
- }
- while(1){
- if(ffuart->lsr & SEND_EMPTY){
- break;
- }
- }
- }
-#endif
- ffuart->rbr = c;
-
- /* the TXRDY flag does not seem to update right away (is this true?) */
- /* so we wait a bit before continuing */
- for (x = 0; x < 100; x++) {
- dbg_dly++; /* using a global so this doesn't get optimized out */
- }
- }
-
- return 1;
-}
-
-
-static void ffuart_init(int minor)
-{
-
-
- console_tbl *console_entry;
- ffuart_reg_t *ffuart;
- unsigned int divisor;
-
- console_entry = BSP_get_uart_from_minor(minor);
-
-
-
- if (console_entry == NULL) {
- return;
- }
-
- ffuart = (ffuart_reg_t *)console_entry->ulCtrlPort1;
- ffuart->lcr |= DLAB;
- /*Set the Bound*/
- ffuart->lcr |= DLAB;
- divisor = FREQUENCY_UART / (115200*16);
- ffuart->rbr = divisor & 0xff;
- ffuart->ier = (divisor >> 8)&0xff;
- /*Disable FIFO*/
- ffuart->iir = 0;
- ffuart->lcr &=~DLAB;
- /*Enable UART*/
- ffuart->ier = 0x40;
- ffuart->lcr = EIGHT_BITS_NOPARITY_1STOPBIT;
-
-}
-
-/* I'm not sure this is needed for the shared console driver. */
-static void ffuart_write_polled(int minor, char c)
-{
- ffuart_write(minor, &c, 1);
-}
-
-/* This is for setting baud rate, bits, etc. */
-static int ffuart_set_attributes(int minor, const struct termios *t)
-{
- return 0;
-}
-
-/***********************************************************************/
-/*
- * The following functions are not used by TERMIOS, but other RTEMS
- * functions use them instead.
- */
-/***********************************************************************/
-/*
- * Read from UART. This is used in the exit code, and can't
- * rely on interrupts.
- */
-static int ffuart_poll_read(int minor)
-{
- return ffuart_read(minor);
-}
-
-
-/*
- * Write a character to the console. This is used by printk() and
- * maybe other low level functions. It should not use interrupts or any
- * RTEMS system calls. It needs to be very simple
- */
-static void _BSP_put_char( char c ) {
- ffuart_write_polled(0, c);
-}
-
-static int _BSP_poll_char(void) {
- return ffuart_poll_read(0);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_put_char;
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_poll_char;
diff --git a/c/src/lib/libbsp/arm/gumstix/console/uarts.c b/c/src/lib/libbsp/arm/gumstix/console/uarts.c
deleted file mode 100644
index 08408695e0..0000000000
--- a/c/src/lib/libbsp/arm/gumstix/console/uarts.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Console driver for GUMSTIX by Yang Xi <hiyangxi@gmail.com>
- *
- * This driver uses the shared console driver in
- * ...../libbsp/shared/console.c
- *
- * Copyright (c) 2003 by Cogent Computer Systems
- * Written by Jay Monkman <jtm@lopingdog.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <rtems/libio.h>
-#include <termios.h>
-#include <rtems/bspIo.h>
-
-#include <pxa255.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-/* How many serial ports? */
-#define NUM_DEVS 1
-
-/* These are used by code in console.c */
-unsigned long Console_Configuration_Count = NUM_DEVS;
-
-extern const console_fns ffuart_fns;
-
-/*
- * There's one item in array for each UART.
- *
- * Some of these fields are marked "NOT USED". They are not used
- * by console.c, but may be used by drivers in libchip
- *
- * when we add other types of UARTS we will need to move this
- * structure to a generic uart.c file with only this in it
- */
-console_tbl Console_Configuration_Ports[] = {
- {
- "/dev/com0", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &ffuart_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- FFUART_BASE, /* ulCtrlPort1 - Pointer to DBGU regs */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- }};
-
-
-console_tbl *BSP_get_uart_from_minor(int minor)
-{
- return Console_Port_Tbl[minor];
-}
diff --git a/c/src/lib/libbsp/arm/imx/Makefile.am b/c/src/lib/libbsp/arm/imx/Makefile.am
index c02152f8ca..2d62ed445d 100644
--- a/c/src/lib/libbsp/arm/imx/Makefile.am
+++ b/c/src/lib/libbsp/arm/imx/Makefile.am
@@ -56,8 +56,8 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += ../shared/arm-gic-irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/imx/console/console-config.c
# Clock
librtemsbsp_a_SOURCES += ../shared/arm-generic-timer-clock-config.c
diff --git a/c/src/lib/libbsp/arm/imx/console/console-config.c b/c/src/lib/libbsp/arm/imx/console/console-config.c
deleted file mode 100644
index 0731446f08..0000000000
--- a/c/src/lib/libbsp/arm/imx/console/console-config.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <info@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <sys/param.h>
-
-#include <rtems/bspIo.h>
-#include <rtems/console.h>
-#include <rtems/sysinit.h>
-#include <rtems/termiostypes.h>
-
-#include <bsp.h>
-#include <bsp/fdt.h>
-#include <bsp/irq.h>
-
-#include <arm/freescale/imx/imx_ccmvar.h>
-#include <arm/freescale/imx/imx_uartreg.h>
-
-#include <libfdt.h>
-
-#define IMX_UART_TX_FIFO_LEVEL 16
-
-typedef struct {
- rtems_termios_device_context base;
- volatile imx_uart *regs;
-#ifdef CONSOLE_USE_INTERRUPTS
- rtems_vector_number irq;
- int tx_in_progress;
-#endif
-} imx_uart_context;
-
-static imx_uart_context imx_uart_instances[7];
-
-static imx_uart_context *imx_uart_console = &imx_uart_instances[0];
-
-static volatile imx_uart *imx_uart_get_regs(rtems_termios_device_context *base)
-{
- imx_uart_context *ctx;
-
- ctx = (imx_uart_context *) base;
- return ctx->regs;
-}
-
-static void imx_uart_write_polled(rtems_termios_device_context *base, char c)
-{
- volatile imx_uart *regs;
-
- regs = imx_uart_get_regs(base);
-
- while ((regs->usr1 & IMX_UART_USR1_TRDY) == 0) {
- /* Wait */
- }
-
- regs->utxd = IMX_UART_UTXD_TX_DATA(c);
-}
-
-void imx_uart_console_drain(void)
-{
- volatile imx_uart *regs;
-
- regs = imx_uart_get_regs(&imx_uart_console->base);
-
- if (regs != NULL) {
- while ((regs->usr2 & IMX_UART_USR2_TXFE) == 0) {
- /* Wait */
- }
- }
-}
-
-static void imx_output_char(char c)
-{
- imx_uart_write_polled(&imx_uart_console->base, c);
-}
-
-static void imx_uart_init_context(
- imx_uart_context *ctx,
- const char *fdt,
- const char *serial
-)
-{
- int node;
-
- rtems_termios_device_context_initialize(&ctx->base, "UART");
- node = fdt_path_offset(fdt, serial);
- ctx->regs = imx_get_reg_of_node(fdt, node);
-#ifdef CONSOLE_USE_INTERRUPTS
- ctx->irq = imx_get_irq_of_node(fdt, node, 0);
-#endif
-}
-
-static void imx_uart_probe(void)
-{
- const void *fdt;
- int node;
- int offset;
- const char *console;
- size_t i;
-
- fdt = bsp_fdt_get();
- node = fdt_path_offset(fdt, "/chosen");
-
- console = fdt_getprop(fdt, node, "stdout-path", NULL);
- if (console == NULL) {
- console = "";
- }
-
- node = fdt_path_offset(fdt, "/aliases");
- offset = fdt_first_property_offset(fdt, node);
- i = 0;
-
- while (offset >= 0 && i < RTEMS_ARRAY_SIZE(imx_uart_instances)) {
- const struct fdt_property *prop;
-
- prop = fdt_get_property_by_offset(fdt, offset, NULL);
-
- if (prop != NULL) {
- const char *name;
-
- name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
- if (strstr(name, "serial") != NULL) {
- imx_uart_context *ctx;
- const char *serial;
-
- ctx = &imx_uart_instances[i];
- serial = prop->data;
-
- if (strcmp(serial, console) == 0) {
- imx_uart_console = ctx;
- }
-
- imx_uart_init_context(ctx, fdt, serial);
- ++i;
- }
- }
-
- offset = fdt_next_property_offset(fdt, offset);
- }
-
- BSP_output_char = imx_output_char;
-}
-
-static void imx_output_char_init(char c)
-{
- imx_uart_probe();
- imx_output_char(c);
-}
-
-BSP_output_char_function_type BSP_output_char = imx_output_char_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
-
-#ifdef CONSOLE_USE_INTERRUPTS
-static void imx_uart_interrupt(void *arg)
-{
- rtems_termios_tty *tty;
- imx_uart_context *ctx;
- volatile imx_uart *regs;
- uint32_t usr2;
-
- tty = arg;
- ctx = rtems_termios_get_device_context(tty);
- regs = ctx->regs;
- usr2 = regs->usr2;
-
- regs->usr1 = IMX_UART_USR1_AGTIM;
-
- while ((usr2 & IMX_UART_USR2_RDR) != 0) {
- char c;
-
- c = IMX_UART_URXD_RX_DATA_GET(regs->urxd);
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
- usr2 = regs->usr2;
- }
-
- if (ctx->tx_in_progress > 0 && (regs->usr1 & IMX_UART_USR1_TRDY) != 0) {
- rtems_termios_dequeue_characters(tty, ctx->tx_in_progress);
- }
-}
-#endif
-
-static bool imx_uart_set_attributes(
- rtems_termios_device_context *base,
- const struct termios *term
-)
-{
- imx_uart_context *ctx;
- volatile imx_uart *regs;
- uint32_t ufcr;
- uint32_t baud;
-
- ctx = (imx_uart_context *) base;
- regs = imx_uart_get_regs(&ctx->base);
-
- baud = rtems_termios_baud_to_number(term->c_ospeed);
-
- if (baud != 0) {
- ufcr = regs->ufcr;
- ufcr = IMX_UART_UFCR_RFDIV_SET(ufcr, 0x5);
- regs->ufcr = ufcr;
- regs->ubir = 15;
- regs->ubmr = imx_ccm_uart_hz() / baud - 1;
- }
-
- return true;
-}
-
-static bool imx_uart_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- imx_uart_context *ctx;
- volatile imx_uart *regs;
-#ifdef CONSOLE_USE_INTERRUPTS
- rtems_status_code sc;
- uint32_t ufcr;
-#endif
-
- ctx = (imx_uart_context *) base;
- regs = imx_uart_get_regs(&ctx->base);
-
- regs->ucr1 = IMX_UART_UCR1_UARTEN;
- regs->ucr2 = IMX_UART_UCR2_IRTS | IMX_UART_UCR2_WS | IMX_UART_UCR2_RXEN
- | IMX_UART_UCR2_TXEN | IMX_UART_UCR2_SRST;
-
- rtems_termios_set_initial_baud(tty, 115200);
- imx_uart_set_attributes(base, term);
-
-#ifdef CONSOLE_USE_INTERRUPTS
- ufcr = regs->ufcr;
- ufcr = IMX_UART_UFCR_RXTL_SET(ufcr, 16);
- ufcr = IMX_UART_UFCR_TXTL_SET(ufcr, IMX_UART_TX_FIFO_LEVEL);
- regs->ufcr = ufcr;
- regs->ucr1 |= IMX_UART_UCR1_RRDYEN;
- regs->ucr2 |= IMX_UART_UCR2_ATEN;
- sc = rtems_interrupt_handler_install(
- ctx->irq,
- "UART",
- RTEMS_INTERRUPT_SHARED,
- imx_uart_interrupt,
- tty
- );
- if (sc != RTEMS_SUCCESSFUL) {
- return false;
- }
-#endif
-
- return true;
-}
-
-static void imx_uart_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
-#ifdef CONSOLE_USE_INTERRUPTS
- imx_uart_context *ctx;
-
- ctx = (imx_uart_context *) base;
- rtems_interrupt_handler_remove(ctx->irq, imx_uart_interrupt, tty);
-#endif
-}
-
-static void imx_uart_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
-#ifdef CONSOLE_USE_INTERRUPTS
- imx_uart_context *ctx;
- volatile imx_uart *regs;
- int n;
- uint32_t ucr1;
-
- ctx = (imx_uart_context *) base;
- regs = imx_uart_get_regs(&ctx->base);
- ucr1 = regs->ucr1;
-
- if (len > 0) {
- int i;
-
- n = (int) MIN(len, IMX_UART_TX_FIFO_LEVEL);
- ucr1 |= IMX_UART_UCR1_TRDYEN;
-
- for (i = 0; i < n; ++i) {
- regs->utxd = IMX_UART_UTXD_TX_DATA(buf[i]);
- }
- } else {
- n = 0;
- ucr1 &= ~IMX_UART_UCR1_TRDYEN;
- }
-
- regs->ucr1 = ucr1;
- ctx->tx_in_progress = n;
-#else
- size_t i;
-
- for (i = 0; i < len; ++i) {
- imx_uart_write_polled(base, buf[i]);
- }
-#endif
-}
-
-#ifndef CONSOLE_USE_INTERRUPTS
-static int imx_uart_read(rtems_termios_device_context *base)
-{
- volatile imx_uart *regs;
-
- regs = imx_uart_get_regs(base);
-
- if ((regs->usr2 & IMX_UART_USR2_RDR) != 0) {
- return IMX_UART_URXD_RX_DATA_GET(regs->urxd);
- } else {
- return -1;
- }
-}
-#endif
-
-static const rtems_termios_device_handler imx_uart_handler = {
- .first_open = imx_uart_first_open,
- .last_close = imx_uart_last_close,
- .write = imx_uart_write,
- .set_attributes = imx_uart_set_attributes,
-#ifdef CONSOLE_USE_INTERRUPTS
- .mode = TERMIOS_IRQ_DRIVEN
-#else
- .poll_read = imx_uart_read,
- .mode = TERMIOS_POLLED
-#endif
-};
-
-rtems_status_code console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- char path[] = "/dev/ttyS?";
- size_t i;
-
- rtems_termios_initialize();
-
- for (i = 0; i < RTEMS_ARRAY_SIZE(imx_uart_instances); ++i) {
- imx_uart_context *ctx;
-
- ctx = &imx_uart_instances[i];
- path[sizeof(path) - 2] = (char) ('0' + i);
-
- rtems_termios_device_install(
- path,
- &imx_uart_handler,
- NULL,
- &ctx->base
- );
-
- if (ctx == imx_uart_console) {
- link(path, CONSOLE_DEVICE_NAME);
- }
- }
-
- return RTEMS_SUCCESSFUL;
-}
-
-RTEMS_SYSINIT_ITEM(
- imx_uart_probe,
- RTEMS_SYSINIT_BSP_START,
- RTEMS_SYSINIT_ORDER_LAST
-);
diff --git a/c/src/lib/libbsp/arm/lm3s69xx/Makefile.am b/c/src/lib/libbsp/arm/lm3s69xx/Makefile.am
index 31ee769f16..52bbb89ce3 100644
--- a/c/src/lib/libbsp/arm/lm3s69xx/Makefile.am
+++ b/c/src/lib/libbsp/arm/lm3s69xx/Makefile.am
@@ -56,8 +56,8 @@ librtemsbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq-dispatch.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lm3s69xx/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lm3s69xx/console/uart.c
# Clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-armv7m.c
diff --git a/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c b/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c
deleted file mode 100644
index b702f0cd66..0000000000
--- a/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
- *
- * Copyright (c) 2011 Sebastian Huber. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/bspIo.h>
-
-#include <libchip/serial.h>
-
-#include <bspopts.h>
-#include <bsp/irq.h>
-#include <bsp/uart.h>
-#include <bsp/lm3s69xx.h>
-
-console_tbl Console_Configuration_Ports [] = {
- #ifdef LM3S69XX_ENABLE_UART_0
- {
- .sDeviceName = "/dev/ttyS0",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &lm3s69xx_uart_fns,
- .ulCtrlPort1 = LM3S69XX_UART_0_BASE,
- .ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_0,
- .pDeviceParams = (void *)0
- },
- #endif
- #ifdef LM3S69XX_ENABLE_UART_1
- {
- .sDeviceName = "/dev/ttyS1",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &lm3s69xx_uart_fns,
- .ulCtrlPort1 = LM3S69XX_UART_1_BASE,
- .ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_1,
- .pDeviceParams = (void *)1
- },
- #endif
- #ifdef LM3S69XX_ENABLE_UART_2
- {
- .sDeviceName = "/dev/ttyS2",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &lm3s69xx_uart_fns,
- .ulCtrlPort1 = LM3S69XX_UART_2_BASE,
- .ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_2,
- .pDeviceParams = (void *)2
- }
- #endif
-};
-
-#define PORT_COUNT \
- (sizeof(Console_Configuration_Ports) \
- / sizeof(Console_Configuration_Ports [0]))
-
-unsigned long Console_Configuration_Count = PORT_COUNT;
-
-static void output_char(char c)
-{
- const console_fns *con =
- Console_Configuration_Ports [Console_Port_Minor].pDeviceFns;
-
- con->deviceWritePolled((int) Console_Port_Minor, c);
-}
-
-BSP_output_char_function_type BSP_output_char = output_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c b/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c
deleted file mode 100644
index 67a85f4e96..0000000000
--- a/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
- *
- * Copyright (c) 2011 Sebastian Huber. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bspopts.h>
-#include <bsp/uart.h>
-#include <libchip/sersupp.h>
-#include <bsp/syscon.h>
-#include <bsp/lm3s69xx.h>
-#include <rtems/irq-extension.h>
-#include <assert.h>
-
-#define LM3S69XX_UART_FIFO_DEPTH 16
-
-static volatile lm3s69xx_uart *get_uart_regs(int minor)
-{
- console_tbl *ct = Console_Port_Tbl [minor];
-
- return (lm3s69xx_uart *) ct->ulCtrlPort1;
-}
-
-static unsigned int get_uart_number(int minor)
-{
- console_tbl *ct = Console_Port_Tbl [minor];
-
- return (unsigned int)ct->pDeviceParams;
-}
-
-/*
- * Returns both integer and fractional parts as one number.
- */
-static uint32_t get_baud_div(uint32_t baud)
-{
- uint32_t clock4 = LM3S69XX_SYSTEM_CLOCK * 4;
- return (clock4 + baud - 1) / baud;
-}
-
-static void irq_handler(void *arg)
-{
- int minor = (int)arg;
- console_data *cd = &Console_Port_Data [minor];
- volatile lm3s69xx_uart *uart = get_uart_regs(minor);
-
- do {
- char buf[LM3S69XX_UART_FIFO_DEPTH];
- int i = 0;
- uint32_t status = uart->fr;
-
- while (((status & UARTFR_RXFE) == 0) && (i < LM3S69XX_UART_FIFO_DEPTH)) {
- uint32_t d = uart->dr;
-
- if ((d & UARTDR_ERROR_MSK) == 0) {
- buf[i] = UARTDR_DATA_GET(d);
- i++;
- }
-
- status = uart->fr;
- }
-
- if (i > 0)
- rtems_termios_enqueue_raw_characters(cd->termios_data, buf, i);
- } while (uart->mis != 0);
-}
-
-static void initialize(int minor)
-{
- const console_tbl *ct = Console_Port_Tbl[minor];
- volatile lm3s69xx_uart *uart = get_uart_regs(minor);
- unsigned int num = get_uart_number(minor);
-
- lm3s69xx_syscon_enable_uart_clock(num, true);
-
- uart->ctl = 0;
-
- uint32_t brd = get_baud_div(LM3S69XX_UART_BAUD);
- uart->ibrd = brd / 64;
- uart->fbrd = brd % 64;
-
- uart->lcrh = UARTLCRH_WLEN(0x3) | UARTLCRH_FEN;
- uart->ctl = UARTCTL_RXE | UARTCTL_TXE | UARTCTL_UARTEN;
-
- int rv = rtems_interrupt_handler_install(ct->ulIntVector, "UART",
- RTEMS_INTERRUPT_UNIQUE, irq_handler, (void *)minor);
- assert(rv == RTEMS_SUCCESSFUL);
-}
-
-static int first_open(int major, int minor, void *arg)
-{
- rtems_libio_open_close_args_t *oc = (rtems_libio_open_close_args_t *) arg;
- struct rtems_termios_tty *tty = (struct rtems_termios_tty *) oc->iop->data1;
- console_data *cd = &Console_Port_Data [minor];
- volatile lm3s69xx_uart *uart = get_uart_regs(minor);
-
- cd->termios_data = tty;
- rtems_termios_set_initial_baud(tty, LM3S69XX_UART_BAUD);
-
- /* Drain the RX FIFO. */
- while ((uart->fr & UARTFR_RXFE) == 0)
- (void)uart->dr;
-
- uart->im = UARTI_RX | UARTI_RT;
-
- return 0;
-}
-
-static int last_close(int major, int minor, void *arg)
-{
- volatile lm3s69xx_uart *uart = get_uart_regs(minor);
- uart->im = 0;
-
- return 0;
-}
-
-static void write_polled(int minor, char c)
-{
- volatile lm3s69xx_uart *uart = get_uart_regs(minor);
-
- while ((uart->fr & UARTFR_TXFF) != 0) {
- /* Wait */
- }
-
- uart->dr = UARTDR_DATA(c);
-}
-
-static ssize_t write_support_polled(
- int minor,
- const char *s,
- size_t n
-)
-{
- ssize_t i = 0;
-
- for (i = 0; i < n; ++i) {
- write_polled(minor, s [i]);
- }
-
- return n;
-}
-
-static int set_attribues(int minor, const struct termios *term)
-{
- return -1;
-}
-
-const console_fns lm3s69xx_uart_fns = {
- .deviceProbe = libchip_serial_default_probe,
- .deviceFirstOpen = first_open,
- .deviceLastClose = last_close,
- .deviceRead = NULL,
- .deviceWrite = write_support_polled,
- .deviceInitialize = initialize,
- .deviceWritePolled = write_polled,
- .deviceSetAttributes = set_attribues,
- .deviceOutputUsesInterrupts = false
-};
diff --git a/c/src/lib/libbsp/arm/lpc176x/Makefile.am b/c/src/lib/libbsp/arm/lpc176x/Makefile.am
index 49e6620a9e..ba2475febb 100644
--- a/c/src/lib/libbsp/arm/lpc176x/Makefile.am
+++ b/c/src/lib/libbsp/arm/lpc176x/Makefile.am
@@ -59,9 +59,9 @@ librtemsbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq-dispatch.c
librtemsbsp_a_SOURCES += irq/irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios-init.c
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc176x/console/console-config.c
# Clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-nxp-lpc.c
diff --git a/c/src/lib/libbsp/arm/lpc176x/console/console-config.c b/c/src/lib/libbsp/arm/lpc176x/console/console-config.c
deleted file mode 100644
index c80932daf7..0000000000
--- a/c/src/lib/libbsp/arm/lpc176x/console/console-config.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc176x
- *
- * @brief Console configuration.
- */
-
-/*
- * Copyright (c) 2008-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/io.h>
-#include <bsp/irq.h>
-#include <bsp/console-termios.h>
-
-/**
- * @brief Gets the uart register according to the current address.
- *
- * @param addr Register address.
- * @param i Index register.
- * @return Uart register.
- */
-static inline uint8_t lpc176x_uart_get_register(
- const uintptr_t addr,
- const uint8_t i
-)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- return (uint8_t) reg[ i ];
-}
-
-/**
- * @brief Sets the uart register address according to the value passed.
- *
- * @param addr Register address.
- * @param i Index register.
- * @param val Value to set.
- */
-static inline void lpc176x_uart_set_register(
- const uintptr_t addr,
- const uint8_t i,
- const uint8_t val
-)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- reg[ i ] = val;
-}
-
-static bool lpc176x_uart1_probe(rtems_termios_device_context *ctx)
-{
- (void)ctx;
-
- lpc176x_module_enable( LPC176X_MODULE_UART_1, LPC176X_MODULE_PCLK_DEFAULT );
-
- lpc176x_pin_select( LPC176X_PIN_UART_1_TXD, LPC176X_PIN_FUNCTION_01 );
- lpc176x_pin_select( LPC176X_PIN_UART_1_RXD, LPC176X_PIN_FUNCTION_01 );
-
- return true;
-}
-
-#ifdef LPC176X_CONFIG_UART_2
-static bool lpc176x_uart2_probe(rtems_termios_device_context *ctx)
-{
- (void)ctx;
-
- lpc176x_module_enable( LPC176X_MODULE_UART_2, LPC176X_MODULE_PCLK_DEFAULT );
-
- lpc176x_pin_select( LPC176X_PIN_UART_2_TXD, LPC176X_PIN_FUNCTION_01 );
- lpc176x_pin_select( LPC176X_PIN_UART_2_RXD, LPC176X_PIN_FUNCTION_01 );
-
- return true;
-}
-#endif
-
-#ifdef LPC176X_CONFIG_UART_3
-static bool lpc176x_uart3_probe(rtems_termios_device_context *ctx)
-{
- (void)ctx;
-
- lpc176x_module_enable( LPC176X_MODULE_UART_3, LPC176X_MODULE_PCLK_DEFAULT );
-
- lpc176x_pin_select( LPC176X_PIN_UART_3_TXD, LPC176X_PIN_FUNCTION_10 );
- lpc176x_pin_select( LPC176X_PIN_UART_3_RXD, LPC176X_PIN_FUNCTION_10 );
-
- return true;
-}
-#endif
-
-#ifdef LPC176X_CONFIG_CONSOLE
-static ns16550_context lpc176x_uart_context_0 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 0"),
- .get_reg = lpc176x_uart_get_register,
- .set_reg = lpc176x_uart_set_register,
- .port = UART0_BASE_ADDR,
- .irq = LPC176X_IRQ_UART_0,
- .clock = LPC176X_PCLK,
- .initial_baud = LPC176X_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC176X_CONFIG_UART_1
-static ns16550_context lpc176x_uart_context_1 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"),
- .get_reg = lpc176x_uart_get_register,
- .set_reg = lpc176x_uart_set_register,
- .port = UART1_BASE_ADDR,
- .irq = LPC176X_IRQ_UART_1,
- .clock = LPC176X_PCLK,
- .initial_baud = LPC176X_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC176X_CONFIG_UART_2
-static ns16550_context lpc176x_uart_context_2 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 2"),
- .get_reg = lpc176x_uart_get_register,
- .set_reg = lpc176x_uart_set_register,
- .port = UART2_BASE_ADDR,
- .irq = LPC176X_IRQ_UART_2,
- .clock = LPC176X_PCLK,
- .initial_baud = LPC176X_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC176X_CONFIG_UART_3
-static ns16550_context lpc176x_uart_context_3 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 3"),
- .get_reg = lpc176x_uart_get_register,
- .set_reg = lpc176x_uart_set_register,
- .port = UART3_BASE_ADDR,
- .irq = LPC176X_IRQ_UART_3,
- .clock = LPC176X_PCLK,
- .initial_baud = LPC176X_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-const console_device console_device_table[] = {
- #ifdef LPC176X_CONFIG_CONSOLE
- {
- .device_file = "/dev/ttyS0",
- .probe = console_device_probe_default,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc176x_uart_context_0.base
- },
- #endif
- #ifdef LPC176X_CONFIG_UART_1
- {
- .device_file = "/dev/ttyS1",
- .probe = lpc176x_uart1_probe,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc176x_uart_context_1.base
- },
- #endif
- #ifdef LPC176X_CONFIG_UART_2
- {
- .device_file = "/dev/ttyS2",
- .probe = lpc176x_uart2_probe,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc176x_uart_context_2.base
- },
- #endif
- #ifdef LPC176X_CONFIG_UART_3
- {
- .device_file = "/dev/ttyS3",
- .probe = lpc176x_uart3_probe,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc176x_uart_context_3.base
- },
- #endif
-};
-
-const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table);
diff --git a/c/src/lib/libbsp/arm/lpc24xx/Makefile.am b/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
index ee2b7b4da0..a597be7e05 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
+++ b/c/src/lib/libbsp/arm/lpc24xx/Makefile.am
@@ -71,12 +71,12 @@ librtemsbsp_a_SOURCES += irq/irq.c
librtemsbsp_a_SOURCES += irq/irq-dispatch.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios-init.c
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/uart-probe-1.c
-librtemsbsp_a_SOURCES += console/uart-probe-2.c
-librtemsbsp_a_SOURCES += console/uart-probe-3.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc24xx/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc24xx/console/uart-probe-1.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc24xx/console/uart-probe-2.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc24xx/console/uart-probe-3.c
# Clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-nxp-lpc.c
diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c b/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c
deleted file mode 100644
index de94552c27..0000000000
--- a/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc24xx
- *
- * @brief Console configuration.
- */
-
-/*
- * Copyright (c) 2008-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/console.h>
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/lpc24xx.h>
-#include <bsp/irq.h>
-#include <bsp/io.h>
-#include <bsp/console-termios.h>
-
-static uint8_t lpc24xx_uart_get_register(uintptr_t addr, uint8_t i)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- return (uint8_t) reg [i];
-}
-
-static void lpc24xx_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- reg [i] = val;
-}
-
-#ifdef LPC24XX_CONFIG_CONSOLE
-static ns16550_context lpc24xx_uart_context_0 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 0"),
- .get_reg = lpc24xx_uart_get_register,
- .set_reg = lpc24xx_uart_set_register,
- .port = UART0_BASE_ADDR,
- .irq = LPC24XX_IRQ_UART_0,
- .clock = LPC24XX_PCLK,
- .initial_baud = LPC24XX_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC24XX_CONFIG_UART_1
-static ns16550_context lpc24xx_uart_context_1 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"),
- .get_reg = lpc24xx_uart_get_register,
- .set_reg = lpc24xx_uart_set_register,
- .port = UART1_BASE_ADDR,
- .irq = LPC24XX_IRQ_UART_1,
- .clock = LPC24XX_PCLK,
- .initial_baud = LPC24XX_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC24XX_CONFIG_UART_2
-static ns16550_context lpc24xx_uart_context_2 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 2"),
- .get_reg = lpc24xx_uart_get_register,
- .set_reg = lpc24xx_uart_set_register,
- .port = UART2_BASE_ADDR,
- .irq = LPC24XX_IRQ_UART_2,
- .clock = LPC24XX_PCLK,
- .initial_baud = LPC24XX_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-#ifdef LPC24XX_CONFIG_UART_3
-static ns16550_context lpc24xx_uart_context_3 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 3"),
- .get_reg = lpc24xx_uart_get_register,
- .set_reg = lpc24xx_uart_set_register,
- .port = UART3_BASE_ADDR,
- .irq = LPC24XX_IRQ_UART_3,
- .clock = LPC24XX_PCLK,
- .initial_baud = LPC24XX_UART_BAUD,
- .has_fractional_divider_register = true
-};
-#endif
-
-const console_device console_device_table[] = {
- #ifdef LPC24XX_CONFIG_CONSOLE
- {
- .device_file = "/dev/ttyS0",
- .probe = console_device_probe_default,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc24xx_uart_context_0.base
- },
- #endif
- #ifdef LPC24XX_CONFIG_UART_1
- {
- .device_file = "/dev/ttyS1",
- .probe = lpc24xx_uart_probe_1,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc24xx_uart_context_1.base
- },
- #endif
- #ifdef LPC24XX_CONFIG_UART_2
- {
- .device_file = "/dev/ttyS2",
- .probe = lpc24xx_uart_probe_2,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc24xx_uart_context_2.base
- },
- #endif
- #ifdef LPC24XX_CONFIG_UART_3
- {
- .device_file = "/dev/ttyS3",
- .probe = lpc24xx_uart_probe_3,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc24xx_uart_context_3.base
- },
- #endif
-};
-
-const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table);
diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c
deleted file mode 100644
index 3b5f08059f..0000000000
--- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-1.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc24xx
- *
- * @brief UART 1 probe.
- */
-
-/*
- * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/io.h>
-
-bool lpc24xx_uart_probe_1(rtems_termios_device_context *context)
-{
- static const lpc24xx_pin_range pins [] = {
- LPC24XX_PIN_UART_1_TXD_P0_15,
- LPC24XX_PIN_UART_1_RXD_P0_16,
- LPC24XX_PIN_TERMINAL
- };
-
- lpc24xx_module_enable(LPC24XX_MODULE_UART_1, LPC24XX_MODULE_PCLK_DEFAULT);
- lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
-
- return ns16550_probe(context);
-}
diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c
deleted file mode 100644
index d45dbb755b..0000000000
--- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc24xx
- *
- * @brief UART 2 probe.
- */
-
-/*
- * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/io.h>
-
-bool lpc24xx_uart_probe_2(rtems_termios_device_context *context)
-{
- static const lpc24xx_pin_range pins [] = {
- LPC24XX_PIN_UART_2_TXD_P0_10,
- LPC24XX_PIN_UART_2_RXD_P0_11,
- LPC24XX_PIN_TERMINAL
- };
-
- lpc24xx_module_enable(LPC24XX_MODULE_UART_2, LPC24XX_MODULE_PCLK_DEFAULT);
- lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
-
- return ns16550_probe(context);
-}
diff --git a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c b/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c
deleted file mode 100644
index fad932ef9e..0000000000
--- a/c/src/lib/libbsp/arm/lpc24xx/console/uart-probe-3.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc24xx
- *
- * @brief UART 3 probe.
- */
-
-/*
- * Copyright (c) 2011-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/io.h>
-
-bool lpc24xx_uart_probe_3(rtems_termios_device_context *context)
-{
- static const lpc24xx_pin_range pins [] = {
- LPC24XX_PIN_UART_3_TXD_P0_0,
- LPC24XX_PIN_UART_3_RXD_P0_1,
- LPC24XX_PIN_TERMINAL
- };
-
- lpc24xx_module_enable(LPC24XX_MODULE_UART_3, LPC24XX_MODULE_PCLK_DEFAULT);
- lpc24xx_pin_config(&pins [0], LPC24XX_PIN_SET_FUNCTION);
-
- return ns16550_probe(context);
-}
diff --git a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am
index 743b0722b3..d07607060d 100644
--- a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am
+++ b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am
@@ -59,10 +59,10 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios-init.c
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/hsu.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc32xx/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc32xx/console/hsu.c
# Clock
librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-nxp-lpc.c
diff --git a/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c b/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c
deleted file mode 100644
index 17e6b0af8f..0000000000
--- a/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * @file
- *
- * @ingroup arm_lpc32xx
- *
- * @brief Console configuration.
- */
-
-/*
- * Copyright (c) 2009-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/ns16550.h>
-
-#include <bsp.h>
-#include <bsp/lpc32xx.h>
-#include <bsp/irq.h>
-#include <bsp/hsu.h>
-#include <bsp/console-termios.h>
-
-static uint8_t lpc32xx_uart_get_register(uintptr_t addr, uint8_t i)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- return (uint8_t) reg [i];
-}
-
-static void lpc32xx_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val)
-{
- volatile uint32_t *reg = (volatile uint32_t *) addr;
-
- reg [i] = val;
-}
-
-#ifdef LPC32XX_UART_3_BAUD
- static bool lpc32xx_uart_probe_3(rtems_termios_device_context *context)
- {
- LPC32XX_UARTCLK_CTRL |= BSP_BIT32(0);
- LPC32XX_U3CLK = LPC32XX_CONFIG_U3CLK;
- LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 4, 5);
-
- return ns16550_probe(context);
- }
-#endif
-
-#ifdef LPC32XX_UART_4_BAUD
- static bool lpc32xx_uart_probe_4(rtems_termios_device_context *context)
- {
- volatile lpc32xx_gpio *gpio = &lpc32xx.gpio;
-
- /*
- * Set GPO_21/U4_TX/LCDVD[3] to U4_TX. This works only if LCD module is
- * disabled.
- */
- gpio->p2_mux_set = BSP_BIT32(2);
-
- LPC32XX_UARTCLK_CTRL |= BSP_BIT32(1);
- LPC32XX_U4CLK = LPC32XX_CONFIG_U4CLK;
- LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 6, 7);
-
- return ns16550_probe(context);
- }
-#endif
-
-#ifdef LPC32XX_UART_6_BAUD
- static bool lpc32xx_uart_probe_6(rtems_termios_device_context *context)
- {
- /* Bypass the IrDA modulator/demodulator */
- LPC32XX_UART_CTRL |= BSP_BIT32(5);
-
- LPC32XX_UARTCLK_CTRL |= BSP_BIT32(3);
- LPC32XX_U6CLK = LPC32XX_CONFIG_U6CLK;
- LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 10, 11);
-
- return ns16550_probe(context);
- }
-#endif
-
-/* FIXME: Console selection */
-
-#ifdef LPC32XX_UART_5_BAUD
-static ns16550_context lpc32xx_uart_context_5 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 5"),
- .get_reg = lpc32xx_uart_get_register,
- .set_reg = lpc32xx_uart_set_register,
- .port = LPC32XX_BASE_UART_5,
- .irq = LPC32XX_IRQ_UART_5,
- .clock = 16 * LPC32XX_UART_5_BAUD,
- .initial_baud = LPC32XX_UART_5_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_3_BAUD
-static ns16550_context lpc32xx_uart_context_3 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 3"),
- .get_reg = lpc32xx_uart_get_register,
- .set_reg = lpc32xx_uart_set_register,
- .port = LPC32XX_BASE_UART_3,
- .irq = LPC32XX_IRQ_UART_3,
- .clock = 16 * LPC32XX_UART_3_BAUD,
- .initial_baud = LPC32XX_UART_3_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_4_BAUD
-static ns16550_context lpc32xx_uart_context_4 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 4"),
- .get_reg = lpc32xx_uart_get_register,
- .set_reg = lpc32xx_uart_set_register,
- .port = LPC32XX_BASE_UART_4,
- .irq = LPC32XX_IRQ_UART_4,
- .clock = 16 * LPC32XX_UART_4_BAUD,
- .initial_baud = LPC32XX_UART_4_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_6_BAUD
-static ns16550_context lpc32xx_uart_context_6 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 6"),
- .get_reg = lpc32xx_uart_get_register,
- .set_reg = lpc32xx_uart_set_register,
- .port = LPC32XX_BASE_UART_6,
- .irq = LPC32XX_IRQ_UART_6,
- .clock = 16 * LPC32XX_UART_6_BAUD,
- .initial_baud = LPC32XX_UART_6_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_1_BAUD
-static lpc32xx_hsu_context lpc32xx_uart_context_1 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 1"),
- .hsu = (volatile lpc32xx_hsu *) LPC32XX_BASE_UART_1,
- .irq = LPC32XX_IRQ_UART_1,
- .initial_baud = LPC32XX_UART_1_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_2_BAUD
-static lpc32xx_hsu_context lpc32xx_uart_context_2 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 2"),
- .hsu = (volatile lpc32xx_hsu *) LPC32XX_BASE_UART_2,
- .irq = LPC32XX_IRQ_UART_2,
- .initial_baud = LPC32XX_UART_2_BAUD
-};
-#endif
-
-#ifdef LPC32XX_UART_7_BAUD
-static lpc32xx_hsu_context lpc32xx_uart_context_7 = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("UART 7"),
- .hsu = (volatile lpc32xx_hsu *) LPC32XX_BASE_UART_7,
- .irq = LPC32XX_IRQ_UART_7,
- .initial_baud = LPC32XX_UART_7_BAUD
-};
-#endif
-
-const console_device console_device_table[] = {
- #ifdef LPC32XX_UART_5_BAUD
- {
- .device_file = "/dev/ttyS5",
- .probe = console_device_probe_default,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc32xx_uart_context_5.base
- },
- #endif
- #ifdef LPC32XX_UART_3_BAUD
- {
- .device_file = "/dev/ttyS3",
- .probe = lpc32xx_uart_probe_3,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc32xx_uart_context_3.base
- },
- #endif
- #ifdef LPC32XX_UART_4_BAUD
- {
- .device_file = "/dev/ttyS4",
- .probe = lpc32xx_uart_probe_4,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc32xx_uart_context_4.base
- },
- #endif
- #ifdef LPC32XX_UART_6_BAUD
- {
- .device_file = "/dev/ttyS6",
- .probe = lpc32xx_uart_probe_6,
- .handler = &ns16550_handler_interrupt,
- .context = &lpc32xx_uart_context_6.base
- },
- #endif
- #ifdef LPC32XX_UART_1_BAUD
- {
- .device_file = "/dev/ttyS1",
- .probe = lpc32xx_hsu_probe,
- .handler = &lpc32xx_hsu_fns,
- .context = &lpc32xx_uart_context_1.base
- },
- #endif
- #ifdef LPC32XX_UART_2_BAUD
- {
- .device_file = "/dev/ttyS2",
- .probe = lpc32xx_hsu_probe,
- .handler = &lpc32xx_hsu_fns,
- .context = &lpc32xx_uart_context_2.base
- },
- #endif
- #ifdef LPC32XX_UART_7_BAUD
- {
- .device_file = "/dev/ttyS7",
- .probe = lpc32xx_hsu_probe,
- .handler = &lpc32xx_hsu_fns,
- .context = &lpc32xx_uart_context_7.base
- },
- #endif
-};
-
-const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table);
diff --git a/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c b/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c
deleted file mode 100644
index b2044e0753..0000000000
--- a/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- * @file
- *
- * @ingroup arm_lpc32xx
- *
- * @brief High speed UART driver (14-clock).
- */
-
-/*
- * Copyright (c) 2010-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h>
-#include <bsp/lpc32xx.h>
-#include <bsp/irq.h>
-#include <bsp/hsu.h>
-
-#define HSU_FIFO_SIZE 64
-
-#define HSU_LEVEL_RX_MASK 0xffU
-#define HSU_LEVEL_TX_MASK 0xff00U
-#define HSU_LEVEL_TX_SHIFT 8
-
-#define HSU_RX_DATA_MASK 0xffU
-#define HSU_RX_EMPTY (1U << 8)
-#define HSU_RX_ERROR (1U << 9)
-#define HSU_RX_BREAK (1U << 10)
-
-#define HSU_IIR_TX (1U << 0)
-#define HSU_IIR_RX_TRIG (1U << 1)
-#define HSU_IIR_RX_TIMEOUT (1U << 2)
-
-#define HSU_CTRL_INTR_DISABLED 0x1280fU
-#define HSU_CTRL_RX_INTR_ENABLED 0x1284fU
-#define HSU_CTRL_RX_AND_TX_INTR_ENABLED 0x1286fU
-
-/* We are interested in RX timeout, RX trigger and TX trigger interrupts */
-#define HSU_IIR_MASK 0x7U
-
-bool lpc32xx_hsu_probe(rtems_termios_device_context *base)
-{
- lpc32xx_hsu_context *ctx = (lpc32xx_hsu_context *) base;
- volatile lpc32xx_hsu *hsu = ctx->hsu;
-
- hsu->ctrl = HSU_CTRL_INTR_DISABLED;
-
- /* Drain FIFOs */
- while (hsu->level != 0) {
- hsu->fifo;
- }
-
- return true;
-}
-
-static void lpc32xx_hsu_interrupt_handler(void *arg)
-{
- rtems_termios_tty *tty = arg;
- lpc32xx_hsu_context *ctx = rtems_termios_get_device_context(tty);
- volatile lpc32xx_hsu *hsu = ctx->hsu;
-
- /* Iterate until no more interrupts are pending */
- do {
- int rv = 0;
- int i = 0;
- char buf [HSU_FIFO_SIZE];
-
- /* Enqueue received characters */
- while (i < HSU_FIFO_SIZE) {
- uint32_t in = hsu->fifo;
-
- if ((in & HSU_RX_EMPTY) == 0) {
- if ((in & HSU_RX_BREAK) == 0) {
- buf [i] = in & HSU_RX_DATA_MASK;
- ++i;
- }
- } else {
- break;
- }
- }
- rtems_termios_enqueue_raw_characters(tty, buf, i);
-
- /* Dequeue transmitted characters */
- rv = rtems_termios_dequeue_characters(tty, (int) ctx->chars_in_transmission);
- if (rv == 0) {
- /* Nothing to transmit */
- }
- } while ((hsu->iir & HSU_IIR_MASK) != 0);
-}
-
-static bool lpc32xx_hsu_first_open(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- lpc32xx_hsu_context *ctx = (lpc32xx_hsu_context *) base;
- volatile lpc32xx_hsu *hsu = ctx->hsu;
- rtems_status_code sc;
- bool ok;
-
- sc = rtems_interrupt_handler_install(
- ctx->irq,
- "HSU",
- RTEMS_INTERRUPT_UNIQUE,
- lpc32xx_hsu_interrupt_handler,
- tty
- );
- ok = sc == RTEMS_SUCCESSFUL;
-
- if (ok) {
- rtems_termios_set_initial_baud(tty, ctx->initial_baud);
- hsu->ctrl = HSU_CTRL_RX_INTR_ENABLED;
- }
-
- return ok;
-}
-
-static void lpc32xx_hsu_last_close(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- lpc32xx_hsu_context *ctx = (lpc32xx_hsu_context *) base;
- volatile lpc32xx_hsu *hsu = ctx->hsu;
-
- hsu->ctrl = HSU_CTRL_INTR_DISABLED;
-
- rtems_interrupt_handler_remove(
- ctx->irq,
- lpc32xx_hsu_interrupt_handler,
- tty
- );
-}
-
-static void lpc32xx_hsu_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
- lpc32xx_hsu_context *ctx = (lpc32xx_hsu_context *) base;
- volatile lpc32xx_hsu *hsu = ctx->hsu;
- size_t tx_level = (hsu->level & HSU_LEVEL_TX_MASK) >> HSU_LEVEL_TX_SHIFT;
- size_t tx_free = HSU_FIFO_SIZE - tx_level;
- size_t i = 0;
- size_t out = len > tx_free ? tx_free : len;
-
- for (i = 0; i < out; ++i) {
- hsu->fifo = buf [i];
- }
-
- ctx->chars_in_transmission = out;
-
- if (len > 0) {
- hsu->ctrl = HSU_CTRL_RX_AND_TX_INTR_ENABLED;
- } else {
- hsu->ctrl = HSU_CTRL_RX_INTR_ENABLED;
- hsu->iir = HSU_IIR_TX;
- }
-}
-
-static bool lpc32xx_hsu_set_attributes(
- rtems_termios_device_context *base,
- const struct termios *term
-)
-{
- lpc32xx_hsu_context *ctx = (lpc32xx_hsu_context *) base;
- volatile lpc32xx_hsu *hsu = ctx->hsu;
- int baud_flags = term->c_ospeed;
-
- if (baud_flags != 0) {
- int32_t baud = rtems_termios_baud_to_number(baud_flags);
-
- if (baud > 0) {
- uint32_t baud_divisor = 14 * (uint32_t) baud;
- uint32_t rate = LPC32XX_PERIPH_CLK / baud_divisor;
- uint32_t remainder = LPC32XX_PERIPH_CLK - rate * baud_divisor;
-
- if (2 * remainder >= baud_divisor) {
- ++rate;
- }
-
- hsu->rate = rate - 1;
- }
- }
-
- return true;
-}
-
-const rtems_termios_device_handler lpc32xx_hsu_fns = {
- .first_open = lpc32xx_hsu_first_open,
- .last_close = lpc32xx_hsu_last_close,
- .write = lpc32xx_hsu_write,
- .set_attributes = lpc32xx_hsu_set_attributes,
- .mode = TERMIOS_IRQ_DRIVEN
-};
diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
index 58cfe1f237..106c0b43f9 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
@@ -16,7 +16,7 @@ dist_project_lib_DATA = startup/bsp_specs
# Header #
###############################################################################
-noinst_HEADERS = console/font_data.h
+noinst_HEADERS = ../../../../../../bsps/arm/raspberrypi/console/font_data.h
###############################################################################
# Data #
@@ -68,12 +68,12 @@ librtemsbsp_a_SOURCES += irq/irq.c
# Console
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/console_select.c
-librtemsbsp_a_SOURCES += console/usart.c
-librtemsbsp_a_SOURCES += console/fb.c
-librtemsbsp_a_SOURCES += console/fbcons.c
-librtemsbsp_a_SOURCES += console/outch.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/console_select.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/usart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/fb.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/fbcons.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/raspberrypi/console/outch.c
# Mailbox
librtemsbsp_a_SOURCES += misc/mailbox.c
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/console-config.c b/c/src/lib/libbsp/arm/raspberrypi/console/console-config.c
deleted file mode 100644
index d2186c918b..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/console-config.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi_usart
- *
- * @brief Console Configuration.
- */
-
-/*
- * Copyright (c) 2015 Yang Qiao
- * based on work by:
- * Copyright (c) 2013 Alan Cudmore
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#include <rtems/bspIo.h>
-
-#include <libchip/serial.h>
-
-#include <bspopts.h>
-#include <bsp/irq.h>
-#include <bsp/usart.h>
-#include <bsp/raspberrypi.h>
-#include <bsp/fbcons.h>
-
-console_tbl Console_Configuration_Ports [] = {
- {
- .sDeviceName = "/dev/ttyS0",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &bcm2835_usart_fns,
- .deviceProbe = NULL,
- .pDeviceFlow = NULL,
- .ulCtrlPort1 = BCM2835_UART0_BASE,
- .ulCtrlPort2 = 0,
- .ulClock = USART0_DEFAULT_BAUD,
- .ulIntVector = BCM2835_IRQ_ID_UART
- },
- {
- .sDeviceName ="/dev/fbcons",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &fbcons_fns,
- .deviceProbe = fbcons_probe,
- .pDeviceFlow = NULL,
- },
-};
-
-#define PORT_COUNT \
- (sizeof(Console_Configuration_Ports) \
- / sizeof(Console_Configuration_Ports [0]))
-
-unsigned long Console_Configuration_Count = PORT_COUNT;
-
-static void output_char(char c)
-{
- const console_fns *con =
- Console_Configuration_Ports [Console_Port_Minor].pDeviceFns;
-
- con->deviceWritePolled((int) Console_Port_Minor, c);
-}
-
-BSP_output_char_function_type BSP_output_char = output_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/console_select.c b/c/src/lib/libbsp/arm/raspberrypi/console/console_select.c
deleted file mode 100644
index 42c4944ebe..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/console_select.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi_console
- *
- * @brief console select
- */
-
-/*
- * Copyright (c) 2015 Yang Qiao
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#include <bsp.h>
-#include <bsp/fatal.h>
-#include <rtems/libio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <termios.h>
-
-#include <rtems/termiostypes.h>
-#include <libchip/serial.h>
-#include "../../../../../../../bsps/shared/dev/serial/legacy-console.h"
-#include <bsp/rpi-fb.h>
-
-rtems_device_minor_number BSPPrintkPort = 0;
-
-/*
- * Method to return true if the device associated with the
- * minor number probs available.
- */
-static bool bsp_Is_Available( rtems_device_minor_number minor )
-{
- console_tbl *cptr = Console_Port_Tbl[ minor ];
-
- /*
- * First perform the configuration dependent probe, then the
- * device dependent probe
- */
- if ( ( !cptr->deviceProbe || cptr->deviceProbe( minor ) ) &&
- cptr->pDeviceFns->deviceProbe( minor ) ) {
- return true;
- }
-
- return false;
-}
-
-/*
- * Method to return the first available device.
- */
-static rtems_device_minor_number bsp_First_Available_Device( void )
-{
- rtems_device_minor_number minor;
-
- for ( minor = 0; minor < Console_Port_Count; minor++ ) {
- console_tbl *cptr = Console_Port_Tbl[ minor ];
-
- /*
- * First perform the configuration dependent probe, then the
- * device dependent probe
- */
-
- if ( ( !cptr->deviceProbe || cptr->deviceProbe( minor ) ) &&
- cptr->pDeviceFns->deviceProbe( minor ) ) {
- return minor;
- }
- }
-
- /*
- * Error No devices were found. We will want to bail here.
- */
- bsp_fatal( BSP_FATAL_CONSOLE_NO_DEV );
-}
-
-void bsp_console_select( void )
-{
- /*
- * Reset Console_Port_Minor and
- * BSPPrintkPort here if desired.
- *
- * This default version allows the bsp to set these
- * values at creation and will not touch them again
- * unless the selected port number is not available.
- */
- const char *opt;
-
- Console_Port_Minor = BSP_CONSOLE_UART0;
- BSPPrintkPort = BSP_CONSOLE_UART0;
-
- opt = rpi_cmdline_get_arg( "--console=" );
-
- if ( opt ) {
- if ( strncmp( opt, "fbcons", sizeof( "fbcons" ) - 1 ) == 0 ) {
- if ( rpi_video_is_initialized() > 0 ) {
- Console_Port_Minor = BSP_CONSOLE_FB;
- BSPPrintkPort = BSP_CONSOLE_FB;
- }
- }
- }
-
- /*
- * If the device that was selected isn't available then
- * let the user know and select the first available device.
- */
- if ( !bsp_Is_Available( Console_Port_Minor ) ) {
- Console_Port_Minor = bsp_First_Available_Device();
- }
-}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/fb.c b/c/src/lib/libbsp/arm/raspberrypi/console/fb.c
deleted file mode 100644
index 815d17e8ca..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/fb.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi
- *
- * @brief framebuffer support.
- */
-
-/*
- * Copyright (c) 2015 Yang Qiao
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#include <bsp.h>
-#include <bsp/raspberrypi.h>
-#include <bsp/mailbox.h>
-#include <bsp/vc.h>
-#include <bsp/rpi-fb.h>
-
-#include <libcpu/arm-cp15.h>
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/fb.h>
-#include <rtems/framebuffer.h>
-#include <rtems/score/atomic.h>
-#include <rtems/bspIo.h>
-
-#define SCREEN_WIDTH 1024
-#define SCREEN_HEIGHT 768
-#define BPP 32
-
-/* flag to limit driver to protect against multiple opens */
-static Atomic_Flag driver_mutex;
-
-/*
- * screen information for the driver (fb0).
- */
-
-static struct fb_var_screeninfo fb_var_info = {
- .xres = SCREEN_WIDTH,
- .yres = SCREEN_HEIGHT,
- .bits_per_pixel = BPP
-};
-
-static struct fb_fix_screeninfo fb_fix_info = {
- .smem_start = (void *) NULL,
- .smem_len = 0,
- .type = FB_TYPE_PACKED_PIXELS,
- .visual = FB_VISUAL_TRUECOLOR,
- .line_length = 0
-};
-
-typedef enum {
- NO_SUITABLE_MODE = -1,
- BAD_FORMAT = -2,
- AUTO_SELECT = -3,
- DONT_INIT = -4,
- NO_MODE_REQ = -5,
-} mode_err_ret_val;
-
-int rpi_get_fix_screen_info( struct fb_fix_screeninfo *info )
-{
- *info = fb_fix_info;
- return 0;
-}
-
-int rpi_get_var_screen_info( struct fb_var_screeninfo *info )
-{
- *info = fb_var_info;
- return 0;
-}
-
-/**
- * @brief Find mode given in string format.
- *
- * expected format
- * <resX>x<resY>[-<bpp>]
- * numbers <resX>, <resY> and <bpp> are decadic
- *
- * @param[out] fb_var_ptr pointer to variable mode part filled by function
- * @param[in] video_string string to be parsed
- * @retval video mode number to be set
- * @retval -1 no suitable mode found
- * @retval -2 bad format of the video_string
- * @retval -3 automatic mode selection requested
- * @retval -4 request to not initialize graphics
- * @retval -5 no mode requested/empty video string
- */
-
-static int parse_mode_from_string(
- struct fb_var_screeninfo *fb_var_ptr,
- const char *video_string
-)
-{
- const char *opt;
- char *endptr;
- uint32_t width;
- uint32_t height;
- uint32_t bpp = 0;
-
- opt = video_string;
-
- if ( opt == NULL )
- return NO_MODE_REQ;
-
- if ( strncmp( opt, "auto", 4 ) == 0 )
- return AUTO_SELECT;
-
- if ( strncmp( opt, "none", 4 ) == 0 ||
- strncmp( opt, "off", 3 ) == 0 )
- return DONT_INIT;
-
- width = strtol( opt, &endptr, 10 );
-
- if ( *endptr != 'x' ) {
- return BAD_FORMAT;
- }
-
- opt = endptr + 1;
- height = strtol( opt, &endptr, 10 );
-
- switch ( *endptr ) {
- case '-':
- opt = endptr + 1;
- endptr = NULL;
- bpp = strtol( opt, &endptr, 10 );
-
- if ( ( endptr == opt ) || ( endptr == NULL ) )
- return BAD_FORMAT;
-
- if ( *endptr && ( *endptr != ' ' ) )
- return BAD_FORMAT;
-
- break;
- case ' ':
- case 0:
- break;
- default:
- return BAD_FORMAT;
- }
-
- fb_var_ptr->xres = width;
- fb_var_ptr->yres = height;
-
- if ( bpp != 0 )
- fb_var_ptr->bits_per_pixel = bpp;
-
- return 0;
-}
-
-static int find_mode_from_vc( void )
-{
- int res;
- unsigned int width;
- unsigned int height;
- bcm2835_get_display_size_entries entries;
-
- res = bcm2835_mailbox_get_display_size( &entries );
-
- width = entries.width;
- height = entries.height;
-
- if ( width == 0 || height == 0 ) {
- fb_var_info.xres = SCREEN_WIDTH;
- fb_var_info.yres = SCREEN_HEIGHT;
- } else {
- fb_var_info.xres = width;
- fb_var_info.yres = height;
- }
- printk("find_mode_from_vc %u x %u, res %d\n", width, height, res);
-
- return res;
-}
-
-bool rpi_fb_hdmi_is_present( void )
-{
- bcm2835_get_display_size_entries entries;
-
- memset( &entries, 0, sizeof( entries ) );
- bcm2835_mailbox_get_display_size( &entries );
-
- /* Impossible display dimension */
- if ( ( entries.width < 10 ) || ( entries.height < 10 ) )
- return false;
-
- /* Know default values reported when monitor is not present */
- if ( ( entries.width == 0x290 ) && ( entries.height == 0x1A0 ) )
- return false;
-
- return true;
-}
-
-int rpi_fb_init( void )
-{
- int res;
- int mode_from_cmdline;
- bcm2835_init_frame_buffer_entries init_frame_buffer_entries;
-
- if ( fb_fix_info.smem_start != NULL ) {
- return RPI_FB_INIT_ALREADY_INITIALIZED;
- }
-
- if ( rpi_fb_hdmi_is_present() == false ) {
- return RPI_FB_INIT_NO_DISPLAY;
- }
-
- mode_from_cmdline = parse_mode_from_string( &fb_var_info,
- rpi_cmdline_get_arg( "--video=" ) );
-
- switch ( mode_from_cmdline ) {
- case BAD_FORMAT:
- return RPI_FB_INIT_CMDLINE_BAD_FORMAT;
- case AUTO_SELECT:
- break;
- case DONT_INIT:
- return RPI_FB_INIT_CMDLINE_DONT_INIT;
- case NO_MODE_REQ:
- return RPI_FB_INIT_CMDLINE_NO_MODE_REQ;
- }
-
- if ( mode_from_cmdline ) {
- if ( find_mode_from_vc() )
- return RPI_FB_INIT_MODE_PROBE_ERROR;
- }
-
- memset( &init_frame_buffer_entries, 0, sizeof( init_frame_buffer_entries ) );
- init_frame_buffer_entries.xres = fb_var_info.xres;
- init_frame_buffer_entries.yres = fb_var_info.yres;
- init_frame_buffer_entries.xvirt = fb_var_info.xres;
- init_frame_buffer_entries.yvirt = fb_var_info.yres;
- init_frame_buffer_entries.depth = fb_var_info.bits_per_pixel;
- init_frame_buffer_entries.pixel_order = bcm2835_mailbox_pixel_order_rgb;
- init_frame_buffer_entries.alpha_mode = bcm2835_mailbox_alpha_mode_0_opaque;
- init_frame_buffer_entries.voffset_x = 0;
- init_frame_buffer_entries.voffset_y = 0;
- init_frame_buffer_entries.overscan_left = 0;
- init_frame_buffer_entries.overscan_right = 0;
- init_frame_buffer_entries.overscan_top = 0;
- init_frame_buffer_entries.overscan_bottom = 0;
- printk("bcm2835_mailbox_init_frame_buffer ...\n");
- res = bcm2835_mailbox_init_frame_buffer( &init_frame_buffer_entries );
- printk("bcm2835_mailbox_init_frame_buffer returned %d\n", res);
- if (res != 0) {
- printk("bcm2835_mailbox_init_frame_buffer retry ...\n");
- res = bcm2835_mailbox_init_frame_buffer( &init_frame_buffer_entries );
- printk("bcm2835_mailbox_init_frame_buffer returned %d\n", res);
- if (res != 0)
- return RPI_FB_INIT_SETUP_FAILED;
- }
-
- bcm2835_get_pitch_entries get_pitch_entries;
- bcm2835_mailbox_get_pitch( &get_pitch_entries );
-
- fb_var_info.xres = init_frame_buffer_entries.xres;
- fb_var_info.yres = init_frame_buffer_entries.yres;
- fb_var_info.bits_per_pixel = init_frame_buffer_entries.depth;
- fb_fix_info.smem_start = (void *) init_frame_buffer_entries.base;
- fb_fix_info.smem_len = init_frame_buffer_entries.size;
- fb_fix_info.line_length = get_pitch_entries.pitch;
-
- if ( fb_fix_info.smem_start == NULL )
- return RPI_FB_INIT_START_ADDR_UNKNOWN;
-
- printk("fb_fix_info.smem_start %p\n", fb_fix_info.smem_start);
-
- arm_cp15_set_translation_table_entries( (void *) fb_fix_info.smem_start,
- (void *) fb_fix_info.smem_start +
- fb_fix_info.smem_len,
- ARMV7_MMU_DATA_READ_WRITE_CACHED );
-
- return RPI_FB_INIT_OK;
-}
-
-/*
- * fbds device driver initialize entry point.
- */
-
-rtems_device_driver frame_buffer_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code status;
-
- /* register the devices */
- status = rtems_io_register_name( FRAMEBUFFER_DEVICE_0_NAME, major, 0 );
-
- if ( status != RTEMS_SUCCESSFUL ) {
- printk( "[!] error registering framebuffer\n" );
- rtems_fatal_error_occurred( status );
- }
-
- _Atomic_Flag_clear( &driver_mutex, ATOMIC_ORDER_RELEASE );
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * fbds device driver open operation.
- */
-
-rtems_device_driver frame_buffer_open(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- if ( _Atomic_Flag_test_and_set( &driver_mutex,
- ATOMIC_ORDER_ACQUIRE ) != 0 ) {
- printk( "RaspberryPi framebuffer could not lock driver_mutex\n" );
- return RTEMS_UNSATISFIED;
- }
-
- if ( fb_fix_info.smem_start == NULL ) {
- int res;
- res = rpi_fb_init();
- if ( (res < RPI_FB_INIT_OK) || (fb_fix_info.smem_start == NULL) ) {
- _Atomic_Flag_clear( &driver_mutex, ATOMIC_ORDER_RELEASE );
- printk( "RaspberryPi framebuffer initialization failed\n" );
- return RTEMS_UNSATISFIED;
- }
- }
-
- memset( (void *) fb_fix_info.smem_start, 0, fb_fix_info.smem_len );
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * fbds device driver close operation.
- */
-
-rtems_device_driver frame_buffer_close(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- /* restore previous state. for VGA this means return to text mode.
- * leave out if graphics hardware has been initialized in
- * frame_buffer_initialize() */
- memset( (void *) fb_fix_info.smem_start, 0, fb_fix_info.smem_len );
- _Atomic_Flag_clear( &driver_mutex, ATOMIC_ORDER_RELEASE );
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * fbds device driver read operation.
- */
-
-rtems_device_driver frame_buffer_read(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg;
-
- rw_args->bytes_moved =
- ( ( rw_args->offset + rw_args->count ) > fb_fix_info.smem_len ) ?
- ( fb_fix_info.smem_len - rw_args->offset ) : rw_args->count;
- memcpy( rw_args->buffer,
- (const void *) ( fb_fix_info.smem_start + rw_args->offset ),
- rw_args->bytes_moved );
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * fbds device driver write operation.
- */
-
-rtems_device_driver frame_buffer_write(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) arg;
-
- rw_args->bytes_moved =
- ( ( rw_args->offset + rw_args->count ) > fb_fix_info.smem_len ) ?
- ( fb_fix_info.smem_len - rw_args->offset ) : rw_args->count;
- memcpy( (void *) ( fb_fix_info.smem_start + rw_args->offset ),
- rw_args->buffer,
- rw_args->bytes_moved );
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * ioctl entry point.
- */
-
-rtems_device_driver frame_buffer_control(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_libio_ioctl_args_t *args = arg;
-
- /* XXX check minor */
-
- switch ( args->command ) {
- case FBIOGET_VSCREENINFO:
- memcpy( args->buffer, &fb_var_info, sizeof( fb_var_info ) );
- args->ioctl_return = 0;
- break;
- case FBIOGET_FSCREENINFO:
- memcpy( args->buffer, &fb_fix_info, sizeof( fb_fix_info ) );
- args->ioctl_return = 0;
- break;
- case FBIOGETCMAP:
- /* no palette - truecolor mode */
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- case FBIOPUTCMAP:
- /* no palette - truecolor mode */
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- default:
- args->ioctl_return = -1;
- return RTEMS_UNSATISFIED;
- }
-
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/fbcons.c b/c/src/lib/libbsp/arm/raspberrypi/console/fbcons.c
deleted file mode 100644
index 3669ba458d..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/fbcons.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi_console
- *
- * @brief framebuffer graphic console support.
- */
-
-/*
- * Copyright (c) 2015 Yang Qiao
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#include <rtems.h>
-#include <rtems/libio.h>
-
-#include <stdlib.h>
-
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-#include <bsp.h>
-#include <bsp/fbcons.h>
-#include <bsp/vc.h>
-#include <bsp/rpi-fb.h>
-
-/*
- * fbcons_init
- *
- * This function initializes the fb console to a quiecsent state.
- */
-static void fbcons_init( int minor )
-{
-}
-
-/*
- * fbcons_open
- *
- * This function opens a port for communication.
- *
- * Default state is 9600 baud, 8 bits, No parity, and 1 stop bit.
- */
-static int fbcons_open(
- int major,
- int minor,
- void *arg
-)
-{
- return RTEMS_SUCCESSFUL;
-}
-
-/*
- * fbcons_close
- *
- * This function shuts down the requested port.
- */
-static int fbcons_close(
- int major,
- int minor,
- void *arg
-)
-{
- return ( RTEMS_SUCCESSFUL );
-}
-
-/*
- * fbcons_write_polled
- *
- * This routine polls out the requested character.
- */
-static void fbcons_write_polled(
- int minor,
- char c
-)
-{
- rpi_fb_outch( c );
-
- if ( c == '\n' )
- rpi_fb_outch( '\r' ); /* LF = LF + CR */
-}
-
-/*
- * fbcons_write_support_polled
- *
- * Console Termios output entry point when using polled output.
- *
- */
-static ssize_t fbcons_write_support_polled(
- int minor,
- const char *buf,
- size_t len
-)
-{
- int nwrite = 0;
-
- /*
- * poll each byte in the string out of the port.
- */
- while ( nwrite < len ) {
- fbcons_write_polled( minor, *buf++ );
- nwrite++;
- }
-
- /*
- * return the number of bytes written.
- */
- return nwrite;
-}
-
-/*
- * fbcons_inbyte_nonblocking_polled
- *
- * Console Termios polling input entry point.
- */
-static int fbcons_inbyte_nonblocking_polled( int minor )
-{
- // if( rtems_kbpoll() ) {
- // int c = getch();
- // return c;
- // }
-
- return -1;
-}
-
-/*
- * fbcons_set_attributes
- *
- * This function sets the UART channel to reflect the requested termios
- * port settings.
- */
-static int fbcons_set_attributes(
- int minor,
- const struct termios *t
-)
-{
- return 0;
-}
-
-bool fbcons_probe( int minor )
-{
- // rtems_status_code status;
- static bool firstTime = true;
- static bool ret = false;
-
- /*
- * keyboard interrupt should be registered when the keyboard is available
- */
- if ( firstTime ) {
- if ( !rpi_fb_hdmi_is_present() ) {
- ret = false;
- } else {
- ret = true;
- }
- }
-
- firstTime = false;
-
- return ret;
-}
-
-const console_fns fbcons_fns =
-{
- .deviceProbe = libchip_serial_default_probe, /* deviceProbe */
- .deviceFirstOpen = fbcons_open, /* deviceFirstOpen */
- .deviceLastClose = fbcons_close, /* deviceLastClose */
- .deviceRead = fbcons_inbyte_nonblocking_polled, /* deviceRead */
- .deviceWrite = fbcons_write_support_polled, /* deviceWrite */
- .deviceInitialize = fbcons_init, /* deviceInitialize */
- .deviceWritePolled = fbcons_write_polled, /* deviceWritePolled */
- .deviceSetAttributes = fbcons_set_attributes, /* deviceSetAttributes */
- .deviceOutputUsesInterrupts = FALSE, /* deviceOutputUsesInterrupts*/
-};
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/font_data.h b/c/src/lib/libbsp/arm/raspberrypi/console/font_data.h
deleted file mode 100644
index 852310cbf9..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/font_data.h
+++ /dev/null
@@ -1,4639 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi
- *
- * @brief graphic text console font file
- *
- */
-/*
- * Copyright (c) 2015 Yang Qiao
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#ifndef LIBBSP_ARM_RASPBERRYPI_FONT_DATA_H
-#define LIBBSP_ARM_RASPBERRYPI_FONT_DATA_H
-
-#define RPI_FONT_CHARS 256
-#define RPI_FONT_WIDTH 8
-#define RPI_FONT_HEIGHT 16
-#define RPI_FONT_SIZE (RPI_FONT_CHARS * RPI_FONT_HEIGHT)
-
-static unsigned char rpi_font[RPI_FONT_SIZE] = {
-
- /* 0 0x00 '^@' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 1 0x01 '^A' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x81, /* 10000001 */
- 0xa5, /* 10100101 */
- 0x81, /* 10000001 */
- 0x81, /* 10000001 */
- 0xbd, /* 10111101 */
- 0x99, /* 10011001 */
- 0x81, /* 10000001 */
- 0x81, /* 10000001 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 2 0x02 '^B' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0xff, /* 11111111 */
- 0xdb, /* 11011011 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xc3, /* 11000011 */
- 0xe7, /* 11100111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 3 0x03 '^C' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x6c, /* 01101100 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0x7c, /* 01111100 */
- 0x38, /* 00111000 */
- 0x10, /* 00010000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 4 0x04 '^D' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x7c, /* 01111100 */
- 0xfe, /* 11111110 */
- 0x7c, /* 01111100 */
- 0x38, /* 00111000 */
- 0x10, /* 00010000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 5 0x05 '^E' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0xe7, /* 11100111 */
- 0xe7, /* 11100111 */
- 0xe7, /* 11100111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 6 0x06 '^F' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x7e, /* 01111110 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 7 0x07 '^G' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 8 0x08 '^H' */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xe7, /* 11100111 */
- 0xc3, /* 11000011 */
- 0xc3, /* 11000011 */
- 0xe7, /* 11100111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
-
- /* 9 0x09 '^I' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x42, /* 01000010 */
- 0x42, /* 01000010 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 10 0x0a '^J' */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xc3, /* 11000011 */
- 0x99, /* 10011001 */
- 0xbd, /* 10111101 */
- 0xbd, /* 10111101 */
- 0x99, /* 10011001 */
- 0xc3, /* 11000011 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
-
- /* 11 0x0b '^K' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1e, /* 00011110 */
- 0x0e, /* 00001110 */
- 0x1a, /* 00011010 */
- 0x32, /* 00110010 */
- 0x78, /* 01111000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 12 0x0c '^L' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 13 0x0d '^M' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3f, /* 00111111 */
- 0x33, /* 00110011 */
- 0x3f, /* 00111111 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x70, /* 01110000 */
- 0xf0, /* 11110000 */
- 0xe0, /* 11100000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 14 0x0e '^N' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7f, /* 01111111 */
- 0x63, /* 01100011 */
- 0x7f, /* 01111111 */
- 0x63, /* 01100011 */
- 0x63, /* 01100011 */
- 0x63, /* 01100011 */
- 0x63, /* 01100011 */
- 0x67, /* 01100111 */
- 0xe7, /* 11100111 */
- 0xe6, /* 11100110 */
- 0xc0, /* 11000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 15 0x0f '^O' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xdb, /* 11011011 */
- 0x3c, /* 00111100 */
- 0xe7, /* 11100111 */
- 0x3c, /* 00111100 */
- 0xdb, /* 11011011 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 16 0x10 '^P' */
- 0x00, /* 00000000 */
- 0x80, /* 10000000 */
- 0xc0, /* 11000000 */
- 0xe0, /* 11100000 */
- 0xf0, /* 11110000 */
- 0xf8, /* 11111000 */
- 0xfe, /* 11111110 */
- 0xf8, /* 11111000 */
- 0xf0, /* 11110000 */
- 0xe0, /* 11100000 */
- 0xc0, /* 11000000 */
- 0x80, /* 10000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 17 0x11 '^Q' */
- 0x00, /* 00000000 */
- 0x02, /* 00000010 */
- 0x06, /* 00000110 */
- 0x0e, /* 00001110 */
- 0x1e, /* 00011110 */
- 0x3e, /* 00111110 */
- 0xfe, /* 11111110 */
- 0x3e, /* 00111110 */
- 0x1e, /* 00011110 */
- 0x0e, /* 00001110 */
- 0x06, /* 00000110 */
- 0x02, /* 00000010 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 18 0x12 '^R' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 19 0x13 '^S' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 20 0x14 '^T' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7f, /* 01111111 */
- 0xdb, /* 11011011 */
- 0xdb, /* 11011011 */
- 0xdb, /* 11011011 */
- 0x7b, /* 01111011 */
- 0x1b, /* 00011011 */
- 0x1b, /* 00011011 */
- 0x1b, /* 00011011 */
- 0x1b, /* 00011011 */
- 0x1b, /* 00011011 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 21 0x15 '^U' */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0x60, /* 01100000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x0c, /* 00001100 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 22 0x16 '^V' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 23 0x17 '^W' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 24 0x18 '^X' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 25 0x19 '^Y' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 26 0x1a '^Z' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0xfe, /* 11111110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 27 0x1b '^[' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xfe, /* 11111110 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 28 0x1c '^\' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 29 0x1d '^]' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x28, /* 00101000 */
- 0x6c, /* 01101100 */
- 0xfe, /* 11111110 */
- 0x6c, /* 01101100 */
- 0x28, /* 00101000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 30 0x1e '^^' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x38, /* 00111000 */
- 0x7c, /* 01111100 */
- 0x7c, /* 01111100 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 31 0x1f '^_' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0x7c, /* 01111100 */
- 0x7c, /* 01111100 */
- 0x38, /* 00111000 */
- 0x38, /* 00111000 */
- 0x10, /* 00010000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 32 0x20 ' ' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 33 0x21 '!' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 34 0x22 '"' */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x24, /* 00100100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 35 0x23 '#' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0xfe, /* 11111110 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0xfe, /* 11111110 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 36 0x24 '$' */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc2, /* 11000010 */
- 0xc0, /* 11000000 */
- 0x7c, /* 01111100 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x86, /* 10000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 37 0x25 '%' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc2, /* 11000010 */
- 0xc6, /* 11000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc6, /* 11000110 */
- 0x86, /* 10000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 38 0x26 '&' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 39 0x27 ''' */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 40 0x28 '(' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 41 0x29 ')' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 42 0x2a '*' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0xff, /* 11111111 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 43 0x2b '+' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 44 0x2c ',' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 45 0x2d '-' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 46 0x2e '.' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 47 0x2f '/' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x02, /* 00000010 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0x80, /* 10000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 48 0x30 '0' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 49 0x31 '1' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x38, /* 00111000 */
- 0x78, /* 01111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 50 0x32 '2' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 51 0x33 '3' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x3c, /* 00111100 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 52 0x34 '4' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x0c, /* 00001100 */
- 0x1c, /* 00011100 */
- 0x3c, /* 00111100 */
- 0x6c, /* 01101100 */
- 0xcc, /* 11001100 */
- 0xfe, /* 11111110 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x1e, /* 00011110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 53 0x35 '5' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xfc, /* 11111100 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 54 0x36 '6' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xfc, /* 11111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 55 0x37 '7' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 56 0x38 '8' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 57 0x39 '9' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7e, /* 01111110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 58 0x3a ':' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 59 0x3b ';' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 60 0x3c '<' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x06, /* 00000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 61 0x3d '=' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 62 0x3e '>' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 63 0x3f '?' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 64 0x40 '@' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xde, /* 11011110 */
- 0xde, /* 11011110 */
- 0xde, /* 11011110 */
- 0xdc, /* 11011100 */
- 0xc0, /* 11000000 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 65 0x41 'A' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 66 0x42 'B' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfc, /* 11111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0xfc, /* 11111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 67 0x43 'C' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0xc2, /* 11000010 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc2, /* 11000010 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 68 0x44 'D' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xf8, /* 11111000 */
- 0x6c, /* 01101100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x6c, /* 01101100 */
- 0xf8, /* 11111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 69 0x45 'E' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x66, /* 01100110 */
- 0x62, /* 01100010 */
- 0x68, /* 01101000 */
- 0x78, /* 01111000 */
- 0x68, /* 01101000 */
- 0x60, /* 01100000 */
- 0x62, /* 01100010 */
- 0x66, /* 01100110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 70 0x46 'F' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x66, /* 01100110 */
- 0x62, /* 01100010 */
- 0x68, /* 01101000 */
- 0x78, /* 01111000 */
- 0x68, /* 01101000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xf0, /* 11110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 71 0x47 'G' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0xc2, /* 11000010 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xde, /* 11011110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x66, /* 01100110 */
- 0x3a, /* 00111010 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 72 0x48 'H' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 73 0x49 'I' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 74 0x4a 'J' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1e, /* 00011110 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 75 0x4b 'K' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xe6, /* 11100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x6c, /* 01101100 */
- 0x78, /* 01111000 */
- 0x78, /* 01111000 */
- 0x6c, /* 01101100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0xe6, /* 11100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 76 0x4c 'L' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xf0, /* 11110000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x62, /* 01100010 */
- 0x66, /* 01100110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 77 0x4d 'M' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xee, /* 11101110 */
- 0xfe, /* 11111110 */
- 0xfe, /* 11111110 */
- 0xd6, /* 11010110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 78 0x4e 'N' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xe6, /* 11100110 */
- 0xf6, /* 11110110 */
- 0xfe, /* 11111110 */
- 0xde, /* 11011110 */
- 0xce, /* 11001110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 79 0x4f 'O' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 80 0x50 'P' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfc, /* 11111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xf0, /* 11110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 81 0x51 'Q' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xd6, /* 11010110 */
- 0xde, /* 11011110 */
- 0x7c, /* 01111100 */
- 0x0c, /* 00001100 */
- 0x0e, /* 00001110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 82 0x52 'R' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfc, /* 11111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x6c, /* 01101100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0xe6, /* 11100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 83 0x53 'S' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x60, /* 01100000 */
- 0x38, /* 00111000 */
- 0x0c, /* 00001100 */
- 0x06, /* 00000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 84 0x54 'T' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x5a, /* 01011010 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 85 0x55 'U' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 86 0x56 'V' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x10, /* 00010000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 87 0x57 'W' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xfe, /* 11111110 */
- 0xee, /* 11101110 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 88 0x58 'X' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x7c, /* 01111100 */
- 0x38, /* 00111000 */
- 0x38, /* 00111000 */
- 0x7c, /* 01111100 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 89 0x59 'Y' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 90 0x5a 'Z' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0x86, /* 10000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc2, /* 11000010 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 91 0x5b '[' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 92 0x5c '\' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x80, /* 10000000 */
- 0xc0, /* 11000000 */
- 0xe0, /* 11100000 */
- 0x70, /* 01110000 */
- 0x38, /* 00111000 */
- 0x1c, /* 00011100 */
- 0x0e, /* 00001110 */
- 0x06, /* 00000110 */
- 0x02, /* 00000010 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 93 0x5d ']' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 94 0x5e '^' */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 95 0x5f '_' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 96 0x60 '`' */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 97 0x61 'a' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 98 0x62 'b' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xe0, /* 11100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x78, /* 01111000 */
- 0x6c, /* 01101100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 99 0x63 'c' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 100 0x64 'd' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1c, /* 00011100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x3c, /* 00111100 */
- 0x6c, /* 01101100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 101 0x65 'e' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 102 0x66 'f' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1c, /* 00011100 */
- 0x36, /* 00110110 */
- 0x32, /* 00110010 */
- 0x30, /* 00110000 */
- 0x78, /* 01111000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 103 0x67 'g' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x7c, /* 01111100 */
- 0x0c, /* 00001100 */
- 0xcc, /* 11001100 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
-
- /* 104 0x68 'h' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xe0, /* 11100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x6c, /* 01101100 */
- 0x76, /* 01110110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0xe6, /* 11100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 105 0x69 'i' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 106 0x6a 'j' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x00, /* 00000000 */
- 0x0e, /* 00001110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
-
- /* 107 0x6b 'k' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xe0, /* 11100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x66, /* 01100110 */
- 0x6c, /* 01101100 */
- 0x78, /* 01111000 */
- 0x78, /* 01111000 */
- 0x6c, /* 01101100 */
- 0x66, /* 01100110 */
- 0xe6, /* 11100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 108 0x6c 'l' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 109 0x6d 'm' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xec, /* 11101100 */
- 0xfe, /* 11111110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 110 0x6e 'n' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xdc, /* 11011100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 111 0x6f 'o' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 112 0x70 'p' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xdc, /* 11011100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xf0, /* 11110000 */
- 0x00, /* 00000000 */
-
- /* 113 0x71 'q' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x7c, /* 01111100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x1e, /* 00011110 */
- 0x00, /* 00000000 */
-
- /* 114 0x72 'r' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xdc, /* 11011100 */
- 0x76, /* 01110110 */
- 0x66, /* 01100110 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xf0, /* 11110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 115 0x73 's' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0x60, /* 01100000 */
- 0x38, /* 00111000 */
- 0x0c, /* 00001100 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 116 0x74 't' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0xfc, /* 11111100 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x36, /* 00110110 */
- 0x1c, /* 00011100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 117 0x75 'u' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 118 0x76 'v' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 119 0x77 'w' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xd6, /* 11010110 */
- 0xfe, /* 11111110 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 120 0x78 'x' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x38, /* 00111000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 121 0x79 'y' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7e, /* 01111110 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0xf8, /* 11111000 */
- 0x00, /* 00000000 */
-
- /* 122 0x7a 'z' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xcc, /* 11001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 123 0x7b '{' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x0e, /* 00001110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x70, /* 01110000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x0e, /* 00001110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 124 0x7c '|' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 125 0x7d '}' */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x70, /* 01110000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x0e, /* 00001110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 126 0x7e '~' */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 127 0x7f */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 128 0x80 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0xc2, /* 11000010 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc2, /* 11000010 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 129 0x81 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 130 0x82 */
- 0x00, /* 00000000 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 131 0x83 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 132 0x84 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 133 0x85 */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 134 0x86 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 135 0x87 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x18, /* 00011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 136 0x88 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 137 0x89 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 138 0x8a */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 139 0x8b */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 140 0x8c */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 141 0x8d */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 142 0x8e */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 143 0x8f */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 144 0x90 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x66, /* 01100110 */
- 0x62, /* 01100010 */
- 0x68, /* 01101000 */
- 0x78, /* 01111000 */
- 0x68, /* 01101000 */
- 0x62, /* 01100010 */
- 0x66, /* 01100110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 145 0x91 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xec, /* 11101100 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x7e, /* 01111110 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0x6e, /* 01101110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 146 0x92 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3e, /* 00111110 */
- 0x6c, /* 01101100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xfe, /* 11111110 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xce, /* 11001110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 147 0x93 */
- 0x00, /* 00000000 */
- 0x10, /* 00010000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 148 0x94 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 149 0x95 */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 150 0x96 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x78, /* 01111000 */
- 0xcc, /* 11001100 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 151 0x97 */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 152 0x98 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7e, /* 01111110 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x78, /* 01111000 */
- 0x00, /* 00000000 */
-
- /* 153 0x99 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 154 0x9a */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 155 0x9b */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 156 0x9c */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x64, /* 01100100 */
- 0x60, /* 01100000 */
- 0xf0, /* 11110000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xe6, /* 11100110 */
- 0xfc, /* 11111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 157 0x9d */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 158 0x9e */
- 0x00, /* 00000000 */
- 0xf8, /* 11111000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xf8, /* 11111000 */
- 0xc4, /* 11000100 */
- 0xcc, /* 11001100 */
- 0xde, /* 11011110 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 159 0x9f */
- 0x00, /* 00000000 */
- 0x0e, /* 00001110 */
- 0x1b, /* 00011011 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xd8, /* 11011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 160 0xa0 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0x0c, /* 00001100 */
- 0x7c, /* 01111100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 161 0xa1 */
- 0x00, /* 00000000 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 162 0xa2 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 163 0xa3 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x00, /* 00000000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 164 0xa4 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x00, /* 00000000 */
- 0xdc, /* 11011100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 165 0xa5 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x00, /* 00000000 */
- 0xc6, /* 11000110 */
- 0xe6, /* 11100110 */
- 0xf6, /* 11110110 */
- 0xfe, /* 11111110 */
- 0xde, /* 11011110 */
- 0xce, /* 11001110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 166 0xa6 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x3e, /* 00111110 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 167 0xa7 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 168 0xa8 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x7c, /* 01111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 169 0xa9 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 170 0xaa */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 171 0xab */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0xe0, /* 11100000 */
- 0x62, /* 01100010 */
- 0x66, /* 01100110 */
- 0x6c, /* 01101100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xdc, /* 11011100 */
- 0x86, /* 10000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x3e, /* 00111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 172 0xac */
- 0x00, /* 00000000 */
- 0x60, /* 01100000 */
- 0xe0, /* 11100000 */
- 0x62, /* 01100010 */
- 0x66, /* 01100110 */
- 0x6c, /* 01101100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x66, /* 01100110 */
- 0xce, /* 11001110 */
- 0x9a, /* 10011010 */
- 0x3f, /* 00111111 */
- 0x06, /* 00000110 */
- 0x06, /* 00000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 173 0xad */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 174 0xae */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x36, /* 00110110 */
- 0x6c, /* 01101100 */
- 0xd8, /* 11011000 */
- 0x6c, /* 01101100 */
- 0x36, /* 00110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 175 0xaf */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xd8, /* 11011000 */
- 0x6c, /* 01101100 */
- 0x36, /* 00110110 */
- 0x6c, /* 01101100 */
- 0xd8, /* 11011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 176 0xb0 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
- 0x11, /* 00010001 */
- 0x44, /* 01000100 */
-
- /* 177 0xb1 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
- 0x55, /* 01010101 */
- 0xaa, /* 10101010 */
-
- /* 178 0xb2 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
- 0xdd, /* 11011101 */
- 0x77, /* 01110111 */
-
- /* 179 0xb3 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 180 0xb4 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 181 0xb5 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 182 0xb6 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xf6, /* 11110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 183 0xb7 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 184 0xb8 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 185 0xb9 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xf6, /* 11110110 */
- 0x06, /* 00000110 */
- 0xf6, /* 11110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 186 0xba */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 187 0xbb */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x06, /* 00000110 */
- 0xf6, /* 11110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 188 0xbc */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xf6, /* 11110110 */
- 0x06, /* 00000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 189 0xbd */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 190 0xbe */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 191 0xbf */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xf8, /* 11111000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 192 0xc0 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 193 0xc1 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 194 0xc2 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 195 0xc3 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 196 0xc4 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 197 0xc5 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xff, /* 11111111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 198 0xc6 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 199 0xc7 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x37, /* 00110111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 200 0xc8 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x37, /* 00110111 */
- 0x30, /* 00110000 */
- 0x3f, /* 00111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 201 0xc9 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3f, /* 00111111 */
- 0x30, /* 00110000 */
- 0x37, /* 00110111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 202 0xca */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xf7, /* 11110111 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 203 0xcb */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0xf7, /* 11110111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 204 0xcc */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x37, /* 00110111 */
- 0x30, /* 00110000 */
- 0x37, /* 00110111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 205 0xcd */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 206 0xce */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xf7, /* 11110111 */
- 0x00, /* 00000000 */
- 0xf7, /* 11110111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 207 0xcf */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 208 0xd0 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 209 0xd1 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 210 0xd2 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 211 0xd3 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x3f, /* 00111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 212 0xd4 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 213 0xd5 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 214 0xd6 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x3f, /* 00111111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 215 0xd7 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0xff, /* 11111111 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
-
- /* 216 0xd8 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xff, /* 11111111 */
- 0x18, /* 00011000 */
- 0xff, /* 11111111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 217 0xd9 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xf8, /* 11111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 218 0xda */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1f, /* 00011111 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 219 0xdb */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
-
- /* 220 0xdc */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
-
- /* 221 0xdd */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
- 0xf0, /* 11110000 */
-
- /* 222 0xde */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
- 0x0f, /* 00001111 */
-
- /* 223 0xdf */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0xff, /* 11111111 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 224 0xe0 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xdc, /* 11011100 */
- 0x76, /* 01110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 225 0xe1 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x78, /* 01111000 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xcc, /* 11001100 */
- 0xd8, /* 11011000 */
- 0xcc, /* 11001100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xcc, /* 11001100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 226 0xe2 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0xc0, /* 11000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 227 0xe3 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 228 0xe4 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 229 0xe5 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 230 0xe6 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x7c, /* 01111100 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0x00, /* 00000000 */
-
- /* 231 0xe7 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 232 0xe8 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 233 0xe9 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xfe, /* 11111110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 234 0xea */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0xee, /* 11101110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 235 0xeb */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1e, /* 00011110 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x3e, /* 00111110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x66, /* 01100110 */
- 0x3c, /* 00111100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 236 0xec */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0xdb, /* 11011011 */
- 0xdb, /* 11011011 */
- 0xdb, /* 11011011 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 237 0xed */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x03, /* 00000011 */
- 0x06, /* 00000110 */
- 0x7e, /* 01111110 */
- 0xdb, /* 11011011 */
- 0xdb, /* 11011011 */
- 0xf3, /* 11110011 */
- 0x7e, /* 01111110 */
- 0x60, /* 01100000 */
- 0xc0, /* 11000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 238 0xee */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x1c, /* 00011100 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x7c, /* 01111100 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x1c, /* 00011100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 239 0xef */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7c, /* 01111100 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0xc6, /* 11000110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 240 0xf0 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0xfe, /* 11111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 241 0xf1 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x7e, /* 01111110 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 242 0xf2 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x06, /* 00000110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 243 0xf3 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x30, /* 00110000 */
- 0x60, /* 01100000 */
- 0x30, /* 00110000 */
- 0x18, /* 00011000 */
- 0x0c, /* 00001100 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 244 0xf4 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x0e, /* 00001110 */
- 0x1b, /* 00011011 */
- 0x1b, /* 00011011 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
-
- /* 245 0xf5 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0xd8, /* 11011000 */
- 0x70, /* 01110000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 246 0xf6 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 247 0xf7 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x00, /* 00000000 */
- 0x76, /* 01110110 */
- 0xdc, /* 11011100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 248 0xf8 */
- 0x00, /* 00000000 */
- 0x38, /* 00111000 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x38, /* 00111000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 249 0xf9 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 250 0xfa */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x18, /* 00011000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 251 0xfb */
- 0x00, /* 00000000 */
- 0x0f, /* 00001111 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0x0c, /* 00001100 */
- 0xec, /* 11101100 */
- 0x6c, /* 01101100 */
- 0x6c, /* 01101100 */
- 0x3c, /* 00111100 */
- 0x1c, /* 00011100 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 252 0xfc */
- 0x00, /* 00000000 */
- 0x6c, /* 01101100 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x36, /* 00110110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 253 0xfd */
- 0x00, /* 00000000 */
- 0x3c, /* 00111100 */
- 0x66, /* 01100110 */
- 0x0c, /* 00001100 */
- 0x18, /* 00011000 */
- 0x32, /* 00110010 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 254 0xfe */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x7e, /* 01111110 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
- /* 255 0xff */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
- 0x00, /* 00000000 */
-
-};
-
-#endif
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/outch.c b/c/src/lib/libbsp/arm/raspberrypi/console/outch.c
deleted file mode 100644
index 20601384c7..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/outch.c
+++ /dev/null
@@ -1,463 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi
- *
- * @brief displaying characters on the console
- */
-
-/**
- *
- * Copyright (c) 2015 Yang Qiao
- * based on work by:
- * Copyright (C) 1998 Eric Valette (valette@crf.canon.fr)
- * Canon Centre Recherche France.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- *
- * Till Straumann <strauman@slac.stanford.edu>, 2003/9:
- * - added handling of basic escape sequences (cursor movement
- * and erasing; just enough for the line editor 'libtecla' to
- * work...)
- *
- */
-
-#include <bsp.h>
-#include <bsp/vc.h>
-#include <bsp/rpi-fb.h>
-#include <rtems/fb.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include "font_data.h"
-
-static void wr_cursor(
- int r,
- int c
-)
-{
- /* dummy function for now */
-}
-
-#define TAB_SPACE 4
-#define CONSOLE_BG_COL 0x00
-#define CONSOLE_FG_COL 0xa0
-
-static void *fb_mem = NULL;
-static unsigned short maxCol;
-static unsigned short maxRow;
-static unsigned short bytes_per_pixel;
-static unsigned int bytes_per_line;
-static unsigned int bytes_per_char_line;
-static unsigned char row;
-static unsigned char column;
-static unsigned int nLines;
-static uint32_t fgx, bgx, eorx;
-static int rpi_video_initialized;
-
-static const int video_font_draw_table32[ 16 ][ 4 ] = {
- { 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
- { 0x00000000, 0x00000000, 0x00000000, 0x00ffffff },
- { 0x00000000, 0x00000000, 0x00ffffff, 0x00000000 },
- { 0x00000000, 0x00000000, 0x00ffffff, 0x00ffffff },
- { 0x00000000, 0x00ffffff, 0x00000000, 0x00000000 },
- { 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff },
- { 0x00000000, 0x00ffffff, 0x00ffffff, 0x00000000 },
- { 0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff },
- { 0x00ffffff, 0x00000000, 0x00000000, 0x00000000 },
- { 0x00ffffff, 0x00000000, 0x00000000, 0x00ffffff },
- { 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000 },
- { 0x00ffffff, 0x00000000, 0x00ffffff, 0x00ffffff },
- { 0x00ffffff, 0x00ffffff, 0x00000000, 0x00000000 },
- { 0x00ffffff, 0x00ffffff, 0x00000000, 0x00ffffff },
- { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000 },
- { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff }
-};
-
-static void scroll( void )
-{
- int i, j; /* Counters */
- uint8_t *pt_scroll, *pt_bitmap; /* Pointers on the bit-map */
-
- pt_bitmap = fb_mem;
- j = 0;
- pt_bitmap = pt_bitmap + j;
- pt_scroll = pt_bitmap + bytes_per_char_line;
-
- for ( i = j; i < maxRow - 1; i++ ) {
- memcpy( pt_bitmap, pt_scroll, bytes_per_char_line );
- pt_bitmap = pt_bitmap + bytes_per_char_line;
- pt_scroll = pt_bitmap + bytes_per_char_line;
- }
-
- /*
- * Blank characters are displayed on the last line.
- */
- memset( pt_bitmap, 0, bytes_per_char_line );
-}
-
-static void doCRNL(
- int cr,
- int nl
-)
-{
- if ( nl ) {
- if ( ++row == maxRow ) {
- scroll(); /* Scroll the screen now */
- row = maxRow - 1;
- }
-
- nLines++;
- }
-
- if ( cr )
- column = 0;
-
- /* Move cursor on the next location */
- if ( cr || nl ) {
- wr_cursor( row, column );
- }
-}
-
-static void advanceCursor( void )
-{
- if ( ++column == maxCol )
- doCRNL( 1, 1 );
- else
- wr_cursor( row, column );
-}
-
-static void gotorc(
- int r,
- int c
-)
-{
- column = c;
- row = r;
- wr_cursor( row, column );
-}
-
-static void video_drawchars(
- int r,
- int c,
- unsigned char ch
-)
-{
- if ( fb_mem == NULL ) {
- return;
- }
-
- uint8_t *cdat, *dest, *dest0;
- int rows, offset;
-
- offset = r * bytes_per_char_line + c * bytes_per_pixel * RPI_FONT_WIDTH;
- dest0 = fb_mem + offset;
-
- /*
- * only 32-bit per pixel format is supported for now
- */
- cdat = rpi_font + ch * RPI_FONT_HEIGHT;
-
- for ( rows = RPI_FONT_HEIGHT, dest = dest0;
- rows--; dest += bytes_per_line ) {
- uint8_t bits = *cdat++;
-
- ( (uint32_t *) dest )[ 0 ] =
- ( video_font_draw_table32
- [ bits >> 4 ][ 0 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 1 ] =
- ( video_font_draw_table32
- [ bits >> 4 ][ 1 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 2 ] =
- ( video_font_draw_table32
- [ bits >> 4 ][ 2 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 3 ] =
- ( video_font_draw_table32
- [ bits >> 4 ][ 3 ] & eorx ) ^ bgx;
-
- ( (uint32_t *) dest )[ 4 ] =
- ( video_font_draw_table32
- [ bits & 15 ][ 0 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 5 ] =
- ( video_font_draw_table32
- [ bits & 15 ][ 1 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 6 ] =
- ( video_font_draw_table32
- [ bits & 15 ][ 2 ] & eorx ) ^ bgx;
- ( (uint32_t *) dest )[ 7 ] =
- ( video_font_draw_table32
- [ bits & 15 ][ 3 ] & eorx ) ^ bgx;
- }
-}
-
-#define ESC ( (char) 27 )
-/* erase current location without moving the cursor */
-#define BLANK ( (char) 0x7f )
-
-static void videoPutChar( char ch )
-{
- switch ( ch ) {
- case '\b': {
- if ( column )
- column--;
-
- /* Move cursor on the previous location */
- wr_cursor( row, column );
- return;
- }
- case '\t': {
- int i;
-
- i = TAB_SPACE - ( column & ( TAB_SPACE - 1 ) );
-
- while ( i-- ) {
-
- video_drawchars( row, column, ' ' );
- column += 1;
-
- if ( column >= maxCol ) {
- doCRNL( 1, 1 );
- return;
- }
- }
-
- wr_cursor( row, column );
-
- return;
- }
- case '\n': {
- doCRNL( 0, 1 );
- return;
- }
- case 7: { /* Bell code must be inserted here */
- return;
- }
- case '\r': {
- doCRNL( 1, 0 );
- return;
- }
- case BLANK: {
- video_drawchars( row, column, ' ' );
-
- wr_cursor( row, column );
-
- return;
- }
- default: {
- // *pt_bitmap = (unsigned char)ch | attribute;
- video_drawchars( row, column, ch );
- advanceCursor();
- return;
- }
- }
-}
-
-/* trivial state machine to handle escape sequences:
- *
- * ---------------------------------
- * | |
- * | |
- * KEY: esc V [ DCABHKJ esc |
- * STATE: 0 -----> 27 -----> '[' ----------> -1 -----
- * ^\ \ \ \
- * KEY: | \other \ other \ other \ other
- * <-------------------------------------
- *
- * in state '-1', the DCABHKJ cases are handled
- *
- * (cursor motion and screen clearing)
- */
-
-#define DONE ( -1 )
-
-static int handleEscape(
- int oldState,
- char ch
-)
-{
- int rval = 0;
- int ro, co;
-
- switch ( oldState ) {
- case DONE: /* means the previous char terminated an ESC sequence... */
- case 0:
-
- if ( 27 == ch ) {
- rval = 27; /* START of an ESC sequence */
- }
-
- break;
-
- case 27:
-
- if ( '[' == ch ) {
- rval = ch; /* received ESC '[', so far */
- } else {
- /* dump suppressed 'ESC'; outch will append the char */
- videoPutChar( ESC );
- }
-
- break;
-
- case '[':
- /* handle 'ESC' '[' sequences here */
- ro = row;
- co = column;
- rval = DONE; /* done */
-
- switch ( ch ) {
- case 'D': /* left */
-
- if ( co > 0 )
- co--;
-
- break;
- case 'C': /* right */
-
- if ( co < maxCol )
- co++;
-
- break;
- case 'A': /* up */
-
- if ( ro > 0 )
- ro--;
-
- break;
- case 'B': /* down */
-
- if ( ro < maxRow )
- ro++;
-
- break;
- case 'H': /* home */
- ro = co = 0;
- break;
- case 'K': /* clear to end of line */
-
- while ( column < maxCol - 1 )
- videoPutChar( ' ' );
-
- videoPutChar( BLANK );
- break;
- case 'J': /* clear to end of screen */
-
- while ( ( ( row < maxRow - 1 ) || ( column < maxCol - 1 ) ) )
- videoPutChar( ' ' );
-
- videoPutChar( BLANK );
- break;
- default:
- videoPutChar( ESC );
- videoPutChar( '[' );
- /* DONT move the cursor */
- ro = -1;
- rval = 0;
- break;
- }
-
- // /* reset cursor */
- if ( ro >= 0 )
- gotorc( ro, co );
-
- default:
- break;
- }
-
- return rval;
-}
-
-static void clear_screen( void )
-{
- int i, j;
-
- for ( j = 0; j < maxRow; j++ ) {
- for ( i = 0; i < maxCol; i++ ) {
- videoPutChar( ' ' );
- }
- }
-
- column = 0;
- row = 0;
-}
-
-void rpi_fb_outch( char c )
-{
- static int escaped = 0;
-
- if ( !( escaped = handleEscape( escaped, c ) ) ) {
- if ( '\n' == c )
- videoPutChar( '\r' );
-
- videoPutChar( c );
- }
-}
-
-void rpi_video_init( void )
-{
- int ret = rpi_fb_init();
-
- if ( ( ret != RPI_FB_INIT_OK ) &&
- ( ret != RPI_FB_INIT_ALREADY_INITIALIZED ) ) {
- rpi_video_initialized = 0;
- return;
- }
-
- struct fb_var_screeninfo fb_var_info;
- struct fb_fix_screeninfo fb_fix_info;
- rpi_get_var_screen_info( &fb_var_info );
- rpi_get_fix_screen_info( &fb_fix_info );
- maxCol = fb_var_info.xres / RPI_FONT_WIDTH;
- maxRow = fb_var_info.yres / RPI_FONT_HEIGHT;
- bytes_per_pixel = fb_var_info.bits_per_pixel / 8;
- bytes_per_line = bytes_per_pixel * fb_var_info.xres;
- bytes_per_char_line = RPI_FONT_HEIGHT * bytes_per_line;
- fb_mem = RTEMS_DEVOLATILE( void *, fb_fix_info.smem_start );
- column = 0;
- row = 0;
- nLines = 0;
- fgx = ( CONSOLE_FG_COL << 24 ) |
- ( CONSOLE_FG_COL << 16 ) |
- ( CONSOLE_FG_COL << 8 ) |
- CONSOLE_FG_COL;
- bgx = ( CONSOLE_BG_COL << 24 ) |
- ( CONSOLE_BG_COL << 16 ) |
- ( CONSOLE_BG_COL << 8 ) |
- CONSOLE_BG_COL;
- eorx = fgx ^ bgx;
- clear_screen();
- rpi_video_initialized = 1;
-}
-
-int rpi_video_is_initialized( void )
-{
- return rpi_video_initialized;
-}
-
-/* for old DOS compatibility n-curses type of applications */
-void gotoxy(
- int x,
- int y
-);
-int whereX( void );
-int whereY( void );
-
-void gotoxy(
- int x,
- int y
-)
-{
- gotorc( y, x );
-}
-
-int whereX( void )
-{
- return row;
-}
-
-int whereY( void )
-{
- return column;
-}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/console/usart.c b/c/src/lib/libbsp/arm/raspberrypi/console/usart.c
deleted file mode 100644
index 25fb523621..0000000000
--- a/c/src/lib/libbsp/arm/raspberrypi/console/usart.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * @file
- *
- * @ingroup raspberrypi_usart
- *
- * @brief USART support.
- */
-
-/*
- * Copyright (c) 2013 Alan Cudmore
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- *
- * http://www.rtems.org/license/LICENSE
- *
- */
-
-#include <libchip/sersupp.h>
-
-#include <bsp.h>
-#include <bsp/irq.h>
-#include <bsp/usart.h>
-#include <bsp/raspberrypi.h>
-#include <rtems/bspIo.h>
-
-static void usart_delay(uint32_t n)
-{
- volatile uint32_t i = 0;
-
- for(i = 0; i < n; i++)
- ;
-}
-
-#if 0
-/*
- * These will be useful when the driver supports interrupt driven IO.
- */
-static rtems_vector_number usart_get_irq_number(const console_tbl *ct)
-{
- return ct->ulIntVector;
-}
-
-static uint32_t usart_get_baud(const console_tbl *ct)
-{
- return ct->ulClock;
-}
-#endif
-
-static void usart_set_baud(int minor, int baud)
-{
- /*
- * Nothing for now
- */
- return;
-}
-
-static void usart_initialize(int minor)
-{
- unsigned int gpio_reg;
-
- /*
- ** Program GPIO pins for UART 0
- */
- gpio_reg = BCM2835_REG(BCM2835_GPIO_GPFSEL1);
- gpio_reg &= ~(7<<12); /* gpio14 */
- gpio_reg |= (4<<12); /* alt0 */
- gpio_reg &= ~(7<<15); /* gpio15 */
- gpio_reg |= (4<<15); /* alt0 */
- BCM2835_REG(BCM2835_GPIO_GPFSEL1) = gpio_reg;
-
- BCM2835_REG(BCM2835_GPIO_GPPUD) = 0;
- usart_delay(150);
- BCM2835_REG(BCM2835_GPIO_GPPUDCLK0) = (1<<14)|(1<<15);
- usart_delay(150);
- BCM2835_REG(BCM2835_GPIO_GPPUDCLK0) = 0;
-
- /*
- ** Init the PL011 UART
- */
- BCM2835_REG(BCM2835_UART0_CR) = 0;
- BCM2835_REG(BCM2835_UART0_ICR) = 0x7FF;
- BCM2835_REG(BCM2835_UART0_IMSC) = 0;
- BCM2835_REG(BCM2835_UART0_IBRD) = 1;
- BCM2835_REG(BCM2835_UART0_FBRD) = 40;
- BCM2835_REG(BCM2835_UART0_LCRH) = 0x70;
- BCM2835_REG(BCM2835_UART0_RSRECR) = 0;
-
- BCM2835_REG(BCM2835_UART0_CR) = 0x301;
-
- BCM2835_REG(BCM2835_UART0_IMSC) = BCM2835_UART0_IMSC_RX;
-
- usart_set_baud(minor, 115000);
-}
-
-static int usart_first_open(int major, int minor, void *arg)
-{
- rtems_libio_open_close_args_t *oc = (rtems_libio_open_close_args_t *) arg;
- struct rtems_termios_tty *tty = (struct rtems_termios_tty *) oc->iop->data1;
- const console_tbl *ct = Console_Port_Tbl [minor];
- console_data *cd = &Console_Port_Data [minor];
-
- cd->termios_data = tty;
- rtems_termios_set_initial_baud(tty, ct->ulClock);
-
- return 0;
-}
-
-static int usart_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-static int usart_read_polled(int minor)
-{
- if (minor == 0) {
- if (((BCM2835_REG(BCM2835_UART0_FR)) & BCM2835_UART0_FR_RXFE) == 0) {
- return((BCM2835_REG(BCM2835_UART0_DR)) & 0xFF );
- } else {
- return -1;
- }
- } else {
- printk("Unknown console minor number: %d\n", minor);
- return -1;
- }
-}
-
-static void usart_write_polled(int minor, char c)
-{
- while (1) {
- if ((BCM2835_REG(BCM2835_UART0_FR) & BCM2835_UART0_FR_TXFF) == 0)
- break;
- }
- BCM2835_REG(BCM2835_UART0_DR) = c;
-}
-
-static ssize_t usart_write_support_polled(
- int minor,
- const char *s,
- size_t n
-)
-{
- ssize_t i = 0;
-
- for (i = 0; i < n; ++i) {
- usart_write_polled(minor, s [i]);
- }
-
- return n;
-}
-
-static int usart_set_attributes(int minor, const struct termios *term)
-{
- return -1;
-}
-
-const console_fns bcm2835_usart_fns = {
- .deviceProbe = libchip_serial_default_probe,
- .deviceFirstOpen = usart_first_open,
- .deviceLastClose = usart_last_close,
- .deviceRead = usart_read_polled,
- .deviceWrite = usart_write_support_polled,
- .deviceInitialize = usart_initialize,
- .deviceWritePolled = usart_write_polled,
- .deviceSetAttributes = usart_set_attributes,
- .deviceOutputUsesInterrupts = false
-};
diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am
index 7f235343e5..bc1e0437cb 100644
--- a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am
+++ b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am
@@ -61,12 +61,12 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += ../shared/arm-gic-irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios-init.c
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += ../../shared/get-serial-mouse-ps2.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/getserialmouseps2.c
librtemsbsp_a_SOURCES += ../shared/arm-pl011.c
librtemsbsp_a_SOURCES += ../shared/arm-pl050.c
-librtemsbsp_a_SOURCES += console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/realview-pbx-a9/console/console-config.c
# Clock
librtemsbsp_a_SOURCES += ../shared/arm-a9mpcore-clock-config.c
diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/console/console-config.c b/c/src/lib/libbsp/arm/realview-pbx-a9/console/console-config.c
deleted file mode 100644
index 66dcfa6803..0000000000
--- a/c/src/lib/libbsp/arm/realview-pbx-a9/console/console-config.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <info@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/serial_mouse.h>
-#include <rtems/bspIo.h>
-
-#include <bsp.h>
-#include <bsp/irq.h>
-#include <bsp/arm-pl011.h>
-#include <bsp/arm-pl050.h>
-#include <bsp/console-termios.h>
-
-static arm_pl011_context pl011_context = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("PL011"),
- .regs = (volatile pl011 *) 0x10009000,
- .irq = RVPBXA9_IRQ_UART_0,
- .initial_baud = 115200
-};
-
-static arm_pl050_context pl050_context = {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("PL050"),
- .regs = (volatile pl050 *) 0x10007000,
- .irq = RVPBXA9_IRQ_KMI1,
- .initial_baud = 115200
-};
-
-static void output_char(char c)
-{
- arm_pl011_write_polled(&pl011_context.base, c);
-}
-
-static bool pl011_probe(rtems_termios_device_context *base)
-{
- BSP_output_char = output_char;
-
- return arm_pl011_probe(base);
-}
-
-static void output_char_init(char c)
-{
- pl011_probe(&pl011_context.base);
- output_char(c);
-}
-
-BSP_output_char_function_type BSP_output_char = output_char_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
-
-const console_device console_device_table[] = {
- {
- .device_file = "/dev/ttyS0",
- .probe = pl011_probe,
- .handler = &arm_pl011_fns,
- .context = &pl011_context.base
- }, {
- .device_file = SERIAL_MOUSE_DEVICE_PS2,
- .probe = console_device_probe_default,
- .handler = &arm_pl050_fns,
- .context = &pl050_context.base
- }
-};
-
-const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table);
diff --git a/c/src/lib/libbsp/arm/rtl22xx/Makefile.am b/c/src/lib/libbsp/arm/rtl22xx/Makefile.am
index da8ef3aef1..e64bbeee9f 100644
--- a/c/src/lib/libbsp/arm/rtl22xx/Makefile.am
+++ b/c/src/lib/libbsp/arm/rtl22xx/Makefile.am
@@ -33,7 +33,7 @@ librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/rtl22xx/clock/clockdrv.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/rtl22xx/console/uart.c
# IRQ
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
diff --git a/c/src/lib/libbsp/arm/rtl22xx/console/lpc22xx_uart.h b/c/src/lib/libbsp/arm/rtl22xx/console/lpc22xx_uart.h
deleted file mode 100644
index f6ae249672..0000000000
--- a/c/src/lib/libbsp/arm/rtl22xx/console/lpc22xx_uart.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * @file
- * @ingroup rtl22xx_uart
- * @brief UART support.
- */
-
-#ifndef LPC22XX_UART_H
-#define LPC22XX_UART_H
-
-/**
- * @defgroup rtl22xx_uart UART Support
- * @ingroup arm_rtl22xx
- * @brief UART (Universal Asynchronous Reciever/Transmitter) Support
- * @{
- */
-
-#define FIFODEEP 16
-
-#define BD115200 115200
-#define BD38400 38400
-#define BD9600 9600
-
-/** @brief PINSEL0 Value for UART0 */
-#define U0_PINSEL (0x00000005)
-/** @brief PINSEL0 Mask for UART0 */
-#define U0_PINMASK (0x0000000F)
-/** @brief PINSEL0 Value for UART1 */
-#define U1_PINSEL (0x00050000)
-/** @brief PINSEL0 Mask for UART1 */
-#define U1_PINMASK (0x000F0000)
-
-/**
- * @name Uart line control register bit descriptions
- * @{
- */
-
-#define LCR_WORDLENTH_BIT 0
-#define LCR_STOPBITSEL_BIT 2
-#define LCR_PARITYENBALE_BIT 3
-#define LCR_PARITYSEL_BIT 4
-#define LCR_BREAKCONTROL_BIT 6
-#define LCR_DLAB_BIT 7
-
-/** @} */
-
-/**
- * @name Line Control Register bit definitions
- * @{
- */
-
-/** @brief 5-bit character length */
-#define ULCR_CHAR_5 (0 << 0)
-/** @brief 6-bit character length */
-#define ULCR_CHAR_6 (1 << 0)
-/** @brief 7-bit character length */
-#define ULCR_CHAR_7 (2 << 0)
-/** @brief 8-bit character length */
-#define ULCR_CHAR_8 (3 << 0)
-/** @brief no stop bits */
-#define ULCR_STOP_0 (0 << 2)
-/** @brief 1 stop bit */
-#define ULCR_STOP_1 (1 << 2)
-/** @brief No Parity */
-#define ULCR_PAR_NO (0 << 3)
-/** @brief Odd Parity */
-#define ULCR_PAR_ODD (1 << 3)
-/** @brief Even Parity */
-#define ULCR_PAR_EVEN (3 << 3)
-/** @brief MARK "1" Parity */
-#define ULCR_PAR_MARK (5 << 3)
-/** @brief SPACE "0" Paruty */
-#define ULCR_PAR_SPACE (7 << 3)
-/** @brief Output BREAK line condition */
-#define ULCR_BREAK_ENABLE (1 << 6)
-/** @brief Enable Divisor Latch Access */
-#define ULCR_DLAB_ENABLE (1 << 7)
-
-/** @} */
-
-/**
- * @name Modem Control Register bit definitions
- * @{
- */
-
-/** @brief Data Terminal Ready */
-#define UMCR_DTR (1 << 0)
-/** @brief Request To Send */
-#define UMCR_RTS (1 << 1)
-/** @brief Loopback */
-#define UMCR_LB (1 << 4)
-
-/** @} */
-
-/**
- * @name Line Status Register bit definitions
- * @{
- */
-
-/** @brief Receive Data Ready */
-#define ULSR_RDR (1 << 0)
-/** @brief Overrun Error */
-#define ULSR_OE (1 << 1)
-/** @brief Parity Error */
-#define ULSR_PE (1 << 2)
-/** @brief Framing Error */
-#define ULSR_FE (1 << 3)
-/** @brief Break Interrupt */
-#define ULSR_BI (1 << 4)
-/** @brief Transmit Holding Register Empty */
-#define ULSR_THRE (1 << 5)
-/** @brief Transmitter Empty */
-#define ULSR_TEMT (1 << 6)
-/** @brief Error in Receive FIFO */
-#define ULSR_RXFE (1 << 7)
-#define ULSR_ERR_MASK 0x1E
-
-/** @} */
-
-/**
- * @name Modem Status Register bit definitions
- * @{
- */
-
-/** @brief Delta Clear To Send */
-#define UMSR_DCTS (1 << 0)
-/** @brief Delta Data Set Ready */
-#define UMSR_DDSR (1 << 1)
-/** @brief Trailing Edge Ring Indicator */
-#define UMSR_TERI (1 << 2)
-/** @brief Delta Data Carrier Detect */
-#define UMSR_DDCD (1 << 3)
-/** @brief Clear To Send */
-#define UMSR_CTS (1 << 4)
-/** @brief Data Set Ready */
-#define UMSR_DSR (1 << 5)
-/** @brief Ring Indicator */
-#define UMSR_RI (1 << 6)
-/** @brief Data Carrier Detect */
-#define UMSR_DCD (1 << 7)
-
-/** @} */
-
-/**
- * @name Uart Interrupt Identification
- * @{
- */
-
-#define IIR_RSL 0x3
-#define IIR_RDA 0x2
-#define IIR_CTI 0x6
-#define IIR_THRE 0x1
-
-/** @} */
-
-/**
- * @name Uart Interrupt Enable Type
- * @{
- */
-
-#define IER_RBR 0x1
-#define IER_THRE 0x2
-#define IER_RLS 0x4
-
-/** @} */
-
-/**
- * @name Uart Receiver Errors
- * @{
- */
-
-#define RC_FIFO_OVERRUN_ERR 0x1
-#define RC_OVERRUN_ERR 0x2
-#define RC_PARITY_ERR 0x4
-#define RC_FRAMING_ERR 0x8
-#define RC_BREAK_IND 0x10
-
-/** @} */
-
-typedef enum {
- UART0 = 0,
- UART1
-} LPC_UartChanel_t;
-
-/** @} */
-
-#endif
-
diff --git a/c/src/lib/libbsp/arm/rtl22xx/console/uart.c b/c/src/lib/libbsp/arm/rtl22xx/console/uart.c
deleted file mode 100644
index 2952e74508..0000000000
--- a/c/src/lib/libbsp/arm/rtl22xx/console/uart.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * console driver for RTL22xx UARTs
- *
- * If you want the driver to be interrupt driven, you
- * need to write the ISR, and in the ISR insert the
- * chars into termios's queue.
- */
-
-/*
- * Copyright (c) By ray <rayx.cn@gmail.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp.h> /* Must be before libio.h */
-#include <rtems/libio.h>
-#include <termios.h>
-#include <rtems/bspIo.h>
-
-/* Put the CPU (or UART) specific header file #include here */
-#include <lpc22xx.h>
-#include "lpc22xx_uart.h"
-
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-/* How many serial ports? */
-#define NUM_DEVS 1
-
-int dbg_dly;
-
-/* static function prototypes */
-static int uart_first_open(int major, int minor, void *arg);
-static int uart_last_close(int major, int minor, void *arg);
-static int uart_read(int minor);
-static ssize_t uart_write(int minor, const char *buf, size_t len);
-static void uart_init(int minor);
-static void uart_write_polled(int minor, char c);
-static int uart_set_attributes(int minor, const struct termios *t);
-
-/* These are used by code in console.c */
-unsigned long Console_Configuration_Count = NUM_DEVS;
-
-/* Pointers to functions for handling the UART. */
-const console_fns uart_fns = {
- libchip_serial_default_probe,
- uart_first_open,
- uart_last_close,
- uart_read,
- uart_write,
- uart_init,
- uart_write_polled, /* not used in this driver */
- uart_set_attributes,
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-
-/*
- * There's one item in array for each UART.
- *
- * Some of these fields are marked "NOT USED". They are not used
- * by console.c, but may be used by drivers in libchip
- */
-console_tbl Console_Configuration_Ports[] = {
-{
- "/dev/com0", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &uart_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- 0, /* ulCtrlPort1 - NOT USED */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
-}
-#if 0
-{
- "/dev/com1", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &uart_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- 0, /* ulCtrlPort1 - NOT USED */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
-}
-#endif
-};
-
-/*
- * This is called the first time each device is opened. If the driver
- * is interrupt driven, you should enable interrupts here. Otherwise,
- * it's probably safe to do nothing.
- *
- * Since micromonitor already set up the UART, we do nothing.
- */
-static int uart_first_open(int major, int minor, void *arg)
-{
- return 0;
-}
-
-/*
- * This is called the last time each device is closed. If the driver
- * is interrupt driven, you should disable interrupts here. Otherwise,
- * it's probably safe to do nothing.
- */
-static int uart_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-/*
- * Read one character from UART.
- *
- * Return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int uart_read(int minor)
-{
- char c;
-
- switch (minor) {
- case 0:
- if (U0LSR & ULSR_RDR) {
- c = U0RBR;
- return c;
- }
- return -1;
- case 1:
- if (U1LSR & ULSR_RDR) {
- c = U1RBR;
- return c;
- }
- return -1;
- default:
- break;
- }
- printk("Unknown console minor number %d\n", minor);
- return -1;
-}
-
-/*
- * Write buffer to UART
- *
- * return 1 on success, -1 on error
- */
-static ssize_t uart_write(int minor, const char *buf, size_t len)
-{
- size_t i;
-
- switch (minor) {
- case 0:
- for (i = 0; i < len; i++) {
- while (!(U0LSR & ULSR_THRE)) /* wait for TX buffer to empty*/
- continue; /* also either WDOG() or swap()*/
- U0THR = (char) buf[i];
- }
- break;
- case 1:
- for (i = 0; i < len; i++) {
- while (!(U0LSR & ULSR_THRE)) /* wait for TX buffer to empty*/
- continue; /* also either WDOG() or swap()*/
- U0THR = (char) buf[i];
- }
- break;
- default:
- printk("Unknown console minor number %d\n", minor);
- return -1;
- }
-
- return len;
-}
-
-/* Set up the UART. */
-static void uart_init(int minor)
-{
-#if 0 //init will be done in bspstart.c
- int baud=6;
- int mode =0x03;
- if(minor==0){
- // set port pins for UART0
- PINSEL0 = (PINSEL0 & ~U0_PINMASK) | U0_PINSEL;
-
- U0IER = 0x00; // disable all interrupts
-
- // set the baudrate
- U0LCR = 1<<7; // select divisor latches
- U0DLL = (uint8_t)baud; // set for baud low byte
- U0DLM = (uint8_t)(baud >> 8); // set for baud high byte
-
- // set the number of characters and other
- // user specified operating parameters
- U0LCR = (mode & ~ULCR_DLAB_ENABLE);
- U0FCR = mode>>8; /*fifo mode*/
-
- // set port pins for UART1
- PINSEL0 = (PINSEL0 & ~U1_PINMASK) | U1_PINSEL;
-
- U1IER = 0x00; // disable all interrupts
- }else if(minor==1){
- // set the baudrate
- U1LCR = ULCR_DLAB_ENABLE; // select divisor latches
- U1DLL = (uint8_t)baud; // set for baud low byte
- U1DLM = (uint8_t)(baud >> 8); // set for baud high byte
-
- // set the number of characters and other
- // user specified operating parameters
- U1LCR = (mode & ~ULCR_DLAB_ENABLE);
- U1FCR = mode>>8;/*fifo mode*/
- }
-
-#endif
-}
-
-/* I'm not sure this is needed for the shared console driver. */
-static void uart_write_polled(int minor, char c)
-{
- uart_write(minor, &c, 1);
-}
-
-/* This is for setting baud rate, bits, etc. */
-static int uart_set_attributes(int minor, const struct termios *t)
-{
- return 0;
-}
-
-/*
- * Write a character to the console. This is used by printk() and
- * maybe other low level functions. It should not use interrupts or any
- * RTEMS system calls. It needs to be very simple
- */
-static void _BSP_put_char( char c )
-{
- uart_write_polled(0, c);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_put_char;
-
-static int _BSP_get_char(void)
-{
- return uart_read(0);
-}
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_get_char;
-
-/*
- * init USART 0¡£8 bit, 1 Stop,No checkout, BPS115200
- */
-void UART0_Ini(void)
-{
- long Fdiv;
- int i;
-
- PINSEL0 = 0x00000005; // I/O to UART0
- U0LCR = 0x83; // DLAB = 1
- Fdiv = (Fpclk >>4) / UART_BPS; // configure BPS
- U0DLM = Fdiv/256;
- U0DLL = Fdiv%256;
- U0LCR = 0x03;
-
- for(i=0;i<10;i++){
- U0THR = 67; //send a C to see if is OK
- while ( (U0LSR&0x40)==0 );
- }
-}
diff --git a/c/src/lib/libbsp/arm/smdk2410/Makefile.am b/c/src/lib/libbsp/arm/smdk2410/Makefile.am
index a9c43789f4..748cde9c94 100644
--- a/c/src/lib/libbsp/arm/smdk2410/Makefile.am
+++ b/c/src/lib/libbsp/arm/smdk2410/Makefile.am
@@ -34,7 +34,7 @@ librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/smdk2410/clock/support.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/smdk2410/console/uart.c
# IRQ
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
diff --git a/c/src/lib/libbsp/arm/smdk2410/console/uart.c b/c/src/lib/libbsp/arm/smdk2410/console/uart.c
deleted file mode 100644
index 06adecf239..0000000000
--- a/c/src/lib/libbsp/arm/smdk2410/console/uart.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * console driver for S3C2400 UARTs
- *
- * This driver uses the shared console driver in
- * ...../libbsp/shared/console.c
- *
- * If you want the driver to be interrupt driven, you
- * need to write the ISR, and in the ISR insert the
- * chars into termios's queue.
- *
- * Copyright (c) 2004 Cogent Computer Systems
- * Written by Jay Monkman <jtm@lopingdog.com>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
-*/
-#include <bsp.h> /* Must be before libio.h */
-#include <rtems/libio.h>
-#include <termios.h>
-#include <rtems/bspIo.h>
-
-/* Put the CPU (or UART) specific header file #include here */
-#include <s3c24xx.h>
-#include <libchip/serial.h>
-#include <libchip/sersupp.h>
-
-/* How many serial ports? */
-#define NUM_DEVS 1
-
-int uart_poll_read(int minor);
-
-int dbg_dly;
-
-/* static function prototypes */
-static int uart_first_open(int major, int minor, void *arg);
-static int uart_last_close(int major, int minor, void *arg);
-static int uart_read(int minor);
-static ssize_t uart_write(int minor, const char *buf, size_t len);
-static void uart_init(int minor);
-static void uart_write_polled(int minor, char c);
-static int uart_set_attributes(int minor, const struct termios *t);
-
-/* These are used by code in console.c */
-unsigned long Console_Configuration_Count = NUM_DEVS;
-
-/* Pointers to functions for handling the UART. */
-const console_fns uart_fns =
-{
- libchip_serial_default_probe,
- uart_first_open,
- uart_last_close,
- uart_read,
- uart_write,
- uart_init,
- uart_write_polled, /* not used in this driver */
- uart_set_attributes,
- FALSE /* TRUE if interrupt driven, FALSE if not. */
-};
-
-/*
- * There's one item in array for each UART.
- *
- * Some of these fields are marked "NOT USED". They are not used
- * by console.c, but may be used by drivers in libchip
- *
- */
-console_tbl Console_Configuration_Ports[] = {
- {
- "/dev/com0", /* sDeviceName */
- SERIAL_CUSTOM, /* deviceType */
- &uart_fns, /* pDeviceFns */
- NULL, /* deviceProbe */
- NULL, /* pDeviceFlow */
- 0, /* ulMargin - NOT USED */
- 0, /* ulHysteresis - NOT USED */
- NULL, /* pDeviceParams */
- 0, /* ulCtrlPort1 - NOT USED */
- 0, /* ulCtrlPort2 - NOT USED */
- 0, /* ulDataPort - NOT USED */
- NULL, /* getRegister - NOT USED */
- NULL, /* setRegister - NOT USED */
- NULL, /* getData - NOT USED */
- NULL, /* setData - NOT USED */
- 0, /* ulClock - NOT USED */
- 0 /* ulIntVector - NOT USED */
- }
-};
-
-/*********************************************************************/
-/* Functions called via termios callbacks (i.e. the ones in uart_fns */
-/*********************************************************************/
-
-/*
- * This is called the first time each device is opened. If the driver
- * is interrupt driven, you should enable interrupts here. Otherwise,
- * it's probably safe to do nothing.
- *
- * Since micromonitor already set up the UART, we do nothing.
- */
-static int uart_first_open(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * This is called the last time each device is closed. If the driver
- * is interrupt driven, you should disable interrupts here. Otherwise,
- * it's probably safe to do nothing.
- */
-static int uart_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-
-/*
- * Read one character from UART.
- *
- * Return -1 if there's no data, otherwise return
- * the character in lowest 8 bits of returned int.
- */
-static int uart_read(int minor)
-{
- char c;
-
- if (minor == 0) {
- if (rUTRSTAT0 & 0x1) {
- c = rURXH0 & 0xff;
- return c;
- } else {
- return -1;
- }
- } else {
- printk("Unknown console minor number: %d\n", minor);
- return -1;
- }
-
-}
-
-
-/*
- * Write buffer to UART
- *
- * return 1 on success, -1 on error
- */
-static ssize_t uart_write(int minor, const char *buf, size_t len)
-{
- int i;
-
- if (minor == 0) {
- for (i = 0; i < len; i++) {
- /* Wait for fifo to have room */
- while(!(rUTRSTAT0 & 0x2)) {
- continue;
- }
-
- rUTXH0 = (char) buf[i];
- }
- } else {
- printk("Unknown console minor number: %d\n", minor);
- return -1;
- }
-
- return 1;
-}
-
-
-/* Set up the UART. */
-static void uart_init(int minor)
-{
- int i;
- unsigned int reg = 0;
-
- /* enable UART0 */
- rCLKCON|=0x100;
-
- /* value is calculated so : (int)(PCLK/16./baudrate) -1 */
- reg = get_PCLK() / (16 * 115200) - 1;
-
- /* FIFO enable, Tx/Rx FIFO clear */
- rUFCON0 = 0x07;
- rUMCON0 = 0x0;
- /* Normal,No parity,1 stop,8 bit */
- rULCON0 = 0x3;
- /*
- * tx=level,rx=edge,disable timeout int.,enable rx error int.,
- * normal,interrupt or polling
- */
- rUCON0 = 0x245;
- rUBRDIV0 = reg;
-
- for (i = 0; i < 100; i++);
-
-}
-
-/* I'm not sure this is needed for the shared console driver. */
-static void uart_write_polled(int minor, char c)
-{
- uart_write(minor, &c, 1);
-}
-
-/* This is for setting baud rate, bits, etc. */
-static int uart_set_attributes(int minor, const struct termios *t)
-{
- return 0;
-}
-
-/***********************************************************************/
-/*
- * The following functions are not used by TERMIOS, but other RTEMS
- * functions use them instead.
- */
-/***********************************************************************/
-/*
- * Read from UART. This is used in the exit code, and can't
- * rely on interrupts.
-*/
-int uart_poll_read(int minor)
-{
- return uart_read(minor);
-}
-
-
-/*
- * Write a character to the console. This is used by printk() and
- * maybe other low level functions. It should not use interrupts or any
- * RTEMS system calls. It needs to be very simple
- */
-static void _BSP_put_char( char c ) {
- uart_write_polled(0, c);
-}
-
-BSP_output_char_function_type BSP_output_char = _BSP_put_char;
-
-static int _BSP_get_char(void)
-{
- return uart_poll_read(0);
-}
-
-BSP_polling_getchar_function_type BSP_poll_char = _BSP_get_char;
diff --git a/c/src/lib/libbsp/arm/stm32f4/Makefile.am b/c/src/lib/libbsp/arm/stm32f4/Makefile.am
index 640cb59adf..760b387a18 100644
--- a/c/src/lib/libbsp/arm/stm32f4/Makefile.am
+++ b/c/src/lib/libbsp/arm/stm32f4/Makefile.am
@@ -56,8 +56,8 @@ librtemsbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq-dispatch.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-control.c
librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/legacy-console-select.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/usart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/stm32f4/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/stm32f4/console/usart.c
# I2C
librtemsbsp_a_SOURCES += i2c/i2c.c
diff --git a/c/src/lib/libbsp/arm/stm32f4/console/console-config.c b/c/src/lib/libbsp/arm/stm32f4/console/console-config.c
deleted file mode 100644
index 6bf2d7e3b5..0000000000
--- a/c/src/lib/libbsp/arm/stm32f4/console/console-config.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2012 Sebastian Huber. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/bspIo.h>
-
-#include <libchip/serial.h>
-
-#include <bspopts.h>
-#include <bsp/irq.h>
-#include <bsp/usart.h>
-#include <bsp/stm32f4.h>
-
-console_tbl Console_Configuration_Ports [] = {
- #ifdef STM32F4_ENABLE_USART_1
- {
- .sDeviceName = "/dev/ttyS0",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_1,
- .ulCtrlPort2 = 0,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_USART1
- },
- #endif
- #ifdef STM32F4_ENABLE_USART_2
- {
- .sDeviceName = "/dev/ttyS1",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_2,
- .ulCtrlPort2 = 1,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_USART2
- },
- #endif
- #ifdef STM32F4_ENABLE_USART_3
- {
- .sDeviceName = "/dev/ttyS2",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_3,
- .ulCtrlPort2 = 2,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_USART3
- },
- #endif
- #ifdef STM32F4_ENABLE_UART_4
- {
- .sDeviceName = "/dev/ttyS3",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_4,
- .ulCtrlPort2 = 3,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_UART4
- },
- #endif
- #ifdef STM32F4_ENABLE_UART_5
- {
- .sDeviceName = "/dev/ttyS4",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_5,
- .ulCtrlPort2 = 4,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_UART5
- },
- #endif
- #ifdef STM32F4_ENABLE_USART_6
- {
- .sDeviceName = "/dev/ttyS5",
- .deviceType = SERIAL_CUSTOM,
- .pDeviceFns = &stm32f4_usart_fns,
- .ulCtrlPort1 = (uint32_t) STM32F4_USART_6,
- .ulCtrlPort2 = 5,
- .ulClock = STM32F4_USART_BAUD,
- .ulIntVector = STM32F4_IRQ_USART6
- },
- #endif
-};
-
-#define PORT_COUNT \
- (sizeof(Console_Configuration_Ports) \
- / sizeof(Console_Configuration_Ports [0]))
-
-unsigned long Console_Configuration_Count = PORT_COUNT;
-
-static void output_char(char c)
-{
- const console_fns *con =
- Console_Configuration_Ports [Console_Port_Minor].pDeviceFns;
-
- con->deviceWritePolled((int) Console_Port_Minor, c);
-}
-
-BSP_output_char_function_type BSP_output_char = output_char;
-
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/arm/stm32f4/console/usart.c b/c/src/lib/libbsp/arm/stm32f4/console/usart.c
deleted file mode 100644
index 24e010d6bf..0000000000
--- a/c/src/lib/libbsp/arm/stm32f4/console/usart.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2012 Sebastian Huber. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <libchip/sersupp.h>
-
-#include <bsp.h>
-#include <bsp/io.h>
-#include <bsp/rcc.h>
-#include <bsp/irq.h>
-#include <bsp/usart.h>
-#include <bsp/stm32f4.h>
-
-static volatile stm32f4_usart *usart_get_regs(const console_tbl *ct)
-{
- return (stm32f4_usart *) ct->ulCtrlPort1;
-}
-
-#if 0
-static rtems_vector_number usart_get_irq_number(const console_tbl *ct)
-{
- return ct->ulIntVector;
-}
-#endif
-
-static const stm32f4_rcc_index usart_rcc_index [] = {
- STM32F4_RCC_USART1,
- STM32F4_RCC_USART2,
- STM32F4_RCC_USART3,
- STM32F4_RCC_UART4,
- STM32F4_RCC_UART5,
-#ifdef STM32F4_FAMILY_F4XXXX
- STM32F4_RCC_USART6
-#endif /* STM32F4_FAMILY_F4XXXX */
-};
-
-static stm32f4_rcc_index usart_get_rcc_index(const console_tbl *ct)
-{
- return usart_rcc_index [ct->ulCtrlPort2];
-}
-
-static const uint8_t usart_pclk_index [] = { 1, 0, 0, 0, 0, 1 };
-
-static const uint32_t usart_pclk_by_index [] = {
- STM32F4_PCLK1,
- STM32F4_PCLK2
-};
-
-static uint32_t usart_get_pclk(const console_tbl *ct)
-{
- return usart_pclk_by_index [usart_pclk_index [ct->ulCtrlPort2]];
-}
-
-static uint32_t usart_get_baud(const console_tbl *ct)
-{
- return ct->ulClock;
-}
-
-/*
- * a = 8 * (2 - CR1[OVER8])
- *
- * usartdiv = div_mantissa + div_fraction / a
- *
- * baud = pclk / (a * usartdiv)
- *
- * usartdiv = pclk / (a * baud)
- *
- * Calculation in integer arithmetic:
- *
- * 1. div_mantissa = pclk / (a * baud)
- *
- * 2. div_fraction = pclk / (baud - a * div_mantissa)
- */
-static uint32_t usart_get_bbr(
- volatile stm32f4_usart *usart,
- uint32_t pclk,
- uint32_t baud
-)
-{
- uint32_t a = 8 * (2 - ((usart->cr1 & STM32F4_USART_CR1_OVER8) != 0));
- uint32_t div_mantissa_low = pclk / (a * baud);
- uint32_t div_fraction_low = pclk / (baud - a * div_mantissa_low);
- uint32_t div_mantissa_high;
- uint32_t div_fraction_high;
- uint32_t high_err;
- uint32_t low_err;
- uint32_t div_mantissa;
- uint32_t div_fraction;
-
- if (div_fraction_low < a - 1) {
- div_mantissa_high = div_fraction_low;
- div_fraction_high = div_fraction_low + 1;
- } else {
- div_mantissa_high = div_fraction_low + 1;
- div_fraction_high = 0;
- }
-
- high_err = pclk - baud * (a * div_mantissa_high + div_fraction_high);
- low_err = baud * (a * div_mantissa_low + div_fraction_low) - pclk;
-
- if (low_err < high_err) {
- div_mantissa = div_mantissa_low;
- div_fraction = div_fraction_low;
- } else {
- div_mantissa = div_mantissa_high;
- div_fraction = div_fraction_high;
- }
-
- return STM32F4_USART_BBR_DIV_MANTISSA(div_mantissa)
- | STM32F4_USART_BBR_DIV_FRACTION(div_fraction);
-}
-
-static void usart_initialize(int minor)
-{
- const console_tbl *ct = Console_Port_Tbl [minor];
- volatile stm32f4_usart *usart = usart_get_regs(ct);
- uint32_t pclk = usart_get_pclk(ct);
- uint32_t baud = usart_get_baud(ct);
- stm32f4_rcc_index rcc_index = usart_get_rcc_index(ct);
-
- stm32f4_rcc_set_clock(rcc_index, true);
-
- usart->cr1 = 0;
- usart->cr2 = 0;
- usart->cr3 = 0;
- usart->bbr = usart_get_bbr(usart, pclk, baud);
- usart->cr1 = STM32F4_USART_CR1_UE
- | STM32F4_USART_CR1_TE
- | STM32F4_USART_CR1_RE;
-}
-
-static int usart_first_open(int major, int minor, void *arg)
-{
- rtems_libio_open_close_args_t *oc = (rtems_libio_open_close_args_t *) arg;
- struct rtems_termios_tty *tty = (struct rtems_termios_tty *) oc->iop->data1;
- const console_tbl *ct = Console_Port_Tbl [minor];
- console_data *cd = &Console_Port_Data [minor];
-
- cd->termios_data = tty;
- rtems_termios_set_initial_baud(tty, ct->ulClock);
-
- return 0;
-}
-
-static int usart_last_close(int major, int minor, void *arg)
-{
- return 0;
-}
-
-static int usart_read_polled(int minor)
-{
- const console_tbl *ct = Console_Port_Tbl [minor];
- volatile stm32f4_usart *usart = usart_get_regs(ct);
-
- if ((usart->sr & STM32F4_USART_SR_RXNE) != 0) {
- return STM32F4_USART_DR_GET(usart->dr);
- } else {
- return -1;
- }
-}
-
-static void usart_write_polled(int minor, char c)
-{
- const console_tbl *ct = Console_Port_Tbl [minor];
- volatile stm32f4_usart *usart = usart_get_regs(ct);
-
- while ((usart->sr & STM32F4_USART_SR_TXE) == 0) {
- /* Wait */
- }
-
- usart->dr = STM32F4_USART_DR(c);
-}
-
-static ssize_t usart_write_support_polled(
- int minor,
- const char *s,
- size_t n
-)
-{
- ssize_t i = 0;
-
- for (i = 0; i < n; ++i) {
- usart_write_polled(minor, s [i]);
- }
-
- return n;
-}
-
-static int usart_set_attributes(int minor, const struct termios *term)
-{
- return -1;
-}
-
-const console_fns stm32f4_usart_fns = {
- .deviceProbe = libchip_serial_default_probe,
- .deviceFirstOpen = usart_first_open,
- .deviceLastClose = usart_last_close,
- .deviceRead = usart_read_polled,
- .deviceWrite = usart_write_support_polled,
- .deviceInitialize = usart_initialize,
- .deviceWritePolled = usart_write_polled,
- .deviceSetAttributes = usart_set_attributes,
- .deviceOutputUsesInterrupts = false
-};
diff --git a/c/src/lib/libbsp/arm/tms570/Makefile.am b/c/src/lib/libbsp/arm/tms570/Makefile.am
index 3857fc4fda..106d6c1d9e 100644
--- a/c/src/lib/libbsp/arm/tms570/Makefile.am
+++ b/c/src/lib/libbsp/arm/tms570/Makefile.am
@@ -62,9 +62,9 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += irq/irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/printk-support.c
-librtemsbsp_a_SOURCES += console/tms570-sci.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/tms570/console/printk-support.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/tms570/console/tms570-sci.c
# Clock
librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/tms570/clock/clock.c
diff --git a/c/src/lib/libbsp/arm/tms570/console/printk-support.c b/c/src/lib/libbsp/arm/tms570/console/printk-support.c
deleted file mode 100644
index 529c5dba20..0000000000
--- a/c/src/lib/libbsp/arm/tms570/console/printk-support.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * @file printk-support.c
- *
- * @ingroup tms570
- *
- * @brief definitions of serial line for debugging.
- */
-
-/*
- * Copyright (c) 2014 Premysl Houdek <kom541000@gmail.com>
- *
- * Google Summer of Code 2014 at
- * Czech Technical University in Prague
- * Zikova 1903/4
- * 166 36 Praha 6
- * Czech Republic
- *
- * Based on LPC24xx and LPC1768 BSP
- * by embedded brains GmbH and others
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/bspIo.h>
-#include <rtems/sysinit.h>
-#include <stdint.h>
-#include <string.h>
-#include <bsp/tms570-sci.h>
-#include <bsp/tms570-sci-driver.h>
-
-#define TMS570_CONSOLE (&driver_context_table[0])
-
-/**
- * @brief Puts chars into peripheral
- *
- * debug functions always use serial dev 0 peripheral
- *
- * @retval Void
- */
-static void tms570_debug_console_putc(char ch)
-{
- tms570_sci_context *ctx = TMS570_CONSOLE;
- volatile tms570_sci_t *regs = ctx->regs;
- rtems_interrupt_level level;
-
- rtems_interrupt_disable(level);
- while ( ( regs->FLR & TMS570_SCI_FLR_TXRDY ) == 0) {
- rtems_interrupt_flash(level);
- }
- regs->TD = ch;
- while ( ( regs->FLR & TMS570_SCI_FLR_TX_EMPTY ) == 0) {
- rtems_interrupt_flash(level);
- }
- rtems_interrupt_enable(level);
-}
-
-/**
- * @brief debug console output
- *
- * debug functions always use serial dev 0 peripheral
- *
- * @retval Void
- */
-static void tms570_debug_console_out(char c)
-{
- tms570_debug_console_putc(c);
-}
-
-static void tms570_debug_console_init(void)
-{
- tms570_sci_context *ctx = TMS570_CONSOLE;
- struct termios term;
-
- tms570_sci_initialize(ctx);
- memset(&term, 0, sizeof(term));
- term.c_cflag = B115200;
- tms570_sci_set_attributes(&ctx->base, &term);
- BSP_output_char = tms570_debug_console_out;
-}
-
-static void tms570_debug_console_early_init(char c)
-{
- tms570_debug_console_init();
- tms570_debug_console_out(c);
-}
-
-/**
- * @brief debug console input
- *
- * debug functions always use serial dev 0 peripheral
- *
- * @retval x Read char
- * @retval -1 No input character available
- */
-static int tms570_debug_console_in( void )
-{
- tms570_sci_context *ctx = TMS570_CONSOLE;
- volatile tms570_sci_t *regs = ctx->regs;
- rtems_interrupt_level level;
- int c;
-
- rtems_interrupt_disable(level);
-
- if ( regs->FLR & TMS570_SCI_FLR_RXRDY ) {
- c = (unsigned char) regs->RD;
- } else {
- c = -1;
- }
-
- rtems_interrupt_enable(level);
-
- return c;
-}
-
-BSP_output_char_function_type BSP_output_char =
- tms570_debug_console_early_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = tms570_debug_console_in;
-
-RTEMS_SYSINIT_ITEM(
- tms570_debug_console_init,
- RTEMS_SYSINIT_BSP_START,
- RTEMS_SYSINIT_ORDER_LAST
-);
diff --git a/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c b/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c
deleted file mode 100644
index 48986e9a2e..0000000000
--- a/c/src/lib/libbsp/arm/tms570/console/tms570-sci.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/**
- * @file tms570-sci.c
- *
- * @ingroup tms570
- *
- * @brief Serial communication interface (SCI) functions definitions.
- */
-
-/*
- * Copyright (c) 2014 Premysl Houdek <kom541000@gmail.com>
- *
- * Google Summer of Code 2014 at
- * Czech Technical University in Prague
- * Zikova 1903/4
- * 166 36 Praha 6
- * Czech Republic
- *
- * Based on LPC24xx and LPC1768 BSP
- * by embedded brains GmbH and others
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bspopts.h>
-#include <termios.h>
-#include <rtems/termiostypes.h>
-#include <bsp/tms570-sci.h>
-#include <bsp/tms570-sci-driver.h>
-#include <rtems/console.h>
-#include <bsp.h>
-#include <bsp/fatal.h>
-#include <bsp/irq.h>
-
-#define TMS570_SCI_BUFFER_SIZE 1
-
-/**
- * @brief Table including all serial drivers
- *
- * Definitions of all serial drivers
- */
-tms570_sci_context driver_context_table[] = {
- {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("TMS570 SCI1"),
- .device_name = "/dev/console",
- /* TMS570 UART peripheral use subset of LIN registers which are equivalent
- * to SCI ones
- */
- .regs = (volatile tms570_sci_t *) &TMS570_LIN,
- .irq = TMS570_IRQ_SCI_LEVEL_0,
- },
- {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("TMS570 SCI2"),
- .device_name = "/dev/ttyS1",
- .regs = &TMS570_SCI,
- .irq = TMS570_IRQ_SCI2_LEVEL_0,
- }
-};
-
-void tms570_sci_initialize(tms570_sci_context *ctx)
-{
- uint32_t rx_pin = 1 << 1;
- uint32_t tx_pin = 1 << 2;
-
- /* Resec SCI peripheral */
- ctx->regs->GCR0 = TMS570_SCI_GCR0_RESET * 0;
- ctx->regs->GCR0 = TMS570_SCI_GCR0_RESET * 1;
-
- /* Clear all interrupt sources */
- ctx->regs->CLEARINT = 0xffffffff;
-
- /* Map all interrupts to SCI INT0 line */
- ctx->regs->CLEARINTLVL = 0xffffffff;
-
- ctx->regs->GCR1 = TMS570_SCI_GCR1_TXENA * 0 |
- TMS570_SCI_GCR1_RXENA * 0 |
- TMS570_SCI_GCR1_CONT * 0 | /* continue operation when debugged */
- TMS570_SCI_GCR1_LOOP_BACK * 0 |
- TMS570_SCI_GCR1_POWERDOWN * 0 |
- TMS570_SCI_GCR1_SLEEP * 0 |
- TMS570_SCI_GCR1_SWnRST * 0 | /* reset state */
- TMS570_SCI_GCR1_CLOCK * 1 | /* internal clock */
- TMS570_SCI_GCR1_TIMING_MODE * 1 |
- TMS570_SCI_GCR1_COMM_MODE * 0;
-
- /* Setup connection of SCI peripheral Rx and Tx pins */
- ctx->regs->PIO0 = rx_pin * 1 | tx_pin * 1; /* Rx and Tx pins are not GPIO */
- ctx->regs->PIO3 = rx_pin * 0 | tx_pin * 0; /* Default output low */
- ctx->regs->PIO1 = rx_pin * 0 | tx_pin * 0; /* Input when not used by SCI */
- ctx->regs->PIO6 = rx_pin * 0 | tx_pin * 0; /* No open drain */
- ctx->regs->PIO7 = rx_pin * 0 | tx_pin * 0; /* Pull-up/down enabled */
- ctx->regs->PIO8 = rx_pin * 1 | tx_pin * 1; /* Select pull-up */
-
- /* Bring device out of software reset */
- ctx->regs->GCR1 |= TMS570_SCI_GCR1_SWnRST;
-}
-
-/**
- * @brief Serial drivers init function
- *
- * Initialize all serial drivers specified in driver_context_table
- *
- * @param[in] major
- * @param[in] minor
- * @param[in] arg
- * @retval RTEMS_SUCCESSFUL Initialization completed
- */
-rtems_device_driver console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- rtems_status_code sc;
-#if CONSOLE_USE_INTERRUPTS
- const rtems_termios_device_handler *handler = &tms570_sci_handler_interrupt;
-#else
- const rtems_termios_device_handler *handler = &tms570_sci_handler_polled;
-#endif
-
- /*
- * Initialize the Termios infrastructure. If Termios has already
- * been initialized by another device driver, then this call will
- * have no effect.
- */
- rtems_termios_initialize();
-
- /* Initialize each device */
- for (
- minor = 0;
- minor < RTEMS_ARRAY_SIZE(driver_context_table);
- ++minor
- ) {
- tms570_sci_context *ctx = &driver_context_table[minor];
-
- tms570_sci_initialize(ctx);
-
- /*
- * Install this device in the file system and Termios. In order
- * to use the console (i.e. being able to do printf, scanf etc.
- * on stdin, stdout and stderr), one device must be registered as
- * "/dev/console" (CONSOLE_DEVICE_NAME).
- */
- sc = rtems_termios_device_install(
- ctx->device_name,
- handler,
- NULL,
- &ctx->base
- );
- if ( sc != RTEMS_SUCCESSFUL ) {
- bsp_fatal(BSP_FATAL_CONSOLE_NO_DEV);
- }
- }
- return RTEMS_SUCCESSFUL;
-}
-
-/**
- * @brief Reads chars from HW
- *
- * Reads chars from HW peripheral specified in driver context.
- * TMS570 does not have HW buffer for serial line so this function can
- * return only 0 or 1 char
- *
- * @param[in] ctx context of the driver
- * @param[out] buf read data buffer
- * @param[in] N size of buffer
- * @retval x Number of read chars from peripherals
- */
-static int tms570_sci_read_received_chars(
- tms570_sci_context * ctx,
- char * buf,
- int N)
-{
- if ( N < 1 ) {
- return 0;
- }
- if ( ctx->regs->RD != 0 ) {
- buf[0] = ctx->regs->RD;
- return 1;
- }
- return 0;
-}
-
-/**
- * @brief Enables RX interrupt
- *
- * Enables RX interrupt source of SCI peripheral
- * specified in the driver context.
- *
- * @param[in] ctx context of the driver
- * @retval Void
- */
-static void tms570_sci_enable_interrupts(tms570_sci_context * ctx)
-{
- ctx->regs->SETINT = TMS570_SCI_SETINT_SET_RX_INT;
-}
-
-/**
- * @brief Disables RX interrupt
- *
- * Disables RX interrupt source of SCI peripheral specified in the driver
- * context.
- *
- * @param[in] ctx context of the driver
- * @retval Void
- */
-static void tms570_sci_disable_interrupts(tms570_sci_context * ctx)
-{
- ctx->regs->CLEARINT = TMS570_SCI_CLEARINT_CLR_RX_INT;
-}
-
-/**
- * @brief Check whether driver has put char in HW
- *
- * Check whether driver has put char in HW.
- * This information is read from the driver context not from a peripheral.
- * TMS570 does not have write data buffer asociated with SCI
- * so the return can be only 0 or 1.
- *
- * @param[in] ctx context of the driver
- * @retval x
- */
-static int tms570_sci_transmitted_chars(tms570_sci_context * ctx)
-{
- int ret;
-
- ret = ctx->tx_chars_in_hw;
- if ( ret == 1 ) {
- ctx->tx_chars_in_hw = 0;
- return 1;
- }
- return ret;
-}
-
-/**
- * @brief Set attributes of the HW peripheral
- *
- * Sets attributes of the HW peripheral (parity, baud rate, etc.)
- *
- * @param[in] base context of the driver
- * @param[in] t termios driver
- * @retval true peripheral setting is changed
- */
-bool tms570_sci_set_attributes(
- rtems_termios_device_context *base,
- const struct termios *t
-)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
- rtems_interrupt_lock_context lock_context;
- int32_t bauddiv;
- int32_t baudrate;
- uint32_t flr_tx_ready = TMS570_SCI_FLR_TX_EMPTY;
- /*
- * Test for TMS570_SCI_FLR_TXRDY is not necessary
- * because both SCITD and SCITXSHF has to be empty
- * to TX_EMPTY be asserted. But there is no interrupt
- * option for TX_EMPTY. Polling is used isntead.
- */
-
- /* Baud rate */
- baudrate = rtems_termios_baud_to_number(cfgetospeed(t));
-
- rtems_termios_device_lock_acquire(base, &lock_context);
-
- while ( (ctx->regs->GCR1 & TMS570_SCI_GCR1_TXENA) &&
- (ctx->regs->FLR & flr_tx_ready) != flr_tx_ready) {
- /*
- * There are pending characters in the hardware,
- * change in the middle of the character Tx leads
- * to disturb of the character and SCI engine
- */
- rtems_interval tw;
-
- rtems_termios_device_lock_release(base, &lock_context);
-
- tw = rtems_clock_get_ticks_per_second();
- tw = tw * 5 / baudrate + 1;
- rtems_task_wake_after( tw );
-
- rtems_termios_device_lock_acquire(base, &lock_context);
- }
-
- ctx->regs->GCR1 &= ~( TMS570_SCI_GCR1_SWnRST | TMS570_SCI_GCR1_TXENA |
- TMS570_SCI_GCR1_RXENA );
-
- ctx->regs->GCR1 &= ~TMS570_SCI_GCR1_STOP; /*one stop bit*/
- ctx->regs->FORMAT = TMS570_SCI_FORMAT_CHAR(0x7);
-
- switch ( t->c_cflag & ( PARENB|PARODD ) ) {
- case ( PARENB|PARODD ):
- /* Odd parity */
- ctx->regs->GCR1 &= ~TMS570_SCI_GCR1_PARITY;
- ctx->regs->GCR1 |= TMS570_SCI_GCR1_PARITY_ENA;
- break;
-
- case PARENB:
- /* Even parity */
- ctx->regs->GCR1 |= TMS570_SCI_GCR1_PARITY;
- ctx->regs->GCR1 |= TMS570_SCI_GCR1_PARITY_ENA;
- break;
-
- default:
- case 0:
- case PARODD:
- /* No Parity */
- ctx->regs->GCR1 &= ~TMS570_SCI_GCR1_PARITY_ENA;
- }
-
- /* Apply baudrate to the hardware */
- baudrate *= 2 * 16;
- bauddiv = (BSP_PLL_OUT_CLOCK + baudrate / 2) / baudrate;
- ctx->regs->BRS = bauddiv;
-
- ctx->regs->GCR1 |= TMS570_SCI_GCR1_SWnRST | TMS570_SCI_GCR1_TXENA |
- TMS570_SCI_GCR1_RXENA;
-
- rtems_termios_device_lock_release(base, &lock_context);
-
- return true;
-}
-
-/**
- * @brief sci interrupt handler
- *
- * Handler checks which interrupt occured and provides nessesary maintenance
- * dequeue characters in termios driver whether character is send succesfully
- * enqueue characters in termios driver whether character is recieved
- *
- * @param[in] arg rtems_termios_tty
- * @retval Void
- */
-static void tms570_sci_interrupt_handler(void * arg)
-{
- rtems_termios_tty *tty = arg;
- tms570_sci_context *ctx = rtems_termios_get_device_context(tty);
- char buf[TMS570_SCI_BUFFER_SIZE];
- size_t n;
-
- /*
- * Check if we have received something.
- */
- if ( (ctx->regs->FLR & TMS570_SCI_FLR_RXRDY ) == TMS570_SCI_FLR_RXRDY ) {
- n = tms570_sci_read_received_chars(ctx, buf, TMS570_SCI_BUFFER_SIZE);
- if ( n > 0 ) {
- /* Hand the data over to the Termios infrastructure */
- rtems_termios_enqueue_raw_characters(tty, buf, n);
- }
- }
- /*
- * Check if we have something transmitted.
- */
- if ( (ctx->regs->FLR & TMS570_SCI_FLR_TXRDY ) == TMS570_SCI_FLR_TXRDY ) {
- n = tms570_sci_transmitted_chars(ctx);
- if ( n > 0 ) {
- /*
- * Notify Termios that we have transmitted some characters. It
- * will call now the interrupt write function if more characters
- * are ready for transmission.
- */
- rtems_termios_dequeue_characters(tty, n);
- }
- }
-}
-
-/**
- * @brief sci write function called from interrupt
- *
- * Nonblocking write function. Writes characters to HW peripheral
- * TMS570 does not have write data buffer asociated with SCI
- * so only one character can be written.
- *
- * @param[in] base context of the driver
- * @param[in] buf buffer of characters pending to send
- * @param[in] len size of the buffer
- * @retval Void
- */
-static void tms570_sci_interrupt_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
-
- if ( len > 0 ) {
- /* start UART TX, this will result in an interrupt when done */
- ctx->regs->TD = *buf;
- /* character written - raise count*/
- ctx->tx_chars_in_hw = 1;
- /* Enable TX interrupt (interrupt is edge-triggered) */
- ctx->regs->SETINT = (1<<8);
-
- } else {
- /* No more to send, disable TX interrupts */
- ctx->regs->CLEARINT = (1<<8);
- /* Tell close that we sent everything */
- }
-}
-
-/**
- * @brief sci write function
- *
- * Blocking write function. Waits until HW peripheral is ready and then writes
- * character to HW peripheral. Writes all characters in the buffer.
- *
- * @param[in] base context of the driver
- * @param[in] buf buffer of characters pending to send
- * @param[in] len size of the buffer
- * @retval Void
- */
-static void tms570_sci_poll_write(
- rtems_termios_device_context *base,
- const char *buf,
- size_t n
-)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
- size_t i;
-
- /* Write */
-
- for ( i = 0; i < n; ++i ) {
- while ( (ctx->regs->FLR & TMS570_SCI_FLR_TX_EMPTY ) == 0) {
- ;
- }
- ctx->regs->TD = buf[i];
- }
-}
-
-/**
- * @brief See if there is recieved charakter to read
- *
- * read the RX flag from peripheral specified in context
- *
- * @param[in] ctx context of the driver
- * @retval 0 No character to read
- * @retval x Character ready to read
- */
-static int TMS570_sci_can_read_char(
- tms570_sci_context * ctx
-)
-{
- return ctx->regs->FLR & TMS570_SCI_FLR_RXRDY;
-}
-
-/**
- * @brief reads character from peripheral
- *
- * reads the recieved character from peripheral specified in context
- *
- * @param[in] ctx context of the driver
- * @retval x Character
- */
-static char TMS570_sci_read_char(
- tms570_sci_context * ctx
-)
-{
- return ctx->regs->RD;
-}
-
-/**
- * @brief sci read function
- *
- * check if there is recieved character to be read and reads it.
- *
- * @param[in] base context of the driver
- * @retval -1 No character to be read
- * @retval x Read character
- */
-static int tms570_sci_poll_read(rtems_termios_device_context *base)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
-
- /* Check if a character is available */
- if ( TMS570_sci_can_read_char(ctx) ) {
- return TMS570_sci_read_char(ctx);
- } else {
- return -1;
- }
-}
-
-/**
- * @brief initialization of the driver
- *
- * initialization of the HW peripheral specified in contex of the driver.
- * This function is called only once when opening the driver.
- *
- * @param[in] tty Termios control
- * @param[in] ctx context of the driver
- * @param[in] term Termios attributes
- * @param[in] args
- * @retval false Error occured during initialization
- * @retval true Driver is open and ready
- */
-static bool tms570_sci_poll_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *ctx,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- bool ok;
-
- rtems_termios_set_best_baud(term, TMS570_SCI_BAUD_RATE);
- ok = tms570_sci_set_attributes(ctx, term);
- if ( !ok ) {
- return false;
- }
- return true;
-}
-
-/**
- * @brief initialization of the interrupt driven driver
- *
- * calls tms570_sci_poll_first_open function.
- * install and enables interrupts.
- *
- * @param[in] tty Termios control
- * @param[in] base context of the driver
- * @param[in] args
- * @retval false Error occured during initialization
- * @retval true Driver is open and ready
- */
-static bool tms570_sci_interrupt_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
- rtems_status_code sc;
- bool ret;
-
- ret = tms570_sci_poll_first_open(tty, base, term, args);
- if ( ret == false ) {
- return false;
- }
-
- /* Register Interrupt handler */
- sc = rtems_interrupt_handler_install(ctx->irq,
- ctx->device_name,
- RTEMS_INTERRUPT_SHARED,
- tms570_sci_interrupt_handler,
- tty
- );
- if ( sc != RTEMS_SUCCESSFUL ) {
- return false;
- }
- tms570_sci_enable_interrupts(ctx);
- return true;
-}
-
-/**
- * @brief closes sci peripheral
- *
- * @param[in] tty Termios control
- * @param[in] base context of the driver
- * @param[in] args
- * @retval false Error occured during initialization
- * @retval true Driver is open and ready
- */
-static void tms570_sci_poll_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- ;
-}
-
-/**
- * @brief closes sci peripheral of interrupt driven driver
- *
- * calls tms570_sci_poll_last_close and disables interrupts
- *
- * @param[in] tty Termios control
- * @param[in] base context of the driver
- * @param[in] args
- * @retval false Error occured during initialization
- * @retval true Driver is open and ready
- */
-static void tms570_sci_interrupt_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- tms570_sci_context *ctx = (tms570_sci_context *) base;
- rtems_interrupt_lock_context lock_context;
- rtems_interval tw;
- int32_t baudrate;
-
- /* Turn off RX interrupts */
- rtems_termios_device_lock_acquire(base, &lock_context);
- tms570_sci_disable_interrupts(ctx);
- rtems_termios_device_lock_release(base, &lock_context);
-
- tw = rtems_clock_get_ticks_per_second();
- baudrate = rtems_termios_baud_to_number(cfgetospeed(&tty->termios));
- tw = tw * 10 / baudrate + 1;
- while ( ( ctx->regs->FLR & TMS570_SCI_FLR_TX_EMPTY ) == 0 ) {
- rtems_task_wake_after(tw);
- }
-
- /* uninstall ISR */
- rtems_interrupt_handler_remove(ctx->irq, tms570_sci_interrupt_handler, tty);
-
- tms570_sci_poll_last_close(tty, base, args);
-}
-
-/**
- * @brief Struct containing definitions of polled driver functions.
- *
- * Encapsulates polled driver functions.
- * Use of this table is determited by not defining TMS570_USE_INTERRUPTS
- */
-const rtems_termios_device_handler tms570_sci_handler_polled = {
- .first_open = tms570_sci_poll_first_open,
- .last_close = tms570_sci_poll_last_close,
- .poll_read = tms570_sci_poll_read,
- .write = tms570_sci_poll_write,
- .set_attributes = tms570_sci_set_attributes,
- .mode = TERMIOS_POLLED
-};
-
-/**
- * @brief Struct containing definitions of interrupt driven driver functions.
- *
- * Encapsulates interrupt driven driver functions.
- * Use of this table is determited by defining TMS570_USE_INTERRUPTS
- */
-const rtems_termios_device_handler tms570_sci_handler_interrupt = {
- .first_open = tms570_sci_interrupt_first_open,
- .last_close = tms570_sci_interrupt_last_close,
- .poll_read = NULL,
- .write = tms570_sci_interrupt_write,
- .set_attributes = tms570_sci_set_attributes,
- .mode = TERMIOS_IRQ_DRIVEN
-};
diff --git a/c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am b/c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am
index 823c92be4b..0b468fd12e 100644
--- a/c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am
+++ b/c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am
@@ -59,10 +59,10 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c
librtemsbsp_a_SOURCES += ../shared/arm-gic-irq.c
# Console
-librtemsbsp_a_SOURCES += ../../shared/console-termios.c
-librtemsbsp_a_SOURCES += console/console-config.c
-librtemsbsp_a_SOURCES += console/debug-console.c
-librtemsbsp_a_SOURCES += console/zynq-uart.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xilinx-zynq/console/console-config.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xilinx-zynq/console/debug-console.c
+librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xilinx-zynq/console/zynq-uart.c
# Clock
librtemsbsp_a_SOURCES += ../shared/arm-a9mpcore-clock-config.c
diff --git a/c/src/lib/libbsp/arm/xilinx-zynq/console/console-config.c b/c/src/lib/libbsp/arm/xilinx-zynq/console/console-config.c
deleted file mode 100644
index ce7da2f114..0000000000
--- a/c/src/lib/libbsp/arm/xilinx-zynq/console/console-config.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <info@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/console.h>
-#include <rtems/bspIo.h>
-
-#include <bsp/irq.h>
-#include <bsp/zynq-uart.h>
-
-#include <bspopts.h>
-
-zynq_uart_context zynq_uart_instances[2] = {
- {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 0" ),
- .regs = (volatile struct zynq_uart *) 0xe0000000,
- .irq = ZYNQ_IRQ_UART_0
- }, {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 1" ),
- .regs = (volatile struct zynq_uart *) 0xe0001000,
- .irq = ZYNQ_IRQ_UART_1
- }
-};
-
-rtems_status_code console_initialize(
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg
-)
-{
- size_t i;
-
- rtems_termios_initialize();
-
- for (i = 0; i < RTEMS_ARRAY_SIZE(zynq_uart_instances); ++i) {
- char uart[] = "/dev/ttySX";
-
- uart[sizeof(uart) - 2] = (char) ('0' + i);
- rtems_termios_device_install(
- &uart[0],
- &zynq_uart_handler,
- NULL,
- &zynq_uart_instances[i].base
- );
-
- if (i == BSP_CONSOLE_MINOR) {
- link(&uart[0], CONSOLE_DEVICE_NAME);
- }
- }
-
- return RTEMS_SUCCESSFUL;
-}
diff --git a/c/src/lib/libbsp/arm/xilinx-zynq/console/debug-console.c b/c/src/lib/libbsp/arm/xilinx-zynq/console/debug-console.c
deleted file mode 100644
index 38c0050e90..0000000000
--- a/c/src/lib/libbsp/arm/xilinx-zynq/console/debug-console.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <rtems/bspIo.h>
-#include <rtems/sysinit.h>
-
-#include <bsp/zynq-uart.h>
-
-#include <bspopts.h>
-
-static void zynq_debug_console_out(char c)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_write_polled(base, c);
-}
-
-static void zynq_debug_console_init(void)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_initialize(base);
- BSP_output_char = zynq_debug_console_out;
-}
-
-static void zynq_debug_console_early_init(char c)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_initialize(base);
- zynq_debug_console_out(c);
-}
-
-static int zynq_debug_console_in(void)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- return zynq_uart_read_polled(base);
-}
-
-BSP_output_char_function_type BSP_output_char = zynq_debug_console_early_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = zynq_debug_console_in;
-
-RTEMS_SYSINIT_ITEM(
- zynq_debug_console_init,
- RTEMS_SYSINIT_BSP_START,
- RTEMS_SYSINIT_ORDER_LAST
-);
diff --git a/c/src/lib/libbsp/arm/xilinx-zynq/console/zynq-uart.c b/c/src/lib/libbsp/arm/xilinx-zynq/console/zynq-uart.c
deleted file mode 100644
index fa91f3f46e..0000000000
--- a/c/src/lib/libbsp/arm/xilinx-zynq/console/zynq-uart.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <info@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp/zynq-uart.h>
-#include <bsp/zynq-uart-regs.h>
-#include <bsp/irq.h>
-
-#include <bspopts.h>
-
-/*
- * Make weak and let the user override.
- */
-uint32_t zynq_uart_input_clock(void) __attribute__ ((weak));
-
-uint32_t zynq_uart_input_clock(void)
-{
- return ZYNQ_CLOCK_UART;
-}
-
-static int zynq_cal_baud_rate(uint32_t baudrate,
- uint32_t* brgr,
- uint32_t* bauddiv,
- uint32_t modereg)
-{
- uint32_t brgr_value; /* Calculated value for baud rate generator */
- uint32_t calcbaudrate; /* Calculated baud rate */
- uint32_t bauderror; /* Diff between calculated and requested baud rate */
- uint32_t best_error = 0xFFFFFFFF;
- uint32_t percenterror;
- uint32_t bdiv;
- uint32_t inputclk = zynq_uart_input_clock();
-
- /*
- * Make sure the baud rate is not impossilby large.
- * Fastest possible baud rate is Input Clock / 2.
- */
- if ((baudrate * 2) > inputclk) {
- return -1;
- }
- /*
- * Check whether the input clock is divided by 8
- */
- if(modereg & ZYNQ_UART_MODE_CLKS) {
- inputclk = inputclk / 8;
- }
-
- /*
- * Determine the Baud divider. It can be 4to 254.
- * Loop through all possible combinations
- */
- for (bdiv = 4; bdiv < 255; bdiv++) {
-
- /*
- * Calculate the value for BRGR register
- */
- brgr_value = inputclk / (baudrate * (bdiv + 1));
-
- /*
- * Calculate the baud rate from the BRGR value
- */
- calcbaudrate = inputclk/ (brgr_value * (bdiv + 1));
-
- /*
- * Avoid unsigned integer underflow
- */
- if (baudrate > calcbaudrate) {
- bauderror = baudrate - calcbaudrate;
- }
- else {
- bauderror = calcbaudrate - baudrate;
- }
-
- /*
- * Find the calculated baud rate closest to requested baud rate.
- */
- if (best_error > bauderror) {
- *brgr = brgr_value;
- *bauddiv = bdiv;
- best_error = bauderror;
- }
- }
-
- /*
- * Make sure the best error is not too large.
- */
- percenterror = (best_error * 100) / baudrate;
-#define XUARTPS_MAX_BAUD_ERROR_RATE 3 /* max % error allowed */
- if (XUARTPS_MAX_BAUD_ERROR_RATE < percenterror) {
- return -1;
- }
-
- return 0;
-}
-
-void zynq_uart_initialize(rtems_termios_device_context *base)
-{
- zynq_uart_context *ctx = (zynq_uart_context *) base;
- volatile zynq_uart *regs = ctx->regs;
- uint32_t brgr = 0x3e;
- uint32_t bauddiv = 0x6;
-
- zynq_cal_baud_rate(ZYNQ_UART_DEFAULT_BAUD, &brgr, &bauddiv, regs->mode);
-
- regs->control &= ~(ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN);
- regs->control = ZYNQ_UART_CONTROL_RXDIS
- | ZYNQ_UART_CONTROL_TXDIS
- | ZYNQ_UART_CONTROL_RXRES
- | ZYNQ_UART_CONTROL_TXRES;
- regs->mode = ZYNQ_UART_MODE_CHMODE(ZYNQ_UART_MODE_CHMODE_NORMAL)
- | ZYNQ_UART_MODE_PAR(ZYNQ_UART_MODE_PAR_NONE)
- | ZYNQ_UART_MODE_CHRL(ZYNQ_UART_MODE_CHRL_8);
- regs->baud_rate_gen = ZYNQ_UART_BAUD_RATE_GEN_CD(brgr);
- regs->baud_rate_div = ZYNQ_UART_BAUD_RATE_DIV_BDIV(bauddiv);
- regs->rx_fifo_trg_lvl = ZYNQ_UART_RX_FIFO_TRG_LVL_RTRIG(0);
- regs->rx_timeout = ZYNQ_UART_RX_TIMEOUT_RTO(0);
- regs->control = ZYNQ_UART_CONTROL_RXEN
- | ZYNQ_UART_CONTROL_TXEN
- | ZYNQ_UART_CONTROL_RSTTO;
-}
-
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
-static void zynq_uart_interrupt(void *arg)
-{
- rtems_termios_tty *tty = arg;
- zynq_uart_context *ctx = rtems_termios_get_device_context(tty);
- volatile zynq_uart *regs = ctx->regs;
- uint32_t channel_sts;
-
- if ((regs->irq_sts & (ZYNQ_UART_TIMEOUT | ZYNQ_UART_RTRIG)) != 0) {
- regs->irq_sts = ZYNQ_UART_TIMEOUT | ZYNQ_UART_RTRIG;
-
- do {
- char c = (char) ZYNQ_UART_TX_RX_FIFO_FIFO_GET(regs->tx_rx_fifo);
-
- rtems_termios_enqueue_raw_characters(tty, &c, 1);
-
- channel_sts = regs->channel_sts;
- } while ((channel_sts & ZYNQ_UART_CHANNEL_STS_REMPTY) == 0);
- } else {
- channel_sts = regs->channel_sts;
- }
-
- if (ctx->transmitting && (channel_sts & ZYNQ_UART_CHANNEL_STS_TEMPTY) != 0) {
- rtems_termios_dequeue_characters(tty, 1);
- }
-}
-#endif
-
-static bool zynq_uart_first_open(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- struct termios *term,
- rtems_libio_open_close_args_t *args
-)
-{
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
- zynq_uart_context *ctx = (zynq_uart_context *) base;
- volatile zynq_uart *regs = ctx->regs;
- rtems_status_code sc;
-#endif
-
- rtems_termios_set_initial_baud(tty, ZYNQ_UART_DEFAULT_BAUD);
- zynq_uart_initialize(base);
-
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
- regs->rx_timeout = 32;
- regs->rx_fifo_trg_lvl = ZYNQ_UART_FIFO_DEPTH / 2;
- regs->irq_dis = 0xffffffff;
- regs->irq_sts = 0xffffffff;
- regs->irq_en = ZYNQ_UART_RTRIG | ZYNQ_UART_TIMEOUT;
- sc = rtems_interrupt_handler_install(
- ctx->irq,
- "UART",
- RTEMS_INTERRUPT_SHARED,
- zynq_uart_interrupt,
- tty
- );
- if (sc != RTEMS_SUCCESSFUL) {
- return false;
- }
-#endif
-
- return true;
-}
-
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
-static void zynq_uart_last_close(
- rtems_termios_tty *tty,
- rtems_termios_device_context *base,
- rtems_libio_open_close_args_t *args
-)
-{
- zynq_uart_context *ctx = (zynq_uart_context *) base;
-
- rtems_interrupt_handler_remove(ctx->irq, zynq_uart_interrupt, tty);
-}
-#endif
-
-int zynq_uart_read_polled(rtems_termios_device_context *base)
-{
- zynq_uart_context *ctx = (zynq_uart_context *) base;
- volatile zynq_uart *regs = ctx->regs;
-
- if ((regs->channel_sts & ZYNQ_UART_CHANNEL_STS_REMPTY) != 0) {
- return -1;
- } else {
- return ZYNQ_UART_TX_RX_FIFO_FIFO_GET(regs->tx_rx_fifo);
- }
-}
-
-void zynq_uart_write_polled(
- rtems_termios_device_context *base,
- char c
-)
-{
- zynq_uart_context *ctx = (zynq_uart_context *) base;
- volatile zynq_uart *regs = ctx->regs;
-
- while ((regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TFUL) != 0) {
- /* Wait */
- }
-
- regs->tx_rx_fifo = ZYNQ_UART_TX_RX_FIFO_FIFO(c);
-}
-
-static void zynq_uart_write_support(
- rtems_termios_device_context *base,
- const char *buf,
- size_t len
-)
-{
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
- zynq_uart_context *ctx = (zynq_uart_context *) base;
- volatile zynq_uart *regs = ctx->regs;
-
- if (len > 0) {
- ctx->transmitting = true;
- regs->irq_sts = ZYNQ_UART_TEMPTY;
- regs->irq_en = ZYNQ_UART_TEMPTY;
- regs->tx_rx_fifo = ZYNQ_UART_TX_RX_FIFO_FIFO(buf[0]);
- } else {
- ctx->transmitting = false;
- regs->irq_dis = ZYNQ_UART_TEMPTY;
- }
-#else
- ssize_t i;
-
- for (i = 0; i < len; ++i) {
- zynq_uart_write_polled(base, buf[i]);
- }
-#endif
-}
-
-static bool zynq_uart_set_attributes(
- rtems_termios_device_context *context,
- const struct termios *term
-)
-{
-#if 0
- volatile zynq_uart *regs = zynq_uart_get_regs(minor);
- uint32_t brgr = 0;
- uint32_t bauddiv = 0;
- int rc;
-
- rc = zynq_cal_baud_rate(115200, &brgr, &bauddiv, regs->mode);
- if (rc != 0)
- return rc;
-
- regs->control &= ~(ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN);
- regs->baud_rate_gen = ZYNQ_UART_BAUD_RATE_GEN_CD(brgr);
- regs->baud_rate_div = ZYNQ_UART_BAUD_RATE_DIV_BDIV(bauddiv);
- regs->control |= ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN;
-
- return true;
-#else
- return false;
-#endif
-}
-
-const rtems_termios_device_handler zynq_uart_handler = {
- .first_open = zynq_uart_first_open,
- .set_attributes = zynq_uart_set_attributes,
- .write = zynq_uart_write_support,
-#ifdef ZYNQ_CONSOLE_USE_INTERRUPTS
- .last_close = zynq_uart_last_close,
- .mode = TERMIOS_IRQ_DRIVEN
-#else
- .poll_read = zynq_uart_read_polled,
- .mode = TERMIOS_POLLED
-#endif
-};
-
-void zynq_uart_reset_tx_flush(zynq_uart_context *ctx)
-{
- volatile zynq_uart *regs = ctx->regs;
- int c = 4;
-
- while (c-- > 0)
- zynq_uart_write_polled(&ctx->base, '\r');
-
- while ((regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TEMPTY) == 0) {
- /* Wait */
- }
-}