/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause. * * Description: Scheduler management * Author: Chloe M. */ #ifndef _KE_SCHED_H_ #define _KE_SCHED_H_ 1 #include #include #include #include /* * Represents a scheduler queue that threads can be pulled * from and added to. * * @ThreadQueue: Represents the actual queue that holds threads * @QueueEntries: Represents the number of entries in the queue * @Lock: Lock protecting this queue */ typedef struct { TAILQ_HEAD(, _THREAD) ThreadQueue; USIZE QueueEntries; SPINLOCK Lock; } SCHED_QUEUE; /* Macro used to initialize the scheduler queue */ #define SCHED_QUEUE_INIT(SQ_P) \ TAILQ_INIT(&(SQ_P)->ThreadQueue); \ (SQ_P)->QueueEntries = 0; \ KeSpinLockInit(&(SQ_P)->Lock, "sched"); /* * Enqueue a thread to a scheduler queue * * @Queue: Scheduler queue to add to * @Thread: Thread to enqueue */ VOID KeSchedEnqueue(SCHED_QUEUE *Queue, THREAD *Thread); /* * Dequeue a thread from a scheduler queue * * @Queue: Scheduler queue to dequeue from */ THREAD *KeSchedDequeue(SCHED_QUEUE *Queue); #endif /* !_KE_SCHED_H_ */