@@ -15,7 +15,9 @@ extern "C" {
#endif
#include <odp_module.h>
+#include <odp/api/align.h>
#include <odp/api/packet_io.h>
+#include <odp/drv/shm.h>
/* ODP packet IO operations subsystem declaration */
ODP_SUBSYSTEM_DECLARE(pktio_ops);
@@ -92,6 +94,32 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
#define odp_ops_data(_p, _mod) \
((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s.ops_data)
+#define odp_ops_data_alloc(_p, _size) \
+({ \
+ odpdrv_shm_pool_t _pool; \
+ \
+ _p->s.ops_data = NULL; \
+ _pool = odpdrv_shm_pool_lookup(ODP_PKTIO_OPS_DATA_POOL_NAME); \
+ if (_pool != ODPDRV_SHM_POOL_INVALID) \
+ _p->s.ops_data = odpdrv_shm_pool_alloc(_pool, \
+ ROUNDUP_CACHE_LINE(_size)); \
+ \
+ _p->s.ops_data; \
+})
+
+#define odp_ops_data_free(_p) \
+({ \
+ odpdrv_shm_pool_t _pool; \
+ int _result = -1; \
+ \
+ _pool = odpdrv_shm_pool_lookup(ODP_PKTIO_OPS_DATA_POOL_NAME); \
+ if (_pool != ODPDRV_SHM_POOL_INVALID) { \
+ odpdrv_shm_pool_free(_pool, _p->s.ops_data); \
+ _result = 0; \
+ } \
+ _result; \
+})
+
#ifdef __cplusplus
}
#endif