From bdb7f27bde3af013cf78ac927192f4d5ba612324 Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Thu, 5 Jul 2018 19:33:26 +0800 Subject: [PATCH] qcacld-3.0: Enable TDLS configures based on converged CFG component Enable TDLS configures based on converged cfg component and remove legacy codes. Change-Id: I77221a8493c8a20efdae9e714a98da74f5c6b6ed CRs-Fixed: 2277572 --- Kbuild | 1 + components/cfg/cfg_all.h | 9 +- core/hdd/inc/wlan_hdd_cfg.h | 614 ------------------------------- core/hdd/src/wlan_hdd_cfg.c | 286 ++++---------- core/hdd/src/wlan_hdd_cfg80211.c | 38 +- core/hdd/src/wlan_hdd_main.c | 70 ++-- core/hdd/src/wlan_hdd_tdls.c | 12 +- 7 files changed, 138 insertions(+), 892 deletions(-) diff --git a/Kbuild b/Kbuild index 877d3909b2..f2a6d7c705 100644 --- a/Kbuild +++ b/Kbuild @@ -832,6 +832,7 @@ UMAC_TDLS_OBJS := $(UMAC_TDLS_DIR)/core/src/wlan_tdls_main.o \ $(UMAC_TDLS_DIR)/dispatcher/src/wlan_tdls_tgt_api.o \ $(UMAC_TDLS_DIR)/dispatcher/src/wlan_tdls_ucfg_api.o \ $(UMAC_TDLS_DIR)/dispatcher/src/wlan_tdls_utils_api.o \ + $(UMAC_TDLS_DIR)/dispatcher/src/wlan_tdls_cfg.o \ $(WLAN_COMMON_ROOT)/os_if/linux/tdls/src/wlan_cfg80211_tdls.o ########### BMI ########### diff --git a/components/cfg/cfg_all.h b/components/cfg/cfg_all.h index 7f0e1cd2c5..ff668b64a9 100644 --- a/components/cfg/cfg_all.h +++ b/components/cfg/cfg_all.h @@ -25,6 +25,13 @@ #define CFG_P2P_ALL #endif +#ifdef CONVERGED_TDLS_ENABLE +#include "wlan_tdls_cfg.h" +#else +#define CFG_TDLS_ALL +#endif + #define CFG_ALL \ CFG_CONVERGED_ALL \ - CFG_P2P_ALL + CFG_P2P_ALL \ + CFG_TDLS_ALL diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index f9e345e642..8439339bf9 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -6276,413 +6276,6 @@ enum hdd_link_speed_rpt_type { #define CFG_PREVENT_LINK_DOWN_DEFAULT (0) #endif /* QCA_WIFI_NAPIER_EMULATION */ -#ifdef FEATURE_WLAN_TDLS -/* - * - * gEnableTDLSSupport - Enable support for TDLS. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable TDLS support. - * - * Related: None. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_SUPPORT_ENABLE "gEnableTDLSSupport" -#define CFG_TDLS_SUPPORT_ENABLE_MIN (0) -#define CFG_TDLS_SUPPORT_ENABLE_MAX (1) -#define CFG_TDLS_SUPPORT_ENABLE_DEFAULT (0) - -/* - * - * gEnableTDLSImplicitTrigger - Enable Implicit TDLS. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable implicit TDLS. - * CLD driver initiates TDLS Discovery towards a peer whenever TDLS Setup - * criteria (throughput and RSSI thresholds) is met and then it tears down - * TDLS when teardown criteria (idle packet count and RSSI) is met. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_IMPLICIT_TRIGGER "gEnableTDLSImplicitTrigger" -#define CFG_TDLS_IMPLICIT_TRIGGER_MIN (0) -#define CFG_TDLS_IMPLICIT_TRIGGER_MAX (1) -#define CFG_TDLS_IMPLICIT_TRIGGER_DEFAULT (0) - -/* - * - * gTDLSTxStatsPeriod - TDLS TX statistics time period. - * @Min: 1000 - * @Max: 4294967295 - * @Default: 2000 - * - * This ini is used to configure the time period (in ms) to evaluate whether - * the number of Tx/Rx packets exceeds TDLSTxPacketThreshold and triggers a - * TDLS Discovery request. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_TX_STATS_PERIOD "gTDLSTxStatsPeriod" -#define CFG_TDLS_TX_STATS_PERIOD_MIN (1000) -#define CFG_TDLS_TX_STATS_PERIOD_MAX (4294967295UL) -#define CFG_TDLS_TX_STATS_PERIOD_DEFAULT (2000) - -/* - * - * gTDLSTxPacketThreshold - Tx/Rx Packet threshold for initiating TDLS. - * @Min: 0 - * @Max: 4294967295 - * @Default: 40 - * - * This ini is used to configure the number of Tx/Rx packets during the - * period of gTDLSTxStatsPeriod when exceeded, a TDLS Discovery request - * is triggered. - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_TX_PACKET_THRESHOLD "gTDLSTxPacketThreshold" -#define CFG_TDLS_TX_PACKET_THRESHOLD_MIN (0) -#define CFG_TDLS_TX_PACKET_THRESHOLD_MAX (4294967295UL) -#define CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT (40) - -/* - * - * gTDLSMaxDiscoveryAttempt - Attempts for sending TDLS discovery requests. - * @Min: 1 - * @Max: 100 - * @Default: 5 - * - * This ini is used to configure the number of failures of discover request, - * when exceeded, the peer is assumed to be not TDLS capable and no further - * TDLS Discovery request is made. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT "gTDLSMaxDiscoveryAttempt" -#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN (1) -#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX (100) -#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT (5) - -/* - * - * gTDLSIdleTimeout - Duration within which number of TX / RX frames meet the - * criteria for TDLS teardown. - * @Min: 500 - * @Max: 40000 - * @Default: 5000 - * - * This ini is used to configure the time period (in ms) to evaluate whether - * the number of Tx/Rx packets exceeds gTDLSIdlePacketThreshold and thus meets - * criteria for TDLS teardown. - * Teardown notification interval (gTDLSIdleTimeout) should be multiple of - * setup notification (gTDLSTxStatsPeriod) interval. - * e.g. - * if setup notification (gTDLSTxStatsPeriod) interval = 500, then - * teardown notification (gTDLSIdleTimeout) interval should be 1000, - * 1500, 2000, 2500... - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_IDLE_TIMEOUT "gTDLSIdleTimeout" -#define CFG_TDLS_IDLE_TIMEOUT_MIN (500) -#define CFG_TDLS_IDLE_TIMEOUT_MAX (40000) -#define CFG_TDLS_IDLE_TIMEOUT_DEFAULT (5000) - - -/* - * - * gTDLSIdlePacketThreshold - Number of idle packet. - * @Min: 0 - * @Max: 40000 - * @Default: 3 - * - * This ini is used to configure the number of Tx/Rx packet, below which - * within last gTDLSTxStatsPeriod period is considered as idle condition. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_IDLE_PACKET_THRESHOLD "gTDLSIdlePacketThreshold" -#define CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN (0) -#define CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX (40000) -#define CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT (3) - -/* - * - * gTDLSRSSITriggerThreshold - RSSI threshold for TDLS connection. - * @Min: -120 - * @Max: 0 - * @Default: -75 - * - * This ini is used to configure the absolute value (in dB) of the peer RSSI, - * below which a TDLS setup request is triggered. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_RSSI_TRIGGER_THRESHOLD "gTDLSRSSITriggerThreshold" -#define CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN (-120) -#define CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX (0) -#define CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT (-75) - -/* - * - * gTDLSRSSITeardownThreshold - RSSI threshold for TDLS teardown. - * @Min: -120 - * @Max: 0 - * @Default: -75 - * - * This ini is used to configure the absolute value (in dB) of the peer RSSI, - * when exceed, a TDLS teardown is triggered. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD "gTDLSRSSITeardownThreshold" -#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN (-120) -#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX (0) -#define CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT (-75) - -/* - * - * gTDLSRSSIDelta - Delta value for the peer RSSI that can trigger teardown. - * @Min: -30 - * @Max: 0 - * @Default: -20 - * - * This ini is used to . - * This ini is used to configure delta for peer RSSI such that if Peer RSSI - * is less than AP RSSI plus delta will trigger a teardown. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_RSSI_DELTA "gTDLSRSSIDelta" -#define CFG_TDLS_RSSI_DELTA_MIN (-30) -#define CFG_TDLS_RSSI_DELTA_MAX (0) -#define CFG_TDLS_RSSI_DELTA_DEFAULT (-20) - -/* - * - * gTDLSUapsdMask - ACs to setup U-APSD for TDLS Sta. - * @Min: 0 - * @Max: 0x0F - * @Default: 0x0F - * - * This ini is used to configure the ACs for which mask needs to be enabled. - * 0x1: Background 0x2: Best effort - * 0x4: Video 0x8:Voice - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME "gTDLSUapsdMask" -#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN (0) -#define CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX (0x0F) -#define CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT (0x0F) - -/* - * - * gEnableTDLSBufferSta - Controls the TDLS buffer. - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to control the TDLS buffer. - * Buffer STA is not enabled in CLD 2.0 yet. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE "gEnableTDLSBufferSta" -#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN (0) -#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX (1) -#define CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT (1) - -/* - * - * gTDLSPuapsdInactivityTime - Peer UAPSD Inactivity time. - * @Min: 0 - * @Max: 10 - * @Default: 0 - * - * This ini is used to configure peer uapsd inactivity time. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PUAPSD_INACTIVITY_TIME "gTDLSPuapsdInactivityTime" -#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN (0) -#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX (10) -#define CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT (0) - -/* - * - * gTDLSPuapsdRxFrameThreshold - Peer UAPSD Rx frame threshold. - * @Min: 10 - * @Max: 20 - * @Default: 10 - * - * This ini is used to configure maximum Rx frame during SP. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD "gTDLSPuapsdRxFrameThreshold" -#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN (10) -#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX (20) -#define CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT (10) - -/* - * - * gTDLSPuapsdPTIWindow - This ini is used to configure peer traffic indication - * window. - * @Min: 1 - * @Max: 5 - * @Default: 2 - * - * This ini is used to configure buffering time in number of beacon intervals. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW "gTDLSPuapsdPTIWindow" -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_MIN (1) -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_MAX (5) -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_DEFAULT (2) - -/* - * - * gTDLSPuapsdPTRTimeout - Peer Traffic Response timer duration in ms. - * @Min: 0 - * @Max: 10000 - * @Default: 5000 - * - * This ini is used to configure the peer traffic response timer duration - * in ms. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT "gTDLSPuapsdPTRTimeout" -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_MIN (0) -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_MAX (10000) -#define CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_DEFAULT (5000) - -/* - * - * gTDLSExternalControl - Enable external TDLS control. - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to enable/disable external TDLS control. - * TDLS external control works with TDLS implicit trigger. TDLS external - * control allows a user to add a MAC address of potential TDLS peers so - * that the CLD driver can initiate implicit TDLS setup to only those peers - * when criteria for TDLS setup (throughput and RSSI threshold) is met. - * - * Related: gEnableTDLSSupport, gEnableTDLSImplicitTrigger. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_EXTERNAL_CONTROL "gTDLSExternalControl" -#define CFG_TDLS_EXTERNAL_CONTROL_MIN (0) -#define CFG_TDLS_EXTERNAL_CONTROL_MAX (1) -#define CFG_TDLS_EXTERNAL_CONTROL_DEFAULT (1) - /* * This INI item is used to control subsystem restart(SSR) test framework * Set it's value to 1 to enable APPS trigerred SSR testing @@ -6692,186 +6285,6 @@ enum hdd_link_speed_rpt_type { #define CFG_ENABLE_CRASH_INJECT_MAX (1) #define CFG_ENABLE_CRASH_INJECT_DEFAULT (0) -/* - * - * gEnableTDLSOffChannel - Enables off-channel support for TDLS link. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable off-channel support for TDLS link. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE "gEnableTDLSOffChannel" -#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_MIN (0) -#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_MAX (1) -#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_DEFAULT (0) - -/* - * - * gEnableTDLSWmmMode - Enables WMM support over TDLS link. - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to enable/disable WMM support over TDLS link. - * This is required to be set to 1 for any TDLS and uAPSD functionality. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_WMM_MODE_ENABLE "gEnableTDLSWmmMode" -#define CFG_TDLS_WMM_MODE_ENABLE_MIN (0) -#define CFG_TDLS_WMM_MODE_ENABLE_MAX (1) -#define CFG_TDLS_WMM_MODE_ENABLE_DEFAULT (1) - -/* - * - * gTDLSPrefOffChanNum - Preferred TDLS channel number when off-channel support - * is enabled. - * @Min: 1 - * @Max: 165 - * @Default: 36 - * - * This ini is used to configure preferred TDLS channel number when off-channel - * support is enabled. - * - * Related: gEnableTDLSSupport, gEnableTDLSOffChannel. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM "gTDLSPrefOffChanNum" -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_MIN (1) -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_MAX (165) -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT (36) - -/* - * - * gTDLSPrefOffChanBandwidth - Preferred TDLS channel bandwidth when - * off-channel support is enabled. - * @Min: 0x01 - * @Max: 0x0F - * @Default: 0x07 - * - * This ini is used to configure preferred TDLS channel bandwidth when - * off-channel support is enabled. - * 0x1: 20 MHz 0x2: 40 MHz 0x4: 80 MHz 0x8: 160 MHz - * When more than one bits are set then firmware starts from the highest and - * selects one based on capability of peer. - * - * Related: gEnableTDLSSupport, gEnableTDLSOffChannel. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_BW "gTDLSPrefOffChanBandwidth" -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_MIN (0x01) -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_MAX (0x0F) -#define CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_DEFAULT (0x07) - -/* - * - * gEnableTDLSScan - Allow scan and maintain TDLS link. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable TDLS scan. - * 0: If peer is not buffer STA capable and device is not sleep STA - * capable, then teardown TDLS link when scan is initiated. If peer - * is buffer STA and we can be sleep STA then TDLS link is maintained - * during scan. - * 1: Maintain TDLS link and allow scan even if peer is not buffer STA - * capable and device is not sleep STA capable. There will be loss of - * Rx pkts since peer would not know when device moves away from tdls - * channel. Tx on TDLS link would stop when device moves away from tdls - * channel. - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_SCAN_ENABLE "gEnableTDLSScan" -#define CFG_TDLS_SCAN_ENABLE_MIN (0) -#define CFG_TDLS_SCAN_ENABLE_MAX (1) -#define CFG_TDLS_SCAN_ENABLE_DEFAULT (1) - -/* - * - * gTDLSPeerKickoutThreshold - TDLS peer kickout threshold to firmware. - * @Min: 10 - * @Max: 5000 - * @Default: 96 - * - * This ini is used to configure TDLS peer kickout threshold to firmware. - * Firmware will use this value to determine, when to send TDLS - * peer kick out event to host. - * E.g. - * if peer kick out threshold is 10, then firmware will wait for 10 - * consecutive packet failures and then send TDLS kickout - * notification to host driver - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_PEER_KICKOUT_THRESHOLD "gTDLSPeerKickoutThreshold" -#define CFG_TDLS_PEER_KICKOUT_THRESHOLD_MIN (10) -#define CFG_TDLS_PEER_KICKOUT_THRESHOLD_MAX (5000) -#define CFG_TDLS_PEER_KICKOUT_THRESHOLD_DEFAULT (96) - -#endif - -/* - * - * gTDLSEnableDeferTime - Timer to defer for enabling TDLS on P2P listen. - * @Min: 500 - * @Max: 6000 - * @Default: 2000 - * - * This ini is used to set the timer to defer for enabling TDLS on P2P - * listen (value in milliseconds). - * - * Related: gEnableTDLSSupport. - * - * Supported Feature: TDLS - * - * Usage: Internal/External - * - * - */ -#define CFG_TDLS_ENABLE_DEFER_TIMER "gTDLSEnableDeferTime" -#define CFG_TDLS_ENABLE_DEFER_TIMER_MIN (500) -#define CFG_TDLS_ENABLE_DEFER_TIMER_MAX (6000) -#define CFG_TDLS_ENABLE_DEFER_TIMER_DEFAULT (2000) - /* * * gTxLdpcEnable - Config Param to enable Tx LDPC capability @@ -14822,32 +14235,6 @@ struct hdd_config { uint8_t enable_rx_ldpc; bool enable5gEBT; bool prevent_link_down; -#ifdef FEATURE_WLAN_TDLS - bool fEnableTDLSSupport; - bool fEnableTDLSImplicitTrigger; - uint32_t fTDLSTxStatsPeriod; - uint32_t fTDLSTxPacketThreshold; - uint32_t fTDLSMaxDiscoveryAttempt; - uint32_t tdls_idle_timeout; - uint32_t fTDLSIdlePacketThreshold; - int32_t fTDLSRSSITriggerThreshold; - int32_t fTDLSRSSITeardownThreshold; - int32_t fTDLSRSSIDelta; - uint32_t fTDLSUapsdMask; /* what ACs to setup U-APSD for TDLS */ - uint32_t fEnableTDLSBufferSta; - uint32_t fEnableTDLSSleepSta; - uint32_t fTDLSPuapsdInactivityTimer; - uint32_t fTDLSRxFrameThreshold; - uint32_t fTDLSPuapsdPTIWindow; - uint32_t fTDLSPuapsdPTRTimeout; - bool fTDLSExternalControl; - uint32_t fEnableTDLSOffChannel; - uint32_t fEnableTDLSWmmMode; - uint8_t fTDLSPrefOffChanNum; - uint8_t fTDLSPrefOffChanBandwidth; - uint8_t enable_tdls_scan; - uint32_t tdls_peer_kickout_threshold; -#endif uint8_t scanAgingTimeout; uint8_t disableLDPCWithTxbfAP; uint8_t enableMCCAdaptiveScheduler; @@ -15065,7 +14452,6 @@ struct hdd_config { bool active_mode_offload; bool apf_packet_filter_enable; /* parameter for defer timer for enabling TDLS on p2p listen */ - uint16_t tdls_enable_defer_time; uint32_t fine_time_meas_cap; uint8_t max_scan_count; #ifdef WLAN_FEATURE_FASTPATH diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 77522de523..a411eee4d1 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -43,6 +43,7 @@ #include "wlan_hdd_green_ap_cfg.h" #include "wlan_hdd_twt.h" #include "wlan_p2p_cfg_api.h" +#include "wlan_tdls_cfg_api.h" static void cb_notify_set_roam_prefer5_g_hz(struct hdd_context *hdd_ctx, @@ -2160,171 +2161,6 @@ struct reg_table_entry g_registry_table[] = { CFG_PREVENT_LINK_DOWN_MIN, CFG_PREVENT_LINK_DOWN_MAX), -#ifdef FEATURE_WLAN_TDLS - REG_VARIABLE(CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer, - struct hdd_config, fEnableTDLSSupport, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_SUPPORT_ENABLE_DEFAULT, - CFG_TDLS_SUPPORT_ENABLE_MIN, - CFG_TDLS_SUPPORT_ENABLE_MAX), - - REG_VARIABLE(CFG_TDLS_IMPLICIT_TRIGGER, WLAN_PARAM_Integer, - struct hdd_config, fEnableTDLSImplicitTrigger, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_IMPLICIT_TRIGGER_DEFAULT, - CFG_TDLS_IMPLICIT_TRIGGER_MIN, - CFG_TDLS_IMPLICIT_TRIGGER_MAX), - - REG_VARIABLE(CFG_TDLS_TX_STATS_PERIOD, WLAN_PARAM_Integer, - struct hdd_config, fTDLSTxStatsPeriod, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_TX_STATS_PERIOD_DEFAULT, - CFG_TDLS_TX_STATS_PERIOD_MIN, - CFG_TDLS_TX_STATS_PERIOD_MAX), - - REG_VARIABLE(CFG_TDLS_TX_PACKET_THRESHOLD, WLAN_PARAM_Integer, - struct hdd_config, fTDLSTxPacketThreshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_TX_PACKET_THRESHOLD_DEFAULT, - CFG_TDLS_TX_PACKET_THRESHOLD_MIN, - CFG_TDLS_TX_PACKET_THRESHOLD_MAX), - - REG_VARIABLE(CFG_TDLS_MAX_DISCOVERY_ATTEMPT, WLAN_PARAM_Integer, - struct hdd_config, fTDLSMaxDiscoveryAttempt, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT, - CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN, - CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX), - - REG_VARIABLE(CFG_TDLS_IDLE_TIMEOUT, WLAN_PARAM_Integer, - struct hdd_config, tdls_idle_timeout, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_IDLE_TIMEOUT_DEFAULT, - CFG_TDLS_IDLE_TIMEOUT_MIN, - CFG_TDLS_IDLE_TIMEOUT_MAX), - - REG_VARIABLE(CFG_TDLS_IDLE_PACKET_THRESHOLD, WLAN_PARAM_Integer, - struct hdd_config, fTDLSIdlePacketThreshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_IDLE_PACKET_THRESHOLD_DEFAULT, - CFG_TDLS_IDLE_PACKET_THRESHOLD_MIN, - CFG_TDLS_IDLE_PACKET_THRESHOLD_MAX), - - REG_VARIABLE(CFG_TDLS_RSSI_TRIGGER_THRESHOLD, WLAN_PARAM_SignedInteger, - struct hdd_config, fTDLSRSSITriggerThreshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_RSSI_TRIGGER_THRESHOLD_DEFAULT, - CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MIN, - CFG_TDLS_RSSI_TRIGGER_THRESHOLD_MAX), - - REG_VARIABLE(CFG_TDLS_RSSI_TEARDOWN_THRESHOLD, WLAN_PARAM_SignedInteger, - struct hdd_config, fTDLSRSSITeardownThreshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_DEFAULT, - CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MIN, - CFG_TDLS_RSSI_TEARDOWN_THRESHOLD_MAX), - - REG_VARIABLE(CFG_TDLS_RSSI_DELTA, WLAN_PARAM_SignedInteger, - struct hdd_config, fTDLSRSSIDelta, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_RSSI_DELTA_DEFAULT, - CFG_TDLS_RSSI_DELTA_MIN, - CFG_TDLS_RSSI_DELTA_MAX), - - REG_VARIABLE(CFG_TDLS_QOS_WMM_UAPSD_MASK_NAME, WLAN_PARAM_HexInteger, - struct hdd_config, fTDLSUapsdMask, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_QOS_WMM_UAPSD_MASK_DEFAULT, - CFG_TDLS_QOS_WMM_UAPSD_MASK_MIN, - CFG_TDLS_QOS_WMM_UAPSD_MASK_MAX), - - REG_VARIABLE(CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE, WLAN_PARAM_Integer, - struct hdd_config, fEnableTDLSBufferSta, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_DEFAULT, - CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MIN, - CFG_TDLS_BUFFER_STA_SUPPORT_ENABLE_MAX), - - REG_VARIABLE(CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE, WLAN_PARAM_Integer, - struct hdd_config, fEnableTDLSOffChannel, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_DEFAULT, - CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_MIN, - CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_MAX), - - REG_VARIABLE(CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM, WLAN_PARAM_Integer, - struct hdd_config, fTDLSPrefOffChanNum, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT, - CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_MIN, - CFG_TDLS_PREFERRED_OFF_CHANNEL_NUM_MAX), - - REG_VARIABLE(CFG_TDLS_PREFERRED_OFF_CHANNEL_BW, WLAN_PARAM_Integer, - struct hdd_config, fTDLSPrefOffChanBandwidth, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_DEFAULT, - CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_MIN, - CFG_TDLS_PREFERRED_OFF_CHANNEL_BW_MAX), - - REG_VARIABLE(CFG_TDLS_PUAPSD_INACTIVITY_TIME, WLAN_PARAM_Integer, - struct hdd_config, fTDLSPuapsdInactivityTimer, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PUAPSD_INACTIVITY_TIME_DEFAULT, - CFG_TDLS_PUAPSD_INACTIVITY_TIME_MIN, - CFG_TDLS_PUAPSD_INACTIVITY_TIME_MAX), - - REG_VARIABLE(CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD, WLAN_PARAM_Integer, - struct hdd_config, fTDLSRxFrameThreshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_DEFAULT, - CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MIN, - CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_MAX), - - REG_VARIABLE(CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW, - WLAN_PARAM_Integer, - struct hdd_config, fTDLSPuapsdPTIWindow, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_DEFAULT, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_MIN, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_IND_WINDOW_MAX), - - REG_VARIABLE(CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT, - WLAN_PARAM_Integer, - struct hdd_config, fTDLSPuapsdPTRTimeout, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_DEFAULT, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_MIN, - CFG_TDLS_PUAPSD_PEER_TRAFFIC_RSP_TIMEOUT_MAX), - - REG_VARIABLE(CFG_TDLS_EXTERNAL_CONTROL, WLAN_PARAM_Integer, - struct hdd_config, fTDLSExternalControl, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_EXTERNAL_CONTROL_DEFAULT, - CFG_TDLS_EXTERNAL_CONTROL_MIN, - CFG_TDLS_EXTERNAL_CONTROL_MAX), - REG_VARIABLE(CFG_TDLS_WMM_MODE_ENABLE, WLAN_PARAM_Integer, - struct hdd_config, fEnableTDLSWmmMode, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_WMM_MODE_ENABLE_DEFAULT, - CFG_TDLS_WMM_MODE_ENABLE_MIN, - CFG_TDLS_WMM_MODE_ENABLE_MAX), - - REG_VARIABLE(CFG_TDLS_SCAN_ENABLE, WLAN_PARAM_Integer, - struct hdd_config, enable_tdls_scan, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_SCAN_ENABLE_DEFAULT, - CFG_TDLS_SCAN_ENABLE_MIN, - CFG_TDLS_SCAN_ENABLE_MAX), - - REG_VARIABLE(CFG_TDLS_PEER_KICKOUT_THRESHOLD, WLAN_PARAM_Integer, - struct hdd_config, tdls_peer_kickout_threshold, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_PEER_KICKOUT_THRESHOLD_DEFAULT, - CFG_TDLS_PEER_KICKOUT_THRESHOLD_MIN, - CFG_TDLS_PEER_KICKOUT_THRESHOLD_MAX), - -#endif - REG_VARIABLE(CFG_SCAN_AGING_PARAM_NAME, WLAN_PARAM_Integer, struct hdd_config, scanAgingTimeout, VAR_FLAGS_OPTIONAL, @@ -3417,13 +3253,6 @@ struct reg_table_entry g_registry_table[] = { CFG_APF_PACKET_FILTER_OFFLOAD_MIN, CFG_APF_PACKET_FILTER_OFFLOAD_MAX), - REG_VARIABLE(CFG_TDLS_ENABLE_DEFER_TIMER, WLAN_PARAM_Integer, - struct hdd_config, tdls_enable_defer_time, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_TDLS_ENABLE_DEFER_TIMER_DEFAULT, - CFG_TDLS_ENABLE_DEFER_TIMER_MIN, - CFG_TDLS_ENABLE_DEFER_TIMER_MAX), - REG_VARIABLE(CFG_FLOW_STEERING_ENABLED_NAME, WLAN_PARAM_Integer, struct hdd_config, flow_steering_enable, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -6550,22 +6379,6 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_ctx->config->configPNOScanTimerRepeatValue); hdd_debug("Name = [gPNOSlowScanMultiplier] Value = [%u] ", hdd_ctx->config->pno_slow_scan_multiplier); -#endif -#ifdef FEATURE_WLAN_TDLS - hdd_debug("Name = [fEnableTDLSSupport] Value = [%u] ", - hdd_ctx->config->fEnableTDLSSupport); - hdd_debug("Name = [fEnableTDLSImplicitTrigger] Value = [%u] ", - hdd_ctx->config->fEnableTDLSImplicitTrigger); - hdd_debug("Name = [fTDLSExternalControl] Value = [%u] ", - hdd_ctx->config->fTDLSExternalControl); - hdd_debug("Name = [fTDLSUapsdMask] Value = [%u] ", - hdd_ctx->config->fTDLSUapsdMask); - hdd_debug("Name = [fEnableTDLSBufferSta] Value = [%u] ", - hdd_ctx->config->fEnableTDLSBufferSta); - hdd_debug("Name = [fEnableTDLSWmmMode] Value = [%u] ", - hdd_ctx->config->fEnableTDLSWmmMode); - hdd_debug("Name = [enable_tdls_scan] Value = [%u]", - hdd_ctx->config->enable_tdls_scan); #endif hdd_debug("Name = [InfraDirAcVo] Value = [%u] ", hdd_ctx->config->InfraDirAcVo); @@ -7121,9 +6934,6 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx) hdd_debug("Name = [%s] Value = [%d]", CFG_APF_PACKET_FILTER_OFFLOAD, hdd_ctx->config->apf_packet_filter_enable); - hdd_debug("Name = [%s] Value = [%u]", - CFG_TDLS_ENABLE_DEFER_TIMER, - hdd_ctx->config->tdls_enable_defer_time); hdd_debug("Name = [%s] Value = [%d]", CFG_FILTER_MULTICAST_REPLAY_NAME, hdd_ctx->config->multicast_replay_filter); @@ -8098,6 +7908,7 @@ bool hdd_update_config_cfg(struct hdd_context *hdd_ctx) struct hdd_config *config = hdd_ctx->config; mac_handle_t mac_handle; uint32_t ivalue; + bool bvalue; QDF_STATUS ret; /* @@ -8291,41 +8102,70 @@ bool hdd_update_config_cfg(struct hdd_context *hdd_ctx) #ifdef FEATURE_WLAN_TDLS - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK, - config->fTDLSUapsdMask) == QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK to CFG"); - } - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_BUF_STA_ENABLED, - config->fEnableTDLSBufferSta) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CFG"); - } - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_PUAPSD_INACT_TIME, - config->fTDLSPuapsdInactivityTimer) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_PUAPSD_INACT_TIME to CFG"); - } - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_RX_FRAME_THRESHOLD, - config->fTDLSRxFrameThreshold) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_RX_FRAME_THRESHOLD to CFG"); + ret = cfg_tdls_get_uapsd_mask(hdd_ctx->hdd_psoc, &ivalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK, + ivalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK to CFG"); + } } - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED, - config->fEnableTDLSOffChannel) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CFG"); + ret = cfg_tdls_get_buffer_sta_enable(hdd_ctx->hdd_psoc, &bvalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_BUF_STA_ENABLED, + (uint32_t)bvalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CFG"); + } } - if (sme_cfg_set_int(mac_handle, WNI_CFG_TDLS_WMM_MODE_ENABLED, - config->fEnableTDLSWmmMode) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Couldn't pass on WNI_CFG_TDLS_WMM_MODE_ENABLED to CFG"); + + ret = cfg_tdls_get_uapsd_inactivity_time(hdd_ctx->hdd_psoc, &ivalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_PUAPSD_INACT_TIME, + ivalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_PUAPSD_INACT_TIME to CFG"); + } + } + + ret = cfg_tdls_get_rx_pkt_threshold(hdd_ctx->hdd_psoc, &ivalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_RX_FRAME_THRESHOLD, + ivalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_RX_FRAME_THRESHOLD to CFG"); + } + } + + ret = cfg_tdls_get_off_channel_enable(hdd_ctx->hdd_psoc, &bvalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_OFF_CHANNEL_ENABLED, + (uint32_t)bvalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_BUF_STA_ENABLED to CFG"); + } + } + + ret = cfg_tdls_get_wmm_mode_enable(hdd_ctx->hdd_psoc, &bvalue); + if (ret == QDF_STATUS_SUCCESS) { + ret = sme_cfg_set_int(mac_handle, + WNI_CFG_TDLS_WMM_MODE_ENABLED, + (uint32_t)bvalue); + if (ret == QDF_STATUS_E_FAILURE) { + status = false; + hdd_err("Couldn't pass on WNI_CFG_TDLS_WMM_MODE_ENABLED to CFG"); + } } #endif diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 9d3b67f14c..90e2a327c8 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -106,6 +106,7 @@ #include "wlan_ipa_ucfg_api.h" #include #include +#include "wlan_tdls_cfg_api.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) @@ -716,6 +717,11 @@ static int __wlan_hdd_cfg80211_get_tdls_capabilities(struct wiphy *wiphy, struct sk_buff *skb; uint32_t set = 0; uint32_t max_num_tdls_sta = 0; + bool tdls_support; + bool tdls_external_control; + bool tdls_sleep_sta_enable; + bool tdls_buffer_sta; + bool tdls_off_channel; hdd_enter_dev(wdev->netdev); @@ -735,7 +741,8 @@ static int __wlan_hdd_cfg80211_get_tdls_capabilities(struct wiphy *wiphy, goto fail; } - if (false == hdd_ctx->config->fEnableTDLSSupport) { + if ((cfg_tdls_get_support_enable(hdd_ctx->hdd_psoc, &tdls_support) == + QDF_STATUS_SUCCESS) && tdls_support) { hdd_debug("TDLS feature not Enabled or Not supported in FW"); if (nla_put_u32(skb, PARAM_MAX_TDLS_SESSION, 0) || nla_put_u32(skb, PARAM_TDLS_FEATURE_SUPPORT, 0)) { @@ -743,14 +750,21 @@ static int __wlan_hdd_cfg80211_get_tdls_capabilities(struct wiphy *wiphy, goto fail; } } else { + cfg_tdls_get_external_control(hdd_ctx->hdd_psoc, + &tdls_external_control); + cfg_tdls_get_sleep_sta_enable(hdd_ctx->hdd_psoc, + &tdls_sleep_sta_enable); + cfg_tdls_get_buffer_sta_enable(hdd_ctx->hdd_psoc, + &tdls_buffer_sta); + cfg_tdls_get_off_channel_enable(hdd_ctx->hdd_psoc, + &tdls_off_channel); set = set | WIFI_TDLS_SUPPORT; - set = set | (hdd_ctx->config->fTDLSExternalControl ? + set = set | (tdls_external_control ? WIFI_TDLS_EXTERNAL_CONTROL_SUPPORT : 0); - set = set | (hdd_ctx->config->fEnableTDLSOffChannel ? + set = set | (tdls_off_channel ? WIIF_TDLS_OFFCHANNEL_SUPPORT : 0); - if (hdd_ctx->config->fEnableTDLSSleepSta || - hdd_ctx->config->fEnableTDLSBufferSta || - hdd_ctx->config->fEnableTDLSOffChannel) + if (tdls_sleep_sta_enable || tdls_buffer_sta || + tdls_off_channel) max_num_tdls_sta = HDD_MAX_NUM_TDLS_STA_P_UAPSD_OFFCHAN; else max_num_tdls_sta = HDD_MAX_NUM_TDLS_STA; @@ -2918,6 +2932,9 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy, struct sk_buff *skb = NULL; uint32_t fset = 0; int ret; +#ifdef FEATURE_WLAN_TDLS + bool bvalue; +#endif /* ENTER_DEV() intentionally not used in a frequently invoked API */ @@ -2975,14 +2992,15 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy, #endif fset |= WIFI_FEATURE_ADDITIONAL_STA; #ifdef FEATURE_WLAN_TDLS - if ((true == hdd_ctx->config->fEnableTDLSSupport) && - sme_is_feature_supported_by_fw(TDLS)) { + cfg_tdls_get_support_enable(hdd_ctx->hdd_psoc, &bvalue); + if ((bvalue) && sme_is_feature_supported_by_fw(TDLS)) { hdd_debug("TDLS is supported by firmware"); fset |= WIFI_FEATURE_TDLS; } + + cfg_tdls_get_off_channel_enable(hdd_ctx->hdd_psoc, &bvalue); if (sme_is_feature_supported_by_fw(TDLS) && - (true == hdd_ctx->config->fEnableTDLSOffChannel) && - sme_is_feature_supported_by_fw(TDLS_OFF_CHANNEL)) { + bvalue && sme_is_feature_supported_by_fw(TDLS_OFF_CHANNEL)) { hdd_debug("TDLS off-channel is supported by firmware"); fset |= WIFI_FEATURE_TDLS_OFFCHANNEL; } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 5875d520e7..cf633b95c3 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -137,6 +137,7 @@ #include "qc_sap_ioctl.h" #include "wlan_mlme_main.h" #include "wlan_p2p_cfg_api.h" +#include "wlan_tdls_cfg_api.h" #ifdef CNSS_GENL #include @@ -1169,41 +1170,13 @@ static int hdd_update_tdls_config(struct hdd_context *hdd_ctx) { struct wlan_objmgr_psoc *psoc = hdd_ctx->hdd_psoc; struct tdls_start_params tdls_cfg; - struct tdls_user_config *config = &tdls_cfg.config; struct hdd_config *cfg = hdd_ctx->config; QDF_STATUS status; - config->tdls_tx_states_period = cfg->fTDLSTxStatsPeriod; - config->tdls_tx_pkt_threshold = cfg->fTDLSTxPacketThreshold; - config->tdls_rx_pkt_threshold = cfg->fTDLSRxFrameThreshold; - config->tdls_max_discovery_attempt = cfg->fTDLSMaxDiscoveryAttempt; - config->tdls_idle_timeout = cfg->tdls_idle_timeout; - config->tdls_idle_pkt_threshold = cfg->fTDLSIdlePacketThreshold; - config->tdls_rssi_trigger_threshold = cfg->fTDLSRSSITriggerThreshold; - config->tdls_rssi_teardown_threshold = cfg->fTDLSRSSITeardownThreshold; - config->tdls_rssi_delta = cfg->fTDLSRSSIDelta; - config->tdls_uapsd_mask = cfg->fTDLSUapsdMask; - config->tdls_uapsd_inactivity_time = cfg->fTDLSPuapsdInactivityTimer; - config->tdls_uapsd_pti_window = cfg->fTDLSPuapsdPTIWindow; - config->tdls_uapsd_ptr_timeout = cfg->fTDLSPuapsdPTRTimeout; - config->tdls_pre_off_chan_num = cfg->fTDLSPrefOffChanNum; - config->tdls_pre_off_chan_bw = cfg->fTDLSPrefOffChanBandwidth; - config->tdls_peer_kickout_threshold = cfg->tdls_peer_kickout_threshold; - config->delayed_trig_framint = cfg->DelayedTriggerFrmInt; - config->tdls_feature_flags = ((cfg->fEnableTDLSOffChannel ? - 1 << TDLS_FEATURE_OFF_CHANNEL : 0) | - (cfg->fEnableTDLSWmmMode ? 1 << TDLS_FEATURE_WMM : 0) | - (cfg->fEnableTDLSBufferSta ? 1 << TDLS_FEATURE_BUFFER_STA : 0) | - (cfg->fEnableTDLSSleepSta ? 1 << TDLS_FEATURE_SLEEP_STA : 0) | - (cfg->enable_tdls_scan ? 1 << TDLS_FEATURE_SCAN : 0) | - (cfg->fEnableTDLSSupport ? 1 << TDLS_FEATURE_ENABLE : 0) | - (cfg->fEnableTDLSImplicitTrigger ? - 1 << TDLS_FEAUTRE_IMPLICIT_TRIGGER : 0) | - (cfg->fTDLSExternalControl ? - 1 << TDLS_FEATURE_EXTERNAL_CONTROL : 0)); - config->tdls_vdev_nss_2g = CFG_TDLS_NSS(cfg->vdev_type_nss_2g); - config->tdls_vdev_nss_5g = CFG_TDLS_NSS(cfg->vdev_type_nss_5g); - + cfg_tdls_set_vdev_nss_2g(hdd_ctx->hdd_psoc, + CFG_TDLS_NSS(cfg->vdev_type_nss_2g)); + cfg_tdls_set_vdev_nss_5g(hdd_ctx->hdd_psoc, + CFG_TDLS_NSS(cfg->vdev_type_nss_5g)); tdls_cfg.tdls_send_mgmt_req = eWNI_SME_TDLS_SEND_MGMT_REQ; tdls_cfg.tdls_add_sta_req = eWNI_SME_TDLS_ADD_STA_REQ; tdls_cfg.tdls_del_sta_req = eWNI_SME_TDLS_DEL_STA_REQ; @@ -1238,7 +1211,12 @@ static void hdd_update_tgt_services(struct hdd_context *hdd_ctx, struct wma_tgt_services *cfg) { struct hdd_config *config = hdd_ctx->config; - +#ifdef FEATURE_WLAN_TDLS + bool tdls_support; + bool tdls_off_channel; + bool tdls_buffer_sta; + uint32_t tdls_uapsd_mask; +#endif /* Set up UAPSD */ config->apUapsdEnabled &= cfg->uapsd; @@ -1262,15 +1240,25 @@ static void hdd_update_tgt_services(struct hdd_context *hdd_ctx, config->PnoOffload = true; #endif #ifdef FEATURE_WLAN_TDLS - config->fEnableTDLSSupport &= cfg->en_tdls; - config->fEnableTDLSOffChannel = config->fEnableTDLSOffChannel && - cfg->en_tdls_offchan; - config->fEnableTDLSBufferSta = config->fEnableTDLSBufferSta && - cfg->en_tdls_uapsd_buf_sta; - if (config->fTDLSUapsdMask && cfg->en_tdls_uapsd_sleep_sta) - config->fEnableTDLSSleepSta = true; + cfg_tdls_get_support_enable(hdd_ctx->hdd_psoc, &tdls_support); + cfg_tdls_set_support_enable(hdd_ctx->hdd_psoc, + tdls_support & cfg->en_tdls); + + cfg_tdls_get_off_channel_enable(hdd_ctx->hdd_psoc, &tdls_off_channel); + cfg_tdls_set_off_channel_enable(hdd_ctx->hdd_psoc, + tdls_off_channel && + cfg->en_tdls_offchan); + + cfg_tdls_get_buffer_sta_enable(hdd_ctx->hdd_psoc, &tdls_buffer_sta); + cfg_tdls_set_buffer_sta_enable(hdd_ctx->hdd_psoc, + tdls_buffer_sta && + cfg->en_tdls_uapsd_buf_sta); + + cfg_tdls_get_uapsd_mask(hdd_ctx->hdd_psoc, &tdls_uapsd_mask); + if (tdls_uapsd_mask && cfg->en_tdls_uapsd_sleep_sta) + cfg_tdls_set_sleep_sta_enable(hdd_ctx->hdd_psoc, true); else - config->fEnableTDLSSleepSta = false; + cfg_tdls_set_sleep_sta_enable(hdd_ctx->hdd_psoc, false); #endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD config->isRoamOffloadEnabled &= cfg->en_roam_offload; diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 5db283472f..b16894cccc 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -40,6 +40,7 @@ #include "wma_types.h" #include "wlan_policy_mgr_api.h" #include +#include "wlan_tdls_cfg_api.h" /** * enum qca_wlan_vendor_tdls_trigger_mode_hdd_map: Maps the user space TDLS @@ -442,6 +443,7 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, { struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev); struct hdd_context *hdd_ctx = wiphy_priv(wiphy); + bool tdls_support; #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)) #if !(TDLS_MGMT_VERSION2) u32 peer_capability; @@ -467,7 +469,8 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, if (wlan_hdd_validate_context(hdd_ctx)) return -EINVAL; - if (false == hdd_ctx->config->fEnableTDLSSupport) { + cfg_tdls_get_support_enable(hdd_ctx->hdd_psoc, &tdls_support); + if (!tdls_support) { hdd_debug("TDLS Disabled in INI OR not enabled in FW. " "Cannot process TDLS commands"); return -ENOTSUPP; @@ -629,6 +632,7 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev); struct hdd_context *hdd_ctx = wiphy_priv(wiphy); int status; + bool tdls_support; hdd_enter(); @@ -642,7 +646,8 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, return -EINVAL; } - if (false == hdd_ctx->config->fEnableTDLSSupport) { + cfg_tdls_get_support_enable(hdd_ctx->hdd_psoc, &tdls_support); + if (!tdls_support) { hdd_debug("TDLS Disabled in INI OR not enabled in FW. " "Cannot process TDLS commands"); return -ENOTSUPP; @@ -812,7 +817,8 @@ int hdd_set_tdls_scan_type(struct hdd_context *hdd_ctx, int val) return -EINVAL; } - hdd_ctx->config->enable_tdls_scan = val; + cfg_tdls_set_scan_enable(hdd_ctx->hdd_psoc, (bool)val); + return 0; }