#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 { unsigned int lock_addr; //锁物理地址 unsigned 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); /* 函数名称:smart_spin_debug_init 输入参数: lock_idx 输入参数:debug_base_addr 输入参数: len_bytes 返回类型: int 返回值: 小于0 表示失败 返回值: 0 表示成功 函数功能: 自旋锁调试接口, 注意: 通过lock_idx ,地址与长度指定相应的buf 数据空间,存放相应的自旋锁调试信息。 这些调试信息已经格式化,地址由用户指定,len_bytes 不能小于sizeof(spin_debug_t) 数据格式化内容是 spin_debug_t */ 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_spinlock_init(ddr_spinlock_t *val); extern void smart_ddr_spinlock(ddr_spinlock_t *val); extern void smart_ddr_spinunlock(ddr_spinlock_t *val); /* 函数名称:smart_ddr_spinlock_irq 函数参数: val 参数类型: ddr_spinlock_t 函数功能: 关中断加锁 函数说明: 非中断状态下使用 */ static inline void smart_ddr_spinlock_irq(ddr_spinlock_t *d_lock) { __ucps2_IntEn(f_Disable); smart_ddr_spinlock(d_lock); } /* 函数名称:smart_ddr_spinunlock_irqrestore 函数参数: d_lock 参数类型: ddr_spinlock_t 函数功能: 解锁开中断 函数说明: 非中断状态下使用 */ static inline void smart_ddr_spinunlock_irqrestore(ddr_spinlock_t *d_lock) { smart_ddr_spinunlock(d_lock); __ucps2_IntEn(f_Enable); } /* 函数名称:smart_spinlock_irq 函数参数: lock 参数类型: int 函数功能: 关中断加锁 函数说明: 非中断状态下使用 */ static inline void smart_spinlock_irq(int lock) { __ucps2_IntEn(f_Disable); smart_spinlock(lock); } /* 函数名称:smart_spinunlock_irqrestore 函数参数: d_lock 参数类型: int 函数功能: 解锁开中断 函数说明: 非中断状态下使用 */ static inline void smart_spinunlock_irqrestore(int lock) { smart_spinunlock(lock); __ucps2_IntEn(f_Enable); } #endif /* KERNEL_API_INC_SPINLOCK_H_ */