diff --git a/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c b/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
index 16e444c..57fe2da 100644
--- a/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
+++ b/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
@@ -253,19 +253,18 @@
 	UINT32		prevMatchingLevel = 0;		
 	UINT8		siteIndex, tableIndex, numberOfSites = 0;
 	siteMgr_t	*pSiteMgr = (siteMgr_t *)hSiteMgr;
-	siteEntry_t *pSiteEntry, *pLastMatchSite = NULL;	
+	siteEntry_t	*pSiteEntry, *pLastMatchSite = NULL;
 	rsnData_t	rsnData;
-    dot11_RSN_t *pRsnIe;
-    UINT8       rsnIECount=0;
-    UINT8       curRsnData[255];
-    UINT8       length=0;
+	dot11_RSN_t	*pRsnIe;
+	UINT8		rsnIECount=0;
+	UINT8       	length=0;
 	paramInfo_t	param;
-    radioBand_e radioBand;
+	radioBand_e	radioBand;
 	BOOL		bRegulatoryDomainEnabled;
 
 	siteTablesParams_t* currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
 
-	WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,  
+	WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
 							("SITE MATCH , Desired ssid (%s) len= (%d)\n\n", 
 							 pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString, 
 							 pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len));
@@ -1438,4 +1437,3 @@
     
 	return OK;
 }
-
diff --git a/sta_dk_4_0_4_32/pform/common/src/osRgstry.c b/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
index d625868..5a37e59 100644
--- a/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
+++ b/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
@@ -1041,7 +1041,7 @@
 
     /*defaults values for beacon IE table*/
     /*UINT8 defBeaconIETableSize = 0 ;*/
-    UINT8 defBeaconIETable[] = "00 01 01 01 32 01 2a 01 03 01 06 01 07 01 20 01 25 01 23 01 30 01 28 01 2e 01 85 01 dd 01 00 52 f2 02 00 01";
+    static UINT8 defBeaconIETable[] = "00 01 01 01 32 01 2a 01 03 01 06 01 07 01 20 01 25 01 23 01 30 01 28 01 2e 01 85 01 dd 01 00 52 f2 02 00 01";
     /*UINT8 tmpIeTable[BEACON_FILTER_TABLE_MAX_SIZE] ;*/
     UINT8 staBeaconFilterIETable[BEACON_FILTER_STRING_MAX_LEN] ;
     UINT8 tmpIeTableSize = 35;
@@ -1056,11 +1056,11 @@
     initTable_t* p = (initTable_t*) pInitTable;
     USHORT  tableLen = 0;
     USHORT  loopIndex = 0;
-    UINT8   ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
-    UINT8   ScanControlTable5Tmp[2 * A_5G_BAND_NUM_CHANNELS];
-    UINT8   ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
-    UINT8   ScanControlTable5Def[2 * A_5G_BAND_NUM_CHANNELS] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF00000000000000000000000000000000000000";
-    UINT8   reportSeverityTableDefaults[WLAN_MAX_SEVERITIES] = "000000000000";
+    static UINT8   ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
+    static UINT8   ScanControlTable5Tmp[2 * A_5G_BAND_NUM_CHANNELS];
+    static UINT8   ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
+    static UINT8   ScanControlTable5Def[2 * A_5G_BAND_NUM_CHANNELS] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF00000000000000000000000000000000000000";
+    UINT8   reportSeverityTableDefaults[WLAN_MAX_SEVERITIES] = "00000000000";
     UINT8   reportModuleTableDefaults[WLAN_MAX_LOG_MODULES];
     UINT16  reportSeverityTableLen;
     UINT16  reportModuleTableLen;
diff --git a/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c b/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
index 669e9cc..9770803 100644
--- a/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
+++ b/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
@@ -1814,10 +1814,12 @@
 
 #define TROUT_IRQ MSM_GPIO_TO_INT(29)
 
+#ifdef SDIO_INTERRUPT_HANDLING_ON
 static void tiwlan_sdio_irq(struct sdio_func *func)
 {
     printk("%s:\n", __FUNCTION__);
 }
