Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions include/semaphore.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Phoenix-RTOS
*
* libphoenix
*
* POSIX implementation - semaphores
*
* Copyright 2026 Phoenix Systems
* Author: Michał Lach
*
* This file is part of Phoenix-RTOS.
*
* %LICENSE%
*/

#include <time.h>
#include <limits.h>
#include <sys/threads.h>
#include <sys/semaphore.h>

#define SEM_FAILED ((sem_t *)0xDAAB0000)

typedef struct {
/* clang-format off */
enum { smNamed, smUnnamed } type;
/* clang-format on */

union {
semaphore_t unnamed;
oid_t named;
};
} sem_t;

extern int sem_wait(sem_t *sem);


extern int sem_trywait(sem_t *sem);


extern int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict abs_timeout);


extern int sem_getvalue(sem_t *restrict sem, int *restrict value);


extern int sem_post(sem_t *sem);


extern int sem_close(sem_t *sem);


extern sem_t *sem_open(const char *name, int oflag, ... /* mode_t mode, unsigned int value */);


extern int sem_unlink(const char *name);


extern int sem_destroy(sem_t *sem);


extern int sem_init(sem_t *sem, int pshared, unsigned int value);
28 changes: 28 additions & 0 deletions include/sys/semaphore.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Phoenix-RTOS
*
* libphoenix
*
* POSIX implementation - semaphores
*
* Copyright 2026 Phoenix Systems
* Author: Michał Lach
*
* This file is part of Phoenix-RTOS.
*
* %LICENSE%
*/

#include <limits.h>
#include <sys/ioctl.h>

#define SEMAPHORE_PATH "/dev/posix/sem/"
#define SEMCTL_PATH "/dev/posix/semctl"
#define SEMAPHORE_MAX_COUNT (128)
#define SEMAPHORE_NAME_MAX (NAME_MAX - sizeof(SEMAPHORE_PATH) - 1)
#define SEM_VALUE_MAX INT_MAX

#define SEM_UP _IO('s', 0x1)
#define SEM_DOWN _IO('s', 0x2)
#define SEM_DOWN_TRY _IO('s', 0x3)
#define SEM_DOWN_TIMEOUT _IOW('s', 0x4, time_t)
6 changes: 6 additions & 0 deletions include/sys/threads.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,18 @@ extern int semaphoreCreate(semaphore_t *s, unsigned int v);
extern int semaphoreDown(semaphore_t *s, time_t timeout);


extern int semaphoreTryDown(semaphore_t *s);


extern int semaphoreUp(semaphore_t *s);


extern int semaphoreDone(semaphore_t *s);


extern int semaphoreCount(semaphore_t *s);


extern int phCondCreate(handle_t *h, const struct condAttr *attr);


Expand Down
2 changes: 1 addition & 1 deletion posix/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
# Author: Pawel Pisarczyk
#

OBJS += $(addprefix $(PREFIX_O)posix/, stubs.o utils.o idtree.o)
OBJS += $(addprefix $(PREFIX_O)posix/, stubs.o utils.o idtree.o sem.o)
Loading
Loading