net/bnxt: fix enable/disable VLAN filtering
[dpdk.git] / drivers / net / bnxt / bnxt_filter.c
index 7e29468..b31f104 100644 (file)
@@ -39,9 +39,10 @@ struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp)
        filter->flags = HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX;
        filter->enables = HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR |
                        HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK;
-       memcpy(filter->l2_addr, bp->eth_dev->data->mac_addrs->addr_bytes,
-              RTE_ETHER_ADDR_LEN);
+       memcpy(filter->l2_addr, bp->mac_addr, RTE_ETHER_ADDR_LEN);
        memset(filter->l2_addr_mask, 0xff, RTE_ETHER_ADDR_LEN);
+       /* bump up the reference count of filter */
+       filter->l2_ref_cnt++;
        return filter;
 }
 
@@ -61,7 +62,7 @@ struct bnxt_filter_info *bnxt_alloc_vf_filter(struct bnxt *bp, uint16_t vf)
        return filter;
 }
 
-void bnxt_init_filters(struct bnxt *bp)
+static void bnxt_init_filters(struct bnxt *bp)
 {
        struct bnxt_filter_info *filter;
        int i, max_filters;
@@ -171,6 +172,7 @@ int bnxt_alloc_filter_mem(struct bnxt *bp)
                return -ENOMEM;
        }
        bp->filter_info = filter_mem;
+       bnxt_init_filters(bp);
        return 0;
 }
 
@@ -191,5 +193,10 @@ struct bnxt_filter_info *bnxt_get_unused_filter(struct bnxt *bp)
 
 void bnxt_free_filter(struct bnxt *bp, struct bnxt_filter_info *filter)
 {
+       memset(filter, 0, sizeof(*filter));
+       filter->mac_index = INVALID_MAC_INDEX;
+       filter->fw_l2_filter_id = UINT64_MAX;
+       filter->fw_ntuple_filter_id = UINT64_MAX;
+       filter->fw_em_filter_id = UINT64_MAX;
        STAILQ_INSERT_TAIL(&bp->free_filter_list, filter, next);
 }