os: Move Ring_buffer to Genode namespace

Fixes #1479
This commit is contained in:
Norman Feske 2015-04-14 10:51:53 +02:00 committed by Christian Helmuth
parent 146292dba9
commit 270f1068cb
10 changed files with 49 additions and 27 deletions

View File

@ -43,8 +43,7 @@ struct pl2303_config
} __attribute__((packed));
struct Usb::Pl2303_driver : Completion,
Ring_buffer<char, 4096, Ring_buffer_unsynchronized>
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<char, 4096, Genode::Ring_buffer_unsynchronized> Ring_buffer;
Ring_buffer ring_buffer;
Server::Entrypoint &ep;
Server::Signal_rpc_member<Pl2303_driver> 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<Session, Session_component
}
Size size() { return Size(0, 0); }
bool avail() { return !_driver.empty(); }
bool avail() { return _driver.avail(); }
size_t _read(size_t dst_len)
{
size_t num_bytes = 0;
char *data = _io_buffer.local_addr<char>();
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;

View File

@ -35,9 +35,11 @@ class Input::Event_queue
*/
enum { QUEUE_SIZE = 512U };
typedef Genode::Ring_buffer<Input::Event, QUEUE_SIZE> Ring_buffer;
private:
Ring_buffer<Input::Event, QUEUE_SIZE> _queue;
Ring_buffer _queue;
bool _enabled = false;
@ -45,7 +47,7 @@ class Input::Event_queue
public:
typedef typename Ring_buffer<Input::Event, QUEUE_SIZE>::Overflow Overflow;
typedef Ring_buffer::Overflow Overflow;
void enabled(bool enabled) { _enabled = enabled; }

View File

@ -18,8 +18,17 @@
#include <base/exception.h>
#include <util/string.h>
namespace Genode {
struct Ring_buffer_unsynchronized
struct Ring_buffer_unsynchronized;
struct Ring_buffer_synchronized;
template <typename, int, typename SYNC_POLICY = Ring_buffer_synchronized>
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 <typename ET, int QUEUE_SIZE,
typename SYNC_POLICY = Ring_buffer_synchronized>
class Ring_buffer
template <typename ET, int QUEUE_SIZE, typename SYNC_POLICY>
class Genode::Ring_buffer
{
private:
@ -75,7 +83,7 @@ class Ring_buffer
public:
class Overflow : public Genode::Exception { };
class Overflow : public Exception { };
/**
* Constructor

View File

@ -26,7 +26,7 @@ namespace Terminal {
}
class Terminal::Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE>
class Terminal::Read_buffer : public Genode::Ring_buffer<unsigned char, READ_BUFFER_SIZE>
{
private:
@ -47,7 +47,7 @@ class Terminal::Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE
*/
void add(unsigned char c)
{
Ring_buffer<unsigned char, READ_BUFFER_SIZE>::add(c);
Genode::Ring_buffer<unsigned char, READ_BUFFER_SIZE>::add(c);
if (_sigh_cap.valid())
Genode::Signal_transmitter(_sigh_cap).submit();
@ -63,7 +63,7 @@ class Terminal::Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE
enum { READ_BUFFER_SIZE = 4096 };
class Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE>
class Read_buffer : public Genode::Ring_buffer<unsigned char, READ_BUFFER_SIZE>
{
private:
@ -84,7 +84,7 @@ class Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE>
*/
void add(unsigned char c)
{
Ring_buffer<unsigned char, READ_BUFFER_SIZE>::add(c);
Genode::Ring_buffer<unsigned char, READ_BUFFER_SIZE>::add(c);
if (_sigh_cap.valid())
Genode::Signal_transmitter(_sigh_cap).submit();

View File

@ -59,7 +59,7 @@ class Pl050
class _Channel : public Serial_interface,
public Ring_buffer<unsigned char, 256>
public Genode::Ring_buffer<unsigned char, 256>
{
private:

View File

@ -81,7 +81,7 @@ class I8042
};
class _Channel : public Serial_interface,
public Ring_buffer<unsigned char, 1024>
public Genode::Ring_buffer<unsigned char, 1024>
{
private:

View File

@ -38,7 +38,7 @@ namespace Terminal {
Attached_ram_dataspace _io_buffer;
typedef Ring_buffer<unsigned char, BUFFER_SIZE+1> Local_buffer;
typedef Genode::Ring_buffer<unsigned char, BUFFER_SIZE+1> Local_buffer;
Local_buffer _buffer;
size_t _cross_num_bytes_avail;

View File

@ -1032,8 +1032,8 @@ class Vmm
private:
using Board = Vea9x4::Genode::Board_base;
using Ring_buffer = ::Ring_buffer<char, 1024,
Ring_buffer_unsynchronized>;
using Ring_buffer = Genode::Ring_buffer<char, 1024,
Genode::Ring_buffer_unsynchronized>;
class Wrong_offset {};

View File

@ -178,8 +178,8 @@ struct Write_test : Test
PINF("Integrity check failed: block %lld - %lld", _nr, _nr+_cnt); }
};
typedef Ring_buffer<Block::Packet_descriptor, BATCH+1,
Ring_buffer_unsynchronized> Req_buffer;
typedef Genode::Ring_buffer<Block::Packet_descriptor, BATCH+1,
Genode::Ring_buffer_unsynchronized> Req_buffer;
Req_buffer read_packets;
Req_buffer write_packets;

View File

@ -26,8 +26,8 @@ class Driver : public Block::Driver
enum { MAX_REQUESTS = 5 };
typedef Ring_buffer<Block::Packet_descriptor, MAX_REQUESTS,
Ring_buffer_unsynchronized> Req_buffer;
typedef Genode::Ring_buffer<Block::Packet_descriptor, MAX_REQUESTS,
Genode::Ring_buffer_unsynchronized> Req_buffer;
Genode::size_t _number;
Genode::size_t _size;