diff options
author | David S. Miller <davem@davemloft.net> | 2009-12-02 01:13:38 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-02 01:13:38 -0500 |
commit | ff9c38bba37937adb909cceb2a6521f2e92e17c6 (patch) | |
tree | 93bd6152d9fa28348be99ef1c788040cc7b7a94d /drivers/net | |
parent | 65c0cfafce9575319fb6f70080fbe226e5617e3b (diff) | |
parent | b2722b1c3a893ec6021508da15b32282ec79f4da (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/mac80211/ht.c
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/arm/ep93xx_eth.c | 12 | ||||
-rw-r--r-- | drivers/net/b44.c | 3 | ||||
-rw-r--r-- | drivers/net/e100.c | 17 | ||||
-rw-r--r-- | drivers/net/r8169.c | 7 | ||||
-rw-r--r-- | drivers/net/smc91x.c | 2 | ||||
-rw-r--r-- | drivers/net/smsc9420.c | 14 | ||||
-rw-r--r-- | drivers/net/wan/cosa.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 10 |
8 files changed, 46 insertions, 20 deletions
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c index 2be49c817995..b25467ac895c 100644 --- a/drivers/net/arm/ep93xx_eth.c +++ b/drivers/net/arm/ep93xx_eth.c | |||
@@ -628,15 +628,6 @@ static int ep93xx_open(struct net_device *dev) | |||
628 | if (ep93xx_alloc_buffers(ep)) | 628 | if (ep93xx_alloc_buffers(ep)) |
629 | return -ENOMEM; | 629 | return -ENOMEM; |
630 | 630 | ||
631 | if (is_zero_ether_addr(dev->dev_addr)) { | ||
632 | random_ether_addr(dev->dev_addr); | ||
633 | printk(KERN_INFO "%s: generated random MAC address " | ||
634 | "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x.\n", dev->name, | ||
635 | dev->dev_addr[0], dev->dev_addr[1], | ||
636 | dev->dev_addr[2], dev->dev_addr[3], | ||
637 | dev->dev_addr[4], dev->dev_addr[5]); | ||
638 | } | ||
639 | |||
640 | napi_enable(&ep->napi); | 631 | napi_enable(&ep->napi); |
641 | 632 | ||
642 | if (ep93xx_start_hw(dev)) { | 633 | if (ep93xx_start_hw(dev)) { |
@@ -877,6 +868,9 @@ static int ep93xx_eth_probe(struct platform_device *pdev) | |||
877 | ep->mii.mdio_write = ep93xx_mdio_write; | 868 | ep->mii.mdio_write = ep93xx_mdio_write; |
878 | ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */ | 869 | ep->mdc_divisor = 40; /* Max HCLK 100 MHz, min MDIO clk 2.5 MHz. */ |
879 | 870 | ||
871 | if (is_zero_ether_addr(dev->dev_addr)) | ||
872 | random_ether_addr(dev->dev_addr); | ||
873 | |||
880 | err = register_netdev(dev); | 874 | err = register_netdev(dev); |
881 | if (err) { | 875 | if (err) { |
882 | dev_err(&pdev->dev, "Failed to register netdev\n"); | 876 | dev_err(&pdev->dev, "Failed to register netdev\n"); |
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index e046943ef29d..2a9132343b66 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c | |||
@@ -912,9 +912,6 @@ static irqreturn_t b44_interrupt(int irq, void *dev_id) | |||
912 | bp->istat = istat; | 912 | bp->istat = istat; |
913 | __b44_disable_ints(bp); | 913 | __b44_disable_ints(bp); |
914 | __napi_schedule(&bp->napi); | 914 | __napi_schedule(&bp->napi); |
915 | } else { | ||
916 | printk(KERN_ERR PFX "%s: Error, poll already scheduled\n", | ||
917 | dev->name); | ||
918 | } | 915 | } |
919 | 916 | ||
920 | irq_ack: | 917 | irq_ack: |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index a81c7b0c41b0..929701ca07d3 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -157,6 +157,7 @@ | |||
157 | #include <linux/init.h> | 157 | #include <linux/init.h> |
158 | #include <linux/pci.h> | 158 | #include <linux/pci.h> |
159 | #include <linux/dma-mapping.h> | 159 | #include <linux/dma-mapping.h> |
160 | #include <linux/dmapool.h> | ||
160 | #include <linux/netdevice.h> | 161 | #include <linux/netdevice.h> |
161 | #include <linux/etherdevice.h> | 162 | #include <linux/etherdevice.h> |
162 | #include <linux/mii.h> | 163 | #include <linux/mii.h> |
@@ -602,6 +603,7 @@ struct nic { | |||
602 | struct mem *mem; | 603 | struct mem *mem; |
603 | dma_addr_t dma_addr; | 604 | dma_addr_t dma_addr; |
604 | 605 | ||
606 | struct pci_pool *cbs_pool; | ||
605 | dma_addr_t cbs_dma_addr; | 607 | dma_addr_t cbs_dma_addr; |
606 | u8 adaptive_ifs; | 608 | u8 adaptive_ifs; |
607 | u8 tx_threshold; | 609 | u8 tx_threshold; |
@@ -1805,9 +1807,7 @@ static void e100_clean_cbs(struct nic *nic) | |||
1805 | nic->cb_to_clean = nic->cb_to_clean->next; | 1807 | nic->cb_to_clean = nic->cb_to_clean->next; |
1806 | nic->cbs_avail++; | 1808 | nic->cbs_avail++; |
1807 | } | 1809 | } |
1808 | pci_free_consistent(nic->pdev, | 1810 | pci_pool_free(nic->cbs_pool, nic->cbs, nic->cbs_dma_addr); |
1809 | sizeof(struct cb) * nic->params.cbs.count, | ||
1810 | nic->cbs, nic->cbs_dma_addr); | ||
1811 | nic->cbs = NULL; | 1811 | nic->cbs = NULL; |
1812 | nic->cbs_avail = 0; | 1812 | nic->cbs_avail = 0; |
1813 | } | 1813 | } |
@@ -1825,8 +1825,8 @@ static int e100_alloc_cbs(struct nic *nic) | |||
1825 | nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL; | 1825 | nic->cb_to_use = nic->cb_to_send = nic->cb_to_clean = NULL; |
1826 | nic->cbs_avail = 0; | 1826 | nic->cbs_avail = 0; |
1827 | 1827 | ||
1828 | nic->cbs = pci_alloc_consistent(nic->pdev, | 1828 | nic->cbs = pci_pool_alloc(nic->cbs_pool, GFP_KERNEL, |
1829 | sizeof(struct cb) * count, &nic->cbs_dma_addr); | 1829 | &nic->cbs_dma_addr); |
1830 | if (!nic->cbs) | 1830 | if (!nic->cbs) |
1831 | return -ENOMEM; | 1831 | return -ENOMEM; |
1832 | 1832 | ||
@@ -2852,7 +2852,11 @@ static int __devinit e100_probe(struct pci_dev *pdev, | |||
2852 | DPRINTK(PROBE, ERR, "Cannot register net device, aborting.\n"); | 2852 | DPRINTK(PROBE, ERR, "Cannot register net device, aborting.\n"); |
2853 | goto err_out_free; | 2853 | goto err_out_free; |
2854 | } | 2854 | } |
2855 | 2855 | nic->cbs_pool = pci_pool_create(netdev->name, | |
2856 | nic->pdev, | ||
2857 | nic->params.cbs.count * sizeof(struct cb), | ||
2858 | sizeof(u32), | ||
2859 | 0); | ||
2856 | DPRINTK(PROBE, INFO, "addr 0x%llx, irq %d, MAC addr %pM\n", | 2860 | DPRINTK(PROBE, INFO, "addr 0x%llx, irq %d, MAC addr %pM\n", |
2857 | (unsigned long long)pci_resource_start(pdev, use_io ? 1 : 0), | 2861 | (unsigned long long)pci_resource_start(pdev, use_io ? 1 : 0), |
2858 | pdev->irq, netdev->dev_addr); | 2862 | pdev->irq, netdev->dev_addr); |
@@ -2882,6 +2886,7 @@ static void __devexit e100_remove(struct pci_dev *pdev) | |||
2882 | unregister_netdev(netdev); | 2886 | unregister_netdev(netdev); |
2883 | e100_free(nic); | 2887 | e100_free(nic); |
2884 | pci_iounmap(pdev, nic->csr); | 2888 | pci_iounmap(pdev, nic->csr); |
2889 | pci_pool_destroy(nic->cbs_pool); | ||
2885 | free_netdev(netdev); | 2890 | free_netdev(netdev); |
2886 | pci_release_regions(pdev); | 2891 | pci_release_regions(pdev); |
2887 | pci_disable_device(pdev); | 2892 | pci_disable_device(pdev); |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 5dba9fa2bc19..f6899c3500b5 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
@@ -3235,6 +3235,10 @@ static void __devexit rtl8169_remove_one(struct pci_dev *pdev) | |||
3235 | flush_scheduled_work(); | 3235 | flush_scheduled_work(); |
3236 | 3236 | ||
3237 | unregister_netdev(dev); | 3237 | unregister_netdev(dev); |
3238 | |||
3239 | /* restore original MAC address */ | ||
3240 | rtl_rar_set(tp, dev->perm_addr); | ||
3241 | |||
3238 | rtl_disable_msi(pdev, tp); | 3242 | rtl_disable_msi(pdev, tp); |
3239 | rtl8169_release_board(pdev, dev, tp->mmio_addr); | 3243 | rtl8169_release_board(pdev, dev, tp->mmio_addr); |
3240 | pci_set_drvdata(pdev, NULL); | 3244 | pci_set_drvdata(pdev, NULL); |
@@ -4880,6 +4884,9 @@ static void rtl_shutdown(struct pci_dev *pdev) | |||
4880 | 4884 | ||
4881 | rtl8169_net_suspend(dev); | 4885 | rtl8169_net_suspend(dev); |
4882 | 4886 | ||
4887 | /* restore original MAC address */ | ||
4888 | rtl_rar_set(tp, dev->perm_addr); | ||
4889 | |||
4883 | spin_lock_irq(&tp->lock); | 4890 | spin_lock_irq(&tp->lock); |
4884 | 4891 | ||
4885 | rtl8169_asic_down(ioaddr); | 4892 | rtl8169_asic_down(ioaddr); |
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 2ab90260d4a6..ae4983a5127d 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
@@ -2283,7 +2283,7 @@ static int __devinit smc_drv_probe(struct platform_device *pdev) | |||
2283 | 2283 | ||
2284 | ndev->irq = ires->start; | 2284 | ndev->irq = ires->start; |
2285 | 2285 | ||
2286 | if (ires->flags & IRQF_TRIGGER_MASK) | 2286 | if (irq_flags == -1 || ires->flags & IRQF_TRIGGER_MASK) |
2287 | irq_flags = ires->flags & IRQF_TRIGGER_MASK; | 2287 | irq_flags = ires->flags & IRQF_TRIGGER_MASK; |
2288 | 2288 | ||
2289 | ret = smc_request_attrib(pdev, ndev); | 2289 | ret = smc_request_attrib(pdev, ndev); |
diff --git a/drivers/net/smsc9420.c b/drivers/net/smsc9420.c index 92e2bbe6b49b..12f0f5d74e3c 100644 --- a/drivers/net/smsc9420.c +++ b/drivers/net/smsc9420.c | |||
@@ -252,6 +252,9 @@ static int smsc9420_ethtool_get_settings(struct net_device *dev, | |||
252 | { | 252 | { |
253 | struct smsc9420_pdata *pd = netdev_priv(dev); | 253 | struct smsc9420_pdata *pd = netdev_priv(dev); |
254 | 254 | ||
255 | if (!pd->phy_dev) | ||
256 | return -ENODEV; | ||
257 | |||
255 | cmd->maxtxpkt = 1; | 258 | cmd->maxtxpkt = 1; |
256 | cmd->maxrxpkt = 1; | 259 | cmd->maxrxpkt = 1; |
257 | return phy_ethtool_gset(pd->phy_dev, cmd); | 260 | return phy_ethtool_gset(pd->phy_dev, cmd); |
@@ -262,6 +265,9 @@ static int smsc9420_ethtool_set_settings(struct net_device *dev, | |||
262 | { | 265 | { |
263 | struct smsc9420_pdata *pd = netdev_priv(dev); | 266 | struct smsc9420_pdata *pd = netdev_priv(dev); |
264 | 267 | ||
268 | if (!pd->phy_dev) | ||
269 | return -ENODEV; | ||
270 | |||
265 | return phy_ethtool_sset(pd->phy_dev, cmd); | 271 | return phy_ethtool_sset(pd->phy_dev, cmd); |
266 | } | 272 | } |
267 | 273 | ||
@@ -290,6 +296,10 @@ static void smsc9420_ethtool_set_msglevel(struct net_device *netdev, u32 data) | |||
290 | static int smsc9420_ethtool_nway_reset(struct net_device *netdev) | 296 | static int smsc9420_ethtool_nway_reset(struct net_device *netdev) |
291 | { | 297 | { |
292 | struct smsc9420_pdata *pd = netdev_priv(netdev); | 298 | struct smsc9420_pdata *pd = netdev_priv(netdev); |
299 | |||
300 | if (!pd->phy_dev) | ||
301 | return -ENODEV; | ||
302 | |||
293 | return phy_start_aneg(pd->phy_dev); | 303 | return phy_start_aneg(pd->phy_dev); |
294 | } | 304 | } |
295 | 305 | ||
@@ -312,6 +322,10 @@ smsc9420_ethtool_getregs(struct net_device *dev, struct ethtool_regs *regs, | |||
312 | for (i = 0; i < 0x100; i += (sizeof(u32))) | 322 | for (i = 0; i < 0x100; i += (sizeof(u32))) |
313 | data[j++] = smsc9420_reg_read(pd, i); | 323 | data[j++] = smsc9420_reg_read(pd, i); |
314 | 324 | ||
325 | // cannot read phy registers if the net device is down | ||
326 | if (!phy_dev) | ||
327 | return; | ||
328 | |||
315 | for (i = 0; i <= 31; i++) | 329 | for (i = 0; i <= 31; i++) |
316 | data[j++] = smsc9420_mii_read(phy_dev->bus, phy_dev->addr, i); | 330 | data[j++] = smsc9420_mii_read(phy_dev->bus, phy_dev->addr, i); |
317 | } | 331 | } |
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c index cd8f04afed8f..b36bf96eb502 100644 --- a/drivers/net/wan/cosa.c +++ b/drivers/net/wan/cosa.c | |||
@@ -907,6 +907,7 @@ static ssize_t cosa_write(struct file *file, | |||
907 | current->state = TASK_RUNNING; | 907 | current->state = TASK_RUNNING; |
908 | chan->tx_status = 1; | 908 | chan->tx_status = 1; |
909 | spin_unlock_irqrestore(&cosa->lock, flags); | 909 | spin_unlock_irqrestore(&cosa->lock, flags); |
910 | up(&chan->wsem); | ||
910 | return -ERESTARTSYS; | 911 | return -ERESTARTSYS; |
911 | } | 912 | } |
912 | } | 913 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index 888a8e9fe9ef..58b132f9cf28 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
@@ -1350,8 +1350,16 @@ int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid) | |||
1350 | return -ENXIO; | 1350 | return -ENXIO; |
1351 | } | 1351 | } |
1352 | 1352 | ||
1353 | if (priv->stations[sta_id].tid[tid].agg.state == | ||
1354 | IWL_EMPTYING_HW_QUEUE_ADDBA) { | ||
1355 | IWL_DEBUG_HT(priv, "AGG stop before setup done\n"); | ||
1356 | ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid); | ||
1357 | priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF; | ||
1358 | return 0; | ||
1359 | } | ||
1360 | |||
1353 | if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON) | 1361 | if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON) |
1354 | IWL_WARN(priv, "Stopping AGG while state not IWL_AGG_ON\n"); | 1362 | IWL_WARN(priv, "Stopping AGG while state not ON or starting\n"); |
1355 | 1363 | ||
1356 | tid_data = &priv->stations[sta_id].tid[tid]; | 1364 | tid_data = &priv->stations[sta_id].tid[tid]; |
1357 | ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4; | 1365 | ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4; |