diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/ringbuffer.c | 71 | ||||
| -rw-r--r-- | fs/ringbuffer.h | 27 |
2 files changed, 0 insertions, 98 deletions
diff --git a/fs/ringbuffer.c b/fs/ringbuffer.c deleted file mode 100644 index 449ad88..0000000 --- a/fs/ringbuffer.c +++ /dev/null @@ -1,71 +0,0 @@ -#define FOOLOS_MODULE_NAME "ringbuffer" -#include "lib/logger/log.h" - -#include "ringbuffer.h" - -static int sl=9; - -ringbuffer ringbuffer_init(uint32_t size) -{ - ringbuffer f; - f.data=kballoc(size); - f.size=size*4096; - f.front=f.size-1; - f.back=f.size-1; - return f; -} - -bool ringbuffer_put(ringbuffer* f,uint8_t c) -{ - x86_int_disable(); - lock_spin(sl); - - if((f->back-1+f->size)%f->size==f->front) - { - lock_release(sl); - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put"); - x86_int_enable(); - return false; - } - - f->data[f->back]=c; - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put %d %d (%c)", f->back, f->front,c); - f->back--; - f->back+=f->size; - f->back%=f->size; - - lock_release(sl); - x86_int_enable(); - - return true; -} - -uint8_t ringbuffer_get(ringbuffer* f) // blocking -{ - - char c; - - x86_int_disable(); - lock_spin(sl); - - if(f->front==f->back) - { - lock_release(sl); - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by get"); - x86_int_enable(); - c='_'; - return false; - } - - c=f->data[f->front]; - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"get %d %d (%c)", f->back, f->front,c); - - f->front--; - f->front+=f->size; - f->front%=f->size; - - lock_release(sl); - x86_int_enable(); - - return true; -} diff --git a/fs/ringbuffer.h b/fs/ringbuffer.h deleted file mode 100644 index 31d00cf..0000000 --- a/fs/ringbuffer.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef RINGBUFFER_H -#define RINGBUFFER_H - -#include <stdint.h> -#include <stdbool.h> - -// Simple FIRST IN FIRST OUT -// requires kballoc - block allocation -typedef struct ringbuffer_struct -{ - uint32_t size; - uint32_t front; - uint32_t back; - - uint8_t *data; - -}ringbuffer; - -// create new fifo of given size (in blocks) -ringbuffer ringbuffer_init(uint32_t blocks); - -// true on success -bool ringbuffer_put(ringbuffer*,uint8_t); -uint8_t ringbuffer_get(ringbuffer*); // blocking -bool ringbuffer_has(ringbuffer*); // check if somehting waiting? - -#endif |
