Revision: 201011 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 01 Apr 2010 00:29:25 +0300
branchRCL_3
changeset 7 0abc8c98be24
parent 6 e0f767079796
child 8 4e2a442f3e66
Revision: 201011 Kit: 201013
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp
wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/cenrep/keys_wlanengine.xls
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine.confml
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine_101f8e44.crml
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlancbwaiter.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlancbwaiter.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp
wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp
wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h
wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h
wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl
wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h
wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h
wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp
wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp
wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp
wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp
wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h
wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl
wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp
wlan_bearer/wlannwif/inc/NifWLMServerIf.h
wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h	Thu Apr 01 00:29:25 2010 +0300
@@ -17,7 +17,7 @@
 */
 
 /*
-* %version: 35 %
+* %version: 36 %
 */
 
 #ifndef ABS_CORE_DRIVERIF_H
@@ -373,6 +373,7 @@
      *                       (in microseconds).
      * @param sp_min_indication_interval Defines the minimum time interval for consecutive roam
      *                                   indications from the signal predictor algorithm (in microseconds).
+     * @param enabled_features Bitmask of enabled features. @see core_feature_e.
      */
     virtual void load_drivers(
         u32_t request_id,
@@ -385,7 +386,8 @@
         u32_t keep_alive_interval,
         u32_t sp_rcpi_target,
         u32_t sp_time_target,
-        u32_t sp_min_indication_interval ) = 0;
+        u32_t sp_min_indication_interval,
+        u32_t enabled_features ) = 0;
 
     /**
      * Send a frame.
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h	Thu Apr 01 00:29:25 2010 +0300
@@ -17,7 +17,7 @@
 */
 
 /*
-* %version: 30 %
+* %version: 31 %
 */
 
 #ifndef ABS_CORE_SERVER_H
@@ -463,6 +463,16 @@
         core_ac_traffic_information_s& info ) = 0;
 
     /**
+     * Set the currently enabled feature set.
+     *
+     * @since S60 v5.2
+     * @param features Bitmask of enabled features.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    virtual core_error_e set_enabled_features(
+        u32_t features ) = 0;
+
+    /**
      * Schedule an immediate driver unload.
      *
      * @since S60 v3.1     
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 54 %
+* %version: 55 %
 */
 
 #ifndef CORE_SERVER_H
@@ -862,6 +862,16 @@
         core_ac_traffic_information_s& info );
 
     /**
+     * Set the currently enabled feature set.
+     *
+     * @since S60 v5.2
+     * @param features Bitmask of enabled features.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    core_error_e set_enabled_features(
+        u32_t features );
+
+    /**
      * An asynchronous request from the core server has been completed.
      *
      * @since S60 v3.1
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h	Thu Apr 01 00:29:25 2010 +0300
@@ -469,7 +469,25 @@
      * @param iap_id IAP ID to be removed.
      */   
     void remove_iap_id_from_weak_list( u32_t iap_id );
-	
+
+    /**
+     * Set the currently enabled feature set.
+     *
+     * @since S60 v5.2
+     * @param features Bitmask of enabled features.
+     * @return core_error_ok if success, an error code otherwise.
+     */
+    void set_enabled_features(
+        u32_t features );
+
+    /**
+     * Get the currently enabled feature set.
+     *
+     * @since S60 v5.2
+     * @return Bitmask of enabled features.
+     */
+    u32_t enabled_features() const;
+
 	/**
      * Check whether the given feature is enabled.
      *
@@ -484,10 +502,10 @@
 
     /** Defines whether wlan functionality is enabled or disabled */
     bool_t is_wlan_enabled_m;    
-    
+
     /** Defines whether the drivers have been loaded. */
     bool_t is_driver_loaded_m;
-    
+
     /** Specifies the current connection state */
     core_connection_state_e connection_state_m;
 
@@ -511,7 +529,7 @@
 
     /** Defines the currently used regional domain. */
     core_wlan_region_e region_m;
-    
+
     /** Defines whether the mobile country code is known or not. */
     bool_t mcc_known_m;
 
@@ -532,14 +550,12 @@
 
     /** Power save settings for access classes. */
     core_power_save_settings_s power_save_settings_m;
-    
+
     /** Block ACK usage per traffic stream. */
     core_block_ack_usage_s block_ack_usage_m;
-	
-	    
+
     /** List of IAP Ids whose rcpi values are weak  */
     core_type_list_c<u32_t> weak_iap_list_m;
-    
 
     /** Bitmask of enabled features. */
     u32_t features_m;
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 95.1.2 %
+* %version: 97 %
 */
 
 #ifndef CORE_TYPES_H
@@ -1133,7 +1133,9 @@
     /** Power save test enabled. */    
     core_feature_power_save_test        = 1,
     /** 802.11k support enabled. */
-    core_feature_802dot11k              = 2
+    core_feature_802dot11k              = 2,
+    /** 802.11n support enabled. */
+    core_feature_802dot11n              = 4    
     } core_feature_e;
 
 /**
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 21 %
+* %version: 22 %
 */
 
 #include "core_operation_check_rcpi.h"
@@ -299,24 +299,6 @@
 
             DEBUG( "core_operation_check_rcpi_c::next_state() - roamed successfully" );
                         
-            /**
-             * If moving from weak level to normal, notify client.
-             */
-            if ( server_m->get_connection_data()->last_rcp_class() != core_rcp_normal )
-                {
-                DEBUG( "core_operation_check_rcpi_c::next_state() - sending a notification about the normal signal level" );
-
-                u8_t buf[5];
-                buf[0] = static_cast<u8_t>( core_rcp_normal );
-                buf[1] = server_m->get_connection_data()->current_ap_data()->rcpi();
-                
-                adaptation_m->notify(
-                    core_notification_rcp_changed,
-                    sizeof( buf ),
-                    buf );
-                server_m->get_connection_data()->set_last_rcp_class( core_rcp_normal );
-                }
-
             /** 
              * Send an indication to adaptation to indicate that this
              * roam attempt has been completed.
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 76 %
+* %version: 76.1.1 %
 */
 
 #include "core_operation_roam.h"
@@ -513,6 +513,21 @@
                     }
                 }
 
