70 lines
2.7 KiB
C
Executable File
70 lines
2.7 KiB
C
Executable File
#ifndef _VOS_SEMAPHORE_H_
|
|
#define _VOS_SEMAPHORE_H_
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*-----------------------------------------------------------------------------*/
|
|
/* Including Files */
|
|
/*-----------------------------------------------------------------------------*/
|
|
#include <kwrap/nvt_type.h>
|
|
|
|
//! Init/Exit flag
|
|
void rtos_sem_init(unsigned long max_sem_num);
|
|
void rtos_sem_exit(void);
|
|
|
|
//! Common api
|
|
int vos_sem_create(ID *p_semid, int init_cnt, char *name);
|
|
void vos_sem_destroy(ID semid);
|
|
int vos_sem_wait(ID semid); //non-interruptible and wait forever
|
|
int vos_sem_wait_timeout(ID semid, int timeout_tick); //non-interruptible and wait with timeout, use vos_util_msec_to_tick to convert to ticks
|
|
int vos_sem_wait_interruptible(ID semid); //interruptible or wait forever
|
|
void vos_sem_sig(ID semid);
|
|
char *vos_sem_get_name(ID semid);
|
|
void vos_sem_dump(int (*dump)(const char *fmt, ...), int level);
|
|
|
|
#if defined(__LINUX)
|
|
#define vos_sem_isig vos_sem_sig
|
|
#elif defined(__FREERTOS)
|
|
void vos_sem_isig(ID semid); //sem signal for ISR (FreeRTOS Only)
|
|
#endif
|
|
|
|
#define SEM_HANDLE ID
|
|
#define SEM_SIGNAL(id) vos_sem_sig(id)
|
|
#define SEM_SIGNAL_ISR(id) vos_sem_isig(id)
|
|
#define SEM_WAIT(id) vos_sem_wait(id)
|
|
#define SEM_WAIT_TIMEOUT(id, timeout) vos_sem_wait_timeout(id, timeout)
|
|
#define SEM_WAIT_INTERRUPTIBLE(id) vos_sem_wait_interruptible(id)
|
|
#define SEM_CREATE(id, init_cnt) vos_sem_create(&id, init_cnt, (char *)#id)
|
|
|
|
#define OS_CONFIG_SEMPHORE(id, attr, cnt, max_cnt) vos_sem_create(&id, max_cnt, (char *)#id)
|
|
#define SEM_DESTROY(id) vos_sem_destroy(id)
|
|
|
|
// Provide Linux-style semaphore for Linux only --------- begin
|
|
#if defined(__LINUX) && defined(__KERNEL__)
|
|
struct vk_semaphore {
|
|
unsigned int init_tag;
|
|
unsigned int count;
|
|
unsigned int buf[14];
|
|
};
|
|
|
|
#define __VK_SEMAPHORE_INITIALIZER(name, n) { .init_tag = 0, .count = n, .buf = {0} }
|
|
#define VK_DEFINE_SEMAPHORE(name) struct vk_semaphore name = __VK_SEMAPHORE_INITIALIZER(name, 1)
|
|
|
|
void vk_sema_init(struct vk_semaphore *p_vksem, int val);
|
|
void vk_down(struct vk_semaphore *p_vksem);
|
|
int vk_down_interruptible(struct vk_semaphore *p_vksem);
|
|
int vk_down_killable(struct vk_semaphore *p_vksem);
|
|
int vk_down_trylock(struct vk_semaphore *p_vksem);
|
|
int vk_down_timeout(struct vk_semaphore *p_vksem, long jiffies);
|
|
void vk_up(struct vk_semaphore *p_vksem);
|
|
#endif
|
|
// Provide Linux-style semaphore for Linux only --------- end
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _VOS_SEMAPHORE_H_ */
|
|
|