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 =