+            if ( server_m->get_connection_data()->last_rcp_class() != core_rcp_normal )
+                {
+                DEBUG( "core_operation_roam_c::next_state() - sending a notification about the normal signal level" );
+
+                u8_t buf[5];
+                buf[0] = static_cast<u8_t>( core_rcp_normal );
+                buf[1] = current_ap_m->rcpi();
+
+                adaptation_m->notify(
+                    core_notification_rcp_changed,
+                    sizeof( buf ),
+                    buf );
+                server_m->get_connection_data()->set_last_rcp_class( core_rcp_normal );
+                }
+
             if ( current_ap_m->is_wpx() )
                 {
                 server_m->get_wpx_adaptation_instance().handle_wpx_roam_success(
@@ -1209,7 +1224,7 @@
             is_security_association_available( *server_m->get_connection_data()->current_ap_data() ) )
             {
             DEBUG( "core_operation_roam_c::process_frame() - WPX fast-roam supported" );
-                
+
             entry->is_cached_sa_available = true_t;
             entry_score += CORE_ROAMING_LIST_BONUS_WPX_FAST_ROAM;
             }
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 89 %
+* %version: 90 %
 */
 
 #include "core_server.h"
@@ -1617,6 +1617,19 @@
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
+core_error_e core_server_c::set_enabled_features(
+    u32_t features )
+    {
+    DEBUG( "core_server_c::set_enabled_features()" );
+
+    core_settings_m.set_enabled_features( features );
+    
+    return core_error_ok;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
 void core_server_c::get_roam_metrics(
     core_roam_metrics_s& roam_metrics )
     {
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -48,7 +48,8 @@
     weak_iap_list_m( ),
 	features_m( features )
     {
-    DEBUG( "core_settings_c::core_settings_c()" ); 
+    DEBUG1( "core_settings_c::core_settings_c() - features: 0x%08X",
+        features ); 
 
     clear_connection_statistics();
 
@@ -744,6 +745,38 @@
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
+//
+void core_settings_c::set_enabled_features(
+    u32_t features )
+    {
+    DEBUG1( "core_settings_c::set_enabled_features() - features: 0x%08X",
+        features );
+    if( features & core_feature_power_save_test )
+        {
+        DEBUG( "core_settings_c::set_enabled_features() - core_feature_power_save_test" );
+        }
+    if( features & core_feature_802dot11k )
+        {
+        DEBUG( "core_settings_c::set_enabled_features() - core_feature_802dot11k" );
+        }
+    if( features & core_feature_802dot11n )
+        {
+        DEBUG( "core_settings_c::set_enabled_features() - core_feature_802dot11n" );
+        }
+
+    features_m = features;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+u32_t core_settings_c::enabled_features() const
+    {
+    return features_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
 // 
 bool_t core_settings_c::is_feature_enabled(
     core_feature_e feature ) const
--- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -92,7 +92,7 @@
             DEBUG( "core_sub_operation_load_drivers_c::next_state() - loading drivers" );
 
             operation_state_m = core_state_req_load_drivers;
-            
+
             drivers_m->load_drivers(
                 request_id_m,
                 server_m->get_device_settings().rts,
@@ -104,7 +104,8 @@
                 server_m->get_device_settings().keep_alive_interval,
                 server_m->get_device_settings().sp_rcpi_target,
                 server_m->get_device_settings().sp_time_target,
-                server_m->get_device_settings().sp_min_indication_interval );
+                server_m->get_device_settings().sp_min_indication_interval,
+                server_m->get_core_settings().enabled_features() );
 
             break;
             }
Binary file wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/cenrep/keys_wlanengine.xls has changed
Binary file wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine.confml has changed
Binary file wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine_101f8e44.crml has changed
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlancbwaiter.h	Mon Mar 15 12:46:48 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This class implements an active object with callback functionality.
-*
-*/
-
-
-#ifndef WLANCBWAITER_H
-#define WLANCBWAITER_H
-
-#include <e32base.h>
-
-/**
- * This class implements an active object with callback functionality.
- * 
- * @since S60 v3.2
- */
-NONSHARABLE_CLASS( CWlanCbWaiter ) : public CActive
-    {
-
-public:
-
-    /**
-     * Factory for creating an instance of CWlanTestWaiter.
-     *
-     * @param aCallback Callback to call when active object completes.
-     * @return NULL if unable create an instance, a pointer to the instance otherwise.
-     */
-    static CWlanCbWaiter* NewL(
-        const TCallBack& aCallback );
-
-    /**
-     * Destructor.
-     */
-    virtual ~CWlanCbWaiter();
-
-    /**
-     * Issue an asynchronous request.
-     *
-     * @since S60 v3.2
-     */
-    void IssueRequest();
-
-    /**
-     * Return the status of the request.
-     *
-     * @return Reference to status of the request.
-     */
-    TRequestStatus& RequestStatus();
-
-// from base class CActive
-
-    /**
-     * From CActive.
-     * Called by the active object framework when the request has been completed.
-     */
-    void RunL();
-
-    /**
-     * From CActive.
-     * Called by the framework if RunL leaves.
-     *
-     * @param aError The error code RunL leaved with.
-     * @return KErrNone if leave was handled, one of the system-wide error codes otherwise.
-     */
-    TInt RunError(
-        TInt aError );
-
-    /**
-     * From CActive.
-     * Called by the framework when Cancel() has been called.
-     */
-    void DoCancel();
-
-private:
-
-    /**
-     * Constructor.
-     *
-     * @param aCallback Callback to call when active object completes.
-     */
-    CWlanCbWaiter(
-        const TCallBack& aCallback );
-
-    /**
-     * By default Symbian 2nd phase constructor is private.
-     */
-    void ConstructL();
-
-private: // data
-
-    /** Function to call once request has been completed. */
-    TCallBack iCallback;
-
-    };
-
-#endif // WLANCBWAITER_H
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 33 %
+* %version: 34 %
 */
 
 #ifndef WLANCONVERSIONUTIL_H
@@ -562,16 +562,28 @@
         static void ConvertPowerSaveMode(
             core_power_save_mode_s& aCoreMode,
             TWlanPowerSaveMode aAmMode );        
-      
+
         /**
          * Convert feature flags.
          *
          * @since S60 v5.1
-         * @param aFeatures
+         * @param aStaticFeatures Bitmask of statically enabled features.
+         * @param aDynamicFeatures Bitmask of dynamically enabled features.
          * @return Corresponding core features.
          */
         static u32_t ConvertFeatureFlags(
-            TUint aFeatures );
+            TUint aStaticFeatures,
+            TUint aDynamicFeatures );
+
+        /**
+         * Convert feature flags.
+         *
+         * @since S60 v5.1
+         * @param aCoreFlags Bitmask enabled features.
+         * @return Corresponding UMAC features.
+         */        
+        static TUint ConvertFeatureFlags(
+            u32_t aCoreFlags );
 
         /**
          * Convert access class.
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 22 %
+* %version: 23 %
 */
 
 #ifndef WLANDEVICESETTINGS_H
@@ -103,6 +103,18 @@
 const TUint32 KWlanDefaultBgScanIntervalOffPeakPeriod = 1200;   // Background scan interval for off-peak hours is 1200 s
 const TUint32 KWlanDefaultMinActiveBroadcastChannelTime = 10;
 const TUint32 KWlanDefaultMaxActiveBroadcastChannelTime = 110;
+const TUint32 KWlanDefaultEnabledFeatures = 0xFFFFFFFF;
+
+/**
+ * Bit definitions for run-time WLAN features.
+ */
+enum TWlanRunTimeFeature
+    {
+    /** Initialisation value. */
+    EWlanRunTimeFeatureNone                = 0x00000000,
+    /** Whether 802.11n is enabled. */
+    EWlanRunTimeFeature802dot11n           = 0x00000001,
+    };
 
 // The value of backgroundScanInterval to deny periodic scanning
 const TUint KScanIntervalNever = 0;
@@ -196,6 +208,7 @@
         TBool automaticTrafficStreamMgmt;           ///< Whether admission control traffic stream management is done automatically.        
         TUint32 minActiveBroadcastChannelTime;      ///< Min time (TUs) to listen a channel in active broadcast scanning when not connected.
         TUint32 maxActiveBroadcastChannelTime;      ///< Max time (TUs) to listen a channel in active broadcast scanning when not connected.
+        TUint32 enabledFeatures;                    ///< Bitmask of enabled WLAN features.
         TUint32 region;                             ///< Last known WLAN region that is valid for 5 hours. This value is selected based on the information received from the APs or from cellular network (MCC).
         TInt32  regionTimestamp;                    ///< Timestamp for storing the latest WLAN region (region) to CenRep (minutes from 0AD nominal Gregorian).  
         };
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 31 %
+* %version: 32 %
 */
 
 #ifndef WLANMGMTCOMMANDHANDLER_H
@@ -170,6 +170,7 @@
      *                      (in microseconds).
      * @param aSpMinIndicationInterval Defines the minimum time interval for consecutive roam
      *                                 indications from the signal predictor algorithm (in microseconds).
+     * @param aEnabledFeatures Bitmask of enabled features.
      */
     void Configure(
         TUint16 aRTSThreshold, 
@@ -181,7 +182,8 @@
         TUint32 aKeepAliveInterval,
         TUint32 aSpRcpiTarget,
         TUint32 aSpTimeTarget,
-        TUint32 aSpMinIndicationInterval );
+        TUint32 aSpMinIndicationInterval,
+        TUint32 aEnabledFeatures );
 
     /**
      * GetLastRCPI
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 7 %
+* %version: 8 %
 */
 
 
@@ -120,6 +120,11 @@
         };
 
     /**
+     * Destructor.
+     */
+    virtual ~MWlanBgScanProvider() {};
+    
+    /**
      * Called when Scan is complete.
      *
      * @since S60 v5.2
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 38 %
+* %version: 39 %
 */
 
 #ifndef WLMDRIVERIF_H
