mirror of https://github.com/F-Stack/f-stack.git
145 lines
3.0 KiB
C
145 lines
3.0 KiB
C
|
/* SPDX-License-Identifier: BSD-3-Clause
|
||
|
* Copyright(C) 2021 Marvell.
|
||
|
*/
|
||
|
|
||
|
#include "roc_api.h"
|
||
|
|
||
|
#include "cn9k_worker.h"
|
||
|
#include "cn9k_cryptodev_ops.h"
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_enq(void *port, const struct rte_event *ev)
|
||
|
{
|
||
|
struct cn9k_sso_hws *ws = port;
|
||
|
|
||
|
switch (ev->op) {
|
||
|
case RTE_EVENT_OP_NEW:
|
||
|
return cn9k_sso_hws_new_event(ws, ev);
|
||
|
case RTE_EVENT_OP_FORWARD:
|
||
|
cn9k_sso_hws_forward_event(ws, ev);
|
||
|
break;
|
||
|
case RTE_EVENT_OP_RELEASE:
|
||
|
cnxk_sso_hws_swtag_flush(ws->base + SSOW_LF_GWS_TAG,
|
||
|
ws->base + SSOW_LF_GWS_OP_SWTAG_FLUSH);
|
||
|
break;
|
||
|
default:
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_enq_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
RTE_SET_USED(nb_events);
|
||
|
return cn9k_sso_hws_enq(port, ev);
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_enq_new_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws *ws = port;
|
||
|
uint16_t i, rc = 1;
|
||
|
|
||
|
for (i = 0; i < nb_events && rc; i++)
|
||
|
rc = cn9k_sso_hws_new_event(ws, &ev[i]);
|
||
|
|
||
|
return nb_events;
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_enq_fwd_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws *ws = port;
|
||
|
|
||
|
RTE_SET_USED(nb_events);
|
||
|
cn9k_sso_hws_forward_event(ws, ev);
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
/* Dual ws ops. */
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_dual_enq(void *port, const struct rte_event *ev)
|
||
|
{
|
||
|
struct cn9k_sso_hws_dual *dws = port;
|
||
|
uint64_t base;
|
||
|
|
||
|
base = dws->base[!dws->vws];
|
||
|
switch (ev->op) {
|
||
|
case RTE_EVENT_OP_NEW:
|
||
|
return cn9k_sso_hws_dual_new_event(dws, ev);
|
||
|
case RTE_EVENT_OP_FORWARD:
|
||
|
cn9k_sso_hws_dual_forward_event(dws, base, ev);
|
||
|
break;
|
||
|
case RTE_EVENT_OP_RELEASE:
|
||
|
cnxk_sso_hws_swtag_flush(base + SSOW_LF_GWS_TAG,
|
||
|
base + SSOW_LF_GWS_OP_SWTAG_FLUSH);
|
||
|
break;
|
||
|
default:
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_dual_enq_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
RTE_SET_USED(nb_events);
|
||
|
return cn9k_sso_hws_dual_enq(port, ev);
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_dual_enq_new_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws_dual *dws = port;
|
||
|
uint16_t i, rc = 1;
|
||
|
|
||
|
for (i = 0; i < nb_events && rc; i++)
|
||
|
rc = cn9k_sso_hws_dual_new_event(dws, &ev[i]);
|
||
|
|
||
|
return nb_events;
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_dual_enq_fwd_burst(void *port, const struct rte_event ev[],
|
||
|
uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws_dual *dws = port;
|
||
|
|
||
|
RTE_SET_USED(nb_events);
|
||
|
cn9k_sso_hws_dual_forward_event(dws, dws->base[!dws->vws], ev);
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_ca_enq(void *port, struct rte_event ev[], uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws *ws = port;
|
||
|
|
||
|
RTE_SET_USED(nb_events);
|
||
|
|
||
|
return cn9k_cpt_crypto_adapter_enqueue(ws->base + SSOW_LF_GWS_TAG,
|
||
|
ev->event_ptr);
|
||
|
}
|
||
|
|
||
|
uint16_t __rte_hot
|
||
|
cn9k_sso_hws_dual_ca_enq(void *port, struct rte_event ev[], uint16_t nb_events)
|
||
|
{
|
||
|
struct cn9k_sso_hws_dual *dws = port;
|
||
|
|
||
|
RTE_SET_USED(nb_events);
|
||
|
|
||
|
return cn9k_cpt_crypto_adapter_enqueue(
|
||
|
dws->base[!dws->vws] + SSOW_LF_GWS_TAG, ev->event_ptr);
|
||
|
}
|