am 846ab564: tnetw1251: Add 500 ms expired wakelock to deliver the message (b/2245483)
Merge commit '846ab564179d28a39ac88e3fba6813c8ae520aff' into eclair-mr2
* commit '846ab564179d28a39ac88e3fba6813c8ae520aff':
tnetw1251: Add 500 ms expired wakelock to deliver the message (b/2245483)
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