summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c4
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h6
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h3
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c10
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c18
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c63
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c11
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c18
-rw-r--r--CORE/HDD/src/wlan_hdd_wmm.c2
-rw-r--r--CORE/MAC/inc/aniGlobal.h1
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h3
-rw-r--r--CORE/MAC/src/pe/lim/limLogDump.c4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c21
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c38
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h4
-rw-r--r--CORE/SERVICES/DFS/src/dfs.c5
-rw-r--r--CORE/SERVICES/DFS/src/dfs_process_phyerr.c6
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.c38
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.h3
-rw-r--r--CORE/SERVICES/WMA/wma.c206
-rw-r--r--CORE/SERVICES/WMA/wma.h4
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c2
-rw-r--r--CORE/SME/inc/csrApi.h12
-rw-r--r--CORE/SME/inc/sme_Api.h1
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c3
-rw-r--r--CORE/SME/src/csr/csrApiScan.c21
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c3
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c2
-rw-r--r--CORE/VOSS/src/vos_api.c9
-rw-r--r--CORE/VOSS/src/vos_nvitem.c4
-rw-r--r--Kbuild8
34 files changed, 393 insertions, 150 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index c3154228ca48..d62932ee4f59 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -995,10 +995,6 @@ htt_rx_amsdu_pop_ll(
msdu = next;
msdu_chaining = 1;
-#ifdef DEBUG_DMA_DONE
- adf_os_print("msdu_chained %d!\n", msdu_chained);
-#endif
-
if (msdu_chained == 0) {
/* Trim the last one to the correct size - accounting for
* inconsistent HW lengths cuasing length overflows and
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 8a6e95e861d0..8dfbfd3976c7 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1520,6 +1520,11 @@ typedef enum
#define CFG_ENABLE_OVERLAP_CH_MAX ( 1 )
#define CFG_ENABLE_OVERLAP_CH_DEFAULT ( 0 )
+#define CFG_PPS_ENABLE_5G_EBT "gEnable5gEBT"
+#define CFG_PPS_ENABLE_5G_EBT_FEATURE_MIN ( 0 )
+#define CFG_PPS_ENABLE_5G_EBT_FEATURE_MAX ( 1 )
+#define CFG_PPS_ENABLE_5G_EBT_FEATURE_DEFAULT ( 0 )
+
/*
* VOS Trace Enable Control
* Notes:
@@ -2671,6 +2676,7 @@ typedef struct
v_BOOL_t enableRxSTBC;
v_BOOL_t enableTxSTBC;
v_BOOL_t enableRxLDPC;
+ v_BOOL_t enable5gEBT;
#ifdef FEATURE_WLAN_TDLS
v_BOOL_t fEnableTDLSSupport;
v_BOOL_t fEnableTDLSImplicitTrigger;
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 174896e552dd..17f9941dab27 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -92,6 +92,9 @@
#ifdef FEATURE_WLAN_TDLS
#define WLAN_IS_TDLS_SETUP_ACTION(action) \
((SIR_MAC_TDLS_SETUP_REQ <= action) && (SIR_MAC_TDLS_SETUP_CNF >= action))
+#if !defined (TDLS_MGMT_VERSION2)
+#define TDLS_MGMT_VERSION2 0
+#endif
#endif
typedef struct {
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 1fba85c41a9b..e520d6cbb9cd 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1900,8 +1900,6 @@ static eHalStatus roamIbssConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo
__func__, pAdapter->dev->name);
return eHAL_STATUS_FAILURE;
}
- /* send ibss join indication to nl80211 */
- cfg80211_ibss_joined(pAdapter->dev, &pRoamInfo->bssid[0], GFP_KERNEL);
cfg80211_put_bss(
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
WLAN_HDD_GET_CTX(pAdapter)->wiphy,
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 999ab9539b0d..f4414e6f9a35 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2597,6 +2597,13 @@ REG_VARIABLE( CFG_ENABLE_RX_LDPC, WLAN_PARAM_Integer,
CFG_ENABLE_RX_LDPC_MIN,
CFG_ENABLE_RX_LDPC_MAX ),
+REG_VARIABLE( CFG_PPS_ENABLE_5G_EBT, WLAN_PARAM_Integer,
+ hdd_config_t, enable5gEBT,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_PPS_ENABLE_5G_EBT_FEATURE_DEFAULT,
+ CFG_PPS_ENABLE_5G_EBT_FEATURE_MIN,
+ CFG_PPS_ENABLE_5G_EBT_FEATURE_MAX ),
+
#ifdef FEATURE_WLAN_TDLS
REG_VARIABLE( CFG_TDLS_SUPPORT_ENABLE, WLAN_PARAM_Integer,
hdd_config_t, fEnableTDLSSupport,
@@ -5355,6 +5362,9 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx )
smeConfig.max_intf_count = pHddCtx->max_intf_count;
smeConfig.fEnableDebugLog = pHddCtx->cfg_ini->gEnableDebugLog;
+
+ smeConfig.enable5gEBT = pHddCtx->cfg_ini->enable5gEBT;
+
halStatus = sme_UpdateConfig( pHddCtx->hHal, &smeConfig);
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 7eb2db32d027..495fd8855ec5 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -8871,9 +8871,15 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_TDLS
+#if TDLS_MGMT_VERSION2
static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
u8 *peer, u8 action_code, u8 dialog_token,
- u16 status_code, const u8 *buf, size_t len)
+ u16 status_code, u32 peer_capability, const u8 *buf, size_t len)
+#else
+static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
+ u8 *peer, u8 action_code, u8 dialog_token,
+ u16 status_code, const u8 *buf, size_t len)
+#endif
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
@@ -8884,6 +8890,10 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d
int responder;
long rc;
tANI_U16 numCurrTdlsPeers;
+#if !(TDLS_MGMT_VERSION2)
+ u32 peer_capability;
+ peer_capability = 0;
+#endif
if (NULL == pHddCtx || NULL == pHddCtx->cfg_ini)
{
@@ -9334,9 +9344,13 @@ int wlan_hdd_cfg80211_send_tdls_discover_req(struct wiphy *wiphy,
hddLog(VOS_TRACE_LEVEL_INFO,
"tdls send discover req: "MAC_ADDRESS_STR,
MAC_ADDR_ARRAY(peer));
-
+#if TDLS_MGMT_VERSION2
+ return wlan_hdd_cfg80211_tdls_mgmt(wiphy, dev, peer,
+ WLAN_TDLS_DISCOVERY_REQUEST, 1, 0, 0, NULL, 0);
+#else
return wlan_hdd_cfg80211_tdls_mgmt(wiphy, dev, peer,
WLAN_TDLS_DISCOVERY_REQUEST, 1, 0, NULL, 0);
+#endif
}
#endif
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index f555dc13d4d4..74587e762a4f 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -111,8 +111,10 @@ extern void hdd_wlan_initial_scan(hdd_context_t *pHddCtx);
extern struct notifier_block hdd_netdev_notifier;
extern tVOS_CON_MODE hdd_get_conparam ( void );
+#ifdef QCA_WIFI_ISOC
static struct timer_list ssr_timer;
static bool ssr_timer_started;
+#endif /* QCA_WIFI_ISOC */
//Callback invoked by PMC to report status of standby request
void hdd_suspend_standby_cbk (void *callbackContext, eHalStatus status)
@@ -1439,6 +1441,7 @@ void hdd_set_wlan_suspend_mode(bool suspend)
hdd_resume_wlan();
}
+#ifdef QCA_WIFI_ISOC
static void hdd_ssr_timer_init(void)
{
init_timer(&ssr_timer);
@@ -1476,6 +1479,7 @@ static void hdd_ssr_timer_start(int msec)
add_timer(&ssr_timer);
ssr_timer_started = true;
}
+#endif /* QCA_WIFI_ISOC */
/* the HDD interface to WLAN driver shutdown,
* the primary shutdown function in SSR
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 4a5a2169662c..88102e73cd44 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3459,6 +3459,9 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
/* Proceed with reassoc */
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
handoffInfo.channel = channel;
+#ifndef QCA_WIFI_ISOC
+ handoffInfo.src = REASSOC;
+#endif
vos_mem_copy(handoffInfo.bssid, targetApBssid, sizeof(tSirMacAddr));
sme_HandoffRequest(pHddCtx->hHal, &handoffInfo);
#endif
@@ -3684,6 +3687,61 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
else if (strncmp(command, "FASTREASSOC", 11) == 0)
{
+#ifndef QCA_WIFI_ISOC
+ tANI_U8 *value = command;
+ tANI_U8 channel = 0;
+ tSirMacAddr targetApBssid;
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ tCsrHandoffRequest handoffInfo;
+#endif
+ hdd_station_ctx_t *pHddStaCtx = NULL;
+ pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+
+ /* if not associated, no need to proceed with reassoc */
+ if (eConnectionState_Associated != pHddStaCtx->conn_info.connState)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Not associated!",__func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ status = hdd_parse_reassoc_command_data(value, targetApBssid, &channel);
+ if (eHAL_STATUS_SUCCESS != status)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: Failed to parse reassoc command data", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* if the target bssid is same as currently associated AP,
+ then no need to proceed with reassoc */
+ if (VOS_TRUE == vos_mem_compare(targetApBssid,
+ pHddStaCtx->conn_info.bssId, sizeof(tSirMacAddr)))
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s:Reassoc BSSID is same as currently associated AP bssid",__func__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Check channel number is a valid channel number */
+ if(VOS_STATUS_SUCCESS !=
+ wlan_hdd_validate_operation_channel(pAdapter, channel))
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Invalid Channel [%d] \n", __func__, channel);
+ return -EINVAL;
+ }
+
+ /* Proceed with reassoc */
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ handoffInfo.channel = channel;
+ handoffInfo.src = FASTREASSOC;
+ vos_mem_copy(handoffInfo.bssid, targetApBssid, sizeof(tSirMacAddr));
+ sme_HandoffRequest(pHddCtx->hHal, &handoffInfo);
+#endif
+#else
tANI_U8 *value = command;
tSirMacAddr targetApBssid;
tANI_U8 trigger = 0;
@@ -3724,6 +3782,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
smeIssueFastRoamNeighborAPEvent(WLAN_HDD_GET_HAL_CTX(pAdapter),
&targetApBssid[0],
(tSmeFastRoamTrigger)(trigger));
+#endif
}
#endif
#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
@@ -10625,11 +10684,13 @@ static int fwpath_changed_handler(const char *kmessage,
return param_set_copystring(kmessage, kp);
}
+#if !(defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC))
static int con_mode_handler(const char *kmessage,
struct kernel_param *kp)
{
return param_set_int(kmessage, kp);
}
+#endif
#else /* #ifdef MODULE */
/**---------------------------------------------------------------------------
@@ -10683,6 +10744,7 @@ static int fwpath_changed_handler(const char *kmessage,
return ret;
}
+#if !(defined(QCA_WIFI_2_0) && defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC))
/**---------------------------------------------------------------------------
\brief con_mode_handler() -
@@ -10705,6 +10767,7 @@ static int con_mode_handler(const char *kmessage, struct kernel_param *kp)
ret = kickstart_driver();
return ret;
}
+#endif
#endif /* #ifdef MODULE */
/**---------------------------------------------------------------------------
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 9cf1b0006336..c719258bb2a7 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -45,7 +45,10 @@
#include "wlan_hdd_cfg80211.h"
+#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER
static tANI_S32 wlan_hdd_get_tdls_discovery_peer_cnt(tdlsCtx_t *pHddTdlsCtx);
+#endif /* TDLS_USE_SEPARATE_DISCOVERY_TIMER */
+
static tANI_S32 wlan_hdd_tdls_peer_reset_discovery_processed(tdlsCtx_t *pHddTdlsCtx);
static void wlan_hdd_tdls_timers_destroy(tdlsCtx_t *pHddTdlsCtx);
static void wlan_hdd_tdls_peer_timers_destroy(tdlsCtx_t *pHddTdlsCtx);
@@ -84,6 +87,7 @@ void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx,
}
#endif
+#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER
static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx,
tANI_BOOLEAN mutexLock,
v_U32_t discoveryExpiry)
@@ -122,7 +126,6 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx,
return;
}
-#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER
static v_VOID_t wlan_hdd_tdls_discover_peer_cb( v_PVOID_t userData )
{
int i;
@@ -241,7 +244,7 @@ done:
mutex_unlock(&pHddCtx->tdls_lock);
return;
}
-#endif
+#endif /* TDLS_USE_SEPARATE_DISCOVERY_TIMER */
#ifndef QCA_WIFI_2_0
static v_VOID_t wlan_hdd_tdls_update_peer_cb( v_PVOID_t userData )
@@ -395,6 +398,7 @@ next_peer:
}
#endif
+#ifndef QCA_WIFI_2_0
static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData )
{
#ifdef CONFIG_TDLS_IMPLICIT
@@ -452,6 +456,7 @@ static v_VOID_t wlan_hdd_tdls_idle_cb( v_PVOID_t userData )
mutex_unlock(&pHddCtx->tdls_lock);
#endif
}
+#endif /* QCA_WIFI_2_0 */
static v_VOID_t wlan_hdd_tdls_discovery_timeout_peer_cb(v_PVOID_t userData)
{
@@ -1548,6 +1553,7 @@ static tANI_S32 wlan_hdd_tdls_peer_reset_discovery_processed(tdlsCtx_t *pHddTdls
return 0;
}
+#ifdef TDLS_USE_SEPARATE_DISCOVERY_TIMER
static tANI_S32 wlan_hdd_get_tdls_discovery_peer_cnt(tdlsCtx_t *pHddTdlsCtx)
{
int i;
@@ -1572,6 +1578,7 @@ static tANI_S32 wlan_hdd_get_tdls_discovery_peer_cnt(tdlsCtx_t *pHddTdlsCtx)
}
return discovery_peer_cnt;
}
+#endif /* TDLS_USE_SEPARATE_DISCOVERY_TIMER */
tANI_U16 wlan_hdd_tdlsConnectedPeers(hdd_adapter_t *pAdapter)
{
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index d7e5b652e13d..b4f43132ae36 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -241,6 +241,8 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#define WE_SET_EARLY_RX_ADJUST_PAUSE 80
#define WE_SET_MC_RATE 81
#define WE_SET_EARLY_RX_DRIFT_SAMPLE 82
+/* Private ioctl for packet power save */
+#define WE_PPS_5G_EBT 83
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1)
@@ -5544,6 +5546,18 @@ static int iw_setint_getnone(struct net_device *dev, struct iw_request_info *inf
break;
}
+ case WE_PPS_5G_EBT:
+ {
+ if (pAdapter->device_mode != WLAN_HDD_INFRA_STATION)
+ return -EINVAL;
+
+ hddLog(LOG1, "WMI_VDEV_PPS_5G_EBT val %d", set_value);
+ ret = process_wma_set_command((int)pAdapter->sessionId,
+ (int)WMI_VDEV_PPS_5G_EBT,
+ set_value, PPS_CMD);
+ break;
+ }
+
case WE_SET_HTSMPS:
{
hddLog(LOG1, "WE_SET_HTSMPS val %d", set_value);
@@ -10070,6 +10084,10 @@ static const struct iw_priv_args we_private_args[] = {
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0, "rssi_chk" },
+ { WE_PPS_5G_EBT,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0, "5g_ebt" },
+
{ WE_SET_HTSMPS,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
0, "htsmps" },
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index 493ab1beb868..38564e274d97 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -387,6 +387,7 @@ static void hdd_wmm_notify_app (hdd_wmm_qos_context_t* pQosContext)
}
+#ifndef QCA_WIFI_2_0
/**
@brief hdd_wmm_is_access_allowed() - function which determines if access
is allowed for the given AC. this is designed to be called during SME
@@ -439,6 +440,7 @@ static v_BOOL_t hdd_wmm_is_access_allowed(hdd_adapter_t* pAdapter,
// we meet all of the criteria for access
return VOS_TRUE;
}
+#endif /* QCA_WIFI_2_0 */
#ifdef FEATURE_WLAN_ESE
/**
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 5052601e821f..f25b4494149f 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1105,6 +1105,7 @@ typedef struct sAniSirGlobal
#ifdef QCA_WIFI_2_0
tANI_U16 mgmtSeqNum;
#endif /* QCA_WIFI_2_0 */
+ v_BOOL_t enable5gEBT;
} tAniSirGlobal;
typedef enum
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 6554e5c67cf2..99075fbbb1e1 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 76
+#define QWLAN_VERSION_BUILD 77
-#define QWLAN_VERSIONSTR "1.0.0.76"
+#define QWLAN_VERSIONSTR "1.0.0.77"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 4841972ecc29..f0d1f79825a8 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4450,6 +4450,9 @@ typedef struct sAniHandoffReq
tANI_U8 sessionId;
tANI_U8 bssid[WNI_CFG_BSSID_LEN];
tANI_U8 channel;
+#ifndef QCA_WIFI_ISOC
+ tANI_U8 handoff_src;
+#endif
} tAniHandoffReq, *tpAniHandoffReq;
typedef struct sSirScanOffloadReq {
diff --git a/CORE/MAC/src/pe/lim/limLogDump.c b/CORE/MAC/src/pe/lim/limLogDump.c
index 75b43e0c7b8b..69b89ec90323 100644
--- a/CORE/MAC/src/pe/lim/limLogDump.c
+++ b/CORE/MAC/src/pe/lim/limLogDump.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -2436,6 +2436,7 @@ dump_send_plm_start(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2,
}
#endif
+#ifndef QCA_WIFI_2_0
/* API to fill Rate Info based on mac efficiency
* arg 1: mac efficiency to be used to calculate mac thorughput for a given rate index
* arg 2: starting rateIndex to apply the macEfficiency to
@@ -2448,6 +2449,7 @@ dump_limRateInfoBasedOnMacEff(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2,
WDTS_FillRateInfo((tANI_U8)(arg1), (tANI_U16)(arg2), (tANI_U16)(arg3));
return p;
}
+#endif /* QCA_WIFI_2_0 */
static tDumpFuncEntry limMenuDumpTable[] = {
{0, "PE (300-499)", NULL},
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 31bd56c11ea4..e96b75a372cf 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -107,7 +107,6 @@ static void limProcessSmeChannelChangeRequest(tpAniSirGlobal pMac,
tANI_U32 *pMsg);
static void limProcessSmeStartBeaconReq(tpAniSirGlobal pMac,
tANI_U32 *pMsg);
-static void limProcessSmeDfsCacIndication(tpAniSirGlobal pMac, tANI_U32 *pMsg);
static void limProcessSmeDfsCsaIeRequest(tpAniSirGlobal pMac, tANI_U32 *pMsg);
void __limProcessSmeAssocCnfNew(tpAniSirGlobal, tANI_U32, tANI_U32 *);
@@ -3542,7 +3541,8 @@ __limHandleSmeStopBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
tpPESession psessionEntry;
tANI_U8 smesessionId;
tANI_U16 smetransactionId;
-
+ tANI_U8 i = 0;
+ tpDphHashNode pStaDs = NULL;
limGetSessionInfo(pMac,(tANI_U8 *)pMsgBuf,&smesessionId,&smetransactionId);
@@ -3615,6 +3615,23 @@ __limHandleSmeStopBssRequest(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
//limDelBss is also called as part of coalescing, when we send DEL BSS followed by Add Bss msg.
pMac->lim.gLimIbssCoalescingHappened = false;
+ for(i = 1 ; i < pMac->lim.gLimAssocStaLimit ; i++)
+ {
+ pStaDs = dphGetHashEntry(pMac, i, &psessionEntry->dph.dphHashTable);
+ if (NULL == pStaDs)
+ continue;
+ status = limDelSta(pMac, pStaDs, false, psessionEntry) ;
+ if(eSIR_SUCCESS == status)
+ {
+ limDeleteDphHashEntry(pMac, pStaDs->staAddr, pStaDs->assocId, psessionEntry) ;
+ limReleasePeerIdx(pMac, pStaDs->assocId, psessionEntry) ;
+ }
+ else
+ {
+ limLog(pMac, LOGE, FL("limDelSta failed with Status : %d"), status);
+ VOS_ASSERT(0) ;
+ }
+ }
/* send a delBss to HAL and wait for a response */
status = limDelBss(pMac, NULL,psessionEntry->bssIdx,psessionEntry);
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index acb651c64ca4..423b68426eee 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -381,6 +381,21 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
printk("%s: no Patch file defined\n", __func__);
return EOK;
case ATH_BOARD_DATA_FILE:
+#ifdef QCA_WIFI_FTM
+ if (vos_get_conparam() == VOS_FTM_MODE) {
+#ifdef CONFIG_CNSS
+ filename = fw_files.utf_board_data;
+#else
+ filename = QCA_BOARD_DATA_FILE;
+#endif
+#ifdef QCA_SIGNED_SPLIT_BINARY_SUPPORT
+ bin_sign = TRUE;
+#endif
+ printk(KERN_INFO "%s: Loading board data file %s\n",
+ __func__, filename);
+ break;
+ }
+#endif /* QCA_WIFI_FTM */
#ifdef CONFIG_CNSS
filename = fw_files.board_data;
#else
@@ -398,7 +413,26 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
if (file == ATH_OTP_FILE)
return -ENOENT;
+
+#if defined(QCA_WIFI_FTM) && defined(CONFIG_CNSS)
+ /* Try default board data file if FTM specific
+ * board data file is not present. */
+ if (filename == fw_files.utf_board_data) {
+ filename = fw_files.board_data;
+ printk("%s: Trying to load default %s\n",
+ __func__, filename);
+ if (request_firmware(&fw_entry, filename,
+ scn->sc_osdev->device) != 0) {
+ printk("%s: Failed to get %s\n",
+ __func__, filename);
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+#else
return -1;
+#endif
}
if (!fw_entry || !fw_entry->data) {
@@ -674,7 +708,7 @@ static void ramdump_work_handler(struct work_struct *ramdump)
goto out_fail;
}
-#ifdef CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC
+#ifdef TARGET_RAMDUMP_AFTER_KERNEL_PANIC
if (ramdump_scn->crash_shutdown) {
if (!hif_pci_check_soc_status(ramdump_scn->hif_sc)
&& !ol_copy_ramdump(ramdump_scn))
@@ -763,7 +797,7 @@ void ol_target_failure(void *instance, A_STATUS status)
return;
}
-#ifdef CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC
+#ifdef TARGET_RAMDUMP_AFTER_KERNEL_PANIC
if (scn->crash_shutdown)
printk("XXX TARGET ASSERTED because of Kernel Panic XXX\n");
else
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 8983fd0a4e3f..f95c0ad0e5ff 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -4591,6 +4591,7 @@ typedef enum wmi_peer_sta_kickout_reason {
WMI_PEER_STA_KICKOUT_REASON_XRETRY = 1,
WMI_PEER_STA_KICKOUT_REASON_INACTIVITY = 2,
WMI_PEER_STA_KICKOUT_REASON_IBSS_DISCONNECT = 3,
+ WMI_PEER_STA_KICKOUT_REASON_TDLS_DISCONNECT = 4, /* TDLS peer has disappeared. All tx is failing */
} PEER_KICKOUT_REASON;
typedef struct {
@@ -4832,7 +4833,8 @@ typedef enum {
PKT_PWR_SAVE_DELIM_CRC_FAIL = 0x0040,
PKT_PWR_SAVE_GID_NSTS_ZERO = 0x0080,
PKT_PWR_SAVE_RSSI_CHECK = 0x0100,
- WMI_PKT_PWR_SAVE_MAX = 0x0200,
+ PKT_PWR_SAVE_5G_EBT = 0x0200,
+ WMI_PKT_PWR_SAVE_MAX = 0x0400,
} WMI_PKT_PWR_SAVE_TYPE;
typedef struct {
diff --git a/CORE/SERVICES/DFS/src/dfs.c b/CORE/SERVICES/DFS/src/dfs.c
index c8d40d5b0049..e4f4bfc34bfa 100644
--- a/CORE/SERVICES/DFS/src/dfs.c
+++ b/CORE/SERVICES/DFS/src/dfs.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002-2014 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -78,6 +78,7 @@ int domainoverride=DFS_UNINIT_DOMAIN;
int usenol=1;
u_int32_t dfs_debug_level=ATH_DEBUG_DFS;
+#if 0 /* the code to call this is curently commented-out below */
/*
* Mark a channel as having interference detected upon it.
*
@@ -126,7 +127,7 @@ dfs_channel_mark_radar(struct ath_dfs *dfs, struct ieee80211_channel *chan)
dfs_nol_update(dfs);
}
}
-
+#endif /* #if 0 */
static OS_TIMER_FUNC(dfs_task)
{
diff --git a/CORE/SERVICES/DFS/src/dfs_process_phyerr.c b/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
index 489241c88b0c..49a13a3be086 100644
--- a/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
+++ b/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
@@ -461,6 +461,7 @@ dfs_process_phyerr_merlin(struct ath_dfs *dfs, void *buf,
static void
dump_phyerr_contents(const char *d, int len)
{
+#ifdef CONFIG_ENABLE_DUMP_PHYERR_CONTENTS
int i, n, bufsize = 64;
/*
@@ -495,6 +496,7 @@ dump_phyerr_contents(const char *d, int len)
*/
if (n != 0)
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO, "%s: %s\n", __func__, buf);
+#endif /* def CONFIG_ENABLE_DUMP_PHYERR_CONTENTS */
}
void
@@ -515,7 +517,7 @@ dfs_process_phyerr(struct ieee80211com *ic, void *buf, u_int16_t datalen,
}
dfs->dfs_phyerr_count++;
- //dump_phyerr_contents(buf, datalen);
+ dump_phyerr_contents(buf, datalen);
/*
* XXX The combined_rssi_ok support has been removed.
* This was only clear for Owl.
@@ -535,7 +537,7 @@ dfs_process_phyerr(struct ieee80211com *ic, void *buf, u_int16_t datalen,
* start queueing data for new channel. (EV74162)
*/
if (dfs->dfs_debug_mask & ATH_DEBUG_DFS_PHYERR_PKT)
- //dump_phyerr_contents(buf, datalen);
+ dump_phyerr_contents(buf, datalen);
if (IEEE80211_IS_CHAN_RADAR(chan)) {
DFS_DPRINTK(dfs, ATH_DEBUG_DFS1,
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
index 35a15a43af38..da8bd48121f1 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
@@ -1442,21 +1442,6 @@ hif_pci_remove(struct pci_dev *pdev)
mem = (void __iomem *)sc->mem;
-#if defined(CPU_WARM_RESET_WAR)
- /* Currently CPU warm reset sequence is tested only for AR9888_REV2
- * Need to enable for AR9888_REV1 once CPU warm reset sequence is
- * verified for AR9888_REV1
- */
- if (scn->target_version == AR9888_REV2_VERSION) {
- hif_pci_device_warm_reset(sc);
- }
- else {
- hif_pci_device_reset(sc);
- }
-#else
- hif_pci_device_reset(sc);
-#endif
-
pci_disable_msi(pdev);
A_FREE(scn);
A_FREE(sc->hif_device);
@@ -1527,7 +1512,7 @@ void hif_pci_shutdown(struct pci_dev *pdev)
void hif_pci_crash_shutdown(struct pci_dev *pdev)
{
-#ifdef CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC
+#ifdef TARGET_RAMDUMP_AFTER_KERNEL_PANIC
struct hif_pci_softc *sc;
struct ol_softc *scn;
int status;
@@ -1755,3 +1740,24 @@ void hif_disable_isr(void *ol_sc)
/* Cancel the pending tasklet */
tasklet_kill(&hif_sc->intr_tq);
}
+
+void hif_reset_soc(void *ol_sc)
+{
+ struct ol_softc *scn = (struct ol_softc *)ol_sc;
+ struct hif_pci_softc *sc = scn->hif_sc;
+
+#if defined(CPU_WARM_RESET_WAR)
+ /* Currently CPU warm reset sequence is tested only for AR9888_REV2
+ * Need to enable for AR9888_REV1 once CPU warm reset sequence is
+ * verified for AR9888_REV1
+ */
+ if (scn->target_version == AR9888_REV2_VERSION) {
+ hif_pci_device_warm_reset(sc);
+ }
+ else {
+ hif_pci_device_reset(sc);
+ }
+#else
+ hif_pci_device_reset(sc);
+#endif
+}
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.h b/CORE/SERVICES/HIF/PCIe/if_pci.h
index f66142a35f66..b79bcdeadaf8 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.h
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.h
@@ -114,6 +114,9 @@ adf_os_size_t initBufferCount(adf_os_size_t maxSize);
void hif_init_pdev_txrx_handle(void *ol_sc, void *txrx_handle);
void hif_disable_isr(void *ol_sc);
+/* Function to reset SoC*/
+void hif_reset_soc(void *ol_sc);
+
void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc);
#ifndef REMOVE_PKT_LOG
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 3ac5c64d21c9..0dbc2da0fe65 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -160,8 +160,6 @@ static void wma_send_msg(tp_wma_handle wma_handle, u_int16_t msg_type,
void *body_ptr, u_int32_t body_val);
#ifdef QCA_IBSS_SUPPORT
-static void wma_send_beacon_tmpl(WMA_HANDLE handle,
- u_int8_t vdev_id);
static void wma_data_tx_ack_comp_hdlr(void *wma_context,
adf_nbuf_t netbuf,
int32_t status);
@@ -201,7 +199,6 @@ wma_process_ftm_command(tp_wma_handle wma_handle,
/*DFS Attach*/
struct ieee80211com* wma_dfs_attach(struct ieee80211com *ic);
-static void wma_set_regdomain(a_uint32_t regdmn);
static void wma_set_bss_rate_flags(struct wma_txrx_node *iface,
tpAddBssParams add_bss);
/*Configure DFS with radar tables and regulatory domain*/
@@ -832,9 +829,10 @@ static int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len)
return -EINVAL;
}
- WMA_LOGA("PEER:[%pM]\n BSSID:[%pM]\nINTERFACE:%d\npeer_ID:%d",
- macaddr, wma->interfaces[vdev_id].addr, vdev_id,
- peer_id);
+ WMA_LOGA("%s: PEER:[%pM], BSSID:[%pM], ADDR:[%pN], INTERFACE:%d, peer_id:%d, reason:%d",
+ __func__, macaddr, wma->interfaces[vdev_id].bssid,
+ wma->interfaces[vdev_id].addr, vdev_id,
+ peer_id, kickout_event->reason);
if (kickout_event->reason == WMI_PEER_STA_KICKOUT_REASON_IBSS_DISCONNECT) {
p_inactivity = (tpSirIbssPeerInactivityInd)
@@ -848,6 +846,26 @@ static int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len)
vos_mem_copy(p_inactivity->peerAddr, macaddr, IEEE80211_ADDR_LEN);
wma_send_msg(wma, WDA_IBSS_PEER_INACTIVITY_IND, (void *)p_inactivity, 0);
}
+#ifdef FEATURE_WLAN_TDLS
+ else if (kickout_event->reason ==
+ WMI_PEER_STA_KICKOUT_REASON_TDLS_DISCONNECT) {
+ del_sta_ctx =
+ (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
+ if (!del_sta_ctx) {
+ WMA_LOGE("%s: mem alloc failed for tDeleteStaContext for TDLS peer: %pM",
+ __func__, macaddr);
+ return -EINVAL;
+ }
+
+ del_sta_ctx->staId = peer_id;
+ vos_mem_copy(del_sta_ctx->addr2, macaddr, IEEE80211_ADDR_LEN);
+ vos_mem_copy(del_sta_ctx->bssId, wma->interfaces[vdev_id].bssid,
+ IEEE80211_ADDR_LEN);
+ del_sta_ctx->reasonCode = HAL_DEL_STA_REASON_CODE_KEEP_ALIVE;
+ wma_send_msg(wma, SIR_LIM_DELETE_STA_CONTEXT_IND, (void *)del_sta_ctx,
+ 0);
+ }
+#endif /* FEATURE_WLAN_TDLS */
else {
del_sta_ctx =
(tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
@@ -5134,10 +5152,11 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle,
WMA_LOGI("%s: command 0x%x", __func__, roam_req->Command);
if (!wma_handle->roam_offload_enabled) {
- /* roam scan offload is not enabled in firmware.
- * Cannot initialize it in the middle of connection.
- */
- return VOS_STATUS_E_PERM;
+ /* roam scan offload is not enabled in firmware.
+ * Cannot initialize it in the middle of connection.
+ */
+ vos_mem_free(roam_req);
+ return VOS_STATUS_E_PERM;
}
switch (roam_req->Command) {
case ROAM_SCAN_OFFLOAD_START:
@@ -6447,43 +6466,62 @@ send_resp:
wma_send_msg(wma, WDA_SWITCH_CHANNEL_RSP, (void *)params, 0);
}
-static WLAN_PHY_MODE wma_peer_phymode(tSirNwType nw_type, u_int8_t is_ht,
- u_int8_t is_cw40, u_int8_t is_vht, u_int8_t is_cw_vht)
+static WLAN_PHY_MODE wma_peer_phymode(tSirNwType nw_type, u_int8_t sta_type,
+ u_int8_t is_ht, u_int8_t is_cw40, u_int8_t is_vht, u_int8_t is_cw_vht)
{
WLAN_PHY_MODE phymode = MODE_UNKNOWN;
switch (nw_type) {
case eSIR_11B_NW_TYPE:
- phymode = MODE_11B;
+#ifdef FEATURE_WLAN_TDLS
+ if (STA_ENTRY_TDLS_PEER == sta_type) {
+ if (is_vht) {
+ if (is_cw_vht)
+ phymode = MODE_11AC_VHT80;
+ else
+ phymode = (is_cw40) ?
+ MODE_11AC_VHT40 :
+ MODE_11AC_VHT20;
+ }
+ else if (is_ht) {
+ phymode = (is_cw40) ?
+ MODE_11NG_HT40 : MODE_11NG_HT20;
+ } else
+ phymode = MODE_11B;
+ } else
+#endif /* FEATURE_WLAN_TDLS */
+ phymode = MODE_11B;
break;
case eSIR_11G_NW_TYPE:
- if (is_vht) {
- if (is_cw_vht)
- phymode = MODE_11AC_VHT80;
- else
- phymode = (is_cw40) ?
- MODE_11AC_VHT40 :
- MODE_11AC_VHT20;
- }
- else if (is_ht)
+ if (is_vht) {
+ if (is_cw_vht)
+ phymode = MODE_11AC_VHT80;
+ else
+ phymode = (is_cw40) ?
+ MODE_11AC_VHT40 :
+ MODE_11AC_VHT20;
+ }
+ else if (is_ht) {
phymode = (is_cw40) ?
- MODE_11NG_HT40 : MODE_11NG_HT20;
- else
+ MODE_11NG_HT40 :
+ MODE_11NG_HT20;
+ } else
phymode = MODE_11G;
break;
case eSIR_11A_NW_TYPE:
- if (is_vht) {
- if (is_cw_vht)
- phymode = MODE_11AC_VHT80;
- else
- phymode = (is_cw40) ?
- MODE_11AC_VHT40 :
- MODE_11AC_VHT20;
- }
- else if (is_ht)
+ if (is_vht) {
+ if (is_cw_vht)
+ phymode = MODE_11AC_VHT80;
+ else
+ phymode = (is_cw40) ?
+ MODE_11AC_VHT40 :
+ MODE_11AC_VHT20;
+ }
+ else if (is_ht) {
phymode = (is_cw40) ?
- MODE_11NA_HT40 : MODE_11NA_HT20;
- else
+ MODE_11NA_HT40 :
+ MODE_11NA_HT20;
+ } else
phymode = MODE_11A;
break;
default:
@@ -6491,8 +6529,8 @@ static WLAN_PHY_MODE wma_peer_phymode(tSirNwType nw_type, u_int8_t is_ht,
break;
}
WMA_LOGD("%s: nw_type %d is_ht %d is_cw40 %d is_vht %d is_cw_vht %d\
- phymode %d", __func__, nw_type, is_ht, is_cw40,
- is_vht, is_cw_vht, phymode);
+ phymode %d", __func__, nw_type, is_ht, is_cw40,
+ is_vht, is_cw_vht, phymode);
return phymode;
}
@@ -6552,10 +6590,11 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma,
vos_mem_zero(&peer_legacy_rates, sizeof(wmi_rate_set));
vos_mem_zero(&peer_ht_rates, sizeof(wmi_rate_set));
- phymode = wma_peer_phymode(nw_type, params->htCapable,
- params->txChannelWidthSet,
- params->vhtCapable,
- params->vhtTxChannelWidthSet);
+ phymode = wma_peer_phymode(nw_type, params->staType,
+ params->htCapable,
+ params->txChannelWidthSet,
+ params->vhtCapable,
+ params->vhtTxChannelWidthSet);
/* Legacy Rateset */
rate_pos = (u_int8_t *) peer_legacy_rates.rates;
@@ -7355,6 +7394,11 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
(PKT_PWR_SAVE_RSSI_CHECK & 0xffff);
intr[vid].config.pps_params.rssi_chk = privcmd->param_value;
break;
+ case WMI_VDEV_PPS_5G_EBT:
+ pps_val = ((privcmd->param_value << 31) & 0xffff0000) |
+ (PKT_PWR_SAVE_5G_EBT & 0xffff);
+ intr[vid].config.pps_params.ebt_5g = privcmd->param_value;
+ break;
default:
WMA_LOGE("Invalid param id 0x%x", privcmd->param_id);
break;
@@ -8323,9 +8367,15 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
ol_txrx_peer_handle peer;
VOS_STATUS status;
struct wma_txrx_node *iface;
-#ifdef WLAN_FEATURE_11W
int ret = 0;
-#endif /* WLAN_FEATURE_11W */
+ int pps_val = 0;
+ tpAniSirGlobal pMac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE,
+ wma->vos_context);
+
+ if (NULL == pMac) {
+ WMA_LOGE("%s: Unable to get PE context", __func__);
+ goto send_fail_resp;
+ }
pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context);
@@ -8440,6 +8490,15 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
wmi_unified_send_txbf(wma, &add_bss->staContext);
+ pps_val = ((pMac->enable5gEBT << 31) & 0xffff0000) | (PKT_PWR_SAVE_5G_EBT & 0xffff);
+ ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id,
+ WMI_VDEV_PARAM_PACKET_POWERSAVE,
+ pps_val);
+ if (ret)
+ WMA_LOGE("Failed to send wmi packet power save cmd");
+ else
+ WMA_LOGD("Sent PKT_PWR_SAVE_5G_EBT cmd to target, val = %x, ret = %d",
+ pps_val, ret);
wmi_unified_send_peer_assoc(wma, add_bss->nwType,
&add_bss->staContext);
@@ -10510,15 +10569,6 @@ static void wma_send_beacon(tp_wma_handle wma, tpSendbeaconParams bcn_info)
wma_set_sap_keepalive(wma, vdev_id);
}
-#ifdef QCA_IBSS_SUPPORT
-static void wma_send_beacon_tmpl(WMA_HANDLE handle,
- u_int8_t vdev_id)
-{
- /*TODO: implement after beacon template is created by PE and send
- to target upon received WMI_SEND_BEACON command */
-}
-#endif
-
#if !defined(REMOVE_PKT_LOG) && !defined(QCA_WIFI_ISOC)
static VOS_STATUS wma_pktlog_wmi_send_cmd(WMA_HANDLE handle,
struct ath_pktlog_wmi_params *params)
@@ -16002,20 +16052,6 @@ static void wma_roam_better_ap_handler(tp_wma_handle wma, u_int32_t vdev_id)
ret = tlshim_mgmt_roam_event_ind(wma->vos_context, vdev_id);
}
-/* function : wma_roam_better_ap_handler
- * Descriptin : Handler for WMI_ROAM_REASON_BETTER_AP event from roam firmware in Rome.
- * : This event means roam algorithm in Rome has found a better matching
- * : candidate AP. The indication is sent through tl_shim as by repeating
- * : the last beacon. Hence this routine calls a tlshim routine.
- * Args :
- * Returns :
- */
-static void wma_roam_bmiss_scan_ap_handler(tp_wma_handle wma, u_int32_t vdev_id)
-{
- VOS_STATUS ret;
- ret = tlshim_mgmt_roam_event_ind(wma->vos_context, vdev_id);
-}
-
/* function : wma_roam_event_callback
* Descriptin : Handler for all events from roam engine in firmware
* Args :
@@ -17680,44 +17716,6 @@ v_VOID_t wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info)
}
}
-static void wma_set_regdomain(a_uint32_t regdmn)
-{
- void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
- tp_wma_handle wma = vos_get_context(VOS_MODULE_ID_WDA, vos_context);
- u_int32_t modeSelect = 0xFFFFFFFF;
-
- if (NULL == wma) {
- WMA_LOGE("Failed to set regulatory domain");
- return;
- }
-
- /* Set DFS regulatory domain */
- wma_set_dfs_regdomain(wma);
-
- switch (wma->phy_capability) {
- case WMI_11G_CAPABILITY:
- case WMI_11NG_CAPABILITY:
- modeSelect &= ~(REGDMN_MODE_11A | REGDMN_MODE_TURBO |
- REGDMN_MODE_108A | REGDMN_MODE_11A_HALF_RATE |
- REGDMN_MODE_11A_QUARTER_RATE | REGDMN_MODE_11NA_HT20 |
- REGDMN_MODE_11NA_HT40PLUS | REGDMN_MODE_11NA_HT40MINUS |
- REGDMN_MODE_11AC_VHT20 | REGDMN_MODE_11AC_VHT40PLUS |
- REGDMN_MODE_11AC_VHT40MINUS | REGDMN_MODE_11AC_VHT80);
- break;
- case WMI_11A_CAPABILITY:
- case WMI_11NA_CAPABILITY:
- case WMI_11AC_CAPABILITY:
- modeSelect &= ~(REGDMN_MODE_11B | REGDMN_MODE_11G |
- REGDMN_MODE_108G | REGDMN_MODE_11NG_HT20 |
- REGDMN_MODE_11NG_HT40PLUS | REGDMN_MODE_11NG_HT40MINUS |
- REGDMN_MODE_11AC_VHT20_2G | REGDMN_MODE_11AC_VHT40_2G |
- REGDMN_MODE_11AC_VHT80_2G);
- break;
- }
-
- return;
-}
-
/* function : wma_rx_ready_event
* Descriptin :
* Args :
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 69ad4608d4ee..580ccbceaa73 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -298,6 +298,7 @@ struct pps {
v_BOOL_t delim_fail;
v_BOOL_t nsts_zero;
v_BOOL_t rssi_chk;
+ v_BOOL_t ebt_5g;
};
struct qpower_params {
@@ -1395,7 +1396,8 @@ typedef enum {
WMI_VDEV_PPS_DELIM_CRC_FAIL = 6,
WMI_VDEV_PPS_GID_NSTS_ZERO = 7,
WMI_VDEV_PPS_RSSI_CHECK = 8,
- WMI_VDEV_VHT_SET_GID_MGMT = 9
+ WMI_VDEV_VHT_SET_GID_MGMT = 9,
+ WMI_VDEV_PPS_5G_EBT = 10
} packet_power_save;
typedef enum {
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
index 6ec4fd345b65..1df884cd8c81 100644
--- a/CORE/SERVICES/WMI/wmi_unified.c
+++ b/CORE/SERVICES/WMI/wmi_unified.c
@@ -665,6 +665,7 @@ int wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
return 0;
}
+#if 0 /* currently not used */
static int wmi_unified_event_rx(struct wmi_unified *wmi_handle,
wmi_buf_t evt_buf)
{
@@ -699,6 +700,7 @@ end:
adf_nbuf_free(evt_buf);
return status;
}
+#endif /* 0 */
/*
* Temporarily added to support older WMI events. We should move all events to unified
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 1bee832bed03..6ed035c5bace 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -905,7 +905,6 @@ typedef struct tagCsrRoamProfile
tVOS_CON_MODE csrPersona;
tANI_U8 disableDFSChSwitch;
-
}tCsrRoamProfile;
@@ -1428,10 +1427,21 @@ typedef void * tScanResultHandle;
#define CSR_INVALID_SCANRESULT_HANDLE (NULL)
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+#ifndef QCA_WIFI_ISOC
+typedef enum
+{
+ REASSOC = 0,
+ FASTREASSOC = 1
+}handoff_src;
+#endif
+
typedef struct tagCsrHandoffRequest
{
tCsrBssid bssid;
tANI_U8 channel;
+#ifndef QCA_WIFI_ISOC
+ tANI_U8 src; /* To check if its a REASSOC or a FASTREASSOC IOCTL */
+#endif
}tCsrHandoffRequest;
#endif
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index c3b8583f6a8a..8ff911b7ce79 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -131,6 +131,7 @@ typedef struct _smeConfigParams
tANI_BOOLEAN pnoOffload;
tANI_U8 fEnableDebugLog;
tANI_U8 max_intf_count;
+ tANI_BOOLEAN enable5gEBT;
} tSmeConfigParams, *tpSmeConfigParams;
typedef enum
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 9a471e6486c8..1370dee6e70e 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -17301,6 +17301,9 @@ eHalStatus csrHandoffRequest(tpAniSirGlobal pMac,
pMsg->msgLen = (tANI_U16)sizeof(tAniHandoffReq);
pMsg->sessionId = pMac->roam.neighborRoamInfo.csrSessionId;
pMsg->channel = pHandoffInfo->channel;
+#ifndef QCA_WIFI_ISOC
+ pMsg->handoff_src = pHandoffInfo->src;
+#endif
vos_mem_copy(pMsg->bssid,
pHandoffInfo->bssid,
6);
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index cfccc6a3f047..9dbe0855cf66 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -88,6 +88,12 @@ RSSI *cannot* be more than 0xFF or less than 0 for meaningful WLAN operation
#define CSR_SCAN_HANDOFF_DELTA 10
#define MAX_ACTIVE_SCAN_FOR_ONE_CHANNEL 140
#define MIN_ACTIVE_SCAN_FOR_ONE_CHANNEL 120
+
+#ifndef QCA_WIFI_ISOC
+#define MAX_ACTIVE_SCAN_FOR_ONE_CHANNEL_FASTREASSOC 30
+#define MIN_ACTIVE_SCAN_FOR_ONE_CHANNEL_FASTREASSOC 20
+#endif
+
#define CSR_SCAN_OVERALL_SCORE( rssi ) \
(( rssi < CSR_SCAN_MAX_SCORE_VAL ) \
? (CSR_SCAN_MAX_SCORE_VAL-rssi) : CSR_SCAN_MIN_SCORE_VAL)
@@ -7278,8 +7284,19 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi
/* For one channel be good enpugh time to receive beacon atleast */
if( 1 == pProfile->ChannelInfo.numOfChannels )
{
- pScanCmd->u.scanCmd.u.scanRequest.maxChnTime = MAX_ACTIVE_SCAN_FOR_ONE_CHANNEL;
- pScanCmd->u.scanCmd.u.scanRequest.minChnTime = MIN_ACTIVE_SCAN_FOR_ONE_CHANNEL;
+#ifndef QCA_WIFI_ISOC
+ if(pMac->roam.neighborRoamInfo.handoffReqInfo.src == FASTREASSOC)
+ {
+ pScanCmd->u.scanCmd.u.scanRequest.maxChnTime = MAX_ACTIVE_SCAN_FOR_ONE_CHANNEL_FASTREASSOC;
+ pScanCmd->u.scanCmd.u.scanRequest.minChnTime = MIN_ACTIVE_SCAN_FOR_ONE_CHANNEL_FASTREASSOC;
+ pMac->roam.neighborRoamInfo.handoffReqInfo.src = 0; //reset this value
+ }
+ else
+#endif
+ {
+ pScanCmd->u.scanCmd.u.scanRequest.maxChnTime = MAX_ACTIVE_SCAN_FOR_ONE_CHANNEL;
+ pScanCmd->u.scanCmd.u.scanRequest.minChnTime = MIN_ACTIVE_SCAN_FOR_ONE_CHANNEL;
+ }
}
else
{
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index d8a5daa6207d..41c3f32d83dc 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -5303,6 +5303,9 @@ eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg)
{
pNeighborRoamInfo->handoffReqInfo.channel = pHandoffReqInfo->channel;
+#ifndef QCA_WIFI_ISOC
+ pNeighborRoamInfo->handoffReqInfo.src = pHandoffReqInfo->handoff_src;
+#endif
vos_mem_copy(pNeighborRoamInfo->handoffReqInfo.bssid,
pHandoffReqInfo->bssid,
6);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 5e26d5804463..8b53b84f3508 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1637,6 +1637,8 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams)
/* update interface configuration */
pMac->sme.max_intf_count = pSmeConfigParams->max_intf_count;
+ pMac->enable5gEBT = pSmeConfigParams->enable5gEBT;
+
return status;
}
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 97cddeffc503..38903f05150f 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -1024,6 +1024,11 @@ VOS_STATUS vos_stop( v_CONTEXT_t vosContext )
}
#endif
+#ifndef QCA_WIFI_ISOC
+ hif_disable_isr(((VosContextType*)vosContext)->pHIFContext);
+ hif_reset_soc(((VosContextType*)vosContext)->pHIFContext);
+#endif
+
/* SYS STOP will stop SME and MAC */
vosStatus = sysStop( vosContext);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -1041,10 +1046,6 @@ VOS_STATUS vos_stop( v_CONTEXT_t vosContext )
VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
}
-#ifndef QCA_WIFI_ISOC
- hif_disable_isr(((VosContextType*)vosContext)->pHIFContext);
-#endif
-
return VOS_STATUS_SUCCESS;
}
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index 9dd2ad73425c..a675ad0eaddf 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -72,10 +72,12 @@ static struct completion change_country_code;
#endif
+#ifndef CONFIG_ENABLE_LINUX_REG
static char crda_alpha2[2] = {0, 0}; /* country code from initial crda req */
static char run_time_alpha2[2] = {0, 0}; /* country code from none-default country req */
static v_BOOL_t crda_regulatory_entry_valid = VOS_FALSE;
static v_BOOL_t crda_regulatory_run_time_entry_valid = VOS_FALSE;
+#endif /* ndef CONFIG_ENABLE_LINUX_REG */
/*----------------------------------------------------------------------------
@@ -2473,6 +2475,7 @@ static int bw20_ch_index_to_bw40_ch_index(int k)
return m;
}
+#ifndef CONFIG_ENABLE_LINUX_REG
void crda_regulatory_entry_default(v_U8_t *countryCode, int domain_id)
{
int k;
@@ -2904,6 +2907,7 @@ static int create_crda_regulatory_entry_from_regd(struct wiphy *wiphy,
crda_regulatory_entry_post_processing(wiphy, request, nBandCapability, domain_id);
return 0;
}
+#endif /* ndef CONFIG_ENABLE_LINUX_REG */
#ifdef CONFIG_ENABLE_LINUX_REG
static int create_linux_regulatory_entry(struct wiphy *wiphy,
diff --git a/Kbuild b/Kbuild
index 98c0da8e8fcb..57ff90877935 100644
--- a/Kbuild
+++ b/Kbuild
@@ -142,6 +142,9 @@ CONFIG_QCA_SIGNED_SPLIT_BINARY_SUPPORT := 0
#Enable single firmware binary format
CONFIG_QCA_SINGLE_BINARY_SUPPORT := 0
+#Enable collecting target RAM dump after kernel panic
+CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC := 1
+
ifeq ($(CONFIG_CFG80211),y)
HAVE_CFG80211 := 1
else
@@ -1139,6 +1142,11 @@ ifeq ($(CONFIG_QCA_SINGLE_BINARY_SUPPORT), 1)
CDEFINES += -DQCA_SINGLE_BINARY_SUPPORT
endif
+#Enable collecting target RAM dump after kernel panic
+ifeq ($(CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC), 1)
+CDEFINES += -DTARGET_RAMDUMP_AFTER_KERNEL_PANIC
+endif
+
# Fix build for GCC 4.7
EXTRA_CFLAGS += -Wno-maybe-uninitialized -Wno-unused-function