Merge changes If8367e9f,I5e07910d,Ia23aa9c8,Ib58b93e8,I3eb313db,I0fdcffd7,Idbd8b23d,I65a3734d,I8c9f8216,Id1b1101c,I6da8dd27,Idc8f7443,Ibca109e6,I6b4912bf,Ibbc997f3,I0dac8282,I9c5c701f,I92a2b9db,I5b581142,I244bfe9f,I8f517011,I5089db5f,I0cc344d8,I7fe97473,I85474d4f,I857ffce4,Ib5cf2c53,I6fc16706,I92b63c7e,I0a47c363,Iec0e3581,Ief8bf662,I9f74418b,I7b928b15,Id6c3d559,I9a1424ec into wlan-cld3.driver.lnx.2.0-dev
* changes: Release 5.2.0.51W qcacld-3.0: Code cleanup in Vendor ACS support code Release 5.2.0.51V qcacld-3.0: Add iwpriv support to set HE bss color Release 5.2.0.51U qcacld-3.0: Fix 80211 frame subtype value in DoS attacks check Release 5.2.0.51T qcacld-3.0: Add knobs to configure the scan paramters Release 5.2.0.51S qcacld-3.0: Add "static" to fix compilation error for HL bus Release 5.2.0.51R qcacld-3.0: Fixed wrong warning log for no return issue Release 5.2.0.51Q qcacld-3.0: Fix incorrect length of encrypted auth frame qcacld-3.0: Fix build error in LRO without MSM_PLATFORM Release 5.2.0.51P qcacld-3.0: Set CPU floor freq on high throughput Release 5.2.0.51O qcacld-3.0: Restrict AP switching to DFS channel Release 5.2.0.51N qcacld-3.0: Rework HDD IPA stats qcacld-3.0: Add warning log for IPA session control critical code path qcacld-3.0: Check firmware MAWC capability qcacld-3.0: Check vdev status before sending vdev up Release 5.2.0.51M qcacld-3.0: Return failure from cds_open for all failure paths qcacld-3.0: Allow recovery during firmware down Release 5.2.0.51L qcacld-3.0: Cleanup ACS channels in stop adapter Release 5.2.0.51K qcacld-3.0: Adding the missed p2p_listen_defer_interval Release 5.2.0.51J qcacld-3.0: Enable/Disable LRO for low throughput based on rx packet count Release 5.2.0.51I qcacld-3.0: add device pointer in pld snoc API Release 5.2.0.51H
This commit is contained in:

gecommit door
Gerrit - the friendly Code Review server

