ath9k: Simplify user pattern configuration
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Fri, 30 Jan 2015 13:35:31 +0000 (19:05 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 3 Feb 2015 13:31:08 +0000 (15:31 +0200)
There is no need to allocate a new structure and
free it for every user pattern, instead use local
variables.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/wow.c

index 20216c56e1588b2899bfadd4696d7292aff644c8..0f8e9464e4ab36963ef015ec19c0a4537d8a668f 100644 (file)
@@ -830,12 +830,6 @@ static inline void ath_fill_led_pin(struct ath_softc *sc)
 /* Wake on Wireless LAN */
 /************************/
 
-struct ath9k_wow_pattern {
-       u8 pattern_bytes[MAX_PATTERN_SIZE];
-       u8 mask_bytes[MAX_PATTERN_SIZE];
-       u32 pattern_len;
-};
-
 #ifdef CONFIG_ATH9K_WOW
 void ath9k_init_wow(struct ieee80211_hw *hw);
 void ath9k_deinit_wow(struct ieee80211_hw *hw);
index 4b3b56563714677457040996dd284c9ad78f01c6..da52b1ffff24391faaae8d3793b134b2c7b066b9 100644 (file)
@@ -128,50 +128,25 @@ static void ath9k_wow_add_pattern(struct ath_softc *sc,
                                  struct cfg80211_wowlan *wowlan)
 {
        struct ath_hw *ah = sc->sc_ah;
-       struct ath9k_wow_pattern *wow_pattern = NULL;
        struct cfg80211_pkt_pattern *patterns = wowlan->patterns;
+       u8 wow_pattern[MAX_PATTERN_SIZE];
+       u8 wow_mask[MAX_PATTERN_SIZE];
        int mask_len;
        s8 i = 0;
 
-       if (!wowlan->n_patterns)
-               return;
-
-       /*
-        * Add the new user configured patterns
-        */
        for (i = 0; i < wowlan->n_patterns; i++) {
-
-               wow_pattern = kzalloc(sizeof(*wow_pattern), GFP_KERNEL);
-
-               if (!wow_pattern)
-                       return;
-
-               /*
-                * TODO: convert the generic user space pattern to
-                * appropriate chip specific/802.11 pattern.
-                */
-
-               mask_len = DIV_ROUND_UP(wowlan->patterns[i].pattern_len, 8);
-               memset(wow_pattern->pattern_bytes, 0, MAX_PATTERN_SIZE);
-               memset(wow_pattern->mask_bytes, 0, MAX_PATTERN_SIZE);
-               memcpy(wow_pattern->pattern_bytes, patterns[i].pattern,
-                      patterns[i].pattern_len);
-               memcpy(wow_pattern->mask_bytes, patterns[i].mask, mask_len);
-               wow_pattern->pattern_len = patterns[i].pattern_len;
-
-               /*
-                * just need to take care of deauth and disssoc pattern,
-                * make sure we don't overwrite them.
-                */
-
-               ath9k_hw_wow_apply_pattern(ah, wow_pattern->pattern_bytes,
-                                          wow_pattern->mask_bytes,
+               mask_len = DIV_ROUND_UP(patterns[i].pattern_len, 8);
+               memset(wow_pattern, 0, MAX_PATTERN_SIZE);
+               memset(wow_mask, 0, MAX_PATTERN_SIZE);
+               memcpy(wow_pattern, patterns[i].pattern, patterns[i].pattern_len);
+               memcpy(wow_mask, patterns[i].mask, mask_len);
+
+               ath9k_hw_wow_apply_pattern(ah,
+                                          wow_pattern,
+                                          wow_mask,
                                           i + 2,
-                                          wow_pattern->pattern_len);
-               kfree(wow_pattern);
-
+                                          patterns[i].pattern_len);
        }
-
 }
 
 int ath9k_suspend(struct ieee80211_hw *hw,