git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add mem-map for x86_64
[lunaix-os.git]
/
lunaix-os
/
hal
/
char
/
uart
/
16550.h
diff --git
a/lunaix-os/hal/char/uart/16550.h
b/lunaix-os/hal/char/uart/16550.h
index a6565752eca4e8bb3e2c251875e5c13e4c9ab4b2..5b4040b695a152fdcb001fad89930ff54103dd59 100644
(file)
--- a/
lunaix-os/hal/char/uart/16550.h
+++ b/
lunaix-os/hal/char/uart/16550.h
@@
-17,7
+17,6
@@
#define UART_rDLM 1
#define UART_INTRX 0x1
#define UART_rDLM 1
#define UART_INTRX 0x1
-#define UART_DLAB (1 << 7)
#define UART_LOOP (1 << 4)
#define UART_rIE_ERBFI 1
#define UART_LOOP (1 << 4)
#define UART_rIE_ERBFI 1
@@
-25,14
+24,21
@@
#define UART_rIE_ELSI (1 << 2)
#define UART_rIE_EDSSI (1 << 3)
#define UART_rIE_ELSI (1 << 2)
#define UART_rIE_EDSSI (1 << 3)
+#define UART_rLC_STOPB (1 << 2)
+#define UART_rLC_PAREN (1 << 3)
+#define UART_rLC_PAREVN (1 << 4)
+#define UART_rLC_SETBRK (1 << 6)
+#define UART_rLC_DLAB (1 << 7)
+
#define UART_rLS_THRE (1 << 5)
#define UART_rLS_DR 1
#define UART_rLS_BI (1 << 4)
#define UART_rII_FIFOEN (0b11 << 6)
#define UART_rLS_THRE (1 << 5)
#define UART_rLS_DR 1
#define UART_rLS_BI (1 << 4)
#define UART_rII_FIFOEN (0b11 << 6)
-#define UART_rII_ID 0b111
0
+#define UART_rII_ID 0b111
1
#define UART_rFC_EN 1
#define UART_rFC_EN 1
+#define UART_rFC_DMA1 (1 << 3)
#define UART_rFC_XMIT_RESET (1 << 2)
#define UART_rFC_RCVR_RESET (1 << 1)
#define UART_rFC_XMIT_RESET (1 << 2)
#define UART_rFC_RCVR_RESET (1 << 1)
@@
-64,6
+70,7
@@
struct uart16550
u8_t rie;
u8_t rfc;
u8_t rmc;
u8_t rie;
u8_t rfc;
u8_t rmc;
+ u8_t rlc;
} cntl_save;
u32_t (*read_reg)(struct uart16550* uart, ptr_t regoff);
} cntl_save;
u32_t (*read_reg)(struct uart16550* uart, ptr_t regoff);
@@
-80,16
+87,22
@@
uart_setup(struct uart16550* uart)
}
static inline void
}
static inline void
-uart_
set
ie(struct uart16550* uart)
+uart_
clr
ie(struct uart16550* uart)
{
uart->cntl_save.rie = uart->read_reg(uart, UART_rIE);
uart->write_reg(uart, UART_rIE, 0);
}
static inline void
{
uart->cntl_save.rie = uart->read_reg(uart, UART_rIE);
uart->write_reg(uart, UART_rIE, 0);
}
static inline void
-uart_clrie(struct uart16550* uart)
+uart_setie(struct uart16550* uart)
+{
+ uart->write_reg(uart, UART_rIE, uart->cntl_save.rie);
+}
+
+static inline void
+uart_setlc(struct uart16550* uart)
{
{
- uart->write_reg(uart, UART_r
IE, uart->cntl_save.rie | 1
);
+ uart->write_reg(uart, UART_r
LC, uart->cntl_save.rlc
);
}
struct uart16550*
}
struct uart16550*
@@
-103,13
+116,13
@@
uart_baud_divisor(struct uart16550* uart, int div)
{
u32_t rlc = uart->read_reg(uart, UART_rLC);
{
u32_t rlc = uart->read_reg(uart, UART_rLC);
- uart->write_reg(uart, UART_rLC, UART_DLAB | rlc);
+ uart->write_reg(uart, UART_rLC, UART_
rLC_
DLAB | rlc);
u8_t ls = (div & 0xff), ms = (div & 0xff00) >> 8;
uart->write_reg(uart, UART_rLS, ls);
uart->write_reg(uart, UART_rMS, ms);
u8_t ls = (div & 0xff), ms = (div & 0xff00) >> 8;
uart->write_reg(uart, UART_rLS, ls);
uart->write_reg(uart, UART_rMS, ms);
- uart->write_reg(uart, UART_rLC, rlc & ~UART_DLAB);
+ uart->write_reg(uart, UART_rLC, rlc & ~UART_
rLC_
DLAB);
return 0;
}
return 0;
}
@@
-155,7
+168,8
@@
uart_eorcv(struct uart16550* uart)
static inline int
uart_enable_fifo(struct uart16550* uart, int trig_lvl)
{
static inline int
uart_enable_fifo(struct uart16550* uart, int trig_lvl)
{
- uart->cntl_save.rfc = UART_rFC_EN | (trig_lvl & 0b11);
+ uart->cntl_save.rfc =
+ UART_rFC_EN | ((trig_lvl & 0b11) << 6) | UART_rFC_DMA1;
uart->write_reg(uart, UART_rFC, uart->cntl_save.rfc);
return uart->read_reg(uart, UART_rII) & UART_rII_FIFOEN;
uart->write_reg(uart, UART_rFC, uart->cntl_save.rfc);
return uart->read_reg(uart, UART_rII) & UART_rII_FIFOEN;
@@
-184,7
+198,7
@@
static inline int
uart_intr_identify(struct uart16550* uart)
{
u32_t rii = uart->read_reg(uart, UART_rII);
uart_intr_identify(struct uart16550* uart)
{
u32_t rii = uart->read_reg(uart, UART_rII);
- return (
!!(rii & UART_rII_FIFOEN) << 3) | ((rii & UART_rII_ID) >> 1
);
+ return (
rii & UART_rII_ID
);
}
static inline u8_t
}
static inline u8_t