sched: remove useless malloc in PIE data init
[dpdk.git] / examples / l3fwd / l3fwd_event.h
index d25c8d2..f139632 100644 (file)
@@ -7,17 +7,47 @@
 
 #include <rte_common.h>
 #include <rte_eventdev.h>
+#include <rte_event_eth_rx_adapter.h>
 #include <rte_event_eth_tx_adapter.h>
+#include <rte_service.h>
 #include <rte_spinlock.h>
 
 #include "l3fwd.h"
 
+#define L3FWD_EVENT_SINGLE     0x1
+#define L3FWD_EVENT_BURST      0x2
+#define L3FWD_EVENT_TX_DIRECT  0x4
+#define L3FWD_EVENT_TX_ENQ     0x8
+
 typedef uint32_t (*event_device_setup_cb)(void);
 typedef void (*event_queue_setup_cb)(uint32_t event_queue_cfg);
 typedef void (*event_port_setup_cb)(void);
 typedef void (*adapter_setup_cb)(void);
 typedef int (*event_loop_cb)(void *);
 
+struct l3fwd_event_queues {
+       uint8_t *event_q_id;
+       uint8_t nb_queues;
+};
+
+struct l3fwd_event_ports {
+       uint8_t *event_p_id;
+       uint8_t nb_ports;
+       rte_spinlock_t lock;
+};
+
+struct l3fwd_event_rx_adptr {
+       uint32_t service_id;
+       uint8_t nb_rx_adptr;
+       uint8_t *rx_adptr;
+};
+
+struct l3fwd_event_tx_adptr {
+       uint32_t service_id;
+       uint8_t nb_tx_adptr;
+       uint8_t *tx_adptr;
+};
+
 struct l3fwd_event_setup_ops {
        event_device_setup_cb event_device_setup;
        event_queue_setup_cb event_queue_setup;
@@ -25,18 +55,57 @@ struct l3fwd_event_setup_ops {
        adapter_setup_cb adapter_setup;
        event_loop_cb lpm_event_loop;
        event_loop_cb em_event_loop;
+       event_loop_cb fib_event_loop;
 };
 
 struct l3fwd_event_resources {
+       struct rte_event_port_conf def_p_conf;
+       struct l3fwd_event_rx_adptr rx_adptr;
+       struct l3fwd_event_tx_adptr tx_adptr;
+       uint8_t disable_implicit_release;
        struct l3fwd_event_setup_ops ops;
+       struct rte_mempool * (*pkt_pool)[NB_SOCKETS];
+       struct rte_mempool **vec_pool;
+       struct l3fwd_event_queues evq;
+       struct l3fwd_event_ports evp;
+       uint32_t port_mask;
+       uint8_t per_port_pool;
+       uint8_t event_d_id;
        uint8_t sched_type;
        uint8_t tx_mode_q;
+       uint8_t deq_depth;
+       uint8_t has_burst;
        uint8_t enabled;
        uint8_t eth_rx_queues;
+       uint8_t vector_enabled;
+       uint16_t vector_size;
+       uint64_t vector_tmo_ns;
 };
 
+static inline void
+event_vector_attr_validate(struct rte_event_vector *vec, struct rte_mbuf *mbuf)
+{
+       /* l3fwd application only changes mbuf port while processing */
+       if (vec->attr_valid && (vec->port != mbuf->port))
+               vec->attr_valid = 0;
+}
+
+static inline void
+event_vector_txq_set(struct rte_event_vector *vec, uint16_t txq)
+{
+       if (vec->attr_valid) {
+               vec->queue = txq;
+       } else {
+               int i;
+
+               for (i = 0; i < vec->nb_elem; i++)
+                       rte_event_eth_tx_adapter_txq_set(vec->mbufs[i], txq);
+       }
+}
+
 struct l3fwd_event_resources *l3fwd_get_eventdev_rsrc(void);
-void l3fwd_event_resource_setup(void);
+void l3fwd_event_resource_setup(struct rte_eth_conf *port_conf);
+int l3fwd_get_free_event_port(struct l3fwd_event_resources *eventdev_rsrc);
 void l3fwd_event_set_generic_ops(struct l3fwd_event_setup_ops *ops);
 void l3fwd_event_set_internal_port_ops(struct l3fwd_event_setup_ops *ops);