qcacmn: Add support to simulate fw response from target_if
Add support to simulate fw response and release ref from target_if request timeout handler for every case of timeout, but do panic or inject fw crash when system is not in recovery or fw down or driver unload state. Change-Id: I5c94df59319a901d9cfd89bd42b96118e9e641bb CRs-Fixed: 2501920
This commit is contained in:
@@ -75,70 +75,63 @@ void target_if_vdev_mgr_rsp_timer_mgmt_cb(void *arg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target_if_vdev_mgr_is_driver_unloading() || qdf_is_recovering() ||
|
vdev_rsp->timer_status = QDF_STATUS_E_TIMEOUT;
|
||||||
qdf_is_fw_down()) {
|
|
||||||
/* this ensures stop timer will not be done in target_if */
|
|
||||||
vdev_rsp->timer_status = QDF_STATUS_E_TIMEOUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status) ||
|
&vdev_rsp->rsp_status) ||
|
||||||
qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
|
qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
|
start_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||||
start_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
start_rsp.status = WLAN_MLME_HOST_VDEV_START_TIMEOUT;
|
||||||
start_rsp.status = WLAN_MLME_HOST_VDEV_START_TIMEOUT;
|
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
||||||
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
&vdev_rsp->rsp_status)) {
|
||||||
&vdev_rsp->rsp_status))
|
start_rsp.resp_type =
|
||||||
start_rsp.resp_type =
|
WMI_HOST_VDEV_START_RESP_EVENT;
|
||||||
WMI_HOST_VDEV_START_RESP_EVENT;
|
rsp_pos = START_RESPONSE_BIT;
|
||||||
else
|
|
||||||
start_rsp.resp_type =
|
|
||||||
WMI_HOST_VDEV_RESTART_RESP_EVENT;
|
|
||||||
|
|
||||||
rx_ops->vdev_mgr_start_response(psoc, &start_rsp);
|
|
||||||
} else {
|
} else {
|
||||||
if (qdf_atomic_test_bit(START_RESPONSE_BIT,
|
start_rsp.resp_type =
|
||||||
&vdev_rsp->rsp_status))
|
WMI_HOST_VDEV_RESTART_RESP_EVENT;
|
||||||
rsp_pos = START_RESPONSE_BIT;
|
rsp_pos = RESTART_RESPONSE_BIT;
|
||||||
else
|
|
||||||
rsp_pos = RESTART_RESPONSE_BIT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
||||||
|
|
||||||
|
rx_ops->vdev_mgr_start_response(psoc, &start_rsp);
|
||||||
} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
|
rsp_pos = STOP_RESPONSE_BIT;
|
||||||
stop_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
stop_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||||
rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
|
|
||||||
} else {
|
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
||||||
rsp_pos = STOP_RESPONSE_BIT;
|
|
||||||
}
|
rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
|
||||||
} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
|
del_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||||
del_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
rsp_pos = DELETE_RESPONSE_BIT;
|
||||||
rx_ops->vdev_mgr_delete_response(psoc, &del_rsp);
|
|
||||||
} else {
|
|
||||||
rsp_pos = DELETE_RESPONSE_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
||||||
|
|
||||||
|
rx_ops->vdev_mgr_delete_response(psoc, &del_rsp);
|
||||||
} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
|
} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
|
||||||
&vdev_rsp->rsp_status)) {
|
&vdev_rsp->rsp_status)) {
|
||||||
if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
|
peer_del_all_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
||||||
peer_del_all_rsp.vdev_id = wlan_vdev_get_id(vdev);
|
rsp_pos = PEER_DELETE_ALL_RESPONSE_BIT;
|
||||||
rx_ops->vdev_mgr_peer_delete_all_response(
|
|
||||||
psoc,
|
target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, rsp_pos);
|
||||||
&peer_del_all_rsp);
|
|
||||||
} else {
|
rx_ops->vdev_mgr_peer_delete_all_response(
|
||||||
rsp_pos = PEER_DELETE_ALL_RESPONSE_BIT;
|
psoc,
|
||||||
}
|
&peer_del_all_rsp);
|
||||||
} else {
|
} else {
|
||||||
mlme_err("PSOC_%d VDEV_%d: Unknown error",
|
mlme_err("PSOC_%d VDEV_%d: Unknown error",
|
||||||
wlan_psoc_get_id(psoc), vdev_id);
|
wlan_psoc_get_id(psoc), vdev_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT)
|
if (target_if_vdev_mgr_is_driver_unloading() || qdf_is_recovering() ||
|
||||||
|
qdf_is_fw_down()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (target_if_vdev_mgr_is_panic_on_bug()) {
|
if (target_if_vdev_mgr_is_panic_on_bug()) {
|
||||||
QDF_DEBUG_PANIC("PSOC_%d VDEV_%d: Panic, %s response timeout",
|
QDF_DEBUG_PANIC("PSOC_%d VDEV_%d: Panic, %s response timeout",
|
||||||
|
Reference in New Issue
Block a user