+#endif
 
 static const struct sdio_device_id tiwlan_sdio_ids[] = {
     { SDIO_DEVICE_CLASS(SDIO_CLASS_WLAN)    },
@@ -1865,11 +1867,11 @@
     rc = tiwlan_sdio_init(func);
     if (rc)
         goto err2;
-
+#ifdef SDIO_INTERRUPT_HANDLING_ON
     rc = sdio_claim_irq(func, tiwlan_sdio_irq);
     if (rc)
         goto err1;
-
+#endif
     SDIO_SetFunc( func );
 
     rc = tiwlan_create_drv(0, 0, 0, 0, 0, TROUT_IRQ, NULL, NULL);
@@ -1877,8 +1879,10 @@
     printk(KERN_INFO "TIWLAN: Driver initialized (rc %d)\n", rc);
     complete(&sdio_wait);
     return rc;
+#ifdef SDIO_INTERRUPT_HANDLING_ON
 err1:
     sdio_disable_func(func);
+#endif
 err2:
     sdio_release_host(func);
     complete(&sdio_wait);
@@ -1889,7 +1893,9 @@
 static void tiwlan_sdio_remove(struct sdio_func *func)
 {
     printk(KERN_DEBUG "TIWLAN: Releasing SDIO resources\n");
+#ifdef SDIO_INTERRUPT_HANDLING_ON
     sdio_release_irq(func);
+#endif
     sdio_disable_func(func);
     sdio_release_host(func);
     printk(KERN_DEBUG "TIWLAN: SDIO resources released\n");
diff --git a/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c b/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
index f5c1aa9..9639859 100644
--- a/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
+++ b/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
@@ -1677,6 +1677,8 @@
     else if( os_strcasecmp(cmd, "rssi") == 0 ) {
 #if 1
         u8 ssid[MAX_SSID_LEN];
+        struct wpa_scan_result *cur_res;
+        struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(myDrv->hWpaSupplicant);
         int rssi, len;
 
         wpa_printf(MSG_DEBUG,"rssi command");
@@ -1688,9 +1690,12 @@
                 os_memcpy( (void *)buf, (void *)ssid, len );
                 ret = len;
                 ret += snprintf(&buf[ret], buf_len-len, " rssi %d\n", rssi);
-                if (ret < (int)buf_len) {
+                if( !wpa_s )
                     return( ret );
-                }
+                cur_res = scan_get_by_bssid( myDrv, wpa_s->bssid );
+                if( cur_res )
+                    cur_res->level = rssi;
+                return( ret );
             }
         }
 #else
diff --git a/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c b/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
index afdd147..4eec78a 100644
--- a/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
+++ b/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
@@ -166,82 +166,86 @@
                      void *iw_req, 
                      void *extra)
 {
-   int              rc;
-   TWlanDrvIfObj   *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
-   ti_private_cmd_t my_command; 
-   struct iw_mlme   mlme;
-   void             *copy_to_buf=NULL, *param3=NULL; 
+    int              rc;
+    TWlanDrvIfObj   *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+    ti_private_cmd_t my_command; 
+    struct iw_mlme   mlme;
+    void             *copy_to_buf=NULL, *param3=NULL; 
 
-   os_memoryZero(drv, &my_command, sizeof(ti_private_cmd_t));
-   os_memoryZero(drv, &mlme,       sizeof(struct iw_mlme));
-   
-   switch (info->cmd)
-   {
-     case SIOCIWFIRSTPRIV:
-     {
-	   void *copy_from_buf;
+    os_memoryZero(drv, &my_command, sizeof(ti_private_cmd_t));
+    os_memoryZero(drv, &mlme,       sizeof(struct iw_mlme));
 
- 	   if (os_memoryCopyFromUser(drv, &my_command, ((union iwreq_data *)iw_req)->data.pointer, sizeof(ti_private_cmd_t)))
-	   {
-		 os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser FAILED !!!\n");
-		 return TI_NOK;
-	   }
-	   if (IS_PARAM_FOR_MODULE(my_command.cmd, DRIVER_MODULE_PARAM))
-       {
-		   /* If it's a driver level command, handle it here and exit */
-           switch (my_command.cmd)
-           {
-           case DRIVER_INIT_PARAM:
-               return wlanDrvIf_LoadFiles (drv, my_command.in_buffer);
-                
-           case DRIVER_START_PARAM:
-               return wlanDrvIf_Start (dev);
+    switch (info->cmd)
+    {
+        case SIOCIWFIRSTPRIV:
+        {
+            void *copy_from_buf;
 
-           case DRIVER_STOP_PARAM:
-               return wlanDrvIf_Stop (dev);
+            if (os_memoryCopyFromUser(drv, &my_command, ((union iwreq_data *)iw_req)->data.pointer, sizeof(ti_private_cmd_t)))
+            {
+                os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser FAILED !!!\n");
+                return TI_NOK;
+            }
+            if (IS_PARAM_FOR_MODULE(my_command.cmd, DRIVER_MODULE_PARAM))
+            {
+                /* If it's a driver level command, handle it here and exit */
+                switch (my_command.cmd)
+                {
+                    case DRIVER_INIT_PARAM:
+                        return wlanDrvIf_LoadFiles(drv, my_command.in_buffer);
 
-           case DRIVER_STATUS_PARAM:
-               *(TI_UINT32 *)my_command.out_buffer = 
-                   (drv->tCommon.eDriverState == DRV_STATE_RUNNING) ? TI_TRUE : TI_FALSE;
-               return TI_OK;
-           }
-       }
-	   /* if we are still here handle a normal private command*/
+                    case DRIVER_START_PARAM:
+                        return wlanDrvIf_Start(dev);
 
-	   if ((my_command.in_buffer) && (my_command.in_buffer_len))
-       {
-		 copy_from_buf        = my_command.in_buffer;
-		 my_command.in_buffer = os_memoryAlloc(drv, my_command.in_buffer_len);
-		 if (os_memoryCopyFromUser(drv, my_command.in_buffer, copy_from_buf, my_command.in_buffer_len))
-		 {
-		   os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser 1 FAILED !!!\n");
-		   return TI_NOK;
-		 }
-	   }
-	   if ((my_command.out_buffer) && (my_command.out_buffer_len))
-	   {
-		 copy_to_buf          = my_command.out_buffer;
-		 my_command.out_buffer = os_memoryAlloc(drv, my_command.out_buffer_len);
-	   }
-	   param3 = &my_command;
-     }
-	 break;
+                    case DRIVER_STOP_PARAM:
+                        return wlanDrvIf_Stop(dev);
 
-     case SIOCSIWMLME:
-     {
-		os_memoryCopyFromUser(drv, &mlme, ((union iwreq_data *)iw_req)->data.pointer, sizeof(struct iw_mlme));
-		param3 = &mlme;
-     }
-	 break;
-   }
-   /* If the friver is not running, return NOK */
-   if (drv->tCommon.eDriverState != DRV_STATE_RUNNING)
-   {
-       return TI_NOK;
-   }
+                    case DRIVER_STATUS_PARAM:
+                        *(TI_UINT32 *)my_command.out_buffer =
+                           (drv->tCommon.eDriverState == DRV_STATE_RUNNING) ? TI_TRUE : TI_FALSE;
+                        return TI_OK;
+                }
+            }
+            /* if we are still here handle a normal private command*/
 
-   /* Call the Cmd module with the given user paramters */
-   rc = (cmdHndlr_InsertCommand (drv->tCommon.hCmdHndlr, 
+            if ((my_command.in_buffer) && (my_command.in_buffer_len))
+            {
+                copy_from_buf        = my_command.in_buffer;
+                my_command.in_buffer = os_memoryAlloc(drv, my_command.in_buffer_len);
+                if (os_memoryCopyFromUser(drv, my_command.in_buffer, copy_from_buf, my_command.in_buffer_len))
+                {
+                    os_printf("wlanDrvWext_Handler() os_memoryCopyFromUser 1 FAILED !!!\n");
+                    return TI_NOK;
+                }
+            }
+            if ((my_command.out_buffer) && (my_command.out_buffer_len))
+            {
+                copy_to_buf          = my_command.out_buffer;
+                my_command.out_buffer = os_memoryAlloc(drv, my_command.out_buffer_len);
+            }
+            param3 = &my_command;
+        }
+        break;
+
+        case SIOCSIWMLME:
+        {
+            os_memoryCopyFromUser(drv, &mlme, ((union iwreq_data *)iw_req)->data.pointer, sizeof(struct iw_mlme));
+            param3 = &mlme;
+        }
+        break;
+    }
+    /* If the friver is not running, return NOK */
+    if (drv->tCommon.eDriverState != DRV_STATE_RUNNING)
+    {
+        if (my_command.in_buffer)
+            os_memoryFree(drv, my_command.in_buffer, my_command.in_buffer_len);
+        if (my_command.out_buffer)
+            os_memoryFree(drv,my_command.out_buffer,my_command.out_buffer_len);
+        return TI_NOK;
+    }
+
+    /* Call the Cmd module with the given user paramters */
+    rc = cmdHndlr_InsertCommand(drv->tCommon.hCmdHndlr,
                                    info->cmd, 
                                    info->flags, 
                                    iw_req, 
@@ -249,21 +253,20 @@
                                    extra, 
                                    0, 
                                    param3, 
-                                   NULL));
-   /* Here we are after the command was completed */
-   if (my_command.in_buffer)
-   {
-	 os_memoryFree (drv, my_command.in_buffer, my_command.in_buffer_len);
-   }
-   if (my_command.out_buffer)
-   {
-	 if (os_memoryCopyToUser(drv, copy_to_buf, my_command.out_buffer, my_command.out_buffer_len))
-	 {
-	   os_printf ("wlanDrvWext_Handler() os_memoryCopyToUser FAILED !!!\n");
-	   rc = TI_NOK;
-	 }
-	 os_memoryFree (drv, my_command.out_buffer, my_command.out_buffer_len);
-   }
-
-   return rc;
+                                   NULL);
+    /* Here we are after the command was completed */
+    if (my_command.in_buffer)
+    {
+        os_memoryFree(drv, my_command.in_buffer, my_command.in_buffer_len);
+    }
+    if (my_command.out_buffer)
+    {
+        if (os_memoryCopyToUser(drv, copy_to_buf, my_command.out_buffer, my_command.out_buffer_len))
+        {
+            os_printf("wlanDrvWext_Handler() os_memoryCopyToUser FAILED !!!\n");
+            rc = TI_NOK;
+        }
+        os_memoryFree(drv, my_command.out_buffer, my_command.out_buffer_len);
+    }
+    return rc;
 }
