18 #ifndef _COBALT_POSIX_THREAD_H
19 #define _COBALT_POSIX_THREAD_H
22 #include <linux/types.h>
23 #include <linux/time.h>
24 #include <linux/signal.h>
25 #include <cobalt/kernel/thread.h>
26 #include <cobalt/uapi/thread.h>
27 #include <cobalt/uapi/sched.h>
29 #include <xenomai/posix/syscall.h>
30 #include <xenomai/posix/extension.h>
32 #define PTHREAD_PROCESS_PRIVATE 0
33 #define PTHREAD_PROCESS_SHARED 1
35 #define PTHREAD_CREATE_JOINABLE 0
36 #define PTHREAD_CREATE_DETACHED 1
38 #define PTHREAD_INHERIT_SCHED 0
39 #define PTHREAD_EXPLICIT_SCHED 1
41 #define PTHREAD_MUTEX_NORMAL 0
42 #define PTHREAD_MUTEX_RECURSIVE 1
43 #define PTHREAD_MUTEX_ERRORCHECK 2
44 #define PTHREAD_MUTEX_DEFAULT 0
47 struct cobalt_threadstat;
55 struct _pthread_fastlock {
61 struct _pthread_fastlock __c_lock;
63 char __padding[48 -
sizeof (
struct _pthread_fastlock)
64 - sizeof (long) - sizeof (long long)];
79 struct _pthread_fastlock __m_lock;
82 struct cobalt_local_hkey {
89 struct cobalt_thread {
91 struct xnthread threadbase;
92 struct cobalt_extref extref;
93 struct cobalt_process *process;
94 struct list_head next;
98 struct list_head sigqueues[_NSIG];
99 struct xnsynch sigwait;
100 struct list_head signext;
103 struct xnsynch monitor_synch;
104 struct list_head monitor_link;
106 struct cobalt_local_hkey hkey;
109 struct cobalt_sigwait_context {
110 struct xnthread_wait_context wc;
115 static inline struct cobalt_thread *cobalt_current_thread(
void)
118 return curr ? container_of(curr,
struct cobalt_thread, threadbase) : NULL;
121 int __cobalt_thread_create(
unsigned long pth,
int policy,
122 struct sched_param_ex __user *u_param,
123 int xid, __u32 __user *u_winoff);
125 int __cobalt_thread_setschedparam_ex(
unsigned long pth,
127 const struct sched_param_ex *param_ex,
128 __u32 __user *u_winoff,
129 int __user *u_promoted);
131 int __cobalt_thread_getschedparam_ex(
unsigned long pth,
132 int __user *u_policy,
133 struct sched_param_ex *param_ex);
135 struct cobalt_thread *cobalt_thread_find(pid_t pid);
137 struct cobalt_thread *cobalt_thread_find_local(pid_t pid);
139 struct cobalt_thread *cobalt_thread_lookup(
unsigned long pth);
141 COBALT_SYSCALL_DECL(thread_create,
142 (
unsigned long pth,
int policy,
143 struct sched_param_ex __user *u_param,
144 int xid, __u32 __user *u_winoff));
146 struct cobalt_thread *
147 cobalt_thread_shadow(
struct task_struct *p,
148 struct cobalt_local_hkey *lhkey,
149 __u32 __user *u_winoff);
151 COBALT_SYSCALL_DECL(thread_setmode,
152 (
int clrmask,
int setmask,
int __user *u_mode_r));
154 COBALT_SYSCALL_DECL(thread_setname,
155 (
unsigned long pth,
const char __user *u_name));
157 COBALT_SYSCALL_DECL(thread_kill, (
unsigned long pth,
int sig));
159 COBALT_SYSCALL_DECL(thread_join, (
unsigned long pth));
161 COBALT_SYSCALL_DECL(thread_getpid, (
unsigned long pth));
163 COBALT_SYSCALL_DECL(thread_getstat,
164 (pid_t pid,
struct cobalt_threadstat __user *u_stat));
166 COBALT_SYSCALL_DECL(thread_setschedparam_ex,
169 const struct sched_param_ex __user *u_param,
170 __u32 __user *u_winoff,
171 int __user *u_promoted));
173 COBALT_SYSCALL_DECL(thread_getschedparam_ex,
175 int __user *u_policy,
176 struct sched_param_ex __user *u_param));
178 void cobalt_thread_map(
struct xnthread *curr);
180 struct xnthread_personality *cobalt_thread_exit(
struct xnthread *curr);
182 struct xnthread_personality *cobalt_thread_finalize(
struct xnthread *zombie);
184 #ifdef CONFIG_XENO_OPT_COBALT_EXTENSION
186 int cobalt_thread_extend(
struct cobalt_extension *ext,
189 void cobalt_thread_restrict(
void);
192 int cobalt_thread_extended_p(
const struct cobalt_thread *thread,
193 const struct cobalt_extension *ext)
195 return thread->extref.extension == ext;
201 int cobalt_thread_extended_p(
const struct cobalt_thread *thread,
202 const struct cobalt_extension *ext)
209 extern xnticks_t cobalt_time_slice;
static struct xnthread * xnthread_current(void)
Retrieve the current Cobalt core TCB.
Definition: thread.h:373