@@ -392,6 +392,7 @@
      *                       (in microseconds).
      * @param sp_min_indication_interval Defines the minimum time interval for consecutive roam
      *                                   indications from the signal predictor algorithm (in microseconds).
+     * @param enabled_features Bitmask of enabled features. @see core_feature_e.
      */
     void load_drivers(
         u32_t request_id,
@@ -404,7 +405,8 @@
         u32_t keep_alive_interval,
         u32_t sp_rcpi_target,
         u32_t sp_time_target,
-        u32_t sp_min_indication_interval );
+        u32_t sp_min_indication_interval,
+        u32_t enabled_features );
 
     /**
      * Send a frame.
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 54 %
+* %version: 55 %
 */
 
 #ifndef WLMSERVER_H
@@ -105,18 +105,20 @@
             };
 
         /**
-         * Bit definitions for WLAN features.
+         * Bit definitions for static WLAN features.
          */
-        enum TWlanFeature
+        enum TWlanStaticFeature
             {
             /** Initialisation value. */
-            EWlanFeatureNone                = 0x00000000,
+            EWlanStaticFeatureNone                = 0x00000000,
             /** Whether WAPI is enabled. */
-            EWlanFeatureWapi                = 0x00000001,
+            EWlanStaticFeatureWapi                = 0x00000001,
             /** Whether power save test is enabled. */
-            EWlanFeaturePowerSaveTest       = 0x00000002,
+            EWlanStaticFeaturePowerSaveTest       = 0x00000002,
             /** Whether 802.11k is enabled. */
-            EWlanFeature802dot11k           = 0x00000004
+            EWlanStaticFeature802dot11k           = 0x00000004,
+            /** Whether 802.11n is enabled. */
+            EWlanStaticFeature802dot11n           = 0x00000008,
             };
 
         /**
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlancbwaiter.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This class implements an active object with callback functionality.
-*
-*/
-
-
-#include "wlancbwaiter.h"
-#include "am_debug.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-CWlanCbWaiter::CWlanCbWaiter(
-    const TCallBack& aCallback ) :
-    CActive( CActive::EPriorityStandard ),
-    iCallback( aCallback )
-    {
-    DEBUG( "CWlanCbWaiter::CWlanCbWaiter()" );
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CWlanCbWaiter::ConstructL()
-    {
-    DEBUG( "CWlanCbWaiter::ConstructL()" );
-    CActiveScheduler::Add( this );
-    DEBUG( "CWlanCbWaiter::ConstructL() - done" );
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-CWlanCbWaiter* CWlanCbWaiter::NewL(
-    const TCallBack& aCallback )
-    {
-    DEBUG( "CWlanCbWaiter::NewL()" );
-    CWlanCbWaiter* self = new (ELeave) CWlanCbWaiter( aCallback );
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-CWlanCbWaiter::~CWlanCbWaiter()
-    {
-    DEBUG( "CWlanCbWaiter::~CWlanCbWaiter()" );
-    Cancel();
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CWlanCbWaiter::IssueRequest()
-    {
-    DEBUG( "CWlanCbWaiter::IssueRequest()" );
-    SetActive();
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-TRequestStatus& CWlanCbWaiter::RequestStatus()
-    {
-    DEBUG1( "CWlanCbWaiter::RequestStatus() - iStatus = %d", iStatus.Int() );
-    return iStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CWlanCbWaiter::RunL()
-    {
-    DEBUG1( "CWlanCbWaiter::RunL() - iStatus = %d", iStatus.Int() );
-
-    iCallback.CallBack();
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-TInt CWlanCbWaiter::RunError(
-    TInt /* aError */ )
-    {
-    DEBUG( "CWlanCbWaiter::RunError()" );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void CWlanCbWaiter::DoCancel()
-    {
-    DEBUG( "CWlanCbWaiter::DoCancel()" );
-    }
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 84.1.2 %
+* %version: 86 %
 */
 
 #include <in_sock.h>
@@ -1794,22 +1794,45 @@
 // ---------------------------------------------------------
 //
 u32_t TWlanConversionUtil::ConvertFeatureFlags(
-    TUint aFeatures )
+    TUint aStaticFeatures,
+    TUint aDynamicFeatures )
     {
     u32_t coreFeatures( core_feature_none );
-    if( aFeatures & CWlmServer::EWlanFeaturePowerSaveTest )
+    if( aStaticFeatures & CWlmServer::EWlanStaticFeaturePowerSaveTest )
         {
         coreFeatures |= core_feature_power_save_test;
         }
-    if( aFeatures & CWlmServer::EWlanFeature802dot11k )
+    if( aStaticFeatures & CWlmServer::EWlanStaticFeature802dot11k )
         {
         coreFeatures |= core_feature_802dot11k;
         }
+    if( ( aStaticFeatures & CWlmServer::EWlanStaticFeature802dot11n ) &&
+        ( aDynamicFeatures & EWlanRunTimeFeature802dot11n ) ) 
+        {
+        coreFeatures |= core_feature_802dot11n;
+        }
 
     return coreFeatures;
     }
 
 // ---------------------------------------------------------
+// TWlanConversionUtil::ConvertFeatureFlags()
+// ---------------------------------------------------------
+//
+TUint TWlanConversionUtil::ConvertFeatureFlags(
+    u32_t aCoreFlags )
+    {
+    TUint ret( 0 );
+
+    if( aCoreFlags & core_feature_802dot11n )
+        {
+        ret |= KWlanHtOperation;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------
 // TWlanConversionUtil::ConvertAccessClass()
 // ---------------------------------------------------------
 //
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 20 %
+* %version: 21 %
 */
 
 // INCLUDE FILES
@@ -206,6 +206,7 @@
     aSettings.automaticTrafficStreamMgmt = ETrue;
     aSettings.minActiveBroadcastChannelTime = KWlanDefaultMinActiveBroadcastChannelTime;
     aSettings.maxActiveBroadcastChannelTime = KWlanDefaultMaxActiveBroadcastChannelTime;
+    aSettings.enabledFeatures = KWlanDefaultEnabledFeatures;
     aSettings.region = KWlanDefaultRegion;
     aSettings.regionTimestamp = KWlanDefaultRegionTimestamp;
     }
@@ -804,6 +805,13 @@
         aSettings.maxActiveBroadcastChannelTime = temp;
         }  
 
+    // Read KWlanEnabledFeatures
+    err = repository->Get( KWlanEnabledFeatures, temp );
+    if( err == KErrNone ) 
+        {
+        aSettings.enabledFeatures = temp;
+        }  
+
     // Read KWlanRegion
     err = repository->Get( KWlanRegion, temp );
     if( err == KErrNone ) 
@@ -1440,6 +1448,15 @@
         DEBUG1( "CWlanDeviceSettings::WritePrivateData() - could not set key 0x%X", KWlanMaxActiveBroadcastChannelTime );
         }
 
+    // Write KWlanEnabledFeatures
+    err = repository->Set( 
+        KWlanEnabledFeatures, 
+        static_cast<TInt>( aSettings.enabledFeatures ) );
+    if( err ) 
+        {
+        DEBUG1( "CWlanDeviceSettings::WritePrivateData() - could not set key 0x%X", KWlanEnabledFeatures );
+        }
+
     // Write KWlanRegion
     err = repository->Set( 
     	KWlanRegion, 
@@ -1717,6 +1734,8 @@
         aSettings.minActiveBroadcastChannelTime );
     DEBUG1( "CWlanDeviceSettings::LogSettings() - maxActiveBroadcastChannelTime == %d",
         aSettings.maxActiveBroadcastChannelTime );
+    DEBUG1( "CWlanDeviceSettings::LogSettings() - enabledFeatures == %d",
+        aSettings.enabledFeatures );    
     DEBUG1( "CWlanDeviceSettings::LogSettings() - region == %u",
         aSettings.region );
     DEBUG1( "CWlanDeviceSettings::LogSettings() - regionTimestamp == %d",
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -15,6 +15,9 @@
 *
 */
 
+/*
+* %version: 4 %
+*/
 
 #include <wlanpluginclient.h>
 #include "wlangenericplugin.h"
@@ -165,6 +168,7 @@
     __UHEAP_MARKEND;
     
     delete cleanup;
+    REComSession::FinalClose();
     return KErrNone;
     }
 
@@ -207,5 +211,4 @@
     CleanupStack::PopAndDestroy(scheduler);
     
     DEBUG("CGenericWlanPlugin::LoadGenericWlanPluginL() - exit");
-    User::Exit( KErrNone );
     }
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 38 %
+* %version: 39 %
 */
 
 // INCLUDES
@@ -335,7 +335,8 @@
     TUint32 aKeepAliveInterval,
     TUint32 aSpRcpiTarget,
     TUint32 aSpTimeTarget,
-    TUint32 aSpMinIndicationInterval )
+    TUint32 aSpMinIndicationInterval,
+    TUint32 aEnabledFeatures )
     {
     DEBUG( "CWlanMgmtCommandHandler::Configure()" );
 
@@ -359,9 +360,12 @@
         aSpTimeTarget );
     DEBUG1( "CWlanMgmtCommandHandler::Configure() - aSpMinIndicationInterval = %u",
         aSpMinIndicationInterval );
+    DEBUG1( "CWlanMgmtCommandHandler::Configure() - aEnabledFeatures = 0x%08X",
+        aEnabledFeatures );
 
     TConfigureMsg msg;
     msg.hdr.oid_id = E802_11_CONFIGURE;
+    msg.allowedWlanFeatures = aEnabledFeatures;
     msg.RTSThreshold = aRTSThreshold;
     msg.maxTxMSDULifetime = aMaxTxMSDULifetime;
     msg.voiceCallEntryTimeout = aQoSNullFrameEntryTimeout;
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 51 %
+* %version: 52 %
 */
 
 #include <wlanhwinit.h>
@@ -131,7 +131,8 @@
     u32_t keep_alive_interval,
     u32_t sp_rcpi_target,
     u32_t sp_time_target,
-    u32_t sp_min_indication_interval )
+    u32_t sp_min_indication_interval,
+    u32_t enabled_features )
     {
     DEBUG( "CWlmDriverIf::load_drivers()" );
 
@@ -227,7 +228,8 @@
         keep_alive_interval,
         sp_rcpi_target,
         sp_time_target,
-        sp_min_indication_interval );
+        sp_min_indication_interval,
+        TWlanConversionUtil::ConvertFeatureFlags( enabled_features ) );
     }
 
 // -----------------------------------------------------------------------------
--- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 102 %
+* %version: 105 %
 */
 
 #include <e32def.h>
@@ -86,8 +86,8 @@
 
 /** Bitmask of WLAN features enabled at compile-time. */
 const TUint KWlanStaticFeatures =
-    CWlmServer::EWlanFeaturePowerSaveTest |
-    CWlmServer::EWlanFeature802dot11k;
+    CWlmServer::EWlanStaticFeature802dot11k |
+    CWlmServer::EWlanStaticFeature802dot11n;
 
 /** Multiplier for converting seconds into microseconds */
 const TUint KWlanSecsToMicrosecsMultiplier( 1000000 );
@@ -175,7 +175,7 @@
 
     if( FeatureManager::FeatureSupported( KFeatureIdFfWlanWapi ) )
         {
-        iSupportedFeatures |= EWlanFeatureWapi;
+        iSupportedFeatures |= EWlanStaticFeatureWapi;
         }
 
     DEBUG1( "CWlmServer::ConstructL() - supported WLAN features: 0x%08X",
@@ -206,14 +206,16 @@
     SetCachedRegion(deviceSettings.region, deviceSettings.regionTimestamp);    
     core_device_settings_s coreSettings; // core needs the settings here
     TWlanConversionUtil::ConvertDeviceSettings( coreSettings, deviceSettings );
-        
+
     // Create core server    
     User::LeaveIfNull( iCoreServer = core_server_factory_c::instance(
         *this,
         *iDriverIf,
         coreSettings,
         core_mac,
-        TWlanConversionUtil::ConvertFeatureFlags( iSupportedFeatures ) ) );
+        TWlanConversionUtil::ConvertFeatureFlags(
+            iSupportedFeatures,
+            deviceSettings.enabledFeatures ) ) );
     iCoreServer->disable_wlan( KWlanIntCmdDisableWlan );
 
     // Create scan timer