diff --git a/wilink_6_1/platforms/os/linux/src/osapi.c b/wilink_6_1/platforms/os/linux/src/osapi.c
index fd99089..4ad5646 100644
--- a/wilink_6_1/platforms/os/linux/src/osapi.c
+++ b/wilink_6_1/platforms/os/linux/src/osapi.c
@@ -602,8 +602,8 @@
 	int ret = 0;
 	unsigned long flags;
 
-	spin_lock_irqsave(&drv->lock, flags);
 	if (drv) {
+		spin_lock_irqsave(&drv->lock, flags);
 		ret = drv->wl_packet;
 		if (drv->wl_packet) {
 			drv->wl_packet = 0;
@@ -611,8 +611,8 @@
 			wake_lock_timeout(&drv->wl_rxwake, (HZ >> 1));
 #endif
 		}
+		spin_unlock_irqrestore(&drv->lock, flags);
 	}
-	spin_unlock_irqrestore(&drv->lock, flags);
 	/* printk("%s: %d\n", __func__, ret); */
 	return ret;
 }
@@ -630,11 +630,13 @@
 {
 	TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
 	unsigned long flags;
-	int ret;
+	int ret = 0;
 
-	spin_lock_irqsave(&drv->lock, flags);
-	ret = drv->wl_packet = 1;
-	spin_unlock_irqrestore(&drv->lock, flags);
+	if (drv) {
+		spin_lock_irqsave(&drv->lock, flags);
+		ret = drv->wl_packet = 1;
+		spin_unlock_irqrestore(&drv->lock, flags);
+	}
 	return ret;
 }
 
