Cucumber/Kernel/include/Tier1/CScheduler.h

42 lines
1.1 KiB
C
Raw Normal View History

2011-04-03 16:49:04 +00:00
#ifndef __CSCHEDULER_H__
#define __CSCHEDULER_H__
#include "types.h"
#include "Tier1/CTask.h"
2011-04-14 19:43:46 +00:00
#include "Tier1/IScheduler.h"
2011-05-03 11:59:20 +00:00
#include "Tier1/CSemaphore.h"
2011-04-03 16:49:04 +00:00
2011-06-27 15:59:54 +00:00
#define CSCHEDULER_INTERRUPT_YIELD 0x99
2011-04-03 16:49:04 +00:00
extern "C" {
#include "Tier0/interrupts.h"
}
namespace cb {
typedef struct STaskQueueNode {
CTask *Task;
struct STaskQueueNode *Next;
} TTaskQueueNode;
2011-06-27 15:59:54 +00:00
class CScheduler{
2011-04-03 16:49:04 +00:00
private:
2011-04-14 19:43:46 +00:00
IScheduler *m_CurrentScheduler;
2011-04-03 16:49:04 +00:00
2011-06-27 15:59:54 +00:00
static void TimerTick(u32 edi, u32 esi, u32 ebp, u32 esp, u32 ebx, u32 edx, u32 ecx, u32 eax, u32 eip);
static void Yield(u32 edi, u32 esi, u32 ebp, u32 esp, u32 ebx, u32 edx, u32 ecx, u32 eax, u32 eip);
static u32 m_NumTicks;
2011-04-03 16:49:04 +00:00
public:
CScheduler(void);
static void Enable(void);
static void AddTask(CTask *Task);
static CTask *GetCurrentTask(void);
2011-06-27 15:59:54 +00:00
static void NextTask();
static void PrioritizeTask(CTask *Task);
2011-05-03 11:59:20 +00:00
static void DispatchAvailableSemaphore(CSemaphore *Semaphore);
2011-04-03 16:49:04 +00:00
};
};
#endif