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>
26#include <xenomai/posix/process.h>
33 struct xnsynch synchbase;
34 struct cobalt_sem_state *state;
37 struct filename *pathname;
38 struct cobalt_resnode resnode;
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
61struct 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);
66int __cobalt_sem_timedwait(
struct cobalt_sem_shadow __user *u_sem,
67 const struct timespec64 *ts);
69int __cobalt_sem_destroy(xnhandle_t handle);
71void cobalt_nsem_reclaim(
struct cobalt_process *process);
74__cobalt_sem_init(
const char *name,
struct cobalt_sem_shadow *sem,
75 int flags,
unsigned value);
77void __cobalt_sem_shadow_init(
struct cobalt_sem *sem, __u32 magic,
78 struct cobalt_sem_shadow *sm);
81 (
struct cobalt_sem_shadow __user *u_sem,
82 int flags,
unsigned value));
85 (
struct cobalt_sem_shadow __user *u_sem));
88 (
struct cobalt_sem_shadow __user *u_sem));
90COBALT_SYSCALL_DECL(sem_timedwait,
91 (
struct cobalt_sem_shadow __user *u_sem,
92 const struct __kernel_old_timespec __user *u_ts));
94COBALT_SYSCALL_DECL(sem_timedwait64,
95 (
struct cobalt_sem_shadow __user *u_sem,
96 const struct __kernel_timespec __user *u_ts));
99 (
struct cobalt_sem_shadow __user *u_sem));
101COBALT_SYSCALL_DECL(sem_getvalue,
102 (
struct cobalt_sem_shadow __user *u_sem,
103 int __user *u_sval));
106 (
struct cobalt_sem_shadow __user *u_sem));
108COBALT_SYSCALL_DECL(sem_open,
109 (
struct cobalt_sem_shadow __user *__user *u_addrp,
110 const char __user *u_name,
111 int oflags, mode_t mode,
unsigned int value));
114 (
struct cobalt_sem_shadow __user *usm));
116COBALT_SYSCALL_DECL(
sem_unlink, (
const char __user *u_name));
118COBALT_SYSCALL_DECL(sem_broadcast_np,
119 (
struct cobalt_sem_shadow __user *u_sem));
121COBALT_SYSCALL_DECL(sem_inquire,
122 (
struct cobalt_sem_shadow __user *u_sem,
123 struct cobalt_sem_info __user *u_info,
124 pid_t __user *u_waitlist,
127void cobalt_sem_reclaim(
struct cobalt_resnode *node,
int sem_post(sem_t *sem))
Post a semaphore.
Definition semaphore.c:184
int sem_trywait(sem_t *sem))
Attempt to decrement a semaphore.
Definition semaphore.c:246
int sem_close(sem_t *sem))
Close a named semaphore.
Definition semaphore.c:553
int sem_init(sem_t *sem, int pshared, unsigned int value))
Initialize an unnamed semaphore.
Definition semaphore.c:86
int sem_destroy(sem_t *sem))
Destroy an unnamed semaphore.
Definition semaphore.c:138
int sem_unlink(const char *name))
Unlink a named semaphore.
Definition semaphore.c:600
int sem_wait(sem_t *sem))
Decrement a semaphore.
Definition semaphore.c:309