Optimize k210 serial port driver for nuttx

This commit is contained in:
wgzAIIT 2022-11-28 17:39:30 +08:00
parent f1029b81c3
commit 4fd39c0dd7
17 changed files with 449 additions and 449 deletions

View File

@ -8,8 +8,8 @@ if ARCH_BOARD_EDU_RISCV64
menuconfig BSP_USING_CH376
bool "Using CH376 device"
default n
select K210_16550_UART
select K210_16550_UART3
select K210_UART
select K210_UART3
if BSP_USING_CH376
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
default n
menuconfig BSP_USING_CAN
select K210_16550_UART
select K210_16550_UART1
select K210_UART
select K210_UART1
bool "Using CAN device"
default n

View File

@ -40,7 +40,7 @@
#include <fcntl.h>
#include <termios.h>
#include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h"
#include "k210_uart.h"
#include "k210_fpioa.h"
#include "k210_gpiohs.h"
#include "k210_gpio_common.h"

View File

@ -95,7 +95,7 @@ int k210_bringup(void)
board_touch_initialize();
#endif
#ifdef CONFIG_K210_16550_UART1
#ifdef CONFIG_K210_UART1
#ifdef CONFIG_ADAPTER_ESP8285_WIFI
sysctl_clock_enable(SYSCTL_CLOCK_UART1);
sysctl_reset(SYSCTL_RESET_UART1);
@ -121,7 +121,7 @@ int k210_bringup(void)
#endif
#endif
#ifdef CONFIG_K210_16550_UART2
#ifdef CONFIG_K210_UART2
sysctl_clock_enable(SYSCTL_CLOCK_UART2);
sysctl_reset(SYSCTL_RESET_UART2);
@ -129,7 +129,7 @@ int k210_bringup(void)
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
#endif
#ifdef CONFIG_K210_16550_UART3
#ifdef CONFIG_K210_UART3
sysctl_clock_enable(SYSCTL_CLOCK_UART3);
sysctl_reset(SYSCTL_RESET_UART3);

View File

@ -36,7 +36,7 @@
#include <assert.h>
#include <fcntl.h>
#include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h"
#include "k210_uart.h"
#define ERR_USB_UNKNOWN 0xFA

View File

@ -8,8 +8,8 @@ if ARCH_BOARD_XIDATONG_RISCV64
menuconfig BSP_USING_CH376
bool "Using CH376 device"
default n
select K210_16550_UART
select K210_16550_UART3
select K210_UART
select K210_UART3
if BSP_USING_CH376
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
default n
menuconfig BSP_USING_CAN
select K210_16550_UART
select K210_16550_UART1
select K210_UART
select K210_UART1
bool "Using CAN device"
default n

View File

@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y
CONFIG_K210_16550_UART2=y
CONFIG_K210_16550_UART2_BASE=0x50220000
CONFIG_K210_16550_UART2_CLOCK=195000000
CONFIG_K210_16550_UART2_IRQ=39
CONFIG_K210_16550_UART2_BAUD=115200
CONFIG_K210_16550_UART2_PARITY=0
CONFIG_K210_16550_UART2_BITS=8
CONFIG_K210_16550_UART2_2STOP=0
CONFIG_K210_16550_UART2_RXBUFSIZE=128
CONFIG_K210_16550_UART2_TXBUFSIZE=128
CONFIG_K210_UART=y
CONFIG_K210_UART2=y
CONFIG_K210_UART2_BASE=0x50220000
CONFIG_K210_UART2_CLOCK=195000000
CONFIG_K210_UART2_IRQ=39
CONFIG_K210_UART2_BAUD=115200
CONFIG_K210_UART2_PARITY=0
CONFIG_K210_UART2_BITS=8
CONFIG_K210_UART2_2STOP=0
CONFIG_K210_UART2_RXBUFSIZE=128
CONFIG_K210_UART2_TXBUFSIZE=128
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
CONFIG_CONNECTION_ADAPTER_4G=y

View File

@ -58,16 +58,16 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y
CONFIG_K210_16550_UART1=y
CONFIG_K210_16550_UART1_BASE=0x50210000
CONFIG_K210_16550_UART1_CLOCK=195000000
CONFIG_K210_16550_UART1_IRQ=38
CONFIG_K210_16550_UART1_BAUD=115200
CONFIG_K210_16550_UART1_PARITY=0
CONFIG_K210_16550_UART1_BITS=8
CONFIG_K210_16550_UART1_2STOP=0
CONFIG_K210_16550_UART1_RXBUFSIZE=128
CONFIG_K210_16550_UART1_TXBUFSIZE=128
CONFIG_K210_UART=y
CONFIG_K210_UART1=y
CONFIG_K210_UART1_BASE=0x50210000
CONFIG_K210_UART1_CLOCK=195000000
CONFIG_K210_UART1_IRQ=38
CONFIG_K210_UART1_BAUD=115200
CONFIG_K210_UART1_PARITY=0
CONFIG_K210_UART1_BITS=8
CONFIG_K210_UART1_2STOP=0
CONFIG_K210_UART1_RXBUFSIZE=128
CONFIG_K210_UART1_TXBUFSIZE=128
CONFIG_BSP_USING_CAN=y
CONFIG_SERIAL_TERMIOS=y

View File

@ -58,6 +58,6 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y
CONFIG_K210_16550_UART3=y
CONFIG_K210_UART=y
CONFIG_K210_UART3=y
CONFIG_BSP_USING_TOUCH=y

View File

@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y
CONFIG_K210_16550_UART1=y
CONFIG_K210_16550_UART1_BASE=0x50210000
CONFIG_K210_16550_UART1_CLOCK=195000000
CONFIG_K210_16550_UART1_IRQ=38
CONFIG_K210_16550_UART1_BAUD=115200
CONFIG_K210_16550_UART1_PARITY=0
CONFIG_K210_16550_UART1_BITS=8
CONFIG_K210_16550_UART1_2STOP=0
CONFIG_K210_16550_UART1_RXBUFSIZE=128
CONFIG_K210_16550_UART1_TXBUFSIZE=128
CONFIG_K210_UART=y
CONFIG_K210_UART1=y
CONFIG_K210_UART1_BASE=0x50210000
CONFIG_K210_UART1_CLOCK=195000000
CONFIG_K210_UART1_IRQ=38
CONFIG_K210_UART1_BAUD=115200
CONFIG_K210_UART1_PARITY=0
CONFIG_K210_UART1_BITS=8
CONFIG_K210_UART1_2STOP=0
CONFIG_K210_UART1_RXBUFSIZE=128
CONFIG_K210_UART1_TXBUFSIZE=128
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
CONFIG_CONNECTION_ADAPTER_WIFI=y

View File

@ -40,7 +40,7 @@
#include <fcntl.h>
#include <termios.h>
#include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h"
#include "k210_uart.h"
#include "k210_fpioa.h"
#include "k210_gpiohs.h"
#include "k210_gpio_common.h"

View File

@ -95,7 +95,7 @@ int k210_bringup(void)
board_touch_initialize();
#endif
#ifdef CONFIG_K210_16550_UART1
#ifdef CONFIG_K210_UART1
#ifdef CONFIG_ADAPTER_ESP8285_WIFI
sysctl_clock_enable(SYSCTL_CLOCK_UART1);
sysctl_reset(SYSCTL_RESET_UART1);
@ -121,7 +121,7 @@ int k210_bringup(void)
#endif
#endif
#ifdef CONFIG_K210_16550_UART2
#ifdef CONFIG_K210_UART2
sysctl_clock_enable(SYSCTL_CLOCK_UART2);
sysctl_reset(SYSCTL_RESET_UART2);
@ -129,7 +129,7 @@ int k210_bringup(void)
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
#endif
#ifdef CONFIG_K210_16550_UART3
#ifdef CONFIG_K210_UART3
sysctl_clock_enable(SYSCTL_CLOCK_UART3);
sysctl_reset(SYSCTL_RESET_UART3);

View File

