diff --git a/repos/dde_linux/src/server/usb_terminal/main.cc b/repos/dde_linux/src/server/usb_terminal/main.cc index e0e0d7994..cda520c37 100644 --- a/repos/dde_linux/src/server/usb_terminal/main.cc +++ b/repos/dde_linux/src/server/usb_terminal/main.cc @@ -43,8 +43,7 @@ struct pl2303_config } __attribute__((packed)); -struct Usb::Pl2303_driver : Completion, - Ring_buffer +struct Usb::Pl2303_driver : Completion { enum { VENDOR = 0x67b, PRODUCT = 0x2303 /* Prolific 2303 seriral port */ }; @@ -57,6 +56,9 @@ struct Usb::Pl2303_driver : Completion, /* Pl2303 endpoints */ enum Endpoints { STATUS = 0, OUT = 1, IN = 2 }; + typedef Genode::Ring_buffer Ring_buffer; + + Ring_buffer ring_buffer; Server::Entrypoint &ep; Server::Signal_rpc_member dispatcher{ ep, *this, &Pl2303_driver::state_change }; Genode::Allocator_avl alloc; @@ -102,12 +104,12 @@ struct Usb::Pl2303_driver : Completion, } /* buffer data */ - bool send_sigh = empty() && p.transfer.actual_size; + bool send_sigh = ring_buffer.empty() && p.transfer.actual_size; char *data = (char *)iface.content(p); try { for (int i = 0; i < p.transfer.actual_size; i++) - add(data[i]); + ring_buffer.add(data[i]); } catch (Ring_buffer::Overflow) { PWRN("Pl2303 buffer overflow"); } @@ -223,6 +225,16 @@ struct Usb::Pl2303_driver : Completion, else if (verbose) PDBG("Device: Unplugged"); } + + /** + * Return true if data is available + */ + bool avail() const { return !ring_buffer.empty(); } + + /** + * Obtain character + */ + char get() { return ring_buffer.get(); } }; @@ -250,14 +262,14 @@ class Terminal::Session_component : public Rpc_object(); - for (;num_bytes < dst_len && !_driver.empty(); num_bytes++) + for (;num_bytes < dst_len && _driver.avail(); num_bytes++) data[num_bytes] = _driver.get(); return num_bytes; diff --git a/repos/os/include/input/event_queue.h b/repos/os/include/input/event_queue.h index 5e0195e5f..140ce5211 100644 --- a/repos/os/include/input/event_queue.h +++ b/repos/os/include/input/event_queue.h @@ -35,9 +35,11 @@ class Input::Event_queue */ enum { QUEUE_SIZE = 512U }; + typedef Genode::Ring_buffer Ring_buffer; + private: - Ring_buffer _queue; + Ring_buffer _queue; bool _enabled = false; @@ -45,7 +47,7 @@ class Input::Event_queue public: - typedef typename Ring_buffer::Overflow Overflow; + typedef Ring_buffer::Overflow Overflow; void enabled(bool enabled) { _enabled = enabled; } diff --git a/repos/os/include/os/ring_buffer.h b/repos/os/include/os/ring_buffer.h index 4f9a68c36..5a7307645 100644 --- a/repos/os/include/os/ring_buffer.h +++ b/repos/os/include/os/ring_buffer.h @@ -18,8 +18,17 @@ #include #include +namespace Genode { -struct Ring_buffer_unsynchronized + struct Ring_buffer_unsynchronized; + struct Ring_buffer_synchronized; + + template + class Ring_buffer; +} + + +struct Genode::Ring_buffer_unsynchronized { struct Sem { @@ -40,7 +49,7 @@ struct Ring_buffer_unsynchronized }; -struct Ring_buffer_synchronized +struct Genode::Ring_buffer_synchronized { typedef Genode::Semaphore Sem; typedef Genode::Lock Lock; @@ -60,9 +69,8 @@ struct Ring_buffer_synchronized * stored in the buffer. Hence, the ring buffer is suited * for simple plain-data element types. */ -template -class Ring_buffer +template +class Genode::Ring_buffer { private: @@ -75,7 +83,7 @@ class Ring_buffer public: - class Overflow : public Genode::Exception { }; + class Overflow : public Exception { }; /** * Constructor diff --git a/repos/os/include/terminal/read_buffer.h b/repos/os/include/terminal/read_buffer.h index 1229aba6c..e6f61c924 100644 --- a/repos/os/include/terminal/read_buffer.h +++ b/repos/os/include/terminal/read_buffer.h @@ -26,7 +26,7 @@ namespace Terminal { } -class Terminal::Read_buffer : public Ring_buffer +class Terminal::Read_buffer : public Genode::Ring_buffer { private: @@ -47,7 +47,7 @@ class Terminal::Read_buffer : public Ring_buffer::add(c); + Genode::Ring_buffer::add(c); if (_sigh_cap.valid()) Genode::Signal_transmitter(_sigh_cap).submit(); @@ -63,7 +63,7 @@ class Terminal::Read_buffer : public Ring_buffer +class Read_buffer : public Genode::Ring_buffer { private: @@ -84,7 +84,7 @@ class Read_buffer : public Ring_buffer */ void add(unsigned char c) { - Ring_buffer::add(c); + Genode::Ring_buffer::add(c); if (_sigh_cap.valid()) Genode::Signal_transmitter(_sigh_cap).submit(); diff --git a/repos/os/src/drivers/input/ps2/pl050/pl050.h b/repos/os/src/drivers/input/ps2/pl050/pl050.h index 55fd2c3e6..cc92111e7 100644 --- a/repos/os/src/drivers/input/ps2/pl050/pl050.h +++ b/repos/os/src/drivers/input/ps2/pl050/pl050.h @@ -59,7 +59,7 @@ class Pl050 class _Channel : public Serial_interface, - public Ring_buffer + public Genode::Ring_buffer { private: diff --git a/repos/os/src/drivers/input/ps2/x86/i8042.h b/repos/os/src/drivers/input/ps2/x86/i8042.h index b336af7cc..681c826d4 100644 --- a/repos/os/src/drivers/input/ps2/x86/i8042.h +++ b/repos/os/src/drivers/input/ps2/x86/i8042.h @@ -81,7 +81,7 @@ class I8042 }; class _Channel : public Serial_interface, - public Ring_buffer + public Genode::Ring_buffer { private: diff --git a/repos/os/src/server/terminal_crosslink/terminal_session_component.h b/repos/os/src/server/terminal_crosslink/terminal_session_component.h index 94eb7899a..4394adf91 100644 --- a/repos/os/src/server/terminal_crosslink/terminal_session_component.h +++ b/repos/os/src/server/terminal_crosslink/terminal_session_component.h @@ -38,7 +38,7 @@ namespace Terminal { Attached_ram_dataspace _io_buffer; - typedef Ring_buffer Local_buffer; + typedef Genode::Ring_buffer Local_buffer; Local_buffer _buffer; size_t _cross_num_bytes_avail; diff --git a/repos/os/src/server/vmm/main.cc b/repos/os/src/server/vmm/main.cc index ec3100025..057aefbd8 100644 --- a/repos/os/src/server/vmm/main.cc +++ b/repos/os/src/server/vmm/main.cc @@ -1032,8 +1032,8 @@ class Vmm private: using Board = Vea9x4::Genode::Board_base; - using Ring_buffer = ::Ring_buffer; + using Ring_buffer = Genode::Ring_buffer; class Wrong_offset {}; diff --git a/repos/os/src/test/blk/cli/main.cc b/repos/os/src/test/blk/cli/main.cc index 8d1ae6292..3b8d503a5 100644 --- a/repos/os/src/test/blk/cli/main.cc +++ b/repos/os/src/test/blk/cli/main.cc @@ -178,8 +178,8 @@ struct Write_test : Test PINF("Integrity check failed: block %lld - %lld", _nr, _nr+_cnt); } }; - typedef Ring_buffer Req_buffer; + typedef Genode::Ring_buffer Req_buffer; Req_buffer read_packets; Req_buffer write_packets; diff --git a/repos/os/src/test/blk/srv/main.cc b/repos/os/src/test/blk/srv/main.cc index 6b29d13eb..a71288615 100644 --- a/repos/os/src/test/blk/srv/main.cc +++ b/repos/os/src/test/blk/srv/main.cc @@ -26,8 +26,8 @@ class Driver : public Block::Driver enum { MAX_REQUESTS = 5 }; - typedef Ring_buffer Req_buffer; + typedef Genode::Ring_buffer Req_buffer; Genode::size_t _number; Genode::size_t _size;