X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcrypto%2Focteontx%2Fotx_cryptodev_ops.c;h=3fbf5d5368015af53bd7a39384cdb02c5822c44e;hb=29dc10d9424ccf26a346387b0a707185e2432400;hp=f97ce3a346cc4ce8ff4b5953426444db6a4f75e1;hpb=aa2cbd32e9695c0f552ee26653b7867cade5ffb3;p=dpdk.git diff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c b/drivers/crypto/octeontx/otx_cryptodev_ops.c index f97ce3a346..3fbf5d5368 100644 --- a/drivers/crypto/octeontx/otx_cryptodev_ops.c +++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c @@ -358,7 +358,7 @@ otx_cpt_asym_session_clear(struct rte_cryptodev *dev, rte_mempool_put(sess_mp, priv); } -static __rte_always_inline int32_t __hot +static __rte_always_inline int32_t __rte_hot otx_cpt_request_enqueue(struct cpt_instance *instance, struct pending_queue *pqueue, void *req) @@ -391,7 +391,7 @@ otx_cpt_request_enqueue(struct cpt_instance *instance, return 0; } -static __rte_always_inline int __hot +static __rte_always_inline int __rte_hot otx_cpt_enq_single_asym(struct cpt_instance *instance, struct rte_crypto_op *op, struct pending_queue *pqueue) @@ -443,6 +443,13 @@ otx_cpt_enq_single_asym(struct cpt_instance *instance, if (unlikely(ret)) goto req_fail; break; + case RTE_CRYPTO_ASYM_XFORM_ECPM: + ret = cpt_ecpm_prep(&asym_op->ecpm, ¶ms, + sess->ec_ctx.curveid); + if (unlikely(ret)) + goto req_fail; + break; + default: op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; ret = -EINVAL; @@ -464,7 +471,7 @@ req_fail: return ret; } -static __rte_always_inline int __hot +static __rte_always_inline int __rte_hot otx_cpt_enq_single_sym(struct cpt_instance *instance, struct rte_crypto_op *op, struct pending_queue *pqueue) @@ -506,7 +513,7 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance, return 0; } -static __rte_always_inline int __hot +static __rte_always_inline int __rte_hot otx_cpt_enq_single_sym_sessless(struct cpt_instance *instance, struct rte_crypto_op *op, struct pending_queue *pqueue) @@ -566,7 +573,7 @@ exit: #define OP_TYPE_SYM 0 #define OP_TYPE_ASYM 1 -static __rte_always_inline int __hot +static __rte_always_inline int __rte_hot otx_cpt_enq_single(struct cpt_instance *inst, struct rte_crypto_op *op, struct pending_queue *pqueue, @@ -591,7 +598,7 @@ otx_cpt_enq_single(struct cpt_instance *inst, return -ENOTSUP; } -static __rte_always_inline uint16_t __hot +static __rte_always_inline uint16_t __rte_hot otx_cpt_pkt_enqueue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops, const uint8_t op_type) { @@ -704,7 +711,20 @@ otx_cpt_asym_dequeue_ecdsa_op(struct rte_crypto_ecdsa_op_param *ecdsa, ecdsa->s.length = prime_len; } -static __rte_always_inline void __hot +static __rte_always_inline void +otx_cpt_asym_dequeue_ecpm_op(struct rte_crypto_ecpm_op_param *ecpm, + struct cpt_request_info *req, + struct cpt_asym_ec_ctx *ec) +{ + int prime_len = ec_grp[ec->curveid].prime.length; + + memcpy(ecpm->r.x.data, req->rptr, prime_len); + memcpy(ecpm->r.y.data, req->rptr + ROUNDUP8(prime_len), prime_len); + ecpm->r.x.length = prime_len; + ecpm->r.y.length = prime_len; +} + +static __rte_always_inline void __rte_hot otx_cpt_asym_post_process(struct rte_crypto_op *cop, struct cpt_request_info *req) { @@ -726,6 +746,9 @@ otx_cpt_asym_post_process(struct rte_crypto_op *cop, case RTE_CRYPTO_ASYM_XFORM_ECDSA: otx_cpt_asym_dequeue_ecdsa_op(&op->ecdsa, req, &sess->ec_ctx); break; + case RTE_CRYPTO_ASYM_XFORM_ECPM: + otx_cpt_asym_dequeue_ecpm_op(&op->ecpm, req, &sess->ec_ctx); + break; default: CPT_LOG_DP_DEBUG("Invalid crypto xform type"); cop->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; @@ -733,7 +756,7 @@ otx_cpt_asym_post_process(struct rte_crypto_op *cop, } } -static __rte_always_inline void __hot +static __rte_always_inline void __rte_hot otx_cpt_dequeue_post_process(struct rte_crypto_op *cop, uintptr_t *rsp, const uint8_t op_type) { @@ -759,7 +782,7 @@ otx_cpt_dequeue_post_process(struct rte_crypto_op *cop, uintptr_t *rsp, return; } -static __rte_always_inline uint16_t __hot +static __rte_always_inline uint16_t __rte_hot otx_cpt_pkt_dequeue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops, const uint8_t op_type) { @@ -875,7 +898,6 @@ static struct rte_cryptodev_ops cptvf_ops = { .stats_reset = otx_cpt_stats_reset, .queue_pair_setup = otx_cpt_que_pair_setup, .queue_pair_release = otx_cpt_que_pair_release, - .queue_pair_count = NULL, /* Crypto related operations */ .sym_session_get_size = otx_cpt_get_session_size, @@ -945,7 +967,8 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev) RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING | RTE_CRYPTODEV_FF_IN_PLACE_SGL | RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT | - RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT; + RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT | + RTE_CRYPTODEV_FF_SYM_SESSIONLESS; break; default: /* Feature not supported. Abort */