@ -36,7 +36,7 @@
#include <assert.h>
#include <fcntl.h>
#include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h"
#include "k210_uart.h"
#define ERR_USB_UNKNOWN 0xFA

View File

@ -40,13 +40,13 @@ config K210_LCD_BACKLIGHT
endmenu
menuconfig K210_16550_UART
bool "K210 16550 UART Chip support"
menuconfig K210_UART
bool "K210 UART Chip support"
select ARCH_HAVE_SERIAL_TERMIOS
default n
if K210_16550_UART
config K210_16550_SERIAL_DISABLE_REORDERING
if K210_UART
config K210_SERIAL_DISABLE_REORDERING
bool "Disable reordering of ttySx devices."
default n
---help---
@ -54,227 +54,227 @@ if K210_16550_UART
console is always on /dev/ttyS0. If more than one UART is in use this
can, however, have the side-effect that all port mappings
(hardware USART1 -> /dev/ttyS0) change if the console is moved to another
UART. This option disables that re-ordering for 16550 UARTs.
UART. This option disables that re-ordering for UARTs.
config K210_16550_UART1
bool "K210 16550 UART1"
config K210_UART1
bool "K210 UART1"
default n
if K210_16550_UART1
if K210_UART1
config K210_16550_UART1_BASE
hex "K210 16550 UART1 base address"
config K210_UART1_BASE
hex "K210 UART1 base address"
default 0x50210000
config K210_16550_UART1_CLOCK
int "K210 16550 UART1 clock"
config K210_UART1_CLOCK
int "K210 UART1 clock"
default 195000000
config K210_16550_UART1_IRQ
int "K210 16550 UART1 IRQ number"
config K210_UART1_IRQ
int "K210 UART1 IRQ number"
default 38
config K210_16550_UART1_BAUD
int "K210 16550 UART1 BAUD"
config K210_UART1_BAUD
int "K210 UART1 BAUD"
default 115200
config K210_16550_UART1_PARITY
int "K210 16550 UART1 parity"
config K210_UART1_PARITY
int "K210 UART1 parity"
default 0
range 0 2
---help---
K210 16550 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
K210 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
config K210_16550_UART1_BITS
int "K210 16550 UART1 number of bits"
config K210_UART1_BITS
int "K210 UART1 number of bits"
default 8
---help---
K210 16550 UART1 number of bits. Default: 8
K210 UART1 number of bits. Default: 8
config K210_16550_UART1_2STOP
int "K210 16550 UART1 two stop bits"
config K210_UART1_2STOP
int "K210 UART1 two stop bits"
default 0
---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART1_RXBUFSIZE
int "K210 16550 UART1 Rx buffer size"
config K210_UART1_RXBUFSIZE
int "K210 UART1 Rx buffer size"
default 256
---help---
K210 16550 UART1 Rx buffer size. Default: 128
K210 UART1 Rx buffer size. Default: 128
config K210_16550_UART1_TXBUFSIZE
int "K210 16550 UART1 Tx buffer size"
config K210_UART1_TXBUFSIZE
int "K210 UART1 Tx buffer size"
default 256
---help---
K210 16550 UART1 Tx buffer size. Default: 128
K210 UART1 Tx buffer size. Default: 128
config K210_16550_UART1_IFLOWCONTROL
bool "K210 16550 UART1 RTS flow control"
config K210_UART1_IFLOWCONTROL
bool "K210 UART1 RTS flow control"
default n
select SERIAL_IFLOWCONTROL
---help---
Enable K210 16550 UART1 RTS flow control
Enable K210 UART1 RTS flow control
config K210_16550_UART1_OFLOWCONTROL
bool "K210 16550 UART1 CTS flow control"
config K210_UART1_OFLOWCONTROL
bool "K210 UART1 CTS flow control"
default n
select SERIAL_OFLOWCONTROL
---help---
Enable K210 16550 UART1 CTS flow control
Enable K210 UART1 CTS flow control
endif # K210_16550_UART1
endif # K210_UART1
config K210_16550_UART2
bool "K210 16550 UART2"
config K210_UART2
bool "K210 UART2"
default n
if K210_16550_UART2
if K210_UART2
config K210_16550_UART2_BASE
hex "K210 16550 UART2 base address"
config K210_UART2_BASE
hex "K210 UART2 base address"
default 0x50220000
config K210_16550_UART2_CLOCK
int "K210 16550 UART2 clock"
config K210_UART2_CLOCK
int "K210 UART2 clock"
default 195000000
config K210_16550_UART2_IRQ
int "K210 16550 UART2 IRQ number"
config K210_UART2_IRQ
int "K210 UART2 IRQ number"
default 39
config K210_16550_UART2_BAUD
int "K210 16550 UART2 BAUD"
config K210_UART2_BAUD
int "K210 UART2 BAUD"
default 115200
config K210_16550_UART2_PARITY
int "K210 16550 UART2 parity"
config K210_UART2_PARITY
int "K210 UART2 parity"
default 0
range 0 2
---help---
K210 16550 UART2 parity. 0=None, 1=Odd, 2=Even. Default: None
K210 UART2 parity. 0=None, 1=Odd, 2=Even. Default: None
config K210_16550_UART2_BITS
int "K210 16550 UART2 number of bits"
config K210_UART2_BITS
int "K210 UART2 number of bits"
default 8
---help---
K210 16550 UART2 number of bits. Default: 8
K210 UART2 number of bits. Default: 8
config K210_16550_UART2_2STOP
int "K210 16550 UART2 two stop bits"
config K210_UART2_2STOP
int "K210 UART2 two stop bits"
default 0
---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART2_RXBUFSIZE
int "K210 16550 UART2 Rx buffer size"
config K210_UART2_RXBUFSIZE
int "K210 UART2 Rx buffer size"
default 256
---help---
K210 16550 UART2 Rx buffer size. Default: 128
K210 UART2 Rx buffer size. Default: 128
config K210_16550_UART2_TXBUFSIZE
int "K210 16550 UART2 Tx buffer size"
config K210_UART2_TXBUFSIZE
int "K210 UART2 Tx buffer size"
default 256
---help---
K210 16550 UART2 Tx buffer size. Default: 128
K210 UART2 Tx buffer size. Default: 128
config K210_16550_UART2_IFLOWCONTROL
bool "K210 16550 UART2 RTS flow control"
config K210_UART2_IFLOWCONTROL
bool "K210 UART2 RTS flow control"
default n
select SERIAL_IFLOWCONTROL
---help---
Enable K210 16550 UART2 RTS flow control
Enable K210 UART2 RTS flow control
config K210_16550_UART2_OFLOWCONTROL
bool "K210 16550 UART2 CTS flow control"
config K210_UART2_OFLOWCONTROL
bool "K210 UART2 CTS flow control"
default n
select SERIAL_OFLOWCONTROL
---help---
Enable K210 16550 UART2 CTS flow control
Enable K210 UART2 CTS flow control
endif # K210_16550_UART2
endif # K210_UART2
config K210_16550_UART3
bool "K210 16550 UART3"
config K210_UART3
bool "K210 UART3"
default n
if K210_16550_UART3
if K210_UART3
config K210_16550_UART3_BASE
hex "K210 16550 UART3 base address"
config K210_UART3_BASE
hex "K210 UART3 base address"
default 0x50230000
config K210_16550_UART3_CLOCK
int "K210 16550 UART3 clock"
config K210_UART3_CLOCK
int "K210 UART3 clock"
default 195000000
config K210_16550_UART3_IRQ
int "K210 16550 UART3 IRQ number"
config K210_UART3_IRQ
int "K210 UART3 IRQ number"
default 40
config K210_16550_UART3_BAUD
int "K210 16550 UART3 BAUD"
config K210_UART3_BAUD
int "K210 UART3 BAUD"
default 115200
config K210_16550_UART3_PARITY
int "K210 16550 UART3 parity"
config K210_UART3_PARITY
int "K210 UART3 parity"
default 0
range 0 2
---help---
K210 16550 UART3 parity. 0=None, 1=Odd, 2=Even. Default: None
K210 UART3 parity. 0=None, 1=Odd, 2=Even. Default: None
config K210_16550_UART3_BITS
int "K210 16550 UART3 number of bits"
config K210_UART3_BITS
int "K210 UART3 number of bits"
default 8
---help---
K210 16550 UART3 number of bits. Default: 8
K210 UART3 number of bits. Default: 8
config K210_16550_UART3_2STOP
int "K210 16550 UART3 two stop bits"
config K210_UART3_2STOP
int "K210 UART3 two stop bits"
default 0
---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART3_RXBUFSIZE
int "K210 16550 UART3 Rx buffer size"
config K210_UART3_RXBUFSIZE
int "K210 UART3 Rx buffer size"
default 256
---help---
K210 16550 UART3 Rx buffer size. Default: 128
K210 UART3 Rx buffer size. Default: 128
config K210_16550_UART3_TXBUFSIZE
int "K210 16550 UART3 Tx buffer size"
config K210_UART3_TXBUFSIZE
int "K210 UART3 Tx buffer size"
default 256
---help---
K210 16550 UART3 Tx buffer size. Default: 128
K210 UART3 Tx buffer size. Default: 128
config K210_16550_UART3_IFLOWCONTROL
bool "K210 16550 UART3 RTS flow control"
config K210_UART3_IFLOWCONTROL
bool "K210 UART3 RTS flow control"
default n
select SERIAL_IFLOWCONTROL
---help---
Enable K210 16550 UART3 RTS flow control
Enable K210 UART3 RTS flow control
config K210_16550_UART3_OFLOWCONTROL
bool "K210 16550 UART3 CTS flow control"
config K210_UART3_OFLOWCONTROL
bool "K210 UART3 CTS flow control"
default n
select SERIAL_OFLOWCONTROL
---help---
Enable K210 16550 UART3 CTS flow control
Enable K210 UART3 CTS flow control
endif # K210_16550_UART3
endif # K210_UART3
config K210_16550_SUPRESS_CONFIG
bool "Suppress K210 16550 configuration"
config K210_UART_SUPRESS_CONFIG
bool "Suppress K210 configuration"
default n
config K210_16550_SUPRESS_INITIAL_CONFIG
bool "Suppress initial K210 16550 configuration"
depends on !K210_16550_SUPRESS_CONFIG
config K210_UART_SUPRESS_INITIAL_CONFIG
bool "Suppress initial K210 configuration"
depends on !K210_UART_SUPRESS_CONFIG
default y
---help---
This option is useful, for example, if you are using a bootloader
that configures the K210_16550_UART. In that case, you may want to
that configures the K210_UART. In that case, you may want to
just leave the existing console configuration in place. Default: n
config SERIAL_UART_ARCH_MMIO
@ -285,21 +285,21 @@ if K210_16550_UART
bool "Platform has own custom IOCTL"
default n
config K210_16550_REGINCR
int "Address increment between K210 16550 registers"
config K210_UART_REGINCR
int "Address increment between K210 registers"
default 4
---help---
The address increment between K210 16550 registers. Options are 1, 2, or 4.
The address increment between K210 registers. Options are 1, 2, or 4.
Default: 1
config K210_16550_REGWIDTH
int "Bit width of K210 16550 registers"
config K210_UART_REGWIDTH
int "Bit width of K210 registers"
default 32
---help---
The bit width of registers. Options are 8, 16, or 32. Default: 32
config K210_16550_ADDRWIDTH
int "Address width of K210 16550 registers"
config K210_UART_ADDRWIDTH
int "Address width of K210 registers"
default 32
---help---
The bit width of registers. Options are 0, 8, 16, or 32.

