diff options
Diffstat (limited to 'package/kernel/mac80211/patches/303-ath10k-enable-adaptive-CCA.patch')
-rw-r--r-- | package/kernel/mac80211/patches/303-ath10k-enable-adaptive-CCA.patch | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/package/kernel/mac80211/patches/303-ath10k-enable-adaptive-CCA.patch b/package/kernel/mac80211/patches/303-ath10k-enable-adaptive-CCA.patch deleted file mode 100644 index dea65bb..0000000 --- a/package/kernel/mac80211/patches/303-ath10k-enable-adaptive-CCA.patch +++ /dev/null @@ -1,239 +0,0 @@ -From: Maharaja <c_mkenna@qti.qualcomm.com> -Date: Wed, 21 Oct 2015 11:49:18 +0300 -Subject: [PATCH] ath10k: enable adaptive CCA - -European Union has made it mandatory that all devices working in 2.4 GHz -has to adhere to the ETSI specification (ETSI EN 300 328 V1.9.1) -beginnig this year. The standard basically speaks about interferences -in 2.4Ghz band. -For example, when 802.11 device detects interference, TX must be stopped -as long as interference is present. - -Adaptive CCA is a feature, when enabled the device learns from the -environment and configures CCA levels adaptively. This will improve -detecting interferences and the device can stop trasmissions till the -interference is present eventually leading to good performances in -varying interference conditions. - -The patch includes code for enabling adaptive CCA for 10.2.4 firmware on -QCA988X. - -Signed-off-by: Maharaja <c_mkenna@qti.qualcomm.com> -Signed-off-by: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com> -Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> ---- - ---- a/drivers/net/wireless/ath/ath10k/core.c -+++ b/drivers/net/wireless/ath/ath10k/core.c -@@ -151,6 +151,7 @@ static const char *const ath10k_core_fw_ - [ATH10K_FW_FEATURE_NO_NWIFI_DECAP_4ADDR_PADDING] = "no-4addr-pad", - [ATH10K_FW_FEATURE_SUPPORTS_SKIP_CLOCK_INIT] = "skip-clock-init", - [ATH10K_FW_FEATURE_RAW_MODE_SUPPORT] = "raw-mode", -+ [ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA] = "adaptive-cca", - }; - - static unsigned int ath10k_core_get_fw_feature_str(char *buf, ---- a/drivers/net/wireless/ath/ath10k/core.h -+++ b/drivers/net/wireless/ath/ath10k/core.h -@@ -497,6 +497,9 @@ enum ath10k_fw_features { - */ - ATH10K_FW_FEATURE_RAW_MODE_SUPPORT = 10, - -+ /* Firmware Supports Adaptive CCA*/ -+ ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA = 11, -+ - /* keep last */ - ATH10K_FW_FEATURE_COUNT, - }; ---- a/drivers/net/wireless/ath/ath10k/mac.c -+++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -3905,6 +3905,18 @@ static int ath10k_start(struct ieee80211 - goto err_core_stop; - } - -+ if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA, -+ ar->fw_features)) { -+ ret = ath10k_wmi_pdev_enable_adaptive_cca(ar, 1, -+ WMI_CCA_DETECT_LEVEL_AUTO, -+ WMI_CCA_DETECT_MARGIN_AUTO); -+ if (ret) { -+ ath10k_warn(ar, "failed to enable adaptive cca: %d\n", -+ ret); -+ goto err_core_stop; -+ } -+ } -+ - ret = ath10k_wmi_pdev_set_param(ar, - ar->wmi.pdev_param->ani_enable, 1); - if (ret) { ---- a/drivers/net/wireless/ath/ath10k/wmi-ops.h -+++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h -@@ -182,6 +182,10 @@ struct wmi_ops { - void (*fw_stats_fill)(struct ath10k *ar, - struct ath10k_fw_stats *fw_stats, - char *buf); -+ struct sk_buff *(*gen_pdev_enable_adaptive_cca)(struct ath10k *ar, -+ u8 enable, -+ u32 detect_level, -+ u32 detect_margin); - }; - - int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); -@@ -1302,4 +1306,25 @@ ath10k_wmi_fw_stats_fill(struct ath10k * - ar->wmi.ops->fw_stats_fill(ar, fw_stats, buf); - return 0; - } -+ -+static inline int -+ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable, -+ u32 detect_level, u32 detect_margin) -+{ -+ struct sk_buff *skb; -+ -+ if (!ar->wmi.ops->gen_pdev_enable_adaptive_cca) -+ return -EOPNOTSUPP; -+ -+ skb = ar->wmi.ops->gen_pdev_enable_adaptive_cca(ar, enable, -+ detect_level, -+ detect_margin); -+ -+ if (IS_ERR(skb)) -+ return PTR_ERR(skb); -+ -+ return ath10k_wmi_cmd_send(ar, skb, -+ ar->wmi.cmd->pdev_enable_adaptive_cca_cmdid); -+} -+ - #endif ---- a/drivers/net/wireless/ath/ath10k/wmi.c -+++ b/drivers/net/wireless/ath/ath10k/wmi.c -@@ -148,6 +148,7 @@ static struct wmi_cmd_map wmi_cmd_map = - .gpio_config_cmdid = WMI_GPIO_CONFIG_CMDID, - .gpio_output_cmdid = WMI_GPIO_OUTPUT_CMDID, - .pdev_get_temperature_cmdid = WMI_CMD_UNSUPPORTED, -+ .pdev_enable_adaptive_cca_cmdid = WMI_CMD_UNSUPPORTED, - .scan_update_request_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_standby_response_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_resume_response_cmdid = WMI_CMD_UNSUPPORTED, -@@ -313,6 +314,7 @@ static struct wmi_cmd_map wmi_10x_cmd_ma - .gpio_config_cmdid = WMI_10X_GPIO_CONFIG_CMDID, - .gpio_output_cmdid = WMI_10X_GPIO_OUTPUT_CMDID, - .pdev_get_temperature_cmdid = WMI_CMD_UNSUPPORTED, -+ .pdev_enable_adaptive_cca_cmdid = WMI_CMD_UNSUPPORTED, - .scan_update_request_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_standby_response_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_resume_response_cmdid = WMI_CMD_UNSUPPORTED, -@@ -477,6 +479,7 @@ static struct wmi_cmd_map wmi_10_2_4_cmd - .gpio_config_cmdid = WMI_10_2_GPIO_CONFIG_CMDID, - .gpio_output_cmdid = WMI_10_2_GPIO_OUTPUT_CMDID, - .pdev_get_temperature_cmdid = WMI_10_2_PDEV_GET_TEMPERATURE_CMDID, -+ .pdev_enable_adaptive_cca_cmdid = WMI_10_2_SET_CCA_PARAMS, - .scan_update_request_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_standby_response_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_resume_response_cmdid = WMI_CMD_UNSUPPORTED, -@@ -1407,6 +1410,7 @@ static struct wmi_cmd_map wmi_10_2_cmd_m - .gpio_config_cmdid = WMI_10_2_GPIO_CONFIG_CMDID, - .gpio_output_cmdid = WMI_10_2_GPIO_OUTPUT_CMDID, - .pdev_get_temperature_cmdid = WMI_CMD_UNSUPPORTED, -+ .pdev_enable_adaptive_cca_cmdid = WMI_CMD_UNSUPPORTED, - .scan_update_request_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_standby_response_cmdid = WMI_CMD_UNSUPPORTED, - .vdev_resume_response_cmdid = WMI_CMD_UNSUPPORTED, -@@ -6996,6 +7000,28 @@ unlock: - buf[len] = 0; - } - -+static struct sk_buff * -+ath10k_wmi_op_gen_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable, -+ u32 detect_level, u32 detect_margin) -+{ -+ struct wmi_pdev_set_adaptive_cca_params *cmd; -+ struct sk_buff *skb; -+ -+ skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); -+ if (!skb) -+ return ERR_PTR(-ENOMEM); -+ -+ cmd = (struct wmi_pdev_set_adaptive_cca_params *)skb->data; -+ cmd->enable = __cpu_to_le32(enable); -+ cmd->cca_detect_level = __cpu_to_le32(detect_level); -+ cmd->cca_detect_margin = __cpu_to_le32(detect_margin); -+ -+ ath10k_dbg(ar, ATH10K_DBG_WMI, -+ "wmi pdev set adaptive cca params enable:%d detection level:%d detection margin:%d\n", -+ enable, detect_level, detect_margin); -+ return skb; -+} -+ - static const struct wmi_ops wmi_ops = { - .rx = ath10k_wmi_op_rx, - .map_svc = wmi_main_svc_map, -@@ -7059,6 +7085,7 @@ static const struct wmi_ops wmi_ops = { - /* .gen_prb_tmpl not implemented */ - /* .gen_p2p_go_bcn_ie not implemented */ - /* .gen_adaptive_qcs not implemented */ -+ /* .gen_pdev_enable_adaptive_cca not implemented */ - }; - - static const struct wmi_ops wmi_10_1_ops = { -@@ -7125,6 +7152,7 @@ static const struct wmi_ops wmi_10_1_ops - /* .gen_prb_tmpl not implemented */ - /* .gen_p2p_go_bcn_ie not implemented */ - /* .gen_adaptive_qcs not implemented */ -+ /* .gen_pdev_enable_adaptive_cca not implemented */ - }; - - static const struct wmi_ops wmi_10_2_ops = { -@@ -7188,6 +7216,7 @@ static const struct wmi_ops wmi_10_2_ops - .gen_addba_set_resp = ath10k_wmi_op_gen_addba_set_resp, - .gen_delba_send = ath10k_wmi_op_gen_delba_send, - .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, -+ /* .gen_pdev_enable_adaptive_cca not implemented */ - }; - - static const struct wmi_ops wmi_10_2_4_ops = { -@@ -7251,6 +7280,8 @@ static const struct wmi_ops wmi_10_2_4_o - .gen_delba_send = ath10k_wmi_op_gen_delba_send, - .gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config, - .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, -+ .gen_pdev_enable_adaptive_cca = -+ ath10k_wmi_op_gen_pdev_enable_adaptive_cca, - /* .gen_bcn_tmpl not implemented */ - /* .gen_prb_tmpl not implemented */ - /* .gen_p2p_go_bcn_ie not implemented */ ---- a/drivers/net/wireless/ath/ath10k/wmi.h -+++ b/drivers/net/wireless/ath/ath10k/wmi.h -@@ -772,6 +772,7 @@ struct wmi_cmd_map { - u32 mu_cal_start_cmdid; - u32 set_cca_params_cmdid; - u32 pdev_bss_chan_info_request_cmdid; -+ u32 pdev_enable_adaptive_cca_cmdid; - }; - - /* -@@ -1381,6 +1382,9 @@ enum wmi_10_2_cmd_id { - WMI_10_2_VDEV_ATF_REQUEST_CMDID, - WMI_10_2_PEER_ATF_REQUEST_CMDID, - WMI_10_2_PDEV_GET_TEMPERATURE_CMDID, -+ WMI_10_2_MU_CAL_START_CMDID, -+ WMI_10_2_SET_LTEU_CONFIG_CMDID, -+ WMI_10_2_SET_CCA_PARAMS, - WMI_10_2_PDEV_UTF_CMDID = WMI_10_2_END_CMDID - 1, - }; - -@@ -6094,6 +6098,15 @@ enum wmi_txbf_conf { - WMI_TXBF_CONF_AFTER_ASSOC, - }; - -+#define WMI_CCA_DETECT_LEVEL_AUTO 0 -+#define WMI_CCA_DETECT_MARGIN_AUTO 0 -+ -+struct wmi_pdev_set_adaptive_cca_params { -+ __le32 enable; -+ __le32 cca_detect_level; -+ __le32 cca_detect_margin; -+} __packed; -+ - struct ath10k; - struct ath10k_vif; - struct ath10k_fw_stats_pdev; |