Rev 1062 | Rev 1078 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1062 | Rev 1066 | ||
|---|---|---|---|
| Line 41... | Line 41... | ||
| 41 | #include <adt/list.h> |
41 | #include <adt/list.h> |
| 42 | #include <mm/slab.h> |
42 | #include <mm/slab.h> |
| 43 | 43 | ||
| 44 | #define THREAD_STACK_SIZE STACK_SIZE |
44 | #define THREAD_STACK_SIZE STACK_SIZE |
| 45 | 45 | ||
| 46 | #define THREAD_USER_STACK 1 |
- | |
| 47 | - | ||
| 48 | enum state { |
46 | enum state { |
| 49 | Invalid, /**< It is an error, if thread is found in this state. */ |
47 | Invalid, /**< It is an error, if thread is found in this state. */ |
| 50 | Running, /**< State of a thread that is currently executing on some CPU. */ |
48 | Running, /**< State of a thread that is currently executing on some CPU. */ |
| 51 | Sleeping, /**< Thread in this state is waiting for an event. */ |
49 | Sleeping, /**< Thread in this state is waiting for an event. */ |
| 52 | Ready, /**< State of threads in a run queue. */ |
50 | Ready, /**< State of threads in a run queue. */ |
| Line 57... | Line 55... | ||
| 57 | extern char *thread_states[]; |
55 | extern char *thread_states[]; |
| 58 | 56 | ||
| 59 | #define X_WIRED (1<<0) |
57 | #define X_WIRED (1<<0) |
| 60 | #define X_STOLEN (1<<1) |
58 | #define X_STOLEN (1<<1) |
| 61 | 59 | ||
| - | 60 | #define THREAD_NAME_BUFLEN 20 |
|
| - | 61 | ||
| 62 | /** Thread structure. There is one per thread. */ |
62 | /** Thread structure. There is one per thread. */ |
| 63 | struct thread { |
63 | struct thread { |
| 64 | char *name; |
- | |
| 65 | - | ||
| 66 | link_t rq_link; /**< Run queue link. */ |
64 | link_t rq_link; /**< Run queue link. */ |
| 67 | link_t wq_link; /**< Wait queue link. */ |
65 | link_t wq_link; /**< Wait queue link. */ |
| 68 | link_t th_link; /**< Links to threads within containing task. */ |
66 | link_t th_link; /**< Links to threads within containing task. */ |
| 69 | link_t threads_link; /**< Link to the list of all threads. */ |
67 | link_t threads_link; /**< Link to the list of all threads. */ |
| 70 | 68 | ||
| Line 74... | Line 72... | ||
| 74 | * Must be acquired before T.lock for each T of type task_t. |
72 | * Must be acquired before T.lock for each T of type task_t. |
| 75 | * |
73 | * |
| 76 | */ |
74 | */ |
| 77 | SPINLOCK_DECLARE(lock); |
75 | SPINLOCK_DECLARE(lock); |
| 78 | 76 | ||
| - | 77 | char name[THREAD_NAME_BUFLEN]; |
|
| - | 78 | ||
| 79 | void (* thread_code)(void *); /**< Function implementing the thread. */ |
79 | void (* thread_code)(void *); /**< Function implementing the thread. */ |
| 80 | void *thread_arg; /**< Argument passed to thread_code() function. */ |
80 | void *thread_arg; /**< Argument passed to thread_code() function. */ |
| 81 | 81 | ||
| 82 | context_t saved_context; /**< From here, the stored context is restored when the thread is scheduled. */ |
82 | context_t saved_context; /**< From here, the stored context is restored when the thread is scheduled. */ |
| 83 | context_t sleep_timeout_context; /**< From here, the stored failover context is restored when sleep times out. */ |
83 | context_t sleep_timeout_context; /**< From here, the stored failover context is restored when sleep times out. */ |
| Line 115... | Line 115... | ||
| 115 | ARCH_THREAD_DATA; /**< Architecture-specific data. */ |
115 | ARCH_THREAD_DATA; /**< Architecture-specific data. */ |
| 116 | 116 | ||
| 117 | __u8 *kstack; /**< Thread's kernel stack. */ |
117 | __u8 *kstack; /**< Thread's kernel stack. */ |
| 118 | }; |
118 | }; |
| 119 | 119 | ||
| - | 120 | /** Structure passed to uinit kernel thread as argument. */ |
|
| - | 121 | typedef struct uspace_arg { |
|
| - | 122 | __address uspace_entry; |
|
| - | 123 | __address uspace_stack; |
|
| - | 124 | } uspace_arg_t; |
|
| - | 125 | ||
| 120 | /** Thread list lock. |
126 | /** Thread list lock. |
| 121 | * |
127 | * |
| 122 | * This lock protects all link_t structures chained in threads_head. |
128 | * This lock protects all link_t structures chained in threads_head. |
| 123 | * Must be acquired before T.lock for each T of type thread_t. |
129 | * Must be acquired before T.lock for each T of type thread_t. |
| 124 | * |
130 | * |
| Line 137... | Line 143... | ||
| 137 | 143 | ||
| 138 | extern void thread_register_call_me(void (* call_me)(void *), void *call_me_with); |
144 | extern void thread_register_call_me(void (* call_me)(void *), void *call_me_with); |
| 139 | extern void thread_print_list(void); |
145 | extern void thread_print_list(void); |
| 140 | extern void thread_destroy(thread_t *t); |
146 | extern void thread_destroy(thread_t *t); |
| 141 | 147 | ||
| 142 | - | ||
| 143 | /* Fpu context slab cache */ |
148 | /* Fpu context slab cache */ |
| 144 | extern slab_cache_t *fpu_context_slab; |
149 | extern slab_cache_t *fpu_context_slab; |
| 145 | 150 | ||
| - | 151 | /** Thread syscall prototypes. */ |
|
| - | 152 | __native sys_thread_create(__address function, void *arg, void *stack, char *name); |
|
| - | 153 | __native sys_thread_exit(int status); |
|
| - | 154 | ||
| 146 | #endif |
155 | #endif |