# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1272885242 -10800 # Node ID 41a8eba36f7434e0e62ebf19778673db64aa027d # Parent 00032b836e7631f5ed45b6c5e31b7e6d66a0e0e1 Revision: 201018 Kit: 201018 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_driverif.h Mon May 03 14:14:02 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. diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/abs_core_server.h Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_server.h Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_settings.h Mon May 03 14:14:02 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 weak_iap_list_m; - /** Bitmask of enabled features. */ u32_t features_m; diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/core_types.h Mon May 03 14:14:02 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; /** diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_check_rcpi.cpp Mon May 03 14:14:02 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( 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. diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_operation_roam.cpp Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 76 % +* %version: 76.1.2 % */ #include "core_operation_roam.h" @@ -464,7 +464,6 @@ { DEBUG( "core_operation_roam_c::next_state() - connection done" ); - server_m->get_connection_data()->set_last_rcp_class( core_rcp_normal ); server_m->get_connection_data()->set_ssid( ssid_m ); server_m->get_core_settings().roam_metrics().set_roam_ts_userdata_enabled(); server_m->get_core_settings().roam_metrics().inc_roam_success_count(); @@ -513,6 +512,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( 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 +1223,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; } diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_server.cpp Mon May 03 14:14:02 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 ) { diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_settings.cpp Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp --- a/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_sub_operation_load_drivers.cpp Mon May 03 14:14:02 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; } diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine.confml Binary file wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine.confml has changed diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine_101f8e44.crml Binary file wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/conf/wlanengine_101f8e44.crml has changed diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanconversionutil.h Mon May 03 14:14:02 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. diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlandevicesettings.h Mon May 03 14:14:02 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). }; diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanmgmtcommandhandler.h Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanscanproviderinterface.h Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmdriverif.h Mon May 03 14:14:02 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. diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlmserver.h Mon May 03 14:14:02 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, }; /** diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanconversionutil.cpp Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 84.1.2 % +* %version: 86 % */ #include @@ -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() // --------------------------------------------------------- // diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlandevicesettings.cpp Mon May 03 14:14:02 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( 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", diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlangenericplugin.cpp Mon May 03 14:14:02 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 #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 ); } diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlanmgmtcommandhandler.cpp Mon May 03 14:14:02 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; diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmdriverif.cpp Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 51 % +* %version: 52 % */ #include @@ -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 ) ); } // ----------------------------------------------------------------------------- diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp --- a/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/src/wlmserver.cpp Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 102 % +* %version: 105 % */ #include @@ -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*>( entry.iParam0 ); + delete reinterpret_cast*>( entry.iParam1 ); + delete reinterpret_cast( entry.iParam2); + delete reinterpret_cast*>( entry.iParam3 ); + delete reinterpret_cast( 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*>( entry.iParam0 ); + delete reinterpret_cast*>( entry.iParam1 ); + delete reinterpret_cast( entry.iParam2); + delete reinterpret_cast*>( entry.iParam3 ); + delete reinterpret_cast( entry.iTime ); iRequestMap.Remove( index ); } } diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h --- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/802dot11.h Mon May 03 14:14:02 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 ) diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h --- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h Mon May 03 14:14:02 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 diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl --- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.inl Mon May 03 14:14:02 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; diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h --- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umac_types.h Mon May 03 14:14:02 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 -/// 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, diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h --- a/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacoidmsg.h Mon May 03 14:14:02 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; // ------------------------------------------------------------------------- diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp --- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/Umac.cpp Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 55 % +* %version: 56 % */ #include "config.h" @@ -690,6 +690,10 @@ const TConfigureMsg* msg = static_cast(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, diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp --- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacContextImpl.cpp Mon May 03 14:14:02 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 ), diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp --- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11InitPhase1.cpp Mon May 03 14:14:02 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 ); diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp --- a/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/UmacDot11State.cpp Mon May 03 14:14:02 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 { diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h --- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.h Mon May 03 14:14:02 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; diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl --- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/RWlanLogicalChannel.inl Mon May 03 14:14:02 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(); } diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp --- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp Mon May 03 14:14:02 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(a1) ); - - // set frame Tx offset for protocol stack side - iUmac.SetTxOffset(); } else { diff -r 00032b836e76 -r 41a8eba36f74 wlan_bearer/wlannwif/inc/NifWLMServerIf.h --- a/wlan_bearer/wlannwif/inc/NifWLMServerIf.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_bearer/wlannwif/inc/NifWLMServerIf.h Mon May 03 14:14:02 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: diff -r 00032b836e76 -r 41a8eba36f74 wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h --- a/wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h Fri Apr 16 16:56:12 2010 +0300 +++ b/wlan_plat/wlan_device_settings_api/inc/wlandevicesettingsinternalcrkeys.h Mon May 03 14:14:02 2010 +0300 @@ -16,7 +16,7 @@ */ /* -* %version: 15 % +* %version: 16 % */ #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