]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/wireless/core.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / net / wireless / core.c
index 9c21ebf9780ea21ff22c9326da29a423061d088b..e9a5f8ca4c2718424bc0fafec5a9b7eabe6d65b1 100644 (file)
@@ -4,6 +4,8 @@
  * Copyright 2006-2010         Johannes Berg <johannes@sipsolutions.net>
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/if.h>
 #include <linux/module.h>
 #include <linux/err.h>
@@ -216,8 +218,7 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
                            rdev->wiphy.debugfsdir,
                            rdev->wiphy.debugfsdir->d_parent,
                            newname))
-               printk(KERN_ERR "cfg80211: failed to rename debugfs dir to %s!\n",
-                      newname);
+               pr_err("failed to rename debugfs dir to %s!\n", newname);
 
        nl80211_notify_dev_rename(rdev);
 
@@ -331,6 +332,7 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
        WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf);
        WARN_ON(ops->add_station && !ops->del_station);
        WARN_ON(ops->add_mpath && !ops->del_mpath);
+       WARN_ON(ops->join_mesh && !ops->leave_mesh);
 
        alloc_size = sizeof(*rdev) + sizeof_priv;
 
@@ -699,8 +701,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
 
                if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj,
                                      "phy80211")) {
-                       printk(KERN_ERR "wireless: failed to add phy80211 "
-                               "symlink to netdev!\n");
+                       pr_err("failed to add phy80211 symlink to netdev!\n");
                }
                wdev->netdev = dev;
                wdev->sme_state = CFG80211_SME_IDLE;
@@ -752,6 +753,9 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
                        cfg80211_mlme_down(rdev, dev);
                        wdev_unlock(wdev);
                        break;
+               case NL80211_IFTYPE_MESH_POINT:
+                       cfg80211_leave_mesh(rdev, dev);
+                       break;
                default:
                        break;
                }
@@ -775,20 +779,37 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
                }
                cfg80211_lock_rdev(rdev);
                mutex_lock(&rdev->devlist_mtx);
-#ifdef CONFIG_CFG80211_WEXT
                wdev_lock(wdev);
                switch (wdev->iftype) {
+#ifdef CONFIG_CFG80211_WEXT
                case NL80211_IFTYPE_ADHOC:
                        cfg80211_ibss_wext_join(rdev, wdev);
                        break;
                case NL80211_IFTYPE_STATION:
                        cfg80211_mgd_wext_connect(rdev, wdev);
                        break;
+#endif
+#ifdef CONFIG_MAC80211_MESH
+               case NL80211_IFTYPE_MESH_POINT:
+                       {
+                               /* backward compat code... */
+                               struct mesh_setup setup;
+                               memcpy(&setup, &default_mesh_setup,
+                                               sizeof(setup));
+                                /* back compat only needed for mesh_id */
+                               setup.mesh_id = wdev->ssid;
+                               setup.mesh_id_len = wdev->mesh_id_up_len;
+                               if (wdev->mesh_id_up_len)
+                                       __cfg80211_join_mesh(rdev, dev,
+                                                       &setup,
+                                                       &default_mesh_config);
+                               break;
+                       }
+#endif
                default:
                        break;
                }
                wdev_unlock(wdev);
-#endif
                rdev->opencount++;
                mutex_unlock(&rdev->devlist_mtx);
                cfg80211_unlock_rdev(rdev);