+++ /dev/null
-\r
-#include "core.h"\r
-\r
-void fifo32_init(DATA_FIFO *fifo, uint size, uint *buf, UI_Task *task)\r
-{\r
- fifo->size = size;\r
- fifo->buf = buf;\r
- fifo->free = size; /*freesize*/\r
- fifo->flags = 0;\r
- fifo->p = 0; /*write*/\r
- fifo->q = 0; /*read*/\r
- fifo->task = task;\r
- return;\r
-}\r
-\r
-int fifo32_put(DATA_FIFO *fifo, uint data)\r
-{\r
- int eflags;\r
-\r
- eflags = io_load_eflags();\r
- io_cli();\r
-\r
- if (fifo->free == 0 ) {\r
- fifo->flags |= FIFO32_PUT_OVERFLOW;\r
- return -1;\r
- }\r
- fifo->buf[fifo->p] = data;\r
- fifo->p++;\r
- if(fifo->p == fifo->size) {\r
- fifo->p = 0;\r
- }\r
- fifo->free--;\r
- if(fifo->task != 0){\r
- if(fifo->task->flags != inuse) task_run(fifo->task, -1, 0);\r
- }\r
-\r
- io_store_eflags(eflags);\r
-\r
- return 0;\r
-\r
-}\r
-\r
-uint fifo32_get(DATA_FIFO *fifo)\r
-{\r
- int data;\r
- if (fifo->free == fifo->size) {\r
- if(fifo->q == 0) return fifo->buf[fifo->size];\r
- return fifo->buf[fifo->q - 1];\r
- }\r
- data = fifo->buf[fifo->q];\r
- fifo->q++;\r
- if (fifo->q == fifo->size) {\r
- fifo->q = 0;\r
- }\r
- fifo->free++;\r
- return data;\r
-}\r
-\r
-uint fifo32_status(DATA_FIFO *fifo)\r
-{\r
- return fifo->size - fifo->free;\r
-}\r