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:
CNSS_WLAN Service
2017-10-30 10:16:22 -07:00
gecommit door Gerrit - the friendly Code Review server
bovenliggende 1b331e3755 87086b58e3
commit a30b89e710
44 gewijzigde bestanden met toevoegingen van 1607 en 521 verwijderingen

1
Kbuild
Bestand weergeven

@@ -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

Bestand weergeven

@@ -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)

Bestand weergeven

@@ -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__);
}
/**

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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,

Bestand weergeven

@@ -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)

Bestand weergeven

@@ -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,

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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__ */

Bestand weergeven

@@ -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__ */

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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,

Bestand weergeven

@@ -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);
}

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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);
}

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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;
}

Bestand weergeven

@@ -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 */

Bestand weergeven

@@ -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.

Bestand weergeven

@@ -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
};

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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 */

Bestand weergeven

@@ -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,

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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:

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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);

Bestand weergeven

@@ -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;
}

Bestand weergeven

@@ -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)

Bestand weergeven

@@ -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;

Bestand weergeven

@@ -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;
}

Bestand weergeven

@@ -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 ) */

Bestand weergeven

@@ -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

Bestand weergeven

@@ -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;
};
/**

Bestand weergeven

@@ -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())

Bestand weergeven

@@ -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;
}
/**

Bestand weergeven

@@ -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"));

Bestand weergeven

@@ -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,
&params);
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;

Bestand weergeven

@@ -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);