X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fl3fwd%2Fl3fwd_event.h;h=f139632016e2c3317f494c5f31a7a672cf4c6990;hb=79aab97c94024c4f969308ec806efb168cccc83d;hp=4c23c4e1a35d607f31d1ae4e1684a76ad96187bd;hpb=e2de1f7bb9668415c8fdfce6b736112bfb24f377;p=dpdk.git diff --git a/examples/l3fwd/l3fwd_event.h b/examples/l3fwd/l3fwd_event.h index 4c23c4e1a3..f139632016 100644 --- a/examples/l3fwd/l3fwd_event.h +++ b/examples/l3fwd/l3fwd_event.h @@ -7,17 +7,106 @@ #include #include +#include +#include +#include #include #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; + event_port_setup_cb event_port_setup; + 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); #endif /* __L3FWD_EVENTDEV_H__ */