@@ -653,16 +655,16 @@
 	int ret = 0;
 	unsigned long flags;
 
-	spin_lock_irqsave(&drv->lock, flags);
 	if (drv) {
+		spin_lock_irqsave(&drv->lock, flags);
 #ifdef CONFIG_HAS_WAKELOCK
 		if (!drv->wl_count)
 			wake_lock(&drv->wl_wifi);
 #endif
 		drv->wl_count++;
 		ret = drv->wl_count;
+		spin_unlock_irqrestore(&drv->lock, flags);
 	}
-	spin_unlock_irqrestore(&drv->lock, flags);
 	/* printk("%s: %d\n", __func__, ret); */
 	return ret;
 }
@@ -682,16 +684,18 @@
 	int ret = 0;
 	unsigned long flags;
 
-	spin_lock_irqsave(&drv->lock, flags);
-	if (drv && drv->wl_count) {
-		drv->wl_count--;
+	if (drv) {
+		spin_lock_irqsave(&drv->lock, flags);
+		if (drv->wl_count) {
+			drv->wl_count--;
 #ifdef CONFIG_HAS_WAKELOCK
-		if (!drv->wl_count)
-			wake_unlock(&drv->wl_wifi);
+			if (!drv->wl_count)
+				wake_unlock(&drv->wl_wifi);
 #endif
-		ret = drv->wl_count;
+			ret = drv->wl_count;
+		}
+		spin_unlock_irqrestore(&drv->lock, flags);
 	}
-	spin_unlock_irqrestore(&drv->lock, flags);
 	/* printk("%s: %d\n", __func__, ret); */
 	return ret;
 }