@@ -278,8 +280,9 @@
         delete session;
         }
 
+    // Stop all plugins
     iGenericWlanPlugin.StopPlugins();
-    
+
     delete iCoreServer;
     delete iDriverIf;
     iNotificationArray.Close();
@@ -289,12 +292,11 @@
     delete iCoreAsynchCb;
     delete iScanSchedulingTimer;
     delete iSsidListDb;
-    if ( iEapolClient )
-        {
-        delete iEapolClient;
-        iEapolClient = NULL;
-        }
+    delete iBgScanProvider;
+    delete iTimerServices;
+    delete iEapolClient;
     iEapolHandler = NULL;
+    REComSession::FinalClose();    
     }
 
 // -----------------------------------------------------------------------------
@@ -484,7 +486,7 @@
 
     // Check whether WAPI is supported
     if( iapData.SecurityMode == Wapi &&
-        !( iSupportedFeatures & EWlanFeatureWapi ) )
+        !( iSupportedFeatures & EWlanStaticFeatureWapi ) )
         {
         DEBUG( "CWlmServer::Connect() - WAPI is not supported" );
 
@@ -1517,6 +1519,19 @@
 
         return TWlanConversionUtil::ConvertErrorCode( ret );
         }
+    
+    u32_t coreFeatures = TWlanConversionUtil::ConvertFeatureFlags(
+        iSupportedFeatures,
+        settings.enabledFeatures );
+    ret = iCoreServer->set_enabled_features( coreFeatures );
+    if( ret != core_error_ok )
+        {
+        DEBUG1( "CWlmServer::UpdateWlanSettings() - set_enabled_features() failed with %u",
+            ret );
+
+        return TWlanConversionUtil::ConvertErrorCode( ret );
+        }
+
     DEBUG( "CWlmServer::UpdateWlanSettings() - returning" );
 
     return KErrNone;
@@ -2569,7 +2584,6 @@
     core_error_e aStatus,
     TBool aCompletedWasTriggering )
     {
-
     TInt idx = FindRequestIndex( aRequest.iRequestId );
     
     if( idx >= iRequestMap.Count() )
@@ -2579,8 +2593,6 @@
         }
     
     DEBUG1( "CWlmServer::CompleteInternalRequest() - index (%d)", idx );
-    
-    iRequestMap.Remove( idx );
 
     switch( aRequest.iRequestId )
         {
@@ -2630,9 +2642,12 @@
             }
         case KWlanIntCmdNull: // Fall through on purpose
         default:
+            DEBUG1( "CWlmServer::CompleteInternalRequest() - request ID %u not handled", aRequest.iRequestId );
             break;
             // not interested in rest of the internal request completions
         }
+
+    iRequestMap.Remove( idx );
     }
 
 // ---------------------------------------------------------
@@ -3436,7 +3451,9 @@
     
     // create mapping
     SRequestMapEntry mapEntry;
+    mapEntry.iFunction = EGetAvailableIaps;
     mapEntry.iRequestId = KWlanIntCmdBackgroundScan;
+    mapEntry.iSessionId = 0;
     mapEntry.iParam0 = iapDataList;
     mapEntry.iParam1 = iapIdList;
     mapEntry.iParam2 = scanList;
@@ -4050,8 +4067,14 @@
             
             DEBUG( "CWlmServer::CancelScan() - cancel timer" );
             iScanSchedulingTimer->Cancel();
