diff options
Diffstat (limited to 'drivers/net/ethernet')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 5 | ||||
| -rw-r--r-- | drivers/net/ethernet/jme.c | 36 | ||||
| -rw-r--r-- | drivers/net/ethernet/marvell/skge.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/micrel/ksz884x.c | 20 | ||||
| -rw-r--r-- | drivers/net/ethernet/realtek/r8169.c | 5 | ||||
| -rw-r--r-- | drivers/net/ethernet/smsc/smsc911x.c | 17 | ||||
| -rw-r--r-- | drivers/net/ethernet/tile/tilegx.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 14 | 
11 files changed, 59 insertions, 54 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c index c65295dded3..6e5bdd1a31d 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c @@ -1702,7 +1702,7 @@ static int bnx2x_set_eee(struct net_device *dev, struct ethtool_eee *edata)  				      SHMEM_EEE_ADV_STATUS_SHIFT);  	if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) {  		DP(BNX2X_MSG_ETHTOOL, -		   "Direct manipulation of EEE advertisment is not supported\n"); +		   "Direct manipulation of EEE advertisement is not supported\n");  		return -EINVAL;  	} diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 6dd0dd076cc..f6cfdc6cf20 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c @@ -9941,7 +9941,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy,  		else  			rc = bnx2x_8483x_disable_eee(phy, params, vars);  		if (rc) { -			DP(NETIF_MSG_LINK, "Failed to set EEE advertisment\n"); +			DP(NETIF_MSG_LINK, "Failed to set EEE advertisement\n");  			return rc;  		}  	} else { @@ -12987,7 +12987,7 @@ static u8 bnx2x_analyze_link_error(struct link_params *params,  		DP(NETIF_MSG_LINK, "Analyze TX Fault\n");  		break;  	default: -		DP(NETIF_MSG_LINK, "Analyze UNKOWN\n"); +		DP(NETIF_MSG_LINK, "Analyze UNKNOWN\n");  	}  	DP(NETIF_MSG_LINK, "Link changed:[%x %x]->%x\n", vars->link_up,  	   old_status, status); diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 32eec15fe4c..730ae2cfa49 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c @@ -2519,6 +2519,7 @@ int t4_fw_bye(struct adapter *adap, unsigned int mbox)  {  	struct fw_bye_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, BYE, WRITE);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);  } @@ -2535,6 +2536,7 @@ int t4_early_init(struct adapter *adap, unsigned int mbox)  {  	struct fw_initialize_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, INITIALIZE, WRITE);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);  } @@ -2551,6 +2553,7 @@ int t4_fw_reset(struct adapter *adap, unsigned int mbox, int reset)  {  	struct fw_reset_cmd c; +	memset(&c, 0, sizeof(c));  	INIT_CMD(c, RESET, WRITE);  	c.val = htonl(reset);  	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); @@ -2828,7 +2831,7 @@ int t4_fixup_host_params(struct adapter *adap, unsigned int page_size,  		     HOSTPAGESIZEPF7(sge_hps));  	t4_set_reg_field(adap, SGE_CONTROL, -			 INGPADBOUNDARY(INGPADBOUNDARY_MASK) | +			 INGPADBOUNDARY_MASK |  			 EGRSTATUSPAGESIZE_MASK,  			 INGPADBOUNDARY(fl_align_log - 5) |  			 EGRSTATUSPAGESIZE(stat_len != 64)); @@ -3278,6 +3281,7 @@ int t4_identify_port(struct adapter *adap, unsigned int mbox, unsigned int viid,  {  	struct fw_vi_enable_cmd c; +	memset(&c, 0, sizeof(c));  	c.op_to_viid = htonl(FW_CMD_OP(FW_VI_ENABLE_CMD) | FW_CMD_REQUEST |  			     FW_CMD_EXEC | FW_VI_ENABLE_CMD_VIID(viid));  	c.ien_to_len16 = htonl(FW_VI_ENABLE_CMD_LED | FW_LEN16(c)); diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 1d03dcdd5e5..19ac096cb07 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -1353,8 +1353,11 @@ static int gfar_restore(struct device *dev)  	struct gfar_private *priv = dev_get_drvdata(dev);  	struct net_device *ndev = priv->ndev; -	if (!netif_running(ndev)) +	if (!netif_running(ndev)) { +		netif_device_attach(ndev); +  		return 0; +	}  	gfar_init_bds(ndev);  	init_registers(ndev); diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c index f8064df10cc..60ac46f4ac0 100644 --- a/drivers/net/ethernet/jme.c +++ b/drivers/net/ethernet/jme.c @@ -1860,10 +1860,14 @@ jme_open(struct net_device *netdev)  	jme_clear_pm(jme);  	JME_NAPI_ENABLE(jme); -	tasklet_enable(&jme->linkch_task); -	tasklet_enable(&jme->txclean_task); -	tasklet_hi_enable(&jme->rxclean_task); -	tasklet_hi_enable(&jme->rxempty_task); +	tasklet_init(&jme->linkch_task, jme_link_change_tasklet, +		     (unsigned long) jme); +	tasklet_init(&jme->txclean_task, jme_tx_clean_tasklet, +		     (unsigned long) jme); +	tasklet_init(&jme->rxclean_task, jme_rx_clean_tasklet, +		     (unsigned long) jme); +	tasklet_init(&jme->rxempty_task, jme_rx_empty_tasklet, +		     (unsigned long) jme);  	rc = jme_request_irq(jme);  	if (rc) @@ -1948,10 +1952,10 @@ jme_close(struct net_device *netdev)  	JME_NAPI_DISABLE(jme); -	tasklet_disable(&jme->linkch_task); -	tasklet_disable(&jme->txclean_task); -	tasklet_disable(&jme->rxclean_task); -	tasklet_disable(&jme->rxempty_task); +	tasklet_kill(&jme->linkch_task); +	tasklet_kill(&jme->txclean_task); +	tasklet_kill(&jme->rxclean_task); +	tasklet_kill(&jme->rxempty_task);  	jme_disable_rx_engine(jme);  	jme_disable_tx_engine(jme); @@ -3079,22 +3083,6 @@ jme_init_one(struct pci_dev *pdev,  	tasklet_init(&jme->pcc_task,  		     jme_pcc_tasklet,  		     (unsigned long) jme); -	tasklet_init(&jme->linkch_task, -		     jme_link_change_tasklet, -		     (unsigned long) jme); -	tasklet_init(&jme->txclean_task, -		     jme_tx_clean_tasklet, -		     (unsigned long) jme); -	tasklet_init(&jme->rxclean_task, -		     jme_rx_clean_tasklet, -		     (unsigned long) jme); -	tasklet_init(&jme->rxempty_task, -		     jme_rx_empty_tasklet, -		     (unsigned long) jme); -	tasklet_disable_nosync(&jme->linkch_task); -	tasklet_disable_nosync(&jme->txclean_task); -	tasklet_disable_nosync(&jme->rxclean_task); -	tasklet_disable_nosync(&jme->rxempty_task);  	jme->dpi.cur = PCC_P1;  	jme->reg_ghc = 0; diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index 9b9c2ac5c4c..d19a143aa5a 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c @@ -4026,7 +4026,7 @@ static void __devexit skge_remove(struct pci_dev *pdev)  	dev0 = hw->dev[0];  	unregister_netdev(dev0); -	tasklet_disable(&hw->phy_task); +	tasklet_kill(&hw->phy_task);  	spin_lock_irq(&hw->hw_lock);  	hw->intr_mask = 0; diff --git a/drivers/net/ethernet/micrel/ksz884x.c b/drivers/net/ethernet/micrel/ksz884x.c index 318fee91c79..69e01977a1d 100644 --- a/drivers/net/ethernet/micrel/ksz884x.c +++ b/drivers/net/ethernet/micrel/ksz884x.c @@ -5407,8 +5407,8 @@ static int netdev_close(struct net_device *dev)  		/* Delay for receive task to stop scheduling itself. */  		msleep(2000 / HZ); -		tasklet_disable(&hw_priv->rx_tasklet); -		tasklet_disable(&hw_priv->tx_tasklet); +		tasklet_kill(&hw_priv->rx_tasklet); +		tasklet_kill(&hw_priv->tx_tasklet);  		free_irq(dev->irq, hw_priv->dev);  		transmit_cleanup(hw_priv, 0); @@ -5459,8 +5459,10 @@ static int prepare_hardware(struct net_device *dev)  	rc = request_irq(dev->irq, netdev_intr, IRQF_SHARED, dev->name, dev);  	if (rc)  		return rc; -	tasklet_enable(&hw_priv->rx_tasklet); -	tasklet_enable(&hw_priv->tx_tasklet); +	tasklet_init(&hw_priv->rx_tasklet, rx_proc_task, +		     (unsigned long) hw_priv); +	tasklet_init(&hw_priv->tx_tasklet, tx_proc_task, +		     (unsigned long) hw_priv);  	hw->promiscuous = 0;  	hw->all_multi = 0; @@ -7033,16 +7035,6 @@ static int __devinit pcidev_init(struct pci_dev *pdev,  	spin_lock_init(&hw_priv->hwlock);  	mutex_init(&hw_priv->lock); -	/* tasklet is enabled. */ -	tasklet_init(&hw_priv->rx_tasklet, rx_proc_task, -		(unsigned long) hw_priv); -	tasklet_init(&hw_priv->tx_tasklet, tx_proc_task, -		(unsigned long) hw_priv); - -	/* tasklet_enable will decrement the atomic counter. */ -	tasklet_disable(&hw_priv->rx_tasklet); -	tasklet_disable(&hw_priv->tx_tasklet); -  	for (i = 0; i < TOTAL_PORT_NUM; i++)  		init_waitqueue_head(&hw_priv->counter[i].counter); diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index e7ff886e804..927aa33d434 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -3827,6 +3827,8 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)  	void __iomem *ioaddr = tp->mmio_addr;  	switch (tp->mac_version) { +	case RTL_GIGA_MAC_VER_25: +	case RTL_GIGA_MAC_VER_26:  	case RTL_GIGA_MAC_VER_29:  	case RTL_GIGA_MAC_VER_30:  	case RTL_GIGA_MAC_VER_32: @@ -4519,6 +4521,9 @@ static void rtl_set_rx_mode(struct net_device *dev)  		mc_filter[1] = swab32(data);  	} +	if (tp->mac_version == RTL_GIGA_MAC_VER_35) +		mc_filter[1] = mc_filter[0] = 0xffffffff; +  	RTL_W32(MAR0 + 4, mc_filter[1]);  	RTL_W32(MAR0 + 0, mc_filter[0]); diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c index 62d1baf111e..c53c0f4e2ce 100644 --- a/drivers/net/ethernet/smsc/smsc911x.c +++ b/drivers/net/ethernet/smsc/smsc911x.c @@ -2110,7 +2110,7 @@ static void __devinit smsc911x_read_mac_address(struct net_device *dev)  static int __devinit smsc911x_init(struct net_device *dev)  {  	struct smsc911x_data *pdata = netdev_priv(dev); -	unsigned int byte_test; +	unsigned int byte_test, mask;  	unsigned int to = 100;  	SMSC_TRACE(pdata, probe, "Driver Parameters:"); @@ -2130,9 +2130,22 @@ static int __devinit smsc911x_init(struct net_device *dev)  	/*  	 * poll the READY bit in PMT_CTRL. Any other access to the device is  	 * forbidden while this bit isn't set. Try for 100ms +	 * +	 * Note that this test is done before the WORD_SWAP register is +	 * programmed. So in some configurations the READY bit is at 16 before +	 * WORD_SWAP is written to. This issue is worked around by waiting +	 * until either bit 0 or bit 16 gets set in PMT_CTRL. +	 * +	 * SMSC has confirmed that checking bit 16 (marked as reserved in +	 * the datasheet) is fine since these bits "will either never be set +	 * or can only go high after READY does (so also indicate the device +	 * is ready)".  	 */ -	while (!(smsc911x_reg_read(pdata, PMT_CTRL) & PMT_CTRL_READY_) && --to) + +	mask = PMT_CTRL_READY_ | swahw32(PMT_CTRL_READY_); +	while (!(smsc911x_reg_read(pdata, PMT_CTRL) & mask) && --to)  		udelay(1000); +  	if (to == 0) {  		pr_err("Device not READY in 100ms aborting\n");  		return -ENODEV; diff --git a/drivers/net/ethernet/tile/tilegx.c b/drivers/net/ethernet/tile/tilegx.c index 4e981001385..66e025ad5df 100644 --- a/drivers/net/ethernet/tile/tilegx.c +++ b/drivers/net/ethernet/tile/tilegx.c @@ -917,7 +917,7 @@ static int tile_net_setup_interrupts(struct net_device *dev)  	ingress_irq = rc;  	tile_irq_activate(ingress_irq, TILE_IRQ_PERCPU);  	rc = request_irq(ingress_irq, tile_net_handle_ingress_irq, -			 0, NULL, NULL); +			 0, "tile_net", NULL);  	if (rc != 0) {  		netdev_err(dev, "request_irq failed: %d\n", rc);  		destroy_irq(ingress_irq); diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c index 0793299bd39..77e6db9dcfe 100644 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c @@ -942,6 +942,10 @@ static int axienet_open(struct net_device *ndev)  		phy_start(lp->phy_dev);  	} +	/* Enable tasklets for Axi DMA error handling */ +	tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler, +		     (unsigned long) lp); +  	/* Enable interrupts for Axi DMA Tx */  	ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev);  	if (ret) @@ -950,8 +954,7 @@ static int axienet_open(struct net_device *ndev)  	ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev);  	if (ret)  		goto err_rx_irq; -	/* Enable tasklets for Axi DMA error handling */ -	tasklet_enable(&lp->dma_err_tasklet); +  	return 0;  err_rx_irq: @@ -960,6 +963,7 @@ err_tx_irq:  	if (lp->phy_dev)  		phy_disconnect(lp->phy_dev);  	lp->phy_dev = NULL; +	tasklet_kill(&lp->dma_err_tasklet);  	dev_err(lp->dev, "request_irq() failed\n");  	return ret;  } @@ -990,7 +994,7 @@ static int axienet_stop(struct net_device *ndev)  	axienet_setoptions(ndev, lp->options &  			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN)); -	tasklet_disable(&lp->dma_err_tasklet); +	tasklet_kill(&lp->dma_err_tasklet);  	free_irq(lp->tx_irq, ndev);  	free_irq(lp->rx_irq, ndev); @@ -1613,10 +1617,6 @@ static int __devinit axienet_of_probe(struct platform_device *op)  		goto err_iounmap_2;  	} -	tasklet_init(&lp->dma_err_tasklet, axienet_dma_err_handler, -		     (unsigned long) lp); -	tasklet_disable(&lp->dma_err_tasklet); -  	return 0;  err_iounmap_2:  |