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_ */
 | 
						|
 |