1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /* EC message format of Warpdrive */ struct wcrypto_ec_msg { __u8 alg_type;/* Denoted by enum wcrypto_alg_type */ __u8 ec_type; /* Denoted by enum wcrypto_ec_type */ __u8 op_type; /* Denoted by enum wcrypto_ec_op_type */ __u8 data_fmt; /* Data format, denoted by enum wd_buff_type */ __u8 result;/* Data format, denoted by WD error code */ __u8 *coef_matrix; /* Coefficient matrix */ __u8 coef_matrix_load; /* coef_matrix reload control, 0: do not load, 1: load */ __u8 coef_matrix_len; /* length of loaded coe_matrix, equal to src_num*/ __u8 alg_blk_size; /* algorithm granularity, 0: 512 gran, 1: 4096 gran*/ __u16 block_size;/* support 512,520,4096,4104,4160 */ __u16 block_num;/*number of sector*/ __u8 *in; /* Input address, should be dma buffer */ __u8 in_disk_num;/* number of source disks */ __u8 *out; /* Result address should be dma buffer */ __u8 out_disk_num; /* number of destination disks */ __u64 usr_data; /* user identifier: for example: struct wcrypto_cb_tag */ }; enum wcrypto_ec_type { WCRYPTO_EC_FLEXEC, WCRYPTO_EC_MPCC, }; enum wcrypto_ec_op_type { WCRYPTO_EC_GENERATE, WCRYPTO_EC_VALIDATE, WCRYPTO_EC_UPDATE, WCRYPTO_EC_RECONSTRUCT, }; struct wcrypto_ec_ctx_setup { enum wcrypto_ec_type ec_type; wcrypto_cb cb; __u16 data_fmt; struct wd_mm_br br; }; struct wcrypto_ec_op_data { enum wcrypto_ec_op_type op_type; int status; __u8 *coef_matrix; /* Coefficient matrix */ __u8 coef_matrix_load; /* coef_matrix reload control, 0: do not load, 1: load */ __u8 coef_matrix_len; /* length of loaded coe_matrix, equal to src_num*/ __u8 alg_blk_size; /* algorithm granularity, 0: 512 gran, 1: 4096 gran*/ __u16 block_size;/*support 512,520,4096,4104,4160*/ __u16 block_num;/*number of sector*/ void *in; /* Input address */ __u8 in_disk_num;/* number of source disks */ void *out; /* Result address */ __u8 out_disk_num; /* number of destination disks */ void *priv; }; |
函数原型 |
void * wcrypto_create_ec_ctx (struct wd_queue *q, struct wcrypto_ec_ctx_setup *setup); |
---|---|
函数功能 |
基于Warpdrive queue创建EC算法context |
输入说明 |
q:warpdrive queue setup:用户对于context的创建输入参数 |
输出说明 |
无; |
返回值说明 |
Context地址 NULL:失败 非NULL:成功 |
使用说明 |
支持多线程 |
注意事项 |
函数原型 |
int wcrypto_do_ec(void *ctx, struct wcrypto_ec_op_data *opdata, void *tag); |
---|---|
函数功能 |
基于EC context的EC算法操作 |
输入说明 |
ctx:EC context opdata:EC操作参数,包括输入输出以及操作类型等 tag:用户回调表示,为NULL时,为同步接口,否则为异步接口 |
输出说明 |
无 |
返回值说明 |
0:成功 否则失败 |
使用说明 |
同一个ctx仅支持单线程 |
注意事项 |
函数原型 |
int wcrypto_ec_poll(struct wd_queue *q, unsigned int num); |
---|---|
函数功能 |
基于warpdrive queue的EC算法poll操作 |
输入说明 |
q:Warpdrive EC queue num:0---表示将队列q中所有回应消息全部收上来,非0---表示将队列中num个回应消息收上来 |
输出说明 |
无 |
返回值说明 |
大于0:成功收到对应个数的回应消息 0:没有收到任何回应 负值:poll发生错误 |
使用说明 |
同一个q仅支持单线程 |
注意事项 |
函数原型 |
void wcrypto_del_ec_ctx(void *ctx); |
---|---|
函数功能 |
删除一个EC的context |
输入说明 |
ctx:需要删除的EC context |
输出说明 |
无 |
返回值说明 |
无 |
使用说明 |
|
注意事项 |