1 /* 2 * Copyright 2002-2005, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 * 5 * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. 6 * Distributed under the terms of the NewOS License. 7 */ 8 #ifndef KERNEL_SEM_H 9 #define KERNEL_SEM_H 10 11 12 #include <OS.h> 13 #include <thread.h> 14 15 struct kernel_args; 16 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 extern status_t sem_init(struct kernel_args *args); 23 extern int sem_delete_owned_sems(team_id owner); 24 extern status_t sem_interrupt_thread(struct thread *t); 25 extern int32 sem_used_sems(void); 26 extern int32 sem_max_sems(void); 27 28 extern sem_id create_sem_etc(int32 count, const char *name, team_id owner); 29 30 /* user calls */ 31 sem_id _user_create_sem(int32 count, const char *name); 32 status_t _user_delete_sem(sem_id id); 33 status_t _user_acquire_sem(sem_id id); 34 status_t _user_acquire_sem_etc(sem_id id, int32 count, uint32 flags, bigtime_t timeout); 35 status_t _user_switch_sem(sem_id releaseSem, sem_id id); 36 status_t _user_switch_sem_etc(sem_id releaseSem, sem_id id, int32 count, uint32 flags, bigtime_t timeout); 37 status_t _user_release_sem(sem_id id); 38 status_t _user_release_sem_etc(sem_id id, int32 count, uint32 flags); 39 status_t _user_get_sem_count(sem_id id, int32* thread_count); 40 status_t _user_get_sem_info(sem_id, struct sem_info *, size_t); 41 status_t _user_get_next_sem_info(team_id, int32 *, struct sem_info *, size_t); 42 status_t _user_set_sem_owner(sem_id id, team_id team); 43 44 #ifdef __cplusplus 45 } 46 #endif 47 48 #endif /* KERNEL_SEM_H */ 49