19 #ifndef _COPPERPLATE_SEMOBJ_H
20 #define _COPPERPLATE_SEMOBJ_H
22 #include <boilerplate/compiler.h>
23 #include <copperplate/reference.h>
25 struct semobj_waitentry {
30 #ifdef CONFIG_XENO_COBALT
32 #include <semaphore.h>
34 struct semobj_corespec {
40 #include <copperplate/syncobj.h>
42 struct semobj_corespec {
51 struct semobj_corespec core;
52 fnref_type(
void (*)(
struct semobj *smobj)) finalizer;
55 #define SEMOBJ_PRIO 0x1
56 #define SEMOBJ_PULSE 0x2
57 #define SEMOBJ_WARNDEL 0x4
63 int semobj_init(
struct semobj *smobj,
65 fnref_type(
void (*)(
struct semobj *smobj)) finalizer);
67 int semobj_destroy(
struct semobj *smobj);
69 void semobj_uninit(
struct semobj *smobj);
71 int semobj_post(
struct semobj *smobj);
73 int semobj_broadcast(
struct semobj *smobj);
75 int semobj_wait(
struct semobj *smobj,
76 const struct timespec *timeout) __must_check;
78 int semobj_getvalue(
struct semobj *smobj,
int *sval);
80 int semobj_inquire(
struct semobj *smobj,
size_t waitsz,
81 struct semobj_waitentry *waitlist,