Scheduler is now selectable in make menuconfig in kernel hacking.
[projects/modsched/linux.git] / kernel / sched / modsched / framework / include / fw_task.h
1 /**
2  * fw_task.h
3  *
4  * Framework Tasks (implemented in the os spcific folder)
5  *
6  *  Created on: 05.11.2013
7  *      Author: Daniel Roehrig, Christian Rene Sechting
8  */
9 #ifndef FW_TASK_H_
10 #define FW_TASK_H_
11
12 #include "fw_list.h"
13 #include "fw_modules.h"
14
15 #define task_context_t void
16
17 typedef enum {RUNNING, BLOCKED, READY} fw_task_state_t;
18
19 typedef struct fw_task{
20         task_context_t *task_context;
21         void *real_task;
22
23         fw_task_state_t state;
24
25         void *module_data[FW_MAX_MODULES];
26
27         fw_list_head_t list;
28 } fw_task_t;
29
30 typedef struct fw_task_list_entry{
31         fw_list_head_t list;
32         fw_task_t task;
33         void *module_data[FW_MAX_MODULES];
34 } fw_task_list_entry_t;
35
36 /*
37  *  initialize the task_struct_padding with 0 and
38  *  creates a list for all tasks
39  */
40 void init_fw_tasks(void);
41
42 /*
43  *  TODO: check if needed
44  *  every scheduler module can demand individual
45  *  fields in the task_struct and this is the
46  *  overall counter of all extra memory that needs
47  *  to be allocated from the framework per task
48  */
49 extern unsigned long task_struct_padding;
50
51 /*
52  * returns the fw_task equivalent of the given os task
53  */
54 struct fw_task *find_fw_task(void *real_task);
55
56 /*
57  *  returns the os task equivalent of the given fw_task
58  */
59 void *find_real_task(struct fw_task *task);
60
61 /*
62  *  creates a fw_task equivalent for the given os task
63  *  or returns the fw_task if already there.
64  */
65 struct fw_task *register_task(void *real_task);
66
67 int fw_task_is_registered(void *tsk);
68 void insert_fw_task(struct fw_task *new_task, void *tsk);
69
70 void set_idle_task(struct fw_task *idle);
71 struct fw_task *get_idle_task(void);
72
73 int fw_get_state(struct fw_task *task);
74 int fw_get_pid(struct fw_task *task);
75
76 #endif /* FW_TASK_H_ */