qcacld-3.0: Remove legacy vdev restart and hidden ssid restart flags

Remove legacy vdev restart and hidden ssid restart flags as vdev mlme
new vdev mlme priv flags.

Change-Id: I31a1541fe4504bfb635b3151ea3afd05ffce7cea
CRs-Fixed: 2319427
This commit is contained in:
Abhishek Singh 2018-09-19 11:37:51 +05:30 • committed by nshrivas
commit a063f1c658
11 changed files with 129 additions and 45 deletions

View file

@ -59,22 +59,22 @@ QDF_STATUS mlme_register_vdev_mgr_ops(void *mlme);
QDF_STATUS mlme_unregister_vdev_mgr_ops(struct vdev_mlme_obj *vdev_mlme);
/**
* ap_mlme_set_chan_switch_in_progress() - set mlme priv restart in progress
* mlme_set_chan_switch_in_progress() - set mlme priv restart in progress
* @vdev: vdev pointer
* @val: value to be set
*
* Return: QDF_STATUS
*/
QDF_STATUS ap_mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
QDF_STATUS mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
bool val);
/**
* ap_mlme_get_chan_switch_in_progress() - get mlme priv restart in progress
* mlme_is_chan_switch_in_progress() - get mlme priv restart in progress
* @vdev: vdev pointer
*
* Return: value of mlme priv restart in progress
*/
bool ap_mlme_get_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev);
bool mlme_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev);
/**
* ap_mlme_set_hidden_ssid_restart_in_progress() - set mlme priv hidden ssid
@ -89,31 +89,31 @@ ap_mlme_set_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev,
bool val);
/**
* ap_mlme_get_hidden_ssid_restart_in_progress() - get mlme priv hidden ssid
* ap_mlme_is_hidden_ssid_restart_in_progress() - get mlme priv hidden ssid
* restart in progress
* @vdev: vdev pointer
*
* Return: value of mlme priv hidden ssid restart in progress
*/
bool ap_mlme_get_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev);
bool ap_mlme_is_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev);
/**
* ap_mlme_set_vdev_start_failed() - set mlme priv vdev restart fail flag
* mlme_set_vdev_start_failed() - set mlme priv vdev restart fail flag
* @vdev: vdev pointer
* @val: value to be set
*
* Return: QDF_STATUS
*/
QDF_STATUS
ap_mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val);
mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val);
/**
* ap_mlme_get_vdev_start_failed() - get mlme priv vdev restart fail flag
* mlme_get_vdev_start_failed() - get mlme priv vdev restart fail flag
* @vdev: vdev pointer
*
* Return: value of mlme priv vdev restart fail flag
*/
bool ap_mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev);
bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev);
#endif
#endif

View file

