mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-02-06 00:45:22 +08:00
Some checks failed
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
Weekly CI Scheduler / Trigger and Monitor CIs (push) Has been cancelled
Weekly CI Scheduler / Create Discussion Report (push) Has been cancelled
1. 8250 serila family (OFW, PCI, DWC, early) 2. Virtual serial (by graphic and input) 3. HVC early serial 4. ARM PL011 serial Signed-off-by: GuEe-GUI <2991707448@qq.com>
87 lines
2.8 KiB
C
87 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2006-2022, RT-Thread Development Team
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Change Logs:
|
|
* Date Author Notes
|
|
* 2022-11-16 GuEe-GUI first version
|
|
*/
|
|
|
|
#ifndef __SERIAL_8250_H__
|
|
#define __SERIAL_8250_H__
|
|
|
|
#include <rthw.h>
|
|
#include <rtthread.h>
|
|
#include <rtdevice.h>
|
|
#include <drivers/serial_dm.h>
|
|
|
|
#include <ioremap.h>
|
|
|
|
#include "regs.h"
|
|
|
|
enum
|
|
{
|
|
PORT_UNKNOWN,
|
|
PORT_IO,
|
|
PORT_MMIO,
|
|
PORT_MMIO16,
|
|
PORT_MMIO32,
|
|
PORT_MMIO32BE,
|
|
};
|
|
|
|
struct serial8250
|
|
{
|
|
struct rt_serial_device parent;
|
|
struct rt_clk *clk;
|
|
|
|
int irq;
|
|
void *base;
|
|
rt_size_t size;
|
|
rt_uint32_t freq; /* frequency */
|
|
rt_uint32_t regshift; /* reg offset shift */
|
|
rt_uint8_t iotype; /* io access style */
|
|
|
|
struct rt_spinlock spinlock;
|
|
|
|
rt_err_t (*serial_ios)(struct serial8250 *, struct serial_configure *ios);
|
|
rt_uint32_t (*serial_in)(struct serial8250 *, int offset);
|
|
void (*serial_out)(struct serial8250 *, int offset, int value);
|
|
rt_err_t (*serial_dma_enable)(struct serial8250 *, rt_bool_t enabled);
|
|
rt_ssize_t (*serial_dma_tx)(struct serial8250 *, const rt_uint8_t *buf, rt_size_t size);
|
|
rt_ssize_t (*serial_dma_rx)(struct serial8250 *, rt_uint8_t *buf, rt_size_t size);
|
|
rt_err_t (*handle_irq)(struct serial8250 *, int irq);
|
|
|
|
/* Free all resource (and parent) by child */
|
|
void (*remove)(struct serial8250 *);
|
|
void *data;
|
|
};
|
|
|
|
#define serial8250_alloc(obj) rt_calloc(1, sizeof(typeof(*obj)))
|
|
#define raw_to_serial8250(raw_serial) rt_container_of(raw_serial, struct serial8250, parent)
|
|
|
|
rt_err_t serial8250_config(struct serial8250 *serial, const char *options);
|
|
rt_err_t serial8250_setup(struct serial8250 *serial);
|
|
rt_err_t serial8250_remove(struct serial8250 *serial);
|
|
|
|
rt_uint32_t serial8250_in(struct serial8250 *serial, int offset);
|
|
void serial8250_out(struct serial8250 *serial, int offset, int value);
|
|
void serial8250_dma_tx_done(struct serial8250 *serial);
|
|
void serial8250_dma_rx_done(struct serial8250 *serial, int recv_len);
|
|
rt_err_t serial8250_ios(struct serial8250 *serial, struct serial_configure *cfg);
|
|
|
|
rt_err_t serial8250_uart_configure(struct rt_serial_device *raw_serial, struct serial_configure *cfg);
|
|
rt_err_t serial8250_uart_control(struct rt_serial_device *raw_serial, int cmd, void *arg);
|
|
int serial8250_uart_putc(struct rt_serial_device *raw_serial, char c);
|
|
int serial8250_uart_getc(struct rt_serial_device *raw_serial);
|
|
rt_ssize_t serial8250_uart_dma_transmit(struct rt_serial_device *raw_serial,
|
|
rt_uint8_t *buf, rt_size_t size, int direction);
|
|
|
|
int serial8250_early_putc(struct rt_serial_device *raw_serial, char c);
|
|
rt_err_t serial8250_early_fdt_setup(struct serial8250 *serial, struct rt_fdt_earlycon *con, const char *options);
|
|
|
|
extern struct serial8250 early_serial8250;
|
|
extern const struct rt_uart_ops serial8250_uart_ops;
|
|
|
|
#endif /* __SERIAL_8250_H__ */
|