X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fi40e%2Fi40e_fdir.c;h=43a39ecfa68804c94c3338f6bc95a5558cb7c40e;hb=7860c396548382f88d8dea76ed02f7f3b86a9fb6;hp=0b45bd90fb2fe84effe6190903ab885b01adaf91;hpb=88ebc2b7f9764f3e1ff021c9f7ab7f3f6d010f27;p=dpdk.git diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index 0b45bd90fb..43a39ecfa6 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -275,11 +275,8 @@ i40e_fdir_setup(struct i40e_pf *pf) goto fail_mem; } pf->fdir.prg_pkt = mz->addr; -#ifdef RTE_LIBRTE_XEN_DOM0 pf->fdir.dma_addr = rte_mem_phy2mch(mz->memseg_id, mz->phys_addr); -#else - pf->fdir.dma_addr = (uint64_t)mz->phys_addr; -#endif + pf->fdir.match_counter_index = I40E_COUNTER_INDEX_FDIR(hw->pf_id); PMD_DRV_LOG(INFO, "FDIR setup successfully, with programming queue %u.", vsi->base_queue); @@ -1112,8 +1109,16 @@ i40e_fdir_filter_programming(struct i40e_pf *pf, if (fdir_action->behavior == RTE_ETH_FDIR_REJECT) dest = I40E_FILTER_PROGRAM_DESC_DEST_DROP_PACKET; - else + else if (fdir_action->behavior == RTE_ETH_FDIR_ACCEPT) dest = I40E_FILTER_PROGRAM_DESC_DEST_DIRECT_PACKET_QINDEX; + else if (fdir_action->behavior == RTE_ETH_FDIR_PASSTHRU) + dest = I40E_FILTER_PROGRAM_DESC_DEST_DIRECT_PACKET_OTHER; + else { + PMD_DRV_LOG(ERR, "Failed to program FDIR filter:" + " unsupported fdir behavior."); + return -EINVAL; + } + fdirdp->dtype_cmd_cntindex |= rte_cpu_to_le_32((dest << I40E_TXD_FLTR_QW1_DEST_SHIFT) & I40E_TXD_FLTR_QW1_DEST_MASK); @@ -1353,7 +1358,7 @@ i40e_fdir_stats_get(struct rte_eth_dev *dev, struct rte_eth_fdir_stats *stat) static int i40e_fdir_filter_set(struct rte_eth_dev *dev, - struct rte_eth_hash_filter_info *info) + struct rte_eth_fdir_filter_info *info) { struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); struct i40e_hw *hw = I40E_PF_TO_HW(pf); @@ -1420,7 +1425,7 @@ i40e_fdir_ctrl_func(struct rte_eth_dev *dev, break; case RTE_ETH_FILTER_SET: ret = i40e_fdir_filter_set(dev, - (struct rte_eth_hash_filter_info *)arg); + (struct rte_eth_fdir_filter_info *)arg); break; case RTE_ETH_FILTER_STATS: i40e_fdir_stats_get(dev, (struct rte_eth_fdir_stats *)arg);