@ -492,7 +492,7 @@ static QDF_STATUS ap_mlme_vdev_stop_start_send(struct vdev_mlme_obj *vdev_mlme,
data_len, data);
}
QDF_STATUS ap_mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
QDF_STATUS mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
bool val)
{
struct vdev_mlme_obj *vdev_mlme;
@ -511,7 +511,7 @@ QDF_STATUS ap_mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
bool ap_mlme_get_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev)
bool mlme_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
@ -547,7 +547,7 @@ ap_mlme_set_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
bool ap_mlme_get_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev)
bool ap_mlme_is_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
@ -564,7 +564,7 @@ bool ap_mlme_get_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev)
}
QDF_STATUS
ap_mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val)
mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
@ -582,7 +582,7 @@ ap_mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val)
return QDF_STATUS_SUCCESS;
}
bool ap_mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev)
bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
@ -598,14 +598,15 @@ bool ap_mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev)
return mlme_priv->vdev_start_failed;
}
/**
* ap_mlme_vdev_legacy_hdl_create () - Create sap mlme legacy priv object
* mlme_legacy_hdl_create () - Create mlme legacy priv object
* @vdev_mlme: vdev mlme object
*
* Return: QDF_STATUS
*/
static
QDF_STATUS ap_mlme_vdev_legacy_hdl_create(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS mlme_legacy_hdl_create(struct vdev_mlme_obj *vdev_mlme)
{
vdev_mlme->legacy_vdev_ptr =
qdf_mem_malloc(sizeof(struct mlme_legacy_priv));
@ -618,13 +619,13 @@ QDF_STATUS ap_mlme_vdev_legacy_hdl_create(struct vdev_mlme_obj *vdev_mlme)
}
/**
* ap_mlme_vdev_legacy_hdl_destroy () - Destroy sap mlme legacy priv object
* mlme_legacy_hdl_destroy () - Destroy mlme legacy priv object
* @vdev_mlme: vdev mlme object
*
* Return: QDF_STATUS
*/
static
QDF_STATUS ap_mlme_vdev_legacy_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
QDF_STATUS mlme_legacy_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
{
qdf_mem_free(vdev_mlme->legacy_vdev_ptr);
vdev_mlme->legacy_vdev_ptr = NULL;
@ -696,6 +697,8 @@ static struct vdev_mlme_ops sta_mlme_ops = {
.mlme_vdev_stop_continue = sta_mlme_vdev_stop_continue,
.mlme_vdev_down_send = sta_mlme_vdev_down_send,
.mlme_vdev_notify_down_complete = sta_vdev_notify_down_complete,
.mlme_vdev_legacy_hdl_create = mlme_legacy_hdl_create,
.mlme_vdev_legacy_hdl_destroy = mlme_legacy_hdl_destroy,
};
/**
@ -745,6 +748,6 @@ static struct vdev_mlme_ops ap_mlme_ops = {
.mlme_vdev_stop_continue = ap_mlme_vdev_stop_continue,
.mlme_vdev_down_send = ap_mlme_vdev_down_send,
.mlme_vdev_notify_down_complete = ap_vdev_notify_down_complete,
.mlme_vdev_legacy_hdl_create = ap_mlme_vdev_legacy_hdl_create,
.mlme_vdev_legacy_hdl_destroy = ap_mlme_vdev_legacy_hdl_destroy,
.mlme_vdev_legacy_hdl_create = mlme_legacy_hdl_create,
.mlme_vdev_legacy_hdl_destroy = mlme_legacy_hdl_destroy,
};

View file

@ -5066,7 +5066,7 @@ static void lim_process_sme_channel_change_request(tpAniSirGlobal mac_ctx,
sizeof(session_entry->extRateSet));
#ifdef CONFIG_VDEV_SM
ap_mlme_set_chan_switch_in_progress(session_entry->vdev, true);
mlme_set_chan_switch_in_progress(session_entry->vdev, true);
if (wlan_vdev_mlme_get_state(session_entry->vdev) ==
WLAN_VDEV_S_DFS_CAC_WAIT)
wlan_vdev_mlme_sm_deliver_evt(session_entry->vdev,

View file

@ -8537,7 +8537,7 @@ QDF_STATUS lim_ap_mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme,
return QDF_STATUS_E_INVAL;
}
if (ap_mlme_get_hidden_ssid_restart_in_progress(vdev_mlme->vdev))
if (ap_mlme_is_hidden_ssid_restart_in_progress(vdev_mlme->vdev))
lim_send_vdev_restart(session->mac_ctx, session,
session->smeSessionId);
else
@ -8585,7 +8585,7 @@ void lim_send_start_bss_confirm(tpAniSirGlobal mac_ctx,
pe_err("session is NULL");
return;
}
ap_mlme_set_vdev_start_failed(session->vdev, true);
mlme_set_vdev_start_failed(session->vdev, true);
wlan_vdev_mlme_sm_deliver_evt(session->vdev,
WLAN_VDEV_SM_EV_START_REQ_FAIL,
sizeof(*start_cnf), start_cnf);

View file

@ -761,7 +761,9 @@ typedef struct {
A_UINT32 requestor_id;
A_UINT32 disable_hw_ack;
wmi_channel chan;
#ifndef CONFIG_VDEV_SM
qdf_atomic_t hidden_ssid_restart_in_progress;
#endif
uint8_t ssidHidden;
} vdev_restart_params_t;
@ -890,7 +892,9 @@ struct wma_txrx_node {
qdf_atomic_t bss_status;
uint8_t rate_flags;
uint8_t nss;
#ifndef CONFIG_VDEV_SM
bool is_channel_switch;
#endif
uint16_t pause_bitmap;
int8_t tx_power;
int8_t max_tx_power;

View file

@ -409,6 +409,16 @@ void wma_wmi_stop(void);
*/
uint8_t wma_get_mcs_idx(uint16_t max_rate, uint8_t rate_flags,
uint8_t *nss, uint8_t *mcs_rate_flag);
/**
* wma_get_hidden_ssid_restart_in_progress() - check if hidden ssid restart is
* in progress
* @iface: iface pointer
*
* Return: true if hidden ssid restart is in progress else false
*/
bool wma_get_hidden_ssid_restart_in_progress(struct wma_txrx_node *iface);
#ifdef CONFIG_VDEV_SM
/**

View file

@ -1217,22 +1217,21 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info,
}
qdf_mc_timer_stop(&req_msg->event_timeout);
if ((qdf_atomic_read(&iface->vdev_restart_params.
hidden_ssid_restart_in_progress)) &&
if (wma_get_hidden_ssid_restart_in_progress(iface) &&
wma_is_vdev_in_ap_mode(wma, resp_event->vdev_id) &&
(req_msg->msg_type == WMA_HIDDEN_SSID_VDEV_RESTART)) {
tpHalHiddenSsidVdevRestart hidden_ssid_restart =
(tpHalHiddenSsidVdevRestart)req_msg->user_data;
WMA_LOGE("%s: vdev restart event recevied for hidden ssid set using IOCTL",
__func__);
qdf_atomic_set(&iface->vdev_restart_params.
hidden_ssid_restart_in_progress, 0);
#ifdef CONFIG_VDEV_SM
wlan_vdev_mlme_sm_deliver_evt(iface->vdev,
WLAN_VDEV_SM_EV_RESTART_RESP,
sizeof(*hidden_ssid_restart),
hidden_ssid_restart);
#else
qdf_atomic_set(&iface->vdev_restart_params.
hidden_ssid_restart_in_progress, 0);
wma_send_msg(wma, WMA_HIDDEN_SSID_RESTART_RSP,
(void *)hidden_ssid_restart, 0);
#endif
@ -1265,10 +1264,12 @@ int wma_vdev_start_resp_handler(void *handle, uint8_t *cmd_param_info,
}
params->smpsMode = host_map_smps_mode(resp_event->smps_mode);
params->status = resp_event->status;
#ifndef CONFIG_VDEV_SM
if (wma->interfaces[resp_event->vdev_id].is_channel_switch) {
wma->interfaces[resp_event->vdev_id].is_channel_switch =
false;
}
#endif
if (((resp_event->resp_type == WMI_VDEV_RESTART_RESP_EVENT) &&
((iface->type == WMI_VDEV_TYPE_STA) ||
(iface->type == WMI_VDEV_TYPE_MONITOR))) ||
@ -3556,13 +3557,24 @@ void wma_vdev_resp_timer(void *data)
wma_trigger_recovery_assert_on_fw_timeout(
WMA_CHNL_SWITCH_REQ);
} else {
#ifdef CONFIG_VDEV_SM
struct wma_txrx_node *iface =
&wma->interfaces[tgt_req->vdev_id];
wlan_vdev_mlme_sm_deliver_evt(iface->vdev,
WLAN_VDEV_SM_EV_RESTART_RESP,
sizeof(*params), params);
#else
wma_send_msg_high_priority(wma, WMA_SWITCH_CHANNEL_RSP,
(void *)params, 0);
#endif
}
#ifndef CONFIG_VDEV_SM
if (wma->interfaces[tgt_req->vdev_id].is_channel_switch) {
wma->interfaces[tgt_req->vdev_id].is_channel_switch =
false;
}
#endif
} else if (tgt_req->msg_type == WMA_DELETE_BSS_REQ) {
tpDeleteBssParams params =
(tpDeleteBssParams) tgt_req->user_data;
@ -3716,16 +3728,17 @@ void wma_vdev_resp_timer(void *data)
#endif
wma_ocb_set_config_resp(wma, QDF_STATUS_E_TIMEOUT);
} else if (tgt_req->msg_type == WMA_HIDDEN_SSID_VDEV_RESTART) {
if ((qdf_atomic_read(
&wma->interfaces[tgt_req->vdev_id].vdev_restart_params.
hidden_ssid_restart_in_progress)) &&
if (wma_get_hidden_ssid_restart_in_progress(
&wma->interfaces[tgt_req->vdev_id]) &&
wma_is_vdev_in_ap_mode(wma, tgt_req->vdev_id)) {
WMA_LOGE("Hidden ssid vdev restart Timed Out; vdev_id: %d, type = %d",
tgt_req->vdev_id, tgt_req->type);
#ifndef CONFIG_VDEV_SM
qdf_atomic_set(&wma->interfaces[tgt_req->vdev_id].
vdev_restart_params.
hidden_ssid_restart_in_progress, 0);
#endif
qdf_mem_free(tgt_req->user_data);
}
} else if (tgt_req->msg_type == WMA_SET_LINK_STATE) {

View file

@ -1395,7 +1395,9 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
qdf_mem_free(csa_offload_event);
return -EINVAL;
}
#ifndef CONFIG_VDEV_SM
wma->interfaces[vdev_id].is_channel_switch = true;
#endif
wma_send_msg(wma, WMA_CSA_OFFLOAD_EVENT, (void *)csa_offload_event, 0);
return 0;
}

View file

@ -2880,19 +2880,38 @@ void wma_send_probe_rsp_tmpl(tp_wma_handle wma,
}
}
#ifdef CONFIG_VDEV_SM
QDF_STATUS wma_set_ap_vdev_up(tp_wma_handle wma, uint8_t vdev_id)
{
struct vdev_up_params param = {0};
QDF_STATUS status = QDF_STATUS_SUCCESS;
if (!((qdf_atomic_read(
&wma->interfaces[vdev_id].vdev_restart_params.
hidden_ssid_restart_in_progress)) ||
(wma->interfaces[vdev_id].is_channel_switch))) {
#ifndef CONFIG_VDEV_SM
param.vdev_id = vdev_id;
param.assoc_id = 0;
status = wma_send_vdev_up_to_fw(wma, &param,
wma->interfaces[vdev_id].bssid);
if (QDF_IS_STATUS_ERROR(status)) {
WMA_LOGE(FL("failed to send vdev up"));
policy_mgr_set_do_hw_mode_change_flag(
wma->psoc, false);
return status;
}
wma_set_sap_keepalive(wma, vdev_id);
wma_set_vdev_mgmt_rate(wma, vdev_id);
return status;
}
#else
QDF_STATUS wma_set_ap_vdev_up(tp_wma_handle wma, uint8_t vdev_id)
{
struct vdev_up_params param = {0};
QDF_STATUS status = QDF_STATUS_SUCCESS;
if (!wma_get_hidden_ssid_restart_in_progress(
&wma->interfaces[vdev_id]) ||
(wma->interfaces[vdev_id].is_channel_switch)) {
if (wma_is_vdev_up(vdev_id))
return status;
#endif
param.vdev_id = vdev_id;
param.assoc_id = 0;
status = wma_send_vdev_up_to_fw(wma, &param,
@ -2903,15 +2922,14 @@ QDF_STATUS wma_set_ap_vdev_up(tp_wma_handle wma, uint8_t vdev_id)
wma->psoc, false);
return status;
}
#ifndef CONFIG_VDEV_SM
wma_vdev_set_mlme_state(wma, vdev_id, WLAN_VDEV_S_RUN);
#endif
wma_set_sap_keepalive(wma, vdev_id);
wma_set_vdev_mgmt_rate(wma, vdev_id);
}
return status;
}
#endif
/**
* wma_send_beacon() - send beacon template
@ -3394,9 +3412,10 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
}
intr[vdev_id].vdev_restart_params.ssidHidden = pReq->ssidHidden;
#ifndef CONFIG_VDEV_SM
qdf_atomic_set(&intr[vdev_id].vdev_restart_params.
hidden_ssid_restart_in_progress, 1);
#endif
WMA_LOGD(FL("hidden ssid set using IOCTL for vdev %d ssid_hidden %d"),
vdev_id, pReq->ssidHidden);
@ -3408,8 +3427,10 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
if (!msg) {
WMA_LOGE(FL("Failed to fill vdev request, vdev_id %d"),
vdev_id);
#ifndef CONFIG_VDEV_SM
qdf_atomic_set(&intr[vdev_id].vdev_restart_params.
hidden_ssid_restart_in_progress, 0);
#endif
qdf_mem_free(pReq);
return;
}
@ -3444,8 +3465,10 @@ void wma_hidden_ssid_vdev_restart(tp_wma_handle wma,
&params);
if (QDF_IS_STATUS_ERROR(status)) {
WMA_LOGE(FL("Failed to send vdev restart command"));
#ifndef CONFIG_VDEV_SM
qdf_atomic_set(&intr[vdev_id].vdev_restart_params.
hidden_ssid_restart_in_progress, 0);
#endif
wma_remove_vdev_req(wma, vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);
qdf_mem_free(pReq);

View file

@ -3102,7 +3102,9 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
*/
if ((wma_is_vdev_in_ap_mode(wma, req.vdev_id) == true) ||
(params->restart_on_chan_switch == true)) {
#ifndef CONFIG_VDEV_SM
wma->interfaces[req.vdev_id].is_channel_switch = true;
#endif
req.hidden_ssid = intr[vdev_id].vdev_restart_params.ssidHidden;
}
@ -3142,7 +3144,9 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
wma_is_vdev_up(vdev_id)) {
WMA_LOGD("%s: setting channel switch to true for vdev_id:%d",
__func__, req.vdev_id);
#ifndef CONFIG_VDEV_SM
wma->interfaces[req.vdev_id].is_channel_switch = true;
#endif
}
msg = wma_fill_vdev_req(wma, req.vdev_id, WMA_CHNL_SWITCH_REQ,
@ -3154,8 +3158,14 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params)
status = QDF_STATUS_E_NOMEM;
goto send_resp;
}
#ifdef CONFIG_VDEV_SM
status = wma_vdev_start(wma, &req,
mlme_is_chan_switch_in_progress(
wma->interfaces[req.vdev_id].vdev));
#else
status = wma_vdev_start(wma, &req,
wma->interfaces[req.vdev_id].is_channel_switch);
#endif
if (status != QDF_STATUS_SUCCESS) {
wma_remove_vdev_req(wma, req.vdev_id,
WMA_TARGET_REQ_TYPE_VDEV_START);

View file

@ -4798,6 +4798,13 @@ QDF_STATUS wma_get_roam_scan_stats(WMA_HANDLE handle,
}
#ifdef CONFIG_VDEV_SM
bool wma_get_hidden_ssid_restart_in_progress(struct wma_txrx_node *iface)
{
if (!iface)
return false;
return ap_mlme_is_hidden_ssid_restart_in_progress(iface->vdev);
}
static QDF_STATUS
wma_ap_vdev_send_start_resp(tp_wma_handle wma, tpAddBssParams add_bss)
@ -4816,11 +4823,11 @@ QDF_STATUS wma_ap_mlme_vdev_start_continue(struct vdev_mlme_obj *vdev_mlme,
QDF_STATUS status = QDF_STATUS_SUCCESS;
struct wlan_objmgr_vdev *vdev = vdev_mlme->vdev;
if (ap_mlme_get_chan_switch_in_progress(vdev)) {
if (mlme_is_chan_switch_in_progress(vdev)) {
wma_send_msg_high_priority(wma, WMA_SWITCH_CHANNEL_RSP,
data, 0);
ap_mlme_set_chan_switch_in_progress(vdev, false);
} else if (ap_mlme_get_hidden_ssid_restart_in_progress(vdev)) {
mlme_set_chan_switch_in_progress(vdev, false);
} else if (ap_mlme_is_hidden_ssid_restart_in_progress(vdev)) {
wma_send_msg(wma, WMA_HIDDEN_SSID_RESTART_RSP, data, 0);
ap_mlme_set_hidden_ssid_restart_in_progress(vdev, false);
} else {
@ -4853,10 +4860,10 @@ wma_ap_mlme_vdev_notify_down_complete(struct vdev_mlme_obj *vdev_mlme,
{
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
if (!ap_mlme_get_vdev_start_failed(vdev_mlme->vdev))
if (!mlme_get_vdev_start_failed(vdev_mlme->vdev))
wma_send_del_bss_response(wma, (struct wma_target_req *)data);
else
ap_mlme_set_vdev_start_failed(vdev_mlme->vdev, false);
mlme_set_vdev_start_failed(vdev_mlme->vdev, false);
return QDF_STATUS_SUCCESS;
}
@ -4875,4 +4882,16 @@ QDF_STATUS wma_ap_mlme_vdev_stop_start_send(struct vdev_mlme_obj *vdev_mlme,
return wma_ap_vdev_send_start_resp(wma, bss_params);
}
#else
bool wma_get_hidden_ssid_restart_in_progress(struct wma_txrx_node *iface)
{
if (!iface)
return false;
if (qdf_atomic_read(
&iface->vdev_restart_params.hidden_ssid_restart_in_progress))
return true;
return false;
}
#endif