diff --git a/wilink_6_1/platforms/os/linux/zoom2_env.bash b/wilink_6_1/platforms/os/linux/zoom2_env.bash
index bf1addc..5d5d4a5 100644
--- a/wilink_6_1/platforms/os/linux/zoom2_env.bash
+++ b/wilink_6_1/platforms/os/linux/zoom2_env.bash
@@ -1,4 +1,4 @@
 export CROSS_COMPILE=arm-eabi-
 export ARCH=arm
 export HOST_PLATFORM=zoom2
-export KERNEL_DIR=/usr/local/google/android/eclair/kernel
+export KERNEL_DIR=/usr/local/google/android/eclair-mr2/kernel
diff --git a/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c b/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
index 3a92561..77041ba 100644
--- a/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
+++ b/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
@@ -1251,7 +1251,8 @@
             curWpaIe +=4; 
 
             /* Include all AP key management supported suites in the wpaData structure */
-            pWpaData->KeyMngSuite[index+1] = curKeyMngSuite;
+	    if ((index+1) < MAX_WPA_KEY_MNG_SUITES)
+                pWpaData->KeyMngSuite[index+1] = curKeyMngSuite;
 
         }
         pWpaData->KeyMngSuite[0] = maxKeyMngSuite;
diff --git a/wilink_6_1/stad/src/Connection_Managment/connInfra.c b/wilink_6_1/stad/src/Connection_Managment/connInfra.c
index 866b0fe..b48acdf 100644
--- a/wilink_6_1/stad/src/Connection_Managment/connInfra.c
+++ b/wilink_6_1/stad/src/Connection_Managment/connInfra.c
@@ -856,7 +856,7 @@
 
     /* Start the disconnect complete time out timer. 
        Disconect Complete event, which stops the timer. */
-    tmr_StartTimer (pConn->hConnTimer, conn_timeout, (TI_HANDLE)pConn, DISCONNECT_TIMEOUT_MSEC * 4, TI_FALSE);
+    tmr_StartTimer (pConn->hConnTimer, conn_timeout, (TI_HANDLE)pConn, DISCONNECT_TIMEOUT_MSEC, TI_FALSE);
 
     /* FW will send the disconn frame according to disConnType */ 
     TWD_CmdFwDisconnect (pConn->hTWD, pConn->disConnType, pConn->disConnReasonToAP); 
