diff options
author | Christian Cunningham <cc@localhost> | 2022-03-18 12:57:53 -0700 |
---|---|---|
committer | Christian Cunningham <cc@localhost> | 2022-03-18 12:57:53 -0700 |
commit | 94f2b0b8f48f5715975446c637a078008fb7e941 (patch) | |
tree | 2fb1744748e3bd4c93b2dae65a6033763c17e737 /include | |
parent | 7ea4a4e970ae4a72ac7b58e98d232662d580ed47 (diff) |
Generalized Queue
Diffstat (limited to 'include')
-rw-r--r-- | include/globals.h | 3 | ||||
-rw-r--r-- | include/lib/queue.h | 32 | ||||
-rw-r--r-- | include/sys/schedule.h | 25 |
3 files changed, 38 insertions, 22 deletions
diff --git a/include/globals.h b/include/globals.h index ce98c97..24bd4f5 100644 --- a/include/globals.h +++ b/include/globals.h @@ -15,9 +15,8 @@ extern unsigned long stimeh; extern struct Scheduler scheduler; extern struct Thread usrloopthread; extern unsigned int gwidth, gheight, gpitch, gisrgb; -extern unsigned char thread_table[MAX_THREADS]; extern struct Thread threads[MAX_THREADS]; -extern struct ThreadEntry thread_entries[MAX_THREADS]; +extern struct Entry thread_entries[MAX_THREADS]; extern unsigned long mutex_table[MAX_MUTEXS]; extern struct Mutex mutexs[MAX_MUTEXS]; #endif diff --git a/include/lib/queue.h b/include/lib/queue.h new file mode 100644 index 0000000..5e57613 --- /dev/null +++ b/include/lib/queue.h @@ -0,0 +1,32 @@ +#ifndef LIB_QUEUE_H +#define LIB_QUEUE_H + +enum EntryType { + VALUE_ENTRY = 0, + START_ENTRY = 1, + END_ENTRY = 2, +}; + +struct Entry { + void* value; + struct Entry* next; + unsigned long entry_type; +}; + +struct Queue { + struct Entry start; + struct Entry end; +}; + +// Add to end of queue +void push_to_queue(struct Entry* e, struct Queue* q); +// Add to beginning of queue +void prepend_to_queue(struct Entry* e, struct Queue* q); +// Remove from beginning of queue +struct Entry* pop_from_queue(struct Queue* q); +// Remove the entry after this one from its queue +struct Entry* remove_next_from_queue(struct Entry* e); +// Find an entry in a queue +struct Entry* find_value(void* value, struct Queue* q); + +#endif diff --git a/include/sys/schedule.h b/include/sys/schedule.h index d0d938c..18b2f7f 100644 --- a/include/sys/schedule.h +++ b/include/sys/schedule.h @@ -1,5 +1,6 @@ #ifndef SYS_SCHEDULE_H #define SYS_SCHEDULE_H +#include <lib/queue.h> #define TQUEUE_MAX 0x800 #define STACK_SIZE 0x4000 @@ -13,12 +14,6 @@ enum ThreadStatus { THREAD_SWAIT = 2, }; -enum EntryTypes { - THREAD_ENTRY = 0, - START_ENTRY = 1, - END_ENTRY = 2, -}; - struct Thread { void* pc; void* sp; // Store r0-r12,lr on stack @@ -35,22 +30,12 @@ struct Thread { unsigned short s_reserved; }; -struct ThreadEntry { - struct Thread* thread; - struct ThreadEntry* next; - unsigned long entry_type; -}; - -struct ThreadQueue { - struct ThreadEntry start; - struct ThreadEntry end; -}; - struct Scheduler { struct Thread* rthread; - struct ThreadQueue ready[PRIORITIES]; - struct ThreadQueue mwait[PRIORITIES]; - struct ThreadQueue swait[PRIORITIES]; + struct Queue ready[PRIORITIES]; + struct Queue mwait[PRIORITIES]; + struct Queue swait[PRIORITIES]; + struct Queue free_threads; }; void init_scheduler(void); |