pci: introduce library and driver
[dpdk.git] / drivers / mempool / octeontx / octeontx_fpavf.c
index 3290aa0..07b6ffb 100644 (file)
 
 #include <rte_atomic.h>
 #include <rte_eal.h>
-#include <rte_pci.h>
+#include <rte_bus_pci.h>
 #include <rte_errno.h>
 #include <rte_memory.h>
 #include <rte_malloc.h>
 #include <rte_spinlock.h>
 #include <rte_mbuf.h>
 
-#include <rte_pmd_octeontx_ssovf.h>
+#include "octeontx_mbox.h"
 #include "octeontx_fpavf.h"
 
 /* FPA Mbox Message */
@@ -176,9 +176,6 @@ octeontx_fpa_gpool2handle(uint16_t gpool)
        RTE_ASSERT(gpool < FPA_VF_MAX);
 
        res = &fpadev.pool[gpool];
-       if (unlikely(res == NULL))
-               return 0;
-
        return (uintptr_t)res->bar0 | gpool;
 }
 
@@ -483,6 +480,33 @@ octeontx_fpa_bufpool_block_size(uintptr_t handle)
        return FPA_CACHE_LINE_2_OBJSZ(res->sz128);
 }
 
+int
+octeontx_fpa_bufpool_free_count(uintptr_t handle)
+{
+       uint64_t cnt, limit, avail;
+       uint8_t gpool;
+       uintptr_t pool_bar;
+
+       if (unlikely(!octeontx_fpa_handle_valid(handle)))
+               return -EINVAL;
+
+       /* get the gpool */
+       gpool = octeontx_fpa_bufpool_gpool(handle);
+
+       /* Get pool bar address from handle */
+       pool_bar = handle & ~(uint64_t)FPA_GPOOL_MASK;
+
+       cnt = fpavf_read64((void *)((uintptr_t)pool_bar +
+                               FPA_VF_VHAURA_CNT(gpool)));
+       limit = fpavf_read64((void *)((uintptr_t)pool_bar +
+                               FPA_VF_VHAURA_CNT_LIMIT(gpool)));
+
+       avail = fpavf_read64((void *)((uintptr_t)pool_bar +
+                               FPA_VF_VHPOOL_AVAILABLE(gpool)));
+
+       return RTE_MIN(avail, (limit - cnt));
+}
+
 uintptr_t
 octeontx_fpa_bufpool_create(unsigned int object_size, unsigned int object_count,
                                unsigned int buf_offset, char **va_start,
@@ -496,8 +520,7 @@ octeontx_fpa_bufpool_create(unsigned int object_size, unsigned int object_count,
        int res;
 
        RTE_SET_USED(node_id);
-       FPAVF_STATIC_ASSERTION(sizeof(struct rte_mbuf) <=
-                               OCTEONTX_FPAVF_BUF_OFFSET);
+       RTE_BUILD_BUG_ON(sizeof(struct rte_mbuf) > OCTEONTX_FPAVF_BUF_OFFSET);
 
        if (unlikely(*va_start == NULL))
                goto error_end;
@@ -612,7 +635,7 @@ octeontx_fpa_bufpool_destroy(uintptr_t handle, int node_id)
        cnt = fpavf_read64((void *)((uintptr_t)pool_bar +
                                        FPA_VF_VHAURA_CNT(gpool)));
        if (cnt) {
-               fpavf_log_dbg("buffer exist in pool cnt %ld\n", cnt);
+               fpavf_log_dbg("buffer exist in pool cnt %" PRId64 "\n", cnt);
                return -EBUSY;
        }
 
@@ -756,7 +779,7 @@ fpavf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
 {
        uint8_t *idreg;
        int res;
-       struct fpavf_res *fpa;
+       struct fpavf_res *fpa = NULL;
 
        RTE_SET_USED(pci_drv);
        RTE_SET_USED(fpa);