L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
uart_s3c2410.h
1/*
2 * Copyright (C) 2009-2012 Technische Universität Dresden.
3 * Copyright (C) 2023-2024 Kernkonzept GmbH.
4 * Author(s): Adam Lackorzynski <adam@os.inf.tu-dresden.de>
5 *
6 * License: see LICENSE.spdx (in this directory or the directories above)
7 */
8#pragma once
9
10#include "uart_base.h"
11
12namespace L4 {
13
14class Uart_s3c : public Uart
15{
16protected:
17 enum Uart_type
18 {
19 Type_24xx, Type_64xx, Type_s5pv210,
20 };
21
22 Uart_type type() const { return _type; }
23
24public:
25 explicit Uart_s3c(Uart_type type) : _type(type) {}
26 explicit Uart_s3c(Uart_type type, unsigned /*base_rate*/) : _type(type) {}
27 bool startup(Io_register_block const *) override;
28 void shutdown() override;
29 bool change_mode(Transfer_mode m, Baud_rate r) override;
30 int tx_avail() const;
31 void wait_tx_done() const;
32 inline void out_char(char c) const;
33 int write(char const *s, unsigned long count,
34 bool blocking = true) const override;
35 void fifo_reset();
36
37#ifndef UART_WITHOUT_INPUT
38 int char_avail() const override;
39 int get_char(bool blocking = true) const override;
40#endif
41
42protected:
43 virtual void ack_rx_irq() const = 0;
44 virtual void wait_for_empty_tx_fifo() const = 0;
45 virtual unsigned is_rx_fifo_non_empty() const = 0;
46 virtual unsigned is_tx_fifo_not_full() const = 0;
47
48private:
49 Uart_type _type;
50};
51
52class Uart_s3c2410 : public Uart_s3c
53{
54public:
55 Uart_s3c2410() : Uart_s3c(Type_24xx) {}
56 explicit Uart_s3c2410(unsigned base_rate) : Uart_s3c(Type_24xx, base_rate) {}
57
58protected:
59 void ack_rx_irq() const override {}
60 void wait_for_empty_tx_fifo() const override;
61 unsigned is_rx_fifo_non_empty() const override;
62 unsigned is_tx_fifo_not_full() const override;
63
64 void auto_flow_control(bool on);
65};
66
67class Uart_s3c64xx : public Uart_s3c
68{
69public:
70 Uart_s3c64xx() : Uart_s3c(Type_64xx) {}
71 explicit Uart_s3c64xx(unsigned base_rate) : Uart_s3c(Type_64xx, base_rate) {}
72
73protected:
74 void ack_rx_irq() const override;
75 void wait_for_empty_tx_fifo() const override;
76 unsigned is_rx_fifo_non_empty() const override;
77 unsigned is_tx_fifo_not_full() const override;
78};
79
80class Uart_s5pv210 : public Uart_s3c
81{
82public:
83 Uart_s5pv210() : Uart_s3c(Type_s5pv210) {}
84 explicit Uart_s5pv210(unsigned base_rate) : Uart_s3c(Type_s5pv210, base_rate) {}
85
86protected:
87 void ack_rx_irq() const override;
88 void wait_for_empty_tx_fifo() const override;
89 unsigned is_rx_fifo_non_empty() const override;
90 unsigned is_tx_fifo_not_full() const override;
91};
92
93} // namespace L4
Uart driver abstraction.
Definition uart_base.h:21
virtual void shutdown()=0
Terminate the UART driver.
virtual int char_avail() const =0
Check if there is at least one character available for reading from the UART.
L4 low-level kernel interface.