#ifndef _ENIC_H_
#define _ENIC_H_
+#include <rte_vxlan.h>
+#include <rte_ether.h>
#include "vnic_enet.h"
#include "vnic_dev.h"
+#include "vnic_flowman.h"
#include "vnic_wq.h"
#include "vnic_rq.h"
#include "vnic_cq.h"
#define ENICPMD_FDIR_MAX 64
-/* HW default VXLAN port */
-#define ENIC_DEFAULT_VXLAN_PORT 4789
-
/*
* Interrupt 0: LSC and errors
* Interrupt 1: rx queue 0
struct enic_fdir_node {
struct rte_eth_fdir_filter filter;
- u16 fltr_id;
- u16 rq_index;
+ uint16_t fltr_id;
+ uint16_t rq_index;
};
struct enic_fdir {
struct rte_eth_fdir_stats stats;
struct rte_hash *hash;
struct enic_fdir_node *nodes[ENICPMD_FDIR_MAX];
- u32 modes;
- u32 types_mask;
+ uint32_t modes;
+ uint32_t types_mask;
void (*copy_fltr_fn)(struct filter_v2 *filt,
const struct rte_eth_fdir_input *input,
const struct rte_eth_fdir_masks *masks);
LIST_ENTRY(enic_memzone_entry) entries;
};
+/* Defined in enic_fm_flow.c */
+struct enic_flowman;
+struct enic_fm_flow;
+
struct rte_flow {
LIST_ENTRY(rte_flow) next;
- u16 enic_filter_id;
+ /* Data for filter API based flow (enic_flow.c) */
+ uint16_t enic_filter_id;
struct filter_v2 enic_filter;
+ /* Data for flow manager based flow (enic_fm_flow.c) */
+ struct enic_fm_flow *fm;
};
/* Per-instance private data structure */
int iommu_group_fd;
int iommu_groupid;
int eventfd;
- uint8_t mac_addr[ETH_ALEN];
+ uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
pthread_t err_intr_thread;
int promisc;
int allmulti;
- u8 ig_vlan_strip_en;
+ uint8_t ig_vlan_strip_en;
int link_status;
- u8 hw_ip_checksum;
- u16 max_mtu;
- u8 adv_filters;
- u32 flow_filter_mode;
- u8 filter_actions; /* HW supported actions */
+ uint8_t hw_ip_checksum;
+ uint16_t max_mtu;
+ uint8_t adv_filters;
+ uint32_t flow_filter_mode;
+ uint8_t filter_actions; /* HW supported actions */
bool vxlan;
bool disable_overlay; /* devargs disable_overlay=1 */
uint8_t enable_avx2_rx; /* devargs enable-avx2-rx=1 */
/* Multicast MAC addresses added to the NIC */
uint32_t mc_count;
struct rte_ether_addr mc_addrs[ENIC_MULTICAST_PERFECT_FILTERS];
+
+ /* Flow manager API */
+ struct enic_flowman *fm;
};
/* Compute ethdev's max packet size from MTU */
return idx;
}
+int dev_is_enic(struct rte_eth_dev *dev);
void enic_fdir_stats_get(struct enic *enic,
struct rte_eth_fdir_stats *stats);
int enic_fdir_add_fltr(struct enic *enic,
int enic_probe(struct enic *enic);
int enic_clsf_init(struct enic *enic);
void enic_clsf_destroy(struct enic *enic);
+int enic_fm_init(struct enic *enic);
+void enic_fm_destroy(struct enic *enic);
+void *enic_alloc_consistent(void *priv, size_t size, dma_addr_t *dma_handle,
+ uint8_t *name);
+void enic_free_consistent(void *priv, size_t size, void *vaddr,
+ dma_addr_t dma_handle);
uint16_t enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts);
uint16_t enic_noscatter_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
void enic_fdir_info(struct enic *enic);
void enic_fdir_info_get(struct enic *enic, struct rte_eth_fdir_info *stats);
extern const struct rte_flow_ops enic_flow_ops;
+extern const struct rte_flow_ops enic_fm_flow_ops;
#endif /* _ENIC_H_ */