summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuawei Xie <huawei.xie@intel.com>2014-12-02 17:02:06 +0800
committerThomas Monjalon <thomas.monjalon@6wind.com>2014-12-06 11:08:35 +0100
commitbc8e0f501cf4c3bee3de8ee26a98e72e517cfe32 (patch)
treeb2cdae63956ed539d0c81fd06b51fca756770573
parentfdef8f927f311a51ab69bbea4a7bff8e5463813c (diff)
downloaddpdk-bc8e0f501cf4c3bee3de8ee26a98e72e517cfe32.zip
dpdk-bc8e0f501cf4c3bee3de8ee26a98e72e517cfe32.tar.gz
dpdk-bc8e0f501cf4c3bee3de8ee26a98e72e517cfe32.tar.xz
i40e: use macros for vlan filtering registers
Add two macros I40E_VFTA_IDX and I40E_VFTA_BIT for vlan filter search and set. Add vlan_id check in vlan filter search and set function. Signed-off-by: Huawei Xie <huawei.xie@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> Acked-by: Jing Chen <jing.d.chen@intel.com>
-rw-r--r--lib/librte_pmd_i40e/i40e_ethdev.c17
-rw-r--r--lib/librte_pmd_i40e/i40e_ethdev.h9
2 files changed, 19 insertions, 7 deletions
diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c
index 1787611..899cb42 100644
--- a/lib/librte_pmd_i40e/i40e_ethdev.c
+++ b/lib/librte_pmd_i40e/i40e_ethdev.c
@@ -4168,8 +4168,11 @@ i40e_find_vlan_filter(struct i40e_vsi *vsi,
{
uint32_t vid_idx, vid_bit;
- vid_idx = (uint32_t) ((vlan_id >> 5) & 0x7F);
- vid_bit = (uint32_t) (1 << (vlan_id & 0x1F));
+ if (vlan_id > ETH_VLAN_ID_MAX)
+ return 0;
+
+ vid_idx = I40E_VFTA_IDX(vlan_id);
+ vid_bit = I40E_VFTA_BIT(vlan_id);
if (vsi->vfta[vid_idx] & vid_bit)
return 1;
@@ -4183,11 +4186,11 @@ i40e_set_vlan_filter(struct i40e_vsi *vsi,
{
uint32_t vid_idx, vid_bit;
- /* VFTA is 32-bits size array, each element contains 32 vlan bits, Find the
- * element first, then find the bits it belongs to
- */
- vid_idx = (uint32_t) ((vlan_id >> 5) & 0x7F);
- vid_bit = (uint32_t) (1 << (vlan_id & 0x1F));
+ if (vlan_id > ETH_VLAN_ID_MAX)
+ return;
+
+ vid_idx = I40E_VFTA_IDX(vlan_id);
+ vid_bit = I40E_VFTA_BIT(vlan_id);
if (on)
vsi->vfta[vid_idx] |= vid_bit;
diff --git a/lib/librte_pmd_i40e/i40e_ethdev.h b/lib/librte_pmd_i40e/i40e_ethdev.h
index f99fbea..f913ea9 100644
--- a/lib/librte_pmd_i40e/i40e_ethdev.h
+++ b/lib/librte_pmd_i40e/i40e_ethdev.h
@@ -50,6 +50,15 @@
#define I40E_DEFAULT_QP_NUM_FDIR 1
#define I40E_UINT32_BIT_SIZE (CHAR_BIT * sizeof(uint32_t))
#define I40E_VFTA_SIZE (4096 / I40E_UINT32_BIT_SIZE)
+/*
+ * vlan_id is a 12 bit number.
+ * The VFTA array is actually a 4096 bit array, 128 of 32bit elements.
+ * 2^5 = 32. The val of lower 5 bits specifies the bit in the 32bit element.
+ * The higher 7 bit val specifies VFTA array index.
+ */
+#define I40E_VFTA_BIT(vlan_id) (1 << ((vlan_id) & 0x1F))
+#define I40E_VFTA_IDX(vlan_id) ((vlan_id) >> 5)
+
/* Default TC traffic in case DCB is not enabled */
#define I40E_DEFAULT_TCMAP 0x1
#define I40E_FDIR_QUEUE_ID 0