#include "roc_api.h"
#include "roc_priv.h"
+static roc_npa_lf_init_cb_t lf_init_cb;
+
+int
+roc_npa_lf_init_cb_register(roc_npa_lf_init_cb_t cb)
+{
+ if (lf_init_cb != NULL)
+ return -EEXIST;
+
+ lf_init_cb = cb;
+ return 0;
+}
+
void
roc_npa_aura_op_range_set(uint64_t aura_handle, uint64_t start_iova,
uint64_t end_iova)
}
return 0;
}
+
+int
+roc_npa_aura_drop_set(uint64_t aura_handle, uint64_t limit, bool ena)
+{
+ struct npa_aq_enq_req *aura_req;
+ struct npa_lf *lf;
+ int rc;
+
+ lf = idev_npa_obj_get();
+ if (lf == NULL)
+ return NPA_ERR_DEVICE_NOT_BOUNDED;
+
+ aura_req = mbox_alloc_msg_npa_aq_enq(lf->mbox);
+ if (aura_req == NULL)
+ return -ENOMEM;
+ aura_req->aura_id = roc_npa_aura_handle_to_aura(aura_handle);
+ aura_req->ctype = NPA_AQ_CTYPE_AURA;
+ aura_req->op = NPA_AQ_INSTOP_WRITE;
+
+ aura_req->aura.aura_drop_ena = ena;
+ aura_req->aura.aura_drop = limit;
+ aura_req->aura_mask.aura_drop_ena =
+ ~(aura_req->aura_mask.aura_drop_ena);
+ aura_req->aura_mask.aura_drop = ~(aura_req->aura_mask.aura_drop);
+ rc = mbox_process(lf->mbox);
+
+ return rc;
+}
+
static inline char *
npa_stack_memzone_name(struct npa_lf *lf, int pool_id, char *name)
{
npa_stack_dma_alloc(struct npa_lf *lf, char *name, int pool_id, size_t size)
{
const char *mz_name = npa_stack_memzone_name(lf, pool_id, name);
+ size = PLT_ALIGN_CEIL(size, ROC_ALIGN);
return plt_memzone_reserve_aligned(mz_name, size, 0, ROC_ALIGN);
}
aura->err_int_ena |= BIT(NPA_AURA_ERR_INT_AURA_ADD_UNDER);
aura->err_int_ena |= BIT(NPA_AURA_ERR_INT_AURA_FREE_UNDER);
aura->err_int_ena |= BIT(NPA_AURA_ERR_INT_POOL_DIS);
- aura->avg_con = ROC_NPA_AVG_CONT;
+ aura->avg_con = 0;
/* Many to one reduction */
aura->err_qint_idx = aura_id % lf->qints;
pool->err_int_ena = BIT(NPA_POOL_ERR_INT_OVFLS);
pool->err_int_ena |= BIT(NPA_POOL_ERR_INT_RANGE);
pool->err_int_ena |= BIT(NPA_POOL_ERR_INT_PERR);
- pool->avg_con = ROC_NPA_AVG_CONT;
+ pool->avg_con = 0;
/* Many to one reduction */
pool->err_qint_idx = pool_id % lf->qints;
if (__atomic_fetch_add(&idev->npa_refcnt, 1, __ATOMIC_SEQ_CST) != 0)
return 0;
+ if (lf_init_cb) {
+ rc = (*lf_init_cb)(pci_dev);
+ if (rc)
+ goto fail;
+ }
+
rc = npa_attach(dev->mbox);
if (rc)
goto fail;
lf->pf_func = dev->pf_func;
lf->npa_msixoff = npa_msixoff;
- lf->intr_handle = &pci_dev->intr_handle;
+ lf->intr_handle = pci_dev->intr_handle;
lf->pci_dev = pci_dev;
idev->npa_pf_func = dev->pf_func;