diff options
author | Dave Barach <dave@barachs.net> | 2016-01-22 08:23:09 -0500 |
---|---|---|
committer | Dave Barach <dave@barachs.net> | 2016-01-22 08:23:27 -0500 |
commit | 61efa140b1f44e0c568697fbc31cf3f430131ab2 (patch) | |
tree | 780880f2fce0882840b204eb26bd7465ed7c7e09 /vnet/vnet/devices | |
parent | bfdedbd5a3ba7e6fdc036d212253aa55c9062211 (diff) |
aarch64 CPU arch / ThunderX platform initial support
Change-Id: Ia2edd3cee2c25c26c7c47a9023744b97226434c7
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'vnet/vnet/devices')
-rw-r--r-- | vnet/vnet/devices/dpdk/dpdk.h | 1 | ||||
-rw-r--r-- | vnet/vnet/devices/dpdk/init.c | 17 | ||||
-rw-r--r-- | vnet/vnet/devices/dpdk/node.c | 12 |
3 files changed, 30 insertions, 0 deletions
diff --git a/vnet/vnet/devices/dpdk/dpdk.h b/vnet/vnet/devices/dpdk/dpdk.h index fd984e4d4df..bb3ef4ffba8 100644 --- a/vnet/vnet/devices/dpdk/dpdk.h +++ b/vnet/vnet/devices/dpdk/dpdk.h @@ -75,6 +75,7 @@ typedef enum { } dpdk_device_type_t; #define foreach_dpdk_pmd \ + _ ("rte_nicvf_pmd", THUNDERX) \ _ ("rte_em_pmd", E1000EM) \ _ ("rte_igb_pmd", IGB) \ _ ("rte_igbvf_pmd", IGBVF) \ diff --git a/vnet/vnet/devices/dpdk/init.c b/vnet/vnet/devices/dpdk/init.c index a4b0f01475f..a8e84949a52 100644 --- a/vnet/vnet/devices/dpdk/init.c +++ b/vnet/vnet/devices/dpdk/init.c @@ -341,6 +341,7 @@ dpdk_lib_init (dpdk_main_t * dm) /* 10G adapters */ case VNET_DPDK_PMD_IXGBE: case VNET_DPDK_PMD_IXGBEVF: + case VNET_DPDK_PMD_THUNDERX: xd->port_type = VNET_DPDK_PORT_TYPE_ETH_10G; xd->nb_rx_desc = DPDK_NB_RX_DESC_10GE; xd->nb_tx_desc = DPDK_NB_TX_DESC_10GE; @@ -1686,6 +1687,22 @@ do { \ #undef _ +/* + * At the moment, the ThunderX NIC driver doesn't have + * an entry point named "devinitfn_rte_xxx_driver" + */ +#define _(d) \ +do { \ + void d(void); \ + __attribute__((unused)) void (* volatile pf)(void); \ + pf = d; \ +} while(0); + +#ifdef RTE_LIBRTE_THUNDERVNIC_PMD +_(rte_nicvf_pmd_init) +#endif +#undef _ + dm->vlib_main = vm; dm->vnet_main = vnet_get_main(); diff --git a/vnet/vnet/devices/dpdk/node.c b/vnet/vnet/devices/dpdk/node.c index f05c37fed52..770af2a04ac 100644 --- a/vnet/vnet/devices/dpdk/node.c +++ b/vnet/vnet/devices/dpdk/node.c @@ -541,6 +541,7 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm, u32 n_trace, trace_cnt __attribute__((unused)); vlib_buffer_free_list_t * fl; u8 efd_discard_burst = 0; + u16 ip_align_offset = 0; if (xd->admin_up == 0) return 0; @@ -559,6 +560,9 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm, return 0; } + if (xd->pmd == VNET_DPDK_PMD_THUNDERX) + ip_align_offset = 6; + vec_reset_length (xd->d_trace_buffers); trace_cnt = n_trace = vlib_get_trace_count (vm, node); @@ -706,6 +710,14 @@ static inline u32 dpdk_device_input ( dpdk_main_t * dm, b0->current_data = l3_offset0; b0->current_length = mb->data_len - l3_offset0; + + if (PREDICT_FALSE (ip_align_offset != 0)) + { + if (next0 == DPDK_RX_NEXT_IP4_INPUT || + next0 == DPDK_RX_NEXT_IP6_INPUT) + b0->current_data += ip_align_offset; + } + b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID; if (VMWARE_LENGTH_BUG_WORKAROUND) |