Revert "wlan: Event notification patch"
This reverts commit 54db3d4ab3bd198eda94c6cc2b15ec9f9ef2a73a.
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index c7bc76c..a0d56de 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -142,8 +142,6 @@
#define MEMORY_DEBUG_STR ""
#endif
-#define MAX_RESTART_DRIVER_EVENT_LENGTH 30
-
/* the Android framework expects this param even though we don't use it */
#define BUF_LEN 20
static char fwpath_buffer[BUF_LEN];
@@ -6000,8 +5998,18 @@
{
VOS_STATUS status = VOS_STATUS_SUCCESS;
hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
- unsigned char restart_notification[MAX_RESTART_DRIVER_EVENT_LENGTH + 1];
- union iwreq_data wrqu;
+ int len = (sizeof (struct ieee80211_mgmt));
+ struct ieee80211_mgmt *mgmt = NULL;
+
+ /* Prepare the DEAUTH managment frame with reason code */
+ mgmt = kzalloc(len, GFP_KERNEL);
+ if(mgmt == NULL)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
+ "%s: memory allocation failed (%d bytes)", __func__, len);
+ return VOS_STATUS_E_NOMEM;
+ }
+ mgmt->u.deauth.reason_code = WLAN_REASON_DISASSOC_LOW_ACK;
/* Iterate over all adapters/devices */
status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
@@ -6016,22 +6024,28 @@
pAdapterNode->pAdapter->dev->name,
pAdapterNode->pAdapter->device_mode,
pHddCtx->hdd_restart_retries + 1);
-
- /* Notify the wpa supplicant of wcnss restart by sending the custom event */
- memset(&wrqu, 0 , sizeof(wrqu));
- memset(restart_notification, 0, sizeof(restart_notification));
-
- strlcpy(restart_notification, "QCOM: RESTART_DRIVER_DXE", sizeof(restart_notification));
-
- wrqu.data.pointer = restart_notification;
- wrqu.data.length = strlen(restart_notification);
-
- wireless_send_event(pAdapterNode->pAdapter->dev, IWEVCUSTOM, &wrqu, restart_notification);
+ /*
+ * CFG80211 event to restart the driver
+ *
+ * 'cfg80211_send_unprot_deauth' sends a
+ * NL80211_CMD_UNPROT_DEAUTHENTICATE event to supplicant at any state
+ * of SME(Linux Kernel) state machine.
+ *
+ * Reason code WLAN_REASON_DISASSOC_LOW_ACK is currently used to restart
+ * the driver.
+ *
+ */
+
+ cfg80211_send_unprot_deauth(pAdapterNode->pAdapter->dev, (u_int8_t*)mgmt, len );
}
status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
pAdapterNode = pNext;
} while((NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status));
+
+ /* Free the allocated management frame */
+ kfree(mgmt);
+
/* Retry until we unload or reach max count */
if(++pHddCtx->hdd_restart_retries < WLAN_HDD_RESTART_RETRY_MAX_CNT)
vos_timer_start(&pHddCtx->hdd_restart_timer, WLAN_HDD_RESTART_RETRY_DELAY_MS);