| /* |
| * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| /** |
| * DOC: wlan_hdd_cfg.c |
| * |
| * WLAN Host Device Driver configuration interface implementation |
| */ |
| |
| /* Include Files */ |
| |
| #include <linux/firmware.h> |
| #include <linux/string.h> |
| #include <wlan_hdd_includes.h> |
| #include <wlan_hdd_main.h> |
| #include <wlan_hdd_assoc.h> |
| #include <wlan_hdd_cfg.h> |
| #include <linux/string.h> |
| #include <qdf_types.h> |
| #include <csr_api.h> |
| #include <wlan_hdd_misc.h> |
| #include <wlan_hdd_napi.h> |
| #include <cds_api.h> |
| #include "wlan_hdd_he.h" |
| #include <wlan_policy_mgr_api.h> |
| #include "wifi_pos_api.h" |
| #include "wlan_hdd_green_ap.h" |
| #include "wlan_hdd_twt.h" |
| #include "wlan_policy_mgr_ucfg.h" |
| #include "wlan_mlme_ucfg_api.h" |
| #include "wlan_mlme_public_struct.h" |
| #include "wlan_fwol_ucfg_api.h" |
| #include "cfg_ucfg_api.h" |
| #include "hdd_dp_cfg.h" |
| |
| static void |
| cb_notify_set_roam_prefer5_g_hz(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_roam_prefer5_g_hz(hdd_ctx->mac_handle, |
| hdd_ctx->config->nRoamPrefer5GHz); |
| } |
| |
| static void |
| cb_notify_set_roam_rssi_diff(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_roam_rssi_diff(hdd_ctx->mac_handle, |
| 0, hdd_ctx->config->RoamRssiDiff); |
| } |
| |
| static void |
| cb_notify_set_fast_transition_enabled(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool enabled = hdd_ctx->config->isFastTransitionEnabled; |
| |
| sme_update_fast_transition_enabled(hdd_ctx->mac_handle, enabled); |
| } |
| |
| static void |
| cb_notify_set_roam_intra_band(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_roam_intra_band(hdd_ctx->mac_handle, |
| hdd_ctx->config->nRoamIntraBand); |
| } |
| |
| static void cb_notify_set_wes_mode(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_wes_mode(hdd_ctx->mac_handle, |
| hdd_ctx->config->isWESModeEnabled, 0); |
| } |
| |
| static void |
| cb_notify_set_roam_scan_n_probes(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_roam_scan_n_probes(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->nProbes); |
| } |
| |
| static void |
| cb_notify_set_roam_scan_home_away_time(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t away_time = hdd_ctx->config->nRoamScanHomeAwayTime; |
| |
| sme_update_roam_scan_home_away_time(hdd_ctx->mac_handle, 0, |
| away_time, true); |
| } |
| |
| static void |
| notify_is_fast_roam_ini_feature_enabled(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool enabled = hdd_ctx->config->isFastRoamIniFeatureEnabled; |
| |
| sme_update_is_fast_roam_ini_feature_enabled(hdd_ctx->mac_handle, 0, |
| enabled); |
| } |
| |
| static void |
| notify_is_mawc_ini_feature_enabled(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_is_mawc_ini_feature_enabled(hdd_ctx->mac_handle, |
| hdd_ctx->config->MAWCEnabled); |
| } |
| |
| #ifdef FEATURE_WLAN_ESE |
| static void |
| cb_notify_set_ese_feature_enabled(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool enabled = hdd_ctx->config->isEseIniFeatureEnabled; |
| |
| sme_update_is_ese_feature_enabled(hdd_ctx->mac_handle, 0, enabled); |
| } |
| #endif |
| |
| static void |
| cb_notify_set_opportunistic_scan_threshold_diff(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint8_t diff = hdd_ctx->config->nOpportunisticThresholdDiff; |
| |
| sme_set_roam_opportunistic_scan_threshold_diff(hdd_ctx->mac_handle, |
| 0, diff); |
| } |
| |
| static void cb_notify_set_roam_rescan_rssi_diff(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_roam_rescan_rssi_diff(hdd_ctx->mac_handle, |
| 0, hdd_ctx->config->nRoamRescanRssiDiff); |
| } |
| |
| static void |
| cb_notify_set_neighbor_lookup_rssi_threshold(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint8_t threshold = hdd_ctx->config->nNeighborLookupRssiThreshold; |
| |
| sme_set_neighbor_lookup_rssi_threshold(hdd_ctx->mac_handle, 0, |
| threshold); |
| } |
| |
| static void |
| cb_notify_set_delay_before_vdev_stop(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_delay_before_vdev_stop(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->delay_before_vdev_stop); |
| } |
| |
| static void |
| cb_notify_set_neighbor_scan_period(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_neighbor_scan_period(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->nNeighborScanPeriod); |
| } |
| |
| /* |
| * cb_notify_set_neighbor_scan_min_period() - configure min rest |
| * time during roaming scan |
| * |
| * @hdd_ctx: HDD context data structure |
| * @notify_id: Identifies 1 of the 4 parameters to be modified |
| * |
| * Picks up the value from hdd configuration and passes it to SME. |
| * Return: void |
| */ |
| static void |
| cb_notify_set_neighbor_scan_min_period(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t period = hdd_ctx->config->neighbor_scan_min_period; |
| |
| sme_set_neighbor_scan_min_period(hdd_ctx->mac_handle, 0, |
| period); |
| } |
| |
| static void |
| cb_notify_set_neighbor_results_refresh_period(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t period = hdd_ctx->config->nNeighborResultsRefreshPeriod; |
| |
| sme_set_neighbor_scan_refresh_period(hdd_ctx->mac_handle, 0, |
| period); |
| } |
| |
| static void |
| cb_notify_set_empty_scan_refresh_period(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t period = hdd_ctx->config->nEmptyScanRefreshPeriod; |
| |
| sme_update_empty_scan_refresh_period(hdd_ctx->mac_handle, 0, |
| period); |
| } |
| |
| static void |
| cb_notify_set_neighbor_scan_min_chan_time(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t min_chan_time = hdd_ctx->config->nNeighborScanMinChanTime; |
| |
| sme_set_neighbor_scan_min_chan_time(hdd_ctx->mac_handle, |
| min_chan_time, 0); |
| } |
| |
| static void |
| cb_notify_set_neighbor_scan_max_chan_time(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint16_t max_chan_time = hdd_ctx->config->nNeighborScanMaxChanTime; |
| |
| sme_set_neighbor_scan_max_chan_time(hdd_ctx->mac_handle, 0, |
| max_chan_time); |
| } |
| |
| static void cb_notify_set_roam_bmiss_first_bcnt(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_roam_bmiss_first_bcnt(hdd_ctx->mac_handle, |
| 0, hdd_ctx->config->nRoamBmissFirstBcnt); |
| } |
| |
| static void cb_notify_set_roam_bmiss_final_bcnt(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_roam_bmiss_final_bcnt(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->nRoamBmissFinalBcnt); |
| } |
| |
| static void cb_notify_set_roam_beacon_rssi_weight(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_set_roam_beacon_rssi_weight(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->nRoamBeaconRssiWeight); |
| } |
| |
| static void |
| cb_notify_set_dfs_scan_mode(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_dfs_scan_mode(hdd_ctx->mac_handle, 0, |
| hdd_ctx->config->allowDFSChannelRoam); |
| } |
| |
| static void cb_notify_set_enable_ssr(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| sme_update_enable_ssr(hdd_ctx->mac_handle, hdd_ctx->config->enableSSR); |
| } |
| |
| static void |
| cb_notify_set_g_sap_preferred_chan_location(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| uint8_t location = hdd_ctx->config->gSapPreferredChanLocation; |
| |
| wlansap_set_dfs_preferred_channel_location(hdd_ctx->mac_handle, |
| location); |
| } |
| |
| static void ch_notify_set_g_disable_dfs_japan_w53(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool disabled = hdd_ctx->config->gDisableDfsJapanW53; |
| |
| wlansap_set_dfs_restrict_japan_w53(hdd_ctx->mac_handle, disabled); |
| } |
| |
| static void |
| cb_notify_update_roam_scan_offload_enabled(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool enabled = hdd_ctx->config->isRoamOffloadScanEnabled; |
| |
| sme_update_roam_scan_offload_enabled(hdd_ctx->mac_handle, enabled); |
| if (enabled) |
| return; |
| |
| /* fate sharing */ |
| hdd_ctx->config->bFastRoamInConIniFeatureEnabled = false; |
| sme_update_enable_fast_roam_in_concurrency(hdd_ctx->mac_handle, false); |
| } |
| |
| static void |
| cb_notify_set_enable_fast_roam_in_concurrency(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| bool enabled = hdd_ctx->config->bFastRoamInConIniFeatureEnabled; |
| |
| sme_update_enable_fast_roam_in_concurrency(hdd_ctx->mac_handle, |
| enabled); |
| } |
| |
| /** |
| * cb_notify_set_roam_scan_hi_rssi_scan_params() - configure hi rssi |
| * scan params from cfg to sme. |
| * @hdd_ctx: HDD context data structure |
| * @notify_id: Identifies 1 of the 4 parameters to be modified |
| * |
| * Picks up the value from hdd configuration and passes it to SME. |
| * Return: void |
| */ |
| |
| static void |
| cb_notify_set_roam_scan_hi_rssi_scan_params(struct hdd_context *hdd_ctx, |
| unsigned long notify_id) |
| { |
| int32_t val; |
| |
| if (wlan_hdd_validate_context(hdd_ctx)) |
| return; |
| |
| switch (notify_id) { |
| case eCSR_HI_RSSI_SCAN_MAXCOUNT_ID: |
| val = hdd_ctx->config->nhi_rssi_scan_max_count; |
| break; |
| |
| case eCSR_HI_RSSI_SCAN_RSSI_DELTA_ID: |
| val = hdd_ctx->config->nhi_rssi_scan_rssi_delta; |
| break; |
| |
| case eCSR_HI_RSSI_SCAN_DELAY_ID: |
| val = hdd_ctx->config->nhi_rssi_scan_delay; |
| break; |
| |
| case eCSR_HI_RSSI_SCAN_RSSI_UB_ID: |
| val = hdd_ctx->config->nhi_rssi_scan_rssi_ub; |
| break; |
| |
| default: |
| return; |
| } |
| |
| sme_update_roam_scan_hi_rssi_scan_params(hdd_ctx->mac_handle, 0, |
| notify_id, val); |
| } |
| |
| |
| struct reg_table_entry g_registry_table[] = { |
| #ifdef WLAN_NUD_TRACKING |
| REG_VARIABLE(CFG_ENABLE_NUD_TRACKING_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_nud_tracking, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_NUD_TRACKING_DEFAULT, |
| CFG_ENABLE_NUD_TRACKING_MIN, |
| CFG_ENABLE_NUD_TRACKING_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_ENABLE_CONNECTED_SCAN_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_connected_scan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_CONNECTED_SCAN_DEFAULT, |
| CFG_ENABLE_CONNECTED_SCAN_MIN, |
| CFG_ENABLE_CONNECTED_SCAN_MAX), |
| |
| REG_VARIABLE(CFG_OPERATING_CHANNEL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, OperatingChannel, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OPERATING_CHANNEL_DEFAULT, |
| CFG_OPERATING_CHANNEL_MIN, |
| CFG_OPERATING_CHANNEL_MAX), |
| |
| REG_VARIABLE(CFG_SHORT_SLOT_TIME_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ShortSlotTimeEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_SHORT_SLOT_TIME_ENABLED_DEFAULT, |
| CFG_SHORT_SLOT_TIME_ENABLED_MIN, |
| CFG_SHORT_SLOT_TIME_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_11D_SUPPORT_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, Is11dSupportEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_11D_SUPPORT_ENABLED_DEFAULT, |
| CFG_11D_SUPPORT_ENABLED_MIN, |
| CFG_11D_SUPPORT_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_11H_SUPPORT_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, Is11hSupportEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_11H_SUPPORT_ENABLED_DEFAULT, |
| CFG_11H_SUPPORT_ENABLED_MIN, |
| CFG_11H_SUPPORT_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_COUNTRY_CODE_PRIORITY_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fSupplicantCountryCodeHasPriority, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_COUNTRY_CODE_PRIORITY_DEFAULT, |
| CFG_COUNTRY_CODE_PRIORITY_MIN, |
| CFG_COUNTRY_CODE_PRIORITY_MAX), |
| |
| REG_VARIABLE_STRING(CFG_POWER_USAGE_NAME, WLAN_PARAM_String, |
| struct hdd_config, PowerUsageControl, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_POWER_USAGE_DEFAULT), |
| |
| REG_VARIABLE(CFG_ENABLE_IMPS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fIsImpsEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_IMPS_DEFAULT, |
| CFG_ENABLE_IMPS_MIN, |
| CFG_ENABLE_IMPS_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_PS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, is_ps_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_PS_DEFAULT, |
| CFG_ENABLE_PS_MIN, |
| CFG_ENABLE_PS_MAX), |
| |
| REG_VARIABLE(CFG_AUTO_PS_ENABLE_TIMER_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, auto_bmps_timer_val, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AUTO_PS_ENABLE_TIMER_DEFAULT, |
| CFG_AUTO_PS_ENABLE_TIMER_MIN, |
| CFG_AUTO_PS_ENABLE_TIMER_MAX), |
| |
| #ifdef WLAN_ICMP_DISABLE_PS |
| REG_VARIABLE(CFG_ICMP_DISABLE_PS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, icmp_disable_ps_val, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ICMP_DISABLE_PS_DEFAULT, |
| CFG_ICMP_DISABLE_PS_MIN, |
| CFG_ICMP_DISABLE_PS_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_BMPS_MINIMUM_LI_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nBmpsMinListenInterval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BMPS_MINIMUM_LI_DEFAULT, |
| CFG_BMPS_MINIMUM_LI_MIN, |
| CFG_BMPS_MINIMUM_LI_MAX), |
| |
| REG_VARIABLE(CFG_BMPS_MAXIMUM_LI_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nBmpsMaxListenInterval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BMPS_MAXIMUM_LI_DEFAULT, |
| CFG_BMPS_MAXIMUM_LI_MIN, |
| CFG_BMPS_MAXIMUM_LI_MAX), |
| |
| REG_VARIABLE(CFG_DOT11_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, dot11Mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_DOT11_MODE_DEFAULT, |
| CFG_DOT11_MODE_MIN, |
| CFG_DOT11_MODE_MAX), |
| |
| REG_VARIABLE(CFG_CHANNEL_BONDING_MODE_24GHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nChannelBondingMode24GHz, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_CHANNEL_BONDING_MODE_DEFAULT, |
| CFG_CHANNEL_BONDING_MODE_MIN, |
| CFG_CHANNEL_BONDING_MODE_MAX), |
| |
| REG_VARIABLE(CFG_OVERRIDE_HT40_20_24GHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, override_ht20_40_24g, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OVERRIDE_HT40_20_24GHZ_DEFAULT, |
| CFG_OVERRIDE_HT40_20_24GHZ_MIN, |
| CFG_OVERRIDE_HT40_20_24GHZ_MAX), |
| |
| REG_VARIABLE(CFG_CHANNEL_BONDING_MODE_5GHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nChannelBondingMode5GHz, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_CHANNEL_BONDING_MODE_DEFAULT, |
| CFG_CHANNEL_BONDING_MODE_MIN, |
| CFG_CHANNEL_BONDING_MODE_MAX), |
| |
| REG_VARIABLE(CFG_SCAN_RESULT_AGE_COUNT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ScanResultAgeCount, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_SCAN_RESULT_AGE_COUNT_DEFAULT, |
| CFG_SCAN_RESULT_AGE_COUNT_MIN, |
| CFG_SCAN_RESULT_AGE_COUNT_MAX), |
| |
| REG_VARIABLE(CFG_RSSI_CATEGORY_GAP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRssiCatGap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RSSI_CATEGORY_GAP_DEFAULT, |
| CFG_RSSI_CATEGORY_GAP_MIN, |
| CFG_RSSI_CATEGORY_GAP_MAX), |
| |
| REG_VARIABLE_STRING(CFG_IBSS_BSSID_NAME, WLAN_PARAM_MacAddr, |
| struct hdd_config, IbssBssid, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_IBSS_BSSID_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_INTF0_MAC_ADDR_NAME, WLAN_PARAM_MacAddr, |
| struct hdd_config, intfMacAddr[0], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_INTF0_MAC_ADDR_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_INTF1_MAC_ADDR_NAME, WLAN_PARAM_MacAddr, |
| struct hdd_config, intfMacAddr[1], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_INTF1_MAC_ADDR_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_INTF2_MAC_ADDR_NAME, WLAN_PARAM_MacAddr, |
| struct hdd_config, intfMacAddr[2], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_INTF2_MAC_ADDR_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_INTF3_MAC_ADDR_NAME, WLAN_PARAM_MacAddr, |
| struct hdd_config, intfMacAddr[3], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_INTF3_MAC_ADDR_DEFAULT), |
| |
| REG_VARIABLE(CFG_AP_QOS_UAPSD_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, apUapsdEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_QOS_UAPSD_MODE_DEFAULT, |
| CFG_AP_QOS_UAPSD_MODE_MIN, |
| CFG_AP_QOS_UAPSD_MODE_MAX), |
| |
| REG_VARIABLE(CFG_AP_ENABLE_RANDOM_BSSID_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, apRandomBssidEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_ENABLE_RANDOM_BSSID_DEFAULT, |
| CFG_AP_ENABLE_RANDOM_BSSID_MIN, |
| CFG_AP_ENABLE_RANDOM_BSSID_MAX), |
| |
| REG_VARIABLE(CFG_AP_ENABLE_PROTECTION_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, apProtEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_ENABLE_PROTECTION_MODE_DEFAULT, |
| CFG_AP_ENABLE_PROTECTION_MODE_MIN, |
| CFG_AP_ENABLE_PROTECTION_MODE_MAX), |
| |
| REG_VARIABLE(CFG_AP_PROTECTION_MODE_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, apProtection, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_PROTECTION_MODE_DEFAULT, |
| CFG_AP_PROTECTION_MODE_MIN, |
| CFG_AP_PROTECTION_MODE_MAX), |
| |
| REG_VARIABLE(CFG_AP_OBSS_PROTECTION_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, apOBSSProtEnabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_OBSS_PROTECTION_MODE_DEFAULT, |
| CFG_AP_OBSS_PROTECTION_MODE_MIN, |
| CFG_AP_OBSS_PROTECTION_MODE_MAX), |
| |
| REG_VARIABLE(CFG_AP_STA_SECURITY_SEPERATION_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, apDisableIntraBssFwd, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_AP_STA_SECURITY_SEPERATION_DEFAULT, |
| CFG_AP_STA_SECURITY_SEPERATION_MIN, |
| CFG_AP_STA_SECURITY_SEPERATION_MAX), |
| |
| #ifdef FEATURE_WLAN_DYNAMIC_CVM |
| REG_VARIABLE(CFG_VC_MODE_BITMAP, WLAN_PARAM_HexInteger, |
| struct hdd_config, vc_mode_cfg_bitmap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_VC_MODE_BITMAP_DEFAULT, |
| CFG_VC_MODE_BITMAP_MIN, |
| CFG_VC_MODE_BITMAP_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_ENABLE_SAP_MANDATORY_CHAN_LIST, WLAN_PARAM_Integer, |
| struct hdd_config, enable_sap_mandatory_chan_list, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_SAP_MANDATORY_CHAN_LIST_DEFAULT, |
| CFG_ENABLE_SAP_MANDATORY_CHAN_LIST_MIN, |
| CFG_ENABLE_SAP_MANDATORY_CHAN_LIST_MAX), |
| |
| REG_VARIABLE(CFG_DISABLE_PACKET_FILTER, WLAN_PARAM_Integer, |
| struct hdd_config, disablePacketFilter, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DISABLE_PACKET_FILTER_DEFAULT, |
| CFG_DISABLE_PACKET_FILTER_MIN, |
| CFG_DISABLE_PACKET_FILTER_MAX), |
| |
| REG_VARIABLE(CFG_VCC_RSSI_TRIGGER_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nVccRssiTrigger, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_VCC_RSSI_TRIGGER_DEFAULT, |
| CFG_VCC_RSSI_TRIGGER_MIN, |
| CFG_VCC_RSSI_TRIGGER_MAX), |
| |
| REG_VARIABLE(CFG_VCC_UL_MAC_LOSS_THRESH_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nVccUlMacLossThreshold, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_VCC_UL_MAC_LOSS_THRESH_DEFAULT, |
| CFG_VCC_UL_MAC_LOSS_THRESH_MIN, |
| CFG_VCC_UL_MAC_LOSS_THRESH_MAX), |
| |
| REG_VARIABLE(CFG_PASSIVE_MAX_CHANNEL_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nPassiveMaxChnTime, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_DEFAULT, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_MIN, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_MAX), |
| |
| REG_VARIABLE(CFG_ACTIVE_MAX_CHANNEL_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nActiveMaxChnTime, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_DEFAULT, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_MIN, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_MAX), |
| |
| REG_VARIABLE(CFG_SCAN_NUM_PROBES_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_num_probes, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SCAN_NUM_PROBES_DEFAULT, |
| CFG_SCAN_NUM_PROBES_MIN, |
| CFG_SCAN_NUM_PROBES_MAX), |
| |
| REG_VARIABLE(CFG_SCAN_PROBE_REPEAT_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_probe_repeat_time, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SCAN_PROBE_REPEAT_TIME_DEFAULT, |
| CFG_SCAN_PROBE_REPEAT_TIME_MIN, |
| CFG_SCAN_PROBE_REPEAT_TIME_MAX), |
| |
| REG_VARIABLE(CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nPassiveMaxChnTimeConc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_DEFAULT, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_MIN, |
| CFG_PASSIVE_MAX_CHANNEL_TIME_CONC_MAX), |
| |
| REG_VARIABLE(CFG_PASSIVE_MIN_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nPassiveMinChnTimeConc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PASSIVE_MIN_CHANNEL_TIME_CONC_DEFAULT, |
| CFG_PASSIVE_MIN_CHANNEL_TIME_CONC_MIN, |
| CFG_PASSIVE_MIN_CHANNEL_TIME_CONC_MAX), |
| |
| REG_VARIABLE(CFG_ACTIVE_MAX_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nActiveMaxChnTimeConc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_CONC_DEFAULT, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_CONC_MIN, |
| CFG_ACTIVE_MAX_CHANNEL_TIME_CONC_MAX), |
| |
| REG_VARIABLE(CFG_ACTIVE_MIN_CHANNEL_TIME_CONC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nActiveMinChnTimeConc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ACTIVE_MIN_CHANNEL_TIME_CONC_DEFAULT, |
| CFG_ACTIVE_MIN_CHANNEL_TIME_CONC_MIN, |
| CFG_ACTIVE_MIN_CHANNEL_TIME_CONC_MAX), |
| |
| REG_VARIABLE(CFG_REST_TIME_CONC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRestTimeConc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_REST_TIME_CONC_DEFAULT, |
| CFG_REST_TIME_CONC_MIN, |
| CFG_REST_TIME_CONC_MAX), |
| |
| REG_VARIABLE(CFG_MIN_REST_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, min_rest_time_conc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MIN_REST_TIME_DEFAULT, |
| CFG_MIN_REST_TIME_MIN, |
| CFG_MIN_REST_TIME_MAX), |
| |
| REG_VARIABLE(CFG_IDLE_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, idle_time_conc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IDLE_TIME_DEFAULT, |
| CFG_IDLE_TIME_MIN, |
| CFG_IDLE_TIME_MAX), |
| |
| REG_VARIABLE(CFG_MAX_TX_POWER_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nTxPowerCap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAX_TX_POWER_DEFAULT, |
| CFG_MAX_TX_POWER_MIN, |
| CFG_MAX_TX_POWER_MAX), |
| |
| REG_VARIABLE(CFG_TX_POWER_CTRL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, allow_tpc_from_ap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TX_POWER_CTRL_DEFAULT, |
| CFG_TX_POWER_CTRL_MIN, |
| CFG_TX_POWER_CTRL_MAX), |
| |
| REG_VARIABLE(CFG_MAX_LI_MODULATED_DTIM_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fMaxLIModulatedDTIM, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAX_LI_MODULATED_DTIM_DEFAULT, |
| CFG_MAX_LI_MODULATED_DTIM_MIN, |
| CFG_MAX_LI_MODULATED_DTIM_MAX), |
| |
| REG_VARIABLE(CFG_FW_MCC_RTS_CTS_PROT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mcc_rts_cts_prot_enable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FW_MCC_RTS_CTS_PROT_DEFAULT, |
| CFG_FW_MCC_RTS_CTS_PROT_MIN, |
| CFG_FW_MCC_RTS_CTS_PROT_MAX), |
| |
| REG_VARIABLE(CFG_FW_MCC_BCAST_PROB_RESP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mcc_bcast_prob_resp_enable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FW_MCC_BCAST_PROB_RESP_DEFAULT, |
| CFG_FW_MCC_BCAST_PROB_RESP_MIN, |
| CFG_FW_MCC_BCAST_PROB_RESP_MAX), |
| |
| REG_VARIABLE(CFG_WOW_DATA_INACTIVITY_TIMEOUT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, wow_data_inactivity_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_WOW_DATA_INACTIVITY_TIMEOUT_DEFAULT, |
| CFG_WOW_DATA_INACTIVITY_TIMEOUT_MIN, |
| CFG_WOW_DATA_INACTIVITY_TIMEOUT_MAX), |
| |
| #ifdef FEATURE_WLAN_ESE |
| REG_VARIABLE(CFG_QOS_WMM_INFRA_INACTIVITY_INTERVAL_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, InfraInactivityInterval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_QOS_WMM_INFRA_INACTIVITY_INTERVAL_DEFAULT, |
| CFG_QOS_WMM_INFRA_INACTIVITY_INTERVAL_MIN, |
| CFG_QOS_WMM_INFRA_INACTIVITY_INTERVAL_MAX), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ESE_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isEseIniFeatureEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ESE_FEATURE_ENABLED_DEFAULT, |
| CFG_ESE_FEATURE_ENABLED_MIN, |
| CFG_ESE_FEATURE_ENABLED_MAX, |
| cb_notify_set_ese_feature_enabled, 0), |
| #endif /* FEATURE_WLAN_ESE */ |
| |
| /* flag to turn ON/OFF Legacy Fast Roaming */ |
| REG_DYNAMIC_VARIABLE(CFG_LFR_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isFastRoamIniFeatureEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LFR_FEATURE_ENABLED_DEFAULT, |
| CFG_LFR_FEATURE_ENABLED_MIN, |
| CFG_LFR_FEATURE_ENABLED_MAX, |
| notify_is_fast_roam_ini_feature_enabled, 0), |
| |
| /* flag to turn ON/OFF Motion assistance for Legacy Fast Roaming */ |
| REG_DYNAMIC_VARIABLE(CFG_LFR_MAWC_FEATURE_ENABLED_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, MAWCEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LFR_MAWC_FEATURE_ENABLED_DEFAULT, |
| CFG_LFR_MAWC_FEATURE_ENABLED_MIN, |
| CFG_LFR_MAWC_FEATURE_ENABLED_MAX, |
| notify_is_mawc_ini_feature_enabled, 0), |
| |
| /* flag to turn ON/OFF 11r and ESE FastTransition */ |
| REG_DYNAMIC_VARIABLE(CFG_FAST_TRANSITION_ENABLED_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, isFastTransitionEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FAST_TRANSITION_ENABLED_NAME_DEFAULT, |
| CFG_FAST_TRANSITION_ENABLED_NAME_MIN, |
| CFG_FAST_TRANSITION_ENABLED_NAME_MAX, |
| cb_notify_set_fast_transition_enabled, 0), |
| |
| /* Variable to specify the delta/difference between the |
| * RSSI of current AP and roamable AP while roaming |
| */ |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_RSSI_DIFF_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, RoamRssiDiff, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_RSSI_DIFF_DEFAULT, |
| CFG_ROAM_RSSI_DIFF_MIN, |
| CFG_ROAM_RSSI_DIFF_MAX, |
| cb_notify_set_roam_rssi_diff, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ENABLE_WES_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isWESModeEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_WES_MODE_NAME_DEFAULT, |
| CFG_ENABLE_WES_MODE_NAME_MIN, |
| CFG_ENABLE_WES_MODE_NAME_MAX, |
| cb_notify_set_wes_mode, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_OFFLOAD_ENABLED, WLAN_PARAM_Integer, |
| struct hdd_config, isRoamOffloadScanEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_OFFLOAD_ENABLED_DEFAULT, |
| CFG_ROAM_SCAN_OFFLOAD_ENABLED_MIN, |
| CFG_ROAM_SCAN_OFFLOAD_ENABLED_MAX, |
| cb_notify_update_roam_scan_offload_enabled, 0), |
| |
| REG_VARIABLE(CFG_TL_DELAYED_TRGR_FRM_INT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, DelayedTriggerFrmInt, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TL_DELAYED_TRGR_FRM_INT_DEFAULT, |
| CFG_TL_DELAYED_TRGR_FRM_INT_MIN, |
| CFG_TL_DELAYED_TRGR_FRM_INT_MAX), |
| |
| REG_VARIABLE(CFG_RRM_ENABLE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fRrmEnable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RRM_ENABLE_DEFAULT, |
| CFG_RRM_ENABLE_MIN, |
| CFG_RRM_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_RRM_MEAS_RANDOMIZATION_INTVL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRrmRandnIntvl, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RRM_MEAS_RANDOMIZATION_INTVL_DEFAULT, |
| CFG_RRM_MEAS_RANDOMIZATION_INTVL_MIN, |
| CFG_RRM_MEAS_RANDOMIZATION_INTVL_MAX), |
| |
| REG_VARIABLE_STRING(CFG_RM_CAPABILITY_NAME, WLAN_PARAM_String, |
| struct hdd_config, rm_capability, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_RM_CAPABILITY_DEFAULT), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_TIMER_PERIOD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nNeighborScanPeriod, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_TIMER_PERIOD_DEFAULT, |
| CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MIN, |
| CFG_NEIGHBOR_SCAN_TIMER_PERIOD_MAX, |
| cb_notify_set_neighbor_scan_period, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_scan_min_period, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MIN, |
| CFG_NEIGHBOR_SCAN_MIN_TIMER_PERIOD_MAX, |
| cb_notify_set_neighbor_scan_min_period, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nNeighborLookupRssiThreshold, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_DEFAULT, |
| CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MIN, |
| CFG_NEIGHBOR_LOOKUP_RSSI_THRESHOLD_MAX, |
| cb_notify_set_neighbor_lookup_rssi_threshold, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nOpportunisticThresholdDiff, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF_DEFAULT, |
| CFG_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF_MIN, |
| CFG_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF_MAX, |
| cb_notify_set_opportunistic_scan_threshold_diff, |
| 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_RESCAN_RSSI_DIFF_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamRescanRssiDiff, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_RESCAN_RSSI_DIFF_DEFAULT, |
| CFG_ROAM_RESCAN_RSSI_DIFF_MIN, |
| CFG_ROAM_RESCAN_RSSI_DIFF_MAX, |
| cb_notify_set_roam_rescan_rssi_diff, 0), |
| |
| REG_VARIABLE_STRING(CFG_NEIGHBOR_SCAN_CHAN_LIST_NAME, WLAN_PARAM_String, |
| struct hdd_config, neighborScanChanList, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_NEIGHBOR_SCAN_CHAN_LIST_DEFAULT), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nNeighborScanMinChanTime, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MIN, |
| CFG_NEIGHBOR_SCAN_MIN_CHAN_TIME_MAX, |
| cb_notify_set_neighbor_scan_min_chan_time, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nNeighborScanMaxChanTime, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MIN, |
| CFG_NEIGHBOR_SCAN_MAX_CHAN_TIME_MAX, |
| cb_notify_set_neighbor_scan_max_chan_time, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nNeighborResultsRefreshPeriod, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_DEFAULT, |
| CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MIN, |
| CFG_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD_MAX, |
| cb_notify_set_neighbor_results_refresh_period, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_EMPTY_SCAN_REFRESH_PERIOD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nEmptyScanRefreshPeriod, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_EMPTY_SCAN_REFRESH_PERIOD_DEFAULT, |
| CFG_EMPTY_SCAN_REFRESH_PERIOD_MIN, |
| CFG_EMPTY_SCAN_REFRESH_PERIOD_MAX, |
| cb_notify_set_empty_scan_refresh_period, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_BMISS_FIRST_BCNT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamBmissFirstBcnt, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_BMISS_FIRST_BCNT_DEFAULT, |
| CFG_ROAM_BMISS_FIRST_BCNT_MIN, |
| CFG_ROAM_BMISS_FIRST_BCNT_MAX, |
| cb_notify_set_roam_bmiss_first_bcnt, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_BMISS_FINAL_BCNT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamBmissFinalBcnt, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_BMISS_FINAL_BCNT_DEFAULT, |
| CFG_ROAM_BMISS_FINAL_BCNT_MIN, |
| CFG_ROAM_BMISS_FINAL_BCNT_MAX, |
| cb_notify_set_roam_bmiss_final_bcnt, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_BEACON_RSSI_WEIGHT_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, nRoamBeaconRssiWeight, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_BEACON_RSSI_WEIGHT_DEFAULT, |
| CFG_ROAM_BEACON_RSSI_WEIGHT_MIN, |
| CFG_ROAM_BEACON_RSSI_WEIGHT_MAX, |
| cb_notify_set_roam_beacon_rssi_weight, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAMING_DFS_CHANNEL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, allowDFSChannelRoam, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAMING_DFS_CHANNEL_DEFAULT, |
| CFG_ROAMING_DFS_CHANNEL_MIN, |
| CFG_ROAMING_DFS_CHANNEL_MAX, |
| cb_notify_set_dfs_scan_mode, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_DELAY_BEFORE_VDEV_STOP_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| delay_before_vdev_stop, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DELAY_BEFORE_VDEV_STOP_DEFAULT, |
| CFG_DELAY_BEFORE_VDEV_STOP_MIN, |
| CFG_DELAY_BEFORE_VDEV_STOP_MAX, |
| cb_notify_set_delay_before_vdev_stop, |
| 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_HI_RSSI_MAXCOUNT_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| nhi_rssi_scan_max_count, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_MAXCOUNT_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_MAXCOUNT_MIN, |
| CFG_ROAM_SCAN_HI_RSSI_MAXCOUNT_MAX, |
| cb_notify_set_roam_scan_hi_rssi_scan_params, |
| eCSR_HI_RSSI_SCAN_MAXCOUNT_ID), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_HI_RSSI_DELTA_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| nhi_rssi_scan_rssi_delta, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_DELTA_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_DELTA_MIN, |
| CFG_ROAM_SCAN_HI_RSSI_DELTA_MAX, |
| cb_notify_set_roam_scan_hi_rssi_scan_params, |
| eCSR_HI_RSSI_SCAN_RSSI_DELTA_ID), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_HI_RSSI_DELAY_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| nhi_rssi_scan_delay, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_DELAY_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_DELAY_MIN, |
| CFG_ROAM_SCAN_HI_RSSI_DELAY_MAX, |
| cb_notify_set_roam_scan_hi_rssi_scan_params, |
| eCSR_HI_RSSI_SCAN_DELAY_ID), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_HI_RSSI_UB_NAME, |
| WLAN_PARAM_SignedInteger, |
| struct hdd_config, |
| nhi_rssi_scan_rssi_ub, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_UB_DEFAULT, |
| CFG_ROAM_SCAN_HI_RSSI_UB_MIN, |
| CFG_ROAM_SCAN_HI_RSSI_UB_MAX, |
| cb_notify_set_roam_scan_hi_rssi_scan_params, |
| eCSR_HI_RSSI_SCAN_RSSI_UB_ID), |
| |
| REG_VARIABLE(CFG_QOS_WMM_BURST_SIZE_DEFN_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, burstSizeDefinition, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_QOS_WMM_BURST_SIZE_DEFN_DEFAULT, |
| CFG_QOS_WMM_BURST_SIZE_DEFN_MIN, |
| CFG_QOS_WMM_BURST_SIZE_DEFN_MAX), |
| |
| #ifdef FEATURE_WLAN_RA_FILTERING |
| |
| REG_VARIABLE(CFG_RA_RATE_LIMIT_INTERVAL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, RArateLimitInterval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RA_RATE_LIMIT_INTERVAL_DEFAULT, |
| CFG_RA_RATE_LIMIT_INTERVAL_MIN, |
| CFG_RA_RATE_LIMIT_INTERVAL_MAX), |
| #endif |
| |
| #ifdef FEATURE_RUNTIME_PM |
| REG_VARIABLE(CFG_ENABLE_RUNTIME_PM, WLAN_PARAM_Integer, |
| struct hdd_config, runtime_pm, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_RUNTIME_PM_DEFAULT, |
| CFG_ENABLE_RUNTIME_PM_MIN, |
| CFG_ENABLE_RUNTIME_PM_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_QOS_WMM_TS_INFO_ACK_POLICY_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, tsInfoAckPolicy, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_QOS_WMM_TS_INFO_ACK_POLICY_DEFAULT, |
| CFG_QOS_WMM_TS_INFO_ACK_POLICY_MIN, |
| CFG_QOS_WMM_TS_INFO_ACK_POLICY_MAX), |
| |
| REG_VARIABLE(CFG_STA_KEEPALIVE_METHOD_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, sta_keepalive_method, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_STA_KEEPALIVE_METHOD_DEFAULT, |
| CFG_STA_KEEPALIVE_METHOD_MIN, |
| CFG_STA_KEEPALIVE_METHOD_MAX), |
| |
| REG_VARIABLE(CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, AddTSWhenACMIsOff, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_DEFAULT, |
| CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MIN, |
| CFG_QOS_ADDTS_WHEN_ACM_IS_OFF_MAX), |
| |
| /* CFG_QDF_TRACE_ENABLE Parameters */ |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_WDI_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_wdi, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_HDD_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_hdd, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_BMI_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_bmi, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_SME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_sme, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_PE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_pe, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_WMA_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_wma, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_SYS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_sys, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_QDF_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_qdf, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_SAP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_sap, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_HDD_SAP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_hdd_sap, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_CFG_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_cfg, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_TXRX_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_txrx, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_DP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_dp, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DP_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_HTC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_htc, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_HIF_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_hif, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_CDR_TRACE_ENABLE_HDD_SAP_DATA_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_hdd_sap_data, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_HDD_DATA_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_hdd_data, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_EPPING, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_epping, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_QDF_DEVICES, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_qdf_devices, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_WIFI_POS, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_wifi_pos, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_NAN, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_nan, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_REGULATORY, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_regulatory, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_QDF_TRACE_ENABLE_CP_STATS, WLAN_PARAM_Integer, |
| struct hdd_config, qdf_trace_enable_cp_stats, |
| VAR_FLAGS_OPTIONAL, |
| CFG_QDF_TRACE_ENABLE_DEFAULT, |
| CFG_QDF_TRACE_ENABLE_MIN, |
| CFG_QDF_TRACE_ENABLE_MAX), |
| |
| #ifdef ENABLE_MTRACE_LOG |
| REG_VARIABLE(CFG_ENABLE_MTRACE, WLAN_PARAM_Integer, |
| struct hdd_config, enable_mtrace, |
| VAR_FLAGS_OPTIONAL, |
| CFG_ENABLE_MTRACE_DEFAULT, |
| CFG_ENABLE_MTRACE_MIN, |
| CFG_ENABLE_MTRACE_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enableBypass11d, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_BYPASS_11D_DEFAULT, |
| CFG_ENABLE_BYPASS_11D_MIN, |
| CFG_ENABLE_BYPASS_11D_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_DFS_CHNL_SCAN_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enableDFSChnlScan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_DFS_CHNL_SCAN_DEFAULT, |
| CFG_ENABLE_DFS_CHNL_SCAN_MIN, |
| CFG_ENABLE_DFS_CHNL_SCAN_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_DFS_PNO_CHNL_SCAN_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_dfs_pno_chnl_scan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_DFS_PNO_CHNL_SCAN_DEFAULT, |
| CFG_ENABLE_DFS_PNO_CHNL_SCAN_MIN, |
| CFG_ENABLE_DFS_PNO_CHNL_SCAN_MAX), |
| |
| REG_VARIABLE(CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ShortGI40MhzEnable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SHORT_GI_40MHZ_DEFAULT, |
| CFG_SHORT_GI_40MHZ_MIN, |
| CFG_SHORT_GI_40MHZ_MAX), |
| |
| REG_DYNAMIC_VARIABLE(CFG_REPORT_MAX_LINK_SPEED, WLAN_PARAM_Integer, |
| struct hdd_config, reportMaxLinkSpeed, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_REPORT_MAX_LINK_SPEED_DEFAULT, |
| CFG_REPORT_MAX_LINK_SPEED_MIN, |
| CFG_REPORT_MAX_LINK_SPEED_MAX, |
| NULL, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_LINK_SPEED_RSSI_HIGH, WLAN_PARAM_SignedInteger, |
| struct hdd_config, linkSpeedRssiHigh, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LINK_SPEED_RSSI_HIGH_DEFAULT, |
| CFG_LINK_SPEED_RSSI_HIGH_MIN, |
| CFG_LINK_SPEED_RSSI_HIGH_MAX, |
| NULL, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_LINK_SPEED_RSSI_MID, WLAN_PARAM_SignedInteger, |
| struct hdd_config, linkSpeedRssiMid, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LINK_SPEED_RSSI_MID_DEFAULT, |
| CFG_LINK_SPEED_RSSI_MID_MIN, |
| CFG_LINK_SPEED_RSSI_MID_MAX, |
| NULL, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_LINK_SPEED_RSSI_LOW, WLAN_PARAM_SignedInteger, |
| struct hdd_config, linkSpeedRssiLow, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LINK_SPEED_RSSI_LOW_DEFAULT, |
| CFG_LINK_SPEED_RSSI_LOW_MIN, |
| CFG_LINK_SPEED_RSSI_LOW_MAX, |
| NULL, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamPrefer5GHz, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_PREFER_5GHZ_DEFAULT, |
| CFG_ROAM_PREFER_5GHZ_MIN, |
| CFG_ROAM_PREFER_5GHZ_MAX, |
| cb_notify_set_roam_prefer5_g_hz, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_INTRA_BAND, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamIntraBand, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_INTRA_BAND_DEFAULT, |
| CFG_ROAM_INTRA_BAND_MIN, |
| CFG_ROAM_INTRA_BAND_MAX, |
| cb_notify_set_roam_intra_band, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_N_PROBES, WLAN_PARAM_Integer, |
| struct hdd_config, nProbes, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_N_PROBES_DEFAULT, |
| CFG_ROAM_SCAN_N_PROBES_MIN, |
| CFG_ROAM_SCAN_N_PROBES_MAX, |
| cb_notify_set_roam_scan_n_probes, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_HOME_AWAY_TIME, WLAN_PARAM_Integer, |
| struct hdd_config, nRoamScanHomeAwayTime, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_HOME_AWAY_TIME_DEFAULT, |
| CFG_ROAM_SCAN_HOME_AWAY_TIME_MIN, |
| CFG_ROAM_SCAN_HOME_AWAY_TIME_MAX, |
| cb_notify_set_roam_scan_home_away_time, 0), |
| |
| REG_VARIABLE(CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enableMCC, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_MCC_ENABLED_DEFAULT, |
| CFG_ENABLE_MCC_ENABLED_MIN, |
| CFG_ENABLE_MCC_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, allowMCCGODiffBI, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ALLOW_MCC_GO_DIFF_BI_DEFAULT, |
| CFG_ALLOW_MCC_GO_DIFF_BI_MIN, |
| CFG_ALLOW_MCC_GO_DIFF_BI_MAX), |
| |
| REG_VARIABLE(CFG_THERMAL_MIGRATION_ENABLE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, thermalMitigationEnable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THERMAL_MIGRATION_ENABLE_DEFAULT, |
| CFG_THERMAL_MIGRATION_ENABLE_MIN, |
| CFG_THERMAL_MIGRATION_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_THROTTLE_PERIOD_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, throttlePeriod, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THROTTLE_PERIOD_DEFAULT, |
| CFG_THROTTLE_PERIOD_MIN, |
| CFG_THROTTLE_PERIOD_MAX), |
| |
| REG_VARIABLE(CFG_THROTTLE_DUTY_CYCLE_LEVEL0_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, throttle_dutycycle_level0, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL0_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL0_MIN, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL0_MAX), |
| |
| REG_VARIABLE(CFG_THROTTLE_DUTY_CYCLE_LEVEL1_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, throttle_dutycycle_level1, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL1_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL1_MIN, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL1_MAX), |
| |
| REG_VARIABLE(CFG_THROTTLE_DUTY_CYCLE_LEVEL2_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, throttle_dutycycle_level2, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL2_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL2_MIN, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL2_MAX), |
| |
| REG_VARIABLE(CFG_THROTTLE_DUTY_CYCLE_LEVEL3_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, throttle_dutycycle_level3, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL3_DEFAULT, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL3_MIN, |
| CFG_THROTTLE_DUTY_CYCLE_LEVEL3_MAX), |
| |
| REG_VARIABLE(CFG_VDEV_TYPE_NSS_2G, WLAN_PARAM_Integer, |
| struct hdd_config, vdev_type_nss_2g, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_VDEV_TYPE_NSS_2G_DEFAULT, |
| CFG_VDEV_TYPE_NSS_2G_MIN, |
| CFG_VDEV_TYPE_NSS_2G_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_BT_CHAIN_SEPARATION, WLAN_PARAM_Integer, |
| struct hdd_config, enable_bt_chain_separation, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_BT_CHAIN_SEPARATION_DEFAULT, |
| CFG_ENABLE_BT_CHAIN_SEPARATION_MIN, |
| CFG_ENABLE_BT_CHAIN_SEPARATION_MAX), |
| |
| REG_VARIABLE(CFG_VDEV_TYPE_NSS_5G, WLAN_PARAM_Integer, |
| struct hdd_config, vdev_type_nss_5g, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_VDEV_TYPE_NSS_5G_DEFAULT, |
| CFG_VDEV_TYPE_NSS_5G_MIN, |
| CFG_VDEV_TYPE_NSS_5G_MAX), |
| |
| REG_VARIABLE(CFG_DISABLE_DFS_CH_SWITCH, WLAN_PARAM_Integer, |
| struct hdd_config, disableDFSChSwitch, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DISABLE_DFS_CH_SWITCH_DEFAULT, |
| CFG_DISABLE_DFS_CH_SWITCH_MIN, |
| CFG_DISABLE_DFS_CH_SWITCH_MAX), |
| |
| REG_DYNAMIC_VARIABLE(CFG_SAP_PREFERRED_CHANNEL_LOCATION, |
| WLAN_PARAM_Integer, |
| struct hdd_config, gSapPreferredChanLocation, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SAP_PREFERRED_CHANNEL_LOCATION_DEFAULT, |
| CFG_SAP_PREFERRED_CHANNEL_LOCATION_MIN, |
| CFG_SAP_PREFERRED_CHANNEL_LOCATION_MAX, |
| cb_notify_set_g_sap_preferred_chan_location, 0), |
| REG_DYNAMIC_VARIABLE(CFG_DISABLE_DFS_JAPAN_W53, WLAN_PARAM_Integer, |
| struct hdd_config, gDisableDfsJapanW53, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DISABLE_DFS_JAPAN_W53_DEFAULT, |
| CFG_DISABLE_DFS_JAPAN_W53_MIN, |
| CFG_DISABLE_DFS_JAPAN_W53_MAX, |
| ch_notify_set_g_disable_dfs_japan_w53, 0), |
| |
| REG_VARIABLE(CFG_ENABLE_FIRST_SCAN_2G_ONLY_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enableFirstScan2GOnly, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_FIRST_SCAN_2G_ONLY_DEFAULT, |
| CFG_ENABLE_FIRST_SCAN_2G_ONLY_MIN, |
| CFG_ENABLE_FIRST_SCAN_2G_ONLY_MAX), |
| |
| REG_VARIABLE(CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scanAgingTimeout, |
| VAR_FLAGS_OPTIONAL, |
| CFG_SCAN_AGING_PARAM_DEFAULT, |
| CFG_SCAN_AGING_PARAM_MIN, |
| CFG_SCAN_AGING_PARAM_MAX), |
| |
| REG_VARIABLE(CFG_TX_LDPC_ENABLE_FEATURE, WLAN_PARAM_Integer, |
| struct hdd_config, enable_tx_ldpc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TX_LDPC_ENABLE_FEATURE_DEFAULT, |
| CFG_TX_LDPC_ENABLE_FEATURE_MIN, |
| CFG_TX_LDPC_ENABLE_FEATURE_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_RX_LDPC, WLAN_PARAM_Integer, |
| struct hdd_config, enable_rx_ldpc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_RX_LDPC_DEFAULT, |
| CFG_ENABLE_RX_LDPC_MIN, |
| CFG_ENABLE_RX_LDPC_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_ADHOC_CHANNEL_5GHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, AdHocChannel5G, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_ADHOC_CHANNEL_5GHZ_DEFAULT, |
| CFG_IBSS_ADHOC_CHANNEL_5GHZ_MIN, |
| CFG_IBSS_ADHOC_CHANNEL_5GHZ_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_ADHOC_CHANNEL_24GHZ_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, AdHocChannel24G, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_ADHOC_CHANNEL_24GHZ_DEFAULT, |
| CFG_IBSS_ADHOC_CHANNEL_24GHZ_MIN, |
| CFG_IBSS_ADHOC_CHANNEL_24GHZ_MAX), |
| |
| REG_VARIABLE(CFG_DISABLE_LDPC_WITH_TXBF_AP, WLAN_PARAM_Integer, |
| struct hdd_config, disableLDPCWithTxbfAP, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DISABLE_LDPC_WITH_TXBF_AP_DEFAULT, |
| CFG_DISABLE_LDPC_WITH_TXBF_AP_MIN, |
| CFG_DISABLE_LDPC_WITH_TXBF_AP_MAX), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ENABLE_SSR, WLAN_PARAM_Integer, |
| struct hdd_config, enableSSR, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_SSR_DEFAULT, |
| CFG_ENABLE_SSR_MIN, |
| CFG_ENABLE_SSR_MAX, |
| cb_notify_set_enable_ssr, 0), |
| |
| REG_DYNAMIC_VARIABLE(CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY, |
| WLAN_PARAM_Integer, |
| struct hdd_config, bFastRoamInConIniFeatureEnabled, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_DEFAULT, |
| CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MIN, |
| CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MAX, |
| cb_notify_set_enable_fast_roam_in_concurrency, 0), |
| |
| REG_VARIABLE(CFG_ENABLE_SNR_MONITORING_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fEnableSNRMonitoring, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_ENABLE_SNR_MONITORING_DEFAULT, |
| CFG_ENABLE_SNR_MONITORING_MIN, |
| CFG_ENABLE_SNR_MONITORING_MAX), |
| |
| #ifdef FEATURE_WLAN_SCAN_PNO |
| REG_VARIABLE(CFG_PNO_SCAN_SUPPORT, WLAN_PARAM_Integer, |
| struct hdd_config, configPNOScanSupport, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PNO_SCAN_SUPPORT_DEFAULT, |
| CFG_PNO_SCAN_SUPPORT_DISABLE, |
| CFG_PNO_SCAN_SUPPORT_ENABLE), |
| |
| REG_VARIABLE(CFG_PNO_SCAN_TIMER_REPEAT_VALUE, WLAN_PARAM_Integer, |
| struct hdd_config, configPNOScanTimerRepeatValue, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PNO_SCAN_TIMER_REPEAT_VALUE_DEFAULT, |
| CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MIN, |
| CFG_PNO_SCAN_TIMER_REPEAT_VALUE_MAX), |
| |
| REG_VARIABLE(CFG_PNO_SLOW_SCAN_MULTIPLIER, WLAN_PARAM_Integer, |
| struct hdd_config, pno_slow_scan_multiplier, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PNO_SLOW_SCAN_MULTIPLIER_DEFAULT, |
| CFG_PNO_SLOW_SCAN_MULTIPLIER_MIN, |
| CFG_PNO_SLOW_SCAN_MULTIPLIER_MAX), |
| #endif |
| REG_VARIABLE(CFG_COALESING_IN_IBSS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isCoalesingInIBSSAllowed, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_COALESING_IN_IBSS_DEFAULT, |
| CFG_COALESING_IN_IBSS_MIN, |
| CFG_COALESING_IN_IBSS_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_ATIM_WIN_SIZE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ibssATIMWinSize, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_ATIM_WIN_SIZE_DEFAULT, |
| CFG_IBSS_ATIM_WIN_SIZE_MIN, |
| CFG_IBSS_ATIM_WIN_SIZE_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_IS_POWER_SAVE_ALLOWED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isIbssPowerSaveAllowed, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_IS_POWER_SAVE_ALLOWED_DEFAULT, |
| CFG_IBSS_IS_POWER_SAVE_ALLOWED_MIN, |
| CFG_IBSS_IS_POWER_SAVE_ALLOWED_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, isIbssPowerCollapseAllowed, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED_DEFAULT, |
| CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED_MIN, |
| CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_AWAKE_ON_TX_RX_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, isIbssAwakeOnTxRx, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_AWAKE_ON_TX_RX_DEFAULT, |
| CFG_IBSS_AWAKE_ON_TX_RX_MIN, |
| CFG_IBSS_AWAKE_ON_TX_RX_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_INACTIVITY_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ibssInactivityCount, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_INACTIVITY_TIME_DEFAULT, |
| CFG_IBSS_INACTIVITY_TIME_MIN, |
| CFG_IBSS_INACTIVITY_TIME_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_TXSP_END_INACTIVITY_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ibssTxSpEndInactivityTime, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_TXSP_END_INACTIVITY_DEFAULT, |
| CFG_IBSS_TXSP_END_INACTIVITY_MIN, |
| CFG_IBSS_TXSP_END_INACTIVITY_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_PS_WARMUP_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ibssPsWarmupTime, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_PS_WARMUP_TIME_DEFAULT, |
| CFG_IBSS_PS_WARMUP_TIME_MIN, |
| CFG_IBSS_PS_WARMUP_TIME_MAX), |
| |
| REG_VARIABLE(CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, ibssPs1RxChainInAtimEnable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_DEFAULT, |
| CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_MIN, |
| CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_MAX), |
| |
| REG_VARIABLE(CFG_SET_TXPOWER_LIMIT2G_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, TxPower2g, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SET_TXPOWER_LIMIT2G_DEFAULT, |
| CFG_SET_TXPOWER_LIMIT2G_MIN, |
| CFG_SET_TXPOWER_LIMIT2G_MAX), |
| |
| REG_VARIABLE(CFG_SET_TXPOWER_LIMIT5G_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, TxPower5g, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SET_TXPOWER_LIMIT5G_DEFAULT, |
| CFG_SET_TXPOWER_LIMIT5G_MIN, |
| CFG_SET_TXPOWER_LIMIT5G_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, fDfsPhyerrFilterOffload, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_DEFAULT, |
| CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_MIN, |
| CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_OVERLAP_CH, WLAN_PARAM_Integer, |
| struct hdd_config, gEnableOverLapCh, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_ENABLE_OVERLAP_CH_DEFAULT, |
| CFG_ENABLE_OVERLAP_CH_MIN, |
| CFG_ENABLE_OVERLAP_CH_MAX), |
| |
| REG_VARIABLE(CFG_REG_CHANGE_DEF_COUNTRY_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, fRegChangeDefCountry, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_REG_CHANGE_DEF_COUNTRY_DEFAULT, |
| CFG_REG_CHANGE_DEF_COUNTRY_MIN, |
| CFG_REG_CHANGE_DEF_COUNTRY_MAX), |
| #ifdef QCA_LL_TX_FLOW_CONTROL_V2 |
| |
| REG_VARIABLE(CFG_LL_TX_FLOW_STOP_QUEUE_TH, WLAN_PARAM_Integer, |
| struct hdd_config, TxFlowStopQueueThreshold, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LL_TX_FLOW_STOP_QUEUE_TH_DEFAULT, |
| CFG_LL_TX_FLOW_STOP_QUEUE_TH_MIN, |
| CFG_LL_TX_FLOW_STOP_QUEUE_TH_MAX), |
| |
| REG_VARIABLE(CFG_LL_TX_FLOW_START_QUEUE_OFFSET, WLAN_PARAM_Integer, |
| struct hdd_config, TxFlowStartQueueOffset, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LL_TX_FLOW_START_QUEUE_OFFSET_DEFAULT, |
| CFG_LL_TX_FLOW_START_QUEUE_OFFSET_MIN, |
| CFG_LL_TX_FLOW_START_QUEUE_OFFSET_MAX), |
| |
| #endif |
| REG_VARIABLE(CFG_INITIAL_DWELL_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, nInitialDwellTime, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_INITIAL_DWELL_TIME_DEFAULT, |
| CFG_INITIAL_DWELL_TIME_MIN, |
| CFG_INITIAL_DWELL_TIME_MAX), |
| |
| REG_VARIABLE(CFG_INITIAL_SCAN_NO_DFS_CHNL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, initial_scan_no_dfs_chnl, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_INITIAL_SCAN_NO_DFS_CHNL_DEFAULT, |
| CFG_INITIAL_SCAN_NO_DFS_CHNL_MIN, |
| CFG_INITIAL_SCAN_NO_DFS_CHNL_MAX), |
| |
| REG_VARIABLE(CFG_ADVERTISE_CONCURRENT_OPERATION_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, advertiseConcurrentOperation, |
| VAR_FLAGS_OPTIONAL, |
| CFG_ADVERTISE_CONCURRENT_OPERATION_DEFAULT, |
| CFG_ADVERTISE_CONCURRENT_OPERATION_MIN, |
| CFG_ADVERTISE_CONCURRENT_OPERATION_MAX), |
| |
| #ifdef MSM_PLATFORM |
| REG_VARIABLE(CFG_PERIODIC_STATS_DISPLAY_TIME_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, periodic_stats_disp_time, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PERIODIC_STATS_DISPLAY_TIME_DEFAULT, |
| CFG_PERIODIC_STATS_DISPLAY_TIME_MIN, |
| CFG_PERIODIC_STATS_DISPLAY_TIME_MAX), |
| #endif |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_FW_MODULE_LOG_LEVEL, WLAN_PARAM_String, |
| struct hdd_config, enableFwModuleLogLevel, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ENABLE_FW_MODULE_LOG_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_CONCURRENT_STA, WLAN_PARAM_String, |
| struct hdd_config, enableConcurrentSTA, |
| VAR_FLAGS_NONE, |
| (void *)CFG_ENABLE_CONCURRENT_STA_DEFAULT), |
| |
| REG_VARIABLE(CFG_IGNORE_CAC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, ignoreCAC, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IGNORE_CAC_DEFAULT, |
| CFG_IGNORE_CAC_MIN, |
| CFG_IGNORE_CAC_MAX), |
| |
| REG_VARIABLE(CFG_DFS_RADAR_PRI_MULTIPLIER_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, dfsRadarPriMultiplier, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DFS_RADAR_PRI_MULTIPLIER_DEFAULT, |
| CFG_DFS_RADAR_PRI_MULTIPLIER_MIN, |
| CFG_DFS_RADAR_PRI_MULTIPLIER_MAX), |
| |
| REG_VARIABLE(CFG_REORDER_OFFLOAD_SUPPORT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, reorderOffloadSupport, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_REORDER_OFFLOAD_SUPPORT_DEFAULT, |
| CFG_REORDER_OFFLOAD_SUPPORT_MIN, |
| CFG_REORDER_OFFLOAD_SUPPORT_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_SAP_SUSPEND, WLAN_PARAM_Integer, |
| struct hdd_config, enable_sap_suspend, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_SAP_SUSPEND_DEFAULT, |
| CFG_ENABLE_SAP_SUSPEND_MIN, |
| CFG_ENABLE_SAP_SUSPEND_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, gEnableDeauthToDisassocMap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_DEFAULT, |
| CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MIN, |
| CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MAX), |
| #ifdef DHCP_SERVER_OFFLOAD |
| REG_VARIABLE_STRING(CFG_DHCP_SERVER_IP_NAME, WLAN_PARAM_String, |
| struct hdd_config, dhcpServerIP, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_DHCP_SERVER_IP_DEFAULT), |
| #endif /* DHCP_SERVER_OFFLOAD */ |
| |
| REG_VARIABLE(CFG_ENABLE_MAC_ADDR_SPOOFING, WLAN_PARAM_Integer, |
| struct hdd_config, enable_mac_spoofing, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_MAC_ADDR_SPOOFING_DEFAULT, |
| CFG_ENABLE_MAC_ADDR_SPOOFING_MIN, |
| CFG_ENABLE_MAC_ADDR_SPOOFING_MAX), |
| |
| REG_VARIABLE(CFG_STA_MIRACAST_MCC_REST_TIME_VAL, WLAN_PARAM_Integer, |
| struct hdd_config, sta_miracast_mcc_rest_time_val, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_STA_MIRACAST_MCC_REST_TIME_VAL_DEFAULT, |
| CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MIN, |
| CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MAX), |
| |
| #ifdef FEATURE_AP_MCC_CH_AVOIDANCE |
| REG_VARIABLE(CFG_SAP_MCC_CHANNEL_AVOIDANCE_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| sap_channel_avoidance, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, |
| CFG_SAP_MCC_CHANNEL_AVOIDANCE_DEFAULT, |
| CFG_SAP_MCC_CHANNEL_AVOIDANCE_MIN, |
| CFG_SAP_MCC_CHANNEL_AVOIDANCE_MAX), |
| #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ |
| |
| REG_VARIABLE(CFG_SAP_11AC_OVERRIDE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, sap_11ac_override, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SAP_11AC_OVERRIDE_DEFAULT, |
| CFG_SAP_11AC_OVERRIDE_MIN, |
| CFG_SAP_11AC_OVERRIDE_MAX), |
| |
| REG_VARIABLE(CFG_GO_11AC_OVERRIDE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, go_11ac_override, |
| VAR_FLAGS_OPTIONAL | |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_GO_11AC_OVERRIDE_DEFAULT, |
| CFG_GO_11AC_OVERRIDE_MIN, |
| CFG_GO_11AC_OVERRIDE_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_NON_DFS_CHAN_ON_RADAR, WLAN_PARAM_Integer, |
| struct hdd_config, prefer_non_dfs_on_radar, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_DEFAULT, |
| CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MIN, |
| CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MAX), |
| |
| REG_VARIABLE(CFG_MAX_MSDUS_PER_RXIND_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, max_msdus_per_rxinorderind, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAX_MSDUS_PER_RXIND_DEFAULT, |
| CFG_MAX_MSDUS_PER_RXIND_MIN, |
| CFG_MAX_MSDUS_PER_RXIND_MAX), |
| |
| REG_VARIABLE(CFG_FINE_TIME_MEAS_CAPABILITY, WLAN_PARAM_HexInteger, |
| struct hdd_config, fine_time_meas_cap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FINE_TIME_MEAS_CAPABILITY_DEFAULT, |
| CFG_FINE_TIME_MEAS_CAPABILITY_MIN, |
| CFG_FINE_TIME_MEAS_CAPABILITY_MAX), |
| |
| REG_VARIABLE(CFG_MAX_SCAN_COUNT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, max_scan_count, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAX_SCAN_COUNT_DEFAULT, |
| CFG_MAX_SCAN_COUNT_MIN, |
| CFG_MAX_SCAN_COUNT_MAX), |
| |
| REG_VARIABLE(CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE, WLAN_PARAM_Integer, |
| struct hdd_config, etsi13_srd_chan_in_master_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE_DEF, |
| CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE_MIN, |
| CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE_MAX), |
| |
| REG_VARIABLE(CFG_DUAL_MAC_FEATURE_DISABLE, WLAN_PARAM_HexInteger, |
| struct hdd_config, dual_mac_feature_disable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DUAL_MAC_FEATURE_DISABLE_DEFAULT, |
| CFG_DUAL_MAC_FEATURE_DISABLE_MIN, |
| CFG_DUAL_MAC_FEATURE_DISABLE_MAX), |
| |
| REG_VARIABLE_STRING(CFG_DBS_SCAN_SELECTION_NAME, WLAN_PARAM_String, |
| struct hdd_config, dbs_scan_selection, |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_DBS_SCAN_SELECTION_DEFAULT), |
| |
| REG_VARIABLE(CFG_STA_SAP_SCC_ON_DFS_CHAN, WLAN_PARAM_HexInteger, |
| struct hdd_config, sta_sap_scc_on_dfs_chan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_STA_SAP_SCC_ON_DFS_CHAN_DEFAULT, |
| CFG_STA_SAP_SCC_ON_DFS_CHAN_MIN, |
| CFG_STA_SAP_SCC_ON_DFS_CHAN_MAX), |
| |
| REG_VARIABLE(CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN, WLAN_PARAM_HexInteger, |
| struct hdd_config, sta_sap_scc_on_lte_coex_chan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_DEFAULT, |
| CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MIN, |
| CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MAX), |
| |
| #ifdef FEATURE_WLAN_SCAN_PNO |
| REG_VARIABLE(CFG_PNO_CHANNEL_PREDICTION_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, pno_channel_prediction, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_PNO_CHANNEL_PREDICTION_DEFAULT, |
| CFG_PNO_CHANNEL_PREDICTION_MIN, |
| CFG_PNO_CHANNEL_PREDICTION_MAX), |
| |
| REG_VARIABLE(CFG_TOP_K_NUM_OF_CHANNELS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, top_k_num_of_channels, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TOP_K_NUM_OF_CHANNELS_DEFAULT, |
| CFG_TOP_K_NUM_OF_CHANNELS_MIN, |
| CFG_TOP_K_NUM_OF_CHANNELS_MAX), |
| |
| REG_VARIABLE(CFG_STATIONARY_THRESHOLD_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, stationary_thresh, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_STATIONARY_THRESHOLD_DEFAULT, |
| CFG_STATIONARY_THRESHOLD_MIN, |
| CFG_STATIONARY_THRESHOLD_MAX), |
| |
| REG_VARIABLE(CFG_CHANNEL_PREDICTION_FULL_SCAN_MS_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, channel_prediction_full_scan, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_CHANNEL_PREDICTION_FULL_SCAN_MS_DEFAULT, |
| CFG_CHANNEL_PREDICTION_FULL_SCAN_MS_MIN, |
| CFG_CHANNEL_PREDICTION_FULL_SCAN_MS_MAX), |
| |
| REG_VARIABLE(CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, pnoscan_adaptive_dwell_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_DEFAULT, |
| CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MIN, |
| CFG_ADAPTIVE_PNOSCAN_DWELL_MODE_MAX), |
| #endif |
| REG_VARIABLE(CFG_SELF_GEN_FRM_PWR, WLAN_PARAM_Integer, |
| struct hdd_config, self_gen_frm_pwr, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SELF_GEN_FRM_PWR_DEFAULT, |
| CFG_SELF_GEN_FRM_PWR_MIN, |
| CFG_SELF_GEN_FRM_PWR_MAX), |
| |
| #ifdef FEATURE_LFR_SUBNET_DETECTION |
| REG_VARIABLE(CFG_ENABLE_LFR_SUBNET_DETECTION, WLAN_PARAM_Integer, |
| struct hdd_config, enable_lfr_subnet_detection, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_LFR_SUBNET_DEFAULT, |
| CFG_ENABLE_LFR_SUBNET_MIN, |
| CFG_ENABLE_LFR_SUBNET_MAX), |
| #endif |
| REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, inform_bss_rssi_raw, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_INFORM_BSS_RSSI_RAW_DEFAULT, |
| CFG_INFORM_BSS_RSSI_RAW_MIN, |
| CFG_INFORM_BSS_RSSI_RAW_MAX), |
| |
| #ifdef WLAN_FEATURE_TSF |
| #ifdef WLAN_FEATURE_TSF_PLUS |
| REG_VARIABLE(CFG_SET_TSF_PTP_OPT_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, tsf_ptp_options, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SET_TSF_PTP_OPT_DEFAULT, |
| CFG_SET_TSF_PTP_OPT_MIN, |
| CFG_SET_TSF_PTP_OPT_MAX), |
| #endif /* WLAN_FEATURE_TSF_PLUS */ |
| #endif |
| |
| REG_VARIABLE(CFG_ROAM_HO_DELAY_FOR_RX_NAME, |
| WLAN_PARAM_Integer, struct hdd_config, |
| ho_delay_for_rx, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_HO_DELAY_FOR_RX_DEFAULT, |
| CFG_ROAM_HO_DELAY_FOR_RX_MIN, |
| CFG_ROAM_HO_DELAY_FOR_RX_MAX), |
| |
| REG_VARIABLE(CFG_MIN_DELAY_BTW_ROAM_SCAN_NAME, |
| WLAN_PARAM_Integer, struct hdd_config, |
| min_delay_btw_roam_scans, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MIN_DELAY_BTW_ROAM_SCAN_DEFAULT, |
| CFG_MIN_DELAY_BTW_ROAM_SCAN_MIN, |
| CFG_MIN_DELAY_BTW_ROAM_SCAN_MAX), |
| |
| REG_VARIABLE(CFG_ROAM_SCAN_TRIGGER_REASON_BITMASK_NAME, |
| WLAN_PARAM_HexInteger, struct hdd_config, |
| roam_trigger_reason_bitmask, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_SCAN_TRIGGER_REASON_BITMASK_DEFAULT, |
| CFG_ROAM_SCAN_TRIGGER_REASON_BITMASK_MIN, |
| CFG_ROAM_SCAN_TRIGGER_REASON_BITMASK_MAX), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_VO_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, tx_sched_wrr_vo, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_ENABLE_TX_SCHED_WRR_VO_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_VI_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, tx_sched_wrr_vi, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_ENABLE_TX_SCHED_WRR_VI_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_BE_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, tx_sched_wrr_be, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_ENABLE_TX_SCHED_WRR_BE_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_BK_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, tx_sched_wrr_bk, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_ENABLE_TX_SCHED_WRR_BK_DEFAULT), |
| |
| REG_VARIABLE(CFG_CREATE_BUG_REPORT_FOR_SCAN, WLAN_PARAM_Integer, |
| struct hdd_config, bug_report_for_no_scan_results, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_CREATE_BUG_REPORT_FOR_SCAN_DEFAULT, |
| CFG_CREATE_BUG_REPORT_FOR_SCAN_DISABLE, |
| CFG_CREATE_BUG_REPORT_FOR_SCAN_ENABLE), |
| |
| #ifdef CONFIG_DP_TRACE |
| REG_VARIABLE(CFG_ENABLE_DP_TRACE, WLAN_PARAM_Integer, |
| struct hdd_config, enable_dp_trace, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_DP_TRACE_DEFAULT, |
| CFG_ENABLE_DP_TRACE_MIN, |
| CFG_ENABLE_DP_TRACE_MAX), |
| |
| REG_VARIABLE_STRING(CFG_ENABLE_DP_TRACE_CONFIG, WLAN_PARAM_String, |
| struct hdd_config, dp_trace_config, |
| VAR_FLAGS_OPTIONAL, |
| (void *) CFG_ENABLE_DP_TRACE_CONFIG_DEFAULT), |
| #endif |
| |
| REG_VARIABLE(CFG_ADAPTIVE_SCAN_DWELL_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_adaptive_dwell_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_DEFAULT, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_MIN, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_MAX), |
| |
| REG_VARIABLE(CFG_ADAPTIVE_SCAN_DWELL_MODE_NC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_adaptive_dwell_mode_nc, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_NC_DEFAULT, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_NC_MIN, |
| CFG_ADAPTIVE_SCAN_DWELL_MODE_NC_MAX), |
| |
| REG_VARIABLE(CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, extscan_adaptive_dwell_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_DEFAULT, |
| CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_MIN, |
| CFG_ADAPTIVE_EXTSCAN_DWELL_MODE_MAX), |
| |
| REG_VARIABLE(CFG_ADAPTIVE_DWELL_MODE_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, adaptive_dwell_mode_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPTIVE_DWELL_MODE_ENABLED_DEFAULT, |
| CFG_ADAPTIVE_DWELL_MODE_ENABLED_MIN, |
| CFG_ADAPTIVE_DWELL_MODE_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_GLOBAL_ADAPTIVE_DWELL_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, global_adapt_dwelltime_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_GLOBAL_ADAPTIVE_DWELL_MODE_DEFAULT, |
| CFG_GLOBAL_ADAPTIVE_DWELL_MODE_MIN, |
| CFG_GLOBAL_ADAPTIVE_DWELL_MODE_MAX), |
| |
| REG_VARIABLE(CFG_ADAPT_DWELL_LPF_WEIGHT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, adapt_dwell_lpf_weight, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPT_DWELL_LPF_WEIGHT_DEFAULT, |
| CFG_ADAPT_DWELL_LPF_WEIGHT_MIN, |
| CFG_ADAPT_DWELL_LPF_WEIGHT_MAX), |
| |
| REG_VARIABLE(CFG_ADAPT_DWELL_PASMON_INTVAL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, adapt_dwell_passive_mon_intval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPT_DWELL_PASMON_INTVAL_DEFAULT, |
| CFG_ADAPT_DWELL_PASMON_INTVAL_MIN, |
| CFG_ADAPT_DWELL_PASMON_INTVAL_MAX), |
| |
| REG_VARIABLE(CFG_ADAPT_DWELL_WIFI_THRESH_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, adapt_dwell_wifi_act_threshold, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ADAPT_DWELL_WIFI_THRESH_DEFAULT, |
| CFG_ADAPT_DWELL_WIFI_THRESH_MIN, |
| CFG_ADAPT_DWELL_WIFI_THRESH_MAX), |
| |
| REG_VARIABLE(CFG_NUM_DP_RX_THREADS_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, num_dp_rx_threads, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NUM_DP_RX_THREADS_DEFAULT, |
| CFG_NUM_DP_RX_THREADS_MIN, |
| CFG_NUM_DP_RX_THREADS_MAX), |
| |
| REG_VARIABLE(CFG_INDOOR_CHANNEL_SUPPORT_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, indoor_channel_support, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_INDOOR_CHANNEL_SUPPORT_DEFAULT, |
| CFG_INDOOR_CHANNEL_SUPPORT_MIN, |
| CFG_INDOOR_CHANNEL_SUPPORT_MAX), |
| |
| REG_VARIABLE(CFG_MARK_INDOOR_AS_DISABLE_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, force_ssc_disable_indoor_channel, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MARK_INDOOR_AS_DISABLE_DEFAULT, |
| CFG_MARK_INDOOR_AS_DISABLE_MIN, |
| CFG_MARK_INDOOR_AS_DISABLE_MAX), |
| |
| REG_VARIABLE(CFG_SAP_TX_LEAKAGE_THRESHOLD_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, sap_tx_leakage_threshold, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SAP_TX_LEAKAGE_THRESHOLD_DEFAULT, |
| CFG_SAP_TX_LEAKAGE_THRESHOLD_MIN, |
| CFG_SAP_TX_LEAKAGE_THRESHOLD_MAX), |
| |
| REG_VARIABLE(CFG_SAP_FORCE_11N_FOR_11AC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, sap_force_11n_for_11ac, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SAP_FORCE_11N_FOR_11AC_DEFAULT, |
| CFG_SAP_FORCE_11N_FOR_11AC_MIN, |
| CFG_SAP_FORCE_11N_FOR_11AC_MAX), |
| |
| REG_VARIABLE(CFG_GO_FORCE_11N_FOR_11AC_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, go_force_11n_for_11ac, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_GO_FORCE_11N_FOR_11AC_DEFAULT, |
| CFG_GO_FORCE_11N_FOR_11AC_MIN, |
| CFG_GO_FORCE_11N_FOR_11AC_MAX), |
| |
| REG_VARIABLE(CFG_FILTER_MULTICAST_REPLAY_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, multicast_replay_filter, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FILTER_MULTICAST_REPLAY_DEFAULT, |
| CFG_FILTER_MULTICAST_REPLAY_MIN, |
| CFG_FILTER_MULTICAST_REPLAY_MAX), |
| |
| REG_VARIABLE(CFG_RX_WAKELOCK_TIMEOUT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, rx_wakelock_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RX_WAKELOCK_TIMEOUT_DEFAULT, |
| CFG_RX_WAKELOCK_TIMEOUT_MIN, |
| CFG_RX_WAKELOCK_TIMEOUT_MAX), |
| |
| REG_VARIABLE(CFG_RESTART_BEACONING_ON_CH_AVOID_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, restart_beaconing_on_chan_avoid_event, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_RESTART_BEACONING_ON_CH_AVOID_DEFAULT, |
| CFG_RESTART_BEACONING_ON_CH_AVOID_MIN, |
| CFG_RESTART_BEACONING_ON_CH_AVOID_MAX), |
| |
| REG_VARIABLE(CFG_ACTIVE_UC_APF_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, active_uc_apf_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ACTIVE_UC_APF_MODE_DEFAULT, |
| CFG_ACTIVE_UC_APF_MODE_MIN, |
| CFG_ACTIVE_UC_APF_MODE_MAX), |
| |
| REG_VARIABLE(CFG_ACTIVE_MC_BC_APF_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, active_mc_bc_apf_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ACTIVE_MC_BC_APF_MODE_DEFAULT, |
| CFG_ACTIVE_MC_BC_APF_MODE_MIN, |
| CFG_ACTIVE_MC_BC_APF_MODE_MAX), |
| |
| #ifdef WLAN_FEATURE_11AX |
| REG_VARIABLE(CFG_ENABLE_UL_MIMO_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_ul_mimo, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_UL_MIMO_DEFAULT, |
| CFG_ENABLE_UL_MIMO_MIN, |
| CFG_ENABLE_UL_MIMO_MAX), |
| |
| REG_VARIABLE(CFG_HE_DYNAMIC_FRAGMENTATION_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, he_dynamic_frag_support, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_HE_DYNAMIC_FRAGMENTATION_DEFAULT, |
| CFG_HE_DYNAMIC_FRAGMENTATION_MIN, |
| CFG_HE_DYNAMIC_FRAGMENTATION_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_UL_OFDMA_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_ul_ofdma, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_UL_OFDMA_DEFAULT, |
| CFG_ENABLE_UL_OFDMA_MIN, |
| CFG_ENABLE_UL_OFDMA_MAX), |
| |
| REG_VARIABLE(CFG_HE_STA_OBSSPD_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, he_sta_obsspd, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_HE_STA_OBSSPD_DEFAULT, |
| CFG_HE_STA_OBSSPD_MIN, |
| CFG_HE_STA_OBSSPD_MAX), |
| #endif |
| #ifdef WLAN_SUPPORT_TWT |
| REG_VARIABLE(CFG_ENABLE_TWT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_twt, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_TWT_DEFAULT, |
| CFG_ENABLE_TWT_MIN, |
| CFG_ENABLE_TWT_MAX), |
| |
| REG_VARIABLE(CFG_TWT_CONGESTION_TIMEOUT_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, twt_congestion_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TWT_CONGESTION_TIMEOUT_DEFAULT, |
| CFG_TWT_CONGESTION_TIMEOUT_MIN, |
| CFG_TWT_CONGESTION_TIMEOUT_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_SCAN_BACKOFF_MULTIPLIER_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_backoff_multiplier, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SCAN_BACKOFF_MULTIPLIER_DEFAULT, |
| CFG_SCAN_BACKOFF_MULTIPLIER_MIN, |
| CFG_SCAN_BACKOFF_MULTIPLIER_MAX), |
| |
| REG_VARIABLE(CFG_MAWC_NLO_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mawc_nlo_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAWC_NLO_ENABLED_DEFAULT, |
| CFG_MAWC_NLO_ENABLED_MIN, |
| CFG_MAWC_NLO_ENABLED_MAX), |
| |
| REG_VARIABLE(CFG_MAWC_NLO_EXP_BACKOFF_RATIO_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mawc_nlo_exp_backoff_ratio, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAWC_NLO_EXP_BACKOFF_RATIO_DEFAULT, |
| CFG_MAWC_NLO_EXP_BACKOFF_RATIO_MIN, |
| CFG_MAWC_NLO_EXP_BACKOFF_RATIO_MAX), |
| |
| REG_VARIABLE(CFG_MAWC_NLO_INIT_SCAN_INTERVAL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mawc_nlo_init_scan_interval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAWC_NLO_INIT_SCAN_INTERVAL_DEFAULT, |
| CFG_MAWC_NLO_INIT_SCAN_INTERVAL_MIN, |
| CFG_MAWC_NLO_INIT_SCAN_INTERVAL_MAX), |
| |
| REG_VARIABLE(CFG_MAWC_NLO_MAX_SCAN_INTERVAL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, mawc_nlo_max_scan_interval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MAWC_NLO_MAX_SCAN_INTERVAL_DEFAULT, |
| CFG_MAWC_NLO_MAX_SCAN_INTERVAL_MIN, |
| CFG_MAWC_NLO_MAX_SCAN_INTERVAL_MAX), |
| |
| REG_VARIABLE(CFG_FORCE_1X1_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, is_force_1x1, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_FORCE_1X1_DEFAULT, |
| CFG_FORCE_1X1_MIN, |
| CFG_FORCE_1X1_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_11D_IN_WORLD_MODE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_11d_in_world_mode, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_11D_IN_WORLD_MODE_DEFAULT, |
| CFG_ENABLE_11D_IN_WORLD_MODE_MIN, |
| CFG_ENABLE_11D_IN_WORLD_MODE_MAX), |
| |
| REG_VARIABLE(CFG_LPRx_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_lprx, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LPRx_DEFAULT, |
| CFG_LPRx_MIN, |
| CFG_LPRx_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_ACTION_OUI, WLAN_PARAM_Integer, |
| struct hdd_config, action_oui_enable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_ACTION_OUI_DEFAULT, |
| CFG_ENABLE_ACTION_OUI_MIN, |
| CFG_ENABLE_ACTION_OUI_MAX), |
| |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_CONNECT_1X1_NAME, WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[0], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ACTION_OUI_CONNECT_1X1_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_ITO_EXTENSION_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[1], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ACTION_OUI_ITO_EXTENSION_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_CCKM_1X1_NAME, WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[2], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ACTION_OUI_CCKM_1X1_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_ITO_ALTERNATE_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[3], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ACTION_OUI_ITO_ALTERNATE_DEFAULT), |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_SWITCH_TO_11N_MODE_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[4], |
| VAR_FLAGS_OPTIONAL, |
| (void *)CFG_ACTION_OUI_SWITCH_TO_11N_MODE_DEFAULT), |
| |
| REG_VARIABLE_STRING(CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_NAME, |
| WLAN_PARAM_String, |
| struct hdd_config, action_oui_str[5], |
| VAR_FLAGS_OPTIONAL, |
| (void *) |
| CFG_ACTION_OUI_CONNECT_1X1_WITH_1_CHAIN_DEFAULT), |
| |
| REG_VARIABLE(CFG_SCAN_11D_INTERVAL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, scan_11d_interval, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_SCAN_11D_INTERVAL_DEFAULT, |
| CFG_SCAN_11D_INTERVAL_MIN, |
| CFG_SCAN_11D_INTERVAL_MAX), |
| |
| REG_VARIABLE(CFG_IS_BSSID_HINT_PRIORITY_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, is_bssid_hint_priority, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IS_BSSID_HINT_PRIORITY_DEFAULT, |
| CFG_IS_BSSID_HINT_PRIORITY_MIN, |
| CFG_IS_BSSID_HINT_PRIORITY_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_ENABLE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, wlm_latency_enable, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_ENABLE_DEFAULT, |
| CFG_LATENCY_ENABLE_MIN, |
| CFG_LATENCY_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_LEVEL_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, wlm_latency_level, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_LEVEL_DEFAULT, |
| CFG_LATENCY_LEVEL_MIN, |
| CFG_LATENCY_LEVEL_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_FLAGS_NORMAL_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, wlm_latency_flags_normal, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_FLAGS_NORMAL_DEFAULT, |
| CFG_LATENCY_FLAGS_NORMAL_MIN, |
| CFG_LATENCY_FLAGS_NORMAL_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_FLAGS_MODERATE_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, wlm_latency_flags_moderate, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_FLAGS_MODERATE_DEFAULT, |
| CFG_LATENCY_FLAGS_MODERATE_MIN, |
| CFG_LATENCY_FLAGS_MODERATE_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_FLAGS_LOW_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, wlm_latency_flags_low, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_FLAGS_LOW_DEFAULT, |
| CFG_LATENCY_FLAGS_LOW_MIN, |
| CFG_LATENCY_FLAGS_LOW_MAX), |
| |
| REG_VARIABLE(CFG_LATENCY_FLAGS_ULTRALOW_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, wlm_latency_flags_ultralow, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_LATENCY_FLAGS_ULTRALOW_DEFAULT, |
| CFG_LATENCY_FLAGS_ULTRALOW_MIN, |
| CFG_LATENCY_FLAGS_ULTRALOW_MAX), |
| |
| |
| REG_VARIABLE(CFG_DFS_BEACON_TX_ENHANCED, WLAN_PARAM_Integer, |
| struct hdd_config, dfs_beacon_tx_enhanced, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DFS_BEACON_TX_ENHANCED_DEFAULT, |
| CFG_DFS_BEACON_TX_ENHANCED_MIN, |
| CFG_DFS_BEACON_TX_ENHANCED_MAX), |
| |
| REG_VARIABLE(CFG_BTM_ENABLE_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, btm_offload_config, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BTM_ENABLE_DEFAULT, |
| CFG_BTM_ENABLE_MIN, |
| CFG_BTM_ENABLE_MAX), |
| |
| #ifdef WLAN_FEATURE_SAE |
| REG_VARIABLE(CFG_IS_SAE_ENABLED_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, is_sae_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_IS_SAE_ENABLED_DEFAULT, |
| CFG_IS_SAE_ENABLED_MIN, |
| CFG_IS_SAE_ENABLED_MAX), |
| #endif |
| |
| REG_VARIABLE(CFG_BTM_SOLICITED_TIMEOUT, WLAN_PARAM_Integer, |
| struct hdd_config, btm_solicited_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BTM_SOLICITED_TIMEOUT_DEFAULT, |
| CFG_BTM_SOLICITED_TIMEOUT_MIN, |
| CFG_BTM_SOLICITED_TIMEOUT_MAX), |
| |
| REG_VARIABLE(CFG_BTM_MAX_ATTEMPT_CNT, WLAN_PARAM_Integer, |
| struct hdd_config, btm_max_attempt_cnt, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BTM_MAX_ATTEMPT_CNT_DEFAULT, |
| CFG_BTM_MAX_ATTEMPT_CNT_MIN, |
| CFG_BTM_MAX_ATTEMPT_CNT_MAX), |
| |
| REG_VARIABLE(CFG_BTM_STICKY_TIME, WLAN_PARAM_Integer, |
| struct hdd_config, btm_sticky_time, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_BTM_STICKY_TIME_DEFAULT, |
| CFG_BTM_STICKY_TIME_MIN, |
| CFG_BTM_STICKY_TIME_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_GCMP_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, gcmp_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_GCMP_DEFAULT, |
| CFG_ENABLE_GCMP_MIN, |
| CFG_ENABLE_GCMP_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_11K_ENABLE_BITMASK_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, offload_11k_enable_bitmask, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_11K_ENABLE_BITMASK_DEFAULT, |
| CFG_OFFLOAD_11K_ENABLE_BITMASK_MIN, |
| CFG_OFFLOAD_11K_ENABLE_BITMASK_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_report_offload_params_bitmask, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_report_offload_time_offset, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_report_offload_low_rssi_offset, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| neighbor_report_offload_bmiss_count_trigger, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, |
| neighbor_report_offload_per_threshold_offset, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_report_offload_cache_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MAX), |
| |
| REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, neighbor_report_offload_max_req_cap, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_DEFAULT, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MIN, |
| CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MAX), |
| |
| REG_VARIABLE(CFG_WMI_WQ_WATCHDOG, WLAN_PARAM_Integer, |
| struct hdd_config, wmi_wq_watchdog_timeout, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_WMI_WQ_WATCHDOG_DEFAULT, |
| CFG_WMI_WQ_WATCHDOG_MIN, |
| CFG_WMI_WQ_WATCHDOG_MAX), |
| |
| REG_VARIABLE(CFG_DTIM_SELECTION_DIVERSITY_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, enable_dtim_selection_diversity, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_DTIM_SELECTION_DIVERSITY_DEFAULT, |
| CFG_DTIM_SELECTION_DIVERSITY_MIN, |
| CFG_DTIM_SELECTION_DIVERSITY_MAX), |
| |
| REG_VARIABLE(CFG_TX_SCH_DELAY_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, enable_tx_sch_delay, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_TX_SCH_DELAY_DEFAULT, |
| CFG_TX_SCH_DELAY_MIN, |
| CFG_TX_SCH_DELAY_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_UNIT_TEST_FRAMEWORK_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, is_unit_test_framework_enabled, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_UINT_TEST_FRAMEWORK_DEFAULT, |
| CFG_ENABLE_UNIT_TEST_FRAMEWORK_MIN, |
| CFG_ENABLE_UNIT_TEST_FRAMEWORK_MAX), |
| |
| REG_VARIABLE(CFG_ROAM_FT_OPEN_ENABLE_NAME, WLAN_PARAM_Integer, |
| struct hdd_config, enable_ftopen, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_FT_OPEN_ENABLE_DEFAULT, |
| CFG_ROAM_FT_OPEN_ENABLE_MIN, |
| CFG_ROAM_FT_OPEN_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_ENABLE_SECONDARY_RATE_NAME, |
| WLAN_PARAM_HexInteger, |
| struct hdd_config, enable_secondary_rate, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ENABLE_SECONDARY_RATE_DEFAULT, |
| CFG_ENABLE_SECONDARY_RATE_MIN, |
| CFG_ENABLE_SECONDARY_RATE_MAX), |
| |
| REG_VARIABLE(CFG_ROAM_FORCE_RSSI_TRIGGER_NAME, |
| WLAN_PARAM_Integer, struct hdd_config, |
| roam_force_rssi_trigger, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_ROAM_FORCE_RSSI_TRIGGER_DEFAULT, |
| CFG_ROAM_FORCE_RSSI_TRIGGER_MIN, |
| CFG_ROAM_FORCE_RSSI_TRIGGER_MAX), |
| |
| REG_VARIABLE(CFG_NUM_VDEV_ENABLE_NAME, |
| WLAN_PARAM_HexInteger, |
| struct hdd_config, num_vdevs, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_NUM_VDEV_ENABLE_DEFAULT, |
| CFG_NUM_VDEV_ENABLE_MIN, |
| CFG_NUM_VDEV_ENABLE_MAX), |
| |
| REG_VARIABLE(CFG_CHANGE_CHANNEL_BANDWIDTH_NAME, |
| WLAN_PARAM_Integer, |
| struct hdd_config, enable_change_channel_bandwidth, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_CHANGE_CHANNEL_BANDWIDTH_DEFAULT, |
| CFG_CHANGE_CHANNEL_BANDWIDTH_MIN, |
| CFG_CHANGE_CHANNEL_BANDWIDTH_MAX), |
| #ifdef MWS_COEX |
| REG_VARIABLE(CFG_MWS_COEX_4G_QUICK_FTDM_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, mws_coex_4g_quick_tdm, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MWS_COEX_4G_QUICK_FTDM_DEFAULT, |
| CFG_MWS_COEX_4G_QUICK_FTDM_MIN, |
| CFG_MWS_COEX_4G_QUICK_FTDM_MAX), |
| REG_VARIABLE(CFG_MWS_COEX_5G_NR_PWR_LIMIT_NAME, WLAN_PARAM_HexInteger, |
| struct hdd_config, mws_coex_5g_nr_pwr_limit, |
| VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, |
| CFG_MWS_COEX_5G_NR_PWR_LIMIT_DEFAULT, |
| CFG_MWS_COEX_5G_NR_PWR_LIMIT_MIN, |
| CFG_MWS_COEX_5G_NR_PWR_LIMIT_MAX), |
| #endif |
| }; |
| |
| |
| /** |
| * get_next_line() - find and locate the new line pointer |
| * @str: pointer to string |
| * |
| * This function returns a pointer to the character after the occurrence |
| * of a new line character. It also modifies the original string by replacing |
| * the '\n' character with the null character. |
| * |
| * Return: the pointer to the character at new line, |
| * or NULL if no new line character was found |
| */ |
| static char *get_next_line(char *str) |
| { |
| char c; |
| |
| if (str == NULL || *str == '\0') |
| return NULL; |
| |
| c = *str; |
| while (c != '\n' && c != '\0' && c != 0xd) { |
| str = str + 1; |
| c = *str; |
| } |
| |
| if (c == '\0') |
| return NULL; |
| |
| *str = '\0'; |
| return str + 1; |
| } |
| |
| /** look for space. Ascii values to look are |
| * 0x09 == horizontal tab |
| * 0x0a == Newline ("\n") |
| * 0x0b == vertical tab |
| * 0x0c == Newpage or feed form. |
| * 0x0d == carriage return (CR or "\r") |
| * Null ('\0') should not considered as space. |
| */ |
| #define i_isspace(ch) (((ch) >= 0x09 && (ch) <= 0x0d) || (ch) == ' ') |
| |
| /** |
| * i_trim() - trims any leading and trailing white spaces |
| * @str: pointer to string |
| * |
| * Return: the pointer of the string |
| */ |
| static char *i_trim(char *str) |
| { |
| char *ptr; |
| |
| if (*str == '\0') |
| return str; |
| |
| /* Find the first non white-space */ |
| ptr = str; |
| while (i_isspace(*ptr)) |
| ptr++; |
| |
| if (*ptr == '\0') |
| return str; |
| |
| /* This is the new start of the string */ |
| str = ptr; |
| |
| /* Find the last non white-space */ |
| ptr += strlen(ptr) - 1; |
| |
| while (ptr != str && i_isspace(*ptr)) |
| ptr--; |
| |
| /* Null terminate the following character */ |
| ptr[1] = '\0'; |
| |
| return str; |
| } |
| |
| /* Maximum length of the confgiuration name and value */ |
| #define CFG_VALUE_MAX_LEN 256 |
| #define CFG_ENTRY_MAX_LEN (32+CFG_VALUE_MAX_LEN) |
| |
| /** |
| * hdd_cfg_get_config() - get the configuration content |
| * @reg_table: pointer to configuration table |
| * @cRegTableEntries: number of the configuration entries |
| * @ini_struct: pointer to the hdd config knob |
| * @hdd_ctx: pointer to hdd context |
| * @print_fn: print function pointer |
| * |
| * Return: none |
| */ |
| static void hdd_cfg_get_config(struct reg_table_entry *reg_table, |
| unsigned long cRegTableEntries, |
| uint8_t *ini_struct, struct hdd_context *hdd_ctx, |
| void (*print_fn)(const char *)) |
| { |
| unsigned int idx; |
| struct reg_table_entry *pRegEntry = reg_table; |
| uint32_t value; |
| char valueStr[CFG_VALUE_MAX_LEN]; |
| char config_str[CFG_ENTRY_MAX_LEN]; |
| char *fmt; |
| void *pField; |
| struct qdf_mac_addr *pMacAddr; |
| int curlen; |
| |
| for (idx = 0; idx < cRegTableEntries; idx++, pRegEntry++) { |
| pField = ini_struct + pRegEntry->VarOffset; |
| |
| if ((WLAN_PARAM_Integer == pRegEntry->RegType) || |
| (WLAN_PARAM_SignedInteger == pRegEntry->RegType) || |
| (WLAN_PARAM_HexInteger == pRegEntry->RegType)) { |
| value = 0; |
| |
| if ((pRegEntry->VarSize > sizeof(value)) || |
| (pRegEntry->VarSize == 0)) { |
| pr_warn("Invalid length of %s: %d", |
| pRegEntry->RegName, pRegEntry->VarSize); |
| continue; |
| } |
| |
| memcpy(&value, pField, pRegEntry->VarSize); |
| if (WLAN_PARAM_HexInteger == pRegEntry->RegType) { |
| fmt = "%x"; |
| } else if (WLAN_PARAM_SignedInteger == |
| pRegEntry->RegType) { |
| fmt = "%d"; |
| value = sign_extend32( |
| value, |
| pRegEntry->VarSize * 8 - 1); |
| } else { |
| fmt = "%u"; |
| } |
| snprintf(valueStr, CFG_VALUE_MAX_LEN, fmt, value); |
| } else if (WLAN_PARAM_String == pRegEntry->RegType) { |
| snprintf(valueStr, CFG_VALUE_MAX_LEN, "%s", |
| (char *)pField); |
| } else if (WLAN_PARAM_MacAddr == pRegEntry->RegType) { |
| pMacAddr = (struct qdf_mac_addr *) pField; |
| snprintf(valueStr, CFG_VALUE_MAX_LEN, |
| "%02x:%02x:%02x:%02x:%02x:%02x", |
| pMacAddr->bytes[0], |
| pMacAddr->bytes[1], |
| pMacAddr->bytes[2], |
| pMacAddr->bytes[3], |
| pMacAddr->bytes[4], pMacAddr->bytes[5]); |
| } else { |
| snprintf(valueStr, CFG_VALUE_MAX_LEN, "(unhandled)"); |
| } |
| curlen = scnprintf(config_str, CFG_ENTRY_MAX_LEN, |
| "%s=%s%s\n", |
| pRegEntry->RegName, |
| valueStr, |
| test_bit(idx, |
| (void *)&hdd_ctx->config-> |
| bExplicitCfg) ? "*" : ""); |
| (*print_fn)(config_str); |
| } |
| } |
| |
| /** struct hdd_cfg_entry - ini configuration entry |
| * @name: name of the entry |
| * @value: value of the entry |
| */ |
| struct hdd_cfg_entry { |
| char *name; |
| char *value; |
| }; |
| |
| /** |
| * find_cfg_item() - find the configuration item |
| * @iniTable: pointer to configuration table |
| * @entries: number fo the configuration entries |
| * @name: the interested configuration to find |
| * @value: the value to read back |
| * |
| * Return: QDF_STATUS_SUCCESS if the interested configuration is found, |
| * otherwise QDF_STATUS_E_FAILURE |
| */ |
| static QDF_STATUS find_cfg_item(struct hdd_cfg_entry *iniTable, |
| unsigned long entries, |
| char *name, char **value) |
| { |
| QDF_STATUS status = QDF_STATUS_E_FAILURE; |
| unsigned long i; |
| |
| for (i = 0; i < entries; i++) { |
| if (strcmp(iniTable[i].name, name) == 0) { |
| *value = iniTable[i].value; |
| hdd_debug("Found %s entry for Name=[%s] Value=[%s] ", |
| WLAN_INI_FILE, name, *value); |
| return QDF_STATUS_SUCCESS; |
| } |
| } |
| |
| return status; |
| } |
| |
| /** |
| * parse_hex_digit() - conversion to hex value |
| * @c: the character to convert |
| * |
| * Return: the hex value, otherwise 0 |
| */ |
| static int parse_hex_digit(char c) |
| { |
| if (c >= '0' && c <= '9') |
| return c - '0'; |
| if (c >= 'a' && c <= 'f') |
| return c - 'a' + 10; |
| if (c >= 'A' && c <= 'F') |
| return c - 'A' + 10; |
| |
| return 0; |
| } |
| |
| /** |
| * update_mac_from_string() - convert string to 6 bytes mac address |
| * @hdd_ctx: the pointer to hdd context |
| * @macTable: the macTable to carry the conversion |
| * @num: number of the interface |
| * |
| * 00AA00BB00CC -> 0x00 0xAA 0x00 0xBB 0x00 0xCC |
| * |
| * Return: QDF_STATUS |
| */ |
| static QDF_STATUS update_mac_from_string(struct hdd_context *hdd_ctx, |
| struct hdd_cfg_entry *macTable, |
| int num) |
| { |
| int i = 0, j = 0, res = 0; |
| char *candidate = NULL; |
| struct qdf_mac_addr macaddr[QDF_MAX_CONCURRENCY_PERSONA]; |
| QDF_STATUS status = QDF_STATUS_SUCCESS; |
| |
| memset(macaddr, 0, sizeof(macaddr)); |
| |
| for (i = 0; i < num; i++) { |
| candidate = macTable[i].value; |
| for (j = 0; j < QDF_MAC_ADDR_SIZE; j++) { |
| res = |
| hex2bin(&macaddr[i].bytes[j], &candidate[(j << 1)], |
| 1); |
| if (res < 0) |
| break; |
| } |
| if (res == 0 && !qdf_is_macaddr_zero(&macaddr[i])) { |
| qdf_mem_copy((uint8_t *) &hdd_ctx->config-> |
| intfMacAddr[i].bytes[0], |
| (uint8_t *) &macaddr[i].bytes[0], |
| QDF_MAC_ADDR_SIZE); |
| } else { |
| status = QDF_STATUS_E_FAILURE; |
| break; |
| } |
| } |
| return status; |
| } |
| |
| /** |
| * hdd_apply_cfg_ini() - apply the ini configuration file |
| * @hdd_ctx: the pointer to hdd context |
| * @iniTable: pointer to configuration table |
| * @entries: number fo the configuration entries |
| * It overwrites the MAC address if config file exist. |
| * |
| * Return: QDF_STATUS_SUCCESS if the ini configuration file is correctly parsed, |
| * otherwise QDF_STATUS_E_INVAL |
| */ |
| static QDF_STATUS hdd_apply_cfg_ini(struct hdd_context *hdd_ctx, |
| struct hdd_cfg_entry *iniTable, |
| unsigned long entries) |
| { |
| QDF_STATUS match_status = QDF_STATUS_E_FAILURE; |
| QDF_STATUS ret_status = QDF_STATUS_SUCCESS; |
| unsigned int idx; |
| void *pField; |
| char *value_str = NULL; |
| unsigned long len_value_str; |
| char *candidate; |
| uint32_t value; |
| int32_t svalue; |
| void *pStructBase = hdd_ctx->config; |
| struct reg_table_entry *pRegEntry = g_registry_table; |
| unsigned long cRegTableEntries = QDF_ARRAY_SIZE(g_registry_table); |
| uint32_t cbOutString; |
| int i; |
| int rv; |
| |
| BUILD_BUG_ON(MAX_CFG_INI_ITEMS < cRegTableEntries); |
| |
| for (idx = 0; idx < cRegTableEntries; idx++, pRegEntry++) { |
| /* Calculate the address of the destination field in the structure. */ |
| pField = ((uint8_t *) pStructBase) + pRegEntry->VarOffset; |
| |
| match_status = |
| find_cfg_item(iniTable, entries, pRegEntry->RegName, |
| &value_str); |
| |
| if ((match_status != QDF_STATUS_SUCCESS) |
| && (pRegEntry->Flags & VAR_FLAGS_REQUIRED)) { |
| /* If we could not read the cfg item and it is required, this is an error. */ |
| hdd_err("Failed to read required config parameter %s", pRegEntry->RegName); |
| ret_status = QDF_STATUS_E_FAILURE; |
| break; |
| } |
| |
| if ((WLAN_PARAM_Integer == pRegEntry->RegType) || |
| (WLAN_PARAM_HexInteger == pRegEntry->RegType)) { |
| /* If successfully read from the registry, use the value read. |
| * If not, use the default value. |
| */ |
| if (match_status == QDF_STATUS_SUCCESS |
| && (WLAN_PARAM_Integer == pRegEntry->RegType)) { |
| rv = kstrtou32(value_str, 10, &value); |
| if (rv < 0) { |
| hdd_warn("Reg Parameter %s invalid. Enforcing default", pRegEntry->RegName); |
| value = pRegEntry->VarDefault; |
| } |
| } else if (match_status == QDF_STATUS_SUCCESS |
| && (WLAN_PARAM_HexInteger == |
| pRegEntry->RegType)) { |
| rv = kstrtou32(value_str, 16, &value); |
| if (rv < 0) { |
| hdd_warn("Reg parameter %s invalid. Enforcing default", pRegEntry->RegName); |
| value = pRegEntry->VarDefault; |
| } |
| } else { |
| value = pRegEntry->VarDefault; |
| } |
| |
| /* Only if the parameter is set in the ini file, do the range check here */ |
| if (match_status == QDF_STATUS_SUCCESS && |
| pRegEntry->Flags & VAR_FLAGS_RANGE_CHECK) { |
| if (value > pRegEntry->VarMax) { |
| hdd_warn("Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Maximum", pRegEntry->RegName, |
| value, pRegEntry->VarMax); |
| value = pRegEntry->VarMax; |
| } |
| |
| if (value < pRegEntry->VarMin) { |
| hdd_warn("Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Minimum", pRegEntry->RegName, |
| value, pRegEntry->VarMin); |
| value = pRegEntry->VarMin; |
| } |
| } |
| /* Only if the parameter is set in the ini file, do the range check here */ |
| else if (match_status == QDF_STATUS_SUCCESS && |
| pRegEntry->Flags & |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT) { |
| if (value > pRegEntry->VarMax) { |
| hdd_warn("Reg Parameter %s > allowed Maximum [%u > %lu]. Enforcing Default: %lu", pRegEntry->RegName, |
| value, pRegEntry->VarMax, |
| pRegEntry->VarDefault); |
| value = pRegEntry->VarDefault; |
| } |
| |
| if (value < pRegEntry->VarMin) { |
| hdd_warn("Reg Parameter %s < allowed Minimum [%u < %lu]. Enforcing Default: %lu", pRegEntry->RegName, |
| value, pRegEntry->VarMin, |
| pRegEntry->VarDefault); |
| value = pRegEntry->VarDefault; |
| } |
| } |
| /* Move the variable into the output field. */ |
| memcpy(pField, &value, pRegEntry->VarSize); |
| } else if (WLAN_PARAM_SignedInteger == pRegEntry->RegType) { |
| /* If successfully read from the registry, use the value read. |
| * If not, use the default value. |
| */ |
| if (QDF_STATUS_SUCCESS == match_status) { |
| rv = kstrtos32(value_str, 10, &svalue); |
| if (rv < 0) { |
| hdd_warn("Reg Parameter %s invalid. Enforcing Default", pRegEntry->RegName); |
| svalue = |
| (int32_t) pRegEntry->VarDefault; |
| } |
| } else { |
| svalue = (int32_t) pRegEntry->VarDefault; |
| } |
| |
| /* Only if the parameter is set in the ini file, do the range check here */ |
| if (match_status == QDF_STATUS_SUCCESS && |
| pRegEntry->Flags & VAR_FLAGS_RANGE_CHECK) { |
| if (svalue > (int32_t) pRegEntry->VarMax) { |
| hdd_warn("Reg Parameter %s > allowed Maximum " |
| "[%d > %d]. Enforcing Maximum", pRegEntry->RegName, |
| svalue, (int)pRegEntry->VarMax); |
| svalue = (int32_t) pRegEntry->VarMax; |
| } |
| |
| if (svalue < (int32_t) pRegEntry->VarMin) { |
| hdd_warn("Reg Parameter %s < allowed Minimum " |
| "[%d < %d]. Enforcing Minimum", pRegEntry->RegName, |
| svalue, (int)pRegEntry->VarMin); |
| svalue = (int32_t) pRegEntry->VarMin; |
| } |
| } |
| /* Only if the parameter is set in the ini file, do the range check here */ |
| else if (match_status == QDF_STATUS_SUCCESS && |
| pRegEntry->Flags & |
| VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT) { |
| if (svalue > (int32_t) pRegEntry->VarMax) { |
| hdd_warn("Reg Parameter %s > allowed Maximum " |
| "[%d > %d]. Enforcing Default: %d", pRegEntry->RegName, |
| svalue, (int)pRegEntry->VarMax, |
| (int)pRegEntry->VarDefault); |
| svalue = |
| (int32_t) pRegEntry->VarDefault; |
| } |
| |
| if (svalue < (int32_t) pRegEntry->VarMin) { |
| hdd_warn("Reg Parameter %s < allowed Minimum " |
| "[%d < %d]. Enforcing Default: %d", pRegEntry->RegName, |
| svalue, (int)pRegEntry->VarMin, |
| (int)pRegEntry->VarDefault); |
| svalue = pRegEntry->VarDefault; |
| } |
| } |
| /* Move the variable into the output field. */ |
| memcpy(pField, &svalue, pRegEntry->VarSize); |
| } |
| /* Handle string parameters */ |
| else if (WLAN_PARAM_String == pRegEntry->RegType) { |
| #ifdef WLAN_CFG_DEBUG |
| hdd_debug("RegName = %s, VarOffset %u VarSize %u VarDefault %s", |
| pRegEntry->RegName, pRegEntry->VarOffset, |
| pRegEntry->VarSize, |
| (char *)pRegEntry->VarDefault); |
| #endif |
| |
| if (match_status == QDF_STATUS_SUCCESS) { |
| len_value_str = strlen(value_str); |
| |
| if (len_value_str > (pRegEntry->VarSize - 1)) { |
| hdd_err("Invalid Value=[%s] specified for Name=[%s] in %s", value_str, |
| pRegEntry->RegName, |
| WLAN_INI_FILE); |
| cbOutString = |
| QDF_MIN(strlen |
| ((char *)pRegEntry-> |
| VarDefault), |
| pRegEntry->VarSize - 1); |
| memcpy(pField, |
| (void *)(pRegEntry->VarDefault), |
| cbOutString); |
| ((uint8_t *) pField)[cbOutString] = |
| '\0'; |
| } else { |
| memcpy(pField, (void *)(value_str), |
| len_value_str); |
| ((uint8_t *) pField)[len_value_str] = |
| '\0'; |
| } |
| } else { |
| /* Failed to read the string parameter from the registry. Use the default. */ |
| cbOutString = |
| QDF_MIN(strlen((char *)pRegEntry->VarDefault), |
| pRegEntry->VarSize - 1); |
| memcpy(pField, (void *)(pRegEntry->VarDefault), |
| cbOutString); |
| ((uint8_t *) pField)[cbOutString] = '\0'; |
| } |
| } else if (WLAN_PARAM_MacAddr == pRegEntry->RegType) { |
| if (pRegEntry->VarSize != QDF_MAC_ADDR_SIZE) { |
| hdd_warn("Invalid VarSize %u for Name=[%s]", pRegEntry->VarSize, |
| pRegEntry->RegName); |
| continue; |
| } |
| candidate = (char *)pRegEntry->VarDefault; |
| if (match_status == QDF_STATUS_SUCCESS) { |
| len_value_str = strlen(value_str); |
| if (len_value_str != (QDF_MAC_ADDR_SIZE * 2)) { |
| hdd_err("Invalid MAC addr [%s] specified for Name=[%s] in %s", value_str, |
| pRegEntry->RegName, |
| WLAN_INI_FILE); |
| } else |
| candidate = value_str; |
| } |
| /* parse the string and store it in the byte array */ |
| for (i = 0; i < QDF_MAC_ADDR_SIZE; i++) { |
| ((char *)pField)[i] = |
| (char)(parse_hex_digit(candidate[i * 2]) * |
| 16 + |
| parse_hex_digit(candidate[i * 2 + 1])); |
| } |
| } else { |
| hdd_warn("Unknown param type for name[%s] in registry table", pRegEntry->RegName); |
| } |
| |
| /* did we successfully parse a cfg item for this parameter? */ |
| if ((match_status == QDF_STATUS_SUCCESS) && |
| (idx < MAX_CFG_INI_ITEMS)) { |
| set_bit(idx, (void *)&hdd_ctx->config->bExplicitCfg); |
| } |
| } |
| |
| return ret_status; |
| } |
| |
| /** |
| * hdd_execute_config_command() - executes an arbitrary configuration command |
| * @reg_table: the pointer to configuration table |
| * @tableSize: the size of the configuration table |
| * @ini_struct: pointer to the hdd config knob |
| * @hdd_ctx: the pointer to hdd context |
| * @command: the command to run |
| * |
| * Return: QDF_STATUS_SUCCESS if the command is found and able to execute, |
| * otherwise the appropriate QDF_STATUS will be returned |
| */ |
| static QDF_STATUS hdd_execute_config_command(struct reg_table_entry *reg_table, |
| unsigned long tableSize, |
| uint8_t *ini_struct, |
| struct hdd_context *hdd_ctx, |
| char *command) |
| { |
| struct reg_table_entry *pRegEntry; |
| char *clone; |
| char *pCmd; |
| void *pField; |
| char *name; |
| char *value_str; |
| uint32_t value; |
| int32_t svalue; |
| size_t len_value_str; |
| unsigned int idx; |
| unsigned int i; |
| QDF_STATUS vstatus; |
| int rv; |
| |
| /* assume failure until proven otherwise */ |
| vstatus = QDF_STATUS_E_FAILURE; |
| |
| /* clone the command so that we can manipulate it */ |
| clone = kstrdup(command, GFP_ATOMIC); |
| if (NULL == clone) |
| return vstatus; |
| |
| /* 'clone' will point to the beginning of the string so it can be freed |
| * 'pCmd' will be used to walk/parse the command |
| */ |
| pCmd = clone; |
| |
| /* get rid of leading/trailing whitespace */ |
| pCmd = i_trim(pCmd); |
| if ('\0' == *pCmd) { |
| /* only whitespace */ |
| hdd_err("invalid command, only whitespace:[%s]", command); |
| goto done; |
| } |
| /* parse the <name> = <value> */ |
| name = pCmd; |
| while (('=' != *pCmd) && ('\0' != *pCmd)) |
| pCmd++; |
| |
| if ('\0' == *pCmd) { |
| /* did not find '=' */ |
| hdd_err("invalid command, no '=':[%s]", command); |
| goto done; |
| } |
| /* replace '=' with NUL to terminate the <name> */ |
| *pCmd++ = '\0'; |
| name = i_trim(name); |
| if ('\0' == *name) { |
| /* did not find a name */ |
| hdd_err("invalid command, no <name>:[%s]", command); |
| goto done; |
| } |
| |
| value_str = i_trim(pCmd); |
| if ('\0' == *value_str) { |
| /* did not find a value */ |
| hdd_err("invalid command, no <value>:[%s]", command); |
| goto done; |
| } |
| /* lookup the configuration item */ |
| for (idx = 0; idx < tableSize; idx++) { |
| if (0 == strcmp(name, reg_table[idx].RegName)) { |
| /* found a match */ |
| break; |
| } |
| } |
| if (tableSize == idx) { |
| /* did not match the name */ |
| hdd_err("invalid command, unknown configuration item:[%s]", command); |
| goto done; |
| } |
| |
| pRegEntry = ®_table[idx]; |
| if (!(pRegEntry->Flags & VAR_FLAGS_DYNAMIC_CFG)) { |
| /* does not support dynamic configuration */ |
| hdd_err("Global_Registry_Table. %s does not support " |
| "dynamic configuration", name); |
| vstatus = QDF_STATUS_E_PERM; |
| goto done; |
| } |
| |
| pField = ini_struct + pRegEntry->VarOffset; |
| |
| switch (pRegEntry->RegType) { |
| case WLAN_PARAM_Integer: |
| rv = kstrtou32(value_str, 10, &value); |
| if (rv < 0) |
| goto done; |
| if (value < pRegEntry->VarMin) { |
| /* out of range */ |
| hdd_err("Invalid command, value %u < min value %lu", value, pRegEntry->VarMin); |
| goto done; |
| } |
| if (value > pRegEntry->VarMax) { |
| /* out of range */ |
| hdd_err("Invalid command, value %u > max value %lu", value, pRegEntry->VarMax); |
| goto done; |
| } |
| memcpy(pField, &value, pRegEntry->VarSize); |
| break; |
| |
| case WLAN_PARAM_HexInteger: |
| rv = kstrtou32(value_str, 16, &value); |
| if (rv < 0) |
| goto done; |
| if (value < pRegEntry->VarMin) { |
| /* out of range */ |
| hdd_err("Invalid command, value %x < min value %lx", value, pRegEntry->VarMin); |
| goto done; |
| } |
| if (value > pRegEntry->VarMax) { |
| /* out of range */ |
| hdd_err("Invalid command, value %x > max value %lx", value, pRegEntry->VarMax); |
| goto done; |
| } |
| memcpy(pField, &value, pRegEntry->VarSize); |
| break; |
| |
| case WLAN_PARAM_SignedInteger: |
| rv = kstrtos32(value_str, 10, &svalue); |
| if (rv < 0) |
| goto done; |
| if (svalue < (int32_t) pRegEntry->VarMin) { |
| /* out of range */ |
| hdd_err("Invalid command, value %d < min value %d", svalue, (int)pRegEntry->VarMin); |
| goto done; |
| } |
| if (svalue > (int32_t) pRegEntry->VarMax) { |
| /* out of range */ |
| hdd_err("Invalid command, value %d > max value %d", svalue, (int)pRegEntry->VarMax); |
| goto done; |
| } |
| memcpy(pField, &svalue, pRegEntry->VarSize); |
| break; |
| |
| case WLAN_PARAM_String: |
| len_value_str = strlen(value_str); |
| if (len_value_str > (pRegEntry->VarSize - 1)) { |
| /* too big */ |
| hdd_err("Invalid command, string [%s] length " |
| "%zu exceeds maximum length %u", value_str, |
| len_value_str, (pRegEntry->VarSize - 1)); |
| goto done; |
| } |
| /* copy string plus NUL */ |
| memcpy(pField, value_str, (len_value_str + 1)); |
| break; |
| |
| case WLAN_PARAM_MacAddr: |
| len_value_str = strlen(value_str); |
| if (len_value_str != (QDF_MAC_ADDR_SIZE * 2)) { |
| /* out of range */ |
| hdd_err("Invalid command, MAC address [%s] length " |
| "%zu is not expected length %u", value_str, |
| len_value_str, (QDF_MAC_ADDR_SIZE * 2)); |
| goto done; |
| } |
| /* parse the string and store it in the byte array */ |
| for (i = 0; i < QDF_MAC_ADDR_SIZE; i++) { |
| ((char *)pField)[i] = (char) |
| ((parse_hex_digit(value_str[(i * 2)]) * 16) + |
| parse_hex_digit(value_str[(i * 2) + 1])); |
| } |
| break; |
| |
| default: |
| goto done; |
| } |
| |
| /* if we get here, we had a successful modification */ |
| vstatus = QDF_STATUS_SUCCESS; |
| |
| /* config table has been modified, is there a notifier? */ |
| if (NULL != pRegEntry->pfnDynamicnotify) |
| (pRegEntry->pfnDynamicnotify)(hdd_ctx, pRegEntry->notifyId); |
| |
| /* note that this item was explicitly configured */ |
| if (idx < MAX_CFG_INI_ITEMS) |
| set_bit(idx, (void *)&hdd_ctx->config->bExplicitCfg); |
| |
| done: |
| kfree(clone); |
| return vstatus; |
| } |
| |
| /** |
| * hdd_set_power_save_offload_config() - set power save offload configuration |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * Return: none |
| */ |
| static void hdd_set_power_save_offload_config(struct hdd_context *hdd_ctx) |
| { |
| struct hdd_config *pConfig = hdd_ctx->config; |
| uint32_t listenInterval = 0; |
| |
| if (strcmp(pConfig->PowerUsageControl, "Min") == 0) |
| listenInterval = pConfig->nBmpsMinListenInterval; |
| else if (strcmp(pConfig->PowerUsageControl, "Max") == 0) |
| listenInterval = pConfig->nBmpsMaxListenInterval; |
| |
| /* |
| * Based on Mode Set the LI |
| * Otherwise default LI value of 1 will |
| * be taken |
| */ |
| if (listenInterval) { |
| /* |
| * setcfg for listenInterval. |
| * Make sure CFG is updated because PE reads this |
| * from CFG at the time of assoc or reassoc |
| */ |
| ucfg_mlme_set_sap_listen_interval(hdd_ctx->psoc, |
| listenInterval); |
| } |
| } |
| |
| /** |
| * hdd_update_mac_config() - update MAC address from cfg file |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * It overwrites the MAC address if config file exist. |
| * |
| * Return: QDF_STATUS_SUCCESS if the MAC address is found from cfg file |
| * and overwritten, otherwise QDF_STATUS_E_INVAL |
| */ |
| QDF_STATUS hdd_update_mac_config(struct hdd_context *hdd_ctx) |
| { |
| int status, i = 0; |
| const struct firmware *fw = NULL; |
| char *line, *buffer = NULL; |
| char *temp = NULL; |
| char *name, *value; |
| int max_mac_addr = QDF_MAX_CONCURRENCY_PERSONA; |
| struct hdd_cfg_entry macTable[QDF_MAX_CONCURRENCY_PERSONA]; |
| tSirMacAddr customMacAddr; |
| |
| QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; |
| |
| memset(macTable, 0, sizeof(macTable)); |
| status = request_firmware(&fw, WLAN_MAC_FILE, hdd_ctx->parent_dev); |
| if (status) { |
| /* |
| * request_firmware "fails" if the file is not found, which is a |
| * valid setup for us, so log using debug instead of error |
| */ |
| hdd_debug("request_firmware failed; status:%d", status); |
| return QDF_STATUS_E_FAILURE; |
| } |
| |
| if (!fw || !fw->data || !fw->size) { |
| hdd_alert("invalid firmware"); |
| qdf_status = QDF_STATUS_E_INVAL; |
| goto config_exit; |
| } |
| |
| hdd_debug("wlan_mac.bin size %zu", fw->size); |
| |
| temp = qdf_mem_malloc(fw->size + 1); |
| |
| if (temp == NULL) { |
| hdd_err("fail to alloc memory"); |
| qdf_status = QDF_STATUS_E_NOMEM; |
| goto config_exit; |
| } |
| buffer = temp; |
| qdf_mem_copy(buffer, fw->data, fw->size); |
| buffer[fw->size] = 0x0; |
| |
| /* data format: |
| * Intf0MacAddress=00AA00BB00CC |
| * Intf1MacAddress=00AA00BB00CD |
| * END |
| */ |
| while (buffer != NULL) { |
| line = get_next_line(buffer); |
| buffer = i_trim(buffer); |
| |
| if (strlen((char *)buffer) == 0 || *buffer == '#') { |
| buffer = line; |
| continue; |
| } |
| if (strncmp(buffer, "END", 3) == 0) |
| break; |
| |
| name = buffer; |
| buffer = strnchr(buffer, strlen(buffer), '='); |
| if (buffer) { |
| *buffer++ = '\0'; |
| i_trim(name); |
| if (strlen(name) != 0) { |
| buffer = i_trim(buffer); |
| if (strlen(buffer) == 12) { |
| value = buffer; |
| macTable[i].name = name; |
| macTable[i++].value = value; |
| if (i >= QDF_MAX_CONCURRENCY_PERSONA) |
| break; |
| } |
| } |
| } |
| buffer = line; |
| } |
| |
| if (i != 0 && i <= QDF_MAX_CONCURRENCY_PERSONA) { |
| hdd_debug("%d Mac addresses provided", i); |
| } else { |
| hdd_err("invalid number of Mac address provided, nMac = %d", i); |
| qdf_status = QDF_STATUS_E_INVAL; |
| goto config_exit; |
| } |
| |
| qdf_status = update_mac_from_string(hdd_ctx, &macTable[0], i); |
| if (QDF_IS_STATUS_ERROR(qdf_status)) { |
| hdd_err("Invalid MAC addresses provided"); |
| goto config_exit; |
| } |
| hdd_debug("Populating remaining %d Mac addresses", |
| max_mac_addr - i); |
| hdd_populate_random_mac_addr(hdd_ctx, max_mac_addr - i); |
| |
| qdf_mem_copy(&customMacAddr, |
| &hdd_ctx->config->intfMacAddr[0].bytes[0], |
| sizeof(tSirMacAddr)); |
| sme_set_custom_mac_addr(customMacAddr); |
| |
| config_exit: |
| qdf_mem_free(temp); |
| release_firmware(fw); |
| return qdf_status; |
| } |
| |
| /** |
| * hdd_disable_runtime_pm() - Override to disable runtime_pm. |
| * @cfg_ini: Handle to struct hdd_config |
| * |
| * Return: None |
| */ |
| #ifdef FEATURE_RUNTIME_PM |
| static void hdd_disable_runtime_pm(struct hdd_config *cfg_ini) |
| { |
| cfg_ini->runtime_pm = 0; |
| } |
| #else |
| static void hdd_disable_runtime_pm(struct hdd_config *cfg_ini) |
| { |
| } |
| #endif |
| |
| /** |
| * hdd_disable_auto_shutdown() - Override to disable auto_shutdown. |
| * @cfg_ini: Handle to struct hdd_config |
| * |
| * Return: None |
| */ |
| #ifdef FEATURE_WLAN_AUTO_SHUTDOWN |
| static void hdd_disable_auto_shutdown(struct hdd_config *cfg_ini) |
| { |
| cfg_ini->wlan_auto_shutdown = 0; |
| } |
| #else |
| static void hdd_disable_auto_shutdown(struct hdd_config *cfg_ini) |
| { |
| } |
| #endif |
| |
| /** |
| * hdd_override_all_ps() - overrides to disables all the powersave features. |
| * @hdd_ctx: Pointer to HDD context. |
| * Overrides below powersave ini configurations. |
| * gEnableImps=0 |
| * gEnableBmps=0 |
| * gRuntimePM=0 |
| * gWlanAutoShutdown = 0 |
| * gEnableSuspend=0 |
| * gEnablePowerSaveOffload=0 |
| * gEnableWoW=0 |
| * |
| * Return: None |
| */ |
| static void hdd_override_all_ps(struct hdd_context *hdd_ctx) |
| { |
| struct hdd_config *cfg_ini = hdd_ctx->config; |
| |
| cfg_ini->fIsImpsEnabled = 0; |
| cfg_ini->is_ps_enabled = 0; |
| hdd_disable_runtime_pm(cfg_ini); |
| hdd_disable_auto_shutdown(cfg_ini); |
| } |
| |
| /** |
| * hdd_parse_config_ini() - parse the ini configuration file |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * This function reads the qcom_cfg.ini file and |
| * parses each 'Name=Value' pair in the ini file |
| * |
| * Return: QDF_STATUS_SUCCESS if the qcom_cfg.ini is correctly read, |
| * otherwise QDF_STATUS_E_INVAL |
| */ |
| QDF_STATUS hdd_parse_config_ini(struct hdd_context *hdd_ctx) |
| { |
| int status = 0; |
| int i = 0; |
| int retry = 0; |
| /** Pointer for firmware image data */ |
| const struct firmware *fw = NULL; |
| char *buffer, *line, *pTemp = NULL; |
| size_t size; |
| char *name, *value; |
| struct hdd_cfg_entry *cfg_ini_table; |
| QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; |
| |
| size = MAX_CFG_INI_ITEMS * sizeof(*cfg_ini_table); |
| cfg_ini_table = qdf_mem_malloc(size); |
| |
| if (!cfg_ini_table) { |
| hdd_err("Failed to alloc %zu bytes for cfg_ini_table", size); |
| return QDF_STATUS_E_NOMEM; |
| } |
| |
| do { |
| if (status == -EAGAIN) |
| msleep(HDD_CFG_REQUEST_FIRMWARE_DELAY); |
| |
| status = request_firmware(&fw, WLAN_INI_FILE, |
| hdd_ctx->parent_dev); |
| |
| retry++; |
| } while ((retry < HDD_CFG_REQUEST_FIRMWARE_RETRIES) && |
| (status == -EAGAIN)); |
| |
| if (status) { |
| hdd_alert("request_firmware failed %d", status); |
| qdf_status = QDF_STATUS_E_FAILURE; |
| goto config_exit; |
| } |
| if (!fw || !fw->data || !fw->size) { |
| hdd_alert("%s download failed", WLAN_INI_FILE); |
| qdf_status = QDF_STATUS_E_FAILURE; |
| goto config_exit; |
| } |
| |
| hdd_debug("qcom_cfg.ini Size %zu", fw->size); |
| |
| buffer = (char *)qdf_mem_malloc(fw->size); |
| |
| if (NULL == buffer) { |
| hdd_err("qdf_mem_malloc failure"); |
| qdf_status = QDF_STATUS_E_NOMEM; |
| goto config_exit; |
| } |
| pTemp = buffer; |
| |
| qdf_mem_copy((void *)buffer, (void *)fw->data, fw->size); |
| size = fw->size; |
| |
| while (buffer != NULL) { |
| line = get_next_line(buffer); |
| buffer = i_trim(buffer); |
| |
| hdd_debug("%s: item", buffer); |
| |
| if (strlen((char *)buffer) == 0 || *buffer == '#') { |
| buffer = line; |
| continue; |
| } |
| |
| if (strncmp(buffer, "END", 3) == 0) |
| break; |
| |
| name = buffer; |
| while (*buffer != '=' && *buffer != '\0') |
| buffer++; |
| if (*buffer != '\0') { |
| *buffer++ = '\0'; |
| i_trim(name); |
| if (strlen(name) != 0) { |
| buffer = i_trim(buffer); |
| if (strlen(buffer) > 0) { |
| value = buffer; |
| while (*buffer != '\0') |
| buffer++; |
| *buffer = '\0'; |
| cfg_ini_table[i].name = name; |
| cfg_ini_table[i++].value = value; |
| if (i >= MAX_CFG_INI_ITEMS) { |
| hdd_err("Number of items in %s > %d", |
| WLAN_INI_FILE, |
| MAX_CFG_INI_ITEMS); |
| break; |
| } |
| } |
| } |
| } |
| buffer = line; |
| } |
| |
| /* Loop through the registry table and apply all these configs */ |
| qdf_status = hdd_apply_cfg_ini(hdd_ctx, cfg_ini_table, i); |
| if (QDF_GLOBAL_MONITOR_MODE == cds_get_conparam()) |
| hdd_override_all_ps(hdd_ctx); |
| |
| config_exit: |
| release_firmware(fw); |
| qdf_mem_free(pTemp); |
| qdf_mem_free(cfg_ini_table); |
| return qdf_status; |
| } |
| |
| /** |
| * hdd_cfg_xlate_to_csr_phy_mode() - convert PHY mode |
| * @dot11Mode: the mode to convert |
| * |
| * Convert the configuration PHY mode to CSR PHY mode |
| * |
| * Return: the CSR phy mode value |
| */ |
| eCsrPhyMode hdd_cfg_xlate_to_csr_phy_mode(enum hdd_dot11_mode dot11Mode) |
| { |
| if (cds_is_sub_20_mhz_enabled()) |
| return eCSR_DOT11_MODE_abg; |
| |
| switch (dot11Mode) { |
| case (eHDD_DOT11_MODE_abg): |
| return eCSR_DOT11_MODE_abg; |
| case (eHDD_DOT11_MODE_11b): |
| return eCSR_DOT11_MODE_11b; |
| case (eHDD_DOT11_MODE_11g): |
| return eCSR_DOT11_MODE_11g; |
| default: |
| case (eHDD_DOT11_MODE_11n): |
| return eCSR_DOT11_MODE_11n; |
| case (eHDD_DOT11_MODE_11g_ONLY): |
| return eCSR_DOT11_MODE_11g_ONLY; |
| case (eHDD_DOT11_MODE_11n_ONLY): |
| return eCSR_DOT11_MODE_11n_ONLY; |
| case (eHDD_DOT11_MODE_11b_ONLY): |
| return eCSR_DOT11_MODE_11b_ONLY; |
| case (eHDD_DOT11_MODE_11ac_ONLY): |
| return eCSR_DOT11_MODE_11ac_ONLY; |
| case (eHDD_DOT11_MODE_11ac): |
| return eCSR_DOT11_MODE_11ac; |
| case (eHDD_DOT11_MODE_AUTO): |
| return eCSR_DOT11_MODE_AUTO; |
| case (eHDD_DOT11_MODE_11a): |
| return eCSR_DOT11_MODE_11a; |
| case (eHDD_DOT11_MODE_11ax_ONLY): |
| return eCSR_DOT11_MODE_11ax_ONLY; |
| case (eHDD_DOT11_MODE_11ax): |
| return eCSR_DOT11_MODE_11ax; |
| } |
| |
| } |
| |
| /** |
| * hdd_set_idle_ps_config() - set idle power save configuration |
| * @hdd_ctx: the pointer to hdd context |
| * @val: the value to configure |
| * |
| * Return: QDF_STATUS_SUCCESS if command set correctly, |
| * otherwise the QDF_STATUS return from SME layer |
| */ |
| QDF_STATUS hdd_set_idle_ps_config(struct hdd_context *hdd_ctx, bool val) |
| { |
| QDF_STATUS status; |
| |
| hdd_debug("Enter Val %d", val); |
| |
| if (hdd_ctx->imps_enabled == val) { |
| hdd_info("Already in the requested power state:%d", val); |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| status = sme_set_idle_powersave_config(val); |
| if (QDF_STATUS_SUCCESS != status) { |
| hdd_err("Fail to Set Idle PS Config val %d", val); |
| return status; |
| } |
| |
| hdd_ctx->imps_enabled = val; |
| |
| return status; |
| } |
| |
| /** |
| * hdd_set_fine_time_meas_cap() - set fine timing measurement capability |
| * @hdd_ctx: HDD context |
| * |
| * This function is used to pass fine timing measurement capability coming |
| * from INI to SME. This function make sure that configure INI is supported |
| * by the device. Use bit mask to mask out the unsupported capabilities. |
| * |
| * Return: None |
| */ |
| static void hdd_set_fine_time_meas_cap(struct hdd_context *hdd_ctx) |
| { |
| struct hdd_config *config = hdd_ctx->config; |
| uint32_t capability = config->fine_time_meas_cap; |
| |
| /* Make sure only supported capabilities are enabled in INI */ |
| capability &= CFG_FINE_TIME_MEAS_CAPABILITY_MAX; |
| ucfg_wifi_pos_set_ftm_cap(hdd_ctx->psoc, capability); |
| |
| hdd_debug("fine time meas capability - INI: %04x Enabled: %04x", |
| config->fine_time_meas_cap, |
| capability); |
| } |
| |
| /** |
| * hdd_convert_string_to_u8_array() - used to convert string into u8 array |
| * @str: String to be converted |
| * @hex_array: Array where converted value is stored |
| * @len: Length of the populated array |
| * @array_max_len: Maximum length of the array |
| * @to_hex: true, if conversion required for hex string |
| * |
| * This API is called to convert string (each byte separated by |
| * a comma) into an u8 array |
| * |
| * Return: QDF_STATUS |
| */ |
| |
| static QDF_STATUS hdd_convert_string_to_array(char *str, uint8_t *array, |
| uint8_t *len, uint16_t array_max_len, bool to_hex) |
| { |
| char *format, *s = str; |
| |
| if (str == NULL || array == NULL || len == NULL) |
| return QDF_STATUS_E_INVAL; |
| |
| format = (to_hex) ? "%02x" : "%d"; |
| |
| *len = 0; |
| while ((s != NULL) && (*len < array_max_len)) { |
| int val; |
| /* Increment length only if sscanf successfully extracted |
| * one element. Any other return value means error. |
| * Ignore it. |
| */ |
| if (sscanf(s, format, &val) == 1) { |
| array[*len] = (uint8_t) val; |
| *len += 1; |
| } |
| |
| s = strpbrk(s, ","); |
| if (s) |
| s++; |
| } |
| |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| /** |
| * hdd_hex_string_to_u8_array() - used to convert hex string into u8 array |
| * @str: Hexadecimal string |
| * @hex_array: Array where converted value is stored |
| * @len: Length of the populated array |
| * @array_max_len: Maximum length of the array |
| * |
| * This API is called to convert hexadecimal string (each byte separated by |
| * a comma) into an u8 array |
| * |
| * Return: QDF_STATUS |
| */ |
| static QDF_STATUS hdd_hex_string_to_u8_array(char *str, uint8_t *hex_array, |
| uint8_t *len, |
| uint8_t array_max_len) |
| { |
| return hdd_convert_string_to_array(str, hex_array, len, |
| array_max_len, true); |
| } |
| |
| QDF_STATUS hdd_string_to_u8_array(char *str, uint8_t *array, |
| uint8_t *len, uint16_t array_max_len) |
| { |
| return hdd_convert_string_to_array(str, array, len, |
| array_max_len, false); |
| } |
| |
| /** |
| * hdd_hex_string_to_u16_array() - convert a hex string to a uint16 array |
| * @str: input string |
| * @int_array: pointer to input array of type uint16 |
| * @len: pointer to number of elements which the function adds to the array |
| * @int_array_max_len: maximum number of elements in input uint16 array |
| * |
| * This function is used to convert a space separated hex string to an array of |
| * uint16_t. For example, an input string str = "a b c d" would be converted to |
| * a unint16 array, int_array = {0xa, 0xb, 0xc, 0xd}, *len = 4. |
| * This assumes that input value int_array_max_len >= 4. |
| * |
| * Return: QDF_STATUS_SUCCESS - if the conversion is successful |
| * non zero value - if the conversion is a failure |
| */ |
| QDF_STATUS hdd_hex_string_to_u16_array(char *str, |
| uint16_t *int_array, uint8_t *len, uint8_t int_array_max_len) |
| { |
| char *s = str; |
| uint32_t val = 0; |
| |
| if (str == NULL || int_array == NULL || len == NULL) |
| return QDF_STATUS_E_INVAL; |
| |
| hdd_debug("str %pK intArray %pK intArrayMaxLen %d", |
| s, int_array, int_array_max_len); |
| |
| *len = 0; |
| |
| while ((s != NULL) && (*len < int_array_max_len)) { |
| /* |
| * Increment length only if sscanf successfully extracted one |
| * element. Any other return value means error. Ignore it. |
| */ |
| if (sscanf(s, "%x", &val) == 1) { |
| int_array[*len] = (uint16_t) val; |
| hdd_debug("s %pK val %x intArray[%d]=0x%x", |
| s, val, *len, int_array[*len]); |
| *len += 1; |
| } |
| s = strpbrk(s, " "); |
| if (s) |
| s++; |
| } |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| /** |
| * hdd_update_config_cfg() - API to update INI setting based on hw/fw caps |
| * @hdd_ctx: pointer to hdd_ctx |
| * |
| * This API reads the cfg file which is updated with hardware/firmware |
| * capabilities and intersect it with INI setting provided by user. After |
| * taking intersection it adjust cfg it self. For example, if user has enabled |
| * RX LDPC through INI but hardware/firmware doesn't support it then disable |
| * it in CFG file here. |
| * |
| * Return: true or false based on outcome. |
| */ |
| bool hdd_update_config_cfg(struct hdd_context *hdd_ctx) |
| { |
| bool status = true; |
| struct hdd_config *config = hdd_ctx->config; |
| mac_handle_t mac_handle; |
| uint8_t mcc_adaptive_sch = 0; |
| |
| /* |
| * During the initialization both 2G and 5G capabilities should be same. |
| * So read 5G HT capablity and update 2G and 5G capablities. |
| */ |
| |
| if (0 != hdd_update_he_cap_in_cfg(hdd_ctx)) { |
| status = false; |
| hdd_err("Couldn't set HE CAP in cfg"); |
| } |
| |
| mac_handle = hdd_ctx->mac_handle; |
| |
| if (sme_cfg_set_int(mac_handle, |
| WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME, |
| config->nPassiveMaxChnTime) |
| == QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Couldn't pass on WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME to CFG"); |
| } |
| |
| if (sme_cfg_set_int(mac_handle, |
| WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT, |
| config->wow_data_inactivity_timeout) == QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Fail to pass WNI_CFG_PS_WOW_DATA_INACTIVITY_TO CFG"); |
| } |
| |
| if (sme_cfg_set_int(mac_handle, WNI_CFG_11D_ENABLED, |
| config->Is11dSupportEnabled) == QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Couldn't pass on WNI_CFG_11D_ENABLED to CFG"); |
| } |
| |
| if (sme_cfg_set_int(mac_handle, WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP, |
| config->disableLDPCWithTxbfAP) == QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Couldn't pass on WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP to CFG"); |
| } |
| |
| if (sme_cfg_set_int(mac_handle, WNI_CFG_IBSS_ATIM_WIN_SIZE, |
| config->ibssATIMWinSize) == |
| QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Couldn't pass on WNI_CFG_IBSS_ATIM_WIN_SIZE to CFG"); |
| } |
| |
| ucfg_policy_mgr_get_mcc_adaptive_sch(hdd_ctx->psoc, |
| &mcc_adaptive_sch); |
| if (sme_cfg_set_int(mac_handle, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, |
| mcc_adaptive_sch) == QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Couldn't pass on WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED to CFG"); |
| } |
| return status; |
| } |
| |
| /** |
| * hdd_set_policy_mgr_user_cfg() -initializes the policy manager |
| * configuration parameters |
| * |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * Return: QDF_STATUS_SUCCESS if configuration is correctly applied, |
| * otherwise the appropriate QDF_STATUS would be returned |
| */ |
| QDF_STATUS hdd_set_policy_mgr_user_cfg(struct hdd_context *hdd_ctx) |
| { |
| QDF_STATUS status; |
| struct policy_mgr_user_cfg *user_cfg; |
| |
| user_cfg = qdf_mem_malloc(sizeof(*user_cfg)); |
| if (NULL == user_cfg) { |
| hdd_err("unable to allocate user_cfg"); |
| return QDF_STATUS_E_NOMEM; |
| } |
| |
| status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, |
| &user_cfg->enable2x2); |
| if (!QDF_IS_STATUS_SUCCESS(status)) |
| hdd_err("unable to get vht_enable2x2"); |
| |
| user_cfg->sub_20_mhz_enabled = cds_is_sub_20_mhz_enabled(); |
| user_cfg->is_sta_sap_scc_allowed_on_dfs_chan = |
| hdd_ctx->config->sta_sap_scc_on_dfs_chan; |
| user_cfg->sta_sap_scc_on_lte_coex_chan = |
| hdd_ctx->config->sta_sap_scc_on_lte_coex_chan; |
| status = policy_mgr_set_user_cfg(hdd_ctx->psoc, user_cfg); |
| qdf_mem_free(user_cfg); |
| |
| return status; |
| } |
| |
| eCsrRoamWmmUserModeType hdd_to_csr_wmm_mode(uint8_t mode) |
| { |
| switch (mode) { |
| case HDD_WMM_USER_MODE_QBSS_ONLY: |
| return eCsrRoamWmmQbssOnly; |
| case HDD_WMM_USER_MODE_NO_QOS: |
| return eCsrRoamWmmNoQos; |
| case HDD_WMM_USER_MODE_AUTO: |
| default: |
| return eCsrRoamWmmAuto; |
| } |
| } |
| |
| /** |
| * hdd_update_11k_offload_params() - initializes the 11k offload related params |
| * |
| * @config: pointer to hdd_config structure |
| * @csr_config: pointer to the csr config structure |
| * |
| * Return: None |
| */ |
| static |
| void hdd_update_11k_offload_params(struct hdd_config *config, |
| tCsrConfigParam *csr_config) |
| { |
| csr_config->offload_11k_enable_bitmask = |
| config->offload_11k_enable_bitmask; |
| csr_config->neighbor_report_offload.params_bitmask = |
| config->neighbor_report_offload_params_bitmask; |
| csr_config->neighbor_report_offload.time_offset = |
| config->neighbor_report_offload_time_offset; |
| csr_config->neighbor_report_offload.low_rssi_offset = |
| config->neighbor_report_offload_low_rssi_offset; |
| csr_config->neighbor_report_offload.bmiss_count_trigger = |
| config->neighbor_report_offload_bmiss_count_trigger; |
| csr_config->neighbor_report_offload.per_threshold_offset = |
| config->neighbor_report_offload_per_threshold_offset; |
| csr_config->neighbor_report_offload.neighbor_report_cache_timeout = |
| config->neighbor_report_offload_cache_timeout; |
| csr_config->neighbor_report_offload.max_neighbor_report_req_cap = |
| config->neighbor_report_offload_max_req_cap; |
| } |
| |
| static |
| QDF_STATUS hdd_set_sme_cfgs_related_to_plcy_mgr(struct hdd_context *hdd_ctx, |
| tSmeConfigParams *sme_cfg) |
| { |
| uint8_t mcc_to_scc_switch = 0; |
| uint8_t conc_rule1 = 0, conc_rule2 = 0, sta_cxn_5g = 0; |
| |
| if (QDF_STATUS_SUCCESS != |
| ucfg_policy_mgr_get_mcc_scc_switch(hdd_ctx->psoc, |
| &mcc_to_scc_switch)) { |
| hdd_err("can't get mcc to scc switch"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| sme_cfg->csrConfig.cc_switch_mode = mcc_to_scc_switch; |
| |
| if (QDF_STATUS_SUCCESS != |
| ucfg_policy_mgr_get_conc_rule1(hdd_ctx->psoc, |
| &conc_rule1)) { |
| hdd_err("can't get conc rule1"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| sme_cfg->csrConfig.conc_custom_rule1 = conc_rule1; |
| |
| if (QDF_STATUS_SUCCESS != |
| ucfg_policy_mgr_get_conc_rule2(hdd_ctx->psoc, |
| &conc_rule2)) { |
| hdd_err("can't get conc rule2"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| sme_cfg->csrConfig.conc_custom_rule2 = conc_rule2; |
| |
| if (QDF_STATUS_SUCCESS != |
| ucfg_policy_mgr_get_sta_cxn_5g_band(hdd_ctx->psoc, |
| &sta_cxn_5g)) { |
| hdd_err("can't get conc rule2"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| sme_cfg->csrConfig.is_sta_connection_in_5gz_enabled = sta_cxn_5g; |
| |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| /** |
| * hdd_set_sme_config() -initializes the sme configuration parameters |
| * |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * Return: QDF_STATUS_SUCCESS if configuration is correctly applied, |
| * otherwise the appropriate QDF_STATUS would be returned |
| */ |
| QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) |
| { |
| QDF_STATUS status = QDF_STATUS_SUCCESS; |
| tSmeConfigParams *smeConfig; |
| uint8_t rrm_capab_len; |
| mac_handle_t mac_handle = hdd_ctx->mac_handle; |
| uint8_t wmm_mode = 0; |
| bool b80211e_is_enabled; |
| |
| struct hdd_config *pConfig = hdd_ctx->config; |
| |
| smeConfig = qdf_mem_malloc(sizeof(*smeConfig)); |
| if (NULL == smeConfig) { |
| hdd_err("unable to allocate smeConfig"); |
| return QDF_STATUS_E_NOMEM; |
| } |
| |
| /* Config params obtained from the registry |
| * To Do: set regulatory information here |
| */ |
| smeConfig->csrConfig.shortSlotTime = pConfig->ShortSlotTimeEnabled; |
| smeConfig->csrConfig.Is11dSupportEnabled = pConfig->Is11dSupportEnabled; |
| |
| smeConfig->csrConfig.phyMode = |
| hdd_cfg_xlate_to_csr_phy_mode(pConfig->dot11Mode); |
| |
| if (pConfig->dot11Mode == eHDD_DOT11_MODE_abg || |
| pConfig->dot11Mode == eHDD_DOT11_MODE_11b || |
| pConfig->dot11Mode == eHDD_DOT11_MODE_11g || |
| pConfig->dot11Mode == eHDD_DOT11_MODE_11b_ONLY || |
| pConfig->dot11Mode == eHDD_DOT11_MODE_11g_ONLY) { |
| smeConfig->csrConfig.channelBondingMode24GHz = 0; |
| smeConfig->csrConfig.channelBondingMode5GHz = 0; |
| } else { |
| smeConfig->csrConfig.channelBondingMode24GHz = |
| pConfig->nChannelBondingMode24GHz; |
| smeConfig->csrConfig.channelBondingMode5GHz = |
| pConfig->nChannelBondingMode5GHz; |
| } |
| smeConfig->csrConfig.nScanResultAgeCount = pConfig->ScanResultAgeCount; |
| smeConfig->csrConfig.AdHocChannel24 = pConfig->OperatingChannel; |
| smeConfig->csrConfig.fSupplicantCountryCodeHasPriority = |
| pConfig->fSupplicantCountryCodeHasPriority; |
| smeConfig->csrConfig.bCatRssiOffset = pConfig->nRssiCatGap; |
| smeConfig->csrConfig.vccRssiThreshold = pConfig->nVccRssiTrigger; |
| smeConfig->csrConfig.vccUlMacLossThreshold = |
| pConfig->nVccUlMacLossThreshold; |
| smeConfig->csrConfig.nInitialDwellTime = pConfig->nInitialDwellTime; |
| smeConfig->csrConfig.initial_scan_no_dfs_chnl = |
| pConfig->initial_scan_no_dfs_chnl; |
| smeConfig->csrConfig.nActiveMaxChnTime = pConfig->nActiveMaxChnTime; |
| smeConfig->csrConfig.nPassiveMaxChnTime = pConfig->nPassiveMaxChnTime; |
| smeConfig->csrConfig.nActiveMaxChnTimeConc = |
| pConfig->nActiveMaxChnTimeConc; |
| smeConfig->csrConfig.nActiveMinChnTimeConc = |
| pConfig->nActiveMinChnTimeConc; |
| smeConfig->csrConfig.nPassiveMaxChnTimeConc = |
| pConfig->nPassiveMaxChnTimeConc; |
| smeConfig->csrConfig.nPassiveMinChnTimeConc = |
| pConfig->nPassiveMinChnTimeConc; |
| smeConfig->csrConfig.nRestTimeConc = pConfig->nRestTimeConc; |
| smeConfig->csrConfig.min_rest_time_conc = pConfig->min_rest_time_conc; |
| smeConfig->csrConfig.idle_time_conc = pConfig->idle_time_conc; |
| |
| status = ucfg_mlme_get_80211e_is_enabled(hdd_ctx->psoc, |
| &b80211e_is_enabled); |
| if (!QDF_IS_STATUS_SUCCESS(status)) { |
| hdd_err("Get b80211e_is_enabled failed"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| smeConfig->csrConfig.Is11eSupportEnabled = b80211e_is_enabled; |
| |
| status = ucfg_mlme_get_wmm_mode(hdd_ctx->psoc, &wmm_mode); |
| if (!QDF_IS_STATUS_SUCCESS(status)) { |
| hdd_err("Get wmm_mode failed"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| smeConfig->csrConfig.WMMSupportMode = hdd_to_csr_wmm_mode(wmm_mode); |
| |
| hdd_debug("%s bWmmIsEnabled=%d 802_11e_enabled=%d dot11Mode=%d", |
| __func__, wmm_mode, b80211e_is_enabled, |
| pConfig->dot11Mode); |
| |
| smeConfig->rrmConfig.rrm_enabled = pConfig->fRrmEnable; |
| smeConfig->rrmConfig.max_randn_interval = pConfig->nRrmRandnIntvl; |
| hdd_hex_string_to_u8_array(pConfig->rm_capability, |
| smeConfig->rrmConfig.rm_capability, &rrm_capab_len, |
| DOT11F_IE_RRMENABLEDCAP_MAX_LEN); |
| /* Remaining config params not obtained from registry |
| * On RF EVB beacon using channel 1. |
| */ |
| /* This param cannot be configured from INI */ |
| smeConfig->csrConfig.send_smps_action = true; |
| smeConfig->csrConfig.AdHocChannel5G = pConfig->AdHocChannel5G; |
| smeConfig->csrConfig.AdHocChannel24 = pConfig->AdHocChannel24G; |
| smeConfig->csrConfig.ProprietaryRatesEnabled = 0; |
| smeConfig->csrConfig.HeartbeatThresh50 = 40; |
| smeConfig->csrConfig.Is11hSupportEnabled = pConfig->Is11hSupportEnabled; |
| smeConfig->csrConfig.nTxPowerCap = pConfig->nTxPowerCap; |
| smeConfig->csrConfig.allow_tpc_from_ap = pConfig->allow_tpc_from_ap; |
| smeConfig->csrConfig.fEnableBypass11d = pConfig->enableBypass11d; |
| smeConfig->csrConfig.fEnableDFSChnlScan = pConfig->enableDFSChnlScan; |
| smeConfig->csrConfig.nRoamPrefer5GHz = pConfig->nRoamPrefer5GHz; |
| smeConfig->csrConfig.nRoamIntraBand = pConfig->nRoamIntraBand; |
| smeConfig->csrConfig.nProbes = pConfig->nProbes; |
| |
| smeConfig->csrConfig.nRoamScanHomeAwayTime = |
| pConfig->nRoamScanHomeAwayTime; |
| smeConfig->csrConfig.fFirstScanOnly2GChnl = |
| pConfig->enableFirstScan2GOnly; |
| |
| smeConfig->csrConfig.Csr11dinfo.Channels.numChannels = 0; |
| |
| hdd_set_power_save_offload_config(hdd_ctx); |
| |
| smeConfig->csrConfig.isFastRoamIniFeatureEnabled = |
| pConfig->isFastRoamIniFeatureEnabled; |
| smeConfig->csrConfig.csr_mawc_config.mawc_enabled = |
| pConfig->MAWCEnabled; |
| |
| #ifdef FEATURE_WLAN_ESE |
| smeConfig->csrConfig.isEseIniFeatureEnabled = |
| pConfig->isEseIniFeatureEnabled; |
| if (pConfig->isEseIniFeatureEnabled) |
| pConfig->isFastTransitionEnabled = true; |
| #endif |
| smeConfig->csrConfig.isFastTransitionEnabled = |
| pConfig->isFastTransitionEnabled; |
| smeConfig->csrConfig.RoamRssiDiff = pConfig->RoamRssiDiff; |
| smeConfig->csrConfig.isWESModeEnabled = pConfig->isWESModeEnabled; |
| smeConfig->csrConfig.isRoamOffloadScanEnabled = |
| pConfig->isRoamOffloadScanEnabled; |
| smeConfig->csrConfig.bFastRoamInConIniFeatureEnabled = |
| pConfig->bFastRoamInConIniFeatureEnabled; |
| |
| if (0 == smeConfig->csrConfig.isRoamOffloadScanEnabled) { |
| /* Disable roaming in concurrency if roam scan |
| * offload is disabled |
| */ |
| smeConfig->csrConfig.bFastRoamInConIniFeatureEnabled = 0; |
| } |
| smeConfig->csrConfig.neighborRoamConfig.nNeighborLookupRssiThreshold = |
| pConfig->nNeighborLookupRssiThreshold; |
| smeConfig->csrConfig.neighborRoamConfig.rssi_thresh_offset_5g = |
| pConfig->rssi_thresh_offset_5g; |
| smeConfig->csrConfig.neighborRoamConfig.delay_before_vdev_stop = |
| pConfig->delay_before_vdev_stop; |
| smeConfig->csrConfig.neighborRoamConfig.nOpportunisticThresholdDiff = |
| pConfig->nOpportunisticThresholdDiff; |
| smeConfig->csrConfig.neighborRoamConfig.nRoamRescanRssiDiff = |
| pConfig->nRoamRescanRssiDiff; |
| smeConfig->csrConfig.neighborRoamConfig.nNeighborScanMaxChanTime = |
| pConfig->nNeighborScanMaxChanTime; |
| smeConfig->csrConfig.neighborRoamConfig.nNeighborScanMinChanTime = |
| pConfig->nNeighborScanMinChanTime; |
| smeConfig->csrConfig.neighborRoamConfig.nNeighborScanTimerPeriod = |
| pConfig->nNeighborScanPeriod; |
| smeConfig->csrConfig.neighborRoamConfig. |
| neighbor_scan_min_timer_period = |
| pConfig->neighbor_scan_min_period; |
| smeConfig->csrConfig.neighborRoamConfig.nNeighborResultsRefreshPeriod = |
| pConfig->nNeighborResultsRefreshPeriod; |
| smeConfig->csrConfig.neighborRoamConfig.nEmptyScanRefreshPeriod = |
| pConfig->nEmptyScanRefreshPeriod; |
| hdd_string_to_u8_array(pConfig->neighborScanChanList, |
| smeConfig->csrConfig.neighborRoamConfig. |
| neighborScanChanList.channelList, |
| &smeConfig->csrConfig.neighborRoamConfig. |
| neighborScanChanList.numChannels, |
| WNI_CFG_VALID_CHANNEL_LIST_LEN); |
| smeConfig->csrConfig.neighborRoamConfig.nRoamBmissFirstBcnt = |
| pConfig->nRoamBmissFirstBcnt; |
| smeConfig->csrConfig.neighborRoamConfig.nRoamBmissFinalBcnt = |
| pConfig->nRoamBmissFinalBcnt; |
| smeConfig->csrConfig.neighborRoamConfig.nRoamBeaconRssiWeight = |
| pConfig->nRoamBeaconRssiWeight; |
| smeConfig->csrConfig.neighborRoamConfig.nhi_rssi_scan_max_count = |
| pConfig->nhi_rssi_scan_max_count; |
| smeConfig->csrConfig.neighborRoamConfig.nhi_rssi_scan_rssi_delta = |
| pConfig->nhi_rssi_scan_rssi_delta; |
| smeConfig->csrConfig.neighborRoamConfig.nhi_rssi_scan_delay = |
| pConfig->nhi_rssi_scan_delay; |
| smeConfig->csrConfig.neighborRoamConfig.nhi_rssi_scan_rssi_ub = |
| pConfig->nhi_rssi_scan_rssi_ub; |
| smeConfig->csrConfig.addTSWhenACMIsOff = pConfig->AddTSWhenACMIsOff; |
| smeConfig->csrConfig.allowDFSChannelRoam = pConfig->allowDFSChannelRoam; |
| |
| /* Enable/Disable MCC */ |
| smeConfig->csrConfig.fEnableMCCMode = pConfig->enableMCC; |
| smeConfig->csrConfig.mcc_rts_cts_prot_enable = |
| pConfig->mcc_rts_cts_prot_enable; |
| smeConfig->csrConfig.mcc_bcast_prob_resp_enable = |
| pConfig->mcc_bcast_prob_resp_enable; |
| smeConfig->csrConfig.fAllowMCCGODiffBI = pConfig->allowMCCGODiffBI; |
| |
| /* Scan Results Aging Time out value */ |
| smeConfig->csrConfig.scanCfgAgingTime = pConfig->scanAgingTimeout; |
| |
| smeConfig->csrConfig.enable_tx_ldpc = pConfig->enable_tx_ldpc; |
| smeConfig->csrConfig.enable_rx_ldpc = pConfig->enable_rx_ldpc; |
| |
| smeConfig->csrConfig.isCoalesingInIBSSAllowed = |
| hdd_ctx->config->isCoalesingInIBSSAllowed; |
| /* update SSR config */ |
| sme_update_enable_ssr(mac_handle, hdd_ctx->config->enableSSR); |
| |
| /* Update maximum interfaces information */ |
| smeConfig->csrConfig.max_intf_count = hdd_ctx->max_intf_count; |
| |
| smeConfig->csrConfig.f_sta_miracast_mcc_rest_time_val = |
| hdd_ctx->config->sta_miracast_mcc_rest_time_val; |
| |
| #ifdef FEATURE_AP_MCC_CH_AVOIDANCE |
| smeConfig->csrConfig.sap_channel_avoidance = |
| hdd_ctx->config->sap_channel_avoidance; |
| #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ |
| |
| smeConfig->csrConfig.f_prefer_non_dfs_on_radar = |
| hdd_ctx->config->prefer_non_dfs_on_radar; |
| |
| smeConfig->csrConfig.is_ps_enabled = hdd_ctx->config->is_ps_enabled; |
| smeConfig->csrConfig.auto_bmps_timer_val = |
| hdd_ctx->config->auto_bmps_timer_val; |
| hdd_set_fine_time_meas_cap(hdd_ctx); |
| |
| cds_set_multicast_logging(hdd_ctx->config->multicast_host_fw_msgs); |
| |
| smeConfig->csrConfig.max_scan_count = |
| hdd_ctx->config->max_scan_count; |
| |
| smeConfig->csrConfig.ho_delay_for_rx = |
| hdd_ctx->config->ho_delay_for_rx; |
| smeConfig->csrConfig.min_delay_btw_roam_scans = |
| hdd_ctx->config->min_delay_btw_roam_scans; |
| smeConfig->csrConfig.roam_trigger_reason_bitmask = |
| hdd_ctx->config->roam_trigger_reason_bitmask; |
| smeConfig->csrConfig.scan_adaptive_dwell_mode = |
| hdd_ctx->config->scan_adaptive_dwell_mode; |
| smeConfig->csrConfig.scan_adaptive_dwell_mode_nc = |
| hdd_ctx->config->scan_adaptive_dwell_mode_nc; |
| smeConfig->csrConfig.enable_ftopen = |
| hdd_ctx->config->enable_ftopen; |
| smeConfig->csrConfig.roam_force_rssi_trigger = |
| hdd_ctx->config->roam_force_rssi_trigger; |
| |
| smeConfig->csrConfig.sta_roam_policy_params.dfs_mode = |
| CSR_STA_ROAM_POLICY_DFS_ENABLED; |
| smeConfig->csrConfig.sta_roam_policy_params.skip_unsafe_channels = 0; |
| |
| smeConfig->snr_monitor_enabled = hdd_ctx->config->fEnableSNRMonitoring; |
| |
| hdd_he_set_sme_config(smeConfig, pConfig); |
| |
| smeConfig->csrConfig.wlm_latency_enable = |
| hdd_ctx->config->wlm_latency_enable; |
| smeConfig->csrConfig.wlm_latency_level = |
| hdd_ctx->config->wlm_latency_level; |
| smeConfig->csrConfig.wlm_latency_flags[0] = |
| hdd_ctx->config->wlm_latency_flags_normal; |
| smeConfig->csrConfig.wlm_latency_flags[1] = |
| hdd_ctx->config->wlm_latency_flags_moderate; |
| smeConfig->csrConfig.wlm_latency_flags[2] = |
| hdd_ctx->config->wlm_latency_flags_low; |
| smeConfig->csrConfig.wlm_latency_flags[3] = |
| hdd_ctx->config->wlm_latency_flags_ultralow; |
| |
| smeConfig->csrConfig.is_force_1x1 = |
| hdd_ctx->config->is_force_1x1; |
| |
| smeConfig->csrConfig.btm_offload_config = |
| hdd_ctx->config->btm_offload_config; |
| smeConfig->csrConfig.btm_solicited_timeout = |
| hdd_ctx->config->btm_solicited_timeout; |
| smeConfig->csrConfig.btm_max_attempt_cnt = |
| hdd_ctx->config->btm_max_attempt_cnt; |
| smeConfig->csrConfig.btm_sticky_time = |
| hdd_ctx->config->btm_sticky_time; |
| hdd_set_sme_cfgs_related_to_plcy_mgr(hdd_ctx, smeConfig); |
| hdd_update_11k_offload_params(hdd_ctx->config, |
| &smeConfig->csrConfig); |
| |
| status = sme_update_config(mac_handle, smeConfig); |
| if (!QDF_IS_STATUS_SUCCESS(status)) |
| hdd_err("sme_update_config() failure: %d", status); |
| |
| qdf_mem_free(smeConfig); |
| return status; |
| } |
| |
| /** |
| * hdd_execute_global_config_command() - execute the global config command |
| * @hdd_ctx: the pointer to hdd context |
| * @command: the command to run |
| * |
| * Return: the QDF_STATUS return from hdd_execute_config_command |
| */ |
| QDF_STATUS hdd_execute_global_config_command(struct hdd_context *hdd_ctx, |
| char *command) |
| { |
| return hdd_execute_config_command(g_registry_table, |
| ARRAY_SIZE(g_registry_table), |
| (uint8_t *) hdd_ctx->config, |
| hdd_ctx, command); |
| } |
| |
| static void print_info_handler(const char *buf) |
| { |
| hdd_nofl_info("%s", buf); |
| } |
| |
| static void print_debug_handler(const char *buf) |
| { |
| hdd_nofl_debug("%s", buf); |
| } |
| |
| /** |
| * hdd_cfg_get_global_config() - get the configuration table |
| * @hdd_ctx: pointer to hdd context |
| * @pBuf: buffer to store the configuration |
| * @buflen: size of the buffer |
| * |
| * Return: none |
| */ |
| void hdd_cfg_get_global_config(struct hdd_context *hdd_ctx, char *buf, |
| int buflen) |
| { |
| hdd_cfg_get_config(g_registry_table, |
| ARRAY_SIZE(g_registry_table), |
| (uint8_t *)hdd_ctx->config, hdd_ctx, |
| &print_info_handler); |
| |
| snprintf(buf, buflen, |
| "WLAN configuration written to system log"); |
| } |
| |
| /** |
| * hdd_cfg_print_global_config() - print the configuration table |
| * @hdd_ctx: pointer to hdd context |
| * |
| * Return: none |
| */ |
| void hdd_cfg_print_global_config(struct hdd_context *hdd_ctx) |
| { |
| hdd_cfg_get_config(g_registry_table, |
| ARRAY_SIZE(g_registry_table), |
| (uint8_t *)hdd_ctx->config, hdd_ctx, |
| &print_debug_handler); |
| } |
| |
| /** |
| * hdd_get_pmkid_modes() - returns PMKID mode bits |
| * @hdd_ctx: the pointer to hdd context |
| * |
| * Return: value of pmkid_modes |
| */ |
| void hdd_get_pmkid_modes(struct hdd_context *hdd_ctx, |
| struct pmkid_mode_bits *pmkid_modes) |
| { |
| uint32_t cur_pmkid_modes; |
| QDF_STATUS status; |
| |
| status = ucfg_mlme_get_pmkid_modes(hdd_ctx->psoc, &cur_pmkid_modes); |
| if (status != QDF_STATUS_SUCCESS) |
| hdd_err("get pmkid modes fail"); |
| |
| pmkid_modes->fw_okc = (cur_pmkid_modes & |
| CFG_PMKID_MODES_OKC) ? 1 : 0; |
| pmkid_modes->fw_pmksa_cache = (cur_pmkid_modes & |
| CFG_PMKID_MODES_PMKSA_CACHING) ? 1 : 0; |
| } |
| |
| static void |
| hdd_populate_vdev_nss(struct wlan_mlme_nss_chains *user_cfg, |
| uint8_t tx_nss, |
| uint8_t rx_nss, |
| enum nss_chains_band_info band) |
| { |
| user_cfg->rx_nss[band] = rx_nss; |
| user_cfg->tx_nss[band] = tx_nss; |
| } |
| |
| /** |
| * hdd_update_nss() - Update the number of spatial streams supported. |
| * Ensure that nss is either 1 or 2 before calling this. |
| * |
| * @adapter: the pointer to adapter |
| * @nss: the number of spatial streams to be updated |
| * |
| * This function is used to modify the number of spatial streams |
| * supported when not in connected state. |
| * |
| * Return: QDF_STATUS_SUCCESS if nss is correctly updated, |
| * otherwise QDF_STATUS_E_FAILURE would be returned |
| */ |
| QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) |
| { |
| struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); |
| uint32_t rx_supp_data_rate, tx_supp_data_rate; |
| bool status = true; |
| QDF_STATUS qdf_status; |
| qdf_size_t val_len; |
| struct mlme_ht_capabilities_info ht_cap_info; |
| uint8_t mcs_set[SIZE_OF_SUPPORTED_MCS_SET] = {0}; |
| uint8_t mcs_set_temp[SIZE_OF_SUPPORTED_MCS_SET]; |
| uint8_t enable2x2; |
| mac_handle_t mac_handle; |
| bool bval = 0; |
| enum nss_chains_band_info band; |
| struct wlan_mlme_nss_chains user_cfg; |
| uint8_t tx_nss, rx_nss; |
| |
| if ((nss == 2) && (hdd_ctx->num_rf_chains != 2)) { |
| hdd_err("No support for 2 spatial streams"); |
| return QDF_STATUS_E_INVAL; |
| } |
| |
| if (nss > MAX_VDEV_NSS) { |
| hdd_debug("Cannot support %d nss streams", nss); |
| return QDF_STATUS_E_INVAL; |
| } |
| |
| mac_handle = hdd_ctx->mac_handle; |
| if (!mac_handle) { |
| hdd_err("NULL MAC handle"); |
| return QDF_STATUS_E_INVAL; |
| } |
| |
| /* Till now we dont have support for different rx, tx nss values */ |
| tx_nss = nss; |
| rx_nss = nss; |
| |
| qdf_mem_zero(&user_cfg, sizeof(user_cfg)); |
| |
| if (hdd_ctx->dynamic_nss_chains_support) { |
| for (band = BAND_2GHZ; band < BAND_MAX; band++) |
| hdd_populate_vdev_nss(&user_cfg, tx_nss, |
| rx_nss, band); |
| if (QDF_IS_STATUS_ERROR( |
| sme_nss_chains_update(mac_handle, |
| &user_cfg, |
| adapter->session_id))) |
| return QDF_STATUS_E_FAILURE; |
| |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| /* |
| * The code below is executed only when fw doesn't support dynamic |
| * update of nss and chains per vdev feature, for the upcoming |
| * connection |
| */ |
| enable2x2 = (nss == 1) ? 0 : 1; |
| |
| qdf_status = ucfg_mlme_get_vht_enable2x2(hdd_ctx->psoc, &bval); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("unable to get vht_enable2x2"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| |
| if (bval == enable2x2) { |
| hdd_debug("NSS same as requested"); |
| return QDF_STATUS_SUCCESS; |
| } |
| |
| if (sme_is_any_session_in_connected_state(mac_handle)) { |
| hdd_err("Connected sessions present, Do not change NSS"); |
| return QDF_STATUS_E_INVAL; |
| } |
| |
| qdf_status = ucfg_mlme_set_vht_enable2x2(hdd_ctx->psoc, enable2x2); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to set vht_enable2x2"); |
| return QDF_STATUS_E_FAILURE; |
| } |
| |
| if (!enable2x2) { |
| /* 1x1 */ |
| rx_supp_data_rate = VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1; |
| tx_supp_data_rate = VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1; |
| } else { |
| /* 2x2 */ |
| rx_supp_data_rate = VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_2_2; |
| tx_supp_data_rate = VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_2_2; |
| } |
| |
| /* Update Rx Highest Long GI data Rate */ |
| qdf_status = |
| ucfg_mlme_cfg_set_vht_rx_supp_data_rate(hdd_ctx->psoc, |
| rx_supp_data_rate); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to set rx_supp_data_rate"); |
| status = false; |
| } |
| /* Update Tx Highest Long GI data Rate */ |
| qdf_status = |
| ucfg_mlme_cfg_set_vht_tx_supp_data_rate(hdd_ctx->psoc, |
| tx_supp_data_rate); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to set tx_supp_data_rate"); |
| status = false; |
| } |
| |
| qdf_status = ucfg_mlme_get_ht_cap_info(hdd_ctx->psoc, &ht_cap_info); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to get HT Cap info"); |
| goto skip_ht_cap_update; |
| } |
| |
| if (!(hdd_ctx->ht_tx_stbc_supported && enable2x2)) { |
| ht_cap_info.tx_stbc = 0; |
| } else { |
| qdf_status = |
| ucfg_mlme_cfg_get_vht_tx_stbc(hdd_ctx->psoc, &bval); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to get vht_tx_stbc"); |
| ht_cap_info.tx_stbc = bval; |
| } |
| } |
| |
| qdf_status = ucfg_mlme_set_ht_cap_info(hdd_ctx->psoc, ht_cap_info); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Could not set the HT_CAP_INFO"); |
| } |
| skip_ht_cap_update: |
| qdf_status = ucfg_mlme_update_nss_vht_cap(hdd_ctx->psoc); |
| if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| hdd_err("Failed to set update_nss_vht_cap"); |
| status = false; |
| } |
| |
| #define WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES 0xff |
| val_len = SIZE_OF_SUPPORTED_MCS_SET; |
| qdf_status = ucfg_mlme_get_supported_mcs_set(hdd_ctx->psoc, |
| mcs_set_temp, |
| &val_len); |
| if (QDF_IS_STATUS_SUCCESS(qdf_status)) { |
| mcs_set[0] = mcs_set_temp[0]; |
| if (enable2x2) |
| for (val_len = 0; val_len < nss; val_len++) |
| mcs_set[val_len] = |
| WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES; |
| if (ucfg_mlme_set_supported_mcs_set( |
| hdd_ctx->psoc, mcs_set, |
| (qdf_size_t)SIZE_OF_SUPPORTED_MCS_SET) == |
| QDF_STATUS_E_FAILURE) { |
| status = false; |
| hdd_err("Could not pass on MCS SET to CFG"); |
| } |
| } else { |
| status = false; |
| hdd_err("Could not get MCS SET from CFG"); |
| } |
| sme_update_he_cap_nss(mac_handle, adapter->session_id, nss); |
| #undef WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES |
| |
| if (QDF_STATUS_SUCCESS != sme_update_nss(mac_handle, nss)) |
| status = false; |
| |
| hdd_set_policy_mgr_user_cfg(hdd_ctx); |
| return (status == false) ? QDF_STATUS_E_FAILURE : QDF_STATUS_SUCCESS; |
| } |