aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cxgb3/xgmac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/cxgb3/xgmac.c')
-rw-r--r--drivers/net/cxgb3/xgmac.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c
index 0109ee4f2f91..c142a2132e9f 100644
--- a/drivers/net/cxgb3/xgmac.c
+++ b/drivers/net/cxgb3/xgmac.c
@@ -297,29 +297,30 @@ static int hash_hw_addr(const u8 * addr)
297 return hash; 297 return hash;
298} 298}
299 299
300int t3_mac_set_rx_mode(struct cmac *mac, struct t3_rx_mode *rm) 300int t3_mac_set_rx_mode(struct cmac *mac, struct net_device *dev)
301{ 301{
302 u32 val, hash_lo, hash_hi; 302 u32 val, hash_lo, hash_hi;
303 struct adapter *adap = mac->adapter; 303 struct adapter *adap = mac->adapter;
304 unsigned int oft = mac->offset; 304 unsigned int oft = mac->offset;
305 305
306 val = t3_read_reg(adap, A_XGM_RX_CFG + oft) & ~F_COPYALLFRAMES; 306 val = t3_read_reg(adap, A_XGM_RX_CFG + oft) & ~F_COPYALLFRAMES;
307 if (rm->dev->flags & IFF_PROMISC) 307 if (dev->flags & IFF_PROMISC)
308 val |= F_COPYALLFRAMES; 308 val |= F_COPYALLFRAMES;
309 t3_write_reg(adap, A_XGM_RX_CFG + oft, val); 309 t3_write_reg(adap, A_XGM_RX_CFG + oft, val);
310 310
311 if (rm->dev->flags & IFF_ALLMULTI) 311 if (dev->flags & IFF_ALLMULTI)
312 hash_lo = hash_hi = 0xffffffff; 312 hash_lo = hash_hi = 0xffffffff;
313 else { 313 else {
314 u8 *addr; 314 struct dev_mc_list *dmi;
315 int exact_addr_idx = mac->nucast; 315 int exact_addr_idx = mac->nucast;
316 316
317 hash_lo = hash_hi = 0; 317 hash_lo = hash_hi = 0;
318 while ((addr = t3_get_next_mcaddr(rm))) 318 netdev_for_each_mc_addr(dmi, dev)
319 if (exact_addr_idx < EXACT_ADDR_FILTERS) 319 if (exact_addr_idx < EXACT_ADDR_FILTERS)
320 set_addr_filter(mac, exact_addr_idx++, addr); 320 set_addr_filter(mac, exact_addr_idx++,
321 dmi->dmi_addr);
321 else { 322 else {
322 int hash = hash_hw_addr(addr); 323 int hash = hash_hw_addr(dmi->dmi_addr);
323 324
324 if (hash < 32) 325 if (hash < 32)
325 hash_lo |= (1 << hash); 326 hash_lo |= (1 << hash);
@@ -353,6 +354,9 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
353 * packet size register includes header, but not FCS. 354 * packet size register includes header, but not FCS.
354 */ 355 */
355 mtu += 14; 356 mtu += 14;
357 if (mtu > 1536)
358 mtu += 4;
359
356 if (mtu > MAX_FRAME_SIZE - 4) 360 if (mtu > MAX_FRAME_SIZE - 4)
357 return -EINVAL; 361 return -EINVAL;
358 t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu); 362 t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu);