staging: wfx: simplify wfx_upload_ap_templates()
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Wed, 15 Jan 2020 13:54:26 +0000 (13:54 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 Jan 2020 19:59:47 +0000 (20:59 +0100)
This function built probe response from data retrieved in beacon. Yet,
this job can be done with ieee80211_proberesp_get(). So, we can simplify
that code (and fix bugs like inclusion of TIM in probe responses).

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-18-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wfx/sta.c

index fdde7ab..1181203 100644 (file)
@@ -783,7 +783,6 @@ static int wfx_update_beaconing(struct wfx_vif *wvif)
 static int wfx_upload_ap_templates(struct wfx_vif *wvif)
 {
        struct sk_buff *skb;
-       struct ieee80211_mgmt *mgmt;
 
        if (wvif->vif->type == NL80211_IFTYPE_STATION ||
            wvif->vif->type == NL80211_IFTYPE_MONITOR ||
@@ -795,14 +794,11 @@ static int wfx_upload_ap_templates(struct wfx_vif *wvif)
                return -ENOMEM;
        hif_set_template_frame(wvif, skb, HIF_TMPLT_BCN,
                               API_RATE_INDEX_B_1MBPS);
+       dev_kfree_skb(skb);
 
-       /* TODO: Distill probe resp; remove TIM and any other beacon-specific
-        * IEs
-        */
-       mgmt = (void *)skb->data;
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP);
-
+       skb = ieee80211_proberesp_get(wvif->wdev->hw, wvif->vif);
+       if (!skb)
+               return -ENOMEM;
        hif_set_template_frame(wvif, skb, HIF_TMPLT_PRBRES,
                               API_RATE_INDEX_B_1MBPS);
        dev_kfree_skb(skb);