nt9856x/rtos/code/vos/drivers/include/kwrap/spinlock.h
2023-03-28 15:07:53 +08:00

75 lines
2.2 KiB
C
Executable File

#ifndef _VOS_SPINLOCK_H_
#define _VOS_SPINLOCK_H_
#ifdef __cplusplus
extern "C" {
#endif
/*-----------------------------------------------------------------------------*/
/* Including Files */
/*-----------------------------------------------------------------------------*/
#include <kwrap/nvt_type.h>
#if (defined(__UITRON) || defined(__ECOS))
#elif defined(__FREERTOS)
#define RTOS_SPINLOCK_INITED_TAG MAKEFOURCC('R', 'S', 'P', 'N')
// Types Declarations
typedef struct {
UINT32 init_tag;
UINT32 is_lock;
} raw_spinlock_t;
typedef raw_spinlock_t vk_spinlock_t;
// Interface Function Prototype
#define __VK_SPIN_LOCK_INITIALIZER(lock) { .init_tag = RTOS_SPINLOCK_INITED_TAG, .is_lock = 0 }
#define __VK_SPIN_LOCK_UNLOCKED(lock) __VK_SPIN_LOCK_INITIALIZER(lock)
#define VK_DEFINE_SPINLOCK(x) vk_spinlock_t x = __VK_SPIN_LOCK_UNLOCKED(x)
#define VK_DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __VK_SPIN_LOCK_UNLOCKED(x)
unsigned long _vk_raw_spin_lock_irqsave(vk_spinlock_t *lock);
void vk_spin_lock_init(vk_spinlock_t *lock);
void vk_spin_unlock_irqrestore(vk_spinlock_t *lock, unsigned long flags);
#define vk_spin_lock_irqsave(lock, flags) \
do { \
flags = _vk_raw_spin_lock_irqsave(lock);\
} while (0)
#elif defined(__LINUX) && defined(__KERNEL__)
typedef struct vk_spinlock {
unsigned int init_tag;
unsigned int buf[15];
} vk_spinlock_t;
#define __VK_SPIN_LOCK_INITIALIZER(lock) { .init_tag = 0, .buf = {0} }
#define __VK_SPIN_LOCK_UNLOCKED(lock) __VK_SPIN_LOCK_INITIALIZER(lock)
#define VK_DEFINE_SPINLOCK(x) vk_spinlock_t x = __VK_SPIN_LOCK_UNLOCKED(x)
//NOTE: Do NOT use _vk_raw_XXX functions directly, these are used by vk_spin_XXX macro
unsigned long _vk_raw_spin_lock_irqsave(vk_spinlock_t *p_voslock);
void vk_spin_lock_init(vk_spinlock_t *p_voslock);
void vk_spin_unlock_irqrestore(vk_spinlock_t *p_voslock, unsigned long flags);
#define vk_spin_lock_irqsave(p_voslock, flags) \
do { \
flags = _vk_raw_spin_lock_irqsave(p_voslock); \
} while (0)
void vk_spin_dump_list(void); //for debug, default disabled
#else
#error Not supported OS
#endif
#ifdef __cplusplus
}
#endif
#endif /* _VOS_SPINLOCK_H_ */