summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmar Singhal <asinghal@qca.qualcomm.com>2015-07-29 17:40:17 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-07-30 15:33:10 +0530
commitb0396ba9eae4e8aedb8787be8a98ba54820e917f (patch)
treeb86eb43d3dde03ef107b7190d03a7300bf9014e9
parentf5d87f136909ea3576eb5212c89a18fd272d3fb0 (diff)
qcacld-2.0: Send CCK chain mask before wiphy registration
Send CCK chain mask before wiphy registration to WMA. During wiphy registration, there is regulatory callback and the regdomain/CTL info is sent during that time to firmware. Therefore send CCK chain mask to WMA before that. Change-Id: I6fc9c5951ce1b0b37aab42f9a80cf711006f828a CRs-Fixed: 881894
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h2
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c9
-rw-r--r--CORE/SERVICES/COMMON/wma_api.h1
-rw-r--r--CORE/SERVICES/WMA/regdomain.c10
-rw-r--r--CORE/SERVICES/WMA/regdomain.h5
-rw-r--r--CORE/SERVICES/WMA/wma.c12
-rw-r--r--CORE/SERVICES/WMA/wma.h8
-rw-r--r--CORE/VOSS/src/vos_nvitem.c6
8 files changed, 25 insertions, 28 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 985132215b10..f63749633374 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -3002,7 +3002,7 @@ enum dot11p_mode {
#define CFG_TX_CHAIN_MASK_1SS "gTxChainMask1ss"
#define CFG_TX_CHAIN_MASK_1SS_MIN (0)
#define CFG_TX_CHAIN_MASK_1SS_MAX (3)
-#define CFG_TX_CHAIN_MASK_1SS_DEFAULT (0)
+#define CFG_TX_CHAIN_MASK_1SS_DEFAULT (1)
/*
* fine timing measurement capability information
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 9ef368a272c2..8712097f7ead 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -11799,15 +11799,6 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
goto err_wiphy_unregister;
}
- ret = process_wma_set_command(0, GEN_PARAM_TX_CHAIN_MASK_CCK,
- pHddCtx->cfg_ini->tx_chain_mask_cck,
- GEN_CMD);
- if (0 != ret) {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: set GEN_PARAM_TX_CHAIN_MASK_CCK failed %d",
- __func__, ret);
- }
-
ret = process_wma_set_command(0, WMI_PDEV_PARAM_TX_CHAIN_MASK_1SS,
pHddCtx->cfg_ini->tx_chain_mask_1ss,
PDEV_CMD);
diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h
index c95f6c4c1b0f..48cd36b58170 100644
--- a/CORE/SERVICES/COMMON/wma_api.h
+++ b/CORE/SERVICES/COMMON/wma_api.h
@@ -79,7 +79,6 @@ typedef enum {
GEN_PARAM_MODULATED_DTIM,
GEN_PARAM_CAPTURE_TSF,
GEN_PARAM_RESET_TSF_GPIO,
- GEN_PARAM_TX_CHAIN_MASK_CCK
} GEN_PARAM;
#define VDEV_CMD 1
diff --git a/CORE/SERVICES/WMA/regdomain.c b/CORE/SERVICES/WMA/regdomain.c
index 0e2318860a71..255c657e855b 100644
--- a/CORE/SERVICES/WMA/regdomain.c
+++ b/CORE/SERVICES/WMA/regdomain.c
@@ -462,7 +462,7 @@ u_int32_t regdmn_getwmodesnreg(u_int32_t modesAvail,
}
void regdmn_get_ctl_info(struct regulatory *reg, u_int32_t modesAvail,
- u_int32_t modeSelect)
+ u_int32_t modeSelect, bool cck_chain_mask)
{
const REG_DOMAIN *regdomain2G = NULL;
const REG_DOMAIN *regdomain5G = NULL;
@@ -558,7 +558,8 @@ void regdmn_get_ctl_info(struct regulatory *reg, u_int32_t modesAvail,
reg->ctl_2g = ctl_2g;
wma_send_regdomain_info(reg->reg_domain, regpair->regDmn2GHz,
- regpair->regDmn5GHz, ctl_2g, ctl_5g);
+ regpair->regDmn5GHz, ctl_2g, ctl_5g,
+ cck_chain_mask);
}
/* regdmn_set_dfs_region() - to set the dfs region to wma
@@ -581,7 +582,7 @@ void regdmn_set_dfs_region(struct regulatory *reg)
wma_set_dfs_regdomain(wma, reg->dfs_region);
}
-void regdmn_set_regval(struct regulatory *reg)
+void regdmn_set_regval(struct regulatory *reg, bool cck_chain_mask)
{
void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context);
@@ -594,7 +595,8 @@ void regdmn_set_regval(struct regulatory *reg)
wma_get_modeselect(wma, &modeSelect);
- regdmn_get_ctl_info(reg, wma->reg_cap.wireless_modes, modeSelect);
+ regdmn_get_ctl_info(reg, wma->reg_cap.wireless_modes, modeSelect,
+ cck_chain_mask);
return;
}
diff --git a/CORE/SERVICES/WMA/regdomain.h b/CORE/SERVICES/WMA/regdomain.h
index 072d5564157a..472da7d666f3 100644
--- a/CORE/SERVICES/WMA/regdomain.h
+++ b/CORE/SERVICES/WMA/regdomain.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1094,7 +1094,8 @@ enum CountryCode {
CTRY_BELGIUM2 = 5002 /* Belgium/Cisco implementation */
};
int32_t regdmn_get_country_alpha2(struct regulatory *reg);
-void regdmn_set_regval(struct regulatory *reg);
+void regdmn_set_regval(struct regulatory *reg,
+ bool cck_chain_mask);
int32_t regdmn_find_ctry_by_name(u_int8_t *alpha2);
void regdmn_set_dfs_region(struct regulatory *reg);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 87c5863b17f3..ac0a8400fc67 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -12704,9 +12704,6 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
case GEN_PARAM_MODULATED_DTIM:
wma_set_modulated_dtim(wma, privcmd);
break;
- case GEN_PARAM_TX_CHAIN_MASK_CCK:
- wma->tx_chain_mask_cck = privcmd->param_value;
- break;
default:
WMA_LOGE("Invalid param id 0x%x", privcmd->param_id);
break;
@@ -29741,7 +29738,8 @@ tANI_U8 wma_getFwWlanFeatCaps(tANI_U8 featEnumValue)
}
void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
- u_int16_t regdmn5G, int8_t ctl2G, int8_t ctl5G)
+ u_int16_t regdmn5G, int8_t ctl2G, int8_t ctl5G,
+ bool cck_chain_mask)
{
wmi_buf_t buf;
wmi_pdev_set_regdomain_cmd_fixed_param *cmd;
@@ -29761,6 +29759,7 @@ void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
WMA_LOGP("%s: wmi_buf_alloc failed", __func__);
return;
}
+
cmd = (wmi_pdev_set_regdomain_cmd_fixed_param *) wmi_buf_data(buf);
WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_pdev_set_regdomain_cmd_fixed_param,
@@ -29779,8 +29778,9 @@ void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
adf_nbuf_free(buf);
}
- if ((ctl2G == MKK) && (ctl5G == MKK) &&
- (true == wma->tx_chain_mask_cck))
+ if ((((reg_dmn & ~COUNTRY_ERD_FLAG) == CTRY_JAPAN) ||
+ ((reg_dmn & ~COUNTRY_ERD_FLAG) == CTRY_KOREA_ROC)) &&
+ (true == cck_chain_mask))
cck_mask_val = true;
ret = wmi_unified_pdev_set_param(wma->wmi_handle,
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 0b84c7034934..9a5a6b4a5487 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -781,7 +781,6 @@ typedef struct wma_handle {
vos_timer_t log_completion_timer;
uint32_t txrx_chainmask;
uint8_t per_band_chainmask_supp;
- bool tx_chain_mask_cck;
}t_wma_handle, *tp_wma_handle;
struct wma_target_cap {
@@ -1127,7 +1126,10 @@ extern v_BOOL_t sys_validateStaConfig(void *pImage, unsigned long cbFile,
void **ppStaConfig, v_SIZE_t *pcbStaConfig);
extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
extern void wma_send_regdomain_info(u_int32_t reg_dmn, u_int16_t regdmn2G,
- u_int16_t regdmn5G, int8_t ctl2G, int8_t ctl5G);
+ u_int16_t regdmn5G, int8_t ctl2G,
+ int8_t ctl5G,
+ bool cck_chain_mask);
+
void wma_get_modeselect(tp_wma_handle wma, u_int32_t *modeSelect);
void wma_set_dfs_regdomain(tp_wma_handle wma, uint8_t dfs_region);
@@ -1149,7 +1151,7 @@ VOS_STATUS wma_update_vdev_tbl(tp_wma_handle wma_handle, u_int8_t vdev_id,
int32_t regdmn_get_regdmn_for_country(u_int8_t *alpha2);
void regdmn_get_ctl_info(struct regulatory *reg, u_int32_t modesAvail,
- u_int32_t modeSelect);
+ u_int32_t modeSelect, bool cck_chain_mask);
/*get the ctl from regdomain*/
u_int8_t regdmn_get_ctl_for_regdmn(u_int32_t reg_dmn);
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index f2b4f59afb77..64466896af6d 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -1653,7 +1653,8 @@ int __wlan_hdd_linux_reg_notifier(struct wiphy *wiphy,
}
/* send CTL info to firmware */
- regdmn_set_regval(&pHddCtx->reg);
+ regdmn_set_regval(&pHddCtx->reg,
+ pHddCtx->cfg_ini->tx_chain_mask_cck);
/* set dfs_region info */
vos_nv_set_dfs_region(request->dfs_region);
@@ -1735,7 +1736,8 @@ VOS_STATUS vos_init_wiphy_from_eeprom(void)
init_completion(&pHddCtx->reg_init);
/* send CTL info to firmware */
- regdmn_set_regval(&pHddCtx->reg);
+ regdmn_set_regval(&pHddCtx->reg,
+ pHddCtx->cfg_ini->tx_chain_mask_cck);
return VOS_STATUS_SUCCESS;
}