View File

@ -57,7 +57,7 @@ CHIP_CSRCS = k210_allocateheap.c k210_clockconfig.c
CHIP_CSRCS += k210_irq.c k210_irq_dispatch.c k210_systemreset.c
CHIP_CSRCS += k210_lowputc.c k210_serial.c k210_fpioa.c fpioa.c
CHIP_CSRCS += k210_start.c k210_timerisr.c k210_gpiohs.c k210_gpio.c
CHIP_CSRCS += k210_sysctl.c k210_uart_16550.c
CHIP_CSRCS += k210_sysctl.c k210_uart.c
ifeq ($(CONFIG_BUILD_PROTECTED),y)
CMN_CSRCS += riscv_task_start.c riscv_pthread_start.c

View File

@ -52,7 +52,7 @@
#include "k210_config.h"
#include "chip.h"
#include "k210.h"
#include "k210_uart_16550.h"
#include "k210_uart.h"
/****************************************************************************
* Pre-processor Definitions
@ -649,9 +649,9 @@ void riscv_serialinit(void)
/* Register all UARTs */
uart_register("/dev/ttyS0", &TTYS0_DEV);
#ifdef CONFIG_K210_16550_UART
#ifdef CONFIG_K210_UART
/* Register UART1-UART3 */
k210_uart_16550_register();
k210_uart_register();
#endif
}

View File

