blob: f162062c45b1a2aa0f8b0cb2447461dea5651f0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#ifndef __SCHED_H__
#define __SCHED_H__
#include <list.h>
#include <time.h>
#include <arch_sched.h>
struct thread
{
char *name;
char *stack;
#if !defined(__ia64__)
unsigned long sp; /* Stack pointer */
unsigned long ip; /* Instruction pointer */
#else /* !defined(__ia64__) */
thread_regs_t regs;
#endif /* !defined(__ia64__) */
struct list_head thread_list;
u32 flags;
s_time_t wakeup_time;
};
extern struct thread *idle_thread;
void idle_thread_fn(void *unused);
#define RUNNABLE_FLAG 0x00000001
#define is_runnable(_thread) (_thread->flags & RUNNABLE_FLAG)
#define set_runnable(_thread) (_thread->flags |= RUNNABLE_FLAG)
#define clear_runnable(_thread) (_thread->flags &= ~RUNNABLE_FLAG)
#define switch_threads(prev, next) arch_switch_threads(prev, next)
void init_sched(void);
void run_idle_thread(void);
struct thread* create_thread(char *name, void (*function)(void *), void *data);
void schedule(void);
#define current get_current()
void wake(struct thread *thread);
void block(struct thread *thread);
void sleep(u32 millisecs);
#endif /* __SCHED_H__ */
|