summaryrefslogtreecommitdiff
path: root/wl1271/platforms/os
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2010-01-29 14:38:28 -0800
committerDmitry Shmidt <dimitrysh@google.com>2010-01-29 14:38:28 -0800
commitddac9c138c5b4b16b99fb8bc5f0f10418efa1029 (patch)
tree9ad7e34f8dcd9d63ef2faa9e865d6056a061e6c3 /wl1271/platforms/os
parenta615fb1650af6e111053506f1b764b28a5b4631d (diff)
downloadwlan-ddac9c138c5b4b16b99fb8bc5f0f10418efa1029.tar.gz
wl1271: Android/Sholes update
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'wl1271/platforms/os')
-rw-r--r--wl1271/platforms/os/common/inc/osApi.h2
-rw-r--r--wl1271/platforms/os/common/src/osRgstry.c745
-rw-r--r--wl1271/platforms/os/linux/Makefile29
-rw-r--r--wl1271/platforms/os/linux/build/Makefile20
-rw-r--r--wl1271/platforms/os/linux/inc/WlanDrvIf.h12
-rw-r--r--wl1271/platforms/os/linux/src/CmdInterpretWext.c804
-rw-r--r--wl1271/platforms/os/linux/src/RxBuf.c57
-rw-r--r--wl1271/platforms/os/linux/src/WlanDrvIf.c688
-rw-r--r--wl1271/platforms/os/linux/src/WlanDrvWext.c176
-rw-r--r--wl1271/platforms/os/linux/src/osRgstry_parser.c8
-rw-r--r--wl1271/platforms/os/linux/src/osapi.c348
-rw-r--r--wl1271/platforms/os/linux/src/osmemapi.c200
-rw-r--r--wl1271/platforms/os/linux/src/stack_profile.c120
-rw-r--r--wl1271/platforms/os/linux/wl_env.bash9
14 files changed, 1730 insertions, 1488 deletions
diff --git a/wl1271/platforms/os/common/inc/osApi.h b/wl1271/platforms/os/common/inc/osApi.h
index 46d2e4c0..4787a75f 100644
--- a/wl1271/platforms/os/common/inc/osApi.h
+++ b/wl1271/platforms/os/common/inc/osApi.h
@@ -529,7 +529,6 @@ void os_protectLock (TI_HANDLE OsContext, TI_HANDLE ProtectContext);
*/
void os_protectUnlock (TI_HANDLE OsContext, TI_HANDLE ProtectContext);
-
/* Wakelock functionality */
int os_wake_lock (TI_HANDLE OsContext);
int os_wake_unlock (TI_HANDLE OsContext);
@@ -539,7 +538,6 @@ int os_wake_lock_timeout_enable (TI_HANDLE OsContext);
#define os_profile(hos,fn,par)
-
/****************************************************************************************
START OF GWSI DRIVER API
*****************************************************************************************/
diff --git a/wl1271/platforms/os/common/src/osRgstry.c b/wl1271/platforms/os/common/src/osRgstry.c
index 27c88136..736d8726 100644
--- a/wl1271/platforms/os/common/src/osRgstry.c
+++ b/wl1271/platforms/os/common/src/osRgstry.c
@@ -78,21 +78,21 @@ NDIS_STRING STRGroup_addr7 = NDIS_STRING_CONST( "Group_addr7" );
/* If Early Wakeup is Enabled, 1251 wakes-up EARLY_WAKEUP_TIME before expected Beacon reception occasion */
/* If Early Wakeup is Disabled, 1251 wakes-up at the expected Beacon reception occasion. */
NDIS_STRING STREarlyWakeup = NDIS_STRING_CONST( "EarlyWakeup" );
-
+
NDIS_STRING STRArp_Ip_Addr = NDIS_STRING_CONST( "ArpIp_Addr" );
NDIS_STRING STRArp_Ip_Filter_Ena = NDIS_STRING_CONST( "ArpIp_Filter_ena");
-NDIS_STRING STRBeaconFilterDesiredState = NDIS_STRING_CONST( "Beacon_Filter_Desired_State") ;
-NDIS_STRING STRBeaconFilterStored = NDIS_STRING_CONST( "Beacon_Filter_Stored") ;
+NDIS_STRING STRBeaconFilterDesiredState = NDIS_STRING_CONST( "Beacon_Filter_Desired_State");
+NDIS_STRING STRBeaconFilterStored = NDIS_STRING_CONST( "Beacon_Filter_Stored");
/*this is for configuring table from ini file*/
-NDIS_STRING STRBeaconIETableSize = NDIS_STRING_CONST( "Beacon_IE_Table_Size") ;
+NDIS_STRING STRBeaconIETableSize = NDIS_STRING_CONST( "Beacon_IE_Table_Size");
NDIS_STRING STRBeaconIETable = NDIS_STRING_CONST( "Beacon_IE_Table") ;
-NDIS_STRING STRBeaconIETableNumOfElem = NDIS_STRING_CONST( "Beacon_IE_Num_Of_Elem") ;
+NDIS_STRING STRBeaconIETableNumOfElem = NDIS_STRING_CONST( "Beacon_IE_Num_Of_Elem");
-NDIS_STRING STRCoexActivityTable = NDIS_STRING_CONST( "Coex_Activity_Table") ;
-NDIS_STRING STRCoexActivityNumOfElem = NDIS_STRING_CONST( "Coex_Activity_Num_Of_Elem") ;
+NDIS_STRING STRCoexActivityTable = NDIS_STRING_CONST( "Coex_Activity_Table");
+NDIS_STRING STRCoexActivityNumOfElem = NDIS_STRING_CONST( "Coex_Activity_Num_Of_Elem");
/* ------------------------------------------------------ */
NDIS_STRING STRFirmwareDebug = NDIS_STRING_CONST( "FirmwareDebug" );
@@ -141,7 +141,7 @@ NDIS_STRING STRdot11MaxTxMSDULifetime = NDIS_STRING_CONST( "dot11MaxTransm
NDIS_STRING STRdot11MaxReceiveLifetime = NDIS_STRING_CONST( "dot11MaxReceiveLifetime" );
NDIS_STRING STRdot11RateFallBackRetryLimit = NDIS_STRING_CONST( "dot11RateFallBackRetryLimit");
-NDIS_STRING STRReAuthActivePriority = NDIS_STRING_CONST( "ReAuthActivePriority" );
+NDIS_STRING STRReAuthActivePriority = NDIS_STRING_CONST( "ReAuthActivePriority" );
NDIS_STRING STRListenInterval = NDIS_STRING_CONST( "dot11ListenInterval" );
NDIS_STRING STRExternalMode = NDIS_STRING_CONST( "DriverExternalMode" );
@@ -226,12 +226,11 @@ NDIS_STRING STRdot11WEPDefaultKeyID = NDIS_STRING_CONST( "dot11WEPDefaul
NDIS_STRING STRMixedMode = NDIS_STRING_CONST( "MixedMode" );
-NDIS_STRING STRWPAMixedMode = NDIS_STRING_CONST( "WPAMixedMode");
-NDIS_STRING STRRSNPreAuth = NDIS_STRING_CONST( "RSNPreAuthentication");
-NDIS_STRING STRRSNPreAuthTimeout = NDIS_STRING_CONST( "RSNPreAuthTimeout" );
-
+NDIS_STRING STRWPAMixedMode = NDIS_STRING_CONST( "WPAMixedMode");
+NDIS_STRING STRRSNPreAuth = NDIS_STRING_CONST( "RSNPreAuthentication");
+NDIS_STRING STRRSNPreAuthTimeout = NDIS_STRING_CONST( "RSNPreAuthTimeout" );
-NDIS_STRING STRPairwiseMicFailureFilter = NDIS_STRING_CONST( "PairwiseMicFailureFilter" );
+NDIS_STRING STRPairwiseMicFailureFilter = NDIS_STRING_CONST( "PairwiseMicFailureFilter" );
NDIS_STRING STRTimeToResetCountryMs = NDIS_STRING_CONST( "TimeToResetCountryMs" );
NDIS_STRING STRMultiRegulatoryDomainEnabled = NDIS_STRING_CONST( "MultiRegulatoryDomain" );
@@ -298,7 +297,7 @@ NDIS_STRING STRTriggeredScanTimeOut = NDIS_STRING_CONST( "Tr
/*-----------------------------------*/
/* Coexistence params */
/*-----------------------------------*/
-NDIS_STRING STRBThWlanCoexistEnable = NDIS_STRING_CONST( "BThWlanCoexistEnable" );
+NDIS_STRING STRBThWlanCoexistEnable = NDIS_STRING_CONST( "BThWlanCoexistEnable" );
NDIS_STRING STRBThWlanCoexistPerThreshold = NDIS_STRING_CONST( "coexBtPerThreshold" );
NDIS_STRING STRBThWlanCoexistHv3MaxOverride = NDIS_STRING_CONST( "coexHv3MaxOverride" );
@@ -355,8 +354,6 @@ NDIS_STRING STRBThWlanCoexTemp3 = NDIS_STRING_CONST( "coexTempParam3" );
NDIS_STRING STRBThWlanCoexTemp4 = NDIS_STRING_CONST( "coexTempParam4" );
NDIS_STRING STRBThWlanCoexTemp5 = NDIS_STRING_CONST( "coexTempParam5" );
-
-
NDIS_STRING STRDisableSsidPending = NDIS_STRING_CONST( "DisableSsidPending" );
/*-----------------------------------*/
@@ -630,7 +627,7 @@ NDIS_STRING STRRxDataFiltersFilter4Mask = NDIS_STRING_CONST("RxDataFilte
NDIS_STRING STRRxDataFiltersFilter4Pattern = NDIS_STRING_CONST("RxDataFilters_Filter4Pattern");
-NDIS_STRING STRReAuthActiveTimeout = NDIS_STRING_CONST( "ReAuthActiveTimeout" );
+NDIS_STRING STRReAuthActiveTimeout = NDIS_STRING_CONST( "ReAuthActiveTimeout" );
/*---------------------------
Measurement parameters
@@ -661,7 +658,7 @@ NDIS_STRING STRstationMacAddress = NDIS_STRING_CONST("dot11Statio
NDIS_STRING SendINIBufferToUser = NDIS_STRING_CONST("SendINIBufferToUserMode");
/*-------------------------------------------
- RSSI/SNR Weights for Average calculations
+ RSSI/SNR Weights for Average calculations
--------------------------------------------*/
NDIS_STRING STRRssiBeaconAverageWeight = NDIS_STRING_CONST("RssiBeaconAverageWeight");
@@ -769,21 +766,21 @@ NDIS_STRING STRFmCoexSwallowClkDif = NDIS_STRING_CONST("FmCoexSwallowClkD
/*----------------------------------------*/
-NDIS_STRING STRRateMngRateRetryScore = NDIS_STRING_CONST("RateMngRateRetryScore");
-NDIS_STRING STRRateMngPerAdd = NDIS_STRING_CONST("RateMngPerAdd");
-NDIS_STRING STRRateMngPerTh1 = NDIS_STRING_CONST("RateMngPerTh1");
-NDIS_STRING STRRateMngPerTh2 = NDIS_STRING_CONST("RateMngPerTh2");
-NDIS_STRING STRRateMngMaxPer = NDIS_STRING_CONST("RateMngMaxPer");
-NDIS_STRING STRRateMngInverseCuriosityFactor = NDIS_STRING_CONST("RateMngInverseCuriosityFactor");
-NDIS_STRING STRRateMngTxFailLowTh = NDIS_STRING_CONST("RateMngTxFailLowTh");
-NDIS_STRING STRRateMngTxFailHighTh = NDIS_STRING_CONST("RateMngTxFailHighTh");
-NDIS_STRING STRRateMngPerAlphaShift = NDIS_STRING_CONST("RateMngPerAlphaShift");
-NDIS_STRING STRRateMngPerAddShift = NDIS_STRING_CONST("RateMngPerAddShift");
-NDIS_STRING STRRateMngPerBeta1Shift = NDIS_STRING_CONST("RateMngPerBeta1Shift");
-NDIS_STRING STRRateMngPerBeta2Shift = NDIS_STRING_CONST("RateMngPerBeta2Shift");
-NDIS_STRING STRRateMngRateCheckUp = NDIS_STRING_CONST("RateMngRateCheckUp");
-NDIS_STRING STRRateMngRateCheckDown = NDIS_STRING_CONST("RateMngRateCheckDown");
-NDIS_STRING STRRateMngRateRetryPolicy = NDIS_STRING_CONST("RateMngRateRetryPolicy");
+NDIS_STRING STRRateMngRateRetryScore = NDIS_STRING_CONST("RateMngRateRetryScore");
+NDIS_STRING STRRateMngPerAdd = NDIS_STRING_CONST("RateMngPerAdd");
+NDIS_STRING STRRateMngPerTh1 = NDIS_STRING_CONST("RateMngPerTh1");
+NDIS_STRING STRRateMngPerTh2 = NDIS_STRING_CONST("RateMngPerTh2");
+NDIS_STRING STRRateMngMaxPer = NDIS_STRING_CONST("RateMngMaxPer");
+NDIS_STRING STRRateMngInverseCuriosityFactor = NDIS_STRING_CONST("RateMngInverseCuriosityFactor");
+NDIS_STRING STRRateMngTxFailLowTh = NDIS_STRING_CONST("RateMngTxFailLowTh");
+NDIS_STRING STRRateMngTxFailHighTh = NDIS_STRING_CONST("RateMngTxFailHighTh");
+NDIS_STRING STRRateMngPerAlphaShift = NDIS_STRING_CONST("RateMngPerAlphaShift");
+NDIS_STRING STRRateMngPerAddShift = NDIS_STRING_CONST("RateMngPerAddShift");
+NDIS_STRING STRRateMngPerBeta1Shift = NDIS_STRING_CONST("RateMngPerBeta1Shift");
+NDIS_STRING STRRateMngPerBeta2Shift = NDIS_STRING_CONST("RateMngPerBeta2Shift");
+NDIS_STRING STRRateMngRateCheckUp = NDIS_STRING_CONST("RateMngRateCheckUp");
+NDIS_STRING STRRateMngRateCheckDown = NDIS_STRING_CONST("RateMngRateCheckDown");
+NDIS_STRING STRRateMngRateRetryPolicy = NDIS_STRING_CONST("RateMngRateRetryPolicy");
NDIS_STRING STRincludeWSCinProbeReq = NDIS_STRING_CONST("IncludeWSCinProbeReq");
@@ -820,7 +817,7 @@ static void assignRegValue(TI_UINT32* lValue, PNDIS_CONFIGURATION_PARAMETER ndis
static void parse_filter_request(TRxDataFilterRequest* request, TI_UINT8 offset, char * mask, TI_UINT8 maskLength, char * pattern, TI_UINT8 patternLength);
-void regReadIntegerParameter (
+static void regReadIntegerParameter (
TWlanDrvIfObjPtr pAdapter,
PNDIS_STRING pParameterName,
TI_UINT32 defaultValue,
@@ -913,7 +910,7 @@ static TI_UINT32 tiwlnstrtoi_hex (TI_UINT8 *num, TI_UINT32 length)
break;
}
}
-
+
return value;
}
@@ -923,8 +920,8 @@ Routine Name:
regConvertStringtoMACAddress
-Routine Description: Converts the MAC Adrress in a form of string readen from the Registry
-to the MAC Address Array to be stored in the init_table struct
+Routine Description: Converts the MAC Adrress in a form of string readen from the Registry
+to the MAC Address Array to be stored in the init_table struct
Arguments:
@@ -935,29 +932,35 @@ Return Value:
None
-----------------------------------------------------------------------------*/
-static void regConvertStringtoMACAddress(TI_UINT8 *staMACAddressString,TI_UINT8 *MacAddressArray)
+static void regConvertStringtoMACAddress(TI_UINT8 *staMACAddressString, TI_UINT8 *MacAddressArray)
{
char *ptr;
TI_UINT8 *tmpMacAddr;
- TI_UINT8 value=0,value_l,value_h,add_value;
+ TI_UINT8 value = 0, value_l, value_h, add_value;
int i, str_len;
/* Take the pointer to the string MAC Address to convert it to the Array MAC Address */
- ptr=(char *)staMACAddressString;
+ ptr = (char *)staMACAddressString;
tmpMacAddr = MacAddressArray;
- str_len = 3 * MAC_ADDR_LEN - 1; /* Each value includes two digits and a space so multpily by 3 */
+ str_len = 3 * MAC_ADDR_LEN - 1;
- for (i = 0; i < MAC_ADDR_LEN; ptr++, str_len--)
+ for(i=0;(i < MAC_ADDR_LEN);ptr++,str_len--)
{
- /* The value can be "0-9" or from "a-f" */
- value_l = *ptr - '0';
- value_h = *ptr - 'a';
+ if (str_len > 0) {
+ /* The value can be or "0-9" or from "a-f" */
+ value_l = (*ptr - '0');
+ value_h = (*ptr - 'a');
+ }
+ else { /* last element */
+ value_l = value_h = 16;
+ }
+ /*PRINTF(DBG_REGISTRY,("value_l [%d] value_h [%d] *ptr %c value %d\n",value_l,value_h,*ptr,value));*/
- if ((str_len > 0) && ((value_l <= 9) || (value_h <= 15 )))
+ if( (value_l <= 9) || (value_h <= 15 ) )
{
/* We are in an expected range */
/* Check if 0-9 */
- if (value_l <= 9)
+ if(value_l <= 9 )
{
add_value = value_l;
}
@@ -967,7 +970,7 @@ static void regConvertStringtoMACAddress(TI_UINT8 *staMACAddressString,TI_UINT8
/* 'a' is in fact 10 decimal in hexa */
add_value = value_h + 10;
}
- value = value * 16 + add_value;
+ value = value * 16 + add_value;
}
else
{
@@ -979,7 +982,6 @@ static void regConvertStringtoMACAddress(TI_UINT8 *staMACAddressString,TI_UINT8
}
-
/*-----------------------------------------------------------------------------
Routine Name:
@@ -1003,87 +1005,66 @@ regFillInitTable(
void* pInitTable
)
{
- TI_UINT8 bssidBroadcast[MAC_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- char dummySsidString[MAX_SSID_LEN];
-
- TI_UINT8 *ClsfrIp = "0a 03 01 c9";
- TI_UINT8 ClsfrIpString[16];
- TI_UINT8 ClsfrIpStringSize;
-
- /* EEPROM-less : MAC address */
- TI_UINT8 regMACstrLen = REG_MAC_ADDR_STR_LEN;
- TI_UINT8 staMACAddress[REG_MAC_ADDR_STR_LEN];
- TI_UINT8 defStaMacAddress0[]= "00 22 11 33 44 55";
- TI_UINT8 defStaMacAddress1[]= "11 11 12 13 14 15";
- TI_UINT8 defStaMacAddress2[]= "12 21 22 23 24 25";
- TI_UINT8 defStaMacAddress3[]= "13 31 32 33 34 35";
- TI_UINT8 defStaMacAddress4[]= "14 41 42 43 44 45";
- TI_UINT8 defStaMacAddress5[]= "15 51 52 53 54 55";
- TI_UINT8 defStaMacAddress6[]= "16 61 62 63 64 65";
- TI_UINT8 defStaMacAddress7[]= "17 71 72 73 74 75";
-
-
- TI_UINT8 regArpIpStrLen = REG_ARP_IP_ADDR_STR_LEN ;
- TI_UINT8 staArpIpAddress[REG_ARP_IP_ADDR_STR_LEN];
- TI_UINT8 defArpIpAddress[] = "0a 00 00 0a" ; /*value by default*/
+ static TI_UINT8 *ClsfrIp = "0a 03 01 c9";
+ static TI_UINT8 ClsfrIpString[16];
+ static TI_UINT8 ClsfrIpStringSize;
+
+ /* EEPROM-less : MAC address */
+ static TI_UINT8 regMACstrLen = REG_MAC_ADDR_STR_LEN;
+ static TI_UINT8 staMACAddress[REG_MAC_ADDR_STR_LEN];
+ static TI_UINT8 defStaMacAddress0[]= "00 22 11 33 44 55";
+ static TI_UINT8 regArpIpStrLen = REG_ARP_IP_ADDR_STR_LEN;
+ static TI_UINT8 staArpIpAddress[REG_ARP_IP_ADDR_STR_LEN];
+ static TI_UINT8 defArpIpAddress[] = "0a 00 00 0a" ; /*value by default*/
/*defaults values for beacon IE table*/
/*TI_UINT8 defBeaconIETableSize = 0 ;*/
- TI_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 3d 01 85 01 dd 01 00 52 f2 02 00 01";
+ static TI_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 3d 01 85 01 dd 01 00 52 f2 02 00 01";
/*TI_UINT8 tmpIeTable[BEACON_FILTER_TABLE_MAX_SIZE] ;*/
- TI_UINT8 staBeaconFilterIETable[BEACON_FILTER_STRING_MAX_LEN] ;
- TI_UINT8 tmpIeTableSize = 37;
- TI_UINT8 strSize = 113;
-
- TI_UINT8 defRxRssiAndProcessCompensation_2_4G[] = "ec,f6,00,0c,18,f8,fc,00,08,10,f0,f8,00,0a,14";
- TI_UINT8 tmpRssiTableSize = RSSI_AND_PROCESS_COMPENSATION_TABLE_SIZE;
- TI_UINT8 staRssiAndProcessCompensation[RSSI_AND_PROCESS_COMPENSATION_TABLE_SIZE] ;
- TI_UINT8 RssiSize = 113;
+ static TI_UINT8 tmpIeTableSize = 37;
+ static TI_UINT8 strSize = 113;
+ static TI_UINT8 defRxRssiAndProcessCompensation_2_4G[] = "ec,f6,00,0c,18,f8,fc,00,08,10,f0,f8,00,0a,14";
+ static TI_UINT8 tmpRssiTableSize = RSSI_AND_PROCESS_COMPENSATION_TABLE_SIZE;
+ static TI_UINT8 staRssiAndProcessCompensation[RSSI_AND_PROCESS_COMPENSATION_TABLE_SIZE] ;
+ static TI_UINT8 RssiSize = 44;
/* defaults values for CoexActivity table*/
/* example: WLAN(0), BT_VOICE(0), defPrio(20), raisePrio(25), minServ(0), maxServ(1ms) */
- TI_UINT8 defCoexActivityTable[] = ""; /* Sample "01 00 14 19 0000 0001 " */
- TI_UINT8 strCoexActivityTable[COEX_ACTIVITY_TABLE_MAX_NUM*COEX_ACTIVITY_TABLE_SIZE] ;
- TI_UINT8 strCoexActivitySize = 0;
-
- TI_UINT32 filterOffset = 0;
- char filterMask[16];
- TI_UINT8 filterMaskLength;
- char filterPattern[16];
- TI_UINT8 filterPatternLength;
-
- TInitTable* p = (TInitTable*) pInitTable;
- USHORT tableLen = 0;
- USHORT loopIndex = 0;
- TI_UINT8 ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
- TI_UINT8 ScanControlTable5Tmp[2 * NUM_OF_CHANNELS_5];
- TI_UINT8 ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- TI_UINT8 ScanControlTable5Def[2 * NUM_OF_CHANNELS_5] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF000000FF000000000000000000000000000000";
- TI_UINT8 reportSeverityTableDefaults[REPORT_SEVERITY_MAX] = "0001101";
- TI_UINT8 reportModuleTableDefaults[REPORT_FILES_NUM];
- TI_UINT16 reportSeverityTableLen;
- TI_UINT16 reportModuleTableLen;
-
- TI_UINT8 uSmeTempList[ 255 ];
- TI_UINT32 uSmeScanIntervalsTempList[ 255 ];
- TI_UINT32 uTempEntriesCount, uSmeGChannelsCount, uIndex;
- TI_UINT32 uWiFiMode = 0;
- TI_INT8 SRConfigParams[MAX_SMART_REFLEX_PARAM];
- TI_UINT32 len,TempSRCnt;
- TI_UINT8 uTempRatePolicyList[RATE_MNG_MAX_RETRY_POLICY_PARAMS_LEN];
- TI_UINT32 uTempRatePolicyCnt=0;
-
- int macIndex ; /*used for group address filtering*/
+ static TI_UINT8 defCoexActivityTable[] = ""; /* Sample "01 00 14 19 0000 0001 " */
+
+ static TI_UINT32 filterOffset = 0;
+ static char filterMask[16];
+ static TI_UINT8 filterMaskLength;
+ static char filterPattern[16];
+ static TI_UINT8 filterPatternLength;
+
+ static USHORT tableLen = 0;
+ static USHORT loopIndex = 0;
+ static TI_UINT8 ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
+ static TI_UINT8 ScanControlTable5Tmp[2 * NUM_OF_CHANNELS_5];
+ static TI_UINT8 ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
+ static TI_UINT8 ScanControlTable5Def[2 * NUM_OF_CHANNELS_5] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF000000FF000000000000000000000000000000";
+ static TI_UINT8 reportSeverityTableDefaults[REPORT_SEVERITY_MAX+1] = "00001101";
+ static TI_UINT16 reportSeverityTableLen;
+
+ static TI_UINT32 uWiFiMode = 0;
+ static TI_INT8 SRConfigParams[14];
+ static TI_UINT8 len,TempSRCnt;
+ static TI_UINT8 uTempRatePolicyList[RATE_MNG_MAX_RETRY_POLICY_PARAMS_LEN];
+ static TI_UINT32 uTempRatePolicyCnt=0;
+
+ TInitTable *p = (TInitTable *)pInitTable;
+ TI_UINT32 uTempEntriesCount, uIndex;
PRINT(DBG_REGISTRY_LOUD, "TIWL: Reading InitTable parameters\n");
-
- /*set all report modules.as default*/
- memset(reportModuleTableDefaults, '1', REPORT_FILES_NUM );
-
+
+ if (!p)
+ return;
+
/* Reset structure */
NdisZeroMemory(p, sizeof(TInitTable));
-
+
regReadIntegerParameter(pAdapter, &STRincludeWSCinProbeReq,
WSC_INCLUDE_IN_BEACON_DEF,WSC_INCLUDE_IN_BEACON_MIN,WSC_INCLUDE_IN_BEACON_MAX,
sizeof p->siteMgrInitParams.includeWSCinProbeReq,
@@ -1093,12 +1074,12 @@ regFillInitTable(
/*is the desired state ENABLED ?*/
regReadIntegerParameter(pAdapter, &STRBeaconFilterDesiredState,
DEF_BEACON_FILTER_ENABLE_VALUE, MIN_BEACON_FILTER_ENABLE_VALUE, MAX_BEACON_FILTER_ENABLE_VALUE,
- sizeof p->siteMgrInitParams.beaconFilterParams.desiredState,
+ sizeof p->siteMgrInitParams.beaconFilterParams.desiredState,
(TI_UINT8*)&p->siteMgrInitParams.beaconFilterParams.desiredState );
-
+
regReadIntegerParameter(pAdapter, &STRBeaconFilterStored,
DEF_NUM_STORED_FILTERS, MIN_NUM_STORED_FILTERS, MAX_NUM_STORED_FILTERS,
- sizeof p->siteMgrInitParams.beaconFilterParams.numOfStored,
+ sizeof p->siteMgrInitParams.beaconFilterParams.numOfStored,
(TI_UINT8*)&p->siteMgrInitParams.beaconFilterParams.numOfStored );
/*Read the beacon filter IE table*/
@@ -1106,145 +1087,156 @@ regFillInitTable(
regReadIntegerParameter(pAdapter, &STRBeaconIETableSize,
BEACON_FILTER_IE_TABLE_DEF_SIZE, BEACON_FILTER_IE_TABLE_MIN_SIZE,
BEACON_FILTER_IE_TABLE_MAX_SIZE,
- sizeof p->siteMgrInitParams.beaconFilterParams.IETableSize,
+ sizeof p->siteMgrInitParams.beaconFilterParams.IETableSize,
(TI_UINT8*)(&p->siteMgrInitParams.beaconFilterParams.IETableSize) );
-
+
tmpIeTableSize = p->siteMgrInitParams.beaconFilterParams.IETableSize;
-
+
/*Read the number of elements in the table ( this is because 221 has 5 values following it )*/
regReadIntegerParameter(pAdapter, &STRBeaconIETableNumOfElem,
DEF_BEACON_FILTER_IE_TABLE_NUM, BEACON_FILTER_IE_TABLE_MIN_NUM,
BEACON_FILTER_IE_TABLE_MAX_NUM,
- sizeof p->siteMgrInitParams.beaconFilterParams.numOfElements,
+ sizeof p->siteMgrInitParams.beaconFilterParams.numOfElements,
(TI_UINT8*)(&p->siteMgrInitParams.beaconFilterParams.numOfElements) );
/*printk("\n OsRgstr tmpIeTableSize = %d numOfElems = %d" , tmpIeTableSize , p->siteMgrInitParams.beaconFilterParams.numOfElements) ;*/
strSize = 3 * tmpIeTableSize - 1 ; /*includes spaces between bytes*/
if ( ( tmpIeTableSize > 0 ) && ( tmpIeTableSize <= BEACON_FILTER_IE_TABLE_MAX_SIZE) )
{
-
- regReadStringParameter(pAdapter, &STRBeaconIETable ,
+ TI_UINT8 *staBeaconFilterIETable;
+
+ staBeaconFilterIETable = os_memoryAlloc(pAdapter, BEACON_FILTER_STRING_MAX_LEN);
+ if (staBeaconFilterIETable) {
+ regReadStringParameter(pAdapter, &STRBeaconIETable ,
(TI_INT8*)(defBeaconIETable), strSize,
(TI_UINT8*)staBeaconFilterIETable, &strSize);
- regConvertStringtoBeaconIETable(staBeaconFilterIETable , (TI_UINT8*)&p->siteMgrInitParams.beaconFilterParams.IETable[0]/*(TI_UINT8*)&(tmpIeTable[0] )*/ , tmpIeTableSize);
+ regConvertStringtoBeaconIETable(staBeaconFilterIETable, (TI_UINT8*)&p->siteMgrInitParams.beaconFilterParams.IETable[0]/*(TI_UINT8*)&(tmpIeTable[0] )*/, tmpIeTableSize);
+ os_memoryFree(pAdapter, staBeaconFilterIETable, BEACON_FILTER_STRING_MAX_LEN);
+ }
}
/* MAC ADDRESSES FILTER*/
regReadIntegerParameter(pAdapter, &STRFilterEnabled,
DEF_FILTER_ENABLE_VALUE, MIN_FILTER_ENABLE_VALUE,
MAX_FILTER_ENABLE_VALUE,
- sizeof p->twdInitParams.tMacAddrFilter.isFilterEnabled,
+ sizeof p->twdInitParams.tMacAddrFilter.isFilterEnabled,
(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.isFilterEnabled);
regReadIntegerParameter(pAdapter, &STRnumGroupAddrs,
NUM_GROUP_ADDRESS_VALUE_DEF, NUM_GROUP_ADDRESS_VALUE_MIN,
NUM_GROUP_ADDRESS_VALUE_MAX,
- sizeof p->twdInitParams.tMacAddrFilter.numOfMacAddresses,
+ sizeof p->twdInitParams.tMacAddrFilter.numOfMacAddresses,
(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.numOfMacAddresses);
-
- /*printk("\nOsRgstry Num Of Group Addr:%d \n" , p->twdInitParams.tMacAddrFilter.numOfMacAddresses) ;*/
- macIndex = p->twdInitParams.tMacAddrFilter.numOfMacAddresses -1 ;
- switch( macIndex )
+ /*printk("\nOsRgstry Num Of Group Addr:%d \n" , p->twdInitParams.tMacAddrFilter.numOfMacAddresses) ;*/
{
- case 7:
+ TI_UINT8 defStaMacAddress1[]= "11 11 12 13 14 15";
+ TI_UINT8 defStaMacAddress2[]= "12 21 22 23 24 25";
+ TI_UINT8 defStaMacAddress3[]= "13 31 32 33 34 35";
+ TI_UINT8 defStaMacAddress4[]= "14 41 42 43 44 45";
+ TI_UINT8 defStaMacAddress5[]= "15 51 52 53 54 55";
+ TI_UINT8 defStaMacAddress6[]= "16 61 62 63 64 65";
+ TI_UINT8 defStaMacAddress7[]= "17 71 72 73 74 75";
+ int macIndex ; /*used for group address filtering*/
+
+ macIndex = p->twdInitParams.tMacAddrFilter.numOfMacAddresses - 1;
+ switch( macIndex )
{
+ case 7:
+ {
- regReadStringParameter(pAdapter, &STRGroup_addr7,
- (TI_INT8*)(defStaMacAddress7), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
-
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[7]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr7,
+ (TI_INT8*)(defStaMacAddress7), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 6:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[7]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr6,
- (TI_INT8*)(defStaMacAddress6), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 6:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[6]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr6,
+ (TI_INT8*)(defStaMacAddress6), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 5:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[6]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr5,
- (TI_INT8*)(defStaMacAddress5), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 5:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[5]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr5,
+ (TI_INT8*)(defStaMacAddress5), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 4:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[5]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr4,
- (TI_INT8*)(defStaMacAddress4), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 4:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[4]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr4,
+ (TI_INT8*)(defStaMacAddress4), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 3:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[4]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr3,
- (TI_INT8*)(defStaMacAddress3), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 3:
+ {
- regConvertStringtoMACAddress(staMACAddress, (TI_UINT8*)&p->twdInitParams.tMacAddrFilter.macAddrTable[3]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr3,
+ (TI_INT8*)(defStaMacAddress3), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 2:
- {
+ regConvertStringtoMACAddress(staMACAddress, (TI_UINT8*)&p->twdInitParams.tMacAddrFilter.macAddrTable[3]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr2,
- (TI_INT8*)(defStaMacAddress2), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 2:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[2]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr2,
+ (TI_INT8*)(defStaMacAddress2), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
- case 1:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[2]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr1,
- (TI_INT8*)(defStaMacAddress1), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 1:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[1]);
- --macIndex;
- }
+ regReadStringParameter(pAdapter, &STRGroup_addr1,
+ (TI_INT8*)(defStaMacAddress1), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
-
- case 0:
- {
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[1]);
+ --macIndex;
+ }
- regReadStringParameter(pAdapter, &STRGroup_addr0,
- (TI_INT8*)(defStaMacAddress0), REG_MAC_ADDR_STR_LEN,
- (TI_UINT8*)staMACAddress, &regMACstrLen);
+ case 0:
+ {
- regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[0]);
+ regReadStringParameter(pAdapter, &STRGroup_addr0,
+ (TI_INT8*)(defStaMacAddress0), REG_MAC_ADDR_STR_LEN,
+ (TI_UINT8*)staMACAddress, &regMACstrLen);
-
- }
+ regConvertStringtoMACAddress(staMACAddress,(TI_UINT8*) &p->twdInitParams.tMacAddrFilter.macAddrTable[0]);
+ }
- default:
- {
+ default:
+ {
+ }
}
}
-
/************************/
/* Read severity table */
/**********************/
@@ -1259,37 +1251,40 @@ regFillInitTable(
/***********************/
/* Read modules table */
/*********************/
-
- regReadStringParameter(pAdapter, &STR_ReportModuleTable,
- (TI_INT8*)reportModuleTableDefaults,
- (TI_UINT8)REPORT_FILES_NUM,
- (TI_UINT8*)p->tReport.aFileEnable,
- (TI_UINT8*)&reportModuleTableLen);
-
-
- /*
- Default SSID should be non-Valid SSID, hence the STA will not try to connect
- */
- for(loopIndex = 0; loopIndex < MAX_SSID_LEN; loopIndex++)
- dummySsidString[loopIndex] = (loopIndex+1);
-
-
+ {
+ TI_UINT8 *reportModuleTableDefaults;
+ TI_UINT16 reportModuleTableLen;
+
+ reportModuleTableDefaults = os_memoryAlloc(pAdapter, REPORT_FILES_NUM);
+ if (!reportModuleTableDefaults)
+ return;
+
+ /*set all report modules.as default*/
+ memset(reportModuleTableDefaults, '1', REPORT_FILES_NUM );
+
+ regReadStringParameter(pAdapter, &STR_ReportModuleTable,
+ (TI_INT8*)reportModuleTableDefaults,
+ (TI_UINT8)REPORT_FILES_NUM,
+ (TI_UINT8*)p->tReport.aFileEnable,
+ (TI_UINT8*)&reportModuleTableLen);
+ os_memoryFree(pAdapter, reportModuleTableDefaults, REPORT_FILES_NUM);
+ }
/* rate Policy Params */
regReadIntegerParameter(pAdapter, &STRRatePolicyUserShortRetryLimit,
- CTRL_DATA_RATE_POLICY_USER_SHORT_RETRY_LIMIT_DEF,
+ CTRL_DATA_RATE_POLICY_USER_SHORT_RETRY_LIMIT_DEF,
CTRL_DATA_RATE_POLICY_USER_SHORT_RETRY_LIMIT_MIN,
CTRL_DATA_RATE_POLICY_USER_SHORT_RETRY_LIMIT_MAX,
- sizeof p->ctrlDataInitParams.ctrlDataTxRatePolicy.shortRetryLimit,
+ sizeof p->ctrlDataInitParams.ctrlDataTxRatePolicy.shortRetryLimit,
(TI_UINT8*)&p->ctrlDataInitParams.ctrlDataTxRatePolicy.shortRetryLimit);
regReadIntegerParameter(pAdapter, &STRRatePolicyUserLongRetryLimit,
CTRL_DATA_RATE_POLICY_USER_LONG_RETRY_LIMIT_DEF,
CTRL_DATA_RATE_POLICY_USER_LONG_RETRY_LIMIT_MIN,
CTRL_DATA_RATE_POLICY_USER_LONG_RETRY_LIMIT_MAX,
- sizeof p->ctrlDataInitParams.ctrlDataTxRatePolicy.longRetryLimit,
+ sizeof p->ctrlDataInitParams.ctrlDataTxRatePolicy.longRetryLimit,
(TI_UINT8*)&p->ctrlDataInitParams.ctrlDataTxRatePolicy.longRetryLimit);
- regReadIntegerParameterHex (pAdapter, &STRRatePolicyUserEnabledRatesMaskCck,
+ regReadIntegerParameterHex (pAdapter, &STRRatePolicyUserEnabledRatesMaskCck,
CTRL_DATA_RATE_POLICY_USER_EN_DIS_MASK_CCK_DEF,
CTRL_DATA_RATE_POLICY_USER_EN_DIS_MASK_MIN,
CTRL_DATA_RATE_POLICY_USER_EN_DIS_MASK_MAX,
@@ -1347,23 +1342,23 @@ regFillInitTable(
80, 0, 255,
sizeof p->twdInitParams.tGeneral.halCtrlArmClock,
(TI_UINT8*)&p->twdInitParams.tGeneral.halCtrlArmClock);
-
+
regReadIntegerParameter(pAdapter, &STRg80211DraftNumber,
DRAFT_6_AND_LATER, DRAFT_5_AND_EARLIER, DRAFT_6_AND_LATER,
sizeof p->siteMgrInitParams.siteMgrUseDraftNum,
(TI_UINT8*)&p->siteMgrInitParams.siteMgrUseDraftNum);
-
+
regReadIntegerParameter(pAdapter, &STRTraceBufferSize,
/*1024, 0, 1024, sizeof(TI_UINT32), */
16, 16, 16,
sizeof p->twdInitParams.tGeneral.TraceBufferSize,
(TI_UINT8*)&p->twdInitParams.tGeneral.TraceBufferSize);
-
+
regReadIntegerParameter(pAdapter, &STRPrintTrace,
TI_FALSE, TI_FALSE, TI_TRUE,
sizeof p->twdInitParams.tGeneral.bDoPrint,
(TI_UINT8*)&p->twdInitParams.tGeneral.bDoPrint);
-
+
regReadIntegerParameter(pAdapter, &STRFirmwareDebug,
TI_FALSE, TI_FALSE, TI_TRUE,
sizeof p->twdInitParams.tGeneral.halCtrlFirmwareDebug,
@@ -1515,7 +1510,7 @@ regFillInitTable(
TWD_MAX_RX_MSDU_LIFETIME_MAX,
sizeof p->twdInitParams.tGeneral.halCtrlMaxRxMsduLifetime,
(TI_UINT8*)&p->twdInitParams.tGeneral.halCtrlMaxRxMsduLifetime);
-
+
regReadIntegerParameter(pAdapter, &STRdot11RateFallBackRetryLimit,
TWD_RATE_FB_RETRY_LIMIT_DEF, TWD_RATE_FB_RETRY_LIMIT_MIN,
TWD_RATE_FB_RETRY_LIMIT_MAX,
@@ -1590,26 +1585,40 @@ regFillInitTable(
(TI_UINT8*)&p->siteMgrInitParams.siteMgrDesiredChannel);
/* NOTE: desired BSSID and SSID (and BSS type, later on) are currently set both to the SME and the site manager!!! */
- MAC_COPY (p->siteMgrInitParams.siteMgrDesiredBSSID, bssidBroadcast);
- MAC_COPY (p->tSmeModifiedInitParams.tDesiredBssid, bssidBroadcast);
+ {
+ TI_UINT8 bssidBroadcast[MAC_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- regReadStringParameter(pAdapter, &STRdot11DesiredSSID,
- (TI_INT8*)dummySsidString,
- (TI_UINT8)MAX_SSID_LEN,
- (TI_UINT8*)p->siteMgrInitParams.siteMgrDesiredSSID.str,
- (TI_UINT8*)&p->siteMgrInitParams.siteMgrDesiredSSID.len);
+ MAC_COPY (p->siteMgrInitParams.siteMgrDesiredBSSID, bssidBroadcast);
+ MAC_COPY (p->tSmeModifiedInitParams.tDesiredBssid, bssidBroadcast);
+ }
- /* in case no SSID desired at the init file set dummy len */
- for(loopIndex = 0; loopIndex < MAX_SSID_LEN; loopIndex++)
{
- if(dummySsidString[loopIndex] != p->siteMgrInitParams.siteMgrDesiredSSID.str[loopIndex])
- break;
- }
+ static char dummySsidString[MAX_SSID_LEN];
+
+ /*
+ Default SSID should be non-Valid SSID, hence the STA will not try to connect
+ */
+ for(loopIndex = 0; loopIndex < MAX_SSID_LEN; loopIndex++)
+ dummySsidString[loopIndex] = (loopIndex+1);
+
+ regReadStringParameter(pAdapter, &STRdot11DesiredSSID,
+ (TI_INT8*)dummySsidString,
+ (TI_UINT8)MAX_SSID_LEN,
+ (TI_UINT8*)p->siteMgrInitParams.siteMgrDesiredSSID.str,
+ (TI_UINT8*)&p->siteMgrInitParams.siteMgrDesiredSSID.len);
+
+ /* in case no SSID desired at the init file set dummy len */
+ for(loopIndex = 0; loopIndex < MAX_SSID_LEN; loopIndex++)
+ {
+ if(dummySsidString[loopIndex] != p->siteMgrInitParams.siteMgrDesiredSSID.str[loopIndex])
+ break;
+ }
- p->siteMgrInitParams.siteMgrDesiredSSID.len = (TI_UINT8)loopIndex;
+ p->siteMgrInitParams.siteMgrDesiredSSID.len = (TI_UINT8)loopIndex;
+ }
NdisMoveMemory(&p->tSmeModifiedInitParams.tDesiredSsid,
- &p->siteMgrInitParams.siteMgrDesiredSSID,
+ &p->siteMgrInitParams.siteMgrDesiredSSID,
sizeof(TSsid));
regReadIntegerParameter(pAdapter, &STRdot11DesiredNetworkType,
@@ -1639,9 +1648,8 @@ regFillInitTable(
p->siteMgrInitParams.siteMgrDesiredChannel = SITE_MGR_CHANNEL_A_MIN;
}
- if(1)
{
- TI_UINT32 Freq2ChannelTable[] = {0,2412000,2417000,2422000,2427000,2432000,2437000,
+ static TI_UINT32 Freq2ChannelTable[] = {0,2412000,2417000,2422000,2427000,2432000,2437000,
2442000,2447000,2452000,2457000,
2462000,2467000,2472000,2484000};
@@ -1862,12 +1870,12 @@ regFillInitTable(
(TI_UINT8*)&p->tSmeModifiedInitParams.eConnectMode);
{
- /* due to the fact that two following init keys has negative values, we read them as table */
+ /* due to the fact that two following init keys has negative values, we read them as table */
TI_UINT32 uEntriesNumber = 1;
regReadIntegerTable(pAdapter ,&STRSmeScanRssiThreshold,
SME_SCAN_RSSI_THRESHOLD_DEF, sizeof(TI_INT8) * 3,
- (TI_UINT8*)&p->tSmeInitParams.iRssiThreshold, NULL, &uEntriesNumber,
+ (TI_UINT8*)&p->tSmeInitParams.iRssiThreshold, NULL, &uEntriesNumber,
sizeof(TI_INT8),TI_FALSE);
if ( (p->tSmeInitParams.iRssiThreshold < SME_SCAN_RSSI_THRESHOLD_MIN) ||
@@ -1879,7 +1887,7 @@ regFillInitTable(
regReadIntegerTable(pAdapter ,&STRSmeScanSnrThreshold,
SME_SCAN_SNR_THRESHOLD_DEF, sizeof(TI_INT8),
(TI_UINT8*)&p->tSmeInitParams.iSnrThreshold, NULL, &uEntriesNumber, sizeof(TI_INT8),TI_FALSE);
-
+
if ( (p->tSmeInitParams.iSnrThreshold < SME_SCAN_SNR_THRESHOLD_MIN) ||
(p->tSmeInitParams.iSnrThreshold > SME_SCAN_SNR_THRESHOLD_MAX))
{
@@ -1908,59 +1916,79 @@ regFillInitTable(
SME_SCAN_PROBE_REQ_DEF, SME_SCAN_PROBE_REQ_MIN, SME_SCAN_PROBE_REQ_MAX,
sizeof p->tSmeInitParams.uProbeReqNum,
(TI_UINT8*)&p->tSmeInitParams.uProbeReqNum);
- regReadIntegerTable(pAdapter, &STRSmeScanIntervals, SME_SCAN_INTERVALS_LIST_VAL_DEF,
+
+ {
+ TI_UINT32 *uSmeScanIntervalsTempList;
+
+ uSmeScanIntervalsTempList = os_memoryAlloc(pAdapter, SME_SCAN_INTERVALS_LIST_STRING_MAX_SIZE * sizeof(TI_UINT32));
+ if (!uSmeScanIntervalsTempList) {
+ return;
+ }
+ regReadIntegerTable(pAdapter, &STRSmeScanIntervals, SME_SCAN_INTERVALS_LIST_VAL_DEF,
SME_SCAN_INTERVALS_LIST_STRING_MAX_SIZE,
- (TI_UINT8*)&uSmeScanIntervalsTempList, NULL, &uTempEntriesCount,
+ (TI_UINT8 *)uSmeScanIntervalsTempList, NULL, &uTempEntriesCount,
sizeof (TI_UINT32),TI_FALSE);
- /* sanity check */
- if (uTempEntriesCount > PERIODIC_SCAN_MAX_INTERVAL_NUM)
- {
- uTempEntriesCount = PERIODIC_SCAN_MAX_INTERVAL_NUM;
+ /* sanity check */
+ if (uTempEntriesCount > PERIODIC_SCAN_MAX_INTERVAL_NUM)
+ {
+ uTempEntriesCount = PERIODIC_SCAN_MAX_INTERVAL_NUM;
+ }
+ /* convert from TI_UINT8 to TI_UINT32 */
+ for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
+ {
+ p->tSmeInitParams.uScanIntervals[ uIndex ] = uSmeScanIntervalsTempList[ uIndex ];
+ }
+ os_memoryFree(pAdapter, uSmeScanIntervalsTempList, SME_SCAN_INTERVALS_LIST_STRING_MAX_SIZE * sizeof(TI_UINT32));
}
- /* convert from TI_UINT8 to TI_UINT32 */
- for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
{
- p->tSmeInitParams.uScanIntervals[ uIndex ] = uSmeScanIntervalsTempList[ uIndex ];
- }
- regReadIntegerTable(pAdapter, &STRSmeScanGChannels, SME_SCAN_CHANNELS_LIST_G_VAL_DEF,
- SME_SCAN_CHANNELS_LIST_G_STRING_MAX_SIZE,
- (TI_UINT8*)&uSmeTempList, NULL, &uTempEntriesCount,
- sizeof (TI_UINT8),TI_FALSE);
+ TI_UINT8 *uSmeTempList;
+ TI_UINT32 uSmeGChannelsCount;
+ uSmeTempList = os_memoryAlloc(pAdapter, SME_SCAN_CHANNELS_LIST_G_STRING_MAX_SIZE);
+ if (!uSmeTempList) {
+ return;
+ }
+ regReadIntegerTable(pAdapter, &STRSmeScanGChannels, SME_SCAN_CHANNELS_LIST_G_VAL_DEF,
+ SME_SCAN_CHANNELS_LIST_G_STRING_MAX_SIZE,
+ (TI_UINT8 *)uSmeTempList, NULL, &uTempEntriesCount,
+ sizeof (TI_UINT8),TI_FALSE);
- /* convert to channel list */
- for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
- {
- p->tSmeInitParams.tChannelList[ uIndex ].eBand = RADIO_BAND_2_4_GHZ;
- p->tSmeInitParams.tChannelList[ uIndex ].uChannel = uSmeTempList[ uIndex ];
+
+ /* convert to channel list */
+ for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
+ {
+ p->tSmeInitParams.tChannelList[ uIndex ].eBand = RADIO_BAND_2_4_GHZ;
+ p->tSmeInitParams.tChannelList[ uIndex ].uChannel = uSmeTempList[ uIndex ];
+ }
+ uSmeGChannelsCount = uTempEntriesCount;
+
+ /*
+ * Add A_MODE channels to scan list only if it enabled
+ * NOTE: Don't use empty channel list string
+ */
+ if ((p->siteMgrInitParams.siteMgrDesiredDot11Mode == DOT11_A_MODE) ||
+ (p->siteMgrInitParams.siteMgrDesiredDot11Mode == DOT11_DUAL_MODE))
+ {
+ regReadIntegerTable(pAdapter, &STRSmeScanAChannels, SME_SCAN_CHANNELS_LIST_A_VAL_DEF,
+ SME_SCAN_CHANNELS_LIST_A_STRING_MAX_SIZE,
+ (TI_UINT8*)&uSmeTempList, NULL, &uTempEntriesCount,
+ sizeof (TI_UINT8),TI_FALSE);
+
+ /* convert to channel list */
+ for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
+ {
+ p->tSmeInitParams.tChannelList[ uSmeGChannelsCount + uIndex ].eBand = RADIO_BAND_5_0_GHZ;
+ p->tSmeInitParams.tChannelList[ uSmeGChannelsCount + uIndex ].uChannel = uSmeTempList[ uIndex ];
+ }
+
+ p->tSmeInitParams.uChannelNum = uSmeGChannelsCount + uIndex;
+ }
+ else
+ {
+ p->tSmeInitParams.uChannelNum = uSmeGChannelsCount;
+ }
+ os_memoryFree(pAdapter, uSmeTempList, SME_SCAN_CHANNELS_LIST_G_STRING_MAX_SIZE);
}
- uSmeGChannelsCount = uTempEntriesCount;
-
- /*
- * Add A_MODE channels to scan list only if it enabled
- * NOTE: Don't use empty channel list string
- */
- if ((p->siteMgrInitParams.siteMgrDesiredDot11Mode == DOT11_A_MODE) ||
- (p->siteMgrInitParams.siteMgrDesiredDot11Mode == DOT11_DUAL_MODE))
- {
- regReadIntegerTable(pAdapter, &STRSmeScanAChannels, SME_SCAN_CHANNELS_LIST_A_VAL_DEF,
- SME_SCAN_CHANNELS_LIST_A_STRING_MAX_SIZE,
- (TI_UINT8*)&uSmeTempList, NULL, &uTempEntriesCount,
- sizeof (TI_UINT8),TI_FALSE);
-
- /* convert to channel list */
- for (uIndex = 0; uIndex < uTempEntriesCount; uIndex++)
- {
- p->tSmeInitParams.tChannelList[ uSmeGChannelsCount + uIndex ].eBand = RADIO_BAND_5_0_GHZ;
- p->tSmeInitParams.tChannelList[ uSmeGChannelsCount + uIndex ].uChannel = uSmeTempList[ uIndex ];
- }
-
- p->tSmeInitParams.uChannelNum = uSmeGChannelsCount + uIndex;
- }
- else
- {
- p->tSmeInitParams.uChannelNum = uSmeGChannelsCount;
- }
regReadIntegerParameter(pAdapter, &STRdot11AuthenticationMode,
RSN_AUTH_SUITE_DEF, RSN_AUTH_SUITE_MIN, RSN_AUTH_SUITE_MAX,
@@ -1968,13 +1996,13 @@ regFillInitTable(
(TI_UINT8*)&p->rsnInitParams.authSuite);
/* Soft Gemini Section */
-
+
regReadIntegerParameter(pAdapter, &STRBThWlanCoexistEnable,
SOFT_GEMINI_ENABLED_DEF, SOFT_GEMINI_ENABLED_MIN, SOFT_GEMINI_ENABLED_MAX,
sizeof p->SoftGeminiInitParams.SoftGeminiEnable,
(TI_UINT8*)&p->SoftGeminiInitParams.SoftGeminiEnable);
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexistParamsBtLoadRatio,
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexistParamsBtLoadRatio,
SOFT_GEMINI_PARAMS_LOAD_RATIO_DEF, SOFT_GEMINI_PARAMS_LOAD_RATIO_MIN, SOFT_GEMINI_PARAMS_LOAD_RATIO_MAX,
sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_BT_LOAD_RATIO],
(TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_BT_LOAD_RATIO]);
@@ -2073,7 +2101,7 @@ regFillInitTable(
- /* EDR section */
+ /* EDR section */
regReadIntegerParameter(pAdapter, &STRBThWlanCoexistUpsdAclMasterMinEDR,
SOFT_GEMINI_WLAN_PS_BT_ACL_MASTER_MIN_EDR_DEF, SOFT_GEMINI_WLAN_PS_BT_ACL_MASTER_MIN_EDR_MIN, SOFT_GEMINI_WLAN_PS_BT_ACL_MASTER_MIN_EDR_MAX,
sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_WLAN_PS_BT_ACL_MASTER_MIN_EDR],
@@ -2205,32 +2233,32 @@ regFillInitTable(
regReadIntegerParameter(pAdapter, &STRBThWlanCoexHv3MaxServed,
SOFT_GEMINI_HV3_MAX_SERVED_DEF, SOFT_GEMINI_HV3_MAX_SERVED_MIN, SOFT_GEMINI_HV3_MAX_SERVED_MAX,
sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_HV3_MAX_SERVED],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_HV3_MAX_SERVED]);;
-
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp1,
- SOFT_GEMINI_TEMP_PARAM_1_DEF, SOFT_GEMINI_TEMP_PARAM_1_MIN, SOFT_GEMINI_TEMP_PARAM_1_MAX,
- sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_1],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_1]);;
-
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp2,
- SOFT_GEMINI_TEMP_PARAM_2_DEF, SOFT_GEMINI_TEMP_PARAM_2_MIN, SOFT_GEMINI_TEMP_PARAM_2_MAX,
- sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_2],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_2]);;
-
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp3,
- SOFT_GEMINI_TEMP_PARAM_3_DEF, SOFT_GEMINI_TEMP_PARAM_3_MIN, SOFT_GEMINI_TEMP_PARAM_3_MAX,
- sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_3],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_3]);;
-
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp4,
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_HV3_MAX_SERVED]);
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp1,
+ SOFT_GEMINI_TEMP_PARAM_1_DEF, SOFT_GEMINI_TEMP_PARAM_1_MIN, SOFT_GEMINI_TEMP_PARAM_1_MAX,
+ sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_1],
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_1]);
+
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp2,
+ SOFT_GEMINI_TEMP_PARAM_2_DEF, SOFT_GEMINI_TEMP_PARAM_2_MIN, SOFT_GEMINI_TEMP_PARAM_2_MAX,
+ sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_2],
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_2]);
+
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp3,
+ SOFT_GEMINI_TEMP_PARAM_3_DEF, SOFT_GEMINI_TEMP_PARAM_3_MIN, SOFT_GEMINI_TEMP_PARAM_3_MAX,
+ sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_3],
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_3]);
+
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp4,
SOFT_GEMINI_TEMP_PARAM_4_DEF, SOFT_GEMINI_TEMP_PARAM_4_MIN, SOFT_GEMINI_TEMP_PARAM_4_MAX,
sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_4],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_4]);;
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_4]);
- regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp5,
+ regReadIntegerParameter(pAdapter, &STRBThWlanCoexTemp5,
SOFT_GEMINI_TEMP_PARAM_5_DEF, SOFT_GEMINI_TEMP_PARAM_5_MIN, SOFT_GEMINI_TEMP_PARAM_5_MAX,
sizeof p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_5],
- (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_5]);;
+ (TI_UINT8*)&p->SoftGeminiInitParams.coexParams[SOFT_GEMINI_TEMP_PARAM_5]);
+
/*
* CoexActivity table
@@ -2243,14 +2271,23 @@ regFillInitTable(
(TI_UINT8*)(&p->twdInitParams.tGeneral.halCoexActivityTable.numOfElements) );
/* Read the CoexActivity table string */
- regReadStringParameter(pAdapter, &STRCoexActivityTable ,
+ {
+ TI_UINT8 *strCoexActivityTable;
+ TI_UINT8 strCoexActivitySize = 0;
+
+ strCoexActivityTable = os_memoryAlloc(pAdapter, COEX_ACTIVITY_TABLE_MAX_NUM*COEX_ACTIVITY_TABLE_SIZE);
+ if (strCoexActivityTable) {
+ regReadStringParameter(pAdapter, &STRCoexActivityTable ,
(TI_INT8*)(defCoexActivityTable), strCoexActivitySize,
(TI_UINT8*)strCoexActivityTable, &strCoexActivitySize);
- /* Convert the CoexActivity table string */
- regConvertStringtoCoexActivityTable(strCoexActivityTable , p->twdInitParams.tGeneral.halCoexActivityTable.numOfElements, &p->twdInitParams.tGeneral.halCoexActivityTable.entry[0] , strCoexActivitySize);
+ /* Convert the CoexActivity table string */
+ regConvertStringtoCoexActivityTable(strCoexActivityTable , p->twdInitParams.tGeneral.halCoexActivityTable.numOfElements, &p->twdInitParams.tGeneral.halCoexActivityTable.entry[0] , strCoexActivitySize);
+ os_memoryFree(pAdapter, strCoexActivityTable, COEX_ACTIVITY_TABLE_MAX_NUM*COEX_ACTIVITY_TABLE_SIZE);
+ }
+ }
- /*
+ /*
Power Manager
*/
regReadIntegerParameter(pAdapter,
@@ -2549,7 +2586,7 @@ regReadIntegerParameter(pAdapter, &STRSettings,
regReadIntegerTable (pAdapter, &STRSRDebugTable, SMART_REFLEX_CONFIG_PARAMS_DEF_TABLE,
MAX_SR_PARAM_LEN, NULL, (TI_INT8*)&p->twdInitParams.tSmartReflexDebugParams.errorTable,
- &TempSRCnt, sizeof (TI_UINT8),TI_FALSE);
+ (TI_UINT32 *)&TempSRCnt, sizeof (TI_UINT8),TI_FALSE);
@@ -2572,7 +2609,7 @@ regReadIntegerParameter(pAdapter, &STRSettings,
POWER_MGMNT_NEED_TO_SEND_NULL_PACKET_MAX_VALUE,
sizeof p->PowerMgrInitParams.needToSendNullData,
(TI_UINT8*)&p->PowerMgrInitParams.needToSendNullData);
-
+
regReadIntegerParameter(pAdapter,
&STRPowerMgmtNullPktRateModulation,
POWER_MGMNT_NULL_PACKET_RATE_MOD_DEF_VALUE,
@@ -2580,7 +2617,7 @@ regReadIntegerParameter(pAdapter, &STRSettings,
POWER_MGMNT_NULL_PACKET_RATE_MOD_MAX_VALUE,
sizeof p->PowerMgrInitParams.NullPktRateModulation,
(TI_UINT8*)&p->PowerMgrInitParams.NullPktRateModulation);
-
+
regReadIntegerParameter(pAdapter,
&STRPowerMgmtNumNullPktRetries,
POWER_MGMNT_NUM_NULL_PACKET_RETRY_DEF_VALUE,
@@ -2620,7 +2657,7 @@ regReadIntegerParameter(pAdapter, &STRSettings,
HOST_FAST_WAKE_SUPPORT_MAX,
sizeof p->twdInitParams.tGeneral.uHostFastWakeupSupport,
(TI_UINT8*)&p->twdInitParams.tGeneral.uHostFastWakeupSupport);
-
+
/*--------------- Power Management Wake up conditions ------------------*/
regReadIntegerParameter(pAdapter, &STRListenInterval,
@@ -2648,7 +2685,7 @@ regReadIntegerParameter(pAdapter, &STRSettings,
sizeof p->twdInitParams.tPowerSrv.hangOverPeriod,
(TI_UINT8*)&p->twdInitParams.tPowerSrv.hangOverPeriod);
/*-----------------------------------------------------------------------*/
-
+
/* Scan SRV */
regReadIntegerParameter(pAdapter, &STRNumberOfNoScanCompleteToRecovery,
@@ -4239,7 +4276,7 @@ regReadIntegerParameter(pAdapter, &STRFmCoexSwallowClkDif,
/*----------------------------------------------*/
-/* Rate Management parameters */
+/* Rate Management parameters */
/*----------------------------------------------*/
regReadIntegerParameter(pAdapter, &STRRateMngRateRetryScore,
@@ -4334,7 +4371,6 @@ regReadIntegerTable (pAdapter, &STRRateMngRateRetryPolicy, RATE_MNG_RATE_RETRY_P
p->twdInitParams.tRateMngParams.RateRetryPolicy[uIndex] = uTempRatePolicyList[uIndex];
}
-
#ifdef _WINDOWS
/* set etherMaxPayloadSize parameter for MTU size setting */
pAdapter->etherMaxPayloadSize = ETHER_MAX_PAYLOAD_SIZE;
@@ -4361,7 +4397,7 @@ Return Value:
None
-----------------------------------------------------------------------------*/
-void regReadIntegerParameter (
+static void regReadIntegerParameter (
TWlanDrvIfObjPtr pAdapter,
PNDIS_STRING pParameterName,
TI_UINT32 defaultValue,
@@ -5073,24 +5109,23 @@ regReadIntegerTable(
TI_UINT8 uParameterSize,
TI_BOOL bHex)
{
+ static CHAR Buffer[MAX_KEY_BUFFER_LEN];
TI_UINT32 parameterIndex = 0;
int myNumber;
TI_UINT32 index;
TI_UINT32 bufferSize = 0;
- char tempBuffer[15];
+ char tempBuffer[16];
char *pTempBuffer = tempBuffer;
TI_UINT32 tempBufferIndex = 0;
TI_BOOL isDigit;
TI_BOOL numberReady;
TI_BOOL isSign;
- TI_BOOL endOfLine;
+ TI_BOOL endOfLine;
TI_UINT32 debugInfo = 0;
-
- CHAR Buffer[MAX_KEY_BUFFER_LEN];
TI_INT8* pBuffer = (TI_INT8*)&Buffer;
regReadStringParameter(pAdapter,
@@ -5100,7 +5135,7 @@ regReadIntegerTable(
(TI_UINT8*)pBuffer,
&bufferSize);
- index=0;
+ index = 0;
do { /* Parsing one line */
isSign = TI_FALSE;
@@ -5262,7 +5297,7 @@ regReadIntegerTable(
}
++parameterIndex;
-
+
}while ((index<bufferSize)&&(endOfLine==TI_FALSE));
*pEntriesNumber = parameterIndex; /* return number of entries read */
@@ -5310,7 +5345,7 @@ Return Value:
None
-----------------------------------------------------------------------------*/
-static void regConvertStringtoBeaconIETable(TI_UINT8 *staIpAddressString,TI_UINT8 *IpAddressArray, TI_UINT8 size)
+static void regConvertStringtoBeaconIETable(TI_UINT8 *staIpAddressString, TI_UINT8 *IpAddressArray, TI_UINT8 size)
{
char *ptr;
TI_UINT8 *tmpIpAddr;
@@ -5320,19 +5355,25 @@ static void regConvertStringtoBeaconIETable(TI_UINT8 *staIpAddressString,TI_UINT
/* Take the pointer to the string MAC Address to convert it to the Array MAC Address */
ptr = (char *)staIpAddressString;
tmpIpAddr = IpAddressArray;
- str_len = 3 * size - 1; /* Each value includes two digits and a space so multpily by 3 */
+ str_len = 3 * size - 1;
- for (i = 0; i < size; ptr++, str_len--)
+ for(i=0;(i < size);ptr++,str_len--)
{
- value_l = *ptr - '0';
- value_h = *ptr - 'a';
+ if (str_len > 0) {
+ /* The value can be or "0-9" or from "a-f" */
+ value_l = (*ptr - '0');
+ value_h = (*ptr - 'a');
+ }
+ else { /* last element */
+ value_l = value_h = 16;
+ }
+ /*PRINTF(DBG_REGISTRY,("value_l [%d] value_h [%d] *ptr %c value %d\n",value_l,value_h,*ptr,value));*/
- if ((str_len > 0) && ((value_l <= 9) || (value_h <= 15)))
+ if( (value_l <= 9) || (value_h <= 15 ) )
{
/* We are in an expected range */
-
/* Check if 0-9 */
- if (value_l <= 9)
+ if(value_l <= 9 )
{
add_value = value_l;
}
@@ -5343,10 +5384,12 @@ static void regConvertStringtoBeaconIETable(TI_UINT8 *staIpAddressString,TI_UINT
add_value = value_h + 10;
}
value = value * 16 + add_value;
+ /*PRINTF(DBG_REGISTRY,("value %d add_value %d \n",value,add_value));*/
}
else
{
tmpIpAddr[i] = value;
+ /*PRINTF(DBG_REGISTRY,("tmpMacAddr[%d] is %x\n",i,tmpMacAddr[i]));*/
value = 0;
i++;
}
@@ -5359,7 +5402,7 @@ Routine Name:
regConvertStringtoCoexActivityTable
-Routine Description: Converts the CoexActivity string into CoexActivity config table
+Routine Description: Converts the CoexActivity string into CoexActivity config table
Arguments:
@@ -5374,7 +5417,7 @@ static void regConvertStringtoCoexActivityTable(TI_UINT8 *strCoexActivityTable,
{
char *ptr;
TI_UINT16 tmpArray[NUM_OF_COEX_ACTIVITY_PARAMS_IN_SG];
- TI_UINT16 value=0,value_l,value_h,add_value;
+ TI_UINT16 value = 0, value_l, value_h, add_value;
TI_UINT32 i;
int entry = 0;
@@ -5382,11 +5425,10 @@ static void regConvertStringtoCoexActivityTable(TI_UINT8 *strCoexActivityTable,
problem if buffer is not ended with blank (Dm) */
/* Take the pointer to the string MAC Address to convert it to the Array MAC Address */
- ptr=(char *)strCoexActivityTable;
+ ptr = (char *)strCoexActivityTable;
- for (i=0 ;i < numOfElements*NUM_OF_COEX_ACTIVITY_PARAMS_IN_SG ;ptr++)
+ for(i=0;(i < numOfElements*NUM_OF_COEX_ACTIVITY_PARAMS_IN_SG);ptr++)
{
-
/* The value can be or "0-9" or from "a-f" */
value_l = (*ptr - '0');
value_h = (*ptr - 'a');
@@ -5407,10 +5449,8 @@ static void regConvertStringtoCoexActivityTable(TI_UINT8 *strCoexActivityTable,
/* 'a' is in fact 10 decimal in hexa */
add_value = value_h + 10;
}
- value = value*16 + add_value;
- /* PRINTF(DBG_REGISTRY,("value %d add_value %d \n",value,add_value));*/
-
-
+ value = value * 16 + add_value;
+ /* PRINTF(DBG_REGISTRY,("value %d add_value %d \n",value,add_value));*/
}
else
{
@@ -5428,9 +5468,7 @@ static void regConvertStringtoCoexActivityTable(TI_UINT8 *strCoexActivityTable,
entry++;
}
}
-
}
-
}
static void parse_hex_string(char * pString, TI_UINT8 StrLength, TI_UINT8 * pBuffer, TI_UINT8 * Length)
@@ -5440,7 +5478,7 @@ static void parse_hex_string(char * pString, TI_UINT8 StrLength, TI_UINT8 * pBuf
while ((iter < StrLength) && (ch = pString[iter]))
{
- TI_UINT8 val = ((ch >= '0' && ch <= '9') ? (ch - '0') :
+ TI_UINT8 val = ((ch >= '0' && ch <= '9') ? (ch - '0') :
(ch >= 'A' && ch <= 'F') ? (0xA + ch - 'A') :
(ch >= 'a' && ch <= 'f') ? (0xA + ch - 'a') : 0);
@@ -5490,4 +5528,3 @@ static void parse_filter_request(TRxDataFilterRequest* request, TI_UINT8 offset,
parse_hex_string(pattern, patternLength, request->pattern, &request->patternLength);
}
}
-
diff --git a/wl1271/platforms/os/linux/Makefile b/wl1271/platforms/os/linux/Makefile
index c9e7707f..0c56778c 100644
--- a/wl1271/platforms/os/linux/Makefile
+++ b/wl1271/platforms/os/linux/Makefile
@@ -13,7 +13,7 @@ STATIC_LIB ?= y
#
# Rebuild the supplicant
#
-BUILD_SUPPL ?= y
+BUILD_SUPPL ?= n
#
# Supplicant
@@ -53,9 +53,16 @@ USE_IRQ_ACTIVE_HIGH ?= n
#
TEST ?= n
-
+#
+# Eth Support
+#
ETH_SUPPORT ?= n
+#
+# Debug
+#
+DEBUG ?= y
+
##
##
## File lists and locations
@@ -203,8 +210,8 @@ endif
ifeq "$(HOST_PLATFORM)" "zoom1"
TARGET = apps.tar
endif
-ifeq "$(HOST_PLATFORM)" "*UNDEFINED*"
-TARGET = help
+ifeq "$(HOST_PLATFORM)" "sholes"
+TARGET = apps.tar
endif
#
.PHONY: all
@@ -244,7 +251,7 @@ TAR_FILE = $(HOST_PLATFORM)Binaries.tar
apps.tar: apps
ifeq ($(STRIP),y)
@echo stripping...
- cd $(OUTPUT_DIR) && $(CROSS_COMPILE)strip --strip-unneeded $(MODULES_LIST)
+ cd $(OUTPUT_DIR) && $(CROSS_COMPILE)strip -g --strip-unneeded $(MODULES_LIST)
# cd $(DK_ROOT)/external_drivers/$(HOST_PLATFORM)/Linux/$(BUS_DRV) && $(CROSS_COMPILE)strip -g $(BUS_DRIVER_MODULE)
endif
@@ -278,19 +285,19 @@ clean:
$(MAKE) -C $(OS_COMMON_DIR) CROSS_COMPILE=$(CROSS_COMPILE) DEBUG=$(DEBUG) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) WSPI=$(WSPI) INTR=$(INTR) XCC=$(XCC) INFO=$(INFO) STATIC_LIB=$(STATIC_LIB) clean
$(MAKE) -C $(OS_LINUX_DIR) CROSS_COMPILE=$(CROSS_COMPILE) DEBUG=$(DEBUG) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) WSPI=$(WSPI) INTR=$(INTR) XCC=$(XCC) INFO=$(INFO) STATIC_LIB=$(STATIC_LIB) clean
# $(MAKE) -C $(DK_ROOT)/external_drivers/$(HOST_PLATFORM)/Linux/$(BUS_DRV) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) KERNEL_DIR=$(KERNEL_DIR) OUTPUT_DIR=$(shell pwd)/$(OUTPUT_DIR) clean
-# $(MAKE) -C $(WLAN_CUDK_DIR) CROSS_COMPILE=$(CROSS_COMPILE) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) XCC=$(XCC) ETH_SUPPORT=$(ETH_SUPPORT) clean
+# $(MAKE) -C $(WLAN_CUDK_DIR) CROSS_COMPILE=$(CROSS_COMPILE) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) XCC=$(XCC) clean
# $(MAKE) -C $(WLAN_CU_CLI_DIR) CROSS_COMPILE=$(CROSS_COMPILE) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) XCC=$(XCC) cleanall
# $(MAKE) -C $(WLAN_LOADER_DIR) CROSS_COMPILE=$(CROSS_COMPILE) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) XCC=$(XCC) clean
# $(MAKE) -C $(LINUX_WIRELESS_TOOLS_DIR) CROSS_COMPILE=$(CROSS_COMPILE) BUILD_SUPPL=$(BUILD_SUPPL) SUPPL=$(SUPPL) XCC=$(XCC) clean
# $(MAKE) -C $(DBG_MDL) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) KERNEL_DIR=$(KERNEL_DIR) clean
- @rm -f suppl.* apps.* voice.*
- @rm -f *spi*.ko sdio.ko
- @rm -f $(OUTPUT_DIR)/tiwlan_drv.ko
+# @rm -f suppl.* apps.* voice.*
+# @rm -f *spi*.ko sdio.ko
+# @rm -f $(OUTPUT_DIR)/wlan_cu
@rm -f $(OUTPUT_DIR)/tiwlan_drv.ko
- @rm -f wpa_supplicant
+# @rm -f wpa_supplicant
# @rm -f $(FW_IMAGE_DEST_FILE)
- @rm -rf *.o *.a \.*.o.cmd *~ *.~* core .depend dep
+# @rm -rf *.o *.a \.*.o.cmd *~ *.~* core .depend dep
# @rm -f tiwlan_drv.ko $(OUTPUT_DIR)/gwsi_drv.o $(OUTPUT_DIR)/debug_tools.o
# @rm -rf $(OUTPUT_DIR)/iwconfig apps/iwlist $(OUTPUT_DIR)/iwevent
diff --git a/wl1271/platforms/os/linux/build/Makefile b/wl1271/platforms/os/linux/build/Makefile
index 92d05700..c93bb801 100644
--- a/wl1271/platforms/os/linux/build/Makefile
+++ b/wl1271/platforms/os/linux/build/Makefile
@@ -9,6 +9,7 @@
NO_ARCH_STRCMP ?= y
NO_USERMODE_WORKAROUND ?= n
MEM_ALLOC_TRACE ?= n
+STACK_PROFILING_ON ?= n
##
##
@@ -37,16 +38,18 @@ endif
# List of linux OS files needed to be compiled
#
OS_SRCS = \
- $(DK_ROOT)/external_drivers/zoom2/Linux/sdio/SdioDrv.c \
$(DK_ROOT)/platforms/os/linux/src/WlanDrvIf.c \
- $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux/host_platform.c \
$(DK_ROOT)/platforms/os/linux/src/osapi.c \
$(DK_ROOT)/platforms/os/linux/src/osmemapi.c \
$(DK_ROOT)/platforms/os/linux/src/osRgstry_parser.c \
$(DK_ROOT)/platforms/os/linux/src/ipc_k.c \
$(DK_ROOT)/platforms/os/linux/src/WlanDrvWext.c \
$(DK_ROOT)/platforms/os/linux/src/CmdInterpretWext.c \
- $(DK_ROOT)/platforms/os/linux/src/RxBuf.c
+ $(DK_ROOT)/platforms/os/linux/src/RxBuf.c \
+ $(DK_ROOT)/platforms/hw/linux/host_platform.c \
+ $(DK_ROOT)/external_drivers/sdio/linux/SdioDrv.c
+# $(DK_ROOT)/external_drivers/$(HOST_PLATFORM)/Linux/sdio/SdioDrv.c
+# $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux/host_platform.c
ifeq ($(STACK_PROFILING_ON),y)
OS_SRCS += $(DK_ROOT)/platforms/os/linux/src/stack_profile.c
@@ -58,16 +61,19 @@ ifeq ($(NO_ARCH_STRCMP),y)
endif
OS_INCS = $(DK_ROOT)/platforms/os/linux/inc $(DK_ROOT)/platforms/os/linux/src $(DK_ROOT)/platforms/os/common/inc
-OS_INCS += $(DK_ROOT)/stad/src/core/EvHandler $(DK_ROOT)/Test $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux
+#OS_INCS += $(DK_ROOT)/stad/src/core/EvHandler $(DK_ROOT)/Test $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux
+OS_INCS += $(DK_ROOT)/stad/src/core/EvHandler $(DK_ROOT)/Test $(DK_ROOT)/platforms/hw/linux
ifeq ($(WSPI),y)
OS_SRCS += $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux/WspiAdapter.c
- OS_INCS += $(EXT_DRV)/$(HOST_PLATFORM)/Linux/spi
+ OS_INCS += $(EXT_DRV)/$(HOST_PLATFORM)/Linux/spi
endif
ifeq ($(WSPI),n)
- OS_SRCS += $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux/SdioAdapter.c
- OS_INCS += $(EXT_DRV)/$(HOST_PLATFORM)/Linux/sdio
+# OS_SRCS += $(DK_ROOT)/platforms/hw/host_platform_$(HOST_PLATFORM)/linux/SdioAdapter.c
+# OS_INCS += $(EXT_DRV)/$(HOST_PLATFORM)/Linux/sdio
+ OS_SRCS += $(DK_ROOT)/platforms/hw/linux/SdioAdapter.c
+ OS_INCS += $(EXT_DRV)/sdio/linux
endif
OS_OBJS = $(patsubst %.c, %.o, $(OS_SRCS))
diff --git a/wl1271/platforms/os/linux/inc/WlanDrvIf.h b/wl1271/platforms/os/linux/inc/WlanDrvIf.h
index 66d7cf47..0e9ddbe4 100644
--- a/wl1271/platforms/os/linux/inc/WlanDrvIf.h
+++ b/wl1271/platforms/os/linux/inc/WlanDrvIf.h
@@ -45,7 +45,6 @@
#include <linux/netdevice.h>
#include <linux/workqueue.h>
#include <mach/gpio.h>
-
#ifdef CONFIG_HAS_WAKELOCK
#include <linux/wakelock.h>
#endif
@@ -57,9 +56,9 @@
#include "windows_types.h"
#define TIWLAN_DRV_NAME "tiwlan"
+#define DRIVERWQ_NAME "tiwlan_wq"
#define TIWLAN_DRV_IF_NAME TIWLAN_DRV_NAME"%d"
-
#ifdef TI_DBG
#define ti_dprintf(log, fmt, args...) do { \
if (log != TIWLAN_LOG_OTHER) { \
@@ -83,7 +82,7 @@
#endif
-typedef enum
+typedef enum
{
TIWLAN_LOG_ERROR,
TIWLAN_LOG_INFO,
@@ -102,12 +101,13 @@ typedef struct
/* Driver object */
-typedef struct
+typedef struct
{
TWlanDrvIfCommon tCommon; /* The driver object common part */
int irq; /* The OS IRQ handle */
- struct workqueue_struct *pWorkQueue;/* The OS work queue */
+ unsigned long irq_flags; /* The IRQ flags */
+ struct workqueue_struct *tiwlan_wq; /* Work Queue */
struct work_struct tWork; /* The OS work handle. */
spinlock_t lock; /* The OS spinlock handle. */
unsigned long flags; /* For saving the cpu flags during spinlock */
@@ -121,7 +121,7 @@ typedef struct
struct wake_lock wl_wifi; /* Wifi wakelock */
struct wake_lock wl_rxwake; /* Wifi rx wakelock */
#endif
- NDIS_HANDLE ConfigHandle;/* Temp - For Windows compatibility */
+ NDIS_HANDLE ConfigHandle;/* Temp - For Windows compatibility */
} TWlanDrvIfObj, *TWlanDrvIfObjPtr;
diff --git a/wl1271/platforms/os/linux/src/CmdInterpretWext.c b/wl1271/platforms/os/linux/src/CmdInterpretWext.c
index d48770fb..656626fc 100644
--- a/wl1271/platforms/os/linux/src/CmdInterpretWext.c
+++ b/wl1271/platforms/os/linux/src/CmdInterpretWext.c
@@ -61,8 +61,7 @@ static int cmdInterpret_setSecurityParams (TI_HANDLE hCmdInterpret);
static int cmdInterpret_initEvents(TI_HANDLE hCmdInterpret);
static int cmdInterpret_unregisterEvents(TI_HANDLE hCmdInterpret, TI_HANDLE hEvHandler);
-#define CHECK_PENDING_RESULT(x,y) if (x == COMMAND_PENDING) { os_printf ("Unexpected COMMAND PENDING result (cmd = 0x%x)\n",y.paramType); break; }
-#define CHECK_PENDING_RESULT_RET(x,y) if (x == COMMAND_PENDING) { os_printf ("Unexpected COMMAND PENDING result (cmd = 0x%x)\n",y.paramType); return NULL; }
+#define CHECK_PENDING_RESULT(x,y) if (x == COMMAND_PENDING) { os_printf ("Unexpected COMMAND PENDING result (cmd = 0x%x)\n",y->paramType); break; }
static const char *ieee80211_modes[] = {
"?", "IEEE 802.11 B", "IEEE 802.11 A", "IEEE 802.11 BG", "IEEE 802.11 ABG"
@@ -71,7 +70,7 @@ static const char *ieee80211_modes[] = {
typedef struct
{
- TI_UINT8 *assocRespBuffer;
+ TI_UINT8 *assocRespBuffer;
TI_UINT32 assocRespLen;
} cckm_assocInformation_t;
@@ -110,10 +109,10 @@ TI_HANDLE cmdInterpret_Create (TI_HANDLE hOs)
/* Deinitialize the cmdInterpreter module */
TI_STATUS cmdInterpret_Destroy (TI_HANDLE hCmdInterpret, TI_HANDLE hEvHandler)
{
- cmdInterpret_t * pCmdInterpret = (cmdInterpret_t *)hCmdInterpret;
+ cmdInterpret_t *pCmdInterpret = (cmdInterpret_t *)hCmdInterpret;
/* Unregister events */
- cmdInterpret_unregisterEvents ((TI_HANDLE)pCmdInterpret, hEvHandler);
+ cmdInterpret_unregisterEvents ((TI_HANDLE)pCmdInterpret, hEvHandler);
/* Release allocated memory */
os_memoryFree (pCmdInterpret->hOs, pCmdInterpret, sizeof(cmdInterpret_t));
@@ -139,13 +138,16 @@ void cmdInterpret_Init (TI_HANDLE hCmdInterpret, TStadHandlesList *pStadHandles)
int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdObj)
{
cmdInterpret_t *pCmdInterpret = (cmdInterpret_t *)hCmdInterpret;
+ paramInfo_t *pParam;
TI_STATUS res = TI_NOK;
int i,j;
- paramInfo_t Param;
+
union iwreq_data *wrqu = (union iwreq_data *)cmdObj->buffer1;
cmdObj->return_code = WEXT_NOT_SUPPORTED;
-
+ pParam = (paramInfo_t *)os_memoryAlloc(pCmdInterpret->hOs, sizeof(paramInfo_t));
+ if (!pParam)
+ return res;
/* Check user request */
switch (cmdObj->cmd)
{
@@ -162,12 +164,12 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* If there is a given channel */
if (wrqu->freq.m != 0)
{
- Param.paramType = SITE_MGR_DESIRED_CHANNEL_PARAM;
- Param.paramLength = sizeof(TI_UINT32);
- Param.content.siteMgrDesiredChannel = wrqu->freq.m;
+ pParam->paramType = SITE_MGR_DESIRED_CHANNEL_PARAM;
+ pParam->paramLength = sizeof(TI_UINT32);
+ pParam->content.siteMgrDesiredChannel = wrqu->freq.m;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
}
break;
}
@@ -175,18 +177,18 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Get channel / frequency */
case SIOCGIWFREQ:
{
- Param.paramType = SITE_MGR_CURRENT_CHANNEL_PARAM;
- Param.paramLength = sizeof(TI_UINT32);
+ pParam->paramType = SITE_MGR_CURRENT_CHANNEL_PARAM;
+ pParam->paramLength = sizeof(TI_UINT32);
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, &Param);
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, pParam);
if(res == NO_SITE_SELECTED_YET)
res = TI_OK;
-
- CHECK_PENDING_RESULT(res,Param)
+
+ CHECK_PENDING_RESULT(res,pParam)
if (res == TI_OK)
{
- wrqu->freq.m = Param.content.siteMgrCurrentChannel;
+ wrqu->freq.m = pParam->content.siteMgrCurrentChannel;
wrqu->freq.e = 3;
wrqu->freq.i = 0;
}
@@ -196,44 +198,45 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Set Mode (Adhoc / infrastructure) */
case SIOCSIWMODE:
{
- Param.paramType = SME_DESIRED_BSS_TYPE_PARAM;
- Param.paramLength = sizeof(ScanBssType_e);
+ pParam->paramType = SME_DESIRED_BSS_TYPE_PARAM;
+ pParam->paramLength = sizeof(ScanBssType_e);
switch (wrqu->mode)
{
case IW_MODE_AUTO:
- Param.content.smeDesiredBSSType = BSS_ANY;
+ pParam->content.smeDesiredBSSType = BSS_ANY;
break;
case IW_MODE_ADHOC:
- Param.content.smeDesiredBSSType = BSS_INDEPENDENT;
+ pParam->content.smeDesiredBSSType = BSS_INDEPENDENT;
break;
case IW_MODE_INFRA:
- Param.content.smeDesiredBSSType = BSS_INFRASTRUCTURE;
+ pParam->content.smeDesiredBSSType = BSS_INFRASTRUCTURE;
break;
default:
- return -EOPNOTSUPP;
+ res = -EOPNOTSUPP;
+ goto cmd_end;
}
- res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
/* also set the site mgr desired mode */
- Param.paramType = SITE_MGR_DESIRED_BSS_TYPE_PARAM;
- res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
-
+ pParam->paramType = SITE_MGR_DESIRED_BSS_TYPE_PARAM;
+ res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
+
break;
}
/* Get Mode (Adhoc / infrastructure) */
case SIOCGIWMODE:
{
- Param.paramType = SME_DESIRED_BSS_TYPE_PARAM;
- Param.paramLength = sizeof(ScanBssType_e);
- res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SME_DESIRED_BSS_TYPE_PARAM;
+ pParam->paramLength = sizeof(ScanBssType_e);
+ res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
- switch (Param.content.smeDesiredBSSType)
+ switch (pParam->content.smeDesiredBSSType)
{
case BSS_ANY:
wrqu->mode = IW_MODE_AUTO;
@@ -255,19 +258,19 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
case SIOCSIWSENS:
{
/* First get the current roaming configuration as a whole */
- Param.paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION;
- Param.paramLength = sizeof (roamingMngrConfigParams_t);
- res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ pParam->paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION;
+ pParam->paramLength = sizeof (roamingMngrConfigParams_t);
+ res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
/* Now change the low rssi threshold supplied by the user */
- Param.content.roamingConfigBuffer.roamingMngrThresholdsConfig.lowRssiThreshold = wrqu->param.value;
+ pParam->content.roamingConfigBuffer.roamingMngrThresholdsConfig.lowRssiThreshold = wrqu->param.value;
/* And set the parameters back to the roaming module */
- res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, &Param);
+ res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
break;
}
@@ -275,15 +278,15 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Get sensitivity (Rssi threshold OR CCA?)*/
case SIOCGIWSENS:
{
- Param.paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION;
- Param.paramLength = sizeof (roamingMngrConfigParams_t);
- res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ pParam->paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION;
+ pParam->paramLength = sizeof (roamingMngrConfigParams_t);
+ res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
if (res == TI_OK)
{
- wrqu->param.value = Param.content.roamingConfigBuffer.roamingMngrThresholdsConfig.lowRssiThreshold;
+ wrqu->param.value = pParam->content.roamingConfigBuffer.roamingMngrThresholdsConfig.lowRssiThreshold;
wrqu->param.disabled = (wrqu->param.value == 0);
wrqu->param.fixed = 1;
}
@@ -318,7 +321,7 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
range->old_num_frequency = 0;
/* Wireless event capability bitmasks */
- IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWAP);
+ IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWAP);
IW_EVENT_CAPA_SET(range->event_capa, IWEVREGISTERED);
IW_EVENT_CAPA_SET(range->event_capa, IWEVEXPIRED);
@@ -326,16 +329,16 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
range->sensitivity = 0;
/* Rates */
- Param.paramType = SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, pParam );
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
/* Number of entries in the rates list */
- range->num_bitrates = Param.content.siteMgrDesiredSupportedRateSet.len;
- for (i=0; i<Param.content.siteMgrDesiredSupportedRateSet.len; i++)
+ range->num_bitrates = pParam->content.siteMgrDesiredSupportedRateSet.len;
+ for (i=0; i<pParam->content.siteMgrDesiredSupportedRateSet.len; i++)
{
- range->bitrate[i] = ((Param.content.siteMgrDesiredSupportedRateSet.ratesString[i] & 0x7F) * 500000);
+ range->bitrate[i] = ((pParam->content.siteMgrDesiredSupportedRateSet.ratesString[i] & 0x7F) * 500000);
}
/* RTS threshold */
@@ -381,25 +384,25 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
range->max_r_time = 0; /* Maximal retry lifetime */
/* Get Supported channels */
- Param.paramType = SITE_MGR_RADIO_BAND_PARAM;
- res = cmdDispatch_GetParam( pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = SITE_MGR_RADIO_BAND_PARAM;
+ res = cmdDispatch_GetParam( pCmdInterpret->hCmdDispatch, pParam );
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
/* pParam->content.siteMgrRadioBand contains the current band, now get list of supported channels */
- Param.paramType = REGULATORY_DOMAIN_ALL_SUPPORTED_CHANNELS;
- res = cmdDispatch_GetParam( pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = REGULATORY_DOMAIN_ALL_SUPPORTED_CHANNELS;
+ res = cmdDispatch_GetParam( pCmdInterpret->hCmdDispatch, pParam );
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
- range->num_channels = Param.content.supportedChannels.sizeOfList; /* Number of channels [0; num - 1] */
- range->num_frequency = Param.content.supportedChannels.sizeOfList; /* Number of entry in the list */
+ range->num_channels = pParam->content.supportedChannels.sizeOfList; /* Number of channels [0; num - 1] */
+ range->num_frequency = pParam->content.supportedChannels.sizeOfList; /* Number of entry in the list */
- for (i=0; i<Param.content.supportedChannels.sizeOfList; i++)
+ for (i=0; i<pParam->content.supportedChannels.sizeOfList; i++)
{
range->freq[i].e = 0;
range->freq[i].m = i;
- range->freq[i].i = Param.content.supportedChannels.listOfChannels[i]+1;
+ range->freq[i].i = pParam->content.supportedChannels.listOfChannels[i]+1;
}
/* Encoder (Encryption) capabilities */
@@ -418,9 +421,9 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
range->encoding_login_index = 0; /* token index for login token */
/* Encryption capabilities */
- range->enc_capa = IW_ENC_CAPA_WPA |
- IW_ENC_CAPA_WPA2 |
- IW_ENC_CAPA_CIPHER_TKIP |
+ range->enc_capa = IW_ENC_CAPA_WPA |
+ IW_ENC_CAPA_WPA2 |
+ IW_ENC_CAPA_CIPHER_TKIP |
IW_ENC_CAPA_CIPHER_CCMP; /* IW_ENC_CAPA_* bit field */
}
@@ -434,21 +437,21 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
if (MAC_NULL (wrqu->ap_addr.sa_data))
{
/* Convert to "FF:FF:FF:FF:FF:FF" since this driver requires this value */
- MAC_COPY (Param.content.siteMgrDesiredBSSID, "\xff\xff\xff\xff\xff\xff");
- }
+ MAC_COPY (pParam->content.siteMgrDesiredBSSID, "\xff\xff\xff\xff\xff\xff");
+ }
else
{
- MAC_COPY (Param.content.siteMgrDesiredBSSID, wrqu->ap_addr.sa_data);
+ MAC_COPY (pParam->content.siteMgrDesiredBSSID, wrqu->ap_addr.sa_data);
}
- Param.paramType = SITE_MGR_DESIRED_BSSID_PARAM;
- res = cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SITE_MGR_DESIRED_BSSID_PARAM;
+ res = cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
/* also set it to the SME */
- Param.paramType = SME_DESIRED_BSSID_PARAM;
- res = cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SME_DESIRED_BSSID_PARAM;
+ res = cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
break;
}
@@ -458,20 +461,20 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
case SIOCGIWAP:
{
/* Get current AP BSSID */
- Param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
- res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = SITE_MGR_CURRENT_BSSID_PARAM;
+ res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, pParam );
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
/* In case we are not associated - copy zeroes into bssid */
if (res == NO_SITE_SELECTED_YET)
{
MAC_COPY (wrqu->ap_addr.sa_data, "\x00\x00\x00\x00\x00\x00");
cmdObj->return_code = WEXT_OK;
- }
+ }
else if (res == TI_OK)
{
- MAC_COPY (wrqu->ap_addr.sa_data, Param.content.siteMgrDesiredBSSID);
+ MAC_COPY (wrqu->ap_addr.sa_data, pParam->content.siteMgrDesiredBSSID);
}
break;
@@ -483,26 +486,27 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
{
struct iw_mlme *mlme = (struct iw_mlme *)cmdObj->param3;
- Param.paramType = SITE_MGR_DESIRED_SSID_PARAM;
+ pParam->paramType = SITE_MGR_DESIRED_SSID_PARAM;
/* In either case - we need to disconnect, so prepare "junk" SSID */
for (i = 0; i < MAX_SSID_LEN; i++)
- Param.content.siteMgrDesiredSSID.str[i] = (i+1);
- Param.content.siteMgrDesiredSSID.len = MAX_SSID_LEN;
+ pParam->content.siteMgrDesiredSSID.str[i] = (i+1);
+ pParam->content.siteMgrDesiredSSID.len = MAX_SSID_LEN;
switch (mlme->cmd)
{
case IW_MLME_DEAUTH:
case IW_MLME_DISASSOC:
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
/* now also set it to the SME */
- Param.paramType = SME_DESIRED_SSID_ACT_PARAM;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SME_DESIRED_SSID_ACT_PARAM;
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
break;
default:
- return -EOPNOTSUPP;
+ res = -EOPNOTSUPP;
+ goto cmd_end;
}
break;
}
@@ -510,12 +514,13 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* trigger scanning (list cells) */
case SIOCSIWSCAN:
{
- struct iw_scan_req scanReq;
- TScanParams scanParams;
- Param.content.pScanParams = &scanParams;
+ struct iw_scan_req scanReq;
+ TScanParams scanParams;
+
+ pParam->content.pScanParams = &scanParams;
/* Init the parameters in case the Supplicant doesn't support them*/
- Param.content.pScanParams->desiredSsid.len = 0;
+ pParam->content.pScanParams->desiredSsid.len = 0;
scanReq.scan_type = SCAN_TYPE_TRIGGERED_ACTIVE;
if (cmdObj->param3)
@@ -524,39 +529,39 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
if (wrqu->data.flags & IW_SCAN_THIS_ESSID)
{
- Param.content.pScanParams->desiredSsid.len = scanReq.essid_len;
- os_memoryCopy(pCmdInterpret->hOs,Param.content.pScanParams->desiredSsid.str, scanReq.essid, scanReq.essid_len);
+ pParam->content.pScanParams->desiredSsid.len = scanReq.essid_len;
+ os_memoryCopy(pCmdInterpret->hOs,pParam->content.pScanParams->desiredSsid.str, scanReq.essid, scanReq.essid_len);
}
else
{
- Param.content.pScanParams->desiredSsid.len = 0; /* scan all*/
+ pParam->content.pScanParams->desiredSsid.len = 0; /* scan all*/
}
}
/* set the scan type according to driver trigger scan */
if (IW_SCAN_TYPE_PASSIVE == scanReq.scan_type)
{
- Param.content.pScanParams->scanType = SCAN_TYPE_TRIGGERED_PASSIVE;
+ pParam->content.pScanParams->scanType = SCAN_TYPE_TRIGGERED_PASSIVE;
}
else
{
- Param.content.pScanParams->scanType = SCAN_TYPE_TRIGGERED_ACTIVE;
+ pParam->content.pScanParams->scanType = SCAN_TYPE_TRIGGERED_ACTIVE;
}
- Param.paramType = SCAN_CNCN_BSSID_LIST_SCAN_PARAM;
- Param.paramLength = sizeof(TScanParams);
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SCAN_CNCN_BSSID_LIST_SCAN_PARAM;
+ pParam->paramLength = sizeof(TScanParams);
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
}
break;
/* get scanning results */
case SIOCGIWSCAN:
{
+ unsigned char buf[30];
char *event = (char *)cmdObj->buffer2;
- unsigned char buf[200];
struct iw_event iwe;
- char *end_buf,*current_val;
+ char *end_buf, *current_val;
int allocated_size;
OS_802_11_BSSID_LIST_EX *my_list;
OS_802_11_BSSID_EX *my_current;
@@ -564,28 +569,32 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
struct iw_request_info info;
- info.cmd= SIOCGIWSCAN;
- info.flags=0;
+ info.cmd = SIOCGIWSCAN;
+ info.flags = 0;
#endif
end_buf = (char *)(cmdObj->buffer2 + wrqu->data.length);
/* First get the amount of memory required to hold the entire BSSID list by setting the length to 0 */
- Param.paramType = SCAN_CNCN_BSSID_LIST_SIZE_PARAM;
- Param.paramLength = 0;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SCAN_CNCN_BSSID_LIST_SIZE_PARAM;
+ pParam->paramLength = 0;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
- allocated_size = Param.content.uBssidListSize;
+ allocated_size = pParam->content.uBssidListSize;
/* Allocate required memory */
my_list = os_memoryAlloc (pCmdInterpret->hOs, allocated_size);
+ if (!my_list) {
+ res = -ENOMEM;
+ goto cmd_end;
+ }
/* And retrieve the list */
- Param.paramType = SCAN_CNCN_BSSID_LIST_PARAM;
- Param.content.pBssidList = my_list;
- Param.paramLength = allocated_size;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SCAN_CNCN_BSSID_LIST_PARAM;
+ pParam->content.pBssidList = my_list;
+ pParam->paramLength = allocated_size;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
my_current = &my_list->Bssid[0];
i=0;
@@ -603,7 +612,7 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
{
break;
}
-
+
/* The first entry MUST be the AP BSSID */
os_memorySet (pCmdInterpret->hOs, &iwe, 0, sizeof(iwe));
iwe.cmd = SIOCGIWAP;
@@ -659,7 +668,7 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
os_memorySet (pCmdInterpret->hOs, &iwe, 0, sizeof(iwe));
iwe.cmd = SIOCGIWFREQ;
iwe.u.freq.m = my_current->Configuration.Union.channel;
- iwe.u.freq.e = 3;
+ iwe.u.freq.e = 3; /* Frequency divider */
iwe.u.freq.i = 0;
iwe.len = IW_EV_FREQ_LEN;
@@ -730,7 +739,7 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
os_memorySet (pCmdInterpret->hOs, &iwe, 0, sizeof(iwe));
iwe.cmd = IWEVGENIE;
offset = sizeof(OS_802_11_FIXED_IEs);
- while(offset < my_current->IELength)
+ while(offset < my_current->IELength)
{
OS_802_11_VARIABLE_IEs *pIE;
pIE = (OS_802_11_VARIABLE_IEs*)&(my_current->IEs[offset]);
@@ -743,7 +752,7 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
event = iwe_stream_add_point(&info, event, end_buf, &iwe, (char *)&(my_current->IEs[offset]));
#endif
offset += pIE->Length + 2;
- }
+ }
my_current = (OS_802_11_BSSID_EX *) (((char *) my_current) + my_current->Length);
}
@@ -775,15 +784,15 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
else
cmdInterpret_setSecurityParams (hCmdInterpret);
- os_memoryZero (pCmdInterpret->hOs, &Param.content.siteMgrDesiredSSID.str, MAX_SSID_LEN);
+ os_memoryZero (pCmdInterpret->hOs, &pParam->content.siteMgrDesiredSSID.str, MAX_SSID_LEN);
- Param.content.siteMgrCurrentSSID.len = 0;
+ pParam->content.siteMgrCurrentSSID.len = 0;
if (wrqu->essid.flags == 0)
{
/* Connect to ANY ESSID - use empty */
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.siteMgrCurrentSSID.str, "\00", 1);
- Param.content.siteMgrCurrentSSID.len = 0;;
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.siteMgrCurrentSSID.str, "\00", 1);
+ pParam->content.siteMgrCurrentSSID.len = 0;;
} else
{
/* Handle ESSID length issue in WEXT (backward compatibility with old/new versions) */
@@ -793,18 +802,18 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
while (length < wrqu->essid.length && extra[length])
length++;
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.siteMgrCurrentSSID.str, cmdObj->buffer2, length);
- Param.content.siteMgrCurrentSSID.len = length;
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.siteMgrCurrentSSID.str, cmdObj->buffer2, length);
+ pParam->content.siteMgrCurrentSSID.len = length;
}
- Param.paramType = SITE_MGR_DESIRED_SSID_PARAM;
- Param.paramLength = sizeof (TSsid);
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SITE_MGR_DESIRED_SSID_PARAM;
+ pParam->paramLength = sizeof (TSsid);
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
/* also set it to the SME */
- Param.paramType = SME_DESIRED_SSID_ACT_PARAM;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param );
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = SME_DESIRED_SSID_ACT_PARAM;
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam );
+ CHECK_PENDING_RESULT(res,pParam)
}
break;
@@ -813,22 +822,22 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
{
char *extra = (char *)cmdObj->buffer2;
- Param.paramType = SITE_MGR_CURRENT_SSID_PARAM;
- res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = SITE_MGR_CURRENT_SSID_PARAM;
+ res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, pParam );
if(res == NO_SITE_SELECTED_YET)
res = WEXT_OK;
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
wrqu->essid.flags = 1;
- os_memoryCopy(pCmdInterpret->hOs, cmdObj->buffer2, &Param.content.siteMgrCurrentSSID.str, Param.content.siteMgrCurrentSSID.len );
+ os_memoryCopy(pCmdInterpret->hOs, cmdObj->buffer2, &pParam->content.siteMgrCurrentSSID.str, pParam->content.siteMgrCurrentSSID.len );
- if(Param.content.siteMgrCurrentSSID.len < MAX_SSID_LEN)
+ if (pParam->content.siteMgrCurrentSSID.len < MAX_SSID_LEN)
{
- extra[Param.content.siteMgrCurrentSSID.len] = 0;
+ extra[pParam->content.siteMgrCurrentSSID.len] = 0;
}
- wrqu->essid.length = Param.content.siteMgrCurrentSSID.len;
+ wrqu->essid.length = pParam->content.siteMgrCurrentSSID.len;
}
break;
@@ -836,8 +845,10 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* set node name/nickname */
case SIOCSIWNICKN:
{
- if (wrqu->data.length > IW_ESSID_MAX_SIZE)
- return -EINVAL;
+ if (wrqu->data.length > IW_ESSID_MAX_SIZE) {
+ res = -EINVAL;
+ goto cmd_end;
+ }
os_memoryCopy(pCmdInterpret->hOs, pCmdInterpret->nickName, cmdObj->buffer2, wrqu->data.length);
pCmdInterpret->nickName[IW_ESSID_MAX_SIZE] = 0;
res = TI_OK;
@@ -860,28 +871,28 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Set RTS Threshold */
case SIOCSIWRTS:
{
- Param.paramType = TWD_RTS_THRESHOLD_PARAM;
+ pParam->paramType = TWD_RTS_THRESHOLD_PARAM;
if (wrqu->rts.disabled)
- Param.content.halCtrlRtsThreshold = TWD_RTS_THRESHOLD_DEF;
+ pParam->content.halCtrlRtsThreshold = TWD_RTS_THRESHOLD_DEF;
else
- Param.content.halCtrlRtsThreshold = wrqu->rts.value;
+ pParam->content.halCtrlRtsThreshold = wrqu->rts.value;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,&Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,pParam);
+ CHECK_PENDING_RESULT(res,pParam)
break;
}
-
+
/* Get RTS Threshold */
case SIOCGIWRTS:
{
- Param.paramType = TWD_RTS_THRESHOLD_PARAM;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
+ pParam->paramType = TWD_RTS_THRESHOLD_PARAM;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
- wrqu->rts.value = Param.content.halCtrlRtsThreshold;
- wrqu->rts.fixed = 1;
+ wrqu->rts.value = pParam->content.halCtrlRtsThreshold;
+ wrqu->rts.fixed = 1;
cmdObj->return_code = WEXT_OK;
break;
}
@@ -889,11 +900,11 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Set Fragmentation threshold */
case SIOCSIWFRAG:
{
- Param.paramType = TWD_FRAG_THRESHOLD_PARAM;
- Param.content.halCtrlFragThreshold = ((wrqu->frag.value+1)>>1) << 1; /* make it always even */
+ pParam->paramType = TWD_FRAG_THRESHOLD_PARAM;
+ pParam->content.halCtrlFragThreshold = ((wrqu->frag.value+1)>>1) << 1; /* make it always even */
- res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam(pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
break;
}
@@ -901,13 +912,13 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
/* Get Fragmentation threshold */
case SIOCGIWFRAG:
{
- Param.paramType = TWD_FRAG_THRESHOLD_PARAM;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
+ pParam->paramType = TWD_FRAG_THRESHOLD_PARAM;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
- wrqu->rts.value = Param.content.halCtrlFragThreshold;
- wrqu->rts.fixed = 1;
+ wrqu->rts.value = pParam->content.halCtrlFragThreshold;
+ wrqu->rts.fixed = 1;
cmdObj->return_code = WEXT_OK;
break;
}
@@ -920,25 +931,25 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
}
else
{
- Param.paramType = REGULATORY_DOMAIN_CURRENT_TX_POWER_LEVEL_PARAM;
- Param.content.desiredTxPower = wrqu->txpower.value;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,&Param);
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = REGULATORY_DOMAIN_CURRENT_TX_POWER_LEVEL_PARAM;
+ pParam->content.desiredTxPower = wrqu->txpower.value;
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,pParam);
+ CHECK_PENDING_RESULT(res,pParam)
}
break;
/* Get TX power level */
case SIOCGIWTXPOW:
{
- Param.paramType = REGULATORY_DOMAIN_CURRENT_TX_POWER_IN_DBM_PARAM;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
+ pParam->paramType = REGULATORY_DOMAIN_CURRENT_TX_POWER_IN_DBM_PARAM;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
- CHECK_PENDING_RESULT(res,Param)
+ CHECK_PENDING_RESULT(res,pParam)
wrqu->txpower.flags = IW_TXPOW_RELATIVE | IW_TXPOW_RANGE;
wrqu->txpower.disabled = 0;
wrqu->txpower.fixed = 0;
- wrqu->txpower.value = Param.content.desiredTxPower;
+ wrqu->txpower.value = pParam->content.desiredTxPower;
break;
}
@@ -955,35 +966,34 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
index--;
else
{
- Param.paramType = RSN_DEFAULT_KEY_ID;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
- CHECK_PENDING_RESULT(res,Param)
- index = Param.content.rsnDefaultKeyID;
+ pParam->paramType = RSN_DEFAULT_KEY_ID;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
+ CHECK_PENDING_RESULT(res,pParam)
+ index = pParam->content.rsnDefaultKeyID;
}
-
- Param.paramType = RSN_ADD_KEY_PARAM;
+
+ pParam->paramType = RSN_ADD_KEY_PARAM;
/* remove key if disabled */
if (wrqu->data.flags & IW_ENCODE_DISABLED)
{
- Param.paramType = RSN_REMOVE_KEY_PARAM;
+ pParam->paramType = RSN_REMOVE_KEY_PARAM;
}
- Param.content.rsnOsKey.KeyIndex = index;
+ pParam->content.rsnOsKey.KeyIndex = index;
if (wrqu->data.length)
{
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.rsnOsKey.KeyMaterial, cmdObj->buffer2, wrqu->data.length);
- Param.content.rsnOsKey.KeyLength = wrqu->data.length;
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.rsnOsKey.KeyMaterial, cmdObj->buffer2, wrqu->data.length);
+ pParam->content.rsnOsKey.KeyLength = wrqu->data.length;
} else
{
/* No key material is provided, just set given index as default TX key */
- Param.paramType = RSN_DEFAULT_KEY_ID;
- Param.content.rsnDefaultKeyID = index;
+ pParam->paramType = RSN_DEFAULT_KEY_ID;
+ pParam->content.rsnDefaultKeyID = index;
}
-
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
break;
}
@@ -1005,25 +1015,25 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
index--;
else
{
- Param.paramType = RSN_DEFAULT_KEY_ID;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
- CHECK_PENDING_RESULT(res,Param)
- index = Param.content.rsnDefaultKeyID;
+ pParam->paramType = RSN_DEFAULT_KEY_ID;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
+ CHECK_PENDING_RESULT(res,pParam)
+ index = pParam->content.rsnDefaultKeyID;
wrqu->data.flags = (index+1);
}
- Param.content.pRsnKey = &myKeyInfo;
+ pParam->content.pRsnKey = &myKeyInfo;
- Param.paramType = RSN_KEY_PARAM;
- Param.content.pRsnKey->keyIndex = index;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
- CHECK_PENDING_RESULT(res,Param)
+ pParam->paramType = RSN_KEY_PARAM;
+ pParam->content.pRsnKey->keyIndex = index;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
+ CHECK_PENDING_RESULT(res,pParam)
- if ((Param.content.pRsnKey) && (Param.content.pRsnKey->encLen))
+ if ((pParam->content.pRsnKey) && (pParam->content.pRsnKey->encLen))
{
wrqu->data.flags |= IW_ENCODE_ENABLED;
- wrqu->data.length = Param.content.pRsnKey->encLen;
- os_memoryCopy(pCmdInterpret->hOs,extra, &Param.content.pRsnKey->encKey,wrqu->data.length);
+ wrqu->data.length = pParam->content.pRsnKey->encLen;
+ os_memoryCopy(pCmdInterpret->hOs,extra, &pParam->content.pRsnKey->encKey,wrqu->data.length);
}
/* Convert from driver (OID-like) authentication parameters to WEXT */
@@ -1050,22 +1060,21 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
}
break;
- case SIOCSIWGENIE:
+ case SIOCSIWGENIE:
{
- Param.paramType = RSN_GENERIC_IE_PARAM;
- Param.content.rsnGenericIE.length = wrqu->data.length;
- if (wrqu->data.length) {
- os_memoryCopy(pCmdInterpret->hOs, Param.content.rsnGenericIE.data, cmdObj->param3, wrqu->data.length);
- }
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param);
-
- break;
+ pParam->paramType = RSN_GENERIC_IE_PARAM;
+ pParam->content.rsnGenericIE.length = wrqu->data.length;
+ if (wrqu->data.length) {
+ os_memoryCopy(pCmdInterpret->hOs, pParam->content.rsnGenericIE.data, cmdObj->param3, wrqu->data.length);
+ }
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam);
}
+ break;
/* Set Authentication */
case SIOCSIWAUTH:
-
+ res = TI_OK;
switch (wrqu->param.flags & IW_AUTH_INDEX)
{
case IW_AUTH_WPA_VERSION:
@@ -1094,15 +1103,13 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
case IW_AUTH_PRIVACY_INVOKED:
break;
default:
- return -EOPNOTSUPP;
+ res = -EOPNOTSUPP;
}
-
- res = TI_OK;
-
break;
/* Get Authentication */
case SIOCGIWAUTH:
+ res = TI_OK;
{
switch (wrqu->param.flags & IW_AUTH_INDEX)
{
@@ -1122,12 +1129,9 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
wrqu->param.value = pCmdInterpret->wai.iw_auth_80211_auth_alg;
break;
default:
- return -EOPNOTSUPP;
+ res = -EOPNOTSUPP;
}
}
-
- res = TI_OK;
-
break;
/* set encoding token & mode */
@@ -1138,26 +1142,28 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
TI_UINT8 temp[32];
#ifdef GEM_SUPPORTED
- if ( ext->alg == KEY_GEM ) {
- TSecurityKeys key;
- os_memoryZero(pCmdInterpret->hOs, &key, sizeof(key));
- key.keyType = ext->alg;
- if (ext->key_len > MAX_KEY_LEN) {
- return -EINVAL;
- }
- key.encLen = ext->key_len;
- os_memoryCopy(pCmdInterpret->hOs, key.encKey, ext->key, ext->key_len);
- key.keyIndex = (wrqu->encoding.flags & IW_ENCODE_INDEX) - 1;
- os_memoryCopy(pCmdInterpret->hOs, &key.macAddress, ext->addr.sa_data, sizeof(key.macAddress));
-
- Param.paramType = RSN_SET_KEY_PARAM;
- Param.paramLength = sizeof(Param.content.pRsnKey);
- Param.content.pRsnKey = &key;
-
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param);
- break;
- }
+ if ( ext->alg == KEY_GEM ) {
+ TSecurityKeys key;
+
+ os_memoryZero(pCmdInterpret->hOs, &key, sizeof(key));
+ key.keyType = ext->alg;
+ if (ext->key_len > MAX_KEY_LEN) {
+ res = -EINVAL;
+ break;
+ }
+ key.encLen = ext->key_len;
+ os_memoryCopy(pCmdInterpret->hOs, key.encKey, ext->key, ext->key_len);
+ key.keyIndex = (wrqu->encoding.flags & IW_ENCODE_INDEX) - 1;
+ os_memoryCopy(pCmdInterpret->hOs, &key.macAddress, ext->addr.sa_data, sizeof(key.macAddress));
+
+ pParam->paramType = RSN_SET_KEY_PARAM;
+ pParam->paramLength = sizeof(pParam->content.pRsnKey);
+ pParam->content.pRsnKey = &key;
+
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam);
+ break;
+ }
#endif
addr = ext->addr.sa_data;
@@ -1167,36 +1173,36 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
os_printf ("ext->ext_flags = 0x%x\n",ext->ext_flags);
os_printf ("ext->key_len = 0x%x\n",ext->key_len);
os_printf ("ext->key_idx = 0x%x\n",(wrqu->encoding.flags & IW_ENCODE_INDEX));
-
+
os_printf ("key = ");
for (i=0; i<ext->key_len; i++)
{
os_printf ("0x%02x:",ext->key[i]);
}
- os_printf ("\n");
+ os_printf ("\n");
*/
- MAC_COPY (Param.content.rsnOsKey.BSSID, addr);
+ MAC_COPY (pParam->content.rsnOsKey.BSSID, addr);
- Param.content.rsnOsKey.KeyLength = ext->key_len;
+ pParam->content.rsnOsKey.KeyLength = ext->key_len;
- Param.content.rsnOsKey.KeyIndex = wrqu->encoding.flags & IW_ENCODE_INDEX;
- Param.content.rsnOsKey.KeyIndex -= 1;
+ pParam->content.rsnOsKey.KeyIndex = wrqu->encoding.flags & IW_ENCODE_INDEX;
+ pParam->content.rsnOsKey.KeyIndex -= 1;
if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)
{
- Param.content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_TRANSMIT;
+ pParam->content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_TRANSMIT;
}
if (addr[0]!=0xFF)
{
- Param.content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_PAIRWISE;
+ pParam->content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_PAIRWISE;
}
if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)
{
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.rsnOsKey.KeyRSC, &ext->rx_seq, IW_ENCODE_SEQ_MAX_SIZE);
- Param.content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_SET_KEY_RSC;
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.rsnOsKey.KeyRSC, &ext->rx_seq, IW_ENCODE_SEQ_MAX_SIZE);
+ pParam->content.rsnOsKey.KeyIndex |= TIWLAN_KEY_FLAGS_SET_KEY_RSC;
}
/* If key is TKIP - need to switch RX and TX MIC (to match driver API) */
@@ -1205,19 +1211,19 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
os_memoryCopy(pCmdInterpret->hOs,(TI_UINT8*)(((TI_UINT8*)&temp)+24),(TI_UINT8*)(((TI_UINT8*)&ext->key)+16),8);
os_memoryCopy(pCmdInterpret->hOs,(TI_UINT8*)(((TI_UINT8*)&temp)+16),(TI_UINT8*)(((TI_UINT8*)&ext->key)+24),8);
os_memoryCopy(pCmdInterpret->hOs,&temp,&ext->key,16);
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.rsnOsKey.KeyMaterial, &temp, ext->key_len);
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.rsnOsKey.KeyMaterial, &temp, ext->key_len);
} else
{
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.rsnOsKey.KeyMaterial, &ext->key, ext->key_len);
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.rsnOsKey.KeyMaterial, &ext->key, ext->key_len);
}
if (ext->key_len == 0)
- Param.paramType = RSN_REMOVE_KEY_PARAM;
+ pParam->paramType = RSN_REMOVE_KEY_PARAM;
else
- Param.paramType = RSN_ADD_KEY_PARAM;
+ pParam->paramType = RSN_ADD_KEY_PARAM;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
}
break;
@@ -1230,26 +1236,26 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
switch (pmksa->cmd)
{
case IW_PMKSA_ADD:
- Param.paramType = RSN_PMKID_LIST;
- Param.content.rsnPMKIDList.BSSIDInfoCount = 1;
- Param.content.rsnPMKIDList.Length = 2*sizeof(TI_UINT32) + MAC_ADDR_LEN + PMKID_VALUE_SIZE;
- MAC_COPY (Param.content.rsnPMKIDList.osBSSIDInfo[0].BSSID, pmksa->bssid.sa_data);
- os_memoryCopy(pCmdInterpret->hOs, &Param.content.rsnPMKIDList.osBSSIDInfo[0].PMKID, pmksa->pmkid, IW_PMKID_LEN);
+ pParam->paramType = RSN_PMKID_LIST;
+ pParam->content.rsnPMKIDList.BSSIDInfoCount = 1;
+ pParam->content.rsnPMKIDList.Length = 2*sizeof(TI_UINT32) + MAC_ADDR_LEN + PMKID_VALUE_SIZE;
+ MAC_COPY (pParam->content.rsnPMKIDList.osBSSIDInfo[0].BSSID, pmksa->bssid.sa_data);
+ os_memoryCopy(pCmdInterpret->hOs, &pParam->content.rsnPMKIDList.osBSSIDInfo[0].PMKID, pmksa->pmkid, IW_PMKID_LEN);
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
break;
case IW_PMKSA_REMOVE:
/* Not supported yet */
break;
case IW_PMKSA_FLUSH:
- Param.paramType = RSN_PMKID_LIST;
+ pParam->paramType = RSN_PMKID_LIST;
/* By using info count=0, RSN knows to clear its tables */
/* It's also possible to call rsn_resetPMKIDList directly, but cmdDispatcher should be the interface */
- Param.content.rsnPMKIDList.BSSIDInfoCount = 0;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, &Param);
- CHECK_PENDING_RESULT(res,Param)
+ pParam->content.rsnPMKIDList.BSSIDInfoCount = 0;
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch, pParam);
+ CHECK_PENDING_RESULT(res,pParam)
break;
default:
@@ -1269,16 +1275,15 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
os_printf ("in_buffer = 0x%x (len = %d)\n",my_command->in_buffer,(unsigned int)my_command->in_buffer_len);
os_printf ("out_buffer = 0x%x (len = %d)\n",my_command->out_buffer,(unsigned int)my_command->out_buffer_len);
*/
-
- Param.paramType = my_command->cmd;
+
+ pParam->paramType = my_command->cmd;
if (IS_PARAM_ASYNC(my_command->cmd))
{
-
/* os_printf ("Detected ASYNC command - setting CB \n"); */
- Param.content.interogateCmdCBParams.hCb = (TI_HANDLE)pCmdInterpret;
- Param.content.interogateCmdCBParams.fCb = (void*)cmdInterpret_ServiceCompleteCB;
- Param.content.interogateCmdCBParams.pCb = my_command->out_buffer;
+ pParam->content.interogateCmdCBParams.hCb = (TI_HANDLE)pCmdInterpret;
+ pParam->content.interogateCmdCBParams.fCb = (void*)cmdInterpret_ServiceCompleteCB;
+ pParam->content.interogateCmdCBParams.pCb = my_command->out_buffer;
if (my_command->out_buffer)
{
/* the next copy is need for PLT commands */
@@ -1287,50 +1292,48 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
}
else if ((my_command->in_buffer) && (my_command->in_buffer_len))
{
-
/*
this cmd doesnt have the structure allocated as part of the paramInfo_t structure.
as a result we need to allocate the memory internally.
*/
if(IS_ALLOC_NEEDED_PARAM(my_command->cmd))
{
-
- *(void**)&Param.content = os_memoryAlloc(pCmdInterpret->hOs, my_command->in_buffer_len);
- os_memoryCopy(pCmdInterpret->hOs, *(void**)&Param.content, my_command->in_buffer, my_command->in_buffer_len);
+ *(void **)&pParam->content = os_memoryAlloc(pCmdInterpret->hOs, my_command->in_buffer_len);
+ os_memoryCopy(pCmdInterpret->hOs, *(void **)&pParam->content, my_command->in_buffer, my_command->in_buffer_len);
}
else
- os_memoryCopy(pCmdInterpret->hOs,&Param.content,my_command->in_buffer,my_command->in_buffer_len);
+ os_memoryCopy(pCmdInterpret->hOs,&pParam->content,my_command->in_buffer,my_command->in_buffer_len);
}
if (my_command->flags & PRIVATE_CMD_SET_FLAG)
{
- Param.paramLength = my_command->in_buffer_len;
- res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,&Param);
- }
+ /* os_printf ("Calling setParam\n"); */
+ pParam->paramLength = my_command->in_buffer_len;
+ res = cmdDispatch_SetParam (pCmdInterpret->hCmdDispatch,pParam);
+ }
else if (my_command->flags & PRIVATE_CMD_GET_FLAG)
{
-
/* os_printf ("Calling getParam\n"); */
- Param.paramLength = my_command->out_buffer_len;
- res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,&Param);
+ pParam->paramLength = my_command->out_buffer_len;
+ res = cmdDispatch_GetParam (pCmdInterpret->hCmdDispatch,pParam);
if(res == EXTERNAL_GET_PARAM_DENIED)
{
cmdObj->return_code = WEXT_INVALID_PARAMETER;
- return res;
+ goto cmd_end;
}
- /*
- this is for cmd that want to check the size of memory that they need to
+ /*
+ this is for cmd that want to check the size of memory that they need to
allocate for the actual data.
*/
- if(Param.paramLength && (my_command->out_buffer_len == 0))
+ if(pParam->paramLength && (my_command->out_buffer_len == 0))
{
- my_command->out_buffer_len = Param.paramLength;
+ my_command->out_buffer_len = pParam->paramLength;
}
}
else
{
- res = TI_NOK;
+ res = TI_NOK;
}
if (res == TI_OK)
@@ -1346,20 +1349,20 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
{
if(IS_ALLOC_NEEDED_PARAM(my_command->cmd))
{
- os_memoryCopy(pCmdInterpret->hOs,my_command->out_buffer,*(void**)&Param.content,my_command->out_buffer_len);
+ os_memoryCopy(pCmdInterpret->hOs,my_command->out_buffer,*(void **)&pParam->content,my_command->out_buffer_len);
}
else
{
- os_memoryCopy(pCmdInterpret->hOs,my_command->out_buffer,&Param.content,my_command->out_buffer_len);
- }
- }
+ os_memoryCopy(pCmdInterpret->hOs,my_command->out_buffer,&pParam->content,my_command->out_buffer_len);
+ }
+ }
}
}
/* need to free the allocated memory */
if(IS_ALLOC_NEEDED_PARAM(my_command->cmd))
{
- os_memoryFree(pCmdInterpret->hOs, *(void**)&Param.content, my_command->in_buffer_len);
+ os_memoryFree(pCmdInterpret->hOs, *(void **)&pParam->content, my_command->in_buffer_len);
}
}
@@ -1370,13 +1373,12 @@ int cmdInterpret_convertAndExecute(TI_HANDLE hCmdInterpret, TConfigCommand *cmdO
}
-
-
if (res == TI_OK)
{
cmdObj->return_code = WEXT_OK;
}
-
+cmd_end:
+ os_memoryFree(pCmdInterpret->hOs, pParam, sizeof(paramInfo_t));
/* Return with return code */
return res;
@@ -1417,14 +1419,14 @@ static int cmdInterpret_initEvents(TI_HANDLE hCmdInterpret)
for (i=0; i<IPC_EVENT_MAX; i++)
{
- evParams.uDeliveryType = DELIVERY_PUSH;
- evParams.uProcessID = 0;
- evParams.uEventID = 0;
- evParams.hUserParam = hCmdInterpret;
- evParams.pfEventCallback = cmdInterpret_Event;
- evParams.uEventType = i;
+ evParams.uDeliveryType = DELIVERY_PUSH;
+ evParams.uProcessID = 0;
+ evParams.uEventID = 0;
+ evParams.hUserParam = hCmdInterpret;
+ evParams.pfEventCallback = cmdInterpret_Event;
+ evParams.uEventType = i;
EvHandlerRegisterEvent (pCmdInterpret->hEvHandler, (TI_UINT8*) &evParams, sizeof(IPC_EVENT_PARAMS));
- pCmdInterpret->hEvents[i] = evParams.uEventID;
+ pCmdInterpret->hEvents[i] = evParams.uEventID;
}
return TI_OK;
@@ -1458,10 +1460,9 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
OS_802_11_ASSOCIATION_INFORMATION *assocInformation;
TI_UINT8 *requestIEs;
TI_UINT8 *responseIEs;
- paramInfo_t Param;
union iwreq_data wrqu;
char *memptr;
- int TotalLength,res;
+ int TotalLength, res = TI_OK;
#ifdef XCC_MODULE_INCLUDED
cckm_assocInformation_t cckm_assoc;
unsigned char beaconIE[MAX_BEACON_BODY_LENGTH];
@@ -1472,41 +1473,50 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
/* indicate to the OS */
os_IndicateEvent (pCmdInterpret->hOs, pData);
+
switch (pData->EvParams.uEventType)
{
case IPC_EVENT_ASSOCIATED:
{
+ paramInfo_t *pParam;
+
+ pParam = (paramInfo_t *)os_memoryAlloc(pCmdInterpret->hOs, sizeof(paramInfo_t));
+ if (!pParam)
+ return TI_NOK;
+
/* Get Association information */
/* first check if this is ADHOC or INFRA (to avoid retrieving ASSOC INFO for ADHOC)*/
- Param.paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM;
- cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
- if (Param.content.ctrlDataCurrentBssType == BSS_INFRASTRUCTURE)
+ pParam->paramType = CTRL_DATA_CURRENT_BSS_TYPE_PARAM;
+ cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
+ if (pParam->content.ctrlDataCurrentBssType == BSS_INFRASTRUCTURE)
{
/* First get length of data */
- Param.paramType = ASSOC_ASSOCIATION_INFORMATION_PARAM;
- Param.paramLength = 0;
- res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ pParam->paramType = ASSOC_ASSOCIATION_INFORMATION_PARAM;
+ pParam->paramLength = 0;
+ res = cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
if (res != TI_NOK)
{
- TotalLength = sizeof(OS_802_11_ASSOCIATION_INFORMATION) + Param.content.assocAssociationInformation.RequestIELength +
- Param.content.assocAssociationInformation.ResponseIELength;
+ TotalLength = sizeof(OS_802_11_ASSOCIATION_INFORMATION) + pParam->content.assocAssociationInformation.RequestIELength +
+ pParam->content.assocAssociationInformation.ResponseIELength;
- memptr = os_memoryAlloc (pCmdInterpret->hOs, TotalLength);
+ memptr = os_memoryAlloc(pCmdInterpret->hOs, TotalLength);
- if(!memptr)
- return TI_NOK;
+ if (!memptr) {
+ res = TI_NOK;
+ goto event_end;
+ }
/* Get actual data */
- Param.paramType = ASSOC_ASSOCIATION_INFORMATION_PARAM;
- Param.paramLength = TotalLength;
- cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ pParam->paramType = ASSOC_ASSOCIATION_INFORMATION_PARAM;
+ pParam->paramLength = TotalLength;
+ cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
- os_memoryCopy(pCmdInterpret->hOs, memptr, &Param.content, TotalLength);
+ os_memoryCopy(pCmdInterpret->hOs, memptr, &pParam->content, TotalLength);
assocInformation = (OS_802_11_ASSOCIATION_INFORMATION*)memptr;
requestIEs = (TI_UINT8*)memptr + sizeof(OS_802_11_ASSOCIATION_INFORMATION);
@@ -1527,7 +1537,7 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
wireless_send_event(NETDEV(pCmdInterpret->hOs), IWEVASSOCRESPIE, &wrqu, (char *)responseIEs);
}
- os_memoryFree (pCmdInterpret->hOs, memptr, TotalLength);
+ os_memoryFree(pCmdInterpret->hOs, memptr, TotalLength);
}
}
@@ -1540,17 +1550,21 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
my_current = os_memoryAlloc (pCmdInterpret->hOs,MAX_BEACON_BODY_LENGTH);
- Param.paramType = SITE_MGR_GET_SELECTED_BSSID_INFO_EX;
- Param.content.pSiteMgrSelectedSiteInfo = my_current;
- Param.paramLength = MAX_BEACON_BODY_LENGTH;
- cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ if (!my_current) {
+ res = TI_NOK;
+ goto event_end;
+ }
+ pParam->paramType = SITE_MGR_GET_SELECTED_BSSID_INFO_EX;
+ pParam->content.pSiteMgrSelectedSiteInfo = my_current;
+ pParam->paramLength = MAX_BEACON_BODY_LENGTH;
+ cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
- len = Param.content.pSiteMgrSelectedSiteInfo->IELength - BEACON_HEADER_FIX_SIZE;
+ len = pParam->content.pSiteMgrSelectedSiteInfo->IELength - BEACON_HEADER_FIX_SIZE;
n = sprintf(beaconIE, "BEACONIE=");
for (i = 0; i < len; i++)
{
- n += sprintf(beaconIE + n, "%02x", Param.content.pSiteMgrSelectedSiteInfo->IEs[BEACON_HEADER_FIX_SIZE+i] & 0xff);
+ n += sprintf(beaconIE + n, "%02x", pParam->content.pSiteMgrSelectedSiteInfo->IEs[BEACON_HEADER_FIX_SIZE+i] & 0xff);
}
os_memorySet (pCmdInterpret->hOs,&wrqu, 0, sizeof(wrqu));
@@ -1565,14 +1579,17 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
*/
- Param.paramType = ASSOC_ASSOCIATION_RESP_PARAM;
- Param.paramLength = sizeof(TAssocReqBuffer);
- cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, &Param);
+ pParam->paramType = ASSOC_ASSOCIATION_RESP_PARAM;
+ pParam->paramLength = sizeof(TAssocReqBuffer);
+ cmdDispatch_GetParam(pCmdInterpret->hCmdDispatch, pParam);
cckm_assoc.assocRespLen = Param.content.assocReqBuffer.bufferSize - ASSOC_RESP_FIXED_DATA_LEN ;
cckm_assoc.assocRespBuffer = os_memoryAlloc (pCmdInterpret->hOs, cckm_assoc.assocRespLen);
-
- memcpy(cckm_assoc.assocRespBuffer,(Param.content.assocReqBuffer.buffer)+ASSOC_RESP_FIXED_DATA_LEN,cckm_assoc.assocRespLen);
+ if (!cckm_assoc.assocRespBuffer) {
+ res = TI_NOK;
+ goto event_end;
+ }
+ memcpy(cckm_assoc.assocRespBuffer,(pParam->content.assocReqBuffer.buffer)+ASSOC_RESP_FIXED_DATA_LEN,cckm_assoc.assocRespLen);
wrqu.data.length = cckm_assoc.assocRespLen;
wireless_send_event(NETDEV(pCmdInterpret->hOs), IWEVASSOCRESPIE, &wrqu, (TI_UINT8*)cckm_assoc.assocRespBuffer);
os_memoryFree(pCmdInterpret->hOs,cckm_assoc.assocRespBuffer,cckm_assoc.assocRespLen);
@@ -1581,13 +1598,13 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
/* Send associated event (containing BSSID of AP) */
os_memorySet (pCmdInterpret->hOs,&wrqu, 0, sizeof(wrqu));
- Param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
- cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, &Param );
- MAC_COPY (wrqu.ap_addr.sa_data, Param.content.siteMgrDesiredBSSID);
+ pParam->paramType = SITE_MGR_CURRENT_BSSID_PARAM;
+ cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, pParam );
+ MAC_COPY (wrqu.ap_addr.sa_data, pParam->content.siteMgrDesiredBSSID);
wrqu.ap_addr.sa_family = ARPHRD_ETHER;
wireless_send_event(NETDEV(pCmdInterpret->hOs), SIOCGIWAP, &wrqu, NULL);
-
-
+event_end:
+ os_memoryFree(pCmdInterpret->hOs, pParam, sizeof(paramInfo_t));
}
break;
case IPC_EVENT_DISASSOCIATED:
@@ -1604,27 +1621,27 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
case IPC_EVENT_SCAN_COMPLETE:
{
- TI_UINT8 *buf;
- wrqu.data.length = 0;
- wrqu.data.flags = 0;
- buf = pData->uBuffer;
-
- if (*(TI_UINT32*)buf == SCAN_STATUS_COMPLETE)
- wireless_send_event(NETDEV(pCmdInterpret->hOs), SIOCGIWSCAN, &wrqu, NULL);
- else
- {
+ TI_UINT8 *buf;
+ wrqu.data.length = 0;
+ wrqu.data.flags = 0;
+ buf = pData->uBuffer;
+
+ if (*(TI_UINT32*)buf == SCAN_STATUS_COMPLETE)
+ wireless_send_event(NETDEV(pCmdInterpret->hOs), SIOCGIWSCAN, &wrqu, NULL);
+ else
+ {
if (*(TI_UINT32*)buf == SCAN_STATUS_STOPPED) // scan is stopped successfully
- pData->EvParams.uEventType = IPC_EVENT_SCAN_STOPPED;
+ pData->EvParams.uEventType = IPC_EVENT_SCAN_STOPPED;
else if (*(TI_UINT32*)buf == SCAN_STATUS_FAILED) // scan is stopped successfully
- pData->EvParams.uEventType = IPC_EVENT_SCAN_FAILED;
- else
- break;
-
- os_memorySet (pCmdInterpret->hOs,&wrqu, 0, sizeof(wrqu));
- wrqu.data.length = sizeof(IPC_EV_DATA);
- wireless_send_event(NETDEV(pCmdInterpret->hOs), IWEVCUSTOM, &wrqu, (u8 *)pData);
- }
- }
+ pData->EvParams.uEventType = IPC_EVENT_SCAN_FAILED;
+ else
+ break;
+
+ os_memorySet (pCmdInterpret->hOs,&wrqu, 0, sizeof(wrqu));
+ wrqu.data.length = sizeof(IPC_EV_DATA);
+ wireless_send_event(NETDEV(pCmdInterpret->hOs), IWEVCUSTOM, &wrqu, (u8 *)pData);
+ }
+ }
break;
case IPC_EVENT_MEDIA_SPECIFIC:
@@ -1712,11 +1729,11 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
wrqu.data.length = sizeof(IPC_EV_DATA);
wireless_send_event(NETDEV(pCmdInterpret->hOs), IWEVCUSTOM, &wrqu, (TI_UINT8 *)pData);
}
-
+
break;
}
- return TI_OK;
+ return res;
}
@@ -1724,9 +1741,9 @@ static TI_INT32 cmdInterpret_Event(IPC_EV_DATA* pData)
static int cmdInterpret_setSecurityParams (TI_HANDLE hCmdInterpret)
{
cmdInterpret_t *pCmdInterpret = (cmdInterpret_t *)hCmdInterpret;
- paramInfo_t Param;
+ paramInfo_t *pParam;
int auth_mode, encr_mode;
-
+
/*
printk ("wpa_version=0x%x auth_alg=0x%x key_mgmt=0x%x "
"cipher_pairwise=0x%x cipher_group=0x%x\n",
@@ -1734,6 +1751,9 @@ static int cmdInterpret_setSecurityParams (TI_HANDLE hCmdInterpret)
pCmdInterpret->wai.iw_auth_key_mgmt, pCmdInterpret->wai.iw_auth_cipher_pairwise,
pCmdInterpret->wai.iw_auth_cipher_group);
*/
+ pParam = (paramInfo_t *)os_memoryAlloc(pCmdInterpret->hOs, sizeof(paramInfo_t));
+ if (!pParam)
+ return TI_NOK;
if (pCmdInterpret->wai.iw_auth_wpa_version & IW_AUTH_WPA_VERSION_WPA2)
{
if (pCmdInterpret->wai.iw_auth_key_mgmt & IW_AUTH_KEY_MGMT_802_1X)
@@ -1789,14 +1809,14 @@ static int cmdInterpret_setSecurityParams (TI_HANDLE hCmdInterpret)
break;
}
- Param.paramType = RSN_EXT_AUTHENTICATION_MODE;
- Param.content.rsnExtAuthneticationMode = auth_mode;
- cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, &Param );
-
- Param.paramType = RSN_ENCRYPTION_STATUS_PARAM;
- Param.content.rsnEncryptionStatus = encr_mode;
- cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, &Param );
+ pParam->paramType = RSN_EXT_AUTHENTICATION_MODE;
+ pParam->content.rsnExtAuthneticationMode = auth_mode;
+ cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, pParam );
+ pParam->paramType = RSN_ENCRYPTION_STATUS_PARAM;
+ pParam->content.rsnEncryptionStatus = encr_mode;
+ cmdDispatch_SetParam ( pCmdInterpret->hCmdDispatch, pParam );
+ os_memoryFree(pCmdInterpret->hOs, pParam, sizeof(paramInfo_t));
return TI_OK;
}
@@ -1804,42 +1824,42 @@ static int cmdInterpret_setSecurityParams (TI_HANDLE hCmdInterpret)
void *cmdInterpret_GetStat (TI_HANDLE hCmdInterpret)
{
cmdInterpret_t *pCmdInterpret = (cmdInterpret_t *)hCmdInterpret;
- paramInfo_t Param;
- TI_STATUS res = TI_NOK;
/* Check if driver is initialized - If not - return empty statistics */
if (hCmdInterpret)
{
- Param.paramType = SITE_MGR_GET_STATS;
- res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, &Param );
+ paramInfo_t *pParam;
+ TI_STATUS res;
- CHECK_PENDING_RESULT_RET(res, Param);
+ pParam = (paramInfo_t *)os_memoryAlloc(pCmdInterpret->hOs, sizeof(paramInfo_t));
+ if (!pParam)
+ return NULL;
- if (res == TI_OK)
- {
- pCmdInterpret->wstats.qual.level = (TI_UINT8)Param.content.siteMgrCurrentRssi;
- pCmdInterpret->wstats.qual.updated = IW_QUAL_LEVEL_UPDATED | IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_INVALID | IW_QUAL_DBM;
+ pParam->paramType = SITE_MGR_GET_STATS;
+ res = cmdDispatch_GetParam ( pCmdInterpret->hCmdDispatch, pParam );
- }
- else
- {
- pCmdInterpret->wstats.qual.level = 0;
- pCmdInterpret->wstats.qual.updated = IW_QUAL_ALL_INVALID;
- }
+ if (res == TI_OK)
+ {
+ pCmdInterpret->wstats.qual.level = (TI_UINT8)pParam->content.siteMgrCurrentRssi;
+ pCmdInterpret->wstats.qual.updated = IW_QUAL_LEVEL_UPDATED | IW_QUAL_QUAL_UPDATED | IW_QUAL_NOISE_INVALID | IW_QUAL_DBM;
+ }
+ else
+ {
+ pCmdInterpret->wstats.qual.level = 0;
+ pCmdInterpret->wstats.qual.updated = IW_QUAL_ALL_INVALID;
+ }
pCmdInterpret->wstats.qual.noise = 0;
- pCmdInterpret->wstats.qual.qual = 0;
- pCmdInterpret->wstats.status = 0;
- pCmdInterpret->wstats.miss.beacon = 0;
- pCmdInterpret->wstats.discard.retries = 0; /* Tx : Max MAC retries num reached */
- pCmdInterpret->wstats.discard.nwid = 0; /* Rx : Wrong nwid/essid */
- pCmdInterpret->wstats.discard.code = 0; /* Rx : Unable to code/decode (WEP) */
- pCmdInterpret->wstats.discard.fragment = 0; /* Rx : Can't perform MAC reassembly */
- pCmdInterpret->wstats.discard.misc = 0; /* Others cases */
-
+ pCmdInterpret->wstats.qual.qual = 0;
+ pCmdInterpret->wstats.status = 0;
+ pCmdInterpret->wstats.miss.beacon = 0;
+ pCmdInterpret->wstats.discard.retries = 0; /* Tx : Max MAC retries num reached */
+ pCmdInterpret->wstats.discard.nwid = 0; /* Rx : Wrong nwid/essid */
+ pCmdInterpret->wstats.discard.code = 0; /* Rx : Unable to code/decode (WEP) */
+ pCmdInterpret->wstats.discard.fragment = 0; /* Rx : Can't perform MAC reassembly */
+ pCmdInterpret->wstats.discard.misc = 0; /* Others cases */
+ os_memoryFree(pCmdInterpret->hOs, pParam, sizeof(paramInfo_t));
return &pCmdInterpret->wstats;
}
return (void *)NULL;
}
-
-
diff --git a/wl1271/platforms/os/linux/src/RxBuf.c b/wl1271/platforms/os/linux/src/RxBuf.c
index 58481ac1..61972928 100644
--- a/wl1271/platforms/os/linux/src/RxBuf.c
+++ b/wl1271/platforms/os/linux/src/RxBuf.c
@@ -46,20 +46,18 @@
* Allocate BUF Rx packets.
* Add 16 bytes before the data buffer for WSPI overhead!
*/
-void* RxBufAlloc(TI_HANDLE hOs, TI_UINT32 len,PacketClassTag_e ePacketClassTag)
+void *RxBufAlloc(TI_HANDLE hOs, TI_UINT32 len,PacketClassTag_e ePacketClassTag)
{
- rx_head_t *rx_head;
- TI_UINT32 alloc_len = len + WSPI_PAD_BYTES + PAYLOAD_ALIGN_PAD_BYTES + RX_HEAD_LEN_ALIGNED;
- struct sk_buff *skb = alloc_skb (alloc_len, GFP_ATOMIC);
-
- if(skb == NULL){
- printk("RxBufAlloc(): alloc_skb failed\n");
- return NULL;
- }
- rx_head = (rx_head_t *)skb->head;
+ TI_UINT32 alloc_len = len + WSPI_PAD_BYTES + PAYLOAD_ALIGN_PAD_BYTES + RX_HEAD_LEN_ALIGNED;
+ struct sk_buff *skb;
+ rx_head_t *rx_head;
+ skb = alloc_skb(alloc_len, GFP_ATOMIC);
+ if (!skb)
+ return NULL;
+ rx_head = (rx_head_t *)skb->head;
rx_head->skb = skb;
- skb_reserve(skb, RX_HEAD_LEN_ALIGNED+WSPI_PAD_BYTES);
+ skb_reserve(skb, RX_HEAD_LEN_ALIGNED + WSPI_PAD_BYTES);
/*
printk("-->> RxBufAlloc(len=%d) skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n",
(int)len, (int)skb, (int)skb->data, (int)skb->head, (int)skb->len);
@@ -70,28 +68,27 @@ void* RxBufAlloc(TI_HANDLE hOs, TI_UINT32 len,PacketClassTag_e ePacketClassTag)
/*--------------------------------------------------------------------------------------*/
-inline void RxBufFree(TI_HANDLE hOs, void* pBuf)
+inline void RxBufFree(TI_HANDLE hOs, void *pBuf)
{
- unsigned char *pdata = (unsigned char *)((TI_UINT32)pBuf & ~(TI_UINT32)0x3);
+ unsigned char *pdata = (unsigned char *)((TI_UINT32)pBuf & ~(TI_UINT32)0x3);
rx_head_t *rx_head = (rx_head_t *)(pdata - WSPI_PAD_BYTES - RX_HEAD_LEN_ALIGNED);
struct sk_buff *skb = rx_head->skb;
-
#ifdef TI_DBG
- if ((TI_UINT32)pBuf & 0x3)
- {
- if ((TI_UINT32)pBuf - (TI_UINT32)skb->data != 2)
- {
- printk("RxBufFree() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pBuf);
- }
- }
- else
- {
- if ((TI_UINT32)skb->data != (TI_UINT32)pBuf)
- {
- printk("RxBufFree() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pBuf);
- }
- }
+ if ((TI_UINT32)pBuf & 0x3)
+ {
+ if ((TI_UINT32)pBuf - (TI_UINT32)skb->data != 2)
+ {
+ printk("RxBufFree() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pBuf);
+ }
+ }
+ else
+ {
+ if ((TI_UINT32)skb->data != (TI_UINT32)pBuf)
+ {
+ printk("RxBufFree() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pBuf);
+ }
+ }
#endif
/*
printk("-->> RxBufFree() skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n",
@@ -99,7 +96,3 @@ inline void RxBufFree(TI_HANDLE hOs, void* pBuf)
*/
dev_kfree_skb(skb);
}
-
-
-
-
diff --git a/wl1271/platforms/os/linux/src/WlanDrvIf.c b/wl1271/platforms/os/linux/src/WlanDrvIf.c
index c0803a4f..ab322c7b 100644
--- a/wl1271/platforms/os/linux/src/WlanDrvIf.c
+++ b/wl1271/platforms/os/linux/src/WlanDrvIf.c
@@ -55,8 +55,6 @@
#include <linux/etherdevice.h>
#include <linux/delay.h>
#include <linux/netlink.h>
-#include <linux/version.h>
-
#include "WlanDrvIf.h"
#include "osApi.h"
@@ -73,12 +71,15 @@
#include "tracebuf_api.h"
#endif
/* PM hooks */
-#ifdef CONFIG_PM
+#ifdef TI_CONFIG_PM_HOOKS
#include "SdioDrv.h"
static int wlanDrvIf_pm_resume(void);
static int wlanDrvIf_pm_suspend(void);
#endif
#include "bmtrace_api.h"
+#ifdef STACK_PROFILE
+#include "stack_profile.h"
+#endif
/* save driver handle just for module cleanup */
static TWlanDrvIfObj *pDrvStaticHandle;
@@ -89,9 +90,30 @@ static TWlanDrvIfObj *pDrvStaticHandle;
MODULE_DESCRIPTION("TI WLAN Embedded Station Driver");
MODULE_LICENSE("GPL");
-/* linux/irq.h declarations */
-extern void disable_irq(unsigned int);
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 31))
+static int wlanDrvIf_Xmit(struct sk_buff *skb, struct net_device *dev);
+static int wlanDrvIf_XmitDummy(struct sk_buff *skb, struct net_device *dev);
+static struct net_device_stats *wlanDrvIf_NetGetStat(struct net_device *dev);
+int wlanDrvIf_Open(struct net_device *dev);
+int wlanDrvIf_Release(struct net_device *dev);
+
+static struct net_device_ops tiwlan_ops_pri = {
+ .ndo_open = wlanDrvIf_Open,
+ .ndo_stop = wlanDrvIf_Release,
+ .ndo_get_stats = wlanDrvIf_NetGetStat,
+ .ndo_do_ioctl = NULL,
+ .ndo_start_xmit = wlanDrvIf_Xmit,
+};
+
+static struct net_device_ops tiwlan_ops_dummy = {
+ .ndo_open = wlanDrvIf_Open,
+ .ndo_stop = wlanDrvIf_Release,
+ .ndo_get_stats = wlanDrvIf_NetGetStat,
+ .ndo_do_ioctl = NULL,
+ .ndo_start_xmit = wlanDrvIf_XmitDummy,
+};
+#endif
/**
* \fn wlanDrvIf_Xmit
@@ -110,43 +132,43 @@ extern void disable_irq(unsigned int);
*/
static int wlanDrvIf_Xmit (struct sk_buff *skb, struct net_device *dev)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
- TTxCtrlBlk * pPktCtrlBlk;
- int status;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+ TTxCtrlBlk * pPktCtrlBlk;
+ int status;
- CL_TRACE_START_L1();
+ CL_TRACE_START_L1();
- os_profile (drv, 0, 0);
- drv->stats.tx_packets++;
- drv->stats.tx_bytes += skb->len;
+ os_profile (drv, 0, 0);
+ drv->stats.tx_packets++;
+ drv->stats.tx_bytes += skb->len;
- /* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */
- pPktCtrlBlk = TWD_txCtrlBlk_Alloc (drv->tCommon.hTWD);
+ /* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */
+ pPktCtrlBlk = TWD_txCtrlBlk_Alloc (drv->tCommon.hTWD);
- pPktCtrlBlk->tTxDescriptor.startTime = os_timeStampMs(drv); /* remove use of skb->tstamp.off_usec */
- pPktCtrlBlk->tTxDescriptor.length = skb->len;
- pPktCtrlBlk->tTxPktParams.pInputPkt = skb;
+ pPktCtrlBlk->tTxDescriptor.startTime = os_timeStampMs(drv); /* remove use of skb->tstamp.off_usec */
+ pPktCtrlBlk->tTxDescriptor.length = skb->len;
+ pPktCtrlBlk->tTxPktParams.pInputPkt = skb;
- /* Point the first BDL buffer to the Ethernet header, and the second buffer to the rest of the packet */
- pPktCtrlBlk->tTxnStruct.aBuf[0] = skb->data;
- pPktCtrlBlk->tTxnStruct.aLen[0] = ETHERNET_HDR_LEN;
- pPktCtrlBlk->tTxnStruct.aBuf[1] = skb->data + ETHERNET_HDR_LEN;
- pPktCtrlBlk->tTxnStruct.aLen[1] = (TI_UINT16)skb->len - ETHERNET_HDR_LEN;
- pPktCtrlBlk->tTxnStruct.aLen[2] = 0;
+ /* Point the first BDL buffer to the Ethernet header, and the second buffer to the rest of the packet */
+ pPktCtrlBlk->tTxnStruct.aBuf[0] = skb->data;
+ pPktCtrlBlk->tTxnStruct.aLen[0] = ETHERNET_HDR_LEN;
+ pPktCtrlBlk->tTxnStruct.aBuf[1] = skb->data + ETHERNET_HDR_LEN;
+ pPktCtrlBlk->tTxnStruct.aLen[1] = (TI_UINT16)skb->len - ETHERNET_HDR_LEN;
+ pPktCtrlBlk->tTxnStruct.aLen[2] = 0;
- /* Send the packet to the driver for transmission. */
- status = txDataQ_InsertPacket (drv->tCommon.hTxDataQ, pPktCtrlBlk,(TI_UINT8)skb->priority);
+ /* Send the packet to the driver for transmission. */
+ status = txDataQ_InsertPacket (drv->tCommon.hTxDataQ, pPktCtrlBlk,(TI_UINT8)skb->priority);
- /* If failed (queue full or driver not running), drop the packet. */
+ /* If failed (queue full or driver not running), drop the packet. */
if (status != TI_OK)
{
drv->stats.tx_errors++;
}
- os_profile (drv, 1, 0);
+ os_profile (drv, 1, 0);
- CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "TX", "");
+ CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "TX", "");
- return 0;
+ return 0;
}
/*--------------------------------------------------------------------------------------*/
/**
@@ -186,8 +208,8 @@ void wlanDrvIf_FreeTxPacket (TI_HANDLE hOs, TTxCtrlBlk *pPktCtrlBlk, TI_STATUS e
*/
static int wlanDrvIf_XmitDummy (struct sk_buff *skb, struct net_device *dev)
{
- /* Just return error. The driver is not running (network stack frees the packet) */
- return -ENODEV;
+ /* Just return error. The driver is not running (network stack frees the packet) */
+ return -ENODEV;
}
@@ -204,10 +226,10 @@ static int wlanDrvIf_XmitDummy (struct sk_buff *skb, struct net_device *dev)
*/
static struct net_device_stats *wlanDrvIf_NetGetStat (struct net_device *dev)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
- ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_NetGetStat()\n");
-
- return &drv->stats;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+ ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_NetGetStat()\n");
+
+ return &drv->stats;
}
@@ -226,18 +248,21 @@ static struct net_device_stats *wlanDrvIf_NetGetStat (struct net_device *dev)
*/
void wlanDrvIf_UpdateDriverState (TI_HANDLE hOs, EDriverSteadyState eDriverState)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
- ti_dprintf(TIWLAN_LOG_OTHER, "wlanDrvIf_UpdateDriverState(): State = %d\n", eDriverState);
+ ti_dprintf(TIWLAN_LOG_OTHER, "wlanDrvIf_UpdateDriverState(): State = %d\n", eDriverState);
- /* Save the new state */
- drv->tCommon.eDriverState = eDriverState;
+ /* Save the new state */
+ drv->tCommon.eDriverState = eDriverState;
- /* If the new state is not RUNNING, replace the Tx handler to a dummy one. */
- if (eDriverState != DRV_STATE_RUNNING)
- {
- drv->netdev->hard_start_xmit = wlanDrvIf_XmitDummy;
- }
+ /* If the new state is not RUNNING, replace the Tx handler to a dummy one. */
+ if (eDriverState != DRV_STATE_RUNNING) {
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
+ drv->netdev->hard_start_xmit = wlanDrvIf_XmitDummy;
+#else
+ drv->netdev->netdev_ops = &tiwlan_ops_dummy;
+#endif
+ }
}
@@ -257,11 +282,11 @@ void wlanDrvIf_UpdateDriverState (TI_HANDLE hOs, EDriverSteadyState eDriverState
*/
irqreturn_t wlanDrvIf_HandleInterrupt (int irq, void *hDrv, struct pt_regs *cpu_regs)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
- TWD_InterruptRequest (drv->tCommon.hTWD);
+ TWD_InterruptRequest (drv->tCommon.hTWD);
- return IRQ_HANDLED;
+ return IRQ_HANDLED;
}
@@ -280,10 +305,10 @@ irqreturn_t wlanDrvIf_HandleInterrupt (int irq, void *hDrv, struct pt_regs *cpu_
#ifdef PRIODIC_INTERRUPT
static void wlanDrvIf_PollIrqHandler (TI_HANDLE parm)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)parm;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)parm;
- wlanDrvIf_HandleInterrupt (0, drv, NULL);
- os_periodicIntrTimerStart (drv);
+ wlanDrvIf_HandleInterrupt (0, drv, NULL);
+ os_periodicIntrTimerStart (drv);
}
#endif
@@ -301,54 +326,51 @@ static void wlanDrvIf_PollIrqHandler (TI_HANDLE parm)
* \param hDrv - The driver object handle
* \return void
* \sa
- */
+ */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
static void wlanDrvIf_DriverTask (void *hDrv)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hDrv;
#else
static void wlanDrvIf_DriverTask(struct work_struct *work)
{
- TWlanDrvIfObj *drv = container_of(work, TWlanDrvIfObj, tWork);
+#ifdef STACK_PROFILE
+ register unsigned long sp asm ("sp");
+ unsigned long local_sp = sp;
+#endif
+ TWlanDrvIfObj *drv = container_of(work, TWlanDrvIfObj, tWork);
#endif
#ifdef STACK_PROFILE
- unsigned int curr1,base1;
- unsigned int curr2,base2;
- static unsigned int maximum_stack = 0;
+ unsigned long curr1, base1;
+ unsigned long curr2, base2;
+ static unsigned long maximum_stack = 0;
#endif
-
-
- os_profile (drv, 0, 0);
+ os_profile (drv, 0, 0);
#ifdef STACK_PROFILE
- curr1 = check_stack_start(&base1);
+ curr1 = check_stack_start(&base1, local_sp + 4, 0);
#endif
+ /* Call the driver main task */
+ context_DriverTask (drv->tCommon.hContext);
- /* Call the driver main task */
- context_DriverTask (drv->tCommon.hContext);
-
- os_wake_lock_timeout(drv);
- os_wake_unlock(drv);
-
+ os_profile (drv, 1, 0);
+ os_wake_lock_timeout(drv);
+ os_wake_unlock(drv);
#ifdef STACK_PROFILE
- curr2 = check_stack_stop(&base2);
- if (base2 == base1)
- {
- /* if the current measurement is bigger then the maximum store it and print*/
- if ((curr1 - curr2) > maximum_stack)
- {
- printk("STACK PROFILER GOT THE LOCAL MAXIMMUM!!!! \n");
- printk("current operation stack use =%d \n",(curr1 - curr2));
- printk("total stack use=%d \n",8192 - curr2 + base2);
- printk("total stack usage= %d percent \n",100 * (8192 - curr2 + base2) / 8192);
+ curr2 = check_stack_stop(&base2, 0);
+ if (base2 == base1) {
+ /* if the current measurement is bigger then the maximum store it and print*/
+ if ((curr1 - curr2) > maximum_stack) {
+ printk("STACK PROFILER GOT THE LOCAL MAXIMMUM!!!! \n");
+ printk("current operation stack use=%lu \n",(curr1 - curr2));
+ printk("total stack use=%lu \n",8192 - curr2 + base2);
+ printk("total stack usage=%lu percent \n",100 * (8192 - curr2 + base2) / 8192);
maximum_stack = curr1 - curr2;
- }
- }
+ }
+ }
#endif
-
- os_profile (drv, 1, 0);
}
@@ -404,7 +426,7 @@ int wlanDrvIf_LoadFiles (TWlanDrvIfObj *drv, TLoaderFilesData *pInitFiles)
drv->tCommon.tNvsImage.uSize = pInitFiles->uNvsFileLength;
drv->tCommon.tNvsImage.pImage = kmalloc (drv->tCommon.tNvsImage.uSize, GFP_KERNEL);
#ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n",
+ os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n",
__FUNCTION__, __LINE__, drv->tCommon.tNvsImage.uSize, GFP_KERNEL, drv->tCommon.tNvsImage.uSize);
#endif
if (!drv->tCommon.tNvsImage.pImage)
@@ -423,7 +445,7 @@ int wlanDrvIf_LoadFiles (TWlanDrvIfObj *drv, TLoaderFilesData *pInitFiles)
}
drv->tCommon.tFwImage.pImage = os_memoryAlloc (drv, drv->tCommon.tFwImage.uSize);
#ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n",
+ os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n",
__FUNCTION__, __LINE__, drv->tCommon.tFwImage.uSize, GFP_KERNEL, drv->tCommon.tFwImage.uSize);
#endif
if (!drv->tCommon.tFwImage.pImage)
@@ -581,10 +603,10 @@ int wlanDrvIf_GetFile (TI_HANDLE hOs, TFileInfo *pFileInfo)
*/
void wlanDrvIf_SetMacAddress (TI_HANDLE hOs, TI_UINT8 *pMacAddr)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)hOs;
- /* Copy STA MAC address to the network interface structure */
- MAC_COPY (drv->netdev->dev_addr, pMacAddr);
+ /* Copy STA MAC address to the network interface structure */
+ MAC_COPY (drv->netdev->dev_addr, pMacAddr);
}
@@ -603,57 +625,58 @@ void wlanDrvIf_SetMacAddress (TI_HANDLE hOs, TI_UINT8 *pMacAddr)
*/
int wlanDrvIf_Start (struct net_device *dev)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
-
- ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Start()\n");
-
- if (!drv->tCommon.hDrvMain)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Start() Driver not created!\n");
- return -ENODEV;
- }
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+ ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Start()\n");
+ printk("%s\n", __func__);
+ if (!drv->tCommon.hDrvMain) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Start() Driver not created!\n");
+ return -ENODEV;
+ }
- /*
- * Insert Start command in DrvMain action queue, request driver scheduling
- * and wait for action completion (all init process).
- */
- os_wake_lock_timeout_enable(drv);
- drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_START);
-
- return 0;
+ /*
+ * Insert Start command in DrvMain action queue, request driver scheduling
+ * and wait for action completion (all init process).
+ */
+ os_wake_lock_timeout_enable(drv);
+ drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_START);
+ return 0;
}
int wlanDrvIf_Open (struct net_device *dev)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
-
- ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Open()\n");
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
- if (!drv->tCommon.hDrvMain)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Open() Driver not created!\n");
- return -ENODEV;
- }
+ ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Open()\n");
+ printk("%s\n", __func__);
+ if (!drv->tCommon.hDrvMain) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Open() Driver not created!\n");
+ return -ENODEV;
+ }
if (drv->tCommon.eDriverState == DRV_STATE_STOPPED ||
drv->tCommon.eDriverState == DRV_STATE_IDLE) {
wlanDrvIf_Start(dev);
}
- /*
- * Finalize network interface setup
- */
- drv->netdev->hard_start_xmit = wlanDrvIf_Xmit;
- drv->netdev->addr_len = MAC_ADDR_LEN;
- netif_start_queue (dev);
-
- /* register 3430 PM hooks in our SDIO driver */
-#ifdef CONFIG_PM
- sdioDrv_register_pm(wlanDrvIf_pm_resume, wlanDrvIf_pm_suspend);
+ /*
+ * Finalize network interface setup
+ */
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
+ drv->netdev->hard_start_xmit = wlanDrvIf_Xmit;
+#else
+ drv->netdev->netdev_ops = &tiwlan_ops_pri;
#endif
+ drv->netdev->addr_len = MAC_ADDR_LEN;
+ netif_start_queue (dev);
- return 0;
+ /* register 3430 PM hooks in our SDIO driver */
+#ifdef TI_CONFIG_PM_HOOKS
+#ifndef CONFIG_MMC_EMBEDDED_SDIO
+ sdioDrv_register_pm(wlanDrvIf_pm_resume, wlanDrvIf_pm_suspend);
+#endif
+#endif
+ return 0;
}
/**
@@ -671,31 +694,32 @@ int wlanDrvIf_Open (struct net_device *dev)
*/
int wlanDrvIf_Stop (struct net_device *dev)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
-
- ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Stop()\n");
-
- /*
- * Insert Stop command in DrvMain action queue, request driver scheduling
- * and wait for Stop process completion.
- */
- os_wake_lock_timeout_enable(drv);
- drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_STOP);
-
- return 0;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+
+ ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Stop()\n");
+ printk("%s\n", __func__);
+ /*
+ * Insert Stop command in DrvMain action queue, request driver scheduling
+ * and wait for Stop process completion.
+ */
+ os_wake_lock_timeout_enable(drv);
+ drvMain_InsertAction (drv->tCommon.hDrvMain, ACTION_TYPE_STOP);
+ return 0;
}
int wlanDrvIf_Release (struct net_device *dev)
{
- ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Release()\n");
+ /* TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev); */
- /* Disable network interface queue */
- netif_stop_queue (dev);
- return 0;
+ ti_dprintf (TIWLAN_LOG_OTHER, "wlanDrvIf_Release()\n");
+ printk("%s\n", __func__);
+ /* Disable network interface queue */
+ netif_stop_queue (dev);
+ return 0;
}
/* 3430 PM hooks */
-#ifdef CONFIG_PM
+#ifdef TI_CONFIG_PM_HOOKS
static int wlanDrvIf_pm_resume(void)
{
return(wlanDrvIf_Open(pDrvStaticHandle->netdev));
@@ -722,57 +746,56 @@ static int wlanDrvIf_pm_suspend(void)
*/
static int wlanDrvIf_SetupNetif (TWlanDrvIfObj *drv)
{
- struct net_device *dev;
- int res;
-
- /* Allocate network interface structure for the driver */
- dev = alloc_etherdev (0);
- if (dev == NULL)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "alloc_etherdev() failed\n");
- return -ENOMEM;
- }
+ struct net_device *dev;
+ int res;
+
+ /* Allocate network interface structure for the driver */
+ dev = alloc_etherdev (0);
+ if (dev == NULL) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "alloc_etherdev() failed\n");
+ return -ENOMEM;
+ }
- /* Setup the network interface */
- ether_setup (dev);
+ /* Setup the network interface */
+ ether_setup (dev);
+ NETDEV_SET_PRIVATE(dev,drv);
+ drv->netdev = dev;
+ strcpy (dev->name, TIWLAN_DRV_IF_NAME);
+ netif_carrier_off (dev);
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 31))
/* the following is required on at least BSP 23.8 and higher.
Without it, the Open function of the driver will not be called
when trying to 'ifconfig up' the interface */
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
- dev->validate_addr = NULL;
+ dev->validate_addr = NULL;
+#endif
+ dev->open = wlanDrvIf_Open;
+ dev->stop = wlanDrvIf_Release;
+ dev->hard_start_xmit = wlanDrvIf_XmitDummy;
+ dev->get_stats = wlanDrvIf_NetGetStat;
+ dev->do_ioctl = NULL;
+#else
+ dev->netdev_ops = &tiwlan_ops_dummy;
#endif
+ dev->tx_queue_len = 100;
- NETDEV_SET_PRIVATE(dev,drv);
- drv->netdev = dev;
- strcpy (dev->name, TIWLAN_DRV_IF_NAME);
- netif_carrier_off (dev);
- dev->open = wlanDrvIf_Open;
- dev->stop = wlanDrvIf_Release;
- dev->hard_start_xmit = wlanDrvIf_XmitDummy;
- dev->get_stats = wlanDrvIf_NetGetStat;
- dev->tx_queue_len = 100;
- dev->do_ioctl = NULL;
-
- /* Initialize Wireless Extensions interface (WEXT) */
- wlanDrvWext_Init (dev);
-
- res = register_netdev (dev);
- if (res != 0)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "register_netdev() failed : %d\n", res);
- kfree (dev);
- return res;
- }
+ /* Initialize Wireless Extensions interface (WEXT) */
+ wlanDrvWext_Init (dev);
+ res = register_netdev (dev);
+ if (res != 0) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "register_netdev() failed : %d\n", res);
+ kfree (dev);
+ return res;
+ }
/*
On the latest Kernel there is no more support for the below macro.
*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
- SET_MODULE_OWNER (dev);
+ SET_MODULE_OWNER (dev);
#endif
-
- return 0;
+ return 0;
}
/**
@@ -790,8 +813,8 @@ On the latest Kernel there is no more support for the below macro.
*/
void wlanDrvIf_CommandDone (TI_HANDLE hOs, void *pSignalObject, TI_UINT8 *CmdResp_p)
{
- /* Free semaphore */
- os_SignalObjectSet (hOs, pSignalObject);
+ /* Free semaphore */
+ os_SignalObjectSet (hOs, pSignalObject);
}
@@ -811,98 +834,124 @@ void wlanDrvIf_CommandDone (TI_HANDLE hOs, void *pSignalObject, TI_UINT8 *CmdRes
*/
static int wlanDrvIf_Create (void)
{
- TWlanDrvIfObj *drv;
- int rc;
+ TWlanDrvIfObj *drv; /* Dm: Failure is not cleaned properly !!! */
+ int rc;
- /* Allocate driver's structure */
- drv = kmalloc (sizeof(TWlanDrvIfObj), GFP_KERNEL);
- if (!drv)
- {
- return -ENOMEM;
- }
+ /* Allocate driver's structure */
+ drv = kmalloc (sizeof(TWlanDrvIfObj), GFP_KERNEL);
+ if (!drv) {
+ return -ENOMEM;
+ }
#ifdef TI_DBG
tb_init(TB_OPTION_NONE);
#endif
- pDrvStaticHandle = drv; /* save for module destroy */
- #ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n", __FUNCTION__, __LINE__, sizeof(TWlanDrvIfObj), GFP_KERNEL, sizeof(TWlanDrvIfObj));
- #endif
- memset (drv, 0, sizeof(TWlanDrvIfObj));
-
- drv->irq = TNETW_IRQ;
- drv->tCommon.eDriverState = DRV_STATE_IDLE;
+ pDrvStaticHandle = drv; /* save for module destroy */
+#ifdef TI_MEM_ALLOC_TRACE
+ os_printf ("MTT:%s:%d ::kmalloc(%lu, %x) : %lu\n", __FUNCTION__, __LINE__, sizeof(TWlanDrvIfObj), GFP_KERNEL, sizeof(TWlanDrvIfObj));
+#endif
+ memset (drv, 0, sizeof(TWlanDrvIfObj));
- drv->pWorkQueue = create_singlethread_workqueue (TIWLAN_DRV_NAME);
- if (!drv->pWorkQueue)
- {
- return -ENOMEM;
- }
+ /* Dm: drv->irq = TNETW_IRQ; */
+ drv->tCommon.eDriverState = DRV_STATE_IDLE;
- drv->wl_packet = 0;
- drv->wl_count = 0;
+ drv->tiwlan_wq = create_freezeable_workqueue(DRIVERWQ_NAME);
+ if (!drv->tiwlan_wq) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Create(): Failed to create workQ!\n");
+ rc = -EINVAL;
+ goto drv_create_end_1;
+ }
+ drv->wl_packet = 0;
+ drv->wl_count = 0;
#ifdef CONFIG_HAS_WAKELOCK
- wake_lock_init(&drv->wl_wifi, WAKE_LOCK_SUSPEND, "wifi_wake");
- wake_lock_init(&drv->wl_rxwake, WAKE_LOCK_SUSPEND, "wifi_rx_wake");
+ wake_lock_init(&drv->wl_wifi, WAKE_LOCK_SUSPEND, "wifi_wake");
+ wake_lock_init(&drv->wl_rxwake, WAKE_LOCK_SUSPEND, "wifi_rx_wake");
#endif
-
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
- INIT_WORK(&drv->tWork, wlanDrvIf_DriverTask, (void *)drv);
+ INIT_WORK(&drv->tWork, wlanDrvIf_DriverTask, (void *)drv);
#else
- INIT_WORK(&drv->tWork, wlanDrvIf_DriverTask);
+ INIT_WORK(&drv->tWork, wlanDrvIf_DriverTask);
#endif
- spin_lock_init (&drv->lock);
+ spin_lock_init (&drv->lock);
- /* Setup driver network interface. */
- rc = wlanDrvIf_SetupNetif (drv);
- if (rc)
- {
- kfree (drv);
- return rc;
- }
-
+ /* Setup driver network interface. */
+ rc = wlanDrvIf_SetupNetif (drv);
+ if (rc) {
+ goto drv_create_end_2;
+ }
- /* Create the events socket interface */
+ /* Create the events socket interface */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
drv->wl_sock = netlink_kernel_create( NETLINK_USERSOCK, 0, NULL, THIS_MODULE );
#else
- drv->wl_sock = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 0, NULL, NULL, THIS_MODULE );
+ drv->wl_sock = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 0, NULL, NULL, THIS_MODULE );
#endif
- if (drv->wl_sock == NULL)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "netlink_kernel_create() failed !\n");
- return -EINVAL;
- }
+ if (drv->wl_sock == NULL) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "netlink_kernel_create() failed !\n");
+ rc = -EINVAL;
+ goto drv_create_end_3;
+ }
- /* Create all driver modules and link their handles */
- drvMain_Create (drv,
- &drv->tCommon.hDrvMain,
- &drv->tCommon.hCmdHndlr,
- &drv->tCommon.hContext,
- &drv->tCommon.hTxDataQ,
- &drv->tCommon.hTxMgmtQ,
- &drv->tCommon.hTxCtrl,
- &drv->tCommon.hTWD,
+ /* Create all driver modules and link their handles */
+ rc = drvMain_Create (drv,
+ &drv->tCommon.hDrvMain,
+ &drv->tCommon.hCmdHndlr,
+ &drv->tCommon.hContext,
+ &drv->tCommon.hTxDataQ,
+ &drv->tCommon.hTxMgmtQ,
+ &drv->tCommon.hTxCtrl,
+ &drv->tCommon.hTWD,
&drv->tCommon.hEvHandler,
&drv->tCommon.hCmdDispatch,
- &drv->tCommon.hReport);
-
- /*
- * Initialize interrupts (or polling mode for debug):
- */
+ &drv->tCommon.hReport);
+ if (rc != TI_OK) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "%s: Failed to dvrMain_Create!\n", __func__);
+ rc = -EINVAL;
+ goto drv_create_end_4;
+ }
+ /*
+ * Initialize interrupts (or polling mode for debug):
+ */
#ifdef PRIODIC_INTERRUPT
- /* Debug mode: Polling (the timer is started by HwInit process) */
- drv->hPollTimer = os_timerCreate ((TI_HANDLE)drv, wlanDrvIf_PollIrqHandler, (TI_HANDLE)drv);
+ /* Debug mode: Polling (the timer is started by HwInit process) */
+ drv->hPollTimer = os_timerCreate ((TI_HANDLE)drv, wlanDrvIf_PollIrqHandler, (TI_HANDLE)drv);
#else
- /* Normal mode: Interrupts (the default mode) */
- rc = hPlatform_initInterrupt (drv, (void*)wlanDrvIf_HandleInterrupt);
- if (rc)
- {
- ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Create(): Failed to register interrupt handler!\n");
- return rc;
- }
+ /* Normal mode: Interrupts (the default mode) */
+ rc = hPlatform_initInterrupt (drv, (void*)wlanDrvIf_HandleInterrupt);
+ if (rc) {
+ ti_dprintf (TIWLAN_LOG_ERROR, "wlanDrvIf_Create(): Failed to register interrupt handler!\n");
+ goto drv_create_end_5;
+ }
#endif /* PRIODIC_INTERRUPT */
+ return 0;
+drv_create_end_5:
+ /* Destroy all driver modules */
+ if (drv->tCommon.hDrvMain) {
+ drvMain_Destroy (drv->tCommon.hDrvMain);
+ }
+drv_create_end_4:
+ if (drv->wl_sock) {
+ sock_release (drv->wl_sock->sk_socket);
+ }
+
+drv_create_end_3:
+ /* Release the driver network interface */
+ if (drv->netdev) {
+ unregister_netdev (drv->netdev);
+ free_netdev (drv->netdev);
+ }
+
+drv_create_end_2:
+#ifdef CONFIG_HAS_WAKELOCK
+ wake_lock_destroy(&drv->wl_wifi);
+ wake_lock_destroy(&drv->wl_rxwake);
+#endif
+ if (drv->tiwlan_wq)
+ destroy_workqueue(drv->tiwlan_wq);
- return 0;
+drv_create_end_1:
+ kfree(drv);
+ printk("%s: Fail\n", __func__);
+ return rc;
}
@@ -923,84 +972,79 @@ static int wlanDrvIf_Create (void)
*/
static void wlanDrvIf_Destroy (TWlanDrvIfObj *drv)
{
- if(!drv)
- return;
-
- /* Release the driver network interface */
- if (drv->netdev)
- {
- netif_stop_queue (drv->netdev);
- wlanDrvIf_Stop (drv->netdev);
- unregister_netdev (drv->netdev);
- }
+ if (!drv)
+ return;
- cancel_work_sync (&drv->tWork);
+ if (drv->tiwlan_wq) {
+ cancel_work_sync(&drv->tWork);
+ flush_workqueue(drv->tiwlan_wq);
+ }
- flush_workqueue (drv->pWorkQueue);
- destroy_workqueue (drv->pWorkQueue);
+ /* Release the driver network interface */
+ if (drv->netdev) {
+ netif_stop_queue (drv->netdev);
+ wlanDrvIf_Stop (drv->netdev);
+ unregister_netdev (drv->netdev);
+ free_netdev (drv->netdev);
+ }
/* Destroy all driver modules */
- if (drv->tCommon.hDrvMain)
- {
- drvMain_Destroy (drv->tCommon.hDrvMain);
- }
-
- /* close the ipc_kernel socket*/
- if (drv && drv->wl_sock)
- {
- sock_release (drv->wl_sock->sk_socket);
- }
+ if (drv->tCommon.hDrvMain) {
+ drvMain_Destroy (drv->tCommon.hDrvMain);
+ }
- /* Release the driver interrupt (or polling timer) */
+ /* close the ipc_kernel socket*/
+ if (drv && drv->wl_sock) {
+ sock_release (drv->wl_sock->sk_socket);
+ }
+ /* Release the driver interrupt (or polling timer) */
#ifdef PRIODIC_INTERRUPT
- os_timerDestroy (drv, drv->hPollTimer);
+ os_timerDestroy (drv, drv->hPollTimer);
#else
- if (drv->irq)
- {
- set_irq_wake(drv->irq, 0);
- free_irq (drv->irq, drv);
- hPlatform_freeInterrupt ();
- }
+ if (drv->irq) {
+ hPlatform_freeInterrupt(drv);
+ }
#endif
+ if (drv->tiwlan_wq)
+ destroy_workqueue(drv->tiwlan_wq);
#ifdef CONFIG_HAS_WAKELOCK
- wake_lock_destroy(&drv->wl_wifi);
- wake_lock_destroy(&drv->wl_rxwake);
+ wake_lock_destroy(&drv->wl_wifi);
+ wake_lock_destroy(&drv->wl_rxwake);
#endif
-
- /*
- * Free init files memory
- */
- if (drv->tCommon.tFwImage.pImage)
- {
- os_memoryFree (drv, drv->tCommon.tFwImage.pImage, drv->tCommon.tFwImage.uSize);
- #ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
- __FUNCTION__, __LINE__, drv->tCommon.tFwImage.uSize, -drv->tCommon.tFwImage.uSize);
- #endif
- }
- if (drv->tCommon.tNvsImage.pImage)
- {
- kfree (drv->tCommon.tNvsImage.pImage);
- #ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
- __FUNCTION__, __LINE__, drv->tCommon.tNvsImage.uSize, -drv->tCommon.tNvsImage.uSize);
- #endif
- }
- if (drv->tCommon.tIniFile.pImage)
- {
- kfree (drv->tCommon.tIniFile.pImage);
- #ifdef TI_MEM_ALLOC_TRACE
- os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
- __FUNCTION__, __LINE__, drv->tCommon.tIniFile.uSize, -drv->tCommon.tIniFile.uSize);
- #endif
- }
+ /*
+ * Free init files memory
+ */
+ if (drv->tCommon.tFwImage.pImage) {
+ os_memoryFree (drv, drv->tCommon.tFwImage.pImage, drv->tCommon.tFwImage.uSize);
+#ifdef TI_MEM_ALLOC_TRACE
+ os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
+ __FUNCTION__, __LINE__, drv->tCommon.tFwImage.uSize,
+ -drv->tCommon.tFwImage.uSize);
+#endif
+ }
+ if (drv->tCommon.tNvsImage.pImage) {
+ kfree (drv->tCommon.tNvsImage.pImage);
+#ifdef TI_MEM_ALLOC_TRACE
+ os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
+ __FUNCTION__, __LINE__, drv->tCommon.tNvsImage.uSize,
+ -drv->tCommon.tNvsImage.uSize);
+#endif
+ }
+ if (drv->tCommon.tIniFile.pImage) {
+ kfree (drv->tCommon.tIniFile.pImage);
+#ifdef TI_MEM_ALLOC_TRACE
+ os_printf ("MTT:%s:%d ::kfree(0x%p) : %d\n",
+ __FUNCTION__, __LINE__, drv->tCommon.tIniFile.uSize,
+ -drv->tCommon.tIniFile.uSize);
+#endif
+ }
/* Free the driver object */
#ifdef TI_DBG
tb_destroy();
-#endif
- kfree (drv);
+#endif
+ kfree (drv);
}
@@ -1015,18 +1059,34 @@ static void wlanDrvIf_Destroy (TWlanDrvIfObj *drv)
* \return Init: 0 - OK, else - failure. Exit: void
* \sa wlanDrvIf_Create, wlanDrvIf_Destroy
*/
+#ifndef TI_SDIO_STANDALONE
+static int sdc_ctrl = 2;
+module_param(sdc_ctrl, int, S_IRUGO | S_IWUSR | S_IWGRP);
+
+extern int sdioDrv_init(int sdcnum);
+extern void sdioDrv_exit(void);
+#endif
+
static int __init wlanDrvIf_ModuleInit (void)
{
- printk(KERN_INFO "TIWLAN: driver init\n");
- sdioDrv_init();
- return wlanDrvIf_Create ();
+ printk(KERN_INFO "TIWLAN: driver init\n");
+#ifndef TI_SDIO_STANDALONE
+#ifndef CONFIG_MMC_EMBEDDED_SDIO
+ sdioDrv_init(sdc_ctrl);
+#endif
+#endif
+ return wlanDrvIf_Create ();
}
static void __exit wlanDrvIf_ModuleExit (void)
{
- wlanDrvIf_Destroy (pDrvStaticHandle);
- sdioDrv_exit();
- printk (KERN_INFO "TI WLAN: driver unloaded\n");
+ wlanDrvIf_Destroy (pDrvStaticHandle);
+#ifndef TI_SDIO_STANDALONE
+#ifndef CONFIG_MMC_EMBEDDED_SDIO
+ sdioDrv_exit();
+#endif
+#endif
+ printk (KERN_INFO "TI WLAN: driver unloaded\n");
}
diff --git a/wl1271/platforms/os/linux/src/WlanDrvWext.c b/wl1271/platforms/os/linux/src/WlanDrvWext.c
index 39743f64..8e0076ea 100644
--- a/wl1271/platforms/os/linux/src/WlanDrvWext.c
+++ b/wl1271/platforms/os/linux/src/WlanDrvWext.c
@@ -166,76 +166,75 @@ int wlanDrvWext_Handler (struct net_device *dev,
void *iw_req,
void *extra)
{
- int rc;
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
- ti_private_cmd_t my_command;
- struct iw_mlme mlme;
- struct iw_scan_req scanreq;
+ int rc;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+ ti_private_cmd_t my_command;
+ struct iw_mlme mlme;
+ struct iw_scan_req scanreq;
+ void *copy_to_buf=NULL, *param3=NULL;
- 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));
+ os_memoryZero(drv, &scanreq, sizeof(struct iw_scan_req));
- os_memoryZero(drv, &my_command, sizeof(ti_private_cmd_t));
- os_memoryZero(drv, &mlme, sizeof(struct iw_mlme));
- os_memoryZero(drv, &scanreq, sizeof(struct iw_scan_req));
-
- switch (info->cmd)
- {
- case SIOCIWFIRSTPRIV:
- {
- void *copy_from_buf;
+ switch (info->cmd)
+ {
+ case SIOCIWFIRSTPRIV:
+ {
+ void *copy_from_buf;
- 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);
+ 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_STOP_PARAM:
- return wlanDrvIf_Stop (dev);
+ case DRIVER_START_PARAM:
+ return wlanDrvIf_Start(dev);
- 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_STOP_PARAM:
+ return wlanDrvIf_Stop(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_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 SIOCSIWMLME:
- {
- os_memoryCopyFromUser(drv, &mlme, ((union iwreq_data *)iw_req)->data.pointer, sizeof(struct iw_mlme));
- param3 = &mlme;
- }
- break;
+ 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;
case SIOCSIWSCAN:
{
if (((union iwreq_data *)iw_req)->data.pointer) {
@@ -263,14 +262,18 @@ int wlanDrvWext_Handler (struct net_device *dev,
}
break;
}
- /* If the friver is not running, return NOK */
- if (drv->tCommon.eDriverState != DRV_STATE_RUNNING)
- {
- return TI_NOK;
- }
+ /* 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,
+ /* Call the Cmd module with the given user paramters */
+ rc = cmdHndlr_InsertCommand(drv->tCommon.hCmdHndlr,
info->cmd,
info->flags,
iw_req,
@@ -278,21 +281,20 @@ int wlanDrvWext_Handler (struct net_device *dev,
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/wl1271/platforms/os/linux/src/osRgstry_parser.c b/wl1271/platforms/os/linux/src/osRgstry_parser.c
index ec5bc3e4..8aa108b6 100644
--- a/wl1271/platforms/os/linux/src/osRgstry_parser.c
+++ b/wl1271/platforms/os/linux/src/osRgstry_parser.c
@@ -41,16 +41,15 @@
extern void regReadLastDbgState(TWlanDrvIfObjPtr pAdapter);
-static char *init_file = NULL;
-static int init_file_length= 0;
+static char *init_file = NULL;
+static int init_file_length = 0;
static PNDIS_CONFIGURATION_PARAMETER pNdisParm;
int osInitTable_IniFile (TI_HANDLE hOs, TInitTable *InitTable, char *file_buf, int file_length)
{
TWlanDrvIfObjPtr drv = (TWlanDrvIfObjPtr)hOs;
-
static NDIS_CONFIGURATION_PARAMETER vNdisParm;
-
+
init_file = file_buf;
init_file_length = file_length;
pNdisParm = &vNdisParm;
@@ -59,7 +58,6 @@ int osInitTable_IniFile (TI_HANDLE hOs, TInitTable *InitTable, char *file_buf, i
#ifdef TI_DBG
regReadLastDbgState(drv);
#endif
-
return 0;
}
diff --git a/wl1271/platforms/os/linux/src/osapi.c b/wl1271/platforms/os/linux/src/osapi.c
index 3809ec7f..833281af 100644
--- a/wl1271/platforms/os/linux/src/osapi.c
+++ b/wl1271/platforms/os/linux/src/osapi.c
@@ -80,11 +80,6 @@ typedef struct timer_list TOsTimer;
TI_BOOL bRedirectOutputToLogger = TI_FALSE;
TI_BOOL use_debug_module = TI_FALSE;
-/* linux/irq.h declerations */
-extern void disable_irq(unsigned int);
-extern void enable_irq(unsigned int);
-
-
/****************************************************************************************
* *
* OS Report API *
@@ -134,38 +129,37 @@ NOTES:
*****************************************************************************************/
void os_printf(const char *format ,...)
{
- static int from_new_line = 1; /* Used to save the last message EOL */
- va_list ap;
- static char msg[MAX_MESSAGE_SIZE];
- char *p_msg = msg; /* Pointer to the message */
- TI_UINT16 message_len;
- TI_UINT32 sec = 0;
- TI_UINT32 uSec = 0;
- os_memoryZero(NULL,msg, MAX_MESSAGE_SIZE);
+ static int from_new_line = 1; /* Used to save the last message EOL */
+ va_list ap;
+ static char msg[MAX_MESSAGE_SIZE];
+ char *p_msg = msg; /* Pointer to the message */
+ TI_UINT16 message_len;
+ TI_UINT32 sec = 0;
+ TI_UINT32 uSec = 0;
+ os_memoryZero(NULL,msg, MAX_MESSAGE_SIZE);
/* Format the message and keep the message length */
- va_start(ap,format);
- message_len = vsnprintf(&msg[0], sizeof(msg) -1 , format, ap);
- if( from_new_line )
- {
- if (msg[1] == '$')
- {
- p_msg += 4;
- }
-
- sec = os_timeStampUs(NULL);
- uSec = sec % MICROSECOND_IN_SECONDS;
- sec /= MICROSECOND_IN_SECONDS;
-
- printk(KERN_INFO DRIVER_NAME ": %d.%06d: %s",sec,uSec,p_msg);
- }
- else
- {
- printk(&msg[0]);
- }
-
- from_new_line = ( msg[message_len] == '\n' );
-
+ va_start(ap,format);
+ message_len = vsnprintf(&msg[0], sizeof(msg) -1 , format, ap);
+ if( from_new_line )
+ {
+ if (msg[1] == '$')
+ {
+ p_msg += 4;
+ }
+
+ sec = os_timeStampUs(NULL);
+ uSec = sec % MICROSECOND_IN_SECONDS;
+ sec /= MICROSECOND_IN_SECONDS;
+
+ printk(KERN_INFO DRIVER_NAME ": %d.%06d: %s",sec,uSec,p_msg);
+ }
+ else
+ {
+ printk(&msg[0]);
+ }
+
+ from_new_line = ( msg[message_len] == '\n' );
va_end(ap);
}
@@ -194,7 +188,7 @@ NOTES: 1) The user's callback is called directly from OS timer context
*****************************************************************************************/
TI_HANDLE os_timerCreate (TI_HANDLE OsContext, fTimerFunction pRoutine, TI_HANDLE hFuncHandle)
{
- TOsTimer *pOsTimer = os_memoryAlloc (OsContext, sizeof(TOsTimer));
+ TOsTimer *pOsTimer = os_memoryAlloc (OsContext, sizeof(TOsTimer));
if(pOsTimer)
{
@@ -220,8 +214,8 @@ NOTES:
*****************************************************************************************/
void os_timerDestroy (TI_HANDLE OsContext, TI_HANDLE TimerHandle)
{
- os_timerStop (OsContext, TimerHandle);
- os_memoryFree (OsContext, TimerHandle, sizeof(TOsTimer));
+ os_timerStop (OsContext, TimerHandle);
+ os_memoryFree (OsContext, TimerHandle, sizeof(TOsTimer));
}
@@ -238,9 +232,9 @@ NOTES:
*****************************************************************************************/
void os_timerStart (TI_HANDLE OsContext, TI_HANDLE TimerHandle, TI_UINT32 DelayMs)
{
- TI_UINT32 jiffie_cnt = msecs_to_jiffies (DelayMs);
+ TI_UINT32 jiffie_cnt = msecs_to_jiffies (DelayMs);
- mod_timer ((TOsTimer *)TimerHandle, jiffies + jiffie_cnt);
+ mod_timer ((TOsTimer *)TimerHandle, jiffies + jiffie_cnt);
}
@@ -257,7 +251,7 @@ NOTES:
*****************************************************************************************/
void os_timerStop (TI_HANDLE OsContext, TI_HANDLE TimerHandle)
{
- del_timer_sync((TOsTimer *)TimerHandle);
+ del_timer_sync((TOsTimer *)TimerHandle);
}
@@ -298,9 +292,9 @@ NOTES:
*****************************************************************************************/
TI_UINT32 os_timeStampMs (TI_HANDLE OsContext)
{
- struct timeval tv;
- do_gettimeofday(&tv);
- return tv.tv_sec*1000 + tv.tv_usec/1000;
+ struct timeval tv;
+ do_gettimeofday(&tv);
+ return tv.tv_sec*1000 + tv.tv_usec/1000;
}
@@ -319,9 +313,9 @@ NOTES:
*****************************************************************************************/
TI_UINT32 os_timeStampUs (TI_HANDLE OsContext)
{
- struct timeval tv;
- do_gettimeofday(&tv);
- return tv.tv_sec*1000000 + tv.tv_usec;
+ struct timeval tv;
+ do_gettimeofday(&tv);
+ return tv.tv_sec*1000000 + tv.tv_usec;
}
@@ -339,7 +333,7 @@ NOTES:
*****************************************************************************************/
void os_StalluSec (TI_HANDLE OsContext, TI_UINT32 uSec)
{
- udelay (uSec);
+ udelay (uSec);
}
@@ -367,7 +361,7 @@ NOTES:
*****************************************************************************************/
TI_HANDLE os_protectCreate (TI_HANDLE OsContext)
{
- return NULL;
+ return NULL;
}
@@ -400,9 +394,9 @@ NOTES:
*****************************************************************************************/
void os_protectLock (TI_HANDLE OsContext, TI_HANDLE ProtectContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- spin_lock_irqsave (&drv->lock, drv->flags);
+ spin_lock_irqsave (&drv->lock, drv->flags);
}
@@ -434,7 +428,6 @@ RETURN:
NOTES:
*****************************************************************************************/
-
TI_BOOL os_receivePacket(TI_HANDLE OsContext, void *pRxDesc ,void *pPacket, TI_UINT16 Length)
{
TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
@@ -467,7 +460,9 @@ TI_BOOL os_receivePacket(TI_HANDLE OsContext, void *pRxDesc ,void *pPacket, TI_U
printk("-->> os_receivePacket() pPacket=0x%x Length=%d skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n",
(int)pPacket, (int)Length, (int)skb, (int)skb->data, (int)skb->head, (int)skb->len);
*/
+ /* Use skb_reserve, it updates both skb->data and skb->tail. */
skb->data = RX_ETH_PKT_DATA(pPacket);
+ skb->tail = skb->data;
skb_put(skb, RX_ETH_PKT_LEN(pPacket));
/*
printk("-->> os_receivePacket() skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n",
@@ -570,14 +565,14 @@ TI_INT32 os_IndicateEvent (TI_HANDLE OsContext, IPC_EV_DATA* pData)
void os_disableIrq (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- disable_irq (drv->irq);
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ disable_irq (drv->irq);
}
void os_enableIrq (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- enable_irq (drv->irq);
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ enable_irq (drv->irq);
}
/*-----------------------------------------------------------------------------
@@ -595,108 +590,119 @@ void os_InterruptServiced (TI_HANDLE OsContext)
/* To be implemented with Level IRQ */
}
-/*--------------------*/
-/* WAKE LOCK ROUTINES */
-/*--------------------*/
-
/*-----------------------------------------------------------------------------
- * Routine Name: os_wake_lock_timeout
- * Routine Description: Called to prevent system from suspend for some time
- * Arguments: OsContext - handle to OS context
- * Return Value: packet counter
- * -----------------------------------------------------------------------------*/
+Routine Name: os_wake_lock_timeout
+
+Routine Description: Called to prevent system from suspend for some time
+
+Arguments: OsContext - handle to OS context
+
+Return Value: packet counter
+-----------------------------------------------------------------------------*/
int os_wake_lock_timeout (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- int ret = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&drv->lock, flags);
- if (drv) {
- ret = drv->wl_packet;
- if (drv->wl_packet) {
- drv->wl_packet = 0;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ int ret = 0;
+ unsigned long flags;
+
+ if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
+ ret = drv->wl_packet;
+ if (drv->wl_packet) {
+ drv->wl_packet = 0;
#ifdef CONFIG_HAS_WAKELOCK
- wake_lock_timeout(&drv->wl_rxwake, (HZ >> 1));
+ wake_lock_timeout(&drv->wl_rxwake, (HZ >> 1));
#endif
- }
- }
- spin_unlock_irqrestore(&drv->lock, flags);
- /* printk("%s: %d\n", __func__, ret); */
- return ret;
+ }
+ spin_unlock_irqrestore(&drv->lock, flags);
+ }
+ /* printk("%s: %d\n", __func__, ret); */
+ return ret;
}
/*-----------------------------------------------------------------------------
- * Routine Name: os_wake_lock_timeout_enable
- * Routine Description: Called to set flag for suspend prevention for some time
- * Arguments: OsContext - handle to OS context
- * Return Value: packet counter
- * -----------------------------------------------------------------------------*/
+Routine Name: os_wake_lock_timeout_enable
+
+Routine Description: Called to set flag for suspend prevention for some time
+
+Arguments: OsContext - handle to OS context
+
+Return Value: packet counter
+-----------------------------------------------------------------------------*/
int os_wake_lock_timeout_enable (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- unsigned long flags;
- int ret;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ unsigned long flags;
+ int ret = 0;
- spin_lock_irqsave(&drv->lock, flags);
- ret = drv->wl_packet = 1;
- spin_unlock_irqrestore(&drv->lock, flags);
- return ret;
+ if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
+ ret = drv->wl_packet = 1;
+ spin_unlock_irqrestore(&drv->lock, flags);
+ }
+ return ret;
}
/*-----------------------------------------------------------------------------
- * Routine Name: os_wake_lock
- * Routine Description: Called to prevent system from suspend
- * Arguments: OsContext - handle to OS context
- * Return Value: wake_lock counter
- * -----------------------------------------------------------------------------*/
+Routine Name: os_wake_lock
+
+Routine Description: Called to prevent system from suspend
+
+Arguments: OsContext - handle to OS context
+
+Return Value: wake_lock counter
+-----------------------------------------------------------------------------*/
int os_wake_lock (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- int ret = 0;
- unsigned long flags;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ int ret = 0;
+ unsigned long flags;
- spin_lock_irqsave(&drv->lock, flags);
- if (drv) {
+ if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
#ifdef CONFIG_HAS_WAKELOCK
- if (!drv->wl_count)
- wake_lock(&drv->wl_wifi);
+ if (!drv->wl_count)
+ wake_lock(&drv->wl_wifi);
#endif
- drv->wl_count++;
- ret = drv->wl_count;
- }
- spin_unlock_irqrestore(&drv->lock, flags);
- /* printk("%s: %d\n", __func__, ret); */
- return ret;
+ drv->wl_count++;
+ ret = drv->wl_count;
+ spin_unlock_irqrestore(&drv->lock, flags);
+ }
+ /* printk("%s: %d\n", __func__, ret); */
+ return ret;
}
/*-----------------------------------------------------------------------------
- * Routine Name: os_wake_unlock
- * Routine Description: Called to allow system to suspend
- * Arguments: OsContext - handle to OS context
- * Return Value: wake_lock counter
- * -----------------------------------------------------------------------------*/
+Routine Name: os_wake_unlock
+
+Routine Description: Called to allow system to suspend
+
+Arguments: OsContext - handle to OS context
+
+Return Value: wake_lock counter
+-----------------------------------------------------------------------------*/
int os_wake_unlock (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- int ret = 0;
- unsigned long flags;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
+ 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;
- }
- spin_unlock_irqrestore(&drv->lock, flags);
- /* printk("%s: %d\n", __func__, ret); */
- return ret;
+ ret = drv->wl_count;
+ }
+ spin_unlock_irqrestore(&drv->lock, flags);
+ }
+ /* printk("%s: %d\n", __func__, ret); */
+ return ret;
}
-
/*-----------------------------------------------------------------------------
Routine Name: os_RequestSchedule
@@ -708,21 +714,20 @@ Return Value: TI_OK
-----------------------------------------------------------------------------*/
int os_RequestSchedule (TI_HANDLE OsContext)
{
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- int iRes = TI_OK;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
- /* Note: The performance trace below doesn't inclose the schedule itself because the rescheduling
- * can occur immediately and call os_RequestSchedule again which will confuse the trace tools
- */
- CL_TRACE_START_L3();
- CL_TRACE_END_L3("tiwlan_drv.ko", "OS", "TASK", "");
+ /* Note: The performance trace below doesn't inclose the schedule
+ * itself because the rescheduling can occur immediately and call
+ * os_RequestSchedule again which will confuse the trace tools */
+ CL_TRACE_START_L3();
+ CL_TRACE_END_L3("tiwlan_drv.ko", "OS", "TASK", "");
- if (!queue_work (drv->pWorkQueue, &drv->tWork))
- {
- iRes = TI_NOK;
- }
+ if( !queue_work(drv->tiwlan_wq, &drv->tWork) ) {
+ /* printk("%s: Fail\n",__func__); */
+ return TI_NOK;
+ }
- return iRes;
+ return TI_OK;
}
@@ -737,11 +742,11 @@ Return Value: TI_OK
-----------------------------------------------------------------------------*/
void *os_SignalObjectCreate (TI_HANDLE OsContext)
{
- struct completion *myPtr;
- myPtr = os_memoryAlloc(OsContext, sizeof(struct completion));
- if(myPtr)
- init_completion (myPtr);
- return (myPtr);
+ struct completion *myPtr;
+ myPtr = os_memoryAlloc(OsContext, sizeof(struct completion));
+ if (myPtr)
+ init_completion (myPtr);
+ return (myPtr);
}
@@ -756,8 +761,13 @@ Return Value: TI_OK
-----------------------------------------------------------------------------*/
int os_SignalObjectWait (TI_HANDLE OsContext, void *signalObject)
{
- wait_for_completion ((struct completion *)signalObject);
- return TI_OK;
+ if (!signalObject)
+ return TI_NOK;
+ if (!wait_for_completion_timeout((struct completion *)signalObject,
+ msecs_to_jiffies(10000))) {
+ printk("tiwlan: 10 sec %s timeout\n", __func__);
+ }
+ return TI_OK;
}
@@ -772,8 +782,10 @@ Return Value: TI_OK
-----------------------------------------------------------------------------*/
int os_SignalObjectSet (TI_HANDLE OsContext, void *signalObject)
{
- complete ((struct completion *)signalObject);
- return TI_OK;
+ if (!signalObject)
+ return TI_NOK;
+ complete ((struct completion *)signalObject);
+ return TI_OK;
}
@@ -788,8 +800,10 @@ Return Value: TI_OK
-----------------------------------------------------------------------------*/
int os_SignalObjectFree (TI_HANDLE OsContext, void *signalObject)
{
- os_memoryFree(OsContext, signalObject, sizeof(struct completion));
- return TI_OK;
+ if (!signalObject)
+ return TI_NOK;
+ os_memoryFree(OsContext, signalObject, sizeof(struct completion));
+ return TI_OK;
}
@@ -813,21 +827,21 @@ void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT
TI_UINT32 uMaxParamValue = 0;
TI_UINT32 uMsgLen = TRACE_MSG_MIN_LENGTH;
TI_UINT8 aMsg[TRACE_MSG_MAX_LENGTH] = {0};
- TTraceMsg *pMsgHdr = (TTraceMsg *)&aMsg[0];
+ TTraceMsg *pMsgHdr = (TTraceMsg *)&aMsg[0];
TI_UINT8 *pMsgData = &aMsg[0] + sizeof(TTraceMsg);
va_list list;
- if (!bRedirectOutputToLogger)
- {
- return;
- }
+ if (!bRedirectOutputToLogger)
+ {
+ return;
+ }
if (uParamsNum > TRACE_MSG_MAX_PARAMS)
{
uParamsNum = TRACE_MSG_MAX_PARAMS;
}
- /* sync on the parameters */
+ /* sync on the parameters */
va_start(list, uParamsNum);
/* find the longest parameter */
@@ -849,7 +863,7 @@ void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT
}
}
- /* Set msg length and format according to the biggest parameter value (8/16/32 bits) */
+ /* Set msg length and format according to the biggest parameter value (8/16/32 bits) */
if (uMaxParamValue > UINT16_MAX_VAL)
{
pMsgHdr->uFormat = TRACE_FORMAT_32_BITS_PARAMS;
@@ -866,11 +880,11 @@ void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT
uMsgLen += uParamsNum;
}
- /* Fill all other header information */
- pMsgHdr->uLevel = (TI_UINT8)uLevel;
- pMsgHdr->uParamsNum = (TI_UINT8)uParamsNum;
- pMsgHdr->uFileId = (TI_UINT16)uFileId;
- pMsgHdr->uLineNum = (TI_UINT16)uLineNum;
+ /* Fill all other header information */
+ pMsgHdr->uLevel = (TI_UINT8)uLevel;
+ pMsgHdr->uParamsNum = (TI_UINT8)uParamsNum;
+ pMsgHdr->uFileId = (TI_UINT16)uFileId;
+ pMsgHdr->uLineNum = (TI_UINT16)uLineNum;
/* re-sync on the parameters */
va_start(list, uParamsNum);
@@ -904,7 +918,7 @@ void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT
va_end(list);
- /* Send the trace message to the logger */
+ /* Send the trace message to the logger */
SendLoggerData(OsContext, aMsg, (TI_UINT16)uMsgLen);
}
@@ -922,7 +936,3 @@ void os_Trace (TI_HANDLE OsContext, TI_UINT32 uLevel, TI_UINT32 uFileId, TI_UINT
void os_SetDrvThreadPriority (TI_HANDLE OsContext, TI_UINT32 uWlanDrvThreadPriority)
{
}
-
-
-
-
diff --git a/wl1271/platforms/os/linux/src/osmemapi.c b/wl1271/platforms/os/linux/src/osmemapi.c
index 0243df76..e0e2fe2c 100644
--- a/wl1271/platforms/os/linux/src/osmemapi.c
+++ b/wl1271/platforms/os/linux/src/osmemapi.c
@@ -61,10 +61,10 @@
typedef void (*os_free)(void *);
struct os_mem_block
{
- struct list_head blk_list;
- os_free f_free;
- __u32 size;
- __u32 signature;
+ struct list_head blk_list;
+ os_free f_free;
+ __u32 size;
+ __u32 signature;
};
#define MEM_BLOCK_START (('m'<<24) | ('e'<<16) | ('m'<<8) | 's')
#define MEM_BLOCK_END (('m'<<24) | ('e'<<16) | ('m'<<8) | 'e')
@@ -97,25 +97,25 @@ os_memoryAlloc(
TI_UINT32 Size
)
{
- struct os_mem_block *blk;
- __u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32);
+ struct os_mem_block *blk;
+ __u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32);
#ifdef TI_MEM_ALLOC_TRACE
- os_printf("MTT:%s:%d ::os_memoryAlloc(0x%p, %lu) : %lu\n",__FUNCTION__, __LINE__,OsContext,Size,total_size);
+ os_printf("MTT:%s:%d ::os_memoryAlloc(0x%p, %lu) : %lu\n",__FUNCTION__, __LINE__,OsContext,Size,total_size);
#endif
/*
- Memory optimization issue. Allocate up to 2 pages (8k) from the SLAB allocator (2^n),
- otherwise allocate from virtual pool.
- If full Async mode is used, allow up to 6 pages (24k) for DMA-able memory, so the TxCtrlBlk table
- can be transacted over DMA.
+ Memory optimization issue. Allocate up to 2 pages (8k) from the SLAB
+ allocator (2^n), otherwise allocate from virtual pool.
+ If full Async mode is used, allow up to 6 pages (24k) for DMA-able
+ memory, so the TxCtrlBlk table can be transacted over DMA.
*/
#ifdef FULL_ASYNC_MODE
if (total_size < 6 * 4096)
#else
- if (total_size < 2 * 4096)
+ if (total_size < 2 * 4096)
#endif
- {
- if (in_atomic())
+ {
+ if (in_atomic())
{
blk = kmalloc(total_size, GFP_ATOMIC);
}
@@ -125,31 +125,35 @@ os_memoryAlloc(
}
if (!blk)
{
- printk("%s: NULL\n",__func__);
- return NULL;
- }
- blk->f_free = (os_free)kfree;
- }
+ printk("%s: NULL\n",__func__);
+ return NULL;
+ }
+ blk->f_free = (os_free)kfree;
+ }
else
{
- /* We expect that the big allocations should be made outside the interrupt,
- otherwise fail
+ /* We expect that the big allocations should be made outside
+ the interrupt, otherwise fail
*/
- if (in_interrupt())
+ if (in_interrupt()) {
+ printk("%s: NULL\n",__func__);
return NULL;
- blk = vmalloc(total_size);
- if (!blk)
- return NULL;
- blk->f_free = (os_free)vfree;
- }
+ }
+ blk = vmalloc(total_size);
+ if (!blk) {
+ printk("%s: NULL\n",__func__);
+ return NULL;
+ }
+ blk->f_free = (os_free)vfree;
+ }
- os_profile (OsContext, 4, total_size);
+ os_profile (OsContext, 4, total_size);
- /*list_add(&blk->blk_list, &drv->mem_blocks);*/
- blk->size = Size;
- blk->signature = MEM_BLOCK_START;
- *(__u32 *)((unsigned char *)blk + total_size - sizeof(__u32)) = MEM_BLOCK_END;
- return (void*)((char *)blk + sizeof(struct os_mem_block));
+ /*list_add(&blk->blk_list, &drv->mem_blocks);*/
+ blk->size = Size;
+ blk->signature = MEM_BLOCK_START;
+ *(__u32 *)((unsigned char *)blk + total_size - sizeof(__u32)) = MEM_BLOCK_END;
+ return (void *)((char *)blk + sizeof(struct os_mem_block));
}
@@ -173,22 +177,22 @@ os_memoryCAlloc(
TI_UINT32 Size
)
{
- void* pAllocatedMem;
- TI_UINT32 MemSize;
+ void* pAllocatedMem;
+ TI_UINT32 MemSize;
#ifdef TI_MEM_ALLOC_TRACE
- os_printf("MTT:%s:%d ::os_memoryCAlloc(0x%p, %lu, %lu) : %lu\n",__FUNCTION__,__LINE__,OsContext,Number,Size,Number*Size);
+ os_printf("MTT:%s:%d ::os_memoryCAlloc(0x%p, %lu, %lu) : %lu\n",__FUNCTION__,__LINE__,OsContext,Number,Size,Number*Size);
#endif
- MemSize = Number * Size;
+ MemSize = Number * Size;
- pAllocatedMem = os_memoryAlloc(OsContext, MemSize);
+ pAllocatedMem = os_memoryAlloc(OsContext, MemSize);
- if(!pAllocatedMem)
- return NULL;
+ if (!pAllocatedMem)
+ return NULL;
- memset(pAllocatedMem,0,MemSize);
+ memset(pAllocatedMem,0,MemSize);
- return pAllocatedMem;
+ return pAllocatedMem;
}
@@ -218,29 +222,34 @@ os_memoryFree(
TI_UINT32 Size
)
{
- struct os_mem_block *blk =
- (struct os_mem_block *)((char *)pMemPtr - sizeof(struct os_mem_block));
-
+ struct os_mem_block *blk;
+
+ if (!pMemPtr) {
+ printk("%s: NULL\n",__func__);
+ return;
+ }
+ blk = (struct os_mem_block *)((char *)pMemPtr - sizeof(struct os_mem_block));
+
#ifdef TI_MEM_ALLOC_TRACE
- os_printf("MTT:%s:%d ::os_memoryFree(0x%p, 0x%p, %lu) : %d\n",__FUNCTION__,__LINE__,OsContext,pMemPtr,Size,-Size);
+ os_printf("MTT:%s:%d ::os_memoryFree(0x%p, 0x%p, %lu) : %d\n",__FUNCTION__,__LINE__,OsContext,pMemPtr,Size,-Size);
#endif
if (blk->signature != MEM_BLOCK_START)
- {
+ {
printk("\n\n%s: memory block signature is incorrect - 0x%x\n\n\n",
- __FUNCTION__, blk->signature);
- return;
- }
- *(char *)(&blk->signature) = '~';
- if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
- != MEM_BLOCK_END)
- {
+ __FUNCTION__, blk->signature);
+ return;
+ }
+ *(char *)(&blk->signature) = '~';
+ if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
+ != MEM_BLOCK_END)
+ {
printk("\n\n%s: memory block corruption. Size=%u\n\n\n",
- __FUNCTION__, blk->size);
- }
+ __FUNCTION__, blk->size);
+ }
- os_profile (OsContext, 5, blk->size + sizeof(struct os_mem_block) + sizeof(__u32));
+ os_profile (OsContext, 5, blk->size + sizeof(struct os_mem_block) + sizeof(__u32));
- blk->f_free(blk);
+ blk->f_free(blk);
}
@@ -266,7 +275,11 @@ os_memorySet(
TI_UINT32 Length
)
{
- memset(pMemPtr,Value,Length);
+ if (!pMemPtr) {
+ printk("%s: NULL\n",__func__);
+ return;
+ }
+ memset(pMemPtr,Value,Length);
}
/****************************************************************************************
@@ -289,29 +302,32 @@ os_memoryAlloc4HwDma(
TI_UINT32 Size
)
{
- struct os_mem_block *blk;
+ struct os_mem_block *blk;
__u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32);
/*
- if the size is greater than 2 pages then we cant allocate the memory through kmalloc so the function fails
+ if the size is greater than 2 pages then we cant allocate the memory
+ through kmalloc so the function fails
*/
if (Size < 2 * OS_PAGE_SIZE)
- {
- blk = kmalloc(total_size, GFP_ATOMIC|GFP_DMA);
- if (!blk)
+ {
+ blk = kmalloc(total_size, GFP_ATOMIC|GFP_DMA);
+ if (!blk) {
+ printk("%s: NULL\n",__func__);
return NULL;
- blk->f_free = (os_free)kfree;
+ }
+ blk->f_free = (os_free)kfree;
}
- else
- {
+ else
+ {
printk("\n\n%s: memory cant be allocated-Size = %d\n\n\n",
- __FUNCTION__, Size);
+ __FUNCTION__, Size);
return NULL;
}
blk->size = Size;
blk->signature = MEM_BLOCK_START;
*(__u32 *)((unsigned char *)blk + total_size - sizeof(__u32)) = MEM_BLOCK_END;
- return (void*)((char *)blk + sizeof(struct os_mem_block));
+ return (void *)((char *)blk + sizeof(struct os_mem_block));
}
/****************************************************************************************
@@ -339,24 +355,29 @@ os_memory4HwDmaFree(
TI_UINT32 Size
)
{
- struct os_mem_block *blk =
- (struct os_mem_block *)((char *)pMem_ptr - sizeof(struct os_mem_block));
+ struct os_mem_block *blk;
+
+ if (!pMem_ptr) {
+ printk("%s: NULL\n",__func__);
+ return;
+ }
+ blk = (struct os_mem_block *)((char *)pMem_ptr - sizeof(struct os_mem_block));
if (blk->signature != MEM_BLOCK_START)
- {
+ {
printk("\n\n%s: memory block signature is incorrect - 0x%x\n\n\n",
- __FUNCTION__, blk->signature);
- return;
- }
- *(char *)(&blk->signature) = '~';
- if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
- != MEM_BLOCK_END)
- {
+ __FUNCTION__, blk->signature);
+ return;
+ }
+ *(char *)(&blk->signature) = '~';
+ if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
+ != MEM_BLOCK_END)
+ {
printk("\n\n%s: memory block corruption. Size=%u\n\n\n",
- __FUNCTION__, blk->size);
- }
+ __FUNCTION__, blk->size);
+ }
- blk->f_free(blk);
+ blk->f_free(blk);
}
/****************************************************************************************
@@ -379,7 +400,11 @@ os_memoryZero(
TI_UINT32 Length
)
{
- memset(pMemPtr,0,Length);
+ if (!pMemPtr) {
+ printk("%s: NULL\n",__func__);
+ return;
+ }
+ memset(pMemPtr,0,Length);
}
@@ -406,7 +431,8 @@ os_memoryCopy(
TI_UINT32 Size
)
{
- memcpy(pDstPtr,pSrcPtr,Size);
+
+ memcpy(pDstPtr,pSrcPtr,Size);
}
/****************************************************************************************
@@ -434,7 +460,7 @@ os_memoryCompare(
TI_INT32 Count
)
{
- return memcmp(Buf1, Buf2, Count);
+ return memcmp(Buf1, Buf2, Count);
}
@@ -463,7 +489,7 @@ os_memoryCopyFromUser(
TI_UINT32 Size
)
{
- return copy_from_user(pDstPtr,pSrcPtr,Size);
+ return copy_from_user(pDstPtr,pSrcPtr,Size);
}
/****************************************************************************************
@@ -489,5 +515,5 @@ os_memoryCopyToUser(
TI_UINT32 Size
)
{
- return copy_to_user(pDstPtr,pSrcPtr,Size);
+ return copy_to_user(pDstPtr,pSrcPtr,Size);
}
diff --git a/wl1271/platforms/os/linux/src/stack_profile.c b/wl1271/platforms/os/linux/src/stack_profile.c
index 352c77e7..37e55cb4 100644
--- a/wl1271/platforms/os/linux/src/stack_profile.c
+++ b/wl1271/platforms/os/linux/src/stack_profile.c
@@ -31,60 +31,144 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/*
* src/stack_profile.c
*
*/
#include <linux/stddef.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+
+#define STACK_MASK (THREAD_SIZE-1)
+#define MAX_STACK_FRAME 2
+
+typedef struct STACK_FRAME {
+ unsigned long stack_buf[THREAD_SIZE/sizeof(unsigned long)];
+ unsigned long *stack_start;
+ unsigned long stack_size;
+} stack_frame_t;
-unsigned long check_stack(unsigned long *base)
+static stack_frame_t sf_array[MAX_STACK_FRAME];
+
+static unsigned long check_stack(unsigned long *base)
{
-
register unsigned long sp asm ("sp");
unsigned long retval = sp;
- *base = ((sp & ~0x1fff) + 0x380);
+
+ *base = ((sp & ~STACK_MASK) + sizeof(struct task_struct) + 4);
return retval;
}
-unsigned long check_stack_start(unsigned long *base)
+unsigned long check_stack_start(unsigned long *base, unsigned long real_sp,
+ int id)
{
- unsigned long i;
- unsigned long from,to;
+ unsigned long i;
+ unsigned long from, to;
to = check_stack(&from);
*base = from;
+ /* save used stack context */
+ if (id < MAX_STACK_FRAME) {
+ stack_frame_t *sfp = &sf_array[id];
+
+ if (!real_sp)
+ real_sp = to;
+ sfp->stack_size = THREAD_SIZE - (real_sp & STACK_MASK);
+ sfp->stack_start = (unsigned long *)real_sp;
+ memcpy(sfp->stack_buf, sfp->stack_start, sfp->stack_size);
+ }
/* run from the stack pointer down to the base */
- for (i = from;i<to;i+=4)
- {
+ for(i=from;(i < to);i+=4) {
/* fill up the pattern */
- *(long *)i = 0xdeadbeef;
+ *(unsigned long *)i = 0xdeadbeef;
}
-/* printk("check_stack_start: from =%x to=%x data=%x\n",from,to,*(long *)(from+4));*/
+ /*printk("check_stack_start: from=%x to=%x data=%x\n",from,to,*(long *)(from+4));*/
return to;
}
-unsigned long check_stack_stop(unsigned long *base)
+unsigned long check_stack_stop(unsigned long *base, int id)
{
- unsigned long i;
- unsigned long from,to;
+ unsigned long i;
+ unsigned long from, to;
to = check_stack(&from);
*base = from;
+ /* check used stack context */
+ if (id < MAX_STACK_FRAME) {
+ stack_frame_t *sfp = &sf_array[id];
+
+ if (memcmp(sfp->stack_buf, sfp->stack_start, sfp->stack_size)) {
+ printk("%s: %p - Error\n", __func__, sfp->stack_start);
+ for(i=0;(i < sfp->stack_size/sizeof(unsigned long));i++) {
+ if (sfp->stack_start[i] != sfp->stack_buf[i])
+ printk("%p: 0x%08lx != 0x%08lx\n", &sfp->stack_start[i], sfp->stack_start[i], sfp->stack_buf[i]);
+ }
+ }
+ }
+
/* run from the stack pointer down to the base */
- for (i = from;i<to;i+=4)
- {
+ for(i=from;(i < to);i+=4) {
/* check up the pattern */
- if ((*(long *)i) != 0xdeadbeef)
+ if ((*(unsigned long *)i) != 0xdeadbeef)
break;
}
- /*printk("check_stack_stop: from =%x to=%x data=%x data=%x i=0x%x\n",from,to,*(long *)from,*(long *)(from+4),i);*/
+ /*printk("check_stack_stop: from=%x to=%x data=%x data=%x i=0x%x\n",from,to,*(long *)from,*(long *)(from+4),i);*/
/* return the first time when the pattern doesn't match */
return i;
}
+void print_stack(int id)
+{
+ stack_frame_t *sfp = &sf_array[id];
+ unsigned long i;
+ printk("%s: %d\n", __func__, id);
+ for(i=0;(i < sfp->stack_size/sizeof(unsigned long));i++) {
+ printk("%p: 0x%08lx\n", &sfp->stack_start[i], sfp->stack_start[i]);
+ }
+}
+
+struct task_struct *get_task_struct_ptr_by_name(char *name)
+{
+ struct task_struct *g, *p;
+
+ read_lock(&tasklist_lock);
+ do_each_thread(g, p) {
+ /*
+ * reset the NMI-timeout, listing all files on a slow
+ * console might take alot of time:
+ */
+ /* touch_nmi_watchdog(); */
+ if (!strcmp(name, p->comm)) {
+ read_unlock(&tasklist_lock);
+ return p;
+ }
+ } while_each_thread(g, p);
+ read_unlock(&tasklist_lock);
+ return NULL;
+}
+
+unsigned long save_stack_context(char *name, int id)
+{
+/* register unsigned long sp asm ("sp");
+ unsigned long sp_local = sp;
+*/
+ struct task_struct *p;
+ stack_frame_t *sfp;
+
+ if (id >= MAX_STACK_FRAME)
+ return 0L;
+ sfp = &sf_array[id];
+ p = get_task_struct_ptr_by_name(name);
+ if (p) {
+ printk("%s: %s found\n", __func__, p->comm); /* sched_show_task(t);*/
+ sfp->stack_start = (unsigned long *)((unsigned long)end_of_stack(p) & ~STACK_MASK);
+ sfp->stack_size = THREAD_SIZE;
+ memcpy(sfp->stack_buf, sfp->stack_start, sfp->stack_size);
+ }
+ return sfp->stack_size;
+}
diff --git a/wl1271/platforms/os/linux/wl_env.bash b/wl1271/platforms/os/linux/wl_env.bash
index 64961c3f..234e0b34 100644
--- a/wl1271/platforms/os/linux/wl_env.bash
+++ b/wl1271/platforms/os/linux/wl_env.bash
@@ -1,5 +1,6 @@
-export PATH=<PATH TO CROSS COMPILER>:$PATH
-export CROSS_COMPILE=arm-none-linux-gnueabi-
+# export PATH=<PATH TO CROSS COMPILER>:$PATH
+export CROSS_COMPILE=arm-eabi-
export ARCH=arm
-export HOST_PLATFORM=zoom2
-export KERNEL_DIR=<PATH TO KERNEL DIR>
+export HOST_PLATFORM=sholes
+export KERNEL_DIR=/usr/local/google/android/master/kernel
+