@@ -42,7 +42,10 @@ typedef union pktio_entry_u pktio_entry_t;
struct pktio_entry {
const pktio_ops_module_t *ops; /**< Implementation specific methods */
- pktio_ops_data_t ops_data;
+ union {
+ pktio_ops_data_t ops_data;
+ uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
+ };
/* These two locks together lock the whole pktio device */
odp_ticketlock_t rxl; /**< RX ticketlock */
odp_ticketlock_t txl; /**< TX ticketlock */
@@ -50,7 +50,10 @@ typedef union pktio_entry_u pktio_entry_t;
struct pktio_entry {
const pktio_ops_module_t *ops; /**< Implementation specific methods */
- pktio_ops_data_t ops_data; /**< IO operation specific data */
+ union {
+ pktio_ops_data_t ops_data; /**< IO operation specific data */
+ uint8_t _ops_data[ODP_PKTIO_ODPS_DATA_MAX_SIZE];
+ };
/* These two locks together lock the whole pktio device */
odp_ticketlock_t rxl; /**< RX ticketlock */
odp_ticketlock_t txl; /**< TX ticketlock */
@@ -105,4 +105,11 @@ typedef union {
/* Extract pktio ops data from pktio entry structure */
#define ops_data(mod) s.ops_data.mod
+/* Maximum size of pktio specific ops data.*/
+#define ODP_PKTIO_ODPS_DATA_MAX_SIZE 80000
+
+/* Extract pktio ops data from pktio entry structure */
+#define odp_ops_data(_p, _mod) \
+ ((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s._ops_data)
+
#endif