[WCNCR00158507] misc: Fix function callback panic for USB disconnected

[Description]
Fix reg_notifier callback panic after USB disconnected
1. After USB disconnected, WiFi driver has called wlanRemove()
   to release resources. But sometimes kernel calls mtk_reg_notify
   after that and causes kernel panic.
2. Add a g_u4HaltFlag checker to avoid that case.
3. Problem log:
   cfg80211: Calling CRDA to update world regulatory domain
   BUG task_struct (Not tainted): Poison overwritten
   Stack:
    kfree+0x73c/0xad0
    cnmMemFree+0x138/0x268 [wlan_mt76x8_usb]
    rlmDomainSendDomainInfoCmd_V2+0x108/0x1f8 [wlan_mt76x8_usb]
    rlmDomainSendDomainInfoCmd+0x144/0x1dc [wlan_mt76x8_usb]
    rlmDomainSendCmd+0x30/0x48 [wlan_mt76x8_usb]
    mtk_reg_notify+0xe0/0x4bc [wlan_mt76x8_usb]
    wiphy_update_regulatory+0x3f4/0x4c0 [cfg80211]
    set_regdom+0x45c/0x714 [cfg80211]
    reg_regdb_search+0x118/0x14c [cfg80211]

Fix get_sta_stat panic after USB disconnected
1. After USB disconnected, WiFi driver has called wlanRemove() to
   release resources. But upper layer calls riv_driver_get_sta_stat
   after that and causes kernel panic.
2. Add a g_u4HaltFlag checker to in driver command handler.
3. Problem log:
   mtk_usb_disconnect:(HAL STATE) mtk_usb_disconnect()
   Unable to handle kernel NULL pointer dereference at virtual
   address 00000058
   PC is at priv_driver_get_sta_stat+0x2f0/0x157c [wlan_mt76x8_usb]
   LR is at priv_driver_get_sta_stat+0xec/0x157c [wlan_mt76x8_usb]
   [<ffffffbffc3569c0>] priv_driver_get_sta_stat+0x2f0/0x157c
                        [wlan_mt76x8_usb]
   [<ffffffbffc2dcf04>] priv_driver_cmds+0x9bc/0x2830
                        [wlan_mt76x8_usb]
   [<ffffffbffc2dee44>] priv_set_driver+0xcc/0x4c8
                        [wlan_mt76x8_usb]
   [<ffffffc000793400>] ioctl_private_iw_point.isra.2+0xf8/0x1cc

Change-Id: Ic9f8146d58cf30de818815594381eba1fcf58f7a
CR-Id: WCNCR00158507
Feature: misc
Signed-off-by: Alice Ou <alice.ou@mediatek.com>
(cherry picked from commit c8f3a4b93d94c19519d3e1732d4588fdbf5cf5f8)
diff --git a/os/linux/gl_cfg80211.c b/os/linux/gl_cfg80211.c
index fa8d4f6..9224841 100644
--- a/os/linux/gl_cfg80211.c
+++ b/os/linux/gl_cfg80211.c
@@ -3283,6 +3283,11 @@
 		return;
 	}
 
+	if (g_u4HaltFlag) {
+		DBGLOG(RLM, WARN, "wlan is halt, skip reg callback\n");
+		return;
+	}
+
 	/*
 	 * Magic flow for driver to send inband command after kernel's calling reg_notifier callback
 	 */
diff --git a/os/linux/gl_wext_priv.c b/os/linux/gl_wext_priv.c
index 0f38c75..81168ba 100644
--- a/os/linux/gl_wext_priv.c
+++ b/os/linux/gl_wext_priv.c
@@ -10048,6 +10048,11 @@
 	INT_32 i4BytesWritten = 0;
 	INT_32 i4CmdFound = 0;
 
+	if (g_u4HaltFlag) {
+		DBGLOG(REQ, WARN, "wlan is halt, skip priv_driver_cmds\n");
+		return -1;
+	}
+
 	if (GLUE_CHK_PR2(prNetDev, pcCommand) == FALSE)
 		return -1;
 	prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev));