diff --git a/.project b/.project new file mode 100755 index 0000000..de2f74d --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + ubixos + + + + + + + + diff --git a/src/sys/include/ubixos/schedule.h b/src/sys/include/ubixos/schedule.h index fe1451d..dd42259 100755 --- a/src/sys/include/ubixos/schedule.h +++ b/src/sys/include/ubixos/schedule.h @@ -102,4 +102,39 @@ void timerInt(); void schedule(); +/* Stuff for queues...commenting out until I get a chance to test (so I don't break stuff). + +const uint32_t schedMagicNumber = 0x253B9CF9; + +struct waitQueueNode +{ + uint32_t id; + + void * data; + + struct waitQueueNode * next; + struct waitQueueNode * prev; + +}; + +struct waitQueue +{ + uint32_t magic_number; + uint32_t type; + + struct waitQueueNode * first; + struct waitQueueNode * last; + +} waitQueue_t; + +waitQueue_t * waitQueueCreate(int); +void waitQueueInit(waitQueue_t &, int); +void waitQueueDelete(waitQueue_t *); +void waitQueueUnInit(waitQueue_t &); + +void waitQueueInsert(waitQueue_t *, void *, int); +void * waitQueueRemove(waitQueue_t *, int &); + +*/ + #endif diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index 6d13317..47a1ab9 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -111,3 +111,132 @@ " popa \n" " iret \n" ); + +/* New stuff commented out for now. + +waitQueue_t * waitQueueCreate(int type) +{ + waitQueue_t * queue = (waitQueue_t *) kmalloc(sizeof(waitQueue_t)); + + if (queue == NULL) + return NULL; + + memset(queue, '\0', sizeof(waitQueue_t)); + + queue->magic_number = schedMagicNumber; + queue->type = type; + + return queue; +} + +void waitQueueInit(waitQueue_t & queue, int type) +{ + memset(&queue, '\0', sizeof(queue)); + + queue->magic_number = schedMagicNumber; + queue->type = type; + + return; + +} + +void waitQueueDelete(waitQueue_t * queue) +{ + struct waitQueueNode * temp; + + if (queue == NULL) + return; + + if (queue->magic_number != schedMagicNumber) + return; + + while (queue->first != NULL) + { + temp = queue->first; + queue->first = queue->first->next; + kfree(temp); + } + + memset(queue, '\0', sizeof(waitQueue_t)); + kfree(queue); +} + +void waitQueueUnInit(waitQueue_t & queue) +{ + struct waitQueueNode * temp; + + if (queue.magic_number != schedMagicNumber) + return; + + while (queue.first != NULL) + { + temp = queue.first; + queue.first = queue.first->next; + kfree(temp); + } + + memset(&queue, '\0', sizeof(waitQueue_t)); +} + +void waitQueueInsert(waitQueue_t * queue, void * data, int id) +{ + struct waitQueueNode * temp; + + if (queue == NULL) + return; + + if (queue->magic_number != schedMagicNumber) + return; + + temp = (struct waitQueueNode *) kmalloc(sizeof(struct waitQueueNode)); + memset(temp, '\0', sizeof(struct waitQueueNode)); + + if (queue->first == NULL) + { + queue->first = queue->last = temp; + } + else + { + queue->last->next = temp; + temp->prev = queue->last->next; + queue->last = temp; + } + + temp->data = data; + temp->id = id; + + return; +} + +void * waitQueueRemove(waitQueue_t * queue, int & id) +{ + void * temp; + + if (queue == NULL) + return NULL; + + if (queue->magic_number != schedMagicNumber) + return NULL; + + if (queue->first == NULL) + return NULL; + + temp = queue->first->data; + + if (queue->first->next == NULL) + { + kfree(queue->first); + queue->first = queue->last = NULL; + } + else + { + queue->first = queue->first->next; + kfree(queue->first->prev); + queue->first->prev = NULL; + } + + return temp; + +} + +*/