diff options
| author | Komal Seelam <kseelam@qti.qualcomm.com> | 2016-08-03 15:28:26 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-08-12 18:21:28 +0530 |
| commit | bc18245c3fa13ccb871ad0a16bb81a88beba3a8d (patch) | |
| tree | 472d8a6aa07368527657da41e4934afbf066d9b9 | |
| parent | eedde0af685815ace2f5878a216a66cf3cad4a69 (diff) | |
qcacld-2.0: Add NL event to indicate SSR shutdown is triggered
On Dual-WiFi Platforms, Radio Device 1 (R1 - SDIO interface) should
be functional only if Radio Device 0 (R0 - PCIe interface) is active.
If SSR is indentified on R0, indicate userspace application to unload
R1 on this event and Reload R1 once R0 SSR and reload is complete.
CRs-Fixed: 1046397
Change-Id: I8a06b569fe536bb93dbb37bdb289295bfce62f6e
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_main.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_early_suspend.c | 25 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/BMI/ol_fw.c | 1 | ||||
| -rw-r--r-- | CORE/SVC/external/wlan_nlink_common.h | 1 | ||||
| -rw-r--r-- | CORE/VOSS/inc/vos_api.h | 2 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_api.c | 12 |
7 files changed, 42 insertions, 2 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 8d998a205dfd..e3a0e00cdfd0 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -2247,6 +2247,6 @@ int hdd_reassoc(hdd_adapter_t *pAdapter, const tANI_U8 *bssid, void hdd_sap_restart_handle(struct work_struct *work); void hdd_set_rps_cpu_mask(hdd_context_t *hdd_ctx); - void hdd_initialize_adapter_common(hdd_adapter_t *adapter); +void hdd_svc_fw_shutdown_ind(struct device *dev); #endif // end #if !defined( WLAN_HDD_MAIN_H ) diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index e62ddd1a772b..1e720d4a2b05 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -1946,6 +1946,31 @@ static void hdd_ssr_timer_start(int msec) ssr_timer_started = true; } +/** + * hdd_svc_fw_shutdown_ind() - API to send FW SHUTDOWN IND to Userspace + * + * @dev: Device Pointer + * + * Return: None + */ +void hdd_svc_fw_shutdown_ind(struct device *dev) +{ + v_CONTEXT_t g_context; + hdd_context_t *hdd_ctx; + + g_context = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); + + if(!g_context) + return; + + hdd_ctx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD, + g_context); + + hdd_ctx ? wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index, + WLAN_SVC_FW_SHUTDOWN_IND, + NULL, 0) : 0; +} + /* the HDD interface to WLAN driver shutdown, * the primary shutdown function in SSR */ diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index b4f5b71f1428..a34d971d8390 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -17130,6 +17130,7 @@ void wlan_hdd_send_svc_nlink_msg(int radio, int type, void *data, int len) switch(type) { case WLAN_SVC_FW_CRASHED_IND: + case WLAN_SVC_FW_SHUTDOWN_IND: case WLAN_SVC_LTE_COEX_IND: case WLAN_SVC_WLAN_AUTO_SHUTDOWN_IND: case WLAN_SVC_WLAN_AUTO_SHUTDOWN_CANCEL_IND: diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c index a2e81e351cec..af7add647bb0 100644 --- a/CORE/SERVICES/BMI/ol_fw.c +++ b/CORE/SERVICES/BMI/ol_fw.c @@ -1502,6 +1502,7 @@ void ol_target_failure(void *instance, A_STATUS status) return; #if defined(CONFIG_CNSS) || defined(HIF_SDIO) + vos_svc_fw_shutdown_ind(scn->adf_dev->dev); /* Collect the RAM dump through a workqueue */ if (scn->enableRamdumpCollection) ol_schedule_ramdump_work(scn); diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h index 0dd626479352..0b3604cbc43e 100644 --- a/CORE/SVC/external/wlan_nlink_common.h +++ b/CORE/SVC/external/wlan_nlink_common.h @@ -100,6 +100,7 @@ #define WLAN_SVC_WLAN_TP_TX_IND 0x10B #define WLAN_SVC_WLAN_AUTO_SHUTDOWN_CANCEL_IND 0x10C #define WLAN_SVC_WLAN_RADIO_INDEX 0x10D +#define WLAN_SVC_FW_SHUTDOWN_IND 0x10E #define WLAN_SVC_MAX_SSID_LEN 32 #define WLAN_SVC_MAX_BSSID_LEN 6 diff --git a/CORE/VOSS/inc/vos_api.h b/CORE/VOSS/inc/vos_api.h index 8783790bf14d..191b3cee5f48 100644 --- a/CORE/VOSS/inc/vos_api.h +++ b/CORE/VOSS/inc/vos_api.h @@ -376,5 +376,5 @@ void vos_set_fatal_event(bool value); void vos_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data); int vos_get_radio_index(void); int vos_set_radio_index(int radio_index); - +void vos_svc_fw_shutdown_ind(struct device *dev); #endif // if !defined __VOS_API_H diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 127cde642488..01e241b72bb0 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -3064,3 +3064,15 @@ int vos_set_radio_index(int radio_index) gpVosContext->radio_index = radio_index; return 0; } + +/** + * vos_svc_fw_shutdown_ind() - API to send userspace about FW crash + * + * @data: Device Pointer + * + * Return: None +*/ +void vos_svc_fw_shutdown_ind(struct device *dev) +{ + hdd_svc_fw_shutdown_ind(dev); +} |