commit
a30b89e710
1
Kbuild
1
Kbuild
@@ -2199,6 +2199,7 @@ endif
|
||||
|
||||
ifeq ($(CONFIG_WLAN_FEATURE_11AX),y)
|
||||
CDEFINES += -DWLAN_FEATURE_11AX
|
||||
CDEFINES += -DWLAN_FEATURE_11AX_BSS_COLOR
|
||||
endif
|
||||
|
||||
# Dummy flag for WIN/MCL converged data path compilation
|
||||
|
@@ -410,7 +410,7 @@ cds_set_ac_specs_params(struct cds_config_info *cds_cfg)
|
||||
*/
|
||||
QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
QDF_STATUS qdf_status = QDF_STATUS_SUCCESS;
|
||||
QDF_STATUS status;
|
||||
tSirRetStatus sirStatus = eSIR_SUCCESS;
|
||||
struct cds_config_info *cds_cfg;
|
||||
qdf_device_t qdf_ctx;
|
||||
@@ -439,37 +439,40 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
cds_init_log_completion();
|
||||
|
||||
/* Initialize the probe event */
|
||||
if (qdf_event_create(&gp_cds_context->ProbeEvent) != QDF_STATUS_SUCCESS) {
|
||||
status = qdf_event_create(&gp_cds_context->ProbeEvent);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Unable to init probeEvent", __func__);
|
||||
QDF_ASSERT(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
return status;
|
||||
}
|
||||
if (qdf_event_create(&(gp_cds_context->wmaCompleteEvent)) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
|
||||
status = qdf_event_create(&gp_cds_context->wmaCompleteEvent);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Unable to init wmaCompleteEvent", __func__);
|
||||
QDF_ASSERT(0);
|
||||
goto err_probe_event;
|
||||
}
|
||||
|
||||
hdd_ctx = (struct hdd_context *) (gp_cds_context->pHDDContext);
|
||||
if ((NULL == hdd_ctx) || (NULL == hdd_ctx->config)) {
|
||||
hdd_ctx = (struct hdd_context *)(gp_cds_context->pHDDContext);
|
||||
if (!hdd_ctx || !hdd_ctx->config) {
|
||||
/* Critical Error ... Cannot proceed further */
|
||||
cds_err("Hdd Context is Null");
|
||||
QDF_ASSERT(0);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_wma_complete_event;
|
||||
}
|
||||
|
||||
/* Now Open the CDS Scheduler */
|
||||
|
||||
if (hdd_ctx->driver_status == DRIVER_MODULES_UNINITIALIZED ||
|
||||
cds_is_driver_recovering()) {
|
||||
qdf_status = cds_sched_open(gp_cds_context,
|
||||
&gp_cds_context->qdf_sched,
|
||||
sizeof(cds_sched_context));
|
||||
status = cds_sched_open(gp_cds_context,
|
||||
&gp_cds_context->qdf_sched,
|
||||
sizeof(cds_sched_context));
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
/* Critical Error ... Cannot proceed further */
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to open CDS Scheduler", __func__);
|
||||
@@ -482,6 +485,8 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
if (!scn) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: scn is null!", __func__);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_sched_close;
|
||||
}
|
||||
|
||||
@@ -489,17 +494,20 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
if (!cds_cfg) {
|
||||
cds_err("Cds config is NULL");
|
||||
QDF_ASSERT(0);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_sched_close;
|
||||
}
|
||||
|
||||
hdd_enable_fastpath(hdd_ctx->config, scn);
|
||||
hdd_wlan_update_target_info(hdd_ctx, scn);
|
||||
|
||||
ol_ctx = cds_get_context(QDF_MODULE_ID_BMI);
|
||||
/* Initialize BMI and Download firmware */
|
||||
qdf_status = bmi_download_firmware(ol_ctx);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
ol_ctx = cds_get_context(QDF_MODULE_ID_BMI);
|
||||
status = bmi_download_firmware(ol_ctx);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"BMI FIALED status:%d", qdf_status);
|
||||
"BMI FIALED status:%d", status);
|
||||
goto err_bmi_close;
|
||||
}
|
||||
htcInfo.pContext = ol_ctx;
|
||||
@@ -516,20 +524,22 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
if (!gp_cds_context->htc_ctx) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to Create HTC", __func__);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_bmi_close;
|
||||
}
|
||||
pmo_ucfg_psoc_update_htc_handle(psoc, (void *)gp_cds_context->htc_ctx);
|
||||
|
||||
if (bmi_done(ol_ctx)) {
|
||||
status = bmi_done(ol_ctx);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to complete BMI phase", __func__);
|
||||
goto err_htc_close;
|
||||
}
|
||||
|
||||
/*Open the WMA module */
|
||||
qdf_status = wma_open(psoc, hdd_update_tgt_cfg, cds_cfg);
|
||||
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
status = wma_open(psoc, hdd_update_tgt_cfg, cds_cfg);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
/* Critical Error ... Cannot proceed further */
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to open WMA module", __func__);
|
||||
@@ -553,15 +563,16 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
if (!HTCHandle) {
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: HTCHandle is null!", __func__);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_wma_close;
|
||||
}
|
||||
|
||||
qdf_status = htc_wait_target(HTCHandle);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
cds_alert("Complete BMI phase failed. status: %d", qdf_status);
|
||||
status = htc_wait_target(HTCHandle);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
cds_alert("Failed to complete BMI phase. status: %d", status);
|
||||
|
||||
if (qdf_status != QDF_STATUS_E_NOMEM
|
||||
&& !cds_is_fw_down())
|
||||
if (status != QDF_STATUS_E_NOMEM && !cds_is_fw_down())
|
||||
QDF_BUG(0);
|
||||
|
||||
goto err_wma_close;
|
||||
@@ -584,14 +595,13 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
|
||||
&dp_ol_if_ops, psoc);
|
||||
|
||||
if (!gp_cds_context->dp_soc)
|
||||
if (!gp_cds_context->dp_soc) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_wma_close;
|
||||
}
|
||||
|
||||
pmo_ucfg_psoc_update_dp_handle(psoc, gp_cds_context->dp_soc);
|
||||
|
||||
if (gp_cds_context->dp_soc == NULL)
|
||||
goto err_wma_close;
|
||||
|
||||
cds_set_ac_specs_params(cds_cfg);
|
||||
|
||||
cds_cdp_cfg_attach(cds_cfg);
|
||||
@@ -606,12 +616,14 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to open MAC", __func__);
|
||||
QDF_ASSERT(0);
|
||||
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err_soc_detach;
|
||||
}
|
||||
|
||||
/* Now proceed to open the SME */
|
||||
qdf_status = sme_open(gp_cds_context->pMACContext);
|
||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
||||
status = sme_open(gp_cds_context->pMACContext);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
/* Critical Error ... Cannot proceed further */
|
||||
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s: Failed to open SME", __func__);
|
||||
@@ -659,7 +671,7 @@ err_wma_complete_event:
|
||||
err_probe_event:
|
||||
qdf_event_destroy(&gp_cds_context->ProbeEvent);
|
||||
|
||||
return qdf_status;
|
||||
return status;
|
||||
} /* cds_open() */
|
||||
|
||||
QDF_STATUS cds_dp_open(struct wlan_objmgr_psoc *psoc)
|
||||
|
@@ -833,6 +833,9 @@ int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
int error;
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, "%s: enter",
|
||||
__func__);
|
||||
|
||||
/* TX resource attach */
|
||||
error = htt_tx_ipa_uc_attach(
|
||||
pdev,
|
||||
@@ -857,6 +860,8 @@ int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
||||
return error;
|
||||
}
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, "%s: exit",
|
||||
__func__);
|
||||
return 0; /* success */
|
||||
}
|
||||
|
||||
@@ -868,11 +873,17 @@ int htt_ipa_uc_attach(struct htt_pdev_t *pdev)
|
||||
*/
|
||||
void htt_ipa_uc_detach(struct htt_pdev_t *pdev)
|
||||
{
|
||||
QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, "%s: enter",
|
||||
__func__);
|
||||
|
||||
/* TX IPA micro controller detach */
|
||||
htt_tx_ipa_uc_detach(pdev);
|
||||
|
||||
/* RX IPA micro controller detach */
|
||||
htt_rx_ipa_uc_detach(pdev);
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO, "%s: exit",
|
||||
__func__);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1284,6 +1284,10 @@ int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
|
||||
else if (!uc_active && !is_tx)
|
||||
active_target = HTT_WDI_IPA_OPCODE_RX_SUSPEND;
|
||||
|
||||
QDF_TRACE(QDF_MODULE_ID_HTT, QDF_TRACE_LEVEL_INFO,
|
||||
"%s: HTT_H2T_MSG_TYPE_WDI_IPA_OP_REQ (%d)\n",
|
||||
__func__, active_target);
|
||||
|
||||
HTT_WDI_IPA_OP_REQUEST_OP_CODE_SET(*msg_word, active_target);
|
||||
HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_WDI_IPA_OP_REQ);
|
||||
|
||||
|
@@ -49,6 +49,7 @@
|
||||
/* internal header files relevant only for specific systems (Pronto) */
|
||||
#include <ol_txrx_encap.h> /* OL_TX_ENCAP, etc */
|
||||
#include <ol_tx.h>
|
||||
#include <cdp_txrx_ipa.h>
|
||||
|
||||
#ifdef WLAN_FEATURE_FASTPATH
|
||||
#include <hif.h> /* HIF_DEVICE */
|
||||
@@ -56,7 +57,6 @@
|
||||
#include <htt_internal.h>
|
||||
#include <htt_types.h> /* htc_endpoint */
|
||||
#include <cdp_txrx_peer_ops.h>
|
||||
#include <cdp_txrx_ipa.h>
|
||||
#include <cdp_txrx_handle.h>
|
||||
int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu,
|
||||
unsigned int transfer_id, uint32_t download_len);
|
||||
|
@@ -367,7 +367,7 @@ struct ol_txrx_peer_t *ol_tx_tdls_peer_find(struct ol_txrx_pdev_t *pdev,
|
||||
}
|
||||
|
||||
#else
|
||||
struct ol_txrx_peer_t *ol_tx_tdls_peer_find(struct ol_txrx_pdev_t *pdev,
|
||||
static struct ol_txrx_peer_t *ol_tx_tdls_peer_find(struct ol_txrx_pdev_t *pdev,
|
||||
struct ol_txrx_vdev_t *vdev,
|
||||
uint8_t *peer_id)
|
||||
{
|
||||
@@ -734,7 +734,7 @@ ol_tx_classify_mgmt(
|
||||
return txq;
|
||||
}
|
||||
|
||||
A_STATUS
|
||||
static A_STATUS
|
||||
ol_tx_classify_extension(
|
||||
struct ol_txrx_vdev_t *vdev,
|
||||
struct ol_tx_desc_t *tx_desc,
|
||||
@@ -845,7 +845,7 @@ ol_tx_classify_extension(
|
||||
return A_OK;
|
||||
}
|
||||
|
||||
A_STATUS
|
||||
static A_STATUS
|
||||
ol_tx_classify_mgmt_extension(
|
||||
struct ol_txrx_vdev_t *vdev,
|
||||
struct ol_tx_desc_t *tx_desc,
|
||||
|
@@ -936,7 +936,7 @@ ol_tx_sched_txq_deactivate_wrr_adv(
|
||||
category->state.active = 0;
|
||||
}
|
||||
|
||||
ol_tx_frms_queue_list *
|
||||
static ol_tx_frms_queue_list *
|
||||
ol_tx_sched_category_tx_queues_wrr_adv(struct ol_txrx_pdev_t *pdev, int cat)
|
||||
{
|
||||
struct ol_tx_sched_wrr_adv_t *scheduler = pdev->tx_sched.scheduler;
|
||||
@@ -946,7 +946,7 @@ ol_tx_sched_category_tx_queues_wrr_adv(struct ol_txrx_pdev_t *pdev, int cat)
|
||||
return &category->state.head;
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
ol_tx_sched_discard_select_category_wrr_adv(struct ol_txrx_pdev_t *pdev)
|
||||
{
|
||||
struct ol_tx_sched_wrr_adv_t *scheduler;
|
||||
@@ -974,7 +974,7 @@ ol_tx_sched_discard_select_category_wrr_adv(struct ol_txrx_pdev_t *pdev)
|
||||
return cat;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
ol_tx_sched_txq_discard_wrr_adv(
|
||||
struct ol_txrx_pdev_t *pdev,
|
||||
struct ol_tx_frms_queue_t *txq,
|
||||
@@ -996,7 +996,7 @@ ol_tx_sched_txq_discard_wrr_adv(
|
||||
category->state.active = 0;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
ol_tx_sched_category_info_wrr_adv(
|
||||
struct ol_txrx_pdev_t *pdev,
|
||||
int cat, int *active,
|
||||
@@ -1077,7 +1077,7 @@ void ol_tx_sched_wrr_param_update(struct ol_txrx_pdev_t *pdev,
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
static void *
|
||||
ol_tx_sched_init_wrr_adv(
|
||||
struct ol_txrx_pdev_t *pdev)
|
||||
{
|
||||
@@ -1228,7 +1228,7 @@ void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev)
|
||||
|
||||
/*--- congestion control discard --------------------------------------------*/
|
||||
|
||||
struct ol_tx_frms_queue_t *
|
||||
static struct ol_tx_frms_queue_t *
|
||||
ol_tx_sched_discard_select_txq(
|
||||
struct ol_txrx_pdev_t *pdev,
|
||||
ol_tx_frms_queue_list *tx_queues)
|
||||
@@ -1370,7 +1370,7 @@ ol_tx_sched_notify(
|
||||
|
||||
#define OL_TX_MSDU_ID_STORAGE_ERR(ptr) (NULL == ptr)
|
||||
|
||||
void
|
||||
static void
|
||||
ol_tx_sched_dispatch(
|
||||
struct ol_txrx_pdev_t *pdev,
|
||||
struct ol_tx_sched_ctx *sctx)
|
||||
|
@@ -261,6 +261,7 @@ enum {
|
||||
QCASAP_PARAM_RANGE_EXT,
|
||||
QCSAP_SET_DEFAULT_AMPDU,
|
||||
QCSAP_ENABLE_RTS_BURSTING,
|
||||
QCASAP_SET_HE_BSS_COLOR,
|
||||
};
|
||||
|
||||
int iw_get_channel_list(struct net_device *dev,
|
||||
|
@@ -910,6 +910,52 @@ enum hdd_dot11_mode {
|
||||
#define CFG_ACTIVE_MIN_CHANNEL_TIME_MAX (10000)
|
||||
#define CFG_ACTIVE_MIN_CHANNEL_TIME_DEFAULT (20)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gScanNumProbes - Set the number of probes on each channel for active scan
|
||||
* @Min: 0
|
||||
* @Max: 20
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to set number of probes on each channel for
|
||||
* active scan
|
||||
*
|
||||
* Related: None
|
||||
*
|
||||
* Supported Feature: Scan
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_SCAN_NUM_PROBES_NAME "gScanNumProbes"
|
||||
#define CFG_SCAN_NUM_PROBES_MIN (0)
|
||||
#define CFG_SCAN_NUM_PROBES_MAX (20)
|
||||
#define CFG_SCAN_NUM_PROBES_DEFAULT (0)
|
||||
|
||||
/*
|
||||
* <ini>
|
||||
* gScanProbeRepeatTime - Set the probe repeat time on each channel for active scan
|
||||
* @Min: 0
|
||||
* @Max: 30
|
||||
* @Default: 0
|
||||
*
|
||||
* This ini is used to set probe repeat time on each channel for
|
||||
* active scan
|
||||
*
|
||||
* Related: None
|
||||
*
|
||||
* Supported Feature: Scan
|
||||
*
|
||||
* Usage: External
|
||||
*
|
||||
* </ini>
|
||||
*/
|
||||
#define CFG_SCAN_PROBE_REPEAT_TIME_NAME "gScanProbeRepeatTime"
|
||||
#define CFG_SCAN_PROBE_REPEAT_TIME_MIN (0)
|
||||
#define CFG_SCAN_PROBE_REPEAT_TIME_MAX (30)
|
||||
#define CFG_SCAN_PROBE_REPEAT_TIME_DEFAULT (0)
|
||||
|
||||
#ifdef FEATURE_WLAN_EXTSCAN
|
||||
/*
|
||||
* <ini>
|
||||
@@ -13324,6 +13370,8 @@ struct hdd_config {
|
||||
uint32_t nPassiveMaxChnTime; /* in units of milliseconds */
|
||||
uint32_t nActiveMinChnTime; /* in units of milliseconds */
|
||||
uint32_t nActiveMaxChnTime; /* in units of milliseconds */
|
||||
uint32_t scan_probe_repeat_time;
|
||||
uint32_t scan_num_probes;
|
||||
|
||||
uint32_t nInitialDwellTime; /* in units of milliseconds */
|
||||
bool initial_scan_no_dfs_chnl;
|
||||
|
@@ -124,7 +124,25 @@ void hdd_ipa_dump_info(struct hdd_context *hdd_ctx);
|
||||
QDF_STATUS hdd_ipa_uc_ol_init(struct hdd_context *hdd_ctx);
|
||||
void hdd_ipa_set_tx_flow_info(void);
|
||||
int hdd_ipa_uc_ol_deinit(struct hdd_context *hdd_ctx);
|
||||
|
||||
/**
|
||||
* hdd_ipa_uc_stat() - Print IPA uC stats
|
||||
* @adapter: network adapter
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void hdd_ipa_uc_stat(struct hdd_adapter *adapter);
|
||||
|
||||
/**
|
||||
* hdd_ipa_uc_info() - Print IPA uC resource and session information
|
||||
* @adapter: network adapter
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void hdd_ipa_uc_info(struct hdd_context *hdd_ctx);
|
||||
|
||||
#else
|
||||
|
||||
static inline QDF_STATUS hdd_ipa_init(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -277,5 +295,26 @@ static inline int hdd_ipa_uc_ol_deinit(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_ipa_uc_stat() - Print IPA uC stats
|
||||
* @adapter: network adapter
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void hdd_ipa_uc_stat(struct hdd_adapter *adapter)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_ipa_uc_info() - Print IPA uC resource and session information
|
||||
* @adapter: network adapter
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void hdd_ipa_uc_info(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* IPA_OFFLOAD */
|
||||
#endif /* #ifndef HDD_IPA_H__ */
|
||||
|
@@ -51,6 +51,16 @@ enum hdd_lro_rx_status hdd_lro_rx(struct hdd_context *hdd_ctx,
|
||||
struct hdd_adapter *adapter, struct sk_buff *skb);
|
||||
void hdd_lro_display_stats(struct hdd_context *hdd_ctx);
|
||||
void hdd_disable_lro_in_concurrency(bool);
|
||||
/**
|
||||
* hdd_disable_lro_for_low_tput() - enable/disable LRO based on tput
|
||||
* hdd_ctx: hdd context
|
||||
* disable: boolean to enable/disable LRO
|
||||
*
|
||||
* This API enables/disables LRO based on tput.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void hdd_disable_lro_for_low_tput(struct hdd_context *hdd_ctx, bool disable);
|
||||
#else
|
||||
static inline int hdd_lro_init(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
@@ -70,5 +80,10 @@ static inline void hdd_lro_display_stats(struct hdd_context *hdd_ctx)
|
||||
static inline void hdd_disable_lro_in_concurrency(bool disable)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
hdd_disable_lro_for_low_tput(struct hdd_context *hdd_ctx, bool disable)
|
||||
{
|
||||
}
|
||||
#endif /* FEATURE_LRO */
|
||||
#endif /* __WLAN_HDD_LRO_H__ */
|
||||
|
@@ -1719,6 +1719,7 @@ struct hdd_context {
|
||||
int user_configured_pkt_filter_rules;
|
||||
bool is_fils_roaming_supported;
|
||||
qdf_atomic_t disable_lro_in_concurrency;
|
||||
qdf_atomic_t disable_lro_in_low_tput;
|
||||
bool en_tcp_delack_no_lro;
|
||||
};
|
||||
|
||||
@@ -1985,6 +1986,16 @@ void hdd_bus_bandwidth_destroy(struct hdd_context *hdd_ctx);
|
||||
* Return: None.
|
||||
*/
|
||||
void hdd_bus_bw_cancel_work(struct hdd_context *hdd_ctx);
|
||||
|
||||
/**
|
||||
* hdd_send_wlan_tp_ind() - Send throughput indication
|
||||
* @hdd_ctx: HDD context
|
||||
*
|
||||
* Send throughput indication
|
||||
*
|
||||
* Return: None.
|
||||
*/
|
||||
void hdd_send_wlan_tp_ind(struct hdd_context *hdd_ctx);
|
||||
#else
|
||||
|
||||
static inline
|
||||
@@ -2022,6 +2033,11 @@ static inline
|
||||
void hdd_bus_bw_cancel_work(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
}
|
||||
|
||||
static inline
|
||||
void hdd_send_wlan_tp_ind(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int hdd_qdf_trace_enable(QDF_MODULE_ID module_id, uint32_t bitmask);
|
||||
@@ -2107,6 +2123,17 @@ static inline bool hdd_scan_random_mac_addr_supported(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hdd_start_vendor_acs(): Start vendor ACS procedure
|
||||
* @adapter: pointer to SAP adapter struct
|
||||
*
|
||||
* This function sends the ACS config to the ACS daemon and
|
||||
* starts the vendor ACS timer to wait for the next command.
|
||||
*
|
||||
* Return: Status of vendor ACS procedure
|
||||
*/
|
||||
int hdd_start_vendor_acs(struct hdd_adapter *adapter);
|
||||
|
||||
void hdd_get_fw_version(struct hdd_context *hdd_ctx,
|
||||
uint32_t *major_spid, uint32_t *minor_spid,
|
||||
uint32_t *siid, uint32_t *crmid);
|
||||
@@ -2134,10 +2161,10 @@ int wlan_hdd_cfg80211_start_acs(struct hdd_adapter *adapter);
|
||||
* @adapter: hdd adapter
|
||||
* @reason: channel change reason
|
||||
*
|
||||
* Return: none
|
||||
* Return: 0 for success else error code
|
||||
*/
|
||||
void hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
uint8_t reason);
|
||||
int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
uint8_t reason);
|
||||
/**
|
||||
* hdd_update_acs_timer_reason() - update acs timer start reason
|
||||
* @adapter: hdd adapter
|
||||
|
@@ -742,6 +742,20 @@ struct reg_table_entry g_registry_table[] = {
|
||||
CFG_ACTIVE_MIN_CHANNEL_TIME_MIN,
|
||||
CFG_ACTIVE_MIN_CHANNEL_TIME_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_SCAN_NUM_PROBES_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, scan_num_probes,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_SCAN_NUM_PROBES_DEFAULT,
|
||||
CFG_SCAN_NUM_PROBES_MIN,
|
||||
CFG_SCAN_NUM_PROBES_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_SCAN_PROBE_REPEAT_TIME_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, scan_probe_repeat_time,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_SCAN_PROBE_REPEAT_TIME_DEFAULT,
|
||||
CFG_SCAN_PROBE_REPEAT_TIME_MIN,
|
||||
CFG_SCAN_PROBE_REPEAT_TIME_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_RETRY_LIMIT_ZERO_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, retryLimitZero,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
@@ -3612,6 +3626,14 @@ struct reg_table_entry g_registry_table[] = {
|
||||
CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MIN,
|
||||
CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_P2P_LISTEN_DEFER_INTERVAL_NAME, WLAN_PARAM_Integer,
|
||||
struct hdd_config, p2p_listen_defer_interval,
|
||||
VAR_FLAGS_OPTIONAL |
|
||||
VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
CFG_P2P_LISTEN_DEFER_INTERVAL_DEFAULT,
|
||||
CFG_P2P_LISTEN_DEFER_INTERVAL_MIN,
|
||||
CFG_P2P_LISTEN_DEFER_INTERVAL_MAX),
|
||||
|
||||
REG_VARIABLE(CFG_MULTICAST_HOST_FW_MSGS, WLAN_PARAM_Integer,
|
||||
struct hdd_config, multicast_host_fw_msgs,
|
||||
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
|
||||
|
@@ -1610,6 +1610,8 @@ static int wlan_hdd_reset_force_acs_chan_range(struct hdd_context *hdd_ctx,
|
||||
bool is_dfs_mode_enabled = false;
|
||||
uint32_t i, num_channels = 0;
|
||||
uint8_t channels[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0};
|
||||
eCsrPhyMode hw_mode;
|
||||
tSirMacHTChannelWidth ch_width;
|
||||
|
||||
if (hdd_ctx->config->force_sap_acs_st_ch >
|
||||
hdd_ctx->config->force_sap_acs_end_ch) {
|
||||
@@ -1646,6 +1648,62 @@ static int wlan_hdd_reset_force_acs_chan_range(struct hdd_context *hdd_ctx,
|
||||
qdf_mem_copy(sap_config->acs_cfg.ch_list, channels, num_channels);
|
||||
sap_config->acs_cfg.ch_list_count = num_channels;
|
||||
|
||||
/* Derive ACS HW mode */
|
||||
hw_mode = hdd_cfg_xlate_to_csr_phy_mode(hdd_ctx->config->dot11Mode);
|
||||
if (hw_mode == eCSR_DOT11_MODE_AUTO) {
|
||||
if (sme_is_feature_supported_by_fw(DOT11AX))
|
||||
hw_mode = eCSR_DOT11_MODE_11ax;
|
||||
else
|
||||
hw_mode = eCSR_DOT11_MODE_11ac;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->sap_force_11n_for_11ac) {
|
||||
if (hw_mode == eCSR_DOT11_MODE_11ac ||
|
||||
hw_mode == eCSR_DOT11_MODE_11ac_ONLY)
|
||||
hw_mode = eCSR_DOT11_MODE_11n;
|
||||
}
|
||||
|
||||
if ((hw_mode == eCSR_DOT11_MODE_11b ||
|
||||
hw_mode == eCSR_DOT11_MODE_11g ||
|
||||
hw_mode == eCSR_DOT11_MODE_11g_ONLY) &&
|
||||
sap_config->acs_cfg.start_ch > 14) {
|
||||
hdd_err("Invalid ACS HW Mode %d + CH range <%d - %d>",
|
||||
hw_mode, sap_config->acs_cfg.start_ch,
|
||||
sap_config->acs_cfg.end_ch);
|
||||
return -EINVAL;
|
||||
}
|
||||
sap_config->acs_cfg.hw_mode = hw_mode;
|
||||
|
||||
/* Derive ACS BW */
|
||||
ch_width = eHT_CHANNEL_WIDTH_20MHZ;
|
||||
if (hw_mode == eCSR_DOT11_MODE_11ac ||
|
||||
hw_mode == eCSR_DOT11_MODE_11ac_ONLY ||
|
||||
hw_mode == eCSR_DOT11_MODE_11ax ||
|
||||
hw_mode == eCSR_DOT11_MODE_11ax_ONLY) {
|
||||
ch_width = hdd_ctx->config->vhtChannelWidth;
|
||||
/* VHT in 2.4G depends on gChannelBondingMode24GHz INI param */
|
||||
if (sap_config->acs_cfg.end_ch <= 14)
|
||||
ch_width =
|
||||
hdd_ctx->config->nChannelBondingMode24GHz ?
|
||||
eHT_CHANNEL_WIDTH_40MHZ :
|
||||
eHT_CHANNEL_WIDTH_20MHZ;
|
||||
}
|
||||
|
||||
if (hw_mode == eCSR_DOT11_MODE_11n ||
|
||||
hw_mode == eCSR_DOT11_MODE_11n_ONLY) {
|
||||
if (sap_config->acs_cfg.end_ch <= 14)
|
||||
ch_width =
|
||||
hdd_ctx->config->nChannelBondingMode24GHz ?
|
||||
eHT_CHANNEL_WIDTH_40MHZ :
|
||||
eHT_CHANNEL_WIDTH_20MHZ;
|
||||
else
|
||||
ch_width =
|
||||
hdd_ctx->config->nChannelBondingMode5GHz ?
|
||||
eHT_CHANNEL_WIDTH_40MHZ :
|
||||
eHT_CHANNEL_WIDTH_20MHZ;
|
||||
}
|
||||
sap_config->acs_cfg.ch_width = ch_width;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1656,9 +1714,9 @@ static int wlan_hdd_reset_force_acs_chan_range(struct hdd_context *hdd_ctx,
|
||||
* This function sets the default ACS start and end channel for the given band
|
||||
* and also parses the given ACS channel list.
|
||||
*
|
||||
* Return: None
|
||||
* Return: status
|
||||
*/
|
||||
static void wlan_hdd_set_acs_ch_range(tsap_Config_t *sap_cfg, bool ht_enabled,
|
||||
static int wlan_hdd_set_acs_ch_range(tsap_Config_t *sap_cfg, bool ht_enabled,
|
||||
bool vht_enabled)
|
||||
{
|
||||
int i;
|
||||
@@ -1689,7 +1747,7 @@ static void wlan_hdd_set_acs_ch_range(tsap_Config_t *sap_cfg, bool ht_enabled,
|
||||
|
||||
/* Parse ACS Chan list from hostapd */
|
||||
if (!sap_cfg->acs_cfg.ch_list)
|
||||
return;
|
||||
return -EINVAL;
|
||||
|
||||
sap_cfg->acs_cfg.start_ch = sap_cfg->acs_cfg.ch_list[0];
|
||||
sap_cfg->acs_cfg.end_ch =
|
||||
@@ -1702,6 +1760,8 @@ static void wlan_hdd_set_acs_ch_range(tsap_Config_t *sap_cfg, bool ht_enabled,
|
||||
if (sap_cfg->acs_cfg.end_ch < sap_cfg->acs_cfg.ch_list[i])
|
||||
sap_cfg->acs_cfg.end_ch = sap_cfg->acs_cfg.ch_list[i];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2158,12 +2218,12 @@ static void hdd_get_freq_list(uint8_t *channel_list, uint32_t *freq_list,
|
||||
freq_list[count] = cds_chan_to_freq(channel_list[count]);
|
||||
}
|
||||
|
||||
void hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
uint8_t reason)
|
||||
int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
tsap_Config_t *sap_config;
|
||||
uint32_t channel_count = 0, status;
|
||||
uint32_t channel_count = 0, status = -EINVAL;
|
||||
uint8_t channel_list[QDF_MAX_NUM_CHAN] = {0};
|
||||
uint32_t freq_list[QDF_MAX_NUM_CHAN] = {0};
|
||||
uint8_t vendor_pcl_list[QDF_MAX_NUM_CHAN] = {0};
|
||||
@@ -2178,7 +2238,7 @@ void hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD context is NULL");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ENTER();
|
||||
@@ -2238,7 +2298,7 @@ void hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
|
||||
if (!skb) {
|
||||
hdd_err("cfg80211_vendor_event_alloc failed");
|
||||
return;
|
||||
return -ENOMEM;
|
||||
}
|
||||
/*
|
||||
* Application expects pcl to be a subset of channel list
|
||||
@@ -2324,27 +2384,45 @@ void hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
|
||||
goto fail;
|
||||
|
||||
cfg80211_vendor_event(skb, GFP_KERNEL);
|
||||
return;
|
||||
return 0;
|
||||
fail:
|
||||
if (skb)
|
||||
kfree_skb(skb);
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_create_acs_timer(): Initialize vendor ACS timer
|
||||
* @adapter: pointer to SAP adapter struct
|
||||
*
|
||||
* This function initializes the vendor ACS timer.
|
||||
*
|
||||
* Return: Status of create vendor ACS timer
|
||||
*/
|
||||
static int hdd_create_acs_timer(struct hdd_adapter *adapter)
|
||||
{
|
||||
struct hdd_external_acs_timer_context *timer_context;
|
||||
QDF_STATUS status;
|
||||
|
||||
if (adapter->sessionCtx.ap.vendor_acs_timer_initialized)
|
||||
return 0;
|
||||
|
||||
hdd_notice("Starting vendor app based ACS");
|
||||
hdd_debug("Starting vendor app based ACS");
|
||||
timer_context = qdf_mem_malloc(sizeof(*timer_context));
|
||||
if (!timer_context) {
|
||||
hdd_err("Could not allocate for timer_context");
|
||||
return -ENOMEM;
|
||||
}
|
||||
timer_context->adapter = adapter;
|
||||
|
||||
set_bit(VENDOR_ACS_RESPONSE_PENDING, &adapter->event_flags);
|
||||
qdf_mc_timer_init(&adapter->sessionCtx.ap.vendor_acs_timer,
|
||||
status = qdf_mc_timer_init(&adapter->sessionCtx.ap.vendor_acs_timer,
|
||||
QDF_TIMER_TYPE_SW,
|
||||
hdd_acs_response_timeout_handler, timer_context);
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("Failed to initialize acs response timeout timer");
|
||||
return -EFAULT;
|
||||
}
|
||||
adapter->sessionCtx.ap.vendor_acs_timer_initialized = true;
|
||||
return 0;
|
||||
}
|
||||
@@ -2360,6 +2438,35 @@ wlan_hdd_cfg80211_do_acs_policy[QCA_WLAN_VENDOR_ATTR_ACS_MAX+1] = {
|
||||
[QCA_WLAN_VENDOR_ATTR_ACS_FREQ_LIST] = { .type = NLA_UNSPEC },
|
||||
};
|
||||
|
||||
int hdd_start_vendor_acs(struct hdd_adapter *adapter)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
int status;
|
||||
|
||||
status = hdd_create_acs_timer(adapter);
|
||||
if (status != 0) {
|
||||
hdd_err("failed to create acs timer");
|
||||
return status;
|
||||
}
|
||||
status = hdd_update_acs_timer_reason(adapter,
|
||||
QCA_WLAN_VENDOR_ACS_SELECT_REASON_INIT);
|
||||
if (status != 0) {
|
||||
hdd_err("failed to update acs timer reason");
|
||||
return status;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->acs_support_for_dfs_ltecoex)
|
||||
status = qdf_status_to_os_return(wlan_sap_set_vendor_acs(
|
||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||
true));
|
||||
else
|
||||
status = qdf_status_to_os_return(wlan_sap_set_vendor_acs(
|
||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||
false));
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* __wlan_hdd_cfg80211_do_acs(): CFG80211 handler function for DO_ACS Vendor CMD
|
||||
* @wiphy: Linux wiphy struct pointer
|
||||
@@ -2372,7 +2479,6 @@ wlan_hdd_cfg80211_do_acs_policy[QCA_WLAN_VENDOR_ATTR_ACS_MAX+1] = {
|
||||
*
|
||||
* Return: ACS procedure start status
|
||||
*/
|
||||
|
||||
static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
const void *data, int data_len)
|
||||
@@ -2431,6 +2537,7 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
|
||||
if (!tb[QCA_WLAN_VENDOR_ATTR_ACS_HW_MODE]) {
|
||||
hdd_err("Attr hw_mode failed");
|
||||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
hw_mode = nla_get_u8(tb[QCA_WLAN_VENDOR_ATTR_ACS_HW_MODE]);
|
||||
@@ -2504,8 +2611,11 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
sap_config->acs_cfg.ch_list = qdf_mem_malloc(
|
||||
sizeof(uint8_t) *
|
||||
sap_config->acs_cfg.ch_list_count);
|
||||
if (sap_config->acs_cfg.ch_list == NULL)
|
||||
if (!sap_config->acs_cfg.ch_list) {
|
||||
hdd_err("ACS config alloc fail");
|
||||
status = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
qdf_mem_copy(sap_config->acs_cfg.ch_list, tmp,
|
||||
sap_config->acs_cfg.ch_list_count);
|
||||
@@ -2519,7 +2629,7 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
if (sap_config->acs_cfg.ch_list_count) {
|
||||
sap_config->acs_cfg.ch_list = qdf_mem_malloc(
|
||||
sap_config->acs_cfg.ch_list_count);
|
||||
if (sap_config->acs_cfg.ch_list == NULL) {
|
||||
if (!sap_config->acs_cfg.ch_list) {
|
||||
hdd_err("ACS config alloc fail");
|
||||
status = -ENOMEM;
|
||||
goto out;
|
||||
@@ -2540,7 +2650,7 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
&sap_config->acs_cfg.pcl_ch_count,
|
||||
sap_config->acs_cfg.pcl_channels_weight_list,
|
||||
QDF_MAX_NUM_CHAN);
|
||||
if (QDF_STATUS_SUCCESS != qdf_status)
|
||||
if (qdf_status != QDF_STATUS_SUCCESS)
|
||||
hdd_err("Get PCL failed");
|
||||
|
||||
if (sap_config->acs_cfg.pcl_ch_count) {
|
||||
@@ -2554,14 +2664,20 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
pcl_channels_weight_list[i]);
|
||||
}
|
||||
|
||||
wlan_hdd_set_acs_ch_range(sap_config, ht_enabled, vht_enabled);
|
||||
status = wlan_hdd_set_acs_ch_range(sap_config, ht_enabled, vht_enabled);
|
||||
if (status) {
|
||||
hdd_err("set acs channel range failed");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (hdd_ctx->config->force_sap_acs) {
|
||||
hdd_debug("forcing SAP acs start and end channel");
|
||||
status = wlan_hdd_reset_force_acs_chan_range(hdd_ctx,
|
||||
sap_config);
|
||||
if (status != 0)
|
||||
if (status) {
|
||||
hdd_err("reset force acs channel range failed");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
sap_config->acs_cfg.band = hw_mode;
|
||||
@@ -2618,20 +2734,9 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
|
||||
status = 0;
|
||||
} else {
|
||||
/* Check if vendor specific acs is enabled */
|
||||
if (hdd_ctx->config->vendor_acs_support) {
|
||||
hdd_create_acs_timer(adapter);
|
||||
hdd_update_acs_timer_reason(adapter,
|
||||
QCA_WLAN_VENDOR_ACS_SELECT_REASON_INIT);
|
||||
if (hdd_ctx->config->acs_support_for_dfs_ltecoex)
|
||||
wlan_sap_set_vendor_acs(
|
||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||
true);
|
||||
else
|
||||
wlan_sap_set_vendor_acs(
|
||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||
false);
|
||||
|
||||
} else
|
||||
if (hdd_ctx->config->vendor_acs_support)
|
||||
status = hdd_start_vendor_acs(adapter);
|
||||
else
|
||||
status = wlan_hdd_cfg80211_start_acs(adapter);
|
||||
}
|
||||
|
||||
|
@@ -1455,6 +1455,8 @@ static void wlan_hdd_purge_notifier(void)
|
||||
static void wlan_hdd_pld_uevent(struct device *dev,
|
||||
struct pld_uevent_data *uevent)
|
||||
{
|
||||
|
||||
hdd_info("pld event %d", uevent->uevent);
|
||||
switch (uevent->uevent) {
|
||||
case PLD_RECOVERY:
|
||||
cds_set_recovery_in_progress(true);
|
||||
|
@@ -3633,6 +3633,17 @@ static __iw_softap_setparam(struct net_device *dev,
|
||||
break;
|
||||
}
|
||||
|
||||
case QCASAP_SET_HE_BSS_COLOR:
|
||||
if (adapter->device_mode != QDF_SAP_MODE)
|
||||
return -EINVAL;
|
||||
|
||||
status = sme_set_he_bss_color(hHal, adapter->sessionId,
|
||||
set_value);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
hdd_err("SET_HE_BSS_COLOR failed");
|
||||
return -EIO;
|
||||
}
|
||||
break;
|
||||
case QCASAP_SET_DFS_NOL:
|
||||
wlansap_set_dfs_nol(
|
||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||
@@ -3695,7 +3706,10 @@ static __iw_softap_setparam(struct net_device *dev,
|
||||
/* If input value is non-zero get stats */
|
||||
switch (set_value) {
|
||||
case 1:
|
||||
hdd_ipa_uc_stat_request(adapter, set_value);
|
||||
hdd_ipa_uc_stat(adapter);
|
||||
break;
|
||||
case 2:
|
||||
hdd_ipa_uc_info(hdd_ctx);
|
||||
break;
|
||||
case 3:
|
||||
hdd_ipa_uc_rt_debug_host_dump(hdd_ctx);
|
||||
@@ -5659,6 +5673,9 @@ static const struct iw_priv_args hostapd_private_args[] = {
|
||||
QCASAP_RX_CHAINMASK_CMD,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
0, "set_rxchainmask"
|
||||
}, {
|
||||
QCASAP_SET_HE_BSS_COLOR,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_he_bss_clr"
|
||||
}, {
|
||||
QCASAP_NSS_CMD,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_nss"
|
||||
@@ -7321,8 +7338,9 @@ QDF_STATUS wlan_hdd_config_acs(struct hdd_context *hdd_ctx, struct hdd_adapter *
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_setup_driver_overrides : Overrides SAP / P2P GO Params
|
||||
* @adapter: pointer to adapter struct
|
||||
* wlan_hdd_sap_p2p_11ac_overrides: API to overwrite 11ac config in case of
|
||||
* SAP or p2p go
|
||||
* @ap_adapter: pointer to adapter
|
||||
*
|
||||
* This function overrides SAP / P2P Go configuration based on driver INI
|
||||
* parameters for 11AC override and ACS. This overrides are done to support
|
||||
@@ -7334,16 +7352,11 @@ QDF_STATUS wlan_hdd_config_acs(struct hdd_context *hdd_ctx, struct hdd_adapter *
|
||||
*
|
||||
* Return: 0 for Success or Negative error codes.
|
||||
*/
|
||||
static int wlan_hdd_setup_driver_overrides(struct hdd_adapter *ap_adapter)
|
||||
static int wlan_hdd_sap_p2p_11ac_overrides(struct hdd_adapter *ap_adapter)
|
||||
{
|
||||
tsap_Config_t *sap_cfg = &ap_adapter->sessionCtx.ap.sapConfig;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
|
||||
|
||||
if (ap_adapter->device_mode == QDF_SAP_MODE &&
|
||||
hdd_ctx->config->force_sap_acs &&
|
||||
!hdd_ctx->config->vendor_acs_support)
|
||||
goto setup_acs_overrides;
|
||||
|
||||
/* Fixed channel 11AC override:
|
||||
* 11AC override in qcacld is introduced for following reasons:
|
||||
* 1. P2P GO also follows start_bss and since p2p GO could not be
|
||||
@@ -7388,14 +7401,33 @@ static int wlan_hdd_setup_driver_overrides(struct hdd_adapter *ap_adapter)
|
||||
sap_cfg->ch_width_orig =
|
||||
eHT_CHANNEL_WIDTH_20MHZ;
|
||||
}
|
||||
sap_cfg->ch_params.ch_width = sap_cfg->ch_width_orig;
|
||||
wlan_reg_set_channel_params(hdd_ctx->hdd_pdev, sap_cfg->channel,
|
||||
sap_cfg->sec_ch, &sap_cfg->ch_params);
|
||||
}
|
||||
sap_cfg->ch_params.ch_width = sap_cfg->ch_width_orig;
|
||||
wlan_reg_set_channel_params(hdd_ctx->hdd_pdev, sap_cfg->channel,
|
||||
sap_cfg->sec_ch, &sap_cfg->ch_params);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_setup_acs_overrides : Overrides ACS configurations
|
||||
* @adapter: pointer to adapter struct
|
||||
*
|
||||
* This function overrides ACS configuration based on driver INI
|
||||
* parameters. These overrides are done to support android legacy
|
||||
* configuration method.
|
||||
*
|
||||
* NOTE: Non android platform supports concurrency and these overrides shall
|
||||
* not be used. Also future driver based overrides shall be consolidated in this
|
||||
* function only. Avoid random overrides in other location based on ini.
|
||||
*
|
||||
* Return: 0 for Success or Negative error codes.
|
||||
*/
|
||||
static int wlan_hdd_setup_acs_overrides(struct hdd_adapter *ap_adapter)
|
||||
{
|
||||
tsap_Config_t *sap_cfg = &ap_adapter->sessionCtx.ap.sapConfig;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
|
||||
|
||||
setup_acs_overrides:
|
||||
hdd_debug("** Driver force ACS override **");
|
||||
|
||||
sap_cfg->channel = AUTO_CHANNEL_SELECT;
|
||||
@@ -7474,6 +7506,34 @@ setup_acs_overrides:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_setup_driver_overrides : Overrides SAP / P2P GO Params
|
||||
* @adapter: pointer to adapter struct
|
||||
*
|
||||
* This function overrides SAP / P2P Go configuration based on driver INI
|
||||
* parameters for 11AC override and ACS. These overrides are done to support
|
||||
* android legacy configuration method.
|
||||
*
|
||||
* NOTE: Non android platform supports concurrency and these overrides shall
|
||||
* not be used. Also future driver based overrides shall be consolidated in this
|
||||
* function only. Avoid random overrides in other location based on ini.
|
||||
*
|
||||
* Return: 0 for Success or Negative error codes.
|
||||
*/
|
||||
static int wlan_hdd_setup_driver_overrides(struct hdd_adapter *ap_adapter)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
|
||||
|
||||
if (!hdd_ctx->config->vendor_acs_support) {
|
||||
if (ap_adapter->device_mode == QDF_SAP_MODE &&
|
||||
hdd_ctx->config->force_sap_acs)
|
||||
return wlan_hdd_setup_acs_overrides(ap_adapter);
|
||||
else
|
||||
return wlan_hdd_sap_p2p_11ac_overrides(ap_adapter);
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_hdd_cfg80211_start_bss() - start bss
|
||||
* @adapter: Pointer to hostapd adapter
|
||||
|
Diff onderdrukt omdat het te groot bestand
Laad Diff
@@ -148,7 +148,8 @@ enum hdd_lro_rx_status hdd_lro_rx(struct hdd_context *hdd_ctx,
|
||||
if (((adapter->dev->features & NETIF_F_LRO) != NETIF_F_LRO) ||
|
||||
!QDF_NBUF_CB_RX_TCP_PROTO(skb) ||
|
||||
QDF_NBUF_CB_RX_PEER_CACHED_FRM(skb) ||
|
||||
qdf_atomic_read(&hdd_ctx->disable_lro_in_concurrency))
|
||||
qdf_atomic_read(&hdd_ctx->disable_lro_in_concurrency) ||
|
||||
qdf_atomic_read(&hdd_ctx->disable_lro_in_low_tput))
|
||||
return HDD_LRO_NO_RX;
|
||||
|
||||
{
|
||||
@@ -222,9 +223,7 @@ void hdd_disable_lro_in_concurrency(bool disable)
|
||||
if (disable) {
|
||||
if (hdd_ctx->en_tcp_delack_no_lro) {
|
||||
hdd_info("Enable TCP delack as LRO disabled in concurrency");
|
||||
wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
|
||||
WLAN_SVC_WLAN_TP_IND, &hdd_ctx->cur_rx_level,
|
||||
sizeof(hdd_ctx->cur_rx_level));
|
||||
hdd_send_wlan_tp_ind(hdd_ctx);
|
||||
hdd_ctx->en_tcp_delack_no_lro = 1;
|
||||
}
|
||||
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 1);
|
||||
@@ -237,3 +236,11 @@ void hdd_disable_lro_in_concurrency(bool disable)
|
||||
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void hdd_disable_lro_for_low_tput(struct hdd_context *hdd_ctx, bool disable)
|
||||
{
|
||||
if (disable)
|
||||
qdf_atomic_set(&hdd_ctx->disable_lro_in_low_tput, 1);
|
||||
else
|
||||
qdf_atomic_set(&hdd_ctx->disable_lro_in_low_tput, 0);
|
||||
}
|
||||
|
@@ -1075,6 +1075,7 @@ static void hdd_update_tgt_services(struct hdd_context *hdd_ctx,
|
||||
config->isRoamOffloadEnabled &= cfg->en_roam_offload;
|
||||
#endif
|
||||
config->sap_get_peer_info &= cfg->get_peer_info_enabled;
|
||||
config->MAWCEnabled &= cfg->is_fw_mawc_capable;
|
||||
sme_update_tgt_services(hdd_ctx->hHal, cfg);
|
||||
|
||||
}
|
||||
@@ -4410,6 +4411,7 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *ada
|
||||
case QDF_SAP_MODE:
|
||||
/* Flush IPA exception path packets */
|
||||
hdd_ipa_flush(hdd_ctx);
|
||||
|
||||
case QDF_P2P_GO_MODE:
|
||||
if (QDF_SAP_MODE == adapter->device_mode) {
|
||||
if (test_bit(ACS_PENDING, &adapter->event_flags)) {
|
||||
@@ -4419,7 +4421,9 @@ QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *ada
|
||||
}
|
||||
}
|
||||
cds_flush_work(&adapter->sap_stop_bss_work);
|
||||
|
||||
/* Any softap specific cleanup here... */
|
||||
wlan_hdd_undo_acs(adapter);
|
||||
if (adapter->device_mode == QDF_P2P_GO_MODE)
|
||||
wlan_hdd_cleanup_remain_on_channel_ctx(adapter);
|
||||
|
||||
@@ -6406,6 +6410,11 @@ static void hdd_pld_request_bus_bandwidth(struct hdd_context *hdd_ctx,
|
||||
|
||||
hdd_ctx->prev_rx = rx_packets;
|
||||
|
||||
if (temp_rx < hdd_ctx->config->busBandwidthLowThreshold)
|
||||
hdd_disable_lro_for_low_tput(hdd_ctx, true);
|
||||
else
|
||||
hdd_disable_lro_for_low_tput(hdd_ctx, false);
|
||||
|
||||
if (temp_rx > hdd_ctx->config->tcpDelackThresholdHigh) {
|
||||
if ((hdd_ctx->cur_rx_level != WLAN_SVC_TP_HIGH) &&
|
||||
(++hdd_ctx->rx_high_ind_cnt == delack_timer_cnt)) {
|
||||
@@ -6648,6 +6657,13 @@ void hdd_bus_bw_cancel_work(struct hdd_context *hdd_ctx)
|
||||
if (hdd_ctx)
|
||||
cancel_work_sync(&hdd_ctx->bus_bw_work);
|
||||
}
|
||||
|
||||
void hdd_send_wlan_tp_ind(struct hdd_context *hdd_ctx)
|
||||
{
|
||||
wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
|
||||
WLAN_SVC_WLAN_TP_IND, &hdd_ctx->cur_rx_level,
|
||||
sizeof(hdd_ctx->cur_rx_level));
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -7183,6 +7199,8 @@ void hdd_switch_sap_channel(struct hdd_adapter *adapter, uint8_t channel)
|
||||
int hdd_update_acs_timer_reason(struct hdd_adapter *adapter, uint8_t reason)
|
||||
{
|
||||
struct hdd_external_acs_timer_context *timer_context;
|
||||
int status;
|
||||
QDF_STATUS qdf_status;
|
||||
|
||||
set_bit(VENDOR_ACS_RESPONSE_PENDING, &adapter->event_flags);
|
||||
|
||||
@@ -7194,13 +7212,18 @@ int hdd_update_acs_timer_reason(struct hdd_adapter *adapter, uint8_t reason)
|
||||
timer_context = (struct hdd_external_acs_timer_context *)
|
||||
adapter->sessionCtx.ap.vendor_acs_timer.user_data;
|
||||
timer_context->reason = reason;
|
||||
/* Update config to application and start the timer */
|
||||
hdd_cfg80211_update_acs_config(adapter, reason);
|
||||
qdf_mc_timer_start(&adapter->sessionCtx.ap.vendor_acs_timer,
|
||||
WLAN_VENDOR_ACS_WAIT_TIME);
|
||||
qdf_status =
|
||||
qdf_mc_timer_start(&adapter->sessionCtx.ap.vendor_acs_timer,
|
||||
WLAN_VENDOR_ACS_WAIT_TIME);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
hdd_err("failed to start external acs timer");
|
||||
return -ENOSPC;
|
||||
}
|
||||
/* Update config to application */
|
||||
status = hdd_cfg80211_update_acs_config(adapter, reason);
|
||||
hdd_notice("Updated ACS config to nl with reason %d", reason);
|
||||
|
||||
return 0;
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -10419,6 +10442,7 @@ void wlan_hdd_send_svc_nlink_msg(int radio, int type, void *data, int len)
|
||||
case WLAN_SVC_WLAN_TP_IND:
|
||||
case WLAN_SVC_WLAN_TP_TX_IND:
|
||||
case WLAN_SVC_RPS_ENABLE_IND:
|
||||
case WLAN_SVC_CORE_MINFREQ:
|
||||
ani_hdr->length = len;
|
||||
nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + len));
|
||||
nl_data = (char *)ani_hdr + sizeof(tAniMsgHdr);
|
||||
@@ -12116,6 +12140,8 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx)
|
||||
scan_cfg.rssi_cat_gap = cfg->nRssiCatGap;
|
||||
scan_cfg.scan_dwell_time_mode = cfg->scan_adaptive_dwell_mode;
|
||||
scan_cfg.is_snr_monitoring_enabled = cfg->fEnableSNRMonitoring;
|
||||
scan_cfg.usr_cfg_probe_rpt_time = cfg->scan_probe_repeat_time ;
|
||||
scan_cfg.usr_cfg_num_probes = cfg->scan_num_probes ;
|
||||
scan_cfg.is_bssid_hint_priority = cfg->is_bssid_hint_priority;
|
||||
|
||||
hdd_update_pno_config(&scan_cfg.pno_cfg, cfg);
|
||||
|
@@ -259,6 +259,69 @@ int hdd_napi_event(enum qca_napi_event event, void *data)
|
||||
}
|
||||
|
||||
#ifdef HELIUMPLUS
|
||||
/**
|
||||
* hdd_napi_perfd_cpufreq() - set/reset min CPU freq for cores
|
||||
* @req_state: high/low
|
||||
*
|
||||
* Send a message to cnss-daemon through netlink. cnss-daemon,
|
||||
* in turn, sends a message to perf-daemon.
|
||||
* If freq > 0, this is a set request. It sets the min frequency of the
|
||||
* cores of the specified cluster to provided freq value (in KHz).
|
||||
* If freq == 0, then the freq lock is removed (and frequency returns to
|
||||
* system default).
|
||||
*
|
||||
* Semantical Alert:
|
||||
* There can be at most one lock active at a time. Each "set" request must
|
||||
* be followed by a "reset" request. Perfd behaviour is undefined otherwise.
|
||||
*
|
||||
* Return: == 0: netlink message sent to cnss-daemon
|
||||
* < 0: failure to send the message
|
||||
*/
|
||||
static int hdd_napi_perfd_cpufreq(enum qca_napi_tput_state req_state)
|
||||
{
|
||||
int rc = 0;
|
||||
struct wlan_core_minfreq req;
|
||||
struct hdd_context *hdd_ctx;
|
||||
|
||||
NAPI_DEBUG("-> (%d)", req_state);
|
||||
|
||||
hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
if (unlikely(hdd_ctx == NULL)) {
|
||||
hdd_err("cannot get hdd_context");
|
||||
rc = -EFAULT;
|
||||
goto hnpc_ret;
|
||||
}
|
||||
|
||||
switch (req_state) {
|
||||
case QCA_NAPI_TPUT_LO:
|
||||
req.magic = WLAN_CORE_MINFREQ_MAGIC;
|
||||
req.reserved = 0; /* unused */
|
||||
req.coremask = 0; /* not valid */
|
||||
req.freq = 0; /* reset */
|
||||
break;
|
||||
case QCA_NAPI_TPUT_HI:
|
||||
req.magic = WLAN_CORE_MINFREQ_MAGIC;
|
||||
req.reserved = 0; /* unused */
|
||||
req.coremask = 0x0f0; /* perf cluster */
|
||||
req.freq = 700; /* KHz */
|
||||
break;
|
||||
default:
|
||||
hdd_err("invalid req_state (%d)", req_state);
|
||||
rc = -EINVAL;
|
||||
goto hnpc_ret;
|
||||
} /* switch */
|
||||
|
||||
NAPI_DEBUG("CPU min freq to %d",
|
||||
(req.freq == 0)?"Resetting":"Setting", req.freq);
|
||||
/* the following service function returns void */
|
||||
wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
|
||||
WLAN_SVC_CORE_MINFREQ,
|
||||
&req, sizeof(struct wlan_core_minfreq));
|
||||
hnpc_ret:
|
||||
NAPI_DEBUG("<--[rc=%d]", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_napi_apply_throughput_policy() - implement the throughput action policy
|
||||
* @hddctx: HDD context
|
||||
@@ -285,8 +348,8 @@ int hdd_napi_event(enum qca_napi_event event, void *data)
|
||||
*/
|
||||
static int napi_tput_policy_delay;
|
||||
int hdd_napi_apply_throughput_policy(struct hdd_context *hddctx,
|
||||
uint64_t tx_packets,
|
||||
uint64_t rx_packets)
|
||||
uint64_t tx_packets,
|
||||
uint64_t rx_packets)
|
||||
{
|
||||
int rc = 0;
|
||||
uint64_t packets = tx_packets + rx_packets;
|
||||
@@ -325,8 +388,12 @@ int hdd_napi_apply_throughput_policy(struct hdd_context *hddctx,
|
||||
else
|
||||
req_state = QCA_NAPI_TPUT_LO;
|
||||
|
||||
if (req_state != napid->napi_mode)
|
||||
if (req_state != napid->napi_mode) {
|
||||
/* [re]set the floor frequency of high cluster */
|
||||
rc = hdd_napi_perfd_cpufreq(req_state);
|
||||
/* blacklist/boost_mode on/off */
|
||||
rc = hdd_napi_event(NAPI_EVT_TPUT_STATE, (void *)req_state);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@@ -41,9 +41,9 @@
|
||||
#define QWLAN_VERSION_MAJOR 5
|
||||
#define QWLAN_VERSION_MINOR 2
|
||||
#define QWLAN_VERSION_PATCH 0
|
||||
#define QWLAN_VERSION_EXTRA "G"
|
||||
#define QWLAN_VERSION_EXTRA "W"
|
||||
#define QWLAN_VERSION_BUILD 51
|
||||
|
||||
#define QWLAN_VERSIONSTR "5.2.0.51G"
|
||||
#define QWLAN_VERSIONSTR "5.2.0.51W"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
@@ -2718,6 +2718,20 @@ struct sir_update_session_param {
|
||||
uint32_t param_val;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sir_set_he_bss_color
|
||||
* @message_type: SME message type
|
||||
* @length: size of struct sir_set_he_bss_color
|
||||
* @session_id: Session ID
|
||||
* @bss_color: bss color value
|
||||
*/
|
||||
struct sir_set_he_bss_color {
|
||||
uint16_t message_type;
|
||||
uint16_t length;
|
||||
uint8_t session_id;
|
||||
uint8_t bss_color;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sir_create_session - Used for creating session in monitor mode
|
||||
* @type: SME host message type.
|
||||
|
@@ -248,6 +248,7 @@ enum eWniMsgTypes {
|
||||
eWNI_SME_DFS_CAC_COMPLETE,
|
||||
eWNI_SME_UPDATE_CONFIG,
|
||||
eWNI_SME_BT_ACTIVITY_INFO_IND,
|
||||
eWNI_SME_SET_HE_BSS_COLOR,
|
||||
eWNI_SME_MSG_TYPES_END
|
||||
};
|
||||
|
||||
|
@@ -1881,6 +1881,11 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx,
|
||||
qdf_mem_free((void *)msg->bodyptr);
|
||||
msg->bodyptr = NULL;
|
||||
break;
|
||||
case eWNI_SME_SET_HE_BSS_COLOR:
|
||||
lim_process_set_he_bss_color(mac_ctx, msg->bodyptr);
|
||||
qdf_mem_free((void *)msg->bodyptr);
|
||||
msg->bodyptr = NULL;
|
||||
break;
|
||||
case eWNI_SME_DEL_ALL_TDLS_PEERS:
|
||||
lim_process_sme_del_all_tdls_peers(mac_ctx, msg->bodyptr);
|
||||
qdf_mem_free((void *)msg->bodyptr);
|
||||
|
@@ -6046,3 +6046,59 @@ static void lim_process_set_ie_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
pe_err("Unable to send ExtCap to FW");
|
||||
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
void lim_process_set_he_bss_color(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
|
||||
{
|
||||
struct sir_set_he_bss_color *bss_color;
|
||||
tpPESession session_entry = NULL;
|
||||
tUpdateBeaconParams beacon_params;
|
||||
|
||||
if (!msg_buf) {
|
||||
pe_err("Buffer is Pointing to NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
bss_color = (struct sir_set_he_bss_color *)msg_buf;
|
||||
session_entry = pe_find_session_by_sme_session_id(mac_ctx,
|
||||
bss_color->session_id);
|
||||
if (!session_entry) {
|
||||
pe_err("Session not found for given session_id %d",
|
||||
bss_color->session_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (session_entry->valid && !LIM_IS_AP_ROLE(session_entry)) {
|
||||
pe_err("Invalid SystemRole %d",
|
||||
GET_LIM_SYSTEM_ROLE(session_entry));
|
||||
return;
|
||||
}
|
||||
|
||||
if (bss_color->bss_color == session_entry->he_op.bss_color) {
|
||||
pe_err("No change in BSS color, current BSS color %d",
|
||||
bss_color->bss_color);
|
||||
return;
|
||||
}
|
||||
qdf_mem_zero(&beacon_params, sizeof(beacon_params));
|
||||
beacon_params.paramChangeBitmap |= PARAM_BSS_COLOR_CHANGED;
|
||||
session_entry->he_op.bss_col_disabled = 1;
|
||||
session_entry->he_bss_color_change.countdown =
|
||||
BSS_COLOR_SWITCH_COUNTDOWN;
|
||||
session_entry->he_bss_color_change.new_color = bss_color->bss_color;
|
||||
session_entry->he_op.bss_color =
|
||||
session_entry->he_bss_color_change.new_color;
|
||||
WMI_HEOPS_COLOR_SET(beacon_params.he_ops,
|
||||
session_entry->he_op.bss_color);
|
||||
WMI_HEOPS_BSSCOLORDISABLE_SET(beacon_params.he_ops,
|
||||
session_entry->he_op.bss_col_disabled);
|
||||
session_entry->bss_color_changing = 1;
|
||||
|
||||
if (sch_set_fixed_beacon_fields(mac_ctx, session_entry) !=
|
||||
eSIR_SUCCESS) {
|
||||
pe_err("Unable to set op mode IE in beacon");
|
||||
return;
|
||||
}
|
||||
|
||||
lim_send_beacon_params(mac_ctx, &beacon_params, session_entry);
|
||||
}
|
||||
#endif
|
||||
|
@@ -234,7 +234,22 @@ vendor3:
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX
|
||||
static void lim_extract_he_op(tpPESession session,
|
||||
tSirProbeRespBeacon *beacon_struct)
|
||||
{
|
||||
if (session->he_capable && beacon_struct->he_op.present) {
|
||||
qdf_mem_copy(&session->he_op, &beacon_struct->he_op,
|
||||
sizeof(session->he_op));
|
||||
pe_debug("he_op.bss_color %d", session->he_op.bss_color);
|
||||
pe_debug("he_op.default_pe %d", session->he_op.default_pe);
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void lim_extract_he_op(tpPESession session,
|
||||
tSirProbeRespBeacon *beacon_struct)
|
||||
{}
|
||||
#endif
|
||||
/**
|
||||
* lim_extract_ap_capability() - extract AP's HCF/WME/WSM capability
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -469,6 +484,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
|
||||
pe_err("AP does not support op_mode rx");
|
||||
}
|
||||
}
|
||||
lim_extract_he_op(session, beacon_struct);
|
||||
/* Extract the UAPSD flag from WMM Parameter element */
|
||||
if (beacon_struct->wmeEdcaPresent)
|
||||
*uapsd = beacon_struct->edcaParams.qosInfo.uapsd;
|
||||
|
@@ -487,29 +487,6 @@ lim_restore_from_auth_state(tpAniSirGlobal pMac, tSirResultCodes resultCode,
|
||||
lim_post_sme_message(pMac, LIM_MLM_AUTH_CNF, (uint32_t *) &mlmAuthCnf);
|
||||
} /*** end lim_restore_from_auth_state() ***/
|
||||
|
||||
#ifdef WLAN_FEATURE_FILS_SK
|
||||
/*
|
||||
* lim_get_fils_auth_data_len: This API will return
|
||||
* extra auth data len in case of fils session
|
||||
*
|
||||
* Return: fils data len in auth packet
|
||||
*/
|
||||
static int lim_get_fils_auth_data_len(void)
|
||||
{
|
||||
int len = sizeof(tSirMacRsnInfo) +
|
||||
sizeof(uint8_t) + /* assoc_delay_info */
|
||||
SIR_FILS_SESSION_LENGTH +
|
||||
sizeof(uint8_t) + /* wrapped_data_len */
|
||||
SIR_FILS_WRAPPED_DATA_MAX_SIZE + SIR_FILS_NONCE_LENGTH;
|
||||
return len;
|
||||
}
|
||||
#else
|
||||
static inline int lim_get_fils_auth_data_len(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_encrypt_auth_frame()
|
||||
*
|
||||
@@ -542,7 +519,8 @@ lim_encrypt_auth_frame(tpAniSirGlobal pMac, uint8_t keyId, uint8_t *pKey,
|
||||
uint8_t seed[LIM_SEED_LENGTH], icv[SIR_MAC_WEP_ICV_LENGTH];
|
||||
uint16_t frame_len;
|
||||
|
||||
frame_len = sizeof(tSirMacAuthFrameBody) - lim_get_fils_auth_data_len();
|
||||
frame_len = ((tpSirMacAuthFrameBody)pPlainText)->length +
|
||||
SIR_MAC_AUTH_FRAME_INFO_LEN + SIR_MAC_CHALLENGE_ID_LEN;
|
||||
keyLength += 3;
|
||||
|
||||
/* Bytes 3-7 of seed is key */
|
||||
|
@@ -497,6 +497,21 @@ static inline void lim_send_reassoc_req_mgmt_frame(tpAniSirGlobal mac_ctx,
|
||||
tLimMlmReassocReq *reassoc_req, tpPESession pe_session)
|
||||
{}
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
/**
|
||||
* lim_process_set_he_bss_color() - process the set he bss color request
|
||||
*
|
||||
* @mac_ctx: global mac context pointer
|
||||
* @msg_buf: message buffer pointer
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void lim_process_set_he_bss_color(tpAniSirGlobal mac_ctx, uint32_t *msg_buf);
|
||||
#else
|
||||
static inline void lim_process_set_he_bss_color(tpAniSirGlobal mac_ctx,
|
||||
uint32_t *msg_buf)
|
||||
{}
|
||||
#endif
|
||||
void lim_send_delts_req_action_frame(tpAniSirGlobal pMac, tSirMacAddr peer,
|
||||
uint8_t wmmTspecPresent,
|
||||
tSirMacTSInfo * pTsinfo,
|
||||
|
@@ -2351,6 +2351,24 @@ void update_fils_data(struct sir_fils_indication *fils_ind,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
static void update_bss_color_change_ie_from_probe_rsp(
|
||||
tDot11fProbeResponse *prb_frm,
|
||||
tpSirProbeRespBeacon prb_rsp_struct)
|
||||
{
|
||||
if (prb_frm->bss_color_change.present) {
|
||||
pe_debug("11AX: HE BSS color change present");
|
||||
qdf_mem_copy(&prb_rsp_struct->vendor_he_bss_color_change,
|
||||
&prb_frm->bss_color_change,
|
||||
sizeof(tDot11fIEbss_color_change));
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void update_bss_color_change_ie_from_probe_rsp(
|
||||
tDot11fProbeResponse *prb_frm,
|
||||
tpSirProbeRespBeacon prb_rsp_struct)
|
||||
{}
|
||||
#endif
|
||||
tSirRetStatus sir_convert_probe_frame2_struct(tpAniSirGlobal pMac,
|
||||
uint8_t *pFrame,
|
||||
uint32_t nFrame,
|
||||
@@ -2624,6 +2642,8 @@ tSirRetStatus sir_convert_probe_frame2_struct(tpAniSirGlobal pMac,
|
||||
sizeof(tDot11fIEhe_op));
|
||||
}
|
||||
|
||||
update_bss_color_change_ie_from_probe_rsp(pr, pProbeResp);
|
||||
|
||||
qdf_mem_free(pr);
|
||||
return eSIR_SUCCESS;
|
||||
|
||||
@@ -3150,6 +3170,11 @@ sir_convert_assoc_resp_frame2_struct(tpAniSirGlobal pMac,
|
||||
pe_debug("11AX: HE Operation IE present");
|
||||
qdf_mem_copy(&pAssocRsp->he_op, &ar->he_op,
|
||||
sizeof(tDot11fIEhe_op));
|
||||
pe_debug("bss_clr %d def_pe %d part_bss_clr %d bss_col_dis %d",
|
||||
pAssocRsp->he_op.bss_color,
|
||||
pAssocRsp->he_op.default_pe,
|
||||
pAssocRsp->he_op.partial_bss_col,
|
||||
pAssocRsp->he_op.bss_col_disabled);
|
||||
}
|
||||
|
||||
if (ar->MBO_IE.present && ar->MBO_IE.rssi_assoc_rej.present) {
|
||||
@@ -3624,6 +3649,23 @@ err_bcnrep:
|
||||
|
||||
#endif /* FEATURE_WLAN_ESE */
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
static void update_bss_color_change_from_beacon_ies(tDot11fBeaconIEs *bcn_ies,
|
||||
tpSirProbeRespBeacon bcn_struct)
|
||||
{
|
||||
if (bcn_ies->bss_color_change.present) {
|
||||
qdf_mem_copy(&bcn_struct->vendor_he_bss_color_change,
|
||||
&bcn_ies->bss_color_change,
|
||||
sizeof(tDot11fIEbss_color_change));
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void update_bss_color_change_from_beacon_ies(
|
||||
tDot11fBeaconIEs *bcn_ies,
|
||||
tpSirProbeRespBeacon bcn_struct)
|
||||
{}
|
||||
#endif
|
||||
|
||||
tSirRetStatus
|
||||
sir_parse_beacon_ie(tpAniSirGlobal pMac,
|
||||
tpSirProbeRespBeacon pBeaconStruct,
|
||||
@@ -3904,20 +3946,37 @@ sir_parse_beacon_ie(tpAniSirGlobal pMac,
|
||||
}
|
||||
|
||||
if (pBies->he_cap.present) {
|
||||
qdf_mem_copy(&pBeaconStruct->he_cap,
|
||||
&pBies->he_cap,
|
||||
qdf_mem_copy(&pBeaconStruct->he_cap, &pBies->he_cap,
|
||||
sizeof(tDot11fIEhe_cap));
|
||||
}
|
||||
if (pBies->he_op.present) {
|
||||
qdf_mem_copy(&pBeaconStruct->he_op,
|
||||
&pBies->he_op,
|
||||
qdf_mem_copy(&pBeaconStruct->he_op, &pBies->he_op,
|
||||
sizeof(tDot11fIEhe_op));
|
||||
}
|
||||
|
||||
update_bss_color_change_from_beacon_ies(pBies, pBeaconStruct);
|
||||
|
||||
qdf_mem_free(pBies);
|
||||
return eSIR_SUCCESS;
|
||||
} /* End sir_parse_beacon_ie. */
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
static void convert_bcon_bss_color_change_ie(tDot11fBeacon *bcn_frm,
|
||||
tpSirProbeRespBeacon bcn_struct)
|
||||
{
|
||||
if (bcn_frm->bss_color_change.present) {
|
||||
pe_debug("11AX: HE BSS color change present");
|
||||
qdf_mem_copy(&bcn_struct->vendor_he_bss_color_change,
|
||||
&bcn_frm->bss_color_change,
|
||||
sizeof(tDot11fIEbss_color_change));
|
||||
}
|
||||
}
|
||||
#else
|
||||
static inline void convert_bcon_bss_color_change_ie(tDot11fBeacon *bcn_frm,
|
||||
tpSirProbeRespBeacon bcn_struct)
|
||||
{}
|
||||
#endif
|
||||
|
||||
tSirRetStatus
|
||||
sir_convert_beacon_frame2_struct(tpAniSirGlobal pMac,
|
||||
uint8_t *pFrame,
|
||||
@@ -4282,6 +4341,8 @@ sir_convert_beacon_frame2_struct(tpAniSirGlobal pMac,
|
||||
sizeof(tDot11fIEhe_op));
|
||||
}
|
||||
|
||||
convert_bcon_bss_color_change_ie(pBeacon, pBeaconStruct);
|
||||
|
||||
qdf_mem_free(pBeacon);
|
||||
return eSIR_SUCCESS;
|
||||
|
||||
|
@@ -347,7 +347,7 @@ int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
|
||||
ret = pld_pcie_wlan_enable(dev, config, mode, host_version);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_wlan_enable(config, mode, host_version);
|
||||
ret = pld_snoc_wlan_enable(dev, config, mode, host_version);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SDIO:
|
||||
break;
|
||||
@@ -378,7 +378,7 @@ int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode)
|
||||
ret = pld_pcie_wlan_disable(dev, mode);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_wlan_disable(mode);
|
||||
ret = pld_snoc_wlan_disable(dev, mode);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SDIO:
|
||||
break;
|
||||
@@ -409,7 +409,7 @@ int pld_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
|
||||
ret = pld_pcie_set_fw_log_mode(dev, fw_log_mode);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_set_fw_log_mode(fw_log_mode);
|
||||
ret = pld_snoc_set_fw_log_mode(dev, fw_log_mode);
|
||||
break;
|
||||
case PLD_BUS_TYPE_SDIO:
|
||||
break;
|
||||
@@ -971,7 +971,8 @@ int pld_ce_request_irq(struct device *dev, unsigned int ce_id,
|
||||
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_ce_request_irq(ce_id, handler, flags, name, ctx);
|
||||
ret = pld_snoc_ce_request_irq(dev, ce_id,
|
||||
handler, flags, name, ctx);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
break;
|
||||
@@ -998,7 +999,7 @@ int pld_ce_free_irq(struct device *dev, unsigned int ce_id, void *ctx)
|
||||
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_ce_free_irq(ce_id, ctx);
|
||||
ret = pld_snoc_ce_free_irq(dev, ce_id, ctx);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
break;
|
||||
@@ -1021,7 +1022,7 @@ void pld_enable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
pld_snoc_enable_irq(ce_id);
|
||||
pld_snoc_enable_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
break;
|
||||
@@ -1044,7 +1045,7 @@ void pld_disable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
pld_snoc_disable_irq(ce_id);
|
||||
pld_snoc_disable_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
break;
|
||||
@@ -1072,7 +1073,7 @@ int pld_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
||||
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_get_soc_info(info);
|
||||
ret = pld_snoc_get_soc_info(dev, info);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
ret = pld_pcie_get_soc_info(dev, info);
|
||||
@@ -1100,7 +1101,7 @@ int pld_get_ce_id(struct device *dev, int irq)
|
||||
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_get_ce_id(irq);
|
||||
ret = pld_snoc_get_ce_id(dev, irq);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
ret = pld_pcie_get_ce_id(irq);
|
||||
@@ -1126,7 +1127,7 @@ int pld_get_irq(struct device *dev, int ce_id)
|
||||
|
||||
switch (pld_get_bus_type(dev)) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_get_irq(ce_id);
|
||||
ret = pld_snoc_get_irq(dev, ce_id);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
default:
|
||||
@@ -1512,7 +1513,7 @@ int pld_is_qmi_disable(struct device *dev)
|
||||
|
||||
switch (type) {
|
||||
case PLD_BUS_TYPE_SNOC:
|
||||
ret = pld_snoc_is_qmi_disable();
|
||||
ret = pld_snoc_is_qmi_disable(dev);
|
||||
break;
|
||||
case PLD_BUS_TYPE_PCIE:
|
||||
case PLD_BUS_TYPE_SDIO:
|
||||
|
@@ -312,6 +312,7 @@ void pld_snoc_unregister_driver(void)
|
||||
|
||||
/**
|
||||
* pld_snoc_wlan_enable() - Enable WLAN
|
||||
* @dev: device
|
||||
* @config: WLAN configuration data
|
||||
* @mode: WLAN mode
|
||||
* @host_version: host software version
|
||||
@@ -322,7 +323,43 @@ void pld_snoc_unregister_driver(void)
|
||||
* Return: 0 for success
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config,
|
||||
|
||||
#ifdef ICNSS_API_WITH_DEV
|
||||
int pld_snoc_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
|
||||
enum pld_driver_mode mode, const char *host_version)
|
||||
{
|
||||
struct icnss_wlan_enable_cfg cfg;
|
||||
enum icnss_driver_mode icnss_mode;
|
||||
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
cfg.num_ce_tgt_cfg = config->num_ce_tgt_cfg;
|
||||
cfg.ce_tgt_cfg = (struct ce_tgt_pipe_cfg *)
|
||||
config->ce_tgt_cfg;
|
||||
cfg.num_ce_svc_pipe_cfg = config->num_ce_svc_pipe_cfg;
|
||||
cfg.ce_svc_cfg = (struct ce_svc_pipe_cfg *)
|
||||
config->ce_svc_cfg;
|
||||
cfg.num_shadow_reg_cfg = config->num_shadow_reg_cfg;
|
||||
cfg.shadow_reg_cfg = (struct icnss_shadow_reg_cfg *)
|
||||
config->shadow_reg_cfg;
|
||||
|
||||
switch (mode) {
|
||||
case PLD_FTM:
|
||||
icnss_mode = ICNSS_FTM;
|
||||
break;
|
||||
case PLD_EPPING:
|
||||
icnss_mode = ICNSS_EPPING;
|
||||
break;
|
||||
default:
|
||||
icnss_mode = ICNSS_MISSION;
|
||||
break;
|
||||
}
|
||||
|
||||
return icnss_wlan_enable(dev, &cfg, icnss_mode, host_version);
|
||||
}
|
||||
#else
|
||||
int pld_snoc_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
|
||||
enum pld_driver_mode mode, const char *host_version)
|
||||
{
|
||||
struct icnss_wlan_enable_cfg cfg;
|
||||
@@ -349,11 +386,14 @@ int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config,
|
||||
icnss_mode = ICNSS_MISSION;
|
||||
break;
|
||||
}
|
||||
|
||||
return icnss_wlan_enable(&cfg, icnss_mode, host_version);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* pld_snoc_wlan_disable() - Disable WLAN
|
||||
* @dev: device
|
||||
* @mode: WLAN mode
|
||||
*
|
||||
* This function disables WLAN FW. It passes WLAN mode to FW.
|
||||
@@ -361,13 +401,24 @@ int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config,
|
||||
* Return: 0 for success
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_snoc_wlan_disable(enum pld_driver_mode mode)
|
||||
#ifdef ICNSS_API_WITH_DEV
|
||||
int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_wlan_disable(dev, ICNSS_OFF);
|
||||
}
|
||||
#else
|
||||
int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode)
|
||||
{
|
||||
return icnss_wlan_disable(ICNSS_OFF);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* pld_snoc_get_soc_info() - Get SOC information
|
||||
* @dev: device
|
||||
* @info: buffer to SOC information
|
||||
*
|
||||
* Return SOC info to the buffer.
|
||||
@@ -375,7 +426,24 @@ int pld_snoc_wlan_disable(enum pld_driver_mode mode)
|
||||
* Return: 0 for success
|
||||
* Non zero failure code for errors
|
||||
*/
|
||||
int pld_snoc_get_soc_info(struct pld_soc_info *info)
|
||||
#ifdef ICNSS_API_WITH_DEV
|
||||
int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
||||
{
|
||||
int ret = 0;
|
||||
struct icnss_soc_info icnss_info;
|
||||
|
||||
if (info == NULL || !dev)
|
||||
return -ENODEV;
|
||||
|
||||
ret = icnss_get_soc_info(dev, &icnss_info);
|
||||
if (0 != ret)
|
||||
return ret;
|
||||
|
||||
memcpy(info, &icnss_info, sizeof(*info));
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
||||
{
|
||||
int ret = 0;
|
||||
struct icnss_soc_info icnss_info;
|
||||
@@ -391,3 +459,4 @@ int pld_snoc_get_soc_info(struct pld_soc_info *info)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -42,36 +42,41 @@ static inline int pld_snoc_register_driver(void)
|
||||
static inline void pld_snoc_unregister_driver(void)
|
||||
{
|
||||
}
|
||||
static inline int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config,
|
||||
enum pld_driver_mode mode, const char *host_version)
|
||||
static inline int pld_snoc_wlan_enable(struct device *dev,
|
||||
struct pld_wlan_enable_cfg *config,
|
||||
enum pld_driver_mode mode, const char *host_version)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_wlan_disable(enum pld_driver_mode mode)
|
||||
static inline int pld_snoc_wlan_disable(struct device *dev,
|
||||
enum pld_driver_mode mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_ce_request_irq(unsigned int ce_id,
|
||||
irqreturn_t (*handler)(int, void *),
|
||||
unsigned long flags, const char *name, void *ctx)
|
||||
static inline int pld_snoc_ce_request_irq(struct device *dev,
|
||||
unsigned int ce_id,
|
||||
irqreturn_t (*handler)(int, void *),
|
||||
unsigned long flags,
|
||||
const char *name, void *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_ce_free_irq(unsigned int ce_id, void *ctx)
|
||||
static inline int pld_snoc_ce_free_irq(struct device *dev,
|
||||
unsigned int ce_id, void *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void pld_snoc_enable_irq(unsigned int ce_id)
|
||||
static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
}
|
||||
static inline void pld_snoc_disable_irq(unsigned int ce_id)
|
||||
static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
}
|
||||
static inline int pld_snoc_get_soc_info(struct pld_soc_info *info)
|
||||
static inline int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_get_ce_id(int irq)
|
||||
static inline int pld_snoc_get_ce_id(struct device *dev, int irq)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -83,7 +88,7 @@ static inline int pld_snoc_power_off(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_get_irq(int ce_id)
|
||||
static inline int pld_snoc_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -113,11 +118,11 @@ unsigned int pld_snoc_socinfo_get_serial_number(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_is_qmi_disable(void)
|
||||
static inline int pld_snoc_is_qmi_disable(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int pld_snoc_set_fw_log_mode(u8 fw_log_mode)
|
||||
static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -128,33 +133,98 @@ static inline int pld_snoc_force_assert_target(struct device *dev)
|
||||
#else
|
||||
int pld_snoc_register_driver(void);
|
||||
void pld_snoc_unregister_driver(void);
|
||||
int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config,
|
||||
int pld_snoc_wlan_enable(struct device *dev,
|
||||
struct pld_wlan_enable_cfg *config,
|
||||
enum pld_driver_mode mode, const char *host_version);
|
||||
int pld_snoc_wlan_disable(enum pld_driver_mode mode);
|
||||
int pld_snoc_get_soc_info(struct pld_soc_info *info);
|
||||
static inline int pld_snoc_ce_request_irq(unsigned int ce_id,
|
||||
int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode);
|
||||
int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info);
|
||||
|
||||
#ifdef ICNSS_API_WITH_DEV
|
||||
static inline int pld_snoc_ce_request_irq(struct device *dev,
|
||||
unsigned int ce_id,
|
||||
irqreturn_t (*handler)(int, void *),
|
||||
unsigned long flags,
|
||||
const char *name, void *ctx)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_ce_request_irq(dev, ce_id, handler, flags, name, ctx);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_ce_free_irq(struct device *dev,
|
||||
unsigned int ce_id, void *ctx)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_ce_free_irq(dev, ce_id, ctx);
|
||||
}
|
||||
|
||||
static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
if (dev)
|
||||
icnss_enable_irq(dev, ce_id);
|
||||
}
|
||||
|
||||
static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
if (dev)
|
||||
icnss_disable_irq(dev, ce_id);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_get_ce_id(struct device *dev, int irq)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_get_ce_id(dev, irq);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_get_irq(dev, ce_id);
|
||||
}
|
||||
#else
|
||||
static inline int pld_snoc_ce_request_irq(struct device *dev,
|
||||
unsigned int ce_id,
|
||||
irqreturn_t (*handler)(int, void *),
|
||||
unsigned long flags,
|
||||
const char *name, void *ctx)
|
||||
{
|
||||
return icnss_ce_request_irq(ce_id, handler, flags, name, ctx);
|
||||
}
|
||||
static inline int pld_snoc_ce_free_irq(unsigned int ce_id, void *ctx)
|
||||
{
|
||||
return icnss_ce_free_irq(ce_id, ctx);
|
||||
}
|
||||
static inline void pld_snoc_enable_irq(unsigned int ce_id)
|
||||
|
||||
static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
icnss_enable_irq(ce_id);
|
||||
}
|
||||
static inline void pld_snoc_disable_irq(unsigned int ce_id)
|
||||
|
||||
static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id)
|
||||
{
|
||||
icnss_disable_irq(ce_id);
|
||||
}
|
||||
static inline int pld_snoc_get_ce_id(int irq)
|
||||
|
||||
static inline int pld_snoc_ce_free_irq(struct device *dev,
|
||||
unsigned int ce_id, void *ctx)
|
||||
{
|
||||
return icnss_ce_free_irq(ce_id, ctx);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_get_ce_id(struct device *dev, int irq)
|
||||
{
|
||||
return icnss_get_ce_id(irq);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_get_irq(struct device *dev, int ce_id)
|
||||
{
|
||||
return icnss_get_irq(ce_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int pld_snoc_power_on(struct device *dev)
|
||||
{
|
||||
return icnss_power_on(dev);
|
||||
@@ -163,10 +233,6 @@ static inline int pld_snoc_power_off(struct device *dev)
|
||||
{
|
||||
return icnss_power_off(dev);
|
||||
}
|
||||
static inline int pld_snoc_get_irq(int ce_id)
|
||||
{
|
||||
return icnss_get_irq(ce_id);
|
||||
}
|
||||
static inline int pld_snoc_athdiag_read(struct device *dev, uint32_t offset,
|
||||
uint32_t memtype, uint32_t datalen,
|
||||
uint8_t *output)
|
||||
@@ -193,14 +259,35 @@ unsigned int pld_snoc_socinfo_get_serial_number(struct device *dev)
|
||||
{
|
||||
return icnss_socinfo_get_serial_number(dev);
|
||||
}
|
||||
static inline int pld_snoc_is_qmi_disable(void)
|
||||
|
||||
#ifdef ICNSS_API_WITH_DEV
|
||||
static inline int pld_snoc_is_qmi_disable(struct device *dev)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_is_qmi_disable(dev);
|
||||
}
|
||||
|
||||
static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
|
||||
{
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
return icnss_set_fw_log_mode(dev, fw_log_mode);
|
||||
}
|
||||
#else
|
||||
static inline int pld_snoc_is_qmi_disable(struct device *dev)
|
||||
{
|
||||
return icnss_is_qmi_disable();
|
||||
}
|
||||
static inline int pld_snoc_set_fw_log_mode(u8 fw_log_mode)
|
||||
|
||||
static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
|
||||
{
|
||||
return icnss_set_fw_log_mode(fw_log_mode);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int pld_snoc_force_assert_target(struct device *dev)
|
||||
{
|
||||
return icnss_trigger_recovery(dev);
|
||||
|
@@ -1039,8 +1039,8 @@ wlansap_roam_callback(void *ctx, tCsrRoamInfo *csr_roam_info, uint32_t roamId,
|
||||
0;
|
||||
}
|
||||
/* if external acs enabled */
|
||||
if (sap_ctx->vendor_acs_enabled &&
|
||||
!mac_ctx->sap.SapDfsInfo.target_channel) {
|
||||
if (sap_ctx->vendor_acs_dfs_lte_enabled &&
|
||||
!mac_ctx->sap.SapDfsInfo.target_channel) {
|
||||
/* Return from here, processing will be done later */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1726,7 +1726,10 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
|
||||
sap_context->channel,
|
||||
sap_context->csr_roamProfile.phyMode,
|
||||
sap_context->cc_switch_mode);
|
||||
if (con_ch) {
|
||||
if (con_ch && !(wlan_reg_is_dfs_ch(mac_ctx->pdev,
|
||||
con_ch) &&
|
||||
sap_context->cc_switch_mode ==
|
||||
QDF_MCC_TO_SCC_SWITCH_FORCE_PREFERRED_WITHOUT_DISCONNECTION)) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SAP,
|
||||
QDF_TRACE_LEVEL_ERROR,
|
||||
"%s: Override ch %d to %d due to CC Intf",
|
||||
@@ -4290,10 +4293,10 @@ uint8_t sap_indicate_radar(struct sap_context *sap_ctx)
|
||||
return sap_ctx->chan_before_pre_cac;
|
||||
}
|
||||
|
||||
if (sap_ctx->vendor_acs_enabled && (QDF_STATUS_SUCCESS ==
|
||||
if (sap_ctx->vendor_acs_dfs_lte_enabled && (QDF_STATUS_SUCCESS ==
|
||||
sap_signal_hdd_event(sap_ctx, NULL, eSAP_DFS_NEXT_CHANNEL_REQ,
|
||||
(void *) eSAP_STATUS_SUCCESS)))
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
target_channel = sap_random_channel_sel(sap_ctx);
|
||||
if (!target_channel)
|
||||
|
@@ -247,7 +247,7 @@ struct sap_context {
|
||||
qdf_event_t sap_session_opened_evt;
|
||||
bool is_pre_cac_on;
|
||||
bool pre_cac_complete;
|
||||
bool vendor_acs_enabled;
|
||||
bool vendor_acs_dfs_lte_enabled;
|
||||
uint8_t dfs_vendor_channel;
|
||||
uint8_t dfs_vendor_chan_bw;
|
||||
uint8_t chan_before_pre_cac;
|
||||
|
@@ -2327,7 +2327,7 @@ QDF_STATUS wlan_sap_set_vendor_acs(struct sap_context *sap_context,
|
||||
"%s: Invalid SAP pointer", __func__);
|
||||
return QDF_STATUS_E_FAULT;
|
||||
}
|
||||
sap_context->vendor_acs_enabled = is_vendor_acs;
|
||||
sap_context->vendor_acs_dfs_lte_enabled = is_vendor_acs;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -1855,5 +1855,24 @@ static inline QDF_STATUS sme_update_fils_config(tHalHandle hal,
|
||||
static inline void sme_free_join_rsp_fils_params(tCsrRoamInfo *roam_info)
|
||||
{}
|
||||
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
/**
|
||||
* sme_set_he_bss_color() - Sets the HE BSS color
|
||||
*
|
||||
* @hal: The handle returned by mac_open
|
||||
* @session_id: session_id of the request
|
||||
* @bss_color: HE BSS color value to set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS sme_set_he_bss_color(tHalHandle hal, uint8_t session_id,
|
||||
uint8_t bss_color);
|
||||
#else
|
||||
static inline QDF_STATUS sme_set_he_bss_color(tHalHandle hal,
|
||||
uint8_t session_id, uint8_t bss_color)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
#endif /* #if !defined( __SME_API_H ) */
|
||||
|
@@ -14792,6 +14792,42 @@ void sme_update_vdev_type_nss(tHalHandle hal, uint8_t max_supp_nss,
|
||||
vdev_nss->tdls, vdev_nss->ocb);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11AX_BSS_COLOR
|
||||
#define MAX_BSS_COLOR_VAL 63
|
||||
#define MIN_BSS_COLOR_VAL 1
|
||||
|
||||
QDF_STATUS sme_set_he_bss_color(tHalHandle hal, uint8_t session_id,
|
||||
uint8_t bss_color)
|
||||
|
||||
{
|
||||
struct sir_set_he_bss_color *bss_color_msg;
|
||||
uint8_t len;
|
||||
|
||||
if (!hal) {
|
||||
sme_err("Invalid hal pointer");
|
||||
return QDF_STATUS_E_FAULT;
|
||||
}
|
||||
|
||||
sme_debug("Set HE bss_color %d", bss_color);
|
||||
|
||||
if (bss_color < MIN_BSS_COLOR_VAL || bss_color > MAX_BSS_COLOR_VAL) {
|
||||
sme_debug("Invalid HE bss_color %d", bss_color);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
len = sizeof(*bss_color_msg);
|
||||
bss_color_msg = qdf_mem_malloc(len);
|
||||
if (!bss_color_msg) {
|
||||
sme_err("mem alloc failed");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
bss_color_msg->message_type = eWNI_SME_SET_HE_BSS_COLOR;
|
||||
bss_color_msg->length = len;
|
||||
bss_color_msg->session_id = session_id;
|
||||
bss_color_msg->bss_color = bss_color;
|
||||
return umac_send_mb_message_to_mac(bss_color_msg);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* sme_update_hw_dbs_capable() - sets the HW DBS capability
|
||||
* @hal: Pointer to HAL
|
||||
|
@@ -45,6 +45,7 @@
|
||||
* @en_tdls_uapsd_sleep_sta: enable sta tdls uapsd sleep
|
||||
* @en_roam_offload: enable roam offload
|
||||
* @en_11ax: enable 11ax
|
||||
* @is_fw_mawc_capable: Motion Aided Wireless Connectivity feature
|
||||
*/
|
||||
struct wma_tgt_services {
|
||||
uint32_t sta_power_save;
|
||||
@@ -71,6 +72,7 @@ struct wma_tgt_services {
|
||||
bool en_11ax;
|
||||
bool get_peer_info_enabled;
|
||||
bool is_fils_roaming_supported;
|
||||
bool is_fw_mawc_capable;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -2723,7 +2723,8 @@ static inline bool wma_crash_on_fw_timeout(bool crash_enabled)
|
||||
if (cds_is_driver_recovering())
|
||||
return false;
|
||||
|
||||
if (!cds_is_fw_down())
|
||||
/* Firmware is down send failure response */
|
||||
if (cds_is_fw_down())
|
||||
return false;
|
||||
|
||||
if (cds_is_driver_unloading())
|
||||
|
@@ -1933,6 +1933,8 @@ static void wma_cleanup_vdev_resp_queue(tp_wma_handle wma)
|
||||
return;
|
||||
}
|
||||
|
||||
WMA_LOGD(FL("Cleaning up vdev resp queue"));
|
||||
|
||||
/* peek front, and then cleanup it in wma_vdev_resp_timer */
|
||||
while (qdf_list_peek_front(&wma->vdev_resp_queue, &node1) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
@@ -2335,6 +2337,7 @@ static int wma_flush_complete_evt_handler(void *handle,
|
||||
if (status != QDF_STATUS_SUCCESS)
|
||||
WMA_LOGE("Failed to stop the log completion timeout");
|
||||
cds_logging_set_fw_flush_complete();
|
||||
return QDF_STATUS_SUCCESS;
|
||||
} else if (reason_code && cds_is_log_report_in_progress() == false) {
|
||||
/* Asynchronous flush event for fatal events */
|
||||
status = cds_set_log_completion(WLAN_LOG_TYPE_FATAL,
|
||||
@@ -4302,6 +4305,12 @@ static inline void wma_update_target_services(tp_wma_handle wh,
|
||||
wh->wmi_service_ext_bitmap,
|
||||
WMI_SERVICE_FILS_SUPPORT))
|
||||
cfg->is_fils_roaming_supported = true;
|
||||
|
||||
if (WMI_SERVICE_EXT_IS_ENABLED(wh->wmi_service_bitmap,
|
||||
wh->wmi_service_ext_bitmap,
|
||||
WMI_SERVICE_MAWC_SUPPORT))
|
||||
cfg->is_fw_mawc_capable = true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -3476,7 +3476,7 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
|
||||
peer = cdp_peer_find_by_addr(soc, pdev_ctx,
|
||||
peer_addr, &peer_id);
|
||||
if (!peer) {
|
||||
if (SIR_MAC_MGMT_ASSOC_REQ != subtype) {
|
||||
if (IEEE80211_FC0_SUBTYPE_ASSOC_REQ != subtype) {
|
||||
WMA_LOGI(
|
||||
FL("Received mgmt frame: %0x from unknow peer: %pM"),
|
||||
subtype, peer_addr);
|
||||
@@ -3486,7 +3486,7 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
|
||||
}
|
||||
|
||||
switch (subtype) {
|
||||
case SIR_MAC_MGMT_ASSOC_REQ:
|
||||
case IEEE80211_FC0_SUBTYPE_ASSOC_REQ:
|
||||
ptr = cdp_peer_last_assoc_received(soc, peer);
|
||||
if (ptr == NULL) {
|
||||
WMA_LOGE(FL("cdp_peer_last_assoc_received Failed"));
|
||||
@@ -3502,7 +3502,7 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
|
||||
*cdp_peer_last_assoc_received(soc, peer) =
|
||||
qdf_get_system_timestamp();
|
||||
break;
|
||||
case SIR_MAC_MGMT_DISASSOC:
|
||||
case IEEE80211_FC0_SUBTYPE_DISASSOC:
|
||||
ptr = cdp_peer_last_disassoc_received(soc, peer);
|
||||
if (ptr == NULL) {
|
||||
WMA_LOGE(FL("cdp_peer_last_disassoc_received Failed"));
|
||||
@@ -3518,7 +3518,7 @@ static bool wma_is_pkt_drop_candidate(tp_wma_handle wma_handle,
|
||||
*cdp_peer_last_disassoc_received(soc, peer) =
|
||||
qdf_get_system_timestamp();
|
||||
break;
|
||||
case SIR_MAC_MGMT_DEAUTH:
|
||||
case IEEE80211_FC0_SUBTYPE_DEAUTH:
|
||||
ptr = cdp_peer_last_deauth_received(soc, peer);
|
||||
if (ptr == NULL) {
|
||||
WMA_LOGE(FL("cdp_peer_last_deauth_received Failed"));
|
||||
|
@@ -252,6 +252,7 @@ QDF_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
|
||||
cmd->repeat_probe_time =
|
||||
cmd->dwell_time_active / WMA_SCAN_NPROBES_DEFAULT;
|
||||
|
||||
WMA_LOGD("Repeat probe time %d", cmd->repeat_probe_time);
|
||||
/* CSR sends min_rest_Time, max_rest_time and idle_time
|
||||
* for staying on home channel to continue data traffic.
|
||||
* Rome fw has facility to monitor the traffic
|
||||
@@ -450,7 +451,9 @@ QDF_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
|
||||
}
|
||||
|
||||
cmd->n_probes = (cmd->repeat_probe_time > 0) ?
|
||||
cmd->dwell_time_active / cmd->repeat_probe_time : 0;
|
||||
cmd->dwell_time_active / cmd->repeat_probe_time : 0;
|
||||
|
||||
WMA_LOGD("Num Probes in each ch scan %d", cmd->n_probes);
|
||||
if (scan_req->channelList.numChannels) {
|
||||
cmd->num_chan = scan_req->channelList.numChannels;
|
||||
for (i = 0; i < scan_req->channelList.numChannels; ++i) {
|
||||
@@ -1960,10 +1963,17 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
roam_req->sessionId);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS)
|
||||
break;
|
||||
qdf_status = wma_roam_scan_mawc_params(wma_handle, roam_req);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
WMA_LOGE("Sending roaming MAWC params failed");
|
||||
break;
|
||||
if (WMI_SERVICE_EXT_IS_ENABLED(wma_handle->wmi_service_bitmap,
|
||||
wma_handle->wmi_service_ext_bitmap,
|
||||
WMI_SERVICE_MAWC_SUPPORT)) {
|
||||
qdf_status =
|
||||
wma_roam_scan_mawc_params(wma_handle, roam_req);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
WMA_LOGE("Sending roaming MAWC params failed");
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
WMA_LOGD("MAWC roaming not supported by firmware");
|
||||
}
|
||||
qdf_status = wma_roam_scan_filter(wma_handle, roam_req);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS) {
|
||||
@@ -5248,6 +5258,11 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma,
|
||||
params.vdev_id = ipa_offload->vdev_id;
|
||||
params.enable = ipa_offload->enable;
|
||||
|
||||
WMA_LOGI("%s: offload_type=%d, vdev_id=%d, enable=%d",
|
||||
__func__,
|
||||
ipa_offload->offload_type, ipa_offload->vdev_id,
|
||||
ipa_offload->enable);
|
||||
|
||||
status = wmi_unified_ipa_offload_control_cmd(wma->wmi_handle,
|
||||
¶ms);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
@@ -5265,7 +5280,7 @@ QDF_STATUS wma_ipa_offload_enable_disable(tp_wma_handle wma,
|
||||
rx_fwd_disabled = cdp_cfg_is_rx_fwd_disabled(
|
||||
cds_get_context(QDF_MODULE_ID_SOC), vdev);
|
||||
if (!ipa_offload->enable || rx_fwd_disabled) {
|
||||
WMA_LOGE("%s: ipa_offload->enable=%d, rx_fwd_disabled=%d",
|
||||
WMA_LOGI("%s: ipa_offload->enable=%d, rx_fwd_disabled=%d",
|
||||
__func__,
|
||||
ipa_offload->enable, rx_fwd_disabled);
|
||||
intra_bss_fwd = 1;
|
||||
|
@@ -4589,6 +4589,11 @@ QDF_STATUS wma_send_vdev_up_to_fw(t_wma_handle *wma,
|
||||
QDF_STATUS status;
|
||||
struct wma_txrx_node *vdev = &wma->interfaces[params->vdev_id];
|
||||
|
||||
if (wma_is_vdev_up(params->vdev_id)) {
|
||||
WMA_LOGD("vdev %d is already up for bssid %pM. Do not send",
|
||||
params->vdev_id, bssid);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
status = wmi_unified_vdev_up_send(wma->wmi_handle, bssid, params);
|
||||
wma_release_wakelock(&vdev->vdev_start_wakelock);
|
||||
|
||||
|
Verwijs in nieuw issue
Block a user