wlan: 2nd set of run time roaming APIs
This is the implementation of next set to run time roaming APIs
GET/SET WES Mode (Wireless Extended Security)
GET/SET ROAMSCANCONTROL
Send Action frame
Receive Action frame
Change-Id: I8ec6b4a3110349e890cef1cd6e8b66f22177cfbe
CRs-Fixed: 453129
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 0bb14e0..10a0554 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -101,6 +101,12 @@
{
sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nRoamIntraBand);
}
+
+static void cbNotifySetWESMode(hdd_context_t *pHddCtx, unsigned long NotifyId)
+{
+ // at the point this routine is called, the value in the cfg_ini table has already been updated
+ sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isWESModeEnabled);
+}
#endif
#ifdef FEATURE_WLAN_OKC
@@ -1002,8 +1008,8 @@
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_LFR_FEATURE_ENABLED_DEFAULT,
CFG_LFR_FEATURE_ENABLED_MIN,
- CFG_LFR_FEATURE_ENABLED_MAX,
- NotifyIsFastRoamIniFeatureEnabled, 0 ),
+ CFG_LFR_FEATURE_ENABLED_MAX,
+ NotifyIsFastRoamIniFeatureEnabled, 0 ),
#endif // FEATURE_WLAN_LFR
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
@@ -1033,6 +1039,14 @@
CFG_IMMEDIATE_ROAM_RSSI_DIFF_MIN,
CFG_IMMEDIATE_ROAM_RSSI_DIFF_MAX,
cbNotifySetImmediateRoamRssiDiff, 0),
+
+ REG_DYNAMIC_VARIABLE( CFG_ENABLE_WES_MODE_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, isWESModeEnabled,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ENABLE_WES_MODE_NAME_DEFAULT,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX,
+ cbNotifySetWESMode, 0),
#endif
#ifdef FEATURE_WLAN_OKC
REG_DYNAMIC_VARIABLE( CFG_OKC_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer,
@@ -2423,6 +2437,7 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [RoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->RoamRssiDiff);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ImmediateRoamRssiDiff] Value = [%lu] ",pHddCtx->cfg_ini->nImmediateRoamRssiDiff);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [isWESModeEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isWESModeEnabled);
#endif
#ifdef FEATURE_WLAN_OKC
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [OkcEnabled] Value = [%lu] ",pHddCtx->cfg_ini->isOkcIniFeatureEnabled);
@@ -3747,6 +3762,7 @@
smeConfig.csrConfig.isFastTransitionEnabled = pConfig->isFastTransitionEnabled;
smeConfig.csrConfig.RoamRssiDiff = pConfig->RoamRssiDiff;
smeConfig.csrConfig.nImmediateRoamRssiDiff = pConfig->nImmediateRoamRssiDiff;
+ smeConfig.csrConfig.isWESModeEnabled = pConfig->isWESModeEnabled;
#endif
#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 178a233..382e590 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -184,6 +184,9 @@
void hdd_getBand_helper(hdd_context_t *pHddCtx, int *pBand);
static VOS_STATUS hdd_parse_channellist(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels);
static VOS_STATUS hdd_parse_countryrev(tANI_U8 *pValue, tANI_U8 *pChannelList, tANI_U8 *pNumChannels);
+static VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApBssid,
+ tANI_U8 *pChannel, tANI_U8 *pDwellTime,
+ tANI_U8 **pBuf, tANI_U8 *pBufLen);
#endif
static int hdd_netdev_notifier_call(struct notifier_block * nb,
unsigned long state,
@@ -702,15 +705,15 @@
"%s: kstrtou16 failed ",
"Input value may be out of range[%d - %d]",
__func__,
- (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN/1000),
- (CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX/1000));
+ (CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN/1000),
+ (CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX/1000));
ret = -EINVAL;
goto exit;
}
neighborScanRefreshPeriod = neighborScanRefreshPeriod * 1000;
- if ((neighborScanRefreshPeriod < CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN) ||
- (neighborScanRefreshPeriod > CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX))
+ if ((neighborScanRefreshPeriod < CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN) ||
+ (neighborScanRefreshPeriod > CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX))
{
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"Neighbor scan results refresh period value %d is out of range"
@@ -998,7 +1001,6 @@
ret = -EINVAL;
goto exit;
}
-
if ((minTime < CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN) ||
(minTime > CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX))
{
@@ -1017,6 +1019,98 @@
pHddCtx->cfg_ini->nNeighborScanMinChanTime = minTime;
sme_setNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal), minTime);
}
+ else if (strncmp(command, "SENDACTIONFRAME", 15) == 0)
+ {
+ tANI_U8 *value = command;
+ tANI_U8 channel = 0;
+ tANI_U8 dwellTime = 0;
+ tANI_U8 bufLen = 0;
+ tANI_U8 *buf = NULL;
+ tSirMacAddr targetApBssid;
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ struct ieee80211_channel chan;
+ tANI_U8 finalLen = 0;
+ tANI_U8 *finalBuf = NULL;
+ tANI_U8 temp = 0;
+ u64 cookie;
+ hdd_station_ctx_t *pHddStaCtx = NULL;
+ pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+
+ /* if not associated, no need to send action frame */
+ if (eConnectionState_Associated != pHddStaCtx->conn_info.connState)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ status = hdd_parse_send_action_frame_data(value, targetApBssid, &channel,
+ &dwellTime, &buf, &bufLen);
+ if (eHAL_STATUS_SUCCESS != status)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Failed to parse send action frame data", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* if the target bssid is different from currently associated AP,
+ then no need to send action frame */
+ if (VOS_TRUE != vos_mem_compare(targetApBssid,
+ pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr)))
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:STA is not associated to this AP!",__func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* if the channel number is different from operating channel then
+ no need to send action frame */
+ if (channel != pHddStaCtx->conn_info.operationChannel)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: channel(%d) is different from operating channel(%d)",
+ __func__, channel, pHddStaCtx->conn_info.operationChannel);
+ ret = -EINVAL;
+ goto exit;
+ }
+ chan.center_freq = sme_ChnToFreq(channel);
+
+ finalLen = bufLen + 24;
+ finalBuf = vos_mem_malloc(finalLen);
+ if (NULL == finalBuf)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s:memory allocation failed",__func__);
+ ret = -ENOMEM;
+ goto exit;
+ }
+ vos_mem_zero(finalBuf, finalLen);
+
+ /* Fill subtype */
+ temp = SIR_MAC_MGMT_ACTION << 4;
+ vos_mem_copy(finalBuf + 0, &temp, sizeof(temp));
+
+ /* Fill type */
+ temp = SIR_MAC_MGMT_FRAME;
+ vos_mem_copy(finalBuf + 2, &temp, sizeof(temp));
+
+ /* Fill destination address (bssid of the AP) */
+ vos_mem_copy(finalBuf + 4, targetApBssid, sizeof(targetApBssid));
+
+ /* Fill BSSID (STA mac address) */
+ vos_mem_copy(finalBuf + 10, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes));
+
+ /* Fill source address (STA mac address) */
+ vos_mem_copy(finalBuf + 16, pAdapter->macAddressCurrent.bytes, sizeof(pAdapter->macAddressCurrent.bytes));
+
+ /* Fill received buffer from 24th address */
+ vos_mem_copy(finalBuf + 24, buf, bufLen);
+
+ wlan_hdd_action( NULL, dev, &chan, 0, NL80211_CHAN_HT20,
+ 1, dwellTime, finalBuf, finalLen, 1,
+ 1, &cookie );
+ vos_mem_free(finalBuf);
+ }
else if (strncmp(command, "GETROAMSCANCHANNELMINTIME", 25) == 0)
{
tANI_U16 val = sme_getNeighborScanMinChanTime((tHalHandle)(pHddCtx->hHal));
@@ -1175,13 +1269,50 @@
ret = -EINVAL;
goto exit;
}
-
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: Received Command to change intra band = %d", __func__, val);
pHddCtx->cfg_ini->nRoamIntraBand = val;
sme_setRoamIntraBand((tHalHandle)(pHddCtx->hHal), val);
}
+ else if (strncmp(command, "SETWESMODE", 10) == 0)
+ {
+ tANI_U8 *value = command;
+ tANI_BOOLEAN wesMode = CFG_ENABLE_WES_MODE_NAME_DEFAULT;
+
+ /* Move pointer to ahead of SETWESMODE<delimiter> */
+ value = value + 11;
+ /* Convert the value from ascii to integer */
+ ret = kstrtou8(value, 10, &wesMode);
+ if (ret < 0)
+ {
+ /* If the input value is greater than max value of datatype, then also
+ kstrtou8 fails */
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: kstrtou8 failed range [%d - %d]", __func__,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if ((wesMode < CFG_ENABLE_WES_MODE_NAME_MIN) ||
+ (wesMode > CFG_ENABLE_WES_MODE_NAME_MAX))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "WES Mode value %d is out of range"
+ " (Min: %d Max: %d)", wesMode,
+ CFG_ENABLE_WES_MODE_NAME_MIN,
+ CFG_ENABLE_WES_MODE_NAME_MAX);
+ ret = -EINVAL;
+ goto exit;
+ }
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: Received Command to Set WES Mode rssi diff = %d", __func__, wesMode);
+
+ pHddCtx->cfg_ini->isWESModeEnabled = wesMode;
+ sme_UpdateWESMode((tHalHandle)(pHddCtx->hHal), wesMode);
+ }
else if (strncmp(command, "GETROAMINTRABAND", 16) == 0)
{
tANI_U16 val = sme_getRoamIntraBand((tHalHandle)(pHddCtx->hHal));
@@ -1198,7 +1329,21 @@
goto exit;
}
}
+ else if (strncmp(priv_data.buf, "GETWESMODE", 10) == 0)
+ {
+ tANI_BOOLEAN wesMode = sme_GetWESMode((tHalHandle)(pHddCtx->hHal));
+ char extra[32];
+ tANI_U8 len = 0;
+ len = snprintf(extra, sizeof(extra), "%s %d", command, wesMode);
+ if (copy_to_user(priv_data.buf, &extra, len + 1))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: failed to copy data to user buffer", __func__);
+ ret = -EFAULT;
+ goto exit;
+ }
+ }
#endif
#ifdef FEATURE_WLAN_LFR
else if (strncmp(command, "SETFASTROAM", 11) == 0)
@@ -1303,7 +1448,6 @@
ret = -EINVAL;
goto exit;
}
-
if ((ccxMode < CFG_CCX_FEATURE_ENABLED_MIN) ||
(ccxMode > CFG_CCX_FEATURE_ENABLED_MAX))
{
@@ -1315,7 +1459,6 @@
ret = -EINVAL;
goto exit;
}
-
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: Received Command to change ccx mode = %d", __func__, ccxMode);
@@ -1323,6 +1466,38 @@
sme_UpdateIsCcxFeatureEnabled((tHalHandle)(pHddCtx->hHal), ccxMode);
}
#endif
+ else if (strncmp(command, "SETROAMSCANCONTROL", 18) == 0)
+ {
+ tANI_U8 *value = command;
+ tANI_BOOLEAN roamScanControl = 0;
+
+ /* Move pointer to ahead of SETROAMSCANCONTROL<delimiter> */
+ value = value + 19;
+ /* Convert the value from ascii to integer */
+ ret = kstrtou8(value, 10, &roamScanControl);
+ if (ret < 0)
+ {
+ /* If the input value is greater than max value of datatype, then also
+ kstrtou8 fails */
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: kstrtou8 failed ", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (0 != roamScanControl)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "roam scan control invalid value = %d",
+ roamScanControl);
+ ret = -EINVAL;
+ goto exit;
+ }
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "%s: Received Command to Set roam scan control = %d", __func__, roamScanControl);
+
+ sme_SetRoamScanControl((tHalHandle)(pHddCtx->hHal), roamScanControl);
+ }
#ifdef FEATURE_WLAN_OKC
else if (strncmp(command, "SETOKCMODE", 10) == 0)
{
@@ -1362,6 +1537,21 @@
pHddCtx->cfg_ini->isOkcIniFeatureEnabled = okcMode;
}
+ else if (strncmp(priv_data.buf, "GETROAMSCANCONTROL", 18) == 0)
+ {
+ tANI_BOOLEAN roamScanControl = sme_GetRoamScanControl((tHalHandle)(pHddCtx->hHal));
+ char extra[32];
+ tANI_U8 len = 0;
+
+ len = snprintf(extra, sizeof(extra), "%s %d", command, roamScanControl);
+ if (copy_to_user(priv_data.buf, &extra, len + 1))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: failed to copy data to user buffer", __func__);
+ ret = -EFAULT;
+ goto exit;
+ }
+ }
#endif
else {
hddLog( VOS_TRACE_LEVEL_WARN, "%s: Unsupported GUI command %s",
@@ -1405,6 +1595,151 @@
/**---------------------------------------------------------------------------
+ \brief hdd_parse_send_action_frame_data() - HDD Parse send action frame data
+
+ This function parses the send action frame data passed in the format
+ SENDACTIONFRAME<space><bssid><space><channel><space><dwelltime><space><data>
+
+ \param - pValue Pointer to input country code revision
+ \param - pTargetApBssid Pointer to target Ap bssid
+ \param - pChannel Pointer to the Target AP channel
+ \param - pDwellTime Pointer to the time to stay off-channel after transmitting action frame
+ \param - pBuf Pointer to data
+ \param - pBufLen Pointer to data length
+
+ \return - 0 for success non-zero for failure
+
+ --------------------------------------------------------------------------*/
+VOS_STATUS hdd_parse_send_action_frame_data(tANI_U8 *pValue, tANI_U8 *pTargetApBssid, tANI_U8 *pChannel,
+ tANI_U8 *pDwellTime, tANI_U8 **pBuf, tANI_U8 *pBufLen)
+{
+ tANI_U8 *inPtr = pValue;
+ tANI_U8 *dataEnd;
+ int tempInt;
+ int j = 0;
+ int i = 0;
+ int v = 0;
+ tANI_U8 tempBuf[32];
+ tANI_U8 tempByte = 0;
+
+ inPtr = strnchr(pValue, strlen(pValue), SPACE_ASCII_VALUE);
+ /*no argument after the command*/
+ if (NULL == inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /*no space after the command*/
+ else if (SPACE_ASCII_VALUE != *inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /*removing empty spaces*/
+ while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++;
+
+ /*no argument followed by spaces*/
+ if ('\0' == *inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /*getting the first argument ie the target AP bssid */
+ if (inPtr[2] != ':' || inPtr[5] != ':' || inPtr[8] != ':' || inPtr[11] != ':' || inPtr[14] != ':')
+ {
+ return -EINVAL;
+ }
+ j = sscanf(inPtr, "%2x:%2x:%2x:%2x:%2x:%2x", (unsigned int *)&pTargetApBssid[0], (unsigned int *)&pTargetApBssid[1],
+ (unsigned int *)&pTargetApBssid[2], (unsigned int *)&pTargetApBssid[3],
+ (unsigned int *)&pTargetApBssid[4], (unsigned int *)&pTargetApBssid[5]);
+
+ /* point to the next argument */
+ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE);
+ /*no argument after the command*/
+ if (NULL == inPtr) return -EINVAL;
+
+ /*removing empty spaces*/
+ while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++;
+
+ /*no argument followed by spaces*/
+ if ('\0' == *inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /*getting the next argument ie the channel number */
+ j = sscanf(inPtr, "%s ", tempBuf);
+ v = kstrtos32(tempBuf, 10, &tempInt);
+ if ( v < 0) return -EINVAL;
+
+ *pChannel = tempInt;
+
+ /* point to the next argument */
+ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE);
+ /*no argument after the command*/
+ if (NULL == inPtr) return -EINVAL;
+ /*removing empty spaces*/
+ while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++;
+
+ /*no argument followed by spaces*/
+ if ('\0' == *inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /*getting the next argument ie the dwell time */
+ j = sscanf(inPtr, "%s ", tempBuf);
+ v = kstrtos32(tempBuf, 10, &tempInt);
+ if ( v < 0) return -EINVAL;
+
+ *pDwellTime = tempInt;
+
+ /* point to the next argument */
+ inPtr = strnchr(inPtr, strlen(inPtr), SPACE_ASCII_VALUE);
+ /*no argument after the command*/
+ if (NULL == inPtr) return -EINVAL;
+ /*removing empty spaces*/
+ while ((SPACE_ASCII_VALUE == *inPtr) && ('\0' != *inPtr) ) inPtr++;
+
+ /*no argument followed by spaces*/
+ if ('\0' == *inPtr)
+ {
+ return -EINVAL;
+ }
+
+ /* find the length of data */
+ dataEnd = inPtr;
+ while(('\0' != *dataEnd) )
+ {
+ dataEnd++;
+ ++(*pBufLen);
+ }
+ if ( *pBufLen <= 0) return -EINVAL;
+
+ *pBuf = vos_mem_malloc(sizeof(*pBufLen));
+ if (NULL == *pBuf)
+ {
+ hddLog(VOS_TRACE_LEVEL_FATAL,
+ "%s: vos_mem_alloc failed ", __func__);
+ return -EINVAL;
+ }
+
+ /* the buffer received from the upper layer is character buffer,
+ we need to prepare the buffer taking 2 characters in to a U8 hex decimal number
+ for example 7f0000f0...form a buffer to contain 7f in 0th location, 00 in 1st
+ and f0 in 3rd location */
+ for (i = 0, j = 0; j < *pBufLen; j += 2)
+ {
+ tempByte = (hdd_parse_hex(inPtr[j]) << 4) | (hdd_parse_hex(inPtr[j + 1]));
+ (*pBuf)[i++] = tempByte;
+ }
+ *pBufLen = i;
+ return VOS_STATUS_SUCCESS;
+}
+
+#endif
+/**---------------------------------------------------------------------------
+
\brief hdd_parse_countryrev() - HDD Parse country code revision
This function parses the country code revision passed in the format
@@ -1600,7 +1935,6 @@
return VOS_STATUS_SUCCESS;
}
-#endif
/**---------------------------------------------------------------------------
\brief hdd_open() - HDD Open function
diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c
index 101bd18..e783033 100644
--- a/CORE/HDD/src/wlan_hdd_wowl.c
+++ b/CORE/HDD/src/wlan_hdd_wowl.c
@@ -71,7 +71,7 @@
char *g_hdd_wowl_ptrns[WOWL_MAX_PTRNS_ALLOWED]; //Patterns 0-7
-static int parse_hex(unsigned char c)
+int hdd_parse_hex(unsigned char c)
{
if (c >= '0' && c <= '9')
return c-'0';
@@ -190,11 +190,11 @@
// Extract the pattern size
localPattern.ucPatternSize =
- ( parse_hex( ptrn[0] ) * 0x10 ) + parse_hex( ptrn[1] );
+ ( hdd_parse_hex( ptrn[0] ) * 0x10 ) + hdd_parse_hex( ptrn[1] );
// Extract the pattern mask size
localPattern.ucPatternMaskSize =
- ( parse_hex( ptrn[3] ) * 0x10 ) + parse_hex( ptrn[4] );
+ ( hdd_parse_hex( ptrn[3] ) * 0x10 ) + hdd_parse_hex( ptrn[4] );
if(localPattern.ucPatternSize > WOWL_PTRN_MAX_SIZE ||
localPattern.ucPatternMaskSize > WOWL_PTRN_MASK_MAX_SIZE)
@@ -234,7 +234,7 @@
for(i=0; i < localPattern.ucPatternSize; i++)
{
localPattern.ucPattern[i] =
- (parse_hex( ptrn[0] ) * 0x10 ) + parse_hex( ptrn[1] );
+ (hdd_parse_hex( ptrn[0] ) * 0x10 ) + hdd_parse_hex( ptrn[1] );
ptrn += 2; //skip to next byte
}
@@ -244,7 +244,7 @@
for(i=0; i < localPattern.ucPatternMaskSize; i++)
{
localPattern.ucPatternMask[i] =
- (parse_hex( ptrn[0] ) * 0x10 ) + parse_hex( ptrn[1] );
+ (hdd_parse_hex( ptrn[0] ) * 0x10 ) + hdd_parse_hex( ptrn[1] );
ptrn += 2; //skip to next byte
}