ath11k: add support to configure spatial reuse parameter set
authorRajkumar Manoharan <rmanohar@codeaurora.org>
Wed, 10 Feb 2021 07:53:29 +0000 (09:53 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 11 Feb 2021 06:48:36 +0000 (08:48 +0200)
The SPR parameter set comprises OBSS PD threshold for SRG
and non SRG and Bitmap of BSS color and partial BSSID. This adds
support to configure fields of SPR element to firmware.

Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.1.0.1-01238-QCAHKSWPL_SILICONZ-2
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01164-QCAHKSWPL_SILICONZ-1
Tested-by: Muna Sinada <msinada@codeaurora.org>
Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1612843714-29174-1-git-send-email-rmanohar@codeaurora.org
drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
drivers/net/wireless/ath/ath11k/debugfs_htt_stats.h
drivers/net/wireless/ath/ath11k/mac.c
drivers/net/wireless/ath/ath11k/mac.h
drivers/net/wireless/ath/ath11k/wmi.c
drivers/net/wireless/ath/ath11k/wmi.h

index 9191ffa081c22296b001ae0d7c866679c738742f..e13684343ec30c38367d9dbe8f113c58644a5fb2 100644 (file)
@@ -3845,6 +3845,18 @@ htt_print_pdev_obss_pd_stats_tlv_v(const void *tag_buf,
                           htt_stats_buf->num_obss_tx_ppdu_success);
        len += HTT_DBG_OUT(buf + len, buf_len - len, "OBSS Tx failures PPDU = %u\n",
                           htt_stats_buf->num_obss_tx_ppdu_failure);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "Non-SRG Opportunities = %u\n",
+                          htt_stats_buf->num_non_srg_opportunities);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "Non-SRG tried PPDU = %u\n",
+                          htt_stats_buf->num_non_srg_ppdu_tried);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "Non-SRG success PPDU = %u\n",
+                          htt_stats_buf->num_non_srg_ppdu_success);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "SRG Opportunies = %u\n",
+                          htt_stats_buf->num_srg_opportunities);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "SRG tried PPDU = %u\n",
+                          htt_stats_buf->num_srg_ppdu_tried);
+       len += HTT_DBG_OUT(buf + len, buf_len - len, "SRG success PPDU = %u\n",
+                          htt_stats_buf->num_srg_ppdu_success);
 
        if (len >= buf_len)
                buf[buf_len - 1] = 0;
