qcacld-3.0: Add support for 1x1 connect with 1 Tx/Rx Chain action OUI
Add support for new 1x1 connect with 1 Tx/Rx Chain action OUI to be parsed and sent to the FW. From host during connection, the behaviour is same as existing connect 1x1 action OUI where nss is sent to 1 to the FW, but the FW takes the decision to use only one Tx/Rx chain based on the OUIs defined in the new action ID. Change-Id: Ia464209043dc73bcc71577c43b28fbe13e780c23 CRs-Fixed: 2264326
此提交包含在:
@@ -92,6 +92,7 @@ enum action_oui_id {
|
|||||||
ACTION_OUI_CCKM_1X1 = 2,
|
ACTION_OUI_CCKM_1X1 = 2,
|
||||||
ACTION_OUI_ITO_ALTERNATE = 3,
|
ACTION_OUI_ITO_ALTERNATE = 3,
|
||||||
ACTION_OUI_SWITCH_TO_11N_MODE = 4,
|
ACTION_OUI_SWITCH_TO_11N_MODE = 4,
|
||||||
|
ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN = 5,
|
||||||
ACTION_OUI_MAXIMUM_ID
|
ACTION_OUI_MAXIMUM_ID
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -13795,6 +13795,50 @@ enum hdd_external_acs_policy {
|
|||||||
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME "gActionOUISwitchTo11nMode"
|
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME "gActionOUISwitchTo11nMode"
|
||||||
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT "00904C 03 0418BF E0 21 40"
|
#define CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT "00904C 03 0418BF E0 21 40"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <ini>
|
||||||
|
* gActionOUIConnect1x1with1TxRxChain - Used to specify action OUIs for
|
||||||
|
* 1x1 connection with one Tx/Rx Chain
|
||||||
|
* @Default:
|
||||||
|
* Note: User should strictly add new action OUIs at the end of this
|
||||||
|
* default value.
|
||||||
|
*
|
||||||
|
* Default OUIs: (All values in Hex)
|
||||||
|
* OUI 1 : 001018
|
||||||
|
* OUI data Len : 06
|
||||||
|
* OUI Data : 02FFF0040000
|
||||||
|
* OUI data Mask: BC - 10111100
|
||||||
|
* Info Mask : 21 - Check for Band
|
||||||
|
* Capabilities: 40 - Band == 2G
|
||||||
|
*
|
||||||
|
* OUI 2 : 001018
|
||||||
|
* OUI data Len : 06
|
||||||
|
* OUI Data : 02FFF0050000
|
||||||
|
* OUI data Mask: BC - 10111100
|
||||||
|
* Info Mask : 21 - Check for Band
|
||||||
|
* Capabilities: 40 - Band == 2G
|
||||||
|
*
|
||||||
|
* OUI 3 : 001018
|
||||||
|
* OUI data Len : 06
|
||||||
|
* OUI Data : 02FFF4050000
|
||||||
|
* OUI data Mask: BC - 10111100
|
||||||
|
* Info Mask : 21 - Check for Band
|
||||||
|
* Capabilities: 40 - Band == 2G
|
||||||
|
*
|
||||||
|
* This ini is used to specify the AP OUIs with which only 1x1 connection
|
||||||
|
* with one Tx/Rx Chain is allowed.
|
||||||
|
*
|
||||||
|
* Related: gEnableActionOUI
|
||||||
|
*
|
||||||
|
* Supported Feature: Action OUIs
|
||||||
|
*
|
||||||
|
* Usage: External
|
||||||
|
*
|
||||||
|
* </ini>
|
||||||
|
*/
|
||||||
|
#define CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME "gActionOUIConnect1x1with1TxRxChain"
|
||||||
|
#define CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_DEFAULT "001018 06 02FFF0040000 BC 21 40 001018 06 02FFF0050000 BC 21 40 001018 06 02FFF4050000 BC 21 40"
|
||||||
|
|
||||||
/* End of action oui inis */
|
/* End of action oui inis */
|
||||||
|
|
||||||
|
|
||||||
|
@@ -4632,6 +4632,13 @@ struct reg_table_entry g_registry_table[] = {
|
|||||||
VAR_FLAGS_OPTIONAL,
|
VAR_FLAGS_OPTIONAL,
|
||||||
(void *)CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT),
|
(void *)CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT),
|
||||||
|
|
||||||
|
REG_VARIABLE_STRING(CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME,
|
||||||
|
WLAN_PARAM_String,
|
||||||
|
struct hdd_config, action_oui_str[5],
|
||||||
|
VAR_FLAGS_OPTIONAL,
|
||||||
|
(void *)
|
||||||
|
CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_DEFAULT),
|
||||||
|
|
||||||
REG_VARIABLE(CFG_DTIM_1CHRX_ENABLE_NAME, WLAN_PARAM_Integer,
|
REG_VARIABLE(CFG_DTIM_1CHRX_ENABLE_NAME, WLAN_PARAM_Integer,
|
||||||
struct hdd_config, enable_dtim_1chrx,
|
struct hdd_config, enable_dtim_1chrx,
|
||||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||||
@@ -6258,6 +6265,45 @@ void hdd_cfg_print_11k_offload_params(struct hdd_context *hdd_ctx)
|
|||||||
hdd_ctx->config->neighbor_report_offload_max_req_cap);
|
hdd_ctx->config->neighbor_report_offload_max_req_cap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_cfg_print_action_oui() - print the action OUI configurations
|
||||||
|
* @hdd_ctx: pointer to the HDD context
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void hdd_cfg_print_action_oui(struct hdd_context *hdd_ctx)
|
||||||
|
{
|
||||||
|
struct hdd_config *config = hdd_ctx->config;
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%u]",
|
||||||
|
CFG_ENABLE_ACTION_OUI,
|
||||||
|
config->action_oui_enable);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_CONNECT_1X1_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_CONNECT_1X1]);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_ITO_EXTENSION_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_ITO_EXTENSION]);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_CCKM_1X1_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_CCKM_1X1]);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_ITO_ALTERNATE_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_ITO_ALTERNATE]);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_SWITCH_TO_11N_MODE]);
|
||||||
|
|
||||||
|
hdd_debug("Name = [%s] value = [%s]",
|
||||||
|
CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME,
|
||||||
|
config->action_oui_str[ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_cfg_print() - print the hdd configuration
|
* hdd_cfg_print() - print the hdd configuration
|
||||||
* @iniTable: pointer to hdd context
|
* @iniTable: pointer to hdd context
|
||||||
@@ -7181,6 +7227,8 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx)
|
|||||||
CFG_ROAM_FORCE_RSSI_TRIGGER_NAME,
|
CFG_ROAM_FORCE_RSSI_TRIGGER_NAME,
|
||||||
hdd_ctx->config->roam_force_rssi_trigger);
|
hdd_ctx->config->roam_force_rssi_trigger);
|
||||||
|
|
||||||
|
hdd_cfg_print_action_oui(hdd_ctx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -15442,17 +15442,16 @@ void csr_dump_vendor_ies(uint8_t *ie, uint16_t ie_len)
|
|||||||
elem_len = ptr[1];
|
elem_len = ptr[1];
|
||||||
left -= 2;
|
left -= 2;
|
||||||
if (elem_len > left) {
|
if (elem_len > left) {
|
||||||
pe_err("Invalid IEs eid: %d elem_len: %d left: %d",
|
sme_err("Invalid IEs eid: %d elem_len: %d left: %d",
|
||||||
elem_id, elem_len, left);
|
elem_id, elem_len, left);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (elem_id == SIR_MAC_EID_VENDOR) {
|
if (elem_id == SIR_MAC_EID_VENDOR) {
|
||||||
pe_debug("Dumping Vendor IE of len %d", elem_len);
|
sme_debug("Dumping Vendor IE of len %d", elem_len);
|
||||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE,
|
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE,
|
||||||
QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE_LEVEL_DEBUG,
|
||||||
&ptr[2], elem_len);
|
&ptr[2], elem_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
left -= elem_len;
|
left -= elem_len;
|
||||||
ptr += (elem_len + 2);
|
ptr += (elem_len + 2);
|
||||||
}
|
}
|
||||||
@@ -15481,7 +15480,7 @@ csr_check_vendor_ap_3_present(tpAniSirGlobal mac_ctx, uint8_t *ie,
|
|||||||
SIR_MAC_VENDOR_AP_3_OUI_LEN, ie, ie_len)) &&
|
SIR_MAC_VENDOR_AP_3_OUI_LEN, ie, ie_len)) &&
|
||||||
(wlan_get_vendor_ie_ptr_from_oui(SIR_MAC_VENDOR_AP_4_OUI,
|
(wlan_get_vendor_ie_ptr_from_oui(SIR_MAC_VENDOR_AP_4_OUI,
|
||||||
SIR_MAC_VENDOR_AP_4_OUI_LEN, ie, ie_len))) {
|
SIR_MAC_VENDOR_AP_4_OUI_LEN, ie, ie_len))) {
|
||||||
pe_debug("Vendor OUI 3 and Vendor OUI 4 found");
|
sme_debug("Vendor OUI 3 and Vendor OUI 4 found");
|
||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -15700,6 +15699,22 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||||||
pMac, (uint8_t *)pIes, ieLen);
|
pMac, (uint8_t *)pIes, ieLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For WMI_ACTION_OUI_CONNECT_1x1_WITH_1_CHAIN, the host
|
||||||
|
* sends the NSS as 1 to the FW and the FW then decides
|
||||||
|
* after receiving the first beacon after connection to
|
||||||
|
* switch to 1 Tx/Rx Chain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!is_vendor_ap_present) {
|
||||||
|
is_vendor_ap_present =
|
||||||
|
ucfg_action_oui_search(pMac->psoc,
|
||||||
|
&vendor_ap_search_attr,
|
||||||
|
ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN);
|
||||||
|
if (is_vendor_ap_present)
|
||||||
|
sme_debug("1x1 with 1 Chain AP");
|
||||||
|
}
|
||||||
|
|
||||||
if (pMac->roam.configParam.is_force_1x1 &&
|
if (pMac->roam.configParam.is_force_1x1 &&
|
||||||
pMac->lteCoexAntShare &&
|
pMac->lteCoexAntShare &&
|
||||||
is_vendor_ap_present) {
|
is_vendor_ap_present) {
|
||||||
@@ -15719,7 +15734,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||||||
&vendor_ap_search_attr,
|
&vendor_ap_search_attr,
|
||||||
ACTION_OUI_CCKM_1X1);
|
ACTION_OUI_CCKM_1X1);
|
||||||
if (is_vendor_ap_present) {
|
if (is_vendor_ap_present) {
|
||||||
pe_debug("vdev: %d WMI_VDEV_PARAM_ABG_MODE_TX_CHAIN_NUM 1",
|
sme_debug("vdev: %d WMI_VDEV_PARAM_ABG_MODE_TX_CHAIN_NUM 1",
|
||||||
pSession->sessionId);
|
pSession->sessionId);
|
||||||
wma_cli_set_command(
|
wma_cli_set_command(
|
||||||
pSession->sessionId,
|
pSession->sessionId,
|
||||||
|
新增問題並參考
封鎖使用者