|
@@ -392,38 +392,6 @@ tListElem *csr_nonscan_pending_ll_next(struct mac_context *mac_ctx,
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-bool csr_get_bss_id_bss_desc(struct bss_description *pSirBssDesc,
|
|
|
- struct qdf_mac_addr *pBssId)
|
|
|
-{
|
|
|
- qdf_mem_copy(pBssId, &pSirBssDesc->bssId[0],
|
|
|
- sizeof(struct qdf_mac_addr));
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-bool csr_is_bss_id_equal(struct bss_description *pSirBssDesc1,
|
|
|
- struct bss_description *pSirBssDesc2)
|
|
|
-{
|
|
|
- bool fEqual = false;
|
|
|
- struct qdf_mac_addr bssId1;
|
|
|
- struct qdf_mac_addr bssId2;
|
|
|
-
|
|
|
- do {
|
|
|
- if (!pSirBssDesc1)
|
|
|
- break;
|
|
|
- if (!pSirBssDesc2)
|
|
|
- break;
|
|
|
-
|
|
|
- if (!csr_get_bss_id_bss_desc(pSirBssDesc1, &bssId1))
|
|
|
- break;
|
|
|
- if (!csr_get_bss_id_bss_desc(pSirBssDesc2, &bssId2))
|
|
|
- break;
|
|
|
-
|
|
|
- fEqual = qdf_is_macaddr_equal(&bssId1, &bssId2);
|
|
|
- } while (0);
|
|
|
-
|
|
|
- return fEqual;
|
|
|
-}
|
|
|
-
|
|
|
static bool csr_is_conn_state(struct mac_context *mac_ctx, uint32_t session_id,
|
|
|
eCsrConnectState state)
|
|
|
{
|
|
@@ -1173,60 +1141,6 @@ uint32_t csr_get_rts_thresh(struct mac_context *mac_ctx)
|
|
|
return mac_ctx->mlme_cfg->threshold.rts_threshold;
|
|
|
}
|
|
|
|
|
|
-static eCsrPhyMode
|
|
|
-csr_translate_to_phy_mode_from_bss_desc(struct mac_context *mac_ctx,
|
|
|
- struct bss_description *pSirBssDesc,
|
|
|
- tDot11fBeaconIEs *ies)
|
|
|
-{
|
|
|
- eCsrPhyMode phyMode;
|
|
|
- uint8_t i;
|
|
|
-
|
|
|
- switch (pSirBssDesc->nwType) {
|
|
|
- case eSIR_11A_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11a;
|
|
|
- break;
|
|
|
-
|
|
|
- case eSIR_11B_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11b;
|
|
|
- break;
|
|
|
-
|
|
|
- case eSIR_11G_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11g_ONLY;
|
|
|
-
|
|
|
- /* Check if the BSS is in b/g mixed mode or g_only mode */
|
|
|
- if (!ies || !ies->SuppRates.present) {
|
|
|
- sme_debug("Unable to get rates, assume G only mode");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < ies->SuppRates.num_rates; i++) {
|
|
|
- if (csr_rates_is_dot11_rate11b_supported_rate(
|
|
|
- ies->SuppRates.rates[i])) {
|
|
|
- sme_debug("One B rate is supported");
|
|
|
- phyMode = eCSR_DOT11_MODE_11g;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case eSIR_11N_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11n;
|
|
|
- break;
|
|
|
- case eSIR_11AX_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11ax;
|
|
|
- break;
|
|
|
-#ifdef WLAN_FEATURE_11BE
|
|
|
- case eSIR_11BE_NW_TYPE:
|
|
|
- phyMode = eCSR_DOT11_MODE_11be;
|
|
|
- break;
|
|
|
-#endif
|
|
|
- case eSIR_11AC_NW_TYPE:
|
|
|
- default:
|
|
|
- phyMode = eCSR_DOT11_MODE_11ac;
|
|
|
- break;
|
|
|
- }
|
|
|
- return phyMode;
|
|
|
-}
|
|
|
-
|
|
|
uint32_t csr_translate_to_wni_cfg_dot11_mode(struct mac_context *mac,
|
|
|
enum csr_cfgdot11mode csrDot11Mode)
|
|
|
{
|
|
@@ -1326,514 +1240,6 @@ uint32_t csr_translate_to_wni_cfg_dot11_mode(struct mac_context *mac,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * csr_get_phy_mode_from_bss() - Get Phy Mode
|
|
|
- * @mac: Global MAC context
|
|
|
- * @pBSSDescription: BSS Descriptor
|
|
|
- * @pPhyMode: Physical Mode
|
|
|
- * @pIes: Pointer to the IE fields
|
|
|
- *
|
|
|
- * This function should only return the super set of supported modes
|
|
|
- * 11n implies 11b/g/a/n.
|
|
|
- *
|
|
|
- * Return: success
|
|
|
- **/
|
|
|
-QDF_STATUS csr_get_phy_mode_from_bss(struct mac_context *mac,
|
|
|
- struct bss_description *pBSSDescription,
|
|
|
- eCsrPhyMode *pPhyMode, tDot11fBeaconIEs *pIes)
|
|
|
-{
|
|
|
- QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
- eCsrPhyMode phyMode =
|
|
|
- csr_translate_to_phy_mode_from_bss_desc(mac, pBSSDescription,
|
|
|
- pIes);
|
|
|
-
|
|
|
- if (pIes) {
|
|
|
- if (pIes->HTCaps.present) {
|
|
|
- phyMode = eCSR_DOT11_MODE_11n;
|
|
|
- if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) ||
|
|
|
- IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps))
|
|
|
- phyMode = eCSR_DOT11_MODE_11ac;
|
|
|
- if (pIes->he_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11ax;
|
|
|
- if (pIes->eht_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11be;
|
|
|
- } else if (WLAN_REG_IS_6GHZ_CHAN_FREQ(
|
|
|
- pBSSDescription->chan_freq)) {
|
|
|
- if (pIes->eht_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11be;
|
|
|
- else if (pIes->he_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11ax;
|
|
|
- else
|
|
|
- sme_debug("Warning - 6Ghz AP no he cap");
|
|
|
- } else {
|
|
|
- if (pIes->he_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11ax;
|
|
|
- if (pIes->eht_cap.present)
|
|
|
- phyMode = eCSR_DOT11_MODE_11be;
|
|
|
- }
|
|
|
-
|
|
|
- *pPhyMode = phyMode;
|
|
|
- }
|
|
|
-
|
|
|
- return status;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * csr_get_phy_mode_in_use() - to get phymode
|
|
|
- * @phyModeIn: physical mode
|
|
|
- * @bssPhyMode: physical mode in bss
|
|
|
- * @f5GhzBand: 5Ghz band
|
|
|
- * @pCfgDot11ModeToUse: dot11 mode in use
|
|
|
- *
|
|
|
- * This function returns the correct eCSR_CFG_DOT11_MODE is the two phyModes
|
|
|
- * matches. bssPhyMode is the mode derived from the BSS description
|
|
|
- * f5GhzBand is derived from the channel id of BSS description
|
|
|
- *
|
|
|
- * Return: true or false
|
|
|
- */
|
|
|
-static bool csr_get_phy_mode_in_use(struct mac_context *mac_ctx,
|
|
|
- eCsrPhyMode phyModeIn,
|
|
|
- eCsrPhyMode bssPhyMode,
|
|
|
- bool f5GhzBand,
|
|
|
- enum csr_cfgdot11mode *pCfgDot11ModeToUse)
|
|
|
-{
|
|
|
- bool fMatch = false;
|
|
|
- enum csr_cfgdot11mode cfgDot11Mode;
|
|
|
-
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- switch (phyModeIn) {
|
|
|
- /* 11a or 11b or 11g */
|
|
|
- case eCSR_DOT11_MODE_abg:
|
|
|
- fMatch = true;
|
|
|
- if (f5GhzBand)
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- else if (eCSR_DOT11_MODE_11b == bssPhyMode)
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- else
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- if (f5GhzBand) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- if (!f5GhzBand) {
|
|
|
- fMatch = true;
|
|
|
- if (eCSR_DOT11_MODE_11b == bssPhyMode)
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- else
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- if ((bssPhyMode == eCSR_DOT11_MODE_11g) ||
|
|
|
- (bssPhyMode == eCSR_DOT11_MODE_11g_ONLY)) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- case eCSR_DOT11_MODE_11b_ONLY:
|
|
|
- if (!f5GhzBand && (bssPhyMode != eCSR_DOT11_MODE_11g_ONLY)) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- fMatch = true;
|
|
|
- switch (bssPhyMode) {
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11n_ONLY:
|
|
|
- if (eCSR_DOT11_MODE_11n == bssPhyMode ||
|
|
|
- bssPhyMode >= eCSR_DOT11_MODE_11ac) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- fMatch = true;
|
|
|
- switch (bssPhyMode) {
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- default:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11ac_ONLY:
|
|
|
- if (eCSR_DOT11_MODE_11ac == bssPhyMode) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- }
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- fMatch = true;
|
|
|
- switch (bssPhyMode) {
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- default:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11ax_ONLY:
|
|
|
- if (eCSR_DOT11_MODE_11ax == bssPhyMode) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- fMatch = true;
|
|
|
- switch (bssPhyMode) {
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- default:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11BE;
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case eCSR_DOT11_MODE_11be_ONLY:
|
|
|
- if (CSR_IS_DOT11_PHY_MODE_11BE(bssPhyMode)) {
|
|
|
- fMatch = true;
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11BE;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- fMatch = true;
|
|
|
- switch (bssPhyMode) {
|
|
|
- case eCSR_DOT11_MODE_11g:
|
|
|
- case eCSR_DOT11_MODE_11g_ONLY:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11b:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11a:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11n:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ac:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11ax:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- break;
|
|
|
- case eCSR_DOT11_MODE_11be:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_11BE;
|
|
|
- break;
|
|
|
- default:
|
|
|
- cfgDot11Mode = eCSR_CFG_DOT11_MODE_AUTO;
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if (fMatch && pCfgDot11ModeToUse) {
|
|
|
- if (CSR_IS_CFG_DOT11_PHY_MODE_11BE(cfgDot11Mode)) {
|
|
|
-#ifdef WLAN_FEATURE_11BE
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11BE))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11BE;
|
|
|
- else
|
|
|
-#endif
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- else
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- } else if (cfgDot11Mode == eCSR_CFG_DOT11_MODE_11AX) {
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- else
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- } else {
|
|
|
- if (cfgDot11Mode == eCSR_CFG_DOT11_MODE_11AC
|
|
|
- && (!IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)))
|
|
|
- *pCfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- else
|
|
|
- *pCfgDot11ModeToUse = cfgDot11Mode;
|
|
|
- }
|
|
|
- }
|
|
|
- return fMatch;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * csr_is_phy_mode_match() - to find if phy mode matches
|
|
|
- * @mac: pointer to mac context
|
|
|
- * @phyMode: physical mode
|
|
|
- * @pSirBssDesc: bss description
|
|
|
- * @pProfile: pointer to roam profile
|
|
|
- * @pReturnCfgDot11Mode: dot1 mode to return
|
|
|
- * @pIes: pointer to IEs
|
|
|
- *
|
|
|
- * This function decides whether the one of the bit of phyMode is matching the
|
|
|
- * mode in the BSS and allowed by the user setting
|
|
|
- *
|
|
|
- * Return: true or false based on mode that fits the criteria
|
|
|
- */
|
|
|
-bool csr_is_phy_mode_match(struct mac_context *mac, uint32_t phyMode,
|
|
|
- struct bss_description *pSirBssDesc,
|
|
|
- struct csr_roam_profile *pProfile,
|
|
|
- enum csr_cfgdot11mode *pReturnCfgDot11Mode,
|
|
|
- tDot11fBeaconIEs *pIes)
|
|
|
-{
|
|
|
- bool fMatch = false;
|
|
|
- eCsrPhyMode phyModeInBssDesc = eCSR_DOT11_MODE_AUTO;
|
|
|
- eCsrPhyMode phyMode2 = eCSR_DOT11_MODE_AUTO;
|
|
|
- enum csr_cfgdot11mode cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_AUTO;
|
|
|
- uint32_t bitMask, loopCount;
|
|
|
- uint32_t bss_chan_freq;
|
|
|
-
|
|
|
- if (!pProfile) {
|
|
|
- sme_err("profile not found");
|
|
|
- return fMatch;
|
|
|
- }
|
|
|
-
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(csr_get_phy_mode_from_bss(mac, pSirBssDesc,
|
|
|
- &phyModeInBssDesc, pIes)))
|
|
|
- return fMatch;
|
|
|
-
|
|
|
- bss_chan_freq = pSirBssDesc->chan_freq;
|
|
|
-
|
|
|
- if ((0 == phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode)) {
|
|
|
- if (eCSR_CFG_DOT11_MODE_ABG ==
|
|
|
- mac->roam.configParam.uCfgDot11Mode) {
|
|
|
- phyMode = eCSR_DOT11_MODE_abg;
|
|
|
- } else if (eCSR_CFG_DOT11_MODE_AUTO ==
|
|
|
- mac->roam.configParam.uCfgDot11Mode) {
|
|
|
-#ifdef WLAN_FEATURE_11BE
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11BE))
|
|
|
- phyMode = eCSR_DOT11_MODE_11be;
|
|
|
- else
|
|
|
-#endif
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
|
|
|
- phyMode = eCSR_DOT11_MODE_11ax;
|
|
|
- else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
|
|
|
- phyMode = eCSR_DOT11_MODE_11ac;
|
|
|
- else
|
|
|
- phyMode = eCSR_DOT11_MODE_11n;
|
|
|
- } else {
|
|
|
- /* user's pick */
|
|
|
- phyMode = mac->roam.configParam.phyMode;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ((0 == phyMode) || (eCSR_DOT11_MODE_AUTO & phyMode)) {
|
|
|
- if (0 != phyMode) {
|
|
|
- if (eCSR_DOT11_MODE_AUTO & phyMode) {
|
|
|
- phyMode2 =
|
|
|
- eCSR_DOT11_MODE_AUTO & phyMode;
|
|
|
- }
|
|
|
- } else {
|
|
|
- phyMode2 = phyMode;
|
|
|
- }
|
|
|
- fMatch = csr_get_phy_mode_in_use(mac, phyMode2,
|
|
|
- phyModeInBssDesc,
|
|
|
- !WLAN_REG_IS_24GHZ_CH_FREQ
|
|
|
- (bss_chan_freq),
|
|
|
- &cfgDot11ModeToUse);
|
|
|
- } else {
|
|
|
- bitMask = 1;
|
|
|
- loopCount = 0;
|
|
|
- while (loopCount < eCSR_NUM_PHY_MODE) {
|
|
|
- phyMode2 = (phyMode & (bitMask << loopCount++));
|
|
|
- if (0 != phyMode2 &&
|
|
|
- csr_get_phy_mode_in_use(mac, phyMode2,
|
|
|
- phyModeInBssDesc,
|
|
|
- !WLAN_REG_IS_24GHZ_CH_FREQ(bss_chan_freq),
|
|
|
- &cfgDot11ModeToUse)) {
|
|
|
- fMatch = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- cfgDot11ModeToUse = csr_get_vdev_dot11_mode(mac, pProfile->csrPersona,
|
|
|
- cfgDot11ModeToUse);
|
|
|
- if (fMatch && pReturnCfgDot11Mode) {
|
|
|
- /*
|
|
|
- * IEEE 11n spec (8.4.3): HT STA shall
|
|
|
- * eliminate TKIP as a choice for the pairwise
|
|
|
- * cipher suite if CCMP is advertised by the AP
|
|
|
- * or if the AP included an HT capabilities
|
|
|
- * element in its Beacons and Probe Response.
|
|
|
- */
|
|
|
- if ((!CSR_IS_11n_ALLOWED(
|
|
|
- pProfile->negotiatedUCEncryptionType))
|
|
|
- && ((eCSR_CFG_DOT11_MODE_11N ==
|
|
|
- cfgDot11ModeToUse) ||
|
|
|
- (eCSR_CFG_DOT11_MODE_11AC ==
|
|
|
- cfgDot11ModeToUse) ||
|
|
|
- (eCSR_CFG_DOT11_MODE_11AX ==
|
|
|
- cfgDot11ModeToUse) ||
|
|
|
- CSR_IS_CFG_DOT11_PHY_MODE_11BE(
|
|
|
- cfgDot11ModeToUse))) {
|
|
|
- /* We cannot do 11n here */
|
|
|
- if (WLAN_REG_IS_24GHZ_CH_FREQ(bss_chan_freq)) {
|
|
|
- cfgDot11ModeToUse =
|
|
|
- eCSR_CFG_DOT11_MODE_11G;
|
|
|
- } else {
|
|
|
- cfgDot11ModeToUse =
|
|
|
- eCSR_CFG_DOT11_MODE_11A;
|
|
|
- }
|
|
|
- }
|
|
|
- *pReturnCfgDot11Mode = cfgDot11ModeToUse;
|
|
|
- }
|
|
|
-
|
|
|
- return fMatch;
|
|
|
-}
|
|
|
-
|
|
|
-enum csr_cfgdot11mode csr_find_best_phy_mode(struct mac_context *mac,
|
|
|
- uint32_t phyMode)
|
|
|
-{
|
|
|
- enum csr_cfgdot11mode cfgDot11ModeToUse;
|
|
|
- enum band_info band = mac->mlme_cfg->gen.band;
|
|
|
-
|
|
|
- if ((0 == phyMode) ||
|
|
|
- (eCSR_DOT11_MODE_AUTO & phyMode) ||
|
|
|
- (eCSR_DOT11_MODE_11be & phyMode)) {
|
|
|
-#ifdef WLAN_FEATURE_11BE
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11BE)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11BE;
|
|
|
- } else
|
|
|
-#endif
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- } else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- } else {
|
|
|
- /* Default to 11N mode if user has configured 11ac mode
|
|
|
- * and FW doesn't supports 11ac mode .
|
|
|
- */
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- }
|
|
|
- } else if (eCSR_DOT11_MODE_11ax & phyMode) {
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AX)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AX;
|
|
|
- } else if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- } else {
|
|
|
- /* Default to 11N mode if user has configured 11ac mode
|
|
|
- * and FW doesn't supports 11ac mode .
|
|
|
- */
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- }
|
|
|
- } else if (eCSR_DOT11_MODE_11ac & phyMode) {
|
|
|
- if (IS_FEATURE_SUPPORTED_BY_FW(DOT11AC)) {
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11AC;
|
|
|
- } else {
|
|
|
- /* Default to 11N mode if user has configured 11ac mode
|
|
|
- * and FW doesn't supports 11ac mode .
|
|
|
- */
|
|
|
- } cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- } else {
|
|
|
- if ((eCSR_DOT11_MODE_11n | eCSR_DOT11_MODE_11n_ONLY) & phyMode)
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11N;
|
|
|
- else if (eCSR_DOT11_MODE_abg & phyMode) {
|
|
|
- if (BAND_2G != band)
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- else
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- } else if (eCSR_DOT11_MODE_11a & phyMode)
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11A;
|
|
|
- else if ((eCSR_DOT11_MODE_11g | eCSR_DOT11_MODE_11g_ONLY) &
|
|
|
- phyMode)
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11G;
|
|
|
- else
|
|
|
- cfgDot11ModeToUse = eCSR_CFG_DOT11_MODE_11B;
|
|
|
- }
|
|
|
-
|
|
|
- return cfgDot11ModeToUse;
|
|
|
-}
|
|
|
-
|
|
|
enum reg_phymode csr_convert_to_reg_phy_mode(eCsrPhyMode csr_phy_mode,
|
|
|
qdf_freq_t freq)
|
|
|
{
|
|
@@ -1950,27 +1356,6 @@ bool csr_is_pmkid_found_for_peer(struct mac_context *mac,
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-bool csr_rates_is_dot11_rate11b_supported_rate(uint8_t dot11Rate)
|
|
|
-{
|
|
|
- bool fSupported = false;
|
|
|
- uint16_t nonBasicRate =
|
|
|
- (uint16_t) (BITS_OFF(dot11Rate, CSR_DOT11_BASIC_RATE_MASK));
|
|
|
-
|
|
|
- switch (nonBasicRate) {
|
|
|
- case SUPP_RATE_1_MBPS:
|
|
|
- case SUPP_RATE_2_MBPS:
|
|
|
- case SUPP_RATE_5_MBPS:
|
|
|
- case SUPP_RATE_11_MBPS:
|
|
|
- fSupported = true;
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return fSupported;
|
|
|
-}
|
|
|
-
|
|
|
bool csr_rates_is_dot11_rate11a_supported_rate(uint8_t dot11Rate)
|
|
|
{
|
|
|
bool fSupported = false;
|
|
@@ -2049,49 +1434,6 @@ tAniEdType csr_translate_encrypt_type_to_ed_type(eCsrEncryptionType EncryptType)
|
|
|
return edType;
|
|
|
}
|
|
|
|
|
|
-bool csr_is_ssid_match(struct mac_context *mac, uint8_t *ssid1, uint8_t ssid1Len,
|
|
|
- uint8_t *bssSsid, uint8_t bssSsidLen, bool fSsidRequired)
|
|
|
-{
|
|
|
- bool fMatch = false;
|
|
|
-
|
|
|
- do {
|
|
|
- /*
|
|
|
- * Check for the specification of the Broadcast SSID at the
|
|
|
- * beginning of the list. If specified, then all SSIDs are
|
|
|
- * matches (broadcast SSID means accept all SSIDs).
|
|
|
- */
|
|
|
- if (ssid1Len == 0) {
|
|
|
- fMatch = true;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- /* There are a few special cases. If the Bss description has
|
|
|
- * a Broadcast SSID, then our Profile must have a single SSID
|
|
|
- * without Wildcards so we can program the SSID.
|
|
|
- *
|
|
|
- * SSID could be suppressed in beacons. In that case SSID IE
|
|
|
- * has valid length but the SSID value is all NULL characters.
|
|
|
- * That condition is trated same as NULL SSID
|
|
|
- */
|
|
|
- if (csr_is_nullssid(bssSsid, bssSsidLen)) {
|
|
|
- if (false == fSsidRequired) {
|
|
|
- fMatch = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (ssid1Len != bssSsidLen)
|
|
|
- break;
|
|
|
- if (!qdf_mem_cmp(bssSsid, ssid1, bssSsidLen)) {
|
|
|
- fMatch = true;
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- } while (0);
|
|
|
-
|
|
|
- return fMatch;
|
|
|
-}
|
|
|
-
|
|
|
bool csr_is_bssid_match(struct qdf_mac_addr *pProfBssid,
|
|
|
struct qdf_mac_addr *BssBssid)
|
|
|
{
|