dcmi_prbs_operate接口原型
函数原型
int dcmi_prbs_operate(int card_id, int device_id, struct dcmi_prbs_operate_param operate_para, struct dcmi_prbs_operate_result *operate_result)
功能说明
对昇腾NPU芯片打流和获取打流结果。
参数说明
参数名称 |
输入/输出 |
类型 |
描述 |
---|---|---|---|
card_id |
输入 |
int |
指定NPU管理单元ID,当前实际支持的ID通过dcmi_get_card_list接口获取。 |
device_id |
输入 |
int |
指定设备编号,通过dcmi_get_device_id_in_card接口获取。取值范围如下: NPU芯片:[0, device_id_max-1]。 |
operate_para |
输入 |
DCMI_PRBS_OPERATE_PARAM |
prbs码流操作入参,通过设置以下结构体中的参数区分打流和查询打流结果。 typedef struct dcmi_serdes_prbs_param_base { unsigned int serdes_prbs_macro_id; //macro_id取值范围为0~7,9~12 说明:
macro_id取值范围为0~7,9~12,说明如下:
unsigned int serdes_prbs_start_lane_id;//lane的开始id,最小值为0,最大值为3 unsigned int serdes_prbs_lane_count;//lane的数量,最小值为1,最大值为4 } DCMI_SERDES_PRBS_PARAM_BASE; typedef DCMI_SERDES_PRBS_PARAM_BASE DCMI_SERDES_PRBS_GET_PARAM; // get时仅需传入基础信息param base,具体获取类型通过sub_cmd区分 typedef struct dcmi_serdes_prbs_set_param { DCMI_SERDES_PRBS_PARAM_BASE param_base;//打流设置基础参数 unsigned int serdes_prbs_type;//打流的码型,参考prbs码型枚举 unsigned int serdes_prbs_direction;//打流的方向,参考prbs打流方向枚举 } DCMI_SERDES_PRBS_SET_PARAM; typedef struct dcmi_prbs_operate_param { unsigned int main_cmd;//打流的命令,参考主命令字枚举 unsigned int sub_cmd; // 标识是设置打流命令还是查询打流结果命令 union { DCMI_SERDES_PRBS_SET_PARAM set_param;//设置打流参数 DCMI_SERDES_PRBS_GET_PARAM get_param;//查询打流结果 } operate_para; } DCMI_PRBS_OPERATE_PARAM; // 主命令字枚举 enum dcmi_prbs_main_cmd_list { DSMI_SERDES_CMD_PRBS = 0,//打流的命令 DSMI_SERDES_CMD_MAX }; // 子命令字枚举 enum dcmi_prbs_sub_cmd_list { SERDES_PRBS_SET_CMD = 0,//设置打流的子命令 SERDES_PRBS_GET_RESULT_CMD, // 查结果 SERDES_PRBS_GET_STATUS_CMD, // 查码型 SERDES_PRBS_SUB_CMD_MAX }; // prbs码型枚举 enum dcmi_serdes_prbs_type_list { SERDES_PRBS_TYPE_END = 0, SERDES_PRBS_TYPE_7, SERDES_PRBS_TYPE_9, SERDES_PRBS_TYPE_10, SERDES_PRBS_TYPE_11, SERDES_PRBS_TYPE_15, SERDES_PRBS_TYPE_20, SERDES_PRBS_TYPE_23, SERDES_PRBS_TYPE_31, SERDES_PRBS_TYPE_58, SERDES_PRBS_TYPE_63, SERDES_PRBS_TYPE_MAX }; 说明:
当前不支持58、63码型。 // prbs打流方向枚举 enum dcmi_serdes_prbs_direction { SERDES_PRBS_DIRECTION_TX = 0, SERDES_PRBS_DIRECTION_RX, SERDES_PRBS_DIRECTION_TXRX, SERDES_PRBS_DIRECTION_MAX }; |
operate_result |
输出 |
DCMI_PRBS_OPERATE_RESULT |
查询打流结果或查询prbs链路状态。 #define MAX_LANE_NUM 8 typedef struct dcmi_prbs_operate_result { union { SERDES_PRBS_STATUS_S result[MAX_LANE_NUM];//打流返回结果 DCMI_SERDES_PRBS_LANE_STATUS lane_status[MAX_LANE_NUM];//lane的状态 } prbs_result; } DCMI_PRBS_OPERATE_RESULT; struct dcmi_serdes_prbs_lane_status { unsigned int lane_prbs_tx_status;//tx方向打流码型 unsigned int lane_prbs_rx_status;//rx方向打流码型 }; typedef struct { unsigned int check_en;//查询打流是否打开 unsigned int check_type;//查询打流码型 unsigned int error_status;//查询打流状态 unsigned int error_cnt;//错误的码型数量统计 unsigned long error_rate; //打流错误率的倒数,1/error_rate的值小于10-5为正常 unsigned int alos_status; //输入的信号幅度,0表示正常,1表示过低 unsigned long time_val;//设置打流和查寻打流结果之间的时间间隔 } SERDES_PRBS_STATUS_S; |
返回值
类型 |
描述 |
---|---|
int |
处理结果:
|
异常处理
无。
约束说明
Linux物理机 |
Linux物理机容器 |
|
---|---|---|
root用户 |
运行用户组(非root用户) |
root用户 |
N |
N |
N |
调用示例
… int ret = 0; int card_id = 0; int device_id = 0; DCMI_PRBS_OPERATE_PARAM operate_para = {0}; operate_para.main_cmd = DSMI_SERDES_CMD_PRBS; operate_para.sub_cmd = SERDES_PRBS_SET_CMD; operate_para.operate_para.set_param.param_base = {0, 0, 1}; operate_para.operate_para.set_param.serdes_prbs_type = SERDES_PRBS_TYPE_7; operate_para.operate_para.set_param.serdes_prbs_direction = SERDES_PRBS_DIRECTION_TXRX; DCMI_PRBS_OPERATE_RESULT operate_result; ret = dcmi_prbs_operate(card_id, device_id, operate_para, &operate_result); if (ret != 0){ //todo:记录日志 return ret; } …