net/e1000: add support 2-tuple filter on i210/i211
[dpdk.git] / drivers / net / e1000 / igb_ethdev.c
index 74b5974..935893a 100644 (file)
@@ -3657,7 +3657,8 @@ eth_igb_syn_filter_handle(struct rte_eth_dev *dev,
 }
 
 #define MAC_TYPE_FILTER_SUP_EXT(type)    do {\
-       if ((type) != e1000_82580 && (type) != e1000_i350)\
+       if ((type) != e1000_82580 && (type) != e1000_i350 &&\
+               (type) != e1000_i210 && (type) != e1000_i211)\
                return -ENOSYS; \
 } while (0)
 
@@ -3913,10 +3914,6 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
        }
 
        wufc = E1000_READ_REG(hw, E1000_WUFC);
-       if (flex_filter->index < E1000_MAX_FHFT)
-               reg_off = E1000_FHFT(flex_filter->index);
-       else
-               reg_off = E1000_FHFT_EXT(flex_filter->index - E1000_MAX_FHFT);
 
        if (add) {
                if (eth_igb_flex_filter_lookup(&filter_info->flex_list,
@@ -3946,6 +3943,11 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
                        return -ENOSYS;
                }
 
+               if (flex_filter->index < E1000_MAX_FHFT)
+                       reg_off = E1000_FHFT(flex_filter->index);
+               else
+                       reg_off = E1000_FHFT_EXT(flex_filter->index - E1000_MAX_FHFT);
+
                E1000_WRITE_REG(hw, E1000_WUFC, wufc | E1000_WUFC_FLEX_HQ |
                                (E1000_WUFC_FLX0 << flex_filter->index));
                queueing = filter->len |
@@ -3974,6 +3976,11 @@ eth_igb_add_del_flex_filter(struct rte_eth_dev *dev,
                        return -ENOENT;
                }
 
+               if (it->index < E1000_MAX_FHFT)
+                       reg_off = E1000_FHFT(it->index);
+               else
+                       reg_off = E1000_FHFT_EXT(it->index - E1000_MAX_FHFT);
+
                for (i = 0; i < E1000_FHFT_SIZE_IN_DWD; i++)
                        E1000_WRITE_REG(hw, reg_off + i * sizeof(uint32_t), 0);
                E1000_WRITE_REG(hw, E1000_WUFC, wufc &
@@ -4429,7 +4436,9 @@ igb_add_del_ntuple_filter(struct rte_eth_dev *dev,
                break;
        case RTE_2TUPLE_FLAGS:
        case (RTE_2TUPLE_FLAGS | RTE_NTUPLE_FLAGS_TCP_FLAG):
-               if (hw->mac.type != e1000_82580 && hw->mac.type != e1000_i350)
+               if (hw->mac.type != e1000_82580 && hw->mac.type != e1000_i350 &&
+                       hw->mac.type != e1000_i210 &&
+                       hw->mac.type != e1000_i211)
                        return -ENOTSUP;
                if (add)
                        ret = igb_add_2tuple_filter(dev, ntuple_filter);