From fecd279894611560083bb2b58c89a1c767acf964 Mon Sep 17 00:00:00 2001 From: Shiva Krishna Pittala Date: Fri, 8 May 2020 22:10:53 +0530 Subject: [PATCH] qcacmn: Add WMI support for Spatial Reuse commands and service ready bit In order to enable/disable the OBSSes whose transmission can be treated as SR opportunity for SRG and Non-SRG based Spatial Reuse, add the required WMI support. Also, add the Host abstractions for the following - WMI_VDEV_PARAM_ENABLE_SRP - WMI_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT CRs-Fixed: 2684157 Change-Id: Ib3e919766436ca4d4e7f9242b642ba309dbf9a47 --- wmi/inc/wmi_unified_api.h | 58 +++++++++ wmi/inc/wmi_unified_param.h | 2 + wmi/inc/wmi_unified_priv.h | 16 +++ wmi/src/wmi_unified_api.c | 48 ++++++++ wmi/src/wmi_unified_tlv.c | 227 ++++++++++++++++++++++++++++++++++++ 5 files changed, 351 insertions(+) diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 9555af867b..97ece20e9f 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -3759,6 +3759,64 @@ QDF_STATUS wmi_unified_send_self_srg_bss_color_bitmap_set_cmd( 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); + +/** + * wmi_unified_send_self_srg_obss_color_enable_bitmap_cmd() - Send 64-bit BSS + * color enable 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 enable bitmap + * @bitmap_1: upper 32 bits in BSS color enable 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_obss_color_enable_bitmap_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +/** + * wmi_unified_send_self_srg_obss_bssid_enable_bitmap_cmd() - Send 64-bit OBSS + * BSSID enable bitmap to be used by SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSSID enable bitmap + * @bitmap_1: upper 32 bits in BSSID enable 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_obss_bssid_enable_bitmap_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +/** + * wmi_unified_send_self_non_srg_obss_color_enable_bitmap_cmd() - Send 64-bit + * BSS color enable bitmap to be used by Non-SRG based Spatial Reuse + * feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSS color enable bitmap + * @bitmap_1: upper 32 bits in BSS color enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_send_self_non_srg_obss_color_enable_bitmap_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +/** + * wmi_unified_send_self_non_srg_obss_bssid_enable_bitmap_cmd() - Send 64-bit + * OBSS BSSID enable bitmap to be used by Non-SRG based Spatial Reuse + * feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSSID enable bitmap + * @bitmap_1: upper 32 bits in BSSID enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_send_self_non_srg_obss_bssid_enable_bitmap_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_param.h b/wmi/inc/wmi_unified_param.h index c27a2696bb..ce27d2b799 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -5007,6 +5007,7 @@ typedef enum { wmi_vdev_param_enable_disable_roam_reason_vsie, wmi_vdev_param_set_cmd_obss_pd_threshold, wmi_vdev_param_set_cmd_obss_pd_per_ac, + wmi_vdev_param_enable_srp, } wmi_conv_vdev_param_id; /** @@ -5222,6 +5223,7 @@ typedef enum { wmi_service_host_scan_stop_vdev_all, wmi_service_ema_ap_support, wmi_support_extend_address, + wmi_service_srg_srp_spatial_reuse_support, wmi_services_max, } wmi_conv_service_ids; #define WMI_SERVICE_UNAVAILABLE 0xFFFF diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 07860f100d..4fc3b6437e 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2169,6 +2169,22 @@ QDF_STATUS (*send_self_srg_bss_color_bitmap_set)( 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); + +QDF_STATUS (*send_self_srg_obss_color_enable_bitmap)( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +QDF_STATUS (*send_self_srg_obss_bssid_enable_bitmap)( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +QDF_STATUS (*send_self_non_srg_obss_color_enable_bitmap)( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id); + +QDF_STATUS (*send_self_non_srg_obss_bssid_enable_bitmap)( + 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 181bc259f5..4f79c57393 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -3036,6 +3036,54 @@ QDF_STATUS wmi_unified_send_self_srg_partial_bssid_bitmap_set_cmd( return QDF_STATUS_E_FAILURE; } + +QDF_STATUS wmi_unified_send_self_srg_obss_color_enable_bitmap_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_obss_color_enable_bitmap) + return wmi_handle->ops-> + send_self_srg_obss_color_enable_bitmap( + wmi_handle, bitmap_0, bitmap_1, pdev_id); + + return QDF_STATUS_E_FAILURE; +} + +QDF_STATUS wmi_unified_send_self_srg_obss_bssid_enable_bitmap_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_obss_bssid_enable_bitmap) + return wmi_handle->ops-> + send_self_srg_obss_bssid_enable_bitmap( + wmi_handle, bitmap_0, bitmap_1, pdev_id); + + return QDF_STATUS_E_FAILURE; +} + +QDF_STATUS wmi_unified_send_self_non_srg_obss_color_enable_bitmap_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + if (wmi_handle->ops->send_self_non_srg_obss_color_enable_bitmap) + return wmi_handle->ops-> + send_self_non_srg_obss_color_enable_bitmap( + wmi_handle, bitmap_0, bitmap_1, pdev_id); + + return QDF_STATUS_E_FAILURE; +} + +QDF_STATUS wmi_unified_send_self_non_srg_obss_bssid_enable_bitmap_cmd( + wmi_unified_t wmi_handle, uint32_t bitmap_0, + uint32_t bitmap_1, uint8_t pdev_id) +{ + if (wmi_handle->ops->send_self_non_srg_obss_bssid_enable_bitmap) + return wmi_handle->ops-> + send_self_non_srg_obss_bssid_enable_bitmap( + 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 c986fded4f..6cbc50acd2 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -491,6 +491,7 @@ static const uint32_t vdev_param_tlv[] = { WMI_VDEV_PARAM_SET_CMD_OBSS_PD_THRESHOLD, [wmi_vdev_param_set_cmd_obss_pd_per_ac] = WMI_VDEV_PARAM_SET_CMD_OBSS_PD_PER_AC, + [wmi_vdev_param_enable_srp] = WMI_VDEV_PARAM_ENABLE_SRP, }; #endif @@ -8808,6 +8809,222 @@ send_self_srg_partial_bssid_bitmap_set_cmd_tlv( return ret; } + +/** + * send_self_srg_obss_color_enable_bitmap_cmd_tlv() - Send 64-bit BSS color + * enable 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 enable bitmap + * @bitmap_1: upper 32 bits in BSS color enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_srg_obss_color_enable_bitmap_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_obss_color_enable_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_obss_color_enable_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_srg_obss_color_enable_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_srg_obss_color_enable_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + cmd->srg_obss_en_color_bitmap[0] = bitmap_0; + cmd->srg_obss_en_color_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} + +/** + * send_self_srg_obss_bssid_enable_bitmap_cmd_tlv() - Send 64-bit OBSS BSSID + * enable bitmap to be used by SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSSID enable bitmap + * @bitmap_1: upper 32 bits in BSSID enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_srg_obss_bssid_enable_bitmap_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_obss_bssid_enable_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_obss_bssid_enable_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_srg_obss_bssid_enable_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_srg_obss_bssid_enable_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + cmd->srg_obss_en_bssid_bitmap[0] = bitmap_0; + cmd->srg_obss_en_bssid_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} + +/** + * send_self_non_srg_obss_color_enable_bitmap_cmd_tlv() - Send 64-bit BSS color + * enable bitmap to be used by Non-SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSS color enable bitmap + * @bitmap_1: upper 32 bits in BSS color enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_non_srg_obss_color_enable_bitmap_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_non_srg_obss_color_enable_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_non_srg_obss_color_enable_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_non_srg_obss_color_enable_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_non_srg_obss_color_enable_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + cmd->non_srg_obss_en_color_bitmap[0] = bitmap_0; + cmd->non_srg_obss_en_color_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} + +/** + * send_self_non_srg_obss_bssid_enable_bitmap_cmd_tlv() - Send 64-bit OBSS BSSID + * enable bitmap to be used by Non-SRG based Spatial Reuse feature to the FW + * @wmi_handle: wmi handle + * @bitmap_0: lower 32 bits in BSSID enable bitmap + * @bitmap_1: upper 32 bits in BSSID enable bitmap + * @pdev_id: pdev ID + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +static QDF_STATUS +send_self_non_srg_obss_bssid_enable_bitmap_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_non_srg_obss_bssid_enable_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_non_srg_obss_bssid_enable_bitmap_cmd_fixed_param *) + wmi_buf_data(buf); + + WMITLV_SET_HDR( + &cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_pdev_non_srg_obss_bssid_enable_bitmap_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_pdev_non_srg_obss_bssid_enable_bitmap_cmd_fixed_param)); + + cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target( + wmi_handle, pdev_id); + cmd->non_srg_obss_en_bssid_bitmap[0] = bitmap_0; + cmd->non_srg_obss_en_bssid_bitmap[1] = bitmap_1; + + ret = wmi_unified_cmd_send( + wmi_handle, buf, len, + WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID); + + if (QDF_IS_STATUS_ERROR(ret)) { + WMI_LOGE( + "WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID send returned Error %d", + ret); + wmi_buf_free(buf); + } + + return ret; +} #endif static @@ -14107,6 +14324,14 @@ struct wmi_ops tlv_ops = { 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, + .send_self_srg_obss_color_enable_bitmap = + send_self_srg_obss_color_enable_bitmap_cmd_tlv, + .send_self_srg_obss_bssid_enable_bitmap = + send_self_srg_obss_bssid_enable_bitmap_cmd_tlv, + .send_self_non_srg_obss_color_enable_bitmap = + send_self_non_srg_obss_color_enable_bitmap_cmd_tlv, + .send_self_non_srg_obss_bssid_enable_bitmap = + send_self_non_srg_obss_bssid_enable_bitmap_cmd_tlv, #endif .extract_offload_bcn_tx_status_evt = extract_offload_bcn_tx_status_evt, .extract_ctl_failsafe_check_ev_param = @@ -14814,6 +15039,8 @@ static void populate_tlv_service(uint32_t *wmi_service) WMI_SERVICE_HOST_SCAN_STOP_VDEV_ALL_SUPPORT; wmi_service[wmi_support_extend_address] = WMI_SERVICE_SUPPORT_EXTEND_ADDRESS; + wmi_service[wmi_service_srg_srp_spatial_reuse_support] = + WMI_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT; } /**