X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fworkqueue.c;h=3e35b069ead04355075ee4eb9b0b8953e6ea60a4;hb=HEAD;hp=b1a63851fdf27a8c1d87ac92f8e8b792661a3a26;hpb=031cac4d366b4b1f623ec91c11bfbfba4b09a55b;p=tpg%2Facess2.git diff --git a/Kernel/workqueue.c b/Kernel/workqueue.c deleted file mode 100644 index b1a63851..00000000 --- a/Kernel/workqueue.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Acess2 Kernel - * - By John Hodge (thePowersGang) - * - * workqueue.c - * - Worker FIFO Queue (Single Consumer, Interrupt Producer) - */ -#include -#include -#include - -// === CODE === -void Workqueue_Init(tWorkqueue *Queue, const char *Name, size_t NextOfset) -{ - Queue->Name = Name; - Queue->NextOffset = NextOfset; -} - -void *Workqueue_GetWork(tWorkqueue *Queue) -{ - tThread *us; - - for( ;; ) - { - // Check for work - SHORTLOCK(&Queue->Protector); - if(Queue->Head) - { - void *ret = Queue->Head; - Queue->Head = *( (void**)ret + Queue->NextOffset/sizeof(void*) ); - if(Queue->Tail == ret) - Queue->Tail = NULL; - SHORTREL(&Queue->Protector); - return ret; - } - - // Go to sleep - SHORTLOCK(&glThreadListLock); - us = Threads_RemActive(); - us->WaitPointer = Queue; - us->Status = THREAD_STAT_QUEUESLEEP; - Queue->Sleeper = us; - SHORTREL(&Queue->Protector); - SHORTREL(&glThreadListLock); - - // Yield and sleep - Threads_Yield(); - if(us->Status == THREAD_STAT_QUEUESLEEP) { - // Why are we awake?! - } - - us->WaitPointer = NULL; - } -} - -void Workqueue_AddWork(tWorkqueue *Queue, void *Ptr) -{ - SHORTLOCK(&Queue->Protector); - - if( Queue->Tail ) - *( (void**)Queue->Tail + Queue->NextOffset/sizeof(void*) ) = Ptr; - else - Queue->Head = Ptr; - Queue->Tail = Ptr; - - if( Queue->Sleeper ) - { - if( Queue->Sleeper->Status != THREAD_STAT_ACTIVE ) - Threads_AddActive(Queue->Sleeper); - Queue->Sleeper = NULL; - } - SHORTREL(&Queue->Protector); -}