mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 09:46:20 +00:00
parent
146292dba9
commit
270f1068cb
@ -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;
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 {};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user