下载
中文
注册

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,说明如下:

  • macro_0用于ROCE协议;
  • macro_1~macro_7用于HCCS协议;
  • macro_9~macro_12用于PCIe协议。

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

处理结果:

  • 成功:返回0。
  • 失败:返回码请参见返回码

异常处理

无。

约束说明

表1 部署场景

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;
}
…