From 2d6af44647458c27ae5feb748347f40898acad4c Mon Sep 17 00:00:00 2001 From: Shiva Krishna Pittala Date: Thu, 16 Apr 2020 18:53:59 +0530 Subject: [PATCH] qcacmn: Add WMI support to configure SRG BSS color and BSSID bitmaps To be able to configure SRG BSS Color Bitmap and SRG Partial BSSID Bitmaps, add the required WMI support. CRs-Fixed: 2665817 Change-Id: I141abe24dd34cab92f45b230b385500902d01416 --- wmi/inc/wmi_unified_api.h | 27 +++++++++ wmi/inc/wmi_unified_priv.h | 8 +++ wmi/src/wmi_unified_api.c | 22 ++++++++ wmi/src/wmi_unified_tlv.c | 113 +++++++++++++++++++++++++++++++++++++ 4 files changed, 170 insertions(+) diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index a1608c98d1..182603b598 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -3688,6 +3688,33 @@ QDF_STATUS wmi_unified_send_obss_spatial_reuse_set_def_thresh_cmd( wmi_unified_t wmi_handle, struct wmi_host_obss_spatial_reuse_set_def_thresh *thresh); +/** + * wmi_unified_send_self_srg_bss_color_bitmap_set_cmd() - Send 64-bit BSS color + * bitmap to be used by SRG based Spatial Reuse feature + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSS color bitmap + * @bitmap_1: upper 32 bits in BSS color bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_send_self_srg_bss_color_bitmap_set_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +/** + * wmi_unified_send_self_srg_partial_bssid_bitmap_set_cmd() - Send 64-bit + * partial BSSID bitmap to be used by SRG based Spatial Reuse feature + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in partial BSSID bitmap + * @bitmap_1: upper 32 bits in partial BSSID bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_send_self_srg_partial_bssid_bitmap_set_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); #endif /* OBSS_PD */ /** diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index f505ca9b39..b63f7b1f6b 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2142,6 +2142,14 @@ QDF_STATUS (*send_obss_spatial_reuse_set)(wmi_unified_t wmi_handle, QDF_STATUS (*send_obss_spatial_reuse_set_def_thresh)(wmi_unified_t wmi_handle, struct wmi_host_obss_spatial_reuse_set_def_thresh *obss_spatial_reuse_param); + +QDF_STATUS (*send_self_srg_bss_color_bitmap_set)( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +QDF_STATUS (*send_self_srg_partial_bssid_bitmap_set)( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); #endif QDF_STATUS diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 197fb3bb35..d7dc144e67 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -2973,6 +2973,28 @@ wmi_unified_send_obss_spatial_reuse_set_def_thresh_cmd( return QDF_STATUS_E_FAILURE; } + +QDF_STATUS wmi_unified_send_self_srg_bss_color_bitmap_set_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + if (wmi_handle->ops->send_self_srg_bss_color_bitmap_set) + return wmi_handle->ops->send_self_srg_bss_color_bitmap_set( + wmi_handle, bitmap_0, bitmap_1, pdev_id); + + return QDF_STATUS_E_FAILURE; +} + +QDF_STATUS wmi_unified_send_self_srg_partial_bssid_bitmap_set_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + if (wmi_handle->ops->send_self_srg_partial_bssid_bitmap_set) + return wmi_handle->ops->send_self_srg_partial_bssid_bitmap_set( + wmi_handle, bitmap_0, bitmap_1, pdev_id); + + return QDF_STATUS_E_FAILURE; +} #endif QDF_STATUS wmi_convert_pdev_id_host_to_target(wmi_unified_t wmi_handle, diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 27d6e09255..5c49dade8c 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -8510,6 +8510,115 @@ QDF_STATUS send_obss_spatial_reuse_set_cmd_tlv(wmi_unified_t wmi_handle, return ret; } + +/** + * send_self_srg_bss_color_bitmap_set_cmd_tlv() - Send 64-bit BSS color bitmap + * to be used by SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSS color bitmap + * @bitmap_1: upper 32 bits in BSS color bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_srg_bss_color_bitmap_set_cmd_tlv( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + wmi_buf_t buf; + wmi_pdev_srg_bss_color_bitmap_cmd_fixed_param *cmd; + QDF_STATUS ret; + uint32_t len; + + len = sizeof(*cmd); + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) + return QDF_STATUS_E_FAILURE; + + cmd = (wmi_pdev_srg_bss_color_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_srg_bss_color_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_srg_bss_color_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + cmd->srg_bss_color_bitmap[0] = bitmap_0; + cmd->srg_bss_color_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_SRG_BSS_COLOR_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_SRG_BSS_COLOR_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} + +/** + * send_self_srg_partial_bssid_bitmap_set_cmd_tlv() - Send 64-bit partial BSSID + * bitmap to be used by SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in partial BSSID bitmap + * @bitmap_1: upper 32 bits in partial BSSID bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_srg_partial_bssid_bitmap_set_cmd_tlv( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + wmi_buf_t buf; + wmi_pdev_srg_partial_bssid_bitmap_cmd_fixed_param *cmd; + QDF_STATUS ret; + uint32_t len; + + len = sizeof(*cmd); + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) + return QDF_STATUS_E_FAILURE; + + cmd = (wmi_pdev_srg_partial_bssid_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_srg_partial_bssid_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_srg_partial_bssid_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + + cmd->srg_partial_bssid_bitmap[0] = bitmap_0; + cmd->srg_partial_bssid_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_SRG_PARTIAL_BSSID_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_SRG_PARTIAL_BSSID_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} #endif static @@ -13797,6 +13906,10 @@ struct wmi_ops tlv_ops = { .send_obss_spatial_reuse_set = send_obss_spatial_reuse_set_cmd_tlv, .send_obss_spatial_reuse_set_def_thresh = send_obss_spatial_reuse_set_def_thresh_cmd_tlv, + .send_self_srg_bss_color_bitmap_set = + send_self_srg_bss_color_bitmap_set_cmd_tlv, + .send_self_srg_partial_bssid_bitmap_set = + send_self_srg_partial_bssid_bitmap_set_cmd_tlv, #endif .extract_offload_bcn_tx_status_evt = extract_offload_bcn_tx_status_evt, .extract_ctl_failsafe_check_ev_param =