qcacld-3.0: Remove the cb_mode usage in channel bonding
Remove the CB mode usage in channel bonding since the center center frequency is calculated using channel width and channel number. Change-Id: Ie9685a833750bf3b69cce40c5d9587fb9b232047 CRs-Fixed: 962174
Tento commit je obsažen v:

odevzdal
Akash Patel

rodič
d5939f8b45
revize
999e58c920
@@ -1094,5 +1094,7 @@ int32_t cds_get_country_from_alpha2(uint8_t *alpha2);
|
||||
void cds_fill_send_ctl_info_to_fw(struct regulatory *reg, uint32_t modesAvail,
|
||||
uint32_t modeSelect);
|
||||
void cds_set_wma_dfs_region(struct regulatory *reg);
|
||||
void cds_set_ch_params(uint8_t ch, uint32_t phy_mode,
|
||||
chan_params_t *ch_params);
|
||||
|
||||
#endif /* REGULATORY_H */
|
||||
|
@@ -1458,3 +1458,27 @@ CDF_STATUS cds_set_reg_domain(void *client_ctxt, v_REGDOMAIN_t reg_domain)
|
||||
|
||||
return CDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_ch_params() - set channel parameters
|
||||
* @ch: channel
|
||||
* @phy_mode: physical mode
|
||||
* @ch_param: channel parameters will be returned
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void cds_set_ch_params(uint8_t ch, uint32_t phy_mode,
|
||||
chan_params_t *ch_params)
|
||||
{
|
||||
tHalHandle *hal_ctx = cds_get_context(CDF_MODULE_ID_PE);
|
||||
if (!hal_ctx) {
|
||||
CDF_TRACE(CDF_MODULE_ID_CDF, CDF_TRACE_LEVEL_ERROR,
|
||||
("Invalid hal_ctx pointer"));
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* TODO: remove SME call and move the SME set channel
|
||||
* param functionality to CDS.
|
||||
*/
|
||||
sme_set_ch_params(hal_ctx, phy_mode, ch, 0, ch_params);
|
||||
}
|
||||
|
@@ -287,6 +287,36 @@ struct rrm_config_param {
|
||||
uint8_t max_randn_interval;
|
||||
uint8_t rm_capability[RMENABLEDCAP_MAX_LEN];
|
||||
};
|
||||
/**
|
||||
* typedef ch_width - channel width
|
||||
* @CH_WIDTH_20MHZ: channel width 20 MHz
|
||||
* @CH_WIDTH_40MHZ: channel width 40 MHz
|
||||
* @CH_WIDTH_80MHZ: channel width 80MHz
|
||||
* @CH_WIDTH_160MHZ: channel width 160 MHz
|
||||
* @CH_WIDTH_80P80MHZ: channel width 160MHz(80+80)
|
||||
*/
|
||||
typedef enum ch_width {
|
||||
CH_WIDTH_20MHZ = 0,
|
||||
CH_WIDTH_40MHZ = 1,
|
||||
CH_WIDTH_80MHZ = 2,
|
||||
CH_WIDTH_160MHZ = 3,
|
||||
CH_WIDTH_80P80MHZ = 4
|
||||
} phy_ch_width;
|
||||
|
||||
/**
|
||||
* struct ch_params_s
|
||||
*
|
||||
* @ch_width: channel width
|
||||
* @sec_ch_offset: secondary channel offset
|
||||
* @center_freq_seg0: center freq for segment 0
|
||||
* @center_freq_seg1: center freq for segment 1
|
||||
*/
|
||||
typedef struct ch_params_s {
|
||||
enum ch_width ch_width;
|
||||
uint8_t sec_ch_offset;
|
||||
uint8_t center_freq_seg0;
|
||||
uint8_t center_freq_seg1;
|
||||
} chan_params_t;
|
||||
|
||||
/* each station added has a rate mode which specifies the sta attributes */
|
||||
typedef enum eStaRateMode {
|
||||
@@ -3790,8 +3820,8 @@ typedef struct sSirChanChangeRequest {
|
||||
uint16_t messageType;
|
||||
uint16_t messageLen;
|
||||
uint8_t targetChannel;
|
||||
uint8_t cbMode;
|
||||
uint8_t channel_width;
|
||||
uint8_t sec_ch_offset;
|
||||
phy_ch_width ch_width;
|
||||
uint8_t center_freq_seg_0;
|
||||
uint8_t center_freq_seg_1;
|
||||
uint8_t bssid[CDF_MAC_ADDR_SIZE];
|
||||
@@ -3872,7 +3902,7 @@ typedef struct sSirDfsCsaIeRequest {
|
||||
uint8_t targetChannel;
|
||||
uint8_t csaIeRequired;
|
||||
uint8_t bssid[CDF_MAC_ADDR_SIZE];
|
||||
uint8_t ch_bandwidth;
|
||||
struct ch_params_s ch_params;
|
||||
} tSirDfsCsaIeRequest, *tpSirDfsCsaIeRequest;
|
||||
|
||||
/* Indication from lower layer indicating the completion of first beacon send
|
||||
|
@@ -71,7 +71,7 @@ typedef enum {
|
||||
PHY_CHANNEL_BONDING_STATE_MAX = 11
|
||||
} ePhyChanBondState;
|
||||
|
||||
#define MAX_BONDED_CHANNELS 4
|
||||
#define MAX_BONDED_CHANNELS 8
|
||||
|
||||
typedef enum {
|
||||
MCC = 0,
|
||||
|
@@ -512,6 +512,7 @@ typedef struct sLimChannelSwitchInfo {
|
||||
uint8_t primaryChannel;
|
||||
uint8_t ch_center_freq_seg0;
|
||||
uint8_t ch_center_freq_seg1;
|
||||
uint8_t sec_ch_offset;
|
||||
phy_ch_width ch_width;
|
||||
int8_t switchCount;
|
||||
uint32_t switchTimeoutValue;
|
||||
|
@@ -498,60 +498,6 @@ static bool __lim_process_sme_sys_ready_ind(tpAniSirGlobal pMac, uint32_t *pMsgB
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
|
||||
uint32_t lim_get_center_channel(tpAniSirGlobal pMac, uint8_t primarychanNum,
|
||||
ePhyChanBondState secondaryChanOffset,
|
||||
uint8_t chanWidth)
|
||||
{
|
||||
if (chanWidth == WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ) {
|
||||
switch (secondaryChanOffset) {
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED:
|
||||
return primarychanNum;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED:
|
||||
return primarychanNum + 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED:
|
||||
return primarychanNum - 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
|
||||
return primarychanNum + 6;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
|
||||
return primarychanNum + 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
|
||||
return primarychanNum - 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
|
||||
return primarychanNum - 6;
|
||||
default:
|
||||
return eSIR_CFG_INVALID_ID;
|
||||
}
|
||||
} else if (chanWidth == WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ) {
|
||||
switch (secondaryChanOffset) {
|
||||
case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
|
||||
return primarychanNum + 2;
|
||||
case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
|
||||
return primarychanNum - 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED:
|
||||
return primarychanNum;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED:
|
||||
return primarychanNum + 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED:
|
||||
return primarychanNum - 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
|
||||
return primarychanNum + 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
|
||||
return primarychanNum - 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
|
||||
return primarychanNum + 2;
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
|
||||
return primarychanNum - 2;
|
||||
default:
|
||||
return eSIR_CFG_INVALID_ID;
|
||||
}
|
||||
}
|
||||
return primarychanNum;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
*lim_configure_ap_start_bss_session() - Configure the AP Start BSS in session.
|
||||
*@mac_ctx: Pointer to Global MAC structure
|
||||
@@ -5136,17 +5082,17 @@ static void lim_process_sme_channel_change_request(tpAniSirGlobal mac_ctx,
|
||||
"switch old chnl %d to new chnl %d, ch_bw %d"),
|
||||
session_entry->currentOperChannel,
|
||||
ch_change_req->targetChannel,
|
||||
ch_change_req->channel_width);
|
||||
ch_change_req->ch_width);
|
||||
|
||||
/* Store the New Channel Params in session_entry */
|
||||
session_entry->ch_width = ch_change_req->channel_width;
|
||||
session_entry->ch_width = ch_change_req->ch_width;
|
||||
session_entry->ch_center_freq_seg0 =
|
||||
ch_change_req->center_freq_seg_0;
|
||||
session_entry->ch_center_freq_seg1 =
|
||||
ch_change_req->center_freq_seg_1;
|
||||
session_entry->htSecondaryChannelOffset = ch_change_req->cbMode;
|
||||
session_entry->htSecondaryChannelOffset = ch_change_req->sec_ch_offset;
|
||||
session_entry->htSupportedChannelWidthSet =
|
||||
(ch_change_req->channel_width ? 1 : 0);
|
||||
(ch_change_req->ch_width ? 1 : 0);
|
||||
session_entry->htRecommendedTxWidthSet =
|
||||
session_entry->htSupportedChannelWidthSet;
|
||||
session_entry->currentOperChannel =
|
||||
@@ -5548,7 +5494,6 @@ static void lim_process_sme_dfs_csa_ie_request(tpAniSirGlobal mac_ctx,
|
||||
{
|
||||
tpSirDfsCsaIeRequest dfs_csa_ie_req;
|
||||
tpPESession session_entry = NULL;
|
||||
uint32_t ch_width = 0;
|
||||
uint8_t session_id;
|
||||
tLimWiderBWChannelSwitchInfo *wider_bw_ch_switch;
|
||||
|
||||
@@ -5581,7 +5526,7 @@ static void lim_process_sme_dfs_csa_ie_request(tpAniSirGlobal mac_ctx,
|
||||
session_entry->dfsIncludeChanSwIe = true;
|
||||
session_entry->gLimChannelSwitch.switchCount = LIM_MAX_CSA_IE_UPDATES;
|
||||
session_entry->gLimChannelSwitch.ch_width =
|
||||
dfs_csa_ie_req->ch_bandwidth;
|
||||
dfs_csa_ie_req->ch_params.ch_width;
|
||||
if (mac_ctx->sap.SapDfsInfo.disable_dfs_ch_switch == false)
|
||||
session_entry->gLimChannelSwitch.switchMode = 1;
|
||||
|
||||
@@ -5592,16 +5537,10 @@ static void lim_process_sme_dfs_csa_ie_request(tpAniSirGlobal mac_ctx,
|
||||
if (true != session_entry->vhtCapability)
|
||||
goto skip_vht;
|
||||
|
||||
if (WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ ==
|
||||
session_entry->vhtTxChannelWidthSet)
|
||||
ch_width = eHT_CHANNEL_WIDTH_80MHZ;
|
||||
else if (WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ ==
|
||||
session_entry->vhtTxChannelWidthSet)
|
||||
ch_width = session_entry->htSupportedChannelWidthSet;
|
||||
/* Now encode the Wider Ch BW element depending on the ch width */
|
||||
wider_bw_ch_switch = &session_entry->gLimWiderBWChannelSwitch;
|
||||
switch (ch_width) {
|
||||
case eHT_CHANNEL_WIDTH_20MHZ:
|
||||
switch (dfs_csa_ie_req->ch_params.ch_width) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
/*
|
||||
* Wide channel BW sublement in channel wrapper element is not
|
||||
* required in case of 20 Mhz operation. Currently It is set
|
||||
@@ -5611,21 +5550,26 @@ static void lim_process_sme_dfs_csa_ie_request(tpAniSirGlobal mac_ctx,
|
||||
wider_bw_ch_switch->newChanWidth =
|
||||
WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ;
|
||||
break;
|
||||
case eHT_CHANNEL_WIDTH_40MHZ:
|
||||
session_entry->dfsIncludeChanWrapperIe = true;
|
||||
case CH_WIDTH_40MHZ:
|
||||
session_entry->dfsIncludeChanWrapperIe = false;
|
||||
wider_bw_ch_switch->newChanWidth =
|
||||
WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ;
|
||||
break;
|
||||
case eHT_CHANNEL_WIDTH_80MHZ:
|
||||
case CH_WIDTH_80MHZ:
|
||||
session_entry->dfsIncludeChanWrapperIe = true;
|
||||
wider_bw_ch_switch->newChanWidth =
|
||||
WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ;
|
||||
break;
|
||||
case eHT_CHANNEL_WIDTH_160MHZ:
|
||||
case CH_WIDTH_160MHZ:
|
||||
session_entry->dfsIncludeChanWrapperIe = true;
|
||||
wider_bw_ch_switch->newChanWidth =
|
||||
WNI_CFG_VHT_CHANNEL_WIDTH_160MHZ;
|
||||
break;
|
||||
case CH_WIDTH_80P80MHZ:
|
||||
session_entry->dfsIncludeChanWrapperIe = true;
|
||||
wider_bw_ch_switch->newChanWidth =
|
||||
WNI_CFG_VHT_CHANNEL_WIDTH_80_PLUS_80MHZ;
|
||||
break;
|
||||
default:
|
||||
session_entry->dfsIncludeChanWrapperIe = false;
|
||||
/*
|
||||
@@ -5637,16 +5581,15 @@ static void lim_process_sme_dfs_csa_ie_request(tpAniSirGlobal mac_ctx,
|
||||
}
|
||||
/* Fetch the center channel based on the channel width */
|
||||
wider_bw_ch_switch->newCenterChanFreq0 =
|
||||
lim_get_center_channel(mac_ctx, dfs_csa_ie_req->targetChannel,
|
||||
session_entry->htSecondaryChannelOffset,
|
||||
wider_bw_ch_switch->newChanWidth);
|
||||
dfs_csa_ie_req->ch_params.center_freq_seg0;
|
||||
/*
|
||||
* This is not applicable for 20/40/80 Mhz.Only used when we support
|
||||
* 80+80 Mhz operation. In case of 80+80 Mhz, this parameter indicates
|
||||
* center channel frequency index of 80 Mhz channel of
|
||||
* frequency segment 1.
|
||||
*/
|
||||
wider_bw_ch_switch->newCenterChanFreq1 = 0;
|
||||
wider_bw_ch_switch->newCenterChanFreq1 =
|
||||
dfs_csa_ie_req->ch_params.center_freq_seg1;
|
||||
skip_vht:
|
||||
/* Send CSA IE request from here */
|
||||
if (sch_set_fixed_beacon_fields(mac_ctx, session_entry) !=
|
||||
|
@@ -4259,7 +4259,6 @@ lim_send_extended_chan_switch_action_frame(tpAniSirGlobal mac_ctx,
|
||||
return eSIR_SUCCESS;
|
||||
} /* End lim_send_extended_chan_switch_action_frame */
|
||||
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
tSirRetStatus
|
||||
lim_send_vht_opmode_notification_frame(tpAniSirGlobal pMac,
|
||||
tSirMacAddr peer,
|
||||
@@ -4369,140 +4368,6 @@ lim_send_vht_opmode_notification_frame(tpAniSirGlobal pMac,
|
||||
return eSIR_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Send a VHT Channel Switch Announcement
|
||||
*
|
||||
*
|
||||
* \param pMac Pointer to the global MAC datastructure
|
||||
*
|
||||
* \param peer MAC address to which this frame will be sent
|
||||
*
|
||||
* \param nChanWidth
|
||||
*
|
||||
* \param nNewChannel
|
||||
*
|
||||
*
|
||||
* \return eSIR_SUCCESS on success, eSIR_FAILURE else
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
tSirRetStatus
|
||||
lim_send_vht_channel_switch_mgmt_frame(tpAniSirGlobal pMac,
|
||||
tSirMacAddr peer,
|
||||
uint8_t nChanWidth,
|
||||
uint8_t nNewChannel,
|
||||
uint8_t ncbMode, tpPESession psessionEntry)
|
||||
{
|
||||
tDot11fChannelSwitch frm;
|
||||
uint8_t *pFrame;
|
||||
tpSirMacMgmtHdr pMacHdr;
|
||||
uint32_t nBytes, nPayload, nStatus; /* , nCfg; */
|
||||
void *pPacket;
|
||||
CDF_STATUS cdf_status;
|
||||
uint8_t txFlag = 0;
|
||||
|
||||
uint8_t smeSessionId = 0;
|
||||
|
||||
if (psessionEntry == NULL) {
|
||||
PELOGE(lim_log(pMac, LOGE, FL("Session entry is NULL!!!"));)
|
||||
return eSIR_FAILURE;
|
||||
}
|
||||
smeSessionId = psessionEntry->smeSessionId;
|
||||
|
||||
cdf_mem_set((uint8_t *) &frm, sizeof(frm), 0);
|
||||
|
||||
frm.Category.category = SIR_MAC_ACTION_SPECTRUM_MGMT;
|
||||
frm.Action.action = SIR_MAC_ACTION_CHANNEL_SWITCH_ID;
|
||||
frm.ChanSwitchAnn.switchMode = 1;
|
||||
frm.ChanSwitchAnn.newChannel = nNewChannel;
|
||||
frm.ChanSwitchAnn.switchCount = 1;
|
||||
frm.sec_chan_offset_ele.secondaryChannelOffset =
|
||||
lim_get_htcb_state(ncbMode);
|
||||
frm.sec_chan_offset_ele.present = 1;
|
||||
frm.WiderBWChanSwitchAnn.newChanWidth = nChanWidth;
|
||||
frm.WiderBWChanSwitchAnn.newCenterChanFreq0 =
|
||||
lim_get_center_channel(pMac, nNewChannel, ncbMode, nChanWidth);
|
||||
frm.WiderBWChanSwitchAnn.newCenterChanFreq1 = 0;
|
||||
frm.ChanSwitchAnn.present = 1;
|
||||
frm.WiderBWChanSwitchAnn.present = 1;
|
||||
|
||||
nStatus = dot11f_get_packed_channel_switch_size(pMac, &frm, &nPayload);
|
||||
if (DOT11F_FAILED(nStatus)) {
|
||||
lim_log(pMac, LOGP, FL("Failed to calculate the packed size f"
|
||||
"or a Channel Switch (0x%08x)."),
|
||||
nStatus);
|
||||
/* We'll fall back on the worst case scenario: */
|
||||
nPayload = sizeof(tDot11fChannelSwitch);
|
||||
} else if (DOT11F_WARNED(nStatus)) {
|
||||
lim_log(pMac, LOGW, FL("There were warnings while calculating "
|
||||
"the packed size for a Channel Switch (0x"
|
||||
"%08x)."), nStatus);
|
||||
}
|
||||
|
||||
nBytes = nPayload + sizeof(tSirMacMgmtHdr);
|
||||
|
||||
cdf_status =
|
||||
cds_packet_alloc((uint16_t) nBytes, (void **)&pFrame,
|
||||
(void **)&pPacket);
|
||||
if (!CDF_IS_STATUS_SUCCESS(cdf_status)) {
|
||||
lim_log(pMac, LOGP, FL("Failed to allocate %d bytes for a TPC"
|
||||
" Report."), nBytes);
|
||||
return eSIR_FAILURE;
|
||||
}
|
||||
/* Paranoia: */
|
||||
cdf_mem_set(pFrame, nBytes, 0);
|
||||
|
||||
/* Next, we fill out the buffer descriptor: */
|
||||
lim_populate_mac_header(pMac, pFrame, SIR_MAC_MGMT_FRAME,
|
||||
SIR_MAC_MGMT_ACTION, peer, psessionEntry->selfMacAddr);
|
||||
pMacHdr = (tpSirMacMgmtHdr) pFrame;
|
||||
cdf_mem_copy((uint8_t *) pMacHdr->bssId,
|
||||
(uint8_t *) psessionEntry->bssId, sizeof(tSirMacAddr));
|
||||
nStatus = dot11f_pack_channel_switch(pMac, &frm, pFrame +
|
||||
sizeof(tSirMacMgmtHdr),
|
||||
nPayload, &nPayload);
|
||||
if (DOT11F_FAILED(nStatus)) {
|
||||
lim_log(pMac, LOGE,
|
||||
FL("Failed to pack a Channel Switch (0x%08x)."),
|
||||
nStatus);
|
||||
cds_packet_free((void *)pPacket);
|
||||
return eSIR_FAILURE; /* allocated! */
|
||||
} else if (DOT11F_WARNED(nStatus)) {
|
||||
lim_log(pMac, LOGW, FL("There were warnings while packing a C"
|
||||
"hannel Switch (0x%08x)."), nStatus);
|
||||
}
|
||||
|
||||
if ((SIR_BAND_5_GHZ == lim_get_rf_band(psessionEntry->currentOperChannel))
|
||||
|| (psessionEntry->pePersona == CDF_P2P_CLIENT_MODE) ||
|
||||
(psessionEntry->pePersona == CDF_P2P_GO_MODE)
|
||||
) {
|
||||
txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
|
||||
}
|
||||
|
||||
MTRACE(cdf_trace(CDF_MODULE_ID_PE, TRACE_CODE_TX_MGMT,
|
||||
psessionEntry->peSessionId, pMacHdr->fc.subType));
|
||||
cdf_status = wma_tx_frame(pMac, pPacket, (uint16_t) nBytes,
|
||||
TXRX_FRM_802_11_MGMT,
|
||||
ANI_TXDIR_TODS,
|
||||
7, lim_tx_complete, pFrame, txFlag,
|
||||
smeSessionId, 0);
|
||||
MTRACE(cdf_trace(CDF_MODULE_ID_PE, TRACE_CODE_TX_COMPLETE,
|
||||
psessionEntry->peSessionId, cdf_status));
|
||||
if (!CDF_IS_STATUS_SUCCESS(cdf_status)) {
|
||||
lim_log(pMac, LOGE,
|
||||
FL("Failed to send a Channel Switch (%X)!"),
|
||||
cdf_status);
|
||||
/* Pkt will be freed up by the callback */
|
||||
return eSIR_FAILURE;
|
||||
}
|
||||
|
||||
return eSIR_SUCCESS;
|
||||
|
||||
} /* End lim_send_vht_channel_switch_mgmt_frame. */
|
||||
|
||||
#endif
|
||||
|
||||
#if defined WLAN_FEATURE_VOWIFI
|
||||
|
||||
/**
|
||||
|
@@ -49,7 +49,6 @@ tSirRetStatus lim_send_beacon_params(tpAniSirGlobal pMac,
|
||||
tpUpdateBeaconParams pUpdatedBcnParams,
|
||||
tpPESession psessionEntry);
|
||||
/* tSirRetStatus lim_send_beacon_params(tpAniSirGlobal pMac, tpUpdateBeaconParams pUpdatedBcnParams); */
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
tSirRetStatus lim_send_mode_update(tpAniSirGlobal pMac,
|
||||
tUpdateVHTOpMode *tempParam,
|
||||
tpPESession psessionEntry);
|
||||
@@ -57,11 +56,6 @@ tSirRetStatus lim_send_rx_nss_update(tpAniSirGlobal pMac,
|
||||
tUpdateRxNss *tempParam,
|
||||
tpPESession psessionEntry);
|
||||
|
||||
uint32_t lim_get_center_channel(tpAniSirGlobal pMac,
|
||||
uint8_t primarychanNum,
|
||||
ePhyChanBondState secondaryChanOffset,
|
||||
uint8_t chanWidth);
|
||||
|
||||
tSirRetStatus lim_set_membership(tpAniSirGlobal pMac,
|
||||
tUpdateMembership *pTempParam,
|
||||
tpPESession psessionEntry);
|
||||
@@ -69,7 +63,6 @@ tSirRetStatus lim_set_membership(tpAniSirGlobal pMac,
|
||||
tSirRetStatus lim_set_user_pos(tpAniSirGlobal pMac,
|
||||
tUpdateUserPos *pTempParam,
|
||||
tpPESession psessionEntry);
|
||||
#endif
|
||||
#if defined WLAN_FEATURE_VOWIFI
|
||||
tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac,
|
||||
uint8_t chnlNumber,
|
||||
|
@@ -2021,9 +2021,10 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
uint8_t session_id;
|
||||
uint16_t aid = 0;
|
||||
uint16_t chan_space = 0;
|
||||
int cb_mode = 0;
|
||||
chan_params_t ch_params;
|
||||
|
||||
tLimWiderBWChannelSwitchInfo *chnl_switch_info = NULL;
|
||||
tLimChannelSwitchInfo *lim_ch_switch = NULL;
|
||||
|
||||
if (!csa_params) {
|
||||
lim_log(mac_ctx, LOGE, FL("limMsgQ body ptr is NULL"));
|
||||
@@ -2055,6 +2056,7 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
*/
|
||||
lim_delete_tdls_peers(mac_ctx, session_entry);
|
||||
|
||||
lim_ch_switch = &session_entry->gLimChannelSwitch;
|
||||
session_entry->gLimChannelSwitch.switchMode =
|
||||
csa_params->switchmode;
|
||||
/* timer already started by firmware, switch immediately */
|
||||
@@ -2064,7 +2066,8 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
session_entry->gLimChannelSwitch.state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_ONLY;
|
||||
session_entry->gLimChannelSwitch.ch_width = CH_WIDTH_20MHZ;
|
||||
|
||||
lim_ch_switch->sec_ch_offset =
|
||||
session_entry->htSecondaryChannelOffset;
|
||||
session_entry->gLimChannelSwitch.ch_center_freq_seg0 = 0;
|
||||
session_entry->gLimChannelSwitch.ch_center_freq_seg1 = 0;
|
||||
chnl_switch_info =
|
||||
@@ -2102,20 +2105,17 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
} else {
|
||||
chnl_switch_info->newChanWidth =
|
||||
CH_WIDTH_20MHZ;
|
||||
session_entry->gLimChannelSwitch.state =
|
||||
lim_ch_switch->state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_ONLY;
|
||||
}
|
||||
|
||||
cb_mode = lim_select_cb_mode_for_sta(
|
||||
session_entry,
|
||||
csa_params->channel,
|
||||
chan_space);
|
||||
|
||||
ch_params.ch_width =
|
||||
chnl_switch_info->newChanWidth;
|
||||
cds_set_ch_params(csa_params->channel,
|
||||
eCSR_DOT11_MODE_11ac,
|
||||
&ch_params);
|
||||
chnl_switch_info->newCenterChanFreq0 =
|
||||
lim_get_center_channel(mac_ctx,
|
||||
csa_params->channel,
|
||||
cb_mode,
|
||||
chnl_switch_info->newChanWidth);
|
||||
ch_params.center_freq_seg0;
|
||||
/*
|
||||
* This is not applicable for 20/40/80 MHz.
|
||||
* Only used when we support 80+80 MHz operation.
|
||||
@@ -2123,7 +2123,10 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
* center channel frequency index of 80 MHz
|
||||
* channel offrequency segment 1.
|
||||
*/
|
||||
chnl_switch_info->newCenterChanFreq1 = 0;
|
||||
chnl_switch_info->newCenterChanFreq1 =
|
||||
ch_params.center_freq_seg1;
|
||||
lim_ch_switch->sec_ch_offset =
|
||||
ch_params.sec_ch_offset;
|
||||
|
||||
}
|
||||
session_entry->gLimChannelSwitch.ch_center_freq_seg0 =
|
||||
@@ -2141,56 +2144,47 @@ void lim_handle_csa_offload_msg(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
|
||||
mac_ctx->scan.countryCodeCurrent,
|
||||
csa_params->channel,
|
||||
csa_params->new_op_class);
|
||||
session_entry->gLimChannelSwitch.state =
|
||||
lim_ch_switch->state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY;
|
||||
if (chan_space == 40) {
|
||||
session_entry->
|
||||
gLimChannelSwitch.ch_width =
|
||||
lim_ch_switch->ch_width =
|
||||
CH_WIDTH_40MHZ;
|
||||
chnl_switch_info->newChanWidth =
|
||||
CH_WIDTH_40MHZ;
|
||||
cb_mode = lim_select_cb_mode_for_sta(
|
||||
session_entry,
|
||||
csa_params->channel,
|
||||
chan_space);
|
||||
if (cb_mode ==
|
||||
PHY_DOUBLE_CHANNEL_LOW_PRIMARY) {
|
||||
session_entry->
|
||||
gLimChannelSwitch.
|
||||
ch_center_freq_seg0 =
|
||||
csa_params->channel + 2;
|
||||
} else if (cb_mode ==
|
||||
PHY_DOUBLE_CHANNEL_HIGH_PRIMARY) {
|
||||
session_entry->
|
||||
gLimChannelSwitch.
|
||||
ch_center_freq_seg0 =
|
||||
csa_params->channel - 2;
|
||||
}
|
||||
|
||||
ch_params.ch_width =
|
||||
chnl_switch_info->newChanWidth;
|
||||
cds_set_ch_params(csa_params->channel,
|
||||
eCSR_DOT11_MODE_11n,
|
||||
&ch_params);
|
||||
lim_ch_switch->ch_center_freq_seg0 =
|
||||
ch_params.center_freq_seg0;
|
||||
lim_ch_switch->sec_ch_offset =
|
||||
ch_params.sec_ch_offset;
|
||||
} else {
|
||||
session_entry->
|
||||
gLimChannelSwitch.ch_width =
|
||||
lim_ch_switch->ch_width =
|
||||
CH_WIDTH_20MHZ;
|
||||
chnl_switch_info->newChanWidth =
|
||||
CH_WIDTH_40MHZ;
|
||||
session_entry->gLimChannelSwitch.state =
|
||||
lim_ch_switch->state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_ONLY;
|
||||
lim_ch_switch->sec_ch_offset =
|
||||
PHY_SINGLE_CHANNEL_CENTERED;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (csa_params->sec_chan_offset) {
|
||||
session_entry->gLimChannelSwitch.ch_width =
|
||||
CH_WIDTH_40MHZ;
|
||||
session_entry->gLimChannelSwitch.state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY;
|
||||
} else {
|
||||
session_entry->htSupportedChannelWidthSet =
|
||||
WNI_CFG_CHANNEL_BONDING_MODE_DISABLE;
|
||||
session_entry->htRecommendedTxWidthSet =
|
||||
session_entry->htSupportedChannelWidthSet;
|
||||
lim_ch_switch->ch_width =
|
||||
CH_WIDTH_40MHZ;
|
||||
lim_ch_switch->state =
|
||||
eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY;
|
||||
ch_params.ch_width = CH_WIDTH_40MHZ;
|
||||
cds_set_ch_params(csa_params->channel,
|
||||
eCSR_DOT11_MODE_11n,
|
||||
&ch_params);
|
||||
lim_ch_switch->ch_center_freq_seg0 =
|
||||
ch_params.center_freq_seg0;
|
||||
lim_ch_switch->sec_ch_offset =
|
||||
ch_params.sec_ch_offset;
|
||||
}
|
||||
|
||||
}
|
||||
lim_log(mac_ctx, LOG1, FL("new ch width = %d"),
|
||||
session_entry->gLimChannelSwitch.ch_width);
|
||||
|
@@ -497,17 +497,9 @@ tSirRetStatus lim_send_extended_chan_switch_action_frame(tpAniSirGlobal mac_ctx,
|
||||
tSirMacAddr peer, uint8_t mode, uint8_t new_op_class,
|
||||
uint8_t new_channel, uint8_t count, tpPESession session_entry);
|
||||
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
tSirRetStatus lim_send_vht_opmode_notification_frame(tpAniSirGlobal pMac,
|
||||
tSirMacAddr peer, uint8_t nMode,
|
||||
tpPESession psessionEntry);
|
||||
tSirRetStatus lim_send_vht_channel_switch_mgmt_frame(tpAniSirGlobal pMac,
|
||||
tSirMacAddr peer,
|
||||
uint8_t nChanWidth,
|
||||
uint8_t nNewChannel,
|
||||
uint8_t ncbMode,
|
||||
tpPESession psessionEntry);
|
||||
#endif
|
||||
|
||||
#if defined WLAN_FEATURE_VOWIFI
|
||||
tSirRetStatus lim_send_neighbor_report_request_frame(tpAniSirGlobal,
|
||||
|
@@ -2810,11 +2810,13 @@ void lim_switch_primary_secondary_channel(tpAniSirGlobal pMac,
|
||||
psessionEntry->currentOperChannel, newChannel);
|
||||
psessionEntry->currentOperChannel = newChannel;
|
||||
}
|
||||
if (psessionEntry->htSecondaryChannelOffset != subband) {
|
||||
if (psessionEntry->htSecondaryChannelOffset !=
|
||||
psessionEntry->gLimChannelSwitch.sec_ch_offset) {
|
||||
lim_log(pMac, LOGW,
|
||||
FL("switch old sec chnl %d --> new sec chnl %d "),
|
||||
psessionEntry->htSecondaryChannelOffset, subband);
|
||||
psessionEntry->htSecondaryChannelOffset = subband;
|
||||
psessionEntry->htSecondaryChannelOffset =
|
||||
psessionEntry->gLimChannelSwitch.sec_ch_offset;
|
||||
if (psessionEntry->htSecondaryChannelOffset ==
|
||||
PHY_SINGLE_CHANNEL_CENTERED) {
|
||||
psessionEntry->htSupportedChannelWidthSet =
|
||||
|
@@ -294,59 +294,6 @@ is_entering_mimo_ps(tSirMacHTMIMOPowerSaveState curState,
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* lim_select_cb_mode_for_sta() - return cb_mode based on current session
|
||||
* @session_entry: Session entry
|
||||
* @channel: channel
|
||||
* @chan_bw: channel bandwidth
|
||||
*
|
||||
* Given a value of channel and bandwidth this API will return the value of
|
||||
* cb_mode on basis of channel, bandwidth ht/vht capabilities
|
||||
*
|
||||
* Return: cb_mode
|
||||
*
|
||||
*/
|
||||
|
||||
static inline int lim_select_cb_mode_for_sta(tpPESession session_entry,
|
||||
uint8_t channel, uint8_t chan_bw)
|
||||
{
|
||||
if (session_entry->vhtCapability && chan_bw) {
|
||||
if (channel == 36 || channel == 52 || channel == 100 ||
|
||||
channel == 116 || channel == 149) {
|
||||
return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW - 1;
|
||||
} else if (channel == 40 || channel == 56 || channel == 104 ||
|
||||
channel == 120 || channel == 153) {
|
||||
return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW - 1;
|
||||
} else if (channel == 44 || channel == 60 || channel == 108 ||
|
||||
channel == 124 || channel == 157) {
|
||||
return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH - 1;
|
||||
} else if (channel == 48 || channel == 64 || channel == 112 ||
|
||||
channel == 128 || channel == 161) {
|
||||
return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH - 1;
|
||||
} else if (channel == 165) {
|
||||
return PHY_SINGLE_CHANNEL_CENTERED;
|
||||
}
|
||||
} else if (session_entry->htSupportedChannelWidthSet) {
|
||||
if (channel == 40 || channel == 48 || channel == 56 ||
|
||||
channel == 64 || channel == 104 || channel == 112 ||
|
||||
channel == 120 || channel == 128 || channel == 136 ||
|
||||
channel == 144 || channel == 153 || channel == 161) {
|
||||
return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
|
||||
} else if (channel == 36 || channel == 44 || channel == 52 ||
|
||||
channel == 60 || channel == 100 ||
|
||||
channel == 108 || channel == 116 ||
|
||||
channel == 124 || channel == 132 ||
|
||||
channel == 140 || channel == 149 ||
|
||||
channel == 157) {
|
||||
return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
|
||||
} else if (channel == 165) {
|
||||
return PHY_SINGLE_CHANNEL_CENTERED;
|
||||
}
|
||||
}
|
||||
return PHY_SINGLE_CHANNEL_CENTERED;
|
||||
}
|
||||
|
||||
|
||||
static inline int lim_select_cb_mode(tDphHashNode *pStaDs,
|
||||
tpPESession psessionEntry, uint8_t channel,
|
||||
uint8_t chan_bw)
|
||||
|
@@ -625,10 +625,9 @@ typedef struct sSapDfsInfo {
|
||||
* New channel width and new channel bonding mode
|
||||
* will only be updated via channel fallback mechanism
|
||||
*/
|
||||
uint8_t orig_cbMode;
|
||||
uint8_t orig_chanWidth;
|
||||
uint8_t new_chanWidth;
|
||||
uint8_t new_cbMode;
|
||||
phy_ch_width orig_chanWidth;
|
||||
phy_ch_width new_chanWidth;
|
||||
chan_params_t new_ch_params;
|
||||
|
||||
/*
|
||||
* INI param to enable/disable SAP W53
|
||||
|
@@ -878,23 +878,19 @@ static inline void sap_event_init(ptWLAN_SAPEvent sapEvent)
|
||||
|
||||
#ifdef WLAN_ENABLE_CHNL_MATRIX_RESTRICTION
|
||||
/*
|
||||
* This function gives the leakage matrix for given NOL channel and cbMode
|
||||
* sap_find_target_channel_in_channel_matrix() - finds the leakage matrix
|
||||
* @sapContext: Pointer to vos global context structure
|
||||
* @ch_width: target channel width
|
||||
* @NOL_channel: the NOL channel whose leakage matrix is required
|
||||
* @pTarget_chnl_mtrx: pointer to target channel matrix returned.
|
||||
*
|
||||
* PARAMETERS
|
||||
* IN
|
||||
* sapContext : Pointer to vos global context structure
|
||||
* cbMode : target channel bonding mode
|
||||
* NOL_channel : the NOL channel whose leakage matrix is required
|
||||
* pTarget_chnl_mtrx : pointer to target channel matrix returned.
|
||||
* This function gives the leakage matrix for given NOL channel and ch_width
|
||||
*
|
||||
* RETURN VALUE
|
||||
* BOOLEAN
|
||||
* TRUE: leakage matrix was found
|
||||
* FALSE: leakage matrix was not found
|
||||
* Return: TRUE or FALSE
|
||||
*/
|
||||
bool
|
||||
sap_find_target_channel_in_channel_matrix(ptSapContext sapContext,
|
||||
ePhyChanBondState cbMode,
|
||||
phy_ch_width ch_width,
|
||||
uint8_t NOL_channel,
|
||||
tSapTxLeakInfo **pTarget_chnl_mtrx)
|
||||
{
|
||||
@@ -903,28 +899,22 @@ sap_find_target_channel_in_channel_matrix(ptSapContext sapContext,
|
||||
uint32_t nchan_matrix;
|
||||
int i = 0;
|
||||
|
||||
switch (cbMode) {
|
||||
case PHY_SINGLE_CHANNEL_CENTERED:
|
||||
switch (ch_width) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
/* HT20 */
|
||||
pchan_matrix = ht20_chan;
|
||||
nchan_matrix = CDF_ARRAY_SIZE(ht20_chan);
|
||||
break;
|
||||
case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
|
||||
case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
|
||||
case CH_WIDTH_40MHZ:
|
||||
/* HT40 */
|
||||
pchan_matrix = ht40_chan;
|
||||
nchan_matrix = CDF_ARRAY_SIZE(ht40_chan);
|
||||
break;
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
|
||||
case CH_WIDTH_80MHZ:
|
||||
/* HT80 */
|
||||
pchan_matrix = ht80_chan;
|
||||
nchan_matrix = CDF_ARRAY_SIZE(ht80_chan);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
/* handle exception and fall back to HT20 table */
|
||||
pchan_matrix = ht20_chan;
|
||||
@@ -951,7 +941,7 @@ sap_find_target_channel_in_channel_matrix(ptSapContext sapContext,
|
||||
/**
|
||||
* sap_mark_channels_leaking_into_nol() - to mark channel leaking in to nol
|
||||
* @sap_ctx: pointer to SAP context
|
||||
* @cb_mode: channel bonding mode
|
||||
* @ch_width: channel width
|
||||
* @nol: nol info
|
||||
* @temp_ch_lst_sz: the target channel list
|
||||
* @temp_ch_lst: the target channel list
|
||||
@@ -965,7 +955,7 @@ sap_find_target_channel_in_channel_matrix(ptSapContext sapContext,
|
||||
|
||||
CDF_STATUS
|
||||
sap_mark_channels_leaking_into_nol(ptSapContext sap_ctx,
|
||||
ePhyChanBondState cb_mode,
|
||||
phy_ch_width ch_width,
|
||||
tSapDfsNolInfo *nol,
|
||||
uint8_t temp_ch_lst_sz,
|
||||
uint8_t *temp_ch_lst)
|
||||
@@ -990,7 +980,7 @@ sap_mark_channels_leaking_into_nol(ptSapContext sap_ctx,
|
||||
FL("sapdfs: processing NOL channel: %d"),
|
||||
dfs_nol_channel);
|
||||
if (false == sap_find_target_channel_in_channel_matrix(
|
||||
sap_ctx, cb_mode, dfs_nol_channel,
|
||||
sap_ctx, ch_width, dfs_nol_channel,
|
||||
&target_chan_matrix)) {
|
||||
/*
|
||||
* should never happen, we should always find a table
|
||||
@@ -1066,9 +1056,9 @@ static void sap_set_bitmap(chan_bonding_bitmap *pBitmap, uint8_t channel)
|
||||
}
|
||||
|
||||
/**
|
||||
* sap_populate_available_channels - To populate available channel
|
||||
* sap_populate_available_channels() - To populate available channel
|
||||
* @bitmap: bitmap to populate
|
||||
* @current_cbmode: cb mode to check for channel availability
|
||||
* @ch_width: channel width
|
||||
* @avail_chnl: available channel list to populate
|
||||
*
|
||||
* This function reads the bitmap and populates available channel
|
||||
@@ -1079,20 +1069,16 @@ static void sap_set_bitmap(chan_bonding_bitmap *pBitmap, uint8_t channel)
|
||||
* Return: number of channels found
|
||||
*/
|
||||
static uint8_t sap_populate_available_channels(chan_bonding_bitmap *bitmap,
|
||||
ePhyChanBondState current_cbmode,
|
||||
phy_ch_width ch_width,
|
||||
uint8_t *avail_chnl)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t chnl_count = 0;
|
||||
uint8_t start_channel = 0;
|
||||
|
||||
switch (current_cbmode) {
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
/* HT80 */
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH:
|
||||
case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH:
|
||||
switch (ch_width) {
|
||||
/* VHT80 */
|
||||
case CH_WIDTH_80MHZ:
|
||||
for (i = 0; i < MAX_80MHZ_BANDS; i++) {
|
||||
start_channel = bitmap->chanBondingSet[i].startChannel;
|
||||
if (bitmap->chanBondingSet[i].channelMap ==
|
||||
@@ -1104,10 +1090,8 @@ static uint8_t sap_populate_available_channels(chan_bonding_bitmap *bitmap,
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
/* HT40 */
|
||||
case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
|
||||
case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
|
||||
case CH_WIDTH_40MHZ:
|
||||
for (i = 0; i < MAX_80MHZ_BANDS; i++) {
|
||||
start_channel = bitmap->chanBondingSet[i].startChannel;
|
||||
if ((bitmap->chanBondingSet[i].channelMap &
|
||||
@@ -1262,8 +1246,7 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
uint8_t channelID;
|
||||
tHalHandle hHal = CDS_GET_HAL_CB(sapContext->p_cds_gctx);
|
||||
tpAniSirGlobal pMac;
|
||||
uint32_t chanWidth;
|
||||
ePhyChanBondState cbModeCurrent;
|
||||
phy_ch_width ch_width;
|
||||
uint8_t *tmp_ch_lst = NULL;
|
||||
uint8_t dfs_region;
|
||||
|
||||
@@ -1280,19 +1263,6 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
return target_channel;
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the original one and store it.
|
||||
* use the stored original value when you call this function next time
|
||||
* so fall back mechanism always starts with original ini value.
|
||||
*/
|
||||
if (pMac->sap.SapDfsInfo.orig_cbMode == 0) {
|
||||
pMac->sap.SapDfsInfo.orig_cbMode =
|
||||
(sapContext->ch_width_orig > CH_WIDTH_20MHZ ? 1 : 0);
|
||||
cbModeCurrent = pMac->sap.SapDfsInfo.orig_cbMode;
|
||||
} else {
|
||||
cbModeCurrent = pMac->sap.SapDfsInfo.orig_cbMode;
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the original one and store it.
|
||||
* use the stored original value when you call this function next time
|
||||
@@ -1301,9 +1271,9 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
if (pMac->sap.SapDfsInfo.orig_chanWidth == 0) {
|
||||
pMac->sap.SapDfsInfo.orig_chanWidth =
|
||||
sapContext->ch_width_orig;
|
||||
chanWidth = pMac->sap.SapDfsInfo.orig_chanWidth;
|
||||
ch_width = pMac->sap.SapDfsInfo.orig_chanWidth;
|
||||
} else {
|
||||
chanWidth = pMac->sap.SapDfsInfo.orig_chanWidth;
|
||||
ch_width = pMac->sap.SapDfsInfo.orig_chanWidth;
|
||||
}
|
||||
|
||||
if (sap_get5_g_hz_channel_list(sapContext)) {
|
||||
@@ -1471,7 +1441,7 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
);
|
||||
if (CDF_STATUS_SUCCESS !=
|
||||
sap_mark_channels_leaking_into_nol(sapContext,
|
||||
cbModeCurrent,
|
||||
ch_width,
|
||||
nol,
|
||||
valid_chnl_count,
|
||||
tmp_ch_lst)) {
|
||||
@@ -1505,8 +1475,7 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
* for 20MHz, directly create available
|
||||
* channel list
|
||||
*/
|
||||
if (cbModeCurrent ==
|
||||
PHY_SINGLE_CHANNEL_CENTERED) {
|
||||
if (ch_width == CH_WIDTH_20MHZ) {
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_DEBUG,
|
||||
FL
|
||||
@@ -1529,18 +1498,17 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
* if 40 MHz or 80 MHz, populate available
|
||||
* channel list from bitmap
|
||||
*/
|
||||
if (cbModeCurrent != PHY_SINGLE_CHANNEL_CENTERED) {
|
||||
if (ch_width != CH_WIDTH_20MHZ) {
|
||||
available_ch_cnt =
|
||||
sap_populate_available_channels(&channelBitmap,
|
||||
cbModeCurrent,
|
||||
ch_width,
|
||||
availableChannels);
|
||||
/*
|
||||
* if no valid channel bonding found,
|
||||
* fallback to lower bandwidth
|
||||
*/
|
||||
if (available_ch_cnt == 0) {
|
||||
if (cbModeCurrent >=
|
||||
PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED) {
|
||||
if (ch_width == CH_WIDTH_80MHZ) {
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
@@ -1549,22 +1517,12 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
("sapdfs:Changing chanWidth from [%d] to [%d]"),
|
||||
chanWidth,
|
||||
ch_width,
|
||||
CH_WIDTH_40MHZ);
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
("sapdfs:Changing CB mode from [%d] to [%d]"),
|
||||
cbModeCurrent,
|
||||
PHY_DOUBLE_CHANNEL_LOW_PRIMARY
|
||||
);
|
||||
cbModeCurrent =
|
||||
PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
|
||||
chanWidth = CH_WIDTH_40MHZ;
|
||||
ch_width = CH_WIDTH_40MHZ;
|
||||
/* continue to start of do loop */
|
||||
continue;
|
||||
} else if (cbModeCurrent >=
|
||||
PHY_DOUBLE_CHANNEL_LOW_PRIMARY) {
|
||||
} else if (ch_width == CH_WIDTH_40MHZ) {
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
@@ -1573,17 +1531,9 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
("sapdfs:Changing chanWidth from [%d] to [%d]"),
|
||||
chanWidth,
|
||||
ch_width,
|
||||
CH_WIDTH_20MHZ);
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_WARN,
|
||||
FL
|
||||
("sapdfs:Changing CB mode from [%d] to [%d]"),
|
||||
cbModeCurrent,
|
||||
PHY_SINGLE_CHANNEL_CENTERED);
|
||||
cbModeCurrent =
|
||||
PHY_SINGLE_CHANNEL_CENTERED;
|
||||
chanWidth = CH_WIDTH_20MHZ;
|
||||
ch_width = CH_WIDTH_20MHZ;
|
||||
/* continue to start of do loop */
|
||||
continue;
|
||||
}
|
||||
@@ -1629,12 +1579,7 @@ static uint8_t sap_random_channel_sel(ptSapContext sapContext)
|
||||
target_channel = avail_dfs_chan_list[i];
|
||||
}
|
||||
|
||||
pMac->sap.SapDfsInfo.new_chanWidth = chanWidth;
|
||||
pMac->sap.SapDfsInfo.new_cbMode = cbModeCurrent;
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_INFO_LOW,
|
||||
FL("sapdfs: New CB mode = %d"),
|
||||
pMac->sap.SapDfsInfo.new_cbMode);
|
||||
pMac->sap.SapDfsInfo.new_chanWidth = ch_width;
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP,
|
||||
CDF_TRACE_LEVEL_INFO_LOW,
|
||||
FL("sapdfs: New Channel width = %d"),
|
||||
|
@@ -1425,7 +1425,6 @@ static CDF_STATUS wlansap_update_csa_channel_params(ptSapContext sap_context,
|
||||
{
|
||||
void *hal;
|
||||
tpAniSirGlobal mac_ctx;
|
||||
tSmeConfigParams *sme_config;
|
||||
uint8_t bw;
|
||||
|
||||
hal = CDS_GET_HAL_CB(sap_context->p_cds_gctx);
|
||||
@@ -1437,23 +1436,12 @@ static CDF_STATUS wlansap_update_csa_channel_params(ptSapContext sap_context,
|
||||
|
||||
mac_ctx = PMAC_STRUCT(hal);
|
||||
|
||||
sme_config = cdf_mem_malloc(sizeof(*sme_config));
|
||||
if (!sme_config) {
|
||||
CDF_TRACE(CDF_MODULE_ID_SAP, CDF_TRACE_LEVEL_ERROR,
|
||||
FL("memory allocation failed for sme_config"));
|
||||
return CDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
sme_get_config_param(mac_ctx, sme_config);
|
||||
if (channel <= RF_CHAN_14) {
|
||||
/*
|
||||
* currently OBSS scan is done in hostapd, so to avoid
|
||||
* SAP coming up in HT40 on channel switch we are
|
||||
* disabling channel bonding in 2.4Ghz.
|
||||
*/
|
||||
sme_config->csrConfig.channelBondingMode24GHz =
|
||||
eCSR_INI_SINGLE_CHANNEL_CENTERED;
|
||||
mac_ctx->sap.SapDfsInfo.new_cbMode = 0;
|
||||
mac_ctx->sap.SapDfsInfo.new_chanWidth = 0;
|
||||
|
||||
} else {
|
||||
@@ -1475,37 +1463,23 @@ static CDF_STATUS wlansap_update_csa_channel_params(ptSapContext sap_context,
|
||||
continue;
|
||||
|
||||
if (bw == BW80) {
|
||||
wlansap_update_bw80_cbmode(channel, sme_config);
|
||||
mac_ctx->sap.SapDfsInfo.new_cbMode =
|
||||
sme_config->csrConfig.channelBondingMode5GHz;
|
||||
mac_ctx->sap.SapDfsInfo.new_chanWidth =
|
||||
CH_WIDTH_80MHZ;
|
||||
} else if (bw == BW40_HIGH_PRIMARY) {
|
||||
mac_ctx->sap.SapDfsInfo.new_chanWidth =
|
||||
CH_WIDTH_40MHZ;
|
||||
sme_config->csrConfig.channelBondingMode5GHz =
|
||||
mac_ctx->sap.SapDfsInfo.new_cbMode =
|
||||
eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY;
|
||||
} else if (bw == BW40_LOW_PRIMARY) {
|
||||
mac_ctx->sap.SapDfsInfo.new_chanWidth =
|
||||
CH_WIDTH_40MHZ;
|
||||
sme_config->csrConfig.channelBondingMode5GHz =
|
||||
mac_ctx->sap.SapDfsInfo.new_cbMode =
|
||||
eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY;
|
||||
} else {
|
||||
mac_ctx->sap.SapDfsInfo.new_chanWidth =
|
||||
CH_WIDTH_20MHZ;
|
||||
sme_config->csrConfig.channelBondingMode5GHz =
|
||||
mac_ctx->sap.SapDfsInfo.new_cbMode =
|
||||
eCSR_INI_SINGLE_CHANNEL_CENTERED;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sme_update_config(mac_ctx, sme_config);
|
||||
cdf_mem_free(sme_config);
|
||||
return CDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1599,6 +1573,13 @@ wlansap_set_channel_change_with_csa(void *p_cds_gctx, uint32_t targetChannel)
|
||||
* to sap context.
|
||||
*/
|
||||
pMac->sap.SapDfsInfo.target_channel = targetChannel;
|
||||
pMac->sap.SapDfsInfo.new_ch_params.ch_width =
|
||||
pMac->sap.SapDfsInfo.new_chanWidth;
|
||||
sme_set_ch_params(hHal,
|
||||
sapContext->csr_roamProfile.phyMode,
|
||||
targetChannel,
|
||||
0,
|
||||
&pMac->sap.SapDfsInfo.new_ch_params);
|
||||
/*
|
||||
* Set the CSA IE required flag.
|
||||
*/
|
||||
@@ -2307,8 +2288,6 @@ wlansap_channel_change_request(void *pSapCtx, uint8_t target_channel)
|
||||
void *hHal = NULL;
|
||||
tpAniSirGlobal mac_ctx = NULL;
|
||||
eCsrPhyMode phy_mode;
|
||||
uint32_t cb_mode;
|
||||
uint32_t vht_channel_width;
|
||||
chan_params_t ch_params;
|
||||
sapContext = (ptSapContext) pSapCtx;
|
||||
|
||||
@@ -2332,18 +2311,16 @@ wlansap_channel_change_request(void *pSapCtx, uint8_t target_channel)
|
||||
* because we've implemented channel width fallback mechanism for DFS
|
||||
* which will result in channel width changing dynamically.
|
||||
*/
|
||||
cb_mode = mac_ctx->sap.SapDfsInfo.new_cbMode;
|
||||
vht_channel_width = mac_ctx->sap.SapDfsInfo.new_chanWidth;
|
||||
ch_params.ch_width = vht_channel_width;
|
||||
ch_params.ch_width = mac_ctx->sap.SapDfsInfo.new_chanWidth;
|
||||
sme_set_ch_params(hHal, phy_mode, target_channel, 0, &ch_params);
|
||||
sapContext->ch_params.ch_width = vht_channel_width;
|
||||
sapContext->ch_params.ch_width = ch_params.ch_width;
|
||||
/* Update the channel as this will be used to
|
||||
* send event to supplicant
|
||||
*/
|
||||
sapContext->channel = target_channel;
|
||||
sapContext->csr_roamProfile.ch_params.ch_width = vht_channel_width;
|
||||
sapContext->csr_roamProfile.ch_params.ch_width = ch_params.ch_width;
|
||||
cdf_ret_status = sme_roam_channel_change_req(hHal, sapContext->bssid,
|
||||
cb_mode, &sapContext->csr_roamProfile);
|
||||
&ch_params, &sapContext->csr_roamProfile);
|
||||
|
||||
if (cdf_ret_status == CDF_STATUS_SUCCESS) {
|
||||
sap_signal_hdd_event(sapContext, NULL,
|
||||
@@ -2446,8 +2423,6 @@ CDF_STATUS wlansap_dfs_send_csa_ie_request(void *pSapCtx)
|
||||
CDF_STATUS cdf_ret_status = CDF_STATUS_E_FAILURE;
|
||||
void *hHal = NULL;
|
||||
tpAniSirGlobal pMac = NULL;
|
||||
uint32_t cbmode, vht_ch_width;
|
||||
uint8_t ch_bandwidth;
|
||||
sapContext = (ptSapContext) pSapCtx;
|
||||
|
||||
if (NULL == sapContext) {
|
||||
@@ -2464,38 +2439,11 @@ CDF_STATUS wlansap_dfs_send_csa_ie_request(void *pSapCtx)
|
||||
}
|
||||
pMac = PMAC_STRUCT(hHal);
|
||||
|
||||
/*
|
||||
* We are getting channel bonding mode from sapDfsInfor structure
|
||||
* because we've implemented channel width fallback mechanism for DFS
|
||||
* which will result in channel width changing dynamically.
|
||||
*/
|
||||
vht_ch_width = pMac->sap.SapDfsInfo.new_chanWidth;
|
||||
cbmode = pMac->sap.SapDfsInfo.new_cbMode;
|
||||
|
||||
if (pMac->sap.SapDfsInfo.target_channel <= 14 ||
|
||||
vht_ch_width == eHT_CHANNEL_WIDTH_40MHZ ||
|
||||
vht_ch_width == eHT_CHANNEL_WIDTH_20MHZ) {
|
||||
switch (cbmode) {
|
||||
case eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY:
|
||||
ch_bandwidth = BW40_HIGH_PRIMARY;
|
||||
break;
|
||||
case eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY:
|
||||
ch_bandwidth = BW40_LOW_PRIMARY;
|
||||
break;
|
||||
case eCSR_INI_SINGLE_CHANNEL_CENTERED:
|
||||
default:
|
||||
ch_bandwidth = BW20;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
ch_bandwidth = BW80;
|
||||
}
|
||||
|
||||
cdf_ret_status = sme_roam_csa_ie_request(hHal,
|
||||
sapContext->bssid,
|
||||
pMac->sap.SapDfsInfo.target_channel,
|
||||
pMac->sap.SapDfsInfo.csaIERequired,
|
||||
ch_bandwidth);
|
||||
&pMac->sap.SapDfsInfo.new_ch_params);
|
||||
|
||||
if (cdf_ret_status == CDF_STATUS_SUCCESS) {
|
||||
return CDF_STATUS_SUCCESS;
|
||||
|
@@ -40,21 +40,6 @@
|
||||
|
||||
#define CSR_INVALID_SCANRESULT_HANDLE (NULL)
|
||||
|
||||
typedef enum {
|
||||
CH_WIDTH_20MHZ = 0,
|
||||
CH_WIDTH_40MHZ = 1,
|
||||
CH_WIDTH_80MHZ = 2,
|
||||
CH_WIDTH_160MHZ = 3,
|
||||
CH_WIDTH_80P80MHZ = 4
|
||||
} phy_ch_width;
|
||||
|
||||
typedef struct ch_params_s {
|
||||
phy_ch_width ch_width;
|
||||
uint8_t sec_ch_offset;
|
||||
uint8_t center_freq_seg0;
|
||||
uint8_t center_freq_seg1;
|
||||
} chan_params_t;
|
||||
|
||||
typedef enum {
|
||||
/* never used */
|
||||
eCSR_AUTH_TYPE_NONE,
|
||||
@@ -145,10 +130,8 @@ typedef enum {
|
||||
eCSR_DOT11_MODE_11g_ONLY = 0x0020,
|
||||
eCSR_DOT11_MODE_11n_ONLY = 0x0040,
|
||||
eCSR_DOT11_MODE_11b_ONLY = 0x0080,
|
||||
#ifdef WLAN_FEATURE_11AC
|
||||
eCSR_DOT11_MODE_11ac = 0x0100,
|
||||
eCSR_DOT11_MODE_11ac_ONLY = 0x0200,
|
||||
#endif
|
||||
/*
|
||||
* This is for WIFI test. It is same as eWNIAPI_MAC_PROTOCOL_ALL
|
||||
* except when it starts IBSS in 11B of 2.4GHz
|
||||
|
@@ -1333,7 +1333,7 @@ bool csr_roam_is_sta_mode(tpAniSirGlobal pMac, uint32_t sessionId);
|
||||
|
||||
/* Post Channel Change Indication */
|
||||
CDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac,
|
||||
struct cdf_mac_addr bssid, uint8_t cb_mode,
|
||||
struct cdf_mac_addr bssid, chan_params_t *ch_params,
|
||||
tCsrRoamProfile *profile);
|
||||
|
||||
/* Post Beacon Tx Start Indication */
|
||||
@@ -1342,7 +1342,8 @@ CDF_STATUS csr_roam_start_beacon_req(tpAniSirGlobal pMac,
|
||||
|
||||
CDF_STATUS
|
||||
csr_roam_send_chan_sw_ie_request(tpAniSirGlobal pMac, struct cdf_mac_addr bssid,
|
||||
uint8_t targetChannel, uint8_t csaIeReqd, uint8_t ch_bandwidth);
|
||||
uint8_t targetChannel, uint8_t csaIeReqd,
|
||||
chan_params_t *ch_params);
|
||||
CDF_STATUS
|
||||
csr_roam_modify_add_ies(tpAniSirGlobal pMac,
|
||||
tSirModifyIE *pModifyIE, eUpdateIEsType updateType);
|
||||
|
@@ -786,12 +786,13 @@ CDF_STATUS sme_set_auto_shutdown_cb(tHalHandle hHal, void (*pCallbackfn)(void));
|
||||
CDF_STATUS sme_set_auto_shutdown_timer(tHalHandle hHal, uint32_t timer_value);
|
||||
#endif
|
||||
CDF_STATUS sme_roam_channel_change_req(tHalHandle hHal,
|
||||
struct cdf_mac_addr bssid, uint32_t cb_mode,
|
||||
struct cdf_mac_addr bssid, chan_params_t *ch_params,
|
||||
tCsrRoamProfile *profile);
|
||||
CDF_STATUS sme_roam_start_beacon_req(tHalHandle hHal,
|
||||
struct cdf_mac_addr bssid, uint8_t dfsCacWaitStatus);
|
||||
CDF_STATUS sme_roam_csa_ie_request(tHalHandle hHal, struct cdf_mac_addr bssid,
|
||||
uint8_t targetChannel, uint8_t csaIeReqd, uint8_t ch_bandwidth);
|
||||
uint8_t targetChannel, uint8_t csaIeReqd,
|
||||
chan_params_t *ch_params);
|
||||
CDF_STATUS sme_init_thermal_info(tHalHandle hHal,
|
||||
tSmeThermalParams thermalParam);
|
||||
CDF_STATUS sme_set_thermal_level(tHalHandle hHal, uint8_t level);
|
||||
|
@@ -11995,32 +11995,28 @@ CDF_STATUS sme_set_mas(uint32_t val)
|
||||
return CDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
\fn sme_roam_channel_change_req
|
||||
\brief API to Indicate Channel change to new target channel
|
||||
\param hHal - The handle returned by mac_open
|
||||
\param targetChannel - New Channel to move the SAP to.
|
||||
\return CDF_STATUS
|
||||
---------------------------------------------------------------------------*/
|
||||
/**
|
||||
* sme_roam_channel_change_req() - Channel change to new target channel
|
||||
* @hHal: handle returned by mac_open
|
||||
* @bssid: mac address of BSS
|
||||
* @ch_params: target channel information
|
||||
* @profile: CSR profile
|
||||
*
|
||||
* API to Indicate Channel change to new target channel
|
||||
*
|
||||
* Return: CDF_STATUS
|
||||
*/
|
||||
CDF_STATUS sme_roam_channel_change_req(tHalHandle hHal,
|
||||
struct cdf_mac_addr bssid, uint32_t cb_mode, tCsrRoamProfile *profile)
|
||||
struct cdf_mac_addr bssid, chan_params_t *ch_params,
|
||||
tCsrRoamProfile *profile)
|
||||
{
|
||||
CDF_STATUS status = CDF_STATUS_E_FAILURE;
|
||||
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
|
||||
uint8_t ch_mode;
|
||||
|
||||
ch_mode = (profile->ChannelInfo.ChannelList[0] <=
|
||||
CSR_MAX_2_4_GHZ_SUPPORTED_CHANNELS) ?
|
||||
pMac->roam.configParam.channelBondingMode24GHz :
|
||||
pMac->roam.configParam.channelBondingMode5GHz;
|
||||
|
||||
status = sme_acquire_global_lock(&pMac->sme);
|
||||
if (CDF_IS_STATUS_SUCCESS(status)) {
|
||||
|
||||
CDF_TRACE(CDF_MODULE_ID_SME, CDF_TRACE_LEVEL_INFO_MED,
|
||||
FL("sapdfs: requested cbmode=[%d] & new negotiated cbmode[%d]"),
|
||||
cb_mode, ch_mode);
|
||||
status = csr_roam_channel_change_req(pMac, bssid, ch_mode,
|
||||
status = csr_roam_channel_change_req(pMac, bssid, ch_params,
|
||||
profile);
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
}
|
||||
@@ -12109,25 +12105,26 @@ CDF_STATUS sme_roam_start_beacon_req(tHalHandle hHal, struct cdf_mac_addr bssid,
|
||||
return status;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
\fn sme_roam_csa_ie_request
|
||||
\brief API to request CSA IE transmission from PE
|
||||
\param hHal - The handle returned by mac_open
|
||||
\param pDfsCsaReq - CSA IE request
|
||||
\param bssid - SAP bssid
|
||||
\param ch_bandwidth - Channel offset
|
||||
\return CDF_STATUS
|
||||
---------------------------------------------------------------------------*/
|
||||
/**
|
||||
* sme_roam_csa_ie_request() - request CSA IE transmission from PE
|
||||
* @hHal: handle returned by mac_open
|
||||
* @bssid: SAP bssid
|
||||
* @targetChannel: target channel information
|
||||
* @csaIeReqd: CSA IE Request
|
||||
* @ch_params: channel information
|
||||
*
|
||||
* Return: CDF_STATUS
|
||||
*/
|
||||
CDF_STATUS sme_roam_csa_ie_request(tHalHandle hHal, struct cdf_mac_addr bssid,
|
||||
uint8_t targetChannel, uint8_t csaIeReqd,
|
||||
uint8_t ch_bandwidth)
|
||||
chan_params_t *ch_params)
|
||||
{
|
||||
CDF_STATUS status = CDF_STATUS_E_FAILURE;
|
||||
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
|
||||
status = sme_acquire_global_lock(&pMac->sme);
|
||||
if (CDF_IS_STATUS_SUCCESS(status)) {
|
||||
status = csr_roam_send_chan_sw_ie_request(pMac, bssid, targetChannel,
|
||||
csaIeReqd, ch_bandwidth);
|
||||
status = csr_roam_send_chan_sw_ie_request(pMac, bssid,
|
||||
targetChannel, csaIeReqd, ch_params);
|
||||
sme_release_global_lock(&pMac->sme);
|
||||
}
|
||||
return status;
|
||||
|
@@ -17964,14 +17964,21 @@ CDF_STATUS csr_roam_read_tsf(tpAniSirGlobal pMac, uint8_t *pTimestamp,
|
||||
}
|
||||
#endif /*FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
|
||||
|
||||
/*
|
||||
* Post Channel Change Request to LIM
|
||||
/**
|
||||
* csr_roam_channel_change_req() - Post channel change request to LIM
|
||||
* @pMac: mac context
|
||||
* @bssid: SAP bssid
|
||||
* @ch_params: channel information
|
||||
* @profile: CSR profile
|
||||
*
|
||||
* This API is primarily used to post
|
||||
* Channel Change Req for SAP
|
||||
*
|
||||
* Return: CDF_STATUS
|
||||
*/
|
||||
CDF_STATUS
|
||||
csr_roam_channel_change_req(tpAniSirGlobal pMac, struct cdf_mac_addr bssid,
|
||||
uint8_t cbMode, tCsrRoamProfile *profile)
|
||||
CDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac,
|
||||
struct cdf_mac_addr bssid,
|
||||
chan_params_t *ch_params, tCsrRoamProfile *profile)
|
||||
{
|
||||
CDF_STATUS status = CDF_STATUS_SUCCESS;
|
||||
tSirChanChangeRequest *pMsg;
|
||||
@@ -17988,12 +17995,12 @@ csr_roam_channel_change_req(tpAniSirGlobal pMac, struct cdf_mac_addr bssid,
|
||||
pMsg->messageType = eWNI_SME_CHANNEL_CHANGE_REQ;
|
||||
pMsg->messageLen = sizeof(tSirChanChangeRequest);
|
||||
pMsg->targetChannel = profile->ChannelInfo.ChannelList[0];
|
||||
pMsg->cbMode = cbMode;
|
||||
pMsg->channel_width = profile->ch_params.ch_width;
|
||||
pMsg->sec_ch_offset = ch_params->sec_ch_offset;
|
||||
pMsg->ch_width = profile->ch_params.ch_width;
|
||||
pMsg->dot11mode = csr_translate_to_wni_cfg_dot11_mode(pMac,
|
||||
pMac->roam.configParam.uCfgDot11Mode);
|
||||
pMsg->center_freq_seg_0 = pMsg->targetChannel;
|
||||
pMsg->center_freq_seg_1 = 0;
|
||||
pMsg->center_freq_seg_0 = ch_params->center_freq_seg0;
|
||||
pMsg->center_freq_seg_1 = ch_params->center_freq_seg1;
|
||||
cdf_mem_copy(pMsg->bssid, bssid.bytes, CDF_MAC_ADDR_SIZE);
|
||||
cdf_mem_copy(&pMsg->operational_rateset,
|
||||
¶m.operationalRateSet, sizeof(pMsg->operational_rateset));
|
||||
@@ -18194,7 +18201,7 @@ CDF_STATUS csr_send_ext_change_channel(tpAniSirGlobal mac_ctx, uint32_t channel,
|
||||
* @bssid: BSSID
|
||||
* @target_channel: Channel on which to send the IE
|
||||
* @csa_ie_reqd: Include/Exclude CSA IE.
|
||||
* @ch_bandwidth: Channel offset
|
||||
* @ch_params: operating Channel related information
|
||||
*
|
||||
* This function sends request to transmit channel switch announcement
|
||||
* IE to lower layers
|
||||
@@ -18204,7 +18211,7 @@ CDF_STATUS csr_send_ext_change_channel(tpAniSirGlobal mac_ctx, uint32_t channel,
|
||||
CDF_STATUS
|
||||
csr_roam_send_chan_sw_ie_request(tpAniSirGlobal mac_ctx,
|
||||
struct cdf_mac_addr bssid, uint8_t target_channel,
|
||||
uint8_t csa_ie_reqd, uint8_t ch_bandwidth)
|
||||
uint8_t csa_ie_reqd, chan_params_t *ch_params)
|
||||
{
|
||||
CDF_STATUS status = CDF_STATUS_SUCCESS;
|
||||
tSirDfsCsaIeRequest *msg;
|
||||
@@ -18221,7 +18228,7 @@ csr_roam_send_chan_sw_ie_request(tpAniSirGlobal mac_ctx,
|
||||
msg->targetChannel = target_channel;
|
||||
msg->csaIeRequired = csa_ie_reqd;
|
||||
cdf_mem_copy(msg->bssid, bssid.bytes, CDF_MAC_ADDR_SIZE);
|
||||
msg->ch_bandwidth = ch_bandwidth;
|
||||
cdf_mem_copy(&msg->ch_params, ch_params, sizeof(chan_params_t));
|
||||
|
||||
status = cds_send_mb_message_to_mac(msg);
|
||||
|
||||
|
@@ -1921,32 +1921,6 @@ end:
|
||||
return txrx_vdev_handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_get_center_channel() - get center channel
|
||||
* @chan: channel number
|
||||
* @chan_offset: channel offset
|
||||
*
|
||||
* Return: center channel
|
||||
*/
|
||||
uint8_t wma_get_center_channel(uint8_t chan, uint8_t chan_offset)
|
||||
{
|
||||
uint8_t band_center_chan = 0;
|
||||
|
||||
if ((chan_offset == PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED) ||
|
||||
(chan_offset == PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW))
|
||||
band_center_chan = chan + 2;
|
||||
else if (chan_offset == PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW)
|
||||
band_center_chan = chan + 6;
|
||||
else if ((chan_offset == PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH) ||
|
||||
(chan_offset ==
|
||||
PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED))
|
||||
band_center_chan = chan - 2;
|
||||
else if (chan_offset == PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH)
|
||||
band_center_chan = chan - 6;
|
||||
|
||||
return band_center_chan;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_vdev_start() - send vdev start request to fw
|
||||
* @wma: wma handle
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele