X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcommon%2Fcnxk%2Froc_idev.c;h=63cc040446e09c207046ad2e5e95c7ee0f8ecc43;hb=2c19694c8ecd3b9b60f7d0a8975316f111a01476;hp=7fbbbdc90d08f16e642a594452a45447660cc694;hpb=665ff1ccc2c4350dd777dbd372785614d2a42f81;p=dpdk.git diff --git a/drivers/common/cnxk/roc_idev.c b/drivers/common/cnxk/roc_idev.c index 7fbbbdc90d..63cc040446 100644 --- a/drivers/common/cnxk/roc_idev.c +++ b/drivers/common/cnxk/roc_idev.c @@ -29,9 +29,103 @@ idev_get_cfg(void) void idev_set_defaults(struct idev_cfg *idev) { + idev->sso_pf_func = 0; + idev->npa = NULL; + idev->npa_pf_func = 0; + idev->max_pools = 128; idev->lmt_pf_func = 0; idev->lmt_base_addr = 0; idev->num_lmtlines = 0; + __atomic_store_n(&idev->npa_refcnt, 0, __ATOMIC_RELEASE); +} + +uint16_t +idev_sso_pffunc_get(void) +{ + struct idev_cfg *idev; + uint16_t sso_pf_func; + + idev = idev_get_cfg(); + sso_pf_func = 0; + if (idev != NULL) + sso_pf_func = __atomic_load_n(&idev->sso_pf_func, + __ATOMIC_ACQUIRE); + + return sso_pf_func; +} + +void +idev_sso_pffunc_set(uint16_t sso_pf_func) +{ + struct idev_cfg *idev; + + idev = idev_get_cfg(); + if (idev != NULL) + __atomic_store_n(&idev->sso_pf_func, sso_pf_func, + __ATOMIC_RELEASE); +} + +uint16_t +idev_npa_pffunc_get(void) +{ + struct idev_cfg *idev; + uint16_t npa_pf_func; + + idev = idev_get_cfg(); + npa_pf_func = 0; + if (idev != NULL) + npa_pf_func = idev->npa_pf_func; + + return npa_pf_func; +} + +struct npa_lf * +idev_npa_obj_get(void) +{ + struct idev_cfg *idev; + + idev = idev_get_cfg(); + if (idev && __atomic_load_n(&idev->npa_refcnt, __ATOMIC_ACQUIRE)) + return idev->npa; + + return NULL; +} + +uint32_t +roc_idev_npa_maxpools_get(void) +{ + struct idev_cfg *idev; + uint32_t max_pools; + + idev = idev_get_cfg(); + max_pools = 0; + if (idev != NULL) + max_pools = idev->max_pools; + + return max_pools; +} + +void +roc_idev_npa_maxpools_set(uint32_t max_pools) +{ + struct idev_cfg *idev; + + idev = idev_get_cfg(); + if (idev != NULL) + __atomic_store_n(&idev->max_pools, max_pools, __ATOMIC_RELEASE); +} + +uint16_t +idev_npa_lf_active(struct dev *dev) +{ + struct idev_cfg *idev; + + /* Check if npalf is actively used on this dev */ + idev = idev_get_cfg(); + if (!idev || !idev->npa || idev->npa->mbox != dev->mbox) + return 0; + + return __atomic_load_n(&idev->npa_refcnt, __ATOMIC_ACQUIRE); } uint16_t @@ -75,3 +169,16 @@ roc_idev_num_lmtlines_get(void) return num_lmtlines; } + +struct roc_nix * +roc_idev_npa_nix_get(void) +{ + struct npa_lf *npa_lf = idev_npa_obj_get(); + struct dev *dev; + + if (!npa_lf) + return NULL; + + dev = container_of(npa_lf, struct dev, npa); + return dev->roc_nix; +}