diff --git a/wilink_6_1/stad/src/Data_link/rx.c b/wilink_6_1/stad/src/Data_link/rx.c
index 52436fe..beb234f 100644
--- a/wilink_6_1/stad/src/Data_link/rx.c
+++ b/wilink_6_1/stad/src/Data_link/rx.c
@@ -39,28 +39,28 @@
 /***************************************************************************/
 #define __FILE_ID__  FILE_ID_54
 #include "tidef.h"
-#include "paramOut.h" 
+#include "paramOut.h"
 #include "rx.h"
 #include "osApi.h"
 #include "timer.h"
 #include "DataCtrl_Api.h"
 #include "Ctrl.h"
 #include "802_11Defs.h"
-#include "Ethernet.h" 
+#include "Ethernet.h"
 #include "report.h"
 #include "rate.h"
 #include "mlmeApi.h"
 #include "rsnApi.h"
 #include "smeApi.h"
 #include "siteMgrApi.h"
-#include "GeneralUtil.h"   
+#include "GeneralUtil.h"
 #include "EvHandler.h"
 #ifdef XCC_MODULE_INCLUDED
 #include "XCCMngr.h"
 #endif
 #include "TWDriver.h"
 #include "RxBuf.h"
-#include "DrvMainModules.h" 
+#include "DrvMainModules.h"
 #include "bmtrace_api.h"
 #include "PowerMgr_API.h"
 
@@ -184,7 +184,7 @@
     pRxData->hEvHandler = pStadHandles->hEvHandler;
     pRxData->hTimer     = pStadHandles->hTimer;
     pRxData->hPowerMgr  = pStadHandles->hPowerMgr;
-    
+
     pRxData->rxDataExcludeUnencrypted = DEF_EXCLUDE_UNENCYPTED; 
     pRxData->rxDataExludeBroadcastUnencrypted = DEF_EXCLUDE_UNENCYPTED;
     pRxData->rxDataEapolDestination = DEF_EAPOL_DESTINATION;
@@ -239,7 +239,7 @@
 {
     rxData_t *pRxData = (rxData_t *)hRxData;
     int i;
-    
+
     /* init rx data filters */
     pRxData->filteringEnabled = rxDataInitParams->rxDataFiltersEnabled;
     pRxData->filteringDefaultAction = rxDataInitParams->rxDataFiltersDefaultAction;
@@ -814,7 +814,6 @@
                                 lenFieldPatterns, 
                                 fieldPatterns);
 
-    return TI_OK;
 }
 
 /***************************************************************************
diff --git a/wilink_6_1/wpa_supplicant_lib/driver_ti.c b/wilink_6_1/wpa_supplicant_lib/driver_ti.c
index a579be1..55198c5 100644
--- a/wilink_6_1/wpa_supplicant_lib/driver_ti.c
+++ b/wilink_6_1/wpa_supplicant_lib/driver_ti.c
@@ -134,12 +134,17 @@
 	iwr.u.data.flags = 0;
 
 	res = ioctl(drv->ioctl_sock, SIOCIWFIRSTPRIV, &iwr);
-	if(res != 0)
+	if (0 != res)
 	{
 		wpa_printf(MSG_ERROR, "ERROR - wpa_driver_tista_private_send - error sending Wext private IOCTL to STA driver (ioctl_cmd = %x,  res = %d, errno = %d)", ioctl_cmd, res, errno);
+		drv->errors++;
+		if (drv->errors > MAX_NUMBER_SEQUENTIAL_ERRORS) {
+			drv->errors = 0;
+			wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+		}
 		return -1;
 	}
-
+	drv->errors = 0;
 	wpa_printf(MSG_DEBUG, "wpa_driver_tista_private_send ioctl_cmd = %x  res = %d", ioctl_cmd, res);
 
 	return 0;
@@ -153,8 +158,10 @@
 
 	res = wpa_driver_tista_private_send(priv, DRIVER_START_PARAM, &uDummyBuf, sizeof(uDummyBuf), NULL, 0);
 
-	if(0 != res)
+	if (0 != res) {
 		wpa_printf(MSG_ERROR, "ERROR - Failed to start driver!");
+		wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+	}
 	else {
 		os_sleep(0, WPA_DRIVER_WEXT_WAIT_US); /* delay 400 ms */
 		wpa_printf(MSG_DEBUG, "wpa_driver_tista_driver_start success");
