aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4.h16
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c46
2 files changed, 62 insertions, 0 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index 39ccd4c64d48..c7ab57fd03be 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -1919,5 +1919,21 @@ int cxgb4_alloc_encap_mac_filt(struct adapter *adap, unsigned int viid,
1919 u8 dip_hit, u8 lookup_type, bool sleep_ok); 1919 u8 dip_hit, u8 lookup_type, bool sleep_ok);
1920int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid, 1920int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid,
1921 int idx, bool sleep_ok); 1921 int idx, bool sleep_ok);
1922int cxgb4_free_raw_mac_filt(struct adapter *adap,
1923 unsigned int viid,
1924 const u8 *addr,
1925 const u8 *mask,
1926 unsigned int idx,
1927 u8 lookup_type,
1928 u8 port_id,
1929 bool sleep_ok);
1930int cxgb4_alloc_raw_mac_filt(struct adapter *adap,
1931 unsigned int viid,
1932 const u8 *addr,
1933 const u8 *mask,
1934 unsigned int idx,
1935 u8 lookup_type,
1936 u8 port_id,
1937 bool sleep_ok);
1922 1938
1923#endif /* __CXGB4_H__ */ 1939#endif /* __CXGB4_H__ */
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
index b8a5375bf64d..b942748c7dfa 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c
@@ -54,6 +54,52 @@ unlock:
54 return ret; 54 return ret;
55} 55}
56 56
57int cxgb4_free_raw_mac_filt(struct adapter *adap,
58 unsigned int viid,
59 const u8 *addr,
60 const u8 *mask,
61 unsigned int idx,
62 u8 lookup_type,
63 u8 port_id,
64 bool sleep_ok)
65{
66 int ret = 0;
67
68 if (!cxgb4_mps_ref_dec(adap, idx))
69 ret = t4_free_raw_mac_filt(adap, viid, addr,
70 mask, idx, lookup_type,
71 port_id, sleep_ok);
72
73 return ret;
74}
75
76int cxgb4_alloc_raw_mac_filt(struct adapter *adap,
77 unsigned int viid,
78 const u8 *addr,
79 const u8 *mask,
80 unsigned int idx,
81 u8 lookup_type,
82 u8 port_id,
83 bool sleep_ok)
84{
85 int ret;
86
87 ret = t4_alloc_raw_mac_filt(adap, viid, addr,
88 mask, idx, lookup_type,
89 port_id, sleep_ok);
90 if (ret < 0)
91 return ret;
92
93 if (cxgb4_mps_ref_inc(adap, addr, ret, mask)) {
94 ret = -ENOMEM;
95 t4_free_raw_mac_filt(adap, viid, addr,
96 mask, idx, lookup_type,
97 port_id, sleep_ok);
98 }
99
100 return ret;
101}
102
57int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid, 103int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid,
58 int idx, bool sleep_ok) 104 int idx, bool sleep_ok)
59{ 105{