staging: wfx: fix (future) TDLS support
authorJérôme Pouiller <jerome.pouiller@silabs.com>
Mon, 27 Apr 2020 13:40:15 +0000 (15:40 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Apr 2020 12:14:26 +0000 (14:14 +0200)
The device does not expect that the AP to have a link-id. However, TDLS
peers should have a a link-id.

The driver does not yet declare itself as supporting TDLS.
Notwithstanding, fix the code in anticipation of the support of TDLS.

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

index f3e106f..2262e1d 100644 (file)
@@ -384,9 +384,8 @@ int wfx_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        spin_lock_init(&sta_priv->lock);
        sta_priv->vif_id = wvif->id;
 
-       // FIXME: in station mode, the current API interprets new link-id as a
-       // tdls peer.
-       if (vif->type == NL80211_IFTYPE_STATION)
+       // In station mode, the firmware interprets new link-id as a TDLS peer.
+       if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
                return 0;
        sta_priv->link_id = ffz(wvif->link_id_map);
        wvif->link_id_map |= BIT(sta_priv->link_id);
@@ -408,8 +407,8 @@ int wfx_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                if (sta_priv->buffered[i])
                        dev_warn(wvif->wdev->dev, "release station while %d pending frame on queue %d",
                                 sta_priv->buffered[i], i);
-       // FIXME: see note in wfx_sta_add()
-       if (vif->type == NL80211_IFTYPE_STATION)
+       // See note in wfx_sta_add()
+       if (!sta_priv->link_id)
                return 0;
        // FIXME add a mutex?
        hif_map_link(wvif, sta->addr, 1, sta_priv->link_id);