diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/amd8111e.c | 2 | ||||
| -rw-r--r-- | drivers/net/bnx2.c | 2 | ||||
| -rw-r--r-- | drivers/net/can/sja1000/sja1000.c | 2 | ||||
| -rw-r--r-- | drivers/net/ftmac100.c | 8 | ||||
| -rw-r--r-- | drivers/net/mii.c | 4 | ||||
| -rw-r--r-- | drivers/net/tg3.c | 8 | ||||
| -rw-r--r-- | drivers/net/usb/cdc_ether.c | 14 | ||||
| -rw-r--r-- | drivers/net/usb/smsc95xx.c | 2 | ||||
| -rw-r--r-- | drivers/net/usb/usbnet.c | 18 | ||||
| -rw-r--r-- | drivers/net/veth.c | 12 | ||||
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-4965-tx.c | 18 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-led.c | 20 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl4965-base.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 17 | 
15 files changed, 105 insertions, 31 deletions
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c index 88495c48a81..241b185e656 100644 --- a/drivers/net/amd8111e.c +++ b/drivers/net/amd8111e.c @@ -106,7 +106,7 @@ MODULE_DESCRIPTION ("AMD8111 based 10/100 Ethernet Controller. Driver Version "M  MODULE_LICENSE("GPL");  MODULE_DEVICE_TABLE(pci, amd8111e_pci_tbl);  module_param_array(speed_duplex, int, NULL, 0); -MODULE_PARM_DESC(speed_duplex, "Set device speed and duplex modes, 0: Auto Negotitate, 1: 10Mbps Half Duplex, 2: 10Mbps Full Duplex, 3: 100Mbps Half Duplex, 4: 100Mbps Full Duplex"); +MODULE_PARM_DESC(speed_duplex, "Set device speed and duplex modes, 0: Auto Negotiate, 1: 10Mbps Half Duplex, 2: 10Mbps Full Duplex, 3: 100Mbps Half Duplex, 4: 100Mbps Full Duplex");  module_param_array(coalesce, bool, NULL, 0);  MODULE_PARM_DESC(coalesce, "Enable or Disable interrupt coalescing, 1: Enable, 0: Disable");  module_param_array(dynamic_ipg, bool, NULL, 0); diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 1bebdfb9679..57d3293c65b 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -8357,6 +8357,8 @@ bnx2_remove_one(struct pci_dev *pdev)  	unregister_netdev(dev); +	del_timer_sync(&bp->timer); +  	if (bp->mips_firmware)  		release_firmware(bp->mips_firmware);  	if (bp->rv2p_firmware) diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c index a358ea9445a..f501bba1fc6 100644 --- a/drivers/net/can/sja1000/sja1000.c +++ b/drivers/net/can/sja1000/sja1000.c @@ -346,10 +346,10 @@ static void sja1000_rx(struct net_device *dev)  		    | (priv->read_reg(priv, REG_ID2) >> 5);  	} +	cf->can_dlc = get_can_dlc(fi & 0x0F);  	if (fi & FI_RTR) {  		id |= CAN_RTR_FLAG;  	} else { -		cf->can_dlc = get_can_dlc(fi & 0x0F);  		for (i = 0; i < cf->can_dlc; i++)  			cf->data[i] = priv->read_reg(priv, dreg++);  	} diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c index a31661948c4..9bd7746cbfc 100644 --- a/drivers/net/ftmac100.c +++ b/drivers/net/ftmac100.c @@ -139,11 +139,11 @@ static int ftmac100_reset(struct ftmac100 *priv)  			 * that hardware reset completed (what the f*ck).  			 * We still need to wait for a while.  			 */ -			usleep_range(500, 1000); +			udelay(500);  			return 0;  		} -		usleep_range(1000, 10000); +		udelay(1000);  	}  	netdev_err(netdev, "software reset failed\n"); @@ -772,7 +772,7 @@ static int ftmac100_mdio_read(struct net_device *netdev, int phy_id, int reg)  		if ((phycr & FTMAC100_PHYCR_MIIRD) == 0)  			return phycr & FTMAC100_PHYCR_MIIRDATA; -		usleep_range(100, 1000); +		udelay(100);  	}  	netdev_err(netdev, "mdio read timed out\n"); @@ -801,7 +801,7 @@ static void ftmac100_mdio_write(struct net_device *netdev, int phy_id, int reg,  		if ((phycr & FTMAC100_PHYCR_MIIWR) == 0)  			return; -		usleep_range(100, 1000); +		udelay(100);  	}  	netdev_err(netdev, "mdio write timed out\n"); diff --git a/drivers/net/mii.c b/drivers/net/mii.c index 4fbc816efee..c62e7816d54 100644 --- a/drivers/net/mii.c +++ b/drivers/net/mii.c @@ -49,6 +49,10 @@ static u32 mii_get_an(struct mii_if_info *mii, u16 addr)  		result |= ADVERTISED_100baseT_Half;  	if (advert & ADVERTISE_100FULL)  		result |= ADVERTISED_100baseT_Full; +	if (advert & ADVERTISE_PAUSE_CAP) +		result |= ADVERTISED_Pause; +	if (advert & ADVERTISE_PAUSE_ASYM) +		result |= ADVERTISED_Asym_Pause;  	return result;  } diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 7c7c9a897c0..ec195304310 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -12747,8 +12747,10 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)  		if (val & VCPU_CFGSHDW_ASPM_DBNC)  			tg3_flag_set(tp, ASPM_WORKAROUND);  		if ((val & VCPU_CFGSHDW_WOL_ENABLE) && -		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) +		    (val & VCPU_CFGSHDW_WOL_MAGPKT)) {  			tg3_flag_set(tp, WOL_ENABLE); +			device_set_wakeup_enable(&tp->pdev->dev, true); +		}  		goto done;  	} @@ -12881,8 +12883,10 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)  			tg3_flag_clear(tp, WOL_CAP);  		if (tg3_flag(tp, WOL_CAP) && -		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) +		    (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {  			tg3_flag_set(tp, WOL_ENABLE); +			device_set_wakeup_enable(&tp->pdev->dev, true); +		}  		if (cfg2 & (1 << 17))  			tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 341f7056a80..a301479ecc6 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -460,7 +460,7 @@ static const struct driver_info	cdc_info = {  	.manage_power =	cdc_manage_power,  }; -static const struct driver_info mbm_info = { +static const struct driver_info wwan_info = {  	.description =	"Mobile Broadband Network Device",  	.flags =	FLAG_WWAN,  	.bind =		usbnet_cdc_bind, @@ -471,6 +471,7 @@ static const struct driver_info mbm_info = {  /*-------------------------------------------------------------------------*/ +#define HUAWEI_VENDOR_ID	0x12D1  static const struct usb_device_id	products [] = {  /* @@ -587,8 +588,17 @@ static const struct usb_device_id	products [] = {  }, {  	USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MDLM,  			USB_CDC_PROTO_NONE), -	.driver_info = (unsigned long)&mbm_info, +	.driver_info = (unsigned long)&wwan_info, +}, { +	/* Various Huawei modems with a network port like the UMG1831 */ +	.match_flags    =   USB_DEVICE_ID_MATCH_VENDOR +		 | USB_DEVICE_ID_MATCH_INT_INFO, +	.idVendor               = HUAWEI_VENDOR_ID, +	.bInterfaceClass	= USB_CLASS_COMM, +	.bInterfaceSubClass	= USB_CDC_SUBCLASS_ETHERNET, +	.bInterfaceProtocol	= 255, +	.driver_info = (unsigned long)&wwan_info,  },  	{ },		// END  }; diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index b374a999790..f74f3ce7152 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -690,7 +690,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev)  		msleep(10);  		bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR);  		timeout++; -	} while ((bmcr & MII_BMCR) && (timeout < 100)); +	} while ((bmcr & BMCR_RESET) && (timeout < 100));  	if (timeout >= 100) {  		netdev_warn(dev->net, "timeout on PHY Reset"); diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 7bc9852bd57..e6dd2446696 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -645,6 +645,7 @@ int usbnet_stop (struct net_device *net)  	struct driver_info	*info = dev->driver_info;  	int			retval; +	clear_bit(EVENT_DEV_OPEN, &dev->flags);  	netif_stop_queue (net);  	netif_info(dev, ifdown, dev->net, @@ -736,6 +737,7 @@ int usbnet_open (struct net_device *net)  		}  	} +	set_bit(EVENT_DEV_OPEN, &dev->flags);  	netif_start_queue (net);  	netif_info(dev, ifup, dev->net,  		   "open: enable queueing (rx %d, tx %d) mtu %d %s framing\n", @@ -1259,6 +1261,9 @@ void usbnet_disconnect (struct usb_interface *intf)  	if (dev->driver_info->unbind)  		dev->driver_info->unbind (dev, intf); +	usb_kill_urb(dev->interrupt); +	usb_free_urb(dev->interrupt); +  	free_netdev(net);  	usb_put_dev (xdev);  } @@ -1498,6 +1503,10 @@ int usbnet_resume (struct usb_interface *intf)  	int                     retval;  	if (!--dev->suspend_count) { +		/* resume interrupt URBs */ +		if (dev->interrupt && test_bit(EVENT_DEV_OPEN, &dev->flags)) +			usb_submit_urb(dev->interrupt, GFP_NOIO); +  		spin_lock_irq(&dev->txq.lock);  		while ((res = usb_get_from_anchor(&dev->deferred))) { @@ -1516,9 +1525,12 @@ int usbnet_resume (struct usb_interface *intf)  		smp_mb();  		clear_bit(EVENT_DEV_ASLEEP, &dev->flags);  		spin_unlock_irq(&dev->txq.lock); -		if (!(dev->txq.qlen >= TX_QLEN(dev))) -			netif_start_queue(dev->net); -		tasklet_schedule (&dev->bh); + +		if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { +			if (!(dev->txq.qlen >= TX_QLEN(dev))) +				netif_start_queue(dev->net); +			tasklet_schedule (&dev->bh); +		}  	}  	return 0;  } diff --git a/drivers/net/veth.c b/drivers/net/veth.c index cbe953a5bf5..3b0151a2a31 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -368,6 +368,17 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,  	if (tb[IFLA_ADDRESS] == NULL)  		random_ether_addr(dev->dev_addr); +	if (tb[IFLA_IFNAME]) +		nla_strlcpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ); +	else +		snprintf(dev->name, IFNAMSIZ, DRV_NAME "%%d"); + +	if (strchr(dev->name, '%')) { +		err = dev_alloc_name(dev, dev->name); +		if (err < 0) +			goto err_alloc_name; +	} +  	err = register_netdevice(dev);  	if (err < 0)  		goto err_register_dev; @@ -387,6 +398,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,  err_register_dev:  	/* nothing to do */ +err_alloc_name:  err_configure_peer:  	unregister_netdevice(peer);  	return err; diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index d59b0168c14..5af40d9170a 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c @@ -72,6 +72,7 @@ MODULE_FIRMWARE("b43/ucode11.fw");  MODULE_FIRMWARE("b43/ucode13.fw");  MODULE_FIRMWARE("b43/ucode14.fw");  MODULE_FIRMWARE("b43/ucode15.fw"); +MODULE_FIRMWARE("b43/ucode16_mimo.fw");  MODULE_FIRMWARE("b43/ucode5.fw");  MODULE_FIRMWARE("b43/ucode9.fw"); diff --git a/drivers/net/wireless/iwlegacy/iwl-4965-tx.c b/drivers/net/wireless/iwlegacy/iwl-4965-tx.c index fbec88d48f1..79ac081832f 100644 --- a/drivers/net/wireless/iwlegacy/iwl-4965-tx.c +++ b/drivers/net/wireless/iwlegacy/iwl-4965-tx.c @@ -316,12 +316,18 @@ int iwl4965_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)  	hdr_len = ieee80211_hdrlen(fc); -	/* Find index into station table for destination station */ -	sta_id = iwl_legacy_sta_id_or_broadcast(priv, ctx, info->control.sta); -	if (sta_id == IWL_INVALID_STATION) { -		IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n", -			       hdr->addr1); -		goto drop_unlock; +	/* For management frames use broadcast id to do not break aggregation */ +	if (!ieee80211_is_data(fc)) +		sta_id = ctx->bcast_sta_id; +	else { +		/* Find index into station table for destination station */ +		sta_id = iwl_legacy_sta_id_or_broadcast(priv, ctx, info->control.sta); + +		if (sta_id == IWL_INVALID_STATION) { +			IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n", +				       hdr->addr1); +			goto drop_unlock; +		}  	}  	IWL_DEBUG_TX(priv, "station Id %d\n", sta_id); diff --git a/drivers/net/wireless/iwlegacy/iwl-led.c b/drivers/net/wireless/iwlegacy/iwl-led.c index 15eb8b70715..bda0d61b2c0 100644 --- a/drivers/net/wireless/iwlegacy/iwl-led.c +++ b/drivers/net/wireless/iwlegacy/iwl-led.c @@ -48,8 +48,21 @@ module_param(led_mode, int, S_IRUGO);  MODULE_PARM_DESC(led_mode, "0=system default, "  		"1=On(RF On)/Off(RF Off), 2=blinking"); +/* Throughput		OFF time(ms)	ON time (ms) + *	>300			25		25 + *	>200 to 300		40		40 + *	>100 to 200		55		55 + *	>70 to 100		65		65 + *	>50 to 70		75		75 + *	>20 to 50		85		85 + *	>10 to 20		95		95 + *	>5 to 10		110		110 + *	>1 to 5			130		130 + *	>0 to 1			167		167 + *	<=0					SOLID ON + */  static const struct ieee80211_tpt_blink iwl_blink[] = { -	{ .throughput = 0 * 1024 - 1, .blink_time = 334 }, +	{ .throughput = 0, .blink_time = 334 },  	{ .throughput = 1 * 1024 - 1, .blink_time = 260 },  	{ .throughput = 5 * 1024 - 1, .blink_time = 220 },  	{ .throughput = 10 * 1024 - 1, .blink_time = 190 }, @@ -101,6 +114,11 @@ static int iwl_legacy_led_cmd(struct iwl_priv *priv,  	if (priv->blink_on == on && priv->blink_off == off)  		return 0; +	if (off == 0) { +		/* led is SOLID_ON */ +		on = IWL_LED_SOLID; +	} +  	IWL_DEBUG_LED(priv, "Led blink time compensation=%u\n",  			priv->cfg->base_params->led_compensation);  	led_cmd.on = iwl_legacy_blink_compensation(priv, on, diff --git a/drivers/net/wireless/iwlegacy/iwl4965-base.c b/drivers/net/wireless/iwlegacy/iwl4965-base.c index f781b7e225b..af2ae22fcfd 100644 --- a/drivers/net/wireless/iwlegacy/iwl4965-base.c +++ b/drivers/net/wireless/iwlegacy/iwl4965-base.c @@ -2992,15 +2992,15 @@ static void iwl4965_bg_txpower_work(struct work_struct *work)  	struct iwl_priv *priv = container_of(work, struct iwl_priv,  			txpower_work); +	mutex_lock(&priv->mutex); +  	/* If a scan happened to start before we got here  	 * then just return; the statistics notification will  	 * kick off another scheduled work to compensate for  	 * any temperature delta we missed here. */  	if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||  	    test_bit(STATUS_SCANNING, &priv->status)) -		return; - -	mutex_lock(&priv->mutex); +		goto out;  	/* Regardless of if we are associated, we must reconfigure the  	 * TX power since frames can be sent on non-radar channels while @@ -3010,7 +3010,7 @@ static void iwl4965_bg_txpower_work(struct work_struct *work)  	/* Update last_temperature to keep is_calib_needed from running  	 * when it isn't needed... */  	priv->last_temperature = priv->temperature; - +out:  	mutex_unlock(&priv->mutex);  } diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c index 494de0e59cb..4afae144658 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c @@ -582,12 +582,17 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)  	hdr_len = ieee80211_hdrlen(fc); -	/* Find index into station table for destination station */ -	sta_id = iwl_sta_id_or_broadcast(priv, ctx, info->control.sta); -	if (sta_id == IWL_INVALID_STATION) { -		IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n", -			       hdr->addr1); -		goto drop_unlock; +	/* For management frames use broadcast id to do not break aggregation */ +	if (!ieee80211_is_data(fc)) +		sta_id = ctx->bcast_sta_id; +	else { +		/* Find index into station table for destination station */ +		sta_id = iwl_sta_id_or_broadcast(priv, ctx, info->control.sta); +		if (sta_id == IWL_INVALID_STATION) { +			IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n", +				       hdr->addr1); +			goto drop_unlock; +		}  	}  	IWL_DEBUG_TX(priv, "station Id %d\n", sta_id);  |