inl_dev = idev->nix_inl_dev;
if (inb_inl_dev) {
+ if (inl_dev == NULL)
+ goto exit;
min = inl_dev->ipsec_in_min_spi;
max = inl_dev->ipsec_in_max_spi;
mask = inl_dev->inb_spi_mask;
if (!sa_base)
return 0;
+ /* Get SA size */
+ sz = roc_nix_inl_inb_sa_sz(roc_nix, inb_inl_dev);
+ if (!sz)
+ return 0;
+
+ if (roc_nix->custom_sa_action)
+ return (sa_base + (spi * sz));
+
/* Check if SPI is in range */
mask = roc_nix_inl_inb_spi_range(roc_nix, inb_inl_dev, &min_spi,
&max_spi);
plt_warn("Inbound SA SPI %u not in range (%u..%u)", spi,
min_spi, max_spi);
- /* Get SA size */
- sz = roc_nix_inl_inb_sa_sz(roc_nix, inb_inl_dev);
- if (!sz)
- return 0;
-
/* Basic logic of SPI->SA for now */
return (sa_base + ((spi & mask) * sz));
}
+int
+roc_nix_reassembly_configure(uint32_t max_wait_time, uint16_t max_frags)
+{
+ struct idev_cfg *idev = idev_get_cfg();
+ struct roc_cpt *roc_cpt;
+ struct roc_cpt_rxc_time_cfg cfg;
+
+ PLT_SET_USED(max_frags);
+ roc_cpt = idev->cpt;
+ if (!roc_cpt) {
+ plt_err("Cannot support inline inbound, cryptodev not probed");
+ return -ENOTSUP;
+ }
+
+ cfg.step = (max_wait_time * 1000 / ROC_NIX_INL_REAS_ACTIVE_LIMIT);
+ cfg.zombie_limit = ROC_NIX_INL_REAS_ZOMBIE_LIMIT;
+ cfg.zombie_thres = ROC_NIX_INL_REAS_ZOMBIE_THRESHOLD;
+ cfg.active_limit = ROC_NIX_INL_REAS_ACTIVE_LIMIT;
+ cfg.active_thres = ROC_NIX_INL_REAS_ACTIVE_THRESHOLD;
+
+ return roc_cpt_rxc_time_cfg(roc_cpt, &cfg);
+}
+
int
roc_nix_inl_inb_init(struct roc_nix *roc_nix)
{
struct dev *dev = &nix->dev;
struct msix_offset_rsp *rsp;
struct nix_inl_dev *inl_dev;
+ size_t sa_sz, ring_sz;
uint16_t sso_pffunc;
uint8_t eng_grpmask;
uint64_t blkaddr, i;
+ uint64_t *ring_base;
uint16_t nb_lf;
void *sa_base;
- size_t sa_sz;
int j, rc;
void *sa;
/* Allocate memory to be used as a ring buffer to poll for
* soft expiry event from ucode
*/
+ ring_sz = (ROC_IPSEC_ERR_RING_MAX_ENTRY + 1) * sizeof(uint64_t);
+ ring_base = inl_dev->sa_soft_exp_ring;
for (i = 0; i < nix->outb_se_ring_cnt; i++) {
- inl_dev->sa_soft_exp_ring[nix->outb_se_ring_base + i] =
- plt_zmalloc((ROC_IPSEC_ERR_RING_MAX_ENTRY + 1) *
- sizeof(uint64_t),
- 0);
- if (!inl_dev->sa_soft_exp_ring[i]) {
+ ring_base[nix->outb_se_ring_base + i] =
+ PLT_U64_CAST(plt_zmalloc(ring_sz, 0));
+ if (!ring_base[nix->outb_se_ring_base + i]) {
plt_err("Couldn't allocate memory for soft exp ring");
while (i--)
- plt_free(inl_dev->sa_soft_exp_ring
- [nix->outb_se_ring_base + i]);
+ plt_free(PLT_PTR_CAST(
+ ring_base[nix->outb_se_ring_base + i]));
rc = -ENOMEM;
goto lf_fini;
}
struct idev_cfg *idev = idev_get_cfg();
struct dev *dev = &nix->dev;
struct nix_inl_dev *inl_dev;
+ uint64_t *ring_base;
int i, rc, ret = 0;
if (!nix->inl_outb_ena)
if (idev && idev->nix_inl_dev) {
inl_dev = idev->nix_inl_dev;
+ ring_base = inl_dev->sa_soft_exp_ring;
for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++) {
- if (inl_dev->sa_soft_exp_ring[i])
- plt_free(inl_dev->sa_soft_exp_ring[i]);
+ if (ring_base[i])
+ plt_free(PLT_PTR_CAST(ring_base[i]));
}
}