qcacld-3.0: Fix WLAN IPA disconnection handling

When wlan driver unloading is in progress, IPA_OPCODE_TX/RX_SUSPEND
will not be processed and resource_unloading may be left as true.
Moroever since driver will be unloaded, IPA_OPCODE_TX/RX_SUSPEND
interaction between Host and FW will not be necessary.

Fix is to disable IPA pipes directly when handling disconnection
if wlan driver unloading is in progress.

Change-Id: Ia4af1ab04052b1a9bab44105760de50ad6263dbb
CRs-Fixed: 2279044
This commit is contained in:
jiad
2018-07-16 18:16:39 +08:00
committed by nshrivas
parent ef86101690
commit 3a321f3cfb

View File

@@ -1597,8 +1597,19 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode,
/* Disable IPA UC TX PIPE when STA disconnected */
if ((ipa_ctx->num_iface == 1) &&
wlan_ipa_is_fw_wdi_activated(ipa_ctx) &&
!ipa_ctx->ipa_pipes_down)
wlan_ipa_uc_handle_last_discon(ipa_ctx);
!ipa_ctx->ipa_pipes_down) {
if (cds_is_driver_unloading()) {
/*
* We disable WDI pipes directly here
* since IPA_OPCODE_TX/RX_SUSPEND
* message will not be processed when
* unloading WLAN driver is in progress
*/
wlan_ipa_uc_disable_pipes(ipa_ctx);
} else {
wlan_ipa_uc_handle_last_discon(ipa_ctx);
}
}
}
if (wlan_ipa_uc_sta_is_enabled(ipa_ctx->config) &&
@@ -1793,7 +1804,17 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode,
if ((false == ipa_ctx->resource_unloading) &&
wlan_ipa_is_fw_wdi_activated(ipa_ctx) &&
!ipa_ctx->ipa_pipes_down) {
wlan_ipa_uc_handle_last_discon(ipa_ctx);
if (cds_is_driver_unloading()) {
/*
* We disable WDI pipes directly here
* since IPA_OPCODE_TX/RX_SUSPEND
* message will not be processed when
* unloading WLAN driver is in progress
*/
wlan_ipa_uc_disable_pipes(ipa_ctx);
} else {
wlan_ipa_uc_handle_last_discon(ipa_ctx);
}
}
if (wlan_ipa_uc_sta_is_enabled(ipa_ctx->config) &&