cfg80211: don't allow WoWLAN support without CONFIG_PM
authorJohannes Berg <johannes.berg@intel.com>
Wed, 27 Jun 2012 07:23:48 +0000 (09:23 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 27 Jun 2012 15:55:11 +0000 (17:55 +0200)
When CONFIG_PM is disabled, no device can possibly
support WoWLAN since it can't go to sleep to start
with. Due to this, mac80211 had even rejected the
hardware registration. By making all the code and
data for WoWLAN depend on CONFIG_PM we can promote
this runtime error to a compile-time error.

Add #ifdef around all WoWLAN code to remove it in
systems that don't need it as they never suspend.

Cc: Kalle Valo <kvalo@qca.qualcomm.com>
Acked-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ti/wlcore/main.c
include/net/cfg80211.h
net/mac80211/main.c
net/wireless/core.c
net/wireless/nl80211.c

index f27e9732951d1f48819c3e88510e0f01b782770c..b8fce0d4d72e3bcd8401bfbcbfd602617ec65814 100644 (file)
@@ -3487,6 +3487,7 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
        wiphy->cipher_suites = cipher_suites;
        wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
 
+#ifdef CONFIG_PM
        wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
                              WIPHY_WOWLAN_DISCONNECT |
                              WIPHY_WOWLAN_GTK_REKEY_FAILURE  |
@@ -3496,6 +3497,7 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
        wiphy->wowlan.n_patterns = WOW_MAX_FILTERS_PER_LIST;
        wiphy->wowlan.pattern_min_len = 1;
        wiphy->wowlan.pattern_max_len = WOW_PATTERN_SIZE;
+#endif
 
        wiphy->max_sched_scan_ssids = MAX_PROBED_SSID_INDEX;
 
index 1156e3f578c122afcbeaa80d9a31c32e94705026..747a997bc608e1e763b07e19ff18176a1aac0a85 100644 (file)
@@ -5321,6 +5321,7 @@ int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
                goto out_free_hw;
        }
 
+#ifdef CONFIG_PM
        ret = enable_irq_wake(wl->irq);
        if (!ret) {
                wl->irq_wake_enabled = true;
@@ -5334,6 +5335,7 @@ int __devinit wlcore_probe(struct wl1271 *wl, struct platform_device *pdev)
                                WL1271_RX_FILTER_MAX_PATTERN_SIZE;
                }
        }
+#endif
        disable_irq(wl->irq);
 
        ret = wl12xx_get_hw_info(wl);
index 061c01957e54bae76f1bd7e2ba6bd33ca0916576..7d3cd3ce9a268df3b76939de505ee88ae9595e1a 100644 (file)
@@ -2153,7 +2153,9 @@ struct wiphy {
        char fw_version[ETHTOOL_BUSINFO_LEN];
        u32 hw_version;
 
+#ifdef CONFIG_PM
        struct wiphy_wowlan_support wowlan;
+#endif
 
        u16 max_remain_on_channel_duration;
 
index 0b040fb73673f9e2de6ad7336879907a840945d0..aded0018f6f3cb0559be25ae7f7d39ac51de6164 100644 (file)
@@ -706,12 +706,11 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
             local->hw.offchannel_tx_hw_queue >= local->hw.queues))
                return -EINVAL;
 
-       if ((hw->wiphy->wowlan.flags || hw->wiphy->wowlan.n_patterns)
 #ifdef CONFIG_PM
-           && (!local->ops->suspend || !local->ops->resume)
-#endif
-           )
+       if ((hw->wiphy->wowlan.flags || hw->wiphy->wowlan.n_patterns) &&
+           (!local->ops->suspend || !local->ops->resume))
                return -EINVAL;
+#endif
 
        if ((hw->flags & IEEE80211_HW_SCAN_WHILE_IDLE) && !local->ops->hw_scan)
                return -EINVAL;
index 907f62c80e28cbc92403d65bb6fe984b56aae578..ddd32afa5f0a8e1ba6c00dcddc535b5e7b2f9e30 100644 (file)
@@ -421,9 +421,11 @@ int wiphy_register(struct wiphy *wiphy)
        int i;
        u16 ifmodes = wiphy->interface_modes;
 
+#ifdef CONFIG_PM
        if (WARN_ON((wiphy->wowlan.flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
                    !(wiphy->wowlan.flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
                return -EINVAL;
+#endif
 
        if (WARN_ON(wiphy->ap_sme_capa &&
                    !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
@@ -500,12 +502,14 @@ int wiphy_register(struct wiphy *wiphy)
                return -EINVAL;
        }
 
+#ifdef CONFIG_PM
        if (rdev->wiphy.wowlan.n_patterns) {
                if (WARN_ON(!rdev->wiphy.wowlan.pattern_min_len ||
                            rdev->wiphy.wowlan.pattern_min_len >
                            rdev->wiphy.wowlan.pattern_max_len))
                        return -EINVAL;
        }
+#endif
 
        /* check and set up bitrates */
        ieee80211_set_bitrate_flags(wiphy);
index 234ff3bbd104c9f8538e5225dfb1be2f7831b89a..067c9fe02a7f507013b2a382d19d9f0482a6e787 100644 (file)
@@ -1112,6 +1112,7 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
                nla_nest_end(msg, nl_ifs);
        }
 
+#ifdef CONFIG_PM
        if (dev->wiphy.wowlan.flags || dev->wiphy.wowlan.n_patterns) {
                struct nlattr *nl_wowlan;
 
@@ -1152,6 +1153,7 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
 
                nla_nest_end(msg, nl_wowlan);
        }
+#endif
 
        if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES,
                                dev->wiphy.software_iftypes))
@@ -6276,6 +6278,7 @@ static int nl80211_leave_mesh(struct sk_buff *skb, struct genl_info *info)
        return cfg80211_leave_mesh(rdev, dev);
 }
 
+#ifdef CONFIG_PM
 static int nl80211_get_wowlan(struct sk_buff *skb, struct genl_info *info)
 {
        struct cfg80211_registered_device *rdev = info->user_ptr[0];
@@ -6504,6 +6507,7 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
        kfree(new_triggers.patterns);
        return err;
 }
+#endif
 
 static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info)
 {
@@ -7158,6 +7162,7 @@ static struct genl_ops nl80211_ops[] = {
                .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
                                  NL80211_FLAG_NEED_RTNL,
        },
+#ifdef CONFIG_PM
        {
                .cmd = NL80211_CMD_GET_WOWLAN,
                .doit = nl80211_get_wowlan,
@@ -7174,6 +7179,7 @@ static struct genl_ops nl80211_ops[] = {
                .internal_flags = NL80211_FLAG_NEED_WIPHY |
                                  NL80211_FLAG_NEED_RTNL,
        },
+#endif
        {
                .cmd = NL80211_CMD_SET_REKEY_OFFLOAD,
                .doit = nl80211_set_rekey_data,