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 ; UseHeaders [ FDirName $(HAIKU_TOP) headers os drivers ] : true ;
# We need the public usb headers also when not compiling for Haiku. # We need the public usb headers also when not compiling for Haiku.
} }
UsePrivateHeaders [ FDirName kernel util ] ;
KernelAddon usb_midi : kernel drivers bin : KernelAddon usb_midi : kernel drivers bin :
usb_midi.c 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->open_fds = NULL;
my_dev->active = true; my_dev->active = true;
my_dev->flags = 0; 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); my_dev->total_report_size = sizeof(usb_midi_event_packet);
return my_dev; return my_dev;
@@ -103,9 +103,9 @@ void
remove_device (my_device_info *my_dev) remove_device (my_device_info *my_dev)
{ {
assert (my_dev != NULL); assert (my_dev != NULL);
if (my_dev->cbuf != NULL) { if (my_dev->rbuf != NULL) {
cbuf_delete(my_dev->cbuf); delete_ring_buffer(my_dev->rbuf);
my_dev->cbuf = NULL; my_dev->rbuf = NULL;
} }
delete_area (my_dev->buffer_area); 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; 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); 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); err = acquire_sem_etc(my_dev->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
if (err != B_OK) if (err != B_OK)
return err; 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; *num_bytes = 1;
return err; return err;
} }
@@ -34,27 +34,7 @@
#include <USB.h> #include <USB.h>
#include <usb/USB_midi.h> #include <usb/USB_midi.h>
/* Undocumented kernel cbuf_* functions */ #include "ring_buffer.h"
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);
#define DEBUG 1 #define DEBUG 1
#if DEBUG #if DEBUG
@@ -97,7 +77,7 @@ typedef struct my_device_info
uint16 ifno; uint16 ifno;
char name[30]; char name[30];
cbuffer *cbuf; struct ring_buffer *rbuf;
bool active; bool active;
int open; int open;