moved from cbuf to ring_buffer, untested

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18563 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2006-08-22 13:23:38 +00:00
parent 50028ed21e
commit 58da9ac9e5
3 changed files with 11 additions and 28 deletions
@@ -6,6 +6,7 @@ if $(TARGET_PLATFORM) != haiku {
UseHeaders [ FDirName $(HAIKU_TOP) headers os drivers ] : true ;
# We need the public usb headers also when not compiling for Haiku.
}
UsePrivateHeaders [ FDirName kernel util ] ;
KernelAddon usb_midi : kernel drivers bin :
usb_midi.c
@@ -93,7 +93,7 @@ create_device(const usb_device *dev, const usb_interface_info *ii, uint16 ifno)
my_dev->open_fds = NULL;
my_dev->active = true;
my_dev->flags = 0;
my_dev->cbuf = cbuf_init(384);
my_dev->rbuf = create_ring_buffer(384);
my_dev->total_report_size = sizeof(usb_midi_event_packet);
return my_dev;
@@ -103,9 +103,9 @@ void
remove_device (my_device_info *my_dev)
{
assert (my_dev != NULL);
if (my_dev->cbuf != NULL) {
cbuf_delete(my_dev->cbuf);
my_dev->cbuf = NULL;
if (my_dev->rbuf != NULL) {
delete_ring_buffer(my_dev->rbuf);
my_dev->rbuf = NULL;
}
delete_area (my_dev->buffer_area);
@@ -136,7 +136,7 @@ interpret_midi_buffer(my_device_info *my_dev)
{
usb_midi_event_packet *packet = my_dev->buffer;
cbuf_putn(my_dev->cbuf, packet->midi, sizeof(packet->midi));
ring_buffer_write(my_dev->rbuf, packet->midi, sizeof(packet->midi));
release_sem_etc(my_dev->sem_cb, 3, B_DO_NOT_RESCHEDULE);
}
@@ -389,7 +389,9 @@ usb_midi_read(driver_cookie *cookie, off_t position,
err = acquire_sem_etc(my_dev->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
if (err != B_OK)
return err;
cbuf_getn(my_dev->cbuf, buf, 1);
acquire_sem (my_dev->sem_lock);
ring_buffer_user_read(my_dev->rbuf, buf, 1);
release_sem (my_dev->sem_lock);
*num_bytes = 1;
return err;
}
@@ -34,27 +34,7 @@
#include <USB.h>
#include <usb/USB_midi.h>
/* Undocumented kernel cbuf_* functions */
struct cbuffer_t;
typedef struct cbuffer_t cbuffer;
size_t cbuf_getn_no_lock(cbuffer *, char *, size_t);
size_t cbuf_putn_no_lock(cbuffer *, char *, size_t);
cbuffer *cbuf_init(size_t size);
void cbuf_delete(cbuffer *buffer);
char cbuf_get(cbuffer *);
bool cbuf_mt(cbuffer *);
bool cbuf_full(cbuffer *);
status_t cbuf_put(cbuffer *, char);
status_t cbuf_unput(cbuffer *);
void cbuf_flush(cbuffer *);
size_t cbuf_size(cbuffer *);
size_t cbuf_avail(cbuffer *);
size_t cbuf_free(cbuffer *);
size_t cbuf_putn(cbuffer *, void *, size_t num_bytes);
size_t cbuf_getn(cbuffer *, void *, size_t num_bytes);
cpu_status cbuf_lock(cbuffer *);
void cbuf_unlock(cbuffer *, cpu_status);
#include "ring_buffer.h"
#define DEBUG 1
#if DEBUG
@@ -97,7 +77,7 @@ typedef struct my_device_info
uint16 ifno;
char name[30];
cbuffer *cbuf;
struct ring_buffer *rbuf;
bool active;
int open;