qcacld-3.0: Update host DBS policy manager in roaming operations
Firmware DBS mode is updated during firmware based roaming. Same change is reflected in the host policy manager. Process hw_mode TLV in roam sync indication event. Update cds concurrency policy after roaming. Handle exceptions for ROAM_ABORT and HO_FAIL conditions. Change-Id: I826c6766f73441256e5946d3167966e645f23430 CRs-Fixed: 1044336
This commit is contained in:
@@ -635,13 +635,10 @@ static inline void cds_force_sap_on_scc(eCsrRoamResult roam_result,
|
||||
#endif /* FEATURE_WLAN_FORCE_SAP_SCC */
|
||||
|
||||
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
|
||||
void cds_check_concurrent_intf_and_restart_sap(
|
||||
hdd_station_ctx_t *hdd_sta_ctx,
|
||||
hdd_adapter_t *adapter);
|
||||
void cds_check_concurrent_intf_and_restart_sap(hdd_adapter_t *adapter);
|
||||
#else
|
||||
static inline void cds_check_concurrent_intf_and_restart_sap(
|
||||
hdd_station_ctx_t *hdd_sta_ctx,
|
||||
hdd_adapter_t *adapter)
|
||||
hdd_adapter_t *adapter)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -798,7 +795,7 @@ QDF_STATUS qdf_wait_for_connection_update(void);
|
||||
QDF_STATUS qdf_reset_connection_update(void);
|
||||
QDF_STATUS qdf_set_connection_update(void);
|
||||
QDF_STATUS qdf_init_connection_update(void);
|
||||
QDF_STATUS cds_stop_start_opportunistic_timer(void);
|
||||
QDF_STATUS cds_restart_opportunistic_timer(bool check_state);
|
||||
QDF_STATUS cds_modify_sap_pcl_based_on_mandatory_channel(uint8_t *pcl_list_org,
|
||||
uint8_t *weight_list_org,
|
||||
uint32_t *pcl_len_org);
|
||||
@@ -833,4 +830,8 @@ bool cds_is_hw_mode_change_after_vdev_up(void);
|
||||
void cds_dump_connection_status_info(void);
|
||||
uint32_t cds_mode_specific_connection_count(enum cds_con_mode mode,
|
||||
uint32_t *list);
|
||||
void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index,
|
||||
uint32_t new_hw_mode_index,
|
||||
uint32_t num_vdev_mac_entries,
|
||||
struct sir_vdev_mac_map *vdev_mac_map);
|
||||
#endif /* __CDS_CONCURRENCY_H */
|
||||
|
@@ -2512,10 +2512,10 @@ static void cds_pdev_set_hw_mode_cb(uint32_t status,
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index,
|
||||
uint32_t new_hw_mode_index,
|
||||
uint32_t num_vdev_mac_entries,
|
||||
struct sir_vdev_mac_map *vdev_mac_map)
|
||||
void cds_hw_mode_transition_cb(uint32_t old_hw_mode_index,
|
||||
uint32_t new_hw_mode_index,
|
||||
uint32_t num_vdev_mac_entries,
|
||||
struct sir_vdev_mac_map *vdev_mac_map)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct sir_hw_mode_params hw_mode;
|
||||
@@ -6275,14 +6275,11 @@ QDF_STATUS cds_next_actions(uint32_t session_id,
|
||||
return status;
|
||||
}
|
||||
/**
|
||||
* if already in DBS no need to request DBS or if already in
|
||||
* non dbs no need request for non dbs again. Might be needed
|
||||
* if already in DBS no need to request DBS. Might be needed
|
||||
* to extend the logic when multiple dbs HW mode is available
|
||||
*/
|
||||
if ((((CDS_DBS_DOWNGRADE == action) || (CDS_DBS == action))
|
||||
&& hw_mode.dbs_cap) ||
|
||||
(((CDS_SINGLE_MAC_UPGRADE == action) ||
|
||||
(CDS_SINGLE_MAC == action)) && !hw_mode.dbs_cap)) {
|
||||
&& hw_mode.dbs_cap)) {
|
||||
cds_err("driver is already in %s mode, no further action needed",
|
||||
(hw_mode.dbs_cap) ? "dbs" : "non dbs");
|
||||
return QDF_STATUS_E_ALREADY;
|
||||
@@ -7043,17 +7040,18 @@ static void cds_check_sta_ap_concurrent_ch_intf(void *data)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_check_concurrent_intf_and_restart_sap() - Check concurrent change intf
|
||||
* @hdd_sta_ctx: Pointer to HDD STA context
|
||||
* @adapter: Pointer to HDD adapter
|
||||
*
|
||||
* Checks the concurrent change interface and restarts SAP
|
||||
* Return: None
|
||||
*/
|
||||
void cds_check_concurrent_intf_and_restart_sap(hdd_station_ctx_t *hdd_sta_ctx,
|
||||
hdd_adapter_t *adapter)
|
||||
void cds_check_concurrent_intf_and_restart_sap(hdd_adapter_t *adapter)
|
||||
{
|
||||
hdd_context_t *hdd_ctx;
|
||||
hdd_station_ctx_t *hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
|
||||
hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
if (!hdd_ctx) {
|
||||
@@ -8199,13 +8197,17 @@ enum cds_conc_next_action cds_get_current_pref_hw_mode(void)
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_stop_start_opportunistic_timer() - Start and stop the opportunistic timer
|
||||
* cds_restart_opportunistic_timer() - Restarts opportunistic timer
|
||||
* @check_state: check timer state if this flag is set, else restart
|
||||
* irrespective of state
|
||||
*
|
||||
* Stops and starts the opportunistic timer for DBS_OPPORTUNISTIC_TIME seconds
|
||||
* Restarts opportunistic timer for DBS_OPPORTUNISTIC_TIME seconds.
|
||||
* Check if current state is RUNNING if check_state is set, else
|
||||
* restart the timer irrespective of state.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cds_stop_start_opportunistic_timer(void)
|
||||
QDF_STATUS cds_restart_opportunistic_timer(bool check_state)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
p_cds_contextType cds_ctx;
|
||||
@@ -8216,6 +8218,11 @@ QDF_STATUS cds_stop_start_opportunistic_timer(void)
|
||||
return status;
|
||||
}
|
||||
|
||||
if (check_state &&
|
||||
QDF_TIMER_STATE_RUNNING !=
|
||||
cds_ctx->dbs_opportunistic_timer.state)
|
||||
return status;
|
||||
|
||||
qdf_mc_timer_stop(&cds_ctx->dbs_opportunistic_timer);
|
||||
|
||||
status = qdf_mc_timer_start(
|
||||
@@ -8852,7 +8859,7 @@ QDF_STATUS cds_set_hw_mode_on_channel_switch(uint8_t session_id)
|
||||
* as well.
|
||||
*/
|
||||
if (action == CDS_SINGLE_MAC_UPGRADE) {
|
||||
qdf_status = cds_stop_start_opportunistic_timer();
|
||||
qdf_status = cds_restart_opportunistic_timer(false);
|
||||
if (QDF_IS_STATUS_SUCCESS(qdf_status))
|
||||
cds_info("opportunistic timer for MCC upgrade");
|
||||
goto done;
|
||||
|
@@ -2482,8 +2482,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter,
|
||||
#endif
|
||||
|
||||
hdd_info("check for SAP restart");
|
||||
cds_check_concurrent_intf_and_restart_sap(pHddStaCtx,
|
||||
pAdapter);
|
||||
cds_check_concurrent_intf_and_restart_sap(pAdapter);
|
||||
|
||||
DPTRACE(qdf_dp_trace_mgmt_pkt(QDF_DP_TRACE_MGMT_PACKET_RECORD,
|
||||
pAdapter->sessionId,
|
||||
@@ -4738,19 +4737,6 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
|
||||
FL("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d"),
|
||||
pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId);
|
||||
break;
|
||||
case eCSR_ROAM_DISABLE_QUEUES:
|
||||
hdd_info("Disabling queues");
|
||||
wlan_hdd_netif_queue_control(pAdapter,
|
||||
WLAN_NETIF_TX_DISABLE,
|
||||
WLAN_CONTROL_PATH);
|
||||
break;
|
||||
case eCSR_ROAM_ENABLE_QUEUES:
|
||||
hdd_info("Enabling queues");
|
||||
wlan_hdd_netif_queue_control(pAdapter,
|
||||
WLAN_WAKE_ALL_NETIF_QUEUE,
|
||||
WLAN_CONTROL_PATH);
|
||||
break;
|
||||
|
||||
case eCSR_ROAM_SHOULD_ROAM:
|
||||
/* notify apps that we can't pass traffic anymore */
|
||||
hddLog(LOG1, FL("Disabling queues"));
|
||||
@@ -5034,6 +5020,22 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
|
||||
hdd_ndp_event_handler(pAdapter, pRoamInfo, roamId, roamStatus,
|
||||
roamResult);
|
||||
break;
|
||||
case eCSR_ROAM_START:
|
||||
hdd_info("Process ROAM_START from firmware");
|
||||
wlan_hdd_netif_queue_control(pAdapter,
|
||||
WLAN_NETIF_TX_DISABLE,
|
||||
WLAN_CONTROL_PATH);
|
||||
cds_set_connection_in_progress(true);
|
||||
cds_restart_opportunistic_timer(true);
|
||||
break;
|
||||
case eCSR_ROAM_ABORT:
|
||||
hdd_info("Firmware aborted roaming operation, previous connection is still valid");
|
||||
wlan_hdd_netif_queue_control(pAdapter,
|
||||
WLAN_WAKE_ALL_NETIF_QUEUE,
|
||||
WLAN_CONTROL_PATH);
|
||||
cds_set_connection_in_progress(false);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@@ -6075,37 +6075,12 @@ int wlan_hdd_set_channel(struct wiphy *wiphy,
|
||||
case NL80211_CHAN_HT20:
|
||||
case NL80211_CHAN_NO_HT:
|
||||
smeConfig.csrConfig.obssEnabled = false;
|
||||
if (channel <= 14)
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode24GHz =
|
||||
eCSR_INI_SINGLE_CHANNEL_CENTERED;
|
||||
else
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode5GHz =
|
||||
eCSR_INI_SINGLE_CHANNEL_CENTERED;
|
||||
sap_config->sec_ch = 0;
|
||||
break;
|
||||
|
||||
case NL80211_CHAN_HT40MINUS:
|
||||
if (channel <= 14)
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode24GHz =
|
||||
eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY;
|
||||
else
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode5GHz =
|
||||
eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY;
|
||||
sap_config->sec_ch = sap_config->channel - 4;
|
||||
break;
|
||||
case NL80211_CHAN_HT40PLUS:
|
||||
if (channel <= 14)
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode24GHz =
|
||||
eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY;
|
||||
else
|
||||
smeConfig.csrConfig.
|
||||
channelBondingMode5GHz =
|
||||
eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY;
|
||||
sap_config->sec_ch = sap_config->channel + 4;
|
||||
break;
|
||||
default:
|
||||
|
@@ -193,14 +193,16 @@ typedef enum {
|
||||
* enum sir_roam_op_code - Operation to be done by the callback.
|
||||
* @SIR_ROAM_SYNCH_PROPAGATION: Propagate the new BSS info after roaming.
|
||||
* @SIR_ROAMING_DEREGISTER_STA: Deregister the old STA after roaming.
|
||||
* @SIR_ROAMING_TX_QUEUE_DISABLE: Disable the network queues while roaming.
|
||||
* @SIR_ROAMING_TX_QUEUE_ENABLE: Enable back the n/w queues in case roam fails.
|
||||
* @SIR_ROAMING_START: Firmware started roaming operation
|
||||
* @SIR_ROAMING_ABORT: Firmware aborted roaming operation, still connected.
|
||||
* @SIR_ROAM_SYNCH_COMPLETE: Roam sync propagation is complete.
|
||||
*/
|
||||
enum sir_roam_op_code {
|
||||
SIR_ROAM_SYNCH_PROPAGATION = 1,
|
||||
SIR_ROAMING_DEREGISTER_STA,
|
||||
SIR_ROAMING_TX_QUEUE_DISABLE,
|
||||
SIR_ROAMING_TX_QUEUE_ENABLE,
|
||||
SIR_ROAMING_START,
|
||||
SIR_ROAMING_ABORT,
|
||||
SIR_ROAM_SYNCH_COMPLETE,
|
||||
};
|
||||
/**
|
||||
* Module ID definitions.
|
||||
@@ -4153,6 +4155,7 @@ typedef struct sSirSmeRoamOffloadSynchInd {
|
||||
void *add_bss_params;
|
||||
tpSirSmeJoinRsp join_rsp;
|
||||
uint16_t aid;
|
||||
struct sir_hw_mode_trans_ind hw_mode_trans_ind;
|
||||
} roam_offload_synch_ind;
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
|
@@ -505,11 +505,11 @@ typedef enum {
|
||||
/* Channel sw update notification */
|
||||
eCSR_ROAM_DFS_CHAN_SW_NOTIFY,
|
||||
eCSR_ROAM_EXT_CHG_CHNL_IND,
|
||||
eCSR_ROAM_DISABLE_QUEUES,
|
||||
eCSR_ROAM_ENABLE_QUEUES,
|
||||
eCSR_ROAM_STA_CHANNEL_SWITCH,
|
||||
eCSR_ROAM_NDP_STATUS_UPDATE,
|
||||
eCSR_ROAM_UPDATE_SCAN_RESULT,
|
||||
eCSR_ROAM_START,
|
||||
eCSR_ROAM_ABORT,
|
||||
} eRoamCmdStatus;
|
||||
|
||||
/* comment inside indicates what roaming callback gets */
|
||||
|
@@ -18778,6 +18778,7 @@ void csr_process_ho_fail_ind(tpAniSirGlobal pMac, void *pMsgBuf)
|
||||
sessionId);
|
||||
return;
|
||||
}
|
||||
cds_set_connection_in_progress(false);
|
||||
csr_roam_synch_clean_up(pMac, sessionId);
|
||||
csr_roaming_report_diag_event(pMac, NULL,
|
||||
eCSR_REASON_ROAM_HO_FAIL);
|
||||
@@ -19501,18 +19502,41 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
||||
eCSR_ROAM_FT_START, eSIR_SME_SUCCESS);
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
return;
|
||||
case SIR_ROAMING_TX_QUEUE_DISABLE:
|
||||
case SIR_ROAMING_START:
|
||||
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
||||
eCSR_ROAM_DISABLE_QUEUES, eSIR_SME_SUCCESS);
|
||||
eCSR_ROAM_START, eSIR_SME_SUCCESS);
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
return;
|
||||
case SIR_ROAMING_TX_QUEUE_ENABLE:
|
||||
case SIR_ROAMING_ABORT:
|
||||
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
|
||||
eCSR_ROAM_ENABLE_QUEUES, eSIR_SME_SUCCESS);
|
||||
eCSR_ROAM_ABORT, eSIR_SME_SUCCESS);
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
return;
|
||||
case SIR_ROAM_SYNCH_PROPAGATION:
|
||||
break;
|
||||
case SIR_ROAM_SYNCH_COMPLETE:
|
||||
/*
|
||||
* Following operations need to be done once roam sync
|
||||
* completion is sent to FW, hence called here:
|
||||
* 1) Firmware has already updated DBS policy. Update connection
|
||||
* table in the host driver.
|
||||
* 2) Force SCC switch if needed
|
||||
* 3) Set connection in progress = false
|
||||
*/
|
||||
/* first update connection info from wma interface */
|
||||
cds_update_connection_info(session_id);
|
||||
/* then update remaining parameters from roam sync ctx */
|
||||
sms_log(mac_ctx, LOGE, FL("Update DBS hw mode"));
|
||||
cds_hw_mode_transition_cb(
|
||||
roam_synch_data->hw_mode_trans_ind.old_hw_mode_index,
|
||||
roam_synch_data->hw_mode_trans_ind.new_hw_mode_index,
|
||||
roam_synch_data->hw_mode_trans_ind.num_vdev_mac_entries,
|
||||
roam_synch_data->hw_mode_trans_ind.vdev_mac_map);
|
||||
cds_set_connection_in_progress(false);
|
||||
session->roam_synch_in_progress = false;
|
||||
cds_check_concurrent_intf_and_restart_sap(session->pContext);
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
return;
|
||||
default:
|
||||
sms_log(mac_ctx, LOGE, FL("LFR3: callback reason %d"), reason);
|
||||
sme_release_global_lock(&mac_ctx->sme);
|
||||
@@ -19737,6 +19761,7 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
|
||||
("NO CSR_IS_WAIT_FOR_KEY -> csr_roam_link_up"));
|
||||
csr_roam_link_up(mac_ctx, conn_profile->bssid);
|
||||
}
|
||||
|
||||
session->fRoaming = false;
|
||||
session->roam_synch_in_progress = false;
|
||||
qdf_mem_free(roam_info->pbFrames);
|
||||
|
@@ -296,4 +296,9 @@ bool wma_is_p2p_lo_capable(void);
|
||||
QDF_STATUS wma_p2p_lo_start(struct sir_p2p_lo_start *params);
|
||||
QDF_STATUS wma_p2p_lo_stop(u_int32_t vdev_id);
|
||||
QDF_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats);
|
||||
|
||||
void wma_process_pdev_hw_mode_trans_ind(void *wma,
|
||||
wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param,
|
||||
wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry,
|
||||
struct sir_hw_mode_trans_ind *hw_mode_trans_ind);
|
||||
#endif
|
||||
|
@@ -2488,6 +2488,66 @@ fail:
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_process_pdev_hw_mode_trans_ind() - Process HW mode transition info
|
||||
*
|
||||
* @handle: WMA handle
|
||||
* @fixed_param: Event fixed parameters
|
||||
* @vdev_mac_entry - vdev mac entry
|
||||
* @hw_mode_trans_ind - Buffer to store parsed information
|
||||
*
|
||||
* Parses fixed_param, vdev_mac_entry and fills in the information into
|
||||
* hw_mode_trans_ind and wma
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wma_process_pdev_hw_mode_trans_ind(void *handle,
|
||||
wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param,
|
||||
wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry,
|
||||
struct sir_hw_mode_trans_ind *hw_mode_trans_ind)
|
||||
{
|
||||
uint32_t i;
|
||||
tp_wma_handle wma = (tp_wma_handle) handle;
|
||||
|
||||
hw_mode_trans_ind->old_hw_mode_index = fixed_param->old_hw_mode_index;
|
||||
hw_mode_trans_ind->new_hw_mode_index = fixed_param->new_hw_mode_index;
|
||||
hw_mode_trans_ind->num_vdev_mac_entries =
|
||||
fixed_param->num_vdev_mac_entries;
|
||||
WMA_LOGI("%s: old_hw_mode_index:%d new_hw_mode_index:%d entries=%d",
|
||||
__func__, fixed_param->old_hw_mode_index,
|
||||
fixed_param->new_hw_mode_index,
|
||||
fixed_param->num_vdev_mac_entries);
|
||||
|
||||
/* Store the vdev-mac map in WMA and send to policy manager */
|
||||
for (i = 0; i < fixed_param->num_vdev_mac_entries; i++) {
|
||||
uint32_t vdev_id, mac_id, pdev_id;
|
||||
vdev_id = vdev_mac_entry[i].vdev_id;
|
||||
pdev_id = vdev_mac_entry[i].pdev_id;
|
||||
|
||||
if (pdev_id == WMI_PDEV_ID_SOC) {
|
||||
WMA_LOGE("%s: soc level id received for mac id)",
|
||||
__func__);
|
||||
QDF_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
mac_id = WMA_PDEV_TO_MAC_MAP(vdev_mac_entry[i].pdev_id);
|
||||
|
||||
WMA_LOGI("%s: vdev_id:%d mac_id:%d",
|
||||
__func__, vdev_id, mac_id);
|
||||
|
||||
hw_mode_trans_ind->vdev_mac_map[i].vdev_id = vdev_id;
|
||||
hw_mode_trans_ind->vdev_mac_map[i].mac_id = mac_id;
|
||||
wma_update_intf_hw_mode_params(vdev_id, mac_id,
|
||||
fixed_param->new_hw_mode_index);
|
||||
}
|
||||
wma->old_hw_mode_index = fixed_param->old_hw_mode_index;
|
||||
wma->new_hw_mode_index = fixed_param->new_hw_mode_index;
|
||||
|
||||
WMA_LOGI("%s: Updated: old_hw_mode_index:%d new_hw_mode_index:%d",
|
||||
__func__, wma->old_hw_mode_index, wma->new_hw_mode_index);
|
||||
}
|
||||
|
||||
/**
|
||||
* wma_pdev_hw_mode_transition_evt_handler() - HW mode transition evt handler
|
||||
* @handle: WMI handle
|
||||
@@ -2505,7 +2565,6 @@ static int wma_pdev_hw_mode_transition_evt_handler(void *handle,
|
||||
uint8_t *event,
|
||||
uint32_t len)
|
||||
{
|
||||
uint32_t i;
|
||||
WMI_PDEV_HW_MODE_TRANSITION_EVENTID_param_tlvs *param_buf;
|
||||
wmi_pdev_hw_mode_transition_event_fixed_param *wmi_event;
|
||||
wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry;
|
||||
@@ -2532,46 +2591,10 @@ static int wma_pdev_hw_mode_transition_evt_handler(void *handle,
|
||||
}
|
||||
|
||||
wmi_event = param_buf->fixed_param;
|
||||
hw_mode_trans_ind->old_hw_mode_index = wmi_event->old_hw_mode_index;
|
||||
hw_mode_trans_ind->new_hw_mode_index = wmi_event->new_hw_mode_index;
|
||||
hw_mode_trans_ind->num_vdev_mac_entries =
|
||||
wmi_event->num_vdev_mac_entries;
|
||||
WMA_LOGI("%s: old_hw_mode_index:%d new_hw_mode_index:%d entries=%d",
|
||||
__func__, wmi_event->old_hw_mode_index,
|
||||
wmi_event->new_hw_mode_index, wmi_event->num_vdev_mac_entries);
|
||||
|
||||
vdev_mac_entry =
|
||||
param_buf->wmi_pdev_set_hw_mode_response_vdev_mac_mapping;
|
||||
|
||||
/* Store the vdev-mac map in WMA and prepare to send to HDD */
|
||||
for (i = 0; i < wmi_event->num_vdev_mac_entries; i++) {
|
||||
uint32_t vdev_id, mac_id, pdev_id;
|
||||
vdev_id = vdev_mac_entry[i].vdev_id;
|
||||
pdev_id = vdev_mac_entry[i].pdev_id;
|
||||
|
||||
if (pdev_id == WMI_PDEV_ID_SOC) {
|
||||
WMA_LOGE("%s: soc level id received for mac id)",
|
||||
__func__);
|
||||
QDF_BUG(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mac_id = WMA_PDEV_TO_MAC_MAP(vdev_mac_entry[i].pdev_id);
|
||||
|
||||
WMA_LOGI("%s: vdev_id:%d mac_id:%d",
|
||||
__func__, vdev_id, mac_id);
|
||||
|
||||
hw_mode_trans_ind->vdev_mac_map[i].vdev_id = vdev_id;
|
||||
hw_mode_trans_ind->vdev_mac_map[i].mac_id = mac_id;
|
||||
wma_update_intf_hw_mode_params(vdev_id, mac_id,
|
||||
wmi_event->new_hw_mode_index);
|
||||
}
|
||||
wma->old_hw_mode_index = wmi_event->old_hw_mode_index;
|
||||
wma->new_hw_mode_index = wmi_event->new_hw_mode_index;
|
||||
|
||||
WMA_LOGI("%s: Updated: old_hw_mode_index:%d new_hw_mode_index:%d",
|
||||
__func__, wma->old_hw_mode_index, wma->new_hw_mode_index);
|
||||
|
||||
wma_process_pdev_hw_mode_trans_ind(wma, wmi_event, vdev_mac_entry,
|
||||
hw_mode_trans_ind);
|
||||
/* Pass the message to PE */
|
||||
wma_send_msg(wma, SIR_HAL_PDEV_HW_MODE_TRANS_IND,
|
||||
(void *) hw_mode_trans_ind, 0);
|
||||
|
@@ -2155,6 +2155,13 @@ void wma_fill_roam_synch_buffer(tp_wma_handle wma,
|
||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG,
|
||||
key->replay_counter, SIR_REPLAY_CTR_LEN);
|
||||
}
|
||||
if (param_buf->hw_mode_transition_fixed_param)
|
||||
wma_process_pdev_hw_mode_trans_ind(wma,
|
||||
param_buf->hw_mode_transition_fixed_param,
|
||||
param_buf->wmi_pdev_set_hw_mode_response_vdev_mac_mapping,
|
||||
&roam_synch_ind_ptr->hw_mode_trans_ind);
|
||||
else
|
||||
WMA_LOGD(FL("hw_mode transition fixed param is NULL"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2284,8 +2291,7 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event,
|
||||
}
|
||||
qdf_mem_zero(roam_synch_ind_ptr, len);
|
||||
wma_fill_roam_synch_buffer(wma, roam_synch_ind_ptr, param_buf);
|
||||
|
||||
/* 24 byte MAC header and 12 byte to ssid IE */
|
||||
/* 24 byte MAC header and 12 byte to ssid IE */
|
||||
if (roam_synch_ind_ptr->beaconProbeRespLength >
|
||||
(SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET)) {
|
||||
ie_len = roam_synch_ind_ptr->beaconProbeRespLength -
|
||||
@@ -2308,6 +2314,16 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event,
|
||||
wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context,
|
||||
roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_PROPAGATION);
|
||||
wma_process_roam_synch_complete(wma, synch_event->vdev_id);
|
||||
|
||||
/* update freq and channel width */
|
||||
wma->interfaces[synch_event->vdev_id].mhz =
|
||||
roam_synch_ind_ptr->chan_freq;
|
||||
if (roam_synch_ind_ptr->join_rsp)
|
||||
wma->interfaces[synch_event->vdev_id].chan_width =
|
||||
roam_synch_ind_ptr->join_rsp->vht_channel_width;
|
||||
|
||||
wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context,
|
||||
roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_COMPLETE);
|
||||
wma->interfaces[synch_event->vdev_id].roam_synch_delay =
|
||||
qdf_get_system_timestamp() - roam_synch_received;
|
||||
WMA_LOGD("LFR3: roam_synch_delay:%d",
|
||||
@@ -5789,9 +5805,9 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (wmi_event->notif == WMI_ROAM_NOTIF_ROAM_START)
|
||||
op_code = SIR_ROAMING_TX_QUEUE_DISABLE;
|
||||
op_code = SIR_ROAMING_START;
|
||||
if (wmi_event->notif == WMI_ROAM_NOTIF_ROAM_ABORT)
|
||||
op_code = SIR_ROAMING_TX_QUEUE_ENABLE;
|
||||
op_code = SIR_ROAMING_ABORT;
|
||||
roam_synch_data->roamedVdevId = wmi_event->vdev_id;
|
||||
wma_handle->csr_roam_synch_cb(
|
||||
(tpAniSirGlobal)wma_handle->mac_context,
|
||||
|
Reference in New Issue
Block a user