Revert "wlan: Add support to create/destroy sme session from iff_up/down"
This reverts commit 9113aeeaa5aae9be2ec786f58455e1016e1eab11.
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 43db794..e68aa7a 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -443,6 +443,7 @@
VOS_STATUS hdd_exit_deep_sleep(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter)
{
VOS_STATUS vosStatus;
+ eHalStatus halStatus;
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: calling hdd_set_sme_config",__func__);
@@ -479,8 +480,24 @@
goto err_voss_stop;
}
+
+ //Open a SME session for future operation
+ halStatus = sme_OpenSession( pHddCtx->hHal, hdd_smeRoamCallback, pHddCtx,
+ (tANI_U8 *)&pAdapter->macAddressCurrent,
+ &pAdapter->sessionId);
+ if ( !HAL_STATUS_SUCCESS( halStatus ) )
+ {
+ hddLog(VOS_TRACE_LEVEL_FATAL,"sme_OpenSession() failed with status code %08d [x%08x]",
+ halStatus, halStatus );
+ goto err_voss_stop;
+
+ }
+
pHddCtx->hdd_ps_state = eHDD_SUSPEND_NONE;
+ //Trigger the initial scan
+ hdd_wlan_initial_scan(pAdapter);
+
return VOS_STATUS_SUCCESS;
err_voss_stop:
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 750edef..1728d3f 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -174,64 +174,19 @@
int __hdd_hostapd_open (struct net_device *dev)
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
- hdd_context_t *pHddCtx;
- VOS_STATUS status;
- v_BOOL_t in_standby = TRUE;
- hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
ENTER();
- if (test_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags)) {
- hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: session already opened for the adapter",
- __func__);
- return 0;
- }
-
- pHddCtx = (hdd_context_t*)pAdapter->pHddCtx;
- MTRACE(vos_trace(VOS_MODULE_ID_HDD, TRACE_CODE_HDD_OPEN_REQUEST,
- pAdapter->sessionId, pAdapter->device_mode));
- if (NULL == pHddCtx)
+ if(!test_bit(SOFTAP_BSS_STARTED, &pAdapter->event_flags))
{
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
- "%s: HDD context is Null", __func__);
- return -ENODEV;
- }
- status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
- while ( (NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status) )
- {
- if (test_bit(DEVICE_IFACE_OPENED, &pAdapterNode->pAdapter->event_flags))
- {
- hddLog(VOS_TRACE_LEVEL_INFO, "%s: chip already out of standby",
- __func__);
- in_standby = FALSE;
- break;
- }
- else
- {
- status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
- pAdapterNode = pNext;
- }
+ //WMM_INIT OR BSS_START not completed
+ hddLog( LOGW, "Ignore hostadp open request");
+ EXIT();
+ return 0;
}
- if (TRUE == in_standby)
- {
- if (VOS_STATUS_SUCCESS != wlan_hdd_exit_lowpower(pHddCtx, pAdapter))
- {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failed to bring "
- "wlan out of power save", __func__);
- return -EINVAL;
- }
- }
-
- status = hdd_init_ap_mode( pAdapter, false);
- if( VOS_STATUS_SUCCESS != status ) {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failed to create session for station mode",
- __func__);
- return -EINVAL;
- }
-
- set_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags);
-
+ MTRACE(vos_trace(VOS_MODULE_ID_HDD,
+ TRACE_CODE_HDD_HOSTAPD_OPEN_REQUEST, NO_SESSION, 0));
//Turn ON carrier state
netif_carrier_on(dev);
//Enable all Tx queues
@@ -284,14 +239,6 @@
//Turn OFF carrier state
netif_carrier_off(dev);
- if (test_bit(SME_SESSION_OPENED, &adapter->event_flags)) {
- hdd_stop_adapter(hdd_ctx, adapter, VOS_TRUE);
- hdd_deinit_adapter(hdd_ctx, adapter, TRUE);
- }
-
- clear_bit(DEVICE_IFACE_OPENED, &adapter->event_flags);
- adapter->dev->wireless_handlers = NULL;
-
if (!hdd_is_cli_iface_up(hdd_ctx))
sme_ScanFlushResult(hdd_ctx->hHal, 0);
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index ab7c2f3..6e55d3d 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -8069,12 +8069,6 @@
return -ENODEV;
}
- if (test_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags)) {
- hddLog(VOS_TRACE_LEVEL_DEBUG, "%s: session already opened for the adapter",
- __func__);
- return 0;
- }
-
status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
while ( (NULL != pAdapterNode) && (VOS_STATUS_SUCCESS == status) )
{
@@ -8101,14 +8095,7 @@
return -EINVAL;
}
}
-
- status = hdd_init_station_mode( pAdapter );
- if( VOS_STATUS_SUCCESS != status ) {
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Failed to create session for station mode",
- __func__);
- return -EINVAL;
- }
-
+
set_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags);
if (hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter)))
{
@@ -8281,6 +8268,8 @@
wlan_hdd_stop_mon(pHddCtx, true);
}
+ /* Make sure the interface is marked as closed */
+ clear_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags);
hddLog(VOS_TRACE_LEVEL_INFO, "%s: Disabling OS Tx queues", __func__);
/* Disable TX on the interface, after this hard_start_xmit() will not
@@ -8301,8 +8290,7 @@
* Notice that the hdd_stop_adapter is requested not to close the session
* That is intentional to be able to scan if it is a STA/P2P interface
*/
- hdd_stop_adapter(pHddCtx, pAdapter, VOS_TRUE);
- clear_bit(DEVICE_IFACE_OPENED, &pAdapter->event_flags);
+ hdd_stop_adapter(pHddCtx, pAdapter, VOS_FALSE);
#ifdef FEATURE_WLAN_TDLS
mutex_lock(&pHddCtx->tdls_lock);
#endif
@@ -8355,15 +8343,13 @@
}
}
- pAdapter->dev->wireless_handlers = NULL;
-
/*
* Upon wifi turn off, DUT has to flush the scan results so if
* this is the last cli iface, flush the scan database.
*/
if (!hdd_is_cli_iface_up(pHddCtx))
sme_ScanFlushResult(pHddCtx->hHal, 0);
-
+
EXIT();
return 0;
}
@@ -9854,6 +9840,9 @@
#endif
hdd_initialize_adapter_common(pAdapter);
+ status = hdd_init_station_mode( pAdapter );
+ if( VOS_STATUS_SUCCESS != status )
+ goto err_free_netdev;
status = hdd_register_interface( pAdapter, rtnl_held );
if( VOS_STATUS_SUCCESS != status )
@@ -9910,12 +9899,16 @@
pAdapter->device_mode = session_type;
hdd_initialize_adapter_common(pAdapter);
+ status = hdd_init_ap_mode(pAdapter, false);
+ if( VOS_STATUS_SUCCESS != status )
+ goto err_free_netdev;
status = hdd_sta_id_hash_attach(pAdapter);
if (VOS_STATUS_SUCCESS != status)
{
hddLog(VOS_TRACE_LEVEL_FATAL,
FL("failed to attach hash for session %d"), session_type);
+ hdd_deinit_adapter(pHddCtx, pAdapter, rtnl_held);
goto err_free_netdev;
}