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