parent
146292dba9
commit
270f1068cb
|
@ -43,8 +43,7 @@ struct pl2303_config
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
struct Usb::Pl2303_driver : Completion,
|
struct Usb::Pl2303_driver : Completion
|
||||||
Ring_buffer<char, 4096, Ring_buffer_unsynchronized>
|
|
||||||
{
|
{
|
||||||
enum { VENDOR = 0x67b, PRODUCT = 0x2303 /* Prolific 2303 seriral port */ };
|
enum { VENDOR = 0x67b, PRODUCT = 0x2303 /* Prolific 2303 seriral port */ };
|
||||||
|
|
||||||
|
@ -57,6 +56,9 @@ struct Usb::Pl2303_driver : Completion,
|
||||||
/* Pl2303 endpoints */
|
/* Pl2303 endpoints */
|
||||||
enum Endpoints { STATUS = 0, OUT = 1, IN = 2 };
|
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::Entrypoint &ep;
|
||||||
Server::Signal_rpc_member<Pl2303_driver> dispatcher{ ep, *this, &Pl2303_driver::state_change };
|
Server::Signal_rpc_member<Pl2303_driver> dispatcher{ ep, *this, &Pl2303_driver::state_change };
|
||||||
Genode::Allocator_avl alloc;
|
Genode::Allocator_avl alloc;
|
||||||
|
@ -102,12 +104,12 @@ struct Usb::Pl2303_driver : Completion,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* buffer data */
|
/* 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);
|
char *data = (char *)iface.content(p);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < p.transfer.actual_size; i++)
|
for (int i = 0; i < p.transfer.actual_size; i++)
|
||||||
add(data[i]);
|
ring_buffer.add(data[i]);
|
||||||
} catch (Ring_buffer::Overflow) {
|
} catch (Ring_buffer::Overflow) {
|
||||||
PWRN("Pl2303 buffer overflow");
|
PWRN("Pl2303 buffer overflow");
|
||||||
}
|
}
|
||||||
|
@ -223,6 +225,16 @@ struct Usb::Pl2303_driver : Completion,
|
||||||
else if (verbose)
|
else if (verbose)
|
||||||
PDBG("Device: Unplugged");
|
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); }
|
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 _read(size_t dst_len)
|
||||||
{
|
{
|
||||||
size_t num_bytes = 0;
|
size_t num_bytes = 0;
|
||||||
char *data = _io_buffer.local_addr<char>();
|
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();
|
data[num_bytes] = _driver.get();
|
||||||
|
|
||||||
return num_bytes;
|
return num_bytes;
|
||||||
|
|
|
@ -35,9 +35,11 @@ class Input::Event_queue
|
||||||
*/
|
*/
|
||||||
enum { QUEUE_SIZE = 512U };
|
enum { QUEUE_SIZE = 512U };
|
||||||
|
|
||||||
|
typedef Genode::Ring_buffer<Input::Event, QUEUE_SIZE> Ring_buffer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Ring_buffer<Input::Event, QUEUE_SIZE> _queue;
|
Ring_buffer _queue;
|
||||||
|
|
||||||
bool _enabled = false;
|
bool _enabled = false;
|
||||||
|
|
||||||
|
@ -45,7 +47,7 @@ class Input::Event_queue
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef typename Ring_buffer<Input::Event, QUEUE_SIZE>::Overflow Overflow;
|
typedef Ring_buffer::Overflow Overflow;
|
||||||
|
|
||||||
void enabled(bool enabled) { _enabled = enabled; }
|
void enabled(bool enabled) { _enabled = enabled; }
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,17 @@
|
||||||
#include <base/exception.h>
|
#include <base/exception.h>
|
||||||
#include <util/string.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
|
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::Semaphore Sem;
|
||||||
typedef Genode::Lock Lock;
|
typedef Genode::Lock Lock;
|
||||||
|
@ -60,9 +69,8 @@ struct Ring_buffer_synchronized
|
||||||
* stored in the buffer. Hence, the ring buffer is suited
|
* stored in the buffer. Hence, the ring buffer is suited
|
||||||
* for simple plain-data element types.
|
* for simple plain-data element types.
|
||||||
*/
|
*/
|
||||||
template <typename ET, int QUEUE_SIZE,
|
template <typename ET, int QUEUE_SIZE, typename SYNC_POLICY>
|
||||||
typename SYNC_POLICY = Ring_buffer_synchronized>
|
class Genode::Ring_buffer
|
||||||
class Ring_buffer
|
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -75,7 +83,7 @@ class Ring_buffer
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
class Overflow : public Genode::Exception { };
|
class Overflow : public Exception { };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* 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:
|
private:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class Terminal::Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE
|
||||||
*/
|
*/
|
||||||
void add(unsigned char c)
|
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())
|
if (_sigh_cap.valid())
|
||||||
Genode::Signal_transmitter(_sigh_cap).submit();
|
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 };
|
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:
|
private:
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ class Read_buffer : public Ring_buffer<unsigned char, READ_BUFFER_SIZE>
|
||||||
*/
|
*/
|
||||||
void add(unsigned char c)
|
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())
|
if (_sigh_cap.valid())
|
||||||
Genode::Signal_transmitter(_sigh_cap).submit();
|
Genode::Signal_transmitter(_sigh_cap).submit();
|
||||||
|
|
|
@ -59,7 +59,7 @@ class Pl050
|
||||||
|
|
||||||
|
|
||||||
class _Channel : public Serial_interface,
|
class _Channel : public Serial_interface,
|
||||||
public Ring_buffer<unsigned char, 256>
|
public Genode::Ring_buffer<unsigned char, 256>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ class I8042
|
||||||
};
|
};
|
||||||
|
|
||||||
class _Channel : public Serial_interface,
|
class _Channel : public Serial_interface,
|
||||||
public Ring_buffer<unsigned char, 1024>
|
public Genode::Ring_buffer<unsigned char, 1024>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace Terminal {
|
||||||
|
|
||||||
Attached_ram_dataspace _io_buffer;
|
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;
|
Local_buffer _buffer;
|
||||||
size_t _cross_num_bytes_avail;
|
size_t _cross_num_bytes_avail;
|
||||||
|
|
|
@ -1032,8 +1032,8 @@ class Vmm
|
||||||
private:
|
private:
|
||||||
|
|
||||||
using Board = Vea9x4::Genode::Board_base;
|
using Board = Vea9x4::Genode::Board_base;
|
||||||
using Ring_buffer = ::Ring_buffer<char, 1024,
|
using Ring_buffer = Genode::Ring_buffer<char, 1024,
|
||||||
Ring_buffer_unsynchronized>;
|
Genode::Ring_buffer_unsynchronized>;
|
||||||
|
|
||||||
class Wrong_offset {};
|
class Wrong_offset {};
|
||||||
|
|
||||||
|
|
|
@ -178,8 +178,8 @@ struct Write_test : Test
|
||||||
PINF("Integrity check failed: block %lld - %lld", _nr, _nr+_cnt); }
|
PINF("Integrity check failed: block %lld - %lld", _nr, _nr+_cnt); }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Ring_buffer<Block::Packet_descriptor, BATCH+1,
|
typedef Genode::Ring_buffer<Block::Packet_descriptor, BATCH+1,
|
||||||
Ring_buffer_unsynchronized> Req_buffer;
|
Genode::Ring_buffer_unsynchronized> Req_buffer;
|
||||||
|
|
||||||
Req_buffer read_packets;
|
Req_buffer read_packets;
|
||||||
Req_buffer write_packets;
|
Req_buffer write_packets;
|
||||||
|
|
|
@ -26,8 +26,8 @@ class Driver : public Block::Driver
|
||||||
|
|
||||||
enum { MAX_REQUESTS = 5 };
|
enum { MAX_REQUESTS = 5 };
|
||||||
|
|
||||||
typedef Ring_buffer<Block::Packet_descriptor, MAX_REQUESTS,
|
typedef Genode::Ring_buffer<Block::Packet_descriptor, MAX_REQUESTS,
|
||||||
Ring_buffer_unsynchronized> Req_buffer;
|
Genode::Ring_buffer_unsynchronized> Req_buffer;
|
||||||
|
|
||||||
Genode::size_t _number;
|
Genode::size_t _number;
|
||||||
Genode::size_t _size;
|
Genode::size_t _size;
|
||||||
|
|
Loading…
Reference in New Issue