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;
          }