]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ath11k: add handling for BSS color
authorJohn Crispin <john@phrozen.org>
Mon, 16 Mar 2020 05:59:26 +0000 (07:59 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 17 Mar 2020 06:41:12 +0000 (08:41 +0200)
This patch adds code to handle the BSS_CHANGED_BSS_COLOR flag. It will
trigger the propagation of BSS color settings into the FW. Handling is
slightly different between AP and STA interfaces.

Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath11k/mac.c

index 61fd81d63efc10d26e85b764313e632684170526..4e38913172ec940284918e0ef541406006e46597 100644 (file)
@@ -1956,6 +1956,31 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
                ath11k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id,
                                             &info->he_obss_pd);
 
+       if (changed & BSS_CHANGED_HE_BSS_COLOR) {
+               if (vif->type == NL80211_IFTYPE_AP) {
+                       ret = ath11k_wmi_send_obss_color_collision_cfg_cmd(
+                               ar, arvif->vdev_id, info->he_bss_color.color,
+                               ATH11K_BSS_COLOR_COLLISION_DETECTION_AP_PERIOD_MS,
+                               !info->he_bss_color.disabled);
+                       if (ret)
+                               ath11k_warn(ar->ab, "failed to set bss color collision on vdev %i: %d\n",
+                                           arvif->vdev_id,  ret);
+               } else if (vif->type == NL80211_IFTYPE_STATION) {
+                       ret = ath11k_wmi_send_bss_color_change_enable_cmd(ar,
+                                                                         arvif->vdev_id,
+                                                                         1);
+                       if (ret)
+                               ath11k_warn(ar->ab, "failed to enable bss color change on vdev %i: %d\n",
+                                           arvif->vdev_id,  ret);
+                       ret = ath11k_wmi_send_obss_color_collision_cfg_cmd(
+                               ar, arvif->vdev_id, 0,
+                               ATH11K_BSS_COLOR_COLLISION_DETECTION_STA_PERIOD_MS, 1);
+                       if (ret)
+                               ath11k_warn(ar->ab, "failed to set bss color collision on vdev %i: %d\n",
+                                           arvif->vdev_id,  ret);
+               }
+       }
+
        mutex_unlock(&ar->conf_mutex);
 }