1/*
2 * Copyright 2013, Pawe�� Dziepak, pdziepak@quarnos.org.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef KERNEL_SCHEDULER_MODES_H
6#define KERNEL_SCHEDULER_MODES_H
7
8
9#include <kscheduler.h>
10#include <thread_types.h>
11
12
13struct scheduler_mode_operations {
14	const char*				name;
15
16	bigtime_t				base_quantum;
17	bigtime_t				minimal_quantum;
18	bigtime_t				quantum_multipliers[2];
19
20	bigtime_t				maximum_latency;
21
22	void					(*switch_to_mode)();
23	void					(*set_cpu_enabled)(int32 cpu, bool enabled);
24	bool					(*has_cache_expired)(
25								const Scheduler::ThreadData* threadData);
26	Scheduler::CoreEntry*	(*choose_core)(
27								const Scheduler::ThreadData* threadData);
28	Scheduler::CoreEntry*	(*rebalance)(
29								const Scheduler::ThreadData* threadData);
30	void					(*rebalance_irqs)(bool idle);
31};
32
33extern struct scheduler_mode_operations gSchedulerLowLatencyMode;
34extern struct scheduler_mode_operations gSchedulerPowerSavingMode;
35
36
37namespace Scheduler {
38
39
40extern scheduler_mode gCurrentModeID;
41extern scheduler_mode_operations* gCurrentMode;
42
43
44}
45
46
47#endif	// KERNEL_SCHEDULER_MODES_H
48
49