wlan: IBSS open/wep support using NL interface
Current driver does not work when we create/join
the IBSS over NL interface.
Modify driver to support IBSS using NL interface.
CRs-Fixed: 487731
Change-Id: I7b2d329c6481cff94c9ba40d7a377408a7573f9f
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 7931bad..f280547 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -4628,6 +4628,38 @@
return status;
}
+
+void hdd_select_cbmode( hdd_adapter_t *pAdapter,v_U8_t operationChannel)
+{
+ v_U8_t iniDot11Mode =
+ (WLAN_HDD_GET_CTX(pAdapter))->cfg_ini->dot11Mode;
+ eHddDot11Mode hddDot11Mode = iniDot11Mode;
+
+ switch ( iniDot11Mode )
+ {
+ case eHDD_DOT11_MODE_AUTO:
+ case eHDD_DOT11_MODE_11ac:
+ case eHDD_DOT11_MODE_11ac_ONLY:
+#ifdef WLAN_FEATURE_11AC
+ hddDot11Mode = eHDD_DOT11_MODE_11ac;
+#else
+ hddDot11Mode = eHDD_DOT11_MODE_11n;
+#endif
+ break;
+ case eHDD_DOT11_MODE_11n:
+ case eHDD_DOT11_MODE_11n_ONLY:
+ hddDot11Mode = eHDD_DOT11_MODE_11n;
+ break;
+ default:
+ hddDot11Mode = iniDot11Mode;
+ break;
+ }
+ /* This call decides required channel bonding mode */
+ sme_SelectCBMode((WLAN_HDD_GET_CTX(pAdapter)->hHal),
+ hdd_cfg_xlate_to_csr_phy_mode(hddDot11Mode),
+ operationChannel);
+}
+
/*
* FUNCTION: wlan_hdd_cfg80211_connect_start
* This function is used to start the association process
@@ -4788,7 +4820,10 @@
pRoamProfile->ChannelInfo.ChannelList = NULL;
pRoamProfile->ChannelInfo.numOfChannels = 0;
}
-
+ if ( (WLAN_HDD_IBSS == pAdapter->device_mode) && operatingChannel)
+ {
+ hdd_select_cbmode(pAdapter,operatingChannel);
+ }
/* change conn_state to connecting before sme_RoamConnect(), because sme_RoamConnect()
* has a direct path to call hdd_smeRoamCallback(), which will change the conn_state
* If direct path, conn_state will be accordingly changed to NotConnected or Associated
@@ -5771,61 +5806,44 @@
if (NULL != params->channel)
{
u8 channelNum;
- if (IEEE80211_BAND_5GHZ == params->channel->band)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: IBSS join is called with unsupported band %d",
- __func__, params->channel->band);
- return -EOPNOTSUPP;
- }
+ v_U32_t numChans = WNI_CFG_VALID_CHANNEL_LIST_LEN;
+ v_U8_t validChan[WNI_CFG_VALID_CHANNEL_LIST_LEN];
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
+ int indx;
/* Get channel number */
channelNum =
ieee80211_frequency_to_channel(params->channel->center_freq);
- /*TODO: use macro*/
- if (14 >= channelNum)
+
+ if (0 != ccmCfgGetStr(hHal, WNI_CFG_VALID_CHANNEL_LIST,
+ validChan, &numChans))
{
- v_U32_t numChans = WNI_CFG_VALID_CHANNEL_LIST_LEN;
- v_U8_t validChan[WNI_CFG_VALID_CHANNEL_LIST_LEN];
- tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
- int indx;
-
- if (0 != ccmCfgGetStr(hHal, WNI_CFG_VALID_CHANNEL_LIST,
- validChan, &numChans))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: No valid channel list",
- __func__);
- return -EOPNOTSUPP;
- }
-
- for (indx = 0; indx < numChans; indx++)
- {
- if (channelNum == validChan[indx])
- {
- break;
- }
- }
- if (indx >= numChans)
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Not valid Channel %d",
- __func__, channelNum);
- return -EINVAL;
- }
- /* Set the Operational Channel */
- hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: set channel %d", __func__,
- channelNum);
- pRoamProfile->ChannelInfo.numOfChannels = 1;
- pHddStaCtx->conn_info.operationChannel = channelNum;
- pRoamProfile->ChannelInfo.ChannelList =
- &pHddStaCtx->conn_info.operationChannel;
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: No valid channel list",
+ __func__);
+ return -EOPNOTSUPP;
}
- else
+
+ for (indx = 0; indx < numChans; indx++)
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Not valid Channel %hu",
+ if (channelNum == validChan[indx])
+ {
+ break;
+ }
+ }
+ if (indx >= numChans)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Not valid Channel %d",
__func__, channelNum);
return -EINVAL;
}
+ /* Set the Operational Channel */
+ hddLog(VOS_TRACE_LEVEL_INFO_HIGH, "%s: set channel %d", __func__,
+ channelNum);
+ pRoamProfile->ChannelInfo.numOfChannels = 1;
+ pHddStaCtx->conn_info.operationChannel = channelNum;
+ pRoamProfile->ChannelInfo.ChannelList =
+ &pHddStaCtx->conn_info.operationChannel;
}
/* Initialize security parameters */
@@ -5839,7 +5857,8 @@
/* Issue connect start */
status = wlan_hdd_cfg80211_connect_start(pAdapter, params->ssid,
- params->ssid_len, params->bssid, 0);
+ params->ssid_len, params->bssid,
+ pHddStaCtx->conn_info.operationChannel);
if (0 > status)
{