-            
+
             DEBUG( "CWlmServer::CancelScan() - remove entry from request map" );
+            SRequestMapEntry entry = iRequestMap[index];
+            delete reinterpret_cast<core_type_list_c<core_iap_data_s>*>( entry.iParam0 );
+            delete reinterpret_cast<core_type_list_c<u32_t>*>( entry.iParam1 );
+            delete reinterpret_cast<ScanList*>( entry.iParam2);
+            delete reinterpret_cast<core_type_list_c<core_ssid_entry_s>*>( entry.iParam3 );
+            delete reinterpret_cast<TTime*>( entry.iTime );
             iRequestMap.Remove( index );
 
             DEBUG( "CWlmServer::CancelScan() - find next possible timed scan scheduling request" );
@@ -4083,6 +4106,12 @@
                 DEBUG( "CWlmServer::CancelScan() - just remove the entry from the request map" );
                 
                 DEBUG( "CWlmServer::CancelScan() - remove entry from request map" );
+                SRequestMapEntry entry = iRequestMap[index];
+                delete reinterpret_cast<core_type_list_c<core_iap_data_s>*>( entry.iParam0 );
+                delete reinterpret_cast<core_type_list_c<u32_t>*>( entry.iParam1 );
+                delete reinterpret_cast<ScanList*>( entry.iParam2);
+                delete reinterpret_cast<core_type_list_c<core_ssid_entry_s>*>( entry.iParam3 );
+                delete reinterpret_cast<TTime*>( entry.iTime );                
                 iRequestMap.Remove( index );
                 }
             }
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -17,7 +17,7 @@
 */
 
 /*
-* %version: 44 %
+* %version: 45 %
 */
 
 #ifndef WLAN802DOT11_H
@@ -1659,7 +1659,6 @@
         EStbcRxMask             = 0x0300,
         EDelayedBlockAckMask    = 0x0400,
         EDsssCckIn40MhzMask     = 0x1000,
-        EPsmpMask               = 0x2000,
         ELsigTxopProtectionMask = 0x8000
         };    
 
@@ -1862,18 +1861,6 @@
     inline void SetDsssCckIn40Mhz( TBool aValue );
 
     /**
-    * Evaluates if PSMP operation is supported
-    * @return ETrue if supported, EFalse otherwise
-    */
-    inline TBool Psmp() const;
-
-    /**
-    * Sets support for PSMP operation
-    * @param aValue ETrue if supported, EFalse otherwise
-    */
-    inline void SetPsmp( TBool aValue );
-
-    /**
     * Evaluates if L-SIG TXOP protection is supported
     * @return ETrue if supported, EFalse otherwise
     */
@@ -2315,37 +2302,6 @@
 // 
 // ---------------------------------------------------------------------------
 //
