123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #ifndef DEVICE_UART_H
- #define DEVICE_UART_H
- #include "typedef.h"
- #include "device/device.h"
- #include "generic/ioctl.h"
- #include "system/task.h"
- #define UART_DISABLE 0x00000000
- #define UART_DMA_SUPPORT 0x00000001
- #define UART_TX_USE_DMA 0x00000003
- #define UART_RX_USE_DMA 0x00000005
- #define UART_DEBUG 0x00000008
- struct uart_outport {
- u8 tx_pin;
- u8 rx_pin;
- u16 value;
- };
- extern void putbyte(char a);
- enum uart_clk_src {
- LSB_CLK,
- OSC_CLK,
- PLL_48M,
- };
- enum _uart_port_out {
- //uart0
- PORTC_0_1 = 0x00001000,
- PORTG_6_7 = 0x00002000,
- PORTH_12_13 = 0x00003000,
- PORTB_14_15 = 0x00004000,
- //uart1
- PORTC_2_3 = 0x00005000,
- PORTH_2_5 = 0x00006000,
- PORTH_14_15 = 0x00007000,
- PORTC_6_7 = 0x00008000,
- //uart3
- PORTE_0_1 = 0x00009000,
- PORTB_4_3 = 0x0000A000,
- PORTD_9_10 = 0x0000B000,
- PORTD_14_15 = 0x0000C000,
- PORT_REMAP = 0x0000D000,
- };
- struct uart_platform_data {
- u8 *name;
- u8 irq;
- u8 tx_pin;
- u8 rx_pin;
- u32 flags;
- u32 baudrate;
- enum _uart_port_out port;
- void (*port_remap_func)(void);
- u32 max_continue_recv_cnt;
- u32 idle_sys_clk_cnt;
- enum uart_clk_src clk_src;
- };
- enum {
- UART_CIRCULAR_BUFFER_WRITE_OVERLAY = -1,
- UART_RECV_TIMEOUT = -2,
- UART_RECV_EXIT = -3,
- };
- #define UART_MAGIC 'U'
- #define UART_FLUSH _IO(UART_MAGIC,1)
- #define UART_SET_RECV_ALL _IOW(UART_MAGIC,2,bool)
- #define UART_SET_RECV_BLOCK _IOW(UART_MAGIC,3,bool)
- #define UART_SET_RECV_TIMEOUT _IOW(UART_MAGIC,4,u32)
- #define UART_SET_RECV_TIMEOUT_CB _IOW(UART_MAGIC,5,int (*)(void))
- #define UART_GET_RECV_CNT _IOR(UART_MAGIC,6,u32)
- #define UART_START _IO(UART_MAGIC,7)
- #define UART_SET_CIRCULAR_BUFF_ADDR _IOW(UART_MAGIC,8,void *)
- #define UART_SET_CIRCULAR_BUFF_LENTH _IOW(UART_MAGIC,9,u32)
- #define UART_PLATFORM_DATA_BEGIN(data) \
- static const struct uart_platform_data data = {
- #define UART_PLATFORM_DATA_END() \
- };
- struct uart_device {
- char *name;
- const struct uart_operations *ops;
- struct device dev;
- const struct uart_platform_data *priv;
- OS_MUTEX mutex;
- };
- struct uart_operations {
- int (*init)(struct uart_device *);
- int (*read)(struct uart_device *, void *buf, u32 len);
- int (*write)(struct uart_device *, void *buf, u16 len);
- int (*ioctl)(struct uart_device *, u32 cmd, u32 arg);
- int (*close)(struct uart_device *);
- };
- #define REGISTER_UART_DEVICE(dev) \
- static struct uart_device dev sec(.uart)
- extern struct uart_device uart_device_begin[], uart_device_end[];
- #define list_for_each_uart_device(p) \
- for (p=uart_device_begin; p<uart_device_end; p++)
- extern const struct device_operations uart_dev_ops;
- #endif
|