qcacmn: Add change to avoid sending wmi cmd
Add change to avoid send wmi command in case of vdev start, multi vdev restart, stop and delete when vdev_mlme object is NULL. Change-Id: Iaa3d3f56fb9caf37b933f029c57311edef0281b4 CRs-Fixed: 2443599
这个提交包含在:
@@ -387,20 +387,21 @@ static QDF_STATUS target_if_vdev_mgr_start_send(
|
||||
}
|
||||
|
||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
if (vdev_rsp) {
|
||||
vdev_rsp->expire_time = START_RESPONSE_TIMER;
|
||||
if (param->is_restart)
|
||||
target_if_vdev_mgr_rsp_timer_start(
|
||||
vdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
else
|
||||
target_if_vdev_mgr_rsp_timer_start(
|
||||
vdev, vdev_rsp,
|
||||
START_RESPONSE_BIT);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_rsp->expire_time = START_RESPONSE_TIMER;
|
||||
if (param->is_restart)
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
else
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
START_RESPONSE_BIT);
|
||||
|
||||
status = wmi_unified_vdev_start_send(wmi_handle, param);
|
||||
if (QDF_IS_STATUS_ERROR(status) && vdev_rsp) {
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||
vdev_rsp->expire_time = 0;
|
||||
if (param->is_restart)
|
||||
@@ -459,12 +460,15 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
||||
}
|
||||
|
||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
if (vdev_rsp) {
|
||||
vdev_rsp->expire_time = DELETE_RESPONSE_TIMER;
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
DELETE_RESPONSE_BIT);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_rsp->expire_time = DELETE_RESPONSE_TIMER;
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
DELETE_RESPONSE_BIT);
|
||||
|
||||
status = wmi_unified_vdev_delete_send(wmi_handle, param->vdev_id);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
/*
|
||||
@@ -476,12 +480,10 @@ static QDF_STATUS target_if_vdev_mgr_delete_send(
|
||||
WLAN_SOC_F_TESTMODE_ENABLE))
|
||||
target_if_vdev_mgr_delete_response_send(vdev, rx_ops);
|
||||
} else {
|
||||
if (vdev_rsp) {
|
||||
vdev_rsp->expire_time = 0;
|
||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
||||
DELETE_RESPONSE_BIT);
|
||||
}
|
||||
vdev_rsp->expire_time = 0;
|
||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
||||
DELETE_RESPONSE_BIT);
|
||||
}
|
||||
|
||||
return status;
|
||||
@@ -519,14 +521,16 @@ static QDF_STATUS target_if_vdev_mgr_stop_send(
|
||||
}
|
||||
|
||||
vdev_rsp = rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
if (vdev_rsp) {
|
||||
vdev_rsp->expire_time = STOP_RESPONSE_TIMER;
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp,
|
||||
STOP_RESPONSE_BIT);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: Invalid response structure", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
vdev_rsp->expire_time = STOP_RESPONSE_TIMER;
|
||||
target_if_vdev_mgr_rsp_timer_start(vdev, vdev_rsp, STOP_RESPONSE_BIT);
|
||||
|
||||
status = wmi_unified_vdev_stop_send(wmi_handle, param->vdev_id);
|
||||
if (QDF_IS_STATUS_ERROR(status) && vdev_rsp) {
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
vdev_rsp->expire_time = 0;
|
||||
vdev_rsp->timer_status = QDF_STATUS_E_CANCELED;
|
||||
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp,
|
||||
@@ -762,17 +766,95 @@ static QDF_STATUS target_if_vdev_mgr_peer_flush_tids_send(
|
||||
return status;
|
||||
}
|
||||
|
||||
static int32_t target_if_vdev_mgr_multi_vdev_restart_get_ref(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct multiple_vdev_restart_params *param,
|
||||
struct wlan_objmgr_vdev **vdev_list,
|
||||
bool *vdev_timer_started)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_objmgr_vdev *tvdev;
|
||||
struct vdev_response_timer *vdev_rsp = NULL;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
uint32_t vdev_idx;
|
||||
int32_t last_vdev_idx = -1;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_idx);
|
||||
return last_vdev_idx;
|
||||
}
|
||||
|
||||
for (vdev_idx = 0; vdev_idx < param->num_vdevs ; vdev_idx++) {
|
||||
vdev_list[vdev_idx] = wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
pdev,
|
||||
param->vdev_ids[vdev_idx],
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
tvdev = vdev_list[vdev_idx];
|
||||
if (!tvdev) {
|
||||
mlme_err("VDEV_%d is NULL", vdev_idx);
|
||||
return last_vdev_idx;
|
||||
}
|
||||
|
||||
last_vdev_idx = vdev_idx;
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
||||
if (!vdev_rsp) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_idx);
|
||||
return last_vdev_idx;
|
||||
}
|
||||
|
||||
target_if_vdev_mgr_rsp_timer_start(tvdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
vdev_timer_started[vdev_idx] = true;
|
||||
}
|
||||
|
||||
return last_vdev_idx;
|
||||
}
|
||||
|
||||
static void target_if_vdev_mgr_multi_vdev_restart_rel_ref(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct wlan_objmgr_vdev **vdev_list,
|
||||
bool *vdev_timer_started,
|
||||
int32_t last_vdev_idx,
|
||||
QDF_STATUS status)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct wlan_objmgr_vdev *tvdev;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
struct vdev_response_timer *vdev_rsp = NULL;
|
||||
uint32_t vdev_idx;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
for (vdev_idx = 0; vdev_idx <= last_vdev_idx; vdev_idx++) {
|
||||
tvdev = vdev_list[vdev_idx];
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(tvdev);
|
||||
if (vdev_rsp && vdev_timer_started[vdev_idx]) {
|
||||
target_if_vdev_mgr_rsp_timer_stop(
|
||||
tvdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
vdev_timer_started[vdev_idx] = false;
|
||||
}
|
||||
}
|
||||
wlan_objmgr_vdev_release_ref(tvdev,
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
}
|
||||
}
|
||||
|
||||
static QDF_STATUS target_if_vdev_mgr_multiple_vdev_restart_req_cmd(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
struct multiple_vdev_restart_params *param)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
struct wmi_unified *wmi_handle;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
struct vdev_response_timer *vdev_rsp = NULL;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_lmac_if_mlme_rx_ops *rx_ops;
|
||||
uint32_t vdev_id;
|
||||
struct wlan_objmgr_vdev *vdev_list[WLAN_UMAC_PDEV_MAX_VDEVS] = {NULL};
|
||||
bool vdev_timer_started[WLAN_UMAC_PDEV_MAX_VDEVS] = {false};
|
||||
int32_t last_vdev_idx = -1;
|
||||
|
||||
if (!pdev || !param) {
|
||||
mlme_err("Invalid input");
|
||||
@@ -791,50 +873,26 @@ static QDF_STATUS target_if_vdev_mgr_multiple_vdev_restart_req_cmd(
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
rx_ops = target_if_vdev_mgr_get_rx_ops(psoc);
|
||||
if (!rx_ops && !rx_ops->vdev_mgr_get_response_timer_info) {
|
||||
mlme_err("VDEV_%d: No Rx Ops", vdev_id);
|
||||
last_vdev_idx = target_if_vdev_mgr_multi_vdev_restart_get_ref(
|
||||
pdev, param,
|
||||
vdev_list,
|
||||
vdev_timer_started);
|
||||
if (last_vdev_idx < 0 || (last_vdev_idx != (param->num_vdevs - 1))) {
|
||||
target_if_vdev_mgr_multi_vdev_restart_rel_ref(
|
||||
pdev, vdev_list,
|
||||
vdev_timer_started,
|
||||
last_vdev_idx,
|
||||
QDF_STATUS_E_FAILURE);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
for (vdev_id = 0; vdev_id < param->num_vdevs ; vdev_id++) {
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
pdev,
|
||||
param->vdev_ids[vdev_id],
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
if (vdev) {
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
if (vdev_rsp)
|
||||
target_if_vdev_mgr_rsp_timer_start(
|
||||
vdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
wlan_objmgr_vdev_release_ref(vdev,
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
}
|
||||
}
|
||||
|
||||
status = wmi_unified_send_multiple_vdev_restart_req_cmd(wmi_handle,
|
||||
param);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
for (vdev_id = 0; vdev_id < param->num_vdevs ; vdev_id++) {
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
pdev,
|
||||
param->vdev_ids[vdev_id],
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
if (vdev) {
|
||||
vdev_rsp =
|
||||
rx_ops->vdev_mgr_get_response_timer_info(vdev);
|
||||
if (vdev_rsp)
|
||||
target_if_vdev_mgr_rsp_timer_stop(
|
||||
vdev, vdev_rsp,
|
||||
RESTART_RESPONSE_BIT);
|
||||
wlan_objmgr_vdev_release_ref(
|
||||
vdev,
|
||||
WLAN_VDEV_TARGET_IF_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
target_if_vdev_mgr_multi_vdev_restart_rel_ref(
|
||||
pdev, vdev_list,
|
||||
vdev_timer_started,
|
||||
last_vdev_idx, status);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
在新工单中引用
屏蔽一个用户