18 #ifndef _COBALT_POSIX_SEM_H
19 #define _COBALT_POSIX_SEM_H
21 #include <linux/kernel.h>
22 #include <linux/fcntl.h>
23 #include <cobalt/kernel/thread.h>
24 #include <cobalt/kernel/registry.h>
25 #include <xenomai/posix/syscall.h>
27 struct cobalt_process;
31 struct xnsynch synchbase;
33 struct list_head link;
34 struct cobalt_sem_state *state;
36 struct cobalt_kqueues *owningq;
50 struct _sem_fastlock __sem_lock;
55 #include <cobalt/uapi/sem.h>
57 #define SEM_VALUE_MAX (INT_MAX)
58 #define SEM_FAILED NULL
59 #define SEM_NAMED 0x80000000
61 struct cobalt_sem_shadow __user *
62 __cobalt_sem_open(
struct cobalt_sem_shadow __user *usm,
63 const char __user *u_name,
64 int oflags, mode_t mode,
unsigned int value);
66 int __cobalt_sem_timedwait(
struct cobalt_sem_shadow __user *u_sem,
67 const void __user *u_ts,
68 int (*fetch_timeout)(
struct timespec *ts,
69 const void __user *u_ts));
71 int __cobalt_sem_destroy(xnhandle_t handle);
73 void __cobalt_sem_unlink(xnhandle_t handle);
75 void cobalt_sem_usems_cleanup(
struct cobalt_process *cc);
78 __cobalt_sem_init(
const char *name,
struct cobalt_sem_shadow *sem,
79 int flags,
unsigned value);
82 (
struct cobalt_sem_shadow __user *u_sem,
83 int flags,
unsigned value));
86 (
struct cobalt_sem_shadow __user *u_sem));
89 (
struct cobalt_sem_shadow __user *u_sem));
92 (
struct cobalt_sem_shadow __user *u_sem,
93 struct timespec __user *u_ts));
96 (
struct cobalt_sem_shadow __user *u_sem));
98 COBALT_SYSCALL_DECL(sem_getvalue,
99 (
struct cobalt_sem_shadow __user *u_sem,
100 int __user *u_sval));
103 (
struct cobalt_sem_shadow __user *u_sem));
105 COBALT_SYSCALL_DECL(sem_open,
106 (
struct cobalt_sem_shadow __user *__user *u_addrp,
107 const char __user *u_name,
108 int oflags, mode_t mode,
unsigned int value));
111 (
struct cobalt_sem_shadow __user *usm));
113 COBALT_SYSCALL_DECL(
sem_unlink, (
const char __user *u_name));
115 COBALT_SYSCALL_DECL(sem_broadcast_np,
116 (
struct cobalt_sem_shadow __user *u_sem));
118 COBALT_SYSCALL_DECL(sem_inquire,
119 (
struct cobalt_sem_shadow __user *u_sem,
120 struct cobalt_sem_info __user *u_info,
121 pid_t __user *u_waitlist,
124 void cobalt_semq_cleanup(
struct cobalt_kqueues *q);
126 void cobalt_sem_pkg_init(
void);
128 void cobalt_sem_pkg_cleanup(
void);
int sem_wait(sem_t *sem)
Decrement a semaphore.
Definition: semaphore.c:299
int sem_trywait(sem_t *sem)
Attempt to decrement a semaphore.
Definition: semaphore.c:238
int sem_unlink(const char *name)
Unlink a named semaphore.
Definition: semaphore.c:576
int sem_close(sem_t *sem)
Close a named semaphore.
Definition: semaphore.c:531
int sem_destroy(sem_t *sem)
Destroy an unnamed semaphore.
Definition: semaphore.c:134
int sem_init(sem_t *sem, int pshared, unsigned int value)
Initialize an unnamed semaphore.
Definition: semaphore.c:84
int sem_post(sem_t *sem)
Post a semaphore.
Definition: semaphore.c:178
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout)
Attempt to decrement a semaphore with a time limit.
Definition: semaphore.c:352