#ifndef __DUP_APE_COM_H__ #define __DUP_APE_COM_H__ /*error code*/ #define EQUEEMPTY 20 #define EMATCH 21 #define EINVAL 22 /*invalid argment*/ #define EREREG 23 /*re registration*/ enum hwque_status{ hwque_false, hwque_true }; typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef unsigned char uint8_t; typedef unsigned long long uint64_t; #define NULL ((void*)0) #define QUE_MAX_NR 16 #define HW_QUE_NR 8 #define QUE_NR 16 #define B_128_16BLCOKS 8 #define B_256_32BLOCKS 32 #define BLOCKS_64 64 //#define QUE_NR 32 #define SHM_QUE_MAX 8 #define MAP_QUE_MAX 16 typedef enum{ CPSM_SM = 0, JSSM_SM, SM_NR }ENUM_SHM; typedef struct hw_que_reg_msg{ uint32_t hw_base_reg; uint32_t hw_size_reg; uint32_t hw_depth_reg; uint32_t hw_start_addr; int cpuid; uint32_t ape_vector_id; uint32_t arm_vector_id; }hw_reg_desc_t; typedef struct shm_desc{ hw_reg_desc_t queid[SHM_QUE_MAX]; uint32_t hw_sm_ctrl_reg; uint32_t width_bits; uint32_t que_depths; }shm_obj; typedef struct mpu_shm{ shm_obj shm_type_s[SM_NR]; int v_map_queid[MAP_QUE_MAX]; }mpu_shm_obj; typedef struct{ unsigned int out_failed_cnt; unsigned int in_failed_cnt; unsigned int out_success_cnt; unsigned int in_success_cnt; unsigned int in_que_depth_addr; unsigned int out_que_depth_addr; }hwq_db_info ; typedef struct{ hwq_db_info per_hwq[QUE_MAX_NR]; }hwq_debug_t; /* 函数名称:smart_hq_init 输入参数: cpuid 返回类型: int 返回值: 小于0 表示失败 返回值:等于0 表示成功 函数功能:硬件队列初始化 */ extern int smart_hq_init(int cpuid); /* 函数名称:smart_get_hq_vector 输入参数: cpuid 输入参数:queid 返回类型: int 返回值:小于等于0 表示失败 函数功能:获取当前硬件队列中断号 */ extern int smart_get_hq_vector(int cpuid,int queid); /******************** 函数名称:smart_in_que 函数参数:queid 队列编号 函数参数:val 入队值 函数功能:硬件队列入队 函数使用注意点1: 多核生产者入队时需要加锁 ******************/ extern int smart_in_que(int queid,uint32_t val); /* 函数名称:smart_que_is_full 输入参数: queid 返回类型:int 返回值: 1 表示 true 返回值: 0 表示 false */ extern int smart_que_is_full(int queid); /********************* 函数名称:smart_out_que 函数参数:queid 队列编号 输出参数:idx 获取当前队列的索引值 函数功能:队列出队获取当前队列的索引值 *********************/ extern int smart_out_que(int queid,uint32_t *val); /* 函数名称:smart_que_is_empty 输入参数: queid 返回类型: int 返回值: 1 表示true 返回值:0 表示false */ extern int smart_que_is_empty(int queid); /* 函数名称:smart_get_que_info 输入参数: queid 输出参数 *dep 输出参数: *width 输出参数: *used 输出参数: *cpuid 返回类型: int 返回值:0 表示成功,非0 表示失败 */ extern int smart_get_que_info(int queid,int *dep,int *width,int *used,int *cpuid); /* // 函数名称:smart_enable_q_nempty 函数名称:smart_hq_nempty_int_enable 输入参数: queid 返回值:int 函数功能:使能非空中断 */ //extern void smart_enable_q_nempty(int queid); //extern void smart_hq_nempty_int_enable(int queid); extern int smart_enable_q_nempty(int queid); /* // 函数名称:smart_disable_q_nempty 函数名称:smart_hq_nempty_int_disable 输入参数: queid 返回值:int 函数功能:去使能非空中断 */ extern void smart_disable_q_nempty(int queid); //extern void smart_hq_nempty_int_disable(int queid); /* 函数名称:smart_que_bind 输入参数: queid 输入参数;cpuid 返回类型:int 返回值 : 0 表示返回成功,非0 表示返回失败 函数功能:去使能非空中断 */ extern int smart_que_bind(int cpuid,int queid); /* 函数名称:smart_hq_debug_init 输入参数: debug_base_addr 输入参数;len_bytes 返回类型:int 返回值:0 表示成功 函数功能:调试初始化接口 注意: 通过地址与,长度指定相应的buf 数据空间,存放相应的中断调试信息 这些调试信息已经格式化,地址由用户指定,len_bytes 不能小于sizeof(hwq_debug_t) 数据格式化结构是: hwq_debug_t 数据格式 example: typedef struct{ unsigned int out_failed_cnt; unsigned int in_failed_cnt; unsigned int out_success_cnt; unsigned int in_success_cnt; unsigned int cur_que_depth; unsigned int bind_cpuid; }hwq_db_info ; typedef struct{ hwq_db_info per_hwq[HW_QUE_NR]; }hwq_debug_t; */ extern int smart_hq_debug_init( uint32_t debug_base_addr, uint32_t len_bytes); /* 函数名称:smart_get_inque_ok_cnt 输入参数: queid 返回类型:int 返回值 : 小于等于0表示失败 函数功能:获取当前入队成功计数 */ extern int smart_get_inque_ok_cnt(int queid); /* 函数名称:smart_get_inque_failed_cnt 输入参数: queid 返回类型:int 返回值 : 小于等于0表示失败 函数功能:获取当前入队失败计数 */ extern int smart_get_inque_failed_cnt(int queid); /* 函数名称:smart_get_outque_ok_cnt 输入参数: queid 返回类型:int 返回值:小于等于0表示失败 函数功能:获取当前出队成功计数 */ extern int smart_get_outque_ok_cnt(int queid); /* 函数名称:smart_get_outque_failed_cnt 输入参数: queid 返回类型:int 返回值: 0表示成功,非0表示失败 函数功能:获取当前出队失败计数 */ extern int smart_get_outque_failed_cnt(int queid); #endif