index 74b2086eed9d6889162c15eeaaf462c2f95d437a..567a26d485a92c09f4566e08179f6478e61869f0 100644 (file)
@@ -1656,8 +1656,19 @@ struct htt_tx_sounding_stats_tlv {
 };
 
 struct htt_pdev_obss_pd_stats_tlv {
-       u32        num_obss_tx_ppdu_success;
-       u32        num_obss_tx_ppdu_failure;
+       u32 num_obss_tx_ppdu_success;
+       u32 num_obss_tx_ppdu_failure;
+       u32 num_sr_tx_transmissions;
+       u32 num_spatial_reuse_opportunities;
+       u32 num_non_srg_opportunities;
+       u32 num_non_srg_ppdu_tried;
+       u32 num_non_srg_ppdu_success;
+       u32 num_srg_opportunities;
+       u32 num_srg_ppdu_tried;
+       u32 num_srg_ppdu_success;
+       u32 num_psr_opportunities;
+       u32 num_psr_ppdu_tried;
+       u32 num_psr_ppdu_success;
 };
 
 struct htt_ring_backpressure_stats_tlv {
index 263a1bff02ac804b3da0c69734b60e89db91ec30..b391169576e27c613931dc8f8f90575506657a60 100644 (file)
@@ -1871,6 +1871,158 @@ static int ath11k_mac_fils_discovery(struct ath11k_vif *arvif,
        return ret;
 }
 
+static int ath11k_mac_config_obss_pd(struct ath11k *ar,
+                                    struct ieee80211_he_obss_pd *he_obss_pd)
+{
+       u32 bitmap[2], param_id, param_val, pdev_id;
+       int ret;
+       s8 non_srg_th = 0, srg_th = 0;
+
+       pdev_id = ar->pdev->pdev_id;
+
+       /* Set and enable SRG/non-SRG OBSS PD Threshold */
+       param_id = WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD;
+       if (test_bit(ATH11K_FLAG_MONITOR_ENABLED, &ar->monitor_flags)) {
+               ret = ath11k_wmi_pdev_set_param(ar, param_id, 0, pdev_id);
+               if (ret)
+                       ath11k_warn(ar->ab,
+                                   "failed to set obss_pd_threshold for pdev: %u\n",
+                                   pdev_id);
+               return ret;
+       }
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_MAC,
+                  "mac obss pd sr_ctrl %x non_srg_thres %u srg_max %u\n",
+                  he_obss_pd->sr_ctrl, he_obss_pd->non_srg_max_offset,
+                  he_obss_pd->max_offset);
+
+       param_val = 0;
+
+       if (he_obss_pd->sr_ctrl &
+           IEEE80211_HE_SPR_NON_SRG_OBSS_PD_SR_DISALLOWED) {
+               non_srg_th = ATH11K_OBSS_PD_MAX_THRESHOLD;
+       } else {
+               if (he_obss_pd->sr_ctrl & IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT)
+                       non_srg_th = (ATH11K_OBSS_PD_MAX_THRESHOLD +
+                                     he_obss_pd->non_srg_max_offset);
+               else
+                       non_srg_th = ATH11K_OBSS_PD_NON_SRG_MAX_THRESHOLD;
+
+               param_val |= ATH11K_OBSS_PD_NON_SRG_EN;
+       }
+
+       if (he_obss_pd->sr_ctrl & IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT) {
+               srg_th = ATH11K_OBSS_PD_MAX_THRESHOLD + he_obss_pd->max_offset;
+               param_val |= ATH11K_OBSS_PD_SRG_EN;
+       }
+
+       if (test_bit(WMI_TLV_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT,
+                    ar->ab->wmi_ab.svc_map)) {
+               param_val |= ATH11K_OBSS_PD_THRESHOLD_IN_DBM;
+               param_val |= FIELD_PREP(GENMASK(15, 8), srg_th);
+       } else {
+               non_srg_th -= ATH11K_DEFAULT_NOISE_FLOOR;
+               /* SRG not supported and threshold in dB */
+               param_val &= ~(ATH11K_OBSS_PD_SRG_EN |
+                              ATH11K_OBSS_PD_THRESHOLD_IN_DBM);
+       }
+
+       param_val |= (non_srg_th & GENMASK(7, 0));
+       ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set obss_pd_threshold for pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Enable OBSS PD for all access category */
+       param_id  = WMI_PDEV_PARAM_SET_CMD_OBSS_PD_PER_AC;
+       param_val = 0xf;
+       ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set obss_pd_per_ac for pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Set SR Prohibit */
+       param_id  = WMI_PDEV_PARAM_ENABLE_SR_PROHIBIT;
+       param_val = !!(he_obss_pd->sr_ctrl &
+                      IEEE80211_HE_SPR_HESIGA_SR_VAL15_ALLOWED);
+       ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id);
+       if (ret) {
+               ath11k_warn(ar->ab, "failed to set sr_prohibit for pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       if (!test_bit(WMI_TLV_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT,
+                     ar->ab->wmi_ab.svc_map))
+               return 0;
+
+       /* Set SRG BSS Color Bitmap */
+       memcpy(bitmap, he_obss_pd->bss_color_bitmap, sizeof(bitmap));
+       ret = ath11k_wmi_pdev_set_srg_bss_color_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set bss_color_bitmap for pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Set SRG Partial BSSID Bitmap */
+       memcpy(bitmap, he_obss_pd->partial_bssid_bitmap, sizeof(bitmap));
+       ret = ath11k_wmi_pdev_set_srg_patial_bssid_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set partial_bssid_bitmap for pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       memset(bitmap, 0xff, sizeof(bitmap));
+
+       /* Enable all BSS Colors for SRG */
+       ret = ath11k_wmi_pdev_srg_obss_color_enable_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set srg_color_en_bitmap pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Enable all patial BSSID mask for SRG */
+       ret = ath11k_wmi_pdev_srg_obss_bssid_enable_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set srg_bssid_en_bitmap pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Enable all BSS Colors for non-SRG */
+       ret = ath11k_wmi_pdev_non_srg_obss_color_enable_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set non_srg_color_en_bitmap pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       /* Enable all patial BSSID mask for non-SRG */
+       ret = ath11k_wmi_pdev_non_srg_obss_bssid_enable_bitmap(ar, bitmap);
+       if (ret) {
+               ath11k_warn(ar->ab,
+                           "failed to set non_srg_bssid_en_bitmap pdev: %u\n",
+                           pdev_id);
+               return ret;
+       }
+
+       return 0;
+}
+
 static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
                                           struct ieee80211_vif *vif,
                                           struct ieee80211_bss_conf *info,
