X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fproc_p.h;h=64fabb1290fef6052231bf3e682fb9c8a4830f49;hb=8f2036c05d9a8531400c1ab97dca9193e92187d3;hp=85cb758f9ecfd7472ea540a3547bb2261fa5717b;hpb=f149112c04843df99b2c9e9fd2ef47d9cacae8a4;p=bertos.git diff --git a/bertos/kern/proc_p.h b/bertos/kern/proc_p.h index 85cb758f..64fabb12 100644 --- a/bertos/kern/proc_p.h +++ b/bertos/kern/proc_p.h @@ -50,6 +50,7 @@ #include // struct Process +#ifndef asm_switch_context /** * CPU dependent context switching routines. * @@ -57,23 +58,7 @@ * support routine which usually needs to be written in assembly. */ EXTERN_C void asm_switch_context(cpu_stack_t **new_sp, cpu_stack_t **save_sp); - -/* - * Save context of old process and switch to new process. - */ -INLINE void proc_switchTo(Process *next, Process *prev) -{ - cpu_stack_t *dummy; - - if (UNLIKELY(next == prev)) - return; - /* - * If there is no old process, we save the old stack pointer into a - * dummy variable that we ignore. In fact, this happens only when the - * old process has just exited. - */ - asm_switch_context(&next->stack, prev ? &prev->stack : &dummy); -} +#endif /** * \name Flags for Process.flags. @@ -176,11 +161,8 @@ void proc_entry(void); /* Schedule another process *without* adding the current one to the ready list. */ void proc_switch(void); -/* Low level scheduling routine. */ -void proc_schedule(void); - -/* Low level context switch routine. */ -void proc_switchTo(Process *next, Process *prev); +/* Immediately schedule a particular process bypassing the scheduler. */ +void proc_wakeup(Process *proc); /* Initialize a scheduler class. */ void proc_schedInit(void); @@ -199,4 +181,38 @@ void proc_schedInit(void); void monitor_rename(Process *proc, const char *name); #endif /* CONFIG_KERN_MONITOR */ +#if CONFIG_KERN_PREEMPT +INLINE int preempt_quantum(void) +{ + extern int _proc_quantum; + return _proc_quantum; +} + +INLINE void proc_decQuantum(void) +{ + extern int _proc_quantum; + if (_proc_quantum > 0) + _proc_quantum--; +} + +INLINE void preempt_reset_quantum(void) +{ + extern int _proc_quantum; + _proc_quantum = CONFIG_KERN_QUANTUM; +} +#else /* !CONFIG_KERN_PREEMPT */ +INLINE int preempt_quantum(void) +{ + return 0; +} + +INLINE void proc_decQuantum(void) +{ +} + +INLINE void preempt_reset_quantum(void) +{ +} +#endif /* CONFIG_KERN_PREEMPT */ + #endif /* KERN_PROC_P_H */