@@ -170,8 +177,10 @@
 
 	res = wpa_driver_tista_private_send(priv, DRIVER_STOP_PARAM, &uDummyBuf, sizeof(uDummyBuf), NULL, 0);
 
-	if(0 != res)
+	if (0 != res) {
 		wpa_printf(MSG_ERROR, "ERROR - Failed to stop driver!");
+		wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+	}
 	else
 		wpa_printf(MSG_DEBUG, "wpa_driver_tista_driver_stop success");
 
@@ -593,6 +602,11 @@
 			wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "STOPPED");
 		}
 	}
+	if( os_strcasecmp(cmd, "reload") == 0 ) {
+		wpa_printf(MSG_DEBUG,"Reload command");
+		ret = 0;
+		wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+	}
 	else if( os_strcasecmp(cmd, "macaddr") == 0 ) {
 		wpa_driver_tista_get_mac_addr(priv);
 		wpa_printf(MSG_DEBUG, "Macaddr command");
@@ -651,14 +665,13 @@
 				os_memcpy( (void *)buf, (void *)(cur_res->ssid), len );
 				ret = len;
 				ret += snprintf(&buf[ret], buf_len-len, " rssi %d\n", rssi);
-				if (ret < (int)buf_len) {
-					return( ret );
-				}
 			}
 		}
 	}
 	else if( os_strcasecmp(cmd, "rssi") == 0 ) {
 		u8 ssid[MAX_SSID_LEN];
+		struct wpa_scan_result *cur_res;
+		struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx);
 		int rssi_data, rssi_beacon, len;
 
 		wpa_printf(MSG_DEBUG,"rssi command");
@@ -672,6 +685,12 @@
 				ret = len;
 				ret += sprintf(&buf[ret], " rssi %d\n", rssi_beacon);
 				wpa_printf(MSG_DEBUG, "buf %s", buf);
+				/* Update cached value */
+				if( !wpa_s )
+					return( ret );
+				cur_res = scan_get_by_bssid( drv, wpa_s->bssid );
+				if( cur_res )
+					cur_res->level = rssi_beacon;
 			}
 			else
 			{
@@ -834,6 +853,9 @@
 
 	/* BtCoex mode is read from tiwlan.ini file */
 	drv->btcoex_mode = 0; /* SG_DISABLE */
+
+	/* Number of sequential errors */
+	drv->errors = 0;
 	return drv;
 }
 
diff --git a/wilink_6_1/wpa_supplicant_lib/driver_ti.h b/wilink_6_1/wpa_supplicant_lib/driver_ti.h
index ab36ab3..6f36119 100644
--- a/wilink_6_1/wpa_supplicant_lib/driver_ti.h
+++ b/wilink_6_1/wpa_supplicant_lib/driver_ti.h
@@ -53,6 +53,8 @@
 #define RX_IPV4_MULTICAST_FILTER	2
 #define RX_IPV6_MULTICAST_FILTER	3
 
+#define MAX_NUMBER_SEQUENTIAL_ERRORS	4
+
 typedef enum {
 	BLUETOOTH_COEXISTENCE_MODE_ENABLED = 0,
 	BLUETOOTH_COEXISTENCE_MODE_DISABLED,
@@ -73,5 +75,6 @@
 	u32 btcoex_mode;		/* BtCoex Mode */
 	int last_scan;			/* Last scan type */
 	SHLIST scan_merge_list;		/* Previous scan list */
+	int errors;			/* Number of sequential errors */
 };
 #endif
