15 class Uart_16550 :
public Uart
33 enum Register_value_iir
38 enum Register_value_lsr
47#ifdef UART_16550_INIT_MCR
48 Init_mcr = UART_16550_INIT_MCR,
52#ifdef UART_16550_INIT_IER
53 Init_ier = UART_16550_INIT_IER,
57#ifdef UART_16550_INIT_FCR
58 Init_fcr = UART_16550_INIT_FCR,
77 MODE_8N1 = PAR_NONE | DAT_8 | STOP_1,
78 MODE_7E1 = PAR_EVEN | DAT_7 | STOP_1,
85 Base_rate_x86 = 115200,
86 Base_rate_pxa = 921600,
89 explicit Uart_16550(
unsigned long base_rate,
unsigned char init_flags = 0,
90 unsigned char ier_bits = Init_ier,
91 unsigned char mcr_bits = Init_mcr,
92 unsigned char fcr_bits = Init_fcr)
93 : _base_rate(base_rate), _init_flags(init_flags), _mcr_bits(mcr_bits),
94 _ier_bits(ier_bits), _fcr_bits(fcr_bits)
97 bool startup(Io_register_block
const *regs)
override;
98 void shutdown()
override;
99 bool change_mode(Transfer_mode m, Baud_rate r)
override;
100 int get_char(
bool blocking =
true)
const override;
101 int char_avail()
const override;
102 int tx_avail()
const;
103 void wait_tx_done()
const;
104 inline void out_char(
char c)
const;
105 int write(
char const *s,
unsigned long count,
106 bool blocking =
true)
const override;
107 bool enable_rx_irq(
bool enable =
true)
override;
110 unsigned long _base_rate;
111 unsigned char _init_flags;
112 unsigned char _mcr_bits;
113 unsigned char _ier_bits;
114 unsigned char _fcr_bits;
L4 low-level kernel interface.