#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 */
RTE_ASSERT(gpool < FPA_VF_MAX);
res = &fpadev.pool[gpool];
- if (unlikely(res == NULL))
- return 0;
-
return (uintptr_t)res->bar0 | gpool;
}
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,
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;
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;
}
{
uint8_t *idreg;
int res;
- struct fpavf_res *fpa;
+ struct fpavf_res *fpa = NULL;
RTE_SET_USED(pci_drv);
RTE_SET_USED(fpa);