@ -11,7 +11,7 @@
*/
/**
* @file k210_uart_16550.c
* @file k210_uart.c
* @brief k210 uart1-uart3 support
* @version 1.0
* @author AIIT XUOS Lab
@ -37,13 +37,13 @@
#include <nuttx/arch.h>
#include <nuttx/serial/serial.h>
#include <nuttx/fs/ioctl.h>
#include "k210_uart_16550.h"
#include "k210_uart.h"
#ifdef CONFIG_SERIAL_TERMIOS
# include <termios.h>
#endif
#ifdef CONFIG_K210_16550_UART
#ifdef CONFIG_K210_UART
/****************************************************************************
@ -58,31 +58,31 @@
* Private Function Prototypes
****************************************************************************/
static int k210_16550_setup(FAR struct uart_dev_s *dev);
static void k210_16550_shutdown(FAR struct uart_dev_s *dev);
static int k210_16550_attach(FAR struct uart_dev_s *dev);
static void k210_16550_detach(FAR struct uart_dev_s *dev);
static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg);
static int k210_16550_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
static int k210_16550_receive(FAR struct uart_dev_s *dev, unsigned int *status);
static void k210_16550_rxint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_16550_rxavailable(FAR struct uart_dev_s *dev);
static int k210_uart_setup(FAR struct uart_dev_s *dev);
static void k210_uart_shutdown(FAR struct uart_dev_s *dev);
static int k210_uart_attach(FAR struct uart_dev_s *dev);
static void k210_uart_detach(FAR struct uart_dev_s *dev);
static int k210_uart_interrupt(int irq, FAR void *context, FAR void *arg);
static int k210_uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
static int k210_uart_receive(FAR struct uart_dev_s *dev, unsigned int *status);
static void k210_uart_rxint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_uart_rxavailable(FAR struct uart_dev_s *dev);
#ifdef CONFIG_SERIAL_IFLOWCONTROL
static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
static bool k210_uart_rxflowcontrol(struct uart_dev_s *dev,
unsigned int nbuffered, bool upper);
#endif
#ifdef CONFIG_SERIAL_TXDMA
static void k210_16550_dmasend(FAR struct uart_dev_s *dev);
static void k210_16550_dmatxavail(FAR struct uart_dev_s *dev);
static void k210_uart_dmasend(FAR struct uart_dev_s *dev);
static void k210_uart_dmatxavail(FAR struct uart_dev_s *dev);
#endif
#ifdef CONFIG_SERIAL_RXDMA
static void k210_16550_dmareceive(FAR struct uart_dev_s *dev);
static void k210_16550_dmarxfree(FAR struct uart_dev_s *dev);
static void k210_uart_dmareceive(FAR struct uart_dev_s *dev);
static void k210_uart_dmarxfree(FAR struct uart_dev_s *dev);
#endif
static void k210_16550_send(FAR struct uart_dev_s *dev, int ch);
static void k210_16550_txint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_16550_txready(FAR struct uart_dev_s *dev);
static bool k210_16550_txempty(FAR struct uart_dev_s *dev);
static void k210_uart_send(FAR struct uart_dev_s *dev, int ch);
static void k210_uart_txint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_uart_txready(FAR struct uart_dev_s *dev);
static bool k210_uart_txempty(FAR struct uart_dev_s *dev);
/****************************************************************************
* Private Data
@ -90,64 +90,64 @@ static bool k210_16550_txempty(FAR struct uart_dev_s *dev);
static const struct uart_ops_s g_uart_ops =
{
.setup = k210_16550_setup,
.shutdown = k210_16550_shutdown,
.attach = k210_16550_attach,
.detach = k210_16550_detach,
.ioctl = k210_16550_ioctl,
.receive = k210_16550_receive,
.rxint = k210_16550_rxint,
.rxavailable = k210_16550_rxavailable,
.setup = k210_uart_setup,
.shutdown = k210_uart_shutdown,
.attach = k210_uart_attach,
.detach = k210_uart_detach,
.ioctl = k210_uart_ioctl,
.receive = k210_uart_receive,
.rxint = k210_uart_rxint,
.rxavailable = k210_uart_rxavailable,
#ifdef CONFIG_SERIAL_IFLOWCONTROL
.rxflowcontrol = k210_16550_rxflowcontrol,
.rxflowcontrol = k210_uart_rxflowcontrol,
#endif
#ifdef CONFIG_SERIAL_TXDMA
.dmasend = k210_16550_dmasend,
.dmasend = k210_uart_dmasend,
#endif
#ifdef CONFIG_SERIAL_RXDMA
.dmareceive = k210_16550_dmareceive,
.dmarxfree = k210_16550_dmarxfree,
.dmareceive = k210_uart_dmareceive,
.dmarxfree = k210_uart_dmarxfree,
#endif
#ifdef CONFIG_SERIAL_TXDMA
.dmatxavail = k210_16550_dmatxavail,
.dmatxavail = k210_uart_dmatxavail,
#endif
.send = k210_16550_send,
.txint = k210_16550_txint,
.txready = k210_16550_txready,
.txempty = k210_16550_txempty,
.send = k210_uart_send,
.txint = k210_uart_txint,
.txready = k210_uart_txready,
.txempty = k210_uart_txempty,
};
/* I/O buffers */
#ifdef CONFIG_K210_16550_UART1
static char g_uart1rxbuffer[CONFIG_K210_16550_UART1_RXBUFSIZE];
static char g_uart1txbuffer[CONFIG_K210_16550_UART1_TXBUFSIZE];
#ifdef CONFIG_K210_UART1
static char g_uart1rxbuffer[CONFIG_K210_UART1_RXBUFSIZE];
static char g_uart1txbuffer[CONFIG_K210_UART1_TXBUFSIZE];
#endif
#ifdef CONFIG_K210_16550_UART2
static char g_uart2rxbuffer[CONFIG_K210_16550_UART2_RXBUFSIZE];
static char g_uart2txbuffer[CONFIG_K210_16550_UART2_TXBUFSIZE];
#ifdef CONFIG_K210_UART2
static char g_uart2rxbuffer[CONFIG_K210_UART2_RXBUFSIZE];
static char g_uart2txbuffer[CONFIG_K210_UART2_TXBUFSIZE];
#endif
#ifdef CONFIG_K210_16550_UART3
static char g_uart3rxbuffer[CONFIG_K210_16550_UART3_RXBUFSIZE];
static char g_uart3txbuffer[CONFIG_K210_16550_UART3_TXBUFSIZE];
#ifdef CONFIG_K210_UART3
static char g_uart3rxbuffer[CONFIG_K210_UART3_RXBUFSIZE];
static char g_uart3txbuffer[CONFIG_K210_UART3_TXBUFSIZE];
#endif
/* This describes the state of the 16550 uart1 port. */
/* This describes the state of the uart1 port. */
#ifdef CONFIG_K210_16550_UART1
static struct k210_16550_s g_uart1priv =
#ifdef CONFIG_K210_UART1
static struct k210_uart_s g_uart1priv =
{
.uartbase = CONFIG_K210_16550_UART1_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART1_BAUD,
.uartclk = CONFIG_K210_16550_UART1_CLOCK,
.uartbase = CONFIG_K210_UART1_BASE,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_UART1_BAUD,
.uartclk = CONFIG_K210_UART1_CLOCK,
#endif
.irq = CONFIG_K210_16550_UART1_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART1_PARITY,
.bits = CONFIG_K210_16550_UART1_BITS,
.stopbits2 = CONFIG_K210_16550_UART1_2STOP,
#if defined(CONFIG_K210_16550_UART1_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART1_OFLOWCONTROL)
.irq = CONFIG_K210_UART1_IRQ,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_UART1_PARITY,
.bits = CONFIG_K210_UART1_BITS,
.stopbits2 = CONFIG_K210_UART1_2STOP,
#if defined(CONFIG_K210_UART1_IFLOWCONTROL) || defined(CONFIG_K210_UART1_OFLOWCONTROL)
.flow = true,
#endif
#endif
@ -157,12 +157,12 @@ static uart_dev_t g_uart1port =
{
.recv =
{
.size = CONFIG_K210_16550_UART1_RXBUFSIZE,
.size = CONFIG_K210_UART1_RXBUFSIZE,
.buffer = g_uart1rxbuffer,
},
.xmit =
{
.size = CONFIG_K210_16550_UART1_TXBUFSIZE,
.size = CONFIG_K210_UART1_TXBUFSIZE,
.buffer = g_uart1txbuffer,
},
.ops = &g_uart_ops,
@ -170,22 +170,22 @@ static uart_dev_t g_uart1port =
};
#endif
/* This describes the state of the 16550 uart2 port. */
/* This describes the state of the uart2 port. */
#ifdef CONFIG_K210_16550_UART2
static struct k210_16550_s g_uart2priv =
#ifdef CONFIG_K210_UART2
static struct k210_uart_s g_uart2priv =
{
.uartbase = CONFIG_K210_16550_UART2_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART2_BAUD,
.uartclk = CONFIG_K210_16550_UART2_CLOCK,
.uartbase = CONFIG_K210_UART2_BASE,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_UART2_BAUD,
.uartclk = CONFIG_K210_UART2_CLOCK,
#endif
.irq = CONFIG_K210_16550_UART2_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART2_PARITY,
.bits = CONFIG_K210_16550_UART2_BITS,
.stopbits2 = CONFIG_K210_16550_UART2_2STOP,
#if defined(CONFIG_K210_16550_UART2_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART2_OFLOWCONTROL)
.irq = CONFIG_K210_UART2_IRQ,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_UART2_PARITY,
.bits = CONFIG_K210_UART2_BITS,
.stopbits2 = CONFIG_K210_UART2_2STOP,
#if defined(CONFIG_K210_UART2_IFLOWCONTROL) || defined(CONFIG_K210_UART2_OFLOWCONTROL)
.flow = true,
#endif
#endif
@ -195,12 +195,12 @@ static uart_dev_t g_uart2port =
{
.recv =
{
.size = CONFIG_K210_16550_UART2_RXBUFSIZE,
.size = CONFIG_K210_UART2_RXBUFSIZE,
.buffer = g_uart2rxbuffer,
},
.xmit =
{
.size = CONFIG_K210_16550_UART2_TXBUFSIZE,
.size = CONFIG_K210_UART2_TXBUFSIZE,
.buffer = g_uart2txbuffer,
},
.ops = &g_uart_ops,
@ -209,22 +209,22 @@ static uart_dev_t g_uart2port =
#endif
/* This describes the state of the 16550 uart1 port. */
/* This describes the state of the uart1 port. */
#ifdef CONFIG_K210_16550_UART3
static struct k210_16550_s g_uart3priv =
#ifdef CONFIG_K210_UART3
static struct k210_uart_s g_uart3priv =
{
.uartbase = CONFIG_K210_16550_UART3_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART3_BAUD,
.uartclk = CONFIG_K210_16550_UART3_CLOCK,
.uartbase = CONFIG_K210_UART3_BASE,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_UART3_BAUD,
.uartclk = CONFIG_K210_UART3_CLOCK,
#endif
.irq = CONFIG_K210_16550_UART3_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART3_PARITY,
.bits = CONFIG_K210_16550_UART3_BITS,
.stopbits2 = CONFIG_K210_16550_UART3_2STOP,
#if defined(CONFIG_K210_16550_UART3_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART3_OFLOWCONTROL)
.irq = CONFIG_K210_UART3_IRQ,
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_UART3_PARITY,
.bits = CONFIG_K210_UART3_BITS,
.stopbits2 = CONFIG_K210_UART3_2STOP,
#if defined(CONFIG_K210_UART3_IFLOWCONTROL) || defined(CONFIG_K210_UART3_OFLOWCONTROL)
.flow = true,
#endif
#endif
@ -234,12 +234,12 @@ static uart_dev_t g_uart3port =
{
.recv =
{
.size = CONFIG_K210_16550_UART3_RXBUFSIZE,
.size = CONFIG_K210_UART3_RXBUFSIZE,
.buffer = g_uart3rxbuffer,
},
.xmit =
{
.size = CONFIG_K210_16550_UART3_TXBUFSIZE,
.size = CONFIG_K210_UART3_TXBUFSIZE,
.buffer = g_uart3txbuffer,
},
.ops = &g_uart_ops,
@ -253,10 +253,10 @@ static uart_dev_t g_uart3port =
****************************************************************************/
/****************************************************************************
* Name: k210_16550_serialin
* Name: k210_uart_serialin
****************************************************************************/
static inline uart_datawidth_t k210_16550_serialin(FAR struct k210_16550_s *priv,
static inline uart_datawidth_t k210_uart_serialin(FAR struct k210_uart_s *priv,
int offset)
{
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO
@ -267,10 +267,10 @@ static inline uart_datawidth_t k210_16550_serialin(FAR struct k210_16550_s *priv
}
/****************************************************************************
* Name: k210_16550_serialout
* Name: k210_uart_serialout
****************************************************************************/
static inline void k210_16550_serialout(FAR struct k210_16550_s *priv, int offset,
static inline void k210_uart_serialout(FAR struct k210_uart_s *priv, int offset,
uart_datawidth_t value)
{
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO
@ -281,10 +281,10 @@ static inline void k210_16550_serialout(FAR struct k210_16550_s *priv, int offse
}
/****************************************************************************
* Name: k210_16550_disableuartint
* Name: k210_uart_disableuartint
****************************************************************************/
static inline void k210_16550_disableuartint(FAR struct k210_16550_s *priv,
static inline void k210_uart_disableuartint(FAR struct k210_uart_s *priv,
FAR uart_datawidth_t *ier)
{
if (ier)
@ -293,28 +293,28 @@ static inline void k210_16550_disableuartint(FAR struct k210_16550_s *priv,
}
priv->ier &= ~UART_IER_ALLIE;
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
}
/****************************************************************************
* Name: k210_16550_restoreuartint
* Name: k210_uart_restoreuartint
****************************************************************************/
static inline void k210_16550_restoreuartint(FAR struct k210_16550_s *priv,
static inline void k210_uart_restoreuartint(FAR struct k210_uart_s *priv,
uint32_t ier)
{
priv->ier |= ier & UART_IER_ALLIE;
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
}
/****************************************************************************
* Name: k210_16550_enablebreaks
* Name: k210_uart_enablebreaks
****************************************************************************/
static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
static inline void k210_uart_enablebreaks(FAR struct k210_uart_s *priv,
bool enable)
{
uint32_t lcr = k210_16550_serialin(priv, UART_LCR_OFFSET);
uint32_t lcr = k210_uart_serialin(priv, UART_LCR_OFFSET);
if (enable)
{
@ -325,11 +325,11 @@ static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
lcr &= ~UART_LCR_BRK;
}
k210_16550_serialout(priv, UART_LCR_OFFSET, lcr);
k210_uart_serialout(priv, UART_LCR_OFFSET, lcr);
}
/****************************************************************************
* Name: k210_16550_divisor
* Name: k210_uart_divisor
*
* Description:
* Select a divider to produce the BAUD from the UART_CLK.
@ -341,8 +341,8 @@ static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
*
****************************************************************************/
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
static inline uint32_t k210_uart_divisor(FAR struct k210_uart_s *priv)
{
return (priv->uartclk / (uint32_t)priv->baud);
// return (priv->uartclk + (priv->baud << 3)) / (priv->baud << 4);
@ -350,7 +350,7 @@ static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
#endif
/****************************************************************************
* Name: k210_16550_setup
* Name: k210_uart_setup
*
* Description:
* Configure the UART baud, bits, parity, fifos, etc. This
@ -359,10 +359,10 @@ static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
*
****************************************************************************/
static int k210_16550_setup(FAR struct uart_dev_s *dev)
static int k210_uart_setup(FAR struct uart_dev_s *dev)
{
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
uint16_t div;
uint8_t dlh, dll, dlf;
uint32_t lcr;
@ -372,17 +372,17 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
/* Clear fifos */
k210_16550_serialout(priv, UART_FCR_OFFSET,
k210_uart_serialout(priv, UART_FCR_OFFSET,
(UART_FCR_RXRST | UART_FCR_TXRST));
/* Set trigger */
k210_16550_serialout(priv, UART_FCR_OFFSET,
k210_uart_serialout(priv, UART_FCR_OFFSET,
(UART_FCR_FIFOEN | UART_FCR_RXTRIGGER_8));
/* Set up the IER */
priv->ier = k210_16550_serialin(priv, UART_IER_OFFSET);
priv->ier = k210_uart_serialin(priv, UART_IER_OFFSET);
/* Set up the LCR */
@ -423,33 +423,33 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
/* Enter DLAB=1 */
k210_16550_serialout(priv, UART_LCR_OFFSET, (lcr | UART_LCR_DLAB));
k210_uart_serialout(priv, UART_LCR_OFFSET, (lcr | UART_LCR_DLAB));
/* Set the BAUD divisor */
div = k210_16550_divisor(priv);
div = k210_uart_divisor(priv);
dlh = div >> 12;
dll = (div - (dlh << 12)) / 16;
dlf = div - (dlh << 12) - dll * 16;
k210_16550_serialout(priv, UART_DLM_OFFSET, dlh);
k210_16550_serialout(priv, UART_DLL_OFFSET, dll);
k210_16550_serialout(priv, UART_DLF_OFFSET, dlf);
k210_uart_serialout(priv, UART_DLM_OFFSET, dlh);
k210_uart_serialout(priv, UART_DLL_OFFSET, dll);
k210_uart_serialout(priv, UART_DLF_OFFSET, dlf);
/* Clear DLAB */
k210_16550_serialout(priv, UART_LCR_OFFSET, lcr);
k210_uart_serialout(priv, UART_LCR_OFFSET, lcr);
/* Configure the FIFOs */
k210_16550_serialout(priv, UART_FCR_OFFSET,
k210_uart_serialout(priv, UART_FCR_OFFSET,
(UART_FCR_RXTRIGGER_8 | UART_FCR_TXRST | UART_FCR_RXRST |
UART_FCR_FIFOEN));
/* Set up the auto flow control */
#if defined(CONFIG_SERIAL_IFLOWCONTROL) || defined(CONFIG_SERIAL_OFLOWCONTROL)
mcr = k210_16550_serialin(priv, UART_MCR_OFFSET);
mcr = k210_uart_serialin(priv, UART_MCR_OFFSET);
if (priv->flow)
{
mcr |= UART_MCR_AFCE;
@ -461,9 +461,9 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
mcr |= UART_MCR_RTS;
k210_16550_serialout(priv, UART_MCR_OFFSET, mcr);
k210_uart_serialout(priv, UART_MCR_OFFSET, mcr);
k210_16550_serialout(priv, UART_SRT_OFFSET, 0x0);
k210_uart_serialout(priv, UART_SRT_OFFSET, 0x0);
#endif /* defined(CONFIG_SERIAL_IFLOWCONTROL) || defined(CONFIG_SERIAL_OFLOWCONTROL) */
@ -472,7 +472,7 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
}
/****************************************************************************
* Name: k210_16550_shutdown
* Name: k210_uart_shutdown
*
* Description:
* Disable the UART. This method is called when the serial
@ -480,14 +480,14 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
*
****************************************************************************/
static void k210_16550_shutdown(struct uart_dev_s *dev)
static void k210_uart_shutdown(struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
k210_16550_disableuartint(priv, NULL);
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
k210_uart_disableuartint(priv, NULL);
}
/****************************************************************************
* Name: k210_16550_attach
* Name: k210_uart_attach
*
* Description:
* Configure the UART to operation in interrupt driven mode. This method
@ -502,14 +502,14 @@ static void k210_16550_shutdown(struct uart_dev_s *dev)
*
****************************************************************************/
static int k210_16550_attach(struct uart_dev_s *dev)
static int k210_uart_attach(struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
int ret;
/* Attach and enable the IRQ */
ret = irq_attach(priv->irq, k210_16550_interrupt, dev);
ret = irq_attach(priv->irq, k210_uart_interrupt, dev);
#ifndef CONFIG_ARCH_NOINTC
if (ret == OK)
{
@ -525,7 +525,7 @@ static int k210_16550_attach(struct uart_dev_s *dev)
}
/****************************************************************************
* Name: k210_16550_detach
* Name: k210_uart_detach
*
* Description:
* Detach UART interrupts. This method is called when the serial port is
@ -534,36 +534,36 @@ static int k210_16550_attach(struct uart_dev_s *dev)
*
****************************************************************************/
static void k210_16550_detach(FAR struct uart_dev_s *dev)
static void k210_uart_detach(FAR struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
up_disable_irq(priv->irq);
irq_detach(priv->irq);
}
/****************************************************************************
* Name: k210_16550_interrupt
* Name: k210_uart_interrupt
*
* Description:
* This is the UART interrupt handler. It will be invoked when an
* interrupt received on the 'irq' It should call uart_transmitchars or
* uart_receivechar to perform the appropriate data transfers. The
* interrupt handling logic must be able to map the 'irq' number into the
* appropriate k210_16550_s structure in order to call these functions.
* appropriate k210_uart_s structure in order to call these functions.
*
****************************************************************************/
static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
static int k210_uart_interrupt(int irq, FAR void *context, FAR void *arg)
{
FAR struct uart_dev_s *dev = (struct uart_dev_s *)arg;
FAR struct k210_16550_s *priv;
FAR struct k210_uart_s *priv;
uint32_t status;
int passes;
uint8_t v_int_status;
DEBUGASSERT(dev != NULL && dev->priv != NULL);
priv = (FAR struct k210_16550_s *)dev->priv;
priv = (FAR struct k210_uart_s *)dev->priv;
/* Loop until there are no characters to be transferred or,
* until we have been looping for a long time.
@ -575,7 +575,7 @@ static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
* termination conditions
*/
status = k210_16550_serialin(priv, UART_IIR_OFFSET);
status = k210_uart_serialin(priv, UART_IIR_OFFSET);
if (status == 0)
{
@ -603,18 +603,18 @@ static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
}
/****************************************************************************
* Name: k210_16550_ioctl
* Name: k210_uart_ioctl
*
* Description:
* All ioctl calls will be routed through this method
*
****************************************************************************/
static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
static int k210_uart_ioctl(struct file *filep, int cmd, unsigned long arg)
{
FAR struct inode *inode = filep->f_inode;
FAR struct uart_dev_s *dev = inode->i_private;
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
int ret;
#ifdef CONFIG_SERIAL_UART_ARCH_IOCTL
@ -634,14 +634,14 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
#ifdef CONFIG_SERIAL_TIOCSERGSTRUCT
case TIOCSERGSTRUCT:
{
FAR struct k210_16550_s *user = (FAR struct k210_16550_s *)arg;
FAR struct k210_uart_s *user = (FAR struct k210_uart_s *)arg;
if (!user)
{
ret = -EINVAL;
}
else
{
memcpy(user, dev, sizeof(struct k210_16550_s));
memcpy(user, dev, sizeof(struct k210_uart_s));
}
}
break;
@ -650,7 +650,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
case TIOCSBRK: /* BSD compatibility: Turn break on, unconditionally */
{
irqstate_t flags = enter_critical_section();
k210_16550_enablebreaks(priv, true);
k210_uart_enablebreaks(priv, true);
leave_critical_section(flags);
}
break;
@ -659,12 +659,12 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
{
irqstate_t flags;
flags = enter_critical_section();
k210_16550_enablebreaks(priv, false);
k210_uart_enablebreaks(priv, false);
leave_critical_section(flags);
}
break;
#if defined(CONFIG_SERIAL_TERMIOS) && !defined(CONFIG_K210_16550_SUPRESS_CONFIG)
#if defined(CONFIG_SERIAL_TERMIOS) && !defined(CONFIG_K210_UART_SUPRESS_CONFIG)
case TCGETS:
{
FAR struct termios *termiosp = (FAR struct termios *)arg;
@ -758,7 +758,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
priv->flow = (termiosp->c_cflag & CRTSCTS) != 0;
#endif
k210_16550_setup(dev);
k210_uart_setup(dev);
leave_critical_section(flags);
}
break;
@ -773,7 +773,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
}
/****************************************************************************
* Name: k210_16550_receive
* Name: k210_uart_receive
*
* Description:
* Called (usually) from the interrupt level to receive one
@ -782,26 +782,26 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
*
****************************************************************************/
static int k210_16550_receive(struct uart_dev_s *dev, unsigned int *status)
static int k210_uart_receive(struct uart_dev_s *dev, unsigned int *status)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
uint32_t rbr = 0;
*status = k210_16550_serialin(priv, UART_LSR_OFFSET);
rbr = k210_16550_serialin(priv, UART_RBR_OFFSET);
*status = k210_uart_serialin(priv, UART_LSR_OFFSET);
rbr = k210_uart_serialin(priv, UART_RBR_OFFSET);
return rbr;
}
/****************************************************************************
* Name: k210_16550_rxint
* Name: k210_uart_rxint
*
* Description:
* Call to enable or disable RX interrupts
*
****************************************************************************/
static void k210_16550_rxint(struct uart_dev_s *dev, bool enable)
static void k210_uart_rxint(struct uart_dev_s *dev, bool enable)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
if (enable)
{
@ -812,25 +812,25 @@ static void k210_16550_rxint(struct uart_dev_s *dev, bool enable)
priv->ier &= ~UART_IER_ERBFI;
}
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
}
/****************************************************************************
* Name: k210_16550_rxavailable
* Name: k210_uart_rxavailable
*
* Description:
* Return true if the receive fifo is not empty
*
****************************************************************************/
static bool k210_16550_rxavailable(struct uart_dev_s *dev)
static bool k210_uart_rxavailable(struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0);
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return ((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0);
}
/****************************************************************************
* Name: k210_16550_dma*
* Name: k210_uart_dma*
*
* Description:
* Stubbed out DMA-related methods
@ -838,11 +838,11 @@ static bool k210_16550_rxavailable(struct uart_dev_s *dev)
****************************************************************************/
#ifdef CONFIG_SERIAL_IFLOWCONTROL
static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
static bool k210_uart_rxflowcontrol(struct uart_dev_s *dev,
unsigned int nbuffered, bool upper)
{
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
if (priv->flow)
{
@ -853,7 +853,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
* input is received.
*/
k210_16550_rxint(dev, !upper);
k210_uart_rxint(dev, !upper);
return true;
}
#endif
@ -863,7 +863,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
#endif
/****************************************************************************
* Name: k210_16550_dma*
* Name: k210_uart_dma*
*
* Description:
* Stub functions used when serial DMA is enabled.
@ -871,59 +871,59 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
****************************************************************************/
#ifdef CONFIG_SERIAL_TXDMA
static void k210_16550_dmasend(FAR struct uart_dev_s *dev)
static void k210_uart_dmasend(FAR struct uart_dev_s *dev)
{
}
#endif
#ifdef CONFIG_SERIAL_RXDMA
static void k210_16550_dmareceive(FAR struct uart_dev_s *dev)
static void k210_uart_dmareceive(FAR struct uart_dev_s *dev)
{
}
static void k210_16550_dmarxfree(FAR struct uart_dev_s *dev)
static void k210_uart_dmarxfree(FAR struct uart_dev_s *dev)
{
}
#endif
#ifdef CONFIG_SERIAL_TXDMA
static void k210_16550_dmatxavail(FAR struct uart_dev_s *dev)
static void k210_uart_dmatxavail(FAR struct uart_dev_s *dev)
{
}
#endif
/****************************************************************************
* Name: k210_16550_send
* Name: k210_uart_send
*
* Description:
* This method will send one byte on the UART
*
****************************************************************************/
static void k210_16550_send(struct uart_dev_s *dev, int ch)
static void k210_uart_send(struct uart_dev_s *dev, int ch)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
k210_16550_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
k210_uart_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
}
/****************************************************************************
* Name: k210_16550_txint
* Name: k210_uart_txint
*
* Description:
* Call to enable or disable TX interrupts
*
****************************************************************************/
static void k210_16550_txint(struct uart_dev_s *dev, bool enable)
static void k210_uart_txint(struct uart_dev_s *dev, bool enable)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
irqstate_t flags;
flags = enter_critical_section();
if (enable)
{
priv->ier |= UART_IER_ETBEI;
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
/* Fake a TX interrupt here by just calling uart_xmitchars() with
* interrupts disabled (note this may recurse).
@ -934,38 +934,38 @@ static void k210_16550_txint(struct uart_dev_s *dev, bool enable)
else
{
priv->ier &= ~UART_IER_ETBEI;
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
}
leave_critical_section(flags);
}
/****************************************************************************
* Name: k210_16550_txready
* Name: k210_uart_txready
*
* Description:
* Return true if the tranmsit fifo is not full
*
****************************************************************************/
static bool k210_16550_txready(struct uart_dev_s *dev)
static bool k210_uart_txready(struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
return (((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0));
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return (((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0));
}
/****************************************************************************
* Name: k210_16550_txempty
* Name: k210_uart_txempty
*
* Description:
* Return true if the transmit fifo is empty
*
****************************************************************************/
static bool k210_16550_txempty(struct uart_dev_s *dev)
static bool k210_uart_txempty(struct uart_dev_s *dev)
{
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_TEMT) != 0);
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return ((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_TEMT) != 0);
}
/****************************************************************************
@ -973,7 +973,7 @@ static bool k210_16550_txempty(struct uart_dev_s *dev)
****************************************************************************/
/****************************************************************************
* Name: k210_uart_16550_register
* Name: k210_uart_register
*
* Description:
* Register serial console and serial ports. This assumes that
@ -981,20 +981,20 @@ static bool k210_16550_txempty(struct uart_dev_s *dev)
*
****************************************************************************/
void k210_uart_16550_register(void)
void k210_uart_register(void)
{
#if defined(CONFIG_K210_16550_UART1)
k210_16550_setup(&g_uart1port);
#if defined(CONFIG_K210_UART1)
k210_uart_setup(&g_uart1port);
uart_register("/dev/ttyS1", &g_uart1port);
#endif
#if defined(CONFIG_K210_16550_UART2)
k210_16550_setup(&g_uart2port);
#if defined(CONFIG_K210_UART2)
k210_uart_setup(&g_uart2port);
uart_register("/dev/ttyS2", &g_uart2port);
#endif
#if defined(CONFIG_K210_16550_UART3)
k210_16550_setup(&g_uart3port);
#if defined(CONFIG_K210_UART3)
k210_uart_setup(&g_uart3port);
uart_register("/dev/ttyS3", &g_uart3port);
#endif
}
#endif /* CONFIG_K210_16550_UART */
#endif /* CONFIG_K210_UART */

View File

@ -18,8 +18,8 @@
* @date 2022.09.28
*/
#ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H
#define __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H
#ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_H
#define __INCLUDE_NUTTX_SERIAL_UART_K210_H
/****************************************************************************
* Included Files
@ -27,7 +27,7 @@
#include <nuttx/config.h>
#ifdef CONFIG_K210_16550_UART
#ifdef CONFIG_K210_UART
/****************************************************************************
* Pre-processor Definitions
@ -38,7 +38,7 @@
/* Are any UARTs enabled? */
#undef HAVE_UART
#if defined(CONFIG_K210_16550_UART1) || defined(CONFIG_K210_16550_UART2) || defined(CONFIG_K210_16550_UART3)
#if defined(CONFIG_K210_UART1) || defined(CONFIG_K210_UART2) || defined(CONFIG_K210_UART3)
# define HAVE_UART 1
#endif
@ -46,78 +46,78 @@
* register bit width.
*/
#ifndef CONFIG_K210_16550_REGINCR
# error "CONFIG_K210_16550_REGINCR not defined"
#ifndef CONFIG_K210_UART_REGINCR
# error "CONFIG_K210_UART_REGINCR not defined"
#endif
#if CONFIG_K210_16550_REGINCR != 1 && CONFIG_K210_16550_REGINCR != 2 && CONFIG_K210_16550_REGINCR != 4
# error "CONFIG_K210_16550_REGINCR not supported"
#if CONFIG_K210_UART_REGINCR != 1 && CONFIG_K210_UART_REGINCR != 2 && CONFIG_K210_UART_REGINCR != 4
# error "CONFIG_K210_UART_REGINCR not supported"
#endif
#ifndef CONFIG_K210_16550_REGWIDTH
# error "CONFIG_K210_16550_REGWIDTH not defined"
#ifndef CONFIG_K210_UART_REGWIDTH
# error "CONFIG_K210_UART_REGWIDTH not defined"
#endif
#if CONFIG_K210_16550_REGWIDTH != 8 && CONFIG_K210_16550_REGWIDTH != 16 && CONFIG_K210_16550_REGWIDTH != 32
# error "CONFIG_K210_16550_REGWIDTH not supported"
#if CONFIG_K210_UART_REGWIDTH != 8 && CONFIG_K210_UART_REGWIDTH != 16 && CONFIG_K210_UART_REGWIDTH != 32
# error "CONFIG_K210_UART_REGWIDTH not supported"
#endif
#ifndef CONFIG_K210_16550_ADDRWIDTH
# error "CONFIG_K210_16550_ADDRWIDTH not defined"
#ifndef CONFIG_K210_UART_ADDRWIDTH
# error "CONFIG_K210_UART_ADDRWIDTH not defined"
#endif
#if CONFIG_K210_16550_ADDRWIDTH != 0 && CONFIG_K210_16550_ADDRWIDTH != 8 && \
CONFIG_K210_16550_ADDRWIDTH != 16 && CONFIG_K210_16550_ADDRWIDTH != 32 && \
CONFIG_K210_16550_ADDRWIDTH != 64
# error "CONFIG_K210_16550_ADDRWIDTH not supported"
#if CONFIG_K210_UART_ADDRWIDTH != 0 && CONFIG_K210_UART_ADDRWIDTH != 8 && \
CONFIG_K210_UART_ADDRWIDTH != 16 && CONFIG_K210_UART_ADDRWIDTH != 32 && \
CONFIG_K210_UART_ADDRWIDTH != 64
# error "CONFIG_K210_UART_ADDRWIDTH not supported"
#endif
/* If a UART is enabled, then its base address, clock, and IRQ
* must also be provided
*/
#ifdef CONFIG_K210_16550_UART1
# ifndef CONFIG_K210_16550_UART1_BASE
# error "CONFIG_K210_16550_UART1_BASE not provided"
# undef CONFIG_K210_16550_UART1
#ifdef CONFIG_K210_UART1
# ifndef CONFIG_K210_UART1_BASE
# error "CONFIG_K210_UART1_BASE not provided"
# undef CONFIG_K210_UART1
# endif
# ifndef CONFIG_K210_16550_UART1_CLOCK
# error "CONFIG_K210_16550_UART1_CLOCK not provided"
# undef CONFIG_K210_16550_UART1
# ifndef CONFIG_K210_UART1_CLOCK
# error "CONFIG_K210_UART1_CLOCK not provided"
# undef CONFIG_K210_UART1
# endif
# ifndef CONFIG_K210_16550_UART1_IRQ
# error "CONFIG_K210_16550_UART1_IRQ not provided"
# undef CONFIG_K210_16550_UART1
# ifndef CONFIG_K210_UART1_IRQ
# error "CONFIG_K210_UART1_IRQ not provided"
# undef CONFIG_K210_UART1
# endif
#endif
#ifdef CONFIG_K210_16550_UART2
# ifndef CONFIG_K210_16550_UART2_BASE
# error "CONFIG_K210_16550_UART2_BASE not provided"
# undef CONFIG_K210_16550_UART2
#ifdef CONFIG_K210_UART2
# ifndef CONFIG_K210_UART2_BASE
# error "CONFIG_K210_UART2_BASE not provided"
# undef CONFIG_K210_UART2
# endif
# ifndef CONFIG_K210_16550_UART2_CLOCK
# error "CONFIG_K210_16550_UART2_CLOCK not provided"
# undef CONFIG_K210_16550_UART2
# ifndef CONFIG_K210_UART2_CLOCK
# error "CONFIG_K210_UART2_CLOCK not provided"
# undef CONFIG_K210_UART2
# endif
# ifndef CONFIG_K210_16550_UART2_IRQ
# error "CONFIG_K210_16550_UART2_IRQ not provided"
# undef CONFIG_K210_16550_UART2
# ifndef CONFIG_K210_UART2_IRQ
# error "CONFIG_K210_UART2_IRQ not provided"
# undef CONFIG_K210_UART2
# endif
#endif
#ifdef CONFIG_K210_16550_UART3
# ifndef CONFIG_K210_16550_UART3_BASE
# error "CONFIG_K210_16550_UART3_BASE not provided"
# undef CONFIG_K210_16550_UART3
#ifdef CONFIG_K210_UART3
# ifndef CONFIG_K210_UART3_BASE
# error "CONFIG_K210_UART3_BASE not provided"
# undef CONFIG_K210_UART3
# endif
# ifndef CONFIG_K210_16550_UART3_CLOCK
# error "CONFIG_K210_16550_UART3_CLOCK not provided"
# undef CONFIG_K210_16550_UART3
# ifndef CONFIG_K210_UART3_CLOCK
# error "CONFIG_K210_UART3_CLOCK not provided"
# undef CONFIG_K210_UART3
# endif
# ifndef CONFIG_K210_16550_UART3_IRQ
# error "CONFIG_K210_16550_UART3_IRQ not provided"
# undef CONFIG_K210_16550_UART3
# ifndef CONFIG_K210_UART3_IRQ
# error "CONFIG_K210_UART3_IRQ not provided"
# undef CONFIG_K210_UART3
# endif
#endif
@ -143,21 +143,21 @@
#define UART_DLF_INCR 48 /* Divisor factor Register*/
#define UART_CPR_INCR 61 /* Component Register */
#define UART_RBR_OFFSET (CONFIG_K210_16550_REGINCR*UART_RBR_INCR)
#define UART_THR_OFFSET (CONFIG_K210_16550_REGINCR*UART_THR_INCR)
#define UART_DLL_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLL_INCR)
#define UART_DLM_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLM_INCR)
#define UART_IER_OFFSET (CONFIG_K210_16550_REGINCR*UART_IER_INCR)
#define UART_IIR_OFFSET (CONFIG_K210_16550_REGINCR*UART_IIR_INCR)
#define UART_FCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_FCR_INCR)
#define UART_LCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LCR_INCR)
#define UART_MCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MCR_INCR)
#define UART_LSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LSR_INCR)
#define UART_MSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MSR_INCR)
#define UART_SCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_SCR_INCR)
#define UART_SRT_OFFSET (CONFIG_K210_16550_REGINCR*UART_SRT_INCR)
#define UART_DLF_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLF_INCR)
#define UART_CPR_OFFSET (CONFIG_K210_16550_REGINCR*UART_CPR_INCR)
#define UART_RBR_OFFSET (CONFIG_K210_UART_REGINCR*UART_RBR_INCR)
#define UART_THR_OFFSET (CONFIG_K210_UART_REGINCR*UART_THR_INCR)
#define UART_DLL_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLL_INCR)
#define UART_DLM_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLM_INCR)
#define UART_IER_OFFSET (CONFIG_K210_UART_REGINCR*UART_IER_INCR)
#define UART_IIR_OFFSET (CONFIG_K210_UART_REGINCR*UART_IIR_INCR)
#define UART_FCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_FCR_INCR)
#define UART_LCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LCR_INCR)
#define UART_MCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MCR_INCR)
#define UART_LSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LSR_INCR)
#define UART_MSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MSR_INCR)
#define UART_SCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_SCR_INCR)
#define UART_SRT_OFFSET (CONFIG_K210_UART_REGINCR*UART_SRT_INCR)
#define UART_DLF_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLF_INCR)
#define UART_CPR_OFFSET (CONFIG_K210_UART_REGINCR*UART_CPR_INCR)
/* Register bit definitions *************************************************/
@ -267,36 +267,36 @@
* Public Types
****************************************************************************/
#if CONFIG_K210_16550_REGWIDTH == 8
#if CONFIG_K210_UART_REGWIDTH == 8
typedef uint8_t uart_datawidth_t;
#elif CONFIG_K210_16550_REGWIDTH == 16
#elif CONFIG_K210_UART_REGWIDTH == 16
typedef uint16_t uart_datawidth_t;
#elif CONFIG_K210_16550_REGWIDTH == 32
#elif CONFIG_K210_UART_REGWIDTH == 32
typedef uint32_t uart_datawidth_t;
#endif
#if CONFIG_K210_16550_ADDRWIDTH == 0
#if CONFIG_K210_UART_ADDRWIDTH == 0
typedef uintptr_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 8
#elif CONFIG_K210_UART_ADDRWIDTH == 8
typedef uint8_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 16
#elif CONFIG_K210_UART_ADDRWIDTH == 16
typedef uint16_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 32
#elif CONFIG_K210_UART_ADDRWIDTH == 32
typedef uint32_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 64
#elif CONFIG_K210_UART_ADDRWIDTH == 64
typedef uint64_t uart_addrwidth_t;
#endif
struct k210_16550_s
struct k210_uart_s
{
uart_addrwidth_t uartbase; /* Base address of UART registers */
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
uint32_t baud; /* Configured baud */
uint32_t uartclk; /* UART clock frequency */
#endif
uart_datawidth_t ier; /* Saved IER value */
uint8_t irq; /* IRQ associated with this UART */
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
uint8_t parity; /* 0=none, 1=odd, 2=even */
uint8_t bits; /* Number of bits (7 or 8) */
int stopbits2; /* true: Configure with 2 stop bits instead of 1 */
@ -319,7 +319,7 @@ struct k210_16550_s
*
* Description:
* These functions must be provided by the processor-specific code in order
* to correctly access 16550 registers
* to correctly access registers
* uart_ioctl() is optional to provide custom IOCTLs
*
****************************************************************************/
@ -334,6 +334,6 @@ void uart_putreg(uart_addrwidth_t base,
struct file; /* Forward reference */
int uart_ioctl(struct file *filep, int cmd, unsigned long arg);
void k210_uart_16550_register(void);
#endif /* CONFIG_K210_16550_UART */
void k210_uart_register(void);
#endif /* CONFIG_K210_UART */
#endif /* __INCLUDE_NUTTX_SERIAL_UART_16550_H */