#ifndef KERNEL_API_INC_SPINLOCK_H_ #define KERNEL_API_INC_SPINLOCK_H_ #include typedef enum { SLOCK_L3 = 0, SLOCK_MAX = 15 }ape_spin_lock_index; typedef struct{ union { unsigned int slock; }; }spinlock_t; #define APE_NR 12 typedef struct{ unsigned int spinlock_count; unsigned int unspinlock_count; unsigned int spinlock_loop; unsigned int g_spin_count; // unsigned int unspinlock_loop; }spin_db_info ; typedef struct{ // spin_db_info spin_per_ape[APE_NR]; spin_db_info spin_per_ape; }spin_debug_t; typedef struct { int lock_addr; //锁物理地址 int flag_addr; // 锁标志物理地址 }ddr_spinlock_t; extern int smart_spinlock_init(int lock_index); extern void smart_spinlock(int lock_index); extern void smart_spinunlock(int lock_index); extern int smart_spin_debug_init(int lock_idx,unsigned int debug_base_addr, int len_bytes); /* 参数:lock_idx 参数范围:1--15 */ extern int smart_get_spin_loop_cnt(int lock_idx); /* 参数:lock_idx 参数范围:1--15 */ extern int smart_get_spin_cnt(int lock_idx); /* 参数:lock_idx 参数范围:1--15 */ extern int smart_get_spinlock_cnt(int lock_idx); /* 参数:lock_idx 参数范围:1--15 */ extern int smart_get_unspinlock_cnt(int lock_idx); extern int smart_ddr_spin_lock_init(ddr_spinlock_t *val); extern void smart_ddr_spinlock(ddr_spinlock_t *val); extern void smart_ddr_spinunlock(ddr_spinlock_t *val); static inline void smart_ddr_spinlock_irq(ddr_spinlock_t *val) { __ucps2_IntEn(f_Disable); smart_ddr_spinlock(val); } static inline void smart_ddr_spinunlock_irqrestore(ddr_spinlock_t *val) { smart_ddr_spinunlock(val); __ucps2_IntEn(f_Enable); } static inline void smart_spinlock_irq(int lock) { __ucps2_IntEn(f_Disable); smart_spinlock(lock); } static inline void smart_spinunlock_irqrestore(int lock) { smart_spinunlock(lock); __ucps2_IntEn(f_Enable); } #endif /* KERNEL_API_INC_SPINLOCK_H_ */