-inline TBool SHtCapabilitiesIeData::Psmp() const
-    {
-    return ( ( ReadUint16Toh( &iCapabilitiesInfo ) & EPsmpMask )
-             ? ETrue : EFalse );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-inline void SHtCapabilitiesIeData::SetPsmp( TBool aValue )
-    {
-    if ( aValue )
-        {
-        WriteHtoUint16( &iCapabilitiesInfo, 
-            ReadUint16Toh( &iCapabilitiesInfo ) | 
-            EPsmpMask );
-        }
-    else
-        {
-        const TUint16 temp ( ReadUint16Toh( &iCapabilitiesInfo ) );
-        WriteHtoUint16( 
-            &iCapabilitiesInfo, 
-            temp & ( ~EPsmpMask ) );        
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 inline TBool SHtCapabilitiesIeData::LsigTxopProtection() const
     {
     return ( ( ReadUint16Toh( &iCapabilitiesInfo ) & ELsigTxopProtectionMask )
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 103 %
+* %version: 104 %
 */
 
 #ifndef WLANCONTEXTIMPL_H
@@ -608,6 +608,26 @@
     */
     inline TMacAddress& GetBssId();
 
+    /**
+    * Regarding the features which we allow to be be configured on or off,
+    * sets the allowed features per WLAN Mgmt client request
+    *
+    * @param aFeaturesAllowed Feature bit mask where 1 means that the use of 
+    *        the corresponding feature is allowed and 0 means that its not
+    *        allowed 
+    */ 
+    inline void FeaturesAllowed( TWlanFeatures aFeaturesAllowed );
+        
+    /**
+    * Regarding the features which we allow to be be configured on or off,
+    * returns the allowed features
+    *
+    * @return Feature bit mask where 1 means that the use of 
+    *        the corresponding feature is allowed and 0 means that its not
+    *        allowed 
+    */ 
+    inline TWlanFeatures FeaturesAllowed() const;
+    
     inline void Aid( const TUint32 aAid );
     inline TUint32 Aid() const;
 
@@ -2000,6 +2020,14 @@
     typedef TUint8 TWlanFeatureArray[KMaxNumOfWlanFeatures];
 
 private:  // data
+
+    /**
+    * If a bit in this mask is set, use of the corresponding WLAN 
+    * feature is allowed; otherwise it is not allowed.
+    * Note that this mask doesn't contain all supported WLAN features
+    * but only the ones which we allow to be be configured on or off.
+    */ 
+    TWlanFeatures               iAllowedWlanFeatures;
     
     /** 
     * ETrue if the Tx data buffer for frames created internally in this 
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 76 %
+* %version: 77 %
 */
 
 #include "umacconnectcontext.h"
@@ -256,6 +256,24 @@
 // 
 // ---------------------------------------------------------------------------
 //
+inline void WlanContextImpl::FeaturesAllowed( TWlanFeatures aFeaturesAllowed )
+    {
+    iAllowedWlanFeatures = aFeaturesAllowed;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+inline TWlanFeatures WlanContextImpl::FeaturesAllowed() const
+    {
+    return iAllowedWlanFeatures;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
 inline void WlanContextImpl::Aid( const TUint32 aAid )
     {
     iConnectContext.iAid = aAid;
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 28 %
+* %version: 29 %
 */
 
 #ifndef UMACTYPES_H
@@ -26,7 +26,15 @@
 #include "pack.h"
 #include <wlanosaplatform.h>
 
-/// Indication data type
+
+/** WLAN feature bit mask */
+typedef TUint32 TWlanFeatures;
+
+/** HT operation (per 802.11n) */
+const TWlanFeatures KWlanHtOperation = ( 1 << 0 );
+
+
+/** Indication data type */
 typedef enum _TIndication
     {
 	EMediaDisconnect,
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h	Thu Apr 01 00:29:25 2010 +0300
@@ -17,7 +17,7 @@
 */
 
 /*
-* %version: 43 %
+* %version: 44 %
 */
 
 #ifndef WLAN_OID_MSG_H
@@ -555,6 +555,13 @@
     {
     /** Common message header */
     TOIDHeader hdr;
+    /** 
+    * If a bit in this mask is set, use of the corresponding WLAN 
+    * feature is allowed; otherwise it is not allowed.
+    * Note that this mask doesn't contain all supported WLAN features
+    * but only the ones which we allow to be be configured on or off. 
+    */
+    TWlanFeatures allowedWlanFeatures;    
     /** Limit for packet size when to use RTS/CTS protocol. */
     TUint16 RTSThreshold;
     /** Max. time to (re-)send whole MSDU packet (in TUs) */
@@ -607,7 +614,6 @@
     * loss prediction indications.
     */
     TUint32 spMinIndicationInterval;
-
     } TConfigureMsg;
 
 // -------------------------------------------------------------------------
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 55 %
+* %version: 56 %
 */
 
 #include "config.h"
@@ -690,6 +690,10 @@
     
     const TConfigureMsg* msg = static_cast<const TConfigureMsg*>(aInputBuffer);
 
+#ifndef NDEBUG
+    OsTracePrint( KWlmCmdDetails, (TUint8*)
+        ("UMAC: Umac::HandleConfigure: allowedWlanFeatures: 0x%08x"), 
+        msg->allowedWlanFeatures );
     OsTracePrint( KWlmCmdDetails, (TUint8*)
         ("UMAC: Umac::HandleConfigure: RTSThreshold: %d"), 
         msg->RTSThreshold );
@@ -720,7 +724,10 @@
     OsTracePrint( KWlmCmdDetails, (TUint8*)
         ("UMAC: Umac::HandleConfigure: spMinIndicationInterval: %d"), 
         msg->spMinIndicationInterval );
-
+#endif
+    
+    iPimpl->FeaturesAllowed( msg->allowedWlanFeatures );
+    
     return iPimpl->CurrentState().Configure( 
         *iPimpl, 
         msg->RTSThreshold, 
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 70 %
+* %version: 71 %
 */
 
 #include "config.h"
@@ -74,6 +74,7 @@
             iUmac( aUmac ), 
             iEnableUserData( EFalse ),
             iCurrentRxBuffer( NULL ),
+            iAllowedWlanFeatures( 0 ),
             iInternalTxBufFree ( ETrue ),
             iInternalTxBufBeingWaited ( EFalse ),            
             iAlignNullData( 0 ), 
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 34 %
+* %version: 35 %
 */
 
 #include "config.h"
@@ -542,9 +542,6 @@
     aCtxImpl.GetOurHtCapabilitiesIe().iData.SetDsssCckIn40Mhz( 
         aCtxImpl.WHASettings().iHtCapabilities.iHTCapabilitiesBitMask & 
         WHA::KDsssCckIn40Mhz );
-    aCtxImpl.GetOurHtCapabilitiesIe().iData.SetPsmp( 
-        aCtxImpl.WHASettings().iHtCapabilities.iHTCapabilitiesBitMask & 
-        WHA::KPsmp );
     aCtxImpl.GetOurHtCapabilitiesIe().iData.SetLsigTxopProtection( 
         aCtxImpl.WHASettings().iHtCapabilities.iHTCapabilitiesBitMask & 
         WHA::KLsigTxopProtection );
--- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 85 %
+* %version: 86 %
 */
 
 #include "config.h"
@@ -139,6 +139,9 @@
         aCtxImpl.StopPowerModeManagement();
         }
     
+    // it is now also our desired dot11 power management mode
+    aCtxImpl.DesiredDot11PwrMgmtMode( aCtxImpl.ClientDot11PwrMgmtMode() );
+
     aCtxImpl.SetClientLightPsModeConfig( 
         aWakeupModeInLightPs, 
         aListenIntervalInLightPs );
@@ -158,10 +161,6 @@
         // there is a difference in current dot11 power management mode and 
         // WLAN Mgmt Client's desired dot11 power management mode
         
-        // So, WLAN Mgmt Client's desired dot11 power management mode becomes
-        // our new desired mode
-        aCtxImpl.DesiredDot11PwrMgmtMode( aCtxImpl.ClientDot11PwrMgmtMode() );
-
         // callee will complete the mgmt command
         ret = OnDot11PwrMgmtTransitRequired( aCtxImpl );
         }
@@ -2306,10 +2305,6 @@
         {
         mib->iPeerFeatures |= WHA::KDsssCckIn40Mhz;
         }
-    if ( aCtxImpl.GetNwHtCapabilitiesIe().iData.Psmp() )
-        {
-        mib->iPeerFeatures |= WHA::KPsmp;
-        }
     if ( aCtxImpl.GetNwHtCapabilitiesIe().iData.LsigTxopProtection() )
         {
         mib->iPeerFeatures |= WHA::KLsigTxopProtection;
@@ -4726,13 +4721,15 @@
     TBool status ( ETrue ); 
     
     if ( ( aCtxImpl.PairwiseCipher() == EWlanCipherSuiteTkip ) || 
-         !( aCtxImpl.QosEnabled() ) )
+         !( aCtxImpl.QosEnabled() ) ||
+         !( aCtxImpl.FeaturesAllowed() & KWlanHtOperation ) )
         {
         // as the control is here it means that 
         // - the WLAN vendor implementation
         // supports HT AND EITHER
         // - TKIP will be used as the pairwise cipher OR
-        // - the target nw doesn't support WMM
+        // - the target nw doesn't support WMM OR
+        // - HT use has been denied by WLAN Mgmt client
         // In these cases we must not use HT functionality, even if the target 
         // nw supported it. We achieve that by handling the target nw as
         // a non-HT nw
@@ -4740,7 +4737,7 @@
         
         OsTracePrint( KInfoLevel, (TUint8*)
             ("UMAC: WlanDot11State::HandleDot11n: TKIP as pairwise cipher "
-             "or WMM not supported => HT disabled") );
+             "OR WMM not supported OR HT use denied => HT disabled") );
         }
     else
         {
--- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 17 %
+* %version: 18 %
 */
 
 #ifndef RWLAN_LOGICAL_CHANNEL_H_
@@ -224,6 +224,9 @@
      */
     SOutputBuffer iAsyncOidCommandOutput;
     
+    /** Used to store the channel open parameters */
+    TOpenParam iOpenParam;
+    
 #ifndef __KERNEL_MODE__
     /** handle to kernel side shared memory chunk */
     RChunk iSharedMemoryChunk;
--- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl	Thu Apr 01 00:29:25 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 16 %
+* %version: 17 %
 */
 
 // -----------------------------------------------------------------------------
@@ -97,8 +97,9 @@
 inline TInt RWlanLogicalChannel::InitWlanSystem( 
     TOpenParam& aOpenParam )
     {
+    iOpenParam = aOpenParam;
     TRequestStatus status;
-    DoRequest( EWlanInitSystem, status, &aOpenParam );
+    DoRequest( EWlanInitSystem, status, &iOpenParam );
     User::WaitForRequest(status);
     return status.Int();
     }
--- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 57 %
+* %version: 59 %
 */
 
 #include "WlLddWlanLddConfig.h"
@@ -24,7 +24,6 @@
 #include "WlanLogicalChannel.h"
 #include "EthernetFrameMemMngr.h"
 #include "EtherCardIoc.h"
-#include "RWlanLogicalChannel.h"
 #include "Umac.h"
 #include "wllddoidmsgstorage.h"
 #include "WlanLogicalDevice.h"
@@ -186,11 +185,6 @@
     else if ( iUnit == KUnitEthernet )
         {
         iTxTriggerDfc.Cancel();
-        
-        // detach protocol stack side callback
-        TraceDump(INIT_LEVEL, 
-            ("WLANLDD: detach protocol stack side callback from UMAC"));
-        iUmac.DetachProtocolStackSideUmacCb();
         }
 
     if ( iEthernetFrameMemMngr )
@@ -443,8 +437,7 @@
         }
     else if ( iUnit == KUnitEthernet )
         {
-        // attach protocol stack side callbac
-        iUmac.AttachProtocolStackSideUmacCb( *this );
+        // nothing for now
         }
     else
         {
@@ -632,11 +625,15 @@
     // in supervisor mode
     
     // acquire mutex
+    // Enter critical section before requesting the mutex as
+    // we are executing in the context of a user mode thread
+    NKern::ThreadEnterCS();    
 #ifndef RD_WLAN_DDK
     Kern::MutexWait( iMutex );
 #else
     iOsa->MutexAcquire();
 #endif
+    NKern::ThreadLeaveCS();
     
     TraceDump(MUTEX, 
         (("WLANLDD: DWlanLogicalChannel::DoControlFast: mutex acquired")));
@@ -708,11 +705,15 @@
         }
     
     // release mutex
+    // Enter critical section before releasing the mutex as
+    // we are executing in the context of a user mode thread
+    NKern::ThreadEnterCS();    
 #ifndef RD_WLAN_DDK
     Kern::MutexSignal( iMutex );
 #else
     iOsa->MutexRelease();
 #endif 
+    NKern::ThreadLeaveCS();
     
     TraceDump(MUTEX, 
         ("WLANLDD: DWlanLogicalChannel::DoControlFast: mutex released"));
@@ -1010,7 +1011,7 @@
         TBool morePackets ( EFalse );
         iTxActive = ETrue;
         
-        while ( iUmac.TxPermitted( txQueueState ) && iEthernetFrameMemMngr )
+        while ( iEthernetFrameMemMngr && iUmac.TxPermitted( txQueueState ) )
             {
             TDataBuffer* metaHeader = 
                 iEthernetFrameMemMngr->GetTxFrame( txQueueState, morePackets );
@@ -1599,6 +1600,18 @@
             aSharedChunkInfo,
             vendorTxHdrLen,
             vendorTxTrailerLen );
+        
+        if ( ( iUnit == KUnitEthernet ) && 
+             ( ret == KErrNone ) )
+            {
+            // attach protocol stack side callback
+            TraceDump(INIT_LEVEL, 
+                ("WLANLDD: attach protocol stack side callback to UMAC"));
+            iUmac.AttachProtocolStackSideUmacCb( *this );
+    
+            // set frame Tx offset for protocol stack side 
+            iUmac.SetTxOffset();
+            }
         }
 
     return ret;
@@ -1614,6 +1627,14 @@
         {
         iEthernetFrameMemMngr->OnReleaseMemory( *iClient );    
         }
+
+    if ( iUnit == KUnitEthernet )
+        {
+        // detach protocol stack side callback
+        TraceDump(INIT_LEVEL, 
+            ("WLANLDD: detach protocol stack side callback from UMAC"));
+        iUmac.DetachProtocolStackSideUmacCb();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -1671,9 +1692,6 @@
                     a1));
                 ret = OnInitialiseEthernetFrameBuffers( 
                     static_cast<TSharedChunkInfo*>(a1) );
-
-                // set frame Tx offset for protocol stack side 
-                iUmac.SetTxOffset();
                 }
             else
                 {
--- a/wlan_bearer/wlannwif/inc/NifWLMServerIf.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_bearer/wlannwif/inc/NifWLMServerIf.h	Thu Apr 01 00:29:25 2010 +0300
@@ -17,7 +17,7 @@
 */
 
 /*
-* %version: 8 %
+* %version: 9 %
 */
 
 #ifndef __NIFWLMSERVERIF_H__
@@ -222,7 +222,9 @@
  * This class implements the callback interface for
  * asynchronous notifications from WLAN engine.  
  */
-NONSHARABLE_CLASS ( CLANNifWLMServerCommon ) : public MWLMNotify
+NONSHARABLE_CLASS ( CLANNifWLMServerCommon ) :
+    public CBase,
+    public MWLMNotify
     {
 
 public:
--- a/wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h	Mon Mar 15 12:46:48 2010 +0200
+++ b/wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h	Thu Apr 01 00:29:25 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 11.1.2 %
+* %version: 11.1.3 %
 */
 
 #ifndef WLANDEVICESETTINGSINTERNALCRKEYS_H
@@ -407,6 +407,11 @@
 const TUint32 KWlanMaxActiveBroadcastChannelTime =       0x00000046;
 
 /**
+ * Bitmask of enabled WLAN features.
+ */
+const TUint32 KWlanEnabledFeatures =                     0x00000047;
+
+/**
  * Cached WLAN region where possible values are: 
  * 0 = Region is unknown 
  * 1 = Region is ETSI