Merge android-msm-wahoo-4.4-qt-qpr3 into android-msm-wahoo-4.4
SBMerger: 284775313
Change-Id: Id15c79bd513a5fcb898d857b32d8782977b3388a
Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
diff --git a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_main.c b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_main.c
index 9895853..836ebc7 100644
--- a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_main.c
+++ b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_main.c
@@ -4616,6 +4616,18 @@
hdd_wait_for_sme_close_sesion(hdd_ctx, adapter, false);
break;
+ case QDF_MONITOR_MODE:
+ wlan_hdd_scan_abort(adapter);
+ hdd_deregister_tx_flow_control(adapter);
+
+ /*
+ * It is possible that the caller of this function does not
+ * wish to close the session
+ */
+ if (bCloseSession)
+ hdd_wait_for_sme_close_sesion(hdd_ctx, adapter, true);
+ break;
+
case QDF_SAP_MODE:
hdd_ipa_flush(hdd_ctx);
diff --git a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_power.c b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_power.c
index 1d9e7c2..1eec69c 100644
--- a/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_power.c
+++ b/drivers/staging/qcacld-3.0/core/hdd/src/wlan_hdd_power.c
@@ -79,6 +79,7 @@
#include <wlan_logging_sock_svc.h>
#include "cds_utils.h"
#include "wlan_hdd_packet_filter_api.h"
+#include "cds_concurrency.h"
/* Preprocessor definitions and constants */
#define HDD_SSR_BRING_UP_TIME 30000
@@ -1949,6 +1950,11 @@
}
mutex_unlock(&pHddCtx->iface_change_lock);
+ if (cds_is_connection_in_progress(NULL, NULL)) {
+ hdd_err("Suspend rejected: conn in progress");
+ return -EINVAL;
+ }
+
/* If RADAR detection is in progress (HDD), prevent suspend. The flag
* "dfs_cac_block_tx" is set to true when RADAR is found and stay true
* until CAC is done for a SoftAP which is in started state.
diff --git a/drivers/staging/qcacld-3.0/core/sap/inc/sap_api.h b/drivers/staging/qcacld-3.0/core/sap/inc/sap_api.h
index 2292d8e..140a9e6 100644
--- a/drivers/staging/qcacld-3.0/core/sap/inc/sap_api.h
+++ b/drivers/staging/qcacld-3.0/core/sap/inc/sap_api.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -872,13 +872,6 @@
#endif
} tSap_SoftapStats, *tpSap_SoftapStats;
-#ifdef FEATURE_WLAN_CH_AVOID
-/* Store channel safety information */
-typedef struct {
- uint16_t channelNumber;
- bool isSafe;
-} sapSafeChannelType;
-#endif /* FEATURE_WLAN_CH_AVOID */
void sap_cleanup_channel_list(void *sapContext);
void sapCleanupAllChannelList(void);
diff --git a/drivers/staging/qcacld-3.0/core/sap/src/sap_ch_select.c b/drivers/staging/qcacld-3.0/core/sap/src/sap_ch_select.c
index f5048e89..c8a7955 100644
--- a/drivers/staging/qcacld-3.0/core/sap/src/sap_ch_select.c
+++ b/drivers/staging/qcacld-3.0/core/sap/src/sap_ch_select.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -128,52 +128,6 @@
#define ACS_WEIGHT_SOFTAP_TX_POWER_THROUGHPUT_CFG(weights) \
(((weights) & 0xf00000) >> 20)
-#ifdef FEATURE_WLAN_CH_AVOID
-sapSafeChannelType safe_channels[NUM_CHANNELS] = {
- {1, true},
- {2, true},
- {3, true},
- {4, true},
- {5, true},
- {6, true},
- {7, true},
- {8, true},
- {9, true},
- {10, true},
- {11, true},
- {12, true},
- {13, true},
- {14, true},
- {36, true},
- {40, true},
- {44, true},
- {48, true},
- {52, true},
- {56, true},
- {60, true},
- {64, true},
- {100, true},
- {104, true},
- {108, true},
- {112, true},
- {116, true},
- {120, true},
- {124, true},
- {128, true},
- {132, true},
- {136, true},
- {140, true},
- {144, true},
- {149, true},
- {153, true},
- {157, true},
- {161, true},
- {165, true},
- {169, true},
- {173, true},
-};
-#endif
-
typedef struct {
uint16_t chStartNum;
uint32_t weight;
@@ -401,81 +355,6 @@
}
#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
-#ifdef FEATURE_WLAN_CH_AVOID
-/*==========================================================================
- FUNCTION sap_update_unsafe_channel_list
-
- DESCRIPTION
- Function Undate unsafe channel list table
-
- DEPENDENCIES
- NA.
-
- IN
- SapContext pointer
-
- RETURN VALUE
- NULL
- ============================================================================*/
-void sap_update_unsafe_channel_list(ptSapContext pSapCtx)
-{
- uint16_t i, j;
- uint16_t unsafe_channel_list[NUM_CHANNELS];
- uint16_t unsafe_channel_count = 0;
- qdf_device_t qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
-
- if (!qdf_ctx) {
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_FATAL,
- "qdf_ctx is NULL");
- return;
- }
-
- /* Flush, default set all channel safe */
- for (i = 0; i < NUM_CHANNELS; i++) {
- safe_channels[i].isSafe = true;
- }
-
- /* Try to find unsafe channel */
-#if defined(FEATURE_WLAN_STA_AP_MODE_DFS_DISABLE)
- for (i = 0; i < NUM_CHANNELS; i++) {
- if (pSapCtx->dfs_ch_disable == true) {
- if (CDS_IS_DFS_CH(safe_channels[i].channelNumber)) {
- safe_channels[i].isSafe = false;
- QDF_TRACE(QDF_MODULE_ID_SAP,
- QDF_TRACE_LEVEL_DEBUG,
- "%s: DFS Ch %d is not safe in"
- " Concurrent mode",
- __func__,
- safe_channels[i].channelNumber);
- }
- }
- }
-#endif
- pld_get_wlan_unsafe_channel(qdf_ctx->dev,
- unsafe_channel_list,
- &unsafe_channel_count,
- sizeof(unsafe_channel_list));
-
- for (i = 0; i < unsafe_channel_count; i++) {
- for (j = 0; j < NUM_CHANNELS; j++) {
- if (safe_channels[j].channelNumber ==
- unsafe_channel_list[i]) {
- /* Found unsafe channel, update it */
- safe_channels[j].isSafe = false;
- QDF_TRACE(QDF_MODULE_ID_SAP,
- QDF_TRACE_LEVEL_DEBUG,
- FL("CH %d is not safe"),
- unsafe_channel_list[i]);
- break;
- }
- }
- }
-
- return;
-}
-
-#endif /* FEATURE_WLAN_CH_AVOID */
-
/*==========================================================================
FUNCTION sap_cleanup_channel_list
@@ -635,9 +514,6 @@
uint16_t channelnum = 0;
tpAniSirGlobal pMac = PMAC_STRUCT(halHandle);
bool chSafe = true;
-#ifdef FEATURE_WLAN_CH_AVOID
- uint16_t i;
-#endif
uint32_t dfs_master_cap_enabled;
bool include_dfs_ch = true;
bool sta_sap_scc_on_dfs_chan =
@@ -704,19 +580,8 @@
}
}
-#ifdef FEATURE_WLAN_CH_AVOID
- for (i = 0; i < NUM_CHANNELS; i++) {
- if ((safe_channels[i].channelNumber == *pChans) &&
- (false == safe_channels[i].isSafe)) {
- QDF_TRACE(QDF_MODULE_ID_SAP,
- QDF_TRACE_LEVEL_DEBUG,
- "In %s, Ch %d is not safe", __func__,
- *pChans);
- chSafe = false;
- break;
- }
- }
-#endif /* FEATURE_WLAN_CH_AVOID */
+ if (!cds_is_safe_channel(*pChans))
+ chSafe = false;
/* OFDM rates are not supported on channel 14 */
if (*pChans == 14 &&
@@ -2556,101 +2421,6 @@
return false;
}
-#ifdef FEATURE_WLAN_CH_AVOID
-/**
- * sap_select_channel_no_scan_result() - select SAP channel when no scan results
- * are available.
- * @sap_ctx: Sap context
- *
- * Returns: channel number if success, 0 otherwise
- */
-static uint8_t sap_select_channel_no_scan_result(tHalHandle hal,
- ptSapContext sap_ctx)
-{
- enum channel_state ch_type;
- uint8_t i, first_safe_ch_in_range = SAP_CHANNEL_NOT_SELECTED;
- uint32_t dfs_master_cap_enabled;
- uint32_t start_ch_num = sap_ctx->acs_cfg->start_ch;
- uint32_t end_ch_num = sap_ctx->acs_cfg->end_ch;
-
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- FL("start - end: %d - %d"), start_ch_num, end_ch_num);
-
- sme_cfg_get_int(hal, WNI_CFG_DFS_MASTER_ENABLED,
- &dfs_master_cap_enabled);
-
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- "%s: dfs_master %x", __func__, dfs_master_cap_enabled);
-
- /* get a channel in PCL and within the range */
- for (i = 0; i < sap_ctx->acs_cfg->pcl_ch_count; i++) {
- if ((sap_ctx->acs_cfg->pcl_channels[i] < start_ch_num) ||
- (sap_ctx->acs_cfg->pcl_channels[i] > end_ch_num))
- continue;
-
- first_safe_ch_in_range = sap_ctx->acs_cfg->pcl_channels[i];
- break;
- }
-
- if (SAP_CHANNEL_NOT_SELECTED != first_safe_ch_in_range)
- return first_safe_ch_in_range;
-
- for (i = 0; i < NUM_CHANNELS; i++) {
- if ((safe_channels[i].channelNumber < start_ch_num) ||
- (safe_channels[i].channelNumber > end_ch_num))
- continue;
-
- ch_type = cds_get_channel_state(safe_channels[i].channelNumber);
-
- if ((ch_type == CHANNEL_STATE_DISABLE) ||
- (ch_type == CHANNEL_STATE_INVALID))
- continue;
- if ((!dfs_master_cap_enabled) &&
- (CHANNEL_STATE_DFS == ch_type)) {
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- "%s: DFS master mode disabled. Skip DFS channel %d",
- __func__, safe_channels[i].channelNumber);
- continue;
- }
- if ((sap_ctx->dfs_mode == ACS_DFS_MODE_DISABLE) &&
- (CHANNEL_STATE_DFS == ch_type))
- continue;
-
- if (safe_channels[i].isSafe == true) {
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- FL("channel %d in the configuration is safe"),
- safe_channels[i].channelNumber);
- first_safe_ch_in_range = safe_channels[i].channelNumber;
- break;
- }
-
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- FL("channel %d in the configuration is unsafe"),
- safe_channels[i].channelNumber);
- }
-
- /* if no channel selected return SAP_CHANNEL_NOT_SELECTED */
- return first_safe_ch_in_range;
-}
-#else
-static uint8_t sap_select_channel_no_scan_result(tHalHandle hal,
- ptSapContext sap_ctx)
-{
- uint32_t start_ch_num = sap_ctx->acs_cfg->start_ch;
-
- QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
- FL("start - end: %d - %d"),
- start_ch_num,
- sap_ctx->acs_cfg->end_ch);
-
- sap_ctx->acs_cfg->pri_ch = start_ch_num;
- sap_ctx->acs_cfg->ht_sec_ch = 0;
-
- /* pick the first channel in configured range */
- return start_ch_num;
-}
-#endif /* FEATURE_WLAN_CH_AVOID */
-
/**
* sap_select_channel() - select SAP channel
* @hal: Pointer to HAL handle
@@ -2677,10 +2447,6 @@
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH,
"In %s, Running SAP Ch Select", __func__);
-#ifdef FEATURE_WLAN_CH_AVOID
- sap_update_unsafe_channel_list(sap_ctx);
-#endif
-
/*
* If ACS weight is not enabled on noise_floor/channel_free/tx_power,
* then skip acs process if no bss found.
@@ -2693,7 +2459,7 @@
#ifndef SOFTAP_CHANNEL_RANGE
return SAP_CHANNEL_NOT_SELECTED;
#else
- return sap_select_channel_no_scan_result(hal, sap_ctx);
+ return sap_select_default_oper_chan(sap_ctx->acs_cfg);
#endif
}
diff --git a/drivers/staging/qcacld-3.0/core/sap/src/sap_fsm.c b/drivers/staging/qcacld-3.0/core/sap/src/sap_fsm.c
index d33ee91..803054c 100644
--- a/drivers/staging/qcacld-3.0/core/sap/src/sap_fsm.c
+++ b/drivers/staging/qcacld-3.0/core/sap/src/sap_fsm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -67,10 +67,6 @@
/*----------------------------------------------------------------------------
* External declarations for global context
* -------------------------------------------------------------------------*/
-#ifdef FEATURE_WLAN_CH_AVOID
-extern sapSafeChannelType safe_channels[];
-#endif /* FEATURE_WLAN_CH_AVOID */
-
/*----------------------------------------------------------------------------
* Static Variable Definitions
* -------------------------------------------------------------------------*/
@@ -2355,6 +2351,9 @@
"%s: Override ch %d to %d due to CC Intf",
__func__, sap_context->channel, con_ch);
sap_context->channel = con_ch;
+ if (CDS_IS_CHANNEL_24GHZ(con_ch))
+ sap_context->ch_params.ch_width =
+ CH_WIDTH_20MHZ;
cds_set_channel_params(sap_context->channel, 0,
&sap_context->ch_params);
}
@@ -2407,6 +2406,9 @@
__func__, sap_context->channel,
con_ch);
sap_context->channel = con_ch;
+ if (CDS_IS_CHANNEL_24GHZ(con_ch))
+ sap_context->ch_params.ch_width =
+ CH_WIDTH_20MHZ;
cds_set_channel_params(sap_context->channel, 0,
&sap_context->ch_params);
}
@@ -4866,9 +4868,7 @@
uint8_t end_ch_num, band_end_ch;
uint32_t en_lte_coex;
tHalHandle hal = CDS_GET_HAL_CB(sap_ctx->p_cds_gctx);
-#ifdef FEATURE_WLAN_CH_AVOID
uint8_t i;
-#endif
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
tSapChSelSpectInfo spect_info_obj = { NULL, 0 };
uint16_t ch_width;
@@ -4970,13 +4970,6 @@
continue;
}
-#ifdef FEATURE_WLAN_CH_AVOID
- for (i = 0; i < NUM_CHANNELS; i++) {
- if (safe_channels[i].channelNumber ==
- CDS_CHANNEL_NUM(loop_count)) {
- /* Check if channel is safe */
- if (true == safe_channels[i].isSafe) {
-#endif
#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
uint8_t ch;
@@ -5013,12 +5006,6 @@
list[ch_count] = CDS_CHANNEL_NUM(loop_count);
ch_count++;
#endif
-#ifdef FEATURE_WLAN_CH_AVOID
- }
- break;
- }
- }
-#endif
}
for (i = 0; i < ch_count; i++) {
diff --git a/drivers/staging/qcacld-3.0/core/sap/src/sap_internal.h b/drivers/staging/qcacld-3.0/core/sap/src/sap_internal.h
index 24991f1..5ad7c5f 100644
--- a/drivers/staging/qcacld-3.0/core/sap/src/sap_internal.h
+++ b/drivers/staging/qcacld-3.0/core/sap/src/sap_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -374,10 +374,6 @@
QDF_STATUS sap_release_global_lock(ptSapContext pSapCtx);
-#ifdef FEATURE_WLAN_CH_AVOID
-void sap_update_unsafe_channel_list(ptSapContext pSapCtx);
-#endif /* FEATURE_WLAN_CH_AVOID */
-
uint8_t
sap_indicate_radar(ptSapContext sapContext,
tSirSmeDfsEventInd *dfs_event);
diff --git a/drivers/staging/qcacld-3.0/core/wma/src/wma_dev_if.c b/drivers/staging/qcacld-3.0/core/wma/src/wma_dev_if.c
index 0c8cc381..42c403b 100644
--- a/drivers/staging/qcacld-3.0/core/wma/src/wma_dev_if.c
+++ b/drivers/staging/qcacld-3.0/core/wma/src/wma_dev_if.c
@@ -570,6 +570,29 @@
iface->is_vdev_valid = false;
}
+/*
+ * wma_handle_monitor_mode_vdev_detach() - Stop and down monitor mode vdev
+ * @wma_handle: wma handle
+ * @vdev_id: used to get wma interface txrx node
+ *
+ * Monitor mode is unconneted mode, so do explicit vdev stop and down
+ *
+ * Return: None
+ */
+static void wma_handle_monitor_mode_vdev_detach(tp_wma_handle wma,
+ uint8_t vdev_id)
+{
+ if (wma_send_vdev_stop_to_fw(wma, vdev_id)) {
+ WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__);
+ wma_remove_vdev_req(wma, vdev_id,
+ WMA_TARGET_REQ_TYPE_VDEV_STOP);
+ }
+
+ if (wma_send_vdev_down_to_fw(wma, vdev_id) != QDF_STATUS_SUCCESS)
+ WMA_LOGE("Failed to send vdev down cmd: vdev %d", vdev_id);
+}
+
+
static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle,
struct del_sta_self_params *del_sta_self_req_param,
uint8_t generate_rsp)
@@ -579,6 +602,9 @@
struct wma_txrx_node *iface = &wma_handle->interfaces[vdev_id];
struct wma_target_req *msg = NULL;
+ if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
+ wma_handle_monitor_mode_vdev_detach(wma_handle, vdev_id);
+
status = wmi_unified_vdev_delete_send(wma_handle->wmi_handle, vdev_id);
if (QDF_IS_STATUS_ERROR(status)) {
WMA_LOGE("Unable to remove an interface");
@@ -685,9 +711,10 @@
if (iface->type == WMI_VDEV_TYPE_STA)
wma_pno_stop(wma_handle, vdev_id);
- /* P2P Device */
- if ((iface->type == WMI_VDEV_TYPE_AP) &&
- (iface->sub_type == WMI_UNIFIED_VDEV_SUBTYPE_P2P_DEVICE)) {
+ if (((iface->type == WMI_VDEV_TYPE_AP) &&
+ (iface->sub_type == WMI_UNIFIED_VDEV_SUBTYPE_P2P_DEVICE)) ||
+ (iface->type == WMI_VDEV_TYPE_OCB) ||
+ (iface->type == WMI_VDEV_TYPE_MONITOR)) {
status = wma_self_peer_remove(wma_handle,
pdel_sta_self_req_param, generateRsp);
if ((status != QDF_STATUS_SUCCESS) && generateRsp) {
@@ -1909,6 +1936,10 @@
return -EINVAL;
}
+ /* Ignore stop_response in Monitor mode */
+ if (cds_get_conparam() == QDF_GLOBAL_MONITOR_MODE)
+ return QDF_STATUS_SUCCESS;
+
iface = &wma->interfaces[resp_event->vdev_id];
/*
* Reset the rmfEnabled as there might be MGMT action frames