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]));
}
}
bool set_soft_exp_poll;
/* End of input parameters */
-#define ROC_NIX_INL_MEM_SZ (2304)
+#define ROC_NIX_INL_MEM_SZ (1280)
uint8_t reserved[ROC_NIX_INL_MEM_SZ] __plt_cache_aligned;
} __plt_cache_aligned;
uint32_t port_id;
port_id = ring_idx / ROC_NIX_SOFT_EXP_PER_PORT_MAX_RINGS;
- ring_base = inl_dev->sa_soft_exp_ring[ring_idx];
+ ring_base = PLT_PTR_CAST(inl_dev->sa_soft_exp_ring[ring_idx]);
if (!ring_base) {
plt_err("Invalid soft exp ring base");
return;
inl_dev->soft_exp_ring_bmap_mem = mem;
inl_dev->soft_exp_ring_bmap = bmap;
+ inl_dev->sa_soft_exp_ring = plt_zmalloc(
+ ROC_NIX_INL_MAX_SOFT_EXP_RNGS * sizeof(uint64_t), 0);
+ if (!inl_dev->sa_soft_exp_ring) {
+ plt_err("soft expiry ring pointer array alloc failed");
+ plt_free(mem);
+ rc = -ENOMEM;
+ goto exit;
+ }
for (i = 0; i < ROC_NIX_INL_MAX_SOFT_EXP_RNGS; i++)
plt_bitmap_clear(inl_dev->soft_exp_ring_bmap, i);
pthread_join(inl_dev->soft_exp_poll_thread, NULL);
plt_bitmap_free(inl_dev->soft_exp_ring_bmap);
plt_free(inl_dev->soft_exp_ring_bmap_mem);
+ plt_free(inl_dev->sa_soft_exp_ring);
}
/* Flush Inbound CTX cache entries */
/* OUTB soft expiry poll thread */
pthread_t soft_exp_poll_thread;
uint32_t soft_exp_poll_freq;
- void *sa_soft_exp_ring[ROC_NIX_INL_MAX_SOFT_EXP_RNGS];
+ uint64_t *sa_soft_exp_ring;
/* Soft expiry ring bitmap */
struct plt_bitmap *soft_exp_ring_bmap;
#ifndef PLT_ETHER_ADDR_LEN
#define PLT_ETHER_ADDR_LEN RTE_ETHER_ADDR_LEN
#endif
+
+/* Cast to specific datatypes */
+#define PLT_PTR_CAST(val) ((void *)(val))
+#define PLT_U64_CAST(val) ((uint64_t)(val))
+#define PLT_U32_CAST(val) ((uint32_t)(val))
+#define PLT_U16_CAST(val) ((uint16_t)(val))
+
/** Divide ceil */
#define PLT_DIV_CEIL(x, y) \
({ \