diff options
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 16 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_mps.c | 46 |
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); |
| 1920 | int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid, | 1920 | int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid, |
| 1921 | int idx, bool sleep_ok); | 1921 | int idx, bool sleep_ok); |
| 1922 | int 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); | ||
| 1930 | int 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 | ||
| 57 | int 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 | |||
| 76 | int 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 | |||
| 57 | int cxgb4_free_encap_mac_filt(struct adapter *adap, unsigned int viid, | 103 | int 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 | { |
