55bc2eadae
In the op new mode of crypto adapter, the completed crypto operation is submitted to the event device by the OCTEON TX2 crypto PMD. During event device dequeue the result of crypto operation is checked. Signed-off-by: Ankur Dwivedi <adwivedi@marvell.com> Acked-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
76 lines
1.8 KiB
C
76 lines
1.8 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright (C) 2020 Marvell International Ltd.
|
|
*/
|
|
|
|
#ifndef _OTX2_EVDEV_CRYPTO_ADPTR_DP_H_
|
|
#define _OTX2_EVDEV_CRYPTO_ADPTR_DP_H_
|
|
|
|
#include <rte_cryptodev.h>
|
|
#include <rte_cryptodev_pmd.h>
|
|
#include <rte_eventdev.h>
|
|
|
|
#include "cpt_pmd_logs.h"
|
|
#include "cpt_ucode.h"
|
|
|
|
#include "otx2_cryptodev.h"
|
|
#include "otx2_cryptodev_hw_access.h"
|
|
#include "otx2_cryptodev_ops_helper.h"
|
|
#include "otx2_cryptodev_qp.h"
|
|
|
|
static inline void
|
|
otx2_ca_deq_post_process(const struct otx2_cpt_qp *qp,
|
|
struct rte_crypto_op *cop, uintptr_t *rsp,
|
|
uint8_t cc)
|
|
{
|
|
if (cop->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC) {
|
|
if (likely(cc == NO_ERR)) {
|
|
/* Verify authentication data if required */
|
|
if (unlikely(rsp[2]))
|
|
compl_auth_verify(cop, (uint8_t *)rsp[2],
|
|
rsp[3]);
|
|
else
|
|
cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
|
|
} else {
|
|
if (cc == ERR_GC_ICV_MISCOMPARE)
|
|
cop->status = RTE_CRYPTO_OP_STATUS_AUTH_FAILED;
|
|
else
|
|
cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
|
|
}
|
|
|
|
if (unlikely(cop->sess_type == RTE_CRYPTO_OP_SESSIONLESS)) {
|
|
sym_session_clear(otx2_cryptodev_driver_id,
|
|
cop->sym->session);
|
|
memset(cop->sym->session, 0,
|
|
rte_cryptodev_sym_get_existing_header_session_size(
|
|
cop->sym->session));
|
|
rte_mempool_put(qp->sess_mp, cop->sym->session);
|
|
cop->sym->session = NULL;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
static inline uint64_t
|
|
otx2_handle_crypto_event(uint64_t get_work1)
|
|
{
|
|
struct cpt_request_info *req;
|
|
struct rte_crypto_op *cop;
|
|
uintptr_t *rsp;
|
|
void *metabuf;
|
|
uint8_t cc;
|
|
|
|
req = (struct cpt_request_info *)(get_work1);
|
|
cc = otx2_cpt_compcode_get(req);
|
|
|
|
rsp = req->op;
|
|
metabuf = (void *)rsp[0];
|
|
cop = (void *)rsp[1];
|
|
|
|
otx2_ca_deq_post_process(req->qp, cop, rsp, cc);
|
|
|
|
rte_mempool_put(req->qp->meta_info.pool, metabuf);
|
|
|
|
return (uint64_t)(cop);
|
|
}
|
|
#endif /* _OTX2_EVDEV_CRYPTO_ADPTR_DP_H_ */
|