aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-05-19 00:08:20 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-19 00:08:20 -0400
commitbb803cfbecb03a0cf8dc7e1864f18dda6631af00 (patch)
tree6c0989693bea6f50cfa5c6bb14f52ec19668def3 /drivers/net
parent3878fb6fdbceecca20b15748f807340854220f06 (diff)
parent511e11e396dc596825ce04d53d7f6d579404bc01 (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/scsi/fcoe/fcoe.c
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/arm/ep93xx_eth.c2
-rw-r--r--drivers/net/arm/ixp4xx_eth.c31
-rw-r--r--drivers/net/atl1c/atl1c_main.c4
-rw-r--r--drivers/net/benet/be.h14
-rw-r--r--drivers/net/benet/be_main.c14
-rw-r--r--drivers/net/bonding/bond_3ad.c11
-rw-r--r--drivers/net/bonding/bond_main.c8
-rw-r--r--drivers/net/jme.c8
-rw-r--r--drivers/net/meth.c27
-rw-r--r--drivers/net/mlx4/en_cq.c4
-rw-r--r--drivers/net/mlx4/en_rx.c1
-rw-r--r--drivers/net/mlx4/main.c2
-rw-r--r--drivers/net/mv643xx_eth.c41
-rw-r--r--drivers/net/vxge/vxge-traffic.c2
-rw-r--r--drivers/net/wan/ixp4xx_hss.c4
-rw-r--r--drivers/net/wimax/i2400m/rx.c5
-rw-r--r--drivers/net/wireless/airo.c10
-rw-r--r--drivers/net/wireless/ath/ath5k/base.c22
-rw-r--r--drivers/net/wireless/ath/ath9k/pci.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c2
-rw-r--r--drivers/net/wireless/p54/p54pci.c4
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187.h57
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_dev.c13
-rw-r--r--drivers/net/wireless/rtl818x/rtl8187_rtl8225.c8
25 files changed, 190 insertions, 116 deletions
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c
index 41736772c1dd..b72b3d639f6e 100644
--- a/drivers/net/arm/ep93xx_eth.c
+++ b/drivers/net/arm/ep93xx_eth.c
@@ -153,7 +153,7 @@ struct ep93xx_descs
153struct ep93xx_priv 153struct ep93xx_priv
154{ 154{
155 struct resource *res; 155 struct resource *res;
156 void *base_addr; 156 void __iomem *base_addr;
157 int irq; 157 int irq;
158 158
159 struct ep93xx_descs *descs; 159 struct ep93xx_descs *descs;
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index 448487e22fa3..a740053d3af3 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -338,12 +338,12 @@ static int ixp4xx_mdio_register(void)
338 if (cpu_is_ixp43x()) { 338 if (cpu_is_ixp43x()) {
339 /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */ 339 /* IXP43x lacks NPE-B and uses NPE-C for MII PHY access */
340 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH)) 340 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEC_ETH))
341 return -ENOSYS; 341 return -ENODEV;
342 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT; 342 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT;
343 } else { 343 } else {
344 /* All MII PHY accesses use NPE-B Ethernet registers */ 344 /* All MII PHY accesses use NPE-B Ethernet registers */
345 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0)) 345 if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
346 return -ENOSYS; 346 return -ENODEV;
347 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT; 347 mdio_regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
348 } 348 }
349 349
@@ -1174,7 +1174,7 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1174 regs_phys = IXP4XX_EthC_BASE_PHYS; 1174 regs_phys = IXP4XX_EthC_BASE_PHYS;
1175 break; 1175 break;
1176 default: 1176 default:
1177 err = -ENOSYS; 1177 err = -ENODEV;
1178 goto err_free; 1178 goto err_free;
1179 } 1179 }
1180 1180
@@ -1189,15 +1189,10 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1189 goto err_free; 1189 goto err_free;
1190 } 1190 }
1191 1191
1192 if (register_netdev(dev)) {
1193 err = -EIO;
1194 goto err_npe_rel;
1195 }
1196
1197 port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name); 1192 port->mem_res = request_mem_region(regs_phys, REGS_SIZE, dev->name);
1198 if (!port->mem_res) { 1193 if (!port->mem_res) {
1199 err = -EBUSY; 1194 err = -EBUSY;
1200 goto err_unreg; 1195 goto err_npe_rel;
1201 } 1196 }
1202 1197
1203 port->plat = plat; 1198 port->plat = plat;
@@ -1215,20 +1210,25 @@ static int __devinit eth_init_one(struct platform_device *pdev)
1215 snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, "0", plat->phy); 1210 snprintf(phy_id, BUS_ID_SIZE, PHY_ID_FMT, "0", plat->phy);
1216 port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, 1211 port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0,
1217 PHY_INTERFACE_MODE_MII); 1212 PHY_INTERFACE_MODE_MII);
1218 if (IS_ERR(port->phydev)) { 1213 if ((err = IS_ERR(port->phydev)))
1219 printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name); 1214 goto err_free_mem;
1220 return PTR_ERR(port->phydev);
1221 }
1222 1215
1223 port->phydev->irq = PHY_POLL; 1216 port->phydev->irq = PHY_POLL;
1224 1217
1218 if ((err = register_netdev(dev)))
1219 goto err_phy_dis;
1220
1225 printk(KERN_INFO "%s: MII PHY %i on %s\n", dev->name, plat->phy, 1221 printk(KERN_INFO "%s: MII PHY %i on %s\n", dev->name, plat->phy,
1226 npe_name(port->npe)); 1222 npe_name(port->npe));
1227 1223
1228 return 0; 1224 return 0;
1229 1225
1230err_unreg: 1226err_phy_dis:
1231 unregister_netdev(dev); 1227 phy_disconnect(port->phydev);
1228err_free_mem:
1229 npe_port_tab[NPE_ID(port->id)] = NULL;
1230 platform_set_drvdata(pdev, NULL);
1231 release_resource(port->mem_res);
1232err_npe_rel: 1232err_npe_rel:
1233 npe_release(port->npe); 1233 npe_release(port->npe);
1234err_free: 1234err_free:
@@ -1242,6 +1242,7 @@ static int __devexit eth_remove_one(struct platform_device *pdev)
1242 struct port *port = netdev_priv(dev); 1242 struct port *port = netdev_priv(dev);
1243 1243
1244 unregister_netdev(dev); 1244 unregister_netdev(dev);
1245 phy_disconnect(port->phydev);
1245 npe_port_tab[NPE_ID(port->id)] = NULL; 1246 npe_port_tab[NPE_ID(port->id)] = NULL;
1246 platform_set_drvdata(pdev, NULL); 1247 platform_set_drvdata(pdev, NULL);
1247 npe_release(port->npe); 1248 npe_release(port->npe);
diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c
index 8b17278c4a58..fc1092b835d2 100644
--- a/drivers/net/atl1c/atl1c_main.c
+++ b/drivers/net/atl1c/atl1c_main.c
@@ -2522,8 +2522,8 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
2522 * various kernel subsystems to support the mechanics required by a 2522 * various kernel subsystems to support the mechanics required by a
2523 * fixed-high-32-bit system. 2523 * fixed-high-32-bit system.
2524 */ 2524 */
2525 if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || 2525 if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) ||
2526 (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { 2526 (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)) {
2527 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); 2527 dev_err(&pdev->dev, "No usable DMA configuration,aborting\n");
2528 goto err_dma; 2528 goto err_dma;
2529 } 2529 }
diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h
index c49ddd08b2aa..b4bb06fdf307 100644
--- a/drivers/net/benet/be.h
+++ b/drivers/net/benet/be.h
@@ -35,8 +35,22 @@
35#define DRV_VER "2.0.348" 35#define DRV_VER "2.0.348"
36#define DRV_NAME "be2net" 36#define DRV_NAME "be2net"
37#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC" 37#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC"
38#define OC_NAME "Emulex OneConnect 10Gbps NIC"
38#define DRV_DESC BE_NAME "Driver" 39#define DRV_DESC BE_NAME "Driver"
39 40
41#define BE_VENDOR_ID 0x19a2
42#define BE_DEVICE_ID1 0x211
43#define OC_DEVICE_ID1 0x700
44#define OC_DEVICE_ID2 0x701
45
46static inline char *nic_name(struct pci_dev *pdev)
47{
48 if (pdev->device == OC_DEVICE_ID1 || pdev->device == OC_DEVICE_ID2)
49 return OC_NAME;
50 else
51 return BE_NAME;
52}
53
40/* Number of bytes of an RX frame that are copied to skb->data */ 54/* Number of bytes of an RX frame that are copied to skb->data */
41#define BE_HDR_LEN 64 55#define BE_HDR_LEN 64
42#define BE_MAX_JUMBO_FRAME_SIZE 9018 56#define BE_MAX_JUMBO_FRAME_SIZE 9018
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
index 8994b03d80ac..ae2f6b58ba25 100644
--- a/drivers/net/benet/be_main.c
+++ b/drivers/net/benet/be_main.c
@@ -28,10 +28,10 @@ static unsigned int rx_frag_size = 2048;
28module_param(rx_frag_size, uint, S_IRUGO); 28module_param(rx_frag_size, uint, S_IRUGO);
29MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data."); 29MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
30 30
31#define BE_VENDOR_ID 0x19a2
32#define BE2_DEVICE_ID_1 0x0211
33static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = { 31static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
34 { PCI_DEVICE(BE_VENDOR_ID, BE2_DEVICE_ID_1) }, 32 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
33 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
34 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
35 { 0 } 35 { 0 }
36}; 36};
37MODULE_DEVICE_TABLE(pci, be_dev_ids); 37MODULE_DEVICE_TABLE(pci, be_dev_ids);
@@ -1837,11 +1837,11 @@ static int __devinit be_probe(struct pci_dev *pdev,
1837 1837
1838 be_msix_enable(adapter); 1838 be_msix_enable(adapter);
1839 1839
1840 status = pci_set_dma_mask(pdev, DMA_64BIT_MASK); 1840 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
1841 if (!status) { 1841 if (!status) {
1842 netdev->features |= NETIF_F_HIGHDMA; 1842 netdev->features |= NETIF_F_HIGHDMA;
1843 } else { 1843 } else {
1844 status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 1844 status = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1845 if (status) { 1845 if (status) {
1846 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); 1846 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
1847 goto free_netdev; 1847 goto free_netdev;
@@ -1875,7 +1875,7 @@ static int __devinit be_probe(struct pci_dev *pdev,
1875 if (status != 0) 1875 if (status != 0)
1876 goto stats_clean; 1876 goto stats_clean;
1877 1877
1878 dev_info(&pdev->dev, BE_NAME " port %d\n", adapter->port_num); 1878 dev_info(&pdev->dev, "%s port %d\n", nic_name(pdev), adapter->port_num);
1879 return 0; 1879 return 0;
1880 1880
1881stats_clean: 1881stats_clean:
@@ -1889,7 +1889,7 @@ rel_reg:
1889disable_dev: 1889disable_dev:
1890 pci_disable_device(pdev); 1890 pci_disable_device(pdev);
1891do_none: 1891do_none:
1892 dev_warn(&pdev->dev, BE_NAME " initialization failed\n"); 1892 dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
1893 return status; 1893 return status;
1894} 1894}
1895 1895
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index 06009dc50b19..d4b570886c6e 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -1465,6 +1465,12 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best,
1465 return best; 1465 return best;
1466} 1466}
1467 1467
1468static int agg_device_up(const struct aggregator *agg)
1469{
1470 return (netif_running(agg->slave->dev) &&
1471 netif_carrier_ok(agg->slave->dev));
1472}
1473
1468/** 1474/**
1469 * ad_agg_selection_logic - select an aggregation group for a team 1475 * ad_agg_selection_logic - select an aggregation group for a team
1470 * @aggregator: the aggregator we're looking at 1476 * @aggregator: the aggregator we're looking at
@@ -1496,14 +1502,13 @@ static void ad_agg_selection_logic(struct aggregator *agg)
1496 struct port *port; 1502 struct port *port;
1497 1503
1498 origin = agg; 1504 origin = agg;
1499
1500 active = __get_active_agg(agg); 1505 active = __get_active_agg(agg);
1501 best = active; 1506 best = (active && agg_device_up(active)) ? active : NULL;
1502 1507
1503 do { 1508 do {
1504 agg->is_active = 0; 1509 agg->is_active = 0;
1505 1510
1506 if (agg->num_of_ports) 1511 if (agg->num_of_ports && agg_device_up(agg))
1507 best = ad_agg_selection_test(best, agg); 1512 best = ad_agg_selection_test(best, agg);
1508 1513
1509 } while ((agg = __get_next_agg(agg))); 1514 } while ((agg = __get_next_agg(agg)));
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 30b9ea6d62b0..96d7689995cd 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -5199,7 +5199,6 @@ static int __init bonding_init(void)
5199{ 5199{
5200 int i; 5200 int i;
5201 int res; 5201 int res;
5202 struct bonding *bond;
5203 5202
5204 printk(KERN_INFO "%s", version); 5203 printk(KERN_INFO "%s", version);
5205 5204
@@ -5228,13 +5227,6 @@ static int __init bonding_init(void)
5228 5227
5229 goto out; 5228 goto out;
5230err: 5229err:
5231 list_for_each_entry(bond, &bond_dev_list, bond_list) {
5232 bond_work_cancel_all(bond);
5233 destroy_workqueue(bond->wq);
5234 }
5235
5236 bond_destroy_sysfs();
5237
5238 rtnl_lock(); 5230 rtnl_lock();
5239 bond_free_all(); 5231 bond_free_all();
5240 rtnl_unlock(); 5232 rtnl_unlock();
diff --git a/drivers/net/jme.c b/drivers/net/jme.c
index ece35040288c..621a7c0c46ba 100644
--- a/drivers/net/jme.c
+++ b/drivers/net/jme.c
@@ -2591,13 +2591,13 @@ static int
2591jme_pci_dma64(struct pci_dev *pdev) 2591jme_pci_dma64(struct pci_dev *pdev)
2592{ 2592{
2593 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && 2593 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 &&
2594 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) 2594 !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
2595 if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) 2595 if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
2596 return 1; 2596 return 1;
2597 2597
2598 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && 2598 if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 &&
2599 !pci_set_dma_mask(pdev, DMA_40BIT_MASK)) 2599 !pci_set_dma_mask(pdev, DMA_BIT_MASK(40)))
2600 if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK)) 2600 if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40)))
2601 return 1; 2601 return 1;
2602 2602
2603 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) 2603 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
diff --git a/drivers/net/meth.c b/drivers/net/meth.c
index 46ffdb464ac4..5d04d94f2a21 100644
--- a/drivers/net/meth.c
+++ b/drivers/net/meth.c
@@ -127,11 +127,11 @@ static unsigned long mdio_read(struct meth_private *priv, unsigned long phyreg)
127static int mdio_probe(struct meth_private *priv) 127static int mdio_probe(struct meth_private *priv)
128{ 128{
129 int i; 129 int i;
130 unsigned long p2, p3; 130 unsigned long p2, p3, flags;
131 /* check if phy is detected already */ 131 /* check if phy is detected already */
132 if(priv->phy_addr>=0&&priv->phy_addr<32) 132 if(priv->phy_addr>=0&&priv->phy_addr<32)
133 return 0; 133 return 0;
134 spin_lock(&priv->meth_lock); 134 spin_lock_irqsave(&priv->meth_lock, flags);
135 for (i=0;i<32;++i){ 135 for (i=0;i<32;++i){
136 priv->phy_addr=i; 136 priv->phy_addr=i;
137 p2=mdio_read(priv,2); 137 p2=mdio_read(priv,2);
@@ -157,7 +157,7 @@ static int mdio_probe(struct meth_private *priv)
157 break; 157 break;
158 } 158 }
159 } 159 }
160 spin_unlock(&priv->meth_lock); 160 spin_unlock_irqrestore(&priv->meth_lock, flags);
161 if(priv->phy_addr<32) { 161 if(priv->phy_addr<32) {
162 return 0; 162 return 0;
163 } 163 }
@@ -373,14 +373,14 @@ static int meth_release(struct net_device *dev)
373static void meth_rx(struct net_device* dev, unsigned long int_status) 373static void meth_rx(struct net_device* dev, unsigned long int_status)
374{ 374{
375 struct sk_buff *skb; 375 struct sk_buff *skb;
376 unsigned long status; 376 unsigned long status, flags;
377 struct meth_private *priv = netdev_priv(dev); 377 struct meth_private *priv = netdev_priv(dev);
378 unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8; 378 unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8;
379 379
380 spin_lock(&priv->meth_lock); 380 spin_lock_irqsave(&priv->meth_lock, flags);
381 priv->dma_ctrl &= ~METH_DMA_RX_INT_EN; 381 priv->dma_ctrl &= ~METH_DMA_RX_INT_EN;
382 mace->eth.dma_ctrl = priv->dma_ctrl; 382 mace->eth.dma_ctrl = priv->dma_ctrl;
383 spin_unlock(&priv->meth_lock); 383 spin_unlock_irqrestore(&priv->meth_lock, flags);
384 384
385 if (int_status & METH_INT_RX_UNDERFLOW) { 385 if (int_status & METH_INT_RX_UNDERFLOW) {
386 fifo_rptr = (fifo_rptr - 1) & 0x0f; 386 fifo_rptr = (fifo_rptr - 1) & 0x0f;
@@ -452,12 +452,12 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
452 mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write]; 452 mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
453 ADVANCE_RX_PTR(priv->rx_write); 453 ADVANCE_RX_PTR(priv->rx_write);
454 } 454 }
455 spin_lock(&priv->meth_lock); 455 spin_lock_irqsave(&priv->meth_lock, flags);
456 /* In case there was underflow, and Rx DMA was disabled */ 456 /* In case there was underflow, and Rx DMA was disabled */
457 priv->dma_ctrl |= METH_DMA_RX_INT_EN | METH_DMA_RX_EN; 457 priv->dma_ctrl |= METH_DMA_RX_INT_EN | METH_DMA_RX_EN;
458 mace->eth.dma_ctrl = priv->dma_ctrl; 458 mace->eth.dma_ctrl = priv->dma_ctrl;
459 mace->eth.int_stat = METH_INT_RX_THRESHOLD; 459 mace->eth.int_stat = METH_INT_RX_THRESHOLD;
460 spin_unlock(&priv->meth_lock); 460 spin_unlock_irqrestore(&priv->meth_lock, flags);
461} 461}
462 462
463static int meth_tx_full(struct net_device *dev) 463static int meth_tx_full(struct net_device *dev)
@@ -470,11 +470,11 @@ static int meth_tx_full(struct net_device *dev)
470static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status) 470static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
471{ 471{
472 struct meth_private *priv = netdev_priv(dev); 472 struct meth_private *priv = netdev_priv(dev);
473 unsigned long status; 473 unsigned long status, flags;
474 struct sk_buff *skb; 474 struct sk_buff *skb;
475 unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16; 475 unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16;
476 476
477 spin_lock(&priv->meth_lock); 477 spin_lock_irqsave(&priv->meth_lock, flags);
478 478
479 /* Stop DMA notification */ 479 /* Stop DMA notification */
480 priv->dma_ctrl &= ~(METH_DMA_TX_INT_EN); 480 priv->dma_ctrl &= ~(METH_DMA_TX_INT_EN);
@@ -527,12 +527,13 @@ static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
527 } 527 }
528 528
529 mace->eth.int_stat = METH_INT_TX_EMPTY | METH_INT_TX_PKT; 529 mace->eth.int_stat = METH_INT_TX_EMPTY | METH_INT_TX_PKT;
530 spin_unlock(&priv->meth_lock); 530 spin_unlock_irqrestore(&priv->meth_lock, flags);
531} 531}
532 532
533static void meth_error(struct net_device* dev, unsigned status) 533static void meth_error(struct net_device* dev, unsigned status)
534{ 534{
535 struct meth_private *priv = netdev_priv(dev); 535 struct meth_private *priv = netdev_priv(dev);
536 unsigned long flags;
536 537
537 printk(KERN_WARNING "meth: error status: 0x%08x\n",status); 538 printk(KERN_WARNING "meth: error status: 0x%08x\n",status);
538 /* check for errors too... */ 539 /* check for errors too... */
@@ -547,7 +548,7 @@ static void meth_error(struct net_device* dev, unsigned status)
547 printk(KERN_WARNING "meth: Rx overflow\n"); 548 printk(KERN_WARNING "meth: Rx overflow\n");
548 if (status & (METH_INT_RX_UNDERFLOW)) { 549 if (status & (METH_INT_RX_UNDERFLOW)) {
549 printk(KERN_WARNING "meth: Rx underflow\n"); 550 printk(KERN_WARNING "meth: Rx underflow\n");
550 spin_lock(&priv->meth_lock); 551 spin_lock_irqsave(&priv->meth_lock, flags);
551 mace->eth.int_stat = METH_INT_RX_UNDERFLOW; 552 mace->eth.int_stat = METH_INT_RX_UNDERFLOW;
552 /* more underflow interrupts will be delivered, 553 /* more underflow interrupts will be delivered,
553 * effectively throwing us into an infinite loop. 554 * effectively throwing us into an infinite loop.
@@ -555,7 +556,7 @@ static void meth_error(struct net_device* dev, unsigned status)
555 priv->dma_ctrl &= ~METH_DMA_RX_EN; 556 priv->dma_ctrl &= ~METH_DMA_RX_EN;
556 mace->eth.dma_ctrl = priv->dma_ctrl; 557 mace->eth.dma_ctrl = priv->dma_ctrl;
557 DPRINTK("Disabled meth Rx DMA temporarily\n"); 558 DPRINTK("Disabled meth Rx DMA temporarily\n");
558 spin_unlock(&priv->meth_lock); 559 spin_unlock_irqrestore(&priv->meth_lock, flags);
559 } 560 }
560 mace->eth.int_stat = METH_INT_ERROR; 561 mace->eth.int_stat = METH_INT_ERROR;
561} 562}
diff --git a/drivers/net/mlx4/en_cq.c b/drivers/net/mlx4/en_cq.c
index 91f50de84be9..a276125b709b 100644
--- a/drivers/net/mlx4/en_cq.c
+++ b/drivers/net/mlx4/en_cq.c
@@ -125,8 +125,10 @@ void mlx4_en_deactivate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
125 125
126 if (cq->is_tx) 126 if (cq->is_tx)
127 del_timer(&cq->timer); 127 del_timer(&cq->timer);
128 else 128 else {
129 napi_disable(&cq->napi); 129 napi_disable(&cq->napi);
130 netif_napi_del(&cq->napi);
131 }
130 132
131 mlx4_cq_free(mdev->dev, &cq->mcq); 133 mlx4_cq_free(mdev->dev, &cq->mcq);
132} 134}
diff --git a/drivers/net/mlx4/en_rx.c b/drivers/net/mlx4/en_rx.c
index 7942c4d3cd88..9ee873e872b3 100644
--- a/drivers/net/mlx4/en_rx.c
+++ b/drivers/net/mlx4/en_rx.c
@@ -951,7 +951,6 @@ static int mlx4_en_config_rss_qp(struct mlx4_en_priv *priv,
951 if (err) { 951 if (err) {
952 mlx4_err(mdev, "Failed to allocate qp #%d\n", qpn); 952 mlx4_err(mdev, "Failed to allocate qp #%d\n", qpn);
953 goto out; 953 goto out;
954 return err;
955 } 954 }
956 qp->event = mlx4_en_sqp_event; 955 qp->event = mlx4_en_sqp_event;
957 956
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 102bac90a302..30bea9689694 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
@@ -976,7 +976,7 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
976 nreq = err; 976 nreq = err;
977 goto retry; 977 goto retry;
978 } 978 }
979 979 kfree(entries);
980 goto no_msi; 980 goto no_msi;
981 } 981 }
982 982
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index d5838528791f..1361ddc8d31f 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -571,7 +571,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
571 if (rxq->rx_curr_desc == rxq->rx_ring_size) 571 if (rxq->rx_curr_desc == rxq->rx_ring_size)
572 rxq->rx_curr_desc = 0; 572 rxq->rx_curr_desc = 0;
573 573
574 dma_unmap_single(NULL, rx_desc->buf_ptr, 574 dma_unmap_single(mp->dev->dev.parent, rx_desc->buf_ptr,
575 rx_desc->buf_size, DMA_FROM_DEVICE); 575 rx_desc->buf_size, DMA_FROM_DEVICE);
576 rxq->rx_desc_count--; 576 rxq->rx_desc_count--;
577 rx++; 577 rx++;
@@ -677,8 +677,9 @@ static int rxq_refill(struct rx_queue *rxq, int budget)
677 677
678 rx_desc = rxq->rx_desc_area + rx; 678 rx_desc = rxq->rx_desc_area + rx;
679 679
680 rx_desc->buf_ptr = dma_map_single(NULL, skb->data, 680 rx_desc->buf_ptr = dma_map_single(mp->dev->dev.parent,
681 mp->skb_size, DMA_FROM_DEVICE); 681 skb->data, mp->skb_size,
682 DMA_FROM_DEVICE);
682 rx_desc->buf_size = mp->skb_size; 683 rx_desc->buf_size = mp->skb_size;
683 rxq->rx_skb[rx] = skb; 684 rxq->rx_skb[rx] = skb;
684 wmb(); 685 wmb();
@@ -717,6 +718,7 @@ static inline unsigned int has_tiny_unaligned_frags(struct sk_buff *skb)
717 718
718static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb) 719static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
719{ 720{
721 struct mv643xx_eth_private *mp = txq_to_mp(txq);
720 int nr_frags = skb_shinfo(skb)->nr_frags; 722 int nr_frags = skb_shinfo(skb)->nr_frags;
721 int frag; 723 int frag;
722 724
@@ -745,10 +747,10 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
745 747
746 desc->l4i_chk = 0; 748 desc->l4i_chk = 0;
747 desc->byte_cnt = this_frag->size; 749 desc->byte_cnt = this_frag->size;
748 desc->buf_ptr = dma_map_page(NULL, this_frag->page, 750 desc->buf_ptr = dma_map_page(mp->dev->dev.parent,
749 this_frag->page_offset, 751 this_frag->page,
750 this_frag->size, 752 this_frag->page_offset,
751 DMA_TO_DEVICE); 753 this_frag->size, DMA_TO_DEVICE);
752 } 754 }
753} 755}
754 756
@@ -825,7 +827,8 @@ no_csum:
825 827
826 desc->l4i_chk = l4i_chk; 828 desc->l4i_chk = l4i_chk;
827 desc->byte_cnt = length; 829 desc->byte_cnt = length;
828 desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE); 830 desc->buf_ptr = dma_map_single(mp->dev->dev.parent, skb->data,
831 length, DMA_TO_DEVICE);
829 832
830 __skb_queue_tail(&txq->tx_skb, skb); 833 __skb_queue_tail(&txq->tx_skb, skb);
831 834
@@ -955,10 +958,10 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
955 } 958 }
956 959
957 if (cmd_sts & TX_FIRST_DESC) { 960 if (cmd_sts & TX_FIRST_DESC) {
958 dma_unmap_single(NULL, desc->buf_ptr, 961 dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
959 desc->byte_cnt, DMA_TO_DEVICE); 962 desc->byte_cnt, DMA_TO_DEVICE);
960 } else { 963 } else {
961 dma_unmap_page(NULL, desc->buf_ptr, 964 dma_unmap_page(mp->dev->dev.parent, desc->buf_ptr,
962 desc->byte_cnt, DMA_TO_DEVICE); 965 desc->byte_cnt, DMA_TO_DEVICE);
963 } 966 }
964 967
@@ -1891,9 +1894,9 @@ static int rxq_init(struct mv643xx_eth_private *mp, int index)
1891 mp->rx_desc_sram_size); 1894 mp->rx_desc_sram_size);
1892 rxq->rx_desc_dma = mp->rx_desc_sram_addr; 1895 rxq->rx_desc_dma = mp->rx_desc_sram_addr;
1893 } else { 1896 } else {
1894 rxq->rx_desc_area = dma_alloc_coherent(NULL, size, 1897 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
1895 &rxq->rx_desc_dma, 1898 size, &rxq->rx_desc_dma,
1896 GFP_KERNEL); 1899 GFP_KERNEL);
1897 } 1900 }
1898 1901
1899 if (rxq->rx_desc_area == NULL) { 1902 if (rxq->rx_desc_area == NULL) {
@@ -1944,7 +1947,7 @@ out_free:
1944 if (index == 0 && size <= mp->rx_desc_sram_size) 1947 if (index == 0 && size <= mp->rx_desc_sram_size)
1945 iounmap(rxq->rx_desc_area); 1948 iounmap(rxq->rx_desc_area);
1946 else 1949 else
1947 dma_free_coherent(NULL, size, 1950 dma_free_coherent(mp->dev->dev.parent, size,
1948 rxq->rx_desc_area, 1951 rxq->rx_desc_area,
1949 rxq->rx_desc_dma); 1952 rxq->rx_desc_dma);
1950 1953
@@ -1976,7 +1979,7 @@ static void rxq_deinit(struct rx_queue *rxq)
1976 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) 1979 rxq->rx_desc_area_size <= mp->rx_desc_sram_size)
1977 iounmap(rxq->rx_desc_area); 1980 iounmap(rxq->rx_desc_area);
1978 else 1981 else
1979 dma_free_coherent(NULL, rxq->rx_desc_area_size, 1982 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size,
1980 rxq->rx_desc_area, rxq->rx_desc_dma); 1983 rxq->rx_desc_area, rxq->rx_desc_dma);
1981 1984
1982 kfree(rxq->rx_skb); 1985 kfree(rxq->rx_skb);
@@ -2004,9 +2007,9 @@ static int txq_init(struct mv643xx_eth_private *mp, int index)
2004 mp->tx_desc_sram_size); 2007 mp->tx_desc_sram_size);
2005 txq->tx_desc_dma = mp->tx_desc_sram_addr; 2008 txq->tx_desc_dma = mp->tx_desc_sram_addr;
2006 } else { 2009 } else {
2007 txq->tx_desc_area = dma_alloc_coherent(NULL, size, 2010 txq->tx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
2008 &txq->tx_desc_dma, 2011 size, &txq->tx_desc_dma,
2009 GFP_KERNEL); 2012 GFP_KERNEL);
2010 } 2013 }
2011 2014
2012 if (txq->tx_desc_area == NULL) { 2015 if (txq->tx_desc_area == NULL) {
@@ -2050,7 +2053,7 @@ static void txq_deinit(struct tx_queue *txq)
2050 txq->tx_desc_area_size <= mp->tx_desc_sram_size) 2053 txq->tx_desc_area_size <= mp->tx_desc_sram_size)
2051 iounmap(txq->tx_desc_area); 2054 iounmap(txq->tx_desc_area);
2052 else 2055 else
2053 dma_free_coherent(NULL, txq->tx_desc_area_size, 2056 dma_free_coherent(mp->dev->dev.parent, txq->tx_desc_area_size,
2054 txq->tx_desc_area, txq->tx_desc_dma); 2057 txq->tx_desc_area, txq->tx_desc_dma);
2055} 2058}
2056 2059
diff --git a/drivers/net/vxge/vxge-traffic.c b/drivers/net/vxge/vxge-traffic.c
index 506625b180ac..370f55cbbad7 100644
--- a/drivers/net/vxge/vxge-traffic.c
+++ b/drivers/net/vxge/vxge-traffic.c
@@ -115,7 +115,7 @@ enum vxge_hw_status vxge_hw_vpath_intr_enable(struct __vxge_hw_vpath_handle *vp)
115 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_POISON| 115 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_POISON|
116 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_POISON| 116 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_POISON|
117 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR| 117 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR|
118 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR), 0, 32), 118 VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_DMA_ERR), 0, 32),
119 &vp_reg->kdfcctl_errors_mask); 119 &vp_reg->kdfcctl_errors_mask);
120 120
121 __vxge_hw_pio_mem_write32_upper(0, &vp_reg->vpath_ppif_int_mask); 121 __vxge_hw_pio_mem_write32_upper(0, &vp_reg->vpath_ppif_int_mask);
diff --git a/drivers/net/wan/ixp4xx_hss.c b/drivers/net/wan/ixp4xx_hss.c
index 3bf7d3f447db..765a7f5d6aa4 100644
--- a/drivers/net/wan/ixp4xx_hss.c
+++ b/drivers/net/wan/ixp4xx_hss.c
@@ -1249,7 +1249,7 @@ static int __devinit hss_init_one(struct platform_device *pdev)
1249 return -ENOMEM; 1249 return -ENOMEM;
1250 1250
1251 if ((port->npe = npe_request(0)) == NULL) { 1251 if ((port->npe = npe_request(0)) == NULL) {
1252 err = -ENOSYS; 1252 err = -ENODEV;
1253 goto err_free; 1253 goto err_free;
1254 } 1254 }
1255 1255
@@ -1311,7 +1311,7 @@ static int __init hss_init_module(void)
1311 if ((ixp4xx_read_feature_bits() & 1311 if ((ixp4xx_read_feature_bits() &
1312 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) != 1312 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) !=
1313 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) 1313 (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS))
1314 return -ENOSYS; 1314 return -ENODEV;
1315 1315
1316 spin_lock_init(&npe_lock); 1316 spin_lock_init(&npe_lock);
1317 1317
diff --git a/drivers/net/wimax/i2400m/rx.c b/drivers/net/wimax/i2400m/rx.c
index 02419bfd64b5..f9fc38902322 100644
--- a/drivers/net/wimax/i2400m/rx.c
+++ b/drivers/net/wimax/i2400m/rx.c
@@ -819,10 +819,9 @@ void i2400m_roq_queue_update_ws(struct i2400m *i2400m, struct i2400m_roq *roq,
819 roq_data = (struct i2400m_roq_data *) &skb->cb; 819 roq_data = (struct i2400m_roq_data *) &skb->cb;
820 i2400m_net_erx(i2400m, skb, roq_data->cs); 820 i2400m_net_erx(i2400m, skb, roq_data->cs);
821 } 821 }
822 else { 822 else
823 __i2400m_roq_queue(i2400m, roq, skb, sn, nsn); 823 __i2400m_roq_queue(i2400m, roq, skb, sn, nsn);
824 __i2400m_roq_update_ws(i2400m, roq, sn + 1); 824 __i2400m_roq_update_ws(i2400m, roq, sn + 1);
825 }
826 i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS, 825 i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS,
827 old_ws, len, sn, nsn, roq->ws); 826 old_ws, len, sn, nsn, roq->ws);
828 } 827 }
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index c36d3a3d655f..d73475739127 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -6501,7 +6501,10 @@ static int airo_get_encode(struct net_device *dev,
6501 6501
6502 /* Copy the key to the user buffer */ 6502 /* Copy the key to the user buffer */
6503 dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf)); 6503 dwrq->length = get_wep_key(local, index, &buf[0], sizeof(buf));
6504 memcpy(extra, buf, dwrq->length); 6504 if (dwrq->length != -1)
6505 memcpy(extra, buf, dwrq->length);
6506 else
6507 dwrq->length = 0;
6505 6508
6506 return 0; 6509 return 0;
6507} 6510}
@@ -6659,7 +6662,10 @@ static int airo_get_encodeext(struct net_device *dev,
6659 6662
6660 /* Copy the key to the user buffer */ 6663 /* Copy the key to the user buffer */
6661 ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf)); 6664 ext->key_len = get_wep_key(local, idx, &buf[0], sizeof(buf));
6662 memcpy(extra, buf, ext->key_len); 6665 if (ext->key_len != -1)
6666 memcpy(extra, buf, ext->key_len);
6667 else
6668 ext->key_len = 0;
6663 6669
6664 return 0; 6670 return 0;
6665} 6671}
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 6789c5dfcc76..dbfe9f45050e 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -218,7 +218,7 @@ static struct pci_driver ath5k_pci_driver = {
218 * Prototypes - MAC 802.11 stack related functions 218 * Prototypes - MAC 802.11 stack related functions
219 */ 219 */
220static int ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb); 220static int ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
221static int ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel); 221static int ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan);
222static int ath5k_reset_wake(struct ath5k_softc *sc); 222static int ath5k_reset_wake(struct ath5k_softc *sc);
223static int ath5k_start(struct ieee80211_hw *hw); 223static int ath5k_start(struct ieee80211_hw *hw);
224static void ath5k_stop(struct ieee80211_hw *hw); 224static void ath5k_stop(struct ieee80211_hw *hw);
@@ -1076,16 +1076,13 @@ ath5k_chan_set(struct ath5k_softc *sc, struct ieee80211_channel *chan)
1076 if (chan->center_freq != sc->curchan->center_freq || 1076 if (chan->center_freq != sc->curchan->center_freq ||
1077 chan->hw_value != sc->curchan->hw_value) { 1077 chan->hw_value != sc->curchan->hw_value) {
1078 1078
1079 sc->curchan = chan;
1080 sc->curband = &sc->sbands[chan->band];
1081
1082 /* 1079 /*
1083 * To switch channels clear any pending DMA operations; 1080 * To switch channels clear any pending DMA operations;
1084 * wait long enough for the RX fifo to drain, reset the 1081 * wait long enough for the RX fifo to drain, reset the
1085 * hardware at the new frequency, and then re-enable 1082 * hardware at the new frequency, and then re-enable
1086 * the relevant bits of the h/w. 1083 * the relevant bits of the h/w.
1087 */ 1084 */
1088 return ath5k_reset(sc, true, true); 1085 return ath5k_reset(sc, chan);
1089 } 1086 }
1090 1087
1091 return 0; 1088 return 0;
@@ -2350,7 +2347,7 @@ ath5k_init(struct ath5k_softc *sc)
2350 sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL | 2347 sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL |
2351 AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL | 2348 AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL |
2352 AR5K_INT_FATAL | AR5K_INT_GLOBAL; 2349 AR5K_INT_FATAL | AR5K_INT_GLOBAL;
2353 ret = ath5k_reset(sc, false, false); 2350 ret = ath5k_reset(sc, NULL);
2354 if (ret) 2351 if (ret)
2355 goto done; 2352 goto done;
2356 2353
@@ -2635,18 +2632,25 @@ drop_packet:
2635 return NETDEV_TX_OK; 2632 return NETDEV_TX_OK;
2636} 2633}
2637 2634
2635/*
2636 * Reset the hardware. If chan is not NULL, then also pause rx/tx
2637 * and change to the given channel.
2638 */
2638static int 2639static int
2639ath5k_reset(struct ath5k_softc *sc, bool stop, bool change_channel) 2640ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)
2640{ 2641{
2641 struct ath5k_hw *ah = sc->ah; 2642 struct ath5k_hw *ah = sc->ah;
2642 int ret; 2643 int ret;
2643 2644
2644 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n"); 2645 ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
2645 2646
2646 if (stop) { 2647 if (chan) {
2647 ath5k_hw_set_imr(ah, 0); 2648 ath5k_hw_set_imr(ah, 0);
2648 ath5k_txq_cleanup(sc); 2649 ath5k_txq_cleanup(sc);
2649 ath5k_rx_stop(sc); 2650 ath5k_rx_stop(sc);
2651
2652 sc->curchan = chan;
2653 sc->curband = &sc->sbands[chan->band];
2650 } 2654 }
2651 ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true); 2655 ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, true);
2652 if (ret) { 2656 if (ret) {
@@ -2684,7 +2688,7 @@ ath5k_reset_wake(struct ath5k_softc *sc)
2684{ 2688{
2685 int ret; 2689 int ret;
2686 2690
2687 ret = ath5k_reset(sc, true, true); 2691 ret = ath5k_reset(sc, sc->curchan);
2688 if (!ret) 2692 if (!ret)
2689 ieee80211_wake_queues(sc->hw); 2693 ieee80211_wake_queues(sc->hw);
2690 2694
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
index 6dbc58580abb..168411d322a2 100644
--- a/drivers/net/wireless/ath/ath9k/pci.c
+++ b/drivers/net/wireless/ath/ath9k/pci.c
@@ -93,14 +93,14 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
93 if (pci_enable_device(pdev)) 93 if (pci_enable_device(pdev))
94 return -EIO; 94 return -EIO;
95 95
96 ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); 96 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
97 97
98 if (ret) { 98 if (ret) {
99 printk(KERN_ERR "ath9k: 32-bit DMA not available\n"); 99 printk(KERN_ERR "ath9k: 32-bit DMA not available\n");
100 goto bad; 100 goto bad;
101 } 101 }
102 102
103 ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); 103 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
104 104
105 if (ret) { 105 if (ret) {
106 printk(KERN_ERR "ath9k: 32-bit DMA consistent " 106 printk(KERN_ERR "ath9k: 32-bit DMA consistent "
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index ee271d7f6120..7236382aeaa6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -102,8 +102,8 @@ struct iwl_cfg iwl6000_2agn_cfg = {
102 .eeprom_ver = EEPROM_5000_EEPROM_VERSION, 102 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
103 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION, 103 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
104 .mod_params = &iwl50_mod_params, 104 .mod_params = &iwl50_mod_params,
105 .valid_tx_ant = ANT_BC, 105 .valid_tx_ant = ANT_AB,
106 .valid_rx_ant = ANT_BC, 106 .valid_rx_ant = ANT_AB,
107 .need_pll_cfg = false, 107 .need_pll_cfg = false,
108}; 108};
109 109
@@ -118,8 +118,8 @@ struct iwl_cfg iwl6050_2agn_cfg = {
118 .eeprom_ver = EEPROM_5000_EEPROM_VERSION, 118 .eeprom_ver = EEPROM_5000_EEPROM_VERSION,
119 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION, 119 .eeprom_calib_ver = EEPROM_5000_TX_POWER_VERSION,
120 .mod_params = &iwl50_mod_params, 120 .mod_params = &iwl50_mod_params,
121 .valid_tx_ant = ANT_BC, 121 .valid_tx_ant = ANT_AB,
122 .valid_rx_ant = ANT_BC, 122 .valid_rx_ant = ANT_AB,
123 .need_pll_cfg = false, 123 .need_pll_cfg = false,
124}; 124};
125 125
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 3ebf6cf53a51..596977d71c94 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2944,7 +2944,9 @@ static struct pci_device_id iwl_hw_card_ids[] = {
2944 {IWL_PCI_DEVICE(0x0085, 0x1112, iwl6000_2ag_cfg)}, 2944 {IWL_PCI_DEVICE(0x0085, 0x1112, iwl6000_2ag_cfg)},
2945 {IWL_PCI_DEVICE(0x0082, 0x1122, iwl6000_2ag_cfg)}, 2945 {IWL_PCI_DEVICE(0x0082, 0x1122, iwl6000_2ag_cfg)},
2946 {IWL_PCI_DEVICE(0x422B, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2946 {IWL_PCI_DEVICE(0x422B, PCI_ANY_ID, iwl6000_3agn_cfg)},
2947 {IWL_PCI_DEVICE(0x422C, PCI_ANY_ID, iwl6000_2agn_cfg)},
2947 {IWL_PCI_DEVICE(0x4238, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2948 {IWL_PCI_DEVICE(0x4238, PCI_ANY_ID, iwl6000_3agn_cfg)},
2949 {IWL_PCI_DEVICE(0x4239, PCI_ANY_ID, iwl6000_2agn_cfg)},
2948 {IWL_PCI_DEVICE(0x0082, PCI_ANY_ID, iwl6000_2agn_cfg)}, 2950 {IWL_PCI_DEVICE(0x0082, PCI_ANY_ID, iwl6000_2agn_cfg)},
2949 {IWL_PCI_DEVICE(0x0085, PCI_ANY_ID, iwl6000_3agn_cfg)}, 2951 {IWL_PCI_DEVICE(0x0085, PCI_ANY_ID, iwl6000_3agn_cfg)},
2950 {IWL_PCI_DEVICE(0x0086, PCI_ANY_ID, iwl6050_3agn_cfg)}, 2952 {IWL_PCI_DEVICE(0x0086, PCI_ANY_ID, iwl6050_3agn_cfg)},
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
index e3569a0a952d..b1610ea4bb3d 100644
--- a/drivers/net/wireless/p54/p54pci.c
+++ b/drivers/net/wireless/p54/p54pci.c
@@ -492,8 +492,8 @@ static int __devinit p54p_probe(struct pci_dev *pdev,
492 goto err_disable_dev; 492 goto err_disable_dev;
493 } 493 }
494 494
495 if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || 495 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) ||
496 pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { 496 pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
497 dev_err(&pdev->dev, "No suitable DMA available\n"); 497 dev_err(&pdev->dev, "No suitable DMA available\n");
498 goto err_free_reg; 498 goto err_free_reg;
499 } 499 }
diff --git a/drivers/net/wireless/rtl818x/rtl8187.h b/drivers/net/wireless/rtl818x/rtl8187.h
index 622196dc078e..c09bfefc70f3 100644
--- a/drivers/net/wireless/rtl818x/rtl8187.h
+++ b/drivers/net/wireless/rtl818x/rtl8187.h
@@ -127,6 +127,12 @@ struct rtl8187_priv {
127 __le64 buf; 127 __le64 buf;
128 struct sk_buff_head queue; 128 struct sk_buff_head queue;
129 } b_tx_status; /* This queue is used by both -b and non-b devices */ 129 } b_tx_status; /* This queue is used by both -b and non-b devices */
130 struct mutex io_mutex;
131 union {
132 u8 bits8;
133 __le16 bits16;
134 __le32 bits32;
135 } *io_dmabuf;
130}; 136};
131 137
132void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data); 138void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data);
@@ -136,10 +142,14 @@ static inline u8 rtl818x_ioread8_idx(struct rtl8187_priv *priv,
136{ 142{
137 u8 val; 143 u8 val;
138 144
145 mutex_lock(&priv->io_mutex);
139 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 146 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
140 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 147 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
141 (unsigned long)addr, idx & 0x03, &val, 148 (unsigned long)addr, idx & 0x03,
142 sizeof(val), HZ / 2); 149 &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
150
151 val = priv->io_dmabuf->bits8;
152 mutex_unlock(&priv->io_mutex);
143 153
144 return val; 154 return val;
145} 155}
@@ -154,10 +164,14 @@ static inline u16 rtl818x_ioread16_idx(struct rtl8187_priv *priv,
154{ 164{
155 __le16 val; 165 __le16 val;
156 166
167 mutex_lock(&priv->io_mutex);
157 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 168 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
158 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 169 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
159 (unsigned long)addr, idx & 0x03, &val, 170 (unsigned long)addr, idx & 0x03,
160 sizeof(val), HZ / 2); 171 &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
172
173 val = priv->io_dmabuf->bits16;
174 mutex_unlock(&priv->io_mutex);
161 175
162 return le16_to_cpu(val); 176 return le16_to_cpu(val);
163} 177}
@@ -172,10 +186,14 @@ static inline u32 rtl818x_ioread32_idx(struct rtl8187_priv *priv,
172{ 186{
173 __le32 val; 187 __le32 val;
174 188
189 mutex_lock(&priv->io_mutex);
175 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0), 190 usb_control_msg(priv->udev, usb_rcvctrlpipe(priv->udev, 0),
176 RTL8187_REQ_GET_REG, RTL8187_REQT_READ, 191 RTL8187_REQ_GET_REG, RTL8187_REQT_READ,
177 (unsigned long)addr, idx & 0x03, &val, 192 (unsigned long)addr, idx & 0x03,
178 sizeof(val), HZ / 2); 193 &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
194
195 val = priv->io_dmabuf->bits32;
196 mutex_unlock(&priv->io_mutex);
179 197
180 return le32_to_cpu(val); 198 return le32_to_cpu(val);
181} 199}
@@ -188,10 +206,15 @@ static inline u32 rtl818x_ioread32(struct rtl8187_priv *priv, __le32 *addr)
188static inline void rtl818x_iowrite8_idx(struct rtl8187_priv *priv, 206static inline void rtl818x_iowrite8_idx(struct rtl8187_priv *priv,
189 u8 *addr, u8 val, u8 idx) 207 u8 *addr, u8 val, u8 idx)
190{ 208{
209 mutex_lock(&priv->io_mutex);
210
211 priv->io_dmabuf->bits8 = val;
191 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 212 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
192 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 213 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
193 (unsigned long)addr, idx & 0x03, &val, 214 (unsigned long)addr, idx & 0x03,
194 sizeof(val), HZ / 2); 215 &priv->io_dmabuf->bits8, sizeof(val), HZ / 2);
216
217 mutex_unlock(&priv->io_mutex);
195} 218}
196 219
197static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val) 220static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val)
@@ -202,12 +225,15 @@ static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val)
202static inline void rtl818x_iowrite16_idx(struct rtl8187_priv *priv, 225static inline void rtl818x_iowrite16_idx(struct rtl8187_priv *priv,
203 __le16 *addr, u16 val, u8 idx) 226 __le16 *addr, u16 val, u8 idx)
204{ 227{
205 __le16 buf = cpu_to_le16(val); 228 mutex_lock(&priv->io_mutex);
206 229
230 priv->io_dmabuf->bits16 = cpu_to_le16(val);
207 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 231 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
208 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 232 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
209 (unsigned long)addr, idx & 0x03, &buf, sizeof(buf), 233 (unsigned long)addr, idx & 0x03,
210 HZ / 2); 234 &priv->io_dmabuf->bits16, sizeof(val), HZ / 2);
235
236 mutex_unlock(&priv->io_mutex);
211} 237}
212 238
213static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr, 239static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr,
@@ -219,12 +245,15 @@ static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr,
219static inline void rtl818x_iowrite32_idx(struct rtl8187_priv *priv, 245static inline void rtl818x_iowrite32_idx(struct rtl8187_priv *priv,
220 __le32 *addr, u32 val, u8 idx) 246 __le32 *addr, u32 val, u8 idx)
221{ 247{
222 __le32 buf = cpu_to_le32(val); 248 mutex_lock(&priv->io_mutex);
223 249
250 priv->io_dmabuf->bits32 = cpu_to_le32(val);
224 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 251 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
225 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 252 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
226 (unsigned long)addr, idx & 0x03, &buf, sizeof(buf), 253 (unsigned long)addr, idx & 0x03,
227 HZ / 2); 254 &priv->io_dmabuf->bits32, sizeof(val), HZ / 2);
255
256 mutex_unlock(&priv->io_mutex);
228} 257}
229 258
230static inline void rtl818x_iowrite32(struct rtl8187_priv *priv, __le32 *addr, 259static inline void rtl818x_iowrite32(struct rtl8187_priv *priv, __le32 *addr,
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c
index 158827e50c55..6499ccc34c94 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
@@ -1326,6 +1326,14 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1326 priv = dev->priv; 1326 priv = dev->priv;
1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); 1327 priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B);
1328 1328
1329 /* allocate "DMA aware" buffer for register accesses */
1330 priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL);
1331 if (!priv->io_dmabuf) {
1332 err = -ENOMEM;
1333 goto err_free_dev;
1334 }
1335 mutex_init(&priv->io_mutex);
1336
1329 SET_IEEE80211_DEV(dev, &intf->dev); 1337 SET_IEEE80211_DEV(dev, &intf->dev);
1330 usb_set_intfdata(intf, dev); 1338 usb_set_intfdata(intf, dev);
1331 priv->udev = udev; 1339 priv->udev = udev;
@@ -1489,7 +1497,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1489 err = ieee80211_register_hw(dev); 1497 err = ieee80211_register_hw(dev);
1490 if (err) { 1498 if (err) {
1491 printk(KERN_ERR "rtl8187: Cannot register device\n"); 1499 printk(KERN_ERR "rtl8187: Cannot register device\n");
1492 goto err_free_dev; 1500 goto err_free_dmabuf;
1493 } 1501 }
1494 mutex_init(&priv->conf_mutex); 1502 mutex_init(&priv->conf_mutex);
1495 skb_queue_head_init(&priv->b_tx_status.queue); 1503 skb_queue_head_init(&priv->b_tx_status.queue);
@@ -1506,6 +1514,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,
1506 1514
1507 return 0; 1515 return 0;
1508 1516
1517 err_free_dmabuf:
1518 kfree(priv->io_dmabuf);
1509 err_free_dev: 1519 err_free_dev:
1510 ieee80211_free_hw(dev); 1520 ieee80211_free_hw(dev);
1511 usb_set_intfdata(intf, NULL); 1521 usb_set_intfdata(intf, NULL);
@@ -1529,6 +1539,7 @@ static void __devexit rtl8187_disconnect(struct usb_interface *intf)
1529 priv = dev->priv; 1539 priv = dev->priv;
1530 usb_reset_device(priv->udev); 1540 usb_reset_device(priv->udev);
1531 usb_put_dev(interface_to_usbdev(intf)); 1541 usb_put_dev(interface_to_usbdev(intf));
1542 kfree(priv->io_dmabuf);
1532 ieee80211_free_hw(dev); 1543 ieee80211_free_hw(dev);
1533} 1544}
1534 1545
diff --git a/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c b/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
index 78df281b297a..a09819386a1e 100644
--- a/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
+++ b/drivers/net/wireless/rtl818x/rtl8187_rtl8225.c
@@ -88,9 +88,15 @@ static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data)
88 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80); 88 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80);
89 udelay(10); 89 udelay(10);
90 90
91 mutex_lock(&priv->io_mutex);
92
93 priv->io_dmabuf->bits16 = data;
91 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0), 94 usb_control_msg(priv->udev, usb_sndctrlpipe(priv->udev, 0),
92 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE, 95 RTL8187_REQ_SET_REG, RTL8187_REQT_WRITE,
93 addr, 0x8225, &data, sizeof(data), HZ / 2); 96 addr, 0x8225, &priv->io_dmabuf->bits16, sizeof(data),
97 HZ / 2);
98
99 mutex_unlock(&priv->io_mutex);
94 100
95 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80 | (1 << 2)); 101 rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, reg80 | (1 << 2));
96 udelay(10); 102 udelay(10);