diff options
author | David S. Miller <davem@davemloft.net> | 2009-03-23 16:35:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-23 16:35:04 -0400 |
commit | 8be7cdccacfbfc707e7370cad9bb168defed636f (patch) | |
tree | 8416607b62ec352176c81afd6f4e7b571ceb957f | |
parent | ecd4137320b59759bbe57eef89040ee3e5e66039 (diff) | |
parent | 61fa9dcf9329cb92c220f7b656410fbe5e72f933 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/ucc_geth.c
-rw-r--r-- | drivers/dca/dca-sysfs.c | 21 | ||||
-rw-r--r-- | drivers/net/Kconfig | 2 | ||||
-rw-r--r-- | drivers/net/benet/be.h | 1 | ||||
-rw-r--r-- | drivers/net/benet/be_main.c | 60 | ||||
-rw-r--r-- | drivers/net/dm9000.c | 6 | ||||
-rw-r--r-- | drivers/net/dnet.c | 6 | ||||
-rw-r--r-- | drivers/net/sungem.c | 9 | ||||
-rw-r--r-- | drivers/net/ucc_geth.c | 36 | ||||
-rw-r--r-- | drivers/net/ucc_geth.h | 3 | ||||
-rw-r--r-- | include/linux/dca.h | 20 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 11 |
11 files changed, 113 insertions, 62 deletions
diff --git a/drivers/dca/dca-sysfs.c b/drivers/dca/dca-sysfs.c index bb538b9690e0..ee916c9857ee 100644 --- a/drivers/dca/dca-sysfs.c +++ b/drivers/dca/dca-sysfs.c | |||
@@ -1,3 +1,24 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the Free | ||
6 | * Software Foundation; either version 2 of the License, or (at your option) | ||
7 | * any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
16 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in the | ||
19 | * file called COPYING. | ||
20 | */ | ||
21 | |||
1 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
2 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
3 | #include <linux/device.h> | 24 | #include <linux/device.h> |
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 533cc411ee48..e5ffc1c606c1 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -1051,7 +1051,7 @@ config NI65 | |||
1051 | 1051 | ||
1052 | config DNET | 1052 | config DNET |
1053 | tristate "Dave ethernet support (DNET)" | 1053 | tristate "Dave ethernet support (DNET)" |
1054 | depends on NET_ETHERNET | 1054 | depends on NET_ETHERNET && HAS_IOMEM |
1055 | select PHYLIB | 1055 | select PHYLIB |
1056 | help | 1056 | help |
1057 | The Dave ethernet interface (DNET) is found on Qong Board FPGA. | 1057 | The Dave ethernet interface (DNET) is found on Qong Board FPGA. |
diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h index 63d593d53153..f327be57ca96 100644 --- a/drivers/net/benet/be.h +++ b/drivers/net/benet/be.h | |||
@@ -194,6 +194,7 @@ struct be_adapter { | |||
194 | struct be_eq_obj rx_eq; | 194 | struct be_eq_obj rx_eq; |
195 | struct be_rx_obj rx_obj; | 195 | struct be_rx_obj rx_obj; |
196 | u32 big_page_size; /* Compounded page size shared by rx wrbs */ | 196 | u32 big_page_size; /* Compounded page size shared by rx wrbs */ |
197 | bool rx_post_starved; /* Zero rx frags have been posted to BE */ | ||
197 | 198 | ||
198 | struct vlan_group *vlan_grp; | 199 | struct vlan_group *vlan_grp; |
199 | u16 num_vlans; | 200 | u16 num_vlans; |
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index 897a63de5bdb..0ecaffb70e58 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c | |||
@@ -273,26 +273,6 @@ static void be_rx_eqd_update(struct be_adapter *adapter) | |||
273 | rx_eq->cur_eqd = eqd; | 273 | rx_eq->cur_eqd = eqd; |
274 | } | 274 | } |
275 | 275 | ||
276 | static void be_worker(struct work_struct *work) | ||
277 | { | ||
278 | struct be_adapter *adapter = | ||
279 | container_of(work, struct be_adapter, work.work); | ||
280 | int status; | ||
281 | |||
282 | /* Check link */ | ||
283 | be_link_status_update(adapter); | ||
284 | |||
285 | /* Get Stats */ | ||
286 | status = be_cmd_get_stats(&adapter->ctrl, &adapter->stats.cmd); | ||
287 | if (!status) | ||
288 | netdev_stats_update(adapter); | ||
289 | |||
290 | /* Set EQ delay */ | ||
291 | be_rx_eqd_update(adapter); | ||
292 | |||
293 | schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000)); | ||
294 | } | ||
295 | |||
296 | static struct net_device_stats *be_get_stats(struct net_device *dev) | 276 | static struct net_device_stats *be_get_stats(struct net_device *dev) |
297 | { | 277 | { |
298 | struct be_adapter *adapter = netdev_priv(dev); | 278 | struct be_adapter *adapter = netdev_priv(dev); |
@@ -493,7 +473,7 @@ static int be_change_mtu(struct net_device *netdev, int new_mtu) | |||
493 | * program them in BE. If more than BE_NUM_VLANS_SUPPORTED are configured, | 473 | * program them in BE. If more than BE_NUM_VLANS_SUPPORTED are configured, |
494 | * set the BE in promiscuous VLAN mode. | 474 | * set the BE in promiscuous VLAN mode. |
495 | */ | 475 | */ |
496 | static void be_vids_config(struct net_device *netdev) | 476 | static void be_vid_config(struct net_device *netdev) |
497 | { | 477 | { |
498 | struct be_adapter *adapter = netdev_priv(netdev); | 478 | struct be_adapter *adapter = netdev_priv(netdev); |
499 | u16 vtag[BE_NUM_VLANS_SUPPORTED]; | 479 | u16 vtag[BE_NUM_VLANS_SUPPORTED]; |
@@ -536,7 +516,7 @@ static void be_vlan_add_vid(struct net_device *netdev, u16 vid) | |||
536 | adapter->num_vlans++; | 516 | adapter->num_vlans++; |
537 | adapter->vlan_tag[vid] = 1; | 517 | adapter->vlan_tag[vid] = 1; |
538 | 518 | ||
539 | be_vids_config(netdev); | 519 | be_vid_config(netdev); |
540 | } | 520 | } |
541 | 521 | ||
542 | static void be_vlan_rem_vid(struct net_device *netdev, u16 vid) | 522 | static void be_vlan_rem_vid(struct net_device *netdev, u16 vid) |
@@ -547,7 +527,7 @@ static void be_vlan_rem_vid(struct net_device *netdev, u16 vid) | |||
547 | adapter->vlan_tag[vid] = 0; | 527 | adapter->vlan_tag[vid] = 0; |
548 | 528 | ||
549 | vlan_group_set_device(adapter->vlan_grp, vid, NULL); | 529 | vlan_group_set_device(adapter->vlan_grp, vid, NULL); |
550 | be_vids_config(netdev); | 530 | be_vid_config(netdev); |
551 | } | 531 | } |
552 | 532 | ||
553 | static void be_set_multicast_filter(struct net_device *netdev) | 533 | static void be_set_multicast_filter(struct net_device *netdev) |
@@ -900,8 +880,11 @@ static void be_post_rx_frags(struct be_adapter *adapter) | |||
900 | page_info->last_page_user = true; | 880 | page_info->last_page_user = true; |
901 | 881 | ||
902 | if (posted) { | 882 | if (posted) { |
903 | be_rxq_notify(&adapter->ctrl, rxq->id, posted); | ||
904 | atomic_add(posted, &rxq->used); | 883 | atomic_add(posted, &rxq->used); |
884 | be_rxq_notify(&adapter->ctrl, rxq->id, posted); | ||
885 | } else if (atomic_read(&rxq->used) == 0) { | ||
886 | /* Let be_worker replenish when memory is available */ | ||
887 | adapter->rx_post_starved = true; | ||
905 | } | 888 | } |
906 | 889 | ||
907 | return; | 890 | return; |
@@ -1305,6 +1288,31 @@ int be_poll_tx(struct napi_struct *napi, int budget) | |||
1305 | return 1; | 1288 | return 1; |
1306 | } | 1289 | } |
1307 | 1290 | ||
1291 | static void be_worker(struct work_struct *work) | ||
1292 | { | ||
1293 | struct be_adapter *adapter = | ||
1294 | container_of(work, struct be_adapter, work.work); | ||
1295 | int status; | ||
1296 | |||
1297 | /* Check link */ | ||
1298 | be_link_status_update(adapter); | ||
1299 | |||
1300 | /* Get Stats */ | ||
1301 | status = be_cmd_get_stats(&adapter->ctrl, &adapter->stats.cmd); | ||
1302 | if (!status) | ||
1303 | netdev_stats_update(adapter); | ||
1304 | |||
1305 | /* Set EQ delay */ | ||
1306 | be_rx_eqd_update(adapter); | ||
1307 | |||
1308 | if (adapter->rx_post_starved) { | ||
1309 | adapter->rx_post_starved = false; | ||
1310 | be_post_rx_frags(adapter); | ||
1311 | } | ||
1312 | |||
1313 | schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000)); | ||
1314 | } | ||
1315 | |||
1308 | static void be_msix_enable(struct be_adapter *adapter) | 1316 | static void be_msix_enable(struct be_adapter *adapter) |
1309 | { | 1317 | { |
1310 | int i, status; | 1318 | int i, status; |
@@ -1422,6 +1430,8 @@ static int be_open(struct net_device *netdev) | |||
1422 | if (status != 0) | 1430 | if (status != 0) |
1423 | goto do_none; | 1431 | goto do_none; |
1424 | 1432 | ||
1433 | be_vid_config(netdev); | ||
1434 | |||
1425 | status = be_cmd_set_flow_control(ctrl, true, true); | 1435 | status = be_cmd_set_flow_control(ctrl, true, true); |
1426 | if (status != 0) | 1436 | if (status != 0) |
1427 | goto if_destroy; | 1437 | goto if_destroy; |
@@ -1856,8 +1866,6 @@ static int be_resume(struct pci_dev *pdev) | |||
1856 | pci_set_power_state(pdev, 0); | 1866 | pci_set_power_state(pdev, 0); |
1857 | pci_restore_state(pdev); | 1867 | pci_restore_state(pdev); |
1858 | 1868 | ||
1859 | be_vids_config(netdev); | ||
1860 | |||
1861 | if (netif_running(netdev)) { | 1869 | if (netif_running(netdev)) { |
1862 | rtnl_lock(); | 1870 | rtnl_lock(); |
1863 | be_open(netdev); | 1871 | be_open(netdev); |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index bcf92917bbf3..254ec62b5f58 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
@@ -930,13 +930,15 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) | |||
930 | struct net_device *dev = dev_id; | 930 | struct net_device *dev = dev_id; |
931 | board_info_t *db = netdev_priv(dev); | 931 | board_info_t *db = netdev_priv(dev); |
932 | int int_status; | 932 | int int_status; |
933 | unsigned long flags; | ||
933 | u8 reg_save; | 934 | u8 reg_save; |
934 | 935 | ||
935 | dm9000_dbg(db, 3, "entering %s\n", __func__); | 936 | dm9000_dbg(db, 3, "entering %s\n", __func__); |
936 | 937 | ||
937 | /* A real interrupt coming */ | 938 | /* A real interrupt coming */ |
938 | 939 | ||
939 | spin_lock(&db->lock); | 940 | /* holders of db->lock must always block IRQs */ |
941 | spin_lock_irqsave(&db->lock, flags); | ||
940 | 942 | ||
941 | /* Save previous register address */ | 943 | /* Save previous register address */ |
942 | reg_save = readb(db->io_addr); | 944 | reg_save = readb(db->io_addr); |
@@ -972,7 +974,7 @@ static irqreturn_t dm9000_interrupt(int irq, void *dev_id) | |||
972 | /* Restore previous register address */ | 974 | /* Restore previous register address */ |
973 | writeb(reg_save, db->io_addr); | 975 | writeb(reg_save, db->io_addr); |
974 | 976 | ||
975 | spin_unlock(&db->lock); | 977 | spin_unlock_irqrestore(&db->lock, flags); |
976 | 978 | ||
977 | return IRQ_HANDLED; | 979 | return IRQ_HANDLED; |
978 | } | 980 | } |
diff --git a/drivers/net/dnet.c b/drivers/net/dnet.c index 8a98d407692b..c05c2d69fbf6 100644 --- a/drivers/net/dnet.c +++ b/drivers/net/dnet.c | |||
@@ -279,11 +279,11 @@ static int dnet_mii_probe(struct net_device *dev) | |||
279 | 279 | ||
280 | /* attach the mac to the phy */ | 280 | /* attach the mac to the phy */ |
281 | if (bp->capabilities & DNET_HAS_RMII) { | 281 | if (bp->capabilities & DNET_HAS_RMII) { |
282 | phydev = phy_connect(dev, phydev->dev.bus_id, | 282 | phydev = phy_connect(dev, dev_name(&phydev->dev), |
283 | &dnet_handle_link_change, 0, | 283 | &dnet_handle_link_change, 0, |
284 | PHY_INTERFACE_MODE_RMII); | 284 | PHY_INTERFACE_MODE_RMII); |
285 | } else { | 285 | } else { |
286 | phydev = phy_connect(dev, phydev->dev.bus_id, | 286 | phydev = phy_connect(dev, dev_name(&phydev->dev), |
287 | &dnet_handle_link_change, 0, | 287 | &dnet_handle_link_change, 0, |
288 | PHY_INTERFACE_MODE_MII); | 288 | PHY_INTERFACE_MODE_MII); |
289 | } | 289 | } |
@@ -926,7 +926,7 @@ static int __devinit dnet_probe(struct platform_device *pdev) | |||
926 | phydev = bp->phy_dev; | 926 | phydev = bp->phy_dev; |
927 | dev_info(&pdev->dev, "attached PHY driver [%s] " | 927 | dev_info(&pdev->dev, "attached PHY driver [%s] " |
928 | "(mii_bus:phy_addr=%s, irq=%d)\n", | 928 | "(mii_bus:phy_addr=%s, irq=%d)\n", |
929 | phydev->drv->name, phydev->dev.bus_id, phydev->irq); | 929 | phydev->drv->name, dev_name(&phydev->dev), phydev->irq); |
930 | 930 | ||
931 | return 0; | 931 | return 0; |
932 | 932 | ||
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 64dfa7f5f374..c024352c92fd 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c | |||
@@ -2998,8 +2998,11 @@ static const struct net_device_ops gem_netdev_ops = { | |||
2998 | .ndo_do_ioctl = gem_ioctl, | 2998 | .ndo_do_ioctl = gem_ioctl, |
2999 | .ndo_tx_timeout = gem_tx_timeout, | 2999 | .ndo_tx_timeout = gem_tx_timeout, |
3000 | .ndo_change_mtu = gem_change_mtu, | 3000 | .ndo_change_mtu = gem_change_mtu, |
3001 | .ndo_set_mac_address = eth_mac_addr, | ||
3002 | .ndo_validate_addr = eth_validate_addr, | 3001 | .ndo_validate_addr = eth_validate_addr, |
3002 | .ndo_set_mac_address = gem_set_mac_address, | ||
3003 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
3004 | .ndo_poll_controller = gem_poll_controller, | ||
3005 | #endif | ||
3003 | }; | 3006 | }; |
3004 | 3007 | ||
3005 | static int __devinit gem_init_one(struct pci_dev *pdev, | 3008 | static int __devinit gem_init_one(struct pci_dev *pdev, |
@@ -3161,10 +3164,6 @@ static int __devinit gem_init_one(struct pci_dev *pdev, | |||
3161 | dev->watchdog_timeo = 5 * HZ; | 3164 | dev->watchdog_timeo = 5 * HZ; |
3162 | dev->irq = pdev->irq; | 3165 | dev->irq = pdev->irq; |
3163 | dev->dma = 0; | 3166 | dev->dma = 0; |
3164 | dev->set_mac_address = gem_set_mac_address; | ||
3165 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
3166 | dev->poll_controller = gem_poll_controller; | ||
3167 | #endif | ||
3168 | 3167 | ||
3169 | /* Set that now, in case PM kicks in now */ | 3168 | /* Set that now, in case PM kicks in now */ |
3170 | pci_set_drvdata(pdev, dev); | 3169 | pci_set_drvdata(pdev, dev); |
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index 1c095c63f98f..8f0ac442c907 100644 --- a/drivers/net/ucc_geth.c +++ b/drivers/net/ucc_geth.c | |||
@@ -1536,32 +1536,15 @@ static void adjust_link(struct net_device *dev) | |||
1536 | static int init_phy(struct net_device *dev) | 1536 | static int init_phy(struct net_device *dev) |
1537 | { | 1537 | { |
1538 | struct ucc_geth_private *priv = netdev_priv(dev); | 1538 | struct ucc_geth_private *priv = netdev_priv(dev); |
1539 | struct device_node *np = priv->node; | 1539 | struct ucc_geth_info *ug_info = priv->ug_info; |
1540 | struct device_node *phy, *mdio; | ||
1541 | const phandle *ph; | ||
1542 | char bus_name[MII_BUS_ID_SIZE]; | ||
1543 | const unsigned int *id; | ||
1544 | struct phy_device *phydev; | 1540 | struct phy_device *phydev; |
1545 | char phy_id[BUS_ID_SIZE]; | ||
1546 | 1541 | ||
1547 | priv->oldlink = 0; | 1542 | priv->oldlink = 0; |
1548 | priv->oldspeed = 0; | 1543 | priv->oldspeed = 0; |
1549 | priv->oldduplex = -1; | 1544 | priv->oldduplex = -1; |
1550 | 1545 | ||
1551 | ph = of_get_property(np, "phy-handle", NULL); | 1546 | phydev = phy_connect(dev, ug_info->phy_bus_id, &adjust_link, 0, |
1552 | phy = of_find_node_by_phandle(*ph); | 1547 | priv->phy_interface); |
1553 | mdio = of_get_parent(phy); | ||
1554 | |||
1555 | id = of_get_property(phy, "reg", NULL); | ||
1556 | |||
1557 | of_node_put(phy); | ||
1558 | of_node_put(mdio); | ||
1559 | |||
1560 | fsl_pq_mdio_bus_name(bus_name, mdio); | ||
1561 | snprintf(phy_id, sizeof(phy_id), "%s:%02x", | ||
1562 | bus_name, *id); | ||
1563 | |||
1564 | phydev = phy_connect(dev, phy_id, &adjust_link, 0, priv->phy_interface); | ||
1565 | 1548 | ||
1566 | if (IS_ERR(phydev)) { | 1549 | if (IS_ERR(phydev)) { |
1567 | printk("%s: Could not attach to PHY\n", dev->name); | 1550 | printk("%s: Could not attach to PHY\n", dev->name); |
@@ -3629,10 +3612,12 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma | |||
3629 | ug_info->uf_info.irq = irq_of_parse_and_map(np, 0); | 3612 | ug_info->uf_info.irq = irq_of_parse_and_map(np, 0); |
3630 | fixed_link = of_get_property(np, "fixed-link", NULL); | 3613 | fixed_link = of_get_property(np, "fixed-link", NULL); |
3631 | if (fixed_link) { | 3614 | if (fixed_link) { |
3632 | snprintf(ug_info->mdio_bus, MII_BUS_ID_SIZE, "0"); | 3615 | snprintf(ug_info->phy_bus_id, sizeof(ug_info->phy_bus_id), |
3633 | ug_info->phy_address = fixed_link[0]; | 3616 | PHY_ID_FMT, "0", fixed_link[0]); |
3634 | phy = NULL; | 3617 | phy = NULL; |
3635 | } else { | 3618 | } else { |
3619 | char bus_name[MII_BUS_ID_SIZE]; | ||
3620 | |||
3636 | ph = of_get_property(np, "phy-handle", NULL); | 3621 | ph = of_get_property(np, "phy-handle", NULL); |
3637 | phy = of_find_node_by_phandle(*ph); | 3622 | phy = of_find_node_by_phandle(*ph); |
3638 | 3623 | ||
@@ -3643,7 +3628,6 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma | |||
3643 | prop = of_get_property(phy, "reg", NULL); | 3628 | prop = of_get_property(phy, "reg", NULL); |
3644 | if (prop == NULL) | 3629 | if (prop == NULL) |
3645 | return -1; | 3630 | return -1; |
3646 | ug_info->phy_address = *prop; | ||
3647 | 3631 | ||
3648 | /* Set the bus id */ | 3632 | /* Set the bus id */ |
3649 | mdio = of_get_parent(phy); | 3633 | mdio = of_get_parent(phy); |
@@ -3657,8 +3641,14 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma | |||
3657 | if (err) | 3641 | if (err) |
3658 | return -1; | 3642 | return -1; |
3659 | 3643 | ||
3644 | <<<<<<< HEAD:drivers/net/ucc_geth.c | ||
3660 | snprintf(ug_info->mdio_bus, MII_BUS_ID_SIZE, "%x", | 3645 | snprintf(ug_info->mdio_bus, MII_BUS_ID_SIZE, "%x", |
3661 | res.start&0xfffff); | 3646 | res.start&0xfffff); |
3647 | ======= | ||
3648 | uec_mdio_bus_name(bus_name, mdio); | ||
3649 | snprintf(ug_info->phy_bus_id, sizeof(ug_info->phy_bus_id), | ||
3650 | "%s:%02x", bus_name, *prop); | ||
3651 | >>>>>>> 61fa9dcf9329cb92c220f7b656410fbe5e72f933:drivers/net/ucc_geth.c | ||
3662 | } | 3652 | } |
3663 | 3653 | ||
3664 | /* get the phy interface type, or default to MII */ | 3654 | /* get the phy interface type, or default to MII */ |
diff --git a/drivers/net/ucc_geth.h b/drivers/net/ucc_geth.h index 66d18971fa0c..e3a25e64a652 100644 --- a/drivers/net/ucc_geth.h +++ b/drivers/net/ucc_geth.h | |||
@@ -1101,8 +1101,7 @@ struct ucc_geth_info { | |||
1101 | u32 eventRegMask; | 1101 | u32 eventRegMask; |
1102 | u16 pausePeriod; | 1102 | u16 pausePeriod; |
1103 | u16 extensionField; | 1103 | u16 extensionField; |
1104 | u8 phy_address; | 1104 | char phy_bus_id[BUS_ID_SIZE]; |
1105 | char mdio_bus[MII_BUS_ID_SIZE]; | ||
1106 | u8 weightfactor[NUM_TX_QUEUES]; | 1105 | u8 weightfactor[NUM_TX_QUEUES]; |
1107 | u8 interruptcoalescingmaxvalue[NUM_RX_QUEUES]; | 1106 | u8 interruptcoalescingmaxvalue[NUM_RX_QUEUES]; |
1108 | u8 l2qt[UCC_GETH_VLAN_PRIORITY_MAX]; | 1107 | u8 l2qt[UCC_GETH_VLAN_PRIORITY_MAX]; |
diff --git a/include/linux/dca.h b/include/linux/dca.h index b00a753eda53..9c20c7e87d0a 100644 --- a/include/linux/dca.h +++ b/include/linux/dca.h | |||
@@ -1,3 +1,23 @@ | |||
1 | /* | ||
2 | * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the Free | ||
6 | * Software Foundation; either version 2 of the License, or (at your option) | ||
7 | * any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
16 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in the | ||
19 | * file called COPYING. | ||
20 | */ | ||
1 | #ifndef DCA_H | 21 | #ifndef DCA_H |
2 | #define DCA_H | 22 | #define DCA_H |
3 | /* DCA Provider API */ | 23 | /* DCA Provider API */ |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 8ac3d26014a8..ab9d8f14e151 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -1950,6 +1950,11 @@ static int nl80211_get_mesh_params(struct sk_buff *skb, | |||
1950 | if (err) | 1950 | if (err) |
1951 | return err; | 1951 | return err; |
1952 | 1952 | ||
1953 | if (!drv->ops->get_mesh_params) { | ||
1954 | err = -EOPNOTSUPP; | ||
1955 | goto out; | ||
1956 | } | ||
1957 | |||
1953 | /* Get the mesh params */ | 1958 | /* Get the mesh params */ |
1954 | rtnl_lock(); | 1959 | rtnl_lock(); |
1955 | err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params); | 1960 | err = drv->ops->get_mesh_params(&drv->wiphy, dev, &cur_params); |
@@ -2059,6 +2064,11 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info) | |||
2059 | if (err) | 2064 | if (err) |
2060 | return err; | 2065 | return err; |
2061 | 2066 | ||
2067 | if (!drv->ops->set_mesh_params) { | ||
2068 | err = -EOPNOTSUPP; | ||
2069 | goto out; | ||
2070 | } | ||
2071 | |||
2062 | /* This makes sure that there aren't more than 32 mesh config | 2072 | /* This makes sure that there aren't more than 32 mesh config |
2063 | * parameters (otherwise our bitfield scheme would not work.) */ | 2073 | * parameters (otherwise our bitfield scheme would not work.) */ |
2064 | BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32); | 2074 | BUILD_BUG_ON(NL80211_MESHCONF_ATTR_MAX > 32); |
@@ -2103,6 +2113,7 @@ static int nl80211_set_mesh_params(struct sk_buff *skb, struct genl_info *info) | |||
2103 | err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask); | 2113 | err = drv->ops->set_mesh_params(&drv->wiphy, dev, &cfg, mask); |
2104 | rtnl_unlock(); | 2114 | rtnl_unlock(); |
2105 | 2115 | ||
2116 | out: | ||
2106 | /* cleanup */ | 2117 | /* cleanup */ |
2107 | cfg80211_put_dev(drv); | 2118 | cfg80211_put_dev(drv); |
2108 | dev_put(dev); | 2119 | dev_put(dev); |