net/ngbe: support MAC filters
[dpdk.git] / drivers / net / txgbe / txgbe_fdir.c
index 6ddb023..e303d87 100644 (file)
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2015-2020
+ * Copyright(c) 2015-2020 Beijing WangXun Technology Co., Ltd.
+ * Copyright(c) 2010-2017 Intel Corporation
  */
 
 #include <stdio.h>
@@ -101,22 +102,22 @@ txgbe_fdir_enable(struct txgbe_hw *hw, uint32_t fdirctrl)
  * flexbytes matching field, and drop queue (only for perfect matching mode).
  */
 static inline int
-configure_fdir_flags(const struct rte_fdir_conf *conf,
+configure_fdir_flags(const struct rte_eth_fdir_conf *conf,
                     uint32_t *fdirctrl, uint32_t *flex)
 {
        *fdirctrl = 0;
        *flex = 0;
 
        switch (conf->pballoc) {
-       case RTE_FDIR_PBALLOC_64K:
+       case RTE_ETH_FDIR_PBALLOC_64K:
                /* 8k - 1 signature filters */
                *fdirctrl |= TXGBE_FDIRCTL_BUF_64K;
                break;
-       case RTE_FDIR_PBALLOC_128K:
+       case RTE_ETH_FDIR_PBALLOC_128K:
                /* 16k - 1 signature filters */
                *fdirctrl |= TXGBE_FDIRCTL_BUF_128K;
                break;
-       case RTE_FDIR_PBALLOC_256K:
+       case RTE_ETH_FDIR_PBALLOC_256K:
                /* 32k - 1 signature filters */
                *fdirctrl |= TXGBE_FDIRCTL_BUF_256K;
                break;
@@ -164,18 +165,6 @@ configure_fdir_flags(const struct rte_fdir_conf *conf,
        return 0;
 }
 
-static inline uint32_t
-reverse_fdir_bmks(uint16_t hi_dword, uint16_t lo_dword)
-{
-       uint32_t mask = hi_dword << 16;
-
-       mask |= lo_dword;
-       mask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1);
-       mask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2);
-       mask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4);
-       return ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8);
-}
-
 int
 txgbe_fdir_set_input_mask(struct rte_eth_dev *dev)
 {
@@ -212,9 +201,9 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev)
        /* TBD: don't support encapsulation yet */
        wr32(hw, TXGBE_FDIRMSK, fdirm);
 
-       /* store the TCP/UDP port masks, bit reversed from port layout */
-       fdirtcpm = reverse_fdir_bmks(rte_be_to_cpu_16(info->mask.dst_port_mask),
-                       rte_be_to_cpu_16(info->mask.src_port_mask));
+       /* store the TCP/UDP port masks */
+       fdirtcpm = rte_be_to_cpu_16(info->mask.dst_port_mask) << 16;
+       fdirtcpm |= rte_be_to_cpu_16(info->mask.src_port_mask);
 
        /* write all the same so that UDP, TCP and SCTP use the same mask
         * (little-endian)
@@ -532,15 +521,15 @@ txgbe_atr_compute_hash(struct txgbe_atr_input *atr_input,
 
 static uint32_t
 atr_compute_perfect_hash(struct txgbe_atr_input *input,
-               enum rte_fdir_pballoc_type pballoc)
+               enum rte_eth_fdir_pballoc_type pballoc)
 {
        uint32_t bucket_hash;
 
        bucket_hash = txgbe_atr_compute_hash(input,
                                TXGBE_ATR_BUCKET_HASH_KEY);
-       if (pballoc == RTE_FDIR_PBALLOC_256K)
+       if (pballoc == RTE_ETH_FDIR_PBALLOC_256K)
                bucket_hash &= PERFECT_BUCKET_256KB_HASH_MASK;
-       else if (pballoc == RTE_FDIR_PBALLOC_128K)
+       else if (pballoc == RTE_ETH_FDIR_PBALLOC_128K)
                bucket_hash &= PERFECT_BUCKET_128KB_HASH_MASK;
        else
                bucket_hash &= PERFECT_BUCKET_64KB_HASH_MASK;
@@ -575,15 +564,15 @@ txgbe_fdir_check_cmd_complete(struct txgbe_hw *hw, uint32_t *fdircmd)
  */
 static uint32_t
 atr_compute_signature_hash(struct txgbe_atr_input *input,
-               enum rte_fdir_pballoc_type pballoc)
+               enum rte_eth_fdir_pballoc_type pballoc)
 {
        uint32_t bucket_hash, sig_hash;
 
        bucket_hash = txgbe_atr_compute_hash(input,
                                TXGBE_ATR_BUCKET_HASH_KEY);
-       if (pballoc == RTE_FDIR_PBALLOC_256K)
+       if (pballoc == RTE_ETH_FDIR_PBALLOC_256K)
                bucket_hash &= SIG_BUCKET_256KB_HASH_MASK;
-       else if (pballoc == RTE_FDIR_PBALLOC_128K)
+       else if (pballoc == RTE_ETH_FDIR_PBALLOC_128K)
                bucket_hash &= SIG_BUCKET_128KB_HASH_MASK;
        else
                bucket_hash &= SIG_BUCKET_64KB_HASH_MASK;