@@ -2114,8 +2266,7 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
        }
 
        if (changed & BSS_CHANGED_HE_OBSS_PD)
-               ath11k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id,
-                                            &info->he_obss_pd);
+               ath11k_mac_config_obss_pd(ar, &info->he_obss_pd);
 
        if (changed & BSS_CHANGED_HE_BSS_COLOR) {
                if (vif->type == NL80211_IFTYPE_AP) {
index 597104a9078d2ec39d56da8b7aacae6144a2755a..455577905505c089de488e3d184933eecb6c56ef 100644 (file)
@@ -116,6 +116,12 @@ struct ath11k_generic_iter {
 
 #define ATH11K_CHAN_WIDTH_NUM                  8
 
+#define ATH11K_OBSS_PD_MAX_THRESHOLD                   -82
+#define ATH11K_OBSS_PD_NON_SRG_MAX_THRESHOLD           -62
+#define ATH11K_OBSS_PD_THRESHOLD_IN_DBM                        BIT(29)
+#define ATH11K_OBSS_PD_SRG_EN                          BIT(30)
+#define ATH11K_OBSS_PD_NON_SRG_EN                      BIT(31)
+
 extern const struct htt_rx_ring_tlv_filter ath11k_mac_mon_status_filter_default;
 
 void ath11k_mac_destroy(struct ath11k_base *ab);
index 2e6ce28ecc8d6aad5dd8b65101384c2e89833501..cccfd3bd4d27e0cdce36a2e2e528d217978666d1 100644 (file)
@@ -2970,6 +2970,233 @@ ath11k_wmi_send_obss_spr_cmd(struct ath11k *ar, u32 vdev_id,
        return ret;
 }
 
+int
+ath11k_wmi_pdev_set_srg_bss_color_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG,
+                                    WMI_TAG_PDEV_SRG_BSS_COLOR_BITMAP_CMD) |
+                         FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd pdev_id %d bss color bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_SRG_BSS_COLOR_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_SRG_BSS_COLOR_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
+int
+ath11k_wmi_pdev_set_srg_patial_bssid_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header =
+               FIELD_PREP(WMI_TLV_TAG,
+                          WMI_TAG_PDEV_SRG_PARTIAL_BSSID_BITMAP_CMD) |
+               FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd pdev_id %d partial bssid bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_SRG_PARTIAL_BSSID_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_SRG_PARTIAL_BSSID_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
+int
+ath11k_wmi_pdev_srg_obss_color_enable_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header =
+               FIELD_PREP(WMI_TLV_TAG,
+                          WMI_TAG_PDEV_SRG_OBSS_COLOR_ENABLE_BITMAP_CMD) |
+               FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd srg pdev_id %d bss color enable bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
+int
+ath11k_wmi_pdev_srg_obss_bssid_enable_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header =
+               FIELD_PREP(WMI_TLV_TAG,
+                          WMI_TAG_PDEV_SRG_OBSS_BSSID_ENABLE_BITMAP_CMD) |
+               FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd srg pdev_id %d bssid enable bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
+int
+ath11k_wmi_pdev_non_srg_obss_color_enable_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header =
+               FIELD_PREP(WMI_TLV_TAG,
+                          WMI_TAG_PDEV_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMD) |
+               FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd non_srg pdev_id %d bss color enable bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
+int
+ath11k_wmi_pdev_non_srg_obss_bssid_enable_bitmap(struct ath11k *ar, u32 *bitmap)
+{
+       struct ath11k_pdev_wmi *wmi = ar->wmi;
+       struct ath11k_base *ab = wmi->wmi_ab->ab;
+       struct wmi_pdev_obss_pd_bitmap_cmd *cmd;
+       struct sk_buff *skb;
+       int ret, len;
+
+       len = sizeof(*cmd);
+
+       skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len);
+       if (!skb)
+               return -ENOMEM;
+
+       cmd = (struct wmi_pdev_obss_pd_bitmap_cmd *)skb->data;
+       cmd->tlv_header =
+               FIELD_PREP(WMI_TLV_TAG,
+                          WMI_TAG_PDEV_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMD) |
+               FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
+       cmd->pdev_id = ar->pdev->pdev_id;
+       memcpy(cmd->bitmap, bitmap, sizeof(cmd->bitmap));
+
+       ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
+                  "obss pd non_srg pdev_id %d bssid enable bitmap %08x %08x\n",
+                  cmd->pdev_id, cmd->bitmap[0], cmd->bitmap[1]);
+
+       ret = ath11k_wmi_cmd_send(wmi, skb,
+                                 WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID);
+       if (ret) {
+               ath11k_warn(ab,
+                           "failed to send WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID");
+               dev_kfree_skb(skb);
+       }
+
+       return ret;
+}
+
 int
 ath11k_wmi_send_obss_color_collision_cfg_cmd(struct ath11k *ar, u32 vdev_id,
                                             u8 bss_color, u32 period,
index 993674228c9e1358018351376993fbb7984f5111..3ade1ddd35c9d0e107dbe7ba4095c5a55a817831 100644 (file)
@@ -257,6 +257,16 @@ enum wmi_tlv_cmd_id {
        WMI_PDEV_DMA_RING_CFG_REQ_CMDID,
        WMI_PDEV_HE_TB_ACTION_FRM_CMDID,
        WMI_PDEV_PKTLOG_FILTER_CMDID,
+       WMI_PDEV_SET_RAP_CONFIG_CMDID,
+       WMI_PDEV_DSM_FILTER_CMDID,
+       WMI_PDEV_FRAME_INJECT_CMDID,
+       WMI_PDEV_TBTT_OFFSET_SYNC_CMDID,
+       WMI_PDEV_SET_SRG_BSS_COLOR_BITMAP_CMDID,
+       WMI_PDEV_SET_SRG_PARTIAL_BSSID_BITMAP_CMDID,
+       WMI_PDEV_SET_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID,
+       WMI_PDEV_SET_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID,
+       WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID,
+       WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID,
        WMI_VDEV_CREATE_CMDID = WMI_TLV_CMD(WMI_GRP_VDEV),
        WMI_VDEV_DELETE_CMDID,
        WMI_VDEV_START_REQUEST_CMDID,
@@ -919,6 +929,9 @@ enum wmi_tlv_pdev_param {
        WMI_PDEV_PARAM_RADIO_CHAN_STATS_ENABLE,
        WMI_PDEV_PARAM_RADIO_DIAGNOSIS_ENABLE,
        WMI_PDEV_PARAM_MESH_MCAST_ENABLE,
+       WMI_PDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD = 0xbc,
+       WMI_PDEV_PARAM_SET_CMD_OBSS_PD_PER_AC = 0xbe,
+       WMI_PDEV_PARAM_ENABLE_SR_PROHIBIT = 0xc6,
 };
 
 enum wmi_tlv_vdev_param {
@@ -1812,10 +1825,15 @@ enum wmi_tlv_tag {
        WMI_TAG_NDP_CHANNEL_INFO,
        WMI_TAG_NDP_CMD,
        WMI_TAG_NDP_EVENT,
-       /* TODO add all the missing cmds */
        WMI_TAG_PDEV_PEER_PKTLOG_FILTER_CMD = 0x301,
        WMI_TAG_PDEV_PEER_PKTLOG_FILTER_INFO,
        WMI_TAG_FILS_DISCOVERY_TMPL_CMD = 0x344,
+       WMI_TAG_PDEV_SRG_BSS_COLOR_BITMAP_CMD = 0x37b,
+       WMI_TAG_PDEV_SRG_PARTIAL_BSSID_BITMAP_CMD,
+       WMI_TAG_PDEV_SRG_OBSS_COLOR_ENABLE_BITMAP_CMD = 0x381,
+       WMI_TAG_PDEV_SRG_OBSS_BSSID_ENABLE_BITMAP_CMD,
+       WMI_TAG_PDEV_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMD,
+       WMI_TAG_PDEV_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMD,
        WMI_TAG_MAX
 };
 
@@ -2039,6 +2057,7 @@ enum wmi_tlv_service {
        WMI_TLV_SERVICE_PER_PEER_HTT_STATS_RESET = 213,
        WMI_TLV_SERVICE_FREQINFO_IN_METADATA = 219,
        WMI_TLV_SERVICE_EXT2_MSG = 220,
+       WMI_TLV_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT = 249,
 
        WMI_MAX_EXT_SERVICE
 };
@@ -4781,6 +4800,12 @@ struct wmi_obss_spatial_reuse_params_cmd {
        u32 vdev_id;
 } __packed;
 
+struct wmi_pdev_obss_pd_bitmap_cmd {
+       u32 tlv_header;
+       u32 pdev_id;
+       u32 bitmap[2];
+} __packed;
+
 #define ATH11K_BSS_COLOR_COLLISION_SCAN_PERIOD_MS              200
 #define ATH11K_OBSS_COLOR_COLLISION_DETECTION_DISABLE          0
 #define ATH11K_OBSS_COLOR_COLLISION_DETECTION                  1
@@ -5316,6 +5341,16 @@ int ath11k_wmi_send_twt_enable_cmd(struct ath11k *ar, u32 pdev_id);
 int ath11k_wmi_send_twt_disable_cmd(struct ath11k *ar, u32 pdev_id);
 int ath11k_wmi_send_obss_spr_cmd(struct ath11k *ar, u32 vdev_id,
                                 struct ieee80211_he_obss_pd *he_obss_pd);
+int ath11k_wmi_pdev_set_srg_bss_color_bitmap(struct ath11k *ar, u32 *bitmap);
+int ath11k_wmi_pdev_set_srg_patial_bssid_bitmap(struct ath11k *ar, u32 *bitmap);
+int ath11k_wmi_pdev_srg_obss_color_enable_bitmap(struct ath11k *ar,
+                                                u32 *bitmap);
+int ath11k_wmi_pdev_srg_obss_bssid_enable_bitmap(struct ath11k *ar,
+                                                u32 *bitmap);
+int ath11k_wmi_pdev_non_srg_obss_color_enable_bitmap(struct ath11k *ar,
+                                                    u32 *bitmap);
+int ath11k_wmi_pdev_non_srg_obss_bssid_enable_bitmap(struct ath11k *ar,
+                                                    u32 *bitmap);
 int ath11k_wmi_send_obss_color_collision_cfg_cmd(struct ath11k *ar, u32 vdev_id,
                                                 u8 bss_color, u32 period,
                                                 bool enable);