summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrakash Dhavali <pdhavali@codeaurora.org>2016-10-28 18:18:10 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-11-01 11:05:44 +0530
commit460b0972186afaf4006b314f0d3658d3019653a8 (patch)
treeb37cff52f1209f540d537034a7008cf0d808c6f6
parent41a7ff210daaf4266b82eba5e07034eb1d69b8ec (diff)
parentf9b3052d869d91c598c4a8c05dacf944a20e71be (diff)
Merge branch 'master' into wlan-cld2.driver.lnx.1.0-dev
Fast-forward to 'master' commit id f9b3052d869d91c598c4a8c05dacf944a20e71be Release 4.0.11.176 * master: (1027 commits) Release 4.0.11.176 qcacld-2.0: Protect the TxQueue in failure qcacld-2.0: Add adapter null pointer check when restart tdls timer qcacld-2.0: Delete TDLS peers upon receiving disassoc from AP qcacld-2.0: Fix suspicious dereference of pointer Release 4.0.11.175 qcacld-2.0: Use appropriate adf API to alloc/free skb qcacld-2.0: Exit BMPS on sending TDLS discovery request qcacld-2.0: Print proto type for ICMP/ICMPv6 packets qcacld-2.0: Add runtime detection for IPA HW status Release 4.0.11.174 qcacld-2.0: Return failure, if dump command is not registered qcacld-2.0: Merge extcapie before get dot11f payload size Release 4.0.11.173 qcacld-2.0: Add monitor for peer PS change and TX fail qcacld-2.0: Enable green AP for AP stand alone and EGAP disabled qcacld-2.0: reset ipa perf level when stop bus_bw timer qcacld-2.0: Fix bug to prevent memory overwrite in callback qcacld-2.0: Avoid immediate power collapse on receiving PNO indication Release 4.0.11.172 ... Change-Id: Icc3fe6d5a28201d44bdc65848be61701b8c085fd CRs-Fixed: 1084347
-rw-r--r--CORE/CLD_TXRX/HTT/htt.c8
-rw-r--r--CORE/CLD_TXRX/HTT/htt_internal.h10
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c2
-rw-r--r--CORE/CLD_TXRX/HTT/htt_t2h.c18
-rw-r--r--CORE/CLD_TXRX/HTT/htt_types.h3
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c6
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c1
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx_fwd.c2
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c24
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_queue.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx_types.h9
-rw-r--r--CORE/EPPING/src/epping_helper.c1
-rw-r--r--CORE/EPPING/src/epping_main.c1
-rw-r--r--CORE/EPPING/src/epping_rx.c3
-rw-r--r--CORE/EPPING/src/epping_tx.c3
-rw-r--r--CORE/EPPING/src/epping_txrx.c1
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h198
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h68
-rw-r--r--CORE/HDD/inc/wlan_hdd_ipa.h29
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h55
-rw-r--r--CORE/HDD/inc/wlan_hdd_oemdata.h9
-rw-r--r--CORE/HDD/inc/wlan_hdd_tdls.h60
-rw-r--r--CORE/HDD/inc/wlan_hdd_tx_rx.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c52
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c223
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c771
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c30
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c106
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c53
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c577
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.c57
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c86
-rw-r--r--CORE/HDD/src/wlan_hdd_scan.c10
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c29
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c135
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c47
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c38
-rw-r--r--CORE/HDD/src/wlan_hdd_wmm.c2
-rw-r--r--CORE/MAC/inc/aniGlobal.h7
-rw-r--r--CORE/MAC/inc/logDump.h14
-rw-r--r--CORE/MAC/inc/macTrace.h52
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h118
-rw-r--r--CORE/MAC/inc/sirMacProtDef.h6
-rw-r--r--CORE/MAC/inc/wniApi.h6
-rw-r--r--CORE/MAC/inc/wniCfgAp.h2548
-rw-r--r--CORE/MAC/inc/wni_cfg.h (renamed from CORE/MAC/inc/wniCfgSta.h)614
-rw-r--r--CORE/MAC/src/cfg/cfgApi.c18
-rw-r--r--CORE/MAC/src/cfg/cfgDef.h4
-rw-r--r--CORE/MAC/src/cfg/cfgPriv.h7
-rw-r--r--CORE/MAC/src/cfg/cfgProcMsg.c47
-rw-r--r--CORE/MAC/src/cfg/cfgUtil/dot11f.frms2
-rw-r--r--CORE/MAC/src/include/cfgGlobal.h5
-rw-r--r--CORE/MAC/src/include/dot11f.h4
-rw-r--r--CORE/MAC/src/include/sirParams.h3
-rw-r--r--CORE/MAC/src/include/utilsApi.h4
-rw-r--r--CORE/MAC/src/pe/include/limApi.h2
-rw-r--r--CORE/MAC/src/pe/include/limGlobal.h2
-rw-r--r--CORE/MAC/src/pe/lim/limAIDmgmt.c2
-rw-r--r--CORE/MAC/src/pe/lim/limApi.c44
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c8
-rw-r--r--CORE/MAC/src/pe/lim/limIbssPeerMgmt.c2
-rw-r--r--CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c12
-rw-r--r--CORE/MAC/src/pe/lim/limProcessActionFrame.c12
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c10
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c6
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAuthFrame.c35
-rw-r--r--CORE/MAC/src/pe/lim/limProcessBeaconFrame.c2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessCfgUpdates.c24
-rw-r--r--CORE/MAC/src/pe/lim/limProcessDeauthFrame.c9
-rw-r--r--CORE/MAC/src/pe/lim/limProcessDisassocFrame.c12
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c42
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c6
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c102
-rw-r--r--CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c45
-rw-r--r--CORE/MAC/src/pe/lim/limProcessTdls.c9
-rw-r--r--CORE/MAC/src/pe/lim/limPropExtsUtils.c2
-rw-r--r--CORE/MAC/src/pe/lim/limRoamingAlgo.c4
-rw-r--r--CORE/MAC/src/pe/lim/limScanResultUtils.c3
-rw-r--r--CORE/MAC/src/pe/lim/limSecurityUtils.c4
-rw-r--r--CORE/MAC/src/pe/lim/limSendManagementFrames.c251
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.c164
-rw-r--r--CORE/MAC/src/pe/lim/limSession.c5
-rw-r--r--CORE/MAC/src/pe/lim/limSmeReqUtils.c4
-rw-r--r--CORE/MAC/src/pe/lim/limTimerUtils.c44
-rw-r--r--CORE/MAC/src/pe/lim/limTypes.h1
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c158
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.h18
-rw-r--r--CORE/MAC/src/pe/nan/nan_datapath.c1
-rw-r--r--CORE/MAC/src/pe/pmm/pmmAP.c5
-rw-r--r--CORE/MAC/src/pe/pmm/pmmApi.c5
-rw-r--r--CORE/MAC/src/pe/rrm/rrmApi.c2
-rw-r--r--CORE/MAC/src/pe/sch/schApi.c50
-rw-r--r--CORE/MAC/src/pe/sch/schBeaconGen.c4
-rw-r--r--CORE/MAC/src/pe/sch/schBeaconProcess.c3
-rw-r--r--CORE/MAC/src/pe/sch/schMessage.c5
-rw-r--r--CORE/SAP/inc/sapApi.h27
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c27
-rw-r--r--CORE/SAP/src/sapChSelect.c136
-rw-r--r--CORE/SAP/src/sapChSelect.h18
-rw-r--r--CORE/SAP/src/sapFsm.c608
-rw-r--r--CORE/SAP/src/sapInternal.h13
-rw-r--r--CORE/SAP/src/sapModule.c49
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c9
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.c18
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.h21
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.c8
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h13
-rw-r--r--CORE/SERVICES/COMMON/htc_api.h13
-rw-r--r--CORE/SERVICES/COMMON/ol_txrx_api.h5
-rw-r--r--CORE/SERVICES/COMMON/wlan_defs.h10
-rw-r--r--CORE/SERVICES/COMMON/wlan_tgt_def_config.h9
-rw-r--r--CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h12
-rw-r--r--CORE/SERVICES/COMMON/wma_api.h2
-rw-r--r--CORE/SERVICES/COMMON/wmi_services.h11
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h164
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h961
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/DFS/inc/dfs.h1
-rw-r--r--CORE/SERVICES/DFS/src/dfs.c28
-rw-r--r--CORE/SERVICES/DFS/src/dfs_process_phyerr.c10
-rw-r--r--CORE/SERVICES/DFS/src/dfs_process_radarevent.c7
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb.c2
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.c25
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c12
-rw-r--r--CORE/SERVICES/HTC/htc.c14
-rw-r--r--CORE/SERVICES/HTC/htc_internal.h3
-rw-r--r--CORE/SERVICES/HTC/htc_recv.c3
-rw-r--r--CORE/SERVICES/HTC/htc_send.c2
-rw-r--r--CORE/SERVICES/HTC/htc_services.c13
-rw-r--r--CORE/SERVICES/WMA/wma.c606
-rw-r--r--CORE/SERVICES/WMA/wma.h3
-rw-r--r--CORE/SERVICES/WMA/wma_dfs_interface.c8
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c6
-rw-r--r--CORE/SME/inc/btcApi.h323
-rw-r--r--CORE/SME/inc/ccmApi.h6
-rw-r--r--CORE/SME/inc/csrApi.h29
-rw-r--r--CORE/SME/inc/csrInternal.h5
-rw-r--r--CORE/SME/inc/pmc.h4
-rw-r--r--CORE/SME/inc/smeInternal.h1
-rw-r--r--CORE/SME/inc/sme_Api.h94
-rw-r--r--CORE/SME/src/QoS/sme_Qos.c42
-rw-r--r--CORE/SME/src/btc/btcApi.c2075
-rw-r--r--CORE/SME/src/ccm/ccmApi.c12
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c618
-rw-r--r--CORE/SME/src/csr/csrApiScan.c274
-rw-r--r--CORE/SME/src/csr/csrLogDump.c49
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c6
-rw-r--r--CORE/SME/src/csr/csrTdlsProcess.c4
-rw-r--r--CORE/SME/src/csr/csrUtil.c256
-rw-r--r--CORE/SME/src/nan/nan_datapath_api.c1
-rw-r--r--CORE/SME/src/oemData/oemDataApi.c4
-rw-r--r--CORE/SME/src/pmc/pmc.c79
-rw-r--r--CORE/SME/src/pmc/pmcApi.c1
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c555
-rw-r--r--CORE/SME/src/sme_common/sme_FTApi.c2
-rw-r--r--CORE/SVC/inc/wlan_btc_svc.h39
-rw-r--r--CORE/SVC/src/btc/wlan_btc_svc.c254
-rw-r--r--CORE/SYS/legacy/src/system/inc/sysDef.h11
-rw-r--r--CORE/SYS/legacy/src/system/src/macInitApi.c17
-rw-r--r--CORE/SYS/legacy/src/utils/src/dot11f.c28
-rw-r--r--CORE/SYS/legacy/src/utils/src/logDump.c17
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c2
-rw-r--r--CORE/SYS/legacy/src/utils/src/parsemactrace.cmm973
-rw-r--r--CORE/SYS/legacy/src/utils/src/parserApi.c26
-rw-r--r--CORE/UTILS/PKTLOG/pktlog_internal.c11
-rw-r--r--CORE/VOSS/inc/i_vos_diag_core_log.h20
-rw-r--r--CORE/VOSS/inc/vos_types.h18
-rw-r--r--CORE/VOSS/src/vos_api.c11
-rw-r--r--CORE/VOSS/src/vos_nvitem.c34
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h4
-rw-r--r--Kbuild35
175 files changed, 8174 insertions, 7967 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt.c b/CORE/CLD_TXRX/HTT/htt.c
index 40fadc4e91d3..e986cd48e1aa 100644
--- a/CORE/CLD_TXRX/HTT/htt.c
+++ b/CORE/CLD_TXRX/HTT/htt.c
@@ -389,9 +389,17 @@ htt_attach_target(htt_pdev_handle pdev)
return status;
}
+void htt_htc_detach(struct htt_pdev_t *pdev)
+{
+ htc_disconnect_service(pdev->htc_pdev, pdev->htc_endpoint);
+ return;
+}
+
+
void
htt_detach(htt_pdev_handle pdev)
{
+ htt_htc_detach(pdev);
htt_rx_detach(pdev);
htt_tx_detach(pdev);
htt_htc_pkt_pool_free(pdev);
diff --git a/CORE/CLD_TXRX/HTT/htt_internal.h b/CORE/CLD_TXRX/HTT/htt_internal.h
index 443a131398d5..947444cfe22f 100644
--- a/CORE/CLD_TXRX/HTT/htt_internal.h
+++ b/CORE/CLD_TXRX/HTT/htt_internal.h
@@ -361,6 +361,16 @@ htt_rx_detach(struct htt_pdev_t *pdev);
int
htt_htc_attach(struct htt_pdev_t *pdev);
+/**
+ * htt_htc_detach() - Detach htc service from htt
+ * @pdev: htt pdev handle
+ *
+ *
+ * Return: None
+ */
+void
+htt_htc_detach(struct htt_pdev_t *pdev);
+
void
htt_t2h_msg_handler(void *context, HTC_PACKET *pkt);
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index 6dc8dc553270..fa6c1bb68547 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -1903,7 +1903,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(
adf_nbuf_pull_head(msdu, HTT_RX_STD_DESC_RESERVATION);
adf_dp_trace_set_track(msdu, ADF_RX);
- ADF_NBUF_CB_RX_PACKET_TRACE(msdu) = NBUF_TX_PKT_DATA_TRACK;
+ NBUF_SET_PACKET_TRACK(msdu, NBUF_TX_PKT_DATA_TRACK);
ol_rx_log_packet(pdev, peer_id, msdu);
DPTRACE(adf_dp_trace(msdu,
ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
diff --git a/CORE/CLD_TXRX/HTT/htt_t2h.c b/CORE/CLD_TXRX/HTT/htt_t2h.c
index b736a970c575..dc66595af57e 100644
--- a/CORE/CLD_TXRX/HTT/htt_t2h.c
+++ b/CORE/CLD_TXRX/HTT/htt_t2h.c
@@ -650,7 +650,25 @@ if (adf_os_unlikely(pdev->rx_ring.rx_reset)) {
}
}
+ /* Indicate failure status to user space */
+ if (pdev->tx_failure_cb && (status != htt_tx_status_ok)) {
+ unsigned char tid = HTT_TX_COMPL_IND_TID_GET(*msg_word);
+
+ pdev->tx_failure_cb(pdev, num_msdus, tid, status);
+ }
+
if (pdev->cfg.is_high_latency) {
+ /*
+ * If status is not success, then check whether is
+ * data frm. Once tx_free_at_download is true, data frm
+ * has already been freed.
+ * Just indicate the failure msg.
+ */
+ if (ol_cfg_tx_free_at_download(pdev->ctrl_pdev)) {
+ adf_os_print("HTT TX COMPL for failed data frm.\n");
+ break;
+ }
+
if (!pdev->cfg.default_tx_comp_req) {
int credit_delta;
HTT_TX_MUTEX_ACQUIRE(&pdev->credit_mutex);
diff --git a/CORE/CLD_TXRX/HTT/htt_types.h b/CORE/CLD_TXRX/HTT/htt_types.h
index 50dd6fed8a71..ad3d1cae149f 100644
--- a/CORE/CLD_TXRX/HTT/htt_types.h
+++ b/CORE/CLD_TXRX/HTT/htt_types.h
@@ -377,6 +377,9 @@ struct htt_pdev_t {
/* callback function for packetdump */
tp_rx_pkt_dump_cb rx_pkt_dump_cb;
+ /* Callback to indicate failure to user space */
+ void (*tx_failure_cb)(void *ctx, unsigned int num_msdu,
+ unsigned char tid, unsigned int status);
};
#endif /* _HTT_TYPES__H_ */
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index c35772e2c5bc..fa1e5658614b 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -1986,6 +1986,7 @@ VOS_STATUS WLANTL_Close(void *vos_ctx)
VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg)
{
struct txrx_tl_shim_ctx *tl_shim;
+ ol_txrx_pdev_handle txrx_pdev;
VOS_STATUS status;
u_int8_t i;
int max_vdev;
@@ -1996,7 +1997,7 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg)
if (status != VOS_STATUS_SUCCESS)
return status;
- ((pVosContextType) vos_ctx)->pdev_txrx_ctx =
+ txrx_pdev = ((pVosContextType) vos_ctx)->pdev_txrx_ctx =
wdi_in_pdev_attach(
((pVosContextType) vos_ctx)->cfg_ctx,
((pVosContextType) vos_ctx)->htc_ctx,
@@ -2007,6 +2008,9 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg)
return VOS_STATUS_E_NOMEM;
}
+ if (wdi_out_cfg_is_high_latency(txrx_pdev->ctrl_pdev))
+ ol_tx_failure_cb_set(txrx_pdev, wma_tx_failure_cb);
+
adf_os_spinlock_init(&tl_shim->bufq_lock);
adf_os_spinlock_init(&tl_shim->mgmt_lock);
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index 87a680af2189..8cf760a5500f 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -1372,6 +1372,7 @@ ol_rx_offload_paddr_deliver_ind_handler(
peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id);
if (peer && peer->vdev) {
adf_dp_trace_set_track(head_buf, ADF_RX);
+ NBUF_SET_PACKET_TRACK(head_buf, NBUF_TX_PKT_DATA_TRACK);
adf_dp_trace_log_pkt(peer->vdev->vdev_id,
head_buf, ADF_RX);
DPTRACE(adf_dp_trace(head_buf,
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
index ead13c7e1eb2..2a15b55b6e35 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c
@@ -154,7 +154,7 @@ ol_rx_fwd_to_tx(struct ol_txrx_vdev_t *vdev, adf_nbuf_t msdu)
* We could store the frame and try again later,
* but the simplest solution is to discard the frames.
*/
- adf_nbuf_free(msdu);
+ adf_nbuf_tx_free(msdu, ADF_NBUF_PKT_ERROR);
}
}
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index 890303999a85..cc195c4e7066 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -102,8 +102,10 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list)
msdu_info.htt.info.ext_tid = adf_nbuf_get_tid(msdu);
msdu_info.peer = NULL;
- adf_nbuf_map_single(adf_ctx, msdu,
+ if (!adf_nbuf_is_ipa_nbuf(msdu)) {
+ adf_nbuf_map_single(adf_ctx, msdu,
ADF_OS_DMA_TO_DEVICE);
+ }
ol_tx_prepare_ll(tx_desc, vdev, msdu, &msdu_info);
/*
@@ -208,7 +210,7 @@ ol_tx_vdev_ll_pause_queue_send_base(struct ol_txrx_vdev_t *vdev)
*/
if (tx_msdu) {
adf_nbuf_unmap(vdev->pdev->osdev, tx_msdu, ADF_OS_DMA_TO_DEVICE);
- adf_nbuf_tx_free(tx_msdu, 1 /* error */);
+ adf_nbuf_tx_free(tx_msdu, ADF_NBUF_PKT_ERROR);
}
}
}
@@ -395,7 +397,7 @@ ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t *pdev)
*/
if (tx_msdu) {
adf_nbuf_unmap(pdev->osdev, tx_msdu, ADF_OS_DMA_TO_DEVICE);
- adf_nbuf_tx_free(tx_msdu, 1 /* error */);
+ adf_nbuf_tx_free(tx_msdu, ADF_NBUF_PKT_ERROR);
}
}
/*check if there are more msdus to transmit*/
@@ -1284,3 +1286,19 @@ adf_nbuf_t ol_tx_reinject(
return NULL;
}
+
+/**
+ * ol_tx_failure_cb_set() - add TX failure callback
+ * @pdev: PDEV TXRX handle
+ * @tx_failure_cb: TX failure callback
+ */
+void ol_tx_failure_cb_set(ol_txrx_pdev_handle pdev,
+ void (*tx_failure_cb)(void *ctx,
+ unsigned int num_msdu,
+ unsigned char tid,
+ unsigned int status))
+{
+ struct htt_pdev_t *htt_pdev = pdev->htt_pdev;
+
+ htt_pdev->tx_failure_cb = tx_failure_cb;
+}
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
index ed43fb0d48db..280287afe92a 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
@@ -1163,7 +1163,7 @@ ol_txrx_vdev_flush(ol_txrx_vdev_handle vdev)
adf_nbuf_set_next(vdev->ll_pause.txq.head, NULL);
adf_nbuf_unmap(vdev->pdev->osdev, vdev->ll_pause.txq.head,
ADF_OS_DMA_TO_DEVICE);
- adf_nbuf_tx_free(vdev->ll_pause.txq.head, 1 /* error */);
+ adf_nbuf_tx_free(vdev->ll_pause.txq.head, ADF_NBUF_PKT_ERROR);
vdev->ll_pause.txq.head = next;
}
vdev->ll_pause.txq.tail = NULL;
@@ -1379,7 +1379,7 @@ ol_tx_queue_log_entry_type_info(
struct ol_tx_log_queue_state_var_sz_t *record;
align_pad =
- (*align - ((((u_int32_t) type) + 1))) & (*align - 1);
+ (*align - (uint32_t)(((unsigned long) type) + 1)) & (*align - 1);
record = (struct ol_tx_log_queue_state_var_sz_t *)
(type + 1 + align_pad);
*size += record->num_cats_active *
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
index 7cd0917fc95d..64002ec6ed49 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
@@ -1222,7 +1222,7 @@ ol_txrx_vdev_detach(
adf_nbuf_set_next(vdev->ll_pause.txq.head, NULL);
adf_nbuf_unmap(pdev->osdev, vdev->ll_pause.txq.head,
ADF_OS_DMA_TO_DEVICE);
- adf_nbuf_tx_free(vdev->ll_pause.txq.head, 1 /* error */);
+ adf_nbuf_tx_free(vdev->ll_pause.txq.head, ADF_NBUF_PKT_ERROR);
vdev->ll_pause.txq.head = next;
}
adf_os_spin_unlock_bh(&vdev->ll_pause.mutex);
@@ -2710,6 +2710,8 @@ ol_txrx_ipa_uc_op_response(
{
if (pdev->ipa_uc_op_cb) {
pdev->ipa_uc_op_cb(op_msg, pdev->osif_dev);
+ } else {
+ adf_os_mem_free(op_msg);
}
}
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
index ff889caff7c0..4838c3586d9d 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
@@ -359,13 +359,20 @@ struct ol_tx_sched_t;
typedef struct ol_tx_sched_t *ol_tx_sched_handle;
#ifndef OL_TXRX_NUM_LOCAL_PEER_IDS
-
+#ifdef WLAN_4SAP_CONCURRENCY
+/*
+ * Each AP will occupy one ID, so it will occupy 4 IDs for 4 SAP mode.
+ * And the remainder IDs will be assigned to other 32 clients.
+ */
+#define OL_TXRX_NUM_LOCAL_PEER_IDS (4 + 32)
+#else
/*
* Each AP will occupy one ID, so it will occupy two IDs for AP-AP mode.
* And the remainder IDs will be assigned to other 32 clients.
*/
#define OL_TXRX_NUM_LOCAL_PEER_IDS (2 + 32)
#endif
+#endif
#ifndef ol_txrx_local_peer_id_t
#define ol_txrx_local_peer_id_t u_int8_t /* default */
diff --git a/CORE/EPPING/src/epping_helper.c b/CORE/EPPING/src/epping_helper.c
index 59ab7986cbb9..52e14f28ae71 100644
--- a/CORE/EPPING/src/epping_helper.c
+++ b/CORE/EPPING/src/epping_helper.c
@@ -46,7 +46,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <wlan_hdd_wowl.h>
diff --git a/CORE/EPPING/src/epping_main.c b/CORE/EPPING/src/epping_main.c
index ddb466ed59d1..ccf588133873 100644
--- a/CORE/EPPING/src/epping_main.c
+++ b/CORE/EPPING/src/epping_main.c
@@ -45,7 +45,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <wlan_hdd_wowl.h>
diff --git a/CORE/EPPING/src/epping_rx.c b/CORE/EPPING/src/epping_rx.c
index 679cf2502c18..c6f2d1eb9c11 100644
--- a/CORE/EPPING/src/epping_rx.c
+++ b/CORE/EPPING/src/epping_rx.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -45,7 +45,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <wlan_hdd_wowl.h>
diff --git a/CORE/EPPING/src/epping_tx.c b/CORE/EPPING/src/epping_tx.c
index 8de0b1cb9520..12f1b4dfcf4e 100644
--- a/CORE/EPPING/src/epping_tx.c
+++ b/CORE/EPPING/src/epping_tx.c
@@ -45,7 +45,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <wlan_hdd_wowl.h>
@@ -405,7 +404,7 @@ void epping_tx_complete_multiple(void *ctx,
pktSkb = adf_nbuf_queue_remove(&skb_queue);
if (pktSkb == NULL)
break;
- adf_nbuf_free(pktSkb);
+ adf_nbuf_tx_free(pktSkb, ADF_NBUF_PKT_ERROR);
pEpping_ctx->total_tx_acks++;
}
diff --git a/CORE/EPPING/src/epping_txrx.c b/CORE/EPPING/src/epping_txrx.c
index bceba3d5329c..b2f90395b1c1 100644
--- a/CORE/EPPING/src/epping_txrx.c
+++ b/CORE/EPPING/src/epping_txrx.c
@@ -45,7 +45,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <wlan_hdd_wowl.h>
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index c88e5d2d49cc..5b4b0bb1c195 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -551,16 +551,6 @@ enum
#define CFG_ACTIVE_MIN_CHANNEL_TIME_MAX ( 10000 )
#define CFG_ACTIVE_MIN_CHANNEL_TIME_DEFAULT ( 20 )
-#define CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_NAME "gActiveMaxChannelTimeBtc"
-#define CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_MIN ( 0 )
-#define CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_MAX ( 10000 )
-#define CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_DEFAULT ( 120 )
-
-#define CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_NAME "gActiveMinChannelTimeBtc"
-#define CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_MIN ( 0 )
-#define CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_MAX ( 10000 )
-#define CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_DEFAULT ( 60 )
-
#define CFG_RETRY_LIMIT_ZERO_NAME "gRetryLimitZero"
#define CFG_RETRY_LIMIT_ZERO_MIN ( 0 )
#define CFG_RETRY_LIMIT_ZERO_MAX ( 15 )
@@ -1304,11 +1294,6 @@ enum
#define CFG_ENABLE_BEACON_EARLY_TERMINATION_MAX ( 1 )
#define CFG_ENABLE_BEACON_EARLY_TERMINATION_DEFAULT ( 0 )
-#define CFG_ENABLE_CLOSE_LOOP_NAME "gEnableCloseLoop"
-#define CFG_ENABLE_CLOSE_LOOP_MIN WNI_CFG_FIXED_RATE_STAMIN
-#define CFG_ENABLE_CLOSE_LOOP_MAX WNI_CFG_FIXED_RATE_STAMAX
-#define CFG_ENABLE_CLOSE_LOOP_DEFAULT WNI_CFG_FIXED_RATE_STADEF
-
#define CFG_ENABLE_BYPASS_11D_NAME "gEnableBypass11d"
#define CFG_ENABLE_BYPASS_11D_MIN ( 0 )
#define CFG_ENABLE_BYPASS_11D_MAX ( 1 )
@@ -1786,11 +1771,6 @@ typedef enum
#define CFG_IGNORE_DYNAMIC_DTIM_IN_P2P_MODE_DEFAULT ( 0 )
-#define CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME "gEnableAutomaticTxPowerControl"
-#define CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MIN ( 0 )
-#define CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MAX ( 1 )
-#define CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_DEFAULT ( 1 )
-
#define CFG_SHORT_GI_40MHZ_NAME "gShortGI40Mhz"
#define CFG_SHORT_GI_40MHZ_MIN 0
#define CFG_SHORT_GI_40MHZ_MAX 1
@@ -2198,7 +2178,7 @@ typedef enum
#define CFG_TDLS_EXTERNAL_CONTROL "gTDLSExternalControl"
#define CFG_TDLS_EXTERNAL_CONTROL_MIN (0)
#define CFG_TDLS_EXTERNAL_CONTROL_MAX (1)
-#define CFG_TDLS_EXTERNAL_CONTROL_DEFAULT (0)
+#define CFG_TDLS_EXTERNAL_CONTROL_DEFAULT (1)
#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE "gEnableTDLSOffChannel"
#define CFG_TDLS_OFF_CHANNEL_SUPPORT_ENABLE_MIN (0)
@@ -2259,6 +2239,12 @@ typedef enum
#endif
+/* Timer to defer for enabling TDLS on P2P listen (Value in milliseconds) */
+#define CFG_TDLS_ENABLE_DEFER_TIMER "gTDLSEnableDeferTime"
+#define CFG_TDLS_ENABLE_DEFER_TIMER_MIN (2000)
+#define CFG_TDLS_ENABLE_DEFER_TIMER_MAX (6000)
+#define CFG_TDLS_ENABLE_DEFER_TIMER_DEFAULT (5000)
+
#ifdef WLAN_ACTIVEMODE_OFFLOAD_FEATURE
#define CFG_ACTIVEMODE_OFFLOAD_ENABLE "gEnableActiveModeOffload"
#define CFG_ACTIVEMODE_OFFLOAD_ENABLE_MIN ( 0 )
@@ -2983,7 +2969,11 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */
#endif
#define CFG_MAX_CONCURRENT_CONNECTIONS_NAME "gMaxConcurrentActiveSessions"
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_MAX_CONCURRENT_CONNECTIONS_DEFAULT ( 4 )
+#else
#define CFG_MAX_CONCURRENT_CONNECTIONS_DEFAULT ( 2 )
+#endif
#define CFG_MAX_CONCURRENT_CONNECTIONS_MIN ( 1 )
#define CFG_MAX_CONCURRENT_CONNECTIONS_MAX ( 4 )
@@ -3455,6 +3445,101 @@ enum dot11p_mode {
#define CFG_BTC_ANTENNA_ISOLATION_MAX (100)
#define CFG_BTC_ANTENNA_ISOLATION_DEFAULT (0)
+/**
+* For P2P + STA + BT Paging
+* gBTIntervalPageP2PSTA/gWLIntervalPageP2PSTA intervals length (in ms) during
+* intervals length (in ms) during WLAN P2P + STA (multi vdev) + BT Paging,
+* min 20ms, max 200ms
+* Customer could change these parameters' value to improve P2P throughput
+* during BT Page
+* gBTIntervalPageP2PSTA=80
+* gWLIntervalPageP2PSTA=30
+*/
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_STA "gBTIntervalPageP2PSTA"
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_MIN (20)
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_MAX (200)
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT (80)
+
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA "gWLIntervalPageP2PSTA"
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_DEFAULT (30)
+
+/**
+FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT
+* intervals length (in ms) during WLAN STA (single vdev) + BT Inquiry,
+* min 20ms, max 200ms
+* Customer could change these parameters' value to improve STA throughput
+* during BT Inquiry
+* gBTIntervalInquirySTA=120
+* gWLIntervalInquirySTA=30
+*/
+#define CFG_BTC_BT_INTERVAL_INQ_STA "gBTIntervalInquirySTA"
+#define CFG_BTC_BT_INTERVAL_INQ_STA_MIN (20)
+#define CFG_BTC_BT_INTERVAL_INQ_STA_MAX (200)
+#define CFG_BTC_BT_INTERVAL_INQ_STA_DEFAULT (120)
+
+#define CFG_BTC_WLAN_INTERVAL_INQ_STA "gWLIntervalInquirySTA"
+#define CFG_BTC_WLAN_INTERVAL_INQ_STA_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_INQ_STA_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_INQ_STA_DEFAULT (30)
+
+/**
+* For SAP + BT Inquiry
+* intervals length (in ms) during WLAN SAP (single vdev) + BT Inquiry,
+* min 20ms, max 200ms
+* Customer could change these parameters' value to improve SAP throughput
+* during BT Inquiry
+* gBTIntervalInquirySAP=120
+* gWLIntervalInquirySAP=30
+*/
+#define CFG_BTC_BT_INTERVAL_INQ_SAP "gBTIntervalInquirySAP"
+#define CFG_BTC_BT_INTERVAL_INQ_SAP_MIN (20)
+#define CFG_BTC_BT_INTERVAL_INQ_SAP_MAX (200)
+#define CFG_BTC_BT_INTERVAL_INQ_SAP_DEFAULT (120)
+
+#define CFG_BTC_WLAN_INTERVAL_INQ_SAP "gWLIntervalInquirySAP"
+#define CFG_BTC_WLAN_INTERVAL_INQ_SAP_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_INQ_SAP_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_INQ_SAP_DEFAULT (30)
+
+/**
+* For P2P + BT Inquiry
+* intervals length (in ms) during WLAN P2P (single vdev) + BT Inquiry,
+* min 20ms, max 200ms
+* Customer could change these parameters' value to improve P2P throughput
+* during BT Inquiry
+* gBTIntervalInquiryP2P=120
+* gWLIntervalInquiryP2P=30
+*/
+#define CFG_BTC_BT_INTERVAL_INQ_P2P "gBTIntervalInquiryP2P"
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_MIN (20)
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_MAX (200)
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_DEFAULT (120)
+
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P "gWLIntervalInquiryP2P"
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_DEFAULT (30)
+
+/**
+* For P2P + STA + BT Inquiry
+* intervals length (in ms) during WLAN P2P + STA (multi vdev) + BT Inquiry,
+* min 20ms, max 200ms
+* Customer could change these parameters' value to improve P2P throughput
+* during BT Inquiry
+* gBTIntervalInquiryP2PSTA=80
+* gWLIntervalInquiryP2PSTA=30
+*/
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_STA "gBTIntervalInquiryP2PSTA"
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_STA_MIN (20)
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_STA_MAX (200)
+#define CFG_BTC_BT_INTERVAL_INQ_P2P_STA_DEFAULT (80)
+
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA "gWLIntervalInquiryP2PSTA"
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_DEFAULT (30)
/* Parameters for roaming scans performed at high RSSI */
@@ -4004,6 +4089,50 @@ enum dot11p_mode {
#define CFG_BPF_PACKET_FILTER_OFFLOAD_MAX (1)
#define CFG_BPF_PACKET_FILTER_OFFLOAD_DEFAULT (1)
+/*
+ * GPIO num used to wakeup host, 0xFF disable wakeup.
+ * Default value is 0xFF
+ */
+#define CFG_HOST_WAKEUP_GPIO_NAME "g_host_wakeup_gpio"
+#define CFG_HOST_WAKEUP_GPIO_MIN (0)
+#define CFG_HOST_WAKEUP_GPIO_MAX (0xFF)
+#define CFG_HOST_WAKEUP_GPIO_DEFAULT (0xFF)
+
+/*
+ * Wakeup type for host.
+ * 1 Low level
+ * 2 High level
+ * 3 Rising edge
+ * 4 Falling edge
+ * Default value is 1.
+ */
+#define CFG_HOST_WAKEUP_TYPE_NAME "g_host_wakeup_type"
+#define CFG_HOST_WAKEUP_TYPE_MIN (1)
+#define CFG_HOST_WAKEUP_TYPE_MAX (4)
+#define CFG_HOST_WAKEUP_TYPE_DEFAULT (1)
+
+/*
+ * GPIO number used to wakeup target, 0xFF disable wakeup.
+ * Default value is 0xFF
+ */
+#define CFG_TARGET_WAKEUP_GPIO_NAME "g_target_wakeup_gpio"
+#define CFG_TARGET_WAKEUP_GPIO_MIN (0)
+#define CFG_TARGET_WAKEUP_GPIO_MAX (0xFF)
+#define CFG_TARGET_WAKEUP_GPIO_DEFAULT (0xFF)
+
+/*
+ * Wakeup type for host.
+ * 1 Low level
+ * 2 High level
+ * 3 Rising edge
+ * 4 Falling edge
+ * Default value is 1.
+ */
+#define CFG_TARGET_WAKEUP_TYPE_NAME "g_target_wakeup_type"
+#define CFG_TARGET_WAKEUP_TYPE_MIN (1)
+#define CFG_TARGET_WAKEUP_TYPE_MAX (4)
+#define CFG_TARGET_WAKEUP_TYPE_DEFAULT (1)
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -4130,8 +4259,6 @@ struct hdd_config {
v_U32_t nInitialDwellTime; //in units of milliseconds
bool initial_scan_no_dfs_chnl;
- v_U32_t nActiveMinChnTimeBtc; //in units of milliseconds
- v_U32_t nActiveMaxChnTimeBtc; //in units of milliseconds
#ifdef WLAN_AP_STA_CONCURRENCY
v_U32_t nPassiveMinChnTimeConc; //in units of milliseconds
v_U32_t nPassiveMaxChnTimeConc; //in units of milliseconds
@@ -4297,12 +4424,10 @@ struct hdd_config {
v_U16_t nTeleBcnTransLiNumIdleBeacons;
v_U16_t nTeleBcnMaxLiNumIdleBeacons;
v_U8_t bcnEarlyTermWakeInterval;
- v_U32_t enableCloseLoop;
v_U8_t enableBypass11d;
v_U8_t enableDFSChnlScan;
v_U8_t enable_dfs_pno_chnl_scan;
v_U8_t enableDynamicDTIM;
- v_U8_t enableAutomaticTxPowerControl;
v_U8_t ShortGI40MhzEnable;
eHddLinkSpeedReportType reportMaxLinkSpeed;
v_S31_t linkSpeedRssiHigh;
@@ -4699,6 +4824,21 @@ struct hdd_config {
uint32_t dynamic_wlan_bt_coex;
uint32_t antenna_isolation;
+ uint32_t coex_page_p2p_sta_bt_interval;
+ uint32_t coex_page_p2p_sta_wlan_interval;
+
+ uint32_t coex_inquiry_sta_bt_interval;
+ uint32_t coex_inquiry_sta_wlan_interval;
+
+ uint32_t coex_inquiry_sap_bt_interval;
+ uint32_t coex_inquiry_sap_wlan_interval;
+
+ uint32_t coex_inquiry_p2p_bt_interval;
+ uint32_t coex_inquiry_p2p_wlan_interval;
+
+ uint32_t coex_inquiry_p2p_sta_bt_interval;
+ uint32_t coex_inquiry_p2p_sta_wlan_interval;
+
uint8_t inform_bss_rssi_raw;
#ifdef WLAN_FEATURE_TSF
uint32_t tsf_gpio_pin;
@@ -4788,7 +4928,13 @@ struct hdd_config {
/* parameter for indicating sifs burst duration to fw */
uint8_t sifs_burst_duration;
- bool bpf_packet_filter_enable;
+ bool bpf_packet_filter_enable;
+ /* parameter for defer timer for enabling TDLS on p2p listen */
+ uint16_t tdls_enable_defer_time;
+ uint32_t host_wakeup_gpio;
+ uint32_t host_wakeup_type;
+ uint32_t target_wakeup_gpio;
+ uint32_t target_wakeup_type;
};
typedef struct hdd_config hdd_config_t;
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index b68ab6da55db..11ca13ffeb40 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -269,6 +269,9 @@ enum qca_nl80211_vendor_subcmds {
QCA_NL80211_VENDOR_SUBCMD_ACS_POLICY = 116,
QCA_NL80211_VENDOR_SUBCMD_STA_CONNECT_ROAM_POLICY = 117,
QCA_NL80211_VENDOR_SUBCMD_SET_SAP_CONFIG = 118,
+
+ /* subcommand for link layer statistics extension */
+ QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT = 127,
};
enum qca_nl80211_vendor_subcmds_index {
@@ -307,6 +310,7 @@ enum qca_nl80211_vendor_subcmds_index {
QCA_NL80211_VENDOR_SUBCMD_LL_RADIO_STATS_INDEX,
QCA_NL80211_VENDOR_SUBCMD_LL_IFACE_STATS_INDEX,
QCA_NL80211_VENDOR_SUBCMD_LL_PEER_INFO_STATS_INDEX,
+ QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX,
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
/* EXT TDLS */
QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX,
@@ -2021,10 +2025,74 @@ enum qca_vendor_attr_txpower_scale_decr_db {
QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_DECR_DB_AFTER_LAST - 1
};
+/**
+ * enum qca_wlan_vendor_attr_ll_stats_ext - Attributes for MAC layer monitoring
+ * offload which is an extension for LL_STATS.
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_CFG_PERIOD: Monitoring period. Unit in ms.
+ * If MAC counters do not exceed the threshold, FW will report monitored
+ * link layer counters periodically as this setting. The first report is
+ * always triggered by this timer.
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_CFG_THRESHOLD: It is a percentage(1 ~ 99).
+ * For each MAC layer counter, FW holds two copies. One is the current value.
+ * The other is the last report. Once a current counter's increment is larger
+ * than the theshold, FW will indicate that counter to host even the
+ * monitoring timer does not expire.
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_MAC_ADDRESS: Peer sta's MAC address
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_CHG: Peer sta power state change
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_STATE: Current power state of
+ * peer STA.
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TID: TID of msdu
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_NUM_MSDU: Count of msdu with the same
+ * failure code.
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_STATUS: TX failure code
+ * 1: TX packet discarded
+ * 2: No ACK
+ * 3: Postpone
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_MAC_ADDRESS: peer MAC address
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_STATE: Peer STA current state
+ * @QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_NUM: number of peers
+*/
+enum qca_wlan_vendor_attr_ll_stats_ext {
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_INVALID = 0,
+
+ /* Attributes for configurations */
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_CFG_PERIOD,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_CFG_THRESHOLD,
+
+ /* Peer STA power state change */
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_CHG,
+
+ /* TX failure event */
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TID,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_NUM_MSDU,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_STATUS,
+
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_STATE,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_MAC_ADDRESS,
+
+ /* MAC counters */
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_GLOBAL,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_EVENT_MODE,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_IFACE_ID,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_ID,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_BITMAP,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_RX_BITMAP,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_CCA_BSS_BITMAP,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_SIGNAL_BITMAP,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_NUM,
+
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_LAST,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_MAX =
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_LAST - 1
+};
+
struct cfg80211_bss* wlan_hdd_cfg80211_update_bss_db( hdd_adapter_t *pAdapter,
tCsrRoamInfo *pRoamInfo
);
+int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy,
+ hdd_adapter_t *pAdapter);
+
#ifdef FEATURE_WLAN_LFR
int wlan_hdd_cfg80211_pmksa_candidate_notify(
hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo,
diff --git a/CORE/HDD/inc/wlan_hdd_ipa.h b/CORE/HDD/inc/wlan_hdd_ipa.h
index 19809be36482..eaddd31abc25 100644
--- a/CORE/HDD/inc/wlan_hdd_ipa.h
+++ b/CORE/HDD/inc/wlan_hdd_ipa.h
@@ -63,6 +63,8 @@ int hdd_ipa_set_perf_level(hdd_context_t *hdd_ctx, uint64_t tx_packets,
int hdd_ipa_suspend(hdd_context_t *hdd_ctx);
int hdd_ipa_resume(hdd_context_t *hdd_ctx);
void hdd_ipa_ready_cb(hdd_context_t *hdd_ctx);
+bool hdd_ipa_is_present(hdd_context_t *hdd_ctx);
+void hdd_ipa_reset_ipaconfig(hdd_context_t *hdd_ctx, v_U32_t ipaconfig);
#ifdef IPA_UC_STA_OFFLOAD
int hdd_ipa_send_mcc_scc_msg(hdd_context_t *hdd_ctx, bool mcc_mode);
@@ -78,6 +80,33 @@ void hdd_ipa_uc_stat_request( hdd_adapter_t *adapter, uint8_t reason);
void hdd_ipa_uc_rt_debug_host_dump(hdd_context_t *hdd_ctx);
void hdd_ipa_dump_info(hdd_context_t *hdd_ctx);
#endif /* IPA_UC_OFFLOAD */
+#else /* IPA_OFFLOAD */
+#define hdd_ipa_set_perf_level(hdd_ctx, tx_p, rx_p) /* no-op */
+/**
+ * hdd_ipa_is_present() - get IPA hw status
+ * @hdd_ctx: pointer to hdd context
+ *
+ * Return: true - ipa hw present
+ * false - ipa hw not present
+ */
+static inline
+bool hdd_ipa_is_present(hdd_context_t *hdd_ctx)
+{
+ return false;
+}
+
+/**
+ * hdd_ipa_reset_ipaconfig() - reset IpaConfig
+ * @hdd_ctx: pointer to hdd context
+ * @ipaconfig: new value for IpaConfig
+ *
+ * Return: none
+ */
+static inline
+void hdd_ipa_reset_ipaconfig(hdd_context_t *hdd_ctx, v_U32_t ipaconfig)
+{
+ return;
+}
#endif /* IPA_OFFLOAD */
#if !defined(IPA_OFFLOAD) || !defined(IPA_UC_OFFLOAD)
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 4abdcfc67685..065a8685ab8e 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -78,13 +78,6 @@
/** Length of the TX queue for the netdev */
#define HDD_NETDEV_TX_QUEUE_LEN (3000)
-/** Bytes to reserve in the headroom */
-#if (!defined(QCA_WIFI_2_0)) || (defined(HIF_USB))
-#define HDD_HW_NEEDED_HEADROOM 128
-#else
-#define HDD_HW_NEEDED_HEADROOM 0
-#endif
-
/** Hdd Tx Time out value */
#ifdef LIBRA_LINUX_PC
#define HDD_TX_TIMEOUT (8000)
@@ -222,7 +215,11 @@
/* Maximum number of interfaces allowed(STA, P2P Device, P2P Interfaces) */
#ifndef WLAN_OPEN_P2P_INTERFACE
+#ifdef WLAN_4SAP_CONCURRENCY
+#define WLAN_MAX_INTERFACES 4
+#else
#define WLAN_MAX_INTERFACES 3
+#endif
#else
#define WLAN_MAX_INTERFACES 4
#endif
@@ -759,6 +756,8 @@ struct hdd_station_ctx
#ifdef WLAN_FEATURE_NAN_DATAPATH
struct nan_datapath_ctx ndp_ctx;
#endif
+
+ uint8_t broadcast_staid;
};
#define BSS_STOP 0
@@ -1478,6 +1477,32 @@ struct acs_dfs_policy {
uint8_t acs_channel;
};
+/**
+ * struct hdd_scan_chan_info - channel info
+ * @freq: radio frequence
+ * @cmd flag: cmd flag
+ * @noise_floor: noise floor
+ * @cycle_count: cycle count
+ * @rx_clear_count: rx clear count
+ * @tx_frame_count: TX frame count
+ * @delta_cycle_count: delta of cc
+ * @delta_rx_clear_count: delta of rcc
+ * @delta_tx_frame_count: delta of tfc
+ * @clock_freq: clock frequence MHZ
+ */
+struct hdd_scan_chan_info {
+ uint32_t freq;
+ uint32_t cmd_flag;
+ uint32_t noise_floor;
+ uint32_t cycle_count;
+ uint32_t rx_clear_count;
+ uint32_t tx_frame_count;
+ uint32_t delta_cycle_count;
+ uint32_t delta_rx_clear_count;
+ uint32_t delta_tx_frame_count;
+ uint32_t clock_freq;
+};
+
/** Adapter stucture definition */
struct hdd_context_s
@@ -1750,6 +1775,9 @@ struct hdd_context_s
#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
vos_timer_t skip_acs_scan_timer;
v_U8_t skip_acs_scan_status;
+ uint8_t *last_acs_channel_list;
+ uint8_t num_of_channels;
+ spinlock_t acs_skip_lock;
#endif
vos_wake_lock_t sap_dfs_wakelock;
@@ -1844,6 +1872,12 @@ struct hdd_context_s
uint8_t max_mc_addr_list;
struct acs_dfs_policy acs_policy;
uint8_t max_peers;
+ /* bit map to set/reset TDLS by different sources */
+ unsigned long tdls_source_bitmap;
+ /* tdls source timer to enable/disable TDLS on p2p listen */
+ vos_timer_t tdls_source_timer;
+ struct hdd_scan_chan_info *chan_info;
+ struct mutex chan_info_lock;
};
/*---------------------------------------------------------------------------
@@ -2016,6 +2050,7 @@ void hdd_wlan_green_ap_start_bss(hdd_context_t *hdd_ctx);
void hdd_wlan_green_ap_stop_bss(struct hdd_context_s *hdd_ctx);
void hdd_wlan_green_ap_add_sta(struct hdd_context_s *hdd_ctx);
void hdd_wlan_green_ap_del_sta(struct hdd_context_s *hdd_ctx);
+int hdd_wlan_enable_egap(struct hdd_context_s *hdd_ctx);
#else
static inline void hdd_wlan_green_ap_init(struct hdd_context_s *hdd_ctx) {}
static inline void hdd_wlan_green_ap_deinit(struct hdd_context_s *hdd_ctx) {}
@@ -2023,6 +2058,9 @@ static inline void hdd_wlan_green_ap_start_bss(hdd_context_t *hdd_ctx) {}
static inline void hdd_wlan_green_ap_stop_bss(struct hdd_context_s *hdd_ctx) {}
static inline void hdd_wlan_green_ap_add_sta(struct hdd_context_s *hdd_ctx) {}
static inline void hdd_wlan_green_ap_del_sta(struct hdd_context_s *hdd_ctx) {}
+static inline int hdd_wlan_enable_egap(struct hdd_context_s *hdd_ctx) {
+ return -EINVAL;
+}
#endif
#ifdef WLAN_FEATURE_STATS_EXT
@@ -2251,4 +2289,7 @@ void hdd_sap_restart_handle(struct work_struct *work);
void hdd_set_rps_cpu_mask(hdd_context_t *hdd_ctx);
void hdd_initialize_adapter_common(hdd_adapter_t *adapter);
void hdd_svc_fw_shutdown_ind(struct device *dev);
+void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx);
+void wlan_hdd_init_chan_info(hdd_context_t *hdd_ctx);
+void wlan_hdd_deinit_chan_info(hdd_context_t *hdd_ctx);
#endif // end #if !defined( WLAN_HDD_MAIN_H )
diff --git a/CORE/HDD/inc/wlan_hdd_oemdata.h b/CORE/HDD/inc/wlan_hdd_oemdata.h
index 365c45ff5641..d507ba81fae3 100644
--- a/CORE/HDD/inc/wlan_hdd_oemdata.h
+++ b/CORE/HDD/inc/wlan_hdd_oemdata.h
@@ -180,4 +180,13 @@ void hdd_SendPeerStatusIndToOemApp(v_MACADDR_t *peerMac,
device_mode_t dev_mode);
#endif //__WLAN_HDD_OEM_DATA_H__
+#else
+static inline void hdd_SendPeerStatusIndToOemApp(v_MACADDR_t *peerMac,
+ uint8_t peerStatus,
+ uint8_t peerTimingMeasCap,
+ uint8_t sessionId,
+ tSirSmeChanInfo *chan_info,
+ device_mode_t dev_mode)
+{
+}
#endif //FEATURE_OEM_DATA_SUPPORT
diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h
index cc96b5128c85..d9a7a93e1957 100644
--- a/CORE/HDD/inc/wlan_hdd_tdls.h
+++ b/CORE/HDD/inc/wlan_hdd_tdls.h
@@ -34,6 +34,25 @@
\brief Linux HDD TDLS include file
==========================================================================*/
+/**
+ * eTDLSSupportMode - TDLS support modes
+ * @eTDLS_SUPPORT_NOT_ENABLED: TDLS support not enabled
+ * @eTDLS_SUPPORT_DISABLED: suppress implicit trigger and not respond
+ * to the peer
+ * @eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY: suppress implicit trigger,
+ * but respond to the peer
+ * @eTDLS_SUPPORT_ENABLED: implicit trigger
+ * @eTDLS_SUPPORT_EXTERNAL_CONTROL: implicit trigger but only to a
+ * peer mac configured by user space.
+ */
+typedef enum {
+ eTDLS_SUPPORT_NOT_ENABLED = 0,
+ eTDLS_SUPPORT_DISABLED,
+ eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY,
+ eTDLS_SUPPORT_ENABLED,
+ eTDLS_SUPPORT_EXTERNAL_CONTROL
+} eTDLSSupportMode;
+
#ifdef FEATURE_WLAN_TDLS
#define MAX_NUM_TDLS_PEER 3
@@ -82,6 +101,22 @@ should not be more than 2000 */
#define MAX_TDLS_DISCOVERY_CYCLE_RETRIES 2
#define MIN_TDLS_DISCOVERY_CYCLE_RETRY_TIME (5 * 60 * 1000) /* 5 minutes */
+/**
+ * enum tdls_disable_source - TDLS disable sources
+ * @HDD_SET_TDLS_MODE_SOURCE_USER: disable from user
+ * @HDD_SET_TDLS_MODE_SOURCE_SCAN: disable during scan
+ * @HDD_SET_TDLS_MODE_SOURCE_OFFCHANNEL: disable during offchannel
+ * @HDD_SET_TDLS_MODE_SOURCE_BTC: disable during bluetooth
+ * @HDD_SET_TDLS_MODE_SOURCE_P2P: disable during p2p
+ */
+enum tdls_disable_source {
+ HDD_SET_TDLS_MODE_SOURCE_USER = 0,
+ HDD_SET_TDLS_MODE_SOURCE_SCAN,
+ HDD_SET_TDLS_MODE_SOURCE_OFFCHANNEL,
+ HDD_SET_TDLS_MODE_SOURCE_BTC,
+ HDD_SET_TDLS_MODE_SOURCE_P2P,
+};
+
typedef struct
{
tANI_U32 tdls;
@@ -110,17 +145,6 @@ typedef struct
struct delayed_work tdls_scan_work;
} tdls_scan_context_t;
-typedef enum {
- eTDLS_SUPPORT_NOT_ENABLED = 0,
- eTDLS_SUPPORT_DISABLED, /* suppress implicit trigger and not respond to the peer */
- eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY, /* suppress implicit trigger, but respond to the peer */
- eTDLS_SUPPORT_ENABLED, /* implicit trigger */
- /* External control means implicit trigger
- * but only to a peer mac configured by user space.
- */
- eTDLS_SUPPORT_EXTERNAL_CONTROL
-} eTDLSSupportMode;
-
enum tdls_spatial_streams {
TDLS_NSS_1x1_MODE = 0,
TDLS_NSS_2x2_MODE = 0xff,
@@ -486,7 +510,9 @@ int hdd_set_tdls_scan_type(hdd_context_t *hdd_ctx, int val);
int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx,
hdd_adapter_t *adapter,
uint32_t mode);
-
+void wlan_hdd_change_tdls_mode(void *hdd_ctx);
+void wlan_hdd_start_stop_tdls_source_timer(hdd_context_t *pHddCtx,
+ eTDLSSupportMode tdls_mode);
#else
static inline void hdd_tdls_notify_mode_change(hdd_adapter_t *pAdapter,
@@ -510,6 +536,16 @@ static inline int wlan_hdd_tdls_antenna_switch(hdd_context_t *hdd_ctx,
{
return 0;
}
+static inline void
+wlan_hdd_change_tdls_mode(void *hdd_ctx)
+{
+}
+static inline void
+wlan_hdd_start_stop_tdls_source_timer(hdd_context_t *pHddCtx,
+ eTDLSSupportMode tdls_mode)
+{
+}
+
#endif
#endif // __HDD_TDSL_H
diff --git a/CORE/HDD/inc/wlan_hdd_tx_rx.h b/CORE/HDD/inc/wlan_hdd_tx_rx.h
index df434b1da0b1..7906433b85bf 100644
--- a/CORE/HDD/inc/wlan_hdd_tx_rx.h
+++ b/CORE/HDD/inc/wlan_hdd_tx_rx.h
@@ -274,6 +274,7 @@ const char *hdd_reason_type_to_string(enum netif_reason_type reason);
const char *hdd_action_type_to_string(enum netif_action_type action);
void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
enum netif_action_type action, enum netif_reason_type reason);
+void wlan_hdd_classify_pkt(struct sk_buff *skb);
#ifdef QCA_PKT_PROTO_TRACE
void hdd_dhcp_pkt_trace_buf_update(struct sk_buff *skb, int is_transmission,
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 7ce9dfef12ca..343b074a0a02 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -51,7 +51,6 @@
#include <aniGlobal.h>
#include "dot11f.h"
#include "wlan_nlink_common.h"
-#include "wlan_btc_svc.h"
#include "wlan_hdd_power.h"
#include "wlan_hdd_trace.h"
#include <linux/ieee80211.h>
@@ -118,11 +117,7 @@ static const int beacon_filter_table[] = {
SIR_MAC_ERP_INFO_EID,
SIR_MAC_EDCA_PARAM_SET_EID,
SIR_MAC_QOS_CAPABILITY_EID,
- SIR_MAC_CHNL_SWITCH_ANN_EID,
SIR_MAC_HT_INFO_EID,
-#if defined WLAN_FEATURE_VOWIFI
- SIR_MAC_PWR_CONSTRAINT_EID,
-#endif
#ifdef WLAN_FEATURE_11AC
SIR_MAC_VHT_OPMODE_EID,
SIR_MAC_VHT_OPERATION_EID,
@@ -306,10 +301,10 @@ static int hdd_set_beacon_filter(hdd_adapter_t *adapter)
uint32_t ie_map[8] = {0};
VOS_STATUS vos_status = VOS_STATUS_E_FAILURE;
- for (i = 0; i < ARRAY_SIZE(beacon_filter_table); i++) {
- __set_bit((beacon_filter_table[i] - 1),
+ for (i = 0; i < ARRAY_SIZE(beacon_filter_table); i++)
+ __set_bit(beacon_filter_table[i],
(unsigned long int *)ie_map);
- }
+
vos_status = sme_set_beacon_filter(adapter->sessionId, ie_map);
if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
hddLog(LOGE, "%s: failed to set beacon filter",
@@ -878,7 +873,6 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
}
#endif
}
- send_btc_nlink_msg(type, 0);
}
static void hdd_connRemoveConnectInfo(hdd_station_ctx_t *pHddStaCtx)
@@ -1876,10 +1870,24 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs
/* add bss_id to cfg80211 data base */
bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo);
if (NULL == bss) {
- pr_err("wlan: Not able to create BSS entry\n");
+ hddLog(LOGE,
+ FL("Not able to add BSS entry"));
wlan_hdd_netif_queue_control(pAdapter,
WLAN_NETIF_CARRIER_OFF,
WLAN_CONTROL_PATH);
+ if (!hddDisconInProgress) {
+ /*
+ * Here driver was not able to add bss in cfg80211 database
+ * this can happen if connected channel is not valid,
+ * i.e reg domain was changed during connection.
+ * Queue disconnect for the session if disconnect is
+ * not in progress.
+ */
+ hddLog(LOGE, FL("Disconnecting..."));
+ sme_RoamDisconnect( WLAN_HDD_GET_HAL_CTX(pAdapter),
+ pAdapter->sessionId,
+ eCSR_DISCONNECT_REASON_UNSPECIFIED);
+ }
return eHAL_STATUS_FAILURE;
}
#ifdef WLAN_FEATURE_VOWIFI_11R
@@ -3125,8 +3133,17 @@ hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter,
{
if(eSIR_SME_SUCCESS != pRoamInfo->statusCode)
{
+ hddTdlsPeer_t *curr_peer;
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
("%s: Add Sta is failed. %d"),__func__, pRoamInfo->statusCode);
+ mutex_lock(&pHddCtx->tdls_lock);
+ curr_peer = wlan_hdd_tdls_find_peer(pAdapter,
+ pRoamInfo->peerMac, FALSE);
+ if (curr_peer)
+ curr_peer->link_status = eTDLS_LINK_TEARING;
+ else
+ hddLog(LOG1, FL("curr_peer is Null"));
+ mutex_unlock(&pHddCtx->tdls_lock);
}
else
{
@@ -3191,10 +3208,21 @@ hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter,
}
case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP:
{
+
+ hddTdlsPeer_t *curr_peer;
if (eSIR_SME_SUCCESS != pRoamInfo->statusCode)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Link Establish Request failed. %d", __func__, pRoamInfo->statusCode);
+ mutex_lock(&pHddCtx->tdls_lock);
+ curr_peer = wlan_hdd_tdls_find_peer(pAdapter,
+ pRoamInfo->peerMac, FALSE);
+ if (curr_peer)
+ curr_peer->link_status = eTDLS_LINK_TEARING;
+ else
+ hddLog(LOGE, FL("curr_peer is Null"));
+
+ mutex_unlock(&pHddCtx->tdls_lock);
}
complete(&pAdapter->tdls_link_establish_req_comp);
break;
@@ -3987,6 +4015,10 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
WLAN_CONTROL_PATH);
break;
}
+ case eCSR_ROAM_LOSTLINK_DETECTED:
+ if(roamResult != eCSR_ROAM_RESULT_DISASSOC_IND) {
+ break;
+ } /* else fall through */
case eCSR_ROAM_DISASSOCIATED:
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index fb21ce63f290..f58c90b5ce29 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -873,20 +873,6 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_ACTIVE_MIN_CHANNEL_TIME_MIN,
CFG_ACTIVE_MIN_CHANNEL_TIME_MAX ),
- REG_VARIABLE( CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_NAME, WLAN_PARAM_Integer,
- hdd_config_t, nActiveMaxChnTimeBtc,
- VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
- CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_DEFAULT,
- CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_MIN,
- CFG_ACTIVE_MAX_CHANNEL_TIME_BTC_MAX ),
-
- REG_VARIABLE( CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_NAME, WLAN_PARAM_Integer,
- hdd_config_t, nActiveMinChnTimeBtc,
- VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
- CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_DEFAULT,
- CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_MIN,
- CFG_ACTIVE_MIN_CHANNEL_TIME_BTC_MAX ),
-
REG_VARIABLE( CFG_RETRY_LIMIT_ZERO_NAME, WLAN_PARAM_Integer,
hdd_config_t, retryLimitZero,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -2043,13 +2029,6 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_AP_DATA_AVAIL_POLL_PERIOD_MIN,
CFG_AP_DATA_AVAIL_POLL_PERIOD_MAX ),
- REG_VARIABLE( CFG_ENABLE_CLOSE_LOOP_NAME, WLAN_PARAM_Integer,
- hdd_config_t, enableCloseLoop,
- VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
- CFG_ENABLE_CLOSE_LOOP_DEFAULT,
- CFG_ENABLE_CLOSE_LOOP_MIN,
- CFG_ENABLE_CLOSE_LOOP_MAX ),
-
REG_VARIABLE( CFG_ENABLE_BYPASS_11D_NAME, WLAN_PARAM_Integer,
hdd_config_t, enableBypass11d,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -2078,13 +2057,6 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_ENABLE_DYNAMIC_DTIM_MIN,
CFG_ENABLE_DYNAMIC_DTIM_MAX ),
- REG_VARIABLE( CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_NAME, WLAN_PARAM_Integer,
- hdd_config_t, enableAutomaticTxPowerControl,
- VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
- CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_DEFAULT,
- CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MIN,
- CFG_ENABLE_AUTOMATIC_TX_POWER_CONTROL_MAX ),
-
REG_VARIABLE( CFG_SHORT_GI_40MHZ_NAME, WLAN_PARAM_Integer,
hdd_config_t, ShortGI40MhzEnable,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -4240,6 +4212,76 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_BTC_ANTENNA_ISOLATION_MIN,
CFG_BTC_ANTENNA_ISOLATION_MAX),
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_PAGE_P2P_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_p2p_sta_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_MIN,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_p2p_sta_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_MIN,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_INQ_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_sta_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_STA_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_STA_MIN,
+ CFG_BTC_BT_INTERVAL_INQ_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_INQ_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_sta_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_STA_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_STA_MIN,
+ CFG_BTC_WLAN_INTERVAL_INQ_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_INQ_SAP, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_sap_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_SAP_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_SAP_MIN,
+ CFG_BTC_BT_INTERVAL_INQ_SAP_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_INQ_SAP, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_sap_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_SAP_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_SAP_MIN,
+ CFG_BTC_WLAN_INTERVAL_INQ_SAP_MAX),
+
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_INQ_P2P, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_p2p_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_MIN,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_INQ_P2P, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_p2p_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_MIN,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_MAX),
+
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_INQ_P2P_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_p2p_sta_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_STA_DEFAULT,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_STA_MIN,
+ CFG_BTC_BT_INTERVAL_INQ_P2P_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_inquiry_p2p_sta_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MIN,
+ CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MAX),
+
REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer,
hdd_config_t, inform_bss_rssi_raw,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -4688,6 +4730,41 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_BPF_PACKET_FILTER_OFFLOAD_DEFAULT,
CFG_BPF_PACKET_FILTER_OFFLOAD_MIN,
CFG_BPF_PACKET_FILTER_OFFLOAD_MAX),
+
+ REG_VARIABLE(CFG_TDLS_ENABLE_DEFER_TIMER, WLAN_PARAM_Integer,
+ hdd_config_t, tdls_enable_defer_time,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TDLS_ENABLE_DEFER_TIMER_DEFAULT,
+ CFG_TDLS_ENABLE_DEFER_TIMER_MIN,
+ CFG_TDLS_ENABLE_DEFER_TIMER_MAX),
+
+ REG_VARIABLE(CFG_HOST_WAKEUP_GPIO_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, host_wakeup_gpio,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_HOST_WAKEUP_GPIO_DEFAULT,
+ CFG_HOST_WAKEUP_GPIO_MIN,
+ CFG_HOST_WAKEUP_GPIO_MAX),
+
+ REG_VARIABLE(CFG_HOST_WAKEUP_TYPE_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, host_wakeup_type,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_HOST_WAKEUP_TYPE_DEFAULT,
+ CFG_HOST_WAKEUP_TYPE_MIN,
+ CFG_HOST_WAKEUP_TYPE_MAX),
+
+ REG_VARIABLE(CFG_TARGET_WAKEUP_GPIO_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, target_wakeup_gpio,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TARGET_WAKEUP_GPIO_DEFAULT,
+ CFG_TARGET_WAKEUP_GPIO_MIN,
+ CFG_TARGET_WAKEUP_GPIO_MAX),
+
+ REG_VARIABLE(CFG_TARGET_WAKEUP_TYPE_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, target_wakeup_type,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TARGET_WAKEUP_TYPE_DEFAULT,
+ CFG_TARGET_WAKEUP_TYPE_MIN,
+ CFG_TARGET_WAKEUP_TYPE_MAX),
};
@@ -5540,6 +5617,10 @@ void print_hdd_cfg(hdd_context_t *pHddCtx)
pHddCtx->cfg_ini->bpf_packet_filter_enable);
hdd_ndp_print_ini_config(pHddCtx);
+
+ hddLog(LOG2, "Name = [%s] Value = [%u] ",
+ CFG_TDLS_ENABLE_DEFER_TIMER,
+ pHddCtx->cfg_ini->tdls_enable_defer_time);
}
#define CFG_VALUE_MAX_LEN 256
@@ -6104,23 +6185,6 @@ eCsrPhyMode hdd_cfg_xlate_to_csr_phy_mode( eHddDot11Mode dot11Mode )
}
-static void hdd_set_btc_config(hdd_context_t *pHddCtx)
-{
- hdd_config_t *pConfig = pHddCtx->cfg_ini;
- tSmeBtcConfig btcParams;
- int i;
-
- sme_BtcGetConfig(pHddCtx->hHal, &btcParams);
-
- btcParams.btcExecutionMode = pConfig->btcExecutionMode;
-
- for (i = 0; i < 6; i++) {
- btcParams.mwsCoexConfig[i] = pConfig->mwsCoexConfig[i];
- }
-
- sme_BtcSetConfig(pHddCtx->hHal, &btcParams);
-}
-
static void hdd_set_power_save_config(hdd_context_t *pHddCtx, tSmeConfigParams *smeConfig)
{
hdd_config_t *pConfig = pHddCtx->cfg_ini;
@@ -6425,7 +6489,7 @@ VOS_STATUS hdd_string_to_string_array(char *data, uint8_t *datalist,
/* parse the string */
while (str && ('\0' != *str) && (num < max_entries)) {
field = str;
- while (str && ('\0' != *str) && (separator != *str))
+ while (('\0' != *str) && (separator != *str))
str++;
if ('\0' == *str) {
/* reach the end of string */
@@ -6767,22 +6831,6 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx )
hddLog(LOGE,"Failure: Could not pass on WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD configuration info to CCM");
}
- if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ENABLE_CLOSE_LOOP,
- pConfig->enableCloseLoop, NULL, eANI_BOOLEAN_FALSE)
- ==eHAL_STATUS_FAILURE)
- {
- fStatus = FALSE;
- hddLog(LOGE, "Could not pass on WNI_CFG_ENABLE_CLOSE_LOOP to CCM");
- }
-
- if(ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TX_PWR_CTRL_ENABLE,
- pConfig->enableAutomaticTxPowerControl, NULL, eANI_BOOLEAN_FALSE)
- ==eHAL_STATUS_FAILURE)
- {
- fStatus = FALSE;
- hddLog(LOGE, "Could not pass on WNI_CFG_TX_PWR_CTRL_ENABLE to CCM");
- }
-
if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_SHORT_GI_40MHZ,
pConfig->ShortGI40MhzEnable, NULL, eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
{
@@ -7203,8 +7251,6 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx )
smeConfig->csrConfig.nActiveMinChnTime = pConfig->nActiveMinChnTime;
smeConfig->csrConfig.nPassiveMaxChnTime = pConfig->nPassiveMaxChnTime;
smeConfig->csrConfig.nPassiveMinChnTime = pConfig->nPassiveMinChnTime;
- smeConfig->csrConfig.nActiveMaxChnTimeBtc = pConfig->nActiveMaxChnTimeBtc;
- smeConfig->csrConfig.nActiveMinChnTimeBtc = pConfig->nActiveMinChnTimeBtc;
smeConfig->csrConfig.disableAggWithBtc = pConfig->disableAggWithBtc;
#ifdef WLAN_AP_STA_CONCURRENCY
smeConfig->csrConfig.nActiveMaxChnTimeConc = pConfig->nActiveMaxChnTimeConc;
@@ -7319,8 +7365,6 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx )
hdd_set_power_save_offload_config(pHddCtx);
}
- hdd_set_btc_config(pHddCtx);
-
#ifdef WLAN_FEATURE_VOWIFI_11R
smeConfig->csrConfig.csr11rConfig.IsFTResourceReqSupported = pConfig->fFTResourceReqSupported;
#endif
@@ -7507,6 +7551,8 @@ VOS_STATUS hdd_set_sme_config( hdd_context_t *pHddCtx )
CSR_STA_ROAM_POLICY_DFS_ENABLED;
smeConfig->csrConfig.sta_roam_policy_params.skip_unsafe_channels = 0;
+ smeConfig->snr_monitor_enabled = pHddCtx->cfg_ini->fEnableSNRMonitoring;
+
halStatus = sme_UpdateConfig( pHddCtx->hHal, smeConfig);
if ( !HAL_STATUS_SUCCESS( halStatus ) )
{
@@ -8020,6 +8066,51 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx)
hddLog(LOGE, "Fail to set coex wlan connection parameters");
}
+ if ((config->coex_page_p2p_sta_bt_interval !=0) &&
+ (config->coex_page_p2p_sta_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_page_p2p_sta(
+ config->coex_page_p2p_sta_bt_interval,
+ config->coex_page_p2p_sta_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex page p2p sta bt interval parameters");
+ }
+
+ if ((config->coex_inquiry_sta_bt_interval !=0) &&
+ (config->coex_inquiry_sta_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_inquiry_sta(
+ config->coex_inquiry_sta_bt_interval,
+ config->coex_inquiry_sta_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex inquiry sta bt interval parameters");
+ }
+
+ if ((config->coex_inquiry_sap_bt_interval !=0) &&
+ (config->coex_inquiry_sap_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_inquiry_sap(
+ config->coex_inquiry_sap_bt_interval,
+ config->coex_inquiry_sap_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex inquiry sap bt interval parameters");
+ }
+
+ if ((config->coex_inquiry_p2p_bt_interval !=0) &&
+ (config->coex_inquiry_p2p_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_inquiry_p2p(
+ config->coex_inquiry_p2p_bt_interval,
+ config->coex_inquiry_p2p_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex inquiry p2p bt interval parameters");
+ }
+
+ if ((config->coex_inquiry_p2p_sta_bt_interval !=0) &&
+ (config->coex_inquiry_p2p_sta_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(
+ config->coex_inquiry_p2p_sta_bt_interval,
+ config->coex_inquiry_p2p_sta_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex inquiry p2p sta bt interval parameters");
+ }
+
status = sme_set_btc_dynamic_bt_wlan_coex(
config->dynamic_wlan_bt_coex, config->antenna_isolation);
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 8fc1859549f4..7caa0f04725b 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -480,7 +480,11 @@ wlan_hdd_adhoc_iface_limit[] = {
},
};
-/* AP ( + AP ) combination */
+/*
+ * AP ( + AP) combination or
+ * AP ( + AP + AP + AP) combination if 4-SAP is supported
+ * (WLAN_4SAP_CONCURRENCY)
+ */
static const struct ieee80211_iface_limit
wlan_hdd_ap_iface_limit[] = {
{
@@ -1229,6 +1233,10 @@ static const struct nl80211_vendor_cmd_info wlan_hdd_cfg80211_vendor_events[] =
.vendor_id = QCA_NL80211_VENDOR_ID,
.subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_PEERS_RESULTS
},
+ [QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX] = {
+ .vendor_id = QCA_NL80211_VENDOR_ID,
+ .subcmd = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT
+ },
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
/* EXT TDLS */
[QCA_NL80211_VENDOR_SUBCMD_TDLS_STATE_CHANGE_INDEX] = {
@@ -1424,19 +1432,19 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
return -EINVAL;
if (wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
- hddLog(LOG1, FL("Infra Station mode is supported by driver"));
+ hddLog(LOG1, "Infra Station mode is supported by driver");
fset |= WIFI_FEATURE_INFRA;
}
if (TRUE == hdd_is_5g_supported(pHddCtx)) {
- hddLog(LOG1, FL("INFRA_5G is supported by firmware"));
+ hddLog(LOG1, "INFRA_5G is supported by firmware");
fset |= WIFI_FEATURE_INFRA_5G;
}
#ifdef WLAN_FEATURE_P2P
if ((wiphy->interface_modes & BIT(NL80211_IFTYPE_P2P_CLIENT)) &&
(wiphy->interface_modes & BIT(NL80211_IFTYPE_P2P_GO))) {
- hddLog(LOG1, FL("WiFi-Direct is supported by driver"));
+ hddLog(LOG1, "WiFi-Direct is supported by driver");
fset |= WIFI_FEATURE_P2P;
}
#endif
@@ -1450,20 +1458,20 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_EXTSCAN
if (pHddCtx->cfg_ini->extscan_enabled &&
sme_IsFeatureSupportedByFW(EXTENDED_SCAN)) {
- hddLog(LOG1, FL("EXTScan is supported by firmware"));
+ hddLog(LOG1, "EXTScan is supported by firmware");
fset |= WIFI_FEATURE_EXTSCAN | WIFI_FEATURE_HAL_EPNO;
}
#endif
#ifdef WLAN_FEATURE_NAN
if (sme_IsFeatureSupportedByFW(NAN)) {
- hddLog(LOG1, FL("NAN is supported by firmware"));
+ hddLog(LOG1, "NAN is supported by firmware");
fset |= WIFI_FEATURE_NAN;
}
#endif
if (sme_IsFeatureSupportedByFW(RTT)) {
- hddLog(LOG1, FL("RTT is supported by firmware"));
+ hddLog(LOG1, "RTT is supported by firmware");
fset |= WIFI_FEATURE_D2D_RTT;
fset |= WIFI_FEATURE_D2AP_RTT;
}
@@ -1471,7 +1479,7 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_SCAN_PNO
if (pHddCtx->cfg_ini->configPNOScanSupport &&
sme_IsFeatureSupportedByFW(PNO)) {
- hddLog(LOG1, FL("PNO is supported by firmware"));
+ hddLog(LOG1, "PNO is supported by firmware");
fset |= WIFI_FEATURE_PNO;
}
#endif
@@ -1482,14 +1490,14 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
#ifdef FEATURE_WLAN_TDLS
if ((TRUE == pHddCtx->cfg_ini->fEnableTDLSSupport) &&
sme_IsFeatureSupportedByFW(TDLS)) {
- hddLog(LOG1, FL("TDLS is supported by firmware"));
+ hddLog(LOG1, "TDLS is supported by firmware");
fset |= WIFI_FEATURE_TDLS;
}
if (sme_IsFeatureSupportedByFW(TDLS) &&
(TRUE == pHddCtx->cfg_ini->fEnableTDLSOffChannel) &&
sme_IsFeatureSupportedByFW(TDLS_OFF_CHANNEL)) {
- hddLog(LOG1, FL("TDLS off-channel is supported by firmware"));
+ hddLog(LOG1, "TDLS off-channel is supported by firmware");
fset |= WIFI_FEATURE_TDLS_OFFCHANNEL;
}
#endif
@@ -6181,11 +6189,202 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx,
return;
}
+/**
+ * put_per_peer_ps_info() - put per peer sta's PS info into nl80211 msg
+ * @wifi_peer_info: peer information
+ * @vendor_event: buffer for vendor event
+ *
+ * Return: 0 success
+ */
+static int put_per_peer_ps_info(tSirWifiPeerInfo *wifi_peer_info,
+ struct sk_buff *vendor_event)
+{
+ if (!wifi_peer_info) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Invalid pointer to peer info."));
+ return -EINVAL;
+ }
+
+ if (nla_put_u32(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_STATE,
+ wifi_peer_info->power_saving) ||
+ nla_put(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_MAC_ADDRESS,
+ VOS_MAC_ADDR_SIZE, wifi_peer_info->peerMacAddress)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("QCA_WLAN_VENDOR_ATTR put fail"));
+ return -EINVAL;
+ }
+ return 0;
+}
+
+/**
+ * put_wifi_peer_ps_info() - Put peer sta's power state into nl80211 msg
+ * @data - stats for peer STA
+ * @vendor_event - buffer for vendor event
+ *
+ * Return: 0 success
+ */
+static int put_wifi_peer_ps_info(tSirWifiPeerStat *data,
+ struct sk_buff *vendor_event)
+{
+ uint32_t peer_num, i;
+ tSirWifiPeerInfo *wifi_peer_info;
+ struct nlattr *peer_info, *peers;
+
+ if (!data) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Invalid pointer to Wifi peer stat."));
+ return -EINVAL;
+ }
+
+ peer_num = data->numPeers;
+
+ if (peer_num == 0) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Peer number is zero."));
+ return -EINVAL;
+ }
+
+ if (nla_put_u32(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_NUM,
+ peer_num)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("QCA_WLAN_VENDOR_ATTR put fail"));
+ return -EINVAL;
+ }
+
+ peers = nla_nest_start(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_PEER_PS_CHG);
+ if (peers == NULL) {
+ hddLog(LOGE, FL("nla_nest_start failed"));
+ return -EINVAL;
+ }
+
+ for (i = 0; i < peer_num; i++) {
+ wifi_peer_info = &data->peerInfo[i];
+ peer_info = nla_nest_start(vendor_event, i);
+
+ if (peer_info == NULL) {
+ hddLog(LOGE, FL("nla_nest_start failed"));
+ return -EINVAL;
+ }
+
+ if (put_per_peer_ps_info(wifi_peer_info, vendor_event))
+ return -EINVAL;
+
+ nla_nest_end(vendor_event, peer_info);
+ }
+ nla_nest_end(vendor_event, peers);
+
+ return 0;
+}
+
+/**
+ * put_tx_failure_info() - Put TX failure info
+ * @tx_fail - TX failure info
+ * @skb - buffer for vendor event
+ *
+ * Return: 0 Success
+ */
+static inline int put_tx_failure_info(struct sir_wifi_iface_tx_fail *tx_fail,
+ struct sk_buff *skb)
+{
+ int status = 0;
+
+ if (!tx_fail || !skb)
+ return -EINVAL;
+
+ if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TID,
+ tx_fail->tid) ||
+ nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_NUM_MSDU,
+ tx_fail->msdu_num) ||
+ nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_TX_STATUS,
+ tx_fail->status)) {
+ hddLog(LOGE, FL("QCA_WLAN_VENDOR_ATTR put fail"));
+ status = -EINVAL;
+ }
+ return status;
+}
+
+/**
+ * wlan_hdd_cfg80211_ll_stats_ext_callback() - LL stats callback
+ * @rsp - msg from FW
+ *
+ * An extension of wlan_hdd_cfg80211_link_layer_stats_callback.
+ * It converts monitoring parameters offloaded to NL data and send the same
+ * to the kerbel/upper layer.
+ */
+static void wlan_hdd_cfg80211_ll_stats_ext_callback(tSirLLStatsResults *rsp)
+{
+ hdd_context_t *hdd_ctx;
+ struct sk_buff *skb;
+ int flags = vos_get_gfp_flags();
+ uint32_t param_id, index;
+ hdd_adapter_t *adapter;
+ tSirWifiPeerStat *peer_stats;
+ uint8_t *results;
+ int status, len;
+ v_CONTEXT_t vos_context = vos_get_global_context(0, NULL);
+
+ ENTER();
+
+ if (!rsp) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid result."));
+ return;
+ }
+
+ hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_context);
+ status = wlan_hdd_validate_context(hdd_ctx);
+ if (0 != status)
+ return;
+
+ adapter = hdd_get_adapter_by_vdev(hdd_ctx, rsp->ifaceId);
+ if (NULL == adapter) {
+ hddLog(LOGE, FL("vdev_id %d does not exist with host"),
+ rsp->ifaceId);
+ return;
+ }
+
+ index = QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT_INDEX;
+ len = LL_STATS_EVENT_BUF_SIZE + NLMSG_HDRLEN;
+ skb = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, NULL, len,
+ index, flags);
+ if (!skb) {
+ hddLog(LOGE, FL("cfg80211_vendor_event_alloc failed"));
+ return;
+ }
+
+ results = rsp->results;
+ param_id = rsp->paramId;
+ hddLog(LOG1,
+ FL("LL_STATS RESP paramID = 0x%x, ifaceId = %u, result = %p"),
+ rsp->paramId, rsp->ifaceId, rsp->results);
+ if (param_id & WMI_LL_STATS_EXT_PS_CHG) {
+ peer_stats = (tSirWifiPeerStat *)results;
+ status = put_wifi_peer_ps_info(peer_stats, skb);
+ } else if (param_id & WMI_LL_STATS_EXT_TX_FAIL) {
+ struct sir_wifi_iface_tx_fail *tx_fail;
+
+ tx_fail = (struct sir_wifi_iface_tx_fail *)results;
+ status = put_tx_failure_info(tx_fail, skb);
+ } else {
+ hddLog(LOGE, FL("Unknown link layer stats"));
+ status = -1;
+ }
+
+ if (status == 0)
+ cfg80211_vendor_event(skb, flags);
+ else
+ kfree_skb(skb);
+ EXIT();
+}
void wlan_hdd_cfg80211_link_layer_stats_init(hdd_context_t *pHddCtx)
{
sme_SetLinkLayerStatsIndCB(pHddCtx->hHal,
wlan_hdd_cfg80211_link_layer_stats_callback);
+ sme_set_ll_ext_cb(pHddCtx->hHal,
+ wlan_hdd_cfg80211_ll_stats_ext_callback);
}
@@ -6339,7 +6538,7 @@ static int __wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
return -EINVAL;
}
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
status = wlan_hdd_validate_context(pHddCtx);
if (0 != status)
@@ -6388,12 +6587,6 @@ static int __wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
LinkLayerStatsGetReq.staId = pAdapter->sessionId;
- hddLog(VOS_TRACE_LEVEL_INFO,
- "LL_STATS_GET reqId = %d, StaId = %d, paramIdMask = %d",
- LinkLayerStatsGetReq.reqId, LinkLayerStatsGetReq.staId,
- LinkLayerStatsGetReq.paramIdMask);
-
-
spin_lock(&hdd_context_lock);
context = &pHddCtx->ll_stats_context;
context->request_id = LinkLayerStatsGetReq.reqId;
@@ -7846,14 +8039,20 @@ static void wlan_hdd_set_acs_ch_range(tsap_Config_t *sap_cfg, bool ht_enabled,
sap_cfg->acs_cfg.hw_mode = eCSR_DOT11_MODE_11b;
sap_cfg->acs_cfg.start_ch = rfChannels[RF_CHAN_1].channelNum;
sap_cfg->acs_cfg.end_ch = rfChannels[RF_CHAN_14].channelNum;
+ sap_cfg->target_band = eCSR_BAND_24;
} else if (sap_cfg->acs_cfg.hw_mode == QCA_ACS_MODE_IEEE80211G) {
sap_cfg->acs_cfg.hw_mode = eCSR_DOT11_MODE_11g;
sap_cfg->acs_cfg.start_ch = rfChannels[RF_CHAN_1].channelNum;
sap_cfg->acs_cfg.end_ch = rfChannels[RF_CHAN_13].channelNum;
+ sap_cfg->target_band = eCSR_BAND_24;
} else if (sap_cfg->acs_cfg.hw_mode == QCA_ACS_MODE_IEEE80211A) {
sap_cfg->acs_cfg.hw_mode = eCSR_DOT11_MODE_11a;
sap_cfg->acs_cfg.start_ch = rfChannels[RF_CHAN_36].channelNum;
sap_cfg->acs_cfg.end_ch = rfChannels[RF_CHAN_165].channelNum;
+ sap_cfg->target_band = eCSR_BAND_5G;
+ } else {
+ hddLog(LOG1, FL("hw_mode %d"), sap_cfg->acs_cfg.hw_mode);
+ sap_cfg->target_band = eCSR_BAND_5G;
}
if (ht_enabled)
sap_cfg->acs_cfg.hw_mode = eCSR_DOT11_MODE_11n;
@@ -7948,6 +8147,32 @@ static int wlan_hdd_cfg80211_start_acs(hdd_adapter_t *adapter)
return 0;
}
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+/**
+ * wlan_hdd_set_mcc_to_scc_switch() - set mcc to scc switch mode from ini
+ * @adapter: hdd_adapter_t ptr of the interface
+ *
+ * This function updates ini WlanMccToSccSwitchMode value to adapter
+ * context. The value controls the MCC to SCC switch behavior.
+ *
+ * Return: void
+ */
+static void
+wlan_hdd_set_mcc_to_scc_switch(hdd_adapter_t *adapter)
+{
+ hdd_context_t * hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+ hdd_config_t *cfg_ini = hdd_ctx->cfg_ini;
+ tsap_Config_t *sap_config;
+
+ sap_config = &adapter->sessionCtx.ap.sapConfig;
+ sap_config->cc_switch_mode = cfg_ini->WlanMccToSccSwitchMode;
+}
+#else
+static void
+wlan_hdd_set_mcc_to_scc_switch(hdd_adapter_t *adapter)
+{}
+#endif
+
/**
* __wlan_hdd_cfg80211_do_acs : CFG80211 handler fucntion for DO_ACS Vendor CMD
* @wiphy: Linux wiphy struct pointer
@@ -8090,6 +8315,7 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
sap_config->acs_cfg.ch_list_count);
}
}
+ wlan_hdd_set_mcc_to_scc_switch(adapter);
wlan_hdd_set_acs_ch_range(sap_config, ht_enabled, vht_enabled);
/* ACS override for android */
@@ -10955,6 +11181,40 @@ static enum sta_roam_policy_dfs_mode wlan_hdd_get_sta_roam_dfs_mode(
return CSR_STA_ROAM_POLICY_NONE;
}
}
+/*
+ * hdd_get_sap_operating_channel: Get current operating channel
+ * for sap.
+ * @hdd_ctx: hdd context
+ *
+ * Return : Corresponding band for SAP operating channel
+ */
+uint8_t hdd_get_sap_operating_channel(hdd_context_t *hdd_ctx) {
+ hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL;
+ VOS_STATUS status;
+ hdd_adapter_t *adapter;
+ uint8_t operating_channel = 0;
+ uint8_t sap_operating_band = 0;
+ status = hdd_get_front_adapter(hdd_ctx, &adapter_node);
+ while (NULL != adapter_node && VOS_STATUS_SUCCESS == status) {
+ adapter = adapter_node->pAdapter;
+
+ if (!(adapter && (WLAN_HDD_SOFTAP == adapter->device_mode))) {
+ status = hdd_get_next_adapter(hdd_ctx, adapter_node,
+ &next);
+ adapter_node = next;
+ continue;
+ }
+ operating_channel = adapter->sessionCtx.ap.operatingChannel;
+ if (IS_24G_CH(operating_channel))
+ sap_operating_band = eCSR_BAND_24;
+ else if(IS_5G_CH(operating_channel))
+ sap_operating_band = eCSR_BAND_5G;
+ else sap_operating_band = eCSR_BAND_ALL;
+ status = hdd_get_next_adapter(hdd_ctx, adapter_node,
+ &next);
+ }
+ return sap_operating_band;
+}
static const struct nla_policy
wlan_hdd_set_sta_roam_config_policy[
@@ -10995,6 +11255,7 @@ __wlan_hdd_cfg80211_sta_roam_policy(struct wiphy *wiphy,
enum dfs_mode mode = DFS_MODE_NONE;
bool skip_unsafe_channels = false;
eHalStatus status;
+ uint8_t sap_operating_band = 0;
ENTER();
@@ -11025,9 +11286,10 @@ __wlan_hdd_cfg80211_sta_roam_policy(struct wiphy *wiphy,
if (tb[QCA_WLAN_VENDOR_ATTR_STA_SKIP_UNSAFE_CHANNEL])
skip_unsafe_channels = nla_get_u8(
tb[QCA_WLAN_VENDOR_ATTR_STA_SKIP_UNSAFE_CHANNEL]);
-
+ sap_operating_band = hdd_get_sap_operating_channel(hdd_ctx);
status = sme_update_sta_roam_policy(hdd_ctx->hHal, sta_roam_dfs_mode,
- skip_unsafe_channels, adapter->sessionId);
+ skip_unsafe_channels, adapter->sessionId,
+ sap_operating_band);
if (!HAL_STATUS_SUCCESS(status)) {
hddLog(LOGE,
@@ -14206,6 +14468,35 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
acl_entry++;
}
}
+ if (!pHddCtx->cfg_ini->force_sap_acs) {
+ pIe = wlan_hdd_cfg80211_get_ie_ptr(&pMgmt_frame->u.beacon.variable[0],
+ pBeacon->head_len, WLAN_EID_SUPP_RATES);
+ if (pIe != NULL) {
+ pIe++;
+ pConfig->supported_rates.numRates = pIe[0];
+ pIe++;
+ for (i = 0; i < pConfig->supported_rates.numRates; i++)
+ if (pIe[i]) {
+ pConfig->supported_rates.rate[i]= pIe[i];
+ hddLog(LOG1, FL("Configured Supported rate is %2x"),
+ pConfig->supported_rates.rate[i]);
+ }
+ }
+ pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, pBeacon->tail_len,
+ WLAN_EID_EXT_SUPP_RATES);
+ if (pIe != NULL) {
+ pIe++;
+ pConfig->extended_rates.numRates = pIe[0];
+ pIe++;
+ for (i = 0; i < pConfig->extended_rates.numRates; i++)
+ if (pIe[i]) {
+ pConfig->extended_rates.rate[i]= pIe[i];
+ hddLog(LOG1,
+ FL("Configured extended Supported rate is %2x"),
+ pConfig->extended_rates.rate[i]);
+ }
+ }
+ }
pIe = wlan_hdd_cfg80211_get_ie_ptr(&pMgmt_frame->u.beacon.variable[0],
pBeacon->head_len, WLAN_EID_SUPP_RATES);
@@ -14680,6 +14971,9 @@ static int __wlan_hdd_cfg80211_stop_ap (struct wiphy *wiphy,
hdd_device_mode_to_string(pAdapter->device_mode),
pAdapter->device_mode);
+ if (WLAN_HDD_SOFTAP == pAdapter->device_mode)
+ hdd_wlan_green_ap_stop_bss(pHddCtx);
+
status = hdd_get_front_adapter (pHddCtx, &pAdapterNode);
while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == status) {
staAdapter = pAdapterNode->pAdapter;
@@ -14903,6 +15197,19 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
}
}
+ if (WLAN_HDD_SOFTAP == pAdapter->device_mode)
+ hdd_wlan_green_ap_start_bss(pHddCtx);
+
+ if (pAdapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_adapter_t *pP2pAdapter = NULL;
+ pP2pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("cancel active p2p device ROC before GO starting"));
+ wlan_hdd_cancel_existing_remain_on_channel(pP2pAdapter);
+ }
+ }
+
if ((pAdapter->device_mode == WLAN_HDD_SOFTAP)
|| (pAdapter->device_mode == WLAN_HDD_P2P_GO)
)
@@ -15744,16 +16051,20 @@ static int wlan_hdd_tdls_add_station(struct wiphy *wiphy,
pAdapter->sessionId, mac, StaParams);
}
- rc = wait_for_completion_timeout(&pAdapter->tdls_add_station_comp,
+ rc = wait_for_completion_timeout(&pAdapter->tdls_add_station_comp,
msecs_to_jiffies(WAIT_TIME_TDLS_ADD_STA));
+ mutex_lock(&pHddCtx->tdls_lock);
+ pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter, mac, FALSE);
- if (!rc) {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "%s: timeout waiting for tdls add station indication",
- __func__);
- return -EPERM;
+ if (rc <= 0 || (pTdlsPeer &&
+ (pTdlsPeer->link_status == eTDLS_LINK_TEARING))) {
+ hddLog(LOGE, FL("timeout waiting for tdls add station indication %ld peer link status %u"),
+ ret, pTdlsPeer->link_status);
+ mutex_unlock(&pHddCtx->tdls_lock);
+ goto error;
}
+ mutex_unlock(&pHddCtx->tdls_lock);
if ( eHAL_STATUS_SUCCESS != pAdapter->tdlsAddStaStatus)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -16904,7 +17215,14 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter,
qie_age->oui_2 = QCOM_OUI2;
qie_age->oui_3 = QCOM_OUI3;
qie_age->type = QCOM_VENDOR_IE_AGE_TYPE;
- qie_age->age = vos_timer_get_system_time() - bss_desc->nReceivedTime;
+ /*
+ * Lowi expects the timestamp of bss in units of 1/10 ms. In driver all
+ * bss related timestamp is in units of ms. Due to this when scan results
+ * are sent to lowi the scan age is high.To address this, send age in units
+ * of 1/10 ms.
+ */
+ qie_age->age = (vos_timer_get_system_time() -
+ bss_desc->nReceivedTime)/10;
qie_age->tsf_delta = bss_desc->tsf_delta;
#endif
@@ -16970,7 +17288,7 @@ wlan_hdd_cfg80211_inform_bss_frame( hdd_adapter_t *pAdapter,
/* Supplicant takes the signal strength in terms of mBm(100*dBm) */
rssi = (VOS_MIN(rssi, 0)) * 100;
- hddLog(LOG1, FL("BSSID: "MAC_ADDRESS_STR" Channel:%d RSSI:%d"),
+ hddLog(LOG1, "BSSID: "MAC_ADDRESS_STR" Channel:%d RSSI:%d",
MAC_ADDR_ARRAY(mgmt->bssid),
vos_freq_to_chan(chan->center_freq),(int)(rssi/100));
@@ -17013,12 +17331,17 @@ wlan_hdd_cfg80211_update_bss_db(hdd_adapter_t *pAdapter,
return bss;
}
-/*
- * FUNCTION: wlan_hdd_cfg80211_update_bss
+/**
+ * wlan_hdd_cfg80211_update_bss() - update scan result to cfg80211
+ * @wiphy: wiphy context
+ * @pAdapter: hdd_adapter_t context
+ *
+ * This function will update the cached scan result to cfg80211 module
+ *
+ * Return: 0 for updating successfully
+ * other value for error
*/
-static int wlan_hdd_cfg80211_update_bss( struct wiphy *wiphy,
- hdd_adapter_t *pAdapter
- )
+int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy, hdd_adapter_t *pAdapter)
{
tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
tCsrScanResultInfo *pScanResult;
@@ -17073,7 +17396,7 @@ static int wlan_hdd_cfg80211_update_bss( struct wiphy *wiphy,
* fg80211_inform_bss_frame.
* */
- if(is_p2p_scan && (pScanResult->ssId.ssId != NULL) &&
+ if (is_p2p_scan && (pScanResult->ssId.length >= 7) &&
!vos_mem_compare( pScanResult->ssId.ssId, "DIRECT-", 7) )
{
pScanResult = sme_ScanResultGetNext(hHal, pResult);
@@ -17272,6 +17595,42 @@ VOS_STATUS wlan_hdd_cfg80211_roam_metrics_handover(hdd_adapter_t * pAdapter,
}
#endif
+
+/**
+ * wlan_hdd_cfg80211_validate_scan_req - validate scan request
+ * @scan_req: scan request to be checked
+ *
+ * Return: true or false
+ */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+static inline bool wlan_hdd_cfg80211_validate_scan_req(struct
+ cfg80211_scan_request
+ *scan_req)
+{
+ if (!scan_req || !scan_req->wiphy) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "Invalid scan request");
+ return false;
+ }
+ if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "Load/Unload in progress");
+ return false;
+ }
+ return true;
+}
+#else
+static inline bool wlan_hdd_cfg80211_validate_scan_req(struct
+ cfg80211_scan_request
+ *scan_req)
+{
+ if (!scan_req || !scan_req->wiphy) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, "Invalid scan request");
+ return false;
+ }
+ return true;
+}
+#endif
+
+
/*
* FUNCTION: hdd_cfg80211_scan_done_callback
* scanning callback function, called after finishing scan
@@ -17412,9 +17771,17 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle,
/* Scan is no longer pending */
pScanInfo->mScanPending = VOS_FALSE;
- if (!req || req->wiphy == NULL)
+ if (!wlan_hdd_cfg80211_validate_scan_req(req))
{
- hddLog(VOS_TRACE_LEVEL_ERROR, "request is became NULL");
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("interface state %s"),
+ iface_down ? "up" : "down");
+#endif
+ if (pAdapter->dev)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("device name %s"),
+ pAdapter->dev->name);
+ }
complete(&pScanInfo->abortscan_event_var);
goto allow_suspend;
}
@@ -17564,6 +17931,66 @@ bool hdd_isConnectionInProgress(hdd_context_t *pHddCtx)
return false;
}
+#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
+/**
+ * wlan_hdd_sap_skip_scan_check() - The function will check OBSS
+ * scan skip or not for SAP.
+ * @hdd_ctx: pointer to hdd context.
+ * @request: pointer to scan request.
+ *
+ * This function will check the scan request's chan list against the
+ * previous ACS scan chan list. If all the chan are covered by
+ * previous ACS scan, we can skip the scan and return scan complete
+ * to save the SAP starting time.
+ *
+ * Return: true to skip the scan,
+ * false to continue the scan
+ */
+static bool wlan_hdd_sap_skip_scan_check(hdd_context_t *hdd_ctx,
+ struct cfg80211_scan_request *request)
+{
+ int i, j;
+ bool skip;
+
+ hddLog(LOG1, FL("HDD_ACS_SKIP_STATUS = %d"),
+ hdd_ctx->skip_acs_scan_status);
+ if (hdd_ctx->skip_acs_scan_status != eSAP_SKIP_ACS_SCAN)
+ return false;
+ spin_lock(&hdd_ctx->acs_skip_lock);
+ if (hdd_ctx->last_acs_channel_list == NULL ||
+ hdd_ctx->num_of_channels == 0 ||
+ request->n_channels == 0) {
+ spin_unlock(&hdd_ctx->acs_skip_lock);
+ return false;
+ }
+ skip = true;
+ for (i = 0; i < request->n_channels ; i++ ) {
+ bool find = false;
+ for (j = 0; j < hdd_ctx->num_of_channels; j++) {
+ if (hdd_ctx->last_acs_channel_list[j] ==
+ request->channels[i]->hw_value) {
+ find = true;
+ break;
+ }
+ }
+ if (!find) {
+ skip = false;
+ hddLog(LOG1, FL("Chan %d isn't in ACS chan list"),
+ request->channels[i]->hw_value);
+ break;
+ }
+ }
+ spin_unlock(&hdd_ctx->acs_skip_lock);
+ return skip;
+}
+#else
+static bool wlan_hdd_sap_skip_scan_check(hdd_context_t *hdd_ctx,
+ struct cfg80211_scan_request *request)
+{
+ return false;
+}
+#endif
+
static void wlan_hdd_cfg80211_scan_block_cb(struct work_struct *work)
{
hdd_adapter_t *adapter = container_of(work,
@@ -17655,6 +18082,9 @@ int __wlan_hdd_cfg80211_scan( struct wiphy *wiphy,
* Thus we return null scan result. If we return scan failure
* hostapd fails secondary AP startup.
*/
+ hddLog(LOGE,
+ FL("##In DFS Master mode. Scan aborted"));
+
pAdapter->request = request;
vos_init_work(&pAdapter->scan_block_work,
@@ -17728,6 +18158,16 @@ int __wlan_hdd_cfg80211_scan( struct wiphy *wiphy,
hddLog(LOGE, FL("Scan not allowed"));
return -EBUSY;
}
+ /* Check whether SAP scan can be skipped or not */
+ if (pAdapter->device_mode == WLAN_HDD_SOFTAP &&
+ wlan_hdd_sap_skip_scan_check(pHddCtx, request)) {
+ hddLog(LOGE, FL("sap scan skipped"));
+ pAdapter->request = request;
+ vos_init_work(&pAdapter->scan_block_work,
+ wlan_hdd_cfg80211_scan_block_cb);
+ schedule_work(&pAdapter->scan_block_work);
+ return 0;
+ }
vos_mem_zero( &scanRequest, sizeof(scanRequest));
@@ -20493,6 +20933,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
if (true == pHddStaCtx->hdd_ReassocScenario) {
hddLog(LOG1,
FL("Roaming is in progress, cannot continue with this request"));
+ sinfo->signal = pAdapter->rssi;
return 0;
}
@@ -20948,10 +21389,10 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy,
pAdapter->hdd_stats.summary_stat.tx_frm_cnt[3];
sinfo->tx_retries =
- pAdapter->hdd_stats.summary_stat.retry_cnt[0] +
- pAdapter->hdd_stats.summary_stat.retry_cnt[1] +
- pAdapter->hdd_stats.summary_stat.retry_cnt[2] +
- pAdapter->hdd_stats.summary_stat.retry_cnt[3];
+ pAdapter->hdd_stats.summary_stat.multiple_retry_cnt[0] +
+ pAdapter->hdd_stats.summary_stat.multiple_retry_cnt[1] +
+ pAdapter->hdd_stats.summary_stat.multiple_retry_cnt[2] +
+ pAdapter->hdd_stats.summary_stat.multiple_retry_cnt[3];
sinfo->tx_failed =
pAdapter->hdd_stats.summary_stat.fail_cnt[0] +
@@ -21450,7 +21891,9 @@ static int __wlan_hdd_cfg80211_add_station(struct wiphy *wiphy,
{
int status = -EPERM;
#ifdef FEATURE_WLAN_TDLS
+#ifdef TRACE_RECORD
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
+#endif
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
u32 mask, set;
@@ -21806,9 +22249,18 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext,
ret = wlan_hdd_cfg80211_update_bss(pHddCtx->wiphy, pAdapter);
- if (0 > ret)
+ if (0 > ret) {
hddLog(VOS_TRACE_LEVEL_INFO, "%s: NO SCAN result", __func__);
+ } else {
+ /*
+ * Acquire wakelock to handle the case where APP's tries to suspend
+ * immediately after the driver gets connect request(i.e after pno)
+ * from supplicant, this result in app's is suspending and not able
+ * to process the connect request to AP
+ */
+ hdd_prevent_suspend_timeout(1000, WIFI_POWER_EVENT_WAKELOCK_SCAN);
+ }
cfg80211_sched_scan_results(pHddCtx->wiphy);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: cfg80211 scan result database updated", __func__);
@@ -22936,7 +23388,19 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy,
rc = wait_for_completion_timeout(
&pAdapter->tdls_link_establish_req_comp,
msecs_to_jiffies(WAIT_TIME_TDLS_LINK_ESTABLISH_REQ));
- if (!rc) {
+ mutex_lock(&pHddCtx->tdls_lock);
+ pTdlsPeer = wlan_hdd_tdls_find_peer(pAdapter,
+ peer, FALSE);
+ if (!pTdlsPeer) {
+ mutex_unlock(&pHddCtx->tdls_lock);
+ hddLog(LOGE, FL(MAC_ADDRESS_STR" (oper %d) peer got freed in other context. ignored"),
+ MAC_ADDR_ARRAY(peer), (int)oper);
+ return -EINVAL;
+ }
+ mutex_unlock(&pHddCtx->tdls_lock);
+
+ if ((rc <= 0) || (pTdlsPeer->link_status ==
+ eTDLS_LINK_TEARING)) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Link Establish Request timed out", __func__);
return -EINVAL;
@@ -23766,6 +24230,135 @@ nla_put_failure:
#endif
#endif /* CONFIG_NL80211_TESTMODE */
+/**
+ * wlan_hdd_chan_info_cb() - channel info callback
+ * @chan_info: struct scan_chan_info
+ *
+ * Store channel info into HDD context
+ *
+ * Return: None.
+ */
+static void wlan_hdd_chan_info_cb(struct scan_chan_info *info)
+{
+ v_CONTEXT_t vos_context = vos_get_global_context(0, NULL);
+ hdd_context_t *hdd_ctx;
+ struct hdd_scan_chan_info *chan;
+ uint8_t idx = 0;
+
+ ENTER();
+
+ hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_context);
+ if (NULL == hdd_ctx) {
+ hddLog(LOGE, FL("hdd_ctx is invalid"));
+ EXIT();
+ return;
+ }
+
+ if (NULL == hdd_ctx->chan_info) {
+ hddLog(LOGE, FL("chan_info is NULL"));
+ EXIT();
+ return;
+ }
+
+ mutex_lock(&hdd_ctx->chan_info_lock);
+ chan = hdd_ctx->chan_info;
+ for (; idx < SIR_MAX_NUM_CHANNELS; idx++) {
+ if (chan[idx].freq == info->freq) {
+ if (info->cmd_flag == WMI_CHAN_INFO_START_RESP) {
+ chan[idx].freq = info->freq;
+ chan[idx].cmd_flag = info->cmd_flag;
+ chan[idx].noise_floor = info->noise_floor;
+ chan[idx].cycle_count = info->cycle_count;
+ chan[idx].rx_clear_count = info->rx_clear_count;
+ chan[idx].tx_frame_count = info->tx_frame_count;
+ chan[idx].clock_freq = info->clock_freq;
+ break;
+ } else if (info->cmd_flag == WMI_CHAN_INFO_END_RESP) {
+ chan[idx].delta_cycle_count =
+ info->cycle_count -
+ chan[idx].cycle_count;
+
+ chan[idx].delta_rx_clear_count =
+ info->rx_clear_count -
+ chan[idx].rx_clear_count;
+
+ chan[idx].delta_tx_frame_count =
+ info->tx_frame_count -
+ chan[idx].tx_frame_count;
+
+ chan[idx].noise_floor = info->noise_floor;
+ chan[idx].cmd_flag = info->cmd_flag;
+ break;
+ } else {
+ hddLog(LOGE, FL("cmd flag is invalid: %d"),
+ info->cmd_flag);
+ break;
+ }
+ }
+ }
+ mutex_unlock(&hdd_ctx->chan_info_lock);
+
+ EXIT();
+}
+
+/**
+ * wlan_hdd_init_chan_info() - init chan info in hdd context
+ * @hdd_ctx: HDD context pointer
+ *
+ * Return: none
+ */
+void wlan_hdd_init_chan_info(hdd_context_t *hdd_ctx)
+{
+ uint8_t num_2g, num_5g, index = 0;
+
+ if (!hdd_ctx->cfg_ini->fEnableSNRMonitoring)
+ return;
+
+ hdd_ctx->chan_info =
+ vos_mem_malloc(sizeof(struct scan_chan_info)
+ * NUM_RF_CHANNELS);
+ if (NULL == hdd_ctx->chan_info) {
+ hddLog(LOGE, FL("Failed to malloc for chan info"));
+ } else {
+ mutex_init(&hdd_ctx->chan_info_lock);
+ vos_mem_zero(hdd_ctx->chan_info,
+ sizeof(struct scan_chan_info) * NUM_RF_CHANNELS);
+
+ num_2g = ARRAY_SIZE(hdd_channels_2_4_GHZ);
+ for (; index < num_2g; index++) {
+ hdd_ctx->chan_info[index].freq =
+ hdd_channels_2_4_GHZ[index].center_freq;
+ }
+
+ num_5g = ARRAY_SIZE(hdd_channels_5_GHZ);
+ for (; (index - num_2g) < num_5g; index++) {
+ if (vos_is_dsrc_channel(
+ hdd_channels_5_GHZ[index - num_2g].center_freq))
+ continue;
+ hdd_ctx->chan_info[index].freq =
+ hdd_channels_5_GHZ[index - num_2g].center_freq;
+ }
+ sme_set_chan_info_callback(
+ hdd_ctx->hHal,
+ &wlan_hdd_chan_info_cb
+ );
+ }
+}
+
+/**
+ * wlan_hdd_deinit_chan_info() - deinit chan info in hdd context
+ * @chan_info: channel information
+ *
+ * Return: none
+ */
+void wlan_hdd_deinit_chan_info(hdd_context_t *hdd_ctx)
+{
+ if (hdd_ctx->chan_info) {
+ vos_mem_free(hdd_ctx->chan_info);
+ hdd_ctx->chan_info = NULL;
+ }
+}
+
static int __wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy,
struct net_device *dev,
int idx, struct survey_info *survey)
@@ -23774,17 +24367,27 @@ static int __wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy,
hdd_context_t *pHddCtx;
hdd_station_ctx_t *pHddStaCtx;
tHalHandle halHandle;
- v_U32_t channel = 0, freq = 0; /* Initialization Required */
- v_S7_t snr,rssi;
- int status, i, j, filled = 0;
+ v_U32_t channel = 0, freq = 0, opfreq; /* Initialization Required */
+ int status, i, j = 0;
+ bool filled = false;
ENTER();
+ hddLog(LOG1, FL("dump survey index:%d"), idx);
+ if (idx > NUM_RF_CHANNELS - 1) {
+ return -EINVAL;
+ }
+
pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
status = wlan_hdd_validate_context(pHddCtx);
if (0 != status)
return status;
+ if (NULL == pHddCtx->chan_info) {
+ hddLog(LOGE, FL("chan_info is NULL"));
+ return -EINVAL;
+ }
+
if (VOS_FTM_MODE == hdd_get_conparam()) {
hddLog(LOGE, FL("Command not allowed in FTM mode"));
return -EINVAL;
@@ -23793,18 +24396,8 @@ static int __wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy,
pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
if (0 == pHddCtx->cfg_ini->fEnableSNRMonitoring ||
- 0 != pAdapter->survey_idx ||
eConnectionState_Associated != pHddStaCtx->conn_info.connState)
{
- /* The survey dump ops when implemented completely is expected to
- * return a survey of all channels and the ops is called by the
- * kernel with incremental values of the argument 'idx' till it
- * returns -ENONET. But we can only support the survey for the
- * operating channel for now. survey_idx is used to track
- * that the ops is called only once and then return -ENONET for
- * the next iteration
- */
- pAdapter->survey_idx = 0;
return -ENONET;
}
@@ -23817,46 +24410,78 @@ static int __wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy,
halHandle = WLAN_HDD_GET_HAL_CTX(pAdapter);
- wlan_hdd_get_snr(pAdapter, &snr);
- wlan_hdd_get_rssi(pAdapter, &rssi);
-
MTRACE(vos_trace(VOS_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_DUMP_SURVEY,
pAdapter->sessionId, pAdapter->device_mode));
sme_GetOperationChannel(halHandle, &channel, pAdapter->sessionId);
- hdd_wlan_get_freq(channel, &freq);
+ hdd_wlan_get_freq(channel, &opfreq);
+ mutex_lock(&pHddCtx->chan_info_lock);
+ freq = pHddCtx->chan_info[idx].freq;
- for (i = 0; i < IEEE80211_NUM_BANDS; i++)
+ for (i = 0; i < IEEE80211_NUM_BANDS && !filled; i++)
{
if (NULL == wiphy->bands[i])
continue;
- for (j = 0; j < wiphy->bands[i]->n_channels; j++)
+ for (j = 0; j < wiphy->bands[i]->n_channels && !filled; j++)
{
struct ieee80211_supported_band *band = wiphy->bands[i];
if (band->channels[j].center_freq == (v_U16_t)freq)
{
survey->channel = &band->channels[j];
- /* The Rx BDs contain SNR values in dB for the received frames
- * while the supplicant expects noise. So we calculate and
- * return the value of noise (dBm)
- * SNR (dB) = RSSI (dBm) - NOISE (dBm)
- */
- survey->noise = rssi - snr;
+ survey->noise = pHddCtx->chan_info[idx].noise_floor;
survey->filled = SURVEY_INFO_NOISE_DBM;
- filled = 1;
+ if (pHddCtx->chan_info[idx].clock_freq > 0) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
+ /**
+ * time = cycle_count * cycle
+ * cycle = 1 / clock_freq
+ * Since the unit of clock_freq reported from FW is MHZ,
+ * and we want to calculate time in ms level, the result is
+ * time = cycle / (clock_freq * 1000)
+ */
+
+ survey->time =
+ pHddCtx->chan_info[idx].delta_cycle_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+ survey->time_busy =
+ pHddCtx->chan_info[idx].delta_rx_clear_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+ survey->time_tx =
+ pHddCtx->chan_info[idx].delta_tx_frame_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+
+ survey->filled |= SURVEY_INFO_TIME |
+ SURVEY_INFO_TIME_BUSY |
+ SURVEY_INFO_TIME_TX;
+#else
+ survey->channel_time =
+ pHddCtx->chan_info[idx].delta_cycle_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+ survey->channel_time_busy =
+ pHddCtx->chan_info[idx].delta_rx_clear_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+ survey->channel_time_tx =
+ pHddCtx->chan_info[idx].delta_tx_frame_count /
+ (pHddCtx->chan_info[idx].clock_freq * 1000);
+
+ survey->filled |= SURVEY_INFO_CHANNEL_TIME |
+ SURVEY_INFO_CHANNEL_TIME_BUSY |
+ SURVEY_INFO_CHANNEL_TIME_TX;
+#endif
+ }
+ if (opfreq == freq)
+ survey->filled |= SURVEY_INFO_IN_USE;
+
+ filled = true;
}
}
}
+ mutex_unlock(&pHddCtx->chan_info_lock);
- if (filled)
- pAdapter->survey_idx = 1;
- else
- {
- pAdapter->survey_idx = 0;
+ if (!filled)
return -ENONET;
- }
EXIT();
return 0;
}
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 1e720d4a2b05..eadb26414bed 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -52,7 +52,6 @@
#include <vos_sched.h>
#include <macInitApi.h>
#include <wlan_qct_sys.h>
-#include <wlan_btc_svc.h>
#include <wlan_nlink_common.h>
#include <wlan_hdd_main.h>
#include <wlan_hdd_assoc.h>
@@ -100,6 +99,8 @@
#endif
#include "ol_fw.h"
+#include "wlan_hdd_host_offload.h"
+
/* Time in msec.
* Time includes 60sec timeout of request_firmware for various binaries
* (OTP, BDWLAN, QWLAN) and other cleanup and re-init sequence
@@ -599,6 +600,13 @@ static int __wlan_hdd_ipv6_changed(struct notifier_block *nb,
if (adapter->device_mode == WLAN_HDD_INFRA_STATION ||
adapter->device_mode == WLAN_HDD_P2P_CLIENT ||
adapter->device_mode == WLAN_HDD_NDI) {
+
+ if (eConnectionState_Associated ==
+ WLAN_HDD_GET_STATION_CTX_PTR
+ (adapter)->conn_info.connState)
+ sme_dhcp_done_ind(hdd_ctx->hHal,
+ adapter->sessionId);
+
if (hdd_ctx->cfg_ini->nEnableSuspend ==
WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER &&
hdd_ctx->ns_offload_enable)
@@ -1181,6 +1189,12 @@ static int __wlan_hdd_ipv4_changed(struct notifier_block *nb,
adapter->device_mode == WLAN_HDD_NDI))
return NOTIFY_DONE;
+ if (eConnectionState_Associated ==
+ WLAN_HDD_GET_STATION_CTX_PTR(
+ adapter)->conn_info.connState)
+ sme_dhcp_done_ind(hdd_ctx->hHal,
+ adapter->sessionId);
+
if ((hdd_ctx->cfg_ini->nEnableSuspend !=
WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER) ||
(!hdd_ctx->cfg_ini->fhostArpOffload)) {
@@ -2011,6 +2025,11 @@ VOS_STATUS hdd_wlan_shutdown(void)
hddLog(VOS_TRACE_LEVEL_INFO,
FL("Invoking packetdump deregistration API"));
wlan_deregister_txrx_packetdump();
+
+ if (VOS_TIMER_STATE_RUNNING ==
+ vos_timer_getCurrentState(&pHddCtx->tdls_source_timer))
+ vos_timer_stop(&pHddCtx->tdls_source_timer);
+
#ifdef FEATURE_BUS_BANDWIDTH
if (VOS_TIMER_STATE_RUNNING ==
vos_timer_getCurrentState(&pHddCtx->bus_bw_timer))
@@ -2316,6 +2335,9 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
/* Pass FW version to HIF layer */
hif_set_fw_info(hif_sc, pHddCtx->target_fw_version);
+ wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
+ WLAN_SVC_FW_CRASHED_IND, NULL, 0);
+
/* Restart all adapters */
hdd_start_all_adapters(pHddCtx);
@@ -2362,9 +2384,6 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
pHddCtx->btCoexModeSet = false;
hdd_register_mcast_bcast_filter(pHddCtx);
- wlan_hdd_send_svc_nlink_msg(pHddCtx->radio_index,
- WLAN_SVC_FW_CRASHED_IND, NULL, 0);
-
/* Allow the phone to go to sleep */
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_REINIT);
/* register for riva power on lock */
@@ -2423,7 +2442,6 @@ err_re_init:
/* Unregister all Net Device Notifiers */
wlan_hdd_netdev_notifiers_cleanup(pHddCtx);
/* Clean up HDD Nlink Service */
- send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0);
nl_srv_exit();
hdd_runtime_suspend_deinit(pHddCtx);
hdd_close_all_adapters(pHddCtx);
@@ -2446,8 +2464,6 @@ err_re_init:
hdd_wlan_wakelock_destroy();
return -EPERM;
success:
- /* Trigger replay of BTC events */
- send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0);
pHddCtx->isLogpInProgress = FALSE;
hdd_ssr_timer_del();
return VOS_STATUS_SUCCESS;
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index d7ee674b5b40..97e3a3072411 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -71,13 +71,12 @@
#include <linux/netdevice.h>
#include <linux/mmc/sdio_func.h>
#include "wlan_nlink_common.h"
-#include "wlan_btc_svc.h"
#include "wlan_hdd_p2p.h"
#ifdef IPA_OFFLOAD
#include <wlan_hdd_ipa.h>
#endif
#include "cfgApi.h"
-#include "wniCfgAp.h"
+#include "wni_cfg.h"
#include "wlan_hdd_misc.h"
#include <vos_utils.h>
#include "vos_cnss.h"
@@ -1287,6 +1286,78 @@ static VOS_STATUS hdd_wlan_set_dfs_nol(const void *pdfs_list, u16 sdfs_list)
}
#endif
+#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
+/**
+ * hdd_handle_acs_scan_event() - handle acs scan event for SAP
+ * @sap_event: tpSap_Event
+ * @adapter: hdd_adapter_t for SAP
+ *
+ * The function is to handle the eSAP_ACS_SCAN_SUCCESS_EVENT event.
+ * It will update scan result to cfg80211 and start a timer to flush the
+ * cached acs scan result.
+ *
+ * Return: VOS_STATUS_SUCCESS on success,
+ other value on failure
+ */
+static VOS_STATUS hdd_handle_acs_scan_event(tpSap_Event sap_event,
+ hdd_adapter_t *adapter)
+{
+ hdd_context_t *hdd_ctx;
+ struct tsap_acs_scan_complete_event *comp_evt;
+ VOS_STATUS vos_status;
+ int chan_list_size;
+
+ hdd_ctx = (hdd_context_t*)(adapter->pHddCtx);
+ if (!hdd_ctx) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("HDD context is null"));
+ return VOS_STATUS_E_FAILURE;
+ }
+ comp_evt = &sap_event->sapevt.sap_acs_scan_comp;
+ hdd_ctx->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN;
+ spin_lock(&hdd_ctx->acs_skip_lock);
+ vos_mem_free(hdd_ctx->last_acs_channel_list);
+ hdd_ctx->last_acs_channel_list = NULL;
+ hdd_ctx->num_of_channels = 0;
+ /* cache the previous ACS scan channel list .
+ * If the following OBSS scan chan list is covered by ACS chan list,
+ * we can skip OBSS Scan to save SAP starting total time.
+ */
+ if (comp_evt->num_of_channels && comp_evt->channellist) {
+ chan_list_size = comp_evt->num_of_channels *
+ sizeof(comp_evt->channellist[0]);
+ hdd_ctx->last_acs_channel_list = vos_mem_malloc(
+ chan_list_size);
+ if (hdd_ctx->last_acs_channel_list) {
+ vos_mem_copy(hdd_ctx->last_acs_channel_list,
+ comp_evt->channellist,
+ chan_list_size);
+ hdd_ctx->num_of_channels = comp_evt->num_of_channels;
+ }
+ }
+ spin_unlock(&hdd_ctx->acs_skip_lock);
+ /* Update ACS scan result to cfg80211. Then OBSS scan can reuse the
+ * scan result.
+ */
+ if (wlan_hdd_cfg80211_update_bss(hdd_ctx->wiphy, adapter))
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("NO SCAN result"));
+
+ hddLog(LOG1, FL("Reusing Last ACS scan result for %d sec"),
+ ACS_SCAN_EXPIRY_TIMEOUT_S);
+ vos_timer_stop( &hdd_ctx->skip_acs_scan_timer);
+ vos_status = vos_timer_start( &hdd_ctx->skip_acs_scan_timer,
+ ACS_SCAN_EXPIRY_TIMEOUT_S * 1000);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status))
+ hddLog(LOGE, FL("Failed to start ACS scan expiry timer"));
+ return VOS_STATUS_SUCCESS;
+}
+#else
+static VOS_STATUS hdd_handle_acs_scan_event(tpSap_Event sap_event,
+ hdd_adapter_t *adapter)
+{
+ return VOS_STATUS_SUCCESS;
+}
+#endif
+
VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCallback)
{
hdd_adapter_t *pHostapdAdapter;
@@ -1451,11 +1522,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
pHostapdState->bssState = BSS_START;
- hdd_wlan_green_ap_start_bss(pHddCtx);
-
- // Send current operating channel of SoftAP to BTC-ES
- send_btc_nlink_msg(WLAN_BTC_SOFTAP_BSS_START, 0);
-
/* Set default key index */
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: default key index %hu", __func__,
@@ -1566,8 +1632,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
hdd_hostapd_channel_allow_suspend(pHostapdAdapter,
pHddApCtx->operatingChannel);
- hdd_wlan_green_ap_stop_bss(pHddCtx);
-
//Free up Channel List incase if it is set
sapCleanupChannelList(WLAN_HDD_GET_SAP_CTX_PTR(pHostapdAdapter));
@@ -2151,19 +2215,8 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
else
return hdd_chan_change_notify(pHostapdAdapter, dev,
pSapEvent->sapevt.sapChSelected.pri_ch);
-#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
case eSAP_ACS_SCAN_SUCCESS_EVENT:
- pHddCtx->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN;
- hddLog(LOG1, FL("Reusing Last ACS scan result for %d sec"),
- ACS_SCAN_EXPIRY_TIMEOUT_S);
- vos_timer_stop( &pHddCtx->skip_acs_scan_timer);
- vos_status = vos_timer_start( &pHddCtx->skip_acs_scan_timer,
- ACS_SCAN_EXPIRY_TIMEOUT_S * 1000);
- if (!VOS_IS_STATUS_SUCCESS(vos_status))
- hddLog(LOGE, FL("Failed to start ACS scan expiry timer"));
- return VOS_STATUS_SUCCESS;
-#endif
-
+ return hdd_handle_acs_scan_event(pSapEvent, pHostapdAdapter);
case eSAP_DFS_NOL_GET:
hddLog(VOS_TRACE_LEVEL_INFO,
FL("Received eSAP_DFS_NOL_GET event"));
@@ -3658,8 +3711,11 @@ static __iw_softap_getparam(struct net_device *dev,
}
case QCSAP_PARAM_AUTO_CHANNEL:
- *value = (WLAN_HDD_GET_CTX
+ {
+ *value = (WLAN_HDD_GET_CTX
(pHostapdAdapter))->cfg_ini->force_sap_acs;
+ break;
+ }
case QCSAP_PARAM_RTSCTS:
{
@@ -6805,6 +6861,12 @@ hdd_adapter_t* hdd_wlan_create_ap_dev(hdd_context_t *pHddCtx,
hdd_set_needed_headroom(pWlanHostapdDev,
pWlanHostapdDev->hard_header_len);
+ if (pHddCtx->cfg_ini->enableIPChecksumOffload)
+ pWlanHostapdDev->features |= NETIF_F_HW_CSUM;
+ else if (pHddCtx->cfg_ini->enableTCPChkSumOffld)
+ pWlanHostapdDev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+ pWlanHostapdDev->features |= NETIF_F_RXCSUM;
+
SET_NETDEV_DEV(pWlanHostapdDev, pHddCtx->parent_dev);
spin_lock_init(&pHostapdAdapter->pause_map_lock);
pHostapdAdapter->last_tx_jiffies = jiffies;
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index 7123abf7cd49..79ec60a83582 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -2180,7 +2180,7 @@ static int hdd_ipa_send_disconnect(hdd_adapter_t *adapter)
for (i = 0; i < WLAN_MAX_STA_COUNT; i++) {
if (vos_is_macaddr_broadcast(&adapter->aStaInfo[i].macAddrSTA))
- return ret;
+ continue;
if ((adapter->aStaInfo[i].isUsed) &&
(!adapter->aStaInfo[i].isDeauthInProgress)) {
meta.msg_len = sizeof(struct ipa_wlan_msg);
@@ -2718,6 +2718,39 @@ int hdd_ipa_set_perf_level(hdd_context_t *hdd_ctx, uint64_t tx_packets,
return 0;
}
+/**
+ * hdd_ipa_is_present() - get IPA hw status
+ * @hdd_ctx: pointer to hdd context
+ *
+ * ipa_uc_reg_rdyCB is not directly designed to check
+ * ipa hw status. This is an undocumented function which
+ * has confirmed with IPA team.
+ *
+ * Return: true - ipa hw present
+ * false - ipa hw not present
+ */
+bool hdd_ipa_is_present(hdd_context_t *hdd_ctx)
+{
+ /* Check if ipa hw is enabled */
+ if (ipa_uc_reg_rdyCB(NULL) != -EPERM)
+ return true;
+ else
+ return false;
+}
+
+/**
+ * hdd_ipa_reset_ipaconfig() - reset IpaConfig
+ * @hdd_ctx: pointer to hdd context
+ * @ipaconfig: new value for IpaConfig
+ *
+ * Return: none
+ */
+void hdd_ipa_reset_ipaconfig(hdd_context_t *hdd_ctx, v_U32_t ipaconfig)
+{
+ hdd_ctx->cfg_ini->IpaConfig = ipaconfig;
+ return;
+}
+
static int hdd_ipa_setup_rm(struct hdd_ipa_priv *hdd_ipa)
{
struct ipa_rm_create_params create_params = {0};
@@ -3139,6 +3172,9 @@ static void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt,
hdd_ipa = (struct hdd_ipa_priv *)priv;
+ if (!hdd_ipa || wlan_hdd_validate_context(hdd_ipa->hdd_ctx))
+ return;
+
switch (evt) {
case IPA_RECEIVE:
skb = (adf_nbuf_t) data;
@@ -4346,22 +4382,25 @@ int hdd_ipa_wlan_evt(hdd_adapter_t *adapter, uint8_t sta_id,
vos_lock_release(&hdd_ipa->event_lock);
return -EINVAL;
}
- hdd_ipa->sta_connected = 0;
+
if (!hdd_ipa_uc_is_enabled(hdd_ipa)) {
HDD_IPA_LOG(VOS_TRACE_LEVEL_INFO,
"%s: IPA UC OFFLOAD NOT ENABLED",
msg_ex->name);
} else {
/* Disable IPA UC TX PIPE when STA disconnected */
- if ((!hdd_ipa->sap_num_connected_sta) ||
- ((!hdd_ipa->num_iface) &&
- (HDD_IPA_UC_NUM_WDI_PIPE ==
- hdd_ipa->activated_fw_pipe &&
- !hdd_ipa->ipa_pipes_down))) {
+ if ((!hdd_ipa->sap_num_connected_sta &&
+ hdd_ipa->sta_connected) ||
+ (!hdd_ipa->num_iface &&
+ (HDD_IPA_UC_NUM_WDI_PIPE ==
+ hdd_ipa->activated_fw_pipe) &&
+ !hdd_ipa->ipa_pipes_down)) {
hdd_ipa_uc_handle_last_discon(hdd_ipa);
}
}
+ hdd_ipa->sta_connected = 0;
+
vos_lock_release(&hdd_ipa->event_lock);
if (hdd_ipa_uc_sta_is_enabled(hdd_ipa)) {
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index ec6a35af3e5d..d567f2d84646 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -69,7 +69,6 @@
#include <wlan_hdd_tx_rx.h>
#include <wniApi.h>
#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
#include <wlan_hdd_cfg.h>
#include <wlan_ptt_sock_svc.h>
#include <dbglog_host.h>
@@ -533,8 +532,7 @@ void hdd_wlan_green_ap_mc(hdd_context_t *pHddCtx,
break;
case GREEN_AP_PS_STOP_EVENT:
- if (!(hdd_get_concurrency_mode() & VOS_SAP))
- green_ap->ps_enable = 0;
+ green_ap->ps_enable = 0;
break;
case GREEN_AP_ADD_STA_EVENT:
@@ -555,14 +553,6 @@ void hdd_wlan_green_ap_mc(hdd_context_t *pHddCtx,
break;
}
- /* Confirm that power save is enabled before doing state transitions */
- if (!green_ap->ps_enable) {
- hddLog(VOS_TRACE_LEVEL_INFO, FL("Green-AP is disabled"));
- hdd_wlan_green_ap_update(pHddCtx,
- GREEN_AP_PS_IDLE_STATE, GREEN_AP_PS_WAIT_EVENT);
- goto done;
- }
-
pAdapter = hdd_get_adapter (pHddCtx, WLAN_HDD_SOFTAP );
if (pAdapter == NULL) {
@@ -570,6 +560,16 @@ void hdd_wlan_green_ap_mc(hdd_context_t *pHddCtx,
goto done;
}
+ /* Confirm that power save is enabled before doing state transitions */
+ if (!green_ap->ps_enable) {
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("green ap is disabled"));
+ hdd_wlan_green_ap_update(pHddCtx,
+ GREEN_AP_PS_OFF_STATE, GREEN_AP_PS_WAIT_EVENT);
+ if (hdd_wlan_green_ap_enable(pAdapter, 0))
+ hddLog(LOGE, FL("failed to set green ap mode"));
+ goto done;
+ }
+
/* handle the green ap ps state */
switch(green_ap->ps_state) {
case GREEN_AP_PS_IDLE_STATE:
@@ -679,6 +679,65 @@ void wlan_hdd_set_egap_support(hdd_context_t *hdd_ctx, struct hdd_tgt_cfg *cfg)
}
/**
+ * hdd_wlan_is_egap_enabled() - Get Enhance Green AP feature status
+ * @fw_egap_support: flag whether firmware supports egap or not
+ * @cfg: pointer to the struct hdd_config_t
+ *
+ * Return: true if firmware, feature_flag and ini are all enabled the egap
+ */
+static bool hdd_wlan_is_egap_enabled(bool fw_egap_support, hdd_config_t *cfg)
+{
+ /* check if the firmware and ini are both enabled the egap,
+ * and also the feature_flag enable.
+ */
+ if (fw_egap_support && cfg->enable_egap &&
+ cfg->egap_feature_flag)
+ return true;
+
+ return false;
+}
+
+
+/**
+ * hdd_wlan_enable_egap() - Enable Enhance Green AP
+ * @hdd_ctx: HDD global context
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+int hdd_wlan_enable_egap(struct hdd_context_s *hdd_ctx)
+{
+ hdd_config_t *cfg;
+
+ if (!hdd_ctx) {
+ hddLog(LOGE, FL("hdd context is NULL"));
+ return -EINVAL;
+ }
+
+ cfg = hdd_ctx->cfg_ini;
+
+ if (!cfg) {
+ hddLog(LOGE, FL("hdd cfg is NULL"));
+ return -EINVAL;
+ }
+
+ if (!hdd_ctx->green_ap_ctx) {
+ hddLog(LOGE, FL("green ap context is NULL"));
+ return -EINVAL;
+ }
+
+ if (!hdd_wlan_is_egap_enabled(hdd_ctx->green_ap_ctx->egap_support,
+ hdd_ctx->cfg_ini))
+ return -ENOTSUPP;
+
+ if (VOS_STATUS_SUCCESS != sme_send_egap_conf_params(cfg->enable_egap,
+ cfg->egap_inact_time,
+ cfg->egap_wait_time,
+ cfg->egap_feature_flag))
+ return -EINVAL;
+ return 0;
+}
+
+/**
* hdd_wlan_green_ap_start_bss() - Notify Green AP of Start BSS event
* @hdd_ctx: HDD global context
*
@@ -690,52 +749,40 @@ void hdd_wlan_green_ap_start_bss(struct hdd_context_s *hdd_ctx)
if (!hdd_ctx) {
hddLog(LOGE, FL("hdd context is NULL"));
- goto exit;
+ return;
}
cfg = hdd_ctx->cfg_ini;
if (!cfg) {
hddLog(LOGE, FL("hdd cfg is NULL"));
- goto exit;
+ return;
}
- /* check if the firmware and ini are both enabled the egap,
- * and also the feature_flag enable, then we enable the egap
- */
- if (hdd_ctx->green_ap_ctx->egap_support && cfg->enable_egap &&
- cfg->egap_feature_flag) {
- hddLog(LOG1,
- FL("Set EGAP - enabled: %d, flag: %x, inact_time: %d, wait_time: %d"),
- cfg->enable_egap,
- cfg->egap_feature_flag,
- cfg->egap_inact_time,
- cfg->egap_wait_time);
- if (!sme_send_egap_conf_params(cfg->enable_egap,
- cfg->egap_inact_time,
- cfg->egap_wait_time,
- cfg->egap_feature_flag)) {
- /* EGAP is enabled, disable host GAP */
- hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_STOP_EVENT);
- goto exit;
- }
- /* fall through, if send_egap_conf_params() failed,
- * then check host GAP and enable it accordingly
- */
+ if (!hdd_ctx->green_ap_ctx) {
+ hddLog(LOGE, FL("green ap context is NULL"));
+ return;
}
- if (!(VOS_STA & hdd_ctx->concurrency_mode) &&
- cfg->enable2x2 && cfg->enableGreenAP) {
+ if (hdd_wlan_is_egap_enabled(hdd_ctx->green_ap_ctx->egap_support,
+ hdd_ctx->cfg_ini))
+ return;
+
+ if ((hdd_ctx->concurrency_mode & VOS_SAP) &&
+ !(hdd_ctx->concurrency_mode & (~VOS_SAP)) &&
+ cfg->enable2x2 && cfg->enableGreenAP) {
+ hddLog(LOG1,
+ FL("Green AP enabled - sta_con: %d, 2x2: %d, GAP: %d"),
+ (VOS_STA & hdd_ctx->concurrency_mode),
+ cfg->enable2x2, cfg->enableGreenAP);
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_START_EVENT);
} else {
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_STOP_EVENT);
hddLog(LOG1,
- FL("Green AP disabled - sta_con: %d, 2x2: %d, GAP: %d"),
- (VOS_STA & hdd_ctx->concurrency_mode),
- cfg->enable2x2, cfg->enableGreenAP);
+ FL("Green AP disabled- sta_con: %d, 2x2: %d, GAP: %d"),
+ (VOS_STA & hdd_ctx->concurrency_mode),
+ cfg->enable2x2, cfg->enableGreenAP);
}
-exit:
- return;
}
/**
@@ -746,7 +793,30 @@ exit:
*/
void hdd_wlan_green_ap_stop_bss(struct hdd_context_s *hdd_ctx)
{
- hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_STOP_EVENT);
+ if (!hdd_ctx) {
+ hddLog(LOGE, FL("hdd context is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->cfg_ini) {
+ hddLog(LOGE, FL("hdd cfg is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->green_ap_ctx) {
+ hddLog(LOGE, FL("green ap context is NULL"));
+ return;
+ }
+
+ if (hdd_wlan_is_egap_enabled(hdd_ctx->green_ap_ctx->egap_support,
+ hdd_ctx->cfg_ini))
+ return;
+
+ /* For AP+AP mode, only trigger GREEN_AP_PS_STOP_EVENT, when the
+ * last AP stops.
+ */
+ if (1 == (hdd_ctx->no_of_open_sessions[VOS_STA_SAP_MODE]))
+ hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_PS_STOP_EVENT);
}
/**
@@ -757,6 +827,25 @@ void hdd_wlan_green_ap_stop_bss(struct hdd_context_s *hdd_ctx)
*/
void hdd_wlan_green_ap_add_sta(struct hdd_context_s *hdd_ctx)
{
+ if (!hdd_ctx) {
+ hddLog(LOGE, FL("hdd context is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->cfg_ini) {
+ hddLog(LOGE, FL("hdd cfg is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->green_ap_ctx) {
+ hddLog(LOGE, FL("green ap context is NULL"));
+ return;
+ }
+
+ if (hdd_wlan_is_egap_enabled(hdd_ctx->green_ap_ctx->egap_support,
+ hdd_ctx->cfg_ini))
+ return;
+
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_ADD_STA_EVENT);
}
@@ -768,6 +857,25 @@ void hdd_wlan_green_ap_add_sta(struct hdd_context_s *hdd_ctx)
*/
void hdd_wlan_green_ap_del_sta(struct hdd_context_s *hdd_ctx)
{
+ if (!hdd_ctx) {
+ hddLog(LOGE, FL("hdd context is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->cfg_ini) {
+ hddLog(LOGE, FL("hdd cfg is NULL"));
+ return;
+ }
+
+ if (!hdd_ctx->green_ap_ctx) {
+ hddLog(LOGE, FL("green ap context is NULL"));
+ return;
+ }
+
+ if (hdd_wlan_is_egap_enabled(hdd_ctx->green_ap_ctx->egap_support,
+ hdd_ctx->cfg_ini))
+ return;
+
hdd_wlan_green_ap_mc(hdd_ctx, GREEN_AP_DEL_STA_EVENT);
}
@@ -931,11 +1039,13 @@ void wlan_hdd_restart_sap(hdd_adapter_t *ap_adapter)
if (WLANSAP_StartBss(p_sap_ctx, hdd_hostapd_SAPEventCB, pConfig,
(v_PVOID_t)ap_adapter->dev) != VOS_STATUS_SUCCESS) {
hddLog(LOGE, FL("SAP Start Bss fail"));
+ WLANSAP_ResetSapConfigAddIE(pConfig, eUPDATE_IE_ALL);
goto end;
}
hddLog(LOG1, FL("Waiting for SAP to start"));
vos_status = vos_wait_single_event(&pHostapdState->vosEvent, 10000);
+ WLANSAP_ResetSapConfigAddIE(pConfig, eUPDATE_IE_ALL);
if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
hddLog(LOGE, FL("SAP Start failed"));
goto end;
@@ -5802,7 +5912,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
[Number of roam scan channels][Channel1][Channel2]... */
/* copy the number of channels in the 0th index */
len = scnprintf(extra, sizeof(extra), "%s %d", command, numChannels);
- for (j = 0; (j < numChannels); j++)
+ for (j = 0; (j < numChannels) && len <= sizeof(extra); j++)
{
len += scnprintf(extra + len, sizeof(extra) - len, " %d",
ChannelList[j]);
@@ -9028,6 +9138,14 @@ static int __hdd_open(struct net_device *dev)
WLAN_CONTROL_PATH);
}
+ /* Enable carrier and transmit queues for NDI */
+ if (WLAN_HDD_IS_NDI(pAdapter)) {
+ hddLog(LOG1, FL("Enabling Tx Queues"));
+ wlan_hdd_netif_queue_control(pAdapter,
+ WLAN_START_ALL_NETIF_QUEUE_N_CARRIER,
+ WLAN_CONTROL_PATH);
+ }
+
return 0;
}
@@ -9120,7 +9238,7 @@ static int hdd_mon_open(struct net_device *dev)
*
* For module, when all the interfaces are down, enter low power mode.
*/
-static inline void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx)
+void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx)
{
hddLog(VOS_TRACE_LEVEL_INFO,
"%s: All Interfaces are Down entering standby",
@@ -9239,7 +9357,7 @@ static int kickstart_driver(bool load, bool mode_change)
* For static driver, when all the interfaces are down, enter low power mode by
* bringing down WLAN hardware.
*/
-static inline void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx)
+void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx)
{
bool ready;
@@ -9335,6 +9453,17 @@ static int __hdd_stop(struct net_device *dev)
wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER,
WLAN_CONTROL_PATH);
+ /*
+ * NAN data interface is different in some sense. The traffic on NDI is
+ * bursty in nature and depends on the need to transfer. The service layer
+ * may down the interface after the usage and up again when required.
+ * In some sense, the NDI is expected to be available (like SAP) iface
+ * until NDI delete request is issued by the service layer.
+ * Skip BSS termination and adapter deletion for NAN Data interface (NDI).
+ */
+ if (WLAN_HDD_IS_NDI(pAdapter))
+ return 0;
+
/* The interface is marked as down for outside world (aka kernel)
* But the driver is pretty much alive inside. The driver needs to
* tear down the existing connection on the netdev (session)
@@ -10153,13 +10282,12 @@ static hdd_adapter_t* hdd_alloc_station_adapter(hdd_context_t *pHddCtx,
* so just reserve it
*/
hdd_set_needed_headroom(pWlanDev, pWlanDev->hard_header_len);
- pWlanDev->hard_header_len += HDD_HW_NEEDED_HEADROOM;
if (pHddCtx->cfg_ini->enableIPChecksumOffload)
pWlanDev->features |= NETIF_F_HW_CSUM;
else if (pHddCtx->cfg_ini->enableTCPChkSumOffld)
pWlanDev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
- pWlanDev->features |= NETIF_F_RXCSUM;
+ pWlanDev->features |= NETIF_F_RXCSUM;
hdd_set_station_ops( pAdapter->dev );
pWlanDev->destructor = free_netdev;
@@ -11466,12 +11594,15 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
{
eHalStatus halStatus = eHAL_STATUS_SUCCESS;
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
+ hdd_scaninfo_t *pScanInfo = NULL;
union iwreq_data wrqu;
tSirUpdateIE updateIE ;
unsigned long rc;
ENTER();
+ pScanInfo = &pAdapter->scan_info;
+
hddLog(LOG1, FL("Disabling queues"));
wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER,
WLAN_CONTROL_PATH);
@@ -11524,7 +11655,8 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
memset(wrqu.ap_addr.sa_data,'\0',ETH_ALEN);
wireless_send_event(pAdapter->dev, SIOCGIWAP, &wrqu, NULL);
}
- else
+
+ if (pScanInfo != NULL && pScanInfo->mScanPending)
{
wlan_hdd_scan_abort(pAdapter);
}
@@ -11704,6 +11836,18 @@ VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx )
clear_bit(WMM_INIT_DONE, &pAdapter->event_flags);
}
+ /*
+ * If adapter is SAP, set session ID to invalid since SAP
+ * session will be cleanup during SSR.
+ */
+ if (pAdapter->device_mode == WLAN_HDD_SOFTAP)
+ wlansap_set_invalid_session(
+#ifdef WLAN_FEATURE_MBSSID
+ WLAN_HDD_GET_SAP_CTX_PTR(pAdapter));
+#else
+ (WLAN_HDD_GET_CTX(pAdapter))->pvosContext);
+#endif
+
status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
pAdapterNode = pNext;
}
@@ -12102,19 +12246,12 @@ void hdd_dump_concurrency_info(hdd_context_t *pHddCtx)
WLAN_TFC_IPAUC_TX_DESC_RESERVE;
} else
#endif /* IPA_UC_OFFLOAD */
-#ifdef CONFIG_HL_SUPPORT
- {
- pAdapter->tx_flow_low_watermark = 0;
- }
- pAdapter->tx_flow_high_watermark_offset = 0;
-#else
{
pAdapter->tx_flow_low_watermark =
pHddCtx->cfg_ini->TxFlowLowWaterMark;
}
pAdapter->tx_flow_high_watermark_offset =
pHddCtx->cfg_ini->TxFlowHighWaterMarkOffset;
-#endif
WLANTL_SetAdapterMaxQDepth(pHddCtx->pvosContext,
pAdapter->sessionId,
pHddCtx->cfg_ini->TxFlowMaxQueueDepth);
@@ -12141,8 +12278,15 @@ void hdd_dump_concurrency_info(hdd_context_t *pHddCtx)
if (preAdapterChannel == targetChannel)
{
/* Current adapter */
+#ifdef CONFIG_PER_VDEV_TX_DESC_POOL
+ pAdapter->tx_flow_low_watermark =
+ pHddCtx->cfg_ini->TxFlowLowWaterMark;
+ pAdapter->tx_flow_high_watermark_offset =
+ pHddCtx->cfg_ini->TxFlowHighWaterMarkOffset;
+#else
pAdapter->tx_flow_low_watermark = 0;
pAdapter->tx_flow_high_watermark_offset = 0;
+#endif
WLANTL_SetAdapterMaxQDepth(pHddCtx->pvosContext,
pAdapter->sessionId,
pHddCtx->cfg_ini->TxHbwFlowMaxQueueDepth);
@@ -12164,8 +12308,15 @@ void hdd_dump_concurrency_info(hdd_context_t *pHddCtx)
}
/* Previous adapter */
+#ifdef CONFIG_PER_VDEV_TX_DESC_POOL
+ preAdapterContext->tx_flow_low_watermark =
+ pHddCtx->cfg_ini->TxFlowLowWaterMark;
+ preAdapterContext->tx_flow_high_watermark_offset =
+ pHddCtx->cfg_ini->TxFlowHighWaterMarkOffset;
+#else
preAdapterContext->tx_flow_low_watermark = 0;
preAdapterContext->tx_flow_high_watermark_offset = 0;
+#endif
WLANTL_SetAdapterMaxQDepth(pHddCtx->pvosContext,
preAdapterContext->sessionId,
pHddCtx->cfg_ini->TxHbwFlowMaxQueueDepth);
@@ -12968,6 +13119,11 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx)
hddLog(VOS_TRACE_LEVEL_FATAL,"%s: hddDevTmUnregisterNotifyCallback failed",__func__);
}
+ if (VOS_TIMER_STATE_RUNNING ==
+ vos_timer_getCurrentState(&pHddCtx->tdls_source_timer))
+ vos_timer_stop(&pHddCtx->tdls_source_timer);
+ vos_timer_destroy(&pHddCtx->tdls_source_timer);
+
/*
* Cancel any outstanding scan requests. We are about to close all
* of our adapters, but an adapter structure is what SME passes back
@@ -13012,6 +13168,11 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx)
hddLog(VOS_TRACE_LEVEL_ERROR,
"%s: Cannot deallocate ACS Skip timer", __func__);
}
+ spin_lock(&pHddCtx->acs_skip_lock);
+ vos_mem_free(pHddCtx->last_acs_channel_list);
+ pHddCtx->last_acs_channel_list = NULL;
+ pHddCtx->num_of_channels = 0;
+ spin_unlock(&pHddCtx->acs_skip_lock);
#endif
if (pConfig && !pConfig->enablePowersaveOffload)
@@ -13135,9 +13296,6 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx)
if (pConfig && pConfig->fIsLogpEnabled)
vos_watchdog_close(pVosContext);
- //Clean up HDD Nlink Service
- send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0);
-
if (VOS_FTM_MODE != hdd_get_conparam())
wlan_hdd_logging_sock_deactivate_svc(pHddCtx);
@@ -13174,6 +13332,7 @@ free_hdd_ctx:
pHddCtx->cfg_ini= NULL;
}
+ wlan_hdd_deinit_chan_info(pHddCtx);
wlan_hdd_deinit_tx_rx_histogram(pHddCtx);
wiphy_unregister(wiphy) ;
wlan_hdd_cfg80211_deinit(wiphy);
@@ -13248,19 +13407,34 @@ void __hdd_wlan_exit(void)
}
#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
+/**
+ * hdd_skip_acs_scan_timer_handler() - skip ACS scan timer timeout handler
+ * @data: pointer to hdd_context_t
+ *
+ * This function will reset acs_scan_status to eSAP_DO_NEW_ACS_SCAN.
+ * Then new ACS request will do a fresh scan without reusing the cached
+ * scan information.
+ *
+ * Return: void
+ */
void hdd_skip_acs_scan_timer_handler(void * data)
{
- hdd_context_t *hdd_ctx = (hdd_context_t *) data;
- hdd_adapter_t *ap_adapter;
+ hdd_context_t *hdd_ctx = (hdd_context_t *) data;
+ hdd_adapter_t *ap_adapter;
- hddLog(LOG1, FL("ACS Scan result expired. Reset ACS scan skip"));
- hdd_ctx->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN;
+ hddLog(LOG1, FL("ACS Scan result expired. Reset ACS scan skip"));
+ hdd_ctx->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN;
+ spin_lock(&hdd_ctx->acs_skip_lock);
+ vos_mem_free(hdd_ctx->last_acs_channel_list);
+ hdd_ctx->last_acs_channel_list = NULL;
+ hdd_ctx->num_of_channels = 0;
+ spin_unlock(&hdd_ctx->acs_skip_lock);
- /* Get first SAP adapter to clear results */
- ap_adapter = hdd_get_adapter(hdd_ctx, WLAN_HDD_SOFTAP);
- if (!hdd_ctx->hHal || !ap_adapter)
- return;
- sme_ScanFlushResult(hdd_ctx->hHal, ap_adapter->sessionId);
+ /* Get first SAP adapter to clear results */
+ ap_adapter = hdd_get_adapter(hdd_ctx, WLAN_HDD_SOFTAP);
+ if (!hdd_ctx->hHal || !ap_adapter)
+ return;
+ sme_ScanFlushResult(hdd_ctx->hHal, ap_adapter->sessionId);
}
#endif
@@ -14331,6 +14505,40 @@ static int inline wlan_hdd_set_wow_pulse(hdd_context_t *phddctx, bool enable)
#endif
/**
+* wlan_hdd_set_wakeup_gpio() - call SME to send wmi cmd of wakeup gpio
+* @phddctx: hdd_context_t structure pointer
+*
+* Return: int
+*/
+static int wlan_hdd_set_wakeup_gpio(hdd_context_t *hddctx)
+{
+ hdd_config_t *cfg_ini = hddctx->cfg_ini;
+ struct wakeup_gpio_mode wakeup_gpio_info;
+ VOS_STATUS status;
+
+ wakeup_gpio_info.host_wakeup_gpio = cfg_ini->host_wakeup_gpio;
+ wakeup_gpio_info.host_wakeup_type = cfg_ini->host_wakeup_type;
+ wakeup_gpio_info.target_wakeup_gpio = cfg_ini->target_wakeup_gpio;
+ wakeup_gpio_info.target_wakeup_type = cfg_ini->target_wakeup_type;
+
+ hddLog(LOG1, "%s:host_gpio %d host_type %d tar_gpio %d tar_type %d",
+ __func__, wakeup_gpio_info.host_wakeup_gpio,
+ wakeup_gpio_info.host_wakeup_type,
+ wakeup_gpio_info.target_wakeup_gpio,
+ wakeup_gpio_info.target_wakeup_type);
+
+ status = sme_set_wakeup_gpio(&wakeup_gpio_info);
+ if (VOS_STATUS_E_FAILURE == status) {
+ hddLog(LOGE,
+ "%s: sme_set_wakeup_gpio failure!", __func__);
+ return -EIO;
+ }
+ hddLog(LOG1,
+ "%s: sme_set_wakeup_gpio success!", __func__);
+ return 0;
+}
+
+/**
* hdd_tsf_init() - Initialize the TSF synchronization interface
* @hdd_ctx: HDD global context
*
@@ -14711,6 +14919,10 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
goto err_config;
}
+ /* If IPA HW is not existing, disable offload from INI */
+ if (!hdd_ipa_is_present(pHddCtx))
+ hdd_ipa_reset_ipaconfig(pHddCtx, 0);
+
if (0 == pHddCtx->cfg_ini->max_go_peers)
pHddCtx->cfg_ini->max_go_peers = pHddCtx->cfg_ini->max_sap_peers;
@@ -14786,7 +14998,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
vos_set_multicast_logging(pHddCtx->cfg_ini->multicast_host_fw_msgs);
if (wlan_hdd_logging_sock_activate_svc(pHddCtx) < 0)
- goto err_config;
+ goto err_sock_activate;
/*
* Update VOS trace levels based upon the code. The multicast log
@@ -14842,7 +15054,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
/* Initialize the nlink service */
if (wlan_hdd_nl_init(pHddCtx) != 0) {
hddLog(LOGP, FL("nl_srv_init failed"));
- goto err_config;
+ goto err_sock_activate;
}
vos_set_radio_index(pHddCtx->radio_index);
@@ -14936,6 +15148,15 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
"%s: Failed to set wow pulse", __func__);
}
+ if ((pHddCtx->cfg_ini->host_wakeup_gpio !=
+ CFG_HOST_WAKEUP_GPIO_DEFAULT) ||
+ (pHddCtx->cfg_ini->target_wakeup_gpio !=
+ CFG_HOST_WAKEUP_GPIO_DEFAULT)) {
+ if (0 != wlan_hdd_set_wakeup_gpio(pHddCtx)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: Failed to set wakeup gpio", __func__);
+ }
+ }
/* Set 802.11p config
* TODO-OCB: This has been temporarily added here to ensure this paramter
@@ -15315,13 +15536,6 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
pHddCtx->kd_nl_init = 1;
#endif /* WLAN_KD_READY_NOTIFIER */
- //Initialize the BTC service
- if(btc_activate_service(pHddCtx) != 0)
- {
- hddLog(VOS_TRACE_LEVEL_FATAL,"%s: btc_activate_service failed",__func__);
- goto err_reg_netdev;
- }
-
#ifdef FEATURE_OEM_DATA_SUPPORT
//Initialize the OEM service
if (oem_activate_service(pHddCtx) != 0)
@@ -15422,6 +15636,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
hdd_skip_acs_scan_timer_handler, (void *)pHddCtx);
if (!VOS_IS_STATUS_SUCCESS(status))
hddLog(LOGE, FL("Failed to init ACS Skip timer\n"));
+ spin_lock_init(&pHddCtx->acs_skip_lock);
#endif
#ifdef WLAN_FEATURE_NAN
@@ -15491,6 +15706,8 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
}
hdd_tsf_init(pHddCtx);
+ vos_timer_init(&pHddCtx->tdls_source_timer, VOS_TIMER_TYPE_SW,
+ wlan_hdd_change_tdls_mode, (void *)pHddCtx);
#ifdef FEATURE_BUS_BANDWIDTH
spin_lock_init(&pHddCtx->bus_bw_lock);
@@ -15542,6 +15759,8 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
wlan_hdd_dcc_register_for_dcc_stats_event(pHddCtx);
+ wlan_hdd_init_chan_info(pHddCtx);
+
/*
* Register IPv6 notifier to notify if any change in IP
* So that we can reconfigure the offload parameters
@@ -15592,6 +15811,9 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
set_value, PDEV_CMD);
}
+ if (hdd_wlan_enable_egap(pHddCtx))
+ hddLog(LOGE, FL("enhance green ap is not enabled"));
+
wlan_comp.status = 0;
complete(&wlan_comp.wlan_start_comp);
goto success;
@@ -15677,6 +15899,10 @@ err_free_ftm_open:
wlan_hdd_logging_sock_deactivate_svc(pHddCtx);
err_nl_srv:
nl_srv_exit();
+
+err_sock_activate:
+ wlan_hdd_cfg80211_deinit(wiphy);
+
err_config:
vos_mem_free(pHddCtx->cfg_ini);
pHddCtx->cfg_ini= NULL;
@@ -15756,6 +15982,92 @@ int hdd_hif_register_driver(void)
return wlan_comp.status;
}
+#ifdef TIMER_MANAGER
+static inline void hdd_timer_exit(void)
+{
+ vos_timer_exit();
+}
+#else
+static inline void hdd_timer_exit(void)
+{
+}
+#endif
+
+#ifdef MEMORY_DEBUG
+static inline void hdd_mem_exit(void)
+{
+ vos_mem_exit();
+}
+#else
+static inline void hdd_mem_exit(void)
+{
+}
+#endif
+
+#ifdef WLAN_LOGGING_SOCK_SVC_ENABLE
+static inline void hdd_logging_sock_deinit_svc(void)
+{
+ wlan_logging_sock_deinit_svc();
+}
+#else
+static inline void hdd_logging_sock_deinit_svc(void)
+{
+}
+#endif
+
+static int hdd_register_fail_clean_up(v_CONTEXT_t vos_context)
+{
+ hif_unregister_driver();
+ vos_preClose(&vos_context);
+ hdd_timer_exit();
+ hdd_mem_exit();
+ hdd_logging_sock_deinit_svc();
+
+ return -ENODEV;
+}
+
+/* accommodate the request firmware bin time out 2 min */
+#define REQUEST_FWR_TIMEOUT 120000
+#define HDD_WLAN_START_WAIT_TIME (VOS_WDA_TIMEOUT + 5000 + REQUEST_FWR_TIMEOUT)
+/**
+ * hdd_hif_register_driver() - API for HDD to register with HIF
+ *
+ * API for HDD to register with HIF layer
+ *
+ * Return: success/failure
+ */
+int hdd_hif_register_driver(void)
+{
+ int ret;
+ unsigned long rc, timeout;
+
+ init_completion(&wlan_comp.wlan_start_comp);
+ wlan_comp.status = 0;
+
+ ret = hif_register_driver();
+
+ if (ret) {
+ hddLog(LOGE, FL("HIF registration failed"));
+ return ret;
+ }
+
+ timeout = msecs_to_jiffies(HDD_WLAN_START_WAIT_TIME);
+
+ rc = wait_for_completion_timeout(&wlan_comp.wlan_start_comp, timeout);
+
+ if (!rc) {
+ hddLog(LOGE, FL("hif registration timedout"));
+ return -EAGAIN;
+ }
+
+ if (wlan_comp.status)
+ hddLog(LOGE,
+ FL("hdd_wlan_startup failed status:%d jiffies_left:%lu"),
+ wlan_comp.status, rc);
+
+ return wlan_comp.status;
+}
+
/**---------------------------------------------------------------------------
\brief hdd_driver_init() - Core Driver Init Function
@@ -15861,39 +16173,22 @@ static int hdd_driver_init( void)
ret_status = hdd_hif_register_driver();
vos_remove_pm_qos();
- hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT);
- if (ret_status) {
- hddLog(VOS_TRACE_LEVEL_FATAL, "%s: WLAN Driver Initialization failed",
- __func__);
- hif_unregister_driver();
- vos_preClose( &pVosContext );
- ret_status = -ENODEV;
- break;
- } else {
- pr_info("%s: driver loaded in %lld\n", WLAN_MODULE_NAME,
- adf_get_boottime() - start);
- return 0;
+ if (ret_status == 0) {
+ pr_info("%s: driver loaded in %lld\n", WLAN_MODULE_NAME,
+ adf_get_boottime() - start);
+ hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT);
+ return 0;
}
+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: WLAN Driver Initialization failed",
+ __func__);
- } while (0);
-
- if (0 != ret_status)
- {
-#ifdef TIMER_MANAGER
- vos_timer_exit();
-#endif
-#ifdef MEMORY_DEBUG
- vos_mem_exit();
-#endif
- hdd_wlan_wakelock_destroy();
+ ret_status = hdd_register_fail_clean_up(pVosContext);
+ hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT);
+ hdd_wlan_wakelock_destroy();
-#ifdef WLAN_LOGGING_SOCK_SVC_ENABLE
- wlan_logging_sock_deinit_svc();
-#endif
- pr_err("%s: driver load failure\n", WLAN_MODULE_NAME);
- }
+ } while (0);
EXIT();
@@ -16291,42 +16586,48 @@ v_BOOL_t hdd_is_suspend_notify_allowed(hdd_context_t* pHddCtx)
void wlan_hdd_set_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode)
{
- switch (mode) {
- case VOS_STA_MODE:
- case VOS_P2P_CLIENT_MODE:
- case VOS_P2P_GO_MODE:
- case VOS_STA_SAP_MODE:
- pHddCtx->concurrency_mode |= (1 << mode);
- pHddCtx->no_of_open_sessions[mode]++;
- break;
- default:
- break;
- }
- hddLog(VOS_TRACE_LEVEL_INFO, FL("concurrency_mode = 0x%x "
- "Number of open sessions for mode %d = %d"),
- pHddCtx->concurrency_mode, mode,
- pHddCtx->no_of_open_sessions[mode]);
+ switch (mode) {
+ case VOS_STA_MODE:
+ case VOS_P2P_CLIENT_MODE:
+ case VOS_P2P_GO_MODE:
+ case VOS_STA_SAP_MODE:
+ pHddCtx->concurrency_mode |= (1 << mode);
+ pHddCtx->no_of_open_sessions[mode]++;
+ break;
+ default:
+ break;
+ }
+
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("concurrency_mode = 0x%x, Number of open sessions for mode %d = %d"),
+ pHddCtx->concurrency_mode, mode,
+ pHddCtx->no_of_open_sessions[mode]);
+
+ hdd_wlan_green_ap_start_bss(pHddCtx);
}
void wlan_hdd_clear_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode)
- {
- switch (mode) {
- case VOS_STA_MODE:
- case VOS_P2P_CLIENT_MODE:
- case VOS_P2P_GO_MODE:
- case VOS_STA_SAP_MODE:
- pHddCtx->no_of_open_sessions[mode]--;
- if (!(pHddCtx->no_of_open_sessions[mode]))
- pHddCtx->concurrency_mode &= (~(1 << mode));
- break;
- default:
- break;
- }
- hddLog(VOS_TRACE_LEVEL_INFO, FL("concurrency_mode = 0x%x "
- "Number of open sessions for mode %d = %d"),
- pHddCtx->concurrency_mode, mode, pHddCtx->no_of_open_sessions[mode]);
- }
+{
+ switch (mode) {
+ case VOS_STA_MODE:
+ case VOS_P2P_CLIENT_MODE:
+ case VOS_P2P_GO_MODE:
+ case VOS_STA_SAP_MODE:
+ pHddCtx->no_of_open_sessions[mode]--;
+ if (!(pHddCtx->no_of_open_sessions[mode]))
+ pHddCtx->concurrency_mode &= (~(1 << mode));
+ break;
+ default:
+ break;
+ }
+
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("concurrency_mode = 0x%x, Number of open sessions for mode %d = %d"),
+ pHddCtx->concurrency_mode, mode,
+ pHddCtx->no_of_open_sessions[mode]);
+
+ hdd_wlan_green_ap_start_bss(pHddCtx);
+}
/**---------------------------------------------------------------------------
*
@@ -17500,6 +17801,8 @@ void hdd_stop_bus_bw_compute_timer(hdd_adapter_t *pAdapter)
if (can_stop == VOS_TRUE) {
vos_timer_stop(&pHddCtx->bus_bw_timer);
+ /* reset the ipa perf level */
+ hdd_ipa_set_perf_level(pHddCtx, 0, 0);
hdd_rst_tcp_delack(pHddCtx);
tlshim_reset_bundle_require();
}
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c
index 62f97f51cb0a..96f54e74b1d3 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.c
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c
@@ -387,6 +387,7 @@ static int hdd_ndi_delete_req_handler(hdd_context_t *hdd_ctx,
uint16_t transaction_id;
struct nan_datapath_ctx *ndp_ctx;
int ret;
+ hdd_station_ctx_t *sta_ctx;
ENTER();
@@ -426,6 +427,12 @@ static int hdd_ndi_delete_req_handler(hdd_context_t *hdd_ctx,
return -EINVAL;
}
+ sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+ if (!sta_ctx) {
+ hddLog(LOGE, FL("sta_ctx is NULL"));
+ return -EINVAL;
+ }
+
/* check if there are active peers on the adapter */
if (ndp_ctx->active_ndp_peers > 0) {
hddLog(LOGE, FL("NDP peers active: %d, cannot delete NDI"),
@@ -433,6 +440,12 @@ static int hdd_ndi_delete_req_handler(hdd_context_t *hdd_ctx,
return -EINVAL;
}
+ /*
+ * Since, the interface is being deleted, remove the
+ */
+ hdd_ctx->sta_to_adapter[sta_ctx->broadcast_staid] = 0;
+ sta_ctx->broadcast_staid = HDD_WLAN_INVALID_STA_ID;
+
ndp_ctx->ndp_delete_transaction_id = transaction_id;
ndp_ctx->state = NAN_DATA_NDI_DELETING_STATE;
@@ -762,6 +775,10 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
uint8_t create_transaction_id = 0;
uint32_t create_status = NDP_RSP_STATUS_ERROR;
uint32_t create_reason = NDP_NAN_DATA_IFACE_CREATE_FAILED;
+ hdd_station_ctx_t *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+ v_MACADDR_t bc_mac_addr = VOS_MAC_ADDR_BROADCAST_INITIALIZER;
+ tCsrRoamInfo roam_info = {0};
+ tSirBssDescription tmp_bss_descp = {0};
ENTER();
@@ -784,6 +801,11 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
create_fail = true;
}
+ if (!sta_ctx) {
+ hddLog(LOGE, FL("ndp_ctx is NULL"));
+ create_fail = true;
+ }
+
/* notify response to the upper layer */
vendor_event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy,
NULL,
@@ -857,6 +879,13 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
if (create_fail)
goto close_ndi;
+ sta_ctx->broadcast_staid = ndi_rsp->sta_id;
+ hdd_save_peer(sta_ctx, sta_ctx->broadcast_staid, &bc_mac_addr);
+ hdd_roamRegisterSTA(adapter, &roam_info,
+ sta_ctx->broadcast_staid,
+ &bc_mac_addr, &tmp_bss_descp);
+ hdd_ctx->sta_to_adapter[sta_ctx->broadcast_staid] = adapter;
+
EXIT();
return;
@@ -927,6 +956,9 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
struct nan_datapath_ctx *ndp_ctx;
uint32_t data_len = sizeof(uint32_t) * 3 + sizeof(uint16_t) +
NLA_HDRLEN * 4 + NLMSG_HDRLEN;
+ VOS_STATUS status;
+ bool can_enter_standby = true;
+ hdd_adapter_list_node_t *adapter_node, *next;
ENTER();
@@ -1016,6 +1048,24 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
cfg80211_vendor_event(vendor_event, GFP_KERNEL);
+ /*
+ * It is possible that deleted NDI was the last active interface.
+ * We should let the device enter lower power mode
+ */
+ status = hdd_get_front_adapter(hdd_ctx, &adapter_node);
+ while ((NULL != adapter_node) && (VOS_STATUS_SUCCESS == status)) {
+ if (test_bit(DEVICE_IFACE_OPENED,
+ &adapter_node->pAdapter->event_flags)) {
+ can_enter_standby = false;
+ break;
+ }
+ status = hdd_get_next_adapter(hdd_ctx, adapter_node, &next);
+ adapter_node = next;
+ }
+
+ if (can_enter_standby)
+ wlan_hdd_stop_enter_lowpower(hdd_ctx);
+
EXIT();
return;
@@ -1115,7 +1165,6 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter,
tCsrRoamInfo roam_info = {0};
struct nan_datapath_ctx *ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter);
hdd_station_ctx_t *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
- v_MACADDR_t bc_mac_addr = VOS_MAC_ADDR_BROADCAST_INITIALIZER;
ENTER();
@@ -1138,16 +1187,11 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter,
ndp_ctx->active_ndp_peers++;
hddLog(LOG1, FL("vdev_id: %d, num_peers: %d"),
adapter->sessionId, ndp_ctx->active_ndp_peers);
-
hdd_roamRegisterSTA(adapter, &roam_info, new_peer_ind->sta_id,
&new_peer_ind->peer_mac_addr, &tmp_bss_descp);
hdd_ctx->sta_to_adapter[new_peer_ind->sta_id] = adapter;
/* perform following steps for first new peer ind */
if (ndp_ctx->active_ndp_peers == 1) {
- hdd_ctx->sta_to_adapter[NDP_BROADCAST_STAID] = adapter;
- hdd_save_peer(sta_ctx, NDP_BROADCAST_STAID, &bc_mac_addr);
- hdd_roamRegisterSTA(adapter, &roam_info, NDP_BROADCAST_STAID,
- &bc_mac_addr, &tmp_bss_descp);
hddLog(LOG1, FL("Set ctx connection state to connected"));
sta_ctx->conn_info.connState = eConnectionState_NdiConnected;
hdd_wmm_connect(adapter, &roam_info, eCSR_BSS_TYPE_NDI);
@@ -1155,6 +1199,7 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter,
WLAN_WAKE_ALL_NETIF_QUEUE,
WLAN_CONTROL_PATH);
}
+
EXIT();
}
/**
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 5ae88814653c..85b1449b0f38 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -186,11 +186,13 @@ wlan_hdd_remain_on_channel_callback(tHalHandle hHal, void* pCtx,
}
hddLog( LOG1, "Received remain on channel rsp");
- vos_timer_stop(&pRemainChanCtx->hdd_remain_on_chan_timer);
- vos_timer_destroy(&pRemainChanCtx->hdd_remain_on_chan_timer);
-
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_stop(
+ &pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy(
+ &pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to destroy hdd_remain_on_chan_timer"));
cfgState->remain_on_chan_ctx = NULL;
-
/*
* Resetting the roc in progress early ensures that the subsequent
* roc requests are immediately processed without being queued
@@ -270,7 +272,6 @@ wlan_hdd_remain_on_channel_callback(tHalHandle hHal, void* pCtx,
NULL, 0 );
}
-
mutex_lock(&cfgState->remain_on_chan_ctx_lock);
if(pRemainChanCtx->action_pkt_buff.frame_ptr != NULL
&& pRemainChanCtx->action_pkt_buff.frame_length != 0 )
@@ -301,9 +302,12 @@ void wlan_hdd_cancel_existing_remain_on_channel(hdd_adapter_t *pAdapter)
if (VOS_TIMER_STATE_RUNNING == vos_timer_getCurrentState(
&cfgState->remain_on_chan_ctx->hdd_remain_on_chan_timer))
- vos_timer_stop(&cfgState->remain_on_chan_ctx->
- hdd_remain_on_chan_timer);
-
+ {
+ if (!VOS_IS_STATUS_SUCCESS(
+ vos_timer_stop(&cfgState->remain_on_chan_ctx->
+ hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
+ }
pRemainChanCtx = cfgState->remain_on_chan_ctx;
if (NULL == pRemainChanCtx)
{
@@ -474,8 +478,13 @@ wait:
if (roc_ctx != NULL)
{
cfgState->remain_on_chan_ctx = NULL;
- vos_timer_stop(&roc_ctx->hdd_remain_on_chan_timer);
- vos_timer_destroy(&roc_ctx->hdd_remain_on_chan_timer);
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_stop(
+ &roc_ctx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy
+ (&roc_ctx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL(
+ "Failed to destroy hdd_remain_on_chan_timer"));
if (roc_ctx->action_pkt_buff.frame_ptr != NULL
&& roc_ctx->action_pkt_buff.frame_length != 0)
{
@@ -550,6 +559,7 @@ void wlan_hdd_remain_on_chan_timeout(void *data)
(WLAN_HDD_GET_CTX(pAdapter))->pvosContext);
}
+ wlan_hdd_start_stop_tdls_source_timer(pHddCtx, eTDLS_SUPPORT_ENABLED);
vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.roc);
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_ROC);
}
@@ -635,11 +645,21 @@ static int wlan_hdd_execute_remain_on_channel(hdd_adapter_t *pAdapter,
== REMAIN_ON_CHANNEL_REQUEST)? TRUE:FALSE)) {
hddLog(LOGE, FL("sme_RemainOnChannel returned failure"));
mutex_lock(&cfgState->remain_on_chan_ctx_lock);
- cfgState->remain_on_chan_ctx = NULL;
pAdapter->is_roc_inprogress = FALSE;
+ pRemainChanCtx = cfgState->remain_on_chan_ctx;
+ hddLog( LOG1, FL(
+ "Freeing ROC ctx cfgState->remain_on_chan_ctx=%p"),
+ cfgState->remain_on_chan_ctx);
+ if (pRemainChanCtx)
+ {
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy
+ (&pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL(
+ "Failed to destroy hdd_remain_on_chan_timer"));
+ vos_mem_free(pRemainChanCtx);
+ cfgState->remain_on_chan_ctx = NULL;
+ }
mutex_unlock(&cfgState->remain_on_chan_ctx_lock);
- vos_timer_destroy(&pRemainChanCtx->hdd_remain_on_chan_timer);
- vos_mem_free(pRemainChanCtx);
vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.roc);
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_ROC);
return -EINVAL;
@@ -671,11 +691,21 @@ static int wlan_hdd_execute_remain_on_channel(hdd_adapter_t *pAdapter,
"%s: WLANSAP_RemainOnChannel returned fail", __func__);
mutex_lock(&cfgState->remain_on_chan_ctx_lock);
- cfgState->remain_on_chan_ctx = NULL;
pAdapter->is_roc_inprogress = FALSE;
+ pRemainChanCtx = cfgState->remain_on_chan_ctx;
+ hddLog( LOG1, FL(
+ "Freeing ROC ctx cfgState->remain_on_chan_ctx=%p"),
+ cfgState->remain_on_chan_ctx);
+ if (pRemainChanCtx)
+ {
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_destroy
+ (&pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL(
+ "Failed to destroy hdd_remain_on_chan_timer"));
+ vos_mem_free (pRemainChanCtx);
+ cfgState->remain_on_chan_ctx = NULL;
+ }
mutex_unlock(&cfgState->remain_on_chan_ctx_lock);
- vos_timer_destroy(&pRemainChanCtx->hdd_remain_on_chan_timer);
- vos_mem_free (pRemainChanCtx);
vos_runtime_pm_allow_suspend(pHddCtx->runtime_context.roc);
hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_ROC);
return -EINVAL;
@@ -705,6 +735,7 @@ static int wlan_hdd_execute_remain_on_channel(hdd_adapter_t *pAdapter,
}
}
+ wlan_hdd_start_stop_tdls_source_timer(pHddCtx, eTDLS_SUPPORT_DISABLED);
return 0;
}
@@ -863,8 +894,6 @@ static int wlan_hdd_request_remain_on_channel( struct wiphy *wiphy,
int ret = 0;
int status = 0;
- ENTER();
-
hddLog(LOG1, FL("Device_mode %s(%d)"),
hdd_device_mode_to_string(pAdapter->device_mode),
pAdapter->device_mode);
@@ -976,7 +1005,6 @@ static int wlan_hdd_request_remain_on_channel( struct wiphy *wiphy,
hddLog(LOG1, FL("scheduling delayed work: no connection/roc active"));
schedule_delayed_work(&pHddCtx->rocReqWork, 0);
}
- EXIT();
return 0;
}
@@ -1091,7 +1119,9 @@ void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter )
vos_timer_getCurrentState(&pRemainChanCtx->hdd_remain_on_chan_timer))
{
hddLog( LOGE, "Timer Started before ready event!!!");
- vos_timer_stop(&pRemainChanCtx->hdd_remain_on_chan_timer);
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_stop(
+ &pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
}
status = vos_timer_start(&pRemainChanCtx->hdd_remain_on_chan_timer,
(pRemainChanCtx->duration + COMPLETE_EVENT_PROPOGATE_TIME));
@@ -1233,7 +1263,9 @@ int __wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy,
if (NULL != cfgState->remain_on_chan_ctx)
{
- vos_timer_stop(&cfgState->remain_on_chan_ctx->hdd_remain_on_chan_timer);
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_stop(
+ &cfgState->remain_on_chan_ctx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
if (TRUE == pRemainChanCtx->hdd_remain_on_chan_cancel_in_progress)
{
mutex_unlock(&cfgState->remain_on_chan_ctx_lock);
@@ -1591,7 +1623,10 @@ int __wlan_hdd_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
hddLog( LOG1, "%s: Extending the wait time %d for actionFrmType=%d",
__func__,wait,actionFrmType);
- vos_timer_stop(&cfgState->remain_on_chan_ctx->hdd_remain_on_chan_timer);
+ if (!VOS_IS_STATUS_SUCCESS(
+ vos_timer_stop(&cfgState->remain_on_chan_ctx->
+ hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
status = vos_timer_start(&cfgState->remain_on_chan_ctx->hdd_remain_on_chan_timer,
wait);
mutex_unlock(&cfgState->remain_on_chan_ctx_lock);
@@ -2411,14 +2446,13 @@ int __wlan_hdd_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev)
struct net_device *dev = wdev->netdev;
#endif
hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy);
- hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev );
hdd_adapter_t *pVirtAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
int status;
ENTER();
MTRACE(vos_trace(VOS_MODULE_ID_HDD,
TRACE_CODE_HDD_DEL_VIRTUAL_INTF,
- pAdapter->sessionId, pAdapter->device_mode));
+ pVirtAdapter->sessionId, pVirtAdapter->device_mode));
hddLog(LOG1, FL("Device_mode %s(%d)"),
hdd_device_mode_to_string(pVirtAdapter->device_mode),
pVirtAdapter->device_mode);
@@ -2632,7 +2666,9 @@ void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
if(VOS_TIMER_STATE_RUNNING ==
vos_timer_getCurrentState(&pRemainChanCtx->hdd_remain_on_chan_timer))
{
- vos_timer_stop(&pRemainChanCtx->hdd_remain_on_chan_timer);
+ if (!VOS_IS_STATUS_SUCCESS(vos_timer_stop(
+ &pRemainChanCtx->hdd_remain_on_chan_timer)))
+ hddLog( LOGE, FL("Failed to stop hdd_remain_on_chan_timer"));
status = vos_timer_start(
&pRemainChanCtx->hdd_remain_on_chan_timer,
extend_time);
diff --git a/CORE/HDD/src/wlan_hdd_scan.c b/CORE/HDD/src/wlan_hdd_scan.c
index 5388421ec2de..2c57f9f8f054 100644
--- a/CORE/HDD/src/wlan_hdd_scan.c
+++ b/CORE/HDD/src/wlan_hdd_scan.c
@@ -720,8 +720,9 @@ static int __iw_set_scan(struct net_device *dev, struct iw_request_info *info,
}
/* push addIEScan in scanRequset if exist */
- if (pAdapter->scan_info.scanAddIE.addIEdata &&
- pAdapter->scan_info.scanAddIE.length)
+ if (pAdapter->scan_info.scanAddIE.length &&
+ (pAdapter->scan_info.scanAddIE.length <=
+ sizeof(pAdapter->scan_info.scanAddIE.addIEdata)))
{
scanRequest.uIEFieldLen = pAdapter->scan_info.scanAddIE.length;
scanRequest.pIEField = pAdapter->scan_info.scanAddIE.addIEdata;
@@ -1132,8 +1133,9 @@ int iw_set_cscan(struct net_device *dev, struct iw_request_info *info,
}
/* push addIEScan in scanRequset if exist */
- if (pAdapter->scan_info.scanAddIE.addIEdata &&
- pAdapter->scan_info.scanAddIE.length)
+ if (pAdapter->scan_info.scanAddIE.length &&
+ (pAdapter->scan_info.scanAddIE.length <=
+ sizeof(pAdapter->scan_info.scanAddIE.addIEdata)))
{
scanRequest.uIEFieldLen = pAdapter->scan_info.scanAddIE.length;
scanRequest.pIEField = pAdapter->scan_info.scanAddIE.addIEdata;
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index e6cb53bc2987..94cde66ccdf8 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -270,8 +270,31 @@ int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
while (skb) {
skb_next = skb->next;
+ /* memset skb control block */
+ vos_mem_zero(skb->cb, sizeof(skb->cb));
+ wlan_hdd_classify_pkt(skb);
+
pDestMacAddress = (v_MACADDR_t*)skb->data;
+/*
+* The TCP TX throttling logic is changed a little after 3.19-rc1 kernel,
+* the TCP sending limit will be smaller, which will throttle the TCP packets
+* to the host driver. The TCP UP LINK throughput will drop heavily.
+* In order to fix this issue, need to orphan the socket buffer asap, which will
+* call skb's destructor to notify the TCP stack that the SKB buffer is
+* unowned. And then the TCP stack will pump more packets to host driver.
+*
+* The TX packets might be dropped for UDP case in the iperf testing.
+* So need to be protected by follow control.
+*/
+#ifdef QCA_LL_TX_FLOW_CT
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(3,19,0))
+ if (pAdapter->tx_flow_low_watermark > 0) {
+ skb_orphan(skb);
+ }
+#endif
+#endif
+
if (vos_is_macaddr_broadcast( pDestMacAddress ) ||
vos_is_macaddr_group(pDestMacAddress))
{
@@ -355,9 +378,6 @@ int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
ac = hdd_QdiscAcToTlAC[skb->queue_mapping];
++pAdapter->hdd_stats.hddTxRxStats.txXmitClassifiedAC[ac];
- adf_dp_trace_log_pkt(pAdapter->sessionId, skb,
- WIFI_EVENT_DRIVER_EAPOL_FRAME_TRANSMIT_REQUESTED);
-
#ifdef QCA_PKT_PROTO_TRACE
if ((hddCtxt->cfg_ini->gEnableDebugLog & VOS_PKT_TRAC_TYPE_EAPOL) ||
(hddCtxt->cfg_ini->gEnableDebugLog & VOS_PKT_TRAC_TYPE_DHCP))
@@ -397,7 +417,8 @@ int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
list_tail->next = skb;
list_tail = list_tail->next;
}
- vos_mem_zero(skb->cb, sizeof(skb->cb));
+
+ adf_dp_trace_log_pkt(pAdapter->sessionId, skb, ADF_TX);
NBUF_SET_PACKET_TRACK(skb, NBUF_TX_PKT_DATA_TRACK);
NBUF_UPDATE_TX_PKT_COUNT(skb, NBUF_TX_PKT_HDD);
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 5eb70d6c4d3f..fc053af4d052 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -548,7 +548,7 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
vos_mem_zero(pHddTdlsCtx, sizeof(tdlsCtx_t));
vos_timer_init(&pHddTdlsCtx->peerDiscoveryTimeoutTimer,
- VOS_TIMER_TYPE_SW,
+ VOS_TIMER_TYPE_WAKE_APPS,
wlan_hdd_tdls_discovery_timeout_peer_cb,
pHddTdlsCtx);
@@ -1091,6 +1091,9 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter,
mutex_lock(&pHddCtx->tdls_lock);
+ hddLog(LOG1, FL("tdls set peer " MAC_ADDRESS_STR " link status to %u"),
+ MAC_ADDR_ARRAY(curr_peer->peerMac), linkStatus);
+
curr_peer->link_status= linkStatus;
/* If TDLS link status is already passed the discovery state
@@ -1543,7 +1546,8 @@ static void wlan_hdd_tdls_implicit_enable(tdlsCtx_t *pHddTdlsCtx)
static void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx,
eTDLSSupportMode tdls_mode,
- v_BOOL_t bUpdateLast)
+ v_BOOL_t bUpdateLast,
+ enum tdls_disable_source source)
{
hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
VOS_STATUS status;
@@ -1565,6 +1569,19 @@ static void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx,
mutex_unlock(&pHddCtx->tdls_lock);
hddLog(VOS_TRACE_LEVEL_INFO,
"%s already in mode %d", __func__, (int)tdls_mode);
+
+ /* TDLS is already disabled hence set source mask and return */
+ if (eTDLS_SUPPORT_DISABLED == tdls_mode) {
+ set_bit((unsigned long)source, &pHddCtx->tdls_source_bitmap);
+ return;
+ }
+
+ /* TDLS is already enabled hence clear source mask and return */
+ if (eTDLS_SUPPORT_ENABLED == tdls_mode) {
+ clear_bit((unsigned long)source,
+ &pHddCtx->tdls_source_bitmap);
+ return;
+ }
return;
}
@@ -1577,11 +1594,37 @@ static void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx,
if (NULL != pHddTdlsCtx)
{
if(eTDLS_SUPPORT_ENABLED == tdls_mode ||
- eTDLS_SUPPORT_EXTERNAL_CONTROL == tdls_mode)
+ eTDLS_SUPPORT_EXTERNAL_CONTROL == tdls_mode) {
+ clear_bit((unsigned long)source,
+ &pHddCtx->tdls_source_bitmap);
+
+ /*
+ * Check if any TDLS source bit is set and if bitmap is
+ * not zero then we should not enable TDLS
+ */
+ if (pHddCtx->tdls_source_bitmap) {
+ mutex_unlock(&pHddCtx->tdls_lock);
+ return;
+ }
wlan_hdd_tdls_implicit_enable(pHddTdlsCtx);
- else if((eTDLS_SUPPORT_DISABLED == tdls_mode) ||
- (eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY == tdls_mode))
+ } else if (eTDLS_SUPPORT_DISABLED == tdls_mode) {
+ set_bit((unsigned long)source,
+ &pHddCtx->tdls_source_bitmap);
wlan_hdd_tdls_implicit_disable(pHddTdlsCtx);
+ } else if (eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY == tdls_mode) {
+ clear_bit((unsigned long)source,
+ &pHddCtx->tdls_source_bitmap);
+ wlan_hdd_tdls_implicit_disable(pHddTdlsCtx);
+
+ /*
+ * Check if any TDLS source bit is set and if bitmap is
+ * not zero then we should not enable TDLS
+ */
+ if (pHddCtx->tdls_source_bitmap) {
+ mutex_unlock(&pHddCtx->tdls_lock);
+ return;
+ }
+ }
}
status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
pAdapterNode = pNext;
@@ -1648,7 +1691,8 @@ int wlan_hdd_tdls_set_params(struct net_device *dev, tdls_config_params_t *confi
config->rssi_trigger_threshold,
config->rssi_teardown_threshold);
- wlan_hdd_tdls_set_mode(pHddCtx, req_tdls_mode, TRUE);
+ wlan_hdd_tdls_set_mode(pHddCtx, req_tdls_mode, TRUE,
+ HDD_SET_TDLS_MODE_SOURCE_USER);
tdlsParams = vos_mem_malloc(sizeof(tdlsInfo_t));
if (NULL == tdlsParams)
@@ -2586,6 +2630,8 @@ void wlan_hdd_tdls_implicit_send_discovery_request(tdlsCtx_t * pHddTdlsCtx)
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);
+ wlan_hdd_tdls_check_bmps(pHddTdlsCtx->pAdapter);
+
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: discovery count %u timeout %u msec",
__func__, pHddTdlsCtx->discovery_sent_cnt,
@@ -2729,7 +2775,8 @@ int wlan_hdd_tdls_scan_callback (hdd_adapter_t *pAdapter,
eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY == pHddCtx->tdls_mode)
{
/* Disable implicit trigger logic & tdls operation */
- wlan_hdd_tdls_set_mode(pHddCtx, eTDLS_SUPPORT_DISABLED, FALSE);
+ wlan_hdd_tdls_set_mode(pHddCtx, eTDLS_SUPPORT_DISABLED, FALSE,
+ HDD_SET_TDLS_MODE_SOURCE_SCAN);
/* indicate the teardown all connected to peer */
connectedTdlsPeers = wlan_hdd_tdlsConnectedPeers(pAdapter);
if (connectedTdlsPeers)
@@ -2846,7 +2893,8 @@ void wlan_hdd_tdls_scan_done_callback(hdd_adapter_t *pAdapter)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
("%s: revert tdls mode %d"), __func__, pHddCtx->tdls_mode_last);
- wlan_hdd_tdls_set_mode(pHddCtx, pHddCtx->tdls_mode_last, FALSE);
+ wlan_hdd_tdls_set_mode(pHddCtx, pHddCtx->tdls_mode_last, FALSE,
+ HDD_SET_TDLS_MODE_SOURCE_SCAN);
}
wlan_hdd_tdls_check_bmps(pAdapter);
EXIT();
@@ -2856,18 +2904,25 @@ void wlan_hdd_tdls_timer_restart(hdd_adapter_t *pAdapter,
vos_timer_t *timer,
v_U32_t expirationTime)
{
- hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+ hdd_station_ctx_t *pHddStaCtx;
- /* Check whether driver load unload is in progress */
- if (vos_is_load_unload_in_progress(VOS_MODULE_ID_VOSS, NULL)) {
- hddLog(LOGE, FL("Driver load/unload is in progress."));
- return;
- }
+ if (NULL == pAdapter || WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ FL("invalid pAdapter: %p"), pAdapter);
+ return;
+ }
- if (hdd_connIsConnected(pHddStaCtx)) {
- vos_timer_stop(timer);
- vos_timer_start(timer, expirationTime);
- }
+ pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+ /* Check whether driver load unload is in progress */
+ if (vos_is_load_unload_in_progress(VOS_MODULE_ID_VOSS, NULL)) {
+ hddLog(LOGE, FL("Driver load/unload is in progress."));
+ return;
+ }
+
+ if (hdd_connIsConnected(pHddStaCtx)) {
+ vos_timer_stop(timer);
+ vos_timer_start(timer, expirationTime);
+ }
}
void wlan_hdd_tdls_indicate_teardown(hdd_adapter_t *pAdapter,
@@ -3374,3 +3429,47 @@ int hdd_set_tdls_scan_type(hdd_context_t *hdd_ctx, int val)
return 0;
}
}
+
+/**
+ * wlan_hdd_change_tdls_mode - Change TDLS mode
+ * @data: void pointer
+ *
+ * Return: None
+ */
+void wlan_hdd_change_tdls_mode(void *data)
+{
+ hdd_context_t *hdd_ctx = (hdd_context_t *)data;
+
+ wlan_hdd_tdls_set_mode(hdd_ctx, eTDLS_SUPPORT_ENABLED, FALSE,
+ HDD_SET_TDLS_MODE_SOURCE_OFFCHANNEL);
+}
+
+/**
+ * wlan_hdd_start_stop_tdls_source_timer - Restart TDLS source timer
+ * @pHddCtx: ptr to hdd context.
+ * @tdls_mode: value for TDLS support mode.
+ *
+ * This timer is the handler for avoiding overlapping for P2P listen
+ * and TDLS operation. This handler will start the source timer for
+ * the duration of tdls_enable_defer_time after P2P listen ends and
+ * before enabling TDLS again.
+ *
+ * Return: None
+ */
+void wlan_hdd_start_stop_tdls_source_timer(hdd_context_t *pHddCtx,
+ eTDLSSupportMode tdls_mode)
+{
+ if (VOS_TIMER_STATE_RUNNING ==
+ vos_timer_getCurrentState(&pHddCtx->tdls_source_timer))
+ vos_timer_stop(&pHddCtx->tdls_source_timer);
+
+ if (tdls_mode == eTDLS_SUPPORT_DISABLED)
+ wlan_hdd_tdls_set_mode(pHddCtx, tdls_mode, FALSE,
+ HDD_SET_TDLS_MODE_SOURCE_OFFCHANNEL);
+
+ vos_timer_start(&pHddCtx->tdls_source_timer,
+ pHddCtx->cfg_ini->tdls_enable_defer_time);
+
+ return;
+}
+
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index e021043db542..4547299f904b 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -174,21 +174,17 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId)
list_for_each_safe(tmp, next, &pAdapter->wmm_tx_queue[i].anchor)
{
pktNode = list_entry(tmp, skb_list_node_t, anchor);
- if (pktNode != NULL)
- {
- skb = pktNode->skb;
+ skb = pktNode->skb;
- /* Get the STAId from data */
- skbStaIdx = *(v_U8_t *)(((v_U8_t *)(skb->data)) - 1);
- if (skbStaIdx == STAId)
- {
- /* Data for STAId is freed along with the queue node */
+ /* Get the STAId from data */
+ skbStaIdx = *(v_U8_t *)(((v_U8_t *)(skb->data)) - 1);
+ if (skbStaIdx == STAId) {
+ /* Data for STAId is freed along with the queue node */
- list_del(tmp);
- kfree_skb(skb);
+ list_del(tmp);
+ kfree_skb(skb);
- pAdapter->wmm_tx_queue[i].count--;
- }
+ pAdapter->wmm_tx_queue[i].count--;
}
}
@@ -439,7 +435,7 @@ static void hdd_get_transmit_sta_id(hdd_adapter_t *adapter,
* overwritten for UC traffic in NAN data mode
*/
if (mcbc_addr)
- *station_id = NDP_BROADCAST_STAID;
+ *station_id = sta_ctx->broadcast_staid;
} else {
/* For the rest, traffic is directed to AP/P2P GO */
if (eConnectionState_Associated == sta_ctx->conn_info.connState)
@@ -497,9 +493,32 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
while (skb) {
skb_next = skb->next;
+ /* memset skb control block */
+ vos_mem_zero(skb->cb, sizeof(skb->cb));
+ wlan_hdd_classify_pkt(skb);
+
pDestMacAddress = (v_MACADDR_t*)skb->data;
STAId = HDD_WLAN_INVALID_STA_ID;
+/*
+* The TCP TX throttling logic is changed a little after 3.19-rc1 kernel,
+* the TCP sending limit will be smaller, which will throttle the TCP packets
+* to the host driver. The TCP UP LINK throughput will drop heavily.
+* In order to fix this issue, need to orphan the socket buffer asap, which will
+* call skb's destructor to notify the TCP stack that the SKB buffer is
+* unowned. And then the TCP stack will pump more packets to host driver.
+*
+* The TX packets might be dropped for UDP case in the iperf testing.
+* So need to be protected by follow control.
+*/
+#ifdef QCA_LL_TX_FLOW_CT
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(3,19,0))
+ if (pAdapter->tx_flow_low_watermark > 0) {
+ skb_orphan(skb);
+ }
+#endif
+#endif
+
hdd_get_transmit_sta_id(pAdapter, pDestMacAddress, &STAId);
if (STAId == HDD_WLAN_INVALID_STA_ID) {
hddLog(LOGE, "Invalid station id, transmit operation suspended");
@@ -653,7 +672,7 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
list_tail->next = skb;
list_tail = list_tail->next;
}
- vos_mem_zero(skb->cb, sizeof(skb->cb));
+
adf_dp_trace_log_pkt(pAdapter->sessionId, skb, ADF_TX);
NBUF_SET_PACKET_TRACK(skb, NBUF_TX_PKT_DATA_TRACK);
NBUF_UPDATE_TX_PKT_COUNT(skb, NBUF_TX_PKT_HDD);
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index d869e540b644..eab72290912a 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -48,7 +48,6 @@
#include <linux/wireless.h>
#include <macTrace.h>
#include <wlan_hdd_includes.h>
-#include <wlan_btc_svc.h>
#include <wlan_nlink_common.h>
#include <vos_api.h>
#include <net/arp.h>
@@ -581,6 +580,11 @@ static const struct qwlan_hw qwlan_hw_list[] = {
.id = QCA9379_REV1_VERSION,
.subid = 0xC,
.name = "QCA9379_REV1",
+ },
+ {
+ .id = QCA9379_REV1_VERSION,
+ .subid = 0xD,
+ .name = "QCA9379_REV1_1",
}
};
@@ -1582,12 +1586,8 @@ void hdd_clearRoamProfileIe( hdd_adapter_t *pAdapter)
pWextState->authKeyMgmt = 0;
for (i=0; i < CSR_MAX_NUM_KEY; i++)
- {
- if (pWextState->roamProfile.Keys.KeyMaterial[i])
- {
- pWextState->roamProfile.Keys.KeyLength[i] = 0;
- }
- }
+ pWextState->roamProfile.Keys.KeyLength[i] = 0;
+
#ifdef FEATURE_WLAN_WAPI
pAdapter->wapi_info.wapiAuthMode = WAPI_AUTH_MODE_OPEN;
pAdapter->wapi_info.nWapiMode = 0;
@@ -3012,14 +3012,10 @@ static int __iw_get_encode(struct net_device *dev, struct iw_request_info *info,
for(i=0; i < MAX_WEP_KEYS; i++)
{
- if(pRoamProfile->Keys.KeyMaterial[i] == NULL)
- {
+ if (pRoamProfile->Keys.KeyLength[i] == 0)
continue;
- }
else
- {
break;
- }
}
if(MAX_WEP_KEYS == i)
@@ -4249,6 +4245,9 @@ VOS_STATUS wlan_hdd_set_powersave(hdd_adapter_t *pAdapter, int mode)
"enabled in the cfg");
}
}
+ spin_lock(&hdd_context_lock);
+ context.magic = 0;
+ spin_unlock(&hdd_context_lock);
return VOS_STATUS_SUCCESS;
}
@@ -4522,11 +4521,8 @@ static int __iw_set_encode(struct net_device *dev,struct iw_request_info *info,
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "****iwconfig wlan0 key off*****");
if(!fKeyPresent) {
- for(i=0;i < CSR_MAX_NUM_KEY; i++) {
-
- if(pWextState->roamProfile.Keys.KeyMaterial[i])
+ for(i=0;i < CSR_MAX_NUM_KEY; i++)
pWextState->roamProfile.Keys.KeyLength[i] = 0;
- }
}
pHddStaCtx->conn_info.authType = eCSR_AUTH_TYPE_OPEN_SYSTEM;
pWextState->wpaVersion = IW_AUTH_WPA_VERSION_DISABLED;
@@ -4703,7 +4699,7 @@ static int __iw_get_encodeext(struct net_device *dev,
for(i=0; i < MAX_WEP_KEYS; i++)
{
- if(pRoamProfile->Keys.KeyMaterial[i] == NULL)
+ if (pRoamProfile->Keys.KeyLength[i] == 0)
{
continue;
}
@@ -4826,8 +4822,8 @@ static int __iw_set_encodeext(struct net_device *dev,
}
else {
/*Static wep, update the roam profile with the keys */
- if(ext->key && (ext->key_len <= eCSR_SECURITY_WEP_KEYSIZE_MAX_BYTES) &&
- key_index < CSR_MAX_NUM_KEY) {
+ if ((ext->key_len <= eCSR_SECURITY_WEP_KEYSIZE_MAX_BYTES) &&
+ (key_index < CSR_MAX_NUM_KEY)) {
vos_mem_copy(&pRoamProfile->Keys.KeyMaterial[key_index][0],ext->key,ext->key_len);
pRoamProfile->Keys.KeyLength[key_index] = (v_U8_t)ext->key_len;
@@ -8653,8 +8649,8 @@ static int __iw_set_var_ints_getnone(struct net_device *dev,
__func__, apps_args[0], apps_args[1], apps_args[2],
apps_args[3], apps_args[4]);
if (hHal)
- logPrintf(hHal, apps_args[0], apps_args[1], apps_args[2],
- apps_args[3], apps_args[4]);
+ return logPrintf(hHal, apps_args[0], apps_args[1],
+ apps_args[2], apps_args[3], apps_args[4]);
}
break;
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index a455b7cf2ea7..a3b53c3b57c7 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -2672,6 +2672,7 @@ hdd_wlan_wmm_status_e hdd_wmm_delts( hdd_adapter_t* pAdapter,
case SME_QOS_STATUS_RELEASE_FAILURE_RSP:
// nothing we can do with the existing flow except leave it
status = HDD_WLAN_WMM_STATUS_RELEASE_FAILED;
+ break;
default:
// we didn't get back one of the SME_QOS_STATUS_RELEASE_* status codes
@@ -2679,6 +2680,7 @@ hdd_wlan_wmm_status_e hdd_wmm_delts( hdd_adapter_t* pAdapter,
"%s: unexpected SME Status=%d", __func__, smeStatus );
VOS_ASSERT(0);
status = HDD_WLAN_WMM_STATUS_RELEASE_FAILED;
+ break;
}
#endif
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 9ec0c282ef1d..1b81adc18f10 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -74,7 +74,6 @@ typedef struct sAniSirGlobal *tpAniSirGlobal;
#include "smeInternal.h"
#include "sapApi.h"
#include "ccmApi.h"
-#include "btcApi.h"
#include "csrInternal.h"
#ifdef FEATURE_OEM_DATA_SUPPORT
@@ -541,6 +540,8 @@ typedef struct sAniSirLim
tANI_U8 abortScan;
tLimScanChnInfo scanChnInfo;
+ struct lim_scan_channel_status scan_channel_status;
+
////////////////////////////////////// SCAN/LEARN RELATED START ///////////////////////////////////////////
tSirMacAddr gSelfMacAddr; //added for BT-AMP Support
@@ -1213,7 +1214,6 @@ typedef struct sAniSirGlobal
tOemDataStruct oemData;
#endif
tPmcInfo pmc;
- tSmeBtcInfo btc;
tCcm ccm;
@@ -1283,6 +1283,9 @@ typedef struct sAniSirGlobal
int8_t first_scan_bucket_threshold;
sir_mgmt_frame_ind_callback mgmt_frame_ind_cb;
sir_p2p_ack_ind_callback p2p_ack_ind_cb;
+ bool snr_monitor_enabled;
+ /* channel information callback */
+ void (*chan_info_cb)(struct scan_chan_info *chan_info);
} tAniSirGlobal;
typedef enum
diff --git a/CORE/MAC/inc/logDump.h b/CORE/MAC/inc/logDump.h
index 734df7aa8bf0..d8a22627fa3f 100644
--- a/CORE/MAC/inc/logDump.h
+++ b/CORE/MAC/inc/logDump.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -64,6 +64,18 @@ typedef struct sRegList {
int log_sprintf(tpAniSirGlobal pMac, char *pBuf, char *fmt, ... );
+#ifdef ANI_LOGDUMP
+int logPrintf(tpAniSirGlobal mac, tANI_U32 cmd,
+ tANI_U32 arg1, tANI_U32 arg2,
+ tANI_U32 arg3, tANI_U32 arg4);
+#else
+static inline void logPrintf(tpAniSirGlobal mac, tANI_U32 cmd,
+ tANI_U32 arg1, tANI_U32 arg2,
+ tANI_U32 arg3, tANI_U32 arg4)
+{
+ return;
+}
+#endif
char *
dump_log_level_set( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p);
diff --git a/CORE/MAC/inc/macTrace.h b/CORE/MAC/inc/macTrace.h
index 0377885b94b2..41b39c805a1f 100644
--- a/CORE/MAC/inc/macTrace.h
+++ b/CORE/MAC/inc/macTrace.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -44,17 +44,13 @@
#include "aniGlobal.h"
-
-#ifdef TRACE_RECORD
-
#define MAC_TRACE_GET_MODULE_ID(data) ((data >> 8) & 0xff)
#define MAC_TRACE_GET_MSG_ID(data) (data & 0xffff)
-
#define eLOG_NODROP_MISSED_BEACON_SCENARIO 0
#define eLOG_PROC_DEAUTH_FRAME_SCENARIO 1
-
+#ifdef TRACE_RECORD
void macTraceReset(tpAniSirGlobal pMac);
void macTrace(tpAniSirGlobal pMac, tANI_U8 code, tANI_U16 session,
tANI_U32 data);
@@ -66,8 +62,6 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg );
tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg );
tANI_U8* macTraceGetModuleString( tANI_U8 moduleId);
tANI_U8* macTraceGetInfoLogString( tANI_U16 infoLog );
-eHalStatus pe_AcquireGlobalLock( tAniSirLim *psPe);
-eHalStatus pe_ReleaseGlobalLock( tAniSirLim *psPe);
tANI_U8* macTraceGetHDDWlanConnState(tANI_U16 connState);
@@ -81,7 +75,47 @@ tANI_U8* macTraceGetcsrRoamSubState(tANI_U16 csrRoamSubState);
tANI_U8* macTraceGetLimSmeState(tANI_U16 limState);
tANI_U8* macTraceGetLimMlmState(tANI_U16 mlmState);
tANI_U8* macTraceGetTLState(tANI_U16 tlState);
-
+#else
+static inline tANI_U8*
+macTraceGetWdaMsgString( tANI_U16 wdamsg )
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetHDDWlanConnState(tANI_U16 connstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetNeighbourRoamState(tANI_U16 neighbourroamstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetcsrRoamState(tANI_U16 csrroamstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetcsrRoamSubState(tANI_U16 csrroamsubstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetLimSmeState(tANI_U16 limstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetLimMlmState(tANI_U16 mlmstate)
+{
+ return NULL;
+}
+static inline tANI_U8*
+macTraceGetTLState(tANI_U16 tlstate)
+{
+ return NULL;
+}
#endif
#endif
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 54304d6b882f..90af00c62e9d 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 11
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 144
+#define QWLAN_VERSION_BUILD 176
-#define QWLAN_VERSIONSTR "4.0.11.144"
+#define QWLAN_VERSIONSTR "4.0.11.176"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 0865d17ad680..2e59e619b95b 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -102,6 +102,14 @@ typedef tANI_U8 tSirVersionString[SIR_VERSION_STRING_LEN];
#define NUM_CHAINS_MAX 2
+#ifdef ACS_FW_REPORT_PARAM
+#define SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST SIR_MAX_SUPPORTED_CHANNEL_LIST
+#define ACS_FW_REPORT_PARAM_CONFIGURED true
+#else
+#define SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST 1
+#define ACS_FW_REPORT_PARAM_CONFIGURED false
+#endif
+
typedef enum
{
eSIR_EXTSCAN_INVALID,
@@ -1722,6 +1730,15 @@ typedef struct sSirSmeDeauthCnf
tSirMacAddr peerMacAddr;
} tSirSmeDeauthCnf, *tpSirSmeDeauthCnf;
+/* Definition for disconnect done indication */
+typedef struct sSirSmeDisConDoneInd {
+ tANI_U16 messageType;
+ tANI_U16 length;
+ tANI_U8 sessionId;
+ tSirResultCodes reasonCode;
+ tSirMacAddr peerMacAddr;
+} tSirSmeDisConDoneInd, *tpSirSmeDisConDoneInd;
+
/// Definition for stop BSS request message
typedef struct sSirSmeStopBssReq
{
@@ -2969,6 +2986,32 @@ typedef struct sLimScanChn
tANI_U8 channelId;
}tLimScanChn;
+/**
+ * struct lim_channel_status
+ * @channelfreq: Channel freq
+ * @noise_floor: Noise Floor value
+ * @rx_clear_count: rx clear count
+ * @cycle_count: cycle count
+ * @chan_tx_pwr_range: channel tx power per range in 0.5dBm steps
+ * @chan_tx_pwr_throughput: channel tx power per throughput
+ * @rx_frame_count: rx frame count (cumulative)
+ * @bss_rx_cycle_count: BSS rx cycle count
+ * @rx_11b_mode_data_duration: b-mode data rx time (units are microseconds)
+ * @channel_id: channel index
+ */
+struct lim_channel_status {
+ uint32_t channelfreq;
+ uint32_t noise_floor;
+ uint32_t rx_clear_count;
+ uint32_t cycle_count;
+ uint32_t chan_tx_pwr_range;
+ uint32_t chan_tx_pwr_throughput;
+ uint32_t rx_frame_count;
+ uint32_t bss_rx_cycle_count;
+ uint32_t rx_11b_mode_data_duration;
+ uint32_t channel_id;
+};
+
typedef struct sSmeGetScanChnRsp
{
// Message Type
@@ -2986,6 +3029,17 @@ typedef struct sLimScanChnInfo
tLimScanChn scanChn[SIR_MAX_SUPPORTED_CHANNEL_LIST];
}tLimScanChnInfo;
+/**
+ * struct lim_scan_channel_status
+ * @total_channel: total number of be scanned channel
+ * @channel_status_list: channel status info store in this array
+ */
+struct lim_scan_channel_status {
+ uint8_t total_channel;
+ struct lim_channel_status
+ channel_status_list[SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST];
+};
+
typedef struct sSirSmeGetAssocSTAsReq
{
tANI_U16 messageType; // eWNI_SME_GET_ASSOC_STAS_REQ
@@ -4333,6 +4387,7 @@ typedef struct
tANI_U16 transactionId; // Transaction ID for cmd
tSirResultCodes statusCode;
tSirMacAddr peerMac;
+ uint16_t sta_idx;
}tSirTdlsLinkEstablishReqRsp, *tpSirTdlsLinkEstablishReqRsp;
/* TDLS Request struct SME-->PE */
@@ -6010,6 +6065,8 @@ typedef struct
tSirMacAddr peerMacAddress;
/* peer WIFI_CAPABILITY_XXX */
tANI_U32 capabilities;
+ /* peer power saving mode */
+ uint32_t power_saving;
/* number of rates */
tANI_U32 numRate;
/* per rate statistics, number of entries = num_rate */
@@ -6140,6 +6197,21 @@ typedef struct
/** Clear particular peer stats depending on the peer_mac */
#define WIFI_STATS_IFACE_PER_PEER 0x00000200
+/**
+ * struct sir_wifi_iface_tx_fail - TX failure event
+ * @tid: TX TID
+ * @msdu_num: TX MSDU failed counter
+ * @status: failure status
+ * 1: TX packet discarded
+ * 2: No ACK
+ * 3: Postpone
+ */
+struct sir_wifi_iface_tx_fail {
+ uint8_t tid;
+ uint16_t msdu_num;
+ uint32_t status;
+};
+
typedef struct
{
tANI_U32 paramId;
@@ -6157,6 +6229,11 @@ typedef struct
tANI_U8 results[0];
} tSirLLStatsResults, *tpSirLLStatsResults;
+/* Result ID for LL stats extension */
+#define WMI_LL_STATS_EXT_PS_CHG 0x00000100
+#define WMI_LL_STATS_EXT_TX_FAIL 0x00000200
+#define WMI_LL_STATS_EXT_MAC_COUNTER 0x00000400
+
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
typedef struct sAniGetLinkStatus
@@ -6762,6 +6839,23 @@ struct wow_pulse_mode {
};
/*
+ * struct wakeup_gpio_mode
+ * @host_wakeup_gpio: GPIO num used to wakeup host
+ * @host_wakeup_type: Wakeup type for host. Refer to WMI_WAKE_GPIO_TYPE
+ * @target_wakeup_gpio: GPIO num used to wakeup target
+ * @target_wakeup_type: Wakeup type for target. Refer to WMI_WAKE_GPIO_TYPE
+ *
+ * SME uses this structure to configure wakeup gpio info
+ * and send it to WMA
+ */
+struct wakeup_gpio_mode {
+ uint32_t host_wakeup_gpio;
+ uint32_t host_wakeup_type;
+ uint32_t target_wakeup_gpio;
+ uint32_t target_wakeup_type;
+};
+
+/*
* struct egap_params - the enhanced green ap params
* @vdev_id: vdev id
* @enable: enable or disable the enhance green ap in firmware
@@ -6778,6 +6872,7 @@ struct egap_conf_params {
uint32_t flags;
};
+#define SIR_BCN_FLT_MAX_ELEMS_IE_LIST 8
/**
* struct beacon_filter_param - parameters for beacon filtering
* @vdev_id: vdev id
@@ -6786,7 +6881,7 @@ struct egap_conf_params {
*/
struct beacon_filter_param {
uint32_t vdev_id;
- uint32_t ie_map[8];
+ uint32_t ie_map[SIR_BCN_FLT_MAX_ELEMS_IE_LIST];
};
/**
@@ -7212,6 +7307,7 @@ struct ndp_app_info {
struct ndi_create_rsp {
uint32_t status;
uint32_t reason;
+ uint8_t sta_id;
};
/**
@@ -7524,4 +7620,24 @@ struct sme_sta_inactivity_timeout {
uint8_t session_id;
uint32_t sta_inactivity_timeout;
};
+
+/**
+ * struct scan_chan_info - channel info
+ * @freq: radio frequence
+ * @cmd flag: cmd flag
+ * @noise_floor: noise floor
+ * @cycle_count: cycle count
+ * @rx_clear_count: rx clear count
+ * @tx_frame_count: TX frame count
+ * @clock_freq: clock frequence MHZ
+ */
+struct scan_chan_info {
+ uint32_t freq;
+ uint32_t cmd_flag;
+ uint32_t noise_floor;
+ uint32_t cycle_count;
+ uint32_t rx_clear_count;
+ uint32_t tx_frame_count;
+ uint32_t clock_freq;
+};
#endif /* __SIR_API_H */
diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h
index 5e0a6d0ed7bf..324a5871d074 100644
--- a/CORE/MAC/inc/sirMacProtDef.h
+++ b/CORE/MAC/inc/sirMacProtDef.h
@@ -41,7 +41,7 @@
#include "palTypes.h"
#include "sirTypes.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
///Capability information related
@@ -458,6 +458,10 @@
#define SIR_MAC_CISCO_OUI "\x00\x40\x96"
#define SIR_MAC_CISCO_OUI_SIZE 3
+/* WFA vendor specific TPC OUI */
+#define SIR_MAC_WFA_TPC_OUI "\x00\x50\xF2\x08\x00"
+#define SIR_MAC_WFA_TPC_OUI_SIZE 5
+
// min size of wme oui header: oui(3) + type + subtype + version
#define SIR_MAC_OUI_WME_HDR_MIN 6
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index ee0e37bfcddb..6372d291e589 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -114,6 +114,7 @@ enum eWniMsgTypes
eWNI_SME_DEAUTH_REQ,
eWNI_SME_DEAUTH_RSP,
eWNI_SME_DEAUTH_IND,
+ eWNI_SME_DISCONNECT_DONE_IND,
eWNI_SME_WM_STATUS_CHANGE_NTF,
eWNI_SME_IBSS_NEW_PEER_IND,
eWNI_SME_IBSS_PEER_DEPARTED_IND,
@@ -277,8 +278,6 @@ enum eWniMsgTypes
eWNI_SME_REGISTER_MGMT_FRAME_REQ,
- eWNI_SME_COEX_IND,
-
#ifdef FEATURE_WLAN_SCAN_PNO
eWNI_SME_PREF_NETWORK_FOUND_IND,
#endif // FEATURE_WLAN_SCAN_PNO
@@ -420,6 +419,9 @@ enum eWniMsgTypes
eWNI_SME_REGISTER_P2P_ACK_CB,
eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE,
+ /* Link layer statistics */
+ eWMI_SME_LL_STATS_IND,
+
eWNI_SME_MSG_TYPES_END
};
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
deleted file mode 100644
index dbc5ab58d29f..000000000000
--- a/CORE/MAC/inc/wniCfgAp.h
+++ /dev/null
@@ -1,2548 +0,0 @@
-/*
- * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/*
- * DO NOT EDIT - This file is generated automatically
- */
-
-/*
- * IMPORTANT: This file is for system that supports both STA and AP mode.
- */
-
-
-#ifndef __WNICFGAP_H
-#define __WNICFGAP_H
-
-/*
- * Configuration Parameter ID for STA and AP
- */
-
-#define WNI_CFG_STA_ID 0
-#define WNI_CFG_CF_POLLABLE 1
-#define WNI_CFG_CFP_PERIOD 2
-#define WNI_CFG_CFP_MAX_DURATION 3
-#define WNI_CFG_SSID 4
-#define WNI_CFG_BEACON_INTERVAL 5
-#define WNI_CFG_DTIM_PERIOD 6
-#define WNI_CFG_WEP_KEY_LENGTH 7
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE 8
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE_ROW 4
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE_COL 1
-#define WNI_CFG_WEP_DEFAULT_KEY_1 8
-#define WNI_CFG_WEP_DEFAULT_KEY_2 9
-#define WNI_CFG_WEP_DEFAULT_KEY_3 10
-#define WNI_CFG_WEP_DEFAULT_KEY_4 11
-#define WNI_CFG_WEP_DEFAULT_KEYID 12
-#define WNI_CFG_EXCLUDE_UNENCRYPTED 13
-#define WNI_CFG_RTS_THRESHOLD 14
-#define WNI_CFG_SHORT_RETRY_LIMIT 15
-#define WNI_CFG_LONG_RETRY_LIMIT 16
-#define WNI_CFG_FRAGMENTATION_THRESHOLD 17
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME 18
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME 19
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME 20
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME 21
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT 22
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT 23
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT 24
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT 25
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT 26
-#define WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS 27
-#define WNI_CFG_PS_ENABLE_BCN_FILTER 28
-#define WNI_CFG_PS_ENABLE_HEART_BEAT 29
-#define WNI_CFG_PS_ENABLE_RSSI_MONITOR 30
-#define WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT 31
-#define WNI_CFG_RF_SETTLING_TIME_CLK 32
-#define WNI_CFG_SUPPORTED_RATES_11B 33
-#define WNI_CFG_SUPPORTED_RATES_11A 34
-#define WNI_CFG_PHY_MODE 35
-#define WNI_CFG_DOT11_MODE 36
-#define WNI_CFG_OPERATIONAL_RATE_SET 37
-#define WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET 38
-#define WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET 39
-#define WNI_CFG_LISTEN_INTERVAL 40
-#define WNI_CFG_VALID_CHANNEL_LIST 41
-#define WNI_CFG_CURRENT_CHANNEL 42
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ 43
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ 44
-#define WNI_CFG_RATE_ADAPTATION_TYPE 45
-#define WNI_CFG_FIXED_RATE 46
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ 47
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ 48
-#define WNI_CFG_RETRYRATE_POLICY 49
-#define WNI_CFG_RETRYRATE_SECONDARY 50
-#define WNI_CFG_RETRYRATE_TERTIARY 51
-#define WNI_CFG_APSD_ENABLED 52
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE 53
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE 54
-#define WNI_CFG_AUTHENTICATION_TYPE 55
-#define WNI_CFG_CF_POLL_REQUEST 56
-#define WNI_CFG_PRIVACY_ENABLED 57
-#define WNI_CFG_SHORT_PREAMBLE 58
-#define WNI_CFG_SHORT_SLOT_TIME 59
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY 60
-#define WNI_CFG_QOS_ENABLED 61
-#define WNI_CFG_HCF_ENABLED 62
-#define WNI_CFG_RSN_ENABLED 63
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD 64
-#define WNI_CFG_MAX_NUM_PRE_AUTH 65
-#define WNI_CFG_PREAUTH_CLNUP_TIMEOUT 66
-#define WNI_CFG_RELEASE_AID_TIMEOUT 67
-#define WNI_CFG_HEART_BEAT_THRESHOLD 68
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT 69
-#define WNI_CFG_MANUFACTURER_OUI 70
-#define WNI_CFG_MANUFACTURER_NAME 71
-#define WNI_CFG_MODEL_NUMBER 72
-#define WNI_CFG_MODEL_NAME 73
-#define WNI_CFG_MANUFACTURER_PRODUCT_NAME 74
-#define WNI_CFG_MANUFACTURER_PRODUCT_VERSION 75
-#define WNI_CFG_11D_ENABLED 76
-#define WNI_CFG_MAX_TX_POWER_2_4 77
-#define WNI_CFG_MAX_TX_POWER_5 78
-#define WNI_CFG_NETWORK_DENSITY 79
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM 80
-#define WNI_CFG_CURRENT_TX_ANTENNA 81
-#define WNI_CFG_CURRENT_RX_ANTENNA 82
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL 83
-#define WNI_CFG_NEW_BSS_FOUND_IND 84
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED 85
-#define WNI_CFG_AP_NODE_NAME 86
-#define WNI_CFG_COUNTRY_CODE 87
-#define WNI_CFG_11H_ENABLED 88
-#define WNI_CFG_WT_CNF_TIMEOUT 89
-#define WNI_CFG_KEEPALIVE_TIMEOUT 90
-#define WNI_CFG_PROXIMITY 91
-#define WNI_CFG_LOG_LEVEL 92
-#define WNI_CFG_OLBC_DETECT_TIMEOUT 93
-#define WNI_CFG_PROTECTION_ENABLED 94
-#define WNI_CFG_11G_PROTECTION_ALWAYS 95
-#define WNI_CFG_FORCE_POLICY_PROTECTION 96
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED 97
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED 98
-#define WNI_CFG_11G_ONLY_POLICY 99
-#define WNI_CFG_PACKET_CLASSIFICATION 100
-#define WNI_CFG_WME_ENABLED 101
-#define WNI_CFG_ADDTS_RSP_TIMEOUT 102
-#define WNI_CFG_MAX_SP_LENGTH 103
-#define WNI_CFG_KEEP_ALIVE_STA_LIMIT_THRESHOLD 104
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS 105
-#define WNI_CFG_WSM_ENABLED 106
-#define WNI_CFG_EDCA_PROFILE 107
-#define WNI_CFG_EDCA_ANI_ACBK_LOCAL 108
-#define WNI_CFG_EDCA_ANI_ACBE_LOCAL 109
-#define WNI_CFG_EDCA_ANI_ACVI_LOCAL 110
-#define WNI_CFG_EDCA_ANI_ACVO_LOCAL 111
-#define WNI_CFG_EDCA_ANI_ACBK 112
-#define WNI_CFG_EDCA_ANI_ACBE 113
-#define WNI_CFG_EDCA_ANI_ACVI 114
-#define WNI_CFG_EDCA_ANI_ACVO 115
-#define WNI_CFG_EDCA_WME_ACBK_LOCAL 116
-#define WNI_CFG_EDCA_WME_ACBE_LOCAL 117
-#define WNI_CFG_EDCA_WME_ACVI_LOCAL 118
-#define WNI_CFG_EDCA_WME_ACVO_LOCAL 119
-#define WNI_CFG_EDCA_WME_ACBK 120
-#define WNI_CFG_EDCA_WME_ACBE 121
-#define WNI_CFG_EDCA_WME_ACVI 122
-#define WNI_CFG_EDCA_WME_ACVO 123
-#define WNI_CFG_RDET_FLAG 124
-#define WNI_CFG_RADAR_CHANNEL_LIST 125
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT 126
-#define WNI_CFG_ADMIT_POLICY 127
-#define WNI_CFG_ADMIT_BWFACTOR 128
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE 129
-#define WNI_CFG_CHANNEL_BONDING_MODE 130
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE 131
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO 132
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE 133
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO 134
-#define WNI_CFG_TRIG_STA_BK_SCAN 135
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING 136
-#define WNI_CFG_SCAN_CONTROL_LIST 137
-#define WNI_CFG_MIMO_ENABLED 138
-#define WNI_CFG_BLOCK_ACK_ENABLED 139
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT 140
-#define WNI_CFG_HT_RX_STBC 141
-#define WNI_CFG_HT_CAP_INFO 142
-#define WNI_CFG_HT_AMPDU_PARAMS 143
-#define WNI_CFG_SUPPORTED_MCS_SET 144
-#define WNI_CFG_EXT_HT_CAP_INFO 145
-#define WNI_CFG_TX_BF_CAP 146
-#define WNI_CFG_AS_CAP 147
-#define WNI_CFG_HT_INFO_FIELD1 148
-#define WNI_CFG_HT_INFO_FIELD2 149
-#define WNI_CFG_HT_INFO_FIELD3 150
-#define WNI_CFG_BASIC_MCS_SET 151
-#define WNI_CFG_CURRENT_MCS_SET 152
-#define WNI_CFG_GREENFIELD_CAPABILITY 153
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH 154
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET 155
-#define WNI_CFG_VHT_LDPC_CODING_CAP 156
-#define WNI_CFG_VHT_SHORT_GI_80MHZ 157
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ 158
-#define WNI_CFG_VHT_TXSTBC 159
-#define WNI_CFG_VHT_RXSTBC 160
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP 161
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP 162
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED 163
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS 164
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP 165
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP 166
-#define WNI_CFG_VHT_TXOP_PS 167
-#define WNI_CFG_VHT_HTC_VHTC_CAP 168
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT 169
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP 170
-#define WNI_CFG_VHT_RX_ANT_PATTERN 171
-#define WNI_CFG_VHT_TX_ANT_PATTERN 172
-#define WNI_CFG_VHT_RX_MCS_MAP 173
-#define WNI_CFG_VHT_TX_MCS_MAP 174
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE 175
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE 176
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1 177
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2 178
-#define WNI_CFG_VHT_BASIC_MCS_SET 179
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT 180
-#define WNI_CFG_VHT_SS_UNDER_UTIL 181
-#define WNI_CFG_VHT_40MHZ_UTILIZATION 182
-#define WNI_CFG_VHT_80MHZ_UTILIZATION 183
-#define WNI_CFG_VHT_160MHZ_UTILIZATION 184
-#define WNI_CFG_MAX_AMSDU_LENGTH 185
-#define WNI_CFG_MPDU_DENSITY 186
-#define WNI_CFG_NUM_BUFF_ADVERT 187
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR 188
-#define WNI_CFG_SHORT_GI_20MHZ 189
-#define WNI_CFG_SHORT_GI_40MHZ 190
-#define WNI_CFG_RIFS_ENABLED 191
-#define WNI_CFG_MAX_PS_POLL 192
-#define WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE 193
-#define WNI_CFG_RSSI_FILTER_PERIOD 194
-#define WNI_CFG_MIN_RSSI_THRESHOLD 195
-#define WNI_CFG_NTH_BEACON_FILTER 196
-#define WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE 197
-#define WNI_CFG_SCAN_IN_POWERSAVE 198
-#define WNI_CFG_IGNORE_DTIM 199
-#define WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE 200
-#define WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE 201
-#define WNI_CFG_WOWLAN_DEAUTH_ENABLE 202
-#define WNI_CFG_WOWLAN_DISASSOC_ENABLE 203
-#define WNI_CFG_WOWLAN_MAX_MISSED_BEACON 204
-#define WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD 205
-#define WNI_CFG_BA_TIMEOUT 206
-#define WNI_CFG_BA_THRESHOLD_HIGH 207
-#define WNI_CFG_MAX_BA_BUFFERS 208
-#define WNI_CFG_MAX_BA_SESSIONS 209
-#define WNI_CFG_BA_AUTO_SETUP 210
-#define WNI_CFG_ADDBA_REQ_DECLINE 211
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC 212
-#define WNI_CFG_BG_SCAN_CHANNEL_LIST 213
-#define WNI_CFG_MAX_MEDIUM_TIME 214
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU 215
-#define WNI_CFG_IBSS_AUTO_BSSID 216
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 217
-#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 218
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 219
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 220
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 221
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 222
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 223
-#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 224
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 225
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 226
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 227
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 228
-#define WNI_CFG_WPS_ENABLE 229
-#define WNI_CFG_WPS_STATE 230
-#define WNI_CFG_WPS_PROBE_REQ_FLAG 231
-#define WNI_CFG_WPS_VERSION 232
-#define WNI_CFG_WPS_REQUEST_TYPE 233
-#define WNI_CFG_WPS_CFG_METHOD 234
-#define WNI_CFG_WPS_UUID 235
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 236
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 237
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 238
-#define WNI_CFG_WPS_ASSOCIATION_STATE 239
-#define WNI_CFG_WPS_CONFIGURATION_ERROR 240
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 241
-#define WNI_CFG_WPS_ASSOC_METHOD 242
-#define WNI_CFG_LOW_GAIN_OVERRIDE 243
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 244
-#define WNI_CFG_RPE_POLLING_THRESHOLD 245
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 246
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 247
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 248
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 249
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 250
-#define WNI_CFG_SINGLE_TID_RC 251
-#define WNI_CFG_TX_PWR_CTRL_ENABLE 252
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 253
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 254
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 255
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 256
-#define WNI_CFG_TELE_BCN_WAKEUP_EN 257
-#define WNI_CFG_TELE_BCN_TRANS_LI 258
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 259
-#define WNI_CFG_TELE_BCN_MAX_LI 260
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 261
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 262
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 263
-#define WNI_CFG_ASSOC_STA_LIMIT 264
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 265
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 266
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 267
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 268
-#define WNI_CFG_ENABLE_CLOSE_LOOP 269
-#define WNI_CFG_ENABLE_LTE_COEX 270
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 271
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 272
-#define WNI_CFG_ENABLE_MC_ADDR_LIST 273
-#define WNI_CFG_ENABLE_UC_FILTER 274
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 275
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 276
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 277
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 278
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 279
-#define WNI_CFG_TDLS_BUF_STA_ENABLED 280
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 281
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 282
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES 283
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL 284
-#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN 285
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 286
-#define WNI_CFG_ANTENNA_DIVESITY 287
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 288
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY 289
-#define WNI_CFG_CURRENT_RSSI 290
-#define WNI_CFG_RTT3_ENABLE 291
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL 292
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED 293
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE 294
-#define WNI_CFG_DFS_MASTER_ENABLED 295
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ 296
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED 297
-#define WNI_CFG_TGT_GTX_USR_CFG 298
-#define WNI_CFG_ASSOC_STA_LIMIT_GO 299
-#define WNI_CFG_ASSOC_STA_LIMIT_AP 300
-/*
- * String parameter lengths
- */
-
-#define WNI_CFG_STA_ID_LEN 6
-#define WNI_CFG_SSID_LEN 32
-#define WNI_CFG_WEP_DEFAULT_KEY_1_LEN 13
-#define WNI_CFG_WEP_DEFAULT_KEY_2_LEN 13
-#define WNI_CFG_WEP_DEFAULT_KEY_3_LEN 13
-#define WNI_CFG_WEP_DEFAULT_KEY_4_LEN 13
-#define WNI_CFG_SUPPORTED_RATES_11B_LEN 4
-#define WNI_CFG_SUPPORTED_RATES_11A_LEN 8
-#define WNI_CFG_OPERATIONAL_RATE_SET_LEN 12
-#define WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN 8
-#define WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET_LEN 4
-#define WNI_CFG_VALID_CHANNEL_LIST_LEN 100
-#define WNI_CFG_MANUFACTURER_OUI_LEN 3
-#define WNI_CFG_MANUFACTURER_NAME_LEN 64
-#define WNI_CFG_MODEL_NUMBER_LEN 32
-#define WNI_CFG_MODEL_NAME_LEN 32
-#define WNI_CFG_MANUFACTURER_PRODUCT_NAME_LEN 32
-#define WNI_CFG_MANUFACTURER_PRODUCT_VERSION_LEN 32
-#define WNI_CFG_MAX_TX_POWER_2_4_LEN 128
-#define WNI_CFG_MAX_TX_POWER_5_LEN 128
-#define WNI_CFG_AP_NODE_NAME_LEN 32
-#define WNI_CFG_COUNTRY_CODE_LEN 3
-#define WNI_CFG_EDCA_ANI_ACBK_LOCAL_LEN 20
-#define WNI_CFG_EDCA_ANI_ACBE_LOCAL_LEN 20
-#define WNI_CFG_EDCA_ANI_ACVI_LOCAL_LEN 20
-#define WNI_CFG_EDCA_ANI_ACVO_LOCAL_LEN 20
-#define WNI_CFG_EDCA_ANI_ACBK_LEN 20
-#define WNI_CFG_EDCA_ANI_ACBE_LEN 20
-#define WNI_CFG_EDCA_ANI_ACVI_LEN 20
-#define WNI_CFG_EDCA_ANI_ACVO_LEN 20
-#define WNI_CFG_EDCA_WME_ACBK_LOCAL_LEN 20
-#define WNI_CFG_EDCA_WME_ACBE_LOCAL_LEN 20
-#define WNI_CFG_EDCA_WME_ACVI_LOCAL_LEN 20
-#define WNI_CFG_EDCA_WME_ACVO_LOCAL_LEN 20
-#define WNI_CFG_EDCA_WME_ACBK_LEN 20
-#define WNI_CFG_EDCA_WME_ACBE_LEN 20
-#define WNI_CFG_EDCA_WME_ACVI_LEN 20
-#define WNI_CFG_EDCA_WME_ACVO_LEN 20
-#define WNI_CFG_RADAR_CHANNEL_LIST_LEN 20
-#define WNI_CFG_SCAN_CONTROL_LIST_LEN 128
-#define WNI_CFG_SUPPORTED_MCS_SET_LEN 16
-#define WNI_CFG_BASIC_MCS_SET_LEN 16
-#define WNI_CFG_CURRENT_MCS_SET_LEN 16
-#define WNI_CFG_BG_SCAN_CHANNEL_LIST_LEN 100
-#define WNI_CFG_PROBE_REQ_ADDNIE_DATA_LEN 255
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1_LEN 255
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2_LEN 255
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3_LEN 255
-#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA_LEN 255
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA_LEN 255
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA_LEN 255
-#define WNI_CFG_WPS_UUID_LEN 16
-
-/*
- * Integer parameter min/max/default values
- */
-
-#define WNI_CFG_CF_POLLABLE_APMIN 0
-#define WNI_CFG_CF_POLLABLE_APMAX 1
-#define WNI_CFG_CF_POLLABLE_APDEF 0
-
-#define WNI_CFG_CFP_PERIOD_STAMIN 0
-#define WNI_CFG_CFP_PERIOD_STAMAX 255
-#define WNI_CFG_CFP_PERIOD_STADEF 1
-
-#define WNI_CFG_CFP_PERIOD_APMIN 0
-#define WNI_CFG_CFP_PERIOD_APMAX 255
-#define WNI_CFG_CFP_PERIOD_APDEF 1
-
-#define WNI_CFG_CFP_MAX_DURATION_STAMIN 0
-#define WNI_CFG_CFP_MAX_DURATION_STAMAX 65535
-#define WNI_CFG_CFP_MAX_DURATION_STADEF 30000
-
-#define WNI_CFG_CFP_MAX_DURATION_APMIN 0
-#define WNI_CFG_CFP_MAX_DURATION_APMAX 65535
-#define WNI_CFG_CFP_MAX_DURATION_APDEF 30000
-
-#define WNI_CFG_BEACON_INTERVAL_STAMIN 0
-#define WNI_CFG_BEACON_INTERVAL_STAMAX 65535
-#define WNI_CFG_BEACON_INTERVAL_STADEF 100
-
-#define WNI_CFG_BEACON_INTERVAL_APMIN 0
-#define WNI_CFG_BEACON_INTERVAL_APMAX 65535
-#define WNI_CFG_BEACON_INTERVAL_APDEF 100
-
-#define WNI_CFG_DTIM_PERIOD_STAMIN 0
-#define WNI_CFG_DTIM_PERIOD_STAMAX 65535
-#define WNI_CFG_DTIM_PERIOD_STADEF 1
-
-#define WNI_CFG_DTIM_PERIOD_APMIN 0
-#define WNI_CFG_DTIM_PERIOD_APMAX 65535
-#define WNI_CFG_DTIM_PERIOD_APDEF 1
-
-#define WNI_CFG_WEP_KEY_LENGTH_STAMIN 5
-#define WNI_CFG_WEP_KEY_LENGTH_STAMAX 13
-#define WNI_CFG_WEP_KEY_LENGTH_STADEF 5
-
-#define WNI_CFG_WEP_KEY_LENGTH_APMIN 5
-#define WNI_CFG_WEP_KEY_LENGTH_APMAX 13
-#define WNI_CFG_WEP_KEY_LENGTH_APDEF 5
-
-#define WNI_CFG_WEP_KEY_LENGTH_5 5
-#define WNI_CFG_WEP_KEY_LENGTH_13 13
-
-#define WNI_CFG_WEP_DEFAULT_KEYID_STAMIN 0
-#define WNI_CFG_WEP_DEFAULT_KEYID_STAMAX 3
-#define WNI_CFG_WEP_DEFAULT_KEYID_STADEF 0
-
-#define WNI_CFG_WEP_DEFAULT_KEYID_APMIN 0
-#define WNI_CFG_WEP_DEFAULT_KEYID_APMAX 3
-#define WNI_CFG_WEP_DEFAULT_KEYID_APDEF 0
-
-#define WNI_CFG_WEP_DEFAULT_KEYID_0 0
-#define WNI_CFG_WEP_DEFAULT_KEYID_1 1
-#define WNI_CFG_WEP_DEFAULT_KEYID_2 2
-#define WNI_CFG_WEP_DEFAULT_KEYID_3 3
-
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_STAMIN 0
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_STAMAX 1
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_STADEF 0
-
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_APMIN 0
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_APMAX 1
-#define WNI_CFG_EXCLUDE_UNENCRYPTED_APDEF 0
-
-#define WNI_CFG_RTS_THRESHOLD_STAMIN 0
-#define WNI_CFG_RTS_THRESHOLD_STAMAX 1048576
-#define WNI_CFG_RTS_THRESHOLD_STADEF 2347
-
-#define WNI_CFG_RTS_THRESHOLD_APMIN 0
-#define WNI_CFG_RTS_THRESHOLD_APMAX 1048576
-#define WNI_CFG_RTS_THRESHOLD_APDEF 2347
-
-#define WNI_CFG_SHORT_RETRY_LIMIT_STAMIN 0
-#define WNI_CFG_SHORT_RETRY_LIMIT_STAMAX 255
-#define WNI_CFG_SHORT_RETRY_LIMIT_STADEF 6
-
-#define WNI_CFG_SHORT_RETRY_LIMIT_APMIN 0
-#define WNI_CFG_SHORT_RETRY_LIMIT_APMAX 255
-#define WNI_CFG_SHORT_RETRY_LIMIT_APDEF 6
-
-#define WNI_CFG_LONG_RETRY_LIMIT_STAMIN 0
-#define WNI_CFG_LONG_RETRY_LIMIT_STAMAX 255
-#define WNI_CFG_LONG_RETRY_LIMIT_STADEF 6
-
-#define WNI_CFG_LONG_RETRY_LIMIT_APMIN 0
-#define WNI_CFG_LONG_RETRY_LIMIT_APMAX 255
-#define WNI_CFG_LONG_RETRY_LIMIT_APDEF 6
-
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_STAMIN 256
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_STAMAX 8000
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_STADEF 8000
-
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_APMIN 256
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_APMAX 8000
-#define WNI_CFG_FRAGMENTATION_THRESHOLD_APDEF 8000
-
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_STAMIN 0
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_STAMAX 65535
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_STADEF 20
-
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_APMIN 0
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_APMAX 65535
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME_APDEF 20
-
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_STAMIN 0
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_STAMAX 65535
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_STADEF 40
-
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_APMIN 0
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_APMAX 65535
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME_APDEF 40
-
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_STAMIN 0
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_STAMAX 65535
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_STADEF 60
-
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_APMIN 0
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_APMAX 65535
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME_APDEF 60
-
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_STAMIN 0
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_STAMAX 65535
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_STADEF 110
-
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_APMIN 0
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_APMAX 65535
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME_APDEF 110
-
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_STAMIN 0
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_STADEF 3000
-
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_APMIN 0
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_APMAX 65535
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT_APDEF 3000
-
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_STAMIN 0
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_APMIN 0
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_APMAX 65535
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_STAMIN 0
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_STAMAX 65535
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_APMIN 0
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_APMAX 65535
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_STAMIN 0
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_STADEF 2000
-
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_APMIN 0
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_APMAX 65535
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT_APDEF 3000
-
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_STAMIN 0
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_APMIN 0
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_APMAX 65535
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT_APDEF 3000
-
-#define WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS_STAMIN 0
-#define WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS_STAMAX 65535
-#define WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS_STADEF 1000
-
-#define WNI_CFG_PS_ENABLE_BCN_FILTER_STAMIN 0
-#define WNI_CFG_PS_ENABLE_BCN_FILTER_STAMAX 1
-#define WNI_CFG_PS_ENABLE_BCN_FILTER_STADEF 1
-
-#define WNI_CFG_PS_ENABLE_HEART_BEAT_STAMIN 0
-#define WNI_CFG_PS_ENABLE_HEART_BEAT_STAMAX 1
-#define WNI_CFG_PS_ENABLE_HEART_BEAT_STADEF 1
-
-#define WNI_CFG_PS_ENABLE_RSSI_MONITOR_STAMIN 0
-#define WNI_CFG_PS_ENABLE_RSSI_MONITOR_STAMAX 1
-#define WNI_CFG_PS_ENABLE_RSSI_MONITOR_STADEF 0
-
-#define WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMIN 1
-#define WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT_STAMAX 255
-#define WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT_STADEF 20
-
-#define WNI_CFG_RF_SETTLING_TIME_CLK_STAMIN 0
-#define WNI_CFG_RF_SETTLING_TIME_CLK_STAMAX 60000
-#define WNI_CFG_RF_SETTLING_TIME_CLK_STADEF 1500
-
-#define WNI_CFG_PHY_MODE_STAMIN 0
-#define WNI_CFG_PHY_MODE_STAMAX 3
-#define WNI_CFG_PHY_MODE_STADEF 0
-
-#define WNI_CFG_PHY_MODE_APMIN 0
-#define WNI_CFG_PHY_MODE_APMAX 3
-#define WNI_CFG_PHY_MODE_APDEF 0
-
-#define WNI_CFG_PHY_MODE_11A 0
-#define WNI_CFG_PHY_MODE_11B 1
-#define WNI_CFG_PHY_MODE_11G 2
-#define WNI_CFG_PHY_MODE_NONE 3
-
-#define WNI_CFG_DOT11_MODE_STAMIN 0
-#define WNI_CFG_DOT11_MODE_STAMAX 11
-#define WNI_CFG_DOT11_MODE_STADEF 0
-
-#define WNI_CFG_DOT11_MODE_APMIN 0
-#define WNI_CFG_DOT11_MODE_APMAX 11
-#define WNI_CFG_DOT11_MODE_APDEF 0
-
-#define WNI_CFG_DOT11_MODE_ALL 0
-#define WNI_CFG_DOT11_MODE_11A 1
-#define WNI_CFG_DOT11_MODE_11B 2
-#define WNI_CFG_DOT11_MODE_11G 3
-#define WNI_CFG_DOT11_MODE_11N 4
-#define WNI_CFG_DOT11_MODE_11G_ONLY 5
-#define WNI_CFG_DOT11_MODE_11N_ONLY 6
-#define WNI_CFG_DOT11_MODE_11AC 7
-#define WNI_CFG_DOT11_MODE_11AC_ONLY 8
-
-#define WNI_CFG_LISTEN_INTERVAL_STAMIN 0
-#define WNI_CFG_LISTEN_INTERVAL_STAMAX 65535
-#define WNI_CFG_LISTEN_INTERVAL_STADEF 1
-
-#define WNI_CFG_LISTEN_INTERVAL_APMIN 0
-#define WNI_CFG_LISTEN_INTERVAL_APMAX 65535
-#define WNI_CFG_LISTEN_INTERVAL_APDEF 1
-
-#define WNI_CFG_CURRENT_CHANNEL_STAMIN 0
-#define WNI_CFG_CURRENT_CHANNEL_STAMAX 165
-#define WNI_CFG_CURRENT_CHANNEL_STADEF 1
-
-#define WNI_CFG_CURRENT_CHANNEL_APMIN 0
-#define WNI_CFG_CURRENT_CHANNEL_APMAX 165
-#define WNI_CFG_CURRENT_CHANNEL_APDEF 1
-
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMIN 0
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_STAMAX 11
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_STADEF 5
-
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_APMIN 0
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_APMAX 11
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ_APDEF 5
-
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMIN 0
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_STAMAX 31
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_STADEF 1
-
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_APMIN 0
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_APMAX 31
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ_APDEF 1
-
-#define WNI_CFG_RATE_ADAPTATION_TYPE_STAMIN 0
-#define WNI_CFG_RATE_ADAPTATION_TYPE_STAMAX 2
-#define WNI_CFG_RATE_ADAPTATION_TYPE_STADEF 1
-
-#define WNI_CFG_RATE_ADAPTATION_TYPE_APMIN 0
-#define WNI_CFG_RATE_ADAPTATION_TYPE_APMAX 2
-#define WNI_CFG_RATE_ADAPTATION_TYPE_APDEF 1
-
-#define WNI_CFG_RATE_ADAPTATION_TYPE_FIXED 0
-#define WNI_CFG_RATE_ADAPTATION_TYPE_AUTO 1
-#define WNI_CFG_RATE_ADAPTATION_TYPE_SNR_BASED 2
-
-#define WNI_CFG_FIXED_RATE_STAMIN 0
-#define WNI_CFG_FIXED_RATE_STAMAX 44
-#define WNI_CFG_FIXED_RATE_STADEF 0
-
-#define WNI_CFG_FIXED_RATE_APMIN 0
-#define WNI_CFG_FIXED_RATE_APMAX 44
-#define WNI_CFG_FIXED_RATE_APDEF 0
-
-#define WNI_CFG_FIXED_RATE_AUTO 0
-#define WNI_CFG_FIXED_RATE_1MBPS 1
-#define WNI_CFG_FIXED_RATE_2MBPS 2
-#define WNI_CFG_FIXED_RATE_5_5MBPS 3
-#define WNI_CFG_FIXED_RATE_11MBPS 4
-#define WNI_CFG_FIXED_RATE_6MBPS 5
-#define WNI_CFG_FIXED_RATE_9MBPS 6
-#define WNI_CFG_FIXED_RATE_12MBPS 7
-#define WNI_CFG_FIXED_RATE_18MBPS 8
-#define WNI_CFG_FIXED_RATE_24MBPS 9
-#define WNI_CFG_FIXED_RATE_36MBPS 10
-#define WNI_CFG_FIXED_RATE_48MBPS 11
-#define WNI_CFG_FIXED_RATE_54MBPS 12
-#define WNI_CFG_FIXED_RATE_6_5MBPS_MCS0_20MHZ_SIMO 13
-#define WNI_CFG_FIXED_RATE_13MBPS_MCS1_20MHZ_SIMO 14
-#define WNI_CFG_FIXED_RATE_19_5MBPS_MCS2_20MHZ_SIMO 15
-#define WNI_CFG_FIXED_RATE_26MBPS_MCS3_20MHZ_SIMO 16
-#define WNI_CFG_FIXED_RATE_39MBPS_MCS4_20MHZ_SIMO 17
-#define WNI_CFG_FIXED_RATE_52MBPS_MCS5_20MHZ_SIMO 18
-#define WNI_CFG_FIXED_RATE_58_5MBPS_MCS6_20MHZ_SIMO 19
-#define WNI_CFG_FIXED_RATE_65MBPS_MCS7_20MHZ_SIMO 20
-#define WNI_CFG_FIXED_RATE_7_2MBPS_MCS0_20MHZ_SIMO_SGI 21
-#define WNI_CFG_FIXED_RATE_14_4MBPS_MCS1_20MHZ_SIMO_SGI 22
-#define WNI_CFG_FIXED_RATE_21_7MBPS_MCS2_20MHZ_SIMO_SGI 23
-#define WNI_CFG_FIXED_RATE_28_9MBPS_MCS3_20MHZ_SIMO_SGI 24
-#define WNI_CFG_FIXED_RATE_43_3MBPS_MCS4_20MHZ_SIMO_SGI 25
-#define WNI_CFG_FIXED_RATE_57_8MBPS_MCS5_20MHZ_SIMO_SGI 26
-#define WNI_CFG_FIXED_RATE_65MBPS_MCS6_20MHZ_SIMO_SGI 27
-#define WNI_CFG_FIXED_RATE_72_2MBPS_MCS7_20MHZ_SIMO_SGI 28
-#define WNI_CFG_FIXED_RATE_0_25MBPS_SLR_20MHZ_SIMO 29
-#define WNI_CFG_FIXED_RATE_0_5MBPS_SLR_20MHZ_SIMO 30
-#define WNI_CFG_FIXED_RATE_68_25MBPS_QC_PROP_20MHZ_SIMO 31
-#define WNI_CFG_FIXED_RATE_54MBPS_MCS3_40MHZ_SIMO 32
-#define WNI_CFG_FIXED_RATE_81MBPS_MCS4_40MHZ_SIMO 33
-#define WNI_CFG_FIXED_RATE_108MBPS_MCS5_40MHZ_SIMO 34
-#define WNI_CFG_FIXED_RATE_121_5MBPS_MCS6_40MHZ_SIMO 35
-#define WNI_CFG_FIXED_RATE_135MBPS_MCS7_40MHZ_SIMO 36
-#define WNI_CFG_FIXED_RATE_15MBPS_MCS0_40MHZ_SIMO_SGI 37
-#define WNI_CFG_FIXED_RATE_30MBPS_MCS1_40MHZ_SIMO_SGI 38
-#define WNI_CFG_FIXED_RATE_45MBPS_MCS2_40MHZ_SIMO_SGI 39
-#define WNI_CFG_FIXED_RATE_60MBPS_MCS3_40MHZ_SIMO_SGI 40
-#define WNI_CFG_FIXED_RATE_90MBPS_MCS4_40MHZ_SIMO_SGI 41
-#define WNI_CFG_FIXED_RATE_120MBPS_MCS5_40MHZ_SIMO_SGI 42
-#define WNI_CFG_FIXED_RATE_135MBPS_MCS6_40MHZ_SIMO_SGI 43
-#define WNI_CFG_FIXED_RATE_150MBPS_MCS7_40MHZ_SIMO_SGI 44
-
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMIN 0
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STAMAX 31
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_STADEF 1
-
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_APMIN 0
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_APMAX 31
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ_APDEF 1
-
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMIN 0
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_STAMAX 31
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_STADEF 5
-
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_APMIN 0
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_APMAX 31
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ_APDEF 5
-
-#define WNI_CFG_RETRYRATE_POLICY_STAMIN 0
-#define WNI_CFG_RETRYRATE_POLICY_STAMAX 255
-#define WNI_CFG_RETRYRATE_POLICY_STADEF 4
-
-#define WNI_CFG_RETRYRATE_POLICY_APMIN 0
-#define WNI_CFG_RETRYRATE_POLICY_APMAX 255
-#define WNI_CFG_RETRYRATE_POLICY_APDEF 4
-
-#define WNI_CFG_RETRYRATE_POLICY_MIN_SUPPORTED 0
-#define WNI_CFG_RETRYRATE_POLICY_PRIMARY 1
-#define WNI_CFG_RETRYRATE_POLICY_RESERVED 2
-#define WNI_CFG_RETRYRATE_POLICY_CLOSEST 3
-#define WNI_CFG_RETRYRATE_POLICY_AUTOSELECT 4
-#define WNI_CFG_RETRYRATE_POLICY_MAX 5
-
-#define WNI_CFG_RETRYRATE_SECONDARY_STAMIN 0
-#define WNI_CFG_RETRYRATE_SECONDARY_STAMAX 255
-#define WNI_CFG_RETRYRATE_SECONDARY_STADEF 0
-
-#define WNI_CFG_RETRYRATE_SECONDARY_APMIN 0
-#define WNI_CFG_RETRYRATE_SECONDARY_APMAX 255
-#define WNI_CFG_RETRYRATE_SECONDARY_APDEF 0
-
-#define WNI_CFG_RETRYRATE_TERTIARY_STAMIN 0
-#define WNI_CFG_RETRYRATE_TERTIARY_STAMAX 255
-#define WNI_CFG_RETRYRATE_TERTIARY_STADEF 0
-
-#define WNI_CFG_RETRYRATE_TERTIARY_APMIN 0
-#define WNI_CFG_RETRYRATE_TERTIARY_APMAX 255
-#define WNI_CFG_RETRYRATE_TERTIARY_APDEF 0
-
-#define WNI_CFG_APSD_ENABLED_STAMIN 0
-#define WNI_CFG_APSD_ENABLED_STAMAX 1
-#define WNI_CFG_APSD_ENABLED_STADEF 0
-
-#define WNI_CFG_APSD_ENABLED_APMIN 0
-#define WNI_CFG_APSD_ENABLED_APMAX 1
-#define WNI_CFG_APSD_ENABLED_APDEF 0
-
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_STAMIN 0
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_STAMAX 1
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_STADEF 1
-
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_APMIN 0
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_APMAX 1
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE_APDEF 1
-
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_STAMIN 0
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_STAMAX 1
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_STADEF 1
-
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_APMIN 0
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_APMAX 1
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE_APDEF 1
-
-#define WNI_CFG_AUTHENTICATION_TYPE_STAMIN 0
-#define WNI_CFG_AUTHENTICATION_TYPE_STAMAX 65535
-#define WNI_CFG_AUTHENTICATION_TYPE_STADEF 0
-
-#define WNI_CFG_AUTHENTICATION_TYPE_APMIN 0
-#define WNI_CFG_AUTHENTICATION_TYPE_APMAX 65535
-#define WNI_CFG_AUTHENTICATION_TYPE_APDEF 0
-
-#define WNI_CFG_CF_POLL_REQUEST_APMIN 0
-#define WNI_CFG_CF_POLL_REQUEST_APMAX 1
-#define WNI_CFG_CF_POLL_REQUEST_APDEF 0
-
-#define WNI_CFG_PRIVACY_ENABLED_STAMIN 0
-#define WNI_CFG_PRIVACY_ENABLED_STAMAX 1
-#define WNI_CFG_PRIVACY_ENABLED_STADEF 0
-
-#define WNI_CFG_PRIVACY_ENABLED_APMIN 0
-#define WNI_CFG_PRIVACY_ENABLED_APMAX 1
-#define WNI_CFG_PRIVACY_ENABLED_APDEF 0
-
-#define WNI_CFG_SHORT_PREAMBLE_STAMIN 0
-#define WNI_CFG_SHORT_PREAMBLE_STAMAX 1
-#define WNI_CFG_SHORT_PREAMBLE_STADEF 1
-
-#define WNI_CFG_SHORT_PREAMBLE_APMIN 0
-#define WNI_CFG_SHORT_PREAMBLE_APMAX 1
-#define WNI_CFG_SHORT_PREAMBLE_APDEF 1
-
-#define WNI_CFG_SHORT_SLOT_TIME_STAMIN 0
-#define WNI_CFG_SHORT_SLOT_TIME_STAMAX 1
-#define WNI_CFG_SHORT_SLOT_TIME_STADEF 1
-
-#define WNI_CFG_SHORT_SLOT_TIME_APMIN 0
-#define WNI_CFG_SHORT_SLOT_TIME_APMAX 1
-#define WNI_CFG_SHORT_SLOT_TIME_APDEF 0
-
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_STAMIN 0
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_STAMAX 1
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_STADEF 0
-
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_APMIN 0
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_APMAX 1
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY_APDEF 0
-
-#define WNI_CFG_QOS_ENABLED_STAMIN 0
-#define WNI_CFG_QOS_ENABLED_STAMAX 1
-#define WNI_CFG_QOS_ENABLED_STADEF 0
-
-#define WNI_CFG_QOS_ENABLED_APMIN 0
-#define WNI_CFG_QOS_ENABLED_APMAX 1
-#define WNI_CFG_QOS_ENABLED_APDEF 0
-
-#define WNI_CFG_HCF_ENABLED_STAMIN 0
-#define WNI_CFG_HCF_ENABLED_STAMAX 1
-#define WNI_CFG_HCF_ENABLED_STADEF 0
-
-#define WNI_CFG_HCF_ENABLED_APMIN 0
-#define WNI_CFG_HCF_ENABLED_APMAX 1
-#define WNI_CFG_HCF_ENABLED_APDEF 0
-
-#define WNI_CFG_RSN_ENABLED_STAMIN 0
-#define WNI_CFG_RSN_ENABLED_STAMAX 1
-#define WNI_CFG_RSN_ENABLED_STADEF 0
-
-#define WNI_CFG_RSN_ENABLED_APMIN 0
-#define WNI_CFG_RSN_ENABLED_APMAX 1
-#define WNI_CFG_RSN_ENABLED_APDEF 0
-
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_STAMIN 0
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_STAMAX 180000
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_STADEF 5000
-
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_APMIN 0
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_APMAX 18000
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD_APDEF 5000
-
-#define WNI_CFG_MAX_NUM_PRE_AUTH_STAMIN 0
-#define WNI_CFG_MAX_NUM_PRE_AUTH_STAMAX 256
-#define WNI_CFG_MAX_NUM_PRE_AUTH_STADEF 64
-
-#define WNI_CFG_MAX_NUM_PRE_AUTH_APMIN 0
-#define WNI_CFG_MAX_NUM_PRE_AUTH_APMAX 256
-#define WNI_CFG_MAX_NUM_PRE_AUTH_APDEF 64
-
-#define WNI_CFG_PREAUTH_CLNUP_TIMEOUT_APMIN 0
-#define WNI_CFG_PREAUTH_CLNUP_TIMEOUT_APMAX 120000
-#define WNI_CFG_PREAUTH_CLNUP_TIMEOUT_APDEF 30000
-
-#define WNI_CFG_RELEASE_AID_TIMEOUT_APMIN 0
-#define WNI_CFG_RELEASE_AID_TIMEOUT_APMAX 100000
-#define WNI_CFG_RELEASE_AID_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_HEART_BEAT_THRESHOLD_STAMIN 0
-#define WNI_CFG_HEART_BEAT_THRESHOLD_STAMAX 65535
-#define WNI_CFG_HEART_BEAT_THRESHOLD_STADEF 40
-
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_STAMIN 10
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_STAMAX 10000
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_STADEF 40
-
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_APMIN 10
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_APMAX 10000
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT_APDEF 40
-
-#define WNI_CFG_11D_ENABLED_STAMIN 0
-#define WNI_CFG_11D_ENABLED_STAMAX 1
-#define WNI_CFG_11D_ENABLED_STADEF 1
-
-#define WNI_CFG_11D_ENABLED_APMIN 0
-#define WNI_CFG_11D_ENABLED_APMAX 1
-#define WNI_CFG_11D_ENABLED_APDEF 0
-
-#define WNI_CFG_NETWORK_DENSITY_STAMIN 0
-#define WNI_CFG_NETWORK_DENSITY_STAMAX 3
-#define WNI_CFG_NETWORK_DENSITY_STADEF 3
-
-#define WNI_CFG_NETWORK_DENSITY_APMIN 0
-#define WNI_CFG_NETWORK_DENSITY_APMAX 3
-#define WNI_CFG_NETWORK_DENSITY_APDEF 0
-
-#define WNI_CFG_NETWORK_DENSITY_LOW 0
-#define WNI_CFG_NETWORK_DENSITY_MEDIUM 1
-#define WNI_CFG_NETWORK_DENSITY_HIGH 2
-#define WNI_CFG_NETWORK_DENSITY_ADAPTIVE 3
-
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_STAMIN 1
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_STAMAX 2
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_STADEF 2
-
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_APMIN 1
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_APMAX 2
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_APDEF 2
-
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_CARRIER 1
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM_CORRELATION 2
-
-#define WNI_CFG_CURRENT_TX_ANTENNA_STAMIN 1
-#define WNI_CFG_CURRENT_TX_ANTENNA_STAMAX 1
-#define WNI_CFG_CURRENT_TX_ANTENNA_STADEF 1
-
-#define WNI_CFG_CURRENT_TX_ANTENNA_APMIN 1
-#define WNI_CFG_CURRENT_TX_ANTENNA_APMAX 2
-#define WNI_CFG_CURRENT_TX_ANTENNA_APDEF 2
-
-#define WNI_CFG_CURRENT_RX_ANTENNA_STAMIN 1
-#define WNI_CFG_CURRENT_RX_ANTENNA_STAMAX 2
-#define WNI_CFG_CURRENT_RX_ANTENNA_STADEF 2
-
-#define WNI_CFG_CURRENT_RX_ANTENNA_APMIN 1
-#define WNI_CFG_CURRENT_RX_ANTENNA_APMAX 3
-#define WNI_CFG_CURRENT_RX_ANTENNA_APDEF 3
-
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_STAMIN 0
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_STAMAX 128
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_STADEF 27
-
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_APMIN 0
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_APMAX 128
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL_APDEF 27
-
-#define WNI_CFG_NEW_BSS_FOUND_IND_STAMIN 0
-#define WNI_CFG_NEW_BSS_FOUND_IND_STAMAX 1
-#define WNI_CFG_NEW_BSS_FOUND_IND_STADEF 0
-
-#define WNI_CFG_NEW_BSS_FOUND_IND_APMIN 0
-#define WNI_CFG_NEW_BSS_FOUND_IND_APMAX 1
-#define WNI_CFG_NEW_BSS_FOUND_IND_APDEF 0
-
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_STAMIN 0
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_STAMAX 1
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_STADEF 0
-
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_APMIN 0
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_APMAX 1
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED_APDEF 0
-
-#define WNI_CFG_11H_ENABLED_STAMIN 0
-#define WNI_CFG_11H_ENABLED_STAMAX 1
-#define WNI_CFG_11H_ENABLED_STADEF 1
-
-#define WNI_CFG_11H_ENABLED_APMIN 0
-#define WNI_CFG_11H_ENABLED_APMAX 1
-#define WNI_CFG_11H_ENABLED_APDEF 1
-
-#define WNI_CFG_WT_CNF_TIMEOUT_STAMIN 10
-#define WNI_CFG_WT_CNF_TIMEOUT_STAMAX 3000
-#define WNI_CFG_WT_CNF_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_WT_CNF_TIMEOUT_APMIN 10
-#define WNI_CFG_WT_CNF_TIMEOUT_APMAX 3000
-#define WNI_CFG_WT_CNF_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_KEEPALIVE_TIMEOUT_STAMIN 0
-#define WNI_CFG_KEEPALIVE_TIMEOUT_STAMAX 3600000
-#define WNI_CFG_KEEPALIVE_TIMEOUT_STADEF 0
-
-#define WNI_CFG_KEEPALIVE_TIMEOUT_APMIN 0
-#define WNI_CFG_KEEPALIVE_TIMEOUT_APMAX 3600000
-#define WNI_CFG_KEEPALIVE_TIMEOUT_APDEF 3000
-
-#define WNI_CFG_PROXIMITY_STAMIN 0
-#define WNI_CFG_PROXIMITY_STAMAX 1
-#define WNI_CFG_PROXIMITY_STADEF 0
-
-#define WNI_CFG_PROXIMITY_APMIN 0
-#define WNI_CFG_PROXIMITY_APMAX 1
-#define WNI_CFG_PROXIMITY_APDEF 0
-
-#define WNI_CFG_PROXIMITY_OFF 0
-#define WNI_CFG_PROXIMITY_ON 1
-
-#define WNI_CFG_LOG_LEVEL_STAMIN 0
-#define WNI_CFG_LOG_LEVEL_STAMAX 7
-#define WNI_CFG_LOG_LEVEL_STADEF 4
-
-#define WNI_CFG_LOG_LEVEL_APMIN 0
-#define WNI_CFG_LOG_LEVEL_APMAX 7
-#define WNI_CFG_LOG_LEVEL_APDEF 4
-
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMIN 1000
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_STAMAX 30000
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_STADEF 10000
-
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_APMIN 1000
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_APMAX 30000
-#define WNI_CFG_OLBC_DETECT_TIMEOUT_APDEF 10000
-
-#define WNI_CFG_PROTECTION_ENABLED_STAMIN 0
-#define WNI_CFG_PROTECTION_ENABLED_STAMAX 65535
-#define WNI_CFG_PROTECTION_ENABLED_STADEF 65535
-
-#define WNI_CFG_PROTECTION_ENABLED_APMIN 0
-#define WNI_CFG_PROTECTION_ENABLED_APMAX 65535
-#define WNI_CFG_PROTECTION_ENABLED_APDEF 65535
-
-#define WNI_CFG_PROTECTION_ENABLED_FROM_llA 0
-#define WNI_CFG_PROTECTION_ENABLED_FROM_llB 1
-#define WNI_CFG_PROTECTION_ENABLED_FROM_llG 2
-#define WNI_CFG_PROTECTION_ENABLED_HT_20 3
-#define WNI_CFG_PROTECTION_ENABLED_NON_GF 4
-#define WNI_CFG_PROTECTION_ENABLED_LSIG_TXOP 5
-#define WNI_CFG_PROTECTION_ENABLED_RIFS 6
-#define WNI_CFG_PROTECTION_ENABLED_OBSS 7
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_FROM_llA 8
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_FROM_llB 9
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_FROM_llG 10
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_HT20 11
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_NON_GF 12
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_LSIG_TXOP 13
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_RIFS 14
-#define WNI_CFG_PROTECTION_ENABLED_OLBC_OBSS 15
-
-#define WNI_CFG_11G_PROTECTION_ALWAYS_STAMIN 0
-#define WNI_CFG_11G_PROTECTION_ALWAYS_STAMAX 1
-#define WNI_CFG_11G_PROTECTION_ALWAYS_STADEF 0
-
-#define WNI_CFG_11G_PROTECTION_ALWAYS_APMIN 0
-#define WNI_CFG_11G_PROTECTION_ALWAYS_APMAX 1
-#define WNI_CFG_11G_PROTECTION_ALWAYS_APDEF 0
-
-#define WNI_CFG_FORCE_POLICY_PROTECTION_STAMIN 0
-#define WNI_CFG_FORCE_POLICY_PROTECTION_STAMAX 5
-#define WNI_CFG_FORCE_POLICY_PROTECTION_STADEF 5
-
-#define WNI_CFG_FORCE_POLICY_PROTECTION_APMIN 0
-#define WNI_CFG_FORCE_POLICY_PROTECTION_APMAX 5
-#define WNI_CFG_FORCE_POLICY_PROTECTION_APDEF 5
-
-#define WNI_CFG_FORCE_POLICY_PROTECTION_DISABLE 0
-#define WNI_CFG_FORCE_POLICY_PROTECTION_CTS 1
-#define WNI_CFG_FORCE_POLICY_PROTECTION_RTS 2
-#define WNI_CFG_FORCE_POLICY_PROTECTION_DUAL_CTS 3
-#define WNI_CFG_FORCE_POLICY_PROTECTION_RTS_ALWAYS 4
-#define WNI_CFG_FORCE_POLICY_PROTECTION_AUTO 5
-
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_STAMIN 0
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_STAMAX 1
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_STADEF 0
-
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_APMIN 0
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_APMAX 1
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED_APDEF 0
-
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_STAMIN 0
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_STAMAX 1
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_STADEF 1
-
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_APMIN 0
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_APMAX 1
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED_APDEF 1
-
-#define WNI_CFG_11G_ONLY_POLICY_STAMIN 0
-#define WNI_CFG_11G_ONLY_POLICY_STAMAX 1
-#define WNI_CFG_11G_ONLY_POLICY_STADEF 0
-
-#define WNI_CFG_11G_ONLY_POLICY_APMIN 0
-#define WNI_CFG_11G_ONLY_POLICY_APMAX 1
-#define WNI_CFG_11G_ONLY_POLICY_APDEF 0
-
-#define WNI_CFG_PACKET_CLASSIFICATION_STAMIN 0
-#define WNI_CFG_PACKET_CLASSIFICATION_STAMAX 3
-#define WNI_CFG_PACKET_CLASSIFICATION_STADEF 0
-
-#define WNI_CFG_PACKET_CLASSIFICATION_APMIN 0
-#define WNI_CFG_PACKET_CLASSIFICATION_APMAX 3
-#define WNI_CFG_PACKET_CLASSIFICATION_APDEF 0
-
-#define WNI_CFG_PACKET_CLASSIFICATION_DISABLED 0
-#define WNI_CFG_PACKET_CLASSIFICATION_DSCP 1
-#define WNI_CFG_PACKET_CLASSIFICATION_8021P 2
-#define WNI_CFG_PACKET_CLASSIFICATION_ALL 3
-
-#define WNI_CFG_WME_ENABLED_STAMIN 0
-#define WNI_CFG_WME_ENABLED_STAMAX 1
-#define WNI_CFG_WME_ENABLED_STADEF 1
-
-#define WNI_CFG_WME_ENABLED_APMIN 0
-#define WNI_CFG_WME_ENABLED_APMAX 1
-#define WNI_CFG_WME_ENABLED_APDEF 1
-
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_STAMIN 0
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_STAMAX 65535
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_APMIN 0
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_APMAX 65535
-#define WNI_CFG_ADDTS_RSP_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_MAX_SP_LENGTH_STAMIN 0
-#define WNI_CFG_MAX_SP_LENGTH_STAMAX 3
-#define WNI_CFG_MAX_SP_LENGTH_STADEF 0
-
-#define WNI_CFG_MAX_SP_LENGTH_APMIN 0
-#define WNI_CFG_MAX_SP_LENGTH_APMAX 3
-#define WNI_CFG_MAX_SP_LENGTH_APDEF 0
-
-#define WNI_CFG_KEEP_ALIVE_STA_LIMIT_THRESHOLD_APMIN 0
-#define WNI_CFG_KEEP_ALIVE_STA_LIMIT_THRESHOLD_APMAX 32
-#define WNI_CFG_KEEP_ALIVE_STA_LIMIT_THRESHOLD_APDEF 0
-
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_STAMIN 0
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_STAMAX 1
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_STADEF 0
-
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_APMIN 0
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_APMAX 1
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS_APDEF 0
-
-#define WNI_CFG_WSM_ENABLED_STAMIN 0
-#define WNI_CFG_WSM_ENABLED_STAMAX 1
-#define WNI_CFG_WSM_ENABLED_STADEF 0
-
-#define WNI_CFG_WSM_ENABLED_APMIN 0
-#define WNI_CFG_WSM_ENABLED_APMAX 1
-#define WNI_CFG_WSM_ENABLED_APDEF 0
-
-#define WNI_CFG_EDCA_PROFILE_STAMIN 0
-#define WNI_CFG_EDCA_PROFILE_STAMAX 255
-#define WNI_CFG_EDCA_PROFILE_STADEF 1
-
-#define WNI_CFG_EDCA_PROFILE_APMIN 0
-#define WNI_CFG_EDCA_PROFILE_APMAX 255
-#define WNI_CFG_EDCA_PROFILE_APDEF 1
-
-#define WNI_CFG_EDCA_PROFILE_ANI 0
-#define WNI_CFG_EDCA_PROFILE_WMM 1
-#define WNI_CFG_EDCA_PROFILE_TIT_DEMO 2
-#define WNI_CFG_EDCA_PROFILE_MAX 3
-#define WNI_CFG_EDCA_PROFILE_ACM_IDX 0
-#define WNI_CFG_EDCA_PROFILE_AIFSN_IDX 1
-#define WNI_CFG_EDCA_PROFILE_CWMINA_IDX 2
-#define WNI_CFG_EDCA_PROFILE_CWMAXA_IDX 4
-#define WNI_CFG_EDCA_PROFILE_TXOPA_IDX 6
-#define WNI_CFG_EDCA_PROFILE_CWMINB_IDX 7
-#define WNI_CFG_EDCA_PROFILE_CWMAXB_IDX 9
-#define WNI_CFG_EDCA_PROFILE_TXOPB_IDX 11
-#define WNI_CFG_EDCA_PROFILE_CWMING_IDX 12
-#define WNI_CFG_EDCA_PROFILE_CWMAXG_IDX 14
-#define WNI_CFG_EDCA_PROFILE_TXOPG_IDX 16
-
-#define WNI_CFG_RDET_FLAG_STAMIN 0
-#define WNI_CFG_RDET_FLAG_STAMAX 1
-#define WNI_CFG_RDET_FLAG_STADEF 0
-
-#define WNI_CFG_RDET_FLAG_APMIN 0
-#define WNI_CFG_RDET_FLAG_APMAX 1
-#define WNI_CFG_RDET_FLAG_APDEF 0
-
-#define WNI_CFG_RDET_FLAG_ENABLE 1
-#define WNI_CFG_RDET_FLAG_DISABLE 0
-
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_STAMIN 0
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_STAMAX 255
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_STADEF 0
-
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_APMIN 0
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_APMAX 255
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT_APDEF 0
-
-#define WNI_CFG_ADMIT_POLICY_STAMIN 0
-#define WNI_CFG_ADMIT_POLICY_STAMAX 2
-#define WNI_CFG_ADMIT_POLICY_STADEF 0
-
-#define WNI_CFG_ADMIT_POLICY_APMIN 0
-#define WNI_CFG_ADMIT_POLICY_APMAX 2
-#define WNI_CFG_ADMIT_POLICY_APDEF 0
-
-#define WNI_CFG_ADMIT_POLICY_ADMIT_ALL 0
-#define WNI_CFG_ADMIT_POLICY_REJECT_ALL 1
-#define WNI_CFG_ADMIT_POLICY_BW_FACTOR 2
-
-#define WNI_CFG_ADMIT_BWFACTOR_STAMIN 0
-#define WNI_CFG_ADMIT_BWFACTOR_STAMAX 100
-#define WNI_CFG_ADMIT_BWFACTOR_STADEF 20
-
-#define WNI_CFG_ADMIT_BWFACTOR_APMIN 0
-#define WNI_CFG_ADMIT_BWFACTOR_APMAX 100
-#define WNI_CFG_ADMIT_BWFACTOR_APDEF 20
-
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_STAMIN 0
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_STAMAX 256
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_STADEF 60
-
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_APMIN 0
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_APMAX 256
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE_APDEF 60
-
-#define WNI_CFG_CHANNEL_BONDING_MODE_STAMIN 0
-#define WNI_CFG_CHANNEL_BONDING_MODE_STAMAX 10
-#define WNI_CFG_CHANNEL_BONDING_MODE_STADEF 0
-
-#define WNI_CFG_CHANNEL_BONDING_MODE_APMIN 0
-#define WNI_CFG_CHANNEL_BONDING_MODE_APMAX 10
-#define WNI_CFG_CHANNEL_BONDING_MODE_APDEF 0
-
-#define WNI_CFG_CHANNEL_BONDING_MODE_DISABLE 0
-#define WNI_CFG_CHANNEL_BONDING_MODE_ENABLE 1
-#define WNI_CFG_CHANNEL_BONDING_MODE_IF_NO_LEGACY_BSS 2
-#define WNI_CFG_CHANNEL_BONDING_MODE_IF_NO_LEGACY_ALL 3
-#define WNI_CFG_CHANNEL_BONDING_MODE_INTELLIGENT 4
-
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_STAMIN 0
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_STAMAX 10
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_STADEF 0
-
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_APMIN 0
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_APMAX 10
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_APDEF 0
-
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_NONE 0
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_LOWER 1
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_HIGHER 2
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_LOW_40MHZ_CENTERED 3
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_CENTERED_40MHZ_CENTERED 4
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_HIGH_40MHZ_CENTERED 5
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_LOW_40MHZ_LOW 6
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_HIGH_40MHZ_LOW 7
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_LOW_40MHZ_HIGH 8
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE_11AC_20MHZ_HIGH_40MHZ_HIGH 9
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_STAMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_STAMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_STADEF 2
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_APMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_APMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO_APDEF 2
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_STAMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_STAMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_STADEF 4
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_APMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_APMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE_APDEF 4
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_STAMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_STAMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_STADEF 6
-
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_APMIN 0
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_APMAX 255
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO_APDEF 6
-
-#define WNI_CFG_TRIG_STA_BK_SCAN_STAMIN 0
-#define WNI_CFG_TRIG_STA_BK_SCAN_STAMAX 1
-#define WNI_CFG_TRIG_STA_BK_SCAN_STADEF 0
-
-#define WNI_CFG_TRIG_STA_BK_SCAN_APMIN 0
-#define WNI_CFG_TRIG_STA_BK_SCAN_APMAX 1
-#define WNI_CFG_TRIG_STA_BK_SCAN_APDEF 1
-
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_STAMIN 0
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_STAMAX 255
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_STADEF 255
-
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_APMIN 0
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_APMAX 255
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_APDEF 1
-
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING_UNUSED 255
-
-#define WNI_CFG_MIMO_ENABLED_STAMIN 0
-#define WNI_CFG_MIMO_ENABLED_STAMAX 1
-#define WNI_CFG_MIMO_ENABLED_STADEF 1
-
-#define WNI_CFG_MIMO_ENABLED_APMIN 0
-#define WNI_CFG_MIMO_ENABLED_APMAX 1
-#define WNI_CFG_MIMO_ENABLED_APDEF 1
-
-#define WNI_CFG_MIMO_ENABLED_ENABLE 1
-#define WNI_CFG_MIMO_ENABLED_DISABLE 0
-
-#define WNI_CFG_BLOCK_ACK_ENABLED_STAMIN 0
-#define WNI_CFG_BLOCK_ACK_ENABLED_STAMAX 3
-#define WNI_CFG_BLOCK_ACK_ENABLED_STADEF 0
-
-#define WNI_CFG_BLOCK_ACK_ENABLED_APMIN 0
-#define WNI_CFG_BLOCK_ACK_ENABLED_APMAX 3
-#define WNI_CFG_BLOCK_ACK_ENABLED_APDEF 0
-
-#define WNI_CFG_BLOCK_ACK_ENABLED_DELAYED 0
-#define WNI_CFG_BLOCK_ACK_ENABLED_IMMEDIATE 1
-
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_STAMIN 0
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_STAMAX 65535
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_STADEF 1000
-
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_APMIN 0
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_APMAX 65535
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT_APDEF 1000
-
-#define WNI_CFG_HT_RX_STBC_STAMIN 0
-#define WNI_CFG_HT_RX_STBC_STAMAX 3
-#define WNI_CFG_HT_RX_STBC_STADEF 1
-
-#define WNI_CFG_HT_RX_STBC_APMIN 0
-#define WNI_CFG_HT_RX_STBC_APMAX 3
-#define WNI_CFG_HT_RX_STBC_APDEF 1
-
-#define WNI_CFG_HT_CAP_INFO_STAMIN 0
-#define WNI_CFG_HT_CAP_INFO_STAMAX 65535
-#define WNI_CFG_HT_CAP_INFO_STADEF 364
-
-#define WNI_CFG_HT_CAP_INFO_APMIN 0
-#define WNI_CFG_HT_CAP_INFO_APMAX 65535
-#define WNI_CFG_HT_CAP_INFO_APDEF 4206
-
-#define WNI_CFG_HT_CAP_INFO_ADVANCE_CODING 0
-#define WNI_CFG_HT_CAP_INFO_SUPPORTED_CHAN_WIDTH_SET 1
-#define WNI_CFG_HT_CAP_INFO_SM_POWER_SAVE 2
-#define WNI_CFG_HT_CAP_INFO_GREEN_FIELD 4
-#define WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ 5
-#define WNI_CFG_HT_CAP_INFO_SHORT_GI_40MHZ 6
-#define WNI_CFG_HT_CAP_INFO_TX_STBC 7
-#define WNI_CFG_HT_CAP_INFO_RX_STBC 8
-#define WNI_CFG_HT_CAP_INFO_DELAYED_BA 10
-#define WNI_CFG_HT_CAP_INFO_MAX_AMSDU_SIZE 11
-#define WNI_CFG_HT_CAP_INFO_DSSS_CCK_MODE_40MHZ 12
-#define WNI_CFG_HT_CAP_INFO_PSMP 13
-#define WNI_CFG_HT_CAP_INFO_STBC_CONTROL_FRAME 14
-#define WNI_CFG_HT_CAP_INFO_LSIG_TXOP_PROTECTION 15
-
-#define WNI_CFG_HT_AMPDU_PARAMS_STAMIN 0
-#define WNI_CFG_HT_AMPDU_PARAMS_STAMAX 255
-#define WNI_CFG_HT_AMPDU_PARAMS_STADEF 0
-
-#define WNI_CFG_HT_AMPDU_PARAMS_APMIN 0
-#define WNI_CFG_HT_AMPDU_PARAMS_APMAX 255
-#define WNI_CFG_HT_AMPDU_PARAMS_APDEF 2
-
-#define WNI_CFG_HT_AMPDU_PARAMS_MAX_RX_AMPDU_FACTOR 0
-#define WNI_CFG_HT_AMPDU_PARAMS_MPDU_DENSITY 2
-#define WNI_CFG_HT_AMPDU_PARAMS_RESERVED 5
-
-#define WNI_CFG_EXT_HT_CAP_INFO_STAMIN 0
-#define WNI_CFG_EXT_HT_CAP_INFO_STAMAX 65535
-#define WNI_CFG_EXT_HT_CAP_INFO_STADEF 1024
-
-#define WNI_CFG_EXT_HT_CAP_INFO_APMIN 0
-#define WNI_CFG_EXT_HT_CAP_INFO_APMAX 65535
-#define WNI_CFG_EXT_HT_CAP_INFO_APDEF 1024
-
-#define WNI_CFG_EXT_HT_CAP_INFO_PCO 0
-#define WNI_CFG_EXT_HT_CAP_INFO_TRANSITION_TIME 1
-#define WNI_CFG_EXT_HT_CAP_INFO_RESERVED1 3
-#define WNI_CFG_EXT_HT_CAP_INFO_MCS_FEEDBACK 8
-#define WNI_CFG_EXT_HT_CAP_INFO_HTC_SUPPORT 10
-#define WNI_CFG_EXT_HT_CAP_INFO_RD_RESPONDER 11
-#define WNI_CFG_EXT_HT_CAP_INFO_RESERVED2 12
-
-#define WNI_CFG_TX_BF_CAP_STAMIN 0
-#define WNI_CFG_TX_BF_CAP_STAMAX 4294967295
-#define WNI_CFG_TX_BF_CAP_STADEF 0
-
-#define WNI_CFG_TX_BF_CAP_APMIN 0
-#define WNI_CFG_TX_BF_CAP_APMAX 4294967295
-#define WNI_CFG_TX_BF_CAP_APDEF 0
-
-#define WNI_CFG_AS_CAP_STAMIN 0
-#define WNI_CFG_AS_CAP_STAMAX 255
-#define WNI_CFG_AS_CAP_STADEF 0
-
-#define WNI_CFG_AS_CAP_APMIN 0
-#define WNI_CFG_AS_CAP_APMAX 255
-#define WNI_CFG_AS_CAP_APDEF 0
-
-#define WNI_CFG_AS_CAP_ANTENNA_SELECTION 0
-#define WNI_CFG_AS_CAP_EXPLICIT_CSI_FEEDBACK_TX 1
-#define WNI_CFG_AS_CAP_ANTENNA_INDICES_FEEDBACK_TX 2
-#define WNI_CFG_AS_CAP_EXPLICIT_CSI_FEEDBACK 3
-#define WNI_CFG_AS_CAP_ANTENNA_INDICES_FEEDBACK 4
-#define WNI_CFG_AS_CAP_RX_AS 5
-#define WNI_CFG_AS_CAP_TX_SOUNDING_PPDUS 6
-#define WNI_CFG_AS_CAP_RESERVED 7
-
-#define WNI_CFG_HT_INFO_FIELD1_STAMIN 0
-#define WNI_CFG_HT_INFO_FIELD1_STAMAX 255
-#define WNI_CFG_HT_INFO_FIELD1_STADEF 15
-
-#define WNI_CFG_HT_INFO_FIELD1_APMIN 0
-#define WNI_CFG_HT_INFO_FIELD1_APMAX 255
-#define WNI_CFG_HT_INFO_FIELD1_APDEF 15
-
-#define WNI_CFG_HT_INFO_FIELD1_SECONDARY_CHANNEL_OFFSET 0
-#define WNI_CFG_HT_INFO_FIELD1_RECOMMENDED_CHANNEL_WIDTH 2
-#define WNI_CFG_HT_INFO_FIELD1_RIFS_MODE 3
-#define WNI_CFG_HT_INFO_FIELD1_PSMP_ACCESS_ONLY 4
-#define WNI_CFG_HT_INFO_FIELD1_SERVICE_INTERVAL_GRANULARITY 5
-
-#define WNI_CFG_HT_INFO_FIELD2_STAMIN 0
-#define WNI_CFG_HT_INFO_FIELD2_STAMAX 65535
-#define WNI_CFG_HT_INFO_FIELD2_STADEF 0
-
-#define WNI_CFG_HT_INFO_FIELD2_APMIN 0
-#define WNI_CFG_HT_INFO_FIELD2_APMAX 65535
-#define WNI_CFG_HT_INFO_FIELD2_APDEF 0
-
-#define WNI_CFG_HT_INFO_FIELD2_OP_MODE 0
-#define WNI_CFG_HT_INFO_FIELD2_NON_GF_DEVICES_PRESENT 2
-#define WNI_CFG_HT_INFO_FIELD2_RESERVED 3
-
-#define WNI_CFG_HT_INFO_FIELD3_STAMIN 0
-#define WNI_CFG_HT_INFO_FIELD3_STAMAX 65535
-#define WNI_CFG_HT_INFO_FIELD3_STADEF 0
-
-#define WNI_CFG_HT_INFO_FIELD3_APMIN 0
-#define WNI_CFG_HT_INFO_FIELD3_APMAX 65535
-#define WNI_CFG_HT_INFO_FIELD3_APDEF 0
-
-#define WNI_CFG_HT_INFO_FIELD3_BASIC_STBC_MCS 0
-#define WNI_CFG_HT_INFO_FIELD3_DUAL_STBC_PROTECTION 7
-#define WNI_CFG_HT_INFO_FIELD3_SECONDARY_BEACON 8
-#define WNI_CFG_HT_INFO_FIELD3_LSIG_TXOP_PROTECTION_FULL_SUPPORT 9
-#define WNI_CFG_HT_INFO_FIELD3_PCO_ACTIVE 10
-#define WNI_CFG_HT_INFO_FIELD3_PCO_PHASE 11
-#define WNI_CFG_HT_INFO_FIELD3_RESERVED 12
-
-#define WNI_CFG_GREENFIELD_CAPABILITY_STAMIN 0
-#define WNI_CFG_GREENFIELD_CAPABILITY_STAMAX 1
-#define WNI_CFG_GREENFIELD_CAPABILITY_STADEF 0
-
-#define WNI_CFG_GREENFIELD_CAPABILITY_APMIN 0
-#define WNI_CFG_GREENFIELD_CAPABILITY_APMAX 1
-#define WNI_CFG_GREENFIELD_CAPABILITY_APDEF 0
-
-#define WNI_CFG_GREENFIELD_CAPABILITY_ENABLE 1
-#define WNI_CFG_GREENFIELD_CAPABILITY_DISABLE 0
-
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_STAMIN 0
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_STAMAX 2
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_STADEF 0
-
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_APMIN 0
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_APMAX 2
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH_APDEF 0
-
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STAMIN 0
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STAMAX 0
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_STADEF 0
-
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_APMIN 0
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_APMAX 0
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET_APDEF 0
-
-#define WNI_CFG_VHT_LDPC_CODING_CAP_STAMIN 0
-#define WNI_CFG_VHT_LDPC_CODING_CAP_STAMAX 1
-#define WNI_CFG_VHT_LDPC_CODING_CAP_STADEF 0
-
-#define WNI_CFG_VHT_LDPC_CODING_CAP_APMIN 0
-#define WNI_CFG_VHT_LDPC_CODING_CAP_APMAX 1
-#define WNI_CFG_VHT_LDPC_CODING_CAP_APDEF 0
-
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_STAMIN 0
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_STAMAX 1
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_STADEF 1
-
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_APMIN 0
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_APMAX 1
-#define WNI_CFG_VHT_SHORT_GI_80MHZ_APDEF 1
-
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STAMIN 0
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STAMAX 1
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_STADEF 0
-
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_APMIN 0
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_APMAX 1
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ_APDEF 0
-
-#define WNI_CFG_VHT_TXSTBC_STAMIN 0
-#define WNI_CFG_VHT_TXSTBC_STAMAX 1
-#define WNI_CFG_VHT_TXSTBC_STADEF 0
-
-#define WNI_CFG_VHT_TXSTBC_APMIN 0
-#define WNI_CFG_VHT_TXSTBC_APMAX 1
-#define WNI_CFG_VHT_TXSTBC_APDEF 0
-
-#define WNI_CFG_VHT_RXSTBC_STAMIN 0
-#define WNI_CFG_VHT_RXSTBC_STAMAX 1
-#define WNI_CFG_VHT_RXSTBC_STADEF 1
-
-#define WNI_CFG_VHT_RXSTBC_APMIN 0
-#define WNI_CFG_VHT_RXSTBC_APMAX 1
-#define WNI_CFG_VHT_RXSTBC_APDEF 1
-
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_STAMIN 0
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_STAMAX 1
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_STADEF 0
-
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_APMIN 0
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_APMAX 1
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP_APDEF 0
-
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMIN 0
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STAMAX 1
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_STADEF 1
-
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_APMIN 0
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_APMAX 1
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP_APDEF 1
-
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMIN 0
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STAMAX 4
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_STADEF 0
-
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_APMIN 0
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_APMAX 4
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_APDEF 0
-
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STAMIN 0
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STAMAX 3
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_STADEF 0
-
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_APMIN 0
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_APMAX 3
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS_APDEF 0
-
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_STAMIN 0
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_STAMAX 1
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_STADEF 0
-
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_APMIN 0
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_APMAX 1
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP_APDEF 0
-
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STAMIN 0
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STAMAX 1
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_STADEF 0
-
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_APMIN 0
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_APMAX 1
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP_APDEF 0
-
-#define WNI_CFG_VHT_TXOP_PS_STAMIN 0
-#define WNI_CFG_VHT_TXOP_PS_STAMAX 1
-#define WNI_CFG_VHT_TXOP_PS_STADEF 0
-
-#define WNI_CFG_VHT_TXOP_PS_APMIN 0
-#define WNI_CFG_VHT_TXOP_PS_APMAX 1
-#define WNI_CFG_VHT_TXOP_PS_APDEF 0
-
-#define WNI_CFG_VHT_HTC_VHTC_CAP_STAMIN 0
-#define WNI_CFG_VHT_HTC_VHTC_CAP_STAMAX 1
-#define WNI_CFG_VHT_HTC_VHTC_CAP_STADEF 0
-
-#define WNI_CFG_VHT_HTC_VHTC_CAP_APMIN 0
-#define WNI_CFG_VHT_HTC_VHTC_CAP_APMAX 1
-#define WNI_CFG_VHT_HTC_VHTC_CAP_APDEF 0
-
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STAMIN 0
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STAMAX 7
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_STADEF 3
-
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_APMIN 0
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_APMAX 7
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT_APDEF 3
-
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_STAMIN 0
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_STAMAX 3
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_STADEF 0
-
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_APMIN 0
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_APMAX 3
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP_APDEF 0
-
-#define WNI_CFG_VHT_RX_ANT_PATTERN_STAMIN 0
-#define WNI_CFG_VHT_RX_ANT_PATTERN_STAMAX 1
-#define WNI_CFG_VHT_RX_ANT_PATTERN_STADEF 1
-
-#define WNI_CFG_VHT_RX_ANT_PATTERN_APMIN 0
-#define WNI_CFG_VHT_RX_ANT_PATTERN_APMAX 1
-#define WNI_CFG_VHT_RX_ANT_PATTERN_APDEF 1
-
-#define WNI_CFG_VHT_TX_ANT_PATTERN_STAMIN 0
-#define WNI_CFG_VHT_TX_ANT_PATTERN_STAMAX 1
-#define WNI_CFG_VHT_TX_ANT_PATTERN_STADEF 1
-
-#define WNI_CFG_VHT_TX_ANT_PATTERN_APMIN 0
-#define WNI_CFG_VHT_TX_ANT_PATTERN_APMAX 1
-#define WNI_CFG_VHT_TX_ANT_PATTERN_APDEF 1
-
-#define WNI_CFG_VHT_RX_MCS_MAP_STAMIN 0
-#define WNI_CFG_VHT_RX_MCS_MAP_STAMAX 65535
-#define WNI_CFG_VHT_RX_MCS_MAP_STADEF 65534
-
-#define WNI_CFG_VHT_RX_MCS_MAP_APMIN 0
-#define WNI_CFG_VHT_RX_MCS_MAP_APMAX 65535
-#define WNI_CFG_VHT_RX_MCS_MAP_APDEF 65534
-
-#define WNI_CFG_VHT_TX_MCS_MAP_STAMIN 0
-#define WNI_CFG_VHT_TX_MCS_MAP_STAMAX 65535
-#define WNI_CFG_VHT_TX_MCS_MAP_STADEF 65534
-
-#define WNI_CFG_VHT_TX_MCS_MAP_APMIN 0
-#define WNI_CFG_VHT_TX_MCS_MAP_APMAX 65535
-#define WNI_CFG_VHT_TX_MCS_MAP_APDEF 65534
-
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780
-
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 0
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APMAX 780
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_APDEF 780
-
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMIN 0
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STAMAX 780
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_STADEF 780
-
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APMIN 0
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APMAX 780
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_APDEF 780
-
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_STAMIN 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_STAMAX 256
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_STADEF 0
-
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_APMIN 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_APMAX 256
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1_APDEF 0
-
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_STAMIN 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_STAMAX 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_STADEF 0
-
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_APMIN 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_APMAX 0
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2_APDEF 0
-
-#define WNI_CFG_VHT_BASIC_MCS_SET_STAMIN 0
-#define WNI_CFG_VHT_BASIC_MCS_SET_STAMAX 65535
-#define WNI_CFG_VHT_BASIC_MCS_SET_STADEF 65534
-
-#define WNI_CFG_VHT_BASIC_MCS_SET_APMIN 0
-#define WNI_CFG_VHT_BASIC_MCS_SET_APMAX 65535
-#define WNI_CFG_VHT_BASIC_MCS_SET_APDEF 65534
-
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STAMIN 0
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STAMAX 4
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_STADEF 0
-
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_APMIN 0
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_APMAX 4
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT_APDEF 0
-
-#define WNI_CFG_VHT_SS_UNDER_UTIL_STAMIN 0
-#define WNI_CFG_VHT_SS_UNDER_UTIL_STAMAX 0
-#define WNI_CFG_VHT_SS_UNDER_UTIL_STADEF 0
-
-#define WNI_CFG_VHT_SS_UNDER_UTIL_APMIN 0
-#define WNI_CFG_VHT_SS_UNDER_UTIL_APMAX 0
-#define WNI_CFG_VHT_SS_UNDER_UTIL_APDEF 0
-
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_STAMIN 0
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_STAMAX 0
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_STADEF 0
-
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_APMIN 0
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_APMAX 0
-#define WNI_CFG_VHT_40MHZ_UTILIZATION_APDEF 0
-
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_STAMIN 0
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_STAMAX 0
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_STADEF 0
-
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_APMIN 0
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_APMAX 0
-#define WNI_CFG_VHT_80MHZ_UTILIZATION_APDEF 0
-
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_STAMIN 0
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_STAMAX 0
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_STADEF 0
-
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_APMIN 0
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_APMAX 0
-#define WNI_CFG_VHT_160MHZ_UTILIZATION_APDEF 0
-
-#define WNI_CFG_MAX_AMSDU_LENGTH_STAMIN 0
-#define WNI_CFG_MAX_AMSDU_LENGTH_STAMAX 1
-#define WNI_CFG_MAX_AMSDU_LENGTH_STADEF 0
-
-#define WNI_CFG_MAX_AMSDU_LENGTH_APMIN 0
-#define WNI_CFG_MAX_AMSDU_LENGTH_APMAX 1
-#define WNI_CFG_MAX_AMSDU_LENGTH_APDEF 0
-
-#define WNI_CFG_MAX_AMSDU_LENGTH_SHORT_3839_BYTES 0
-#define WNI_CFG_MAX_AMSDU_LENGTH_LONG_7935__BYTES 1
-
-#define WNI_CFG_MPDU_DENSITY_STAMIN 0
-#define WNI_CFG_MPDU_DENSITY_STAMAX 7
-#define WNI_CFG_MPDU_DENSITY_STADEF 7
-
-#define WNI_CFG_MPDU_DENSITY_APMIN 0
-#define WNI_CFG_MPDU_DENSITY_APMAX 7
-#define WNI_CFG_MPDU_DENSITY_APDEF 7
-
-#define WNI_CFG_NUM_BUFF_ADVERT_STAMIN 0
-#define WNI_CFG_NUM_BUFF_ADVERT_STAMAX 128
-#define WNI_CFG_NUM_BUFF_ADVERT_STADEF 64
-
-#define WNI_CFG_NUM_BUFF_ADVERT_APMIN 0
-#define WNI_CFG_NUM_BUFF_ADVERT_APMAX 128
-#define WNI_CFG_NUM_BUFF_ADVERT_APDEF 64
-
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN 0
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX 3
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_STADEF 3
-
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_APMIN 0
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_APMAX 3
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR_APDEF 3
-
-#define WNI_CFG_SHORT_GI_20MHZ_STAMIN 0
-#define WNI_CFG_SHORT_GI_20MHZ_STAMAX 1
-#define WNI_CFG_SHORT_GI_20MHZ_STADEF 1
-
-#define WNI_CFG_SHORT_GI_20MHZ_APMIN 0
-#define WNI_CFG_SHORT_GI_20MHZ_APMAX 1
-#define WNI_CFG_SHORT_GI_20MHZ_APDEF 1
-
-#define WNI_CFG_SHORT_GI_20MHZ_ENABLE 1
-#define WNI_CFG_SHORT_GI_20MHZ_DISABLE 0
-
-#define WNI_CFG_SHORT_GI_40MHZ_STAMIN 0
-#define WNI_CFG_SHORT_GI_40MHZ_STAMAX 1
-#define WNI_CFG_SHORT_GI_40MHZ_STADEF 0
-
-#define WNI_CFG_SHORT_GI_40MHZ_APMIN 0
-#define WNI_CFG_SHORT_GI_40MHZ_APMAX 1
-#define WNI_CFG_SHORT_GI_40MHZ_APDEF 1
-
-#define WNI_CFG_SHORT_GI_40MHZ_ENABLE 1
-#define WNI_CFG_SHORT_GI_40MHZ_DISABLE 0
-
-#define WNI_CFG_RIFS_ENABLED_STAMIN 0
-#define WNI_CFG_RIFS_ENABLED_STAMAX 1
-#define WNI_CFG_RIFS_ENABLED_STADEF 1
-
-#define WNI_CFG_RIFS_ENABLED_APMIN 0
-#define WNI_CFG_RIFS_ENABLED_APMAX 1
-#define WNI_CFG_RIFS_ENABLED_APDEF 1
-
-#define WNI_CFG_RIFS_ENABLED_ENABLE 1
-#define WNI_CFG_RIFS_ENABLED_DISABLE 0
-
-#define WNI_CFG_MAX_PS_POLL_STAMIN 0
-#define WNI_CFG_MAX_PS_POLL_STAMAX 255
-#define WNI_CFG_MAX_PS_POLL_STADEF 0
-
-#define WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMIN 1
-#define WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STAMAX 20
-#define WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE_STADEF 20
-
-#define WNI_CFG_RSSI_FILTER_PERIOD_STAMIN 0
-#define WNI_CFG_RSSI_FILTER_PERIOD_STAMAX 255
-#define WNI_CFG_RSSI_FILTER_PERIOD_STADEF 5
-
-#define WNI_CFG_MIN_RSSI_THRESHOLD_STAMIN 0
-#define WNI_CFG_MIN_RSSI_THRESHOLD_STAMAX 10
-#define WNI_CFG_MIN_RSSI_THRESHOLD_STADEF 10
-
-#define WNI_CFG_NTH_BEACON_FILTER_STAMIN 0
-#define WNI_CFG_NTH_BEACON_FILTER_STAMAX 255
-#define WNI_CFG_NTH_BEACON_FILTER_STADEF 10
-
-#define WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE_STAMIN 0
-#define WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE_STAMAX 1
-#define WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE_STADEF 0
-
-#define WNI_CFG_SCAN_IN_POWERSAVE_STAMIN 0
-#define WNI_CFG_SCAN_IN_POWERSAVE_STAMAX 1
-#define WNI_CFG_SCAN_IN_POWERSAVE_STADEF 1
-
-#define WNI_CFG_SCAN_IN_POWERSAVE_APMIN 0
-#define WNI_CFG_SCAN_IN_POWERSAVE_APMAX 1
-#define WNI_CFG_SCAN_IN_POWERSAVE_APDEF 1
-
-#define WNI_CFG_IGNORE_DTIM_STAMIN 0
-#define WNI_CFG_IGNORE_DTIM_STAMAX 1
-#define WNI_CFG_IGNORE_DTIM_STADEF 0
-
-#define WNI_CFG_IGNORE_DTIM_APMIN 0
-#define WNI_CFG_IGNORE_DTIM_APMAX 1
-#define WNI_CFG_IGNORE_DTIM_APDEF 0
-
-#define WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE_STAMIN 0
-#define WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE_STAMAX 1
-#define WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE_STADEF 1
-
-#define WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE_STAMIN 0
-#define WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE_STAMAX 1
-#define WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE_STADEF 1
-
-#define WNI_CFG_WOWLAN_DEAUTH_ENABLE_STAMIN 0
-#define WNI_CFG_WOWLAN_DEAUTH_ENABLE_STAMAX 1
-#define WNI_CFG_WOWLAN_DEAUTH_ENABLE_STADEF 1
-
-#define WNI_CFG_WOWLAN_DISASSOC_ENABLE_STAMIN 0
-#define WNI_CFG_WOWLAN_DISASSOC_ENABLE_STAMAX 1
-#define WNI_CFG_WOWLAN_DISASSOC_ENABLE_STADEF 1
-
-#define WNI_CFG_WOWLAN_MAX_MISSED_BEACON_STAMIN 0
-#define WNI_CFG_WOWLAN_MAX_MISSED_BEACON_STAMAX 65535
-#define WNI_CFG_WOWLAN_MAX_MISSED_BEACON_STADEF 40
-
-#define WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD_STAMIN 0
-#define WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD_STAMAX 65535
-#define WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD_STADEF 65535
-
-#define WNI_CFG_BA_TIMEOUT_STAMIN 0
-#define WNI_CFG_BA_TIMEOUT_STAMAX 65535
-#define WNI_CFG_BA_TIMEOUT_STADEF 0
-
-#define WNI_CFG_BA_TIMEOUT_APMIN 0
-#define WNI_CFG_BA_TIMEOUT_APMAX 65535
-#define WNI_CFG_BA_TIMEOUT_APDEF 0
-
-#define WNI_CFG_BA_THRESHOLD_HIGH_STAMIN 0
-#define WNI_CFG_BA_THRESHOLD_HIGH_STAMAX 65535
-#define WNI_CFG_BA_THRESHOLD_HIGH_STADEF 128
-
-#define WNI_CFG_BA_THRESHOLD_HIGH_APMIN 0
-#define WNI_CFG_BA_THRESHOLD_HIGH_APMAX 65535
-#define WNI_CFG_BA_THRESHOLD_HIGH_APDEF 128
-
-#define WNI_CFG_MAX_BA_BUFFERS_STAMIN 0
-#define WNI_CFG_MAX_BA_BUFFERS_STAMAX 2560
-#define WNI_CFG_MAX_BA_BUFFERS_STADEF 2560
-
-#define WNI_CFG_MAX_BA_BUFFERS_APMIN 0
-#define WNI_CFG_MAX_BA_BUFFERS_APMAX 2560
-#define WNI_CFG_MAX_BA_BUFFERS_APDEF 2560
-
-#define WNI_CFG_MAX_BA_SESSIONS_STAMIN 0
-#define WNI_CFG_MAX_BA_SESSIONS_STAMAX 64
-#define WNI_CFG_MAX_BA_SESSIONS_STADEF 40
-
-#define WNI_CFG_MAX_BA_SESSIONS_APMIN 0
-#define WNI_CFG_MAX_BA_SESSIONS_APMAX 64
-#define WNI_CFG_MAX_BA_SESSIONS_APDEF 40
-
-#define WNI_CFG_BA_AUTO_SETUP_STAMIN 0
-#define WNI_CFG_BA_AUTO_SETUP_STAMAX 1
-#define WNI_CFG_BA_AUTO_SETUP_STADEF 1
-
-#define WNI_CFG_BA_AUTO_SETUP_APMIN 0
-#define WNI_CFG_BA_AUTO_SETUP_APMAX 1
-#define WNI_CFG_BA_AUTO_SETUP_APDEF 1
-
-#define WNI_CFG_BA_AUTO_SETUP_ENABLE 1
-#define WNI_CFG_BA_AUTO_SETUP_DISABLE 0
-
-#define WNI_CFG_ADDBA_REQ_DECLINE_STAMIN 0
-#define WNI_CFG_ADDBA_REQ_DECLINE_STAMAX 255
-#define WNI_CFG_ADDBA_REQ_DECLINE_STADEF 0
-
-#define WNI_CFG_ADDBA_REQ_DECLINE_APMIN 0
-#define WNI_CFG_ADDBA_REQ_DECLINE_APMAX 255
-#define WNI_CFG_ADDBA_REQ_DECLINE_APDEF 0
-
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMIN 0
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STAMAX 1
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_STADEF 0
-
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMIN 0
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APMAX 1
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC_APDEF 0
-
-#define WNI_CFG_MAX_MEDIUM_TIME_STAMIN 0
-#define WNI_CFG_MAX_MEDIUM_TIME_STAMAX 65535
-#define WNI_CFG_MAX_MEDIUM_TIME_STADEF 2048
-
-#define WNI_CFG_MAX_MEDIUM_TIME_APMIN 0
-#define WNI_CFG_MAX_MEDIUM_TIME_APMAX 65535
-#define WNI_CFG_MAX_MEDIUM_TIME_APDEF 2048
-
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_STAMIN 0
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_STAMAX 65535
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_STADEF 64
-
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_APMIN 0
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_APMAX 65535
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU_APDEF 64
-
-#define WNI_CFG_IBSS_AUTO_BSSID_STAMIN 0
-#define WNI_CFG_IBSS_AUTO_BSSID_STAMAX 1
-#define WNI_CFG_IBSS_AUTO_BSSID_STADEF 1
-
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_STAMIN 0
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_STAMAX 1
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_STADEF 0
-
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_APMIN 0
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_APMAX 1
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG_APDEF 0
-
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_STAMIN 0
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_STAMAX 1
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_STADEF 0
-
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_APMIN 0
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_APMAX 1
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG_APDEF 0
-
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_STAMIN 0
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_STAMAX 1
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_STADEF 0
-
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_APMIN 0
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_APMAX 1
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG_APDEF 0
-
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_STAMIN 0
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_STAMAX 1
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_STADEF 0
-
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_APMIN 0
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_APMAX 1
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG_APDEF 0
-
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_STAMIN 0
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_STAMAX 1
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_STADEF 0
-
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_APMIN 0
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_APMAX 1
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG_APDEF 0
-
-#define WNI_CFG_WPS_ENABLE_STAMIN 0
-#define WNI_CFG_WPS_ENABLE_STAMAX 255
-#define WNI_CFG_WPS_ENABLE_STADEF 0
-
-#define WNI_CFG_WPS_ENABLE_APMIN 0
-#define WNI_CFG_WPS_ENABLE_APMAX 255
-#define WNI_CFG_WPS_ENABLE_APDEF 0
-
-#define WNI_CFG_WPS_ENABLE_AP 1
-#define WNI_CFG_WPS_ENABLE_STA 2
-
-#define WNI_CFG_WPS_STATE_STAMIN 0
-#define WNI_CFG_WPS_STATE_STAMAX 255
-#define WNI_CFG_WPS_STATE_STADEF 1
-
-#define WNI_CFG_WPS_STATE_APMIN 0
-#define WNI_CFG_WPS_STATE_APMAX 255
-#define WNI_CFG_WPS_STATE_APDEF 1
-
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_STAMIN 0
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_STAMAX 1
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_STADEF 0
-
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_APMIN 0
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_APMAX 1
-#define WNI_CFG_WPS_PROBE_REQ_FLAG_APDEF 0
-
-#define WNI_CFG_WPS_VERSION_STAMIN 0
-#define WNI_CFG_WPS_VERSION_STAMAX 255
-#define WNI_CFG_WPS_VERSION_STADEF 16
-
-#define WNI_CFG_WPS_VERSION_APMIN 0
-#define WNI_CFG_WPS_VERSION_APMAX 255
-#define WNI_CFG_WPS_VERSION_APDEF 16
-
-#define WNI_CFG_WPS_REQUEST_TYPE_STAMIN 0
-#define WNI_CFG_WPS_REQUEST_TYPE_STAMAX 255
-#define WNI_CFG_WPS_REQUEST_TYPE_STADEF 0
-
-#define WNI_CFG_WPS_REQUEST_TYPE_APMIN 0
-#define WNI_CFG_WPS_REQUEST_TYPE_APMAX 255
-#define WNI_CFG_WPS_REQUEST_TYPE_APDEF 3
-
-#define WNI_CFG_WPS_CFG_METHOD_STAMIN 0
-#define WNI_CFG_WPS_CFG_METHOD_STAMAX 4294967295
-#define WNI_CFG_WPS_CFG_METHOD_STADEF 8
-
-#define WNI_CFG_WPS_CFG_METHOD_APMIN 0
-#define WNI_CFG_WPS_CFG_METHOD_APMAX 4294967295
-#define WNI_CFG_WPS_CFG_METHOD_APDEF 25952654
-
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_STAMIN 0
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_STAMAX 65535
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_STADEF 1
-
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_APMIN 0
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_APMAX 65535
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY_APDEF 6
-
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_STAMIN 0
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_STAMAX 4294967295
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_STADEF 5304836
-
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_APMIN 0
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_APMAX 4294967295
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI_APDEF 5304836
-
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_STAMIN 0
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_STAMAX 65535
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_STADEF 1
-
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_APMIN 0
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_APMAX 65535
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY_APDEF 1
-
-#define WNI_CFG_WPS_ASSOCIATION_STATE_STAMIN 0
-#define WNI_CFG_WPS_ASSOCIATION_STATE_STAMAX 65535
-#define WNI_CFG_WPS_ASSOCIATION_STATE_STADEF 0
-
-#define WNI_CFG_WPS_ASSOCIATION_STATE_APMIN 0
-#define WNI_CFG_WPS_ASSOCIATION_STATE_APMAX 65535
-#define WNI_CFG_WPS_ASSOCIATION_STATE_APDEF 0
-
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_STAMIN 0
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_STAMAX 65535
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_STADEF 0
-
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_APMIN 0
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_APMAX 65535
-#define WNI_CFG_WPS_CONFIGURATION_ERROR_APDEF 0
-
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_STAMIN 0
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_STAMAX 4294967295
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_STADEF 0
-
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_APMIN 0
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_APMAX 4294967295
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID_APDEF 0
-
-#define WNI_CFG_WPS_ASSOC_METHOD_STAMIN 0
-#define WNI_CFG_WPS_ASSOC_METHOD_STAMAX 65535
-#define WNI_CFG_WPS_ASSOC_METHOD_STADEF 0
-
-#define WNI_CFG_WPS_ASSOC_METHOD_APMIN 0
-#define WNI_CFG_WPS_ASSOC_METHOD_APMAX 65535
-#define WNI_CFG_WPS_ASSOC_METHOD_APDEF 0
-
-#define WNI_CFG_LOW_GAIN_OVERRIDE_STAMIN 0
-#define WNI_CFG_LOW_GAIN_OVERRIDE_STAMAX 1
-#define WNI_CFG_LOW_GAIN_OVERRIDE_STADEF 0
-
-#define WNI_CFG_LOW_GAIN_OVERRIDE_APMIN 0
-#define WNI_CFG_LOW_GAIN_OVERRIDE_APMAX 1
-#define WNI_CFG_LOW_GAIN_OVERRIDE_APDEF 0
-
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_STAMIN 0
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_STAMAX 128
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_STADEF 128
-
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_APMIN 0
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_APMAX 128
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE_APDEF 128
-
-#define WNI_CFG_RPE_POLLING_THRESHOLD_STAMIN 0
-#define WNI_CFG_RPE_POLLING_THRESHOLD_STAMAX 65535
-#define WNI_CFG_RPE_POLLING_THRESHOLD_STADEF 10
-
-#define WNI_CFG_RPE_POLLING_THRESHOLD_APMIN 0
-#define WNI_CFG_RPE_POLLING_THRESHOLD_APMAX 65535
-#define WNI_CFG_RPE_POLLING_THRESHOLD_APDEF 10
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STAMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_STADEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_APMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_APMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG_APDEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STAMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_STADEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_APMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_APMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG_APDEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STAMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_STADEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_APMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_APMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG_APDEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STAMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_STADEF 30
-
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_APMIN 0
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_APMAX 65535
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG_APDEF 30
-
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMIN 0
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STAMAX 2
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_STADEF 1
-
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_APMIN 0
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_APMAX 2
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS_APDEF 1
-
-#define WNI_CFG_SINGLE_TID_RC_STAMIN 0
-#define WNI_CFG_SINGLE_TID_RC_STAMAX 1
-#define WNI_CFG_SINGLE_TID_RC_STADEF 1
-
-#define WNI_CFG_SINGLE_TID_RC_APMIN 0
-#define WNI_CFG_SINGLE_TID_RC_APMAX 1
-#define WNI_CFG_SINGLE_TID_RC_APDEF 1
-
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_STAMIN 0
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_STAMAX 1
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_STADEF 1
-
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_APMIN 0
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_APMAX 1
-#define WNI_CFG_TX_PWR_CTRL_ENABLE_APDEF 1
-
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_STAMIN 0
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_STAMAX 3
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_STADEF 0
-
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_APMIN 0
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_APMAX 3
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING_APDEF 0
-
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_STAMIN 0
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_STAMAX 255
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_STADEF 0
-
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_APMIN 0
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_APMAX 255
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK_APDEF 0
-
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_STAMIN 0
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_STAMAX 255
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_STADEF 0
-
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_APMIN 0
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_APMAX 255
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE_APDEF 0
-
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMIN 0
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STAMAX 80
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT_STADEF 0
-
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_STAMIN 0
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_STAMAX 1
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_STADEF 0
-
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_APMIN 0
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_APMAX 1
-#define WNI_CFG_TELE_BCN_WAKEUP_EN_APDEF 0
-
-#define WNI_CFG_TELE_BCN_TRANS_LI_STAMIN 0
-#define WNI_CFG_TELE_BCN_TRANS_LI_STAMAX 7
-#define WNI_CFG_TELE_BCN_TRANS_LI_STADEF 3
-
-#define WNI_CFG_TELE_BCN_TRANS_LI_APMIN 0
-#define WNI_CFG_TELE_BCN_TRANS_LI_APMAX 7
-#define WNI_CFG_TELE_BCN_TRANS_LI_APDEF 3
-
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMIN 5
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STAMAX 255
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_STADEF 10
-
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_APMIN 5
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_APMAX 255
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS_APDEF 10
-
-#define WNI_CFG_TELE_BCN_MAX_LI_STAMIN 0
-#define WNI_CFG_TELE_BCN_MAX_LI_STAMAX 7
-#define WNI_CFG_TELE_BCN_MAX_LI_STADEF 5
-
-#define WNI_CFG_TELE_BCN_MAX_LI_APMIN 0
-#define WNI_CFG_TELE_BCN_MAX_LI_APMAX 7
-#define WNI_CFG_TELE_BCN_MAX_LI_APDEF 5
-
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMIN 5
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STAMAX 255
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_STADEF 15
-
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_APMIN 5
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_APMAX 255
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS_APDEF 15
-
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_STAMIN 0
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_STAMAX 255
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_STADEF 7
-
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_APMIN 0
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_APMAX 255
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS_APDEF 7
-
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMIN 0
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STAMAX 1000
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_STADEF 0
-
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_APMIN 0
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_APMAX 1000
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD_APDEF 0
-
-#define WNI_CFG_ASSOC_STA_LIMIT_STAMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_STAMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_STADEF 10
-
-#define WNI_CFG_ASSOC_STA_LIMIT_APMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_APMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_APDEF 10
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_STAMIN 1
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_STAMAX 252
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_STADEF 1
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_APMIN 1
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_APMAX 252
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL_APDEF 1
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_STAMIN 1
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_STAMAX 252
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_STADEF 11
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_APMIN 1
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_APMAX 252
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL_APDEF 11
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_STAMIN 0
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_STAMAX 5
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_STADEF 0
-
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_APMIN 0
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_APMAX 5
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND_APDEF 0
-
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_STAMIN 0
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_STAMAX 65535
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_STADEF 5
-
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_APMIN 0
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_APMAX 65535
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD_APDEF 5
-
-#define WNI_CFG_ENABLE_CLOSE_LOOP_STAMIN 0
-#define WNI_CFG_ENABLE_CLOSE_LOOP_STAMAX 1
-#define WNI_CFG_ENABLE_CLOSE_LOOP_STADEF 0
-
-#define WNI_CFG_ENABLE_CLOSE_LOOP_APMIN 0
-#define WNI_CFG_ENABLE_CLOSE_LOOP_APMAX 1
-#define WNI_CFG_ENABLE_CLOSE_LOOP_APDEF 0
-
-#define WNI_CFG_ENABLE_LTE_COEX_STAMIN 0
-#define WNI_CFG_ENABLE_LTE_COEX_STAMAX 1
-#define WNI_CFG_ENABLE_LTE_COEX_STADEF 0
-
-#define WNI_CFG_ENABLE_LTE_COEX_APMIN 0
-#define WNI_CFG_ENABLE_LTE_COEX_APMAX 1
-#define WNI_CFG_ENABLE_LTE_COEX_APDEF 0
-
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_STAMIN 1
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_STADEF 20
-
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_APMIN 1
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_APMAX 65535
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT_APDEF 20
-
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_STAMIN 1
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_STAMAX 65535
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_STADEF 20
-
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_APMIN 1
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_APMAX 65535
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT_APDEF 20
-
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_STAMIN 0
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_STAMAX 1
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_STADEF 0
-
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_APMIN 0
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_APMAX 1
-#define WNI_CFG_ENABLE_MC_ADDR_LIST_APDEF 0
-
-#define WNI_CFG_ENABLE_UC_FILTER_STAMIN 0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMAX 1
-#define WNI_CFG_ENABLE_UC_FILTER_STADEF 0
-
-#define WNI_CFG_ENABLE_UC_FILTER_APMIN 0
-#define WNI_CFG_ENABLE_UC_FILTER_APMAX 1
-#define WNI_CFG_ENABLE_UC_FILTER_APDEF 0
-
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMIN 0
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMAX 1
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STADEF 0
-
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_APMIN 0
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_APMAX 1
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_APDEF 0
-
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STAMIN 0
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STAMAX 1
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STADEF 0
-
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APMIN 0
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APMAX 1
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APDEF 0
-
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMIN 0
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMAX 1
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STADEF 0
-
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMIN 0
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMAX 1
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APDEF 0
-
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMIN 1
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STAMAX 255
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_STADEF 3
-
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMIN 1
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APMAX 255
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT_APDEF 3
-
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMIN 0
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STAMAX 15
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_STADEF 0
-
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMIN 0
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APMAX 15
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK_APDEF 0
-
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMIN 0
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_STAMAX 1
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_STADEF 0
-
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMIN 0
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_APMAX 1
-#define WNI_CFG_TDLS_BUF_STA_ENABLED_APDEF 0
-
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMIN 0
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STAMAX 10
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_STADEF 0
-
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMIN 0
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APMAX 10
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME_APDEF 0
-
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMIN 10
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STAMAX 20
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_STADEF 10
-
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMIN 10
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APMAX 20
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD_APDEF 10
-
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_STAMIN 0
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_STAMAX 20
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_STADEF 5
-
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_APMIN 0
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_APMAX 20
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES_APDEF 5
-
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STAMIN 10
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STAMAX 2000
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STADEF 200
-
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APMIN 10
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APMAX 2000
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APDEF 200
-
-#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMIN 0
-#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STAMAX 1
-#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF 1
-
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMIN 0
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMAX 9
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STADEF 0
-
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APMIN 0
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APMAX 9
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APDEF 0
-
-#define WNI_CFG_ANTENNA_DIVESITY_STAMIN 0
-#define WNI_CFG_ANTENNA_DIVESITY_STAMAX 3
-#define WNI_CFG_ANTENNA_DIVESITY_STADEF 0
-
-#define WNI_CFG_ANTENNA_DIVESITY_APMIN 0
-#define WNI_CFG_ANTENNA_DIVESITY_APMAX 3
-#define WNI_CFG_ANTENNA_DIVESITY_APDEF 0
-
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMIN 3
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STAMAX 50
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_STADEF 10
-
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMIN 3
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APMAX 50
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT_APDEF 10
-
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN 100
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX 1000
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF 300
-
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMIN 100
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMAX 1000
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APDEF 300
-
-#define WNI_CFG_CURRENT_RSSI_STAMIN 0
-#define WNI_CFG_CURRENT_RSSI_STAMAX 127
-#define WNI_CFG_CURRENT_RSSI_STADEF 0
-
-#define WNI_CFG_CURRENT_RSSI_APMIN 0
-#define WNI_CFG_CURRENT_RSSI_APMAX 127
-#define WNI_CFG_CURRENT_RSSI_APDEF 0
-
-#define WNI_CFG_RTT3_ENABLE_STAMIN 0
-#define WNI_CFG_RTT3_ENABLE_STAMAX 1
-#define WNI_CFG_RTT3_ENABLE_STADEF 1
-
-#define WNI_CFG_RTT3_ENABLE_APMIN 0
-#define WNI_CFG_RTT3_ENABLE_APMAX 1
-#define WNI_CFG_RTT3_ENABLE_APDEF 1
-
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMIN 0
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STAMAX 1
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_STADEF 0
-
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APMIN 0
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APMAX 1
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_APDEF 0
-
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_STAMIN 0
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_STAMAX 1
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_STADEF 0
-
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_APMIN 0
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_APMAX 1
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED_APDEF 0
-
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_STAMIN 0
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_STAMAX 100
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_STADEF 0
-
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_APMIN 0
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_APMAX 100
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE_APDEF 0
-
-#define WNI_CFG_DFS_MASTER_ENABLED_STAMIN 0
-#define WNI_CFG_DFS_MASTER_ENABLED_STAMAX 1
-#define WNI_CFG_DFS_MASTER_ENABLED_STADEF 0
-
-#define WNI_CFG_DFS_MASTER_ENABLED_APMIN 0
-#define WNI_CFG_DFS_MASTER_ENABLED_APMAX 1
-#define WNI_CFG_DFS_MASTER_ENABLED_APDEF 0
-
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STAMIN 0
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STAMAX 1
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_STADEF 0
-
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_APMIN 0
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_APMAX 1
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ_APDEF 0
-
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_STAMIN 0
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_STAMAX 1
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_STADEF 0
-
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_APMIN 0
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_APMAX 1
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED_APDEF 0
-
-#define WNI_CFG_TGT_GTX_USR_CFG_STAMIN 0
-#define WNI_CFG_TGT_GTX_USR_CFG_STAMAX 32
-#define WNI_CFG_TGT_GTX_USR_CFG_STADEF 32
-
-#define WNI_CFG_TGT_GTX_USR_CFG_APMIN 0
-#define WNI_CFG_TGT_GTX_USR_CFG_APMAX 32
-#define WNI_CFG_TGT_GTX_USR_CFG_APDEF 32
-
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_STAMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_STADEF 10
-
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_APMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_APMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_AP_APDEF 10
-
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_STADEF 10
-
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_APMIN 1
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_APMAX 32
-#define WNI_CFG_ASSOC_STA_LIMIT_GO_APDEF 10
-
-#define CFG_PARAM_MAX_NUM 301
-#define CFG_AP_IBUF_MAX_SIZE 246
-#define CFG_AP_SBUF_MAX_SIZE 3233
-#define CFG_STA_IBUF_MAX_SIZE 244
-#define CFG_STA_SBUF_MAX_SIZE 3199
-#define CFG_SEM_MAX_NUM 19
-
-#define CFG_STA_MAGIC_DWORD 0xbeefbeef
-
-#define CFG_AP_MAGIC_DWORD 0xdeaddead
-
-
-#endif
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wni_cfg.h
index 2ae9de219ba1..f7b3b11fdb6f 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wni_cfg.h
@@ -25,321 +25,312 @@
* to the Linux Foundation.
*/
-/*
- * DO NOT EDIT - This file is generated automatically
- */
-
-/*
- * IMPORTANT: This file is for system that supports STA mode ONLY.
- */
-
-
-#ifndef __WNICFGSTA_H
-#define __WNICFGSTA_H
+#ifndef __WNICFG_H
+#define __WNICFG_H
/*
* Configuration Parameter ID for STA
*/
-#define WNI_CFG_STA_ID 0
-#define WNI_CFG_CFP_PERIOD 2
-#define WNI_CFG_CFP_MAX_DURATION 3
-#define WNI_CFG_SSID 4
-#define WNI_CFG_BEACON_INTERVAL 5
-#define WNI_CFG_DTIM_PERIOD 6
-#define WNI_CFG_WEP_KEY_LENGTH 7
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE 8
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE_ROW 4
-#define WNI_CFG_WEP_DEFAULT_KEY_TABLE_COL 1
-#define WNI_CFG_WEP_DEFAULT_KEY_1 8
-#define WNI_CFG_WEP_DEFAULT_KEY_2 9
-#define WNI_CFG_WEP_DEFAULT_KEY_3 10
-#define WNI_CFG_WEP_DEFAULT_KEY_4 11
-#define WNI_CFG_WEP_DEFAULT_KEYID 12
-#define WNI_CFG_EXCLUDE_UNENCRYPTED 13
-#define WNI_CFG_RTS_THRESHOLD 14
-#define WNI_CFG_SHORT_RETRY_LIMIT 15
-#define WNI_CFG_LONG_RETRY_LIMIT 16
-#define WNI_CFG_FRAGMENTATION_THRESHOLD 17
-#define WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME 18
-#define WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME 19
-#define WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME 20
-#define WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME 21
-#define WNI_CFG_JOIN_FAILURE_TIMEOUT 22
-#define WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT 23
-#define WNI_CFG_AUTHENTICATE_RSP_TIMEOUT 24
-#define WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT 25
-#define WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT 26
-#define WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS 27
-#define WNI_CFG_PS_ENABLE_BCN_FILTER 28
-#define WNI_CFG_PS_ENABLE_HEART_BEAT 29
-#define WNI_CFG_PS_ENABLE_RSSI_MONITOR 30
-#define WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT 31
-#define WNI_CFG_RF_SETTLING_TIME_CLK 32
-#define WNI_CFG_SUPPORTED_RATES_11B 33
-#define WNI_CFG_SUPPORTED_RATES_11A 34
-#define WNI_CFG_PHY_MODE 35
-#define WNI_CFG_DOT11_MODE 36
-#define WNI_CFG_OPERATIONAL_RATE_SET 37
-#define WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET 38
-#define WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET 39
-#define WNI_CFG_LISTEN_INTERVAL 40
-#define WNI_CFG_VALID_CHANNEL_LIST 41
-#define WNI_CFG_CURRENT_CHANNEL 42
-#define WNI_CFG_DEFAULT_RATE_INDEX_5GHZ 43
-#define WNI_CFG_DEFAULT_RATE_INDEX_24GHZ 44
-#define WNI_CFG_RATE_ADAPTATION_TYPE 45
-#define WNI_CFG_FIXED_RATE 46
-#define WNI_CFG_FIXED_RATE_MULTICAST_24GHZ 47
-#define WNI_CFG_FIXED_RATE_MULTICAST_5GHZ 48
-#define WNI_CFG_RETRYRATE_POLICY 49
-#define WNI_CFG_RETRYRATE_SECONDARY 50
-#define WNI_CFG_RETRYRATE_TERTIARY 51
-#define WNI_CFG_APSD_ENABLED 52
-#define WNI_CFG_SHARED_KEY_AUTH_ENABLE 53
-#define WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE 54
-#define WNI_CFG_AUTHENTICATION_TYPE 55
-#define WNI_CFG_PRIVACY_ENABLED 57
-#define WNI_CFG_SHORT_PREAMBLE 58
-#define WNI_CFG_SHORT_SLOT_TIME 59
-#define WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY 60
-#define WNI_CFG_QOS_ENABLED 61
-#define WNI_CFG_HCF_ENABLED 62
-#define WNI_CFG_RSN_ENABLED 63
-#define WNI_CFG_BACKGROUND_SCAN_PERIOD 64
-#define WNI_CFG_MAX_NUM_PRE_AUTH 65
-#define WNI_CFG_HEART_BEAT_THRESHOLD 68
-#define WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT 69
-#define WNI_CFG_MANUFACTURER_OUI 70
-#define WNI_CFG_MANUFACTURER_NAME 71
-#define WNI_CFG_MODEL_NUMBER 72
-#define WNI_CFG_MODEL_NAME 73
-#define WNI_CFG_MANUFACTURER_PRODUCT_NAME 74
-#define WNI_CFG_MANUFACTURER_PRODUCT_VERSION 75
-#define WNI_CFG_11D_ENABLED 76
-#define WNI_CFG_MAX_TX_POWER_2_4 77
-#define WNI_CFG_MAX_TX_POWER_5 78
-#define WNI_CFG_NETWORK_DENSITY 79
-#define WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM 80
-#define WNI_CFG_CURRENT_TX_ANTENNA 81
-#define WNI_CFG_CURRENT_RX_ANTENNA 82
-#define WNI_CFG_CURRENT_TX_POWER_LEVEL 83
-#define WNI_CFG_NEW_BSS_FOUND_IND 84
-#define WNI_CFG_PROPRIETARY_RATES_ENABLED 85
-#define WNI_CFG_COUNTRY_CODE 87
-#define WNI_CFG_11H_ENABLED 88
-#define WNI_CFG_WT_CNF_TIMEOUT 89
-#define WNI_CFG_KEEPALIVE_TIMEOUT 90
-#define WNI_CFG_PROXIMITY 91
-#define WNI_CFG_LOG_LEVEL 92
-#define WNI_CFG_OLBC_DETECT_TIMEOUT 93
-#define WNI_CFG_PROTECTION_ENABLED 94
-#define WNI_CFG_11G_PROTECTION_ALWAYS 95
-#define WNI_CFG_FORCE_POLICY_PROTECTION 96
-#define WNI_CFG_11G_SHORT_PREAMBLE_ENABLED 97
-#define WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED 98
-#define WNI_CFG_11G_ONLY_POLICY 99
-#define WNI_CFG_PACKET_CLASSIFICATION 100
-#define WNI_CFG_WME_ENABLED 101
-#define WNI_CFG_ADDTS_RSP_TIMEOUT 102
-#define WNI_CFG_MAX_SP_LENGTH 103
-#define WNI_CFG_SEND_SINGLE_SSID_ALWAYS 105
-#define WNI_CFG_WSM_ENABLED 106
-#define WNI_CFG_EDCA_PROFILE 107
-#define WNI_CFG_EDCA_ANI_ACBK_LOCAL 108
-#define WNI_CFG_EDCA_ANI_ACBE_LOCAL 109
-#define WNI_CFG_EDCA_ANI_ACVI_LOCAL 110
-#define WNI_CFG_EDCA_ANI_ACVO_LOCAL 111
-#define WNI_CFG_EDCA_ANI_ACBK 112
-#define WNI_CFG_EDCA_ANI_ACBE 113
-#define WNI_CFG_EDCA_ANI_ACVI 114
-#define WNI_CFG_EDCA_ANI_ACVO 115
-#define WNI_CFG_EDCA_WME_ACBK_LOCAL 116
-#define WNI_CFG_EDCA_WME_ACBE_LOCAL 117
-#define WNI_CFG_EDCA_WME_ACVI_LOCAL 118
-#define WNI_CFG_EDCA_WME_ACVO_LOCAL 119
-#define WNI_CFG_EDCA_WME_ACBK 120
-#define WNI_CFG_EDCA_WME_ACBE 121
-#define WNI_CFG_EDCA_WME_ACVI 122
-#define WNI_CFG_EDCA_WME_ACVO 123
-#define WNI_CFG_RDET_FLAG 124
-#define WNI_CFG_RADAR_CHANNEL_LIST 125
-#define WNI_CFG_LOCAL_POWER_CONSTRAINT 126
-#define WNI_CFG_ADMIT_POLICY 127
-#define WNI_CFG_ADMIT_BWFACTOR 128
-#define WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE 129
-#define WNI_CFG_CHANNEL_BONDING_MODE 130
-#define WNI_CFG_CB_SECONDARY_CHANNEL_STATE 131
-#define WNI_CFG_DYNAMIC_THRESHOLD_ZERO 132
-#define WNI_CFG_DYNAMIC_THRESHOLD_ONE 133
-#define WNI_CFG_DYNAMIC_THRESHOLD_TWO 134
-#define WNI_CFG_TRIG_STA_BK_SCAN 135
-#define WNI_CFG_DYNAMIC_PROFILE_SWITCHING 136
-#define WNI_CFG_SCAN_CONTROL_LIST 137
-#define WNI_CFG_MIMO_ENABLED 138
-#define WNI_CFG_BLOCK_ACK_ENABLED 139
-#define WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT 140
-#define WNI_CFG_HT_RX_STBC 141
-#define WNI_CFG_HT_CAP_INFO 142
-#define WNI_CFG_HT_AMPDU_PARAMS 143
-#define WNI_CFG_SUPPORTED_MCS_SET 144
-#define WNI_CFG_EXT_HT_CAP_INFO 145
-#define WNI_CFG_TX_BF_CAP 146
-#define WNI_CFG_AS_CAP 147
-#define WNI_CFG_HT_INFO_FIELD1 148
-#define WNI_CFG_HT_INFO_FIELD2 149
-#define WNI_CFG_HT_INFO_FIELD3 150
-#define WNI_CFG_BASIC_MCS_SET 151
-#define WNI_CFG_CURRENT_MCS_SET 152
-#define WNI_CFG_GREENFIELD_CAPABILITY 153
-#define WNI_CFG_VHT_MAX_MPDU_LENGTH 154
-#define WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET 155
-#define WNI_CFG_VHT_LDPC_CODING_CAP 156
-#define WNI_CFG_VHT_SHORT_GI_80MHZ 157
-#define WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ 158
-#define WNI_CFG_VHT_TXSTBC 159
-#define WNI_CFG_VHT_RXSTBC 160
-#define WNI_CFG_VHT_SU_BEAMFORMER_CAP 161
-#define WNI_CFG_VHT_SU_BEAMFORMEE_CAP 162
-#define WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED 163
-#define WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS 164
-#define WNI_CFG_VHT_MU_BEAMFORMER_CAP 165
-#define WNI_CFG_VHT_MU_BEAMFORMEE_CAP 166
-#define WNI_CFG_VHT_TXOP_PS 167
-#define WNI_CFG_VHT_HTC_VHTC_CAP 168
-#define WNI_CFG_VHT_AMPDU_LEN_EXPONENT 169
-#define WNI_CFG_VHT_LINK_ADAPTATION_CAP 170
-#define WNI_CFG_VHT_RX_ANT_PATTERN 171
-#define WNI_CFG_VHT_TX_ANT_PATTERN 172
-#define WNI_CFG_VHT_RX_MCS_MAP 173
-#define WNI_CFG_VHT_TX_MCS_MAP 174
-#define WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE 175
-#define WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE 176
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1 177
-#define WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2 178
-#define WNI_CFG_VHT_BASIC_MCS_SET 179
-#define WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT 180
-#define WNI_CFG_VHT_SS_UNDER_UTIL 181
-#define WNI_CFG_VHT_40MHZ_UTILIZATION 182
-#define WNI_CFG_VHT_80MHZ_UTILIZATION 183
-#define WNI_CFG_VHT_160MHZ_UTILIZATION 184
-#define WNI_CFG_MAX_AMSDU_LENGTH 185
-#define WNI_CFG_MPDU_DENSITY 186
-#define WNI_CFG_NUM_BUFF_ADVERT 187
-#define WNI_CFG_MAX_RX_AMPDU_FACTOR 188
-#define WNI_CFG_SHORT_GI_20MHZ 189
-#define WNI_CFG_SHORT_GI_40MHZ 190
-#define WNI_CFG_RIFS_ENABLED 191
-#define WNI_CFG_MAX_PS_POLL 192
-#define WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE 193
-#define WNI_CFG_RSSI_FILTER_PERIOD 194
-#define WNI_CFG_MIN_RSSI_THRESHOLD 195
-#define WNI_CFG_NTH_BEACON_FILTER 196
-#define WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE 197
-#define WNI_CFG_SCAN_IN_POWERSAVE 198
-#define WNI_CFG_IGNORE_DTIM 199
-#define WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE 200
-#define WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE 201
-#define WNI_CFG_WOWLAN_DEAUTH_ENABLE 202
-#define WNI_CFG_WOWLAN_DISASSOC_ENABLE 203
-#define WNI_CFG_WOWLAN_MAX_MISSED_BEACON 204
-#define WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD 205
-#define WNI_CFG_BA_TIMEOUT 206
-#define WNI_CFG_BA_THRESHOLD_HIGH 207
-#define WNI_CFG_MAX_BA_BUFFERS 208
-#define WNI_CFG_MAX_BA_SESSIONS 209
-#define WNI_CFG_BA_AUTO_SETUP 210
-#define WNI_CFG_ADDBA_REQ_DECLINE 211
-#define WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC 212
-#define WNI_CFG_BG_SCAN_CHANNEL_LIST 213
-#define WNI_CFG_MAX_MEDIUM_TIME 214
-#define WNI_CFG_MAX_MPDUS_IN_AMPDU 215
-#define WNI_CFG_IBSS_AUTO_BSSID 216
-#define WNI_CFG_PROBE_REQ_ADDNIE_FLAG 217
-#define WNI_CFG_PROBE_REQ_ADDNIE_DATA 218
-#define WNI_CFG_PROBE_RSP_ADDNIE_FLAG 219
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA1 220
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA2 221
-#define WNI_CFG_PROBE_RSP_ADDNIE_DATA3 222
-#define WNI_CFG_ASSOC_RSP_ADDNIE_FLAG 223
-#define WNI_CFG_ASSOC_RSP_ADDNIE_DATA 224
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG 225
-#define WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA 226
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG 227
-#define WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA 228
-#define WNI_CFG_WPS_ENABLE 229
-#define WNI_CFG_WPS_STATE 230
-#define WNI_CFG_WPS_PROBE_REQ_FLAG 231
-#define WNI_CFG_WPS_VERSION 232
-#define WNI_CFG_WPS_REQUEST_TYPE 233
-#define WNI_CFG_WPS_CFG_METHOD 234
-#define WNI_CFG_WPS_UUID 235
-#define WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY 236
-#define WNI_CFG_WPS_PIMARY_DEVICE_OUI 237
-#define WNI_CFG_WPS_DEVICE_SUB_CATEGORY 238
-#define WNI_CFG_WPS_ASSOCIATION_STATE 239
-#define WNI_CFG_WPS_CONFIGURATION_ERROR 240
-#define WNI_CFG_WPS_DEVICE_PASSWORD_ID 241
-#define WNI_CFG_WPS_ASSOC_METHOD 242
-#define WNI_CFG_LOW_GAIN_OVERRIDE 243
-#define WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE 244
-#define WNI_CFG_RPE_POLLING_THRESHOLD 245
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG 246
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG 247
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG 248
-#define WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG 249
-#define WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS 250
-#define WNI_CFG_SINGLE_TID_RC 251
-#define WNI_CFG_TX_PWR_CTRL_ENABLE 252
-#define WNI_CFG_MCAST_BCAST_FILTER_SETTING 253
-#define WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK 254
-#define WNI_CFG_DYNAMIC_PS_POLL_VALUE 255
-#define WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT 256
-#define WNI_CFG_TELE_BCN_WAKEUP_EN 257
-#define WNI_CFG_TELE_BCN_TRANS_LI 258
-#define WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS 259
-#define WNI_CFG_TELE_BCN_MAX_LI 260
-#define WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS 261
-#define WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS 262
-#define WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD 263
-#define WNI_CFG_ASSOC_STA_LIMIT 264
-#define WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL 265
-#define WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL 266
-#define WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND 267
-#define WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD 268
-#define WNI_CFG_ENABLE_CLOSE_LOOP 269
-#define WNI_CFG_ENABLE_LTE_COEX 270
-#define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT 271
-#define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT 272
-#define WNI_CFG_ENABLE_MC_ADDR_LIST 273
-#define WNI_CFG_ENABLE_UC_FILTER 274
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION 275
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED 276
-#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP 277
-#define WNI_CFG_AP_LINK_MONITOR_TIMEOUT 278
-#define WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK 279
-#define WNI_CFG_TDLS_BUF_STA_ENABLED 280
-#define WNI_CFG_TDLS_PUAPSD_INACT_TIME 281
-#define WNI_CFG_TDLS_RX_FRAME_THRESHOLD 282
-#define WNI_CFG_PMF_SA_QUERY_MAX_RETRIES 283
-#define WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL 284
-#define WNI_CFG_ENABLE_ADAPT_RX_DRAIN 285
-#define WNI_CFG_FLEX_CONNECT_POWER_FACTOR 286
-#define WNI_CFG_ANTENNA_DIVESITY 287
-#define WNI_CFG_GO_LINK_MONITOR_TIMEOUT 288
-#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY 289
-#define WNI_CFG_CURRENT_RSSI 290
-#define WNI_CFG_RTT3_ENABLE 291
-#define WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL 292
-#define WNI_CFG_TDLS_OFF_CHANNEL_ENABLED 293
-#define WNI_CFG_IBSS_ATIM_WIN_SIZE 294
-#define WNI_CFG_DFS_MASTER_ENABLED 295
-#define WNI_CFG_VHT_ENABLE_TXBF_20MHZ 296
-#define WNI_CFG_TDLS_WMM_MODE_ENABLED 297
-#define WNI_CFG_TGT_GTX_USR_CFG 298
-#define WNI_CFG_ASSOC_STA_LIMIT_GO 299
-#define WNI_CFG_ASSOC_STA_LIMIT_AP 300
-
+enum {
+ WNI_CFG_STA_ID,
+ WNI_CFG_CFP_PERIOD,
+ WNI_CFG_CFP_MAX_DURATION,
+ WNI_CFG_SSID,
+ WNI_CFG_BEACON_INTERVAL,
+ WNI_CFG_DTIM_PERIOD,
+ WNI_CFG_WEP_KEY_LENGTH,
+ WNI_CFG_WEP_DEFAULT_KEY_1,
+ WNI_CFG_WEP_DEFAULT_KEY_2,
+ WNI_CFG_WEP_DEFAULT_KEY_3,
+ WNI_CFG_WEP_DEFAULT_KEY_4,
+ WNI_CFG_WEP_DEFAULT_KEYID,
+ WNI_CFG_EXCLUDE_UNENCRYPTED,
+ WNI_CFG_RTS_THRESHOLD,
+ WNI_CFG_SHORT_RETRY_LIMIT,
+ WNI_CFG_LONG_RETRY_LIMIT,
+ WNI_CFG_FRAGMENTATION_THRESHOLD,
+ WNI_CFG_ACTIVE_MINIMUM_CHANNEL_TIME,
+ WNI_CFG_ACTIVE_MAXIMUM_CHANNEL_TIME,
+ WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME,
+ WNI_CFG_PASSIVE_MAXIMUM_CHANNEL_TIME,
+ WNI_CFG_JOIN_FAILURE_TIMEOUT,
+ WNI_CFG_AUTHENTICATE_FAILURE_TIMEOUT,
+ WNI_CFG_AUTHENTICATE_RSP_TIMEOUT,
+ WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT,
+ WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT,
+ WNI_CFG_RA_PERIODICITY_TIMEOUT_IN_PS,
+ WNI_CFG_PS_ENABLE_BCN_FILTER,
+ WNI_CFG_PS_ENABLE_HEART_BEAT,
+ WNI_CFG_PS_ENABLE_RSSI_MONITOR,
+ WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
+ WNI_CFG_RF_SETTLING_TIME_CLK,
+ WNI_CFG_SUPPORTED_RATES_11B,
+ WNI_CFG_SUPPORTED_RATES_11A,
+ WNI_CFG_PHY_MODE,
+ WNI_CFG_DOT11_MODE,
+ WNI_CFG_OPERATIONAL_RATE_SET,
+ WNI_CFG_EXTENDED_OPERATIONAL_RATE_SET,
+ WNI_CFG_PROPRIETARY_OPERATIONAL_RATE_SET,
+ WNI_CFG_LISTEN_INTERVAL,
+ WNI_CFG_VALID_CHANNEL_LIST,
+ WNI_CFG_CURRENT_CHANNEL,
+ WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
+ WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
+ WNI_CFG_RATE_ADAPTATION_TYPE,
+ WNI_CFG_FIXED_RATE,
+ WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
+ WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
+ WNI_CFG_RETRYRATE_POLICY,
+ WNI_CFG_RETRYRATE_SECONDARY,
+ WNI_CFG_RETRYRATE_TERTIARY,
+ WNI_CFG_APSD_ENABLED,
+ WNI_CFG_SHARED_KEY_AUTH_ENABLE,
+ WNI_CFG_OPEN_SYSTEM_AUTH_ENABLE,
+ WNI_CFG_AUTHENTICATION_TYPE,
+ WNI_CFG_PRIVACY_ENABLED,
+ WNI_CFG_SHORT_PREAMBLE,
+ WNI_CFG_SHORT_SLOT_TIME,
+ WNI_CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY,
+ WNI_CFG_QOS_ENABLED,
+ WNI_CFG_HCF_ENABLED,
+ WNI_CFG_RSN_ENABLED,
+ WNI_CFG_BACKGROUND_SCAN_PERIOD,
+ WNI_CFG_MAX_NUM_PRE_AUTH,
+ WNI_CFG_HEART_BEAT_THRESHOLD,
+ WNI_CFG_PROBE_AFTER_HB_FAIL_TIMEOUT,
+ WNI_CFG_MANUFACTURER_OUI,
+ WNI_CFG_MANUFACTURER_NAME,
+ WNI_CFG_MODEL_NUMBER,
+ WNI_CFG_MODEL_NAME,
+ WNI_CFG_MANUFACTURER_PRODUCT_NAME,
+ WNI_CFG_MANUFACTURER_PRODUCT_VERSION,
+ WNI_CFG_11D_ENABLED,
+ WNI_CFG_MAX_TX_POWER_2_4,
+ WNI_CFG_MAX_TX_POWER_5,
+ WNI_CFG_NETWORK_DENSITY,
+ WNI_CFG_ADAPTIVE_THRESHOLD_ALGORITHM,
+ WNI_CFG_CURRENT_TX_ANTENNA,
+ WNI_CFG_CURRENT_RX_ANTENNA,
+ WNI_CFG_CURRENT_TX_POWER_LEVEL,
+ WNI_CFG_NEW_BSS_FOUND_IND,
+ WNI_CFG_PROPRIETARY_RATES_ENABLED,
+ WNI_CFG_COUNTRY_CODE,
+ WNI_CFG_11H_ENABLED,
+ WNI_CFG_WT_CNF_TIMEOUT,
+ WNI_CFG_KEEPALIVE_TIMEOUT,
+ WNI_CFG_PROXIMITY,
+ WNI_CFG_LOG_LEVEL,
+ WNI_CFG_OLBC_DETECT_TIMEOUT,
+ WNI_CFG_PROTECTION_ENABLED,
+ WNI_CFG_11G_PROTECTION_ALWAYS,
+ WNI_CFG_FORCE_POLICY_PROTECTION,
+ WNI_CFG_11G_SHORT_PREAMBLE_ENABLED,
+ WNI_CFG_11G_SHORT_SLOT_TIME_ENABLED,
+ WNI_CFG_11G_ONLY_POLICY,
+ WNI_CFG_PACKET_CLASSIFICATION,
+ WNI_CFG_WME_ENABLED,
+ WNI_CFG_ADDTS_RSP_TIMEOUT,
+ WNI_CFG_MAX_SP_LENGTH,
+ WNI_CFG_SEND_SINGLE_SSID_ALWAYS,
+ WNI_CFG_WSM_ENABLED,
+ WNI_CFG_EDCA_PROFILE,
+ WNI_CFG_EDCA_ANI_ACBK_LOCAL,
+ WNI_CFG_EDCA_ANI_ACBE_LOCAL,
+ WNI_CFG_EDCA_ANI_ACVI_LOCAL,
+ WNI_CFG_EDCA_ANI_ACVO_LOCAL,
+ WNI_CFG_EDCA_ANI_ACBK,
+ WNI_CFG_EDCA_ANI_ACBE,
+ WNI_CFG_EDCA_ANI_ACVI,
+ WNI_CFG_EDCA_ANI_ACVO,
+ WNI_CFG_EDCA_WME_ACBK_LOCAL,
+ WNI_CFG_EDCA_WME_ACBE_LOCAL,
+ WNI_CFG_EDCA_WME_ACVI_LOCAL,
+ WNI_CFG_EDCA_WME_ACVO_LOCAL,
+ WNI_CFG_EDCA_WME_ACBK,
+ WNI_CFG_EDCA_WME_ACBE,
+ WNI_CFG_EDCA_WME_ACVI,
+ WNI_CFG_EDCA_WME_ACVO,
+ WNI_CFG_RDET_FLAG,
+ WNI_CFG_RADAR_CHANNEL_LIST,
+ WNI_CFG_LOCAL_POWER_CONSTRAINT,
+ WNI_CFG_ADMIT_POLICY,
+ WNI_CFG_ADMIT_BWFACTOR,
+ WNI_CFG_MAX_CONSECUTIVE_BACKGROUND_SCAN_FAILURE,
+ WNI_CFG_CHANNEL_BONDING_MODE,
+ WNI_CFG_CB_SECONDARY_CHANNEL_STATE,
+ WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
+ WNI_CFG_DYNAMIC_THRESHOLD_ONE,
+ WNI_CFG_DYNAMIC_THRESHOLD_TWO,
+ WNI_CFG_TRIG_STA_BK_SCAN,
+ WNI_CFG_DYNAMIC_PROFILE_SWITCHING,
+ WNI_CFG_SCAN_CONTROL_LIST,
+ WNI_CFG_MIMO_ENABLED,
+ WNI_CFG_BLOCK_ACK_ENABLED,
+ WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT,
+ WNI_CFG_HT_RX_STBC,
+ WNI_CFG_HT_CAP_INFO,
+ WNI_CFG_HT_AMPDU_PARAMS,
+ WNI_CFG_SUPPORTED_MCS_SET,
+ WNI_CFG_EXT_HT_CAP_INFO,
+ WNI_CFG_TX_BF_CAP,
+ WNI_CFG_AS_CAP,
+ WNI_CFG_HT_INFO_FIELD1,
+ WNI_CFG_HT_INFO_FIELD2,
+ WNI_CFG_HT_INFO_FIELD3,
+ WNI_CFG_BASIC_MCS_SET,
+ WNI_CFG_CURRENT_MCS_SET,
+ WNI_CFG_GREENFIELD_CAPABILITY,
+ WNI_CFG_VHT_MAX_MPDU_LENGTH,
+ WNI_CFG_VHT_SUPPORTED_CHAN_WIDTH_SET,
+ WNI_CFG_VHT_LDPC_CODING_CAP,
+ WNI_CFG_VHT_SHORT_GI_80MHZ,
+ WNI_CFG_VHT_SHORT_GI_160_AND_80_PLUS_80MHZ,
+ WNI_CFG_VHT_TXSTBC,
+ WNI_CFG_VHT_RXSTBC,
+ WNI_CFG_VHT_SU_BEAMFORMER_CAP,
+ WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
+ WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
+ WNI_CFG_VHT_NUM_SOUNDING_DIMENSIONS,
+ WNI_CFG_VHT_MU_BEAMFORMER_CAP,
+ WNI_CFG_VHT_MU_BEAMFORMEE_CAP,
+ WNI_CFG_VHT_TXOP_PS,
+ WNI_CFG_VHT_HTC_VHTC_CAP,
+ WNI_CFG_VHT_AMPDU_LEN_EXPONENT,
+ WNI_CFG_VHT_LINK_ADAPTATION_CAP,
+ WNI_CFG_VHT_RX_ANT_PATTERN,
+ WNI_CFG_VHT_TX_ANT_PATTERN,
+ WNI_CFG_VHT_RX_MCS_MAP,
+ WNI_CFG_VHT_TX_MCS_MAP,
+ WNI_CFG_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE,
+ WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE,
+ WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT1,
+ WNI_CFG_VHT_CHANNEL_CENTER_FREQ_SEGMENT2,
+ WNI_CFG_VHT_BASIC_MCS_SET,
+ WNI_CFG_VHT_MU_MIMO_CAP_STA_COUNT,
+ WNI_CFG_VHT_SS_UNDER_UTIL,
+ WNI_CFG_VHT_40MHZ_UTILIZATION,
+ WNI_CFG_VHT_80MHZ_UTILIZATION,
+ WNI_CFG_VHT_160MHZ_UTILIZATION,
+ WNI_CFG_MAX_AMSDU_LENGTH,
+ WNI_CFG_MPDU_DENSITY,
+ WNI_CFG_NUM_BUFF_ADVERT,
+ WNI_CFG_MAX_RX_AMPDU_FACTOR,
+ WNI_CFG_SHORT_GI_20MHZ,
+ WNI_CFG_SHORT_GI_40MHZ,
+ WNI_CFG_RIFS_ENABLED,
+ WNI_CFG_MAX_PS_POLL,
+ WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
+ WNI_CFG_RSSI_FILTER_PERIOD,
+ WNI_CFG_MIN_RSSI_THRESHOLD,
+ WNI_CFG_NTH_BEACON_FILTER,
+ WNI_CFG_BROADCAST_FRAME_FILTER_ENABLE,
+ WNI_CFG_SCAN_IN_POWERSAVE,
+ WNI_CFG_IGNORE_DTIM,
+ WNI_CFG_WOWLAN_UCAST_PATTERN_FILTER_ENABLE,
+ WNI_CFG_WOWLAN_CHANNEL_SWITCH_ENABLE,
+ WNI_CFG_WOWLAN_DEAUTH_ENABLE,
+ WNI_CFG_WOWLAN_DISASSOC_ENABLE,
+ WNI_CFG_WOWLAN_MAX_MISSED_BEACON,
+ WNI_CFG_WOWLAN_MAX_SLEEP_PERIOD,
+ WNI_CFG_BA_TIMEOUT,
+ WNI_CFG_BA_THRESHOLD_HIGH,
+ WNI_CFG_MAX_BA_BUFFERS,
+ WNI_CFG_MAX_BA_SESSIONS,
+ WNI_CFG_BA_AUTO_SETUP,
+ WNI_CFG_ADDBA_REQ_DECLINE,
+ WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC,
+ WNI_CFG_BG_SCAN_CHANNEL_LIST,
+ WNI_CFG_MAX_MEDIUM_TIME,
+ WNI_CFG_MAX_MPDUS_IN_AMPDU,
+ WNI_CFG_IBSS_AUTO_BSSID,
+ WNI_CFG_PROBE_REQ_ADDNIE_FLAG,
+ WNI_CFG_PROBE_REQ_ADDNIE_DATA,
+ WNI_CFG_PROBE_RSP_ADDNIE_FLAG,
+ WNI_CFG_PROBE_RSP_ADDNIE_DATA1,
+ WNI_CFG_PROBE_RSP_ADDNIE_DATA2,
+ WNI_CFG_PROBE_RSP_ADDNIE_DATA3,
+ WNI_CFG_ASSOC_RSP_ADDNIE_FLAG,
+ WNI_CFG_ASSOC_RSP_ADDNIE_DATA,
+ WNI_CFG_PROBE_REQ_ADDNP2PIE_FLAG,
+ WNI_CFG_PROBE_REQ_ADDNP2PIE_DATA,
+ WNI_CFG_PROBE_RSP_BCN_ADDNIE_FLAG,
+ WNI_CFG_PROBE_RSP_BCN_ADDNIE_DATA,
+ WNI_CFG_WPS_ENABLE,
+ WNI_CFG_WPS_STATE,
+ WNI_CFG_WPS_PROBE_REQ_FLAG,
+ WNI_CFG_WPS_VERSION,
+ WNI_CFG_WPS_REQUEST_TYPE,
+ WNI_CFG_WPS_CFG_METHOD,
+ WNI_CFG_WPS_UUID,
+ WNI_CFG_WPS_PRIMARY_DEVICE_CATEGORY,
+ WNI_CFG_WPS_PIMARY_DEVICE_OUI,
+ WNI_CFG_WPS_DEVICE_SUB_CATEGORY,
+ WNI_CFG_WPS_ASSOCIATION_STATE,
+ WNI_CFG_WPS_CONFIGURATION_ERROR,
+ WNI_CFG_WPS_DEVICE_PASSWORD_ID,
+ WNI_CFG_WPS_ASSOC_METHOD,
+ WNI_CFG_LOW_GAIN_OVERRIDE,
+ WNI_CFG_ENABLE_PHY_AGC_LISTEN_MODE,
+ WNI_CFG_RPE_POLLING_THRESHOLD,
+ WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG,
+ WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG,
+ WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG,
+ WNI_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG,
+ WNI_CFG_NO_OF_ONCHIP_REORDER_SESSIONS,
+ WNI_CFG_SINGLE_TID_RC,
+ WNI_CFG_TX_PWR_CTRL_ENABLE,
+ WNI_CFG_MCAST_BCAST_FILTER_SETTING,
+ WNI_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK,
+ WNI_CFG_DYNAMIC_PS_POLL_VALUE,
+ WNI_CFG_PS_NULLDATA_AP_RESP_TIMEOUT,
+ WNI_CFG_TELE_BCN_WAKEUP_EN,
+ WNI_CFG_TELE_BCN_TRANS_LI,
+ WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS,
+ WNI_CFG_TELE_BCN_MAX_LI,
+ WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS,
+ WNI_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS,
+ WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD,
+ WNI_CFG_ASSOC_STA_LIMIT,
+ WNI_CFG_SAP_CHANNEL_SELECT_START_CHANNEL,
+ WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL,
+ WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND,
+ WNI_CFG_AP_DATA_AVAIL_POLL_PERIOD,
+ WNI_CFG_ENABLE_CLOSE_LOOP,
+ WNI_CFG_ENABLE_LTE_COEX,
+ WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
+ WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
+ WNI_CFG_ENABLE_MC_ADDR_LIST,
+ WNI_CFG_ENABLE_UC_FILTER,
+ WNI_CFG_ENABLE_LPWR_IMG_TRANSITION,
+ WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED,
+ WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP,
+ WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
+ WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
+ WNI_CFG_TDLS_BUF_STA_ENABLED,
+ WNI_CFG_TDLS_PUAPSD_INACT_TIME,
+ WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
+ WNI_CFG_PMF_SA_QUERY_MAX_RETRIES,
+ WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL,
+ WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
+ WNI_CFG_FLEX_CONNECT_POWER_FACTOR,
+ WNI_CFG_ANTENNA_DIVESITY,
+ WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
+ WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY,
+ WNI_CFG_CURRENT_RSSI,
+ WNI_CFG_RTT3_ENABLE,
+ WNI_CFG_DEBUG_P2P_REMAIN_ON_CHANNEL,
+ WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
+ WNI_CFG_IBSS_ATIM_WIN_SIZE,
+ WNI_CFG_DFS_MASTER_ENABLED,
+ WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
+ WNI_CFG_TDLS_WMM_MODE_ENABLED,
+ WNI_CFG_TGT_GTX_USR_CFG,
+ WNI_CFG_ASSOC_STA_LIMIT_GO,
+ WNI_CFG_ASSOC_STA_LIMIT_AP,
+
+ WNI_CFG_MAX,
+};
/*
* String parameter lengths
*/
@@ -364,6 +355,7 @@
#define WNI_CFG_MANUFACTURER_PRODUCT_VERSION_LEN 32
#define WNI_CFG_MAX_TX_POWER_2_4_LEN 128
#define WNI_CFG_MAX_TX_POWER_5_LEN 128
+#define WNI_CFG_AP_NODE_NAME_LEN 32
#define WNI_CFG_COUNTRY_CODE_LEN 3
#define WNI_CFG_EDCA_ANI_ACBK_LOCAL_LEN 20
#define WNI_CFG_EDCA_ANI_ACBE_LOCAL_LEN 20
@@ -1619,10 +1611,8 @@
#define WNI_CFG_ASSOC_STA_LIMIT_GO_STAMAX 32
#define WNI_CFG_ASSOC_STA_LIMIT_GO_STADEF 10
-#define CFG_PARAM_MAX_NUM 301
#define CFG_STA_IBUF_MAX_SIZE 244
#define CFG_STA_SBUF_MAX_SIZE 3199
-#define CFG_SEM_MAX_NUM 19
#define CFG_STA_MAGIC_DWORD 0xbeefbeef
diff --git a/CORE/MAC/src/cfg/cfgApi.c b/CORE/MAC/src/cfg/cfgApi.c
index 1f3cc5865593..3a519943446e 100644
--- a/CORE/MAC/src/cfg/cfgApi.c
+++ b/CORE/MAC/src/cfg/cfgApi.c
@@ -44,7 +44,7 @@
//---------------------------------------------------------------------
// Static Variables
//----------------------------------------------------------------------
-static tCfgCtl __gCfgEntry[CFG_PARAM_MAX_NUM] ;
+static tCfgCtl __gCfgEntry[WNI_CFG_MAX] ;
static tANI_U32 __gCfgIBufMin[CFG_STA_IBUF_MAX_SIZE] ;
static tANI_U32 __gCfgIBufMax[CFG_STA_IBUF_MAX_SIZE] ;
static tANI_U32 __gCfgIBuf[CFG_STA_IBUF_MAX_SIZE] ;
@@ -141,7 +141,7 @@ tSirRetStatus cfgInit(tpAniSirGlobal pMac)
pMac->cfg.gSBuffer = __gSBuffer;
pMac->cfg.gCfgEntry = __gCfgEntry;
- for (i = 0; i < CFG_PARAM_MAX_NUM; i++) {
+ for (i = 0; i < WNI_CFG_MAX; i++) {
if (!(cfg_static[i].control & CFG_CTL_INT))
cfg_get_str_index(pMac, i);
else
@@ -196,7 +196,7 @@ cfgSetInt(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 value)
tANI_U32 control, mask;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
return eSIR_CFG_INVALID_ID;
@@ -276,7 +276,7 @@ cfgCheckValid(tpAniSirGlobal pMac, tANI_U16 cfgId)
{
tANI_U32 control;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOG3(cfgLog(pMac, LOG3, FL("Invalid cfg id %d"), cfgId);)
return(eSIR_CFG_INVALID_ID);
@@ -327,7 +327,7 @@ wlan_cfgGetInt(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pValue)
tANI_U32 control;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
retVal = eSIR_CFG_INVALID_ID;
@@ -437,7 +437,7 @@ cfgSetStrNotify(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U8 *pStr,
tANI_U32 index, paramLen, control, mask;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
return eSIR_CFG_INVALID_ID;
@@ -539,7 +539,7 @@ wlan_cfgGetStr(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U8 *pBuf, tANI_U32 *pLe
tANI_U32 index, control;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
retVal = eSIR_CFG_INVALID_ID;
@@ -621,7 +621,7 @@ wlan_cfgGetStrMaxLen(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pLength)
tANI_U32 index, control;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
retVal = eSIR_CFG_INVALID_ID;
@@ -687,7 +687,7 @@ wlan_cfgGetStrLen(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 *pLength)
tANI_U32 index, control;
tSirRetStatus retVal;
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);)
retVal = eSIR_CFG_INVALID_ID;
diff --git a/CORE/MAC/src/cfg/cfgDef.h b/CORE/MAC/src/cfg/cfgDef.h
index 0be77c6e9f63..57e9c883dbd2 100644
--- a/CORE/MAC/src/cfg/cfgDef.h
+++ b/CORE/MAC/src/cfg/cfgDef.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2012 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2012,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -68,8 +68,6 @@
#define CFG_CTL_NTF_HW (CFG_CTL_NTF_MAC | CFG_CTL_NTF_PHY)
#define CFG_BUF_INDX_MASK 0x00000fff
-#define CFG_SEM_INDX_MASK 0x0000f000
-#define CFG_SEM_INDX_SHIFT 12
#endif /* __CFGDEF_H */
diff --git a/CORE/MAC/src/cfg/cfgPriv.h b/CORE/MAC/src/cfg/cfgPriv.h
index 7ab0fec80068..b52244892cde 100644
--- a/CORE/MAC/src/cfg/cfgPriv.h
+++ b/CORE/MAC/src/cfg/cfgPriv.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -48,8 +48,7 @@
#include <schApi.h>
#include <cfgApi.h>
#include "cfgDef.h"
-
- #include <wniCfgSta.h>
+#include <wni_cfg.h>
/*--------------------------------------------------------------------*/
/* CFG miscellaneous definition */
@@ -87,6 +86,6 @@ extern void cfgSendHostMsg(tpAniSirGlobal, tANI_U16, tANI_U32, tANI_U32, tANI_U3
extern struct cfgstatic_string cfg_static_string[CFG_MAX_STATIC_STRING];
-extern struct cgstatic cfg_static[CFG_PARAM_MAX_NUM];
+extern struct cgstatic cfg_static[WNI_CFG_MAX];
#endif /* __CFGPRIV_H */
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index 943ba48cab56..57ef67860b5b 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -41,16 +41,12 @@
#include "cfgDebug.h"
#include "wlan_qct_wda.h"
-struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
+struct cgstatic cfg_static[WNI_CFG_MAX] = {
{WNI_CFG_STA_ID,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_RELOAD |
CFG_CTL_NTF_HAL,
0, 255, 1},
- {WNI_CFG_CF_POLLABLE,
- CFG_CTL_RE | CFG_CTL_INT | CFG_CTL_RESTART,
- 0, 255, 1},
-
{WNI_CFG_CFP_PERIOD,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_INT,
WNI_CFG_CFP_PERIOD_STAMIN,
@@ -380,10 +376,6 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
WNI_CFG_AUTHENTICATION_TYPE_STAMAX,
WNI_CFG_AUTHENTICATION_TYPE_STADEF},
- {WNI_CFG_CF_POLL_REQUEST,
- CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT | CFG_CTL_RESTART,
- 0, 255, 1},
-
{WNI_CFG_PRIVACY_ENABLED,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
CFG_CTL_RESTART,
@@ -446,14 +438,6 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
WNI_CFG_MAX_NUM_PRE_AUTH_STAMAX,
WNI_CFG_MAX_NUM_PRE_AUTH_STADEF},
- {WNI_CFG_PREAUTH_CLNUP_TIMEOUT,
- CFG_CTL_INT,
- 0, 255, 1},
-
- {WNI_CFG_RELEASE_AID_TIMEOUT,
- CFG_CTL_INT,
- 0, 255, 1},
-
{WNI_CFG_HEART_BEAT_THRESHOLD,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT |
CFG_CTL_NTF_LIM,
@@ -553,10 +537,6 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
WNI_CFG_PROPRIETARY_RATES_ENABLED_STAMAX,
WNI_CFG_PROPRIETARY_RATES_ENABLED_STADEF},
- {WNI_CFG_AP_NODE_NAME,
- CFG_CTL_RE,
- 0, 255, 1},
-
{WNI_CFG_COUNTRY_CODE,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE,
0, 0, 0},
@@ -666,10 +646,6 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
WNI_CFG_MAX_SP_LENGTH_STAMAX,
WNI_CFG_MAX_SP_LENGTH_STADEF},
- {WNI_CFG_KEEP_ALIVE_STA_LIMIT_THRESHOLD,
- CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
- 0, 255, 1},
-
{WNI_CFG_SEND_SINGLE_SSID_ALWAYS,
CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
WNI_CFG_SEND_SINGLE_SSID_ALWAYS_STAMIN,
@@ -2026,11 +2002,6 @@ struct cfgstatic_string cfg_static_string[CFG_MAX_STATIC_STRING] = {
3,
{0x24, 0x7e, 0x14}},
- {WNI_CFG_AP_NODE_NAME,
- WNI_CFG_AP_NODE_NAME_LEN,
- 0,
- {0}},
-
{WNI_CFG_COUNTRY_CODE,
WNI_CFG_COUNTRY_CODE_LEN,
0,
@@ -2352,7 +2323,7 @@ ProcDnldRsp(tpAniSirGlobal pMac, tANI_U16 length, tANI_U32 *pParam)
PELOGW(cfgLog(pMac, LOGW, FL("CFG hdr totParams %d intParams %d strBufSize %d/%d"),
pHdr->controlSize, pHdr->iBufSize, pHdr->sBufSize, pMac->cfg.gCfgMaxSBufSize);)
- expLen = ((CFG_PARAM_MAX_NUM + 3 * pMac->cfg.gCfgMaxIBufSize) << 2) +
+ expLen = ((WNI_CFG_MAX + 3 * pMac->cfg.gCfgMaxIBufSize) << 2) +
pHdr->sBufSize + sizeof(tCfgBinHdr);
if (length != expLen)
@@ -2364,7 +2335,7 @@ ProcDnldRsp(tpAniSirGlobal pMac, tANI_U16 length, tANI_U32 *pParam)
}
- if (pHdr->controlSize != CFG_PARAM_MAX_NUM)
+ if (pHdr->controlSize != WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("<CFG> Total parameter count mismatch"));)
retVal = WNI_CFG_INVALID_LEN;
@@ -2380,7 +2351,7 @@ ProcDnldRsp(tpAniSirGlobal pMac, tANI_U16 length, tANI_U32 *pParam)
// Copy control array
pDst = (tANI_U32*)pMac->cfg.gCfgEntry;
- pDstEnd = pDst + CFG_PARAM_MAX_NUM;
+ pDstEnd = pDst + WNI_CFG_MAX;
pSrc = pParam;
while (pDst < pDstEnd)
{
@@ -2422,7 +2393,7 @@ ProcDnldRsp(tpAniSirGlobal pMac, tANI_U16 length, tANI_U32 *pParam)
// Calculate max string buffer lengths for all string parameters
bufEnd = pMac->cfg.gCfgMaxSBufSize;
- for (i = CFG_PARAM_MAX_NUM - 1; i >= 0; i--)
+ for (i = WNI_CFG_MAX - 1; i >= 0; i--)
{
if ((pMac->cfg.gCfgEntry[i].control & CFG_CTL_INT) != 0)
continue;
@@ -2816,7 +2787,7 @@ static tANI_U8
CheckParam(tpAniSirGlobal pMac, tANI_U16 cfgId, tANI_U32 flag, tANI_U32 failedResult, tANI_U32 *pResult)
{
// Check if parameter ID is out of bound
- if (cfgId >= CFG_PARAM_MAX_NUM)
+ if (cfgId >= WNI_CFG_MAX)
{
PELOGE(cfgLog(pMac, LOGE, FL("Invalid param id %d"), cfgId);)
*pResult = WNI_CFG_INVALID_PID;
@@ -2907,7 +2878,7 @@ processCfgDownloadReq(tpAniSirGlobal pMac)
uint32_t icount = 0;
uint32_t scount = 0;
- for (i = 0; i < CFG_PARAM_MAX_NUM ; i++) {
+ for (i = 0; i < WNI_CFG_MAX ; i++) {
if ((cfg_static[i].control & CFG_CTL_VALID) != 0) {
if (!(cfg_static[i].control & CFG_CTL_INT)) {
str_cfg = (struct cfgstatic_string *)cfg_static[i].p_str_data;
@@ -2933,7 +2904,7 @@ processCfgDownloadReq(tpAniSirGlobal pMac)
/*Fill the SBUF wih maxLength*/
buf_end = pMac->cfg.gCfgMaxSBufSize;
- for (i = CFG_PARAM_MAX_NUM - 1; i >= 0; i--)
+ for (i = WNI_CFG_MAX - 1; i >= 0; i--)
{
if ((pMac->cfg.gCfgEntry[i].control & CFG_CTL_INT) != 0)
continue;
@@ -2950,7 +2921,7 @@ processCfgDownloadReq(tpAniSirGlobal pMac)
buf_end = buf_start;
}
- for (i = 0; i < CFG_PARAM_MAX_NUM ; i++) {
+ for (i = 0; i < WNI_CFG_MAX ; i++) {
index = pMac->cfg.gCfgEntry[i].control & CFG_BUF_INDX_MASK;
if ((pMac->cfg.gCfgEntry[i].control & CFG_CTL_INT) != 0) {
diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
index 59851d63847b..76922ca39c01 100644
--- a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
+++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
@@ -2428,7 +2428,7 @@ IE ChannelSwitchWrapper (EID_CHANNEL_SWITCH_WRAPPER)
}
IE ExtCap (EID_EXT_CAP)
{
- bytes[8..9];
+ bytes[1..9];
}
IE HTCaps (EID_HT_CAPABILITIES)
diff --git a/CORE/MAC/src/include/cfgGlobal.h b/CORE/MAC/src/include/cfgGlobal.h
index 893ebae20e48..3b7d560b3903 100644
--- a/CORE/MAC/src/include/cfgGlobal.h
+++ b/CORE/MAC/src/include/cfgGlobal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013, 2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013, 2015-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -40,8 +40,7 @@
#include "sirCommon.h"
#include "sirTypes.h"
-#include "wniCfgSta.h"
-#include "wniCfgAp.h"
+#include "wni_cfg.h"
#define CFG_MAX_NUM_STA SIR_MAX_NUM_STA_IN_IBSS
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index c1c5a2a25d67..4f7a6c2f468d 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -37,7 +37,7 @@
*
*
* This file was automatically generated by 'framesc'
- * Mon Aug 8 14:02:12 2016 from the following file(s):
+ * Wed Aug 31 14:43:25 2016 from the following file(s):
*
* dot11f.frms
*
@@ -3189,7 +3189,7 @@ typedef struct sDot11fIEExtCap {
#define DOT11F_EID_EXTCAP ( 127 )
// N.B. These #defines do *not* include the EID & length
-#define DOT11F_IE_EXTCAP_MIN_LEN ( 8 )
+#define DOT11F_IE_EXTCAP_MIN_LEN ( 1 )
#define DOT11F_IE_EXTCAP_MAX_LEN ( 9 )
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 63ff542921cf..571375da133b 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -499,6 +499,8 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_SET_WOW_PULSE_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 193)
+#define SIR_HAL_SET_WAKEUP_GPIO_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 194)
+
#define SIR_HAL_TRAFFIC_STATS_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 195)
#ifdef WLAN_FEATURE_11W
@@ -780,6 +782,7 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_SHORT_RETRY_LIMIT_CNT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 363)
#define SIR_HAL_LONG_RETRY_LIMIT_CNT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 364)
#define SIR_HAL_STA_INACTIVITY_TIMEOUT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 365)
+#define SIR_HAL_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 366)
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
diff --git a/CORE/MAC/src/include/utilsApi.h b/CORE/MAC/src/include/utilsApi.h
index e130f969b104..6b81aae9f840 100644
--- a/CORE/MAC/src/include/utilsApi.h
+++ b/CORE/MAC/src/include/utilsApi.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -58,7 +58,7 @@ extern tANI_U32 gPktAllocCnt, gPktFreeCnt;
extern VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel);
/// Debug dumps
-extern void logPrintf(tpAniSirGlobal, tANI_U32, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4);
+extern int logPrintf(tpAniSirGlobal, tANI_U32, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4);
/// RTAI dump
extern int logRtaiDump(tpAniSirGlobal, tANI_U32, tANI_U32, tANI_U32, tANI_U32, tANI_U32, tANI_U8 *);
diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h
index 05c1921a4786..3cada4883cc8 100644
--- a/CORE/MAC/src/pe/include/limApi.h
+++ b/CORE/MAC/src/pe/include/limApi.h
@@ -293,5 +293,7 @@ typedef void (*tp_pe_packetdump_cb)(adf_nbuf_t netbuf,
void pe_register_packetdump_callback(tp_pe_packetdump_cb pe_packetdump_cb);
void pe_deregister_packetdump_callback(void);
+eHalStatus pe_AcquireGlobalLock(tAniSirLim *pe);
+eHalStatus pe_ReleaseGlobalLock(tAniSirLim *pe);
/************************************************************/
#endif /* __LIM_API_H */
diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h
index f9b16a7a7e3f..aaf4cbed4ac2 100644
--- a/CORE/MAC/src/pe/include/limGlobal.h
+++ b/CORE/MAC/src/pe/include/limGlobal.h
@@ -45,7 +45,7 @@
#include "sirMacPropExts.h"
#include "sirCommon.h"
#include "sirDebug.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "csrApi.h"
#include "sapApi.h"
#include "dot11f.h"
diff --git a/CORE/MAC/src/pe/lim/limAIDmgmt.c b/CORE/MAC/src/pe/lim/limAIDmgmt.c
index 5e286287c251..ca9596092398 100644
--- a/CORE/MAC/src/pe/lim/limAIDmgmt.c
+++ b/CORE/MAC/src/pe/lim/limAIDmgmt.c
@@ -37,7 +37,7 @@
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
#include "sirParams.h"
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 0970f51e9943..2b159410914f 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -38,7 +38,7 @@
*
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "wniApi.h"
#include "sirCommon.h"
#include "sirDebug.h"
@@ -243,6 +243,17 @@ static void __limInitStates(tpAniSirGlobal pMac)
pMac->lim.gLimProbeRespDisableFlag = 0; // control over probe response
}
+#ifdef FEATURE_OEM_DATA_SUPPORT
+static void lim_set_oem_data_req(tpAniSirGlobal mac)
+{
+ mac->lim.gpLimMlmOemDataReq = NULL;
+}
+#else
+static inline void lim_set_oem_data_req(tpAniSirGlobal mac)
+{
+}
+#endif
+
static void __limInitVars(tpAniSirGlobal pMac)
{
// Place holder for Measurement Req/Rsp/Ind related info
@@ -293,7 +304,7 @@ static void __limInitVars(tpAniSirGlobal pMac)
/* Init SAP deffered Q Head */
lim_init_sap_deferred_msg_queue(pMac);
#endif
- pMac->lim.gpLimMlmOemDataReq = NULL;
+ lim_set_oem_data_req(pMac);
}
static void __limInitAssocVars(tpAniSirGlobal pMac)
@@ -976,6 +987,24 @@ pe_open_psession_fail:
return status;
}
+#ifdef FEATURE_OEM_DATA_SUPPORT
+static void lim_free_oem_data_req(tpAniSirGlobal mac)
+{
+ if (mac->lim.gpLimMlmOemDataReq) {
+ if (mac->lim.gpLimMlmOemDataReq->data) {
+ vos_mem_free(mac->lim.gpLimMlmOemDataReq->data);
+ mac->lim.gpLimMlmOemDataReq->data = NULL;
+ }
+ vos_mem_free(mac->lim.gpLimMlmOemDataReq);
+ mac->lim.gpLimMlmOemDataReq = NULL;
+ }
+}
+#else
+static inline void lim_free_oem_data_req(tpAniSirGlobal mac)
+{
+}
+#endif
+
/** -------------------------------------------------------------
\fn peClose
\brief will be called in close sequence from macClose
@@ -999,16 +1028,7 @@ tSirRetStatus peClose(tpAniSirGlobal pMac)
}
vos_mem_free(pMac->lim.limTimers.gpLimCnfWaitTimer);
pMac->lim.limTimers.gpLimCnfWaitTimer = NULL;
-
- if (pMac->lim.gpLimMlmOemDataReq) {
- if (pMac->lim.gpLimMlmOemDataReq->data) {
- vos_mem_free(pMac->lim.gpLimMlmOemDataReq->data);
- pMac->lim.gpLimMlmOemDataReq->data = NULL;
- }
- vos_mem_free(pMac->lim.gpLimMlmOemDataReq);
- pMac->lim.gpLimMlmOemDataReq = NULL;
- }
-
+ lim_free_oem_data_req(pMac);
vos_mem_free(pMac->lim.gpSession);
pMac->lim.gpSession = NULL;
vos_mem_free(pMac->pmm.gPmmTim.pTim);
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index 1f18d9a5b303..597d20f35dfe 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -42,7 +42,7 @@
#include "wniApi.h"
#include "sirCommon.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "pmmApi.h"
#include "cfgApi.h"
@@ -774,12 +774,6 @@ limSendDelStaCnf(tpAniSirGlobal pMac, tSirMacAddr staDsAddr,
}
psessionEntry->limAID = 0;
-
- } else if (
- (mlmStaContext.cleanupTrigger == eLIM_LINK_MONITORING_DISASSOC) ||
- (mlmStaContext.cleanupTrigger == eLIM_LINK_MONITORING_DEAUTH)) {
- /* only for non-STA cases PE/SME is serialized */
- return;
}
if ((mlmStaContext.cleanupTrigger ==
diff --git a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c
index d5ffb77114cf..5c2f29b84af1 100644
--- a/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c
+++ b/CORE/MAC/src/pe/lim/limIbssPeerMgmt.c
@@ -38,7 +38,7 @@
#include "palTypes.h"
#include "aniGlobal.h"
#include "sirCommon.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "limUtils.h"
#include "limAssocUtils.h"
#include "limStaHashApi.h"
diff --git a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
index dffe56913b17..1423d86c1232 100644
--- a/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
+++ b/CORE/MAC/src/pe/lim/limLinkMonitoringAlgo.c
@@ -38,7 +38,7 @@
*/
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
@@ -467,11 +467,19 @@ void limHandleHeartBeatFailure(tpAniSirGlobal pMac,tpPESession psessionEntry)
{
if (!pMac->sys.gSysEnableLinkMonitorMode)
return;
+ /* Ignore HB if channel switch is in progress */
+ if (psessionEntry->gLimSpecMgmt.dot11hChanSwState ==
+ eLIM_11H_CHANSW_RUNNING) {
+ limLog(pMac, LOGE,
+ FL("Ignore Heartbeat failure as Channel switch is in progress"));
+ pMac->pmm.inMissedBeaconScenario = false;
+ return;
+ }
/**
* Beacon frame not received within heartbeat timeout.
*/
- PELOGW(limLog(pMac, LOGW, FL("Heartbeat Failure"));)
+ limLog(pMac, LOGW, FL("Heartbeat Failure"));
pMac->lim.gLimHBfailureCntInLinkEstState++;
/**
diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
index 210e38b7fe16..55d019a438f0 100644
--- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c
@@ -40,7 +40,7 @@
#include "wniApi.h"
#include "sirApi.h"
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "schApi.h"
#include "utilsApi.h"
#include "limTypes.h"
@@ -2349,7 +2349,9 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps
}
#if defined WLAN_FEATURE_VOWIFI
case SIR_MAC_ACTION_RRM:
- if( pMac->rrm.rrmPEContext.rrmEnable )
+ /* Ignore RRM measurement request until DHCP is set */
+ if (pMac->rrm.rrmPEContext.rrmEnable &&
+ pMac->roam.roamSession[psessionEntry->smeSessionId].dhcp_done)
{
switch(pActionHdr->actionID) {
case SIR_MAC_RRM_RADIO_MEASURE_REQ:
@@ -2371,9 +2373,11 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps
}
else
{
- // Else we will just ignore the RRM messages.
+ /* Else we will just ignore the RRM messages.*/
limLog(pMac, LOG1,
- FL("RRM Action frame ignored as RRM is disabled in cfg"));
+ FL("RRM Action frame ignored as rrmEnable is %d or DHCP not completed %d"),
+ pMac->rrm.rrmPEContext.rrmEnable,
+ pMac->roam.roamSession[psessionEntry->smeSessionId].dhcp_done);
}
break;
#endif
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index db95963aa859..011814923840 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -38,7 +38,7 @@
*/
#include "palTypes.h"
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "sirApi.h"
#include "cfgApi.h"
@@ -54,10 +54,6 @@
#include "limAdmitControl.h"
#include "palApi.h"
#include "limSessionUtils.h"
-#ifdef WLAN_FEATURE_11W
-#include "wniCfgAp.h"
-#endif
-
#include "vos_types.h"
#include "vos_utils.h"
@@ -1445,9 +1441,9 @@ if (limPopulateMatchingRateSet(pMac,
(tSirResultCodes) eSIR_MAC_UNSPEC_FAILURE_STATUS, psessionEntry);
goto error;
}
- if (WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APMIN > retryInterval)
+ if (WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STAMIN > retryInterval)
{
- retryInterval = WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_APDEF;
+ retryInterval = WNI_CFG_PMF_SA_QUERY_RETRY_INTERVAL_STADEF;
}
if (tx_timer_create(&pStaDs->pmfSaQueryTimer, "PMF SA Query timer",
limPmfSaQueryTimerHandler, timerId.value,
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
index cf803cb8add7..f89709a86522 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocRspFrame.c
@@ -38,7 +38,7 @@
*/
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
@@ -377,10 +377,6 @@ limProcessAssocRspFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U8 sub
limLog(pMac, LOGE,
FL("LFR3: Reassoc response packet header is NULL"));
return;
- } else if ( pHdr->sa == NULL) {
- limLog(pMac, LOGE,
- FL("LFR3: Reassoc response packet source address is NULL"));
- return;
}
limLog(pMac, LOG1,
diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
index 1fcaab0ceb13..88df4e3d2381 100644
--- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
@@ -39,7 +39,7 @@
*/
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
@@ -1242,38 +1242,6 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse
if (pKeyMapEntry)
{
- if (pKeyMapEntry->key == NULL)
- {
- // Log error
- PELOGE(limLog(pMac, LOGE,
- FL("received Auth frame from peer when key mapping key is NULL"
- MAC_ADDRESS_STR),MAC_ADDR_ARRAY(pHdr->sa));)
-
- /**
- * Key Mapping entry has null key.
- * Send Auth frame with
- * challenge failure status code
- */
- authFrame.authAlgoNumber =
- pRxAuthFrameBody->authAlgoNumber;
- authFrame.authTransactionSeqNumber =
- pRxAuthFrameBody->authTransactionSeqNumber + 1;
- authFrame.authStatusCode =
- eSIR_MAC_CHALLENGE_FAILURE_STATUS;
-
- limSendAuthMgmtFrame(pMac, &authFrame,
- pHdr->sa,
- LIM_NO_WEP_IN_FC,
- psessionEntry,
- eSIR_FALSE);
-
- limRestoreFromAuthState(pMac, eSIR_SME_NO_KEY_MAPPING_KEY_FOR_PEER,
- eSIR_MAC_UNSPEC_FAILURE_REASON,psessionEntry);
-
- return;
- } // if (pKeyMapEntry->key == NULL)
- else
- {
((tpSirMacAuthFrameBody) plainBody)->authAlgoNumber =
sirSwapU16ifNeeded(pRxAuthFrameBody->authAlgoNumber);
((tpSirMacAuthFrameBody) plainBody)->authTransactionSeqNumber =
@@ -1301,7 +1269,6 @@ limProcessAuthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession pse
eSIR_FALSE);
break;
- } // end if (pKeyMapEntry->key == NULL)
} // if (pKeyMapEntry)
else
{
diff --git a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
index 9bc63fe6fdb0..fbef8032fffd 100644
--- a/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessBeaconFrame.c
@@ -37,7 +37,7 @@
*
*/
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
#include "schApi.h"
diff --git a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
index ee433aedc5b5..9639d21ef69f 100644
--- a/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
+++ b/CORE/MAC/src/pe/lim/limProcessCfgUpdates.c
@@ -37,7 +37,7 @@
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "sirMacProtDef.h"
#include "cfgApi.h"
#include "limTypes.h"
@@ -570,28 +570,6 @@ limHandleCFGparamUpdate(tpAniSirGlobal pMac, tANI_U32 cfgId)
pMac->lim.glim_assoc_sta_limit_ap = (tANI_U16)val1;
break;
- case WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC:
- if (wlan_cfgGetInt
- (pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, &val1) !=
- eSIR_SUCCESS)
- {
- limLog(pMac, LOGE,
- FL( "Unable to get WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
- break;
- }
- if (val1)
- {
- limLog(pMac, LOGW,
- FL("BTC requested to disable all RX BA sessions"));
- limDelPerBssBASessionsBtc(pMac);
- }
- else
- {
- limLog(pMac, LOGW,
- FL("Resetting the WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC"));
- }
- break;
-
default:
break;
}
diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
index c0ec1e6973fc..24c41d3e7222 100644
--- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c
@@ -246,10 +246,11 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p
* AP we're currently associated with (case a), then proceed
* with normal deauth processing.
*/
- if ( psessionEntry->limReAssocbssId!=NULL )
- {
- pRoamSessionEntry = peFindSessionByBssid(pMac, psessionEntry->limReAssocbssId, &roamSessionId);
- }
+
+ pRoamSessionEntry =
+ peFindSessionByBssid(pMac, psessionEntry->limReAssocbssId,
+ &roamSessionId);
+
if (limIsReassocInProgress(pMac,psessionEntry) || limIsReassocInProgress(pMac,pRoamSessionEntry)) {
if (!IS_REASSOC_BSSID(pMac,pHdr->sa,psessionEntry)) {
PELOGE(limLog(pMac, LOGE, FL("Rcv Deauth from unknown/different "
diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
index e61f5af459ef..c9b192103173 100644
--- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c
@@ -40,8 +40,7 @@
#include "wniApi.h"
#include "sirApi.h"
#include "aniGlobal.h"
-#include "wniCfgSta.h"
-
+#include "wni_cfg.h"
#include "utilsApi.h"
#include "limTypes.h"
#include "limUtils.h"
@@ -299,6 +298,15 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession
return;
}
+#ifdef FEATURE_WLAN_TDLS
+ /* Delete all the TDLS peers only if Disassoc is received from the AP */
+ if ((LIM_IS_STA_ROLE(psessionEntry)) &&
+ ((pStaDs->mlmStaContext.mlmState == eLIM_MLM_LINK_ESTABLISHED_STATE) ||
+ (pStaDs->mlmStaContext.mlmState == eLIM_MLM_IDLE_STATE)) &&
+ (IS_CURRENT_BSSID(pMac, pHdr->sa, psessionEntry)))
+ limDeleteTDLSPeers(pMac, psessionEntry);
+#endif
+
if (pStaDs->mlmStaContext.mlmState != eLIM_MLM_LINK_ESTABLISHED_STATE)
{
/**
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index 4aa36436ecb7..96607159c6db 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -39,8 +39,7 @@
#include "palTypes.h"
#include "wniApi.h"
#include "wlan_qct_wda.h"
-
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "sirCommon.h"
#include "utilsApi.h"
@@ -75,6 +74,7 @@
#include "vos_memory.h"
#include "nan_datapath.h"
+#define CHECK_BIT(value, mask) ((value) & (1 << (mask)))
void limLogSessionStates(tpAniSirGlobal pMac);
/** -------------------------------------------------------------
@@ -2069,6 +2069,8 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
{
tpPESession psessionEntry;
tANI_U8 sessionId;
+ tDphHashNode *sta_ds = NULL;
+ int i, aid;
tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams*) limMsg->bodyptr;
@@ -2089,11 +2091,33 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
}
else
{
- limSendSmeTdlsLinkEstablishReqRsp(pMac,
- psessionEntry->smeSessionId,
- NULL,
- NULL,
- pTdlsLinkEstablishParams->status) ;
+ for (i = 0;
+ i < sizeof(psessionEntry->peerAIDBitmap)
+ / sizeof(uint32_t); i++) {
+ for (aid = 0; aid < (sizeof(tANI_U32) << 3); aid++) {
+ if (CHECK_BIT(psessionEntry->peerAIDBitmap[i], aid)) {
+ sta_ds = dphGetHashEntry(pMac,
+ (aid + i*(sizeof(tANI_U32) << 3)),
+ &psessionEntry->dph.dphHashTable);
+ if ((sta_ds) &&
+ (pTdlsLinkEstablishParams->staIdx ==
+ sta_ds->staIndex))
+ goto send_link_resp;
+ }
+ }
+ }
+send_link_resp:
+ if (sta_ds)
+ limSendSmeTdlsLinkEstablishReqRsp(pMac,
+ psessionEntry->smeSessionId,
+ sta_ds->staAddr,
+ sta_ds,
+ pTdlsLinkEstablishParams->status);
+ else
+ limSendSmeTdlsLinkEstablishReqRsp(pMac,
+ psessionEntry->smeSessionId,
+ NULL, NULL,
+ pTdlsLinkEstablishParams->status);
}
vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
limMsg->bodyptr = NULL;
@@ -2105,6 +2129,10 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
limProcessRxScanEvent(pMac, limMsg->bodyptr);
break;
+ case WDA_RX_CHN_STATUS_EVENT:
+ lim_process_rx_channel_status_event(pMac, limMsg->bodyptr);
+ break;
+
case WDA_IBSS_PEER_INACTIVITY_IND:
{
limProcessIbssPeerInactivity(pMac, limMsg->bodyptr);
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 351e0e86e04d..47d51f86d7e9 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -36,7 +36,7 @@
*
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "sirApi.h"
#include "sirParams.h"
@@ -3712,7 +3712,7 @@ limProcessMinChannelTimeout(tpAniSirGlobal pMac)
{
// This shouldn't be the case, but when this happens, this timeout should be for the last channelId.
// Get the channelNum as close to correct as possible.
- if(pMac->lim.gpLimMlmScanReq->channelList.channelNumber)
+ if (pMac->lim.gpLimMlmScanReq->channelList.numChannels > 0)
{
channelNum = pMac->lim.gpLimMlmScanReq->channelList.channelNumber[pMac->lim.gpLimMlmScanReq->channelList.numChannels - 1];
}
@@ -3788,7 +3788,7 @@ limProcessMaxChannelTimeout(tpAniSirGlobal pMac)
}
else
{
- if(pMac->lim.gpLimMlmScanReq->channelList.channelNumber)
+ if (pMac->lim.gpLimMlmScanReq->channelList.numChannels > 0)
{
channelNum = pMac->lim.gpLimMlmScanReq->channelList.channelNumber[pMac->lim.gpLimMlmScanReq->channelList.numChannels - 1];
}
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index d52152dafa5e..cfe751db001a 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -36,7 +36,7 @@
*
*/
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "sirApi.h"
#include "schApi.h"
@@ -2961,6 +2961,11 @@ limProcessStaMlmAddBssRspFT(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPESession
tpAddBssParams pAddBssParams = (tpAddBssParams) limMsgQ->bodyptr;
tANI_U32 selfStaDot11Mode = 0;
+#ifdef FEATURE_WLAN_ESE
+ tLimMlmReassocReq *pMlmReassocReq;
+ tANI_U32 val = 0;
+#endif
+
/* Sanity Checks */
if (pAddBssParams == NULL)
@@ -2981,6 +2986,39 @@ limProcessStaMlmAddBssRspFT(tpAniSirGlobal pMac, tpSirMsgQ limMsgQ, tpPESession
limPrintMacAddr(pMac, pAddBssParams->staContext.staMac, LOGE);
goto end;
}
+
+#ifdef FEATURE_WLAN_ESE
+ /*
+ * In case of Ese Reassociation, change the reassoc timer
+ * value.
+ */
+ pMlmReassocReq = (tLimMlmReassocReq *)(psessionEntry->pLimMlmReassocReq);
+ if (pMlmReassocReq == NULL)
+ {
+ limLog(pMac, LOGE,
+ FL("Invalid pMlmReassocReq"));
+ goto end;
+ }
+ val = pMlmReassocReq->reassocFailureTimeout;
+ if (psessionEntry->isESEconnection)
+ {
+ val = val/LIM_MAX_REASSOC_RETRY_LIMIT;
+ }
+ if (tx_timer_deactivate(&pMac->lim.limTimers.gLimReassocFailureTimer) !=
+ TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to deactivate Reassoc failure timer"));
+ }
+ val = SYS_MS_TO_TICKS(val);
+ if (tx_timer_change(&pMac->lim.limTimers.gLimReassocFailureTimer,
+ val, 0) != TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to change Reassociation failure timer"));
+ }
+#endif
+
// Prepare and send Reassociation request frame
// start reassoc timer.
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
@@ -3814,6 +3852,11 @@ static void limProcessSwitchChannelReAssocReq(tpAniSirGlobal pMac, tpPESession p
{
tLimMlmReassocCnf mlmReassocCnf;
tLimMlmReassocReq *pMlmReassocReq;
+
+#ifdef FEATURE_WLAN_ESE
+ tANI_U32 val = 0;
+#endif
+
pMlmReassocReq = (tLimMlmReassocReq *)(psessionEntry->pLimMlmReassocReq);
if(pMlmReassocReq == NULL)
{
@@ -3828,6 +3871,32 @@ static void limProcessSwitchChannelReAssocReq(tpAniSirGlobal pMac, tpPESession p
mlmReassocCnf.resultCode = eSIR_SME_CHANNEL_SWITCH_FAIL;
goto end;
}
+#ifdef FEATURE_WLAN_ESE
+ /*
+ * In case of Ese Reassociation, change the reassoc timer
+ * value.
+ */
+ val = pMlmReassocReq->reassocFailureTimeout;
+ if (psessionEntry->isESEconnection)
+ {
+ val = val/LIM_MAX_REASSOC_RETRY_LIMIT;
+ }
+ if (tx_timer_deactivate(&pMac->lim.limTimers.gLimReassocFailureTimer) !=
+ TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to deactivate Reassoc failure timer"));
+ }
+ val = SYS_MS_TO_TICKS(val);
+ if (tx_timer_change(&pMac->lim.limTimers.gLimReassocFailureTimer,
+ val, 0) != TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to change Reassociation failure timer"));
+
+ }
+#endif
+ pMac->lim.limTimers.gLimReassocFailureTimer.sessionId = psessionEntry->peSessionId;
/// Start reassociation failure timer
MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, psessionEntry->peSessionId, eLIM_REASSOC_FAIL_TIMER));
if (tx_timer_activate(&pMac->lim.limTimers.gLimReassocFailureTimer)
@@ -5132,3 +5201,34 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf)
}
vos_mem_free(buf);
}
+
+/**
+ * lim_process_rx_channel_status_event() - processes
+ * event WDA_RX_CHN_STATUS_EVENT
+ * @mac_ctx Pointer to Global MAC structure
+ * @buf: Received message info
+ *
+ * Return: None
+ */
+void lim_process_rx_channel_status_event(tpAniSirGlobal mac_ctx, void *buf)
+{
+ struct lim_channel_status *channel_status_info = buf;
+
+ if (ACS_FW_REPORT_PARAM_CONFIGURED) {
+ if (channel_status_info != NULL)
+ lim_add_channel_status_info(mac_ctx,
+ channel_status_info,
+ channel_status_info->channel_id);
+ else
+ VOS_TRACE(VOS_MODULE_ID_PE,
+ VOS_TRACE_LEVEL_ERROR,
+ "%s: ACS evt report buf NULL", __func__);
+ } else {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "%s: Error evt report", __func__);
+ }
+
+ if (NULL != buf)
+ vos_mem_free(buf);
+ return;
+}
diff --git a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
index 4cef79044b99..859413747cad 100644
--- a/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessProbeReqFrame.c
@@ -36,7 +36,7 @@
*
*/
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
diff --git a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c
index e6c2d4b39d93..ea015bd0cdd1 100644
--- a/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessProbeRspFrame.c
@@ -38,7 +38,7 @@
*/
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "schApi.h"
#include "utilsApi.h"
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 866f7b648c6b..90fa6d1316cf 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -39,7 +39,7 @@
#include "palTypes.h"
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "sirApi.h"
#include "schApi.h"
@@ -1199,9 +1199,14 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
tANI_U8 *vht_cap_ie;
tANI_U16 vht_cap_len = 0;
#endif /* WLAN_FEATURE_11AC */
+ uint8_t *vendor_tpc_ie;
tSirRetStatus status, rc = eSIR_SUCCESS;
tDot11fIEExtCap extracted_extcap = {0};
bool extcap_present = true;
+ uint32_t lim_11h_enable = WNI_CFG_11H_ENABLED_STADEF;
+
+ wlan_cfgGetInt(pMac, WNI_CFG_11H_ENABLED, &lim_11h_enable);
+
pMac->lim.fOffloadScanPending = 0;
pMac->lim.fOffloadScanP2PSearch = 0;
@@ -1254,6 +1259,11 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
#endif /* WLAN_FEATURE_11AC */
}
+ if (lim_11h_enable) {
+ addn_ie_len += DOT11F_IE_WFATPC_MAX_LEN + 2;
+ len += DOT11F_IE_WFATPC_MAX_LEN + 2;
+ }
+
pScanOffloadReq = vos_mem_malloc(len);
if ( NULL == pScanOffloadReq )
{
@@ -1358,6 +1368,24 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac,
#endif /* WLAN_FEATURE_11AC */
}
+ if (lim_11h_enable) {
+ tDot11fIEWFATPC wfa_tpc;
+ vendor_tpc_ie = (uint8_t *) pScanOffloadReq +
+ pScanOffloadReq->uIEFieldOffset +
+ pScanOffloadReq->uIEFieldLen;
+ PopulateDot11fWFATPC(pMac, &wfa_tpc,
+ rrmGetMgmtTxPower(pMac, NULL), 0);
+ vendor_tpc_ie[0] = DOT11F_EID_WFATPC;
+ vendor_tpc_ie[1] = DOT11F_IE_WFATPC_MAX_LEN;
+ vos_mem_copy(&vendor_tpc_ie[2], SIR_MAC_WFA_TPC_OUI,
+ SIR_MAC_WFA_TPC_OUI_SIZE);
+ vos_mem_copy(&vendor_tpc_ie[SIR_MAC_WFA_TPC_OUI_SIZE + 2],
+ ((uint8_t *)&wfa_tpc) + 1,
+ DOT11F_IE_WFATPC_MAX_LEN
+ - SIR_MAC_WFA_TPC_OUI_SIZE);
+ pScanOffloadReq->uIEFieldLen += DOT11F_IE_WFATPC_MAX_LEN + 2;
+ }
+
rc = wdaPostCtrlMsg(pMac, &msg);
if (rc != eSIR_SUCCESS)
{
@@ -2077,17 +2105,14 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
psessionEntry->txMuBformee = pSmeJoinReq->txMuBformee;
psessionEntry->enableVhtpAid = pSmeJoinReq->enableVhtpAid;
psessionEntry->enableVhtGid = pSmeJoinReq->enableVhtGid;
- if( psessionEntry->txBFIniFeatureEnabled )
- {
- if (cfgSetInt(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
- psessionEntry->txBFIniFeatureEnabled)
- != eSIR_SUCCESS)
- {
- limLog(pMac, LOGE, FL("could not set "
- "WNI_CFG_VHT_SU_BEAMFORMEE_CAP at CFG"));
+ if (cfgSetInt(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
+ psessionEntry->txBFIniFeatureEnabled)) {
+ limLog(pMac, LOGE, FL("Could not set WNI_CFG_VHT_SU_BEAMFORMEE_CAP at CFG"));
retCode = eSIR_LOGP_EXCEPTION;
goto end;
- }
+ }
+
+ if (psessionEntry->txBFIniFeatureEnabled) {
if (cfgSetInt(pMac, WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED,
pSmeJoinReq->txBFCsnValue)
!= eSIR_SUCCESS)
diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c
index a64095ce40cb..bf6ac103fc68 100644
--- a/CORE/MAC/src/pe/lim/limProcessTdls.c
+++ b/CORE/MAC/src/pe/lim/limProcessTdls.c
@@ -2815,8 +2815,7 @@ void PopulateDot11fTdlsExtCapability(tpAniSirGlobal pMac,
p_ext_cap->TDLSProhibited = TDLS_PROHIBITED ;
extCapability->present = 1 ;
- /* For STA cases we alwasy support 11mc - Allow MAX length */
- extCapability->num_bytes = DOT11F_IE_EXTCAP_MAX_LEN;
+ extCapability->num_bytes = lim_compute_ext_cap_ie_length(extCapability);
return ;
}
@@ -2969,10 +2968,14 @@ void limSendSmeTdlsLinkEstablishReqRsp(tpAniSirGlobal pMac,
limLog(pMac, LOGE, FL("Failed to allocate memory"));
return ;
}
+
+ vos_mem_zero(pTdlsLinkEstablishReqRsp, sizeof(*pTdlsLinkEstablishReqRsp));
+
pTdlsLinkEstablishReqRsp->statusCode = status ;
- if ( peerMac )
+ if (pStaDs && peerMac)
{
vos_mem_copy(pTdlsLinkEstablishReqRsp->peerMac, peerMac, sizeof(tSirMacAddr));
+ pTdlsLinkEstablishReqRsp->sta_idx = pStaDs->staIndex;
}
pTdlsLinkEstablishReqRsp->sessionId = sessionId;
mmhMsg.type = eWNI_SME_TDLS_LINK_ESTABLISH_RSP ;
diff --git a/CORE/MAC/src/pe/lim/limPropExtsUtils.c b/CORE/MAC/src/pe/lim/limPropExtsUtils.c
index 752c1fc81d8e..e110155ca8c7 100644
--- a/CORE/MAC/src/pe/lim/limPropExtsUtils.c
+++ b/CORE/MAC/src/pe/lim/limPropExtsUtils.c
@@ -39,7 +39,7 @@
*
*/
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "sirCommon.h"
#include "sirDebug.h"
#include "utilsApi.h"
diff --git a/CORE/MAC/src/pe/lim/limRoamingAlgo.c b/CORE/MAC/src/pe/lim/limRoamingAlgo.c
index b44504681ce6..995ef7966c94 100644
--- a/CORE/MAC/src/pe/lim/limRoamingAlgo.c
+++ b/CORE/MAC/src/pe/lim/limRoamingAlgo.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -37,7 +37,7 @@
*
*/
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "limTypes.h"
#include "limTimerUtils.h"
diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.c b/CORE/MAC/src/pe/lim/limScanResultUtils.c
index 200423e1d33d..772f2ed4dd0a 100644
--- a/CORE/MAC/src/pe/lim/limScanResultUtils.c
+++ b/CORE/MAC/src/pe/lim/limScanResultUtils.c
@@ -428,8 +428,7 @@ limCheckAndAddBssDescription(tpAniSirGlobal pMac,
( pMac->lim.gLimReturnAfterFirstMatch & 0x01 ) &&
(pMac->lim.gpLimMlmScanReq->numSsid) &&
!limIsScanRequestedSSID(pMac, &pBPR->ssId)) ||
- (!fFound && (pMac->lim.gpLimMlmScanReq &&
- pMac->lim.gpLimMlmScanReq->bssId) &&
+ (!fFound && (pMac->lim.gpLimMlmScanReq) &&
!vos_mem_compare(bssid,
&pMac->lim.gpLimMlmScanReq->bssId, 6))))
{
diff --git a/CORE/MAC/src/pe/lim/limSecurityUtils.c b/CORE/MAC/src/pe/lim/limSecurityUtils.c
index 0241dc010adc..d788cbfe0646 100644
--- a/CORE/MAC/src/pe/lim/limSecurityUtils.c
+++ b/CORE/MAC/src/pe/lim/limSecurityUtils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -40,7 +40,7 @@
#include "wniApi.h"
#include "sirCommon.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index c0ede03c5641..ba5d771c44db 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -50,7 +50,7 @@
#include "limAssocUtils.h"
#include "limFT.h"
#ifdef WLAN_FEATURE_11W
-#include "wniCfgAp.h"
+#include "wni_cfg.h"
#endif
#ifdef WLAN_FEATURE_VOWIFI_11R
@@ -380,23 +380,6 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac,
limLog(pMac, LOGE,
FL("session entry null, ext capabilities will not be populated"));
- // That's it-- now we pack it. First, how much space are we going to
- // need?
- nStatus = dot11fGetPackedProbeRequestSize( pMac, &pr, &nPayload );
- if ( DOT11F_FAILED( nStatus ) )
- {
- limLog( pMac, LOGP, FL("Failed to calculate the packed size f"
- "or a Probe Request (0x%08x)."), nStatus );
- // We'll fall back on the worst case scenario:
- nPayload = sizeof( tDot11fProbeRequest );
- }
- else if ( DOT11F_WARNED( nStatus ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while calculating"
- "the packed size for a Probe Request ("
- "0x%08x)."), nStatus );
- }
-
if (addn_ielen) {
vos_mem_set((tANI_U8 *)&extracted_ext_cap,
@@ -413,11 +396,36 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac,
if (p_ext_cap->interworkingService)
p_ext_cap->qosMap = 1;
- extracted_ext_cap_flag = lim_is_ext_cap_ie_present(p_ext_cap);
+ extracted_ext_cap.num_bytes =
+ lim_compute_ext_cap_ie_length(&extracted_ext_cap);
+ extracted_ext_cap_flag = (extracted_ext_cap.num_bytes > 0);
}
}
+ /* merge the ExtCap struct */
+ if (extracted_ext_cap_flag)
+ lim_merge_extcap_struct(&pr.ExtCap, &extracted_ext_cap, true);
- nBytes = nPayload + sizeof( tSirMacMgmtHdr ) + addn_ielen;
+ /*
+ * That's it-- now we pack it.
+ * First, how much space are we going to need?
+ */
+ nStatus = dot11fGetPackedProbeRequestSize(pMac, &pr, &nPayload);
+ if (DOT11F_FAILED(nStatus))
+ {
+ limLog(pMac, LOGE,
+ FL("Failed to calculate the packed size for a Probe Request (0x%08x)."),
+ nStatus);
+ /* We'll fall back on the worst case scenario: */
+ nPayload = sizeof(tDot11fProbeRequest);
+ }
+ else if (DOT11F_WARNED(nStatus))
+ {
+ limLog(pMac, LOGW,
+ FL("There were warnings while calculating the packed size for a Probe Request (0x%08x)."),
+ nStatus);
+ }
+
+ nBytes = nPayload + sizeof(tSirMacMgmtHdr) + addn_ielen;
// Ok-- try to allocate some memory:
halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
@@ -446,10 +454,6 @@ limSendProbeReqMgmtFrame(tpAniSirGlobal pMac,
return nSirStatus; // allocated!
}
- /* merge the ExtCap struct*/
- if (extracted_ext_cap_flag)
- lim_merge_extcap_struct(&pr.ExtCap, &extracted_ext_cap);
-
// That done, pack the Probe Request:
nStatus = dot11fPackProbeRequest( pMac, &pr, pFrame +
sizeof( tSirMacMgmtHdr ),
@@ -575,7 +579,7 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac,
{
tDot11fProbeResponse *pFrm;
tSirRetStatus nSirStatus;
- tANI_U32 cfg, nPayload, nBytes, nStatus;
+ tANI_U32 cfg, nPayload, nBytes = 0, nStatus;
tpSirMacMgmtHdr pMacHdr;
tANI_U8 *pFrame;
void *pPacket;
@@ -741,25 +745,6 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac,
#endif // defined(FEATURE_WLAN_WAPI)
- nStatus = dot11fGetPackedProbeResponseSize( pMac, pFrm, &nPayload );
- if ( DOT11F_FAILED( nStatus ) )
- {
- limLog( pMac, LOGP, FL("Failed to calculate the packed size f"
- "or a Probe Response (0x%08x)."),
- nStatus );
- // We'll fall back on the worst case scenario:
- nPayload = sizeof( tDot11fProbeResponse );
- }
- else if ( DOT11F_WARNED( nStatus ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while calculating"
- "the packed size for a Probe Response "
- "(0x%08x)."), nStatus );
- }
-
- nBytes = nPayload + sizeof( tSirMacMgmtHdr );
-
-
if( pMac->lim.gpLimRemainOnChanReq )
{
nBytes += (pMac->lim.gpLimRemainOnChanReq->length - sizeof( tSirRemainOnChnReq ) );
@@ -827,6 +812,29 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac,
}
}
}
+ /* merge ExtCap IE */
+ if (extractedExtCapFlag)
+ {
+ lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap, true);
+ }
+
+ nStatus = dot11fGetPackedProbeResponseSize(pMac, pFrm, &nPayload);
+ if (DOT11F_FAILED(nStatus))
+ {
+ limLog(pMac, LOGE,
+ FL("Failed to calculate the packed size for a Probe Response (0x%08x)."),
+ nStatus);
+ /* We'll fall back on the worst case scenario: */
+ nPayload = sizeof(tDot11fProbeResponse);
+ }
+ else if (DOT11F_WARNED(nStatus))
+ {
+ limLog(pMac, LOGW,
+ FL("There were warnings while calculating the packed size for a Probe Response (0x%08x)."),
+ nStatus);
+ }
+
+ nBytes += nPayload + sizeof(tSirMacMgmtHdr);
halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
( tANI_U16 )nBytes, ( void** ) &pFrame,
@@ -868,11 +876,6 @@ limSendProbeRspMgmtFrame(tpAniSirGlobal pMac,
sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId);
- /*merge ExtCap IE*/
- if (extractedExtCapFlag)
- {
- lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap);
- }
// That done, pack the Probe Response:
nStatus = dot11fPackProbeResponse( pMac, pFrm, pFrame + sizeof(tSirMacMgmtHdr),
nPayload, &nPayload );
@@ -1224,7 +1227,7 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
tSirRetStatus nSirStatus;
tANI_U8 lleMode = 0, fAddTS;
tHalBitVal qosMode, wmeMode;
- tANI_U32 nPayload, nBytes, nStatus;
+ tANI_U32 nPayload = 0, nBytes = 0, nStatus;
void *pPacket;
eHalStatus halstatus;
tUpdateBeaconParams beaconParams;
@@ -1409,23 +1412,6 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
}
// Allocate a buffer for this frame:
- nStatus = dot11fGetPackedAssocResponseSize( pMac, &frm, &nPayload );
- if ( DOT11F_FAILED( nStatus ) )
- {
- limLog( pMac, LOGE, FL("Failed to calculate the packed size f"
- "or an Association Response (0x%08x)."),
- nStatus );
- return;
- }
- else if ( DOT11F_WARNED( nStatus ) )
- {
- limLog( pMac, LOGW, FL("There were warnings while calculating "
- "the packed size for an Association Re"
- "sponse (0x%08x)."), nStatus );
- }
-
- nBytes = sizeof( tSirMacMgmtHdr ) + nPayload;
-
if ( pAssocReq != NULL )
{
addnIEPresent = (psessionEntry->addIeParams.assocRespDataLen != 0);
@@ -1473,6 +1459,29 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
addnIEPresent, pAssocReq->addIEPresent);
}
}
+ /* merge the ExtCap struct */
+ if (extractedExtCapFlag)
+ {
+ lim_merge_extcap_struct(&(frm.ExtCap), &extractedExtCap, true);
+ }
+
+ nStatus = dot11fGetPackedAssocResponseSize(pMac, &frm, &nPayload);
+ if (DOT11F_FAILED(nStatus))
+ {
+ limLog(pMac, LOGE,
+ FL("Failed to calculate the packed size for an Association Response (0x%08x)."),
+ nStatus);
+ return;
+ }
+ else if (DOT11F_WARNED(nStatus))
+ {
+ limLog(pMac, LOGW,
+ FL("There were warnings while calculating the packed size for an Association Response (0x%08x)."),
+ nStatus);
+ }
+
+ nBytes += sizeof(tSirMacMgmtHdr) + nPayload;
+
halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
( tANI_U16 )nBytes, ( void** ) &pFrame,
( void** ) &pPacket );
@@ -1507,11 +1516,6 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId);
- /* merge the ExtCap struct*/
- if (extractedExtCapFlag)
- {
- lim_merge_extcap_struct(&(frm.ExtCap), &extractedExtCap);
- }
nStatus = dot11fPackAssocResponse( pMac, &frm,
pFrame + sizeof( tSirMacMgmtHdr ),
nPayload, &nPayload );
@@ -2039,7 +2043,7 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac,
tANI_U8 *pFrame;
tSirRetStatus nSirStatus;
tLimMlmAssocCnf mlmAssocCnf;
- tANI_U32 nBytes, nPayload, nStatus;
+ tANI_U32 nBytes = 0, nPayload, nStatus;
tANI_U8 fQosEnabled, fWmeEnabled, fWsmEnabled;
void *pPacket;
eHalStatus halstatus;
@@ -2055,6 +2059,11 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac,
tDot11fIEExtCap extractedExtCap;
tANI_BOOLEAN extractedExtCapFlag = eANI_BOOLEAN_TRUE;
tpSirMacMgmtHdr pMacHdr;
+ tDot11fIEExtCap ap_extcap;
+ tANI_U8 *ap_extcap_ptr = NULL;
+ tANI_U8 *pIe = NULL;
+ tANI_U32 ieLen = 0;
+ tANI_U32 fixed_param_len = 0;
if(NULL == psessionEntry)
{
@@ -2100,7 +2109,10 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac,
extractedExtCap.bytes;
if (p_ext_cap->interworkingService)
p_ext_cap->qosMap = 1;
- extractedExtCapFlag = lim_is_ext_cap_ie_present(p_ext_cap);
+
+ extractedExtCap.num_bytes =
+ lim_compute_ext_cap_ie_length(&extractedExtCap);
+ extractedExtCapFlag = (extractedExtCap.num_bytes > 0);
}
} else {
limLog(pMac, LOG1,
@@ -2305,24 +2317,50 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac,
#endif
}
#endif
+ /* merge the ExtCap struct */
+ if (extractedExtCapFlag)
+ {
+ lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap, true);
+ }
- nStatus = dot11fGetPackedAssocRequestSize( pMac, pFrm, &nPayload );
- if ( DOT11F_FAILED( nStatus ) )
+ /* Clear the bits in EXTCAP IE if AP not advertise it in beacon */
+ if (pFrm->ExtCap.present && psessionEntry->is_ext_caps_present)
{
- limLog( pMac, LOGP, FL("Failed to calculate the packed size f"
- "or an Association Request (0x%08x)."),
- nStatus );
- // We'll fall back on the worst case scenario:
- nPayload = sizeof( tDot11fAssocRequest );
+ fixed_param_len = DOT11F_FF_TIMESTAMP_LEN +
+ DOT11F_FF_BEACONINTERVAL_LEN +
+ DOT11F_FF_CAPABILITIES_LEN;
+ vos_mem_zero((tANI_U8*)&ap_extcap, sizeof(tDot11fIEExtCap));
+ if (psessionEntry->beacon && psessionEntry->bcnLen > fixed_param_len)
+ {
+ pIe = psessionEntry->beacon + fixed_param_len;
+ ieLen = psessionEntry->bcnLen - fixed_param_len;
+
+ /* Extract EXTCAP IE from beacon frame */
+ ap_extcap_ptr = lim_get_ie_ptr(pIe, ieLen, DOT11F_EID_EXTCAP);
+ lim_update_extcap_struct(pMac, ap_extcap_ptr, &ap_extcap);
+
+ /* Clear the bits if AP not advertise it in beacon */
+ lim_merge_extcap_struct(&pFrm->ExtCap, &ap_extcap, false);
+ }
}
- else if ( DOT11F_WARNED( nStatus ) )
+
+ nStatus = dot11fGetPackedAssocRequestSize(pMac, pFrm, &nPayload);
+ if (DOT11F_FAILED(nStatus))
{
- limLog( pMac, LOGW, FL("There were warnings while calculating "
- "the packed size for an Association Re "
- "quest(0x%08x)."), nStatus );
+ limLog(pMac, LOGE,
+ FL("Failed to calculate the packed size for an Association Request (0x%08x)."),
+ nStatus);
+ /* We'll fall back on the worst case scenario: */
+ nPayload = sizeof(tDot11fAssocRequest);
+ }
+ else if (DOT11F_WARNED(nStatus))
+ {
+ limLog(pMac, LOGW,
+ FL("There were warnings while calculating the packed size for an Association Request(0x%08x)."),
+ nStatus);
}
- nBytes = nPayload + sizeof( tSirMacMgmtHdr ) + nAddIELen;
+ nBytes = nPayload + sizeof(tSirMacMgmtHdr) + nAddIELen;
halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
( tANI_U16 )nBytes, ( void** ) &pFrame,
@@ -2367,12 +2405,6 @@ limSendAssocReqMgmtFrame(tpAniSirGlobal pMac,
vos_mem_free(pFrm);
return;
}
- /* merge the ExtCap struct*/
- if (extractedExtCapFlag)
- {
- lim_merge_extcap_struct(&pFrm->ExtCap, &extractedExtCap);
- }
-
// That done, pack the Assoc Request:
nStatus = dot11fPackAssocRequest( pMac, pFrm, pFrame +
sizeof(tSirMacMgmtHdr),
@@ -2957,6 +2989,16 @@ void limSendRetryReassocReqFrame(tpAniSirGlobal pMac,
{
tLimMlmReassocCnf mlmReassocCnf; // keep sme
tLimMlmReassocReq *pTmpMlmReassocReq = NULL;
+#ifdef FEATURE_WLAN_ESE
+ tANI_U32 val=0;
+#endif
+ if (pMlmReassocReq == NULL)
+ {
+ limLog(pMac, LOGE,
+ FL("Invalid pMlmReassocReq"));
+ goto end;
+ }
+
if(NULL == pTmpMlmReassocReq)
{
pTmpMlmReassocReq = vos_mem_malloc(sizeof(tLimMlmReassocReq));
@@ -2967,6 +3009,31 @@ void limSendRetryReassocReqFrame(tpAniSirGlobal pMac,
// Prepare and send Reassociation request frame
// start reassoc timer.
+#ifdef FEATURE_WLAN_ESE
+ /*
+ * In case of Ese Reassociation, change the reassoc timer
+ * value.
+ */
+ val = pMlmReassocReq->reassocFailureTimeout;
+ if (psessionEntry->isESEconnection)
+ {
+ val = val/LIM_MAX_REASSOC_RETRY_LIMIT;
+ }
+ if (tx_timer_deactivate(&pMac->lim.limTimers.gLimReassocFailureTimer) !=
+ TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to deactivate Reassoc failure timer"));
+ }
+ val = SYS_MS_TO_TICKS(val);
+ if (tx_timer_change(&pMac->lim.limTimers.gLimReassocFailureTimer,
+ val, 0) != TX_SUCCESS)
+ {
+ limLog(pMac, LOGP,
+ FL("unable to change Reassociation failure timer"));
+ }
+#endif
+
pMac->lim.limTimers.gLimReassocFailureTimer.sessionId = psessionEntry->peSessionId;
// Start reassociation failure timer
MTRACE(vos_trace(VOS_MODULE_ID_PE, TRACE_CODE_TIMER_ACTIVATE,
diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
index 5c7aba25569a..bc4ea08e6ea2 100644
--- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
@@ -40,8 +40,7 @@
#include "wniApi.h"
#include "sirCommon.h"
#include "aniGlobal.h"
-
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "sysDef.h"
#include "cfgApi.h"
@@ -555,28 +554,26 @@ limSendSmeJoinReassocRsp(tpAniSirGlobal pMac, tANI_U16 msgType,
}
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (psessionEntry->cc_switch_mode != VOS_MCC_TO_SCC_SWITCH_DISABLE) {
- pSirSmeJoinRsp->HTProfile.htSupportedChannelWidthSet =
- psessionEntry->htSupportedChannelWidthSet;
- pSirSmeJoinRsp->HTProfile.htRecommendedTxWidthSet =
- psessionEntry->htRecommendedTxWidthSet;
- pSirSmeJoinRsp->HTProfile.htSecondaryChannelOffset =
- psessionEntry->htSecondaryChannelOffset;
- pSirSmeJoinRsp->HTProfile.dot11mode =
- psessionEntry->dot11mode;
- pSirSmeJoinRsp->HTProfile.htCapability =
- psessionEntry->htCapability;
+ pSirSmeJoinRsp->HTProfile.htSupportedChannelWidthSet =
+ psessionEntry->htSupportedChannelWidthSet;
+ pSirSmeJoinRsp->HTProfile.htRecommendedTxWidthSet =
+ psessionEntry->htRecommendedTxWidthSet;
+ pSirSmeJoinRsp->HTProfile.htSecondaryChannelOffset =
+ psessionEntry->htSecondaryChannelOffset;
+ pSirSmeJoinRsp->HTProfile.dot11mode =
+ psessionEntry->dot11mode;
+ pSirSmeJoinRsp->HTProfile.htCapability =
+ psessionEntry->htCapability;
#ifdef WLAN_FEATURE_11AC
- pSirSmeJoinRsp->HTProfile.vhtCapability =
- psessionEntry->vhtCapability;
- pSirSmeJoinRsp->HTProfile.vhtTxChannelWidthSet =
- psessionEntry->vhtTxChannelWidthSet;
- pSirSmeJoinRsp->HTProfile.apCenterChan =
- psessionEntry->apCenterChan;
- pSirSmeJoinRsp->HTProfile.apChanWidth =
- psessionEntry->apChanWidth;
+ pSirSmeJoinRsp->HTProfile.vhtCapability =
+ psessionEntry->vhtCapability;
+ pSirSmeJoinRsp->HTProfile.vhtTxChannelWidthSet =
+ psessionEntry->vhtTxChannelWidthSet;
+ pSirSmeJoinRsp->HTProfile.apCenterChan =
+ psessionEntry->apCenterChan;
+ pSirSmeJoinRsp->HTProfile.apChanWidth =
+ psessionEntry->apChanWidth;
#endif
- }
#endif
}
else
@@ -792,29 +789,26 @@ limSendSmeStartBssRsp(tpAniSirGlobal pMac,
size += ieLen - sizeof(tANI_U32);
}
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (psessionEntry->cc_switch_mode
- != VOS_MCC_TO_SCC_SWITCH_DISABLE) {
- pSirSmeRsp->HTProfile.htSupportedChannelWidthSet =
- psessionEntry->htSupportedChannelWidthSet;
- pSirSmeRsp->HTProfile.htRecommendedTxWidthSet =
- psessionEntry->htRecommendedTxWidthSet;
- pSirSmeRsp->HTProfile.htSecondaryChannelOffset =
- psessionEntry->htSecondaryChannelOffset;
- pSirSmeRsp->HTProfile.dot11mode =
- psessionEntry->dot11mode;
- pSirSmeRsp->HTProfile.htCapability =
- psessionEntry->htCapability;
+ pSirSmeRsp->HTProfile.htSupportedChannelWidthSet =
+ psessionEntry->htSupportedChannelWidthSet;
+ pSirSmeRsp->HTProfile.htRecommendedTxWidthSet =
+ psessionEntry->htRecommendedTxWidthSet;
+ pSirSmeRsp->HTProfile.htSecondaryChannelOffset =
+ psessionEntry->htSecondaryChannelOffset;
+ pSirSmeRsp->HTProfile.dot11mode =
+ psessionEntry->dot11mode;
+ pSirSmeRsp->HTProfile.htCapability =
+ psessionEntry->htCapability;
#ifdef WLAN_FEATURE_11AC
- pSirSmeRsp->HTProfile.vhtCapability =
- psessionEntry->vhtCapability;
- pSirSmeRsp->HTProfile.vhtTxChannelWidthSet =
- psessionEntry->vhtTxChannelWidthSet;
- pSirSmeRsp->HTProfile.apCenterChan =
- psessionEntry->apCenterChan;
- pSirSmeRsp->HTProfile.apChanWidth =
- psessionEntry->apChanWidth;
+ pSirSmeRsp->HTProfile.vhtCapability =
+ psessionEntry->vhtCapability;
+ pSirSmeRsp->HTProfile.vhtTxChannelWidthSet =
+ psessionEntry->vhtTxChannelWidthSet;
+ pSirSmeRsp->HTProfile.apCenterChan =
+ psessionEntry->apCenterChan;
+ pSirSmeRsp->HTProfile.apChanWidth =
+ psessionEntry->apChanWidth;
#endif
- }
#endif
}
}
@@ -1517,6 +1511,7 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac,
tANI_U8 *pBuf;
tSirSmeDisassocRsp *pSirSmeDisassocRsp;
tSirSmeDisassocInd *pSirSmeDisassocInd;
+ tSirSmeDisConDoneInd *pSirSmeDisConDoneInd;
tANI_U32 *pMsg;
bool failure = false;
@@ -1527,12 +1522,6 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac,
switch (disassocTrigger)
{
- case eLIM_PEER_ENTITY_DISASSOC:
- if (reasonCode != eSIR_SME_STA_NOT_ASSOCIATED) {
- failure = true;
- goto error;
- }
-
case eLIM_HOST_DISASSOC:
/**
* Disassociation response due to
@@ -1584,6 +1573,41 @@ limSendSmeDisassocNtf(tpAniSirGlobal pMac,
pMsg = (tANI_U32*) pSirSmeDisassocRsp;
break;
+ case eLIM_PEER_ENTITY_DISASSOC:
+ case eLIM_LINK_MONITORING_DISASSOC:
+ pSirSmeDisConDoneInd =
+ vos_mem_malloc(sizeof(tSirSmeDisConDoneInd));
+ if ( NULL == pSirSmeDisConDoneInd )
+ {
+ /* Log error */
+ limLog(pMac, LOGP,
+ FL("call to AllocateMemory failed for"
+ "disconnect indication"));
+ return;
+ }
+ vos_mem_zero(pSirSmeDisConDoneInd, sizeof(tSirSmeDisConDoneInd));
+ limLog(pMac, LOG1,
+ FL("send eWNI_SME_DISCONNECT_DONE_IND with retCode: %d"),
+ reasonCode);
+ pSirSmeDisConDoneInd->messageType = eWNI_SME_DISCONNECT_DONE_IND;
+ pSirSmeDisConDoneInd->length = sizeof(tSirSmeDisConDoneInd);
+ vos_mem_copy(pSirSmeDisConDoneInd->peerMacAddr, peerMacAddr,
+ sizeof(tSirMacAddr));
+ pSirSmeDisConDoneInd->sessionId = smesessionId;
+
+ /*
+ * Instead of sending deauth reason code as 505 which is internal
+ * value to driver(eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE).
+ * Send reason code as zero to Supplicant
+ */
+ if (reasonCode == eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE)
+ pSirSmeDisConDoneInd->reasonCode = 0;
+ else
+ pSirSmeDisConDoneInd->reasonCode = reasonCode;
+
+ pMsg = (tANI_U32 *)pSirSmeDisConDoneInd;
+ break;
+
default:
/**
* Disassociation indication due to Disassociation
@@ -1674,7 +1698,7 @@ limSendSmeDisassocInd(tpAniSirGlobal pMac, tpDphHashNode pStaDs,tpPESession pses
pSirSmeDisassocInd->sessionId = psessionEntry->smeSessionId;
pSirSmeDisassocInd->transactionId = psessionEntry->transactionId;
- pSirSmeDisassocInd->statusCode = pStaDs->mlmStaContext.disassocReason;
+ pSirSmeDisassocInd->statusCode = eSIR_SME_DEAUTH_STATUS;
pSirSmeDisassocInd->reasonCode = pStaDs->mlmStaContext.disassocReason;
vos_mem_copy( pSirSmeDisassocInd->bssId, psessionEntry->bssId, sizeof(tSirMacAddr));
@@ -1980,6 +2004,7 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode
tANI_U8 *pBuf;
tSirSmeDeauthRsp *pSirSmeDeauthRsp;
tSirSmeDeauthInd *pSirSmeDeauthInd;
+ tSirSmeDisConDoneInd *pSirSmeDisConDoneInd;
tpPESession psessionEntry;
tANI_U8 sessionId;
tANI_U32 *pMsg;
@@ -1987,9 +2012,6 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode
psessionEntry = peFindSessionByBssid(pMac,peerMacAddr,&sessionId);
switch (deauthTrigger)
{
- case eLIM_PEER_ENTITY_DEAUTH:
- return;
-
case eLIM_HOST_DEAUTH:
/**
* Deauthentication response to host triggered
@@ -2024,6 +2046,42 @@ limSendSmeDeauthNtf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr, tSirResultCode
break;
+ case eLIM_PEER_ENTITY_DEAUTH:
+ case eLIM_LINK_MONITORING_DEAUTH:
+ pSirSmeDisConDoneInd =
+ vos_mem_malloc(sizeof(tSirSmeDisConDoneInd));
+ if ( NULL == pSirSmeDisConDoneInd )
+ {
+ /* Log error */
+ limLog(pMac, LOGP,
+ FL("call to AllocateMemory failed for"
+ "disconnect indication"));
+ return;
+ }
+
+ vos_mem_zero(pSirSmeDisConDoneInd, sizeof(tSirSmeDisConDoneInd));
+ limLog(pMac, LOG1,
+ FL("send eWNI_SME_DISCONNECT_DONE_IND withretCode: %d"),
+ reasonCode);
+ pSirSmeDisConDoneInd->messageType = eWNI_SME_DISCONNECT_DONE_IND;
+ pSirSmeDisConDoneInd->length = sizeof(tSirSmeDisConDoneInd);
+ pSirSmeDisConDoneInd->sessionId = smesessionId;
+
+ /*
+ * Instead of sending deauth reason code as 505 which is internal
+ * value to driver(eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE).
+ * Send reason code as zero to Supplicant
+ */
+ if (reasonCode == eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE)
+ pSirSmeDisConDoneInd->reasonCode = 0;
+ else
+ pSirSmeDisConDoneInd->reasonCode = reasonCode;
+ pMsg = (tANI_U32 *)pSirSmeDisConDoneInd;
+ vos_mem_copy(pSirSmeDisConDoneInd->peerMacAddr, peerMacAddr,
+ sizeof(tSirMacAddr));
+
+ break;
+
default:
/**
* Deauthentication indication due to Deauthentication
diff --git a/CORE/MAC/src/pe/lim/limSession.c b/CORE/MAC/src/pe/lim/limSession.c
index fc13b7e2e802..fe67fe1dac82 100644
--- a/CORE/MAC/src/pe/lim/limSession.c
+++ b/CORE/MAC/src/pe/lim/limSession.c
@@ -347,8 +347,7 @@ tpPESession peCreateSession(tpAniSirGlobal pMac,
VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
"Create a new PE session (%d) with BSSID: "
MAC_ADDRESS_STR " Max No. of STA %d",
- pMac->lim.gpSession[i].peSessionId,
- MAC_ADDR_ARRAY(bssid), numSta);
+ *sessionId, MAC_ADDR_ARRAY(bssid), numSta);
pMac->lim.gpSession[i].roaming_in_progress = false;
/* Initialize PMM Ps Offload Module */
@@ -826,7 +825,7 @@ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry)
#ifdef WLAN_FEATURE_11W
/* if PMF connection */
- if (psessionEntry->limRmfEnabled) {
+ if (psessionEntry->limRmfEnabled && LIM_IS_STA_ROLE(psessionEntry)) {
vos_timer_destroy(&psessionEntry->pmfComebackTimer);
}
#endif
diff --git a/CORE/MAC/src/pe/lim/limSmeReqUtils.c b/CORE/MAC/src/pe/lim/limSmeReqUtils.c
index 5c83a931026f..b5335d6188ed 100644
--- a/CORE/MAC/src/pe/lim/limSmeReqUtils.c
+++ b/CORE/MAC/src/pe/lim/limSmeReqUtils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -39,7 +39,7 @@
*/
#include "wniApi.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "sirApi.h"
#include "schApi.h"
diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c
index 05be3fc41a74..c4c4a0fda3bc 100644
--- a/CORE/MAC/src/pe/lim/limTimerUtils.c
+++ b/CORE/MAC/src/pe/lim/limTimerUtils.c
@@ -923,7 +923,16 @@ limAssocFailureTimerHandler(void *pMacGlobal, tANI_U32 param)
(pMac->lim.pSessionEntry->limMlmState == eLIM_MLM_WT_FT_REASSOC_RSP_STATE))
{
limLog(pMac, LOGE, FL("Reassoc timeout happened"));
- if(pMac->lim.reAssocRetryAttempt < LIM_MAX_REASSOC_RETRY_LIMIT)
+#ifdef FEATURE_WLAN_ESE
+ if (((pMac->lim.pSessionEntry->isESEconnection) &&
+ (pMac->lim.reAssocRetryAttempt <
+ (LIM_MAX_REASSOC_RETRY_LIMIT - 1)))||
+ ((!pMac->lim.pSessionEntry->isESEconnection) &&
+ (pMac->lim.reAssocRetryAttempt < LIM_MAX_REASSOC_RETRY_LIMIT))
+ )
+#else
+ if (pMac->lim.reAssocRetryAttempt < LIM_MAX_REASSOC_RETRY_LIMIT)
+#endif
{
limSendRetryReassocReqFrame(pMac, pMac->lim.pSessionEntry->pLimMlmReassocRetryReq, pMac->lim.pSessionEntry);
pMac->lim.reAssocRetryAttempt++;
@@ -1041,17 +1050,6 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId)
if (pMac->lim.gpLimMlmScanReq) {
val =
SYS_MS_TO_TICKS(pMac->lim.gpLimMlmScanReq->minChannelTime);
- if (pMac->btc.btcScanCompromise) {
- if (pMac->lim.gpLimMlmScanReq->minChannelTimeBtc) {
- val = SYS_MS_TO_TICKS(
- pMac->lim.gpLimMlmScanReq->minChannelTimeBtc);
- limLog(pMac, LOG1,
- FL("Using BTC Min Active Scan time"));
- } else {
- limLog(pMac, LOGE,
- FL("BTC Active Scan Min Time is Not Set"));
- }
- }
} else {
limLog(pMac, LOGE, FL("gpLimMlmScanReq is NULL"));
break;
@@ -1078,17 +1076,6 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId)
}
val = SYS_MS_TO_TICKS(pMac->lim.gpLimMlmScanReq->minChannelTime)/2;
- if (pMac->btc.btcScanCompromise)
- {
- if (pMac->lim.gpLimMlmScanReq->minChannelTimeBtc)
- {
- val = SYS_MS_TO_TICKS(pMac->lim.gpLimMlmScanReq->minChannelTimeBtc)/2;
- }
- else
- {
- limLog(pMac, LOGE, FL("BTC Active Scan Min Time is Not Set"));
- }
- }
if (val)
{
if (tx_timer_change(&pMac->lim.limTimers.gLimPeriodicProbeReqTimer,
@@ -1129,17 +1116,6 @@ limDeactivateAndChangeTimer(tpAniSirGlobal pMac, tANI_U32 timerId)
if (pMac->lim.gpLimMlmScanReq) {
val = SYS_MS_TO_TICKS(
pMac->lim.gpLimMlmScanReq->maxChannelTime);
- if (pMac->btc.btcScanCompromise) {
- if (pMac->lim.gpLimMlmScanReq->maxChannelTimeBtc) {
- val = SYS_MS_TO_TICKS(
- pMac->lim.gpLimMlmScanReq->maxChannelTimeBtc);
- limLog(pMac, LOG1,
- FL("Using BTC Max Active Scan time"));
- } else {
- limLog(pMac, LOGE,
- FL("BTC Active Scan Max Time is Not Set"));
- }
- }
} else {
limLog(pMac, LOGE, FL("gpLimMlmScanReq is NULL"));
break;
diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h
index 198427ccca52..90d97cf5838f 100644
--- a/CORE/MAC/src/pe/lim/limTypes.h
+++ b/CORE/MAC/src/pe/lim/limTypes.h
@@ -1087,6 +1087,7 @@ typedef struct sSetLinkCbackParams
#endif
void limProcessRxScanEvent(tpAniSirGlobal mac, void *buf);
+void lim_process_rx_channel_status_event(tpAniSirGlobal mac_ctx, void *buf);
int limProcessRemainOnChnlReq(tpAniSirGlobal pMac, tANI_U32 *pMsg);
void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data);
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 626ab4bc02bc..3c15db754240 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -61,7 +61,7 @@
#include "pmmApi.h"
#ifdef WLAN_FEATURE_11W
-#include "wniCfgAp.h"
+#include "wni_cfg.h"
#endif
#ifdef SAP_AUTH_OFFLOAD
@@ -2088,9 +2088,10 @@ void limProcessChannelSwitchTimeout(tpAniSirGlobal pMac)
tANI_U8 channel; // This is received and stored from channelSwitch Action frame
tANI_U8 isSessionPowerActive = false;
- if((psessionEntry = peFindSessionBySessionId(pMac, pMac->lim.limTimers.gLimChannelSwitchTimer.sessionId))== NULL)
- {
- limLog(pMac, LOGP,FL("Session Does not exist for given sessionID"));
+ psessionEntry = peFindSessionBySessionId(pMac,
+ pMac->lim.limTimers.gLimChannelSwitchTimer.sessionId);
+ if (!psessionEntry) {
+ limLog(pMac, LOGW, FL("Session Does not exist for given sessionID"));
return;
}
@@ -2100,6 +2101,13 @@ void limProcessChannelSwitchTimeout(tpAniSirGlobal pMac)
GET_LIM_SYSTEM_ROLE(psessionEntry));)
return;
}
+ if (psessionEntry->gLimSpecMgmt.dot11hChanSwState !=
+ eLIM_11H_CHANSW_RUNNING) {
+ limLog(pMac, LOGW,
+ FL("Channel switch timer should not have been running in state %d"),
+ psessionEntry->gLimSpecMgmt.dot11hChanSwState);
+ return;
+ }
if(pMac->psOffloadEnabled)
{
@@ -2109,7 +2117,6 @@ void limProcessChannelSwitchTimeout(tpAniSirGlobal pMac)
{
isSessionPowerActive = limIsSystemInActiveState(pMac);
}
-
channel = psessionEntry->gLimChannelSwitch.primaryChannel;
/*
@@ -2169,13 +2176,19 @@ void limProcessChannelSwitchTimeout(tpAniSirGlobal pMac)
return;
}
- /* If the channel-list that AP is asking us to switch is invalid,
+ /*
+ * If the channel-list that AP is asking us to switch is invalid,
* then we cannot switch the channel. Just disassociate from AP.
* We will find a better AP !!!
*/
- limTearDownLinkWithAp(pMac,
+ if ((psessionEntry->limMlmState == eLIM_MLM_LINK_ESTABLISHED_STATE) &&
+ (psessionEntry->limSmeState != eLIM_SME_WT_DISASSOC_STATE)&&
+ (psessionEntry->limSmeState != eLIM_SME_WT_DEAUTH_STATE)) {
+ limLog(pMac, LOGE, FL("Invalid channel!! Disconnect.."));
+ limTearDownLinkWithAp(pMac,
pMac->lim.limTimers.gLimChannelSwitchTimer.sessionId,
eSIR_MAC_UNSPEC_FAILURE_REASON);
+ }
return;
}
limCovertChannelScanType(pMac, psessionEntry->currentOperChannel, false);
@@ -5229,28 +5242,6 @@ void limDelAllBASessions(tpAniSirGlobal pMac)
}
/** -------------------------------------------------------------
-\fn limDelAllBASessionsBtc
-\brief Deletes all the existing BA recipient sessions in 2.4GHz
- band.
-\param tpAniSirGlobal pMac
-\return None
--------------------------------------------------------------*/
-
-void limDelPerBssBASessionsBtc(tpAniSirGlobal pMac)
-{
- tANI_U8 sessionId;
- tpPESession pSessionEntry;
- pSessionEntry = peFindSessionByBssid(pMac,pMac->btc.btcBssfordisableaggr,
- &sessionId);
- if (pSessionEntry)
- {
- PELOGW(limLog(pMac, LOGW,
- "Deleting the BA for session %d as host got BTC event", sessionId);)
- limDeleteBASessions(pMac, pSessionEntry, BA_RECIPIENT);
- }
-}
-
-/** -------------------------------------------------------------
\fn limProcessDelTsInd
\brief Handles the DeleteTS indication coming from HAL or generated by
PE itself in some error cases. Validates the request, sends the
@@ -5998,6 +5989,55 @@ void limAddScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 channelId)
}
}
+/**
+ * lim_add_channel_status_info() - store
+ * chan status info into Global MAC structure
+ * @p_mac: Pointer to Global MAC structure
+ * @channel_stat: Pointer to chan status info reported by firmware
+ * @channel_id: current channel id
+ *
+ * Return: None
+ */
+void lim_add_channel_status_info(tpAniSirGlobal p_mac,
+ struct lim_channel_status *channel_stat, uint8_t channel_id)
+{
+ uint8_t i;
+ boolean found = false;
+ struct lim_scan_channel_status *channel_info =
+ &p_mac->lim.scan_channel_status;
+ struct lim_channel_status *channel_status_list =
+ channel_info->channel_status_list;
+ uint8_t total_channel = channel_info->total_channel;
+
+ if (ACS_FW_REPORT_PARAM_CONFIGURED) {
+ for (i = 0; i < total_channel; i++) {
+ if (channel_status_list[i].channel_id == channel_id) {
+ vos_mem_copy(
+ &channel_status_list[i],
+ channel_stat,
+ sizeof(*channel_status_list));
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ if (total_channel <
+ SIR_MAX_SUPPORTED_ACS_CHANNEL_LIST) {
+ vos_mem_copy(
+ &channel_status_list[total_channel++],
+ channel_stat,
+ sizeof(*channel_status_list));
+ channel_info->total_channel = total_channel;
+ } else {
+ PELOGW(limLog(p_mac, LOGW,
+ FL("Chan cnt exceed, channel_id=%d"),
+ channel_id);)
+ }
+ }
+ }
+ return;
+}
+
/**
* @function : limIsChannelValidForChannelSwitch()
@@ -8464,7 +8504,7 @@ eHalStatus lim_send_ext_cap_ie(tpAniSirGlobal mac_ctx,
if (merge && NULL != extra_extcap && extra_extcap->num_bytes > 0) {
if (extra_extcap->num_bytes > ext_cap_data.num_bytes)
num_bytes = extra_extcap->num_bytes;
- lim_merge_extcap_struct(&ext_cap_data, extra_extcap);
+ lim_merge_extcap_struct(&ext_cap_data, extra_extcap, true);
}
/* Allocate memory for the WMI request, and copy the parameter */
@@ -8601,10 +8641,10 @@ void lim_update_extcap_struct(tpAniSirGlobal mac_ctx,
}
vos_mem_set((uint8_t *)&out[0], DOT11F_IE_EXTCAP_MAX_LEN, 0);
- vos_mem_copy(&out[0], &buf[2], DOT11F_IE_EXTCAP_MAX_LEN);
+ vos_mem_copy(&out[0], &buf[2], buf[1]);
if (DOT11F_PARSE_SUCCESS != dot11fUnpackIeExtCap(mac_ctx, &out[0],
- DOT11F_IE_EXTCAP_MAX_LEN, dst))
+ buf[1], dst))
limLog(mac_ctx, LOGE, FL("dot11fUnpackIeExtCap Parse Error "));
}
@@ -8646,24 +8686,43 @@ tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx,
* lim_merge_extcap_struct() - merge extended capabilities info
* @dst: destination extended capabilities
* @src: source extended capabilities
+ * @add: true if add the capabilites, false if strip the capabilites.
*
- * This function is used to take @src info and merge it with @dst
- * extended capabilities info.
+ * This function is used to take @src info and add/strip it to/from
+ * @dst extended capabilities info.
*
* Return: None
*/
void lim_merge_extcap_struct(tDot11fIEExtCap *dst,
- tDot11fIEExtCap *src)
+ tDot11fIEExtCap *src,
+ bool add)
{
uint8_t *tempdst = (uint8_t *)dst->bytes;
uint8_t *tempsrc = (uint8_t *)src->bytes;
uint8_t structlen = member_size(tDot11fIEExtCap, bytes);
- while(tempdst && tempsrc && structlen--) {
- *tempdst |= *tempsrc;
+ /* Return if @src not present */
+ if (!src->present)
+ return;
+
+ /* Return if strip the capabilites from @dst which not present */
+ if (!dst->present && !add)
+ return;
+
+ /* Merge the capabilites info in other cases */
+ while (tempdst && tempsrc && structlen--) {
+ if (add)
+ *tempdst |= *tempsrc;
+ else
+ *tempdst &= *tempsrc;
tempdst++;
tempsrc++;
}
+ dst->num_bytes = lim_compute_ext_cap_ie_length(dst);
+ if (dst->num_bytes == 0)
+ dst->present = 0;
+ else
+ dst->present = 1;
}
/**
@@ -8698,24 +8757,23 @@ lim_get_80Mhz_center_channel(uint8_t primary_channel)
}
/**
- * lim_is_ext_cap_ie_present - checks if ext ie is present
+ * lim_compute_ext_cap_ie_length - compute the length of ext cap ie
+ * based on the bits set
* @ext_cap: extended IEs structure
*
- * Return: true if ext IEs are present else false
+ * Return: length of the ext cap ie, 0 means should not present
*/
-bool lim_is_ext_cap_ie_present (struct s_ext_cap *ext_cap)
-{
- int i, size;
- uint8_t *tmp_buf;
+tANI_U8 lim_compute_ext_cap_ie_length (tDot11fIEExtCap *ext_cap) {
+ tANI_U8 i = DOT11F_IE_EXTCAP_MAX_LEN;
- tmp_buf = (uint8_t *) ext_cap;
- size = sizeof(*ext_cap);
-
- for (i = 0; i < size; i++)
- if (tmp_buf[i])
- return true;
+ while (i) {
+ if (ext_cap->bytes[i-1]) {
+ break;
+ }
+ i --;
+ }
- return false;
+ return i;
}
/**
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 9b59b41e50f6..1ab87089b942 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -398,12 +398,13 @@ tSirRetStatus limPostSMStateUpdate(tpAniSirGlobal pMac,
void limDeleteStaContext(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
void limProcessAddBaInd(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
void limDeleteBASessions(tpAniSirGlobal pMac, tpPESession pSessionEntry, tANI_U32 baDirection);
-void limDelPerBssBASessionsBtc(tpAniSirGlobal pMac);
void limDelAllBASessions(tpAniSirGlobal pMac);
void limDeleteDialogueTokenList(tpAniSirGlobal pMac);
tSirRetStatus limSearchAndDeleteDialogueToken(tpAniSirGlobal pMac, tANI_U8 token, tANI_U16 assocId, tANI_U16 tid);
void limRessetScanChannelInfo(tpAniSirGlobal pMac);
void limAddScanChannelInfo(tpAniSirGlobal pMac, tANI_U8 channelId);
+void lim_add_channel_status_info(tpAniSirGlobal p_mac,
+ struct lim_channel_status *channel_stat, uint8_t channel_id);
tANI_U8 limGetChannelFromBeacon(tpAniSirGlobal pMac, tpSchBeaconStruct pBeacon);
tSirNwType limGetNwType(tpAniSirGlobal pMac, tANI_U8 channelNum, tANI_U32 type, tpSchBeaconStruct pBeacon);
@@ -462,8 +463,6 @@ tANI_BOOLEAN limCheckMembershipUserPosition( tpAniSirGlobal pMac, tpPESession ps
tANI_U8 staId);
#endif
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
-
typedef enum
{
WLAN_PE_DIAG_SCAN_REQ_EVENT = 0,
@@ -544,8 +543,14 @@ typedef enum
WLAN_PE_DIAG_AUTH_TIMEOUT,
} WLAN_PE_DIAG_EVENT_TYPE;
+#ifdef FEATURE_WLAN_DIAG_SUPPORT
void limDiagEventReport(tpAniSirGlobal pMac, tANI_U16 eventType, tpPESession pSessionEntry, tANI_U16 status, tANI_U16 reasonCode);
-
+#else
+static inline void limDiagEventReport(tpAniSirGlobal pMac, tANI_U16 eventType,
+ tpPESession pSessionEntry, tANI_U16 status,
+ tANI_U16 reasonCode)
+{
+}
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
void peSetResumeChannel(tpAniSirGlobal pMac, tANI_U16 channel, ePhyChanBondState cbState);
@@ -663,10 +668,11 @@ void lim_update_extcap_struct(tpAniSirGlobal mac_ctx, uint8_t *buf,
tDot11fIEExtCap *ext_cap);
tSirRetStatus lim_strip_extcap_update_struct(tpAniSirGlobal mac_ctx,
uint8_t* addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst);
-void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src);
+void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src,
+ bool add);
uint8_t
lim_get_80Mhz_center_channel(uint8_t primary_channel);
-bool lim_is_ext_cap_ie_present (struct s_ext_cap *ext_cap);
+tANI_U8 lim_compute_ext_cap_ie_length (tDot11fIEExtCap *ext_cap);
bool lim_is_robust_mgmt_action_frame(uint8_t action_catagory);
void lim_update_caps_info_for_bss(tpAniSirGlobal mac_ctx,
uint16_t *caps, uint16_t bss_caps);
diff --git a/CORE/MAC/src/pe/nan/nan_datapath.c b/CORE/MAC/src/pe/nan/nan_datapath.c
index de83345062e1..074fb2cb341c 100644
--- a/CORE/MAC/src/pe/nan/nan_datapath.c
+++ b/CORE/MAC/src/pe/nan/nan_datapath.c
@@ -729,6 +729,7 @@ void lim_process_ndi_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx, tpSirMsgQ lim_msgq,
session_entry->bssIdx = (uint8_t) add_bss_params->bssIdx;
session_entry->limSystemRole = eLIM_NDI_ROLE;
session_entry->statypeForBss = STA_ENTRY_SELF;
+ session_entry->staId = add_bss_params->staContext.staIdx;
/* Apply previously set configuration at HW */
limApplyConfiguration(mac_ctx, session_entry);
mlm_start_cnf.resultCode = eSIR_SME_SUCCESS;
diff --git a/CORE/MAC/src/pe/pmm/pmmAP.c b/CORE/MAC/src/pe/pmm/pmmAP.c
index d3ee1b4d54ce..0e2ee7ce9b3e 100644
--- a/CORE/MAC/src/pe/pmm/pmmAP.c
+++ b/CORE/MAC/src/pe/pmm/pmmAP.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -44,8 +44,7 @@
#include "schApi.h"
#include "limApi.h"
#include "cfgApi.h"
-#include "wniCfgSta.h"
-
+#include "wni_cfg.h"
#include "pmmApi.h"
#include "pmmDebug.h"
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index ddecbdb70c60..09d33fb9465c 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -38,8 +38,7 @@
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
-
+#include "wni_cfg.h"
#include "sirCommon.h"
#include "aniGlobal.h"
diff --git a/CORE/MAC/src/pe/rrm/rrmApi.c b/CORE/MAC/src/pe/rrm/rrmApi.c
index d42cedabbbed..f7819da6e783 100644
--- a/CORE/MAC/src/pe/rrm/rrmApi.c
+++ b/CORE/MAC/src/pe/rrm/rrmApi.c
@@ -44,7 +44,7 @@
#include "wniApi.h"
#include "sirApi.h"
#include "aniGlobal.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "limTypes.h"
#include "limUtils.h"
#include "limSendSmeRspMessages.h"
diff --git a/CORE/MAC/src/pe/sch/schApi.c b/CORE/MAC/src/pe/sch/schApi.c
index 4820f645685f..45f74eb62615 100644
--- a/CORE/MAC/src/pe/sch/schApi.c
+++ b/CORE/MAC/src/pe/sch/schApi.c
@@ -39,8 +39,7 @@
*/
#include "palTypes.h"
#include "aniGlobal.h"
-#include "wniCfgSta.h"
-
+#include "wni_cfg.h"
#include "sirMacProtDef.h"
#include "sirMacPropExts.h"
#include "sirCommon.h"
@@ -412,7 +411,7 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn
tANI_U8 *pFrame2Hal = psessionEntry->pSchProbeRspTemplate;
tpSendProbeRespParams pprobeRespParams=NULL;
tANI_U32 retCode = eSIR_FAILURE;
- tANI_U32 nPayload,nBytes,nStatus;
+ tANI_U32 nPayload, nBytes = 0, nStatus;
tpSirMacMgmtHdr pMacHdr;
tANI_U32 addnIEPresent = VOS_FALSE;
tSirRetStatus nSirStatus;
@@ -426,24 +425,6 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn
tSirRetStatus status;
uint16_t addn_ielen = 0;
- nStatus = dot11fGetPackedProbeResponseSize( pMac, &psessionEntry->probeRespFrame, &nPayload );
- if ( DOT11F_FAILED( nStatus ) )
- {
- schLog( pMac, LOGE, FL("Failed to calculate the packed size f"
- "or a Probe Response (0x%08x)."),
- nStatus );
- // We'll fall back on the worst case scenario:
- nPayload = sizeof( tDot11fProbeResponse );
- }
- else if ( DOT11F_WARNED( nStatus ) )
- {
- schLog( pMac, LOGE, FL("There were warnings while calculating"
- "the packed size for a Probe Response "
- "(0x%08x)."), nStatus );
- }
-
- nBytes = nPayload + sizeof( tSirMacMgmtHdr );
-
//Check if probe response IE is present or not
addnIEPresent = (psessionEntry->addIeParams.probeRespDataLen != 0);
if (addnIEPresent)
@@ -512,6 +493,28 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn
addnIEPresent = false; //Dont include the IE.
}
+ /* merge extcap IE */
+ prb_rsp_frm = &psessionEntry->probeRespFrame;
+ if (extcap_present)
+ lim_merge_extcap_struct(&prb_rsp_frm->ExtCap, &extracted_extcap, true);
+
+ nStatus = dot11fGetPackedProbeResponseSize(pMac, &psessionEntry->probeRespFrame, &nPayload);
+ if (DOT11F_FAILED(nStatus))
+ {
+ schLog(pMac, LOGE,
+ FL("Failed to calculate the packed size for a Probe Response (0x%08x)."),
+ nStatus);
+ /* We'll fall back on the worst case scenario: */
+ nPayload = sizeof(tDot11fProbeResponse);
+ }
+ else if (DOT11F_WARNED(nStatus))
+ {
+ schLog(pMac, LOGE,
+ FL("There were warnings while calculating the packed size for a Probe Response (0x%08x)."),
+ nStatus);
+ }
+
+ nBytes += nPayload + sizeof(tSirMacMgmtHdr);
// Paranoia:
vos_mem_set(pFrame2Hal, nBytes, 0);
@@ -534,11 +537,6 @@ tANI_U32 limSendProbeRspTemplateToHal(tpAniSirGlobal pMac,tpPESession psessionEn
sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId);
- /* merge extcap IE */
- prb_rsp_frm = &psessionEntry->probeRespFrame;
- if (extcap_present)
- lim_merge_extcap_struct(&prb_rsp_frm->ExtCap, &extracted_extcap);
-
// That done, pack the Probe Response:
nStatus = dot11fPackProbeResponse( pMac, &psessionEntry->probeRespFrame, pFrame2Hal + sizeof(tSirMacMgmtHdr),
nPayload, &nPayload );
diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c
index 7a8a96cba6cd..9f803aa75523 100644
--- a/CORE/MAC/src/pe/sch/schBeaconGen.c
+++ b/CORE/MAC/src/pe/sch/schBeaconGen.c
@@ -38,7 +38,7 @@
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "sirMacProtDef.h"
@@ -492,7 +492,7 @@ tSirRetStatus schSetFixedBeaconFields(tpAniSirGlobal pMac,tpPESession psessionEn
/* merge extcap IE */
if (extcap_present &&
psessionEntry->limSystemRole != eLIM_STA_IN_IBSS_ROLE)
- lim_merge_extcap_struct(&pBcn2->ExtCap, &extracted_extcap);
+ lim_merge_extcap_struct(&pBcn2->ExtCap, &extracted_extcap, true);
}
diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c
index c6419cc25197..580673086432 100644
--- a/CORE/MAC/src/pe/sch/schBeaconProcess.c
+++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c
@@ -38,8 +38,7 @@
*/
#include "palTypes.h"
-#include "wniCfgSta.h"
-
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "pmmApi.h"
#include "limApi.h"
diff --git a/CORE/MAC/src/pe/sch/schMessage.c b/CORE/MAC/src/pe/sch/schMessage.c
index 734b28c9c8a1..f355cff0c3b8 100644
--- a/CORE/MAC/src/pe/sch/schMessage.c
+++ b/CORE/MAC/src/pe/sch/schMessage.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -37,8 +37,7 @@
*/
#include "palTypes.h"
#include "sirCommon.h"
-
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "aniGlobal.h"
#include "cfgApi.h"
#include "limApi.h"
diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h
index a3cbbd68d7ba..324173dd313d 100644
--- a/CORE/SAP/inc/sapApi.h
+++ b/CORE/SAP/inc/sapApi.h
@@ -101,7 +101,14 @@ when who what, where, why
#define MAX_TEXT_SIZE 32
#define MAX_CHANNEL_LIST_LEN 256
-#define VOS_MAX_NO_OF_SAP_MODE 2 // max # of SAP
+/*
+ * max # of SAP
+ */
+#ifdef WLAN_4SAP_CONCURRENCY
+#define VOS_MAX_NO_OF_SAP_MODE 4
+#else
+#define VOS_MAX_NO_OF_SAP_MODE 2
+#endif
#define SAP_MAX_NUM_SESSION 5
#define SAP_MAX_OBSS_STA_CNT 1 // max # of OBSS STA
@@ -182,9 +189,7 @@ typedef enum {
eSAP_DFS_NOL_GET, /* Event sent when user need to get the DFS NOL from CNSS */
eSAP_DFS_NOL_SET, /* Event sent when user need to set the DFS NOL to CNSS */
eSAP_DFS_NO_AVAILABLE_CHANNEL, /* No ch available after DFS RADAR detect */
-#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
eSAP_ACS_SCAN_SUCCESS_EVENT,
-#endif
eSAP_ACS_CHANNEL_SELECTED,
eSAP_ECSA_CHANGE_CHAN_IND,
} eSapHddEvent;
@@ -380,6 +385,18 @@ typedef struct sap_ChSelected_s {
} tSap_ChSelectedEvent;
/**
+ * struct tsap_acs_scan_complete_event - acs scan complete event
+ * @status: status of acs scan
+ * @channellist: acs scan channels
+ * @num_of_channels: number of channels
+ */
+struct tsap_acs_scan_complete_event{
+ uint8_t status;
+ uint8_t *channellist;
+ uint8_t num_of_channels;
+};
+
+/**
* struct sap_ch_change_ind - channel change indication
* @new_chan: channel to change
*/
@@ -413,6 +430,7 @@ typedef struct sap_Event_s {
tSap_DfsNolInfo sapDfsNolInfo; /*eSAP_DFS_NOL_XXX */
/*eSAP_ACS_CHANNEL_SELECTED */
tSap_ChSelectedEvent sapChSelected;
+ struct tsap_acs_scan_complete_event sap_acs_scan_comp;
struct sap_ch_change_ind sap_chan_cng_ind;
} sapevt;
} tSap_Event, *tpSap_Event;
@@ -553,6 +571,7 @@ typedef struct sap_Config {
uint8_t ampdu_size;
tSirMacRateSet supported_rates;
tSirMacRateSet extended_rates;
+ eCsrBand target_band;
} tsap_Config_t;
#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
@@ -2407,6 +2426,8 @@ VOS_STATUS wlansap_set_tx_leakage_threshold(tHalHandle hal,
VOS_STATUS wlansap_get_chan_width(void *pvosctx,
uint32_t *pchanwidth);
+VOS_STATUS wlansap_set_invalid_session(v_PVOID_t pctx);
+
#ifdef __cplusplus
}
#endif
diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c
index 92d0e8f16ce3..3944c0847b51 100644
--- a/CORE/SAP/src/sapApiLinkCntl.c
+++ b/CORE/SAP/src/sapApiLinkCntl.c
@@ -260,6 +260,7 @@ WLANSAP_ScanCallback
* the result */
vos_mem_free(psapContext->channelList);
psapContext->channelList = NULL;
+ psapContext->num_of_channel = 0;
}
#endif
@@ -478,7 +479,7 @@ WLANSAP_PreStartBssAcsScanCallback
}
}
#else
- psapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
+ psapContext->channel = sap_select_default_oper_chan_ini(halHandle, 0);
#endif
else
{
@@ -501,6 +502,7 @@ WLANSAP_PreStartBssAcsScanCallback
*/
vos_mem_free(psapContext->channelList);
psapContext->channelList = NULL;
+ psapContext->num_of_channel = 0;
}
#endif
@@ -522,12 +524,10 @@ WLANSAP_PreStartBssAcsScanCallback
FL("CSR scanStatus = %s (%d), choose default channel"),
"eCSR_SCAN_ABORT/FAILURE", scanStatus );
#ifdef SOFTAP_CHANNEL_RANGE
- if(psapContext->acs_cfg->hw_mode == eCSR_DOT11_MODE_11a)
- psapContext->channel = SAP_DEFAULT_5GHZ_CHANNEL;
- else
- psapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
+ psapContext->channel = sap_select_default_oper_chan_ini(halHandle,
+ psapContext->acs_cfg->hw_mode);
#else
- psapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
+ psapContext->channel = sap_select_default_oper_chan_ini(halHandle, 0);
#endif
halStatus = sapSignalHDDevent(psapContext, NULL,
eSAP_ACS_CHANNEL_SELECTED,
@@ -876,6 +876,7 @@ WLANSAP_RoamCallback
}
break;
+ case eCSR_ROAM_RESULT_DEAUTH_IND:
case eCSR_ROAM_RESULT_DISASSOC_IND:
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
FL("CSR roamResult = %s (%d)"),
@@ -889,20 +890,6 @@ WLANSAP_RoamCallback
}
break;
- case eCSR_ROAM_RESULT_DEAUTH_IND:
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- FL("CSR roamResult = %s (%d)"),
- "eCSR_ROAM_RESULT_DEAUTH_IND",
- roamResult);
- /* Fill in the event structure */
- //TODO: we will use the same event inorder to inform HDD to disassociate the station
- vosStatus = sapSignalHDDevent( sapContext, pCsrRoamInfo, eSAP_STA_DISASSOC_EVENT, (v_PVOID_t)eSAP_STATUS_SUCCESS);
- if(!VOS_IS_STATUS_SUCCESS(vosStatus))
- {
- halStatus = eHAL_STATUS_FAILURE;
- }
- break;
-
case eCSR_ROAM_RESULT_MIC_ERROR_GROUP:
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
FL("CSR roamResult = %s (%d)"),
diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c
index fa0e3af4fb22..0d0427ba7e3b 100644
--- a/CORE/SAP/src/sapChSelect.c
+++ b/CORE/SAP/src/sapChSelect.c
@@ -741,6 +741,109 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count)
}
+/**
+ * sap_get_channel_status() - get channel info via channel number
+ * @p_mac: Pointer to Global MAC structure
+ * @channel_id: channel id
+ *
+ * Return: chan status info
+ */
+struct lim_channel_status *sap_get_channel_status
+ (tpAniSirGlobal p_mac, uint32_t channel_id)
+{
+ return csr_get_channel_status(p_mac, channel_id);
+}
+
+/**
+ * sap_clear_channel_status() - clear chan info
+ * @p_mac: Pointer to Global MAC structure
+ *
+ * Return: none
+ */
+void sap_clear_channel_status(tpAniSirGlobal p_mac)
+{
+ csr_clear_channel_status(p_mac);
+}
+/**
+ * sap_weight_channel_status() - compute chan status weight
+ * @chn_stat: Pointer to chan status info
+ *
+ * Return: chan status weight
+ */
+uint32_t sap_weight_channel_status(struct lim_channel_status *channel_stat)
+{
+ int32_t noisefloor_weight = 0;
+ uint32_t chnfree_weight = 0;
+ uint32_t txpwr_weight_lowspeed = 0;
+ uint32_t txpwr_weight_highspeed = 0;
+ uint32_t channelstatus_weight = 0;
+ uint32_t rx_clear_count = 0;
+ uint32_t cycle_count = 0;
+ uint32_t chan_tx_pwr_throughput = 0;
+
+ if (channel_stat == NULL || channel_stat->channelfreq == 0)
+ return 0;
+
+ rx_clear_count = channel_stat->rx_clear_count;
+ cycle_count = channel_stat->cycle_count;
+ chan_tx_pwr_throughput =
+ channel_stat->chan_tx_pwr_throughput;
+
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "chan id=%d freq=%d nf=%d rx_cnt=%d cycle_cnt=%d tx_pwr_throughput=%d",
+ channel_stat->channel_id,
+ channel_stat->channelfreq, channel_stat->noise_floor,
+ rx_clear_count, cycle_count, chan_tx_pwr_throughput);
+
+ noisefloor_weight = (channel_stat->noise_floor == 0) ? 0 :
+ (SOFTAP_NF_WEIGHT *
+ (channel_stat->noise_floor - SOFTAP_MIN_NF)
+ /(SOFTAP_MAX_NF - SOFTAP_MIN_NF));
+
+ if (noisefloor_weight > SOFTAP_NF_WEIGHT)
+ noisefloor_weight = SOFTAP_NF_WEIGHT;
+ else if (noisefloor_weight < 0)
+ noisefloor_weight = 0;
+
+ chnfree_weight = (cycle_count == 0) ? 0 :
+ (SOFTAP_CHNFREE_WEIGHT *
+ (rx_clear_count/cycle_count -
+ SOFTAP_MIN_CHNFREE)
+ /(SOFTAP_MAX_CHNFREE - SOFTAP_MIN_CHNFREE));
+
+ if (chnfree_weight > SOFTAP_CHNFREE_WEIGHT)
+ chnfree_weight = SOFTAP_CHNFREE_WEIGHT;
+
+ txpwr_weight_lowspeed = (channel_stat->chan_tx_pwr_range == 0) ? 0 :
+ (SOFTAP_TXPWR_WEIGHT *
+ (channel_stat->chan_tx_pwr_range -
+ SOFTAP_MIN_TXPWR)
+ /(SOFTAP_MAX_TXPWR - SOFTAP_MIN_TXPWR));
+
+ if (txpwr_weight_lowspeed > SOFTAP_TXPWR_WEIGHT)
+ txpwr_weight_lowspeed = SOFTAP_TXPWR_WEIGHT;
+
+ txpwr_weight_highspeed = (chan_tx_pwr_throughput == 0) ? 0 :
+ (SOFTAP_TXPWR_WEIGHT *
+ (chan_tx_pwr_throughput -
+ SOFTAP_MIN_TXPWR)
+ /(SOFTAP_MAX_TXPWR - SOFTAP_MIN_TXPWR));
+
+ if (txpwr_weight_highspeed > SOFTAP_TXPWR_WEIGHT)
+ txpwr_weight_highspeed = SOFTAP_TXPWR_WEIGHT;
+
+
+ channelstatus_weight = noisefloor_weight + chnfree_weight +
+ txpwr_weight_lowspeed + txpwr_weight_highspeed;
+
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "In %s, nfWt=%d, chnfreeWt=%d, txpwrLspeedWt=%d, txpwrHspeedWt=%d",
+ __func__, noisefloor_weight, chnfree_weight,
+ txpwr_weight_lowspeed, txpwr_weight_highspeed);
+
+ return channelstatus_weight;
+}
+
/*==========================================================================
FUNCTION sapInterferenceRssiCount
@@ -1557,25 +1660,22 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
vhtSupport = 0;
centerFreq = 0;
- if (pScanResult->BssDescriptor.ieFields != NULL)
- {
- ieLen = (pScanResult->BssDescriptor.length + sizeof(tANI_U16) + sizeof(tANI_U32) - sizeof(tSirBssDescription));
- vos_mem_set((tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon), 0);
+ ieLen = (pScanResult->BssDescriptor.length + sizeof(tANI_U16) + sizeof(tANI_U32) - sizeof(tSirBssDescription));
+ vos_mem_set((tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon), 0);
- if ((sirParseBeaconIE(pMac, pBeaconStruct,(tANI_U8 *)( pScanResult->BssDescriptor.ieFields), ieLen)) == eSIR_SUCCESS)
+ if ((sirParseBeaconIE(pMac, pBeaconStruct,(tANI_U8 *)( pScanResult->BssDescriptor.ieFields), ieLen)) == eSIR_SUCCESS)
+ {
+ if (pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present)
{
- if (pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present)
+ channelWidth = pBeaconStruct->HTCaps.supportedChannelWidthSet;
+ secondaryChannelOffset = pBeaconStruct->HTInfo.secondaryChannelOffset;
+ if(pBeaconStruct->VHTOperation.present)
{
- channelWidth = pBeaconStruct->HTCaps.supportedChannelWidthSet;
- secondaryChannelOffset = pBeaconStruct->HTInfo.secondaryChannelOffset;
- if(pBeaconStruct->VHTOperation.present)
+ vhtSupport = pBeaconStruct->VHTOperation.present;
+ if(pBeaconStruct->VHTOperation.chanWidth > WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ)
{
- vhtSupport = pBeaconStruct->VHTOperation.present;
- if(pBeaconStruct->VHTOperation.chanWidth > WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ)
- {
- channelWidth = eHT_CHANNEL_WIDTH_80MHZ;
- centerFreq = pBeaconStruct->VHTOperation.chanCenterFreqSeg1;
- }
+ channelWidth = eHT_CHANNEL_WIDTH_80MHZ;
+ centerFreq = pBeaconStruct->VHTOperation.chanCenterFreqSeg1;
}
}
}
@@ -1875,7 +1975,10 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
rssi = (v_S7_t)pSpectCh->rssiAgr;
- pSpectCh->weight = SAPDFS_NORMALISE_1000 * sapweightRssiCount(rssi, pSpectCh->bssCount);
+ pSpectCh->weight = SAPDFS_NORMALISE_1000 *
+ (sapweightRssiCount(rssi, pSpectCh->bssCount)
+ + sap_weight_channel_status(
+ sap_get_channel_status(pMac, pSpectCh->chNum)));
pSpectCh->weight_copy = pSpectCh->weight;
//------ Debug Info ------
@@ -1886,6 +1989,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
//------ Debug Info ------
pSpectCh++;
}
+ sap_clear_channel_status(pMac);
vos_mem_free(pBeaconStruct);
}
diff --git a/CORE/SAP/src/sapChSelect.h b/CORE/SAP/src/sapChSelect.h
index e81bab19e469..4392999e51ba 100644
--- a/CORE/SAP/src/sapChSelect.h
+++ b/CORE/SAP/src/sapChSelect.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -81,8 +81,22 @@
#define SOFTAP_RSSI_WEIGHT (20)
#define SOFTAP_COUNT_WEIGHT (20)
+#define SOFTAP_MIN_NF (-120)
+#define SOFTAP_MAX_NF (-60)
+#define SOFTAP_MIN_CHNFREE (0)
+#define SOFTAP_MAX_CHNFREE (1)
+#define SOFTAP_MIN_TXPWR (0)
+#define SOFTAP_MAX_TXPWR (63)
+
+#define SOFTAP_NF_WEIGHT (20)
+#define SOFTAP_CHNFREE_WEIGHT (20)
+#define SOFTAP_TXPWR_WEIGHT (20)
+
+
#define SAP_DEFAULT_24GHZ_CHANNEL (6)
-#define SAP_DEFAULT_5GHZ_CHANNEL (40)
+#define SAP_DEFAULT_LOW_5GHZ_CHANNEL (40)
+#define SAP_DEFAULT_MID_5GHZ_CHANNEL (100)
+#define SAP_DEFAULT_HIGH_5GHZ_CHANNEL (149)
#define SAP_CHANNEL_NOT_SELECTED (0)
#define SOFTAP_HT20_CHANNELWIDTH 0
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 605b8ca88c7f..9e4fcac14c25 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -2102,6 +2102,502 @@ sapDfsIsChannelInNolList(ptSapContext sapContext, v_U8_t channelNumber,
return VOS_FALSE;
}
+/**
+ * sap_select_default_oper_chan_ini() - Selects operating channel based on ini
+ * @hal: pointer to HAL
+ * @acs_11a: 11a acs cfg
+ *
+ * Return: selected operating channel
+ */
+uint8_t sap_select_default_oper_chan_ini(tHalHandle hal, uint32_t acs_11a)
+{
+ uint32_t operating_band = 0;
+ uint8_t channel;
+ ccmCfgGetInt(hal, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND,
+ &operating_band);
+ if (acs_11a || operating_band == RF_SUBBAND_5_LOW_GHZ ||
+ operating_band == RF_SUBBAND_5_MID_GHZ ||
+ operating_band == RF_SUBBAND_5_HIGH_GHZ) {
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ FL("Default channel selection from band %d"),
+ operating_band);
+ if (operating_band)
+ (operating_band == RF_SUBBAND_5_LOW_GHZ) ?
+ (channel = SAP_DEFAULT_LOW_5GHZ_CHANNEL) :
+ (operating_band == RF_SUBBAND_5_MID_GHZ) ?
+ (channel = SAP_DEFAULT_MID_5GHZ_CHANNEL) :
+ (operating_band == RF_SUBBAND_5_HIGH_GHZ) ?
+ (channel = SAP_DEFAULT_HIGH_5GHZ_CHANNEL) : 0;
+ else
+ channel = SAP_DEFAULT_LOW_5GHZ_CHANNEL;
+
+ } else {
+ channel = SAP_DEFAULT_24GHZ_CHANNEL;
+ }
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ FL("channel selected to start bss %d"), channel);
+ return channel;
+}
+
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+/**
+ * sap_create_session_info() - create session info based on
+ * the input chan and phymode
+ * @sap_context: ptSapContext ptr
+ * @session_info: information returned.
+ * @sap_ch: requesting channel number
+ *
+ * Return: TRUE if session info returned
+ */
+static v_BOOL_t sap_create_session_info(
+ ptSapContext sap_context,
+ session_info_t *session_info,
+ v_U16_t sap_ch)
+{
+ tHalHandle hHal;
+ eCsrPhyMode sap_phymode;
+
+ hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME,
+ sap_context->pvosGCtx);
+ if (NULL == hHal) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
+ "In %s, invalid hHal", __func__);
+ return FALSE;
+ }
+
+ sap_phymode = sap_context->csrRoamProfile.phyMode;
+ return sme_create_sap_session_info(
+ hHal, sap_phymode, sap_ch, session_info);
+}
+/**
+ * sap_find_station_session_info() - get active station session info
+ * @sap_context: ptSapContext ptr
+ * @session_info: information returned.
+ *
+ * Return: TRUE if session info returned
+ */
+static v_BOOL_t sap_find_station_session_info(
+ ptSapContext sap_context,
+ session_info_t * session_info)
+{
+ tHalHandle hHal;
+
+ hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME,
+ sap_context->pvosGCtx);
+ if (NULL == hHal) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
+ "In %s, invalid hHal", __func__);
+ return FALSE;
+ }
+ return sme_find_sta_session_info(hHal, session_info);
+}
+/**
+ * sap_find_all_session_info() - get all active session info
+ * @sap_context: ptSapContext ptr
+ * @session_info: information returned.
+ * @count: number of session returned.
+ *
+ * Return: TRUE if any session info returned
+ */
+static v_BOOL_t sap_find_all_session_info(
+ ptSapContext sap_context,
+ session_info_t *session_info,
+ v_U8_t *count)
+{
+ tHalHandle hHal;
+
+ hHal = (tHalHandle)vos_get_context( VOS_MODULE_ID_SME,
+ sap_context->pvosGCtx);
+ if (NULL == hHal) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
+ "In %s, invalid hHal", __func__);
+ return FALSE;
+ }
+ return sme_find_all_session_info(hHal, session_info, count);
+}
+/**
+ * sap_overlap_check() - check channel overlap or not
+ * @sap_context: ptSapContext ptr
+ * @info_1: session info 1.
+ * @info_2: session info 2.
+ *
+ * Return: TRUE if two session channels are overlap
+ */
+static v_BOOL_t sap_overlap_check(
+ session_info_t *info_1,
+ session_info_t *info_2)
+{
+ v_BOOL_t intf = TRUE;
+ if (!(((info_1->lfreq >= info_2->lfreq
+ && info_1->lfreq < info_2->hfreq) ||
+ (info_1->hfreq > info_2->lfreq
+ && info_1->hfreq <= info_2->hfreq))
+ || ((info_2->lfreq >= info_1->lfreq
+ && info_2->lfreq < info_1->hfreq) ||
+ (info_2->hfreq > info_1->lfreq
+ && info_2->hfreq <= info_1->hfreq))
+ )) {
+ intf = FALSE;
+ }
+
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s:info_1 mode %d band %d och %d lf %d"
+ "hf %d cf %d hbw %d",
+ __func__, info_1->con_mode, info_1->band,
+ info_1->och, info_1->lfreq, info_1->hfreq,
+ info_1->cfreq, info_1->hbw);
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s:info_2 mode %d band %d och %d lf %d"
+ "hf %d cf %d hbw %d",
+ __func__, info_2->con_mode, info_2->band,
+ info_2->och, info_2->lfreq, info_2->hfreq,
+ info_2->cfreq, info_2->hbw);
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s:info_1 %s with info_2",
+ __func__, intf ? "overlap" : "not overlap");
+
+ return intf;
+}
+/**
+ * sap_check_mcc_valid() - check mcc violation or not
+ * @sap_context: ptSapContext ptr
+ * @chan: chan to check
+ * @band: band of the channel
+ * @session_info: session info array of all active sessions
+ * @session_count: session counts
+ *
+ * Return: VOS_STATUS_SUCCESS if the new sap chan is valid.
+ */
+static VOS_STATUS sap_check_mcc_valid(
+ ptSapContext sap_context,
+ v_SINT_t chan,
+ eCsrBand band,
+ session_info_t *session_info,
+ v_U8_t session_count)
+{
+ session_info_t *info;
+ session_info_t sessions[VOS_MAX_CONCURRENCY_PERSONA + 1];
+ v_U8_t i, j;
+ v_U8_t session_cnt[VOS_MAX_CONCURRENCY_PERSONA];
+ v_U32_t channels[VOS_MAX_CONCURRENCY_PERSONA];
+ v_U8_t chan_cnt = 0;
+
+ if (session_count <= 0)
+ return VOS_STATUS_SUCCESS;
+ else if (session_count > VOS_MAX_CONCURRENCY_PERSONA) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid session count %d", __func__,
+ session_count);
+ return VOS_STATUS_E_INVAL;
+ }
+ /*
+ * create channel & session matrix
+ */
+ vos_mem_copy(sessions, session_info,
+ sizeof(session_info_t) * session_count);
+ info = &sessions[session_count];
+ info->con_mode = VOS_STA_SAP_MODE;
+ info->och = chan;
+ session_count++;
+ for (i = 0; i < session_count; i++) {
+ info = &sessions[i];
+ for (j = 0; j < chan_cnt; j++) {
+ if (info->och == channels[j]) {
+ session_cnt[j]++;
+ break;
+ }
+ }
+ if (j >= chan_cnt) {
+ channels[chan_cnt] = info->och;
+ session_cnt[chan_cnt] = 1;
+ chan_cnt++;
+ }
+ }
+ /*
+ * 1 .FW doesn't support > 2 home channel MCC.
+ */
+ if (chan_cnt > MAX_CONCURRENCY_CHAN_COUNT) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: exceed 2 home chan in MCC (chan %d band %d)",
+ __func__, chan, band);
+ return VOS_STATUS_E_FAILURE;
+ }
+ /*
+ * 2. FW doesn't support the MCC case in which >= 3 SAP sessions
+ * on one channel, e.g. AP1 AP2 AP3 on channel A and AP4 on
+ * channel B is not supported.
+ */
+ if (chan_cnt > 1) {
+ for (j = 0; j < chan_cnt; j++) {
+ if (session_cnt[j] >
+ MAX_SESSSION_PER_CHAN_MCC) {
+ VOS_TRACE( VOS_MODULE_ID_SAP,
+ VOS_TRACE_LEVEL_ERROR,
+ "%s: exceed 2 session in MCC "
+ "(chan %d band %d)",
+ __func__, chan, band);
+ return VOS_STATUS_E_FAILURE;
+ }
+ }
+ }
+ /*
+ * 3. Don't support MCC on DFS channel.
+ */
+ if (chan_cnt > 1) {
+ for (j = 0; j < chan_cnt; j++) {
+ if (channels[j] != 0
+ && vos_nv_getChannelEnabledState(channels[j])
+ == NV_CHANNEL_DFS) {
+ VOS_TRACE( VOS_MODULE_ID_SAP,
+ VOS_TRACE_LEVEL_ERROR,
+ "%s: dfs not support in MCC dfs chan %d"
+ "(chan %d band %d)",
+ __func__, channels[j], chan, band);
+ return VOS_STATUS_E_FAILURE;
+ }
+ }
+ }
+ return VOS_STATUS_SUCCESS;
+}
+
+/**
+* sap_concurrence_chan_override() - override SAP channel if necessary
+* @sap_context: ptSapContext ptr
+* @cc_switch_mode: override policy
+* @con_ch: the override result channel
+*
+* This function will check and override sap channel based on configurated
+* MCC to SCC policy :
+* gWlanMccToSccSwitchMode = 0: disabled.
+* gWlanMccToSccSwitchMode = 1: override to SCC if channel overlap in
+* same band.
+* gWlanMccToSccSwitchMode = 2: force to SCC in same band.
+*
+* Return: VOS_STATUS_SUCCESS: Success
+* other value will fail the sap start request
+*/
+static VOS_STATUS
+sap_concurrency_chan_override(
+ ptSapContext sap_context,
+ v_U8_t cc_switch_mode,
+ tANI_U8 *con_ch)
+{
+ v_U8_t i;
+ v_SINT_t target_chan;
+ eCsrBand target_band;
+ session_info_t target_info;
+ v_SINT_t candidate_chan = 0;
+ v_SINT_t candidate[2 * VOS_MAX_CONCURRENCY_PERSONA + 1];
+ v_U8_t candidate_count = 0;
+ session_info_t session_info[VOS_MAX_CONCURRENCY_PERSONA];
+ v_U8_t session_count = 0;
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+
+ if (sap_context->channel == AUTO_CHANNEL_SELECT) {
+ target_band = sap_context->target_band;
+ target_chan = 0;
+ candidate_chan = 0;
+ } else {
+ if (sap_context->channel > MAX_2_4GHZ_CHANNEL) {
+ target_band = eCSR_BAND_5G;
+ sap_context->target_band = eCSR_BAND_5G;
+ } else {
+ target_band = eCSR_BAND_24;
+ sap_context->target_band = eCSR_BAND_24;
+ }
+ target_chan = sap_context->channel;
+ candidate_chan = sap_context->channel;
+ if (!sap_create_session_info(sap_context, &target_info,
+ target_chan)) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "Failed to create channel(%d) info", target_chan);
+ return VOS_STATUS_E_FAILURE;
+ }
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s:curr sap mode %d band %d och %d lf %d hf"
+ "%d cf %d hbw %d",
+ __func__, target_info.con_mode, target_info.band,
+ target_info.och, target_info.lfreq, target_info.hfreq,
+ target_info.cfreq, target_info.hbw);
+ }
+
+ /*
+ * 1. find all active session info
+ */
+ sap_find_all_session_info(sap_context, session_info, &session_count);
+ /*
+ * 2. get candidate chan list from more preference to less preference
+ */
+ for (i = 0; i < session_count; i++) {
+ session_info_t *info = &session_info[i];
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s: mode %d band %d och %d lf %d hf %d cf %d hbw %d",
+ __func__, info->con_mode, info->band, info->och,
+ info->lfreq, info->hfreq, info->cfreq, info->hbw);
+ if (info->band != target_band)
+ continue;
+ if (cc_switch_mode == VOS_MCC_TO_SCC_SWITCH_ENABLE
+ && target_chan != 0
+ && sap_overlap_check(&target_info, info))
+ candidate[candidate_count++] = info->och;
+ else if (cc_switch_mode == VOS_MCC_TO_SCC_SWITCH_FORCE)
+ candidate[candidate_count++] = info->och;
+ }
+ candidate[candidate_count++] = target_chan;
+ if (cc_switch_mode == VOS_MCC_TO_SCC_SWITCH_ENABLE
+ && target_chan == 0) {
+ for (i = 0; i < session_count; i++) {
+ session_info_t *info = &session_info[i];
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s: mode %d band %d och %d lf %d"
+ "hf %d cf %d hbw %d",
+ __func__, info->con_mode, info->band,
+ info->och, info->lfreq, info->hfreq,
+ info->cfreq, info->hbw);
+ if (info->band != target_band)
+ continue;
+ candidate[candidate_count++] = info->och;
+ }
+ }
+ /*
+ * 3. check MCC violation and find the first good channel.
+ */
+ for (i = 0; i < candidate_count; i++) {
+ status = sap_check_mcc_valid(sap_context, candidate[i],
+ target_band,
+ session_info,
+ session_count);
+ if (status == VOS_STATUS_SUCCESS) {
+ candidate_chan = candidate[i];
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "%s: found chan %d band %d",
+ __func__, candidate_chan, target_band);
+ break;
+ }
+ }
+ if (status == VOS_STATUS_SUCCESS) {
+ sap_context->channel = candidate_chan;
+ *con_ch = sap_context->channel;
+ if (target_chan != candidate_chan)
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "In %s, override to chan %d band %d from %d",
+ __func__, candidate_chan, target_band,
+ target_chan);
+ else
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO,
+ "In %s, no override chan %d band %d",
+ __func__, target_chan, target_band);
+ } else {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "In %s, mcc violation chan %d band %d",
+ __func__, target_chan, target_band);
+ }
+ return status;
+}
+
+/**
+* sap_same_band_channel_switch_validate() -
+* check target chan valid or not during chan switch
+* @sap_context: ptSapContext ptr
+* @target_chan: target chan to switch
+*
+* This function checks whether target chan violates the same band
+* SCC policy.
+*
+* Return: TRUE: target chan doesn't violate the policy
+*/
+static bool
+sap_same_band_channel_switch_validate(
+ ptSapContext sap_context,
+ v_U16_t target_chan)
+{
+ session_info_t station_info;
+ v_SINT_t candidate_chan = 0;
+ eCsrBand target_band;
+
+ if (target_chan == 0)
+ return false;
+
+ if (target_chan > MAX_2_4GHZ_CHANNEL)
+ target_band = eCSR_BAND_5G;
+ else
+ target_band = eCSR_BAND_24;
+
+ /*
+ * find and check active station session on same band
+ */
+ if (sap_find_station_session_info(sap_context, &station_info)) {
+ if (station_info.band == target_band)
+ candidate_chan = station_info.och;
+ }
+ return candidate_chan == 0 || candidate_chan == target_chan;
+}
+/**
+* sap_overlap_channel_switch_validate() -
+* check target chan valid or not during chan switch
+* @sap_context: ptSapContext ptr
+* @target_chan: target chan to switch
+*
+* This function checks whether target chan violates the same band
+* overlap policy.
+*
+* Return: TRUE: target chan doesn't violate the policy
+*/
+static bool
+sap_overlap_channel_switch_validate(
+ ptSapContext sap_context,
+ v_U16_t target_chan)
+{
+ session_info_t station_info, target_info;
+ v_SINT_t candidate_chan = 0;
+
+ if (target_chan == 0)
+ return false;
+
+ if (!sap_create_session_info(sap_context, &target_info,
+ target_chan))
+ return false;
+ /*
+ * find and check active station session on same band
+ */
+ if (sap_find_station_session_info(sap_context, &station_info)) {
+ if (station_info.band == target_info.band)
+ if (sap_overlap_check(&target_info, &station_info))
+ candidate_chan = station_info.och;
+ }
+ return candidate_chan == 0 || candidate_chan == target_chan;
+}
+/**
+* sap_channel_switch_validate() -
+* check target chan valid or not during chan switch
+* @sap_context: ptSapContext ptr
+* @target_chan: target chan to switch
+*
+* This function checks whether target chan violates the configurated MCC to
+* SCC policy.
+*
+* Return: TRUE: target chan doesn't violate the policy
+*/
+bool
+sap_channel_switch_validate(
+ ptSapContext sap_context,
+ tHalHandle hal,
+ uint16_t target_channel,
+ eCsrPhyMode sap_phy_mode,
+ uint8_t cc_switch_mode,
+ uint32_t session_id)
+{
+ if (sap_context->cc_switch_mode == VOS_MCC_TO_SCC_SWITCH_FORCE)
+ return sap_same_band_channel_switch_validate(sap_context,
+ target_channel);
+ else if (sap_context->cc_switch_mode
+ == VOS_MCC_TO_SCC_SWITCH_ENABLE)
+ return sap_overlap_channel_switch_validate(sap_context,
+ target_channel);
+ else
+ return true;
+}
+#endif
/*==========================================================================
FUNCTION sapGotoChannelSel
@@ -2170,27 +2666,15 @@ sapGotoChannelSel
}
#endif
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (sapContext->cc_switch_mode != VOS_MCC_TO_SCC_SWITCH_DISABLE
- && sapContext->channel) {
- /*
- * For ACS request ,the sapContext->channel is 0, we skip
- * below overlap checking. When the ACS finish and SAP
- * BSS start, the sapContext->channel will not be 0. Then
- * the overlap checking will be reactivated.
- * If we use sapContext->channel = 0 to perform the overlap
- * checking, an invalid overlap channel con_ch could be
- * created. That may cause SAP start failed.
- */
- con_ch = sme_CheckConcurrentChannelOverlap(hHal,
- sapContext->channel,
- sapContext->csrRoamProfile.phyMode,
- sapContext->cc_switch_mode);
- if (con_ch) {
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
- "%s: Override Chosen Ch:%d to %d due to CC Intf!!",
- __func__,sapContext->channel, con_ch);
- sapContext->channel = con_ch;
- }
+ vosStatus = sap_concurrency_chan_override(
+ sapContext,
+ sapContext->cc_switch_mode,
+ &con_ch);
+ if (vosStatus != VOS_STATUS_SUCCESS) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid SAP channel(%d) configuration",
+ __func__,sapContext->channel);
+ return VOS_STATUS_E_ABORTED;
}
#endif
}
@@ -2207,18 +2691,15 @@ sapGotoChannelSel
}
#endif
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (sapContext->cc_switch_mode != VOS_MCC_TO_SCC_SWITCH_DISABLE
- && sapContext->channel) {
- con_ch = sme_CheckConcurrentChannelOverlap(hHal,
- sapContext->channel,
- sapContext->csrRoamProfile.phyMode,
- sapContext->cc_switch_mode);
- if (con_ch && !VOS_IS_DFS_CH(con_ch)) {
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
- "%s: Override Chosen Ch:%d to %d due to CC Intf!!",
- __func__,sapContext->channel, con_ch);
- sapContext->channel = con_ch;
- }
+ vosStatus = sap_concurrency_chan_override(
+ sapContext,
+ sapContext->cc_switch_mode,
+ &con_ch);
+ if (vosStatus != VOS_STATUS_SUCCESS) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid SAP channel(%d) configuration",
+ __func__,sapContext->channel);
+ return VOS_STATUS_E_ABORTED;
}
#else
/* If STA-AP concurrency is enabled take the concurrent connected
@@ -2257,6 +2738,9 @@ sapGotoChannelSel
/* Set BSSType to default type */
scanRequest.BSSType = eCSR_BSS_TYPE_ANY;
+ if (ACS_FW_REPORT_PARAM_CONFIGURED)
+ scanRequest.BSSType = eCSR_BSS_TYPE_INFRA_AP;
+
#ifndef SOFTAP_CHANNEL_RANGE
/*Scan all the channels */
scanRequest.ChannelInfo.numOfChannels = 0;
@@ -2280,7 +2764,7 @@ sapGotoChannelSel
scanRequest.requestType = eCSR_SCAN_SOFTAP_CHANNEL_RANGE;
sapContext->channelList = channelList;
-
+ sapContext->num_of_channel = numOfChannels;
#endif
/* Set requestType to Full scan */
@@ -2332,15 +2816,16 @@ sapGotoChannelSel
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
"SoftAP Configuring for default channel, Ch= %d",
sapContext->channel);
- /* In case of error, switch to default channel */
- sapContext->channel = SAP_DEFAULT_24GHZ_CHANNEL;
+ sapContext->channel =
+ sap_select_default_oper_chan_ini(hHal, 0);
#ifdef SOFTAP_CHANNEL_RANGE
if(sapContext->channelList != NULL)
{
sapContext->channel = sapContext->channelList[0];
vos_mem_free(sapContext->channelList);
sapContext->channelList = NULL;
+ sapContext->num_of_channel = 0;
}
#endif
if (VOS_TRUE == sapDoAcsPreStartBss)
@@ -2671,6 +3156,33 @@ sapGotoDisconnected
return vosStatus;
}
+#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
+/**
+ * sap_handle_acs_scan_event() - handle acs scan event for SAP
+ * @sap_context: ptSapContext
+ * @sap_event: tSap_Event
+ * @status: status of acs scan
+ *
+ * The function is to handle the eSAP_ACS_SCAN_SUCCESS_EVENT event.
+ *
+ * Return: void
+ */
+static void sap_handle_acs_scan_event(ptSapContext sap_context,
+ tSap_Event *sap_event, eSapStatus status)
+{
+ sap_event->sapHddEventCode = eSAP_ACS_SCAN_SUCCESS_EVENT;
+ sap_event->sapevt.sap_acs_scan_comp.status = status;
+ sap_event->sapevt.sap_acs_scan_comp.num_of_channels =
+ sap_context->num_of_channel;
+ sap_event->sapevt.sap_acs_scan_comp.channellist =
+ sap_context->channelList;
+}
+#else
+static void sap_handle_acs_scan_event(ptSapContext sap_context,
+ tSap_Event *sap_event, eSapStatus status)
+{
+}
+#endif
/*==========================================================================
FUNCTION sapSignalHDDevent
@@ -2777,14 +3289,17 @@ sapSignalHDDevent
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
"In %s, SAP event callback event = %s : %d", __func__,
"eSAP_DFS event", sapHddevent);
-#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
- case eSAP_ACS_SCAN_SUCCESS_EVENT:
-#endif
sapApAppEvent.sapHddEventCode = sapHddevent;
sapApAppEvent.sapevt.sapStopBssCompleteEvent.status =
- (eSapStatus )context;
+ (eSapStatus )context;
+ break;
+ case eSAP_ACS_SCAN_SUCCESS_EVENT:
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "In %s, SAP event callback event = %s : %d", __func__,
+ "ACS Scan event", sapHddevent);
+ sap_handle_acs_scan_event(sapContext, &sapApAppEvent,
+ (eSapStatus)context);
break;
-
case eSAP_ACS_CHANNEL_SELECTED:
sapApAppEvent.sapHddEventCode = sapHddevent;
if ( eSAP_STATUS_SUCCESS == (eSapStatus )context)
@@ -3662,13 +4177,14 @@ sapFsm
for (intf = 0; intf < SAP_MAX_NUM_SESSION; intf++)
{
ptSapContext sapContext;
+ sapContext = pMac->sap.sapCtxList [intf].pSapContext;
if (((VOS_STA_SAP_MODE ==
pMac->sap.sapCtxList[intf].sapPersona) ||
(VOS_P2P_GO_MODE ==
pMac->sap.sapCtxList[intf].sapPersona)) &&
- pMac->sap.sapCtxList [intf].pSapContext != NULL)
+ sapContext != NULL &&
+ sapContext->sapsMachine != eSAP_DISCONNECTED)
{
- sapContext = pMac->sap.sapCtxList [intf].pSapContext;
/* SAP to be moved to DISCONNECTING state */
sapContext->sapsMachine = eSAP_DISCONNECTING;
/*
@@ -5009,6 +5525,7 @@ tANI_BOOLEAN is_concurrent_sap_ready_for_channel_change(tHalHandle hHal,
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
ptSapContext pSapContext;
v_U8_t intf = 0;
+ tANI_BOOLEAN is_ready_for_chng = VOS_TRUE;
for (intf = 0; intf < SAP_MAX_NUM_SESSION; intf++) {
if (((VOS_STA_SAP_MODE == pMac->sap.sapCtxList [intf].sapPersona) ||
@@ -5024,9 +5541,10 @@ tANI_BOOLEAN is_concurrent_sap_ready_for_channel_change(tHalHandle hHal,
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
FL("concurrent sapCtx[%p] didn't matche with [%p]"),
pSapContext, sapContext);
- return pSapContext->is_sap_ready_for_chnl_chng;
+ is_ready_for_chng = is_ready_for_chng &&
+ pSapContext->is_sap_ready_for_chnl_chng;
}
}
}
- return VOS_FALSE;
+ return is_ready_for_chng;
}
diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h
index b173120a2d11..c5bc6cf86ab1 100644
--- a/CORE/SAP/src/sapInternal.h
+++ b/CORE/SAP/src/sapInternal.h
@@ -246,6 +246,7 @@ typedef struct sSapContext {
v_U32_t nStaAddIeLength;
v_U8_t pStaAddIE[MAX_ASSOC_IND_IE_LEN];
v_U8_t *channelList;
+ uint8_t num_of_channel;
tSapChannelListInfo SapChnlList;
uint16_t vht_channel_width;
uint16_t ch_width_orig;
@@ -301,6 +302,7 @@ typedef struct sSapContext {
tSirMacRateSet supp_rate_set;
tSirMacRateSet extended_rate_set;
vos_event_t sap_session_opened_evt;
+ eCsrBand target_band;
} *ptSapContext;
@@ -1094,7 +1096,18 @@ eHalStatus sap_CloseSession(tHalHandle hHal,
ptSapContext sapContext,
csrRoamSessionCloseCallback callback,
v_BOOL_t valid);
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+bool
+sap_channel_switch_validate(
+ ptSapContext sap_context,
+ tHalHandle hal,
+ uint16_t target_channel,
+ eCsrPhyMode sap_phy_mode,
+ uint8_t cc_switch_mode,
+ uint32_t session_id);
+#endif
#ifdef __cplusplus
}
#endif
+uint8_t sap_select_default_oper_chan_ini(tHalHandle hal, uint32_t acs_11a);
#endif /* #ifndef WLAN_QCT_WLANSAP_INTERNAL_H */
diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c
index 01185e9a327d..c976cbafdc81 100644
--- a/CORE/SAP/src/sapModule.c
+++ b/CORE/SAP/src/sapModule.c
@@ -1262,32 +1262,19 @@ WLANSAP_ClearACL
)
{
ptSapContext pSapCtx = VOS_GET_SAP_CB(pCtx);
- v_U8_t i;
if (NULL == pSapCtx)
{
return VOS_STATUS_E_RESOURCES;
}
- if (pSapCtx->denyMacList != NULL)
- {
- for (i = 0; i < (pSapCtx->nDenyMac-1); i++)
- {
- vos_mem_zero((pSapCtx->denyMacList+i)->bytes, sizeof(v_MACADDR_t));
+ vos_mem_zero(&pSapCtx->denyMacList, sizeof(pSapCtx->denyMacList));
- }
- }
sapPrintACL(pSapCtx->denyMacList, pSapCtx->nDenyMac);
pSapCtx->nDenyMac = 0;
- if (pSapCtx->acceptMacList!=NULL)
- {
- for (i = 0; i < (pSapCtx->nAcceptMac-1); i++)
- {
- vos_mem_zero((pSapCtx->acceptMacList+i)->bytes, sizeof(v_MACADDR_t));
+ vos_mem_zero(&pSapCtx->acceptMacList, sizeof(pSapCtx->acceptMacList));
- }
- }
sapPrintACL(pSapCtx->acceptMacList, pSapCtx->nAcceptMac);
pSapCtx->nAcceptMac = 0;
@@ -1666,7 +1653,8 @@ WLANSAP_SetChannelChangeWithCsa(v_PVOID_t pvosGCtx, v_U32_t targetChannel)
/*
* validate target channel switch w.r.t various concurrency rules set.
*/
- valid = sme_validate_sap_channel_switch(VOS_GET_HAL_CB(sapContext->pvosGCtx),
+ valid = sap_channel_switch_validate(sapContext,
+ VOS_GET_HAL_CB(sapContext->pvosGCtx),
targetChannel, sapContext->csrRoamProfile.phyMode,
sapContext->cc_switch_mode, sapContext->sessionId);
if (!valid)
@@ -3791,7 +3779,7 @@ WLANSAP_ACS_CHSelect(v_PVOID_t pvosGCtx,
pMac = PMAC_STRUCT( hHal );
sapContext->acs_cfg = &pConfig->acs_cfg;
sapContext->csrRoamProfile.phyMode = sapContext->acs_cfg->hw_mode;
-
+ sapContext->target_band = pConfig->target_band;
/*
* Copy the HDD callback function to report the
* ACS result after scan in SAP context callback function.
@@ -3825,7 +3813,7 @@ WLANSAP_ACS_CHSelect(v_PVOID_t pvosGCtx,
if (VOS_STATUS_E_ABORTED == vosStatus) {
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
- "In %s,DFS not supported in the current operating mode",
+ "In %s, acs configuration not supported",
__func__);
return VOS_STATUS_E_FAILURE;
}
@@ -3917,3 +3905,28 @@ wlansap_get_chan_width(void *pvosctx, uint32_t *pchanwidth)
return VOS_STATUS_SUCCESS;
}
+/*
+ * wlansap_set_invalid_session() - set session ID to invalid
+ * @pctx: pointer of global context
+ *
+ * This function sets session ID to invalid
+ *
+ * Return: VOS_STATUS
+ */
+VOS_STATUS
+wlansap_set_invalid_session(v_PVOID_t pctx)
+{
+ ptSapContext psapctx;
+ psapctx = VOS_GET_SAP_CB(pctx);
+ if ( NULL == psapctx) {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ FL("Invalid SAP pointer from pctx"));
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ psapctx->sessionId = CSR_SESSION_ID_INVALID;
+ psapctx->isSapSessionOpen = eSAP_FALSE;
+
+ return VOS_STATUS_SUCCESS;
+}
+
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index af7add647bb0..0b5c02a22335 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -756,17 +756,18 @@ static int __ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file,
}
switch (scn->target_type) {
- default:
- board_data_size = 0;
- board_ext_data_size = 0;
- break;
case TARGET_TYPE_AR6004:
board_data_size = AR6004_BOARD_DATA_SZ;
board_ext_data_size = AR6004_BOARD_EXT_DATA_SZ;
+ break;
case TARGET_TYPE_AR9888:
board_data_size = AR9888_BOARD_DATA_SZ;
board_ext_data_size = AR9888_BOARD_EXT_DATA_SZ;
break;
+ default:
+ board_data_size = 0;
+ board_ext_data_size = 0;
+ break;
}
/* Determine where in Target RAM to write Board Data */
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
index b8066b7da5ba..58169ec1df5a 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
@@ -708,6 +708,9 @@ __adf_nbuf_data_get_icmp_subtype(uint8_t *data)
subtype = (uint8_t)(*(uint8_t *)
(data + ICMP_SUBTYPE_OFFSET));
+ VOS_TRACE(VOS_MODULE_ID_ADF, VOS_TRACE_LEVEL_DEBUG,
+ "ICMP proto type: 0x%02x", subtype);
+
switch (subtype) {
case ICMP_REQUEST:
proto_subtype = ADF_PROTO_ICMP_REQ;
@@ -740,6 +743,9 @@ __adf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
subtype = (uint8_t)(*(uint8_t *)
(data + ICMPV6_SUBTYPE_OFFSET));
+ VOS_TRACE(VOS_MODULE_ID_ADF, VOS_TRACE_LEVEL_DEBUG,
+ "ICMPv6 proto type: 0x%02x", subtype);
+
switch (subtype) {
case ICMPV6_REQUEST:
proto_subtype = ADF_PROTO_ICMPV6_REQ;
@@ -1155,27 +1161,27 @@ __adf_nbuf_trace_update(struct sk_buff *buf, char *event_string)
switch (adf_nbuf_trace_get_proto_type(buf)) {
case NBUF_PKT_TRAC_TYPE_EAPOL:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "EPL", NBUF_PKT_TRAC_PROTO_STRING);
+ "EPL", adf_os_str_len("EPL"));
break;
case NBUF_PKT_TRAC_TYPE_DHCP:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "DHC", NBUF_PKT_TRAC_PROTO_STRING);
+ "DHC", adf_os_str_len("DHC"));
break;
case NBUF_PKT_TRAC_TYPE_MGMT_ACTION:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "MACT", NBUF_PKT_TRAC_PROTO_STRING);
+ "MACT", adf_os_str_len("MACT"));
break;
case NBUF_PKT_TRAC_TYPE_ARP:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "ARP", NBUF_PKT_TRAC_PROTO_STRING);
+ "ARP", adf_os_str_len("ARP"));
break;
case NBUF_PKT_TRAC_TYPE_NS:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "NS", NBUF_PKT_TRAC_PROTO_STRING);
+ "NS", adf_os_str_len("NS"));
break;
case NBUF_PKT_TRAC_TYPE_NA:
adf_os_mem_copy(string_buf + adf_os_str_len(event_string),
- "NA", NBUF_PKT_TRAC_PROTO_STRING);
+ "NA", adf_os_str_len("NA"));
break;
default:
break;
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
index 5d367c20f605..e155da2bd8dc 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
@@ -1314,6 +1314,27 @@ adf_nbuf_set_fwd_flag(adf_nbuf_t buf, uint8_t flag)
}
/**
+ * adf_nbuf_is_ipa_nbuf() - Check if frame owner is IPA
+ * @skb: Pointer to skb
+ *
+ * Returns: TRUE if the owner is IPA else FALSE
+ *
+ */
+#if (defined(QCA_MDM_DEVICE) && defined(IPA_OFFLOAD))
+static inline bool
+adf_nbuf_is_ipa_nbuf(adf_nbuf_t buf)
+{
+ return (NBUF_OWNER_ID(buf) == IPA_NBUF_OWNER_ID);
+}
+#else
+static inline bool
+adf_nbuf_is_ipa_nbuf(adf_nbuf_t buf)
+{
+ return false;
+}
+#endif /* QCA_MDM_DEVICE && IPA_OFFLOAD*/
+
+/**
* @brief This function registers protocol trace callback
*
* @param[in] adf_nbuf_trace_update_t callback pointer
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
index 2fda4e21f246..e142e88e78b8 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
@@ -667,6 +667,10 @@ void adf_dp_trace_ptr(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
void adf_dp_display_record(struct adf_dp_trace_record_s *pRecord,
uint16_t recIndex)
{
+ uint8_t rsize = pRecord->size;
+ if (rsize > ADF_DP_TRACE_RECORD_SIZE)
+ rsize = ADF_DP_TRACE_RECORD_SIZE;
+
adf_os_print("DPT: %04d: %012llu: %s\n", recIndex,
pRecord->time, adf_dp_code_to_string(pRecord->code));
switch (pRecord->code) {
@@ -679,10 +683,10 @@ void adf_dp_display_record(struct adf_dp_trace_record_s *pRecord,
"HDD SoftAP TX Timeout\n");
break;
case ADF_DP_TRACE_HDD_TX_PACKET_RECORD:
- dump_hex_trace("DATA", pRecord->data, pRecord->size);
+ dump_hex_trace("DATA", pRecord->data, rsize);
break;
default:
- dump_hex_trace("cookie", pRecord->data, pRecord->size);
+ dump_hex_trace("cookie", pRecord->data, rsize);
}
}
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
index 13a1339a947f..99ced05dfbf5 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
@@ -99,10 +99,10 @@ struct cvg_nbuf_cb {
* Store info for data path tracing
*/
struct {
- uint8_t packet_state: 4;
- uint8_t packet_track: 2;
- uint8_t dp_trace: 1;
- uint8_t dp_trace_reserved: 1;
+ uint8_t packet_state:4;
+ uint8_t packet_track:2;
+ uint8_t dp_trace_tx:1;
+ uint8_t dp_trace_rx:1;
} trace;
/*
@@ -271,7 +271,10 @@ struct cvg_nbuf_cb {
adf_nbuf_set_state(skb, PACKET_STATE)
#define ADF_NBUF_CB_TX_DP_TRACE(skb) \
- (((struct cvg_nbuf_cb *)((skb)->cb))->trace.dp_trace)
+ (((struct cvg_nbuf_cb *)((skb)->cb))->trace.dp_trace_tx)
+
+#define ADF_NBUF_CB_RX_DP_TRACE(skb) \
+ (((struct cvg_nbuf_cb *)((skb)->cb))->trace.dp_trace_rx)
#define ADF_NBUF_GET_IS_EAPOL(skb) \
(((struct cvg_nbuf_cb *)((skb)->cb))->packet_type.is_eapol)
diff --git a/CORE/SERVICES/COMMON/htc_api.h b/CORE/SERVICES/COMMON/htc_api.h
index 8fffe5381e58..351d485af0f3 100644
--- a/CORE/SERVICES/COMMON/htc_api.h
+++ b/CORE/SERVICES/COMMON/htc_api.h
@@ -391,6 +391,19 @@ A_STATUS HTCAddReceivePkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket);
A_STATUS HTCConnectService(HTC_HANDLE HTCHandle,
HTC_SERVICE_CONNECT_REQ *pReq,
HTC_SERVICE_CONNECT_RESP *pResp);
+
+/**
+ * htc_disconnect_service() - Disconnect to an HTC service
+ * @htc_handle: HTC handle
+ * @endpoint_id: endpoint id
+ *
+ * Service disconnection must be performed during htt_detach.
+ *
+ * Return: None
+ */
+void htc_disconnect_service(HTC_HANDLE htc_handle,
+ HTC_ENDPOINT_ID endpoint_id);
+
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@desc: HTC register log dump
@function name: HTCDump
diff --git a/CORE/SERVICES/COMMON/ol_txrx_api.h b/CORE/SERVICES/COMMON/ol_txrx_api.h
index 8e8f47e5d22d..d78be2235a45 100644
--- a/CORE/SERVICES/COMMON/ol_txrx_api.h
+++ b/CORE/SERVICES/COMMON/ol_txrx_api.h
@@ -124,5 +124,10 @@ typedef void (*tp_ol_packetdump_cb)(adf_nbuf_t netbuf,
void ol_register_packetdump_callback(tp_ol_packetdump_cb ol_tx_packetdump_cb,
tp_ol_packetdump_cb ol_rx_packetdump_cb);
void ol_deregister_packetdump_callback(void);
+void ol_tx_failure_cb_set(ol_txrx_pdev_handle pdev,
+ void (*tx_failure_cb)(void *ctx,
+ unsigned int num_msdu,
+ unsigned char tid,
+ unsigned int status));
#endif /* _OL_TXRX_API__H_ */
diff --git a/CORE/SERVICES/COMMON/wlan_defs.h b/CORE/SERVICES/COMMON/wlan_defs.h
index 19c49f36e828..6a24728fa230 100644
--- a/CORE/SERVICES/COMMON/wlan_defs.h
+++ b/CORE/SERVICES/COMMON/wlan_defs.h
@@ -60,6 +60,16 @@
#define SUPPORT_11AX 0 /* 11ax not supported by default */
#endif
+/* defines to set Packet extension values which can be 0 us, 8 us or 16 us */
+/* NOTE: Below values cannot be changed without breaking WMI Compatibility */
+#define MAX_HE_NSS 8
+#define MAX_HE_MODULATION 8
+#define MAX_HE_RU 4
+#define HE_MODULATION_NONE 7
+#define HE_PET_0_USEC 0
+#define HE_PET_8_USEC 1
+#define HE_PET_16_USEC 2
+
typedef enum {
MODE_11A = 0, /* 11a Mode */
MODE_11G = 1, /* 11b/g Mode */
diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
index f34ec615ad91..0165ac35af67 100644
--- a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
+++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
@@ -35,9 +35,12 @@
/*
* default limit of 8 VAPs per device.
*/
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_TGT_NUM_VDEV 4
+#else
/* Rome PRD support 3 vdevs */
#define CFG_TGT_NUM_VDEV 3
-
+#endif
/*
* We would need 1 AST entry per peer. Scale it by a factor of 2 to minimize hash collisions.
* TODO: This scaling factor would be taken care inside the WAL in the future.
@@ -188,7 +191,11 @@
/*
* Maximum number of VDEV that beacon tx offload will support
*/
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 4
+#else
#define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 2
+#endif
/*
* number of vdevs that can support tdls
diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
index 620dbbd0be58..168926f9820c 100644
--- a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
+++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
@@ -37,8 +37,12 @@
/*
* default limit of VAPs per device.
*/
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_TGT_NUM_VDEV 4
+#else
#define CFG_TGT_NUM_VDEV 3
#endif
+#endif
/*
* We would need 1 AST entry per peer. Scale it by a factor of 2 to minimize
* hash collisions.
@@ -63,7 +67,11 @@
* probably always be appropriate; it is probably not necessary to
* determine this value dynamically.
*/
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_TGT_AST_SKID_LIMIT 8
+#else
#define CFG_TGT_AST_SKID_LIMIT 6
+#endif
/*
* total number of peers per device.
* currently set to 8 to bring up IP3.9 for memory size problem
@@ -243,7 +251,11 @@
* Maximum number of VDEV that beacon tx offload will support
*/
#ifdef HIF_SDIO
+#ifdef WLAN_4SAP_CONCURRENCY
+#define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 4
+#else
#define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 2
+#endif
#else
#define CFG_TGT_DEFAULT_BEACON_TX_OFFLOAD_MAX_VDEV 1
#endif
diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h
index 0d1c12436a9e..9a0829d46f50 100644
--- a/CORE/SERVICES/COMMON/wma_api.h
+++ b/CORE/SERVICES/COMMON/wma_api.h
@@ -178,4 +178,6 @@ extern int wma_scpc_event_handler(void *handle, u_int8_t *event, u_int32_t len);
VOS_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value);
VOS_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value);
+void wma_tx_failure_cb(void *ctx, uint32_t num_msdu,
+ uint8_t tid, uint32_t status);
#endif
diff --git a/CORE/SERVICES/COMMON/wmi_services.h b/CORE/SERVICES/COMMON/wmi_services.h
index 24cf12cbc0b5..89c368b1ff73 100644
--- a/CORE/SERVICES/COMMON/wmi_services.h
+++ b/CORE/SERVICES/COMMON/wmi_services.h
@@ -262,6 +262,17 @@ typedef enum {
WMI_SERVICE_WLAN_STATS_REPORT=111, /* support WLAN stats report */
+ /* WMI_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT -
+ * FW supports bigger MSDU ID partition which is defined as
+ * HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN. When both host and FW support
+ * new partition, FW uses HTT_TX_IPA_NEW_MSDU_ID_SPACE_BEGIN. If host
+ * doesn't support, FW falls back to HTT_TX_IPA_MSDU_ID_SPACE_BEGIN
+ * Handshaking is done through WMI_INIT and WMI service ready
+ *
+ * support bigger MSDU ID partition
+ */
+ WMI_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT = 112,
+
/***** ADD NEW SERVICES HERE UNTIL ALL VALUES UP TO 128 ARE USED *****/
diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
index 777ade40830a..bfc6f21c6f9e 100644
--- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h
+++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
@@ -748,6 +748,13 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_rx_stats_thresh,
WMITLV_TAG_STRUC_wmi_pdev_set_stats_threshold_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_request_wlan_stats_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_rx_aggr_failure_event_fixed_param,
+ WMITLV_TAG_STRUC_wmi_rx_aggr_failure_info,
+ WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_resp_event_fixed_param,
+ WMITLV_TAG_STRUC_wmi_pdev_band_to_mac,
+ WMITLV_TAG_STRUC_wmi_tbtt_offset_info,
+ WMITLV_TAG_STRUC_wmi_tbtt_offset_ext_event_fixed_param,
} WMITLV_TAG_ID;
/*
@@ -1051,6 +1058,7 @@ typedef enum {
OP(WMI_COEX_GET_ANTENNA_ISOLATION_CMDID) \
OP(WMI_PDEV_SET_STATS_THRESHOLD_CMDID) \
OP(WMI_REQUEST_WLAN_STATS_CMDID) \
+ OP(WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID) \
/* add new CMD_LIST elements above this line */
/*
@@ -1210,6 +1218,8 @@ typedef enum {
OP(WMI_PDEV_CHIP_POWER_STATS_EVENTID) \
OP(WMI_COEX_REPORT_ANTENNA_ISOLATION_EVENTID) \
OP(WMI_REPORT_STATS_EVENTID) \
+ OP(WMI_REPORT_RX_AGGR_FAILURE_EVENTID) \
+ OP(WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID) \
/* add new EVT_LIST elements above this line */
@@ -2582,6 +2592,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_TEMPERATURE_CMDID);
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pdev_get_antdiv_status_cmd_fixed_param, wmi_pdev_get_antdiv_status_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_ANTDIV_STATUS_CMDID);
+/* DISA feature : vdev encrypt decrypt request */
+#define WMITLV_TABLE_WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param, wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID);
+
/* Set antenna diversity Cmd */
#define WMITLV_TABLE_WMI_SET_ANTENNA_DIVERSITY_CMDID(id,op,buf,len) \
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pdev_set_antenna_diversity_cmd_fixed_param, wmi_pdev_set_antenna_diversity_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
@@ -3385,6 +3401,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_rate_ht_info, ht_info, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_VDEV_RATE_STATS_EVENTID);
+/* report rx aggregation failure information */
+#define WMITLV_TABLE_WMI_REPORT_RX_AGGR_FAILURE_EVENTID(id,op,buf,len)\
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rx_aggr_failure_event_fixed_param, wmi_rx_aggr_failure_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rx_aggr_failure_info, failure_info, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_REPORT_RX_AGGR_FAILURE_EVENTID);
/* Update memory dump complete Event */
#define WMITLV_TABLE_WMI_UPDATE_FW_MEM_DUMP_EVENTID(id,op,buf,len)\
@@ -3877,39 +3898,43 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID);
/* Layout of WMI_REPORT_STATS_EVENTID message:
* fixed_param;
- * wmi_chan_cca_stats chan_cca_stats[]; Array size is specified by num_chan_cca_stats
- * wmi_peer_signal_stats peer_signal_stats[]; Array size is specified by num_peer_signal_stats
- * wmi_peer_ac_tx_stats peer_ac_tx_stats[]; Array size is specified by num_peer_ac_tx_stats
- * wmi_tx_stats tx_stats[][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
- * A_UINT32 tx_mpdu_aggr[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_mpdu_aggr_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_mpdu_aggr_array_size + A-MPDU size index
+ * wmi_chan_cca_stats chan_cca_stats[]; Array length is specified by num_chan_cca_stats
+ * wmi_peer_signal_stats peer_signal_stats[]; Array length is specified by num_peer_signal_stats
+ * wmi_peer_ac_tx_stats peer_ac_tx_stats[]; Array length is specified by num_peer_ac_tx_stats
+ * wmi_tx_stats tx_stats[][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
+ * A_UINT32 tx_mpdu_aggr[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_mpdu_aggr_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_mpdu_aggr_array_len + A-MPDU size index
* Contains a histogram of how many A-MPDUs of a given size (i.e. number of MPDUs) have been transmitted.
- * Element 0 contains the count of PPDUs containing a single MPDU, element 1 counts PPDUs containing 2 MPDUs, etc.
- * Element tx_mpdu_aggr_array_size-1 contains the histogram count for A-MPDUs of size >= tx_mpdu_aggr_array_size.
- * A_UINT32 tx_msdu_acked_mcs[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_acked_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_acked_mcs_array_size + MCS index
- * Contains a count of how many tx MSDUs have been acked for each MCS of each AC of each peer.
- * A_UINT32 tx_msdu_failed_mcs[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_failed_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_failed_mcs_array_size + MCS index
- * Contains a count of how many MSDUs failed tx due to no ack for each MCS of each AC of each peer.
- * A_UINT32 tx_msdu_delay[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_delay_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_delay_array_size + delay index
- * Contains a histogram of how many MSDUs encountered each level of delay due to retries.
- * The time represented by each array element (i.e. histogram bin) is specified by tx_delay_bin_size_ms.
- * Element 0 contains the count of MSDUs delayed by less than tx_delay_bin_size_ms.
- * Element 1 contains the count of MSDUs delayed by more than 1x tx_delay_bin_size_ms but less than 2x.
- * Element tx_msdu_delay_array_size-1 contains the count of MSDUs delayed by
- * >= tx_delay_bin_size_ms * (tx_msdu_delay_array_size-1)
- * wmi_peer_ac_rx_stats peer_ac_rx_stats[]; Array size is specified by num_peer_ac_rx_stats
- * wmi_rx_stats rx_stats[][]; Array size is num_peer_ac_rx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
- * A_UINT32 rx_mpdu_aggr[][][]; Array size is num_peer_ac_rx_stats * WLAN_MAX_AC * rx_mpdu_aggr_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mpdu_aggr_array_size + A-MPDU size index
+ * Element 0 contains the number of PPDUs with a single-MPDU A-MPDU.
+ * Element 1 contains the number of PPDUs with 2 MPDUs.
+ * Element 2 contains the number of PPDUs with 3 MPDUs.
+ * Element tx_mpdu_aggr_array_len-1 contains the number of PPDUs with >= tx_mpdu_aggr_array_len MPDUs.
+ * A_UINT32 tx_succ_mcs[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_succ_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_succ_mcs_array_len + MCS index
+ * Contains a count of how many tx PPDUs have been acked for each MCS of each AC of each peer.
+ * A_UINT32 tx_fail_mcs[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_fail_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_fail_mcs_array_len + MCS index
+ * Contains a count of how many PPDUs failed tx due to no ack for each MCS of each AC of each peer.
+ * A_UINT32 tx_ppdu_delay[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_ppdu_delay_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_ppdu_delay_array_len + delay index
+ * Contains a histogram of how many PPDUs encountered each level of delay due to retries or air interface contention.
+ * The time represented by each array element (i.e. histogram bin) is specified by tx_ppdu_delay_bin_size_ms.
+ * Element 0 contains the count of PPDUs delayed by less than tx_ppdu_delay_bin_size_ms.
+ * Element 1 contains the count of PPDUs delayed by more than 1x tx_ppdu_delay_bin_size_ms but less than 2x.
+ * Element tx_delay_array_len-1 contains the count of PPDUs delayed by
+ * >= tx_ppdu_delay_bin_size_ms * (tx_ppdu_delay_array_len-1)
+ * wmi_peer_ac_rx_stats peer_ac_rx_stats[]; Array length is specified by num_peer_ac_rx_stats
+ * wmi_rx_stats rx_stats[][]; Array length is num_peer_ac_rx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
+ * A_UINT32 rx_mpdu_aggr[][][]; Array length is num_peer_ac_rx_stats * WLAN_MAX_AC * rx_mpdu_aggr_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mpdu_aggr_array_len + A-MPDU size index
* Contains a histogram of how many A-MPDUs of a given size (i.e. number of MPDUs) have been received.
- * Element 0 contains the count of PPDUs containing a single MPDU, element 1 counts PPDUs containing 2 MPDUs, etc.
- * Element rx_mpdu_aggr_array_size-1 contains the histogram count for A-MPDUs of size >= rx_mpdu_aggr_array_size.
- * A_UINT32 rx_msdu_mcs[][][]; Array size is (num_peer_ac_rx_stats * WLAN_MAX_AC) * rx_msdu_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_msdu_mcs_array_size + MCS index
- * Contains a count of rx MSDUs for each MCS of each AC of each peer.
+ * Element 0 contains the number of PPDUs with a single MPDU.
+ * Element 1 contains the number of PPDUs with 2 MPDUs.
+ * Element 2 contains the number of PPDUs with 3 MPDUs.
+ * Element rx_mpdu_aggr_array_len-1 contains the number of PPDUs with >= rx_mpdu_aggr_array_len MPDUs.
+ * A_UINT32 rx_mcs[][][]; Array length is (num_peer_ac_rx_stats * WLAN_MAX_AC) * rx_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mcs_array_len + MCS index
+ * Contains a count of rx PPDUs for each MCS of each AC of each peer.
* For example, if there were 2 peers (X and Y) whose stats were being reported,
* the message and its TLV arrays would look like this:
* 1. fixed_param
@@ -3934,30 +3959,30 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID);
* 20. tx_mpdu_aggr[1][1][] for peer Y, AC 1
* 21. tx_mpdu_aggr[1][2][] for peer Y, AC 2
* 22. tx_mpdu_aggr[1][3][] for peer Y, AC 3
- * 23. tx_msdu_acked_mcs[0][0][] for peer X, AC 0
- * 24. tx_msdu_acked_mcs[0][1][] for peer X, AC 1
- * 25. tx_msdu_acked_mcs[0][2][] for peer X, AC 2
- * 26. tx_msdu_acked_mcs[0][3][] for peer X, AC 3
- * 27. tx_msdu_acked_mcs[1][0][] for peer Y, AC 0
- * 28. tx_msdu_acked_mcs[1][1][] for peer Y, AC 1
- * 29. tx_msdu_acked_mcs[1][2][] for peer Y, AC 2
- * 30. tx_msdu_acked_mcs[1][3][] for peer Y, AC 3
- * 31. tx_msdu_failed_mcs[0][0][] for peer X, AC 0
- * 32. tx_msdu_failed_mcs[0][1][] for peer X, AC 1
- * 33. tx_msdu_failed_mcs[0][2][] for peer X, AC 2
- * 34. tx_msdu_failed_mcs[0][3][] for peer X, AC 3
- * 35. tx_msdu_failed_mcs[1][0][] for peer Y, AC 0
- * 36. tx_msdu_failed_mcs[1][1][] for peer Y, AC 1
- * 37. tx_msdu_failed_mcs[1][2][] for peer Y, AC 2
- * 38. tx_msdu_failed_mcs[1][3][] for peer Y, AC 3
- * 39. tx_msdu_delay[0][0][] for peer X, AC 0
- * 40. tx_msdu_delay[0][1][] for peer X, AC 1
- * 41. tx_msdu_delay[0][2][] for peer X, AC 2
- * 42. tx_msdu_delay[0][3][] for peer X, AC 3
- * 43. tx_msdu_delay[1][0][] for peer Y, AC 0
- * 44. tx_msdu_delay[1][1][] for peer Y, AC 1
- * 45. tx_msdu_delay[1][2][] for peer Y, AC 2
- * 46. tx_msdu_delay[1][3][] for peer Y, AC 3
+ * 23. tx_succ_mcs[0][0][] for peer X, AC 0
+ * 24. tx_succ_mcs[0][1][] for peer X, AC 1
+ * 25. tx_succ_mcs[0][2][] for peer X, AC 2
+ * 26. tx_succ_mcs[0][3][] for peer X, AC 3
+ * 27. tx_succ_mcs[1][0][] for peer Y, AC 0
+ * 28. tx_succ_mcs[1][1][] for peer Y, AC 1
+ * 29. tx_succ_mcs[1][2][] for peer Y, AC 2
+ * 30. tx_succ_mcs[1][3][] for peer Y, AC 3
+ * 31. tx_fail_mcs[0][0][] for peer X, AC 0
+ * 32. tx_fail_mcs[0][1][] for peer X, AC 1
+ * 33. tx_fail_mcs[0][2][] for peer X, AC 2
+ * 34. tx_fail_mcs[0][3][] for peer X, AC 3
+ * 35. tx_fail_mcs[1][0][] for peer Y, AC 0
+ * 36. tx_fail_mcs[1][1][] for peer Y, AC 1
+ * 37. tx_fail_mcs[1][2][] for peer Y, AC 2
+ * 38. tx_fail_mcs[1][3][] for peer Y, AC 3
+ * 39. tx_ppdu_delay[0][0][] for peer X, AC 0
+ * 40. tx_ppdu_delay[0][1][] for peer X, AC 1
+ * 41. tx_ppdu_delay[0][2][] for peer X, AC 2
+ * 42. tx_ppdu_delay[0][3][] for peer X, AC 3
+ * 43. tx_ppdu_delay[1][0][] for peer Y, AC 0
+ * 44. tx_ppdu_delay[1][1][] for peer Y, AC 1
+ * 45. tx_ppdu_delay[1][2][] for peer Y, AC 2
+ * 46. tx_ppdu_delay[1][3][] for peer Y, AC 3
* 47. peer_ac_rx_stats[0] for X
* 48. peer_ac_rx_stats[1] for Y
* 49. rx_stats[0][0] for peer X, AC 0
@@ -3976,14 +4001,14 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID);
* 62. rx_mpdu_aggr[1][1][] for peer Y, AC 1
* 63. rx_mpdu_aggr[1][2][] for peer Y, AC 2
* 64. rx_mpdu_aggr[1][3][] for peer Y, AC 3
- * 65. rx_msdu_mcs[0][0][] for peer X, AC 0
- * 66. rx_msdu_mcs[0][1][] for peer X, AC 1
- * 67. rx_msdu_mcs[0][2][] for peer X, AC 2
- * 68. rx_msdu_mcs[0][3][] for peer X, AC 3
- * 69. rx_msdu_mcs[1][0][] for peer Y, AC 0
- * 70. rx_msdu_mcs[1][1][] for peer Y, AC 1
- * 71. rx_msdu_mcs[1][2][] for peer Y, AC 2
- * 72. rx_msdu_mcs[1][3][] for peer Y, AC 3
+ * 65. rx_mcs[0][0][] for peer X, AC 0
+ * 66. rx_mcs[0][1][] for peer X, AC 1
+ * 67. rx_mcs[0][2][] for peer X, AC 2
+ * 68. rx_mcs[0][3][] for peer X, AC 3
+ * 69. rx_mcs[1][0][] for peer Y, AC 0
+ * 70. rx_mcs[1][1][] for peer Y, AC 1
+ * 71. rx_mcs[1][2][] for peer Y, AC 2
+ * 72. rx_mcs[1][3][] for peer Y, AC 3
**/
#define WMITLV_TABLE_WMI_REPORT_STATS_EVENTID(id, op, buf, len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_report_stats_event_fixed_param, wmi_report_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
@@ -3992,15 +4017,20 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_ac_tx_stats, peer_ac_tx_stats, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tx_stats, tx_stats, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_mpdu_aggr, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_msdu_acked_mcs, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_msdu_failed_mcs, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_msdu_delay, WMITLV_SIZE_VAR) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_succ_mcs, WMITLV_SIZE_VAR) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_fail_mcs, WMITLV_SIZE_VAR) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, tx_ppdu_delay, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_ac_rx_stats, peer_ac_rx_stats, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rx_stats, rx_stats, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rx_mpdu_aggr, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rx_msdu_mcs, WMITLV_SIZE_VAR)
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, rx_mcs, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_REPORT_STATS_EVENTID);
+#define WMITLV_TABLE_WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID(id, op, buf, len) \
+ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_resp_event_fixed_param, wmi_vdev_encrypt_decrypt_data_resp_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, enc80211_frame, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID);
+
#ifdef __cplusplus
}
#endif
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 6fb3f53556af..0d0e60d066d2 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -403,6 +403,9 @@ typedef enum {
/** To set custom aggregation size for per vdev */
WMI_VDEV_SET_CUSTOM_AGGR_SIZE_CMDID,
+ /* DISA feature: Encrypt-decrypt data request */
+ WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID,
+
/* peer specific commands */
/** create a peer */
@@ -1077,7 +1080,13 @@ typedef enum {
/* FW response to Host for vdev delete cmdid */
WMI_VDEV_DELETE_RESP_EVENTID,
- /* peer specific events */
+ /**
+ * DISA feature: FW response to Host with encrypted/decrypted
+ * 802.11 DISA frame
+ */
+ WMI_VDEV_ENCRYPT_DECRYPT_DATA_RESP_EVENTID,
+
+ /* peer specific events */
/** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */
WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER),
@@ -1132,7 +1141,10 @@ typedef enum {
WMI_MGMT_TX_COMPLETION_EVENTID,
/** Event for Mgmt TX bundle completion event */
WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID,
-
+ /** vdev_map used in WMI_TBTTOFFSET_UPDATE_EVENTID supports max 32 vdevs
+ * Use this event if number of vdevs > 32.
+ */
+ WMI_TBTTOFFSET_EXT_UPDATE_EVENTID,
/*ADDBA Related WMI Events*/
/** Indication the completion of the prior
@@ -1311,6 +1323,9 @@ typedef enum {
/** event to provide requested data from the target's flash memory */
WMI_READ_DATA_FROM_FLASH_EVENTID,
+ /** event to report rx aggregation failure frame information */
+ WMI_REPORT_RX_AGGR_FAILURE_EVENTID,
+
/* GPIO Event */
WMI_GPIO_INPUT_EVENTID=WMI_EVT_GRP_START_ID(WMI_GRP_GPIO),
/** upload H_CV info WMI event
@@ -1634,8 +1649,8 @@ enum {
};
/** NOTE: This defs cannot be changed in the future without breaking WMI compatibility */
-#define WMI_MAX_NUM_SS 8
-#define WMI_MAX_NUM_RU 4
+#define WMI_MAX_NUM_SS MAX_HE_NSS
+#define WMI_MAX_NUM_RU MAX_HE_RU
/*
* Figure 8 554ae: -PPE Threshold Info field format
@@ -1938,6 +1953,12 @@ typedef struct {
* Value 0 means FW hasn't given any limit to host.
*/
A_UINT32 max_bssid_rx_filters;
+ /*
+ * Extended FW build version information:
+ * bits 27:0 -> reserved
+ * bits 31:28 -> CRM sub ID
+ */
+ A_UINT32 fw_build_vers_ext;
} wmi_service_ready_ext_event_fixed_param;
typedef enum {
@@ -2334,6 +2355,10 @@ typedef struct {
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_S 9
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_M 0x200
+ #define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_S 10
+ #define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_M 0x400
+
+
A_UINT32 flag1;
/** @brief smart_ant_cap - Smart Antenna capabilities information
@@ -2443,6 +2468,11 @@ typedef struct {
#define WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_GET(word32) \
WMI_RSRC_CFG_FLAG_GET((word32), MGMT_COMP_EVT_BUNDLE_SUPPORT)
+#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_SET(word32, value) \
+ WMI_RSRC_CFG_FLAG_SET((word32), TX_MSDU_ID_NEW_PARTITION_SUPPORT, (value))
+#define WMI_RSRC_CFG_FLAG_TX_MSDU_ID_NEW_PARTITION_SUPPORT_GET(word32) \
+ WMI_RSRC_CFG_FLAG_GET((word32), TX_MSDU_ID_NEW_PARTITION_SUPPORT)
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_init_cmd_fixed_param */
@@ -3385,11 +3415,40 @@ typedef struct {
A_UINT32 enable_cmd;
} wmi_vdev_spectral_enable_cmd_fixed_param;
+/* information sub element id for QSBW, expected value is 0x02 */
+#define WMI_CSA_EVENT_QSBW_ISE_ID_MASK 0x000000FF
+/* length of QSBW ISE data, expected value is 0x02 */
+#define WMI_CSA_EVENT_QSBW_ISE_LEN_MASK 0x0000FF00
+/* capabilities, 0x01 for 5MHz, 0x02 for 10MHz, 0x01|0x2 for both
+ * (see WMI_CSA_EVENT_QSBW_ISE bitmask defs)
+ */
+#define WMI_CSA_EVENT_QSBW_ISE_CAP_MASK 0x00FF0000
+/* notification from AP, 0x01 for 5MHz, 0x02 for 10MHz
+ * (see WMI_CSA_EVENT_QSBW_ISE bitmask defs)
+ */
+#define WMI_CSA_EVENT_QSBW_ISE_NOTIF_MASK 0xFF000000
+
+#define WMI_CSA_EVENT_QSBW_ISE_ID 0x02
+#define WMI_CSA_EVENT_QSBW_ISE_LEN 0x02
+
+#define WMI_CSA_EVENT_QSBW_ISE_5M_BITMASK 0x01
+#define WMI_CSA_EVENT_QSBW_ISE_10M_BITMASK 0x02
+
+#define WMI_CSA_EVENT_QSBW_ISE_CAP_5M(qsbw_ise) \
+ (((qsbw_ise) >> 16) & WMI_CSA_EVENT_QSBW_ISE_5M_BITMASK)
+#define WMI_CSA_EVENT_QSBW_ISE_CAP_10M(qsbw_ise) \
+ (((qsbw_ise) >> 16) & WMI_CSA_EVENT_QSBW_ISE_10M_BITMASK)
+#define WMI_CSA_EVENT_QSBW_ISE_NOTIF_5M(qsbw_ise) \
+ (((qsbw_ise) >> 24) & WMI_CSA_EVENT_QSBW_ISE_5M_BITMASK)
+#define WMI_CSA_EVENT_QSBW_ISE_NOTIF_10M(qsbw_ise) \
+ (((qsbw_ise) >> 24) & WMI_CSA_EVENT_QSBW_ISE_10M_BITMASK)
+
typedef enum {
WMI_CSA_IE_PRESENT = 0x00000001,
WMI_XCSA_IE_PRESENT = 0x00000002,
WMI_WBW_IE_PRESENT = 0x00000004,
WMI_CSWARP_IE_PRESENT = 0x00000008,
+WMI_QSBW_ISE_PRESENT = 0x00000010,
}WMI_CSA_EVENT_IES_PRESENT_FLAG;
/* wmi CSA receive event from beacon frame */
@@ -3407,6 +3466,7 @@ typedef struct{
A_UINT32 wb_ie[2];
A_UINT32 cswarp_ie;
A_UINT32 ies_present_flag; //WMI_CSA_EVENT_IES_PRESENT_FLAG
+ A_UINT32 qsbw_ise;
}wmi_csa_event_fixed_param;
typedef enum {
@@ -3719,17 +3779,17 @@ typedef enum {
*/
WMI_PDEV_PARAM_STATS_OBSERVATION_PERIOD,
/**
- * Set tx_msdu_delay[] bin size to specify how many
- * milliseconds each bin of the wmi_tx_stats.tx_msdu_delay[]
+ * Set tx_ppdu_delay[] bin size to specify how many
+ * milliseconds each bin of the wmi_tx_stats.tx_ppdu_delay[]
* histogram represents.
*/
- WMI_PDEV_PARAM_TX_DELAY_BIN_SIZE_MS,
- /** set wmi_tx_stats.tx_msdu_delay[] array size */
- WMI_PDEV_PARAM_TX_DELAY_ARRAY_SIZE,
- /** set wmi_tx_stats.tx_mpdu_aggr[] array size */
- WMI_PDEV_PARAM_TX_MPDU_AGGR_ARRAY_SIZE,
- /** set wmi_rx_stats.rx_mpdu_aggr[] array size */
- WMI_PDEV_PARAM_RX_MPDU_AGGR_ARRAY_SIZE,
+ WMI_PDEV_PARAM_TX_PPDU_DELAY_BIN_SIZE_MS,
+ /** set wmi_tx_stats.tx_ppdu_delay[] array length */
+ WMI_PDEV_PARAM_TX_PPDU_DELAY_ARRAY_LEN,
+ /** set wmi_tx_stats.tx_mpdu_aggr[] array length */
+ WMI_PDEV_PARAM_TX_MPDU_AGGR_ARRAY_LEN,
+ /** set wmi_rx_stats.rx_mpdu_aggr[] array length */
+ WMI_PDEV_PARAM_RX_MPDU_AGGR_ARRAY_LEN,
} WMI_PDEV_PARAM;
@@ -4724,6 +4784,25 @@ typedef struct {
} wmi_vdev_rate_ht_info;
typedef struct {
+ /**
+ * TLV tag and len, tag equals
+ * WMITLV_TAG_STRUC_wmi_rx_aggr_failure_event_fixed_param
+ */
+ A_UINT32 tlv_header;
+ A_UINT32 num_failure_info; /* How many holes on rx aggregation */
+} wmi_rx_aggr_failure_event_fixed_param;
+
+typedef struct {
+ /**
+ * TLV tag and len, tag equals
+ * WMITLV_wmi_rx_aggr_failure_info
+ */
+ A_UINT32 tlv_header;
+ A_UINT32 start_seq; /* start sequence number of the hole */
+ A_UINT32 end_seq; /* end sequence number of the hole */
+} wmi_rx_aggr_failure_info;
+
+typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stats_event_fixed_param */
wmi_stats_id stats_id;
/** number of pdev stats event structures (wmi_pdev_stats) 0 or 1 */
@@ -4751,110 +4830,119 @@ typedef struct {
} wmi_stats_event_fixed_param;
/* WLAN channel CCA stats bitmap */
-#define WLAN_STATS_IDLE_TIME_SHIFT 0
-#define WLAN_STATS_IDLE_TIME_TIME 0x00000001
+#define WLAN_STATS_IDLE_TIME_SHIFT 0
+#define WLAN_STATS_IDLE_TIME_TIME 0x00000001
-#define WLAN_STATS_TX_TIME_SHIFT 1
-#define WLAN_STATS_TX_TIME_MASK 0x00000002
+#define WLAN_STATS_TX_TIME_SHIFT 1
+#define WLAN_STATS_TX_TIME_MASK 0x00000002
-#define WLAN_STATS_RX_IN_BSS_TIME_SHIFT 2
-#define WLAN_STATS_RX_IN_BSS_TIME_MASK 0x00000004
+#define WLAN_STATS_RX_IN_BSS_TIME_SHIFT 2
+#define WLAN_STATS_RX_IN_BSS_TIME_MASK 0x00000004
-#define WLAN_STATS_RX_OUT_BSS_TIME_SHIFT 3
-#define WLAN_STATS_RX_OUT_BSS_TIME_MASK 0x00000008
+#define WLAN_STATS_RX_OUT_BSS_TIME_SHIFT 3
+#define WLAN_STATS_RX_OUT_BSS_TIME_MASK 0x00000008
-#define WLAN_STATS_RX_BUSY_TIME_SHIFT 4
-#define WLAN_STATS_RX_BUSY_TIME_MASK 0x00000010
+#define WLAN_STATS_RX_BUSY_TIME_SHIFT 4
+#define WLAN_STATS_RX_BUSY_TIME_MASK 0x00000010
-#define WLAN_STATS_RX_IN_BAD_COND_TIME_SHIFT 5
-#define WLAN_STATS_RX_IN_BAD_COND_TIME_MASK 0x00000020
+#define WLAN_STATS_RX_IN_BAD_COND_TIME_SHIFT 5
+#define WLAN_STATS_RX_IN_BAD_COND_TIME_MASK 0x00000020
-#define WLAN_STATS_TX_IN_BAD_COND_TIME_SHIFT 6
-#define WLAN_STATS_TX_IN_BAD_COND_TIME_MASK 0x00000040
+#define WLAN_STATS_TX_IN_BAD_COND_TIME_SHIFT 6
+#define WLAN_STATS_TX_IN_BAD_COND_TIME_MASK 0x00000040
-#define WLAN_STATS_WLAN_NOT_AVAIL_TIME_SHIFT 7
-#define WLAN_STATS_WLAN_NOT_AVAIL_TIME_MASK 0x00000080
+#define WLAN_STATS_WLAN_NOT_AVAIL_TIME_SHIFT 7
+#define WLAN_STATS_WLAN_NOT_AVAIL_TIME_MASK 0x00000080
/* WLAN peer signal stats bitmap */
-#define WLAN_STATS_PER_ANT_SNR_SHIFT 0
-#define WLAN_STATS_PER_ANT_SNR_MASK 0x00000001
+#define WLAN_STATS_PER_CHAIN_SNR_SHIFT 0
+#define WLAN_STATS_PER_CHAIN_SNR_MASK 0x00000001
-#define WLAN_STATS_NF_SHIFT 1
-#define WLAN_STATS_NF_MASK 0x00000002
+#define WLAN_STATS_PER_CHAIN_NF_SHIFT 1
+#define WLAN_STATS_PER_CHAIN_NF_MASK 0x00000002
/* WLAN TX stats bitmap */
-#define WLAN_STATS_TX_MSDUS_SHIFT 0
-#define WLAN_STATS_TX_MSDUS_MASK 0x00000001
+#define WLAN_STATS_TX_MSDU_CNT_SHIFT 0
+#define WLAN_STATS_TX_MSDU_CNT_MASK 0x00000001
+
+#define WLAN_STATS_TX_MPDU_CNT_SHIFT 1
+#define WLAN_STATS_TX_MPDU_CNT_MASK 0x00000002
-#define WLAN_STATS_TX_BYTES_SHIFT 1
-#define WLAN_STATS_TX_BYTES_MASK 0x00000002
+#define WLAN_STATS_TX_PPDU_CNT_SHIFT 2
+#define WLAN_STATS_TX_PPDU_CNT_MASK 0x00000004
-#define WLAN_STATS_TX_MSDU_DROPS_SHIFT 2
-#define WLAN_STATS_TX_MSDU_DROPS_MASK 0x00000004
+#define WLAN_STATS_TX_BYTES_SHIFT 3
+#define WLAN_STATS_TX_BYTES_MASK 0x00000008
-#define WLAN_STATS_TX_DROP_BYTES_SHIFT 3
-#define WLAN_STATS_TX_DROP_BYTES_MASK 0x00000008
+#define WLAN_STATS_TX_MSDU_DROP_CNT_SHIFT 4
+#define WLAN_STATS_TX_MSDU_DROP_CNT_MASK 0x00000010
-#define WLAN_STATS_TX_MPDU_RETRIES_SHIFT 4
-#define WLAN_STATS_TX_MPDU_RETRIES_MASK 0x00000010
+#define WLAN_STATS_TX_DROP_BYTES_SHIFT 5
+#define WLAN_STATS_TX_DROP_BYTES_MASK 0x00000020
-#define WLAN_STATS_TX_MSDU_FAILED_SHIFT 5
-#define WLAN_STATS_TX_MSDU_FAILED_MASK 0x00000020
+#define WLAN_STATS_TX_MPDU_RETRY_CNT_SHIFT 6
+#define WLAN_STATS_TX_MPDU_RETRY_CNT_MASK 0x00000040
-#define WLAN_STATS_TX_MPDU_AGGR_SHIFT 6
-#define WLAN_STATS_TX_MPDU_AGGR_MASK 0x00000040
+#define WLAN_STATS_TX_MPDU_FAIL_CNT_SHIFT 7
+#define WLAN_STATS_TX_MPDU_FAIL_CNT_MASK 0x00000080
-#define WLAN_STATS_TX_MSDU_ACKED_MCS_SHIFT 7
-#define WLAN_STATS_TX_MSDU_ACKED_MCS_MASK 0x00000080
+#define WLAN_STATS_TX_PPDU_FAIL_CNT_SHIFT 8
+#define WLAN_STATS_TX_PPDU_FAIL_CNT_MASK 0x00000100
-#define WLAN_STATS_TX_MSDU_FAILED_MCS_SHIFT 8
-#define WLAN_STATS_TX_MSDU_FAILED_MCS_MASK 0x00000100
+#define WLAN_STATS_TX_MPDU_AGGR_SHIFT 9
+#define WLAN_STATS_TX_MPDU_AGGR_MASK 0x00000200
-#define WLAN_STATS_TX_MSDU_DELAY_SHIFT 9
-#define WLAN_STATS_TX_MSDU_DELAY_MASK 0x00000200
+#define WLAN_STATS_TX_SUCC_MCS_SHIFT 10
+#define WLAN_STATS_TX_SUCC_MCS_MASK 0x00000400
+
+#define WLAN_STATS_TX_FAIL_MCS_SHIFT 11
+#define WLAN_STATS_TX_FAIL_MCS_MASK 0x00000800
+
+#define WLAN_STATS_TX_PPDU_DELAY_SHIFT 12
+#define WLAN_STATS_TX_PPDU_DELAY_MASK 0x00001000
/* WLAN RX stats bitmap */
-#define WLAN_STATS_MAC_RX_MSDUS_SHIFT 0
-#define WLAN_STATS_MAC_RX_MSDUS_MASK 0x00000001
+#define WLAN_STATS_MAC_RX_MPDU_CNT_SHIFT 0
+#define WLAN_STATS_MAC_RX_MPDU_CNT_MASK 0x00000001
-#define WLAN_STATS_MAC_RX_BYTES_SHIFT 1
-#define WLAN_STATS_MAC_RX_BYTES_MASK 0x00000002
+#define WLAN_STATS_MAC_RX_BYTES_SHIFT 1
+#define WLAN_STATS_MAC_RX_BYTES_MASK 0x00000002
-#define WLAN_STATS_PHY_RX_MSDUS_SHIFT 2
-#define WLAN_STATS_PHY_RX_MSDUS_MASK 0x00000004
+#define WLAN_STATS_PHY_RX_PPDU_CNT_SHIFT 2
+#define WLAN_STATS_PHY_RX_PPDU_CNT_MASK 0x00000004
-#define WLAN_STATS_PHY_RX_BYTES_SHIFT 3
-#define WLAN_STATS_PHY_RX_BYTES_MASK 0x00000008
+#define WLAN_STATS_PHY_RX_BYTES_SHIFT 3
+#define WLAN_STATS_PHY_RX_BYTES_MASK 0x00000008
-#define WLAN_STATS_SEQ_DCONT_NUM_SHIFT 4
-#define WLAN_STATS_SEQ_DCONT_NUM_MASK 0x00000010
+#define WLAN_STATS_RX_DISORDER_CNT_SHIFT 4
+#define WLAN_STATS_RX_DISORDER_CNT_MASK 0x00000010
-#define WLAN_STATS_RX_MSDU_RETRY_SHIFT 5
-#define WLAN_STATS_RX_MSDU_RETRY_MASK 0x00000020
+#define WLAN_STATS_RX_RETRY_CNT_SHIFT 5
+#define WLAN_STATS_RX_RETRY_CNT_MASK 0x00000020
-#define WLAN_STATS_RX_MSDU_DUP_SHIFT 6
-#define WLAN_STATS_RX_MSDU_DUP_MASK 0x00000040
+#define WLAN_STATS_RX_DUP_CNT_SHIFT 6
+#define WLAN_STATS_RX_DUP_CNT_MASK 0x00000040
-#define WLAN_STATS_RX_MSDU_DISCARD_SHIFT 7
-#define WLAN_STATS_RX_MSDU_DISCARD_MASK 0x00000080
+#define WLAN_STATS_RX_DISCARD_CNT_SHIFT 7
+#define WLAN_STATS_RX_DISCARD_CNT_MASK 0x00000080
-#define WLAN_STATS_STA_PS_INDS_SHIFT 8
-#define WLAN_STATS_STA_PS_INDS_MASK 0x00000100
+#define WLAN_STATS_RX_MPDU_AGGR_SHIFT 8
+#define WLAN_STATS_RX_MPDU_AGGR_MASK 0x00000100
-#define WLAN_STATS_STA_PS_DURS_SHIFT 9
-#define WLAN_STATS_STA_PS_DURS_MASK 0x00000200
+#define WLAN_STATS_RX_MCS_SHIFT 9
+#define WLAN_STATS_RX_MCS_MASK 0x00000200
-#define WLAN_STATS_RX_PROBE_REQS_SHIFT 10
-#define WLAN_STATS_RX_PROBE_REQS_MASK 0x00000400
+#define WLAN_STATS_STA_PS_INDS_SHIFT 10
+#define WLAN_STATS_STA_PS_INDS_MASK 0x00000400
-#define WLAN_STATS_RX_OTH_MGMTS_SHIFT 11
-#define WLAN_STATS_RX_OTH_MGMTS_MASK 0x00000800
+#define WLAN_STATS_STA_PS_DURS_SHIFT 11
+#define WLAN_STATS_STA_PS_DURS_MASK 0x00000800
-#define WLAN_STATS_RX_MPDU_AGGR_SHIFT 12
-#define WLAN_STATS_RX_MPDU_AGGR_MASK 0x00001000
+#define WLAN_STATS_RX_PROBE_REQS_SHIFT 12
+#define WLAN_STATS_RX_PROBE_REQS_MASK 0x00001000
-#define WLAN_STATS_RX_MSDU_MCS_SHIFT 13
-#define WLAN_STATS_RX_MSDU_MCS_MASK 0x00002000
+#define WLAN_STATS_RX_OTH_MGMTS_SHIFT 13
+#define WLAN_STATS_RX_OTH_MGMTS_MASK 0x00002000
typedef struct
{
@@ -4900,10 +4988,10 @@ typedef struct
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_signal_stats */
A_UINT32 vdev_id;
A_UINT32 peer_id;
- /** per antenna SNR in current bss, units are dB */
- A_INT32 per_ant_snr[WMI_MAX_CHAINS];
- /** Background noise, units are dBm */
- A_INT32 nf;
+ /** per chain SNR in current bss, units are dB */
+ A_INT32 per_chain_snr[WMI_MAX_CHAINS];
+ /** per chain background noise, units are dBm */
+ A_INT32 per_chain_nf[WMI_MAX_CHAINS];
} wmi_peer_signal_stats;
/** Thresholds of signal stats, stand for percentage of stats variation.
@@ -4911,32 +4999,42 @@ typedef struct
*/
typedef struct
{
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_signal_stats */
- A_UINT32 per_ant_snr; /* units = dB */
- A_UINT32 nf; /* units = dBm */
+ /**
+ * TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_peer_signal_stats_thresh
+ */
+ A_UINT32 tlv_header;
+ A_UINT32 per_chain_snr; /* units = dB */
+ A_UINT32 per_chain_nf; /* units = dBm */
} wmi_peer_signal_stats_thresh;
typedef struct
{
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_stats */
- /** Number of total TX packets on MAC layer in the period */
- A_UINT32 tx_msdus;
+ /** Number of total TX MSDUs on MAC layer in the period */
+ A_UINT32 tx_msdu_cnt;
+ /** Number of total TX MPDUs on MAC layer in the period */
+ A_UINT32 tx_mpdu_cnt;
+ /** Number of total TX PPDUs on MAC layer in the period */
+ A_UINT32 tx_ppdu_cnt;
/** Bytes of tx data on MAC layer in the period */
A_UINT32 tx_bytes;
- /** Number of TX packets cancelled due to any reason in the period,
+ /** Number of TX MSDUs cancelled due to any reason in the period,
* such as WMM limitation/bandwidth limitation/radio congestion */
- A_UINT32 tx_msdu_drops;
+ A_UINT32 tx_msdu_drop_cnt;
/** Bytes of dropped TX packets in the period */
A_UINT32 tx_drop_bytes;
/** Number of unacked transmissions of MPDUs */
- A_UINT32 tx_mpdu_retries;
- /** Number of packets have not been ACKed despite retried */
- A_UINT32 tx_msdu_failed;
+ A_UINT32 tx_mpdu_retry_cnt;
+ /** Number of MPDUs have not been ACKed despite retried */
+ A_UINT32 tx_mpdu_fail_cnt;
+ /** Number of PPDUs which received no block ack */
+ A_UINT32 tx_ppdu_fail_cnt;
/* This TLV is followed by TLVs below: :
- * A_UINT32 tx_mpdu_aggr[tx_mpdu_aggr_array_size];
- * A_UINT32 tx_msdu_acked_mcs[tx_msdu_acked_mcs_array_size];
- * A_UINT32 tx_msdu_failed_mcs[tx_msdu_failed_mcs_array_size];
- * A_UINT32 tx_msdu_delay[tx_msdu_delay_array_size];
+ * A_UINT32 tx_mpdu_aggr[tx_mpdu_aggr_array_len];
+ * A_UINT32 tx_succ_mcs[tx_succ_mcs_array_len];
+ * A_UINT32 tx_fail_mcs[tx_fail_mcs_array_len];
+ * A_UINT32 tx_delay[tx_ppdu_delay_array_len];
*/
} wmi_tx_stats;
@@ -4946,16 +5044,19 @@ typedef struct
typedef struct
{
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_stats_thresh */
- A_UINT32 tx_msdus;
+ A_UINT32 tx_msdu_cnt;
+ A_UINT32 tx_mpdu_cnt;
+ A_UINT32 tx_ppdu_cnt;
A_UINT32 tx_bytes;
- A_UINT32 tx_msdu_drops;
+ A_UINT32 tx_msdu_drop_cnt;
A_UINT32 tx_drop_bytes;
- A_UINT32 tx_mpdu_retries;
- A_UINT32 tx_msdu_failed;
+ A_UINT32 tx_mpdu_retry_cnt;
+ A_UINT32 tx_mpdu_fail_cnt;
+ A_UINT32 tx_ppdu_fail_cnt;
A_UINT32 tx_mpdu_aggr;
- A_UINT32 tx_msdu_acked_mcs;
- A_UINT32 tx_msdu_failed_mcs;
- A_UINT32 tx_msdu_delay;
+ A_UINT32 tx_succ_mcs;
+ A_UINT32 tx_fail_mcs;
+ A_UINT32 tx_ppdu_delay;
} wmi_tx_stats_thresh;
typedef struct
@@ -4971,33 +5072,25 @@ typedef struct
typedef struct
{
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rx_stats */
- /** Number of RX packets on MAC layer */
- A_UINT32 mac_rx_msdus;
+ /** Number of RX MPDUs on MAC layer */
+ A_UINT32 mac_rx_mpdu_cnt;
/** Bytes of RX packets on MAC layer */
A_UINT32 mac_rx_bytes;
- /** Number of RX packets on PHY layer */
- A_UINT32 phy_rx_msdus;
+ /** Number of RX PPDU on PHY layer */
+ A_UINT32 phy_rx_ppdu_cnt;
/** Bytes of RX packets on PHY layer */
A_UINT32 phy_rx_bytes;
/** Number of discontinuity in seqnum */
- A_UINT32 seq_dcont_num;
- /** Number of RX packets flagged as retransmissions */
- A_UINT32 rx_msdu_retry;
- /** Number of RX packets identified as duplicates */
- A_UINT32 rx_msdu_dup;
- /** Number of RX packets discarded */
- A_UINT32 rx_msdu_discard;
- /** How many times STAs go to sleep */
- A_UINT32 sta_ps_inds;
- /** Total sleep time of STAs, milliseconds units */
- A_UINT32 sta_ps_durs;
- /** Number of probe requests received */
- A_UINT32 rx_probe_reqs;
- /** Number of other management frames received, not including probe requests */
- A_UINT32 rx_oth_mgmts;
+ A_UINT32 rx_disorder_cnt;
+ /** Number of RX MPDUs flagged as retransmissions */
+ A_UINT32 rx_mpdu_retry_cnt;
+ /** Number of RX MPDUs identified as duplicates */
+ A_UINT32 rx_mpdu_dup_cnt;
+ /** Number of RX MPDUs discarded */
+ A_UINT32 rx_mpdu_discard_cnt;
/* This TLV is followed by TLVs below:
- * A_UINT32 rx_mpdu_aggr[rx_mpdu_aggr_array_size];
- * A_UINT32 rx_msdu_mcs[rx_msdu_mcs_array_size];
+ * A_UINT32 rx_mpdu_aggr[rx_mpdu_aggr_array_len];
+ * A_UINT32 rx_mcs[rx_msdu_mcs_array_len];
*/
} wmi_rx_stats;
@@ -5007,20 +5100,20 @@ typedef struct
typedef struct
{
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rx_stats_thresh */
- A_UINT32 mac_rx_msdus;
+ A_UINT32 mac_rx_mpdu_cnt;
A_UINT32 mac_rx_bytes;
- A_UINT32 phy_rx_msdus;
+ A_UINT32 phy_rx_ppdu_cnt;
A_UINT32 phy_rx_bytes;
- A_UINT32 seq_dcont_num;
- A_UINT32 rx_msdu_retry;
- A_UINT32 rx_msdu_dup;
- A_UINT32 rx_msdu_discard;
+ A_UINT32 rx_disorder_cnt;
+ A_UINT32 rx_mpdu_retry_cnt;
+ A_UINT32 rx_mpdu_dup_cnt;
+ A_UINT32 rx_mpdu_discard_cnt;
+ A_UINT32 rx_mpdu_aggr;
+ A_UINT32 rx_mcs;
A_UINT32 sta_ps_inds;
A_UINT32 sta_ps_durs;
A_UINT32 rx_probe_reqs;
A_UINT32 rx_oth_mgmts;
- A_UINT32 rx_mpdu_aggr;
- A_UINT32 rx_msdu_mcs;
} wmi_rx_stats_thresh;
typedef struct
@@ -5028,6 +5121,14 @@ typedef struct
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_ac_rx_stats */
A_UINT32 vdev_id;
A_UINT32 peer_id;
+ /** How many times STAs go to sleep */
+ A_UINT32 sta_ps_inds;
+ /** Total sleep time of STAs, milliseconds units */
+ A_UINT32 sta_ps_durs;
+ /** Number of probe requests received */
+ A_UINT32 rx_probe_reqs;
+ /** Number of other management frames received, not including probe requests */
+ A_UINT32 rx_oth_mgmts;
/* The TLVs for the 4 AC follows:
* wmi_rx_stats rx_stats[]; wmi_rx_stats for BE/BK/VI/VO
*/
@@ -5067,64 +5168,65 @@ typedef struct {
A_UINT32 num_peer_signal_stats;
/** number of per peer ac TX stats structures (wmi_peer_ac_tx_stats), 0 to max peers*/
A_UINT32 num_peer_ac_tx_stats;
- /** Array size of tx_mpdu_aggr[] which is histogram of MPDU aggregation size(1 to 7 and 8+).
+ /** Array length of tx_mpdu_aggr[] which is histogram of MPDU aggregation size(1 to 7 and 8+).
* The array indicates number of MPDUs sent on specified aggregation size
* (per number of MPDUs per AMPDUs / 1 to 7 and 8+).
- * Array size can be set per WMI_PDEV_PARAM_TX_MPDU_AGGR_ARRAY_SIZE */
- A_UINT32 tx_mpdu_aggr_array_size;
- /** Array size of tx_msdu_acked_mcs[] which is histogram of encoding rate.
- * The array indicates number of acked packets sent at a specific rate */
- A_UINT32 tx_msdu_acked_mcs_array_size;
- /** Array size of tx_msdu_failed_mcs[] which is histogram of encoding rate.
- * The array indicates number of failed packets sent at a specific rate */
- A_UINT32 tx_msdu_failed_mcs_array_size;
- /** tx_msdu_delay[]is a histogram of delays on MAC layer.
- * The array stands for numbers of packets on different TX time delays.
- * TX delay here means time interval between the time the packet has been received
- * at the MAC layer and the time lower layers returns a tx status (<10ms to >100ms)
- *
- * The bin size tx_delay_bin_size_ms specifies how many milliseconds
- * each bin of the tx_delay histogram represents.
- * By default the bin size is 10ms.
- * tx_msdu_delay[0] -> delays between 0-9 ms
- * tx_msdu_delay[1] -> delays between 10-19 ms
- * ...
- * tx_msdu_delay[9] -> delays between 90-99 ms
- * tx_msdu_delay[10] -> delays >= 100 ms
- * Bin size can be set per WMI_PDEV_PARAM_TX_DELAY_BIN_SIZE_MS.
- */
- A_UINT32 tx_msdu_delay_bin_size_ms;
- /** Array size of tx_msdu_delay[]. It can be set per WMI_PDEV_PARAM_TX_DELAY_ARRAY_SIZE */
- A_UINT32 tx_msdu_delay_array_size;
+ * Array length can be set per WMI_PDEV_PARAM_TX_MPDU_AGGR_ARRAY_LEN */
+ A_UINT32 tx_mpdu_aggr_array_len;
+ /** Array length of tx_succ_mcs[] which is histogram of encoding rate.
+ * The array indicates number of acked PPDUs sent at a specific rate */
+ A_UINT32 tx_succ_mcs_array_len;
+ /** Array length of tx_fail_mcs[] which is histogram of encoding rate.
+ * The array indicates number of unacked PPDUs sent at a specific rate */
+ A_UINT32 tx_fail_mcs_array_len;
+ /** tx_ppdu_delay[]is a histogram of delays on MAC layer.
+ * The array counts numbers of PPDUs encountering different TX time delays.
+ * TX delay here means time interval between the time a PPDU is queued
+ * to the MAC HW for transmission and the time the lower layers of
+ * tx FW return a tx status.
+ *
+ * The bin size tx_ppdu_delay_bin_size_ms specifies how many
+ * milliseconds. Each bin of the tx_ppdu_delay histogram represents.
+ * By default the bin size is 10ms.
+ * tx_ppdu_delay[0] -> delays between 0-9 ms
+ * tx_ppdu_delay[1] -> delays between 10-19 ms
+ * ...
+ * tx_ppdu_delay[9] -> delays between 90-99 ms
+ * tx_ppdu_delay[10] -> delays >= 100 ms
+ * Bin size can be set per WMI_PDEV_PARAM_TX_PPDU_DELAY_BIN_SIZE_MS.
+ */
+ A_UINT32 tx_ppdu_delay_bin_size_ms;
+ /** Array length of tx_ppdu_delay[]. It can be set per WMI_PDEV_PARAM_TX_PPDU_DELAY_ARRAY_LEN */
+ A_UINT32 tx_ppdu_delay_array_len;
/** number of per peer ac RX stats structures (wmi_peer_ac_rx_stats), 0 to max peers*/
A_UINT32 num_peer_ac_rx_stats;
- /** Array size of rx_mpdu_aggr[] which is histogram of MPDU aggregation size(1 to 7 and 8+).
- * It can be set per WMI_PDEV_PARAM_RX_MPDU_AGGR_ARRAY_SIZE */
- A_UINT32 rx_mpdu_aggr_array_size;
- /** Array size of rx_msdu_mcs[] which is histogram of encoding rate.
- * The array indicates number of packets received at a specific rate */
- A_UINT32 rx_msdu_mcs_array_size;
+ /** Array length of rx_mpdu_aggr[] which is histogram of MPDU aggregation size(1 to 7 and 8+).
+ * It can be set per WMI_PDEV_PARAM_RX_MPDU_AGGR_ARRAY_LEN */
+ A_UINT32 rx_mpdu_aggr_array_len;
+ /** Array size of rx_mcs[] which is histogram of encoding rate.
+ * The array indicates number of PPDUs received at a specific rate */
+ A_UINT32 rx_mcs_array_len;
/**
* This TLV is followed by TLVs below:
- * wmi_chan_cca_stats chan_cca_stats[]; Array size is specified by num_chan_cca_stats
- * wmi_peer_signal_stats peer_signal_stats[]; Array size is specified by num_peer_signal_stats
- * wmi_peer_ac_tx_stats peer_ac_tx_stats[]; Array size is specified by num_peer_ac_tx_stats
- * wmi_tx_stats tx_stats[][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
- * A_UINT32 tx_mpdu_aggr[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_mpdu_aggr_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_mpdu_aggr_array_size + A-MPDU aggregation index
- * A_UINT32 tx_msdu_acked_mcs[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_acked_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_acked_mcs_array_size + MCS index
- * A_UINT32 tx_msdu_failed_mcs[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_failed_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_failed_mcs_array_size + MCS index
- * A_UINT32 tx_msdu_delay[][][]; Array size is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_msdu_delay_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_msdu_delay_array_size + tx delay index
- * wmi_peer_ac_rx_stats peer_ac_rx_stats[]; Array size is specified by num_peer_ac_rx_stats
- * wmi_rx_stats rx_stats[][]; Array size is num_peer_ac_rx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
- * A_UINT32 rx_mpdu_aggr[][][]; Array size is num_peer_ac_rx_stats * WLAN_MAX_AC * rx_mpdu_aggr_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mpdu_aggr_array_size + A-MPDU aggregation index
- * A_UINT32 rx_msdu_mcs[][][]; Array size is (num_peer_ac_rx_stats * WLAN_MAX_AC) * rx_msdu_mcs_array_size,
- * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_msdu_mcs_array_size + MCS index
+ * wmi_chan_cca_stats chan_cca_stats[]; Array length is specified by num_chan_cca_stats
+ * wmi_peer_signal_stats peer_signal_stats[]; Array length is specified by num_peer_signal_stats
+ * wmi_peer_ac_tx_stats peer_ac_tx_stats[]; Array length is specified by num_peer_ac_tx_stats
+ * wmi_tx_stats tx_stats[][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
+ * A_UINT32 tx_mpdu_aggr[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_mpdu_aggr_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_mpdu_aggr_array_len + A-MPDU aggregation index
+ * A_UINT32 tx_succ_mcs[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_succ_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_succ_mcs_array_len + MCS index
+ * A_UINT32 tx_fail_mcs[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_fail_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_fail_mcs_array_len + MCS index
+ * A_UINT32 tx_ppdu_delay[][][]; Array length is num_peer_ac_tx_stats * WLAN_MAX_AC * tx_ppdu_delay_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * tx_ppdu_delay_array_len + tx delay index
+ * wmi_peer_ac_rx_stats peer_ac_rx_stats[]; Array length is specified by num_peer_ac_rx_stats
+ * wmi_rx_stats rx_stats[][]; Array length is num_peer_ac_rx_stats * WLAN_MAX_AC, array index is (peer_index * WLAN_MAX_AC + ac_index)
+ * A_UINT32 rx_mpdu_aggr[][][]; Array length is num_peer_ac_rx_stats * WLAN_MAX_AC * rx_mpdu_aggr_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mpdu_aggr_array_len + A-MPDU aggregation index
+ * A_UINT32 rx_mcs[][][]; Array length is (num_peer_ac_rx_stats * WLAN_MAX_AC) * rx_mcs_array_len,
+ * array index is (peer_index * WLAN_MAX_AC + ac_index) * rx_mcs_array_len + MCS index
**/
} wmi_report_stats_event_fixed_param;
@@ -5374,6 +5476,157 @@ typedef struct {
*/
#define WMI_UNIFIED_VDEV_START_BCN_TX_RATE_PRESENT (1<<2)
+#define WMI_HEOPS_COLOR_GET(he_ops) WMI_GET_BITS(he_ops, 0, 6)
+#define WMI_HEOPS_COLOR_SET(he_ops, value) WMI_SET_BITS(he_ops, 0, 6, value)
+
+#define WMI_HEOPS_DEFPE_GET(he_ops) WMI_GET_BITS(he_ops, 6, 3)
+#define WMI_HEOPS_DEFPE_SET(he_ops, value) WMI_SET_BITS(he_ops, 6, 3, value)
+
+#define WMI_HEOPS_TWT_GET(he_ops) WMI_GET_BITS(he_ops, 9, 1)
+#define WMI_HEOPS_TWT_SET(he_ops, value) WMI_SET_BITS(he_ops, 9, 1, value)
+
+#define WMI_HEOPS_RTSTHLD_GET(he_ops) WMI_GET_BITS(he_ops, 10, 7)
+#define WMI_HEOPS_RTSTHLD_SET(he_ops, value) WMI_SET_BITS(he_ops, 10, 7, value)
+
+#define WMI_HEOPS_PDMIN_GET(he_ops) WMI_GET_BITS(he_ops, 17, 5)
+#define WMI_HEOPS_PDMIN_SET(he_ops, value) WMI_SET_BITS(he_ops, 17, 5, value)
+
+#define WMI_HEOPS_PDMAX_GET(he_ops) WMI_GET_BITS(he_ops, 22, 5)
+#define WMI_HEOPS_PDMAX_SET(he_ops, value) WMI_SET_BITS(he_ops, 22, 5, value)
+
+#define WMI_MAX_HECAP_PHY_SIZE (3)
+#define WMI_HECAP_PHY_COD_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 0, 1)
+#define WMI_HECAP_PHY_COD_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 0, 1, value)
+
+#define WMI_HECAP_PHY_TXLDPC_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 1, 1)
+#define WMI_HECAP_PHY_TXLDPC_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 1, 1, value)
+
+#define WMI_HECAP_PHY_RXLDPC_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 2, 1)
+#define WMI_HECAP_PHY_RXLDPC_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 2, 1, value)
+
+#define WMI_HECAP_PHY_DCM_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 3, 3)
+#define WMI_HECAP_PHY_DCM_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 3, 3, value)
+
+#define WMI_HECAP_PHY_OLTF_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 6, 1)
+#define WMI_HECAP_PHY_OLTF_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 6, 1, value)
+
+#define WMI_HECAP_PHY_CBW_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 7, 3)
+#define WMI_HECAP_PHY_CBW_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 7, 3, value)
+
+#define WMI_HECAP_PHY_TXSTBC_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 10, 1)
+#define WMI_HECAP_PHY_TXSTBC_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 10, 1, value)
+
+#define WMI_HECAP_PHY_RXSTBC_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 11, 1)
+#define WMI_HECAP_PHY_RXSTBC_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 11, 1, value)
+
+#define WMI_HECAP_PHY_DLOFMAMUMIMO_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 12, 1)
+#define WMI_HECAP_PHY_DLOFDMAMUMIO_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 12, 1, value)
+
+#define WMI_HECAP_PHY_UL_MU_MIMO_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 13, 1)
+#define WMI_HECAP_PHY_UL_MU_MIMO_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 13, 1, value)
+
+#define WMI_HECAP_PHY_ULOFDMA_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 14, 1)
+#define WMI_HECAP_PHY_ULOFDMA_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 14, 1, value)
+
+#define WMI_HECAP_PHY_TXDOPPLER_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 15, 1)
+#define WMI_HECAP_PHY_TXDOPPLER_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 15, 1, value)
+
+#define WMI_HECAP_PHY_RXDOPPLER_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 16, 1)
+#define WMI_HECAP_PHY_RXDOPPLER_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 16, 1, value)
+
+#define WMI_HECAP_PHY_CBMODE_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 17, 8)
+#define WMI_HECAP_PHY_CBMODE_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 17, 8, value)
+
+#define WMI_HECAP_PHY_PADDING_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[0], 25, 2)
+#define WMI_HECAP_PHY_PADDING_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[0], 25, 2, value)
+
+#define WMI_HECAP_PHY_32GI_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[1], 0, 26)
+#define WMI_HECAP_PHY_32GI_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[1], 0, 26, value)
+
+#define WMI_HECAP_PHY_SUBFMR_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[1], 26, 1)
+#define WMI_HECAP_PHY_SUBFMR_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[1], 26, 1, value)
+
+#define WMI_HECAP_PHY_SUBFME_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[1], 27, 1)
+#define WMI_HECAP_PHY_SUBFME_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[1], 27, 1, value)
+
+#define WMI_HECAP_PHY_SUBFMESTS_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[1], 28, 3)
+#define WMI_HECAP_PHY_SUBFMESTS_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[1], 28, 3, value)
+
+#define WMI_HECAP_PHY_NOSUNDIMENS_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[2], 0, 3)
+#define WMI_HECAP_PHY_NOSUNDIMENS_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[2], 0, 3, value)
+
+#define WMI_HECAP_PHY_MUBFMR_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[2], 3, 1)
+#define WMI_HECAP_PHY_MUBFMR_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[2], 3, 1, value)
+
+#define WMI_HECAP_PHY_40MHZNSS_GET(he_cap_phy) WMI_GET_BITS(he_cap_phy[2], 4, 18)
+#define WMI_HECAP_PHY_40MHZNSS_SET(he_cap_phy, value) WMI_SET_BITS(he_cap_phy[2], 4, 18, value)
+
+#define WMI_HECAP_MAC_MTID_GET(he_cap) WMI_GET_BITS(he_cap, 0, 3)
+#define WMI_HECAP_MAC_MTID_SET(he_cap, value) WMI_SET_BITS(he_cap, 0, 3, value)
+
+#define WMI_HECAP_MAC_AACK_GET(he_cap) WMI_GET_BITS(he_cap, 3, 1)
+#define WMI_HECAP_MAC_AACK_SET(he_cap, value) WMI_SET_BITS(he_cap, 3, 1, value)
+
+#define WMI_HECAP_MAC_MINFRAGSZ_GET(he_cap) WMI_GET_BITS(he_cap, 4, 2)
+#define WMI_HECAP_MAC_MINFRAGSZ_SET(he_cap, value) WMI_SET_BITS(he_cap, 4, 2, value)
+
+#define WMI_HECAP_MAC_HEFRAG_GET(he_cap) WMI_GET_BITS(he_cap, 6, 2)
+#define WMI_HECAP_MAC_HEFRAG_SET(he_cap, value) WMI_SET_BITS(he_cap, 6, 2, value)
+
+#define WMI_HECAP_MAC_MURTS_GET(he_cap) WMI_GET_BITS(he_cap, 8, 1)
+#define WMI_HECAP_MAC_MURTS_SET(he_cap, value) WMI_SET_BITS(he_cap, 8, 1, value)
+
+#define WMI_HECAP_MAC_OMI_GET(he_cap) WMI_GET_BITS(he_cap, 9, 1)
+#define WMI_HECAP_MAC_OMI_SET(he_cap, value) WMI_SET_BITS(he_cap, 9, 1, value)
+
+#define WMI_HECAP_MAC_HECTRL_GET(he_cap) WMI_GET_BITS(he_cap, 10, 1)
+#define WMI_HECAP_MAC_HECTRL_SET(he_cap, value) WMI_SET_BITS(he_cap, 10, 1, value)
+
+#define WMI_HECAP_MAC_MBAHECTRL_GET(he_cap) WMI_GET_BITS(he_cap, 11, 1)
+#define WMI_HECAP_MAC_MBAHECTRL_SET(he_cap, value) WMI_SET_BITS(he_cap, 11, 1, value)
+
+#define WMI_HECAP_MAC_ULMURSP_GET(he_cap) WMI_GET_BITS(he_cap, 12, 1)
+#define WMI_HECAP_MAC_ULMURSP_SET(he_cap, value) WMI_SET_BITS(he_cap, 12, 1, value)
+
+#define WMI_HECAP_MAC_HELKAD_GET(he_cap) WMI_GET_BITS(he_cap, 13, 2)
+#define WMI_HECAP_MAC_HELKAD_SET(he_cap, value) WMI_SET_BITS(he_cap, 13, 2, value)
+
+#define WMI_HECAP_MAC_BSR_GET(he_cap) WMI_GET_BITS(he_cap, 15, 1)
+#define WMI_HECAP_MAC_BSR_SET(he_cap, value) WMI_SET_BITS(he_cap, 15, 1, value)
+
+#define WMI_HECAP_MAC_TWTREQ_GET(he_cap) WMI_GET_BITS(he_cap, 16, 1)
+#define WMI_HECAP_MAC_TWTREQ_SET(he_cap, value) WMI_SET_BITS(he_cap, 16, 1, value)
+
+#define WMI_HECAP_MAC_TWTRSP_GET(he_cap) WMI_GET_BITS(he_cap, 17, 1)
+#define WMI_HECAP_MAC_TWTRSP_SET(he_cap, value) WMI_SET_BITS(he_cap, 17, 1, value)
+
+#define WMI_HECAP_MAC_BCSTTWT_GET(he_cap) WMI_GET_BITS(he_cap, 18, 1)
+#define WMI_HECAP_MAC_BCSTTWT_SET(he_cap, value) WMI_SET_BITS(he_cap, 18, 1, value)
+
+#define WMI_HECAP_MAC_MBSS_GET(he_cap) WMI_GET_BITS(he_cap, 19, 1)
+#define WMI_HECAP_MAC_MBSS_SET(he_cap, value) WMI_SET_BITS(he_cap, 19, 1, value)
+
+#define WMI_HECAP_MAC_TRIGPADDUR_GET(he_cap) WMI_GET_BITS(he_cap, 20, 2)
+#define WMI_HECAP_MAC_TRIGPADDUR_SET(he_cap, value) WMI_SET_BITS(he_cap, 20, 2, value)
+
+#define WMI_HECAP_MAC_MAXFRAGMSDU_GET(he_cap) WMI_GET_BITS(he_cap, 22, 3)
+#define WMI_HECAP_MAC_MAXFRAGMSDU_SET(he_cap, value) WMI_SET_BITS(he_cap, 22, 3, value)
+
+#define WMI_HECAP_MAC_32BITBA_GET(he_cap) WMI_GET_BITS(he_cap, 25, 1)
+#define WMI_HECAP_MAC_32BITBA_SET(he_cap, value) WMI_SET_BITS(he_cap, 25, 1, value)
+
+#define WMI_HECAP_MAC_MUCASCADE_GET(he_cap) WMI_GET_BITS(he_cap, 26, 1)
+#define WMI_HECAP_MAC_MUCASCADE_SET(he_cap, value) WMI_SET_BITS(he_cap, 26, 1, value)
+
+#define WMI_HECAP_MAC_ACKMTIDAMPDU_GET(he_cap) WMI_GET_BITS(he_cap, 27, 1)
+#define WMI_HECAP_MAC_ACKMTIDAMPDU_SET(he_cap, value) WMI_SET_BITS(he_cap, 27, 1, value)
+
+#define WMI_HECAP_MAC_GROUPMSTABA_GET(he_cap) WMI_GET_BITS(he_cap, 28, 1)
+#define WMI_HECAP_MAC_GROUPMSTABA_SET(he_cap, value) WMI_SET_BITS(he_cap, 28, 1, value)
+
+#define WMI_HECAP_MAC_OFDMARA_GET(he_cap) WMI_GET_BITS(he_cap, 29, 1)
+#define WMI_HECAP_MAC_OFDMARA_SET(he_cap, value) WMI_SET_BITS(he_cap, 29, 1, value)
+
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_start_request_cmd_fixed_param */
/** unique id identifying the VDEV, generated by the caller */
@@ -5407,6 +5660,7 @@ typedef struct {
/** This field will be invalid unless the Dual Band Simultaneous (DBS) feature is enabled. */
/** the DBS policy manager indicates the preferred number of receive streams. */
A_UINT32 preferred_rx_streams;
+ A_UINT32 he_ops; /* refer to WMI_HEOPS_xxx macros */
/* The TLVs follows this structure:
* wmi_channel chan; //WMI channel
@@ -5909,24 +6163,20 @@ typedef enum {
WMI_VDEV_PARAM_PROTOTYPE = 0x8000,
/* 11AX SPECIFIC defines */
WMI_VDEV_PARAM_BSS_COLOR,
- /* In case of AP this will enable / disable MU-MIMO mode */
- WMI_VDEV_PARAM_SET_UL_MU_MIMO,
- /*
- * set fragmentation level of the vdev's peers.
- * Values can be WMI_HE_FRAG_SUPPORT_LEVEL0..WMI_HE_FRAG_SUPPORT_LEVEL3
- */
- WMI_VDEV_PARAM_SET_FRAG_LEVEL,
/*
- * control different features of HEControl:
- * Bit 0:- 1/0-> Enable/Disable transmssion of UL scheduling.
- * Bit 1:- 1/0-> Enable / disable honoring of ROMI from a peer.
- * Applicable in AP mode only.
- */
- WMI_VDEV_PARAM_SET_HECONTROL,
- /*
- * enable / disable trigger access for a AP vdev's peers.
+ * Enable / disable trigger access for a AP vdev's peers.
* For a STA mode vdev this will enable/disable triggered access
* and enable/disable Multi User mode of operation.
+ * 0 - Disable MU OFDMA and MU MIMO
+ * 1 - Disable DL OFDMA
+ * 2 - Disable DL MUMIMO
+ * 3 - Disable UL OFDMA
+ * 4 - Disable UL MUMIMO
+ * 5 - Enable MU OFDMA and MU MIMO
+ * 6 - Enable DL OFDMA
+ * 7 - Enable DL MUMIMO
+ * 8 - Enable UL OFDMA
+ * 9 - Enable UL MUMIMO
*/
WMI_VDEV_PARAM_SET_HEMU_MODE,
/*
@@ -6626,13 +6876,17 @@ typedef struct {
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tim_info */
- /** TIM bitmap len (in bytes)*/
+ /** TIM bitmap len (in bytes) */
A_UINT32 tim_len;
/** TIM Partial Virtual Bitmap */
A_UINT32 tim_mcast;
A_UINT32 tim_bitmap[WMI_TIM_BITMAP_ARRAY_SIZE];
A_UINT32 tim_changed;
A_UINT32 tim_num_ps_pending;
+ /** Use the vdev_id only if vdev_id_valid is set */
+ A_UINT32 vdev_id_valid;
+ /** unique id identifying the VDEV */
+ A_UINT32 vdev_id;
} wmi_tim_info;
typedef struct {
@@ -6662,6 +6916,10 @@ typedef struct {
*/
A_UINT32 noa_attributes;
wmi_p2p_noa_descriptor noa_descriptors[WMI_P2P_MAX_NOA_DESCRIPTORS];
+ /** Use the vdev_id only if vdev_id_valid is set */
+ A_UINT32 vdev_id_valid;
+ /** unique id identifying the VDEV */
+ A_UINT32 vdev_id;
}wmi_p2p_noa_info;
#define WMI_UNIFIED_NOA_ATTR_MODIFIED 0x1
@@ -6726,6 +6984,11 @@ typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_host_swba_event_fixed_param */
/** bitmap identifying the VDEVs, generated by the caller */
A_UINT32 vdev_map;
+ /** how many vdev's info is included in this message
+ * If this field is zero, then the number of vdevs is specified by
+ * the number of bits set in the vdev_map bitmap.
+ */
+ A_UINT32 num_vdevs;
/* This TLV is followed by tim_info and p2p_noa_info for each vdev in vdevmap :
* wmi_tim_info tim_info[];
* wmi_p2p_noa_info p2p_noa_info[];
@@ -6746,6 +7009,28 @@ typedef struct {
*/
} wmi_tbtt_offset_event_fixed_param;
+ typedef struct {
+ /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tbtt_offset_info */
+ A_UINT32 tlv_header;
+ /** unique id identifying the VDEV */
+ A_UINT32 vdev_id;
+ /** tbttoffset in TUs */
+ A_UINT32 tbttoffset;
+ } wmi_tbtt_offset_info;
+
+ /** Use this event if number of vdevs > 32 */
+ typedef struct {
+ /*
+ * TLV tag and len;
+ * tag equals WMITLV_TAG_STRUC_wmi_tbtt_offset_ext_event_fixed_param
+ */
+ A_UINT32 tlv_header;
+ A_UINT32 num_vdevs;
+ /*
+ * The TLVs for tbttoffset will follow this TLV.
+ * Of size num_vdevs * wmi_tbtt_offset_info
+ */
+ } wmi_tbtt_offset_ext_event_fixed_param;
/* Peer Specific commands and events */
@@ -7208,6 +7493,7 @@ typedef struct {
#define WMI_PEER_QOS 0x00000002 /* QoS enabled */
#define WMI_PEER_NEED_PTK_4_WAY 0x00000004 /* Needs PTK 4 way handshake for authorization */
#define WMI_PEER_NEED_GTK_2_WAY 0x00000010 /* Needs GTK 2 way handshake after 4-way handshake */
+#define WMI_PEER_HE 0x00000400 /* HE Enabled */
#define WMI_PEER_APSD 0x00000800 /* U-APSD power save enabled */
#define WMI_PEER_HT 0x00001000 /* HT enabled */
#define WMI_PEER_40MHZ 0x00002000 /* 40MHz enabld */
@@ -7308,8 +7594,10 @@ typedef struct {
wmi_ppe_threshold peer_ppet;
A_UINT32 peer_he_cap_info; /* protocol-defined HE / 11ax capability flags */
A_UINT32 peer_he_ops; /* HE operation contains BSS color */
+ A_UINT32 peer_he_cap_phy[WMI_MAX_HECAP_PHY_SIZE];
+ A_UINT32 peer_he_mcs; /* HE MCS/NSS set */
- /* Following this struc are the TLV's:
+ /* Following this struct are the TLV's:
* A_UINT8 peer_legacy_rates[];
* A_UINT8 peer_ht_rates[];
* wmi_vht_rate_set peer_vht_rates; //VHT capabilties of the peer
@@ -7330,6 +7618,9 @@ typedef struct {
A_UINT32 vdev_id;
} wmi_peer_add_wds_entry_cmd_fixed_param;
+#define WMI_CHAN_INFO_START_RESP 0
+#define WMI_CHAN_INFO_END_RESP 1
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_remove_wds_entry_cmd_fixed_param */
/** wds MAC addr */
@@ -7390,6 +7681,10 @@ typedef struct {
A_UINT32 my_bss_rx_cycle_count;
/** b-mode data rx time (units are microseconds) */
A_UINT32 rx_11b_mode_data_duration;
+ /** tx frame count */
+ A_UINT32 tx_frame_cnt;
+ /** mac clock */
+ A_UINT32 mac_clk_mhz;
} wmi_chan_info_event_fixed_param;
/**
@@ -11149,6 +11444,67 @@ typedef struct {
/** FW response when tx failure count has reached threshold
* for a peer */
typedef struct {
+ /**
+ * TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_peer_antdiv_info_req_cmd_fixed_param
+ */
+ A_UINT32 tlv_header;
+ /**
+ * In order to get the peer antdiv info for a single peer, host shall
+ * issue the peer_mac_address of that peer. For getting the
+ * info all peers, the host shall issue 0xFFFFFFFF as the mac
+ * address. The firmware will return the peer info for all the
+ * peers on the specified vdev_id
+ */
+ wmi_mac_addr peer_mac_address;
+ /** vdev id */
+ A_UINT32 vdev_id;
+} wmi_peer_antdiv_info_req_cmd_fixed_param;
+
+/** FW response with the peer antdiv info */
+typedef struct {
+ /** TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_peer_antdiv_info_event_fixed_param
+ */
+ A_UINT32 tlv_header;
+ /** number of peers in peer_info */
+ A_UINT32 num_peers;
+ /** VDEV to which the peer belongs to */
+ A_UINT32 vdev_id;
+ /**
+ * This TLV is followed by another TLV of array of structs
+ * wmi_peer_antdiv_info peer_antdiv_info[];
+ */
+} wmi_peer_antdiv_info_event_fixed_param;
+
+typedef struct {
+ /**
+ * TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_peer_antdiv_info
+ */
+ A_UINT32 tlv_header;
+ /** mac addr of the peer */
+ wmi_mac_addr peer_mac_address;
+ /**
+ * per chain rssi of the peer, for up to 8 chains.
+ * Each chain's entry reports the RSSI for different bandwidths:
+ * bits 7:0 -> primary 20 MHz
+ * bits 15:8 -> secondary 20 MHz of 40 MHz channel (if applicable)
+ * bits 23:16 -> secondary 40 MHz of 80 MHz channel (if applicable)
+ * bits 31:24 -> secondary 80 MHz of 160 MHz channel (if applicable)
+ * Each of these 8-bit RSSI reports is in dB units, with respect to
+ * the noise floor.
+ * 0x80 means invalid.
+ * All unused bytes within used chain_rssi indices shall be set
+ * to 0x80.
+ * All unused chain_rssi indices shall be set to 0x80808080.
+ */
+ A_INT32 chain_rssi[8];
+} wmi_peer_antdiv_info;
+
+/** FW response when tx failure count has reached threshold
+ * for a peer */
+typedef struct {
/** TLV tag and len; tag equals
* WMITLV_TAG_STRUC_wmi_peer_tx_fail_cnt_thr_event_fixed_param */
A_UINT32 tlv_header;
@@ -13653,6 +14009,11 @@ typedef struct {
A_UINT32 channel_count;
A_UINT32 schedule_size;
A_UINT32 flags;
+ /**
+ * Max duration of continuing multichannel operation without
+ * receiving a TA frame (units = seconds)
+ */
+ A_UINT32 ta_max_duration;
/** This is followed by a TLV array of wmi_channel. */
/** This is followed by a TLV array of wmi_ocb_channel. */
@@ -14311,6 +14672,77 @@ typedef struct {
* A_UINT8 ie_data[]; */
} wmi_vdev_set_ie_cmd_fixed_param;
+/* DISA feature related data structures */
+#define MAX_MAC_HEADER_LEN 32
+typedef enum {
+ WMI_ENCRYPT_DECRYPT_FLAG_INVALID,
+ WMI_ENCRYPT = 1,
+ WMI_DECRYPT = 2,
+} WMI_ENCRYPT_DECRYPT_FLAG;
+
+typedef struct {
+ /**
+ * TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param
+ */
+ A_UINT32 tlv_header;
+ /** unique id identifying the VDEV, generated by the caller */
+ A_UINT32 vdev_id;
+ A_UINT32 key_flag; /* WMI_ENCRYPT_DECRYPT_FLAG */
+ A_UINT32 key_idx;
+ A_UINT32 key_cipher;
+ A_UINT32 key_len; /* units = bytes */
+ A_UINT32 key_txmic_len; /* units = bytes */
+ A_UINT32 key_rxmic_len; /* units = bytes */
+ /** Key: This array needs to be provided in little-endian order */
+ A_UINT8 key_data[WMI_MAX_KEY_LEN];
+ /**
+ * Packet number: This array needs to be provided in little-endian
+ * order.
+ * If the PN is less than 8 bytes, the PN data shall be placed into this
+ * pn[] array starting at byte 0, leaving the MSBs empty.
+ */
+ A_UINT8 pn[8];
+ /**
+ * 802.11 MAC header to be typecast to struct ieee80211_qosframe_addr4
+ * This array needs to be provided in little-endian order.
+ */
+ A_UINT8 mac_hdr[MAX_MAC_HEADER_LEN];
+ A_UINT32 data_len; /** Payload length, units = bytes */
+ /**
+ * Following this struct are this TLV:
+ * A_UINT8 data[]; <-- actual data to be encrypted,
+ * needs to be provided in little-endian order
+ */
+} wmi_vdev_encrypt_decrypt_data_req_cmd_fixed_param;
+
+/**
+ * This event is generated in response to
+ * WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID from HOST.
+ * On receiving WMI command WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID from
+ * HOST with DISA test vectors, DISA frame will prepared and submitted to HW,
+ * then on receiving the tx completion for the DISA frame this WMI event
+ * will be delivered to HOST with the encrypted frame.
+ */
+typedef struct {
+ /**
+ * TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_vdev_encrypt_decrypt_data_resp_event_fixed_param
+ */
+ A_UINT32 tlv_header;
+ /* VDEV identifier */
+ A_UINT32 vdev_id;
+ A_INT32 status; /* 0: success, -1: Failure, */
+ /* 802.11 header length + encrypted payload length (units = bytes) */
+ A_UINT32 data_length;
+ /**
+ * Following this struct is this TLV:
+ * A_UINT8 enc80211_frame[]; <-- Encrypted 802.11 frame;
+ * 802.11 header + encrypted payload,
+ * provided in little-endian order
+ */
+} wmi_vdev_encrypt_decrypt_data_resp_event_fixed_param;
+
/* DEPRECATED - use wmi_pdev_set_pcl_cmd_fixed_param instead */
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_soc_set_pcl_cmd_fixed_param */
@@ -14362,6 +14794,19 @@ typedef struct {
} wmi_soc_set_hw_mode_cmd_fixed_param;
typedef struct {
+ /* TLV tag and len tag equals WMITLV_TAG_STRUC_wmi_pdev_band_to_mac */
+ A_UINT32 tlv_header;
+ /** pdev_id for identifying the MACC
+ * See macros starting with WMI_PDEV_ID_ for values..
+ */
+ A_UINT32 pdev_id;
+ /* start frequency in MHz */
+ A_UINT32 start_freq;
+ /* end frequency in MHz */
+ A_UINT32 end_freq;
+} wmi_pdev_band_to_mac;
+
+typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_hw_mode_cmd_fixed_param */
/** Set Hardware Mode **/
@@ -14372,6 +14817,13 @@ typedef struct {
/* Hardware Mode Index */
A_UINT32 hw_mode_index;
+ /* Number of band to mac TLVs */
+
+ A_UINT32 num_band_to_mac;
+
+ /* Followed by TLVs of typee
+ * num_band_to_mac * wmi_pdev_band_to_mac.
+ */
} wmi_pdev_set_hw_mode_cmd_fixed_param;
/* DEPRECATED - use wmi_pdev_set_dual_mac_config_cmd_fixed_param instead */
@@ -15704,11 +16156,31 @@ typedef struct {
} wmi_ani_ofdm_event_fixed_param;
typedef enum wmi_coex_config_type {
- WMI_COEX_CONFIG_PAGE_P2P_TDM = 1, /* config interval (arg1 BT, arg2 WLAN) for P2P + PAGE */
- WMI_COEX_CONFIG_PAGE_STA_TDM = 2, /* config interval (arg1 BT, arg2 WLAN) for STA + PAGE */
- WMI_COEX_CONFIG_PAGE_SAP_TDM = 3, /* config interval (arg1 BT, arg2 WLAN) for SAP + PAGE */
- WMI_COEX_CONFIG_DURING_WLAN_CONN = 4, /* config during WLAN connection */
- WMI_COEX_CONFIG_BTC_ENABLE = 5, /* config to enable/disable BTC */
+ /* config interval (arg1 BT, arg2 WLAN) for P2P + PAGE */
+ WMI_COEX_CONFIG_PAGE_P2P_TDM = 1,
+ /* config interval (arg1 BT, arg2 WLAN) for STA + PAGE */
+ WMI_COEX_CONFIG_PAGE_STA_TDM = 2,
+ /* config interval (arg1 BT, arg2 WLAN) for SAP + PAGE */
+ WMI_COEX_CONFIG_PAGE_SAP_TDM = 3,
+ /* config during WLAN connection */
+ WMI_COEX_CONFIG_DURING_WLAN_CONN = 4,
+ /* config to enable/disable BTC */
+ WMI_COEX_CONFIG_BTC_ENABLE = 5,
+ /* config of COEX debug setting */
+ WMI_COEX_CONFIG_COEX_DBG = 6,
+ /* config interval (ms units) (arg1 BT, arg2 WLAN) for P2P + STA + PAGE */
+ WMI_COEX_CONFIG_PAGE_P2P_STA_TDM = 7,
+ /* config interval (ms units) (arg1 BT, arg2 WLAN) for P2P + INQUIRY */
+ WMI_COEX_CONFIG_INQUIRY_P2P_TDM = 8,
+ /* config interval (ms units) (arg1 BT, arg2 WLAN) for STA + INQUIRY */
+ WMI_COEX_CONFIG_INQUIRY_STA_TDM = 9,
+ /* config interval (ms units) (arg1 BT, arg2 WLAN) for SAP + INQUIRY */
+ WMI_COEX_CONFIG_INQUIRY_SAP_TDM = 10,
+ /*
+ * config interval (ms units) (arg1 BT, arg2 WLAN) for P2P + STA +
+ * INQUIRY
+ */
+ WMI_COEX_CONFIG_INQUIRY_P2P_STA_TDM = 11,
} WMI_COEX_CONFIG_TYPE;
typedef struct {
@@ -15819,13 +16291,13 @@ typedef struct {
*/
A_UINT32 gbl_thresh;
/** Enable/disable bitmap for threshold mechanism of CCA stats */
- A_UINT32 cca_thresh_bitmap;
+ A_UINT32 cca_thresh_enable_bitmap;
/** Enable/disable bitmap for threshold mechanism of signal stats */
- A_UINT32 signal_thresh_bitmap;
+ A_UINT32 signal_thresh_enable_bitmap;
/** Enable/disable bitmap for threshold mechanism of TX stats */
- A_UINT32 tx_thresh_bitmap;
+ A_UINT32 tx_thresh_enable_bitmap;
/** Enable/disable bitmap for threshold mechanism of RX stats */
- A_UINT32 rx_thresh_bitmap;
+ A_UINT32 rx_thresh_enable_bitmap;
/* This TLV is followed by TLVs below:
* wmi_chan_cca_stats_thresh cca_thresh;
* wmi_peer_signal_stats_thresh signal_thresh;
@@ -15851,6 +16323,35 @@ typedef enum {
WLAN_5G_CAPABILITY = 0x2,
} WLAN_BAND_CAPABILITY;
+typedef enum wmi_hw_mode_config_type {
+ /* Only one PHY is active. */
+ WMI_HW_MODE_SINGLE = 0,
+ /**
+ * Both PHYs are active in different bands, one in 2G
+ * and another in 5G.
+ */
+ WMI_HW_MODE_DBS = 1,
+ /**
+ * Both PHYs are in passive mode (only rx) in same band;
+ * no tx allowed.
+ */
+ WMI_HW_MODE_SBS_PASSIVE = 2,
+ /**
+ * Both PHYs are active in the same band.
+ * Support for both PHYs within one band is planned for 5G only
+ * (as indicated in WMI_MAC_PHY_CAPABILITIES),
+ * but could be extended to other bands in the future.
+ * The separation of the band between the two PHYs needs to be
+ * communicated separately.
+ */
+ WMI_HW_MODE_SBS = 3,
+ /**
+ * 3 PHYs, with 2 on the same band doing SBS
+ * as in WMI_HW_MODE_SBS, and 3rd on the other band
+ */
+ WMI_HW_MODE_DBS_SBS = 4,
+} WMI_HW_MODE_CONFIG_TYPE;
+
#define WMI_SUPPORT_11B_GET(flags) WMI_GET_BITS(flags, 0, 1)
#define WMI_SUPPORT_11B_SET(flags, value) WMI_SET_BITS(flags, 0, 1, value)
@@ -15869,6 +16370,9 @@ typedef enum {
#define WMI_SUPPORT_11AX_GET(flags) WMI_GET_BITS(flags, 5, 1)
#define WMI_SUPPORT_11AX_SET(flags, value) WMI_SET_BITS(flags, 5, 1, value)
+#define WMI_MAX_MUBFEE_GET(flags) WMI_GET_BITS(flags, 28, 4)
+#define WMI_MAX_MUBFEE_SET(flags, value) WMI_SET_BITS(flags, 28, 4, value)
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_MAC_PHY_CAPABILITIES */
/* hw_mode_id - identify a particular set of HW characteristics, as specified
@@ -15881,7 +16385,7 @@ typedef struct {
A_UINT32 pdev_id;
/* phy id. Starts with 0 */
A_UINT32 phy_id;
- /* supported modulations */
+ /* supported modulations and number of MU beamformees */
union {
struct {
A_UINT32 supports_11b:1,
@@ -15889,7 +16393,12 @@ typedef struct {
supports_11a:1,
supports_11n:1,
supports_11ac:1,
- supports_11ax:1;
+ supports_11ax:1,
+
+ unused:22,
+
+ /* max MU beamformees supported per MAC */
+ max_mubfee:4;
};
A_UINT32 supported_flags;
};
@@ -15940,6 +16449,11 @@ typedef struct {
A_UINT32 tx_chain_mask_5G;
/* Valid Receive chain mask */
A_UINT32 rx_chain_mask_5G;
+ /* HE capability phy field of 802.11ax, WMI_HE_CAP defines */
+ A_UINT32 he_cap_phy_info_2G[WMI_MAX_HECAP_PHY_SIZE];
+ A_UINT32 he_cap_phy_info_5G[WMI_MAX_HECAP_PHY_SIZE];
+ wmi_ppe_threshold he_ppet2G;
+ wmi_ppe_threshold he_ppet5G;
} WMI_MAC_PHY_CAPABILITIES;
typedef struct {
@@ -15947,12 +16461,21 @@ typedef struct {
/* hw_mode_id - identify a particular set of HW characteristics,
* as specified by the subsequent fields */
A_UINT32 hw_mode_id;
- /* BIT0 represents phy_id 0, BIT1 represent phy_id 1 and so on */
+ /**
+ * BIT0 represents phy_id 0, BIT1 represent phy_id 1 and so on.
+ * Number of bits set in phy_id_map represents number of
+ * WMI_MAC_PHY_CAPABILITIES TLV's, one for each active PHY for current HW
+ * mode identified by hw_mode_id. For example, for DBS/SBS mode there will
+ * be 2 WMI_MAC_PHY_CAPABILITIES TLVs and for single MAC modes it will be
+ * 1 WMI_MAC_PHY_CAPABILITIES TLVs
+ */
A_UINT32 phy_id_map;
- /* number of bits set in phy_id_map represents number of WMI_MAC_PHY_CAPABILITIES TLV's
- * one for each active PHY for current HW mode identified by hw_mode_id. For example for
- * DBS/SBS mode there will be 2 WMI_MAC_PHY_CAPABILITIES TLVs and for single MAC modes it
- * will be 1 WMI_MAC_PHY_CAPABILITIES TLVs */
+ /**
+ * hw_mode_config_type
+ * Identify a particular type of HW mode such as SBS, DBS etc.
+ * Refer to WMI_HW_MODE_CONFIG_TYPE values.
+ */
+ A_UINT32 hw_mode_config_type;
} WMI_HW_MODE_CAPABILITIES;
typedef struct {
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index 3c7e47da9bc3..cb79115d11ee 100644
--- a/CORE/SERVICES/COMMON/wmi_version.h
+++ b/CORE/SERVICES/COMMON/wmi_version.h
@@ -36,7 +36,7 @@
#define __WMI_VER_MINOR_ 0
/** WMI revision number has to be incremented when there is a
* change that may or may not break compatibility. */
-#define __WMI_REVISION_ 288
+#define __WMI_REVISION_ 303
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work
diff --git a/CORE/SERVICES/DFS/inc/dfs.h b/CORE/SERVICES/DFS/inc/dfs.h
index 79fabf66d8c9..4824320c269d 100644
--- a/CORE/SERVICES/DFS/inc/dfs.h
+++ b/CORE/SERVICES/DFS/inc/dfs.h
@@ -91,7 +91,6 @@
#include "vos_api.h"
#include "sirDebug.h"
-#define ATH_SUPPORT_DFS 1
#define CHANNEL_TURBO 0x00010
#define DFS_PRINTK(_fmt, ...) printk((_fmt), __VA_ARGS__)
#define DFS_DPRINTK(dfs, _m, _fmt, ...) do { \
diff --git a/CORE/SERVICES/DFS/src/dfs.c b/CORE/SERVICES/DFS/src/dfs.c
index 20bc4dfc22c0..da1fbd7994e5 100644
--- a/CORE/SERVICES/DFS/src/dfs.c
+++ b/CORE/SERVICES/DFS/src/dfs.c
@@ -56,9 +56,6 @@
#include <osdep.h>
-
-#ifndef ATH_SUPPORT_DFS
-#define ATH_SUPPORT_DFS 1
#include "sys/queue.h"
//#include "if_athioctl.h"
@@ -77,6 +74,7 @@ int domainoverride=DFS_UNINIT_DOMAIN;
int usenol=1;
u_int32_t dfs_debug_level=ATH_DEBUG_DFS;
+#ifdef ATH_SUPPORT_DFS
#if 0 /* the code to call this is curently commented-out below */
/*
@@ -363,7 +361,7 @@ dfs_attach(struct ieee80211com *ic)
dfs->pulses->pl_lastelem = DFS_MAX_PULSE_BUFFER_MASK;
/* Allocate memory for radar filters */
- for (n=0; n<DFS_MAX_RADAR_TYPES; n++) {
+ for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
dfs->dfs_radarf[n] = (struct dfs_filtertype *)OS_MALLOC(NULL, sizeof(struct dfs_filtertype),GFP_ATOMIC);
if (dfs->dfs_radarf[n] == NULL) {
DFS_PRINTK("%s: cannot allocate memory for radar filter types\n",
@@ -392,14 +390,15 @@ dfs_attach(struct ieee80211com *ic)
}
/* Allocate memory for radar table */
- dfs->dfs_radartable = (int8_t **)OS_MALLOC(NULL, 256*sizeof(int8_t *), GFP_ATOMIC);
+ dfs->dfs_radartable = (int8_t **)OS_MALLOC(NULL,
+ MAX_DFS_RADAR_TABLE_TYPE * sizeof(int8_t *), GFP_ATOMIC);
if (dfs->dfs_radartable == NULL) {
DFS_PRINTK("%s: cannot allocate memory for radar table\n",
__func__);
goto bad4;
}
- for (n=0; n<256; n++) {
- dfs->dfs_radartable[n] = OS_MALLOC(NULL, DFS_MAX_RADAR_OVERLAP*sizeof(int8_t),
+ for (n = 0; n < MAX_DFS_RADAR_TABLE_TYPE; n++) {
+ dfs->dfs_radartable[n] = OS_MALLOC(NULL, DFS_MAX_RADAR_OVERLAP * sizeof(int8_t),
GFP_ATOMIC);
if (dfs->dfs_radartable[n] == NULL) {
DFS_PRINTK("%s: cannot allocate memory for radar table entry\n",
@@ -475,7 +474,7 @@ bad3:
OS_FREE(dfs->dfs_dc_radartable);
dfs->dfs_dc_radartable = NULL;
bad2:
- for (n=0; n < DFS_MAX_RADAR_TYPES; n++) {
+ for (n=0; n < MAX_DFS_RADAR_TABLE_TYPE; n++) {
if (dfs->dfs_radartable[n] != NULL) {
OS_FREE(dfs->dfs_radartable[n]);
dfs->dfs_radartable[n] = NULL;
@@ -590,7 +589,7 @@ dfs_detach(struct ieee80211com *ic)
if (dfs->dfs_radartable != NULL) {
- for (n=0; n<256; n++) {
+ for (n = 0; n < MAX_DFS_RADAR_TABLE_TYPE; n++) {
if (dfs->dfs_radartable[n] != NULL) {
OS_FREE(dfs->dfs_radartable[n]);
dfs->dfs_radartable[n] = NULL;
@@ -1121,5 +1120,14 @@ u_int16_t dfs_isdfsregdomain(struct ieee80211com *ic)
struct ath_dfs *dfs = (struct ath_dfs *)ic->ic_dfs;
return dfs ? dfs->dfsdomain : 0;
}
-
+#else
+int
+dfs_attach(struct ieee80211com *ic)
+{
+ return 0;
+}
+void
+dfs_detach(struct ieee80211com *ic)
+{
+}
#endif /* ATH_UPPORT_DFS */
diff --git a/CORE/SERVICES/DFS/src/dfs_process_phyerr.c b/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
index 34b6a018ada2..f61d6628800e 100644
--- a/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
+++ b/CORE/SERVICES/DFS/src/dfs_process_phyerr.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2002-2014,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -920,4 +920,12 @@ dfs_process_phyerr(struct ieee80211com *ic, void *buf, u_int16_t datalen,
#undef PRI_CH_RADAR_FOUND
#undef EXT_CH_RADAR_EARLY_FOUND
}
+#else
+void
+dfs_process_phyerr(struct ieee80211com *ic, void *buf,
+ u_int16_t datalen, u_int8_t r_rssi,
+ u_int8_t r_ext_rssi, u_int32_t r_rs_tstamp,
+ u_int64_t r_fulltsf, bool enable_log)
+{
+}
#endif /* ATH_SUPPORT_DFS */
diff --git a/CORE/SERVICES/DFS/src/dfs_process_radarevent.c b/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
index 45176f5706d0..e89800caac82 100644
--- a/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
+++ b/CORE/SERVICES/DFS/src/dfs_process_radarevent.c
@@ -117,7 +117,7 @@ dfs_process_pulse_dur(struct ath_dfs *dfs, u_int8_t re_dur)
* Return: None
*/
static void dfs_process_dc_pulse(struct ath_dfs *dfs, struct dfs_event *event,
- int *retval, int this_ts)
+ int *retval, uint64_t this_ts)
{
struct dfs_event re;
struct dfs_state *rs=NULL;
@@ -463,8 +463,9 @@ dfs_process_radarevent(struct ath_dfs *dfs, struct ieee80211_channel *chan)
(((u_int64_t) 1) << DFS_TSSHIFT);
/* Now, see if it's been more than 1 wrap */
deltafull_ts = re.re_full_ts - dfs->dfs_rinfo.rn_lastfull_ts;
- if (deltafull_ts >
- ((u_int64_t)((DFS_TSMASK - dfs->dfs_rinfo.rn_last_ts) + 1 + re.re_ts)))
+ if (deltafull_ts > ((u_int64_t)(DFS_TSMASK -
+ dfs->dfs_rinfo.rn_last_ts) +
+ 1 + re.re_ts))
deltafull_ts -= (DFS_TSMASK - dfs->dfs_rinfo.rn_last_ts) + 1 + re.re_ts;
deltafull_ts = deltafull_ts >> DFS_TSSHIFT;
if (deltafull_ts > 1) {
diff --git a/CORE/SERVICES/HIF/USB/hif_usb.c b/CORE/SERVICES/HIF/USB/hif_usb.c
index a6a88bf2754c..47bea8324a02 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb.c
+++ b/CORE/SERVICES/HIF/USB/hif_usb.c
@@ -1060,5 +1060,5 @@ void HIFSetBundleMode(HIF_DEVICE *hif_device, bool enabled, int rx_bundle_cnt)
*/
bool hif_is_80211_fw_wow_required(void)
{
- return false;
+ return true;
}
diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c
index cf63e6104b70..b934ac2c2567 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.c
+++ b/CORE/SERVICES/HIF/USB/if_usb.c
@@ -271,6 +271,7 @@ static void hif_usb_remove(struct usb_interface *interface)
usb_sc->hdd_removed_wait_cnt ++;
}
atomic_set(&usb_sc->hdd_removed_processing, 1);
+ vos_set_shutdown_in_progress(VOS_MODULE_ID_HIF, TRUE);
/* disable lpm to avoid following cold reset will
*cause xHCI U1/U2 timeout
@@ -315,6 +316,7 @@ static void hif_usb_remove(struct usb_interface *interface)
hif_nointrs(sc);
HIF_USBDeviceDetached(interface, 1);
+ vos_set_shutdown_in_progress(VOS_MODULE_ID_HIF, FALSE);
atomic_set(&usb_sc->hdd_removed_processing, 0);
hif_deinit_adf_ctx(scn);
A_FREE(scn);
@@ -348,22 +350,6 @@ static int hif_usb_suspend(struct usb_interface *interface, pm_message_t state)
return (-1);
}
- /* No need to send WMI_PDEV_SUSPEND_CMDID to FW if WOW is enabled */
- if (wma_is_wow_mode_selected(temp_module)) {
- if (wma_enable_wow_in_fw(temp_module, 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return -1;
- }
- } else if ((PM_EVENT_FREEZE & state.event) == PM_EVENT_FREEZE ||
- (PM_EVENT_SUSPEND & state.event) == PM_EVENT_SUSPEND ||
- (PM_EVENT_HIBERNATE & state.event) == PM_EVENT_HIBERNATE) {
- if (wma_suspend_target
- (vos_get_context(VOS_MODULE_ID_WDA, vos), 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return -1;
- }
- }
-
sc->suspend_state = 1;
usb_hif_flush_all(device);
@@ -396,13 +382,6 @@ static int hif_usb_resume(struct usb_interface *interface)
usb_hif_post_recv_transfers(&device->pipes[HIF_RX_INT_PIPE],
HIF_USB_RX_BUFFER_SIZE);
#endif
- /* No need to send WMI_PDEV_RESUME_CMDID to FW if WOW is enabled */
- if (!wma_is_wow_mode_selected(temp_module)) {
- wma_resume_target(temp_module, 0);
- } else if (wma_disable_wow_in_fw(temp_module, 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return (-1);
- }
printk("Exit:%s,Line:%d\n", __func__,__LINE__);
return 0;
}
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
index d881945be04d..428b96e12f91 100644
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
@@ -1515,14 +1515,10 @@ static int hifDeviceInserted(struct sdio_func *func, const struct sdio_device_id
AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
("AR6000: hifDeviceInserted, Function: 0x%X, Vendor ID: 0x%X, Device ID: 0x%X, block size: 0x%X/0x%X\n",
func->num, func->vendor, id->device, func->max_blksize, func->cur_blksize));
- /*
- dma_mask should not be NULL, otherwise dma_map_single will crash.
- TODO: check why dma_mask is NULL here
- */
- if (func->dev.dma_mask == NULL){
- static u64 dma_mask = 0xFFFFFFFF;
- func->dev.dma_mask = &dma_mask;
- }
+
+ /* dma_mask should be populated here. Use the parent device's setting. */
+ func->dev.dma_mask = mmc_dev(func->card->host)->dma_mask;
+
for (i=0; i<MAX_HIF_DEVICES; ++i) {
HIF_DEVICE *hifdevice = hif_devices[i];
if (hifdevice && hifdevice->powerConfig == HIF_DEVICE_POWER_CUT &&
diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c
index 80f9f3ab953f..8a771b920720 100644
--- a/CORE/SERVICES/HTC/htc.c
+++ b/CORE/SERVICES/HTC/htc.c
@@ -144,6 +144,7 @@ static void HTCCleanup(HTC_TARGET *target)
{
HTC_PACKET *pPacket;
adf_nbuf_t netbuf;
+ int j;
if (target->hif_dev != NULL) {
HIFDetachHTC(target->hif_dev);
@@ -207,6 +208,11 @@ static void HTCCleanup(HTC_TARGET *target)
adf_os_spinlock_destroy(&target->HTCTxLock);
adf_os_spinlock_destroy(&target->HTCCreditLock);
+ for (j = 0; j < ENDPOINT_MAX; j++) {
+ HTC_ENDPOINT *endpoint = &target->EndPoint[j];
+ adf_os_spinlock_destroy(&endpoint->htc_endpoint_rx_lock);
+ }
+
/* free our instance */
A_FREE(target);
}
@@ -218,7 +224,7 @@ HTC_HANDLE HTCCreate(void *ol_sc, HTC_INIT_INFO *pInfo, adf_os_device_t osdev)
MSG_BASED_HIF_CALLBACKS htcCallbacks;
HTC_ENDPOINT *pEndpoint=NULL;
HTC_TARGET *target = NULL;
- int i;
+ int i, j;
AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("+HTCCreate .. HIF :%p \n",hHIF));
@@ -237,6 +243,12 @@ HTC_HANDLE HTCCreate(void *ol_sc, HTC_INIT_INFO *pInfo, adf_os_device_t osdev)
adf_os_spinlock_init(&target->HTCCreditLock);
target->is_nodrop_pkt = FALSE;
+ for (j = 0; j < ENDPOINT_MAX; j++) {
+ pEndpoint = &target->EndPoint[j];
+ adf_os_spinlock_init(&pEndpoint->htc_endpoint_rx_lock);
+ }
+ target->is_nodrop_pkt = FALSE;
+
do {
A_MEMCPY(&target->HTCInitInfo,pInfo,sizeof(HTC_INIT_INFO));
target->host_handle = pInfo->pContext;
diff --git a/CORE/SERVICES/HTC/htc_internal.h b/CORE/SERVICES/HTC/htc_internal.h
index 870046d1c618..36646891e6fa 100644
--- a/CORE/SERVICES/HTC/htc_internal.h
+++ b/CORE/SERVICES/HTC/htc_internal.h
@@ -147,6 +147,7 @@ typedef struct _HTC_ENDPOINT {
HTC_ENDPOINT_STATS EndPointStats; /* endpoint statistics */
#endif
A_BOOL TxCreditFlowEnabled;
+ adf_os_spinlock_t htc_endpoint_rx_lock;
} HTC_ENDPOINT;
#ifdef HTC_EP_STAT_PROFILING
@@ -231,6 +232,8 @@ typedef struct _HTC_TARGET {
#define UNLOCK_HTC_TX(t) adf_os_spin_unlock_bh(&(t)->HTCTxLock);
#define LOCK_HTC_CREDIT(t) adf_os_spin_lock_bh(&(t)->HTCCreditLock);
#define UNLOCK_HTC_CREDIT(t) adf_os_spin_unlock_bh(&(t)->HTCCreditLock);
+#define LOCK_HTC_ENDPOINT_RX(t) adf_os_spin_lock_bh(&(t)->htc_endpoint_rx_lock);
+#define UNLOCK_HTC_ENDPOINT_RX(t) adf_os_spin_unlock_bh(&(t)->htc_endpoint_rx_lock);
#define GET_HTC_TARGET_FROM_HANDLE(hnd) ((HTC_TARGET *)(hnd))
diff --git a/CORE/SERVICES/HTC/htc_recv.c b/CORE/SERVICES/HTC/htc_recv.c
index e4c1ffcdb6d5..b082a25941cf 100644
--- a/CORE/SERVICES/HTC/htc_recv.c
+++ b/CORE/SERVICES/HTC/htc_recv.c
@@ -104,14 +104,17 @@ static void DoRecvCompletion(HTC_ENDPOINT *pEndpoint,
/* using legacy EpRecv */
while (!HTC_QUEUE_EMPTY(pQueueToIndicate)) {
pPacket = HTC_PACKET_DEQUEUE(pQueueToIndicate);
+ LOCK_HTC_ENDPOINT_RX(pEndpoint);
if (pEndpoint->EpCallBacks.EpRecv == NULL) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("HTC ep %d has NULL recv callback on packet %p\n",
pEndpoint->Id, pPacket));
+ UNLOCK_HTC_ENDPOINT_RX(pEndpoint);
continue;
}
AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("HTC calling ep %d recv callback on packet %p\n",
pEndpoint->Id, pPacket));
pEndpoint->EpCallBacks.EpRecv(pEndpoint->EpCallBacks.pContext, pPacket);
+ UNLOCK_HTC_ENDPOINT_RX(pEndpoint);
}
}
diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c
index 3019ee83f3d9..508e4f43d3ab 100644
--- a/CORE/SERVICES/HTC/htc_send.c
+++ b/CORE/SERVICES/HTC/htc_send.c
@@ -1142,9 +1142,9 @@ static HTC_SEND_QUEUE_RESULT HTCTrySend(HTC_TARGET *target,
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
("htc_issue_packets, failed status:%d put it back to head of callers SendQueue",
result));
+ LOCK_HTC_TX(target);
HTC_PACKET_QUEUE_TRANSFER_TO_HEAD(&pEndpoint->TxQueue,
&sendQueue);
- LOCK_HTC_TX(target);
break;
}
diff --git a/CORE/SERVICES/HTC/htc_services.c b/CORE/SERVICES/HTC/htc_services.c
index 0ce50c4a5d83..36d45557a70f 100644
--- a/CORE/SERVICES/HTC/htc_services.c
+++ b/CORE/SERVICES/HTC/htc_services.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -328,6 +328,17 @@ A_STATUS HTCConnectService(HTC_HANDLE HTCHandle,
return status;
}
+void htc_disconnect_service(HTC_HANDLE htc_handle, HTC_ENDPOINT_ID endpoint_id)
+{
+ HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(htc_handle);
+ HTC_ENDPOINT *endpoint = &target->EndPoint[endpoint_id];
+
+ LOCK_HTC_ENDPOINT_RX(endpoint);
+ endpoint->EpCallBacks.EpRecv = NULL;
+ UNLOCK_HTC_ENDPOINT_RX(endpoint);
+ return;
+}
+
void HTCSetCreditDistribution(HTC_HANDLE HTCHandle,
void *pCreditDistContext,
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index db6f8faccde1..0544cb76c561 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -59,7 +59,7 @@
#include "wniApi.h"
#include "aniGlobal.h"
#include "wmi_unified.h"
-#include "wniCfgAp.h"
+#include "wni_cfg.h"
#include "cfgApi.h"
#include "ol_txrx_ctrl_api.h"
#if defined(CONFIG_HL_SUPPORT)
@@ -2732,17 +2732,11 @@ static void wma_update_peer_stats(tp_wma_handle wma, wmi_peer_stats *peer_stats)
* rate flags */
classa_stats->rx_frag_cnt = node->nss;
classa_stats->promiscuous_rx_frag_cnt = mcsRateFlags;
- WMA_LOGD("Computed mcs_idx:%d mcs_rate_flags:%d",
- classa_stats->mcs_index,
- mcsRateFlags);
}
/* FW returns tx power in intervals of 0.5 dBm
Convert it back to intervals of 1 dBm */
classa_stats->max_pwr =
roundup(classa_stats->max_pwr, 2) >> 1;
- WMA_LOGD("peer tx rate flags:%d nss:%d max_txpwr:%d",
- node->rate_flags, node->nss,
- classa_stats->max_pwr);
}
}
}
@@ -3366,8 +3360,6 @@ static void wma_fw_stats_ind(tp_wma_handle wma, u_int8_t *buf)
}
if (event->num_peer_stats > 0) {
- WMA_LOGD("update get rssi %d",
- wma->get_sta_rssi);
if (wma->get_sta_rssi == TRUE) {
wma_handle_sta_rssi(event->num_peer_stats,
(wmi_peer_stats *)temp,
@@ -3395,8 +3387,6 @@ static void wma_fw_stats_ind(tp_wma_handle wma, u_int8_t *buf)
WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats) &&
((rssi_event->tlv_header & 0x0000FFFF) ==
WMITLV_GET_STRUCT_TLVLEN(wmi_per_chain_rssi_stats))) {
- WMA_LOGD("%s: num_rssi_stats %u", __func__,
- rssi_event->num_per_chain_rssi_stats);
if (rssi_event->num_per_chain_rssi_stats > 0) {
temp += sizeof(*rssi_event);
for (i = 0; i < rssi_event->num_per_chain_rssi_stats;
@@ -4521,7 +4511,6 @@ static int wma_unified_link_iface_stats_event_handler(void *handle,
return -EINVAL;
}
- WMA_LOGD("%s: Posting Iface Stats event to HDD", __func__);
param_tlvs = (WMI_IFACE_LINK_STATS_EVENTID_param_tlvs *)cmd_param_info;
if (!param_tlvs) {
WMA_LOGA("%s: Invalid stats event", __func__);
@@ -4556,31 +4545,6 @@ static int wma_unified_link_iface_stats_event_handler(void *handle,
return -ENOMEM;
}
- WMA_LOGD("Interface stats Fixed Param:");
- WMA_LOGD("request_id %u vdev_id %u",
- fixed_param->request_id,fixed_param->vdev_id);
-
- WMA_LOGD("Iface Stats:");
- WMA_LOGD("beacon_rx %u mgmt_rx %u mgmt_action_rx %u mgmt_action_tx %u "
- "rssi_mgmt %u rssi_data %u rssi_ack %u num_peers %u "
- "num_peer_events %u num_ac %u roam_state %u"
- " avg_bcn_spread_offset_high %u"
- " avg_bcn_spread_offset_low %u"
- " is leaky_ap %u"
- " avg_rx_frames_leaked %u"
- " rx_leak_window %u",
- link_stats->beacon_rx, link_stats->mgmt_rx,
- link_stats->mgmt_action_rx, link_stats->mgmt_action_tx,
- link_stats->rssi_mgmt, link_stats->rssi_data,
- link_stats->rssi_ack, link_stats->num_peers,
- link_stats->num_peer_events, link_stats->num_ac,
- link_stats->roam_state,
- link_stats->avg_bcn_spread_offset_high,
- link_stats->avg_bcn_spread_offset_low,
- link_stats->is_leaky_ap,
- link_stats->avg_rx_frms_leaked,
- link_stats->rx_leak_window);
-
vos_mem_zero(link_stats_results, link_stats_results_size);
link_stats_results->paramId = WMI_LINK_STATS_IFACE;
@@ -4608,22 +4572,7 @@ static int wma_unified_link_iface_stats_event_handler(void *handle,
next_res_offset = link_stats_size - WIFI_AC_MAX * ac_stats_size;
next_ac_offset = WMI_TLV_HDR_SIZE;
- WMA_LOGD("AC Stats:");
for (count = 0; count < link_stats->num_ac; count++) {
- WMA_LOGD("ac_type %u tx_mpdu %u rx_mpdu %u tx_mcast %u "
- "rx_mcast %u rx_ampdu %u tx_ampdu %u mpdu_lost %u "
- "retries %u retries_short %u retries_long %u "
- "contention_time_min %u contention_time_max %u "
- "contention_time_avg %u contention_num_samples %u",
- ac_stats->ac_type, ac_stats->tx_mpdu, ac_stats->rx_mpdu,
- ac_stats->tx_mcast, ac_stats->rx_mcast,
- ac_stats->rx_ampdu,ac_stats->tx_ampdu,
- ac_stats->mpdu_lost, ac_stats->retries,
- ac_stats->retries_short, ac_stats->retries_long,
- ac_stats->contention_time_min,
- ac_stats->contention_time_max,
- ac_stats->contention_time_avg,
- ac_stats->contention_num_samples);
ac_stats++;
vos_mem_copy(results + next_res_offset,
@@ -4640,7 +4589,6 @@ static int wma_unified_link_iface_stats_event_handler(void *handle,
pMac->sme.pLinkLayerStatsIndCallback(pMac->hHdd,
WDA_LINK_LAYER_STATS_RESULTS_RSP,
link_stats_results);
- WMA_LOGD("%s: Iface Stats event posted to HDD", __func__);
vos_mem_free(link_stats_results);
return 0;
@@ -4674,7 +4622,6 @@ static int wma_unified_link_peer_stats_event_handler(void *handle,
return -EINVAL;
}
- WMA_LOGD("%s: Posting Peer Stats event to HDD", __func__);
param_tlvs = (WMI_PEER_LINK_STATS_EVENTID_param_tlvs *)cmd_param_info;
if (!param_tlvs) {
WMA_LOGA("%s: Invalid stats event", __func__);
@@ -4720,12 +4667,6 @@ static int wma_unified_link_peer_stats_event_handler(void *handle,
return -ENOMEM;
}
- WMA_LOGD("Peer stats from FW event buf");
- WMA_LOGD("Fixed Param:");
- WMA_LOGD("request_id %u num_peers %u peer_event_number %u more_data %u",
- fixed_param->request_id, fixed_param->num_peers,
- fixed_param->peer_event_number, fixed_param->more_data);
-
vos_mem_zero(link_stats_results, link_stats_results_size);
link_stats_results->paramId = WMI_LINK_STATS_ALL_PEER;
@@ -4745,11 +4686,6 @@ static int wma_unified_link_peer_stats_event_handler(void *handle,
next_peer_offset = WMI_TLV_HDR_SIZE;
next_rate_offset = WMI_TLV_HDR_SIZE;
for (rate_cnt = 0; rate_cnt < fixed_param->num_peers; rate_cnt++) {
- WMA_LOGD("Peer Info:");
- WMA_LOGD("peer_type %u capabilities %u num_rates %u",
- peer_stats->peer_type, peer_stats->capabilities,
- peer_stats->num_rates);
-
vos_mem_copy(results + next_res_offset,
t_peer_stats + next_peer_offset,
peer_info_size);
@@ -4757,14 +4693,6 @@ static int wma_unified_link_peer_stats_event_handler(void *handle,
/* Copy rate stats associated with this peer */
for (count = 0; count < peer_stats->num_rates; count++) {
- WMA_LOGD("Rate Stats Info:");
- WMA_LOGD("rate %u bitrate %u tx_mpdu %u rx_mpdu %u "
- "mpdu_lost %u retries %u retries_short %u "
- "retries_long %u", rate_stats->rate,
- rate_stats->bitrate, rate_stats->tx_mpdu,
- rate_stats->rx_mpdu, rate_stats->mpdu_lost,
- rate_stats->retries, rate_stats->retries_short,
- rate_stats->retries_long);
rate_stats++;
vos_mem_copy(results + next_res_offset,
@@ -4784,7 +4712,6 @@ static int wma_unified_link_peer_stats_event_handler(void *handle,
pMac->sme.pLinkLayerStatsIndCallback(pMac->hHdd,
WDA_LINK_LAYER_STATS_RESULTS_RSP,
link_stats_results);
- WMA_LOGD("%s: Peer Stats event posted to HDD", __func__);
vos_mem_free(link_stats_results);
return 0;
@@ -4845,11 +4772,6 @@ static int wma_unified_radio_tx_power_level_stats_event_handler(void *handle,
rs_results = (tSirWifiRadioStat *) &link_stats_results->results[0];
tx_power_level_values = (uint8 *) param_tlvs->tx_time_per_power_level;
- WMA_LOGD("%s: total_num_tx_power_levels: %u num_tx_power_levels: %u power_level_offset: %u",
- __func__, fixed_param->total_num_tx_power_levels,
- fixed_param->num_tx_power_levels,
- fixed_param->power_level_offset);
-
rs_results->total_num_tx_power_levels =
fixed_param->total_num_tx_power_levels;
if (!rs_results->total_num_tx_power_levels)
@@ -4874,9 +4796,6 @@ static int wma_unified_radio_tx_power_level_stats_event_handler(void *handle,
(fixed_param->num_tx_power_levels + fixed_param->power_level_offset))
link_stats_results->moreResultToFollow = 0;
- WMA_LOGD("%s: moreResultToFollow: %u",
- __func__, link_stats_results->moreResultToFollow);
-
/* If still data to receive, return from here */
if (link_stats_results->moreResultToFollow)
return 0;
@@ -4889,7 +4808,6 @@ post_stats:
pMac->sme.pLinkLayerStatsIndCallback(pMac->hHdd,
WDA_LINK_LAYER_STATS_RESULTS_RSP,
link_stats_results);
- WMA_LOGD("%s: Radio Stats event posted to HDD", __func__);
vos_mem_free(rs_results->tx_time_per_power_level);
rs_results->tx_time_per_power_level = NULL;
vos_mem_free(wma_handle->link_stats_results);
@@ -4963,22 +4881,6 @@ static int wma_unified_link_radio_stats_event_handler(void *handle,
return -ENOMEM;
}
- WMA_LOGD("request_id %u num_radio %u more_radio_events %u",
- fixed_param->request_id, fixed_param->num_radio,
- fixed_param->more_radio_events);
-
- WMA_LOGD("Radio Info: radio_id %u on_time %u tx_time %u rx_time %u on_time_scan %u "
- "on_time_nbd %u on_time_gscan %u on_time_roam_scan %u "
- "on_time_pno_scan %u on_time_hs20 %u num_channels %u",
- radio_stats->radio_id, radio_stats->on_time,
- radio_stats->tx_time, radio_stats->rx_time,
- radio_stats->on_time_scan, radio_stats->on_time_nbd,
- radio_stats->on_time_gscan,
- radio_stats->on_time_roam_scan,
- radio_stats->on_time_pno_scan,
- radio_stats->on_time_hs20,
- radio_stats->num_channels);
-
link_stats_results = wma_handle->link_stats_results;
vos_mem_zero(link_stats_results, link_stats_results_size);
@@ -5019,14 +4921,7 @@ static int wma_unified_link_radio_stats_event_handler(void *handle,
chn_results = (tSirWifiChannelStats *) &rs_results->channels[0];
next_chan_offset = WMI_TLV_HDR_SIZE;
- WMA_LOGD("Channel Stats Info");
for (count = 0; count < radio_stats->num_channels; count++) {
- WMA_LOGD("channel_width %u center_freq %u center_freq0 %u "
- "center_freq1 %u radio_awake_time %u cca_busy_time %u",
- channel_stats->channel_width, channel_stats->center_freq,
- channel_stats->center_freq0, channel_stats->center_freq1,
- channel_stats->radio_awake_time,
- channel_stats->cca_busy_time);
channel_stats++;
vos_mem_copy(chn_results,
@@ -5045,11 +4940,159 @@ static int wma_unified_link_radio_stats_event_handler(void *handle,
WDA_LINK_LAYER_STATS_RESULTS_RSP,
link_stats_results);
vos_mem_free(wma_handle->link_stats_results);
+ WMA_LOGD(FL("Radio Stats event posted to HDD"));
wma_handle->link_stats_results = NULL;
return 0;
}
+/**
+ * wma_peer_ps_evt_handler() - handler for PEER power state change.
+ * @handle: wma handle
+ * @event: FW event
+ * @len: length of FW event
+ *
+ * Once peer STA power state changes, an event will be indicated by
+ * FW. This function send a link layer state change msg to HDD. HDD
+ * link layer callback will converts the event to NL msg.
+ *
+ * Return: 0 Success. Others fail.
+ */
+static int wma_peer_ps_evt_handler(void *handle, u_int8_t *event,
+ u_int32_t len)
+{
+ tp_wma_handle wma_handle = (tp_wma_handle) handle;
+ WMI_PEER_STA_PS_STATECHG_EVENTID_param_tlvs *param_buf;
+ wmi_peer_sta_ps_statechange_event_fixed_param *fixed_param;
+ tSirWifiPeerStat *peer_stat;
+ tSirWifiPeerInfo *peer_info;
+ tSirLLStatsResults *link_stats_results;
+ tSirMacAddr mac_address;
+ uint32_t result_len;
+ tpAniSirGlobal mac;
+ vos_msg_t vos_msg;
+
+ mac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE,
+ wma_handle->vos_context);
+ if (!mac) {
+ WMA_LOGD("%s: NULL mac ptr. Exiting", __func__);
+ return -EINVAL;
+ }
+
+ WMA_LOGD("%s: Posting Peer Stats PS event to HDD", __func__);
+
+ param_buf = (WMI_PEER_STA_PS_STATECHG_EVENTID_param_tlvs *)event;
+ fixed_param = param_buf->fixed_param;
+
+ result_len = sizeof(tSirLLStatsResults) +
+ sizeof(tSirWifiPeerStat) +
+ sizeof(tSirWifiPeerInfo);
+ link_stats_results = vos_mem_malloc(result_len);
+ if (link_stats_results == NULL) {
+ WMA_LOGE("%s: Cannot allocate link layer stats.", __func__);
+ return -EINVAL;
+ }
+ vos_mem_zero(link_stats_results, result_len);
+
+ WMI_MAC_ADDR_TO_CHAR_ARRAY(&fixed_param->peer_macaddr, &mac_address[0]);
+ WMA_LOGD("Peer power state change event from FW");
+ WMA_LOGD("Fixed Param:");
+ WMA_LOGD("MAC address: %2x:%2x:%2x:%2x:%2x:%2x, Power state: %d",
+ mac_address[0], mac_address[1], mac_address[2],
+ mac_address[3], mac_address[4], mac_address[5],
+ fixed_param->peer_ps_state);
+
+ link_stats_results->paramId = WMI_LL_STATS_EXT_PS_CHG;
+ link_stats_results->num_peers = 1;
+ link_stats_results->peer_event_number = 1;
+ link_stats_results->moreResultToFollow = 0;
+
+ peer_stat = (tSirWifiPeerStat *)link_stats_results->results;
+ peer_stat->numPeers = 1;
+ peer_info = (tSirWifiPeerInfo *)peer_stat->peerInfo;
+ vos_mem_copy(&peer_info->peerMacAddress,
+ &mac_address, sizeof(tSirMacAddr));
+ peer_info->power_saving = fixed_param->peer_ps_state;
+
+ vos_msg.type = eWMI_SME_LL_STATS_IND;
+ vos_msg.bodyptr = (void *)link_stats_results;
+ vos_msg.bodyval = 0;
+ if (VOS_STATUS_SUCCESS !=
+ vos_mq_post_message(VOS_MQ_ID_SME, &vos_msg)) {
+ WMA_LOGP(FL("Failed to post peer stat change msg!"));
+ vos_mem_free(link_stats_results);
+ return -EINVAL;
+ }
+ return 0;
+}
+
+/**
+ * wma_tx_failure_cb() - TX failure callback
+ * @ctx: txrx context
+ * @num_msdu: number of msdu with the same status
+ * @tid: TID number
+ * @status: failure status
+ * 1: TX packet discarded
+ * 2: No ACK
+ * 3: Postpone
+ */
+void wma_tx_failure_cb(void *ctx, uint32_t num_msdu, uint8_t tid, uint32 status)
+{
+ tSirLLStatsResults *results;
+ struct sir_wifi_iface_tx_fail *tx_fail;
+ void *vos_context = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
+ tpAniSirGlobal mac;
+ uint32_t len;
+ vos_msg_t vos_msg;
+
+ mac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE, vos_context);
+ if (!mac) {
+ WMA_LOGD("%s: NULL mac ptr. Exiting", __func__);
+ return;
+ }
+
+ len = sizeof(tSirLLStatsResults) +
+ sizeof(struct sir_wifi_iface_tx_fail);
+ results = vos_mem_malloc(len);
+ if (results == NULL) {
+ WMA_LOGE("%s: Cannot allocate link layer stats.", __func__);
+ return;
+ }
+
+ vos_mem_zero(results, len);
+ results->paramId = WMI_LL_STATS_EXT_TX_FAIL;
+ results->num_peers = 1;
+ results->peer_event_number = 1;
+ results->moreResultToFollow = 0;
+
+ tx_fail = (struct sir_wifi_iface_tx_fail *)results->results;
+ tx_fail->tid = tid;
+ tx_fail->msdu_num = num_msdu;
+ tx_fail->status = status;
+ vos_msg.type = eWMI_SME_LL_STATS_IND;
+ vos_msg.bodyptr = (void *)results;
+ vos_msg.bodyval = 0;
+ if (VOS_STATUS_SUCCESS !=
+ vos_mq_post_message(VOS_MQ_ID_SME, &vos_msg)) {
+ WMA_LOGP(FL("Failed to post tx failure msg!"));
+ vos_mem_free(results);
+ }
+}
+
+#else
+/**
+ * wma_tx_failure_cb() - TX failure callback
+ * @ctx: txrx context
+ * @num_msdu: number of msdu with the same status
+ * @tid: TID number
+ * @status: failure status
+ * 1: TX packet discarded
+ * 2: No ACK
+ * 3: Postpone
+ */
+void wma_tx_failure_cb(void *ctx, uint32_t num_msdu, uint8_t tid, uint32 status)
+{
+}
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
/**
@@ -5238,7 +5281,6 @@ static void wma_update_probe_resp_noa(tp_wma_handle wma_handle,
struct p2p_sub_element_noa *noa_ie)
{
tSirP2PNoaAttr *noa_attr = (tSirP2PNoaAttr *) vos_mem_malloc(sizeof(tSirP2PNoaAttr));
- WMA_LOGD("Received update NoA event");
if (!noa_attr) {
WMA_LOGE("Failed to allocate memory for tSirP2PNoaAttr");
return;
@@ -5253,7 +5295,6 @@ static void wma_update_probe_resp_noa(tp_wma_handle wma_handle,
WMA_LOGD("Zero NoA descriptors");
}
else {
- WMA_LOGD("%d NoA descriptors", noa_ie->num_descriptors);
noa_attr->uNoa1IntervalCnt =
noa_ie->noa_descriptors[0].type_count;
noa_attr->uNoa1Duration =
@@ -5273,8 +5314,7 @@ static void wma_update_probe_resp_noa(tp_wma_handle wma_handle,
noa_ie->noa_descriptors[1].start_time;
}
}
- WMA_LOGI("Sending SIR_HAL_P2P_NOA_ATTR_IND to LIM");
- wma_send_msg(wma_handle, SIR_HAL_P2P_NOA_ATTR_IND, (void *)noa_attr ,
+ wma_send_msg(wma_handle, SIR_HAL_P2P_NOA_ATTR_IND, (void *)noa_attr,
0);
}
@@ -5890,7 +5930,12 @@ static int wma_oem_data_response_handler(void *handle,
wma_send_msg(wma, WDA_START_OEM_DATA_RSP, (void *)oem_rsp, 0);
return 0;
}
-
+#else
+static inline int wma_oem_data_response_handler(void *handle,
+ uint8_t *datap, uint32_t len)
+{
+ return 0;
+}
#endif /* FEATURE_OEM_DATA_SUPPORT */
static int wma_p2p_noa_event_handler(void *handle, u_int8_t *event, u_int32_t len)
@@ -6543,6 +6588,9 @@ wma_register_ll_stats_event_handler(tp_wma_handle wma_handle)
wmi_unified_register_event_handler(wma_handle->wmi_handle,
WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID,
wma_unified_radio_tx_power_level_stats_event_handler);
+ wmi_unified_register_event_handler(wma_handle->wmi_handle,
+ WMI_PEER_STA_PS_STATECHG_EVENTID,
+ wma_peer_ps_evt_handler);
return;
}
@@ -6924,6 +6972,112 @@ static int wma_stats_ext_event_handler(void *handle, u_int8_t *event_buf,
}
#endif
+/**
+ * wma_chan_info_event_handler() - chan info event handler
+ * @handle: wma handle
+ * @event_buf: event handler data
+ * @len: length of @event_buf
+ *
+ * this function will handle the WMI_CHAN_INFO_EVENTID
+ *
+ * Return: int
+ */
+static int
+wma_chan_info_event_handler(void *handle, u_int8_t *event_buf,
+ u_int32_t len)
+{
+ tp_wma_handle wma = (tp_wma_handle)handle;
+ WMI_CHAN_INFO_EVENTID_param_tlvs *param_buf;
+ wmi_chan_info_event_fixed_param *event;
+ struct scan_chan_info buf;
+ tpAniSirGlobal mac = NULL;
+ struct lim_channel_status *channel_status;
+
+ WMA_LOGD("%s: Enter", __func__);
+
+ if (wma != NULL && wma->vos_context != NULL) {
+ mac = (tpAniSirGlobal)vos_get_context(VOS_MODULE_ID_PE,
+ wma->vos_context);
+ }
+ if (!mac) {
+ WMA_LOGE("%s: Invalid mac context", __func__);
+ return -EINVAL;
+ }
+
+ WMA_LOGD("%s: monitor:%d", __func__, mac->snr_monitor_enabled);
+ if (mac->snr_monitor_enabled && mac->chan_info_cb) {
+ param_buf =
+ (WMI_CHAN_INFO_EVENTID_param_tlvs *)event_buf;
+ if (!param_buf) {
+ WMA_LOGA("%s: Invalid chan info event", __func__);
+ return -EINVAL;
+ }
+
+ event = param_buf->fixed_param;
+ if (!event) {
+ WMA_LOGA("%s: Invalid fixed param", __func__);
+ return -EINVAL;
+ }
+ buf.tx_frame_count = event->tx_frame_cnt;
+ buf.clock_freq = event->mac_clk_mhz;
+ buf.cmd_flag = event->cmd_flags;
+ buf.freq = event->freq;
+ buf.noise_floor = event->noise_floor;
+ buf.cycle_count = event->cycle_count;
+ buf.rx_clear_count = event->rx_clear_count;
+ mac->chan_info_cb(&buf);
+ }
+
+ if (ACS_FW_REPORT_PARAM_CONFIGURED &&
+ mac->sme.currDeviceMode == VOS_STA_SAP_MODE &&
+ mac->scan.curScanType == eSIR_ACTIVE_SCAN) {
+ param_buf = (WMI_CHAN_INFO_EVENTID_param_tlvs *) event_buf;
+ if (!param_buf) {
+ WMA_LOGE("Invalid chan info event buffer");
+ return -EINVAL;
+ }
+ event = param_buf->fixed_param;
+ if (event->cmd_flags == WMA_CHAN_END_RESP) {
+ channel_status =
+ vos_mem_malloc(sizeof(*channel_status));
+ if (!channel_status) {
+ WMA_LOGE
+ (FL("Mem alloc fail"));
+ return -ENOMEM;
+ }
+ WMA_LOGI(
+ FL("freq=%d nf=%d rx_cnt=%d tx_pwr=%d"),
+ event->freq,
+ event->noise_floor,
+ event->rx_clear_count,
+ event->chan_tx_pwr_tp);
+
+ channel_status->channelfreq = event->freq;
+ channel_status->noise_floor = event->noise_floor;
+ channel_status->rx_clear_count =
+ event->rx_clear_count;
+ channel_status->cycle_count = event->cycle_count;
+ channel_status->chan_tx_pwr_range =
+ event->chan_tx_pwr_range;
+ channel_status->chan_tx_pwr_throughput =
+ event->chan_tx_pwr_tp;
+ channel_status->rx_frame_count =
+ event->rx_frame_count;
+ channel_status->bss_rx_cycle_count =
+ event->my_bss_rx_cycle_count;
+ channel_status->rx_11b_mode_data_duration =
+ event->rx_11b_mode_data_duration;
+ channel_status->channel_id =
+ vos_freq_to_chan(event->freq);
+
+ wma_send_msg(handle,
+ WDA_RX_CHN_STATUS_EVENT,
+ (void *) channel_status, 0);
+ }
+ }
+ return 0;
+}
+
static void
wma_register_extscan_event_handler(tp_wma_handle wma_handle)
{
@@ -7601,6 +7755,10 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx,
WMI_RSSI_BREACH_EVENTID,
wma_rssi_breached_event_handler);
+ wmi_unified_register_event_handler(wma_handle->wmi_handle,
+ WMI_CHAN_INFO_EVENTID,
+ wma_chan_info_event_handler);
+
wma_register_debug_callback();
wma_ndp_register_all_event_handlers(wma_handle);
@@ -9109,6 +9267,10 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
/* add DS param IE in probe req frame */
cmd->scan_ctrl_flags |= WMI_SCAN_ADD_DS_IE_IN_PROBE_REQ;
+ /* set flag to get chan stats */
+ if (pMac->snr_monitor_enabled)
+ cmd->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT;
+
/* do not add OFDM rates in 11B mode */
if (scan_req->dot11mode != WNI_CFG_DOT11_MODE_11B)
cmd->scan_ctrl_flags |= WMI_SCAN_ADD_OFDM_RATES;
@@ -9129,6 +9291,17 @@ VOS_STATUS wma_get_buf_start_scan_cmd(tp_wma_handle wma_handle,
if (scan_req->scanType == eSIR_PASSIVE_SCAN)
cmd->scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
+ if (ACS_FW_REPORT_PARAM_CONFIGURED) {
+ /* add chan stat info report tag */
+ if (scan_req->scanType == eSIR_ACTIVE_SCAN &&
+ scan_req->bssType == eSIR_INFRA_AP_MODE) {
+ cmd->scan_ctrl_flags |=
+ WMI_SCAN_CHAN_STAT_EVENT;
+ WMA_LOGI("set ACS ctrl BIT");
+ }
+ }
+
+
cmd->scan_ctrl_flags |= WMI_SCAN_ADD_TPC_IE_IN_PROBE_REQ;
cmd->scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
@@ -9748,8 +9921,6 @@ VOS_STATUS wma_start_scan(tp_wma_handle wma_handle,
goto error;
}
- WMA_LOGI("WMA --> WMI_START_SCAN_CMDID");
-
/* Update the scan parameters for handler */
wma_handle->wma_scan_timer_info.vdev_id = vdev_id;
wma_handle->wma_scan_timer_info.scan_id = scan_id;
@@ -12790,8 +12961,6 @@ void wma_vdev_resp_timer(void *data)
}
WMA_LOGI("%s: bssid %pM vdev_id %d", __func__, params->bssId,
tgt_req->vdev_id);
- wma_send_msg(wma, WDA_ADD_BSS_RSP, (void *)params, 0);
- goto free_tgt_req;
error0:
if (peer)
wma_remove_peer(wma, params->bssId,
@@ -16174,19 +16343,12 @@ static void wma_add_bss(tp_wma_handle wma, tpAddBssParams params)
switch(params->halPersona) {
- case VOS_STA_SAP_MODE:
- /*If current bring up SAP channel matches the previous
- *radar found channel then reset the last_radar_found_chan
- *variable to avoid race conditions.
- */
- if (params->currentOperChannel ==
- wma->dfs_ic->last_radar_found_chan)
- wma->dfs_ic->last_radar_found_chan = 0;
- case VOS_P2P_GO_MODE:
- /*If current bring up P2P channel matches the previous
- *radar found channel then reset the last_radar_found_chan
- *variable to avoid race conditions.
- */
+ /*If current bring up SAP or P2P channel matches the previous
+ *radar found channel then reset the last_radar_found_chan
+ *variable to avoid race conditions.
+ */
+ case VOS_STA_SAP_MODE:
+ case VOS_P2P_GO_MODE:
if (params->currentOperChannel ==
wma->dfs_ic->last_radar_found_chan)
wma->dfs_ic->last_radar_found_chan = 0;
@@ -16702,7 +16864,7 @@ static void wma_add_tdls_sta(tp_wma_handle wma, tpAddStaParams add_sta)
if (0 == add_sta->updateSta) {
/* its a add sta request **/
#if defined(CONFIG_HL_SUPPORT)
- if (add_sta->bssId && vdev->last_real_peer &&
+ if (vdev->last_real_peer &&
(adf_os_mem_cmp((u8 *)add_sta->bssId,
vdev->last_real_peer->mac_addr.raw,
IEEE80211_ADDR_LEN) == 0)) {
@@ -20994,15 +21156,13 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
adf_os_cpu_to_be16(ether_type)) {
if (len >= WMA_EAPOL_SUBTYPE_GET_MIN_LEN)
return adf_nbuf_data_get_eapol_subtype(data);
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "EAPOL Packet");
+ WMA_LOGD("EAPOL Packet");
return ADF_PROTO_INVALID;
} else if (ADF_NBUF_TRAC_ARP_ETH_TYPE ==
adf_os_cpu_to_be16(ether_type)) {
if (len >= WMA_ARP_SUBTYPE_GET_MIN_LEN)
return adf_nbuf_data_get_arp_subtype(data);
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "ARP Packet");
+ WMA_LOGD("ARP Packet");
return ADF_PROTO_INVALID;
} else if (ADF_NBUF_TRAC_IPV4_ETH_TYPE ==
adf_os_cpu_to_be16(ether_type)) {
@@ -21015,8 +21175,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
if (len >= WMA_ICMP_SUBTYPE_GET_MIN_LEN)
return adf_nbuf_data_get_icmp_subtype(
data);
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "ICMP Packet");
+ WMA_LOGD("ICMP Packet");
return ADF_PROTO_INVALID;
} else if (proto_type == ADF_NBUF_TRAC_UDP_TYPE) {
if (len >= WMA_IS_DHCP_GET_MIN_LEN) {
@@ -21024,9 +21183,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
if (len >=
WMA_DHCP_SUBTYPE_GET_MIN_LEN)
return adf_nbuf_data_get_dhcp_subtype(data);
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR,
- "DHCP Packet");
+ WMA_LOGD("DHCP Packet");
return ADF_PROTO_INVALID;
}
}
@@ -21035,8 +21192,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
return ADF_PROTO_IPV4_TCP;
}
}
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "IPV4 Packet");
+ WMA_LOGD("IPV4 Packet");
return ADF_PROTO_INVALID;
} else if (ADF_NBUF_TRAC_IPV6_ETH_TYPE ==
adf_os_cpu_to_be16(ether_type)) {
@@ -21044,13 +21200,12 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
uint8_t proto_type;
proto_type = adf_nbuf_data_get_ipv6_proto(data);
- WMA_LOGE("IPV6_proto_type: %u", proto_type);
+ WMA_LOGD("IPV6_proto_type: %u", proto_type);
if (proto_type == ADF_NBUF_TRAC_ICMPV6_TYPE) {
if (len >= WMA_ICMPV6_SUBTYPE_GET_MIN_LEN)
return adf_nbuf_data_get_icmpv6_subtype(
data);
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "ICMPV6 Packet");
+ WMA_LOGD("ICMPV6 Packet");
return ADF_PROTO_INVALID;
} else if (proto_type == ADF_NBUF_TRAC_UDP_TYPE) {
return ADF_PROTO_IPV6_UDP;
@@ -21058,8 +21213,7 @@ wma_wow_get_pkt_proto_subtype(uint8_t *data,
return ADF_PROTO_IPV6_TCP;
}
}
- VOS_TRACE(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_ERROR, "IPV6 Packet");
+ WMA_LOGD("IPV6 Packet");
return ADF_PROTO_INVALID;
}
@@ -21107,7 +21261,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
EAPOL_PKT_LEN_OFFSET));
key_len = (uint16_t)(*(uint16_t *)(data +
EAPOL_KEY_LEN_OFFSET));
- WMA_LOGE("Pkt_len: %u, Key_len: %u",
+ WMA_LOGD("Pkt_len: %u, Key_len: %u",
adf_os_cpu_to_be16(pkt_len),
adf_os_cpu_to_be16(key_len));
}
@@ -21128,7 +21282,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
DHCP_PKT_LEN_OFFSET));
transaction_id = (uint32_t)(*(uint32_t *)(data +
DHCP_TRANSACTION_ID_OFFSET));
- WMA_LOGE("Pkt_len: %u, Transaction_id: %u",
+ WMA_LOGD("Pkt_len: %u, Transaction_id: %u",
adf_os_cpu_to_be16(pkt_len),
adf_os_cpu_to_be32(transaction_id));
}
@@ -21149,7 +21303,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
IPV4_PKT_LEN_OFFSET));
seq_num = (uint16_t)(*(uint16_t *)(data +
ICMP_SEQ_NUM_OFFSET));
- WMA_LOGE("Pkt_len: %u, Seq_num: %u",
+ WMA_LOGD("Pkt_len: %u, Seq_num: %u",
adf_os_cpu_to_be16(pkt_len),
adf_os_cpu_to_be16(seq_num));
}
@@ -21164,7 +21318,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
IPV6_PKT_LEN_OFFSET));
seq_num = (uint16_t)(*(uint16_t *)(data +
ICMPV6_SEQ_NUM_OFFSET));
- WMA_LOGE("Pkt_len: %u, Seq_num: %u",
+ WMA_LOGD("Pkt_len: %u, Seq_num: %u",
adf_os_cpu_to_be16(pkt_len),
adf_os_cpu_to_be16(seq_num));
}
@@ -21189,7 +21343,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
if (proto_subtype == ADF_PROTO_IPV4_TCP) {
tcp_seq_num = (uint32_t)(*(uint32_t *)(data +
IPV4_TCP_SEQ_NUM_OFFSET));
- WMA_LOGE("TCP_seq_num: %u",
+ WMA_LOGD("TCP_seq_num: %u",
adf_os_cpu_to_be32(tcp_seq_num));
}
}
@@ -21206,9 +21360,9 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
IPV6_SRC_PORT_OFFSET));
dst_port = (uint16_t)(*(uint16_t *)(data +
IPV6_DST_PORT_OFFSET));
- WMA_LOGE("Pkt_len: %u",
+ WMA_LOGD("Pkt_len: %u",
adf_os_cpu_to_be16(pkt_len));
- WMA_LOGE("src_port: %u, dst_port: %u",
+ WMA_LOGD("src_port: %u, dst_port: %u",
adf_os_cpu_to_be16(src_port),
adf_os_cpu_to_be16(dst_port));
if (proto_subtype == ADF_PROTO_IPV6_TCP) {
@@ -21222,8 +21376,8 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
default:
end:
- WMA_LOGE("wow_buf_pkt_len: %u", buf_len);
- WMA_LOGE("Unknown Packet or Insufficient packet buffer");
+ WMA_LOGD("wow_buf_pkt_len: %u", buf_len);
+ WMA_LOGD("Unknown Packet or Insufficient packet buffer");
break;
}
}
@@ -26906,12 +27060,6 @@ static VOS_STATUS wma_process_ll_stats_clearReq
WMI_CHAR_ARRAY_TO_MAC_ADDR(wma->interfaces[clearReq->staId].addr,
&cmd->peer_macaddr);
- WMA_LOGD("LINK_LAYER_STATS - Clear Request Params");
- WMA_LOGD("StopReq : %d", cmd->stop_stats_collection_req);
- WMA_LOGD("Vdev Id : %d", cmd->vdev_id);
- WMA_LOGD("Clear Stat Mask : %d", cmd->stats_clear_req_mask);
- WMA_LOGD("Peer MAC Addr : %pM", wma->interfaces[clearReq->staId].addr);
-
ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len,
WMI_CLEAR_LINK_STATS_CMDID);
if (ret) {
@@ -26920,7 +27068,6 @@ static VOS_STATUS wma_process_ll_stats_clearReq
return VOS_STATUS_E_FAILURE;
}
- WMA_LOGD("Clear Link Layer Stats request sent successfully");
return VOS_STATUS_SUCCESS;
}
@@ -27021,12 +27168,6 @@ static VOS_STATUS wma_process_ll_stats_getReq
WMI_CHAR_ARRAY_TO_MAC_ADDR(wma->interfaces[getReq->staId].addr,
&cmd->peer_macaddr);
- WMA_LOGD("LINK_LAYER_STATS - Get Request Params");
- WMA_LOGD("Request ID : %d", cmd->request_id);
- WMA_LOGD("Stats Type : %d", cmd->stats_type);
- WMA_LOGD("Vdev ID : %d", cmd->vdev_id);
- WMA_LOGD("Peer MAC Addr : %pM", wma->interfaces[getReq->staId].addr);
-
ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len,
WMI_REQUEST_LINK_STATS_CMDID);
if (ret) {
@@ -27035,7 +27176,6 @@ static VOS_STATUS wma_process_ll_stats_getReq
return VOS_STATUS_E_FAILURE;
}
- WMA_LOGD("Get Link Layer Stats request sent successfully");
return VOS_STATUS_SUCCESS;
}
@@ -29718,6 +29858,57 @@ static inline VOS_STATUS wma_send_wow_pulse_cmd(tp_wma_handle wma_handle,
}
#endif
+/**
+* wma_send_wakeup_gpio_cmd() - send wmi cmd of wakeup gpio cmd
+* infomation to fw.
+* @wma_handle: wma handler
+* @wakeup_gpio_cmd: wakeup_gpio_mode pointer
+*
+* Return: Return VOS_STATUS
+*/
+static VOS_STATUS wma_send_wakeup_gpio_cmd(tp_wma_handle wma_handle,
+ struct wakeup_gpio_mode *wakeup_gpio_cmd)
+{
+ VOS_STATUS vos_status = VOS_STATUS_SUCCESS;
+ wmi_buf_t buf;
+ WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param *cmd;
+ u_int16_t len;
+
+ WMA_LOGD("%s: Enter", __func__);
+ len = sizeof(*cmd);
+ buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
+ if (!buf) {
+ WMA_LOGE("wmi_buf_alloc failed");
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ cmd = (WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param *)wmi_buf_data(buf);
+
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(
+ WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param));
+
+ cmd->host_wakeup_gpio = wakeup_gpio_cmd->host_wakeup_gpio;
+ cmd->host_wakeup_type = wakeup_gpio_cmd->host_wakeup_type;
+ cmd->target_wakeup_gpio = wakeup_gpio_cmd->target_wakeup_gpio;
+ cmd->target_wakeup_type = wakeup_gpio_cmd->target_wakeup_type;
+
+ WMA_LOGD("%s:host gpio:%d host type:%d target gpio:%d target type:%d",
+ __func__, cmd->host_wakeup_gpio, cmd->host_wakeup_type,
+ cmd->target_wakeup_gpio, cmd->target_wakeup_type);
+
+ if (wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
+ WMI_PDEV_SET_WAKEUP_CONFIG_CMDID)) {
+ WMA_LOGE("Failed to send wakeup gpio cmd");
+ wmi_buf_free(buf);
+ vos_status = VOS_STATUS_E_FAILURE;
+ }
+
+ WMA_LOGD("%s: Exit", __func__);
+ return vos_status;
+}
+
/*
* wma_update_wep_default_key - function to update default key id
* @wma: pointer to wma handler
@@ -29941,7 +30132,6 @@ static VOS_STATUS wma_set_beacon_filter(tp_wma_handle wma,
wmi_buf_free(wmi_buf);
return VOS_STATUS_E_FAILURE;
}
- WMA_LOGD("added beacon filter = %d", vos_status);
return vos_status;
}
@@ -29988,7 +30178,6 @@ static VOS_STATUS wma_remove_beacon_filter(tp_wma_handle wma,
wmi_buf_free(buf);
return VOS_STATUS_E_FAILURE;
}
- WMA_LOGA("removed beacon filter = %d", vos_status);
return vos_status;
}
@@ -30445,6 +30634,61 @@ static void wma_update_sta_inactivity_timeout(tp_wma_handle wma,
}
/*
+ * wma_update_sta_inactivity_timeout() - Set sta_inactivity_timeout to fw
+ * @wma_handle: WMA handle
+ * @sta_inactivity_timer: sme_sta_inactivity_timeout
+ *
+ * This function is used to set sta_inactivity_timeout.
+ * If a station does not send anything in sta_inactivity_timeout seconds, an
+ * empty data frame is sent to it in order to verify whether it is
+ * still in range. If this frame is not ACKed, the station will be
+ * disassociated and then deauthenticated.
+ *
+ * Return: None
+ */
+static void wma_update_sta_inactivity_timeout(tp_wma_handle wma,
+ struct sme_sta_inactivity_timeout *sta_inactivity_timer)
+{
+ u_int8_t vdev_id;
+ u_int32_t max_unresponsive_time;
+ u_int32_t min_inactive_time, max_inactive_time;
+
+ if (!wma || !wma->wmi_handle) {
+ WMA_LOGE(FL("WMA is closed, can not issue sta_inactivity_timeout"));
+ return;
+ }
+ vdev_id = sta_inactivity_timer->session_id;
+ max_unresponsive_time = sta_inactivity_timer->sta_inactivity_timeout;
+ max_inactive_time = max_unresponsive_time* 2/3;
+ min_inactive_time = max_unresponsive_time - max_inactive_time ;
+
+ if (wmi_unified_vdev_set_param_send(wma->wmi_handle,
+ vdev_id,
+ WMI_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS,
+ min_inactive_time))
+ WMA_LOGE("Failed to Set AP MIN IDLE INACTIVE TIME");
+
+ if (wmi_unified_vdev_set_param_send(wma->wmi_handle,
+ vdev_id,
+ WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS,
+ max_inactive_time))
+ WMA_LOGE("Failed to Set AP MAX IDLE INACTIVE TIME");
+
+
+ if (wmi_unified_vdev_set_param_send(wma->wmi_handle,
+ vdev_id,
+ WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS,
+ max_unresponsive_time))
+ WMA_LOGE("Failed to Set MAX UNRESPONSIVE TIME");
+
+ WMA_LOGD("%s:vdev_id:%d min_inactive_time: %u max_inactive_time: %u"
+ " max_unresponsive_time: %u", __func__, vdev_id,
+ min_inactive_time, max_inactive_time, max_unresponsive_time);
+
+ return;
+}
+
+/*
* function : wma_mc_process_msg
* Description :
* Args :
@@ -31264,6 +31508,11 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
(struct wow_pulse_mode *)msg->bodyptr);
vos_mem_free(msg->bodyptr);
break;
+ case WDA_SET_WAKEUP_GPIO_CMD:
+ wma_send_wakeup_gpio_cmd(wma_handle,
+ (struct wakeup_gpio_mode *)msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
case WDA_UPDATE_WEP_DEFAULT_KEY:
wma_update_wep_default_key(wma_handle,
(struct wep_update_default_key_idx *)msg->bodyptr);
@@ -36189,6 +36438,7 @@ struct ieee80211com* wma_dfs_attach(struct ieee80211com *dfs_ic)
return dfs_ic;
}
+#ifdef ATH_SUPPORT_DFS
/*
* Configures Radar Filters during
* vdev start/channel change/regulatory domain
@@ -36391,6 +36641,22 @@ void wma_set_dfs_regdomain(tp_wma_handle wma, uint8_t dfs_region)
WMA_LOGI("%s: DFS Region Domain: %d", __func__,
wma->dfs_ic->current_dfs_regdomain);
}
+#else
+void wma_dfs_configure(struct ieee80211com *ic)
+{
+}
+void wma_set_dfs_regdomain(tp_wma_handle wma, uint8_t dfs_region)
+{
+}
+struct ieee80211_channel *
+wma_dfs_configure_channel(struct ieee80211com *dfs_ic,
+ wmi_channel *chan,
+ WLAN_PHY_MODE chanmode,
+ struct wma_vdev_start_req *req)
+{
+ return NULL;
+}
+#endif
int wma_get_channels(struct ieee80211_channel *ichan,
struct wma_dfs_radar_channel_list *chan_list)
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 7dc0f3f325bb..ca75efb2d2de 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -294,6 +294,9 @@ static const t_probeTime_dwellTime
#define WMA_EXTSCAN_BURST_DURATION 150
#endif
+#define WMA_CHAN_START_RESP 0
+#define WMA_CHAN_END_RESP 1
+
typedef void (*txFailIndCallback)(u_int8_t *peer_mac, u_int8_t seqNo);
typedef struct {
diff --git a/CORE/SERVICES/WMA/wma_dfs_interface.c b/CORE/SERVICES/WMA/wma_dfs_interface.c
index edd5a80cc7fd..7cbd1670810f 100644
--- a/CORE/SERVICES/WMA/wma_dfs_interface.c
+++ b/CORE/SERVICES/WMA/wma_dfs_interface.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -60,10 +60,6 @@
#include "ath_dfs_structs.h"
#include "wma_dfs_interface.h"
-#ifndef ATH_SUPPORT_DFS
-#define ATH_SUPPORT_DFS 1
-#endif
-
int
ol_if_dfs_attach(struct ieee80211com *ic, void *ptr, void *radar_info)
{
@@ -208,7 +204,7 @@ ol_if_dfs_get_mib_cycle_counts_pct(struct ieee80211com *ic,
u_int16_t
ol_if_dfs_usenol(struct ieee80211com *ic)
{
-#if ATH_SUPPORT_DFS
+#ifdef ATH_SUPPORT_DFS
return(dfs_usenol(ic));
#else
return (0);
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
index a79cabf3ebbe..c5c5a312c17d 100644
--- a/CORE/SERVICES/WMI/wmi_unified.c
+++ b/CORE/SERVICES/WMI/wmi_unified.c
@@ -719,6 +719,7 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command)
CASE_RETURN_STRING(WMI_COEX_GET_ANTENNA_ISOLATION_CMDID);
CASE_RETURN_STRING(WMI_PDEV_SET_STATS_THRESHOLD_CMDID);
CASE_RETURN_STRING(WMI_REQUEST_WLAN_STATS_CMDID);
+ CASE_RETURN_STRING(WMI_VDEV_ENCRYPT_DECRYPT_DATA_REQ_CMDID);
}
return "Invalid WMI cmd";
}
@@ -1294,6 +1295,8 @@ void wmi_htc_tx_complete(void *ctx, HTC_PACKET *htc_pkt)
{
struct wmi_unified *wmi_handle = (struct wmi_unified *)ctx;
wmi_buf_t wmi_cmd_buf = GET_HTC_PACKET_NET_BUF_CONTEXT(htc_pkt);
+ u_int8_t *buf_ptr;
+ u_int32_t len;
#ifdef WMI_INTERFACE_EVENT_LOGGING
u_int32_t cmd_id;
#endif
@@ -1309,6 +1312,9 @@ void wmi_htc_tx_complete(void *ctx, HTC_PACKET *htc_pkt)
((u_int32_t *)adf_nbuf_data(wmi_cmd_buf) + 2));
adf_os_spin_unlock_bh(&wmi_handle->wmi_record_lock);
#endif
+ buf_ptr = (u_int8_t *) wmi_buf_data(wmi_cmd_buf);
+ len = adf_nbuf_len(wmi_cmd_buf);
+ OS_MEMZERO(buf_ptr, len);
adf_nbuf_free(wmi_cmd_buf);
adf_os_mem_free(htc_pkt);
adf_os_atomic_dec(&wmi_handle->pending_cmds);
diff --git a/CORE/SME/inc/btcApi.h b/CORE/SME/inc/btcApi.h
deleted file mode 100644
index 9a06f7c715a1..000000000000
--- a/CORE/SME/inc/btcApi.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/******************************************************************************
-*
-* Name: btcApi.h
-*
-* Description: BTC Events Layer API definitions.
-*
-
-*
-******************************************************************************/
-
-#ifndef __BTC_API_H__
-#define __BTC_API_H__
-
-#include "vos_types.h"
-#include "vos_timer.h"
-#include "vos_nvitem.h"
-
-#define BT_INVALID_CONN_HANDLE (0xFFFF) /**< Invalid connection handle */
-
-/* ACL and Sync connection attempt results */
-#define BT_CONN_STATUS_FAIL (0) /**< Connection failed */
-#define BT_CONN_STATUS_SUCCESS (1) /**< Connection successful */
-#define BT_CONN_STATUS_MAX (2) /**< This and beyond are invalid values */
-
-/** ACL and Sync link types
- These must match the Bluetooth Spec!
-*/
-#define BT_SCO (0) /**< SCO Link */
-#define BT_ACL (1) /**< ACL Link */
-#define BT_eSCO (2) /**< eSCO Link */
-#define BT_LINK_TYPE_MAX (3) /**< This value and higher are invalid */
-
-/** ACL link modes
- These must match the Bluetooth Spec!
-*/
-#define BT_ACL_ACTIVE (0) /**< Active mode */
-#define BT_ACL_HOLD (1) /**< Hold mode */
-#define BT_ACL_SNIFF (2) /**< Sniff mode */
-#define BT_ACL_PARK (3) /**< Park mode */
-#define BT_ACL_MODE_MAX (4) /**< This value and higher are invalid */
-
-/**
- * A2DP BTC max no of BT sub intervals
- *
- * **/
-#define BTC_MAX_NUM_ACL_BT_SUB_INTS (7)
-
-/** BTC Executions Modes allowed to be set by user
-*/
-#define BTC_SMART_COEXISTENCE (0) /** BTC Mapping Layer decides whats best */
-#define BTC_WLAN_ONLY (1) /** WLAN takes all mode */
-#define BTC_PTA_ONLY (2) /** Allow only 3 wire protocol in H/W */
-#define BTC_SMART_MAX_WLAN (3) /** BTC Mapping Layer decides whats best, WLAN weighted */
-#define BTC_SMART_MAX_BT (4) /** BTC Mapping Layer decides whats best, BT weighted */
-#define BTC_SMART_BT_A2DP (5) /** BTC Mapping Layer decides whats best, balanced + BT A2DP weight */
-#define BT_EXEC_MODE_MAX (6) /** This and beyond are invalid values */
-
-/** Bitmaps used for maintaining various BT events that requires
- enough time to complete such that it might require disbling of
- heartbeat monitoring to avoid WLAN link loss with the AP
-*/
-#define BT_INQUIRY_STARTED (1<<0)
-#define BT_PAGE_STARTED (1<<1)
-#define BT_CREATE_ACL_CONNECTION_STARTED (1<<2)
-#define BT_CREATE_SYNC_CONNECTION_STARTED (1<<3)
-
-/** Maximum time duration in milliseconds between a specific BT start event and its
- respective stop event, before it can be declared timed out on receiving the stop event.
-*/
-#define BT_MAX_EVENT_DONE_TIMEOUT 45000
-
-
-/*
- To suppurt multiple SCO connections for BT+UAPSD work
-*/
-#define BT_MAX_SCO_SUPPORT 3
-#define BT_MAX_ACL_SUPPORT 3
-#define BT_MAX_DISCONN_SUPPORT (BT_MAX_SCO_SUPPORT+BT_MAX_ACL_SUPPORT)
-#define BT_MAX_NUM_EVENT_ACL_DEFERRED 4 //We may need to defer these many BT events for ACL
-#define BT_MAX_NUM_EVENT_SCO_DEFERRED 4 //We may need to defer these many BT events for SYNC
-
-/*
- * Number of mws coex configurations
- */
-#define MWS_COEX_MAX_CONFIG 6
-
-/** Enumeration of all the different kinds of BT events
-*/
-typedef enum eSmeBtEventType
-{
- BT_EVENT_DEVICE_SWITCHED_ON,
- BT_EVENT_DEVICE_SWITCHED_OFF,
- BT_EVENT_INQUIRY_STARTED,
- BT_EVENT_INQUIRY_STOPPED,
- BT_EVENT_INQUIRY_SCAN_STARTED,
- BT_EVENT_INQUIRY_SCAN_STOPPED,
- BT_EVENT_PAGE_STARTED,
- BT_EVENT_PAGE_STOPPED,
- BT_EVENT_PAGE_SCAN_STARTED,
- BT_EVENT_PAGE_SCAN_STOPPED,
- BT_EVENT_CREATE_ACL_CONNECTION,
- BT_EVENT_ACL_CONNECTION_COMPLETE,
- BT_EVENT_CREATE_SYNC_CONNECTION,
- BT_EVENT_SYNC_CONNECTION_COMPLETE,
- BT_EVENT_SYNC_CONNECTION_UPDATED,
- BT_EVENT_DISCONNECTION_COMPLETE,
- BT_EVENT_MODE_CHANGED,
- BT_EVENT_A2DP_STREAM_START,
- BT_EVENT_A2DP_STREAM_STOP,
- BT_EVENT_TYPE_MAX, //This and beyond are invalid values
-} tSmeBtEventType;
-
-/**Data structure that specifies the needed event parameters for
- BT_EVENT_CREATE_ACL_CONNECTION and BT_EVENT_ACL_CONNECTION_COMPLETE
-*/
-typedef struct sSmeBtAclConnectionParam
-{
- v_U8_t bdAddr[6];
- v_U16_t connectionHandle;
- v_U8_t status;
-} tSmeBtAclConnectionParam, *tpSmeBtAclConnectionParam;
-
-/** Data structure that specifies the needed event parameters for
- BT_EVENT_CREATE_SYNC_CONNECTION, BT_EVENT_SYNC_CONNECTION_COMPLETE
- and BT_EVENT_SYNC_CONNECTION_UPDATED
-*/
-typedef struct sSmeBtSyncConnectionParam
-{
- v_U8_t bdAddr[6];
- v_U16_t connectionHandle;
- v_U8_t status;
- v_U8_t linkType;
- v_U8_t scoInterval; //units in number of 625us slots
- v_U8_t scoWindow; //units in number of 625us slots
- v_U8_t retransmisisonWindow; //units in number of 625us slots
-} tSmeBtSyncConnectionParam, *tpSmeBtSyncConnectionParam;
-
-typedef struct sSmeBtSyncUpdateHist
-{
- tSmeBtSyncConnectionParam btSyncConnection;
- v_BOOL_t fValid;
-} tSmeBtSyncUpdateHist, *tpSmeBtSyncUpdateHist;
-
-/**Data structure that specifies the needed event parameters for
- BT_EVENT_MODE_CHANGED
-*/
-typedef struct sSmeBtAclModeChangeParam
-{
- v_U16_t connectionHandle;
- v_U8_t mode;
-} tSmeBtAclModeChangeParam, *tpSmeBtAclModeChangeParam;
-
-/*Data structure that specifies the needed event parameters for
- BT_EVENT_DISCONNECTION_COMPLETE
-*/
-typedef struct sSmeBtDisconnectParam
-{
- v_U16_t connectionHandle;
-} tSmeBtDisconnectParam, *tpSmeBtDisconnectParam;
-
-/*Data structure that specifies the needed event parameters for
- BT_EVENT_A2DP_STREAM_START
- BT_EVENT_A2DP_STREAM_STOP
-*/
-typedef struct sSmeBtA2DPParam
-{
- v_U8_t bdAddr[6];
-} tSmeBtA2DPParam, *tpSmeBtA2DPParam;
-
-
-/** Generic Bluetooth Event structure for BTC
-*/
-typedef struct sSmeBtcBtEvent
-{
- tSmeBtEventType btEventType;
- union
- {
- v_U8_t bdAddr[6]; /**< For events with only a BT Addr in event_data */
- tSmeBtAclConnectionParam btAclConnection;
- tSmeBtSyncConnectionParam btSyncConnection;
- tSmeBtDisconnectParam btDisconnect;
- tSmeBtAclModeChangeParam btAclModeChange;
- }uEventParam;
-} tSmeBtEvent, *tpSmeBtEvent;
-
-
-/** Data structure that specifies the BTC Configuration parameters
-*/
-typedef struct sSmeBtcConfig
-{
- v_U8_t btcExecutionMode;
- v_U32_t mwsCoexConfig[MWS_COEX_MAX_CONFIG];
-} tSmeBtcConfig, *tpSmeBtcConfig;
-
-
-typedef struct sSmeBtAclModeChangeEventHist
-{
- tSmeBtAclModeChangeParam btAclModeChange;
- v_BOOL_t fValid;
-} tSmeBtAclModeChangeEventHist, *tpSmeBtAclModeChangeEventHist;
-
-typedef struct sSmeBtAclEventHist
-{
- //At most, cached events are COMPLETION, DISCONNECT, CREATION, COMPLETION
- tSmeBtEventType btEventType[BT_MAX_NUM_EVENT_ACL_DEFERRED];
- tSmeBtAclConnectionParam btAclConnection[BT_MAX_NUM_EVENT_ACL_DEFERRED];
- //bNextEventIdx == 0 meaning no event cached here
- tANI_U8 bNextEventIdx;
-} tSmeBtAclEventHist, *tpSmeBtAclEventHist;
-
-typedef struct sSmeBtSyncEventHist
-{
- //At most, cached events are COMPLETION, DISCONNECT, CREATION, COMPLETION
- tSmeBtEventType btEventType[BT_MAX_NUM_EVENT_SCO_DEFERRED];
- tSmeBtSyncConnectionParam btSyncConnection[BT_MAX_NUM_EVENT_SCO_DEFERRED];
- //bNextEventIdx == 0 meaning no event cached here
- tANI_U8 bNextEventIdx;
-} tSmeBtSyncEventHist, *tpSmeBtSyncEventHist;
-
-typedef struct sSmeBtDisconnectEventHist
-{
- tSmeBtDisconnectParam btDisconnect;
- v_BOOL_t fValid;
-} tSmeBtDisconnectEventHist, *tpSmeBtDisconnectEventHist;
-
-
-/*
- Data structure for the history of BT events
-*/
-typedef struct sSmeBtcEventHist
-{
- tSmeBtSyncEventHist btSyncConnectionEvent[BT_MAX_SCO_SUPPORT];
- tSmeBtAclEventHist btAclConnectionEvent[BT_MAX_ACL_SUPPORT];
- tSmeBtAclModeChangeEventHist btAclModeChangeEvent[BT_MAX_ACL_SUPPORT];
- tSmeBtDisconnectEventHist btDisconnectEvent[BT_MAX_DISCONN_SUPPORT];
- tSmeBtSyncUpdateHist btSyncUpdateEvent[BT_MAX_SCO_SUPPORT];
- int nInquiryEvent; //>0 for # of outstanding inquiriy starts
- //<0 for # of outstanding inquiry stops
- //0 == no inquiry event
- int nPageEvent; //>0 for # of outstanding page starts
- //<0 for # of outstanding page stops
- //0 == no page event
- v_BOOL_t fA2DPStarted;
- v_BOOL_t fA2DPStopped;
-} tSmeBtcEventHist, *tpSmeBtcEventHist;
-
-typedef struct sSmeBtcEventReplay
-{
- tSmeBtcEventHist btcEventHist;
- v_BOOL_t fBTSwitchOn;
- v_BOOL_t fBTSwitchOff;
- //This is not directly tied to BT event so leave it alone when processing BT events
- v_BOOL_t fRestoreHBMonitor;
-} tSmeBtcEventReplay, *tpSmeBtcEventReplay;
-
-typedef struct sSmeBtcInfo
-{
- tSmeBtcConfig btcConfig;
- v_BOOL_t btcReady;
- v_U8_t btcEventState;
- v_U8_t btcHBActive; /* Is HB currently active */
- v_U8_t btcHBCount; /* default HB count */
- vos_timer_t restoreHBTimer; /* Timer to restore heart beat */
- tSmeBtcEventReplay btcEventReplay;
- v_BOOL_t fReplayBTEvents;
- v_BOOL_t btcUapsdOk; /* Indicate whether BTC is ok with UAPSD */
- v_BOOL_t fA2DPTrafStop;/*flag to check A2DP_STOP event has come before MODE_CHANGED*/
- v_U16_t btcScoHandles[BT_MAX_SCO_SUPPORT]; /* Handles for SCO, if any*/
- v_BOOL_t fA2DPUp; /*remember whether A2DP is in session*/
- v_BOOL_t btcScanCompromise;
- v_U8_t btcBssfordisableaggr[VOS_MAC_ADDRESS_LEN];
-} tSmeBtcInfo, *tpSmeBtcInfo;
-
-
-/** Routine definitions
-*/
-
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
-VOS_STATUS btcOpen (tHalHandle hHal);
-VOS_STATUS btcClose (tHalHandle hHal);
-VOS_STATUS btcReady (tHalHandle hHal);
-VOS_STATUS btcSendCfgMsg(tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
-VOS_STATUS btcSignalBTEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent);
-VOS_STATUS btcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
-VOS_STATUS btcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
-/*
- Caller can check whether BTC's current event allows UAPSD. This doesn't affect
- BMPS.
- return: VOS_TRUE -- BTC is ready for UAPSD
- VOS_FALSE -- certain BT event is active, cannot enter UAPSD
-*/
-v_BOOL_t btcIsReadyForUapsd( tHalHandle hHal );
-eHalStatus btcHandleCoexInd(tHalHandle hHal, void* pMsg);
-#endif /* End of WLAN_MDM_CODE_REDUCTION_OPT */
-
-#endif
diff --git a/CORE/SME/inc/ccmApi.h b/CORE/SME/inc/ccmApi.h
index ddffaf0de083..b28b72077ef5 100644
--- a/CORE/SME/inc/ccmApi.h
+++ b/CORE/SME/inc/ccmApi.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2012,2014,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -39,7 +39,7 @@
#ifndef CCMAPI_H__
#define CCMAPI_H__
-#include "wniCfgSta.h"
+#include "wni_cfg.h"
#include "halTypes.h"
#define CCM_IS_RESULT_SUCCESS(result) (WNI_CFG_SUCCESS == (result) ||\
@@ -91,7 +91,7 @@ struct ccmlink {
typedef struct {
struct ccmlink reqQ ;
eCcmState state ;
- tCfgReq * comp[CFG_PARAM_MAX_NUM] ;
+ tCfgReq * comp[WNI_CFG_MAX] ;
tCfgReplay replay ;
void *lock;
} tCcm ;
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 3f7f473334b2..faef3b1e111e 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1146,6 +1146,7 @@ enum sta_roam_policy_dfs_mode {
struct csr_sta_roam_policy_params {
enum sta_roam_policy_dfs_mode dfs_mode;
bool skip_unsafe_channels;
+ uint8_t sap_operating_band;
};
typedef struct tagCsrConfigParam
@@ -1214,8 +1215,6 @@ typedef struct tagCsrConfigParam
tANI_U32 nInitialDwellTime; //in units of milliseconds
bool initial_scan_no_dfs_chnl;
- tANI_U32 nActiveMinChnTimeBtc; //in units of milliseconds
- tANI_U32 nActiveMaxChnTimeBtc; //in units of milliseconds
tANI_U32 disableAggWithBtc;
#ifdef WLAN_AP_STA_CONCURRENCY
tANI_U32 nPassiveMinChnTimeConc; //in units of milliseconds
@@ -1967,4 +1966,30 @@ typedef void (*csr_mib_stats_callback)
*/
typedef void (*tcsr_fw_state_callback)(void *context);
void csr_packetdump_timer_stop(void);
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+typedef struct _session_info{
+ tVOS_CON_MODE con_mode;
+ eCsrBand band;
+ v_U16_t och;
+ v_U16_t lfreq;
+ v_U16_t hfreq;
+ v_U16_t cfreq;
+ v_U16_t hbw;
+}session_info_t;
+tANI_BOOLEAN csr_find_all_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info,
+ v_U8_t * session_count);
+tANI_BOOLEAN csr_find_sta_session_info(
+ tHalHandle hHal,
+ session_info_t *info);
+tANI_BOOLEAN csr_create_sap_session_info(
+ tHalHandle hHal,
+ eCsrPhyMode sap_phymode,
+ v_U16_t sap_ch,
+ session_info_t *session_info);
+#endif
+struct lim_channel_status *csr_get_channel_status(
+ void *p_mac, uint32_t channel_id);
+void csr_clear_channel_status(void *p_mac);
#endif
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index c5f9b1e92310..761c7869a844 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -397,7 +397,6 @@ typedef struct tagScanCmd
csrScanCompleteCallback callback;
void *pContext;
eCsrScanReason reason;
- eCsrRoamState lastRoamState[CSR_ROAM_SESSION_MAX];
tCsrRoamProfile *pToRoamProfile;
tANI_U32 roamId; //this is the ID related to the pToRoamProfile
union
@@ -600,8 +599,6 @@ typedef struct tagCsrConfig
tANI_U32 nInitialDwellTime; //in units of milliseconds
bool initial_scan_no_dfs_chnl;
- tANI_U32 nActiveMinChnTimeBtc; //in units of milliseconds
- tANI_U32 nActiveMaxChnTimeBtc; //in units of milliseconds
tANI_U8 disableAggWithBtc;
#ifdef WLAN_AP_STA_CONCURRENCY
tANI_U32 nPassiveMinChnTimeConc; //in units of milliseconds
@@ -1065,6 +1062,7 @@ typedef struct tagCsrRoamSession
bool ch_switch_in_progress;
bool supported_nss_1x1;
bool disable_hi_rssi;
+ bool dhcp_done;
} tCsrRoamSession;
typedef struct tagCsrRoamStruct
@@ -1079,6 +1077,7 @@ typedef struct tagCsrRoamStruct
tCsrChannel base40MHzChannels; //center channels for 40MHz channels
eCsrRoamState curState[CSR_ROAM_SESSION_MAX];
eCsrRoamSubState curSubState[CSR_ROAM_SESSION_MAX];
+ eCsrRoamState prev_state[CSR_ROAM_SESSION_MAX];
//This may or may not have the up-to-date valid channel list
//It is used to get WNI_CFG_VALID_CHANNEL_LIST and not allocate memory all the time
tSirMacChanNum validChannelList[WNI_CFG_VALID_CHANNEL_LIST_LEN];
diff --git a/CORE/SME/inc/pmc.h b/CORE/SME/inc/pmc.h
index be81d8beee54..ef85339fc447 100644
--- a/CORE/SME/inc/pmc.h
+++ b/CORE/SME/inc/pmc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -155,6 +155,8 @@ typedef struct sPmcInfo
tANI_BOOLEAN bmpsRequestQueued; /*If a enter BMPS request is queued*/
tANI_BOOLEAN smpsEnabled; /* TRUE if SMPS is enabled */
tANI_BOOLEAN remainInPowerActiveTillDHCP; /* Remain in Power active till DHCP completes */
+ /* Remain in Power active till set key is done */
+ bool full_power_till_set_key;
tANI_U32 remainInPowerActiveThreshold; /*Remain in Power active till DHCP threshold*/
tANI_U32 impsPeriod; /* amount of time to remain in IMPS */
void (*impsCallbackRoutine) (void *callbackContext, eHalStatus status); /* routine to call when IMPS period
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index edcdd4f450ad..98a68639b5f6 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -178,6 +178,7 @@ typedef struct tagSmeStruct
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
void(*pLinkLayerStatsIndCallback)(void *callbackContext,
int indType, void *pRsp);
+ void (*link_layer_stats_ext_cb)(tSirLLStatsResults *rsp);
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
void (*pAutoShutdownNotificationCb) (void);
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index c27db0422e4e..38bb94e4b17e 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -50,10 +50,9 @@
#include "vos_lock.h"
#include "halTypes.h"
#include "sirApi.h"
-#include "btcApi.h"
#include "vos_nvitem.h"
#include "p2p_Api.h"
-#include "smeInternal.h"
+#include "smeInternal.h"
#include "regdomain.h"
#ifdef FEATURE_OEM_DATA_SUPPORT
@@ -126,7 +125,8 @@ typedef struct _smeConfigParams
#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
uint8_t f_prefer_non_dfs_on_radar;
uint32_t fine_time_meas_cap;
- int8_t first_scan_bucket_threshold;
+ int8_t first_scan_bucket_threshold;
+ bool snr_monitor_enabled;
} tSmeConfigParams, *tpSmeConfigParams;
typedef enum
@@ -792,6 +792,13 @@ eHalStatus sme_RoamConnectToLastProfile(tHalHandle hHal, tANI_U8 sessionId);
eHalStatus sme_RoamDisconnect(tHalHandle hHal, tANI_U8 sessionId, eCsrRoamDisconnectReason reason);
/* ---------------------------------------------------------------------------
+ \fn.sme_dhcp_done_ind
+ \brief a wrapper function to set dhcp done ind in sme session
+ \retun void.
+---------------------------------------------------------------------------*/
+void sme_dhcp_done_ind(tHalHandle hal, uint8_t session_id);
+
+/* ---------------------------------------------------------------------------
\fn sme_RoamStopBss
\brief a wrapper function to request CSR to stop bss
\param sessionId - sessionId of SoftAP
@@ -1843,50 +1850,6 @@ eHalStatus sme_DHCPStopInd( tHalHandle hHal,
tANI_U8 sessionId );
/* ---------------------------------------------------------------------------
- \fn sme_BtcSignalBtEvent
- \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the
- BT event type and the current operating mode of Libra (full power,
- BMPS, UAPSD etc), appropriate Bluetooth Coexistence (BTC) strategy
- would be employed.
- \param hHal - The handle returned by macOpen.
- \param pBtcBtEvent - Pointer to a caller allocated object of type tSmeBtEvent
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE BT Event not passed to HAL. This can happen
- if driver has not yet been initialized or if BTC
- Events Layer has been disabled.
- VOS_STATUS_SUCCESS BT Event passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcSignalBtEvent (tHalHandle hHal, tpSmeBtEvent pBtcBtEvent);
-
-/* ---------------------------------------------------------------------------
- \fn sme_BtcSetConfig
- \brief API to change the current Bluetooth Coexistence (BTC) configuration
- This function should be invoked only after CFG download has completed.
- Calling it after sme_HDDReadyInd is recommended.
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtcConfig. Caller owns the memory and is responsible
- for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE Config not passed to HAL.
- VOS_STATUS_SUCCESS Config passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
-
-/* ---------------------------------------------------------------------------
- \fn sme_BtcGetConfig
- \brief API to retrieve the current Bluetooth Coexistence (BTC) configuration
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type tSmeBtcConfig.
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE - failure
- VOS_STATUS_SUCCESS success
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
-
-/* ---------------------------------------------------------------------------
\fn sme_SetCfgPrivacy
\brief API to set configure privacy parameters
\param hHal - The handle returned by macOpen.
@@ -4264,6 +4227,9 @@ eHalStatus sme_SetLinkLayerStatsIndCB
void (*callbackRoutine) (void *callbackCtx, int indType, void *pRsp)
);
+eHalStatus sme_set_ll_ext_cb(tHalHandle hal,
+ void (*ll_stats_ext_cb)(tSirLLStatsResults *rsp));
+
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
eHalStatus sme_fw_mem_dump(tHalHandle hHal, void *recvd_req);
@@ -4543,6 +4509,16 @@ VOS_STATUS sme_set_btc_wlan_conn_params(uint32_t conn_val0,
VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
uint32_t antenna_isolation);
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_p2p_sta(uint32_t bt_interval,
+ uint32_t p2p_sta_interval);
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_sta(uint32_t bt_interval,
+ uint32_t sta_interval);
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_sap(uint32_t bt_interval,
+ uint32_t sap_interval);
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p(uint32_t bt_interval,
+ uint32_t p2p_interval);
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(uint32_t bt_interval,
+ uint32_t p2p_sta_interval);
uint8_t sme_is_any_session_in_connected_state(tHalHandle h_hal);
typedef void ( *tSmeSetThermalLevelCallback)(void *pContext, u_int8_t level);
@@ -4661,7 +4637,8 @@ eHalStatus sme_remove_bssid_from_scan_list(tHalHandle hal,
eHalStatus sme_update_sta_roam_policy(tHalHandle hal_handle,
enum sta_roam_policy_dfs_mode dfs_mode,
bool skip_unsafe_channels,
- uint8_t session_id);
+ uint8_t session_id,
+ uint8_t sap_operating_band);
eHalStatus sme_register_p2p_ack_ind_callback(tHalHandle hal,
sir_p2p_ack_ind_callback callback);
@@ -4677,4 +4654,25 @@ eHalStatus sme_update_long_retry_limit_threshold(tHalHandle hal_handle,
uint8_t session_id, uint8_t long_limit_count_th);
eHalStatus sme_update_sta_inactivity_timeout(tHalHandle hal_handle,
uint8_t session_id, uint32_t sta_inactivity_timeout);
+
+VOS_STATUS sme_set_wakeup_gpio(struct wakeup_gpio_mode *wakeup_gpio_info);
+
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+tANI_BOOLEAN sme_find_sta_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info);
+tANI_BOOLEAN sme_find_all_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info,
+ v_U8_t * session_count);
+tANI_BOOLEAN sme_create_sap_session_info(
+ tHalHandle hHal,
+ eCsrPhyMode sap_phymode,
+ v_U16_t sap_ch,
+ session_info_t *session_info);
+#endif
+
+void sme_set_chan_info_callback(tHalHandle hal_handle,
+ void (*callback)(struct scan_chan_info *chan_info));
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c
index 0d3e783cbddf..9546f70a9f4d 100644
--- a/CORE/SME/src/QoS/sme_Qos.c
+++ b/CORE/SME/src/QoS/sme_Qos.c
@@ -3386,14 +3386,7 @@ static void sme_QosCopyTspecInfo(tpAniSirGlobal pMac, sme_QosWmmTspecInfo *pTspe
pTspec->suspendInterval = pTspec_Info->suspension_interval;
pTspec->svcStartTime = pTspec_Info->svc_start_time;
pTspec->tsinfo.traffic.direction = pTspec_Info->ts_info.direction;
-
- //Make sure UAPSD is allowed. BTC may want to disable UAPSD while keep QoS setup
- if (pTspec_Info->ts_info.psb && btcIsReadyForUapsd(pMac)) {
- pTspec->tsinfo.traffic.psb = pTspec_Info->ts_info.psb;
- } else {
- pTspec->tsinfo.traffic.psb = 0;
- pTspec_Info->ts_info.psb = 0;
- }
+ pTspec->tsinfo.traffic.psb = pTspec_Info->ts_info.psb;
pTspec->tsinfo.traffic.tsid = pTspec_Info->ts_info.tid;
pTspec->tsinfo.traffic.userPrio = pTspec_Info->ts_info.up;
pTspec->tsinfo.traffic.accessPolicy = SME_QOS_ACCESS_POLICY_EDCA;
@@ -3503,15 +3496,7 @@ eHalStatus sme_QosCreateTspecRICIE(tpAniSirGlobal pMac, sme_QosWmmTspecInfo *pTs
ricIE.TSPEC.suspension_int = pTspec_Info->suspension_interval;
ricIE.TSPEC.service_start_time = pTspec_Info->svc_start_time;
ricIE.TSPEC.direction = pTspec_Info->ts_info.direction;
- //Make sure UAPSD is allowed. BTC may want to disable UAPSD while keep QoS setup
- if( pTspec_Info->ts_info.psb && btcIsReadyForUapsd(pMac) )
- {
- ricIE.TSPEC.psb = pTspec_Info->ts_info.psb;
- }
- else
- {
- ricIE.TSPEC.psb = 0;
- }
+ ricIE.TSPEC.psb = pTspec_Info->ts_info.psb;
ricIE.TSPEC.tsid = pTspec_Info->ts_info.tid;
ricIE.TSPEC.user_priority = pTspec_Info->ts_info.up;
ricIE.TSPEC.access_policy = SME_QOS_ACCESS_POLICY_EDCA;
@@ -3547,15 +3532,7 @@ eHalStatus sme_QosCreateTspecRICIE(tpAniSirGlobal pMac, sme_QosWmmTspecInfo *pTs
ricIE.WMMTSPEC.suspension_int = pTspec_Info->suspension_interval;
ricIE.WMMTSPEC.service_start_time = pTspec_Info->svc_start_time;
ricIE.WMMTSPEC.direction = pTspec_Info->ts_info.direction;
- //Make sure UAPSD is allowed. BTC may want to disable UAPSD while keep QoS setup
- if( pTspec_Info->ts_info.psb && btcIsReadyForUapsd(pMac) )
- {
- ricIE.WMMTSPEC.psb = pTspec_Info->ts_info.psb;
- }
- else
- {
- ricIE.WMMTSPEC.psb = 0;
- }
+ ricIE.WMMTSPEC.psb = pTspec_Info->ts_info.psb;
ricIE.WMMTSPEC.tsid = pTspec_Info->ts_info.tid;
ricIE.WMMTSPEC.user_priority = pTspec_Info->ts_info.up;
ricIE.WMMTSPEC.access_policy = SME_QOS_ACCESS_POLICY_EDCA;
@@ -4126,9 +4103,7 @@ eHalStatus sme_QosAddTsReq(tpAniSirGlobal pMac,
pMsg->req.tspec.svcStartTime = 0;
pMsg->req.tspec.tsinfo.traffic.direction = pTspec_Info->ts_info.direction;
//Make sure UAPSD is allowed. BTC may want to disable UAPSD while keep QoS setup
- if( pTspec_Info->ts_info.psb
- && btcIsReadyForUapsd(pMac)
- )
+ if( pTspec_Info->ts_info.psb)
{
pMsg->req.tspec.tsinfo.traffic.psb = pTspec_Info->ts_info.psb;
}
@@ -8371,14 +8346,7 @@ sme_QosStatusType sme_QosTriggerUapsdChange( tpAniSirGlobal pMac )
tCsrRoamModifyProfileFields modifyProfileFields;
//we need to do a reassoc on these AC
csrGetModifyProfileFields(pMac, sessionId, &modifyProfileFields);
- if( btcIsReadyForUapsd(pMac) )
- {
- modifyProfileFields.uapsd_mask = uapsd_mask;
- }
- else
- {
- modifyProfileFields.uapsd_mask = 0;
- }
+ modifyProfileFields.uapsd_mask = uapsd_mask;
//Do we need to inform HDD?
if(!HAL_STATUS_SUCCESS(sme_QosRequestReassoc(pMac, sessionId, &modifyProfileFields, VOS_TRUE)))
{
diff --git a/CORE/SME/src/btc/btcApi.c b/CORE/SME/src/btc/btcApi.c
deleted file mode 100644
index 2615d71aa77c..000000000000
--- a/CORE/SME/src/btc/btcApi.c
+++ /dev/null
@@ -1,2075 +0,0 @@
-/*
- * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/******************************************************************************
-*
-* Name: btcApi.c
-*
-* Description: Routines that make up the BTC API.
-*
-
-*
-******************************************************************************/
-#include "wlan_qct_wda.h"
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
-#include "aniGlobal.h"
-#include "smsDebug.h"
-#include "btcApi.h"
-#include "cfgApi.h"
-#include "pmc.h"
-#include "smeQosInternal.h"
-#include "sme_Trace.h"
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
-#include "vos_diag_core_event.h"
-#include "vos_diag_core_log.h"
-#endif /* FEATURE_WLAN_DIAG_SUPPORT */
-static void btcLogEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent);
-static void btcRestoreHeartBeatMonitoringHandle(void* hHal);
-static void btcUapsdCheck( tpAniSirGlobal pMac, tpSmeBtEvent pBtEvent );
-VOS_STATUS btcCheckHeartBeatMonitoring(tHalHandle hHal, tpSmeBtEvent pBtEvent);
-static void btcPowerStateCB( v_PVOID_t pContext, tPmcState pmcState );
-static void btcPowerOffloadStateCB(v_PVOID_t pContext, tANI_U32 sessionId,
- tPmcState pmcState );
-static VOS_STATUS btcDeferEvent( tpAniSirGlobal pMac, tpSmeBtEvent pEvent );
-static VOS_STATUS btcDeferDisconnEvent( tpAniSirGlobal pMac, tpSmeBtEvent pEvent );
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
-static void btcDiagEventLog (tHalHandle hHal, tpSmeBtEvent pBtEvent);
-#endif /* FEATURE_WLAN_DIAG_SUPPORT */
-/* ---------------------------------------------------------------------------
- \fn btcOpen
- \brief API to init the BTC Events Layer
- \param hHal - The handle returned by macOpen.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE success
- VOS_STATUS_SUCCESS failure
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcOpen (tHalHandle hHal)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- VOS_STATUS vosStatus;
- int i;
-
- /* Initialize BTC configuration. */
- pMac->btc.btcConfig.btcExecutionMode = BTC_SMART_COEXISTENCE;
-
- pMac->btc.btcReady = VOS_FALSE;
- pMac->btc.btcEventState = 0;
- pMac->btc.btcHBActive = VOS_TRUE;
- pMac->btc.btcScanCompromise = VOS_FALSE;
-
- for (i = 0; i < MWS_COEX_MAX_CONFIG; i++)
- {
- pMac->btc.btcConfig.mwsCoexConfig[i] = 0;
- }
-
- vosStatus = vos_timer_init( &pMac->btc.restoreHBTimer,
- VOS_TIMER_TYPE_SW,
- btcRestoreHeartBeatMonitoringHandle,
- (void*) hHal);
- if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcOpen: Fail to init timer");
- return VOS_STATUS_E_FAILURE;
- }
-
- if(!pMac->psOffloadEnabled)
- {
- if(!HAL_STATUS_SUCCESS(pmcRegisterDeviceStateUpdateInd(pMac,
- btcPowerStateCB, pMac)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "btcOpen: Fail to register PMC callback");
- return VOS_STATUS_E_FAILURE;
- }
- }
- else
- {
- tANI_U32 i;
- for(i = 0; i < CSR_ROAM_SESSION_MAX; i++)
- {
- if(!HAL_STATUS_SUCCESS(pmcOffloadRegisterDeviceStateUpdateInd(pMac,
- i, btcPowerOffloadStateCB, pMac)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "btcOpen: Fail to register PMC callback");
- return VOS_STATUS_E_FAILURE;
- }
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-/* ---------------------------------------------------------------------------
- \fn btcClose
- \brief API to exit the BTC Events Layer
- \param hHal - The handle returned by macOpen.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE success
- VOS_STATUS_SUCCESS failure
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcClose (tHalHandle hHal)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- VOS_STATUS vosStatus;
- pMac->btc.btcReady = VOS_FALSE;
- pMac->btc.btcUapsdOk = VOS_FALSE;
- vos_timer_stop(&pMac->btc.restoreHBTimer);
- vosStatus = vos_timer_destroy(&pMac->btc.restoreHBTimer);
- if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcClose: Fail to destroy timer");
- return VOS_STATUS_E_FAILURE;
- }
-
- if(!pMac->psOffloadEnabled)
- {
- if(!HAL_STATUS_SUCCESS(
- pmcDeregisterDeviceStateUpdateInd(pMac, btcPowerStateCB)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL,
- "%s: %d: cannot deregister pmcDeregisterDeviceStateUpdateInd()",
- __func__, __LINE__);
- }
- }
- else
- {
- tANI_U32 i;
- for(i = 0; i < CSR_ROAM_SESSION_MAX; i++)
- {
- if(!HAL_STATUS_SUCCESS(pmcOffloadDeregisterDeviceStateUpdateInd(pMac,
- i, btcPowerOffloadStateCB)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "btcOpen: Fail to deregister PMC callback");
- return VOS_STATUS_E_FAILURE;
- }
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-
-/* ---------------------------------------------------------------------------
- \fn btcReady
- \brief fn to inform BTC that eWNI_SME_SYS_READY_IND has been sent to PE.
- This acts as a trigger to send a message to HAL to update the BTC
- related config to FW. Note that if HDD configures any power BTC
- related stuff before this API is invoked, BTC will buffer all the
- configuration.
- \param hHal - The handle returned by macOpen.
- \return VOS_STATUS
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcReady (tHalHandle hHal)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- v_U32_t cfgVal = 0;
- v_U8_t i;
- pMac->btc.btcReady = VOS_TRUE;
- pMac->btc.btcUapsdOk = VOS_TRUE;
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- pMac->btc.btcScoHandles[i] = BT_INVALID_CONN_HANDLE;
- }
-
- // Read heartbeat threshold CFG and save it.
- ccmCfgGetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, &cfgVal);
- pMac->btc.btcHBCount = (v_U8_t)cfgVal;
- if (btcSendCfgMsg(hHal, &(pMac->btc.btcConfig)) != VOS_STATUS_SUCCESS)
- {
- return VOS_STATUS_E_FAILURE;
- }
- return VOS_STATUS_SUCCESS;
-}
-
-static VOS_STATUS btcSendBTEvent(tpAniSirGlobal pMac, tpSmeBtEvent pBtEvent)
-{
- vos_msg_t msg;
- tpSmeBtEvent ptrSmeBtEvent = NULL;
- switch(pBtEvent->btEventType)
- {
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- case BT_EVENT_SYNC_CONNECTION_UPDATED:
- if(pBtEvent->uEventParam.btSyncConnection.linkType != BT_SCO &&
- pBtEvent->uEventParam.btSyncConnection.linkType != BT_eSCO)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Invalid link type %d for Sync Connection. BT event will be dropped ",
- __func__, pBtEvent->uEventParam.btSyncConnection.linkType);
- return VOS_STATUS_E_FAILURE;
- }
- break;
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- if((pBtEvent->uEventParam.btSyncConnection.status == BT_CONN_STATUS_SUCCESS) &&
- ((pBtEvent->uEventParam.btSyncConnection.linkType != BT_SCO && pBtEvent->uEventParam.btSyncConnection.linkType != BT_eSCO) ||
- (pBtEvent->uEventParam.btSyncConnection.connectionHandle == BT_INVALID_CONN_HANDLE)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Invalid connection handle %d or link type %d for Sync Connection. BT event will be dropped ",
- __func__,
- pBtEvent->uEventParam.btSyncConnection.connectionHandle,
- pBtEvent->uEventParam.btSyncConnection.linkType);
- return VOS_STATUS_E_FAILURE;
- }
- break;
- case BT_EVENT_MODE_CHANGED:
- if(pBtEvent->uEventParam.btAclModeChange.mode >= BT_ACL_MODE_MAX)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Invalid mode %d for ACL Connection. BT event will be dropped ",
- __func__,
- pBtEvent->uEventParam.btAclModeChange.mode);
- return VOS_STATUS_E_FAILURE;
- }
- break;
- case BT_EVENT_DEVICE_SWITCHED_OFF:
- pMac->btc.btcEventState = 0;
- break;
- default:
- break;
- }
- ptrSmeBtEvent = vos_mem_malloc(sizeof(tSmeBtEvent));
- if (NULL == ptrSmeBtEvent)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Not able to allocate memory for BT event", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- btcLogEvent(pMac, pBtEvent);
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
- btcDiagEventLog(pMac, pBtEvent);
-#endif
- vos_mem_copy(ptrSmeBtEvent, pBtEvent, sizeof(tSmeBtEvent));
- msg.type = WDA_SIGNAL_BT_EVENT;
- msg.reserved = 0;
- msg.bodyptr = ptrSmeBtEvent;
- MTRACE(vos_trace(VOS_MODULE_ID_SME, TRACE_CODE_SME_TX_WDA_MSG, NO_SESSION,
- msg.type));
- if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Not able to post WDA_SIGNAL_BT_EVENT message to WDA", __func__);
- vos_mem_free( ptrSmeBtEvent );
- return VOS_STATUS_E_FAILURE;
- }
- // After successfully posting the message, check if heart beat
- // monitoring needs to be turned off
- (void)btcCheckHeartBeatMonitoring(pMac, pBtEvent);
- //Check whether BTC and UAPSD can co-exist
- btcUapsdCheck( pMac, pBtEvent );
- return VOS_STATUS_SUCCESS;
- }
-
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
-/* ---------------------------------------------------------------------------
- \fn btcSignalBTEvent
- \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the
- BT event type and the current operating mode of Libra (full power,
- BMPS, UAPSD etc), appropriate Bluetooth Coexistence (BTC) strategy
- would be employed.
- \param hHal - The handle returned by macOpen.
- \param pBtEvent - Pointer to a caller allocated object of type tSmeBtEvent.
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE – BT Event not passed to HAL. This can happen
- if driver has not yet been initialized or if BTC
- Events Layer has been disabled.
- VOS_STATUS_SUCCESS – BT Event passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcSignalBTEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- VOS_STATUS vosStatus;
- if( NULL == pBtEvent )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Null pointer for SME BT Event", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- if(( BTC_WLAN_ONLY == pMac->btc.btcConfig.btcExecutionMode ) ||
- ( BTC_PTA_ONLY == pMac->btc.btcConfig.btcExecutionMode ))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "BTC execution mode not set to BTC_SMART_COEXISTENCE. BT event will be dropped", __func__);
- return VOS_STATUS_E_FAILURE;
- }
- if( pBtEvent->btEventType < 0 || pBtEvent->btEventType >= BT_EVENT_TYPE_MAX )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Invalid BT event %d being passed. BT event will be dropped",
- __func__, pBtEvent->btEventType);
- return VOS_STATUS_E_FAILURE;
- }
- //Check PMC state to make sure whether we need to defer
- //If we already have deferred events, defer the new one as well, in case PMC is in transition state
- if( pMac->btc.fReplayBTEvents || !PMC_IS_CHIP_ACCESSIBLE(pmcGetPmcState( pMac )) )
- {
- //We need to defer the event
- vosStatus = btcDeferEvent(pMac, pBtEvent);
- if( VOS_IS_STATUS_SUCCESS(vosStatus) )
- {
- pMac->btc.fReplayBTEvents = VOS_TRUE;
- return VOS_STATUS_SUCCESS;
- }
- else
- {
- return vosStatus;
- }
- }
- btcSendBTEvent(pMac, pBtEvent);
- return VOS_STATUS_SUCCESS;
-}
-#endif
-/* ---------------------------------------------------------------------------
- \fn btcCheckHeartBeatMonitoring
- \brief API to check whether heartbeat monitoring is required to be disabled
- for specific BT start events which takes significant time to complete
- during which WLAN misses beacons. To avoid WLAN-MAC from disconnecting
- for the not enough beacons received we stop the heartbeat timer during
- this start BT event till the stop of that BT event.
- \param hHal - The handle returned by macOpen.
- \param pBtEvent - Pointer to a caller allocated object of type tSmeBtEvent.
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE Config not passed to HAL.
- VOS_STATUS_SUCCESS Config passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcCheckHeartBeatMonitoring(tHalHandle hHal, tpSmeBtEvent pBtEvent)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- VOS_STATUS vosStatus;
- switch(pBtEvent->btEventType)
- {
- // Start events which requires heartbeat monitoring be disabled.
- case BT_EVENT_INQUIRY_STARTED:
- pMac->btc.btcEventState |= BT_INQUIRY_STARTED;
- break;
- case BT_EVENT_PAGE_STARTED:
- pMac->btc.btcEventState |= BT_PAGE_STARTED;
- break;
- case BT_EVENT_CREATE_ACL_CONNECTION:
- pMac->btc.btcEventState |= BT_CREATE_ACL_CONNECTION_STARTED;
- break;
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- pMac->btc.btcEventState |= BT_CREATE_SYNC_CONNECTION_STARTED;
- break;
- // Stop/done events which indicates heartbeat monitoring can be enabled
- case BT_EVENT_INQUIRY_STOPPED:
- pMac->btc.btcEventState &= ~(BT_INQUIRY_STARTED);
- break;
- case BT_EVENT_PAGE_STOPPED:
- pMac->btc.btcEventState &= ~(BT_PAGE_STARTED);
- break;
- case BT_EVENT_ACL_CONNECTION_COMPLETE:
- pMac->btc.btcEventState &= ~(BT_CREATE_ACL_CONNECTION_STARTED);
- break;
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- pMac->btc.btcEventState &= ~(BT_CREATE_SYNC_CONNECTION_STARTED);
- break;
- default:
- // Ignore other events
- return VOS_STATUS_SUCCESS;
- }
- // Check if any of the BT start events are active
- if (pMac->btc.btcEventState) {
- if (pMac->btc.btcHBActive) {
- // set heartbeat threshold CFG to zero
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, 0, NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcHBActive = VOS_FALSE;
- }
- // Deactivate and active the restore HB timer
- vos_timer_stop( &pMac->btc.restoreHBTimer);
- vosStatus= vos_timer_start( &pMac->btc.restoreHBTimer, BT_MAX_EVENT_DONE_TIMEOUT );
- if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcCheckHeartBeatMonitoring: Fail to start timer");
- return VOS_STATUS_E_FAILURE;
- }
- } else {
- // Restore CFG back to the original value only if it was disabled
- if (!pMac->btc.btcHBActive) {
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, pMac->btc.btcHBCount, NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcHBActive = VOS_TRUE;
- }
- // Deactivate the timer
- vosStatus = vos_timer_stop( &pMac->btc.restoreHBTimer);
- if (!VOS_IS_STATUS_SUCCESS(vosStatus)) {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcCheckHeartBeatMonitoring: Fail to stop timer");
- return VOS_STATUS_E_FAILURE;
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-/* ---------------------------------------------------------------------------
- \fn btcRestoreHeartBeatMonitoringHandle
- \brief Timer handler to handle the timeout condition when a specific BT
- stop event does not come back, in which case to restore back the
- heartbeat timer.
- \param hHal - The handle returned by macOpen.
- \return VOID
- ---------------------------------------------------------------------------*/
-void btcRestoreHeartBeatMonitoringHandle(tHalHandle hHal)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- if( !pMac->btc.btcHBActive )
- {
- tPmcState pmcState;
- //Check PMC state to make sure whether we need to defer
- pmcState = pmcGetPmcState( pMac );
- if( PMC_IS_CHIP_ACCESSIBLE(pmcState) )
- {
- // Restore CFG back to the original value
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, pMac->btc.btcHBCount, NULL, eANI_BOOLEAN_FALSE);
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "BT event timeout, restoring back HeartBeat timer");
- }
- else
- {
- //defer it
- pMac->btc.btcEventReplay.fRestoreHBMonitor = VOS_TRUE;
- }
- }
-}
-
-
-/* ---------------------------------------------------------------------------
- \fn btcSetConfig
- \brief API to change the current Bluetooth Coexistence (BTC) configuration
- This function should be invoked only after CFG download has completed.
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtcConfig. Caller owns the memory and is responsible
- for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE Config not passed to HAL.
- VOS_STATUS_SUCCESS Config passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- //Save a copy in the global BTC config
- vos_mem_copy(&(pMac->btc.btcConfig), pSmeBtcConfig, sizeof(tSmeBtcConfig));
- //Send the config down only if SME_HddReady has been invoked. If not ready,
- //BTC config will plumbed down when btcReady is eventually invoked.
- if(pMac->btc.btcReady)
- {
- if(VOS_STATUS_SUCCESS != btcSendCfgMsg(hHal, pSmeBtcConfig))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL,
- "Failure to send BTC config down");
- return VOS_STATUS_E_FAILURE;
- }
- }
- return VOS_STATUS_SUCCESS;
-}
-/* ---------------------------------------------------------------------------
- \fn btcPostBtcCfgMsg
- \brief Private API to post BTC config message to HAL
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtcConfig. Caller owns the memory and is responsible
- for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE Config not passed to HAL.
- VOS_STATUS_SUCCESS Config passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcSendCfgMsg(tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig)
-{
- tpSmeBtcConfig ptrSmeBtcConfig = NULL;
- vos_msg_t msg;
- if( NULL == pSmeBtcConfig )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcSendCfgMsg: "
- "Null pointer for BTC Config");
- return VOS_STATUS_E_FAILURE;
- }
- if( pSmeBtcConfig->btcExecutionMode >= BT_EXEC_MODE_MAX )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcSendCfgMsg: "
- "Invalid BT execution mode %d being set",
- pSmeBtcConfig->btcExecutionMode);
- return VOS_STATUS_E_FAILURE;
- }
- ptrSmeBtcConfig = vos_mem_malloc(sizeof(tSmeBtcConfig));
- if (NULL == ptrSmeBtcConfig)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcSendCfgMsg: "
- "Not able to allocate memory for SME BTC Config");
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_copy(ptrSmeBtcConfig, pSmeBtcConfig, sizeof(tSmeBtcConfig));
- msg.type = WDA_BTC_SET_CFG;
- msg.reserved = 0;
- msg.bodyptr = ptrSmeBtcConfig;
- MTRACE(vos_trace(VOS_MODULE_ID_SME, TRACE_CODE_SME_TX_WDA_MSG, NO_SESSION,
- msg.type));
- if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcSendCfgMsg: "
- "Not able to post WDA_BTC_SET_CFG message to WDA");
- vos_mem_free( ptrSmeBtcConfig );
- return VOS_STATUS_E_FAILURE;
- }
- return VOS_STATUS_SUCCESS;
-}
-/* ---------------------------------------------------------------------------
- \fn btcGetConfig
- \brief API to retrieve the current Bluetooth Coexistence (BTC) configuration
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtcConfig. Caller owns the memory and is responsible
- for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE - failure
- VOS_STATUS_SUCCESS success
- ---------------------------------------------------------------------------*/
-VOS_STATUS btcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- if( NULL == pSmeBtcConfig )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "btcGetConfig: "
- "Null pointer for BTC Config");
- return VOS_STATUS_E_FAILURE;
- }
- vos_mem_copy(pSmeBtcConfig, &(pMac->btc.btcConfig), sizeof(tSmeBtcConfig));
- return VOS_STATUS_SUCCESS;
-}
-/*
- btcFindAclEventHist find a suited ACL event buffer
- Param: bdAddr - NULL meaning not care.
- pointer to caller allocated buffer containing the BD
- address to find a match
- handle - BT_INVALID_CONN_HANDLE == not care
- otherwise, a handle to match
- NOPTE: Either bdAddr or handle can be valid, if both of them are valid, use bdAddr only. If neither
- bdAddr nor handle is valid, return the next free slot.
-*/
-static tpSmeBtAclEventHist btcFindAclEventHist( tpAniSirGlobal pMac, v_U8_t *bdAddr, v_U16_t handle )
-{
- int i, j;
- tpSmeBtAclEventHist pRet = NULL;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- for( i = 0; (i < BT_MAX_ACL_SUPPORT) && (NULL == pRet); i++ )
- {
- if( NULL != bdAddr )
- {
- //try to match addr
- if( pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx )
- {
- for(j = 0; j < pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx; j++)
- {
- if( vos_mem_compare(pReplay->btcEventHist.btAclConnectionEvent[i].btAclConnection[j].bdAddr,
- bdAddr, 6) )
- {
- //found it
- pRet = &pReplay->btcEventHist.btAclConnectionEvent[i];
- break;
- }
- }
- }
- }
- else if( BT_INVALID_CONN_HANDLE != handle )
- {
- //try to match handle
- if( pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx )
- {
- for(j = 0; j < pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx; j++)
- {
- if( pReplay->btcEventHist.btAclConnectionEvent[i].btAclConnection[j].connectionHandle ==
- handle )
- {
- //found it
- pRet = &pReplay->btcEventHist.btAclConnectionEvent[i];
- break;
- }
- }
- }
- }
- else if( 0 == pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx )
- {
- pRet = &pReplay->btcEventHist.btAclConnectionEvent[i];
- break;
- }
- }
- return (pRet);
-}
-
-/*
- btcFindSyncEventHist find a suited SYNC event buffer
- Param: bdAddr - NULL meaning not care.
- pointer to caller allocated buffer containing the
- BD address to find a match
- handle - BT_INVALID_CONN_HANDLE == not care
- otherwise, a handle to match
- NOPTE: Either bdAddr or handle can be valid, if both of them are valid, use bdAddr only. If neither
- bdAddr nor handle is valid, return the next free slot.
-*/
-static tpSmeBtSyncEventHist btcFindSyncEventHist( tpAniSirGlobal pMac, v_U8_t *bdAddr, v_U16_t handle )
-{
- int i, j;
- tpSmeBtSyncEventHist pRet = NULL;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- for( i = 0; (i < BT_MAX_SCO_SUPPORT) && (NULL == pRet); i++ )
- {
- if( NULL != bdAddr )
- {
- //try to match addr
- if( pReplay->btcEventHist.btSyncConnectionEvent[i].bNextEventIdx )
- {
- for(j = 0; j < pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx; j++)
- {
- if( vos_mem_compare(pReplay->btcEventHist.btSyncConnectionEvent[i].btSyncConnection[j].bdAddr,
- bdAddr, 6) )
- {
- //found it
- pRet = &pReplay->btcEventHist.btSyncConnectionEvent[i];
- break;
- }
- }
- }
- }
- else if( BT_INVALID_CONN_HANDLE != handle )
- {
- //try to match handle
- if( pReplay->btcEventHist.btSyncConnectionEvent[i].bNextEventIdx )
- {
- for(j = 0; j < pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx; j++)
- {
- if( pReplay->btcEventHist.btSyncConnectionEvent[i].btSyncConnection[j].connectionHandle ==
- handle )
- {
- //found it
- pRet = &pReplay->btcEventHist.btSyncConnectionEvent[i];
- break;
- }
- }
- }
- }
- else if( !pReplay->btcEventHist.btSyncConnectionEvent[i].bNextEventIdx )
- {
- pRet = &pReplay->btcEventHist.btSyncConnectionEvent[i];
- break;
- }
- }
- return (pRet);
-}
-
-/*
- btcFindDisconnEventHist find a slot for the deferred disconnect event
- If handle is invalid, it returns a free slot, if any.
- If handle is valid, it tries to find a match first in case same disconnect event comes down again.
-*/
-static tpSmeBtDisconnectEventHist btcFindDisconnEventHist( tpAniSirGlobal pMac, v_U16_t handle )
-{
- tpSmeBtDisconnectEventHist pRet = NULL;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- int i;
- if( BT_INVALID_CONN_HANDLE != handle )
- {
- for(i = 0; i < BT_MAX_DISCONN_SUPPORT; i++)
- {
- if( pReplay->btcEventHist.btDisconnectEvent[i].fValid &&
- (handle == pReplay->btcEventHist.btDisconnectEvent[i].btDisconnect.connectionHandle) )
- {
- pRet = &pReplay->btcEventHist.btDisconnectEvent[i];
- break;
- }
- }
- }
- if( NULL == pRet )
- {
- //Find a free slot
- for(i = 0; i < BT_MAX_DISCONN_SUPPORT; i++)
- {
- if( !pReplay->btcEventHist.btDisconnectEvent[i].fValid )
- {
- pRet = &pReplay->btcEventHist.btDisconnectEvent[i];
- break;
- }
- }
- }
- return (pRet);
-}
-
-/*
- btcFindModeChangeEventHist find a slot for the deferred mode change event
- If handle is invalid, it returns a free slot, if any.
- If handle is valid, it tries to find a match first in case same disconnect event comes down again.
-*/
-tpSmeBtAclModeChangeEventHist btcFindModeChangeEventHist( tpAniSirGlobal pMac, v_U16_t handle )
-{
- tpSmeBtAclModeChangeEventHist pRet = NULL;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- int i;
- if( BT_INVALID_CONN_HANDLE != handle )
- {
- for(i = 0; i < BT_MAX_ACL_SUPPORT; i++)
- {
- if( pReplay->btcEventHist.btAclModeChangeEvent[i].fValid &&
- (handle == pReplay->btcEventHist.btAclModeChangeEvent[i].btAclModeChange.connectionHandle) )
- {
- pRet = &pReplay->btcEventHist.btAclModeChangeEvent[i];
- break;
- }
- }
- }
- if( NULL == pRet )
- {
- //Find a free slot
- for(i = 0; i < BT_MAX_ACL_SUPPORT; i++)
- {
- if( !pReplay->btcEventHist.btAclModeChangeEvent[i].fValid )
- {
- pRet = &pReplay->btcEventHist.btAclModeChangeEvent[i];
- break;
- }
- }
- }
- return (pRet);
-}
-
-/*
- btcFindSyncUpdateEventHist find a slot for the deferred SYNC_UPDATE event
- If handle is invalid, it returns a free slot, if any.
- If handle is valid, it tries to find a match first in case same disconnect event comes down again.
-*/
-tpSmeBtSyncUpdateHist btcFindSyncUpdateEventHist( tpAniSirGlobal pMac, v_U16_t handle )
-{
- tpSmeBtSyncUpdateHist pRet = NULL;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- int i;
- if( BT_INVALID_CONN_HANDLE != handle )
- {
- for(i = 0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if( pReplay->btcEventHist.btSyncUpdateEvent[i].fValid &&
- (handle == pReplay->btcEventHist.btSyncUpdateEvent[i].btSyncConnection.connectionHandle) )
- {
- pRet = &pReplay->btcEventHist.btSyncUpdateEvent[i];
- break;
- }
- }
- }
- if( NULL == pRet )
- {
- //Find a free slot
- for(i = 0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if( !pReplay->btcEventHist.btSyncUpdateEvent[i].fValid )
- {
- pRet = &pReplay->btcEventHist.btSyncUpdateEvent[i];
- break;
- }
- }
- }
- return (pRet);
-}
-
-/*
- Call must validate pAclEventHist
-*/
-static void btcReleaseAclEventHist( tpAniSirGlobal pMac, tpSmeBtAclEventHist pAclEventHist )
-{
- vos_mem_zero( pAclEventHist, sizeof(tSmeBtAclEventHist) );
-}
-
-/*
- Call must validate pSyncEventHist
-*/
-static void btcReleaseSyncEventHist( tpAniSirGlobal pMac, tpSmeBtSyncEventHist pSyncEventHist )
-{
- vos_mem_zero( pSyncEventHist, sizeof(tSmeBtSyncEventHist) );
-}
-
-/*To defer a ACL creation event
- We only support one ACL per BD address.
- If the last cached event another ACL create event, replace that event with the new event
- If a completion event with success status code, and the new ACL creation
- on same address, defer a new disconnect event(fake one), then cache this ACL creation event.
- Otherwise, save this create event.
-*/
-static VOS_STATUS btcDeferAclCreate( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtAclEventHist pAclEventHist;
- tSmeBtAclConnectionParam *pAclEvent = NULL;
- do
- {
- //Find a match
- pAclEventHist = btcFindAclEventHist( pMac, pEvent->uEventParam.btAclConnection.bdAddr,
- BT_INVALID_CONN_HANDLE );
- if( NULL == pAclEventHist )
- {
- //No cached ACL event on this address
- //Find a free slot and save it
- pAclEventHist = btcFindAclEventHist( pMac, NULL, BT_INVALID_CONN_HANDLE );
- if( NULL != pAclEventHist )
- {
- vos_mem_copy(&pAclEventHist->btAclConnection[0], &pEvent->uEventParam.btAclConnection,
- sizeof(tSmeBtAclConnectionParam));
- pAclEventHist->btEventType[0] = BT_EVENT_CREATE_ACL_CONNECTION;
- pAclEventHist->bNextEventIdx = 1;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" failed to find ACL event slot"));
- status = VOS_STATUS_E_RESOURCES;
- }
- //done
- break;
- }
- else
- {
- //There is history on this BD address
- if ((pAclEventHist->bNextEventIdx <= 0) ||
- (pAclEventHist->bNextEventIdx > BT_MAX_NUM_EVENT_ACL_DEFERRED))
- {
- VOS_ASSERT(0);
- status = VOS_STATUS_E_FAILURE;
- break;
- }
- pAclEvent = &pAclEventHist->btAclConnection[pAclEventHist->bNextEventIdx - 1];
- if(BT_EVENT_CREATE_ACL_CONNECTION == pAclEventHist->btEventType[pAclEventHist->bNextEventIdx - 1])
- {
- //The last cached event is creation, replace it with the new one
- if (pAclEvent)
- {
- vos_mem_copy(pAclEvent,
- &pEvent->uEventParam.btAclConnection,
- sizeof(tSmeBtAclConnectionParam));
- }
- //done
- break;
- }
- else if(BT_EVENT_ACL_CONNECTION_COMPLETE ==
- pAclEventHist->btEventType[pAclEventHist->bNextEventIdx - 1])
- {
- //The last cached event is completion, check the status.
- if(BT_CONN_STATUS_SUCCESS == pAclEvent->status)
- {
- tSmeBtEvent btEvent;
- //The last event we have is success completion event.
- //Should not get a creation event before creation.
- smsLog(pMac, LOGE, FL(" Missing disconnect event on handle %d"), pAclEvent->connectionHandle);
- //Fake a disconnect event
- btEvent.btEventType = BT_EVENT_DISCONNECTION_COMPLETE;
- btEvent.uEventParam.btDisconnect.connectionHandle = pAclEvent->connectionHandle;
- btcDeferDisconnEvent(pMac, &btEvent);
- }
- }
- //Need to save the new event
- if(pAclEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_ACL_DEFERRED)
- {
- pAclEventHist->btEventType[pAclEventHist->bNextEventIdx] = BT_EVENT_CREATE_ACL_CONNECTION;
- vos_mem_copy(&pAclEventHist->btAclConnection[pAclEventHist->bNextEventIdx],
- &pEvent->uEventParam.btAclConnection,
- sizeof(tSmeBtAclConnectionParam));
- pAclEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" ACL event overflow"));
- VOS_ASSERT(0);
- }
- }
- }while(0);
- return status;
-}
-
-/*Defer a ACL completion event
- If there is cached event on this BD address, check completion status.
- If status is fail and last cached event is creation, remove the creation event and drop
- this completion event. Otherwise, cache this completion event as the latest one.
-*/
-static VOS_STATUS btcDeferAclComplete( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtAclEventHist pAclEventHist;
- do
- {
- //Find a match
- pAclEventHist = btcFindAclEventHist( pMac, pEvent->uEventParam.btAclConnection.bdAddr,
- BT_INVALID_CONN_HANDLE );
- if(pAclEventHist)
- {
- if (pAclEventHist->bNextEventIdx <= 0)
- {
- VOS_ASSERT(pAclEventHist->bNextEventIdx >0);
- return VOS_STATUS_E_EMPTY;
- }
- //Found one
- if(BT_CONN_STATUS_SUCCESS != pEvent->uEventParam.btAclConnection.status)
- {
- //If completion fails, and the last one is creation, remove the creation event
- if(BT_EVENT_CREATE_ACL_CONNECTION == pAclEventHist->btEventType[pAclEventHist->bNextEventIdx-1])
- {
- vos_mem_zero(&pAclEventHist->btAclConnection[pAclEventHist->bNextEventIdx-1],
- sizeof(tSmeBtAclConnectionParam));
- pAclEventHist->bNextEventIdx--;
- //Done with this event
- break;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" ACL completion fail but last event(%d) not creation"),
- pAclEventHist->btEventType[pAclEventHist->bNextEventIdx-1]);
- }
- }
- }
- if( NULL == pAclEventHist )
- {
- pAclEventHist = btcFindAclEventHist( pMac, NULL, BT_INVALID_CONN_HANDLE );
- }
- if(pAclEventHist)
- {
- if(pAclEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_ACL_DEFERRED)
- {
- //Save this event
- pAclEventHist->btEventType[pAclEventHist->bNextEventIdx] = BT_EVENT_ACL_CONNECTION_COMPLETE;
- vos_mem_copy(&pAclEventHist->btAclConnection[pAclEventHist->bNextEventIdx],
- &pEvent->uEventParam.btAclConnection,
- sizeof(tSmeBtAclConnectionParam));
- pAclEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" ACL event overflow"));
- VOS_ASSERT(0);
- }
- }
- else
- {
- smsLog(pMac, LOGE, FL(" cannot find match for failed "
- "BT_EVENT_ACL_CONNECTION_COMPLETE of bdAddr "
- MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(pEvent->uEventParam.btAclConnection.bdAddr));
- status = VOS_STATUS_E_EMPTY;
- }
- }while(0);
- return (status);
-}
-
-/*To defer a SYNC creation event
- If the last cached event is another SYNC create event, replace
- that event with the new event.
- If there is a completion event with success status code, cache a new
- disconnect event(fake) first, then cache this SYNC creation event.
- Otherwise, cache this create event.
-*/
-static VOS_STATUS btcDeferSyncCreate( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtSyncEventHist pSyncEventHist;
- tSmeBtSyncConnectionParam *pSyncEvent = NULL;
- do
- {
- //Find a match
- pSyncEventHist = btcFindSyncEventHist( pMac, pEvent->uEventParam.btSyncConnection.bdAddr,
- BT_INVALID_CONN_HANDLE );
- if( NULL == pSyncEventHist )
- {
- //No cached ACL event on this address
- //Find a free slot and save it
- pSyncEventHist = btcFindSyncEventHist( pMac, NULL, BT_INVALID_CONN_HANDLE );
- if( NULL != pSyncEventHist )
- {
- vos_mem_copy(&pSyncEventHist->btSyncConnection[0], &pEvent->uEventParam.btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam));
- pSyncEventHist->btEventType[0] = BT_EVENT_CREATE_SYNC_CONNECTION;
- pSyncEventHist->bNextEventIdx = 1;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" failed to find SYNC event slot"));
- status = VOS_STATUS_E_RESOURCES;
- }
- //done
- break;
- }
- else
- {
- //There is history on this BD address
- if ((pSyncEventHist->bNextEventIdx <= 0) ||
- (pSyncEventHist->bNextEventIdx > BT_MAX_NUM_EVENT_SCO_DEFERRED))
- {
- VOS_ASSERT(0);
- status = VOS_STATUS_E_FAILURE;
- return status;
- }
- pSyncEvent = &pSyncEventHist->btSyncConnection[pSyncEventHist->bNextEventIdx - 1];
- if(BT_EVENT_CREATE_SYNC_CONNECTION ==
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx - 1])
- {
- //The last cached event is creation, replace it with the new one
- if(pSyncEvent)
- {
- vos_mem_copy(pSyncEvent,
- &pEvent->uEventParam.btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam));
- }
- //done
- break;
- }
- else if(BT_EVENT_SYNC_CONNECTION_COMPLETE ==
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx - 1])
- {
- //The last cached event is completion, check the status.
- if(BT_CONN_STATUS_SUCCESS == pSyncEvent->status)
- {
- tSmeBtEvent btEvent;
- //The last event we have is success completion event.
- //Should not get a creation event before creation.
- smsLog(pMac, LOGE, FL(" Missing disconnect event on handle %d"), pSyncEvent->connectionHandle);
- //Fake a disconnect event
- btEvent.btEventType = BT_EVENT_DISCONNECTION_COMPLETE;
- btEvent.uEventParam.btDisconnect.connectionHandle = pSyncEvent->connectionHandle;
- btcDeferDisconnEvent(pMac, &btEvent);
- }
- }
- //Need to save the new event
- if(pSyncEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_SCO_DEFERRED)
- {
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx] = BT_EVENT_CREATE_SYNC_CONNECTION;
- vos_mem_copy(&pSyncEventHist->btSyncConnection[pSyncEventHist->bNextEventIdx],
- &pEvent->uEventParam.btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam));
- pSyncEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" SYNC event overflow"));
- }
- }
- }while(0);
- return status;
-}
-
-/*
- * Defer a SYNC completion event
- * If there is cached event on this BD address, check completion status.
- * If status is fail and last cached event is creation, remove the
- * creation event and drop this completion event.
- * Otherwise, cache this completion event as the latest one.
- */
-static VOS_STATUS btcDeferSyncComplete( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtSyncEventHist pSyncEventHist;
- do
- {
- //Find a match
- pSyncEventHist = btcFindSyncEventHist( pMac, pEvent->uEventParam.btSyncConnection.bdAddr,
- BT_INVALID_CONN_HANDLE );
- if(pSyncEventHist)
- {
- if (pSyncEventHist->bNextEventIdx <= 0)
- {
- VOS_ASSERT(pSyncEventHist->bNextEventIdx >0);
- return VOS_STATUS_E_EMPTY;
- }
- //Found one
- if(BT_CONN_STATUS_SUCCESS != pEvent->uEventParam.btSyncConnection.status)
- {
- //If completion fails, and the last one is creation, remove the creation event
- if(BT_EVENT_CREATE_SYNC_CONNECTION == pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx-1])
- {
- vos_mem_zero(&pSyncEventHist->btSyncConnection[pSyncEventHist->bNextEventIdx-1],
- sizeof(tSmeBtSyncConnectionParam));
- pSyncEventHist->bNextEventIdx--;
- //Done with this event
- break;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" SYNC completion fail but last event(%d) not creation"),
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx-1]);
- }
- }
- }
- if(NULL == pSyncEventHist)
- {
- //In case we don't defer the creation event
- pSyncEventHist = btcFindSyncEventHist( pMac, NULL, BT_INVALID_CONN_HANDLE );
- }
- if(pSyncEventHist)
- {
- if(pSyncEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_ACL_DEFERRED)
- {
- //Save this event
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx] = BT_EVENT_SYNC_CONNECTION_COMPLETE;
- vos_mem_copy(&pSyncEventHist->btSyncConnection[pSyncEventHist->bNextEventIdx],
- &pEvent->uEventParam.btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam));
- pSyncEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" SYNC event overflow"));
- }
- }
- else
- {
- smsLog(pMac, LOGE, FL(" cannot find match for "
- "BT_EVENT_SYNC_CONNECTION_COMPLETE of bdAddr "
- MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(pEvent->uEventParam.btSyncConnection.bdAddr));
- status = VOS_STATUS_E_EMPTY;
- }
- }while(0);
- return (status);
-}
-
-//return VOS_STATUS_E_EXISTS if the event handle cannot be found
-//VOS_STATUS_SUCCESS if the event is processed
-//Other error status meaning it cannot continue due to other errors
-/*
- Defer a disconnect event for ACL
- Check if any history on this event handle.
- If both ACL_CREATION and ACL_COMPLETION is cached, remove both those events and drop
- this disconnect event.
- Otherwise save disconnect event in this ACL's bin.
- If not ACL match on this handle, not to do anything.
- Either way, remove any cached MODE_CHANGE event matches this disconnect event's handle.
-*/
-static VOS_STATUS btcDeferDisconnectEventForACL( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtAclEventHist pAclEventHist;
- tpSmeBtAclModeChangeEventHist pModeChangeEventHist;
- v_BOOL_t fDone = VOS_FALSE;
- int i;
- pAclEventHist = btcFindAclEventHist( pMac, NULL,
- pEvent->uEventParam.btDisconnect.connectionHandle );
- if(pAclEventHist)
- {
- if( pAclEventHist->bNextEventIdx > BT_MAX_NUM_EVENT_ACL_DEFERRED)
- {
- smsLog(pMac, LOGE, FL(" ACL event history index:%d overflow, resetting to BT_MAX_NUM_EVENT_ACL_DEFERRED"), pAclEventHist->bNextEventIdx);
- pAclEventHist->bNextEventIdx = BT_MAX_NUM_EVENT_ACL_DEFERRED;
- }
- /* Looking back-words */
- for(i = pAclEventHist->bNextEventIdx - 1; i >= 0; i--)
- {
- if( BT_EVENT_ACL_CONNECTION_COMPLETE == pAclEventHist->btEventType[i] )
- {
- //make sure we can cancel the link
- if( (i > 0) && (BT_EVENT_CREATE_ACL_CONNECTION == pAclEventHist->btEventType[i - 1]) )
- {
- fDone = VOS_TRUE;
- if(i == 1)
- {
- //All events can be wiped off
- btcReleaseAclEventHist(pMac, pAclEventHist);
- break;
- }
- //we have both ACL creation and completion, wipe out all of them
- pAclEventHist->bNextEventIdx = (tANI_U8)(i - 1);
- vos_mem_zero(&pAclEventHist->btAclConnection[i-1], sizeof(tSmeBtAclConnectionParam));
- vos_mem_zero(&pAclEventHist->btAclConnection[i], sizeof(tSmeBtAclConnectionParam));
- break;
- }
- }
- }//for loop
- if(!fDone)
- {
- //Save this disconnect event
- if(pAclEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_ACL_DEFERRED)
- {
- pAclEventHist->btEventType[pAclEventHist->bNextEventIdx] =
- BT_EVENT_DISCONNECTION_COMPLETE;
- pAclEventHist->btAclConnection[pAclEventHist->bNextEventIdx].connectionHandle =
- pEvent->uEventParam.btDisconnect.connectionHandle;
- pAclEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" ACL event overflow"));
- status = VOS_STATUS_E_FAILURE;
- }
- }
- }
- else
- {
- status = VOS_STATUS_E_EXISTS;
- }
- //Wipe out the related mode change event if it is there
- pModeChangeEventHist = btcFindModeChangeEventHist( pMac,
- pEvent->uEventParam.btDisconnect.connectionHandle );
- if( pModeChangeEventHist && pModeChangeEventHist->fValid )
- {
- pModeChangeEventHist->fValid = VOS_FALSE;
- }
- return status;
-}
-
-/*
- * This function works the same as btcDeferDisconnectEventForACL except it
- * handles SYNC events return VOS_STATUS_E_EXISTS if the event handle cannot be
- * found VOS_STATUS_SUCCESS if the event is processed.
- * Other error status meaning it cannot continue due to other errors
- */
-/*
- Defer a disconnect event for SYNC
- Check if any SYNC history on this event handle.
- If yes and if both SYNC_CREATION and SYNC_COMPLETION is cached, remove both those events and drop
- this disconnect event.
- Otherwise save disconnect event in this SYNC's bin.
- If no match found, not to save this event here.
- Either way, remove any cached SYNC_UPDATE event matches this disconnect event's handle.
-*/
-static VOS_STATUS btcDeferDisconnectEventForSync( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtSyncEventHist pSyncEventHist;
- tpSmeBtSyncUpdateHist pSyncUpdateHist;
- v_BOOL_t fDone = VOS_FALSE;
- int i;
- pSyncEventHist = btcFindSyncEventHist( pMac, NULL,
- pEvent->uEventParam.btDisconnect.connectionHandle );
- if(pSyncEventHist)
- {
- if( pSyncEventHist->bNextEventIdx > BT_MAX_NUM_EVENT_SCO_DEFERRED)
- {
- smsLog(pMac, LOGE, FL(" SYNC event history index:%d overflow, resetting to BT_MAX_NUM_EVENT_SCO_DEFERRED"), pSyncEventHist->bNextEventIdx);
- pSyncEventHist->bNextEventIdx = BT_MAX_NUM_EVENT_SCO_DEFERRED;
- }
- /* Looking back-words */
- for(i = pSyncEventHist->bNextEventIdx - 1; i >= 0; i--)
- {
- //if a mode change event exists, drop it
- if( BT_EVENT_SYNC_CONNECTION_COMPLETE == pSyncEventHist->btEventType[i] )
- {
- //make sure we can cancel the link
- if( (i > 0) && (BT_EVENT_CREATE_SYNC_CONNECTION == pSyncEventHist->btEventType[i - 1]) )
- {
- fDone = VOS_TRUE;
- if(i == 1)
- {
- //All events can be wiped off
- btcReleaseSyncEventHist(pMac, pSyncEventHist);
- break;
- }
- //we have both ACL creation and completion, wipe out all of them
- pSyncEventHist->bNextEventIdx = (tANI_U8)(i - 1);
- vos_mem_zero(&pSyncEventHist->btSyncConnection[i-1], sizeof(tSmeBtSyncConnectionParam));
- vos_mem_zero(&pSyncEventHist->btSyncConnection[i], sizeof(tSmeBtSyncConnectionParam));
- break;
- }
- }
- }//for loop
- if(!fDone)
- {
- //Save this disconnect event
- if(pSyncEventHist->bNextEventIdx < BT_MAX_NUM_EVENT_SCO_DEFERRED)
- {
- pSyncEventHist->btEventType[pSyncEventHist->bNextEventIdx] =
- BT_EVENT_DISCONNECTION_COMPLETE;
- pSyncEventHist->btSyncConnection[pSyncEventHist->bNextEventIdx].connectionHandle =
- pEvent->uEventParam.btDisconnect.connectionHandle;
- pSyncEventHist->bNextEventIdx++;
- }
- else
- {
- smsLog(pMac, LOGE, FL(" SYNC event overflow"));
- status = VOS_STATUS_E_FAILURE;
- }
- }
- }
- else
- {
- status = VOS_STATUS_E_EXISTS;
- }
- //Wipe out the related mode change event if it is there
- pSyncUpdateHist = btcFindSyncUpdateEventHist( pMac,
- pEvent->uEventParam.btDisconnect.connectionHandle );
- if( pSyncUpdateHist && pSyncUpdateHist->fValid )
- {
- pSyncUpdateHist->fValid = VOS_FALSE;
- }
- return status;
-}
-
-/*
- Defer a disconnect event.
- Try to defer it as part of the ACL event first.
- If no match is found, try SYNC.
- If still no match found, defer it at DISCONNECT event bin.
-*/
-static VOS_STATUS btcDeferDisconnEvent( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtDisconnectEventHist pDisconnEventHist;
- if( BT_INVALID_CONN_HANDLE == pEvent->uEventParam.btDisconnect.connectionHandle )
- {
- smsLog( pMac, LOGE, FL(" invalid handle") );
- return (VOS_STATUS_E_INVAL);
- }
- //Check ACL first
- status = btcDeferDisconnectEventForACL(pMac, pEvent);
- if(!VOS_IS_STATUS_SUCCESS(status))
- {
- status = btcDeferDisconnectEventForSync(pMac, pEvent);
- }
- if( !VOS_IS_STATUS_SUCCESS(status) )
- {
- //Save the disconnect event
- pDisconnEventHist = btcFindDisconnEventHist( pMac,
- pEvent->uEventParam.btDisconnect.connectionHandle );
- if( pDisconnEventHist )
- {
- pDisconnEventHist->fValid = VOS_TRUE;
- vos_mem_copy( &pDisconnEventHist->btDisconnect, &pEvent->uEventParam.btDisconnect,
- sizeof(tSmeBtDisconnectParam) );
- status = VOS_STATUS_SUCCESS;
- }
- else
- {
- smsLog( pMac, LOGE, FL(" cannot find match for BT_EVENT_DISCONNECTION_COMPLETE of handle (%d)"),
- pEvent->uEventParam.btDisconnect.connectionHandle);
- status = VOS_STATUS_E_EMPTY;
- }
- }
- return (status);
-}
-
-/*
- btcDeferEvent save the event for possible replay when chip can be accessed
- This function is called only when in IMPS/Standby state
-*/
-static VOS_STATUS btcDeferEvent( tpAniSirGlobal pMac, tpSmeBtEvent pEvent )
-{
- VOS_STATUS status = VOS_STATUS_SUCCESS;
- tpSmeBtSyncUpdateHist pSyncUpdateHist;
- tpSmeBtAclModeChangeEventHist pModeChangeEventHist;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- switch(pEvent->btEventType)
- {
- case BT_EVENT_DEVICE_SWITCHED_ON:
- //Clear all events first
- vos_mem_zero( &pReplay->btcEventHist, sizeof(tSmeBtcEventHist) );
- pReplay->fBTSwitchOn = VOS_TRUE;
- pReplay->fBTSwitchOff = VOS_FALSE;
- break;
- case BT_EVENT_DEVICE_SWITCHED_OFF:
- //Clear all events first
- vos_mem_zero( &pReplay->btcEventHist, sizeof(tSmeBtcEventHist) );
- pReplay->fBTSwitchOff = VOS_TRUE;
- pReplay->fBTSwitchOn = VOS_FALSE;
- break;
- case BT_EVENT_INQUIRY_STARTED:
- pReplay->btcEventHist.nInquiryEvent++;
- break;
- case BT_EVENT_INQUIRY_STOPPED:
- pReplay->btcEventHist.nInquiryEvent--;
- break;
- case BT_EVENT_PAGE_STARTED:
- pReplay->btcEventHist.nPageEvent++;
- break;
- case BT_EVENT_PAGE_STOPPED:
- pReplay->btcEventHist.nPageEvent--;
- break;
- case BT_EVENT_CREATE_ACL_CONNECTION:
- status = btcDeferAclCreate(pMac, pEvent);
- break;
- case BT_EVENT_ACL_CONNECTION_COMPLETE:
- status = btcDeferAclComplete( pMac, pEvent );
- break;
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- status = btcDeferSyncCreate(pMac, pEvent);
- break;
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- status = btcDeferSyncComplete( pMac, pEvent );
- break;
- case BT_EVENT_SYNC_CONNECTION_UPDATED:
- if( BT_INVALID_CONN_HANDLE == pEvent->uEventParam.btDisconnect.connectionHandle )
- {
- smsLog( pMac, LOGE, FL(" invalid handle") );
- status = VOS_STATUS_E_INVAL;
- break;
- }
- //Find a match on handle. If not found, get a free slot.
- pSyncUpdateHist = btcFindSyncUpdateEventHist( pMac,
- pEvent->uEventParam.btSyncConnection.connectionHandle );
- if(pSyncUpdateHist)
- {
- pSyncUpdateHist->fValid = VOS_TRUE;
- vos_mem_copy(&pSyncUpdateHist->btSyncConnection, &pEvent->uEventParam.btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam));
- }
- else
- {
- smsLog( pMac, LOGE, FL(" cannot find match for BT_EVENT_SYNC_CONNECTION_UPDATED of handle (%d)"),
- pEvent->uEventParam.btSyncConnection.connectionHandle );
- status = VOS_STATUS_E_EMPTY;
- }
- break;
- case BT_EVENT_DISCONNECTION_COMPLETE:
- status = btcDeferDisconnEvent( pMac, pEvent );
- break;
- case BT_EVENT_MODE_CHANGED:
- if( BT_INVALID_CONN_HANDLE == pEvent->uEventParam.btDisconnect.connectionHandle )
- {
- smsLog( pMac, LOGE, FL(" invalid handle") );
- status = VOS_STATUS_E_INVAL;
- break;
- }
- //Find a match on handle, If not found, return a free slot
- pModeChangeEventHist = btcFindModeChangeEventHist( pMac,
- pEvent->uEventParam.btAclModeChange.connectionHandle );
- if(pModeChangeEventHist)
- {
- pModeChangeEventHist->fValid = VOS_TRUE;
- vos_mem_copy( &pModeChangeEventHist->btAclModeChange,
- &pEvent->uEventParam.btAclModeChange, sizeof(tSmeBtAclModeChangeParam) );
- }
- else
- {
- smsLog( pMac, LOGE, FL(" cannot find match for BT_EVENT_MODE_CHANGED of handle (%d)"),
- pEvent->uEventParam.btAclModeChange.connectionHandle);
- status = VOS_STATUS_E_EMPTY;
- }
- break;
- case BT_EVENT_A2DP_STREAM_START:
- pReplay->btcEventHist.fA2DPStarted = VOS_TRUE;
- pReplay->btcEventHist.fA2DPStopped = VOS_FALSE;
- break;
- case BT_EVENT_A2DP_STREAM_STOP:
- pReplay->btcEventHist.fA2DPStopped = VOS_TRUE;
- pReplay->btcEventHist.fA2DPStarted = VOS_FALSE;
- break;
- default:
- smsLog( pMac, LOGE, FL(" event (%d) is not deferred"), pEvent->btEventType );
- status = VOS_STATUS_E_NOSUPPORT;
- break;
- }
- return (status);
-}
-
-/*
- Replay all cached events in the following order
- 1. If BT_SWITCH_OFF event, send it.
- 2. Send INQUIRY event (START or STOP),if available
- 3. Send PAGE event (START or STOP), if available
- 4. Send DISCONNECT events, these DISCONNECT events are not tied to
- any ACL/SYNC event that we have cached
- 5. Send ACL events (possible events, CREATION, COMPLETION, DISCONNECT)
- 6. Send MODE_CHANGE events, if available
- 7. Send A2DP event(START or STOP), if available
- 8. Send SYNC events (possible events, CREATION, COMPLETION, DISCONNECT)
- 9. Send SYNC_UPDATE events, if available
-*/
-static void btcReplayEvents( tpAniSirGlobal pMac )
-{
- int i, j;
- tSmeBtEvent btEvent;
- tpSmeBtAclEventHist pAclHist;
- tpSmeBtSyncEventHist pSyncHist;
- tSmeBtcEventReplay *pReplay = &pMac->btc.btcEventReplay;
- //Always turn on HB monitor first.
- //It is independent of BT events even though BT event causes this
- if( pReplay->fRestoreHBMonitor )
- {
- pReplay->fRestoreHBMonitor = VOS_FALSE;
- //Only do it when needed
- if( !pMac->btc.btcHBActive )
- {
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, pMac->btc.btcHBCount, NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcHBActive = VOS_TRUE;
- }
- }
- if( pMac->btc.fReplayBTEvents )
- {
- /*Set the flag to false here so btcSignalBTEvent won't defer any further.
- This works because SME has it global lock*/
- pMac->btc.fReplayBTEvents = VOS_FALSE;
- if( pReplay->fBTSwitchOff )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_DEVICE_SWITCHED_OFF;
- btcSendBTEvent( pMac, &btEvent );
- pReplay->fBTSwitchOff = VOS_FALSE;
- }
- else if( pReplay->fBTSwitchOn )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_DEVICE_SWITCHED_ON;
- btcSendBTEvent( pMac, &btEvent );
- pReplay->fBTSwitchOn = VOS_FALSE;
- }
- //Do inquire first
- if( pReplay->btcEventHist.nInquiryEvent > 0 )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_INQUIRY_STARTED;
- i = pReplay->btcEventHist.nInquiryEvent;
- while(i--)
- {
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- else if( pReplay->btcEventHist.nInquiryEvent < 0 )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_INQUIRY_STOPPED;
- i = pReplay->btcEventHist.nInquiryEvent;
- while(i++)
- {
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- //Page
- if( pReplay->btcEventHist.nPageEvent > 0 )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_PAGE_STARTED;
- i = pReplay->btcEventHist.nPageEvent;
- while(i--)
- {
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- else if( pReplay->btcEventHist.nPageEvent < 0 )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_PAGE_STOPPED;
- i = pReplay->btcEventHist.nPageEvent;
- while(i++)
- {
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- //Replay non-completion disconnect events first
- //Disconnect
- for( i = 0; i < BT_MAX_DISCONN_SUPPORT; i++ )
- {
- if( pReplay->btcEventHist.btDisconnectEvent[i].fValid )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_DISCONNECTION_COMPLETE;
- vos_mem_copy( &btEvent.uEventParam.btDisconnect,
- &pReplay->btcEventHist.btDisconnectEvent[i].btDisconnect, sizeof(tSmeBtDisconnectParam) );
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- //ACL
- for( i = 0; i < BT_MAX_ACL_SUPPORT; i++ )
- {
- if( pReplay->btcEventHist.btAclConnectionEvent[i].bNextEventIdx )
- {
- pAclHist = &pReplay->btcEventHist.btAclConnectionEvent[i];
- //Replay all ACL events for this BD address/handle
- for(j = 0; j < pAclHist->bNextEventIdx; j++)
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = pAclHist->btEventType[j];
- if(BT_EVENT_DISCONNECTION_COMPLETE != btEvent.btEventType)
- {
- //It must be CREATE or CONNECTION_COMPLETE
- vos_mem_copy( &btEvent.uEventParam.btAclConnection,
- &pAclHist->btAclConnection[j], sizeof(tSmeBtAclConnectionParam) );
- }
- else
- {
- btEvent.uEventParam.btDisconnect.connectionHandle = pAclHist->btAclConnection[j].connectionHandle;
- }
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- }
- //Mode change
- for( i = 0; i < BT_MAX_ACL_SUPPORT; i++ )
- {
- if( pReplay->btcEventHist.btAclModeChangeEvent[i].fValid )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_MODE_CHANGED;
- vos_mem_copy( &btEvent.uEventParam.btAclModeChange,
- &pReplay->btcEventHist.btAclModeChangeEvent[i].btAclModeChange, sizeof(tSmeBtAclModeChangeParam) );
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- //A2DP
- if( pReplay->btcEventHist.fA2DPStarted )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_A2DP_STREAM_START;
- btcSendBTEvent( pMac, &btEvent );
- }
- else if( pReplay->btcEventHist.fA2DPStopped )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_A2DP_STREAM_STOP;
- btcSendBTEvent( pMac, &btEvent );
- }
- //SCO
- for( i = 0; i < BT_MAX_SCO_SUPPORT; i++ )
- {
- if( pReplay->btcEventHist.btSyncConnectionEvent[i].bNextEventIdx )
- {
- pSyncHist = &pReplay->btcEventHist.btSyncConnectionEvent[i];
- //Replay all SYNC events for this BD address/handle
- for(j = 0; j < pSyncHist->bNextEventIdx; j++)
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = pSyncHist->btEventType[j];
- if(BT_EVENT_DISCONNECTION_COMPLETE != btEvent.btEventType)
- {
- //Must be CREATION or CONNECTION_COMPLETE
- vos_mem_copy( &btEvent.uEventParam.btSyncConnection,
- &pSyncHist->btSyncConnection[j], sizeof(tSmeBtSyncConnectionParam) );
- }
- else
- {
- btEvent.uEventParam.btDisconnect.connectionHandle = pSyncHist->btSyncConnection[j].connectionHandle;
- }
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- }
- //SYNC update
- for( i = 0; i < BT_MAX_SCO_SUPPORT; i++ )
- {
- if( pReplay->btcEventHist.btSyncUpdateEvent[i].fValid )
- {
- vos_mem_zero( &btEvent, sizeof(tSmeBtEvent) );
- btEvent.btEventType = BT_EVENT_SYNC_CONNECTION_UPDATED;
- vos_mem_copy( &btEvent.uEventParam.btSyncConnection,
- &pReplay->btcEventHist.btSyncUpdateEvent[i].btSyncConnection,
- sizeof(tSmeBtSyncConnectionParam) );
- btcSendBTEvent( pMac, &btEvent );
- }
- }
- //Clear all events
- vos_mem_zero( &pReplay->btcEventHist, sizeof(tSmeBtcEventHist) );
- }
-}
-
-static void btcPowerStateCB( v_PVOID_t pContext, tPmcState pmcState )
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(pContext);
- if( FULL_POWER == pmcState )
- {
- btcReplayEvents( pMac );
- }
-}
-
-static void btcPowerOffloadStateCB(v_PVOID_t pContext, tANI_U32 sessionId,
- tPmcState pmcState )
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(pContext);
- if(FULL_POWER == pmcState)
- {
- btcReplayEvents(pMac);
- }
-}
-
-
-/* ---------------------------------------------------------------------------
- \fn btcLogEvent
- \brief API to log the the current Bluetooth event
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtEvent. Caller owns the memory and is responsible
- for freeing it.
- \return None
- ---------------------------------------------------------------------------*/
-static void btcLogEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent)
-{
- v_U8_t bdAddrRev[6];
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: "
- "Bluetooth Event %d received", __func__, pBtEvent->btEventType);
- switch(pBtEvent->btEventType)
- {
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- case BT_EVENT_SYNC_CONNECTION_UPDATED:
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "SCO Connection: "
- "connectionHandle = %d status = %d linkType %d "
- "scoInterval %d scoWindow %d retransmisisonWindow = %d ",
- pBtEvent->uEventParam.btSyncConnection.connectionHandle,
- pBtEvent->uEventParam.btSyncConnection.status,
- pBtEvent->uEventParam.btSyncConnection.linkType,
- pBtEvent->uEventParam.btSyncConnection.scoInterval,
- pBtEvent->uEventParam.btSyncConnection.scoWindow,
- pBtEvent->uEventParam.btSyncConnection.retransmisisonWindow);
-
- bdAddrRev[0] = pBtEvent->uEventParam.btSyncConnection.bdAddr[5];
- bdAddrRev[1] = pBtEvent->uEventParam.btSyncConnection.bdAddr[4];
- bdAddrRev[2] = pBtEvent->uEventParam.btSyncConnection.bdAddr[3];
- bdAddrRev[3] = pBtEvent->uEventParam.btSyncConnection.bdAddr[2];
- bdAddrRev[4] = pBtEvent->uEventParam.btSyncConnection.bdAddr[1];
- bdAddrRev[5] = pBtEvent->uEventParam.btSyncConnection.bdAddr[0];
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "BD ADDR = "
- MAC_ADDRESS_STR, MAC_ADDR_ARRAY(bdAddrRev));
- break;
- case BT_EVENT_CREATE_ACL_CONNECTION:
- case BT_EVENT_ACL_CONNECTION_COMPLETE:
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "ACL Connection: "
- "connectionHandle = %d status = %d ",
- pBtEvent->uEventParam.btAclConnection.connectionHandle,
- pBtEvent->uEventParam.btAclConnection.status);
-
- bdAddrRev[0] = pBtEvent->uEventParam.btAclConnection.bdAddr[5];
- bdAddrRev[1] = pBtEvent->uEventParam.btAclConnection.bdAddr[4];
- bdAddrRev[2] = pBtEvent->uEventParam.btAclConnection.bdAddr[3];
- bdAddrRev[3] = pBtEvent->uEventParam.btAclConnection.bdAddr[2];
- bdAddrRev[4] = pBtEvent->uEventParam.btAclConnection.bdAddr[1];
- bdAddrRev[5] = pBtEvent->uEventParam.btAclConnection.bdAddr[0];
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "BD ADDR = "
- MAC_ADDRESS_STR, MAC_ADDR_ARRAY(bdAddrRev));
- break;
- case BT_EVENT_MODE_CHANGED:
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "ACL Mode change : "
- "connectionHandle %d mode %d ",
- pBtEvent->uEventParam.btAclModeChange.connectionHandle,
- pBtEvent->uEventParam.btAclModeChange.mode);
- break;
- case BT_EVENT_DISCONNECTION_COMPLETE:
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "Disconnect Event : "
- "connectionHandle %d ", pBtEvent->uEventParam.btAclModeChange.connectionHandle);
- break;
- default:
- break;
- }
- }
-
-/*
- Caller can check whether BTC's current event allows UAPSD. This doesn't affect
- BMPS.
- return: VOS_TRUE -- BTC is ready for UAPSD
- VOS_FALSE -- certain BT event is active, cannot enter UAPSD
-*/
-v_BOOL_t btcIsReadyForUapsd( tHalHandle hHal )
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- return( pMac->btc.btcUapsdOk );
-}
-
-/*
- Base on the BT event, this function sets the flag on whether to allow UAPSD
- At this time, we are only interested in SCO and A2DP.
- A2DP tracking is through BT_EVENT_A2DP_STREAM_START and BT_EVENT_A2DP_STREAM_STOP
- SCO is through BT_EVENT_SYNC_CONNECTION_COMPLETE and BT_EVENT_DISCONNECTION_COMPLETE
- BT_EVENT_DEVICE_SWITCHED_OFF overwrites them all
-*/
-void btcUapsdCheck( tpAniSirGlobal pMac, tpSmeBtEvent pBtEvent )
-{
- v_U8_t i;
- v_BOOL_t fLastUapsdState = pMac->btc.btcUapsdOk, fMoreSCO = VOS_FALSE;
- switch( pBtEvent->btEventType )
- {
- case BT_EVENT_DISCONNECTION_COMPLETE:
- if( (VOS_FALSE == pMac->btc.btcUapsdOk) &&
- BT_INVALID_CONN_HANDLE != pBtEvent->uEventParam.btDisconnect.connectionHandle )
- {
- //Check whether all SCO connections are gone
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if( (BT_INVALID_CONN_HANDLE != pMac->btc.btcScoHandles[i]) &&
- (pMac->btc.btcScoHandles[i] != pBtEvent->uEventParam.btDisconnect.connectionHandle) )
- {
- //We still have outstanding SCO connection
- fMoreSCO = VOS_TRUE;
- }
- else if( pMac->btc.btcScoHandles[i] == pBtEvent->uEventParam.btDisconnect.connectionHandle )
- {
- pMac->btc.btcScoHandles[i] = BT_INVALID_CONN_HANDLE;
- }
- }
- if( !fMoreSCO && !pMac->btc.fA2DPUp )
- {
- //All SCO is disconnected
- smsLog( pMac, LOGE, "BT event (DISCONNECTION) happens, UAPSD-allowed flag (%d) change to TRUE",
- pMac->btc.btcUapsdOk );
- pMac->btc.btcUapsdOk = VOS_TRUE;
- }
- }
- break;
- case BT_EVENT_DEVICE_SWITCHED_OFF:
- smsLog( pMac, LOGE, "BT event (DEVICE_OFF) happens, UAPSD-allowed flag (%d) change to TRUE",
- pMac->btc.btcUapsdOk );
- //Clean up SCO
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- pMac->btc.btcScoHandles[i] = BT_INVALID_CONN_HANDLE;
- }
- pMac->btc.fA2DPUp = VOS_FALSE;
- pMac->btc.btcUapsdOk = VOS_TRUE;
- break;
- case BT_EVENT_A2DP_STREAM_STOP:
- smsLog( pMac, LOGE, "BT event (A2DP_STREAM_STOP) happens, UAPSD-allowed flag (%d)",
- pMac->btc.btcUapsdOk );
- pMac->btc.fA2DPUp = VOS_FALSE;
- //Check whether SCO is on
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if(pMac->btc.btcScoHandles[i] != BT_INVALID_CONN_HANDLE)
- {
- break;
- }
- }
- if( BT_MAX_SCO_SUPPORT == i )
- {
- pMac->btc.fA2DPTrafStop = VOS_TRUE;
- smsLog( pMac, LOGE, "BT_EVENT_A2DP_STREAM_STOP: UAPSD-allowed flag is now %d",
- pMac->btc.btcUapsdOk );
- }
- break;
-
- case BT_EVENT_MODE_CHANGED:
- smsLog( pMac, LOGE, "BT event (BT_EVENT_MODE_CHANGED) happens, Mode (%d) UAPSD-allowed flag (%d)",
- pBtEvent->uEventParam.btAclModeChange.mode, pMac->btc.btcUapsdOk );
- if(pBtEvent->uEventParam.btAclModeChange.mode == BT_ACL_SNIFF)
- {
- //Check whether SCO is on
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if(pMac->btc.btcScoHandles[i] != BT_INVALID_CONN_HANDLE)
- {
- break;
- }
- }
- if( BT_MAX_SCO_SUPPORT == i )
- {
- if(VOS_TRUE == pMac->btc.fA2DPTrafStop)
- {
- pMac->btc.btcUapsdOk = VOS_TRUE;
- pMac->btc.fA2DPTrafStop = VOS_FALSE;
- }
- smsLog( pMac, LOGE, "BT_EVENT_MODE_CHANGED with Mode:%d UAPSD-allowed flag is now %d",
- pBtEvent->uEventParam.btAclModeChange.mode,pMac->btc.btcUapsdOk );
- }
- }
- break;
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- {
- pMac->btc.btcUapsdOk = VOS_FALSE;
- smsLog( pMac, LOGE, "BT_EVENT_CREATE_SYNC_CONNECTION (%d) happens, UAPSD-allowed flag (%d) change to FALSE",
- pBtEvent->btEventType, pMac->btc.btcUapsdOk );
- }
- break;
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- //Make sure it is a success
- if( BT_CONN_STATUS_FAIL != pBtEvent->uEventParam.btSyncConnection.status )
- {
- /* Save the handle for later use */
- for( i = 0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- VOS_ASSERT(BT_INVALID_CONN_HANDLE != pBtEvent->uEventParam.btSyncConnection.connectionHandle);
- if( (BT_INVALID_CONN_HANDLE == pMac->btc.btcScoHandles[i]) &&
- (BT_INVALID_CONN_HANDLE != pBtEvent->uEventParam.btSyncConnection.connectionHandle))
- {
- pMac->btc.btcScoHandles[i] = pBtEvent->uEventParam.btSyncConnection.connectionHandle;
- break;
- }
- }
-
- if( i >= BT_MAX_SCO_SUPPORT )
- {
- smsLog(pMac, LOGE, FL("Too many SCO, ignore this one"));
- }
- }
- else
- {
- //Check whether SCO is on
- for(i=0; i < BT_MAX_SCO_SUPPORT; i++)
- {
- if(pMac->btc.btcScoHandles[i] != BT_INVALID_CONN_HANDLE)
- {
- break;
- }
- }
- /*If No Other Sco/A2DP is ON reenable UAPSD*/
- if( (BT_MAX_SCO_SUPPORT == i) && !pMac->btc.fA2DPUp)
- {
- pMac->btc.btcUapsdOk = VOS_TRUE;
- }
- smsLog(pMac, LOGE, FL("TSYNC complete failed"));
- }
- break;
- case BT_EVENT_A2DP_STREAM_START:
- smsLog( pMac, LOGE, "BT_EVENT_A2DP_STREAM_START (%d) happens, UAPSD-allowed flag (%d) change to FALSE",
- pBtEvent->btEventType, pMac->btc.btcUapsdOk );
- pMac->btc.fA2DPTrafStop = VOS_FALSE;
- pMac->btc.btcUapsdOk = VOS_FALSE;
- pMac->btc.fA2DPUp = VOS_TRUE;
- break;
- default:
- //No change for these events
- smsLog( pMac, LOGE, "BT event (%d) happens, UAPSD-allowed flag (%d) no change",
- pBtEvent->btEventType, pMac->btc.btcUapsdOk );
- break;
- }
- if(fLastUapsdState != pMac->btc.btcUapsdOk)
- {
- sme_QosTriggerUapsdChange( pMac );
- }
-}
-
-/* ---------------------------------------------------------------------------
- \fn btcHandleCoexInd
- \brief API to handle Coex indication from WDI
- \param pMac - The handle returned by macOpen.
- \return eHalStatus
- eHAL_STATUS_FAILURE success
- eHAL_STATUS_SUCCESS failure
- ---------------------------------------------------------------------------*/
-eHalStatus btcHandleCoexInd(tHalHandle hHal, void* pMsg)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- eHalStatus status = eHAL_STATUS_SUCCESS;
- tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)pMsg;
-
- if (NULL == pMsg)
- {
- smsLog(pMac, LOGE, "in %s msg ptr is NULL", __func__);
- status = eHAL_STATUS_FAILURE;
- }
- else
- {
- // DEBUG
- smsLog(pMac, LOG1, "Coex indication in %s(), type %d",
- __func__, pSmeCoexInd->coexIndType);
-
- // suspend heartbeat monitoring
- if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_DISABLE_HB_MONITOR)
- {
- // set heartbeat threshold CFG to zero
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, 0, NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcHBActive = VOS_FALSE;
- }
-
- // resume heartbeat monitoring
- else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_ENABLE_HB_MONITOR)
- {
- if (!pMac->btc.btcHBActive)
- {
- ccmCfgSetInt(pMac, WNI_CFG_HEART_BEAT_THRESHOLD, pMac->btc.btcHBCount, NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcHBActive = VOS_TRUE;
- }
- }
- else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_SCAN_COMPROMISED)
- {
- pMac->btc.btcScanCompromise = VOS_TRUE;
- smsLog(pMac, LOGW, "Coex indication in %s(), type - SIR_COEX_IND_TYPE_SCAN_COMPROMISED",
- __func__);
- }
- else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED)
- {
- pMac->btc.btcScanCompromise = VOS_FALSE;
- smsLog(pMac, LOGW, "Coex indication in %s(), type - SIR_COEX_IND_TYPE_SCAN_NOT_COMPROMISED",
- __func__);
- }
- else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4)
- {
- if (pMac->roam.configParam.disableAggWithBtc)
- {
- ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 1,
- NULL, eANI_BOOLEAN_FALSE);
- pMac->btc.btcBssfordisableaggr[0] = pSmeCoexInd->coexIndData[0] & 0xFF;
- pMac->btc.btcBssfordisableaggr[1] = pSmeCoexInd->coexIndData[0] >> 8;
- pMac->btc.btcBssfordisableaggr[2] = pSmeCoexInd->coexIndData[1] & 0xFF;
- pMac->btc.btcBssfordisableaggr[3] = pSmeCoexInd->coexIndData[1] >> 8;
- pMac->btc.btcBssfordisableaggr[4] = pSmeCoexInd->coexIndData[2] & 0xFF;
- pMac->btc.btcBssfordisableaggr[5] = pSmeCoexInd->coexIndData[2] >> 8;
- smsLog(pMac, LOGW, "Coex indication in %s(), "
- "type - SIR_COEX_IND_TYPE_DISABLE_AGGREGATION_IN_2p4 "
- "for BSSID "MAC_ADDRESS_STR,__func__,
- MAC_ADDR_ARRAY(pMac->btc.btcBssfordisableaggr));
- }
- }
- else if (pSmeCoexInd->coexIndType == SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4)
- {
- if (pMac->roam.configParam.disableAggWithBtc)
- {
- ccmCfgSetInt(pMac, WNI_CFG_DEL_ALL_RX_BA_SESSIONS_2_4_G_BTC, 0,
- NULL, eANI_BOOLEAN_FALSE);
- smsLog(pMac, LOGW,
- "Coex indication in %s(), type - SIR_COEX_IND_TYPE_ENABLE_AGGREGATION_IN_2p4",
- __func__);
- }
- }
- // unknown indication type
- else
- {
- smsLog(pMac, LOGE, "unknown Coex indication type in %s()", __func__);
- }
- }
-
- return(status);
-}
-
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
-/* ---------------------------------------------------------------------------
- \fn btcDiagEventLog
- \brief API to log the the current Bluetooth event
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtEvent. Caller owns the memory and is responsible
- for freeing it.
- \return None
- ---------------------------------------------------------------------------*/
-static void btcDiagEventLog (tHalHandle hHal, tpSmeBtEvent pBtEvent)
-{
- //vos_event_wlan_btc_type *log_ptr = NULL;
- WLAN_VOS_DIAG_EVENT_DEF(btDiagEvent, vos_event_wlan_btc_type);
- {
- btDiagEvent.eventId = pBtEvent->btEventType;
- switch(pBtEvent->btEventType)
- {
- case BT_EVENT_CREATE_SYNC_CONNECTION:
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- case BT_EVENT_SYNC_CONNECTION_UPDATED:
- btDiagEvent.connHandle = pBtEvent->uEventParam.btSyncConnection.connectionHandle;
- btDiagEvent.connStatus = pBtEvent->uEventParam.btSyncConnection.status;
- btDiagEvent.linkType = pBtEvent->uEventParam.btSyncConnection.linkType;
- btDiagEvent.scoInterval = pBtEvent->uEventParam.btSyncConnection.scoInterval;
- btDiagEvent.scoWindow = pBtEvent->uEventParam.btSyncConnection.scoWindow;
- btDiagEvent.retransWindow = pBtEvent->uEventParam.btSyncConnection.retransmisisonWindow;
- vos_mem_copy(btDiagEvent.btAddr, pBtEvent->uEventParam.btSyncConnection.bdAddr,
- sizeof(btDiagEvent.btAddr));
- break;
- case BT_EVENT_CREATE_ACL_CONNECTION:
- case BT_EVENT_ACL_CONNECTION_COMPLETE:
- btDiagEvent.connHandle = pBtEvent->uEventParam.btAclConnection.connectionHandle;
- btDiagEvent.connStatus = pBtEvent->uEventParam.btAclConnection.status;
- vos_mem_copy(btDiagEvent.btAddr, pBtEvent->uEventParam.btAclConnection.bdAddr,
- sizeof(btDiagEvent.btAddr));
- break;
- case BT_EVENT_MODE_CHANGED:
- btDiagEvent.connHandle = pBtEvent->uEventParam.btAclModeChange.connectionHandle;
- btDiagEvent.mode = pBtEvent->uEventParam.btAclModeChange.mode;
- break;
- case BT_EVENT_DISCONNECTION_COMPLETE:
- btDiagEvent.connHandle = pBtEvent->uEventParam.btAclModeChange.connectionHandle;
- break;
- default:
- break;
- }
- }
- WLAN_VOS_DIAG_EVENT_REPORT(&btDiagEvent, EVENT_WLAN_BTC);
-}
-#endif /* FEATURE_WLAN_DIAG_SUPPORT */
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
diff --git a/CORE/SME/src/ccm/ccmApi.c b/CORE/SME/src/ccm/ccmApi.c
index ec9ea366f085..3d9f3ef23993 100644
--- a/CORE/SME/src/ccm/ccmApi.c
+++ b/CORE/SME/src/ccm/ccmApi.c
@@ -397,7 +397,7 @@ eHalStatus ccmClose(tHalHandle hHal)
ccmStop(hHal);
/* Go thru comp[] to free all saved requests */
- for (i = 0 ; i < CFG_PARAM_MAX_NUM ; ++i)
+ for (i = 0 ; i < WNI_CFG_MAX ; ++i)
{
if ((req = pMac->ccm.comp[i]) != NULL)
{
@@ -489,7 +489,7 @@ void ccmCfgCnfMsgHandler(tHalHandle hHal, void *m)
/* move the completed req from reqQ to comp[] */
if (req->toBeSaved && (CCM_IS_RESULT_SUCCESS(result)))
{
- if (cfgId < CFG_PARAM_MAX_NUM)
+ if (cfgId < WNI_CFG_MAX)
{
if ((old = pMac->ccm.comp[cfgId]) != NULL)
{
@@ -603,7 +603,7 @@ eHalStatus ccmCfgGetInt(tHalHandle hHal, tANI_U32 cfgId, tANI_U32 *pValue)
eHalStatus status = eHAL_STATUS_SUCCESS ;
tCfgReq *req;
- if (cfgId >= CFG_PARAM_MAX_NUM) {
+ if (cfgId >= WNI_CFG_MAX) {
smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);
return eHAL_STATUS_INVALID_PARAMETER;
}
@@ -635,7 +635,7 @@ eHalStatus ccmCfgGetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pBuf, tANI_U32
hHdd = halHandle2HddHandle(hHal);
- if (cfgId >= CFG_PARAM_MAX_NUM) {
+ if (cfgId >= WNI_CFG_MAX) {
smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId);
return eHAL_STATUS_INVALID_PARAMETER;
}
@@ -687,7 +687,7 @@ static eHalStatus cfgUpdate(tpAniSirGlobal pMac, tHddHandle hHdd, tCcmCfgSetCall
palSpinLockGive(hHdd, pMac->ccm.lock);
/* Calculate message length */
- for (i = 0 ; i < CFG_PARAM_MAX_NUM ; ++i)
+ for (i = 0 ; i < WNI_CFG_MAX ; ++i)
{
if ((req = pMac->ccm.comp[i]) != NULL)
{
@@ -726,7 +726,7 @@ static eHalStatus cfgUpdate(tpAniSirGlobal pMac, tHddHandle hHdd, tCcmCfgSetCall
pl = encodeCfgReq(hHdd, msg->data, CFG_UPDATE_MAGIC_DWORD, 4, NULL, 0, CCM_INTEGER_TYPE) ;
/* Encode the saved cfg requests */
- for (i = 0 ; i < CFG_PARAM_MAX_NUM ; ++i)
+ for (i = 0 ; i < WNI_CFG_MAX ; ++i)
{
if ((req = pMac->ccm.comp[i]) != NULL)
{
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 03620c86e3a9..86dc496f1867 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -536,7 +536,12 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac)
break;
}
}
- if (is_unsafe_chan) {
+ if ((is_unsafe_chan) && ((CSR_IS_CHANNEL_24GHZ(channel) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band ==
+ eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(channel) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band ==
+ eCSR_BAND_5G))) {
smsLog(pMac, LOG1,
FL("ignoring unsafe channel %d"), channel);
continue;
@@ -1252,8 +1257,6 @@ static void initConfigParam(tpAniSirGlobal pMac)
pMac->roam.configParam.nActiveMinChnTime = CSR_ACTIVE_MIN_CHANNEL_TIME;
pMac->roam.configParam.nPassiveMaxChnTime = CSR_PASSIVE_MAX_CHANNEL_TIME;
pMac->roam.configParam.nPassiveMinChnTime = CSR_PASSIVE_MIN_CHANNEL_TIME;
- pMac->roam.configParam.nActiveMaxChnTimeBtc = CSR_ACTIVE_MAX_CHANNEL_TIME_BTC;
- pMac->roam.configParam.nActiveMinChnTimeBtc = CSR_ACTIVE_MIN_CHANNEL_TIME_BTC;
pMac->roam.configParam.disableAggWithBtc = eANI_BOOLEAN_TRUE;
#ifdef WLAN_AP_STA_CONCURRENCY
pMac->roam.configParam.nActiveMaxChnTimeConc = CSR_ACTIVE_MAX_CHANNEL_TIME_CONC;
@@ -1858,14 +1861,6 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa
cfgSetInt(pMac, WNI_CFG_PASSIVE_MINIMUM_CHANNEL_TIME,
pParam->nPassiveMinChnTime);
}
- if (pParam->nActiveMaxChnTimeBtc)
- {
- pMac->roam.configParam.nActiveMaxChnTimeBtc = pParam->nActiveMaxChnTimeBtc;
- }
- if (pParam->nActiveMinChnTimeBtc)
- {
- pMac->roam.configParam.nActiveMinChnTimeBtc = pParam->nActiveMinChnTimeBtc;
- }
#ifdef WLAN_AP_STA_CONCURRENCY
if (pParam->nActiveMaxChnTimeConc)
{
@@ -2120,6 +2115,8 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa
pParam->sta_roam_policy_params.dfs_mode;
pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels =
pParam->sta_roam_policy_params.skip_unsafe_channels;
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band =
+ pParam->sta_roam_policy_params.sap_operating_band;
}
return status;
@@ -2155,8 +2152,6 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pParam->nActiveMinChnTime = pMac->roam.configParam.nActiveMinChnTime;
pParam->nPassiveMaxChnTime = pMac->roam.configParam.nPassiveMaxChnTime;
pParam->nPassiveMinChnTime = pMac->roam.configParam.nPassiveMinChnTime;
- pParam->nActiveMaxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pParam->nActiveMinChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
pParam->disableAggWithBtc = pMac->roam.configParam.disableAggWithBtc;
#ifdef WLAN_AP_STA_CONCURRENCY
pParam->nActiveMaxChnTimeConc = pMac->roam.configParam.nActiveMaxChnTimeConc;
@@ -5875,11 +5870,11 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
*/
//csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINED );
- /* Reset remainInPowerActiveTillDHCP as it might have been set
+ /* Reset full_power_till_set_key as it might have been set
* by last failed secured connection.
* It should be set only for secured connection.
*/
- pMac->pmc.remainInPowerActiveTillDHCP = FALSE;
+ pMac->pmc.full_power_till_set_key = false;
if( CSR_IS_INFRASTRUCTURE( pProfile ) )
{
pSession->connectState = eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED;
@@ -6096,29 +6091,26 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
roamInfo.tdls_chan_swit_prohibited);
#endif
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (pMac->roam.configParam.cc_switch_mode
- != VOS_MCC_TO_SCC_SWITCH_DISABLE) {
- pSession->connectedProfile.HTProfile.phymode =
- csrRoamdot11modeToPhymode(pJoinRsp->HTProfile.dot11mode);
- pSession->connectedProfile.HTProfile.htCapability =
- pJoinRsp->HTProfile.htCapability;
- pSession->connectedProfile.HTProfile.htSupportedChannelWidthSet =
- pJoinRsp->HTProfile.htSupportedChannelWidthSet;
- pSession->connectedProfile.HTProfile.htRecommendedTxWidthSet =
- pJoinRsp->HTProfile.htRecommendedTxWidthSet;
- pSession->connectedProfile.HTProfile.htSecondaryChannelOffset =
- pJoinRsp->HTProfile.htSecondaryChannelOffset;
+ pSession->connectedProfile.HTProfile.phymode =
+ csrRoamdot11modeToPhymode(pJoinRsp->HTProfile.dot11mode);
+ pSession->connectedProfile.HTProfile.htCapability =
+ pJoinRsp->HTProfile.htCapability;
+ pSession->connectedProfile.HTProfile.htSupportedChannelWidthSet =
+ pJoinRsp->HTProfile.htSupportedChannelWidthSet;
+ pSession->connectedProfile.HTProfile.htRecommendedTxWidthSet =
+ pJoinRsp->HTProfile.htRecommendedTxWidthSet;
+ pSession->connectedProfile.HTProfile.htSecondaryChannelOffset =
+ pJoinRsp->HTProfile.htSecondaryChannelOffset;
#ifdef WLAN_FEATURE_11AC
- pSession->connectedProfile.HTProfile.vhtCapability =
- pJoinRsp->HTProfile.vhtCapability;
- pSession->connectedProfile.HTProfile.vhtTxChannelWidthSet =
- pJoinRsp->HTProfile.vhtTxChannelWidthSet;
- pSession->connectedProfile.HTProfile.apCenterChan =
- pJoinRsp->HTProfile.apCenterChan;
- pSession->connectedProfile.HTProfile.apChanWidth =
- pJoinRsp->HTProfile.apChanWidth;
+ pSession->connectedProfile.HTProfile.vhtCapability =
+ pJoinRsp->HTProfile.vhtCapability;
+ pSession->connectedProfile.HTProfile.vhtTxChannelWidthSet =
+ pJoinRsp->HTProfile.vhtTxChannelWidthSet;
+ pSession->connectedProfile.HTProfile.apCenterChan =
+ pJoinRsp->HTProfile.apCenterChan;
+ pSession->connectedProfile.HTProfile.apChanWidth =
+ pJoinRsp->HTProfile.apChanWidth;
#endif
- }
#endif
}
else
@@ -6229,15 +6221,14 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
//enough to let security and DHCP handshake succeed before entry into BMPS
if (!pMac->psOffloadEnabled && pmcShouldBmpsTimerRun(pMac))
{
- /* Set remainInPowerActiveTillDHCP to make sure we wait for
+ /* Set full_power_till_set_key to make sure we wait for
* until keys are set before going into BMPS.
*/
if(eANI_BOOLEAN_TRUE == roamInfo.fAuthRequired)
{
- pMac->pmc.remainInPowerActiveTillDHCP = TRUE;
- smsLog(pMac, LOG1, FL("Set remainInPowerActiveTillDHCP "
- "to make sure we wait until keys are set before"
- " going to BMPS"));
+ pMac->pmc.full_power_till_set_key = true;
+ smsLog(pMac, LOG1,
+ FL("Set full_power_till_set_key to make sure we wait until keys are set before going to BMPS"));
}
if (pmcStartTrafficTimer(pMac, BMPS_TRAFFIC_TIMER_ALLOW_SECURITY_DHCP)
!= eHAL_STATUS_SUCCESS)
@@ -6270,6 +6261,8 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
else
pSession->connectState = eCSR_ASSOC_STATE_TYPE_WDS_DISCONNECTED;
+ roamInfo.staId = (uint8_t)pSmeStartBssRsp->staId;
+
if (CSR_IS_NDI(pProfile)) {
csrRoamStateChange(pMac, eCSR_ROAMING_STATE_JOINED, sessionId);
pSirBssDesc = &pSmeStartBssRsp->bssDescription;
@@ -6403,9 +6396,6 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
&roamStatus, &roamResult, &roamInfo);
}
- //Only tell upper layer is we start the BSS because Vista doesn't like multiple connection
- //indications. If we don't start the BSS ourself, handler of eSIR_SME_JOINED_NEW_BSS will
- //trigger the connection start indication in Vista
roamInfo.statusCode = pSession->joinFailStatusCode.statusCode;
roamInfo.reasonCode = pSession->joinFailStatusCode.reasonCode;
//We start the IBSS (didn't find any matched IBSS out there)
@@ -6425,29 +6415,26 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
}
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
- if (pMac->roam.configParam.cc_switch_mode
- != VOS_MCC_TO_SCC_SWITCH_DISABLE) {
- pSession->connectedProfile.HTProfile.phymode =
- csrRoamdot11modeToPhymode(pSmeStartBssRsp->HTProfile.dot11mode);
- pSession->connectedProfile.HTProfile.htCapability =
- pSmeStartBssRsp->HTProfile.htCapability;
- pSession->connectedProfile.HTProfile.htSupportedChannelWidthSet =
- pSmeStartBssRsp->HTProfile.htSupportedChannelWidthSet;
- pSession->connectedProfile.HTProfile.htRecommendedTxWidthSet =
- pSmeStartBssRsp->HTProfile.htRecommendedTxWidthSet;
- pSession->connectedProfile.HTProfile.htSecondaryChannelOffset =
- pSmeStartBssRsp->HTProfile.htSecondaryChannelOffset;
+ pSession->connectedProfile.HTProfile.phymode =
+ csrRoamdot11modeToPhymode(pSmeStartBssRsp->HTProfile.dot11mode);
+ pSession->connectedProfile.HTProfile.htCapability =
+ pSmeStartBssRsp->HTProfile.htCapability;
+ pSession->connectedProfile.HTProfile.htSupportedChannelWidthSet =
+ pSmeStartBssRsp->HTProfile.htSupportedChannelWidthSet;
+ pSession->connectedProfile.HTProfile.htRecommendedTxWidthSet =
+ pSmeStartBssRsp->HTProfile.htRecommendedTxWidthSet;
+ pSession->connectedProfile.HTProfile.htSecondaryChannelOffset =
+ pSmeStartBssRsp->HTProfile.htSecondaryChannelOffset;
#ifdef WLAN_FEATURE_11AC
- pSession->connectedProfile.HTProfile.vhtCapability =
- pSmeStartBssRsp->HTProfile.vhtCapability;
- pSession->connectedProfile.HTProfile.vhtTxChannelWidthSet =
- pSmeStartBssRsp->HTProfile.vhtTxChannelWidthSet;
- pSession->connectedProfile.HTProfile.apCenterChan =
- pSmeStartBssRsp->HTProfile.apCenterChan;
- pSession->connectedProfile.HTProfile.apChanWidth =
- pSmeStartBssRsp->HTProfile.apChanWidth;
+ pSession->connectedProfile.HTProfile.vhtCapability =
+ pSmeStartBssRsp->HTProfile.vhtCapability;
+ pSession->connectedProfile.HTProfile.vhtTxChannelWidthSet =
+ pSmeStartBssRsp->HTProfile.vhtTxChannelWidthSet;
+ pSession->connectedProfile.HTProfile.apCenterChan =
+ pSmeStartBssRsp->HTProfile.apCenterChan;
+ pSession->connectedProfile.HTProfile.apChanWidth =
+ pSmeStartBssRsp->HTProfile.apChanWidth;
#endif
- }
#endif
csrRoamCallCallback( pMac, sessionId, &roamInfo, pCommand->u.roamCmd.roamId, roamStatus, roamResult );
}
@@ -7029,7 +7016,7 @@ eHalStatus csrRoamCopyConnectedProfile(tpAniSirGlobal pMac, tANI_U32 sessionId,
vos_mem_copy(pDstProfile->BSSIDs.bssid, pSrcProfile->bssid,
sizeof(tCsrBssid));
}
- if(pSrcProfile->SSID.ssId)
+ if(pSrcProfile->SSID.length > 0)
{
pDstProfile->SSIDs.SSIDList = vos_mem_malloc(sizeof(tCsrSSIDInfo));
if ( NULL == pDstProfile->SSIDs.SSIDList )
@@ -7375,6 +7362,8 @@ eHalStatus csrRoamConnect(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi
pProfile->operationChannel);
return status;
}
+ /* Reset dhcp_done for the fresh connection */
+ pSession->dhcp_done = false;
csrRoamCancelRoaming(pMac, sessionId);
csrScanRemoveFreshScanCommand(pMac, sessionId);
csrScanCancelIdleScan(pMac);
@@ -9232,9 +9221,7 @@ void csrRoamingStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf )
pSmeRsp->messageType, pSmeRsp->messageType,
macTraceGetcsrRoamSubState(
pMac->roam.curSubState[pSmeRsp->sessionId]));
- pSmeRsp->messageType = (pSmeRsp->messageType);
- pSmeRsp->length = (pSmeRsp->length);
- pSmeRsp->statusCode = (pSmeRsp->statusCode);
+
switch (pSmeRsp->messageType)
{
@@ -10321,6 +10308,7 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg )
tSirSmeAssocInd *pAssocInd;
tSirSmeDisassocInd *pDisassocInd;
tSirSmeDeauthInd *pDeauthInd;
+ tSirSmeDisConDoneInd *pDisConDoneInd;
tSirSmeWmStatusChangeNtf *pStatusChangeMsg;
tSirSmeNewBssInfo *pNewBss;
tSmeIbssPeerInd *pIbssPeerInd;
@@ -10485,22 +10473,6 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg )
csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDisassociated, pSirMsg );
if(CSR_IS_INFRA_AP(&pSession->connectedProfile))
{
-
- pRoamInfo = &roamInfo;
-
- pRoamInfo->statusCode = pDisassocInd->statusCode;
- pRoamInfo->reasonCode = pDisassocInd->reasonCode;
- pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile;
-
- pRoamInfo->staId = (tANI_U8)pDisassocInd->staId;
-
- vos_mem_copy(pRoamInfo->peerMac, pDisassocInd->peerMacAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(&pRoamInfo->bssid, pDisassocInd->bssId,
- sizeof(tCsrBssid));
-
- status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DISASSOC_IND);
-
/*
* STA/P2P client got disassociated so remove any pending deauth
* commands in sme pending list
@@ -10568,27 +10540,40 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg )
#endif
csrRoamLinkDown(pMac, sessionId);
csrRoamIssueWmStatusChange( pMac, sessionId, eCsrDeauthenticated, pSirMsg );
- if(CSR_IS_INFRA_AP(&pSession->connectedProfile))
- {
-
- pRoamInfo = &roamInfo;
-
- pRoamInfo->statusCode = pDeauthInd->statusCode;
- pRoamInfo->reasonCode = pDeauthInd->reasonCode;
- pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile;
-
- pRoamInfo->staId = (tANI_U8)pDeauthInd->staId;
-
- vos_mem_copy(pRoamInfo->peerMac, pDeauthInd->peerMacAddr,
- sizeof(tSirMacAddr));
- vos_mem_copy(&pRoamInfo->bssid, pDeauthInd->bssId,
- sizeof(tCsrBssid));
-
- status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_DEAUTH_IND);
- }
}
break;
+ case eWNI_SME_DISCONNECT_DONE_IND:
+ pDisConDoneInd = (tSirSmeDisConDoneInd *)(pSirMsg);
+ smsLog( pMac, LOG1,
+ FL("eWNI_SME_DISCONNECT_DONE_IND RC:%d"),
+ pDisConDoneInd->reasonCode);
+ if (CSR_IS_SESSION_VALID(pMac, pDisConDoneInd->sessionId))
+ {
+ roamInfo.reasonCode = pDisConDoneInd->reasonCode;
+ roamInfo.statusCode = eSIR_SME_STA_DISASSOCIATED;
+ vos_mem_copy(roamInfo.peerMac, pDisConDoneInd->peerMacAddr,
+ sizeof(tSirMacAddr));
+ status = csrRoamCallCallback(pMac,
+ pDisConDoneInd->sessionId,
+ &roamInfo, 0,
+ eCSR_ROAM_LOSTLINK,
+ eCSR_ROAM_RESULT_DISASSOC_IND);
+ pSession = CSR_GET_SESSION(pMac,
+ pDisConDoneInd->sessionId);
+ if (pSession &&
+ !CSR_IS_INFRA_AP(&pSession->connectedProfile))
+ csrRoamStateChange(pMac,
+ eCSR_ROAMING_STATE_IDLE,
+ pDisConDoneInd->sessionId);
+ }
+ else
+ {
+ smsLog(pMac, LOGE, FL("Inactive session %d"),
+ pDisConDoneInd->sessionId);
+ }
+ break;
+
case eWNI_SME_SWITCH_CHL_REQ: // in case of STA, the SWITCH_CHANNEL originates from its AP
smsLog( pMac, LOGW, FL("eWNI_SME_SWITCH_CHL_REQ from SME"));
pSwitchChnInd = (tpSirSmeSwitchChannelInd)pSirMsg;
@@ -11664,17 +11649,7 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty
result = eCSR_ROAM_RESULT_DEAUTH_IND;
pDeauthIndMsg = (tSirSmeDeauthInd *)pSirMsg;
pSession->roamingStatusCode = pDeauthIndMsg->statusCode;
- /* Convert into proper reason code */
- if ((pDeauthIndMsg->reasonCode == eSIR_BEACON_MISSED) ||
- (pDeauthIndMsg->reasonCode ==
- eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON))
- pSession->joinFailStatusCode.reasonCode = 0;
- else
- pSession->joinFailStatusCode.reasonCode = pDeauthIndMsg->reasonCode;
- /*
- * cfg layer expects 0 as reason code if the driver doesn't know the
- * reason code eSIR_BEACON_MISSED is defined as locally
- */
+ pSession->joinFailStatusCode.reasonCode = pDeauthIndMsg->reasonCode;
}
else
{
@@ -11687,9 +11662,6 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty
if(!CSR_IS_INFRA_AP(&pSession->connectedProfile))
{
csrRoamCallCallback(pMac, sessionId, NULL, 0, eCSR_ROAM_LOSTLINK_DETECTED, result);
- /*Move the state to Idle after disconnection*/
- csrRoamStateChange( pMac, eCSR_ROAMING_STATE_IDLE, sessionId );
-
}
if ( eWNI_SME_DISASSOC_IND == type )
@@ -11775,16 +11747,6 @@ eHalStatus csrRoamLostLink( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 ty
}
if(!fToRoam)
{
- //Tell HDD about the lost link
- if(!CSR_IS_INFRA_AP(&pSession->connectedProfile))
- {
- /* Don't call csrRoamCallCallback for GO/SoftAp case as this indication
- * was already given as part of eWNI_SME_DISASSOC_IND msg handling in
- * csrRoamCheckForLinkStatusChange API.
- */
- csrRoamCallCallback(pMac, sessionId, &roamInfo, 0, eCSR_ROAM_LOSTLINK, result);
- }
-
/*No need to start idle scan in case of IBSS/SAP
Still enable idle scan for polling in case concurrent sessions are running */
if(CSR_IS_INFRASTRUCTURE(&pSession->connectedProfile))
@@ -12590,130 +12552,241 @@ tANI_U8 csrRoamGetIbssStartChannelNumber24( tpAniSirGlobal pMac )
return( channel );
}
-
-static void csrRoamGetBssStartParms( tpAniSirGlobal pMac, tCsrRoamProfile *pProfile,
- tCsrRoamStartBssParams *pParam )
+/**
+ * csr_populate_default_rates() - populates OFDM or CCK rates
+ * @rates: rate struct to populate
+ * @is_ofdm_rates: true: ofdm rates, false: cck rates
+ * @is_basic_rates: indicates if rates are to be masked with
+ * CSR_DOT11_BASIC_RATE_MASK
+ *
+ * This function will populate OFDM or CCK rates
+ *
+ * Return: void
+ */
+static void
+csr_populate_default_rates(tSirMacRateSet *rate_set, bool is_ofdm_rates,
+ bool is_basic_rates)
{
- eCsrBand eBand;
- tANI_U8 channel = 0;
- tSirNwType nwType;
- tANI_U8 operationChannel = 0;
-
- if(pProfile->ChannelInfo.numOfChannels && pProfile->ChannelInfo.ChannelList)
- {
- operationChannel = pProfile->ChannelInfo.ChannelList[0];
- }
-
- pParam->uCfgDot11Mode =
- csrRoamGetPhyModeBandForBss( pMac, pProfile, operationChannel, &eBand );
-
- if( ( (pProfile->csrPersona == VOS_P2P_CLIENT_MODE) ||
- (pProfile->csrPersona == VOS_P2P_GO_MODE) )
- && ( pParam->uCfgDot11Mode == eCSR_CFG_DOT11_MODE_11B)
- )
- {
- /* This should never happen */
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL,
- FL("For P2PClient/P2P-GO (persona %d) cfgDot11Mode is 11B"),
- pProfile->csrPersona);
- VOS_ASSERT(0);
- }
-
- switch( pParam->uCfgDot11Mode )
- {
- case eCSR_CFG_DOT11_MODE_11G:
- nwType = eSIR_11G_NW_TYPE;
- break;
- case eCSR_CFG_DOT11_MODE_11B:
- nwType = eSIR_11B_NW_TYPE;
- break;
- case eCSR_CFG_DOT11_MODE_11A:
- nwType = eSIR_11A_NW_TYPE;
- break;
- default:
- case eCSR_CFG_DOT11_MODE_11N:
- /* Because LIM only verifies it against 11a, 11b or 11g,
- set only 11g or 11a here */
- if (eCSR_BAND_24 == eBand) {
- nwType = eSIR_11G_NW_TYPE;
- } else {
- nwType = eSIR_11A_NW_TYPE;
- }
- break;
- }
-
- pParam->extendedRateSet.numRates = 0;
-
- if (pProfile->supported_rates.numRates) {
- pParam->operationalRateSet.numRates =
- pProfile->supported_rates.numRates;
- vos_mem_copy(pParam->operationalRateSet.rate,
- pProfile->supported_rates.rate,
- pProfile->supported_rates.numRates);
- }
-
- if (pProfile->extended_rates.numRates) {
- pParam->extendedRateSet.numRates =
- pProfile->extended_rates.numRates;
- vos_mem_copy(pParam->extendedRateSet.rate,
- pProfile->extended_rates.rate,
- pProfile->extended_rates.numRates);
- }
-
-
-
- switch ( nwType )
- {
- default:
- smsLog(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), nwType);
- case eSIR_11A_NW_TYPE:
+ int i = 0;
+ uint8_t ofdm_rates[8] = {
+ SIR_MAC_RATE_6,
+ SIR_MAC_RATE_9,
+ SIR_MAC_RATE_12,
+ SIR_MAC_RATE_18,
+ SIR_MAC_RATE_24,
+ SIR_MAC_RATE_36,
+ SIR_MAC_RATE_48,
+ SIR_MAC_RATE_54
+ };
+ uint8_t cck_rates[4] = {
+ SIR_MAC_RATE_1,
+ SIR_MAC_RATE_2,
+ SIR_MAC_RATE_5_5,
+ SIR_MAC_RATE_11
+ };
+
+ if (is_ofdm_rates == true) {
+ rate_set->numRates = 8;
+ vos_mem_copy(rate_set->rate, ofdm_rates, sizeof(ofdm_rates));
+ if (is_basic_rates) {
+ rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK;
+ rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK;
+ rate_set->rate[4] |= CSR_DOT11_BASIC_RATE_MASK;
+ }
+ for(i=0;i< rate_set->numRates; i++)
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Default OFDM rate is %2x"), rate_set->rate[i]);
+
+ } else {
+ rate_set->numRates = 4;
+ vos_mem_copy(rate_set->rate, cck_rates, sizeof(cck_rates));
+ if (is_basic_rates) {
+ rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK;
+ rate_set->rate[1] |= CSR_DOT11_BASIC_RATE_MASK;
+ rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK;
+ rate_set->rate[3] |= CSR_DOT11_BASIC_RATE_MASK;
+ }
+ for(i=0;i< rate_set->numRates; i++)
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Default CCK rate is %2x"), rate_set->rate[i]);
+ }
- if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
- {
- channel = csrRoamGetIbssStartChannelNumber50( pMac );
- if( 0 == channel &&
- CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) &&
- CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode)
- )
- {
- //We could not find a 5G channel by auto pick, let's try 2.4G channels
- //We only do this here because csrRoamGetPhyModeBandForBss always picks 11a for AUTO
- nwType = eSIR_11B_NW_TYPE;
- channel = csrRoamGetIbssStartChannelNumber24( pMac );
- }
- }
- else
- {
- channel = operationChannel;
- }
- break;
+}
+/**
+ * csr_convert_mode_to_nw_type() - convert mode into network type
+ * @dot11_mode: dot11_mode
+ * @band: 2.4 or 5 GHz
+ *
+ * Return: tSirNwType
+ */
+static tSirNwType
+csr_convert_mode_to_nw_type(eCsrCfgDot11Mode dot11_mode, eCsrBand band)
+{
+ switch (dot11_mode) {
+ case eCSR_CFG_DOT11_MODE_11G:
+ return eSIR_11G_NW_TYPE;
+ case eCSR_CFG_DOT11_MODE_11B:
+ return eSIR_11B_NW_TYPE;
+ case eCSR_CFG_DOT11_MODE_11A:
+ return eSIR_11A_NW_TYPE;
+ case eCSR_CFG_DOT11_MODE_11N:
+ default:
+ /*
+ * Because LIM only verifies it against 11a, 11b or 11g,
+ * set only 11g or 11a here
+ */
+ if (eCSR_BAND_24 == band)
+ return eSIR_11G_NW_TYPE;
+ else
+ return eSIR_11A_NW_TYPE;
+ }
+ return eSIR_DONOT_USE_NW_TYPE;
+}
- case eSIR_11B_NW_TYPE:
- if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
- {
- channel = csrRoamGetIbssStartChannelNumber24( pMac );
- }
- else
- {
- channel = operationChannel;
- }
+/**
+ * csr_populate_supported_rates_from_hostapd() - populates operational
+ * and extended rates.
+ * from hostapd.conf file
+ * @opr_rates: rate struct to populate operational rates
+ * @ext_rates: rate struct to populate extended rates
+ * @profile: bss profile
+ *
+ * Return: void
+ */
+static void csr_populate_supported_rates_from_hostapd(tSirMacRateSet *opr_rates,
+ tSirMacRateSet *ext_rates,
+ tCsrRoamProfile *pProfile)
+{
+ int i = 0;
+ if (pProfile->supported_rates.numRates) {
+ opr_rates->numRates = pProfile->supported_rates.numRates;
+ vos_mem_copy(opr_rates->rate,
+ pProfile->supported_rates.rate,
+ pProfile->supported_rates.numRates);
+ for (i=0; i<opr_rates->numRates; i++)
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Supported Rate is %2x"), opr_rates->rate[i]);
+ }
+ if (pProfile->extended_rates.numRates) {
+ ext_rates->numRates =
+ pProfile->extended_rates.numRates;
+ vos_mem_copy(ext_rates->rate,
+ pProfile->extended_rates.rate,
+ pProfile->extended_rates.numRates);
+ for (i=0; i<ext_rates->numRates; i++)
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ FL("Extended Rate is %2x"), ext_rates->rate[i]);
+ }
+}
- break;
- case eSIR_11G_NW_TYPE:
- if ( eCSR_OPERATING_CHANNEL_ANY == operationChannel )
- {
- channel = csrRoamGetIbssStartChannelNumber24( pMac );
- }
- else
- {
- channel = operationChannel;
- }
+/**
+ * csrRoamGetBssStartParms() - get bss start param from profile
+ * @pMac: mac global context
+ * @pProfile: roam profile
+ * @pParam: out param, start bss params
+ *
+ * This function populates start bss param from roam profile
+ *
+ * Return: void
+ */
+static void csrRoamGetBssStartParms(tpAniSirGlobal pMac,
+ tCsrRoamProfile *pProfile,
+ tCsrRoamStartBssParams *pParam)
+{
+ eCsrBand eBand;
+ tANI_U8 channel = 0;
+ tSirNwType nwType;
+ tANI_U8 operation_channel = 0;
+ tSirMacRateSet *opr_rates = &pParam->operationalRateSet;
+ tSirMacRateSet *ext_rates = &pParam->extendedRateSet;
+
+ if (pProfile->ChannelInfo.numOfChannels &&
+ pProfile->ChannelInfo.ChannelList)
+ operation_channel = pProfile->ChannelInfo.ChannelList[0];
+
+ pParam->uCfgDot11Mode =
+ csrRoamGetPhyModeBandForBss(pMac, pProfile,
+ operation_channel, &eBand);
+
+ if (((pProfile->csrPersona == VOS_P2P_CLIENT_MODE) ||
+ (pProfile->csrPersona == VOS_P2P_GO_MODE)) &&
+ (pParam->uCfgDot11Mode == eCSR_CFG_DOT11_MODE_11B)) {
+ /* This should never happen */
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL,
+ FL("For P2PClient/P2P-GO (persona %d) cfgDot11Mode is 11B"),
+ pProfile->csrPersona);
+ VOS_ASSERT(0);
+ }
+ nwType = csr_convert_mode_to_nw_type(pParam->uCfgDot11Mode, eBand);
+ pParam->extendedRateSet.numRates = 0;
+ /*
+ * hostapd.conf will populate its basic and extended rates
+ * as per hw_mode but if acs in ini is enabled, driver should
+ * ignore basic and extended rates from hostapd.conf and should
+ * populate default rates.
+ */
+ if (pProfile->supported_rates.numRates ||
+ pProfile->extended_rates.numRates) {
+ csr_populate_supported_rates_from_hostapd(opr_rates,
+ ext_rates, pProfile);
+ pParam->operationChn = operation_channel;
+ pParam->sirNwType = nwType;
+ pParam->vht_channel_width = pProfile->vht_channel_width;
+ return;
+ }
+ switch (nwType) {
+ default:
+ smsLog(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"),
+ nwType);
+ case eSIR_11A_NW_TYPE:
+ csr_populate_default_rates(opr_rates, true, true);
+ if (eCSR_OPERATING_CHANNEL_ANY != operation_channel) {
+ channel = operation_channel;
+ break;
+ }
+ channel = csrRoamGetIbssStartChannelNumber50(pMac);
+ if (0 == channel &&
+ CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) &&
+ CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode)) {
+ /*
+ * We could not find a 5G channel by auto pick, let's
+ * try 2.4G channels. We only do this here because
+ * csr_roam_get_phy_mode_band_for_bss always picks 11a
+ * for AUTO
+ */
+ nwType = eSIR_11B_NW_TYPE;
+ channel = csrRoamGetIbssStartChannelNumber24(pMac);
+ csr_populate_default_rates(opr_rates, false, true);
- break;
- }
- pParam->operationChn = channel;
- pParam->sirNwType = nwType;
- pParam->vht_channel_width = pProfile->vht_channel_width;
+ }
+ break;
+ case eSIR_11B_NW_TYPE:
+ csr_populate_default_rates(opr_rates, false, true);
+ if (eCSR_OPERATING_CHANNEL_ANY == operation_channel)
+ channel = csrRoamGetIbssStartChannelNumber24(pMac);
+ else
+ channel = operation_channel;
+ break;
+ case eSIR_11G_NW_TYPE:
+ if ((pProfile->csrPersona == VOS_P2P_CLIENT_MODE) ||
+ (pProfile->csrPersona == VOS_P2P_GO_MODE) ||
+ (eCSR_CFG_DOT11_MODE_11G_ONLY == pParam->uCfgDot11Mode)) {
+ csr_populate_default_rates(opr_rates, true, true);
+ }
+ else {
+ csr_populate_default_rates(opr_rates, false, true);
+ csr_populate_default_rates(ext_rates, true, false);
+ }
+ if (eCSR_OPERATING_CHANNEL_ANY == operation_channel)
+ channel = csrRoamGetIbssStartChannelNumber24(pMac);
+ else
+ channel = operation_channel;
+ break;
+ }
+ pParam->operationChn = channel;
+ pParam->sirNwType = nwType;
+ pParam->vht_channel_width = pProfile->vht_channel_width;
+ return;
}
static void csrRoamGetBssStartParmsFromBssDesc( tpAniSirGlobal pMac, tSirBssDescription *pBssDesc,
@@ -13673,20 +13746,8 @@ static void csrPrepareJoinReassocReqBuffer( tpAniSirGlobal pMac,
smsLog(pMac, LOGE, FL("can not find any valid channel"));
*pBuf++ = 0; //tSirSupChnl->numChnl
}
- //Check whether it is ok to enter UAPSD
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if( btcIsReadyForUapsd(pMac) )
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
- {
- *pBuf++ = uapsdMask;
- }
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- else
- {
- smsLog(pMac, LOGE, FL(" BTC doesn't allow UAPSD for uapsd_mask(0x%X)"), uapsdMask);
- *pBuf++ = 0;
- }
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
+
+ *pBuf++ = uapsdMask;
// move the entire BssDescription into the join request.
vos_mem_copy(pBuf, pBssDescription,
@@ -15937,6 +15998,10 @@ eHalStatus csrRoamCloseSession( tpAniSirGlobal pMac, tANI_U32 sessionId,
purgeSmeSessionCmdList(pMac, sessionId,
&pMac->sme.smeScanCmdPendingList);
}
+ if (pMac->fP2pListenOffload) {
+ purgeSmeSessionCmdList(pMac, sessionId,
+ &pMac->sme.smeScanCmdActiveList);
+ }
purgeCsrSessionCmdList(pMac, sessionId);
status = csrIssueDelStaForSessionReq( pMac, sessionId,
pSession->selfMacAddr, callback, pContext);
@@ -17655,7 +17720,14 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
break;
}
}
- if (is_unsafe_chan) {
+ if ((is_unsafe_chan) &&
+ ((CSR_IS_CHANNEL_24GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band ==
+ eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band ==
+ eCSR_BAND_5G))) {
+
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
FL("ignoring unsafe channel %d"),
*ChannelList);
@@ -17700,7 +17772,12 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
break;
}
}
- if (is_unsafe_chan) {
+ if ((is_unsafe_chan) && ((CSR_IS_CHANNEL_24GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_5G))) {
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
FL("ignoring unsafe channel %d"),
*ChannelList);
@@ -17767,7 +17844,12 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
break;
}
}
- if (is_unsafe_chan) {
+ if ((is_unsafe_chan) && (((CSR_IS_CHANNEL_24GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_5G)))) {
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
FL("ignoring unsafe channel %d"),
*ChannelList);
@@ -17841,13 +17923,19 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 sessionId,
break;
}
}
- if (is_unsafe_chan) {
+ if ((is_unsafe_chan) && (((CSR_IS_CHANNEL_24GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(*ChannelList) &&
+ pMac->roam.configParam.sta_roam_policy.sap_operating_band
+ == eCSR_BAND_5G)))) {
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- FL("ignoring unsafe channel %d"),
+ FL("ignoring unsafe channel %d"),
*ChannelList);
ChannelList++;
continue;
}
+
}
pRequestBuf->ValidChannelList[num_channels++] = *ChannelList;
ChannelList++;
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 580fe09fd89e..10f4e5b69b2b 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -274,8 +274,6 @@ static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType,
pScanRequest->maxChnTime = pMac->roam.configParam.nPassiveMaxChnTimeConc;
pScanRequest->minChnTime = pMac->roam.configParam.nPassiveMinChnTimeConc;
}
- pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
pScanRequest->restTime = pMac->roam.configParam.nRestTimeConc;
pScanRequest->min_rest_time = pMac->roam.configParam.min_rest_time_conc;
@@ -303,8 +301,6 @@ static void csrSetDefaultScanTiming( tpAniSirGlobal pMac, tSirScanType scanType,
pScanRequest->maxChnTime = pMac->roam.configParam.nPassiveMaxChnTime;
pScanRequest->minChnTime = pMac->roam.configParam.nPassiveMinChnTime;
}
- pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
#ifdef WLAN_AP_STA_CONCURRENCY
/* No rest time/Idle time if no sessions are connected. */
@@ -718,7 +714,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId,
*/
status = csrRoamGetConnectState(pMac,sessionId,&ConnectState);
if (HAL_STATUS_SUCCESS(status) &&
- pMac->btc.fA2DPUp &&
(eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED != ConnectState) &&
(eCSR_ASSOC_STATE_TYPE_IBSS_CONNECTED != ConnectState))
{
@@ -730,8 +725,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId,
pScanRequest->minChnTime);
}
- pScanRequest->maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pScanRequest->minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
//Need to make the following atomic
pScanCmd->u.scanCmd.scanID = pMac->scan.nextScanID++; //let it wrap around
@@ -796,9 +789,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId,
p11dScanCmd->u.scanCmd.reason = eCsrScanIdleScan;
scanReq.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime;
scanReq.minChnTime = pMac->roam.configParam.nActiveMinChnTime;
-
- scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
}
if (pMac->roam.configParam.nInitialDwellTime)
{
@@ -1049,8 +1039,6 @@ eHalStatus csrScanAllChannels(tpAniSirGlobal pMac, eCsrRequestType reqType)
scanReq.requestType = reqType;
scanReq.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime;
scanReq.minChnTime = pMac->roam.configParam.nActiveMinChnTime;
- scanReq.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- scanReq.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
//Scan with invalid sessionId.
//This results in SME using the first available session to scan.
status = csrScanRequest(pMac, CSR_SESSION_ID_INVALID, &scanReq,
@@ -1338,8 +1326,6 @@ eHalStatus csrScanRequestLostLink1( tpAniSirGlobal pMac, tANI_U32 sessionId )
pCommand->u.scanCmd.pContext = NULL;
pCommand->u.scanCmd.u.scanRequest.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime;
pCommand->u.scanCmd.u.scanRequest.minChnTime = pMac->roam.configParam.nActiveMinChnTime;
- pCommand->u.scanCmd.u.scanRequest.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pCommand->u.scanCmd.u.scanRequest.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN;
if(pSession->connectedProfile.SSID.length)
{
@@ -1515,8 +1501,6 @@ eHalStatus csrScanRequestLostLink2( tpAniSirGlobal pMac, tANI_U32 sessionId )
pCommand->u.scanCmd.pContext = NULL;
pCommand->u.scanCmd.u.scanRequest.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime;
pCommand->u.scanCmd.u.scanRequest.minChnTime = pMac->roam.configParam.nActiveMinChnTime;
- pCommand->u.scanCmd.u.scanRequest.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pCommand->u.scanCmd.u.scanRequest.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN;
if(pSession->pCurRoamProfile)
{
@@ -1629,8 +1613,6 @@ eHalStatus csrScanRequestLostLink3( tpAniSirGlobal pMac, tANI_U32 sessionId )
pCommand->u.scanCmd.pContext = NULL;
pCommand->u.scanCmd.u.scanRequest.maxChnTime = pMac->roam.configParam.nActiveMaxChnTime;
pCommand->u.scanCmd.u.scanRequest.minChnTime = pMac->roam.configParam.nActiveMinChnTime;
- pCommand->u.scanCmd.u.scanRequest.maxChnTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pCommand->u.scanCmd.u.scanRequest.minChnTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
pCommand->u.scanCmd.u.scanRequest.scanType = eSIR_ACTIVE_SCAN;
vos_mem_copy(&pCommand->u.scanCmd.u.scanRequest.bssid, bAddr, sizeof(tCsrBssid));
//Put to the head of pending queue
@@ -2853,81 +2835,150 @@ eHalStatus csrScanCopyResultList(tpAniSirGlobal pMac, tScanResultHandle hIn, tSc
eHalStatus csrScanningStateMsgProcessor( tpAniSirGlobal pMac, void *pMsgBuf )
{
- eHalStatus status = eHAL_STATUS_SUCCESS;
- tSirMbMsg *pMsg = (tSirMbMsg *)pMsgBuf;
-
- if((eWNI_SME_SCAN_RSP == pMsg->type) || (eWNI_SME_GET_SCANNED_CHANNEL_RSP == pMsg->type))
- {
- status = csrScanSmeScanResponse( pMac, pMsgBuf );
- }
- else
- {
- if(pMsg->type == eWNI_SME_UPPER_LAYER_ASSOC_CNF)
- {
- tCsrRoamSession *pSession;
- tSirSmeAssocIndToUpperLayerCnf *pUpperLayerAssocCnf;
- tCsrRoamInfo roamInfo;
- tCsrRoamInfo *pRoamInfo = NULL;
- tANI_U32 sessionId;
- eHalStatus status;
- smsLog( pMac, LOG1, FL("Scanning : ASSOCIATION confirmation can be given to upper layer "));
- vos_mem_set(&roamInfo, sizeof(tCsrRoamInfo), 0);
- pRoamInfo = &roamInfo;
- pUpperLayerAssocCnf = (tSirSmeAssocIndToUpperLayerCnf *)pMsgBuf;
- status = csrRoamGetSessionIdFromBSSID( pMac, (tCsrBssid *)pUpperLayerAssocCnf->bssId, &sessionId );
- pSession = CSR_GET_SESSION(pMac, sessionId);
-
- if(!pSession)
- {
- smsLog(pMac, LOGE, FL(" session %d not found "), sessionId);
- return eHAL_STATUS_FAILURE;
- }
-
- pRoamInfo->statusCode = eSIR_SME_SUCCESS; //send the status code as Success
- pRoamInfo->u.pConnectedProfile = &pSession->connectedProfile;
- pRoamInfo->staId = (tANI_U8)pUpperLayerAssocCnf->aid;
- pRoamInfo->rsnIELen = (tANI_U8)pUpperLayerAssocCnf->rsnIE.length;
- pRoamInfo->prsnIE = pUpperLayerAssocCnf->rsnIE.rsnIEdata;
- pRoamInfo->addIELen = (tANI_U8)pUpperLayerAssocCnf->addIE.length;
- pRoamInfo->paddIE = pUpperLayerAssocCnf->addIE.addIEdata;
- vos_mem_copy(pRoamInfo->peerMac, pUpperLayerAssocCnf->peerMacAddr, sizeof(tSirMacAddr));
- vos_mem_copy(&pRoamInfo->bssid, pUpperLayerAssocCnf->bssId, sizeof(tCsrBssid));
- pRoamInfo->wmmEnabledSta = pUpperLayerAssocCnf->wmmEnabledSta;
- if(CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile) )
- {
- pMac->roam.roamSession[sessionId].connectState = eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED;
- pRoamInfo->fReassocReq = pUpperLayerAssocCnf->reassocReq;
- status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_INFRA_IND, eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF);
- }
- if(CSR_IS_WDS_AP( pRoamInfo->u.pConnectedProfile))
- {
- vos_sleep( 100 );
- pMac->roam.roamSession[sessionId].connectState = eCSR_ASSOC_STATE_TYPE_WDS_CONNECTED;//Sta
- status = csrRoamCallCallback(pMac, sessionId, pRoamInfo, 0, eCSR_ROAM_WDS_IND, eCSR_ROAM_RESULT_WDS_ASSOCIATION_IND);//Sta
- }
-
- }
- else
- {
-
- if( csrIsAnySessionInConnectState( pMac ) )
- {
- //In case of we are connected, we need to check whether connect status changes
- //because scan may also run while connected.
- csrRoamCheckForLinkStatusChange( pMac, ( tSirSmeRsp * )pMsgBuf );
- }
- else
- {
- smsLog( pMac, LOGW, "Message [0x%04x] received in state, when expecting Scan Response", pMsg->type );
- }
- }
- }
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tSirMbMsg *pMsg = (tSirMbMsg *)pMsgBuf;
+ tSirSmeDisConDoneInd *pDisConDoneInd;
+ tCsrRoamInfo roamInfo = {0};
+ tCsrRoamSession *pSession;
+
+ if ((eWNI_SME_SCAN_RSP == pMsg->type) ||
+ (eWNI_SME_GET_SCANNED_CHANNEL_RSP == pMsg->type)) {
+ status = csrScanSmeScanResponse( pMac, pMsgBuf );
+ } else {
+ switch (pMsg->type) {
+ case eWNI_SME_UPPER_LAYER_ASSOC_CNF:
+ {
+ tSirSmeAssocIndToUpperLayerCnf *pUpperLayerAssocCnf;
+ tCsrRoamInfo *pRoamInfo = NULL;
+ tANI_U32 sessionId;
+ eHalStatus status;
+
+ smsLog(pMac, LOG1,
+ FL("Scanning : ASSOCIATION confirmation can be given to upper layer "));
+
+ pRoamInfo = &roamInfo;
+ pUpperLayerAssocCnf =
+ (tSirSmeAssocIndToUpperLayerCnf *)pMsgBuf;
+ status = csrRoamGetSessionIdFromBSSID( pMac,
+ (tCsrBssid *)pUpperLayerAssocCnf->bssId,
+ &sessionId );
+ pSession = CSR_GET_SESSION(pMac, sessionId);
+ if(!pSession) {
+ smsLog(pMac, LOGE,
+ FL(" session %d not found "),
+ sessionId);
+ return eHAL_STATUS_FAILURE;
+ }
+ //send the status code as Success
+ pRoamInfo->statusCode = eSIR_SME_SUCCESS;
+ pRoamInfo->u.pConnectedProfile =
+ &pSession->connectedProfile;
+ pRoamInfo->staId = (tANI_U8)pUpperLayerAssocCnf->aid;
+ pRoamInfo->rsnIELen =
+ (tANI_U8)pUpperLayerAssocCnf->rsnIE.length;
+ pRoamInfo->prsnIE =
+ pUpperLayerAssocCnf->rsnIE.rsnIEdata;
+ pRoamInfo->addIELen =
+ (tANI_U8)pUpperLayerAssocCnf->addIE.length;
+ pRoamInfo->paddIE =
+ pUpperLayerAssocCnf->addIE.addIEdata;
+ vos_mem_copy(pRoamInfo->peerMac,
+ pUpperLayerAssocCnf->peerMacAddr,
+ sizeof(tSirMacAddr));
+ vos_mem_copy(&pRoamInfo->bssid,
+ pUpperLayerAssocCnf->bssId,
+ sizeof(tCsrBssid));
+ pRoamInfo->wmmEnabledSta =
+ pUpperLayerAssocCnf->wmmEnabledSta;
+ if (CSR_IS_INFRA_AP(pRoamInfo->u.pConnectedProfile)) {
+ pMac->roam.roamSession[sessionId].connectState =
+ eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED;
+ pRoamInfo->fReassocReq =
+ pUpperLayerAssocCnf->reassocReq;
+ status = csrRoamCallCallback(pMac, sessionId,
+ pRoamInfo, 0,
+ eCSR_ROAM_INFRA_IND,
+ eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF);
+ }
+ if(CSR_IS_WDS_AP( pRoamInfo->u.pConnectedProfile)) {
+ vos_sleep( 100 );
+ pMac->roam.roamSession[sessionId].connectState =
+ //Sta
+ eCSR_ASSOC_STATE_TYPE_WDS_CONNECTED;
+ status = csrRoamCallCallback(pMac,
+ sessionId, pRoamInfo, 0,
+ eCSR_ROAM_WDS_IND,
+ //Sta
+ eCSR_ROAM_RESULT_WDS_ASSOCIATION_IND);
+ }
+ break;
+ }
+ case eWNI_SME_DISCONNECT_DONE_IND:
+ pDisConDoneInd = (tSirSmeDisConDoneInd *)(pMsg);
+
+ smsLog( pMac, LOG1,
+ FL("eWNI_SME_DISCONNECT_DONE_IND RC:%d"),
+ pDisConDoneInd->reasonCode);
+ pSession = CSR_GET_SESSION(pMac,
+ pDisConDoneInd->sessionId);
+ if (!pSession) {
+ smsLog(pMac, LOGE, FL("Invalid session"));
+ return eHAL_STATUS_FAILURE;
+ }
+ if (CSR_IS_SESSION_VALID(pMac,
+ pDisConDoneInd->sessionId))
+ {
+ roamInfo.reasonCode =
+ pDisConDoneInd->reasonCode;
+ roamInfo.statusCode =
+ eSIR_SME_STA_DISASSOCIATED;
+ vos_mem_copy(roamInfo.peerMac,
+ pDisConDoneInd->peerMacAddr,
+ sizeof(tSirMacAddr));
+ status = csrRoamCallCallback(pMac,
+ pDisConDoneInd->sessionId,
+ &roamInfo, 0,
+ eCSR_ROAM_LOSTLINK,
+ eCSR_ROAM_RESULT_DISASSOC_IND);
+
+ /*
+ * Update the previous state if
+ * previous to eCSR_ROAMING_STATE_IDLE
+ * as we are disconnected and
+ * currunt state is scanning
+ */
+ if (!CSR_IS_INFRA_AP(
+ &pSession->connectedProfile))
+ pMac->roam.prev_state[
+ pDisConDoneInd->sessionId] =
+ eCSR_ROAMING_STATE_IDLE;
+ }
+ else
+ {
+ smsLog(pMac, LOGE, FL("Inactive session %d"),
+ pDisConDoneInd->sessionId);
+ status = eHAL_STATUS_FAILURE;
+ }
+ break;
- return (status);
+ default :
+ if (csrIsAnySessionInConnectState(pMac)) {
+ /* In case of we are connected, we need to check
+ * whether connect status changes because scan
+ * may also run while connected.
+ */
+ csrRoamCheckForLinkStatusChange( pMac,
+ (tSirSmeRsp *)pMsgBuf );
+ } else {
+ smsLog( pMac, LOGW,
+ "Message [0x%04x] received in state, when expecting Scan Response",
+ pMsg->type );
+ }
+ }
+ }
+ return (status);
}
-
-
void csrCheckNSaveWscIe(tpAniSirGlobal pMac, tSirBssDescription *pNewBssDescr, tSirBssDescription *pOldBssDescr)
{
int idx, len;
@@ -5691,9 +5742,6 @@ tANI_BOOLEAN csrScanAgeOutBss(tpAniSirGlobal pMac, tCsrScanResult *pResult)
}
else
{
- smsLog(pMac, LOGW, "Aging out BSS "MAC_ADDRESS_STR" Channel %d",
- MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId),
- pResult->Result.BssDescriptor.channelId);
//No need to hold the spin lock because caller should hold the lock for pMac->scan.scanResultList
if(csrLLRemoveEntry(&pMac->scan.scanResultList, &pResult->Link,
LL_ACCESS_NOLOCK))
@@ -5897,8 +5945,7 @@ eHalStatus csrSendMBScanReq( tpAniSirGlobal pMac, tANI_U16 sessionId,
pMsg->minChannelTime = pal_cpu_to_be32(minChnTime);
pMsg->maxChannelTime = pal_cpu_to_be32(maxChnTime);
- pMsg->minChannelTimeBtc = pMac->roam.configParam.nActiveMinChnTimeBtc;
- pMsg->maxChannelTimeBtc = pMac->roam.configParam.nActiveMaxChnTimeBtc;
+
//hidden SSID option
pMsg->hiddenSsid = pScanReqParam->hiddenSsid;
/* maximum rest time */
@@ -6151,21 +6198,21 @@ eHalStatus csrProcessScanCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand )
{
for( i = 0; i < CSR_ROAM_SESSION_MAX; i++ )
{
- pCommand->u.scanCmd.lastRoamState[i] =
+ pMac->roam.prev_state[i]=
csrRoamStateChange( pMac, eCSR_ROAMING_STATE_SCANNING, i);
smsLog( pMac, LOG3, "starting SCAN command from %d state...."
- " reason is %d", pCommand->u.scanCmd.lastRoamState[i],
+ " reason is %d", pMac->roam.prev_state[i],
pCommand->u.scanCmd.reason );
}
}
else
{
- pCommand->u.scanCmd.lastRoamState[pCommand->sessionId] =
+ pMac->roam.prev_state[pCommand->sessionId] =
csrRoamStateChange(pMac, eCSR_ROAMING_STATE_SCANNING,
pCommand->sessionId);
smsLog( pMac, LOG3,
"starting SCAN command from %d state.... reason is %d",
- pCommand->u.scanCmd.lastRoamState[pCommand->sessionId],
+ pMac->roam.prev_state[pCommand->sessionId],
pCommand->u.scanCmd.reason );
}
@@ -6559,7 +6606,19 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs
break;
}
}
- if (is_unsafe_chan) {
+ if (is_unsafe_chan &&
+ ((CSR_IS_CHANNEL_24GHZ(
+ pSrcReq->ChannelInfo.
+ ChannelList[index]) &&
+ pMac->roam.configParam.sta_roam_policy.
+ sap_operating_band ==
+ eCSR_BAND_24) ||
+ (CSR_IS_CHANNEL_5GHZ(
+ pSrcReq->ChannelInfo.
+ ChannelList[index]) &&
+ pMac->roam.configParam.sta_roam_policy.
+ sap_operating_band ==
+ eCSR_BAND_5G))) {
smsLog(pMac, LOG2,
FL("ignoring unsafe channel %d"),
pSrcReq->ChannelInfo.
@@ -6903,8 +6962,10 @@ static void csrPurgeScanResultByAge(void *pv)
if((curTime - pResult->Result.BssDescriptor.nReceivedTime) > ageOutTime)
{
- smsLog(pMac, LOG1, FL("age out due to time out for BSSID" MAC_ADDRESS_STR),
- MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId));
+ smsLog(pMac, LOG1,
+ FL("age out for BSSID" MAC_ADDRESS_STR" Channel %d"),
+ MAC_ADDR_ARRAY(pResult->Result.BssDescriptor.bssId),
+ pResult->Result.BssDescriptor.channelId);
csrScanAgeOutBss(pMac, pResult);
}
pEntry = tmpEntry;
@@ -7379,12 +7440,13 @@ void csrReleaseScanCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand, eCsrScanStatu
{
tANI_U32 i;
for(i = 0; i < CSR_ROAM_SESSION_MAX; i++)
- csrRoamStateChange(pMac, pCommand->u.scanCmd.lastRoamState[i], i);
+ csrRoamStateChange(pMac,
+ pMac->roam.prev_state[i], i);
}
else
{
csrRoamStateChange(pMac,
- pCommand->u.scanCmd.lastRoamState[pCommand->sessionId],
+ pMac->roam.prev_state[pCommand->sessionId],
pCommand->sessionId);
}
@@ -7644,10 +7706,6 @@ eHalStatus csrScanForSSID(tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamProfi
pScanCmd->u.scanCmd.u.scanRequest.minChnTime =
pMac->roam.configParam.nActiveMinChnTime;
}
- pScanCmd->u.scanCmd.u.scanRequest.maxChnTimeBtc =
- pMac->roam.configParam.nActiveMaxChnTimeBtc;
- pScanCmd->u.scanCmd.u.scanRequest.minChnTimeBtc =
- pMac->roam.configParam.nActiveMinChnTimeBtc;
if(pProfile->BSSIDs.numOfBSSIDs == 1)
{
vos_mem_copy(pScanCmd->u.scanCmd.u.scanRequest.bssid,
diff --git a/CORE/SME/src/csr/csrLogDump.c b/CORE/SME/src/csr/csrLogDump.c
index 0a64afd38235..3bdfc0dca31a 100644
--- a/CORE/SME/src/csr/csrLogDump.c
+++ b/CORE/SME/src/csr/csrLogDump.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -31,7 +31,6 @@ Implements the dump commands specific to the csr module.
============================================================================*/
#include "aniGlobal.h"
#include "csrApi.h"
-#include "btcApi.h"
#include "logDump.h"
#include "smsDebug.h"
#include "smeInside.h"
@@ -55,50 +54,7 @@ dump_csr( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI
}
return p;
}
-static char *dump_btcSetEvent( tpAniSirGlobal pMac, tANI_U32 arg1,
- tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p )
-{
- tSmeBtEvent btEvent;
- if( arg1 < BT_EVENT_TYPE_MAX )
- {
- smsLog(pMac, LOGE, FL(" signal BT event (%d) handle (%d) 3rd param(%d)"), arg1, arg2, arg3);
- vos_mem_zero(&btEvent, sizeof(tSmeBtEvent));
- btEvent.btEventType = arg1;
- switch( arg1 )
- {
- case BT_EVENT_SYNC_CONNECTION_COMPLETE:
- case BT_EVENT_SYNC_CONNECTION_UPDATED:
- btEvent.uEventParam.btSyncConnection.connectionHandle = (v_U16_t)arg2;
- btEvent.uEventParam.btSyncConnection.status = (v_U8_t)arg3;
- break;
- case BT_EVENT_DISCONNECTION_COMPLETE:
- btEvent.uEventParam.btDisconnect.connectionHandle = (v_U16_t)arg2;
- break;
- case BT_EVENT_CREATE_ACL_CONNECTION:
- case BT_EVENT_ACL_CONNECTION_COMPLETE:
- btEvent.uEventParam.btAclConnection.connectionHandle = (v_U16_t)arg2;
- btEvent.uEventParam.btAclConnection.status = (v_U8_t)arg3;
- break;
- case BT_EVENT_MODE_CHANGED:
- btEvent.uEventParam.btAclModeChange.connectionHandle = (v_U16_t)arg2;
- break;
- default:
- break;
- }
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if(HAL_STATUS_SUCCESS(sme_AcquireGlobalLock( &pMac->sme )))
- {
- btcSignalBTEvent(pMac, &btEvent);
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-#endif
- }
- else
- {
- smsLog(pMac, LOGE, FL(" invalid event (%d)"), arg1);
- }
- return p;
-}
+
static char* dump_csrApConcScanParams( tpAniSirGlobal pMac, tANI_U32 arg1,
tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4, char *p )
{
@@ -123,7 +79,6 @@ static char* dump_csrApConcScanParams( tpAniSirGlobal pMac, tANI_U32 arg1,
static tDumpFuncEntry csrMenuDumpTable[] = {
{0, "CSR (850-860)", NULL},
{851, "CSR: CSR testing connection to AniNet", dump_csr},
- {852, "BTC: Fake BT events (event, handle)", dump_btcSetEvent},
{853, "CSR: Split Scan related params", dump_csrApConcScanParams},
};
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 3761c54e33ad..486b74224838 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -5174,8 +5174,12 @@ eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,
}
pMsg->messageType =
pal_cpu_to_be16((tANI_U16)eWNI_SME_SET_BCN_FILTER_REQ);
- pMsg->length = pal_cpu_to_be16(sizeof( tANI_U8));
+ pMsg->length = pal_cpu_to_be16(sizeof(
+ tSirSetActiveModeSetBncFilterReq));
pMsg->seesionId = sessionId;
+ vos_mem_copy(pMsg->bssid,
+ pMac->roam.roamSession[sessionId].connectedProfile.bssid,
+ sizeof(tSirMacAddr));
status = palSendMBMessage(pMac->hHdd, pMsg );
}
#endif
diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c
index f7c2922eefaf..d3711768dae4 100644
--- a/CORE/SME/src/csr/csrTdlsProcess.c
+++ b/CORE/SME/src/csr/csrTdlsProcess.c
@@ -783,6 +783,10 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType,
case eWNI_SME_TDLS_LINK_ESTABLISH_RSP:
{
tSirTdlsLinkEstablishReqRsp *linkEstablishReqRsp = (tSirTdlsLinkEstablishReqRsp *) pMsgBuf ;
+ vos_mem_copy(&roamInfo.peerMac, linkEstablishReqRsp->peerMac,
+ sizeof(tSirMacAddr));
+ roamInfo.staId = (uint8_t)linkEstablishReqRsp->sta_idx;
+ roamInfo.statusCode = linkEstablishReqRsp->statusCode;
csrRoamCallCallback(pMac, linkEstablishReqRsp->sessionId, &roamInfo, 0,
eCSR_ROAM_TDLS_STATUS_UPDATE,
eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP);
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index c30aadde62a9..ac104ab13df8 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -973,6 +973,215 @@ v_U16_t csrCheckConcurrentChannelOverlap(tpAniSirGlobal pMac, v_U16_t sap_ch,
"Not" : "Are" );
return intf_ch;
}
+
+/**
+ * csr_create_sap_session_info() - create session info based on
+ * the input chan and phymode
+ * @pMac: tpAniSirGlobal ptr
+ * @sap_phymode: requesting phymode.
+ * @sap_ch: requesting channel number
+ * @session_info: information returned.
+ *
+ * Return: TRUE if any session info returned
+ */
+tANI_BOOLEAN csr_create_sap_session_info(
+ tHalHandle hHal,
+ eCsrPhyMode sap_phymode,
+ v_U16_t sap_ch,
+ session_info_t *session_info)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ v_U8_t chb = PHY_SINGLE_CHANNEL_CENTERED;
+ v_U16_t sap_hbw = 0, sap_cfreq = 0;
+ v_U16_t sap_lfreq, sap_hfreq, sap_cch;
+
+ sap_cch = sap_ch;
+ sap_hbw = HALF_BW_OF(eCSR_BW_20MHz_VAL);
+
+ if (sap_ch > MAX_2_4GHZ_CHANNEL)
+ chb = pMac->roam.configParam.channelBondingMode5GHz;
+ else
+ chb = pMac->roam.configParam.channelBondingMode24GHz;
+ if (!chb)
+ goto RET;
+
+ if (sap_phymode == eCSR_DOT11_MODE_11n ||
+ sap_phymode == eCSR_DOT11_MODE_11n_ONLY) {
+
+ sap_hbw = HALF_BW_OF(eCSR_BW_40MHz_VAL);
+ if (chb == PHY_DOUBLE_CHANNEL_LOW_PRIMARY)
+ sap_cch = CSR_GET_HT40_PLUS_CCH(sap_ch);
+ else if (chb == PHY_DOUBLE_CHANNEL_HIGH_PRIMARY)
+ sap_cch = CSR_GET_HT40_MINUS_CCH(sap_ch);
+ }
+#ifdef WLAN_FEATURE_11AC
+ else if (sap_phymode == eCSR_DOT11_MODE_11ac ||
+ sap_phymode == eCSR_DOT11_MODE_11ac_ONLY) {
+ /*
+ * 11AC only 80/40/20 Mhz supported in Rome
+ */
+ if (pMac->roam.configParam.nVhtChannelWidth ==
+ (WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ + 1)) {
+ sap_hbw = HALF_BW_OF(eCSR_BW_80MHz_VAL);
+ if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW
+ - 1))
+ sap_cch = CSR_GET_HT80_PLUS_LL_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW
+ - 1))
+ sap_cch = CSR_GET_HT80_PLUS_HL_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH
+ - 1))
+ sap_cch = CSR_GET_HT80_MINUS_LH_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH
+ - 1))
+ sap_cch = CSR_GET_HT80_MINUS_HH_CCH(sap_ch);
+ } else {
+ sap_hbw = HALF_BW_OF(eCSR_BW_40MHz_VAL);
+ if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW
+ - 1))
+ sap_cch = CSR_GET_HT40_PLUS_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW
+ - 1))
+ sap_cch = CSR_GET_HT40_MINUS_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH
+ - 1))
+ sap_cch = CSR_GET_HT40_PLUS_CCH(sap_ch);
+ else if (chb ==
+ (PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH
+ - 1))
+ sap_cch = CSR_GET_HT40_MINUS_CCH(sap_ch);
+ }
+ }
+#endif
+RET:
+ sap_cfreq = vos_chan_to_freq(sap_cch);
+ sap_lfreq = sap_cfreq - sap_hbw;
+ sap_hfreq = sap_cfreq + sap_hbw;
+ if (sap_ch > MAX_2_4GHZ_CHANNEL)
+ session_info->band = eCSR_BAND_5G;
+ else
+ session_info->band = eCSR_BAND_24;
+ session_info->och = sap_ch;
+ session_info->lfreq = sap_lfreq;
+ session_info->hfreq = sap_hfreq;
+ session_info->cfreq = sap_cfreq;
+ session_info->hbw = sap_hbw;
+ session_info->con_mode = VOS_STA_SAP_MODE;
+ return TRUE;
+}
+/**
+ * csr_find_sta_session_info() - get sta active session info
+ * @pMac: tpAniSirGlobal ptr
+ * @session_info: information returned.
+ *
+ * Return: TRUE if sta session info returned
+ */
+tANI_BOOLEAN csr_find_sta_session_info(
+ tHalHandle hHal,
+ session_info_t *info)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tCsrRoamSession *pSession = NULL;
+ v_U8_t i = 0;
+
+ for( i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) {
+ if( !CSR_IS_SESSION_VALID( pMac, i ) )
+ continue;
+ pSession = CSR_GET_SESSION( pMac, i );
+ if (NULL == pSession->pCurRoamProfile)
+ continue;
+ if (((pSession->pCurRoamProfile->csrPersona ==
+ VOS_STA_MODE) ||
+ (pSession->pCurRoamProfile->csrPersona ==
+ VOS_P2P_CLIENT_MODE)) &&
+ (pSession->connectState ==
+ eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED)) {
+ info->och =
+ pSession->connectedProfile.operationChannel;
+ csrGetChFromHTProfile(pMac,
+ &pSession->connectedProfile.HTProfile,
+ info->och, &info->cfreq, &info->hbw);
+ info->lfreq = info->cfreq - info->hbw;
+ info->hfreq = info->cfreq + info->hbw;
+ if (info->och > MAX_2_4GHZ_CHANNEL)
+ info->band = eCSR_BAND_5G;
+ else
+ info->band = eCSR_BAND_24;
+ info->con_mode = VOS_STA_MODE;
+ return eANI_BOOLEAN_TRUE;
+ }
+ }
+ return eANI_BOOLEAN_FALSE;
+}
+/**
+ * csr_find_all_session_info() - get all active session info
+ * @pMac: tpAniSirGlobal ptr
+ * @session_info: information returned.
+ * @session_count: number of session
+ *
+ * Return: TRUE if any session info returned
+ */
+tANI_BOOLEAN csr_find_all_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info,
+ v_U8_t *session_count)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tCsrRoamSession *pSession = NULL;
+ v_U8_t i = 0;
+ v_U8_t count = 0;
+
+ for( i = 0; i < CSR_ROAM_SESSION_MAX; i++ ) {
+ if( !CSR_IS_SESSION_VALID( pMac, i ) )
+ continue;
+ pSession = CSR_GET_SESSION( pMac, i );
+ if (NULL == pSession->pCurRoamProfile)
+ continue;
+ if ((((pSession->pCurRoamProfile->csrPersona ==
+ VOS_STA_MODE) ||
+ (pSession->pCurRoamProfile->csrPersona ==
+ VOS_P2P_CLIENT_MODE)) &&
+ (pSession->connectState ==
+ eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED)) ||
+ (((pSession->pCurRoamProfile->csrPersona ==
+ VOS_P2P_GO_MODE) ||
+ (pSession->pCurRoamProfile->csrPersona ==
+ VOS_STA_SAP_MODE)||
+ (pSession->pCurRoamProfile->csrPersona ==
+ VOS_IBSS_MODE)) &&
+ (pSession->connectState !=
+ eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED))) {
+ session_info_t *info = &session_info[count++];
+ info->och =
+ pSession->connectedProfile.operationChannel;
+ csrGetChFromHTProfile(pMac,
+ &pSession->connectedProfile.HTProfile,
+ info->och, &info->cfreq, &info->hbw);
+ info->lfreq = info->cfreq - info->hbw;
+ info->hfreq = info->cfreq + info->hbw;
+ if ((pSession->pCurRoamProfile->csrPersona ==
+ VOS_STA_MODE) ||
+ (pSession->pCurRoamProfile->csrPersona ==
+ VOS_P2P_CLIENT_MODE))
+ info->con_mode = VOS_STA_MODE;
+ else
+ info->con_mode = VOS_STA_SAP_MODE;
+ if (info->och > MAX_2_4GHZ_CHANNEL)
+ info->band = eCSR_BAND_5G;
+ else
+ info->band = eCSR_BAND_24;
+ }
+ }
+ *session_count = count;
+ return count != 0;
+}
#endif
tANI_BOOLEAN csrIsAllSessionDisconnected( tpAniSirGlobal pMac )
@@ -5968,6 +6177,53 @@ void csrDisconnectAllActiveSessions(tpAniSirGlobal pMac)
}
}
+/**
+ * csr_get_channel_status() - get chan info via channel number
+ * @p_mac: Pointer to Global MAC structure
+ * @channel_id: channel id
+ *
+ * Return: chan status info
+ */
+struct lim_channel_status *csr_get_channel_status(
+ void *p_mac, uint32_t channel_id)
+{
+ uint8_t i;
+ struct lim_scan_channel_status *channel_status;
+ tpAniSirGlobal mac_ptr = (tpAniSirGlobal)p_mac;
+
+ if (ACS_FW_REPORT_PARAM_CONFIGURED) {
+ channel_status = (struct lim_scan_channel_status *)
+ &mac_ptr->lim.scan_channel_status;
+ for (i = 0; i < channel_status->total_channel; i++) {
+ if (channel_status->channel_status_list[i].channel_id
+ == channel_id)
+ return &channel_status->channel_status_list[i];
+ }
+ smsLog(mac_ptr, LOGW,
+ FL("Channel %d status info not exist"),
+ channel_id);
+ }
+ return NULL;
+}
+
+/**
+ * csr_clear_channel_status() - clear chan info
+ * @p_mac: Pointer to Global MAC structure
+ *
+ * Return: none
+ */
+void csr_clear_channel_status(void *p_mac)
+{
+ tpAniSirGlobal mac_ptr = (tpAniSirGlobal)p_mac;
+ struct lim_scan_channel_status *channel_status;
+ if (ACS_FW_REPORT_PARAM_CONFIGURED) {
+ channel_status = (struct lim_scan_channel_status *)
+ &mac_ptr->lim.scan_channel_status;
+ channel_status->total_channel = 0;
+ }
+ return;
+}
+
#ifdef FEATURE_WLAN_LFR
tANI_BOOLEAN csrIsChannelPresentInList(
tANI_U8 *pChannelList,
diff --git a/CORE/SME/src/nan/nan_datapath_api.c b/CORE/SME/src/nan/nan_datapath_api.c
index 2f0af8f65bf0..a8fa921cda7d 100644
--- a/CORE/SME/src/nan/nan_datapath_api.c
+++ b/CORE/SME/src/nan/nan_datapath_api.c
@@ -362,6 +362,7 @@ void csr_roam_update_ndp_return_params(tpAniSirGlobal mac_ctx,
switch (result) {
case eCsrStartBssSuccess:
roam_info->ndp.ndi_create_params.reason = 0;
+ roam_info->ndp.ndi_create_params.sta_id = roam_info->staId;
roam_info->ndp.ndi_create_params.status =
NDP_RSP_STATUS_SUCCESS;
*roam_status = eCSR_ROAM_NDP_STATUS_UPDATE;
diff --git a/CORE/SME/src/oemData/oemDataApi.c b/CORE/SME/src/oemData/oemDataApi.c
index 3e42350e80fc..fc3f91cf6ba6 100644
--- a/CORE/SME/src/oemData/oemDataApi.c
+++ b/CORE/SME/src/oemData/oemDataApi.c
@@ -208,7 +208,6 @@ eHalStatus oemData_SendMBOemDataReq(tpAniSirGlobal pMac, tOemDataReq *pOemDataRe
{
eHalStatus status = eHAL_STATUS_SUCCESS;
tSirOemDataReq* pMsg;
- tANI_U16 msgLen;
tCsrRoamSession *pSession;
smsLog(pMac, LOGW, "OEM_DATA: entering Function %s", __func__);
@@ -225,9 +224,8 @@ eHalStatus oemData_SendMBOemDataReq(tpAniSirGlobal pMac, tOemDataReq *pOemDataRe
return eHAL_STATUS_FAILURE;
}
- msgLen = (uint16_t) (sizeof(*pMsg) + pOemDataReq->data_len);
pMsg->messageType = pal_cpu_to_be16((tANI_U16)eWNI_SME_OEM_DATA_REQ);
- pMsg->messageLen = pal_cpu_to_be16(msgLen);
+ pMsg->messageLen = pal_cpu_to_be16((uint16_t) sizeof(*pMsg));
vos_mem_copy(pMsg->selfMacAddr, pSession->selfMacAddr, sizeof(tSirMacAddr) );
pMsg->data_len = pOemDataReq->data_len;
/* Incoming buffer ptr saved, set to null to avoid free by caller */
diff --git a/CORE/SME/src/pmc/pmc.c b/CORE/SME/src/pmc/pmc.c
index 4b99b5dd91d7..dbd4df07385d 100644
--- a/CORE/SME/src/pmc/pmc.c
+++ b/CORE/SME/src/pmc/pmc.c
@@ -982,10 +982,13 @@ void pmcTrafficTimerExpired (tHalHandle hHal)
return;
}
- /* Until DHCP is not completed remain in power active */
- if(pMac->pmc.remainInPowerActiveTillDHCP)
- {
- pmcLog(pMac, LOG2, FL("BMPS Traffic Timer expired before DHCP completion ignore enter BMPS"));
+ /* Untill DHCP and set key is not completed remain in power active */
+ if (pMac->pmc.remainInPowerActiveTillDHCP ||
+ pMac->pmc.full_power_till_set_key) {
+ pmcLog(pMac, LOG2,
+ FL("BMPS Traffic Timer expired before DHCP(%d) or set key (%d) completion ignore enter BMPS"),
+ pMac->pmc.remainInPowerActiveTillDHCP,
+ pMac->pmc.full_power_till_set_key);
pMac->pmc.remainInPowerActiveThreshold++;
if( pMac->pmc.remainInPowerActiveThreshold >= DHCP_REMAIN_POWER_ACTIVE_THRESHOLD)
{
@@ -993,6 +996,7 @@ void pmcTrafficTimerExpired (tHalHandle hHal)
FL("Remain in power active DHCP threshold reached FALLBACK to enable enter BMPS"));
/*FALLBACK: reset the flag to make BMPS entry possible*/
pMac->pmc.remainInPowerActiveTillDHCP = FALSE;
+ pMac->pmc.full_power_till_set_key = false;
pMac->pmc.remainInPowerActiveThreshold = 0;
}
//Activate the Traffic Timer again for entering into BMPS
@@ -1193,77 +1197,36 @@ eHalStatus pmcEnterRequestStartUapsdState (tHalHandle hHal)
else
{
pMac->pmc.uapsdSessionRequired = TRUE;
- //Check BTC state
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if( btcIsReadyForUapsd( pMac ) )
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
- {
- /* Put device in BMPS mode first. This step should NEVER fail.
- That is why no need to buffer the UAPSD request*/
- if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS)
- {
- pmcLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. "
- "UAPSD request will be dropped ");
- return eHAL_STATUS_FAILURE;
- }
- }
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- else
+
+ /* Put device in BMPS mode first. This step should NEVER fail.
+ That is why no need to buffer the UAPSD request*/
+ if(pmcEnterRequestBmpsState(hHal) != eHAL_STATUS_SUCCESS)
{
- (void)pmcStartTrafficTimer(hHal, pMac->pmc.bmpsConfig.trafficMeasurePeriod);
+ pmcLog(pMac, LOGE, "PMC: Device in Full Power. Enter Request Bmps failed. "
+ "UAPSD request will be dropped ");
+ return eHAL_STATUS_FAILURE;
}
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
}
break;
case BMPS:
- //It is already in BMPS mode, check BTC state
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if( btcIsReadyForUapsd(pMac) )
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
- {
/* Tell MAC to have device enter UAPSD mode. */
- if (pmcIssueCommand(hHal, 0, eSmeCommandEnterUapsd, NULL, 0, FALSE)
- != eHAL_STATUS_SUCCESS)
- {
- pmcLog(pMac, LOGE, "PMC: failure to send message "
- "eWNI_PMC_ENTER_BMPS_REQ");
- return eHAL_STATUS_FAILURE;
- }
- }
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- else
+ if (pmcIssueCommand(hHal, 0, eSmeCommandEnterUapsd, NULL, 0, FALSE)
+ != eHAL_STATUS_SUCCESS)
{
- //Not ready for UAPSD at this time, save it first and wake up the chip
- pmcLog(pMac, LOGE, " PMC state = %d",pMac->pmc.pmcState);
- pMac->pmc.uapsdSessionRequired = TRUE;
- /* While BTC traffic is going on, STA can be in BMPS
- * and need not go to Full Power */
- //fFullPower = VOS_TRUE;
+ pmcLog(pMac, LOGE, "PMC: failure to send message "
+ "eWNI_PMC_ENTER_BMPS_REQ");
+ return eHAL_STATUS_FAILURE;
}
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
break;
case REQUEST_START_UAPSD:
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if( !btcIsReadyForUapsd(pMac) )
- {
- //BTC rejects UAPSD, bring it back to full power
- fFullPower = VOS_TRUE;
- }
-#endif
+
break;
case REQUEST_BMPS:
/* Buffer request for UAPSD mode. */
pMac->pmc.uapsdSessionRequired = TRUE;
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if( !btcIsReadyForUapsd(pMac) )
- {
- //BTC rejects UAPSD, bring it back to full power
- fFullPower = VOS_TRUE;
- }
-#endif /* WLAN_MDM_CODE_REDUCTION_OPT*/
break;
default:
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index bfc30c9fbe40..c1f7653b2f4d 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.c
@@ -204,6 +204,7 @@ eHalStatus pmcStart (tHalHandle hHal)
pMac->pmc.wowlModeRequired = FALSE;
pMac->pmc.bmpsRequestedByHdd = FALSE;
pMac->pmc.remainInPowerActiveTillDHCP = FALSE;
+ pMac->pmc.full_power_till_set_key = false;
pMac->pmc.remainInPowerActiveThreshold = 0;
/* WLAN Switch initial states. */
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 20abd2184049..643d884b9700 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1503,12 +1503,6 @@ eHalStatus sme_Open(tHalHandle hHal)
break;
}
- status = btcOpen(pMac);
- if ( ! HAL_STATUS_SUCCESS( status ) ) {
- smsLog( pMac, LOGE,
- "btcOpen open failed during initialization with status=%d", status );
- break;
- }
#endif
#ifdef FEATURE_OEM_DATA_SUPPORT
status = oemData_OemDataReqOpen(pMac);
@@ -1873,6 +1867,8 @@ eHalStatus sme_UpdateConfig(tHalHandle hHal, tpSmeConfigParams pSmeConfigParams)
pSmeConfigParams->f_prefer_non_dfs_on_radar;
pMac->fine_time_meas_cap = pSmeConfigParams->fine_time_meas_cap;
+ pMac->snr_monitor_enabled = pSmeConfigParams->snr_monitor_enabled;
+
return status;
}
@@ -2176,14 +2172,6 @@ eHalStatus sme_HDDReadyInd(tHalHandle hHal)
smsLog( pMac, LOGE, "pmcReady failed with status=%d", status );
break;
}
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if(VOS_STATUS_SUCCESS != btcReady(hHal))
- {
- status = eHAL_STATUS_FAILURE;
- smsLog( pMac, LOGE, "btcReady failed");
- break;
- }
-#endif
#if defined WLAN_FEATURE_VOWIFI
if(VOS_STATUS_SUCCESS != rrmReady(hHal))
@@ -2203,14 +2191,6 @@ eHalStatus sme_HDDReadyInd(tHalHandle hHal)
smsLog( pMac, LOGE, "csrReady failed with status=%d", status );
break;
}
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- if(VOS_STATUS_SUCCESS != btcReady(hHal))
- {
- status = eHAL_STATUS_FAILURE;
- smsLog( pMac, LOGE, "btcReady failed");
- break;
- }
-#endif
#if defined WLAN_FEATURE_VOWIFI
if(VOS_STATUS_SUCCESS != rrmReady(hHal))
@@ -2899,19 +2879,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg)
smsLog( pMac, LOGE, "Empty rsp message for meas (eWNI_SME_REMAIN_ON_CHN_RDY_IND), nothing to process");
}
break;
- case eWNI_SME_COEX_IND:
- MTRACE(vos_trace(VOS_MODULE_ID_SME, TRACE_CODE_SME_RX_WDA_MSG,
- NO_SESSION, pMsg->type));
- if(pMsg->bodyptr)
- {
- status = btcHandleCoexInd((void *)pMac, pMsg->bodyptr);
- vos_mem_free(pMsg->bodyptr);
- }
- else
- {
- smsLog(pMac, LOGE, "Empty rsp message for meas (eWNI_SME_COEX_IND), nothing to process");
- }
- break;
#ifdef FEATURE_WLAN_SCAN_PNO
case eWNI_SME_PREF_NETWORK_FOUND_IND:
@@ -3430,6 +3397,11 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg)
case eWNI_SME_NDP_PEER_DEPARTED_IND:
sme_ndp_msg_processor(pMac, pMsg);
break;
+ case eWMI_SME_LL_STATS_IND:
+ if (pMac->sme.link_layer_stats_ext_cb)
+ pMac->sme.link_layer_stats_ext_cb(pMsg->bodyptr);
+ vos_mem_free(pMsg->bodyptr);
+ break;
default:
if ( ( pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN )
@@ -3599,13 +3571,6 @@ eHalStatus sme_Close(tHalHandle hHal)
}
#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- status = btcClose(hHal);
- if ( ! HAL_STATUS_SUCCESS( status ) ) {
- smsLog( pMac, LOGE, "BTC close failed during sme close with status=%d",
- status );
- fail_status = status;
- }
-
status = sme_QosClose(pMac);
if ( ! HAL_STATUS_SUCCESS( status ) ) {
smsLog( pMac, LOGE, "Qos close failed during sme close with status=%d",
@@ -4429,6 +4394,28 @@ eHalStatus sme_RoamDisconnect(tHalHandle hHal, tANI_U8 sessionId, eCsrRoamDiscon
return (status);
}
+/* sme_dhcp_done_ind() - send dhcp done ind
+ * @hal: hal context
+ * @session_id: session id
+ *
+ * Return: void.
+ */
+void sme_dhcp_done_ind(tHalHandle hal, uint8_t session_id)
+{
+ tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
+ tCsrRoamSession *session;
+
+ if (!mac_ctx)
+ return;
+
+ session = CSR_GET_SESSION(mac_ctx, session_id);
+ if (!session) {
+ smsLog(mac_ctx, LOGE, FL("session %d not found"), session_id);
+ return;
+ }
+ session->dhcp_done = true;
+}
+
/* ---------------------------------------------------------------------------
\fn sme_RoamStopBss
\brief To stop BSS for Soft AP. This is an asynchronous API.
@@ -5895,10 +5882,10 @@ eHalStatus sme_RoamSetKey(tHalHandle hHal, tANI_U8 sessionId, tCsrRoamSetKey *pS
smsLog(pMac, LOGE, FL("Invalid key length %d"), pSetKey->keyLength);
return eHAL_STATUS_FAILURE;
}
- /*Once Setkey is done, we can go in BMPS*/
+ /*Once Setkey is done, we can go in BMPS */
if(pSetKey->keyLength) {
- pMac->pmc.remainInPowerActiveTillDHCP = FALSE;
- smsLog(pMac, LOG1, FL("Reset remainInPowerActiveTillDHCP"
+ pMac->pmc.full_power_till_set_key = false;
+ smsLog(pMac, LOG1, FL("Reset full_power_till_set_key"
" to allow BMPS"));
}
@@ -6897,94 +6884,6 @@ eHalStatus sme_TXFailMonitorStartStopInd(tHalHandle hHal, tANI_U8 tx_fail_count,
}
/* ---------------------------------------------------------------------------
- \fn sme_BtcSignalBtEvent
- \brief API to signal Bluetooth (BT) event to the WLAN driver. Based on the
- BT event type and the current operating mode of Libra (full power,
- BMPS, UAPSD etc), appropriate Bluetooth Coexistence (BTC) strategy
- would be employed.
- \param hHal - The handle returned by macOpen.
- \param pBtEvent - Pointer to a caller allocated object of type tSmeBtEvent
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE BT Event not passed to HAL. This can happen
- if BTC execution mode is set to BTC_WLAN_ONLY
- or BTC_PTA_ONLY.
- VOS_STATUS_SUCCESS BT Event passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcSignalBtEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent)
-{
- VOS_STATUS status = VOS_STATUS_E_FAILURE;
-
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-
- MTRACE(vos_trace(VOS_MODULE_ID_SME,
- TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT, NO_SESSION, 0));
- if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
- {
- status = btcSignalBTEvent (hHal, pBtEvent);
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-#endif
- return (status);
-}
-
-/* ---------------------------------------------------------------------------
- \fn sme_BtcSetConfig
- \brief API to change the current Bluetooth Coexistence (BTC) configuration
- This function should be invoked only after CFG download has completed.
- Calling it after sme_HDDReadyInd is recommended.
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type tSmeBtcConfig.
- Caller owns the memory and is responsible for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE Config not passed to HAL.
- VOS_STATUS_SUCCESS Config passed to HAL
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig)
-{
- VOS_STATUS status = VOS_STATUS_E_FAILURE;
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- MTRACE(vos_trace(VOS_MODULE_ID_SME,
- TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG, NO_SESSION, 0));
- if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
- {
- status = btcSetConfig (hHal, pSmeBtcConfig);
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-#endif
- return (status);
-}
-
-/* ---------------------------------------------------------------------------
- \fn sme_BtcGetConfig
- \brief API to retrieve the current Bluetooth Coexistence (BTC) configuration
- \param hHal - The handle returned by macOpen.
- \param pSmeBtcConfig - Pointer to a caller allocated object of type
- tSmeBtcConfig. Caller owns the memory and is responsible
- for freeing it.
- \return VOS_STATUS
- VOS_STATUS_E_FAILURE - failure
- VOS_STATUS_SUCCESS success
- ---------------------------------------------------------------------------*/
-VOS_STATUS sme_BtcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig)
-{
- VOS_STATUS status = VOS_STATUS_E_FAILURE;
-#ifndef WLAN_MDM_CODE_REDUCTION_OPT
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
-
- MTRACE(vos_trace(VOS_MODULE_ID_SME,
- TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG, NO_SESSION, 0));
- if ( eHAL_STATUS_SUCCESS == sme_AcquireGlobalLock( &pMac->sme ) )
- {
- status = btcGetConfig (hHal, pSmeBtcConfig);
- sme_ReleaseGlobalLock( &pMac->sme );
- }
-#endif
- return (status);
-}
-/* ---------------------------------------------------------------------------
\fn sme_SetCfgPrivacy
\brief API to set configure privacy parameters
\param hHal - The handle returned by macOpen.
@@ -8604,6 +8503,86 @@ v_U16_t sme_CheckConcurrentChannelOverlap( tHalHandle hHal, v_U16_t sap_ch,
return (channel);
}
+#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
+/**
+ * sme_find_sta_session_info() - get sta active session info
+ * @hHal: tHalHandle ptr
+ * @session_info: information returned.
+ *
+ * Return: TRUE if sta session info returned
+ */
+tANI_BOOLEAN sme_find_sta_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info)
+{
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tANI_BOOLEAN ret = eANI_BOOLEAN_FALSE;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) ) {
+ ret = csr_find_sta_session_info(hHal,
+ session_info);
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return ret;
+}
+/**
+ * sme_find_all_session_info() - get all active session info
+ * @hHal: tHalHandle ptr
+ * @session_info: information returned.
+ * @session_count: number of session
+ *
+ * Return: TRUE if any session info returned
+ */
+tANI_BOOLEAN sme_find_all_session_info(
+ tHalHandle hHal,
+ session_info_t *session_info,
+ v_U8_t * session_count)
+{
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tANI_BOOLEAN ret = eANI_BOOLEAN_FALSE;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) ) {
+ ret = csr_find_all_session_info(hHal,
+ session_info, session_count);
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return ret;
+}
+/**
+ * sme_create_sap_session_info() - create session info based on
+ * the input chan and phymode
+ * @hHal: tHalHandle ptr
+ * @sap_phymode: requesting phymode.
+ * @sap_ch: requesting channel number
+ * @session_info: information returned.
+ *
+ * Return: TRUE if any session info returned
+ */
+tANI_BOOLEAN sme_create_sap_session_info(
+ tHalHandle hHal,
+ eCsrPhyMode sap_phymode,
+ v_U16_t sap_ch,
+ session_info_t *session_info)
+{
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tANI_BOOLEAN ret = eANI_BOOLEAN_FALSE;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) ) {
+ ret = csr_create_sap_session_info(hHal,
+ sap_phymode,
+ sap_ch,
+ session_info);
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+ return ret;
+}
+#endif
#endif
#ifdef FEATURE_WLAN_SCAN_PNO
@@ -15549,7 +15528,6 @@ VOS_STATUS sme_UpdateDSCPtoUPMapping( tHalHandle hHal,
if ((pSession->QosMapSet.dscp_range[i][0] == 255) &&
(pSession->QosMapSet.dscp_range[i][1] == 255))
{
- dscpmapping[j]= 0;
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"%s: User Priority %d is not used in mapping",
__func__, i);
@@ -16470,13 +16448,6 @@ eHalStatus sme_LLStatsGetReq (tHalHandle hHal,
vos_msg_t vosMessage;
tSirLLStatsGetReq *get_stats_req;
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- "reqId = %u", pgetStatsReq->reqId);
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- "staId = %u", pgetStatsReq->staId);
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- "Stats Type = %u", pgetStatsReq->paramIdMask);
-
get_stats_req = vos_mem_malloc(sizeof(*get_stats_req));
if (!get_stats_req)
@@ -16551,6 +16522,31 @@ eHalStatus sme_SetLinkLayerStatsIndCB
return(status);
}
+/**
+ * sme_set_link_layer_ext_cb() - Register callback for link layer statistics
+ * @hal: Mac global handle
+ * @ll_stats_ext_cb: HDD callback which needs to be invoked after getting
+ * status notification from FW
+ *
+ * Return: eHalStatus
+ */
+eHalStatus sme_set_ll_ext_cb(tHalHandle hal,
+ void (*ll_stats_ext_cb)(tSirLLStatsResults *rsp))
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal mac = PMAC_STRUCT(hal);
+
+ status = sme_AcquireGlobalLock(&mac->sme);
+ if (status == eHAL_STATUS_SUCCESS) {
+ mac->sme.link_layer_stats_ext_cb = ll_stats_ext_cb;
+ sme_ReleaseGlobalLock(&mac->sme);
+ } else {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("sme_AcquireGlobalLock error"));
+ }
+ return status;
+}
+
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
/**
@@ -17806,14 +17802,6 @@ eHalStatus vos_send_flush_logs_cmd_to_fw(tpAniSirGlobal mac)
VOS_STATUS vos_status;
vos_msg_t vos_message;
- status = sme_AcquireGlobalLock(&mac->sme);
- if (status != eHAL_STATUS_SUCCESS) {
- smsLog(mac, LOGE,
- FL("sme_AcquireGlobalLock failed!(status=%d)"),
- status);
- return status;
- }
-
/* Serialize the req through MC thread */
vos_message.bodyptr = NULL;
vos_message.type = SIR_HAL_FLUSH_LOG_TO_FW;
@@ -17824,7 +17812,6 @@ eHalStatus vos_send_flush_logs_cmd_to_fw(tpAniSirGlobal mac)
vos_status);
status = eHAL_STATUS_FAILURE;
}
- sme_ReleaseGlobalLock(&mac->sme);
return status;
}
@@ -18235,6 +18222,48 @@ VOS_STATUS sme_set_wow_pulse(struct wow_pulse_mode *wow_pulse_set_info)
}
#endif
+/**
+ * sme_set_wakeup_gpio() - set wakeup gpio info
+ * @wakeup_gpio_info: wakeup_gpio_mode structure pointer
+ *
+ * Return: HAL status
+ */
+VOS_STATUS sme_set_wakeup_gpio(struct wakeup_gpio_mode *wakeup_gpio_info)
+{
+ vos_msg_t vos_message;
+ VOS_STATUS vos_status;
+ struct wakeup_gpio_mode *wakeup_gpio_cmd;
+
+ if (!wakeup_gpio_info) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: invalid wakeup_gpio_info pointer", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ wakeup_gpio_cmd = vos_mem_malloc(sizeof(*wakeup_gpio_cmd));
+ if (NULL == wakeup_gpio_cmd) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: fail to alloc wakeup_gpio_cmd", __func__);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ *wakeup_gpio_cmd = *wakeup_gpio_info;
+
+ vos_message.type = WDA_SET_WAKEUP_GPIO_CMD;
+ vos_message.bodyptr = wakeup_gpio_cmd;
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,
+ &vos_message);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Not able to post msg to WDA!",
+ __func__);
+ vos_mem_free(wakeup_gpio_cmd);
+ vos_status = VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
#ifdef FEATURE_GREEN_AP
/**
* sme_send_egap_conf_params() - set the enhanced green ap configuration params
@@ -18943,6 +18972,209 @@ VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
return vos_status;
}
+
+/**
+ * sme_set_btc_bt_wlan_interval_page_p2p_sta() - Set the
+ * btc bt/p2psta interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: P2P STA Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_p2p_sta(uint32_t bt_interval,
+ uint32_t p2p_sta_interval)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_PAGE_P2P_STA_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = p2p_sta_interval;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
+ * sme_set_btc_bt_wlan_interval_inquiry_sta() - Inquiry the btc bt/sta interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: STA Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_sta(uint32_t bt_interval,
+ uint32_t sta_interval)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_INQUIRY_STA_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = sta_interval;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
+ * sme_set_btc_bt_wlan_interval_inquiry_sap() - Inquiry the btc bt/sap interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: SAP Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_sap(uint32_t bt_interval,
+ uint32_t sap_interval)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_INQUIRY_SAP_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = sap_interval;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+ /**
+ * sme_set_btc_bt_wlan_interval_inquiry_p2p() - Inquiry the btc bt/p2p interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: P2P Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p(uint32_t bt_interval,
+ uint32_t p2p_interval)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_INQUIRY_P2P_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = p2p_interval;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
+ * sme_set_btc_bt_wlan_interval_inquiry_p2p_sta() - Inquiry the
+ * btc bt/p2psta interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: P2P STA Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(uint32_t bt_interval,
+ uint32_t p2p_sta_interval)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_INQUIRY_P2P_STA_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = p2p_sta_interval;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
/**
* sme_send_disassoc_req_frame - send disassoc req
* @hal: handler to hal
@@ -19180,6 +19412,7 @@ static inline void sme_sta_roam_offload_scan(tHalHandle hal_handle,
* @skip_unsafe_channels: Param to tell if driver needs to
* skip unsafe channels or not.
* @param session_id: sme_session_id
+ * @sap_operating_band: Band on which SAP is operating
*
* sme_update_sta_roam_policy update sta rome policies to csr
* this function will call csrUpdateChannelList as well
@@ -19190,7 +19423,8 @@ static inline void sme_sta_roam_offload_scan(tHalHandle hal_handle,
eHalStatus sme_update_sta_roam_policy(tHalHandle hal_handle,
enum sta_roam_policy_dfs_mode dfs_mode,
bool skip_unsafe_channels,
- uint8_t session_id)
+ uint8_t session_id,
+ uint8_t sap_operating_band)
{
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal_handle);
eHalStatus status = eHAL_STATUS_SUCCESS;
@@ -19210,6 +19444,8 @@ eHalStatus sme_update_sta_roam_policy(tHalHandle hal_handle,
dfs_mode;
sme_config.csrConfig.sta_roam_policy_params.skip_unsafe_channels =
skip_unsafe_channels;
+ sme_config.csrConfig.sta_roam_policy_params.sap_operating_band =
+ sap_operating_band;
sme_UpdateConfig(hal_handle, &sme_config);
@@ -19459,3 +19695,20 @@ eHalStatus sme_update_sta_inactivity_timeout(tHalHandle hal_handle,
return eHAL_STATUS_FAILURE;
}
+
+/**
+ * sme_set_chan_info_callback() - set scan chan info call back
+ * @hal: Handle returned by mac_open
+ * @callback: scan chan info call back
+ *
+ * This function is used to set scan chan info call back.
+ *
+ * Return: None
+ */
+void sme_set_chan_info_callback(tHalHandle hal_handle,
+ void (*callback)(struct scan_chan_info *chan_info))
+{
+ tpAniSirGlobal mac = PMAC_STRUCT(hal_handle);
+
+ mac->chan_info_cb = callback;
+}
diff --git a/CORE/SME/src/sme_common/sme_FTApi.c b/CORE/SME/src/sme_common/sme_FTApi.c
index 3947b83ac181..344e3d6d4ab1 100644
--- a/CORE/SME/src/sme_common/sme_FTApi.c
+++ b/CORE/SME/src/sme_common/sme_FTApi.c
@@ -317,7 +317,7 @@ eHalStatus sme_FTSendUpdateKeyInd(tHalHandle hHal, tANI_U32 sessionId,
keymaterial->key[ 0 ].keyLength = pFTKeyInfo->keyLength;
- if ( pFTKeyInfo->keyLength && pFTKeyInfo->Key )
+ if (pFTKeyInfo->keyLength)
{
vos_mem_copy(&keymaterial->key[ 0 ].key, pFTKeyInfo->Key, pFTKeyInfo->keyLength);
if(pFTKeyInfo->keyLength == 16)
diff --git a/CORE/SVC/inc/wlan_btc_svc.h b/CORE/SVC/inc/wlan_btc_svc.h
deleted file mode 100644
index 7eee2dec2527..000000000000
--- a/CORE/SVC/inc/wlan_btc_svc.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2012 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-/******************************************************************************
- * wlan_btc_svc.h
- *
- ******************************************************************************/
-
-#ifndef WLAN_BTC_SVC_H
-#define WLAN_BTC_SVC_H
-
-void send_btc_nlink_msg (int type, int dest_pid);
-int btc_activate_service(void *pAdapter);
-
-#endif
diff --git a/CORE/SVC/src/btc/wlan_btc_svc.c b/CORE/SVC/src/btc/wlan_btc_svc.c
deleted file mode 100644
index 7d4aeaf7538f..000000000000
--- a/CORE/SVC/src/btc/wlan_btc_svc.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
- *
- * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
- *
- *
- * Permission to use, copy, modify, and/or distribute this software for
- * any purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * This file was originally distributed by Qualcomm Atheros, Inc.
- * under proprietary terms before Copyright ownership was assigned
- * to the Linux Foundation.
- */
-
-
-/******************************************************************************
- * wlan_btc_svc.c
- *
- ******************************************************************************/
-#include <wlan_nlink_srv.h>
-#include <wlan_btc_svc.h>
-#include <halTypes.h>
-#include <vos_status.h>
-#include <btcApi.h>
-#include <wlan_hdd_includes.h>
-#include <vos_trace.h>
-// Global variables
-static struct hdd_context_s *pHddCtx;
-
-static int gWiFiChannel; /* WiFi associated channel 1-13, or 0 (none) */
-static int gAmpChannel; /* AMP associated channel 1-13, or 0 (none) */
-static int gBtcDriverMode = WLAN_HDD_INFRA_STATION; /* Driver mode in BTC */
-
-
-// Forward declrarion
-static int btc_msg_callback (struct sk_buff * skb);
-/*
- * Send a netlink message to the user space.
- * Destination pid as zero implies broadcast
- */
-void send_btc_nlink_msg (int type, int dest_pid)
-{
- struct sk_buff *skb;
- struct nlmsghdr *nlh;
- tAniMsgHdr *aniHdr;
- tWlanAssocData *assocData;
- skb = alloc_skb(NLMSG_SPACE(WLAN_NL_MAX_PAYLOAD), GFP_KERNEL);
- if(skb == NULL) {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "BTC: alloc_skb failed\n");
- return;
- }
- nlh = (struct nlmsghdr *)skb->data;
- nlh->nlmsg_pid = 0; /* from kernel */
- nlh->nlmsg_flags = 0;
- nlh->nlmsg_seq = 0;
- nlh->nlmsg_type = WLAN_NL_MSG_BTC;
- aniHdr = NLMSG_DATA(nlh);
- aniHdr->type = type;
-
- /* Set BTC driver mode correctly based on received events type */
- if(type == WLAN_BTC_SOFTAP_BSS_START)
- {
- /* Event is SoftAP BSS Start set BTC driver mode to SoftAP */
- gBtcDriverMode = WLAN_HDD_SOFTAP;
- }
- if(type == WLAN_STA_ASSOC_DONE_IND)
- {
- /* Event is STA Assoc done set BTC driver mode to INFRA STA*/
- gBtcDriverMode = WLAN_HDD_INFRA_STATION;
- }
-
- switch( type )
- {
- case WLAN_STA_DISASSOC_DONE_IND:
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "WiFi unassociated; gAmpChannel %d gWiFiChannel %d", gAmpChannel, gWiFiChannel);
-
- /* If AMP is using a channel (non-zero), no message sent.
- Or, if WiFi wasn't using a channel before, no message sent.
- Logic presumes same channel has to be used for WiFi and AMP if both are active.
- In any case, track the WiFi channel in use (none) */
- if((gAmpChannel != 0) || (gWiFiChannel == 0))
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "No msg for AFH will be sent");
- gWiFiChannel = 0;
- kfree_skb(skb);
- return;
- }
- gWiFiChannel = 0;
-
- /* No Break: Fall into next cases */
-
- case WLAN_MODULE_UP_IND:
- case WLAN_MODULE_DOWN_IND:
- aniHdr->length = 0;
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr)));
- skb_put(skb, NLMSG_SPACE(sizeof(tAniMsgHdr)));
- break;
- case WLAN_BTC_SOFTAP_BSS_START:
- case WLAN_BTC_QUERY_STATE_RSP:
- case WLAN_STA_ASSOC_DONE_IND:
- aniHdr->length = sizeof(tWlanAssocData);
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + sizeof(tWlanAssocData)));
- assocData = ( tWlanAssocData *)((char*)aniHdr + sizeof(tAniMsgHdr));
-
- assocData->channel = hdd_get_operating_channel( pHddCtx, gBtcDriverMode );
-
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "New WiFi channel %d gAmpChannel %d gWiFiChannel %d",
- assocData->channel, gAmpChannel, gWiFiChannel);
-
- /* If WiFi has finished associating */
- if(type == WLAN_STA_ASSOC_DONE_IND)
- {
- /* If AMP is using a channel (non-zero), no message sent.
- Or, if the WiFi channel did not change, no message sent.
- Logic presumes same channel has to be used for WiFi and AMP if both are active.
- In any case, track the WiFi channel in use (1-13 or none, in assocData->channel) */
- if((gAmpChannel != 0) || (assocData->channel == gWiFiChannel))
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "No msg for AFH will be sent");
- gWiFiChannel = assocData->channel;
- kfree_skb(skb);
- return;
- }
- }
- if(type == WLAN_BTC_SOFTAP_BSS_START)
- {
- /*Replace WLAN_BTC_SOFTAP_BSS_START by WLAN_STA_ASSOC_DONE_IND*/
- aniHdr->type = WLAN_STA_ASSOC_DONE_IND;
- }
- gWiFiChannel = assocData->channel;
- skb_put(skb, NLMSG_SPACE((sizeof(tAniMsgHdr)+ sizeof(tWlanAssocData))));
- break;
-
- case WLAN_AMP_ASSOC_DONE_IND:
-
- /* This is an overloaded type. It means that AMP is connected (dest_pid is channel 1-13),
- or it means AMP is now disconnected (dest_pid is 0) */
-
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "New AMP channel %d gAmpChannel %d gWiFiChannel %d", dest_pid, gAmpChannel, gWiFiChannel);
- /* If WiFi is using a channel (non-zero), no message sent.
- Or, if the AMP channel did not change, no message sent.
- Logic presumes same channel has to be used for WiFi and AMP if both are active.
- In any case, track the AMP channel in use (1-13 or none, in dest_pid) */
- if((gWiFiChannel != 0) || (dest_pid == gAmpChannel))
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_LOW,
- "No msg for AFH will be sent");
- gAmpChannel = dest_pid;
- kfree_skb(skb);
- return;
- }
-
- gAmpChannel = dest_pid;
-
- /* Fix overloaded parameters and finish message formatting */
- if(dest_pid != 0)
- {
- aniHdr->type = WLAN_STA_ASSOC_DONE_IND;
- aniHdr->length = sizeof(tWlanAssocData);
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + sizeof(tWlanAssocData)));
- assocData = ( tWlanAssocData *)((char*)aniHdr + sizeof(tAniMsgHdr));
- assocData->channel = dest_pid;
- skb_put(skb, NLMSG_SPACE((sizeof(tAniMsgHdr)+ sizeof(tWlanAssocData))));
- }
- else
- {
- aniHdr->type = WLAN_STA_DISASSOC_DONE_IND;
- aniHdr->length = 0;
- nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr)));
- skb_put(skb, NLMSG_SPACE(sizeof(tAniMsgHdr)));
- }
- dest_pid = 0;
- break;
-
- default:
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "BTC: Attempt to send unknown nlink message %d\n", type);
- kfree_skb(skb);
- return;
- }
- if(dest_pid == 0)
- (void)nl_srv_bcast(skb);
- else
- (void)nl_srv_ucast(skb, dest_pid, MSG_DONTWAIT);
-}
-/*
- * Activate BTC handler. This will register a handler to receive
- * netlink messages addressed to WLAN_NL_MSG_BTC from user space
- */
-int btc_activate_service(void *pAdapter)
-{
- pHddCtx = (struct hdd_context_s*)pAdapter;
-
- //Register the msg handler for msgs addressed to ANI_NL_MSG_BTC
- nl_srv_register(WLAN_NL_MSG_BTC, btc_msg_callback);
- return 0;
-}
-/*
- * Callback function invoked by Netlink service for all netlink
- * messages (from user space) addressed to WLAN_NL_MSG_BTC
- */
-int btc_msg_callback (struct sk_buff * skb)
-{
- struct nlmsghdr *nlh;
- tAniMsgHdr *msg_hdr;
- tSmeBtEvent *btEvent = NULL;
- nlh = (struct nlmsghdr *)skb->data;
- msg_hdr = NLMSG_DATA(nlh);
-
- /* Continue with parsing payload. */
- switch(msg_hdr->type)
- {
- case WLAN_BTC_QUERY_STATE_REQ:
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "BTC: Received probe from BTC Service\n");
- send_btc_nlink_msg(WLAN_BTC_QUERY_STATE_RSP, nlh->nlmsg_pid);
- break;
- case WLAN_BTC_BT_EVENT_IND:
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
- "BTC: Received Bluetooth event indication\n");
- if(msg_hdr->length != sizeof(tSmeBtEvent)) {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "BTC: Size mismatch in BT event data\n");
- break;
- }
- btEvent = (tSmeBtEvent*)((char*)msg_hdr + sizeof(tAniMsgHdr));
- (void)sme_BtcSignalBtEvent(pHddCtx->hHal, btEvent);
- break;
- default:
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "BTC: Received Invalid Msg type [%d]\n", msg_hdr->type);
- break;
- }
- return 0;
-}
diff --git a/CORE/SYS/legacy/src/system/inc/sysDef.h b/CORE/SYS/legacy/src/system/inc/sysDef.h
index 97b5b70d8a65..0b6a14310773 100644
--- a/CORE/SYS/legacy/src/system/inc/sysDef.h
+++ b/CORE/SYS/legacy/src/system/inc/sysDef.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -116,15 +116,6 @@
/// PTT Message Queue
# define SYS_NIM_PTT_Q_SIZE 200 // Holds up to 25 messages
-/// Semaphore definitions
-// Data Semaphore
-
-# define SYS_DPH_SEM_INITIAL_CNT 0
-
-// Transport Semaphore
-
-# define SYS_BBT_SEM_INITIAL_CNT 0
-
/// Thread definitions
// tHAL
diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c
index 17205641c5fa..3874d7c8446f 100644
--- a/CORE/SYS/legacy/src/system/src/macInitApi.c
+++ b/CORE/SYS/legacy/src/system/src/macInitApi.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014,2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -62,9 +62,8 @@ tSirRetStatus macReset(tpAniSirGlobal pMac, tANI_U32 rc);
tSirRetStatus macPreStart(tHalHandle hHal)
{
- tpAniSirGlobal pMac = (tpAniSirGlobal) hHal;
-
#if defined(ANI_LOGDUMP)
+ tpAniSirGlobal pMac = (tpAniSirGlobal) hHal;
//logDumpInit must be called before any module starts
logDumpInit(pMac);
#endif //#if defined(ANI_LOGDUMP)
@@ -262,6 +261,18 @@ tSirRetStatus macClose(tHalHandle hHal)
if (!pMac)
return eHAL_STATUS_FAILURE;
+ /*
+ * CAC timer will be initiated and started only when SAP starts
+ * on DFS channel and it will be stopped and destroyed immediately
+ * once the radar detected or timedout. So as per design CAC timer
+ * should be destroyed after stop.
+ */
+ if (pMac->sap.SapDfsInfo.is_dfs_cac_timer_running) {
+ vos_timer_stop(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer);
+ pMac->sap.SapDfsInfo.is_dfs_cac_timer_running = 0;
+ vos_timer_destroy(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer);
+ }
+
peClose(pMac);
pMac->psOffloadEnabled = FALSE;
diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c
index 68513dc4ffa9..42211f1bc93a 100644
--- a/CORE/SYS/legacy/src/utils/src/dot11f.c
+++ b/CORE/SYS/legacy/src/utils/src/dot11f.c
@@ -35,7 +35,7 @@
*
*
* This file was automatically generated by 'framesc'
- * Mon Aug 8 14:02:12 2016 from the following file(s):
+ * Wed Aug 31 14:43:25 2016 from the following file(s):
*
* dot11f.frms
*
@@ -6047,7 +6047,7 @@ tANI_U32 dot11fUnpackAddTSResponse(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32
{offsetof(tDot11fAssocRequest, P2PIEOpaque), offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque" , 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PIEOPAQUE, 0, },
{offsetof(tDot11fAssocRequest, WFDIEOpaque), offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque" , 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0}, 4, DOT11F_EID_WFDIEOPAQUE, 0, },
{offsetof(tDot11fAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
- {offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fAssocRequest, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
{offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, },
{offsetof(tDot11fAssocRequest, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
@@ -6545,7 +6545,7 @@ tANI_U32 dot11fUnpackAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n
{offsetof(tDot11fAssocResponse, P2PAssocRes), offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes" , 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PASSOCRES, 0, },
{offsetof(tDot11fAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fAssocResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
- {offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fAssocResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
{offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, },
{offsetof(tDot11fAssocResponse, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
@@ -7964,7 +7964,7 @@ tANI_U32 dot11fUnpackAuthentication(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32
{offsetof(tDot11fBeacon, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fBeacon, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
{offsetof(tDot11fBeacon, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, },
- {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fBeacon, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fBeacon, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
{offsetof(tDot11fBeacon, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
{offsetof(tDot11fBeacon, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
@@ -9090,7 +9090,7 @@ tANI_U32 dot11fUnpackBeacon1(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf,
{offsetof(tDot11fBeacon2, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fBeacon2, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
{offsetof(tDot11fBeacon2, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, },
- {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fBeacon2, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fBeacon2, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
{offsetof(tDot11fBeacon2, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
{offsetof(tDot11fBeacon2, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
@@ -9984,7 +9984,7 @@ tANI_U32 dot11fUnpackBeacon2(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf,
{offsetof(tDot11fBeaconIEs, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fBeaconIEs, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
{offsetof(tDot11fBeaconIEs, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, },
- {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fBeaconIEs, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fBeaconIEs, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
{offsetof(tDot11fBeaconIEs, WiderBWChanSwitchAnn), offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0, "WiderBWChanSwitchAnn" , 0, 5, 5, SigIeWiderBWChanSwitchAnn, {0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
{offsetof(tDot11fBeaconIEs, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
@@ -12952,7 +12952,7 @@ tANI_U32 dot11fUnpackPresenceRes(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nB
{offsetof(tDot11fProbeRequest, WFATPC), offsetof(tDot11fIEWFATPC, present), 0, "WFATPC" , 0, 9, 9, SigIeWFATPC, {0, 80, 242, 8, 0}, 5, DOT11F_EID_WFATPC, 0, },
{offsetof(tDot11fProbeRequest, P2PProbeReq), offsetof(tDot11fIEP2PProbeReq, present), 0, "P2PProbeReq" , 0, 6, 43, SigIeP2PProbeReq, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PPROBEREQ, 0, },
{offsetof(tDot11fProbeRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
- {offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, };
tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fProbeRequest *pFrm)
@@ -13420,7 +13420,7 @@ tANI_U32 dot11fUnpackProbeRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n
{offsetof(tDot11fProbeResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fProbeResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
{offsetof(tDot11fProbeResponse, VHTExtBssLoad), offsetof(tDot11fIEVHTExtBssLoad, present), 0, "VHTExtBssLoad" , 0, 7, 7, SigIeVHTExtBssLoad, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTEXTBSSLOAD, 0, },
- {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fProbeResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fProbeResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
{offsetof(tDot11fProbeResponse, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE" , 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, },
{offsetof(tDot11fProbeResponse, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
@@ -14882,7 +14882,7 @@ tANI_U32 dot11fUnpackRadioMeasurementRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf,
{offsetof(tDot11fReAssocRequest, P2PIEOpaque), offsetof(tDot11fIEP2PIEOpaque, present), 0, "P2PIEOpaque" , 0, 8, 255, SigIeP2PIEOpaque, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PIEOPAQUE, 0, },
{offsetof(tDot11fReAssocRequest, WFDIEOpaque), offsetof(tDot11fIEWFDIEOpaque, present), 0, "WFDIEOpaque" , 0, 8, 255, SigIeWFDIEOpaque, {80, 111, 154, 10, 0}, 4, DOT11F_EID_WFDIEOPAQUE, 0, },
{offsetof(tDot11fReAssocRequest, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
- {offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fReAssocRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fReAssocRequest, OperatingMode), offsetof(tDot11fIEOperatingMode, present), 0, "OperatingMode" , 0, 3, 3, SigIeOperatingMode, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OPERATINGMODE, 0, },
{offsetof(tDot11fReAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, },
{offsetof(tDot11fReAssocRequest, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
@@ -15768,7 +15768,7 @@ tANI_U32 dot11fUnpackReAssocRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32
{offsetof(tDot11fReAssocResponse, P2PAssocRes), offsetof(tDot11fIEP2PAssocRes, present), 0, "P2PAssocRes" , 0, 6, 17, SigIeP2PAssocRes, {80, 111, 154, 9, 0}, 4, DOT11F_EID_P2PASSOCRES, 0, },
{offsetof(tDot11fReAssocResponse, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps" , 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, },
{offsetof(tDot11fReAssocResponse, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation" , 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, },
- {offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fReAssocResponse, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fReAssocResponse, OBSSScanParameters), offsetof(tDot11fIEOBSSScanParameters, present), 0, "OBSSScanParameters" , 0, 16, 16, SigIeOBSSScanParameters, {0, 0, 0, 0, 0}, 0, DOT11F_EID_OBSSSCANPARAMETERS, 0, },
{offsetof(tDot11fReAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet" , 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, },
{offsetof(tDot11fReAssocResponse, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
@@ -16904,7 +16904,7 @@ tANI_U32 dot11fUnpackTDLSDisReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBu
{offsetof(tDot11fTDLSDisRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, },
{offsetof(tDot11fTDLSDisRsp, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, },
{offsetof(tDot11fTDLSDisRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, },
- {offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fTDLSDisRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fTDLSDisRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, },
{offsetof(tDot11fTDLSDisRsp, TimeoutInterval), offsetof(tDot11fIETimeoutInterval, present), 0, "TimeoutInterval" , 0, 7, 7, SigIeTimeoutInterval, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIMEOUTINTERVAL, 0, },
{offsetof(tDot11fTDLSDisRsp, RICData), offsetof(tDot11fIERICData, present), 0, "RICData" , 0, 6, 6, SigIeRICData, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RICDATA, 0, },
@@ -17626,7 +17626,7 @@ tANI_U32 dot11fUnpackTDLSSetupCnf(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n
{offsetof(tDot11fTDLSSetupReq, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, },
{offsetof(tDot11fTDLSSetupReq, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, },
{offsetof(tDot11fTDLSSetupReq, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, },
- {offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fTDLSSetupReq, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fTDLSSetupReq, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, },
{offsetof(tDot11fTDLSSetupReq, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, },
{offsetof(tDot11fTDLSSetupReq, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, },
@@ -18011,7 +18011,7 @@ tANI_U32 dot11fUnpackTDLSSetupReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 n
{offsetof(tDot11fTDLSSetupRsp, ExtSuppRates), offsetof(tDot11fIEExtSuppRates, present), 0, "ExtSuppRates" , 0, 3, 14, SigIeExtSuppRates, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTSUPPRATES, 0, },
{offsetof(tDot11fTDLSSetupRsp, SuppChannels), offsetof(tDot11fIESuppChannels, present), 0, "SuppChannels" , 0, 4, 98, SigIeSuppChannels, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPCHANNELS, 0, },
{offsetof(tDot11fTDLSSetupRsp, RSN), offsetof(tDot11fIERSN, present), 0, "RSN" , 0, 8, 116, SigIeRSN, {0, 0, 0, 0, 0}, 0, DOT11F_EID_RSN, 0, },
- {offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fTDLSSetupRsp, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fTDLSSetupRsp, SuppOperatingClasses), offsetof(tDot11fIESuppOperatingClasses, present), 0, "SuppOperatingClasses" , 0, 3, 34, SigIeSuppOperatingClasses, {0, 0, 0, 0, 0}, 0, DOT11F_EID_SUPPOPERATINGCLASSES, 0, },
{offsetof(tDot11fTDLSSetupRsp, QOSCapsStation), offsetof(tDot11fIEQOSCapsStation, present), 0, "QOSCapsStation" , 0, 3, 3, SigIeQOSCapsStation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSCAPSSTATION, 0, },
{offsetof(tDot11fTDLSSetupRsp, FTInfo), offsetof(tDot11fIEFTInfo, present), 0, "FTInfo" , 0, 84, 222, SigIeFTInfo, {0, 0, 0, 0, 0}, 0, DOT11F_EID_FTINFO, 0, },
@@ -18602,7 +18602,7 @@ tANI_U32 dot11fUnpackTPCRequest(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBu
{offsetof(tDot11fTimingAdvertisementFrame, Country), offsetof(tDot11fIECountry, present), 0, "Country" , 0, 5, 257, SigIeCountry, {0, 0, 0, 0, 0}, 0, DOT11F_EID_COUNTRY, 0, },
{offsetof(tDot11fTimingAdvertisementFrame, PowerConstraints), offsetof(tDot11fIEPowerConstraints, present), 0, "PowerConstraints" , 0, 3, 3, SigIePowerConstraints, {0, 0, 0, 0, 0}, 0, DOT11F_EID_POWERCONSTRAINTS, 0, },
{offsetof(tDot11fTimingAdvertisementFrame, TimeAdvertisement), offsetof(tDot11fIETimeAdvertisement, present), 0, "TimeAdvertisement" , 0, 18, 18, SigIeTimeAdvertisement, {0, 0, 0, 0, 0}, 0, DOT11F_EID_TIMEADVERTISEMENT, 0, },
- {offsetof(tDot11fTimingAdvertisementFrame, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 10, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
+ {offsetof(tDot11fTimingAdvertisementFrame, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap" , 0, 3, 11, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, },
{offsetof(tDot11fTimingAdvertisementFrame, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE" , 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, },
{offsetof(tDot11fTimingAdvertisementFrame, vendor2_ie), offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie" , 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, 3, DOT11F_EID_VENDOR2_IE, 0, },
{offsetof(tDot11fTimingAdvertisementFrame, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE" , 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, },
diff --git a/CORE/SYS/legacy/src/utils/src/logDump.c b/CORE/SYS/legacy/src/utils/src/logDump.c
index 2d404f488809..62f2a132b7ea 100644
--- a/CORE/SYS/legacy/src/utils/src/logDump.c
+++ b/CORE/SYS/legacy/src/utils/src/logDump.c
@@ -92,14 +92,15 @@ logDump.c
static int debug;
- void
+int
logPrintf(tpAniSirGlobal pMac, tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3, tANI_U32 arg4)
{
static tANI_U8 buf[MAX_LOGDUMP_SIZE + MAX_OVERFLOW_MSG];
- tANI_U16 bufLen;
+
pMac->gCurrentLogSize = 0;
- bufLen = (tANI_U16)logRtaiDump(pMac, cmd, arg1, arg2, arg3, arg4, buf);
+ return logRtaiDump(pMac, cmd, arg1, arg2, arg3, arg4, buf);
+
}
/**
@@ -298,17 +299,17 @@ char * dump_cfg_group_get( tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2, tA
(void) arg3; (void) arg4;
- if (arg1 < CFG_PARAM_MAX_NUM) {
+ if (arg1 < WNI_CFG_MAX) {
startId = arg1;
} else {
- p += log_sprintf( pMac, p, "Start CFGID must be less than %d\n", CFG_PARAM_MAX_NUM);
+ p += log_sprintf( pMac, p, "Start CFGID must be less than %d\n", WNI_CFG_MAX);
return p;
}
- if ((arg2 == 0) || (arg2 > CFG_PARAM_MAX_NUM))
+ if ((arg2 == 0) || (arg2 > WNI_CFG_MAX))
arg2 = 30;
- endId = ((startId + arg2) < CFG_PARAM_MAX_NUM) ? (startId + arg2) : CFG_PARAM_MAX_NUM;
+ endId = ((startId + arg2) < WNI_CFG_MAX) ? (startId + arg2) : WNI_CFG_MAX;
for (i=startId; i < endId; i++)
Log_getCfg(pMac, (tANI_U16) i);
@@ -436,12 +437,14 @@ int logRtaiDump( tpAniSirGlobal pMac, tANI_U32 cmd, tANI_U32 arg1, tANI_U32 arg2
pEntry->func(pMac, arg1, arg2, arg3, arg4, p);
} else {
p += log_sprintf( pMac,p, "Cmd not supported\n");
+ return -1;
}
break;
}
}
} else {
p += log_sprintf( pMac,p, "Cmd not found \n");
+ return -1;
}
}
if (debug)
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index c0a74f28e5bb..61048ffeb03d 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -498,7 +498,6 @@ tANI_U8* macTraceGetSmeMsgString(tANI_U16 smeMsg)
CASE_RETURN_STRING(eWNI_SME_ESE_ADJACENT_AP_REPORT);
#endif
CASE_RETURN_STRING(eWNI_SME_REGISTER_MGMT_FRAME_REQ);
- CASE_RETURN_STRING(eWNI_SME_COEX_IND);
#ifdef FEATURE_WLAN_SCAN_PNO
CASE_RETURN_STRING(eWNI_SME_PREF_NETWORK_FOUND_IND);
#endif // FEATURE_WLAN_SCAN_PNO
@@ -855,6 +854,7 @@ tANI_U8* macTraceGetWdaMsgString(tANI_U16 wdaMsg)
CASE_RETURN_STRING(WDA_UPDATE_CHAN_LIST_REQ);
CASE_RETURN_STRING(WDA_UPDATE_CHAN_LIST_RSP);
CASE_RETURN_STRING(WDA_RX_SCAN_EVENT);
+ CASE_RETURN_STRING(WDA_RX_CHN_STATUS_EVENT);
CASE_RETURN_STRING(WDA_IBSS_PEER_INACTIVITY_IND);
CASE_RETURN_STRING(WDA_CLI_SET_CMD);
CASE_RETURN_STRING(WDA_CLI_GET_CMD);
diff --git a/CORE/SYS/legacy/src/utils/src/parsemactrace.cmm b/CORE/SYS/legacy/src/utils/src/parsemactrace.cmm
new file mode 100644
index 000000000000..7aafaa1780da
--- /dev/null
+++ b/CORE/SYS/legacy/src/utils/src/parsemactrace.cmm
@@ -0,0 +1,973 @@
+;Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+
+;Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+
+;Permission to use, copy, modify, and/or distribute this software for
+;any purpose with or without fee is hereby granted, provided that the
+;above copyright notice and this permission notice appear in all
+;copies.
+
+;THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+;WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+;WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+;AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+;DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+;PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+;TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+;PERFORMANCE OF THIS SOFTWARE.
+
+;This file was originally distributed by Qualcomm Atheros, Inc.
+;under proprietary terms before Copyright ownership was assigned
+;to the Linux Foundation.
+
+;parsemactrace.cmm - This script parses MAC trace table in UMAC layer
+;This script relies on message id's placed in interface header file.
+;If some message ID's are changed later, since they do not use enum, this script
+;might show incorrect data. So message ID's should always be in sync
+;Author:
+;Date: 09/09/2013
+;History:-
+;Date Modified by Modification Information
+;--------------------------------------------------------------------
+
+
+ENTRY &FILE
+
+IF "&FILE"==""
+(
+DIALOG.file *.txt
+ENTRY &FILE
+)
+
+OPEN #1 "&FILE" /Create /Write /Append
+
+
+Var.NEW char [256][50] \halmsgtype
+
+Var.SET \halmsgtype[0x20]="SIR_HAL_RADAR_DETECTED_IND"
+Var.SET \halmsgtype[0x21]="SIR_HAL_WDT_KAM_RSP"
+Var.SET \halmsgtype[0x22]="SIR_HAL_TIMER_TEMP_MEAS_REQ"
+Var.SET \halmsgtype[0x23]="SIR_HAL_TIMER_PERIODIC_STATS_COLLECT_REQ"
+Var.SET \halmsgtype[0x24]="SIR_HAL_CAL_REQ_NTF"
+Var.SET \halmsgtype[0x25]="SIR_HAL_MNT_OPEN_TPC_TEMP_MEAS_REQ"
+Var.SET \halmsgtype[0x26]="SIR_HAL_CCA_MONITOR_INTERVAL_TO"
+Var.SET \halmsgtype[0x27]="SIR_HAL_CCA_MONITOR_DURATION_TO"
+Var.SET \halmsgtype[0x28]="SIR_HAL_CCA_MONITOR_START"
+Var.SET \halmsgtype[0x29]="SIR_HAL_CCA_MONITOR_STOP"
+Var.SET \halmsgtype[0x2A]="SIR_HAL_CCA_CHANGE_MODE"
+Var.SET \halmsgtype[0x2B]="SIR_HAL_TIMER_WRAP_AROUND_STATS_COLLECT_REQ"
+Var.SET \halmsgtype[0x2D]="SIR_HAL_ADD_STA_REQ"
+Var.SET \halmsgtype[0x2E]="SIR_HAL_ADD_STA_RSP"
+Var.SET \halmsgtype[0x2F]="SIR_HAL_DELETE_STA_REQ"
+Var.SET \halmsgtype[0x30]="SIR_HAL_DELETE_STA_RSP"
+Var.SET \halmsgtype[0x31]="SIR_HAL_ADD_BSS_REQ"
+Var.SET \halmsgtype[0x32]="SIR_HAL_ADD_BSS_RSP"
+Var.SET \halmsgtype[0x33]="SIR_HAL_DELETE_BSS_REQ"
+Var.SET \halmsgtype[0x34]="SIR_HAL_DELETE_BSS_RSP"
+Var.SET \halmsgtype[0x35]="SIR_HAL_INIT_SCAN_REQ"
+Var.SET \halmsgtype[0x36]="SIR_HAL_INIT_SCAN_RSP"
+Var.SET \halmsgtype[0x37]="SIR_HAL_START_SCAN_REQ"
+Var.SET \halmsgtype[0x38]="SIR_HAL_START_SCAN_RSP"
+Var.SET \halmsgtype[0x39]="SIR_HAL_END_SCAN_REQ"
+Var.SET \halmsgtype[0x3A]="SIR_HAL_END_SCAN_RSP"
+Var.SET \halmsgtype[0x3B]="SIR_HAL_FINISH_SCAN_REQ"
+Var.SET \halmsgtype[0x3C]="SIR_HAL_FINISH_SCAN_RSP"
+Var.SET \halmsgtype[0x3D]="SIR_HAL_SEND_BEACON_REQ"
+Var.SET \halmsgtype[0x3E]="SIR_HAL_SEND_BEACON_RSP"
+Var.SET \halmsgtype[0x3F]="SIR_HAL_INIT_CFG_REQ"
+Var.SET \halmsgtype[0x40]="SIR_HAL_INIT_CFG_RSP"
+Var.SET \halmsgtype[0x41]="SIR_HAL_INIT_WM_CFG_REQ"
+Var.SET \halmsgtype[0x42]="SIR_HAL_INIT_WM_CFG_RSP"
+Var.SET \halmsgtype[0x43]="SIR_HAL_SET_BSSKEY_REQ"
+Var.SET \halmsgtype[0x44]="SIR_HAL_SET_BSSKEY_RSP"
+Var.SET \halmsgtype[0x45]="SIR_HAL_SET_STAKEY_REQ"
+Var.SET \halmsgtype[0x46]="SIR_HAL_SET_STAKEY_RSP"
+Var.SET \halmsgtype[0x47]="SIR_HAL_DPU_STATS_REQ"
+Var.SET \halmsgtype[0x48]="SIR_HAL_DPU_STATS_RSP"
+Var.SET \halmsgtype[0x49]="SIR_HAL_GET_DPUINFO_REQ"
+Var.SET \halmsgtype[0x4A]="SIR_HAL_GET_DPUINFO_RSP"
+Var.SET \halmsgtype[0x4B]="SIR_HAL_UPDATE_EDCA_PROFILE_IND"
+Var.SET \halmsgtype[0x4D]="SIR_HAL_UPDATE_STARATEINFO_REQ"
+Var.SET \halmsgtype[0x4E]="SIR_HAL_UPDATE_STARATEINFO_RSP"
+Var.SET \halmsgtype[0x4F]="SIR_HAL_UPDATE_BEACON_IND"
+Var.SET \halmsgtype[0x50]="SIR_HAL_UPDATE_CF_IND"
+Var.SET \halmsgtype[0x51]="SIR_HAL_CHNL_SWITCH_REQ"
+Var.SET \halmsgtype[0x52]="SIR_HAL_ADD_TS_REQ"
+Var.SET \halmsgtype[0x53]="SIR_HAL_DEL_TS_REQ"
+Var.SET \halmsgtype[0x54]="SIR_HAL_SOFTMAC_TXSTAT_REPORT"
+Var.SET \halmsgtype[0x5D]="SIR_HAL_MBOX_SENDMSG_COMPLETE_IND"
+Var.SET \halmsgtype[0x55]="SIR_HAL_EXIT_BMPS_REQ"
+Var.SET \halmsgtype[0x56]="SIR_HAL_EXIT_BMPS_RSP"
+Var.SET \halmsgtype[0x57]="SIR_HAL_EXIT_BMPS_IND"
+Var.SET \halmsgtype[0x58]="SIR_HAL_ENTER_BMPS_REQ"
+Var.SET \halmsgtype[0x59]="SIR_HAL_ENTER_BMPS_RSP"
+Var.SET \halmsgtype[0x5A]="SIR_HAL_BMPS_STATUS_IND"
+Var.SET \halmsgtype[0x5B]="SIR_HAL_MISSED_BEACON_IND"
+Var.SET \halmsgtype[0x5C]="SIR_HAL_SWITCH_CHANNEL_RSP"
+Var.SET \halmsgtype[0x5E]="SIR_HAL_PWR_SAVE_CFG"
+Var.SET \halmsgtype[0x5F]="SIR_HAL_REGISTER_PE_CALLBACK"
+Var.SET \halmsgtype[0x60]="SIR_HAL_SOFTMAC_MEM_READREQUEST"
+Var.SET \halmsgtype[0x61]="SIR_HAL_SOFTMAC_MEM_WRITEREQUEST"
+Var.SET \halmsgtype[0x62]="SIR_HAL_SOFTMAC_MEM_READRESPONSE"
+Var.SET \halmsgtype[0x63]="SIR_HAL_SOFTMAC_BULKREGWRITE_CONFIRM"
+Var.SET \halmsgtype[0x64]="SIR_HAL_SOFTMAC_BULKREGREAD_RESPONSE"
+Var.SET \halmsgtype[0x65]="SIR_HAL_SOFTMAC_HOSTMESG_MSGPROCESSRESULT"
+Var.SET \halmsgtype[0x66]="SIR_HAL_ADDBA_REQ"
+Var.SET \halmsgtype[0x67]="SIR_HAL_ADDBA_RSP"
+Var.SET \halmsgtype[0x68]="SIR_HAL_DELBA_IND"
+Var.SET \halmsgtype[0x69]="SIR_HAL_DEL_BA_IND"
+Var.SET \halmsgtype[0x6A]="SIR_HAL_DELBA_REQ"
+Var.SET \halmsgtype[0x6B]="SIR_HAL_IBSS_STA_ADD"
+Var.SET \halmsgtype[0x6C]="SIR_HAL_TIMER_ADJUST_ADAPTIVE_THRESHOLD_IND"
+Var.SET \halmsgtype[0x6D]="SIR_HAL_SET_LINK_STATE"
+Var.SET \halmsgtype[0x6E]="SIR_HAL_ENTER_IMPS_REQ"
+Var.SET \halmsgtype[0x6F]="SIR_HAL_ENTER_IMPS_RSP"
+Var.SET \halmsgtype[0x70]="SIR_HAL_EXIT_IMPS_RSP"
+Var.SET \halmsgtype[0x71]="SIR_HAL_EXIT_IMPS_REQ"
+Var.SET \halmsgtype[0x72]="SIR_HAL_SOFTMAC_HOSTMESG_PS_STATUS_IND"
+Var.SET \halmsgtype[0x73]="SIR_HAL_POSTPONE_ENTER_IMPS_RSP"
+Var.SET \halmsgtype[0x74]="SIR_HAL_STA_STAT_REQ"
+Var.SET \halmsgtype[0x75]="SIR_HAL_GLOBAL_STAT_REQ"
+Var.SET \halmsgtype[0x76]="SIR_HAL_AGGR_STAT_REQ"
+Var.SET \halmsgtype[0x77]="SIR_HAL_STA_STAT_RSP"
+Var.SET \halmsgtype[0x78]="SIR_HAL_GLOBAL_STAT_RSP"
+Var.SET \halmsgtype[0x79]="SIR_HAL_AGGR_STAT_RSP"
+Var.SET \halmsgtype[0x7A]="SIR_HAL_STAT_SUMM_REQ"
+Var.SET \halmsgtype[0x7C]="SIR_HAL_STAT_SUMM_RSP"
+Var.SET \halmsgtype[0x7D]="SIR_HAL_REMOVE_BSSKEY_REQ"
+Var.SET \halmsgtype[0x7E]="SIR_HAL_REMOVE_BSSKEY_RSP"
+Var.SET \halmsgtype[0x7F]="SIR_HAL_REMOVE_STAKEY_REQ"
+Var.SET \halmsgtype[0x80]="SIR_HAL_REMOVE_STAKEY_RSP"
+Var.SET \halmsgtype[0x81]="SIR_HAL_SET_STA_BCASTKEY_REQ"
+Var.SET \halmsgtype[0x82]="SIR_HAL_SET_STA_BCASTKEY_RSP"
+Var.SET \halmsgtype[0x83]="SIR_HAL_REMOVE_STA_BCASTKEY_REQ"
+Var.SET \halmsgtype[0x84]="SIR_HAL_REMOVE_STA_BCASTKEY_RSP"
+Var.SET \halmsgtype[0x85]="SIR_HAL_ADD_TS_RSP"
+Var.SET \halmsgtype[0x86]="SIR_HAL_DPU_MIC_ERROR"
+Var.SET \halmsgtype[0x87]="SIR_HAL_TIMER_BA_ACTIVITY_REQ"
+Var.SET \halmsgtype[0x88]="SIR_HAL_TIMER_CHIP_MONITOR_TIMEOUT"
+Var.SET \halmsgtype[0x89]="SIR_HAL_TIMER_TRAFFIC_ACTIVITY_REQ"
+Var.SET \halmsgtype[0x8A]="SIR_HAL_TIMER_ADC_RSSI_STATS"
+Var.SET \halmsgtype[0x8B]="SIR_HAL_MIC_FAILURE_IND"
+Var.SET \halmsgtype[0x8C]="SIR_HAL_UPDATE_UAPSD_IND"
+Var.SET \halmsgtype[0x8D]="SIR_HAL_SET_MIMOPS_REQ"
+Var.SET \halmsgtype[0x8E]="SIR_HAL_SET_MIMOPS_RSP"
+Var.SET \halmsgtype[0x8F]="SIR_HAL_SYS_READY_IND"
+Var.SET \halmsgtype[0x90]="SIR_HAL_SET_TX_POWER_REQ"
+Var.SET \halmsgtype[0x91]="SIR_HAL_SET_TX_POWER_RSP"
+Var.SET \halmsgtype[0x92]="SIR_HAL_GET_TX_POWER_REQ"
+Var.SET \halmsgtype[0x93]="SIR_HAL_GET_TX_POWER_RSP"
+Var.SET \halmsgtype[0x94]="SIR_HAL_GET_NOISE_REQ"
+Var.SET \halmsgtype[0x95]="SIR_HAL_GET_NOISE_RSP"
+Var.SET \halmsgtype[0x96]="SIR_HAL_TRANSMISSION_CONTROL_IND"
+Var.SET \halmsgtype[0x97]="SIR_HAL_INIT_RADAR_IND"
+Var.SET \halmsgtype[0x98]="SIR_HAL_BEACON_PRE_IND"
+Var.SET \halmsgtype[0x99]="SIR_HAL_ENTER_UAPSD_REQ"
+Var.SET \halmsgtype[0x9A]="SIR_HAL_ENTER_UAPSD_RSP"
+Var.SET \halmsgtype[0x9B]="SIR_HAL_EXIT_UAPSD_REQ"
+Var.SET \halmsgtype[0x9C]="SIR_HAL_EXIT_UAPSD_RSP"
+Var.SET \halmsgtype[0x9D]="SIR_HAL_LOW_RSSI_IND"
+Var.SET \halmsgtype[0x9E]="SIR_HAL_BEACON_FILTER_IND"
+Var.SET \halmsgtype[0x9F]="SIR_HAL_WOWL_ADD_BCAST_PTRN"
+Var.SET \halmsgtype[0xA0]="SIR_HAL_WOWL_DEL_BCAST_PTRN"
+Var.SET \halmsgtype[0xA1]="SIR_HAL_WOWL_ENTER_REQ"
+Var.SET \halmsgtype[0xA2]="SIR_HAL_WOWL_ENTER_RSP"
+Var.SET \halmsgtype[0xA3]="SIR_HAL_WOWL_EXIT_REQ"
+Var.SET \halmsgtype[0xA4]="SIR_HAL_WOWL_EXIT_RSP"
+Var.SET \halmsgtype[0xA5]="SIR_HAL_TX_COMPLETE_IND"
+Var.SET \halmsgtype[0xA6]="SIR_HAL_TIMER_RA_COLLECT_AND_ADAPT"
+Var.SET \halmsgtype[0xA7]="SIR_HAL_GET_STATISTICS_REQ"
+Var.SET \halmsgtype[0xA8]="SIR_HAL_GET_STATISTICS_RSP"
+Var.SET \halmsgtype[0xA9]="SIR_HAL_SET_KEY_DONE"
+Var.SET \halmsgtype[0xAA]="SIR_HAL_BTC_SET_CFG"
+Var.SET \halmsgtype[0xAB]="SIR_HAL_SIGNAL_BT_EVENT"
+Var.SET \halmsgtype[0xAC]="SIR_HAL_HANDLE_FW_MBOX_RSP"
+Var.SET \halmsgtype[0xAD]="SIR_HAL_UPDATE_PROBE_RSP_TEMPLATE_IND"
+Var.SET \halmsgtype[0xAE]="SIR_LIM_ADDR2_MISS_IND"
+Var.SET \halmsgtype[0xAF]="SIR_HAL_START_OEM_DATA_REQ"
+Var.SET \halmsgtype[0xB0]="SIR_HAL_START_OEM_DATA_RSP"
+Var.SET \halmsgtype[0xB1]="SIR_HAL_FINISH_OEM_DATA_REQ"
+Var.SET \halmsgtype[0xB2]="SIR_HAL_SET_MAX_TX_POWER_REQ"
+Var.SET \halmsgtype[0xB3]="SIR_HAL_SET_MAX_TX_POWER_RSP"
+Var.SET \halmsgtype[0xB4]="SIR_HAL_SEND_MSG_COMPLETE"
+Var.SET \halmsgtype[0xB5]="SIR_HAL_SET_HOST_OFFLOAD"
+Var.SET \halmsgtype[0xB6]="SIR_HAL_ADD_STA_SELF_REQ"
+Var.SET \halmsgtype[0xB7]="SIR_HAL_ADD_STA_SELF_RSP"
+Var.SET \halmsgtype[0xB8]="SIR_HAL_DEL_STA_SELF_REQ"
+Var.SET \halmsgtype[0xB9]="SIR_HAL_DEL_STA_SELF_RSP"
+Var.SET \halmsgtype[0xBA]="SIR_HAL_SIGNAL_BTAMP_EVENT"
+Var.SET \halmsgtype[0xBB]="SIR_HAL_CFG_RXP_FILTER_REQ"
+Var.SET \halmsgtype[0xBC]="SIR_HAL_CFG_RXP_FILTER_RSP"
+Var.SET \halmsgtype[0xBD]="SIR_HAL_AGGR_ADD_TS_REQ"
+Var.SET \halmsgtype[0xBE]="SIR_HAL_AGGR_ADD_TS_RSP"
+Var.SET \halmsgtype[0xBF]="SIR_HAL_AGGR_QOS_REQ"
+Var.SET \halmsgtype[0xC0]="SIR_HAL_AGGR_QOS_RSP"
+Var.SET \halmsgtype[0xC1]="SIR_HAL_SET_P2P_GO_NOA_REQ"
+Var.SET \halmsgtype[0xC2]="SIR_HAL_P2P_NOA_ATTR_IND"
+Var.SET \halmsgtype[0xC3]="SIR_HAL_P2P_NOA_START_IND"
+Var.SET \halmsgtype[0xC5]="SIR_HAL_SET_LINK_STATE_RSP"
+Var.SET \halmsgtype[0xC6]="SIR_HAL_WLAN_SUSPEND_IND"
+Var.SET \halmsgtype[0xC7]="SIR_HAL_WLAN_RESUME_REQ"
+Var.SET \halmsgtype[0xC8]="SIR_HAL_SET_KEEP_ALIVE"
+Var.SET \halmsgtype[0xC9]="SIR_HAL_SET_NS_OFFLOAD"
+Var.SET \halmsgtype[0xCA]="SIR_HAL_SET_PNO_REQ"
+Var.SET \halmsgtype[0xCB]="SIR_HAL_SET_PNO_CHANGED_IND"
+Var.SET \halmsgtype[0xCC]="SIR_HAL_UPDATE_SCAN_PARAMS"
+Var.SET \halmsgtype[0xCD]="SIR_HAL_SET_RSSI_FILTER_REQ"
+Var.SET \halmsgtype[0xCE]="SIR_HAL_SET_TX_PER_TRACKING_REQ"
+Var.SET \halmsgtype[0xCF]="SIR_HAL_8023_MULTICAST_LIST_REQ"
+Var.SET \halmsgtype[0xD0]="SIR_HAL_RECEIVE_FILTER_SET_FILTER_REQ"
+Var.SET \halmsgtype[0xD1]="SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ"
+Var.SET \halmsgtype[0xD2]="SIR_HAL_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP"
+Var.SET \halmsgtype[0xD3]="SIR_HAL_RECEIVE_FILTER_CLEAR_FILTER_REQ"
+Var.SET \halmsgtype[0xD4]="SIR_HAL_SET_POWER_PARAMS_REQ"
+Var.SET \halmsgtype[0xD5]="SIR_HAL_GTK_OFFLOAD_REQ"
+Var.SET \halmsgtype[0xD6]="SIR_HAL_GTK_OFFLOAD_GETINFO_REQ"
+Var.SET \halmsgtype[0xD7]="SIR_HAL_GTK_OFFLOAD_GETINFO_RSP"
+Var.SET \halmsgtype[0xD8]="SIR_HAL_TSM_STATS_REQ"
+Var.SET \halmsgtype[0xD9]="SIR_HAL_TSM_STATS_RSP"
+Var.SET \halmsgtype[0xDA]="SIR_HAL_WAKE_REASON_IND"
+Var.SET \halmsgtype[0xDB]="SIR_HAL_SET_TM_LEVEL_REQ"
+Var.SET \halmsgtype[0xDC]="SIR_HAL_UPDATE_OP_MODE"
+Var.SET \halmsgtype[0xDD]="SIR_HAL_TDLS_LINK_ESTABLISH"
+Var.SET \halmsgtype[0xDE]="SIR_HAL_TDLS_LINK_TEARDOWN"
+Var.SET \halmsgtype[0xE3]="SIR_HAL_TRAFFIC_STATS_IND"
+Var.SET \halmsgtype[0xE5]="SIR_HAL_START_SCAN_OFFLOAD_REQ"
+Var.SET \halmsgtype[0xE6]="SIR_HAL_START_SCAN_OFFLOAD_RSP"
+Var.SET \halmsgtype[0xE7]="SIR_HAL_UPDATE_CHAN_LIST_REQ"
+Var.SET \halmsgtype[0xE8]="SIR_HAL_UPDATE_CHAN_LIST_RSP"
+Var.SET \halmsgtype[0xE9]="SIR_HAL_STOP_SCAN_OFFLOAD_REQ"
+Var.SET \halmsgtype[0xEA]="SIR_HAL_STOP_SCAN_OFFLOAD_RSP"
+Var.SET \halmsgtype[0xEB]="SIR_HAL_RX_SCAN_EVENT"
+Var.SET \halmsgtype[0xEC]="SIR_HAL_DHCP_START_IND"
+Var.SET \halmsgtype[0xED]="SIR_HAL_DHCP_STOP_IND"
+Var.SET \halmsgtype[0xEE]="SIR_HAL_IBSS_PEER_INACTIVITY_IND"
+Var.SET \halmsgtype[0xEF]="SIR_HAL_LPHB_CONF_IND"
+Var.SET \halmsgtype[0xF0]="SIR_HAL_LPHB_WAIT_EXPIRE_IND"
+Var.SET \halmsgtype[0xF1]="SIR_HAL_ADD_PERIODIC_TX_PTRN_IND"
+Var.SET \halmsgtype[0xF2]="SIR_HAL_DEL_PERIODIC_TX_PTRN_IND"
+Var.SET \halmsgtype[0xF3]="SIR_HAL_RMC_BECOME_LEADER"
+Var.SET \halmsgtype[0xF4]="SIR_HAL_RMC_LEADER_SELECT_RESP"
+Var.SET \halmsgtype[0xF5]="SIR_HAL_RMC_LEADER_REQ"
+Var.SET \halmsgtype[0xF6]="SIR_HAL_RMC_UPDATE_IND"
+Var.SET \halmsgtype[0xF7]="SIR_HAL_IBSS_PEER_INFO_REQ"
+Var.SET \halmsgtype[0xF8]="SIR_HAL_IBSS_PEER_INFO_RSP"
+Var.SET \halmsgtype[0xF9]="SIR_HAL_RATE_UPDATE_IND"
+Var.SET \halmsgtype[0xFA]="SIR_HAL_IBSS_ROUTE_TABLE_UPDATE_IND"
+Var.SET \halmsgtype[0xFB]="SIR_HAL_TX_FAIL_MONITOR_IND"
+Var.SET \halmsgtype[0xFC]="SIR_HAL_IBSS_PEER_INFO_RSP"
+Var.SET \halmsgtype[0xFD]="SIR_HAL_RATE_UPDATE_IND"
+
+
+Var.NEW char [256][100] \tlcodetype
+
+Var.SET \tlcodetype[0x00]="TRACE_CODE_TL_STA_STATE"
+Var.SET \tlcodetype[0x01]="TRACE_CODE_TL_EAPOL_PKT_PENDING"
+Var.SET \tlcodetype[0x02]="TRACE_CODE_TL_GET_FRAMES_EAPOL"
+Var.SET \tlcodetype[0x03]="TRACE_CODE_TL_RX_CONN_EAPOL"
+Var.SET \tlcodetype[0x04]="TRACE_CODE_TL_REGISTER_STA_CLIENT"
+Var.SET \tlcodetype[0x05]="TRACE_CODE_TL_SUSPEND_DATA_TX"
+Var.SET \tlcodetype[0x06]="TRACE_CODE_TL_RESUME_DATA_TX"
+Var.SET \tlcodetype[0x07]="TRACE_CODE_TL_STA_PKT_PENDING"
+Var.SET \tlcodetype[0x08]="TRACE_CODE_TL_QUEUE_CURRENT"
+Var.SET \tlcodetype[0x09]="TRACE_CODE_TL_REORDER_TIMER_EXP_CB"
+Var.SET \tlcodetype[0x0A]="TRACE_CODE_TL_BA_SESSION_DEL"
+Var.SET \tlcodetype[0x0B]="TRACE_CODE_TL_ASSOC_FAILED"
+Var.SET \tlcodetype[0x0C]="TRACE_CODE_TL_FORWARD_CACHED_FRAMES"
+Var.SET \tlcodetype[0x0D]="TRACE_CODE_TL_FLUSH_CACHED_FRAMES"
+Var.SET \tlcodetype[0x0E]="TRACE_CODE_TL_CACHE_FRAME"
+
+Var.NEW char [256][100] \smecodetype
+
+Var.SET \smecodetype[0x00]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_REQ"
+Var.SET \smecodetype[0x01]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_GET_RESULTS"
+Var.SET \smecodetype[0x02]="TRACE_CODE_SME_RX_HDD_MSG_CONNECT"
+Var.SET \smecodetype[0x03]="TRACE_CODE_SME_RX_HDD_MSG_SET_11DINFO"
+Var.SET \smecodetype[0x04]="TRACE_CODE_SME_RX_HDD_MSG_GET_SOFTAP_DOMAIN"
+Var.SET \smecodetype[0x05]="TRACE_CODE_SME_RX_HDD_MSG_SET_REGINFO"
+Var.SET \smecodetype[0x06]="TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CHANNEL_CONFIG"
+Var.SET \smecodetype[0x07]="TRACE_CODE_SME_RX_HDD_MSG_UPDATE_CONFIG"
+Var.SET \smecodetype[0x08]="TRACE_CODE_SME_RX_HDD_MSG_HDDREADYIND"
+Var.SET \smecodetype[0x09]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_RESULTS"
+Var.SET \smecodetype[0x0A]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_FLUSH_P2PRESULTS"
+Var.SET \smecodetype[0x0B]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETFIRST"
+Var.SET \smecodetype[0x0C]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_GETNEXT"
+Var.SET \smecodetype[0x0D]="TRACE_CODE_SME_RX_HDD_MSG_SCAN_RESULT_PURGE"
+Var.SET \smecodetype[0x0E]="TRACE_CODE_SME_RX_HDD_ROAM_REASSOC"
+Var.SET \smecodetype[0x0F]="TRACE_CODE_SME_RX_HDD_ROAM_DISCONNECT"
+Var.SET \smecodetype[0x10]="TRACE_CODE_SME_RX_HDD_ROAM_GET_CONNECTPROFILE"
+Var.SET \smecodetype[0x11]="TRACE_CODE_SME_RX_HDD_ROAM_FREE_CONNECTPROFILE"
+Var.SET \smecodetype[0x12]="TRACE_CODE_SME_RX_HDD_ROAM_SET_PMKIDCACHE"
+Var.SET \smecodetype[0x13]="TRACE_CODE_SME_RX_HDD_GET_CONFIGPARAM"
+Var.SET \smecodetype[0x14]="TRACE_CODE_SME_RX_HDD_GET_MODPROFFIELDS"
+Var.SET \smecodetype[0x15]="TRACE_CODE_SME_RX_HDD_SET_CONFIG_PWRSAVE"
+Var.SET \smecodetype[0x16]="TRACE_CODE_SME_RX_HDD_GET_CONFIG_PWRSAVE"
+Var.SET \smecodetype[0x17]="TRACE_CODE_SME_RX_HDD_ENABLE_PWRSAVE"
+Var.SET \smecodetype[0x18]="TRACE_CODE_SME_RX_HDD_DISABLE_PWRSAVE"
+Var.SET \smecodetype[0x19]="TRACE_CODE_SME_RX_HDD_START_AUTO_BMPSTIMER"
+Var.SET \smecodetype[0x1A]="TRACE_CODE_SME_RX_HDD_STOP_AUTO_BMPSTIMER"
+Var.SET \smecodetype[0x1B]="TRACE_CODE_SME_RX_HDD_IS_PWRSAVE_ENABLED"
+Var.SET \smecodetype[0x1C]="TRACE_CODE_SME_RX_HDD_REQUEST_FULLPOWER"
+Var.SET \smecodetype[0x1D]="TRACE_CODE_SME_RX_HDD_REQUEST_BMPS"
+Var.SET \smecodetype[0x1E]="TRACE_CODE_SME_RX_HDD_SET_DHCP_FLAG"
+Var.SET \smecodetype[0x1F]="TRACE_CODE_SME_RX_HDD_REQUEST_STANDBY"
+Var.SET \smecodetype[0x20]="TRACE_CODE_SME_RX_HDD_WOWL_ADDBCAST_PATTERN"
+Var.SET \smecodetype[0x21]="TRACE_CODE_SME_RX_HDD_WOWL_DELBCAST_PATTERN"
+Var.SET \smecodetype[0x22]="TRACE_CODE_SME_RX_HDD_ENTER_WOWL"
+Var.SET \smecodetype[0x23]="TRACE_CODE_SME_RX_HDD_EXIT_WOWL"
+Var.SET \smecodetype[0x24]="TRACE_CODE_SME_RX_HDD_SET_KEY"
+Var.SET \smecodetype[0x25]="TRACE_CODE_SME_RX_HDD_REMOVE_KEY"
+Var.SET \smecodetype[0x26]="TRACE_CODE_SME_RX_HDD_GET_STATS"
+Var.SET \smecodetype[0x27]="TRACE_CODE_SME_RX_HDD_GET_CNTRYCODE"
+Var.SET \smecodetype[0x28]="TRACE_CODE_SME_RX_HDD_SET_CNTRYCODE"
+Var.SET \smecodetype[0x29]="TRACE_CODE_SME_RX_HDD_CHANGE_CNTRYCODE"
+Var.SET \smecodetype[0x2A]="TRACE_CODE_SME_RX_HDD_BTC_SIGNALEVENT"
+Var.SET \smecodetype[0x2B]="TRACE_CODE_SME_RX_HDD_BTC_SETCONFIG"
+Var.SET \smecodetype[0x2C]="TRACE_CODE_SME_RX_HDD_BTC_GETCONFIG"
+Var.SET \smecodetype[0x2D]="TRACE_CODE_SME_RX_HDD_SET_CFGPRIVACY"
+Var.SET \smecodetype[0x2E]="TRACE_CODE_SME_RX_HDD_NEIGHBOR_REPORTREQ"
+Var.SET \smecodetype[0x2F]="TRACE_CODE_SME_RX_HDD_DBG_READREG"
+Var.SET \smecodetype[0x30]="TRACE_CODE_SME_RX_HDD_DBG_WRITEREG"
+Var.SET \smecodetype[0x31]="TRACE_CODE_SME_RX_HDD_DBG_READMEM"
+Var.SET \smecodetype[0x32]="TRACE_CODE_SME_RX_HDD_DBG_WRITEMEM"
+Var.SET \smecodetype[0x33]="TRACE_CODE_SME_RX_HDD_OPEN_SESSION"
+Var.SET \smecodetype[0x34]="TRACE_CODE_SME_RX_HDD_CLOSE_SESSION"
+Var.SET \smecodetype[0x35]="TRACE_CODE_SME_RX_HDD_SET_HOSTOFFLOAD"
+Var.SET \smecodetype[0x36]="TRACE_CODE_SME_RX_HDD_SET_GTKOFFLOAD"
+Var.SET \smecodetype[0x37]="TRACE_CODE_SME_RX_HDD_GET_GTKOFFLOAD"
+Var.SET \smecodetype[0x38]="TRACE_CODE_SME_RX_HDD_SET_POWERPARAMS"
+Var.SET \smecodetype[0x39]="TRACE_CODE_SME_RX_HDD_ABORT_MACSCAN"
+Var.SET \smecodetype[0x3A]="TRACE_CODE_SME_RX_HDD_REGISTER_MGMTFR"
+Var.SET \smecodetype[0x3B]="TRACE_CODE_SME_RX_HDD_DEREGISTER_MGMTFR"
+Var.SET \smecodetype[0x3C]="TRACE_CODE_SME_RX_HDD_REMAIN_ONCHAN"
+Var.SET \smecodetype[0x3D]="TRACE_CODE_SME_RX_HDD_SEND_ACTION"
+Var.SET \smecodetype[0x3E]="TRACE_CODE_SME_RX_HDD_CANCEL_REMAIN_ONCHAN"
+Var.SET \smecodetype[0x3F]="TRACE_CODE_SME_RX_HDD_CONFIG_RXPFIL"
+Var.SET \smecodetype[0x40]="TRACE_CODE_SME_RX_HDD_CONFIG_SUSPENDIND"
+Var.SET \smecodetype[0x41]="TRACE_CODE_SME_RX_HDD_CONFIG_RESUMEREQ"
+Var.SET \smecodetype[0x42]="TRACE_CODE_SME_RX_HDD_SET_MAXTXPOW"
+Var.SET \smecodetype[0x43]="TRACE_CODE_SME_RX_HDD_SET_TXPOW"
+Var.SET \smecodetype[0x44]="TRACE_CODE_SME_RX_HDD_SET_TMLEVEL"
+Var.SET \smecodetype[0x45]="TRACE_CODE_SME_RX_HDD_CAPS_EXCH"
+Var.SET \smecodetype[0x46]="TRACE_CODE_SME_RX_HDD_DISABLE_CAP"
+Var.SET \smecodetype[0x47]="TRACE_CODE_SME_RX_HDD_GET_DEFCCNV"
+Var.SET \smecodetype[0x48]="TRACE_CODE_SME_RX_HDD_GET_CURCC"
+Var.SET \smecodetype[0x49]="TRACE_CODE_SME_RX_HDD_RESET_PW5G"
+Var.SET \smecodetype[0x4A]="TRACE_CODE_SME_RX_HDD_UPDATE_RP5G"
+Var.SET \smecodetype[0x4B]="TRACE_CODE_SME_RX_HDD_SET_ROAMIBAND"
+Var.SET \smecodetype[0x4C]="TRACE_CODE_SME_RX_HDD_GET_ROAMIBAND"
+Var.SET \smecodetype[0x4D]="TRACE_CODE_SME_RX_HDD_UPDATE_RSSIDIFF"
+Var.SET \smecodetype[0x4E]="TRACE_CODE_SME_RX_HDD_UPDATE_IMMRSSIDIFF"
+Var.SET \smecodetype[0x4F]="TRACE_CODE_SME_RX_HDD_UPDATE_FTENABLED"
+Var.SET \smecodetype[0x50]="TRACE_CODE_SME_RX_HDD_UPDATE_WESMODE"
+Var.SET \smecodetype[0x51]="TRACE_CODE_SME_RX_HDD_SET_SCANCTRL"
+;deprecated Var.SET \smecodetype[0x52]="TRACE_CODE_SME_RX_HDD_EXTSCAN_GET_CAPABILITIES"
+Var.SET \smecodetype[0x52]="TRACE_CODE_SME_RX_HDD_EXTSCAN_START"
+Var.SET \smecodetype[0x53]="TRACE_CODE_SME_RX_HDD_EXTSCAN_STOP"
+Var.SET \smecodetype[0x54]="TRACE_CODE_SME_RX_HDD_EXTSCAN_SET_BSS_HOTLIST"
+Var.SET \smecodetype[0x55]="TRACE_CODE_SME_RX_HDD_EXTSCAN_RESET_BSS_HOTLIST"
+Var.SET \smecodetype[0x56]="TRACE_CODE_SME_RX_HDD_EXTSCAN_GET_CACHED_RESULTS"
+Var.SET \smecodetype[0x57]="TRACE_CODE_SME_RX_HDD_EXTSCAN_SET_SSID_HOTLIST"
+Var.SET \smecodetype[0x58]="TRACE_CODE_SME_RX_HDD_EXTSCAN_RESET_SSID_HOTLIST"
+Var.SET \smecodetype[0x59]="TRACE_CODE_SME_RX_HDD_MSG_DEAUTH_STA"
+;#ifdef FEATURE_WLAN_TDLS //assuming this flag is enabled by default
+Var.SET \smecodetype[0x5A]="TRACE_CODE_SME_RX_HDD_TDLS_LINK_ESTABLISH_PARAM"
+Var.SET \smecodetype[0x5B]="TRACE_CODE_SME_RX_HDD_TDLS_CHAN_SWITCH_REQ"
+Var.SET \smecodetype[0x5C]="TRACE_CODE_SME_RX_HDD_TDLS_SEND_MGMT_FRAME"
+Var.SET \smecodetype[0x5D]="TRACE_CODE_SME_RX_HDD_TDLS_CHANGE_PEER_STA"
+Var.SET \smecodetype[0x5E]="TRACE_CODE_SME_RX_HDD_TDLS_ADD_PEER_STA"
+Var.SET \smecodetype[0x5F]="TRACE_CODE_SME_RX_HDD_TDLS_DEL_PEER_STA"
+;#endif
+Var.SET \smecodetype[0x60]="TRACE_CODE_SME_RX_HDD_PREF_NET_LIST"
+;#ifdef FEATURE_WLAN_LPHB //assuming this flag is enabled by default
+Var.SET \smecodetype[0x61]="TRACE_CODE_SME_RX_HDD_LPHB_CONFIG_REQ"
+;#endif /* FEATURE_WLAN_LPHB */
+Var.SET \smecodetype[0x62]="TRACE_CODE_SME_RX_HDD_ROAM_DEL_PMKIDCACHE"
+;From here hardcoded to 250 in host code
+Var.SET \smecodetype[0xFA]="TRACE_CODE_SME_COMMAND"
+Var.SET \smecodetype[0xFB]="TRACE_CODE_SME_TX_WDA_MSG"
+Var.SET \smecodetype[0xFC]="TRACE_CODE_SME_RX_WDA_MSG"
+
+Var.NEW char [256][50] \cfgmsgtype
+
+Var.SET \cfgmsgtype[0xB0]="SIR_CFG_PARAM_UPDATE_IND"
+Var.SET \cfgmsgtype[0xB1]="SIR_CFG_DOWNLOAD_COMPLETE_IND"
+
+
+Var.NEW char [256][50] \limmsgtype
+
+Var.SET \limmsgtype[0xB3]="SIR_LIM_RETRY_INTERRUPT_MSG"
+Var.SET \limmsgtype[0xB4]="SIR_BB_XPORT_MGMT_MSG"
+Var.SET \limmsgtype[0xB7]="SIR_LIM_INV_KEY_INTERRUPT_MSG"
+Var.SET \limmsgtype[0xB8]="SIR_LIM_KEY_ID_INTERRUPT_MSG"
+Var.SET \limmsgtype[0xB9]="SIR_LIM_REPLAY_THRES_INTERRUPT_MSG"
+Var.SET \limmsgtype[0xBA]="SIR_LIM_TD_DUMMY_CALLBACK_MSG"
+Var.SET \limmsgtype[0xBB]="SIR_LIM_SCH_CLEAN_MSG"
+Var.SET \limmsgtype[0xBC]="SIR_LIM_RADAR_DETECT_IND"
+Var.SET \limmsgtype[0xBE]="SIR_LIM_DEL_TS_IND"
+Var.SET \limmsgtype[0xBF]="SIR_LIM_ADD_BA_IND"
+Var.SET \limmsgtype[0xC0]="SIR_LIM_DEL_BA_ALL_IND"
+Var.SET \limmsgtype[0xC1]="SIR_LIM_DELETE_STA_CONTEXT_IND"
+Var.SET \limmsgtype[0xC2]="SIR_LIM_DEL_BA_IND"
+Var.SET \limmsgtype[0xC3]="SIR_LIM_UPDATE_BEACON"
+Var.SET \limmsgtype[0xD0]="SIR_LIM_MIN_CHANNEL_TIMEOUT"
+Var.SET \limmsgtype[0xD1]="SIR_LIM_MAX_CHANNEL_TIMEOUT"
+Var.SET \limmsgtype[0xD2]="SIR_LIM_JOIN_FAIL_TIMEOUT"
+Var.SET \limmsgtype[0xD3]="SIR_LIM_AUTH_FAIL_TIMEOUT"
+Var.SET \limmsgtype[0xD4]="SIR_LIM_AUTH_RSP_TIMEOUT"
+Var.SET \limmsgtype[0xD5]="SIR_LIM_ASSOC_FAIL_TIMEOUT"
+Var.SET \limmsgtype[0xD6]="SIR_LIM_REASSOC_FAIL_TIMEOUT"
+Var.SET \limmsgtype[0xD7]="SIR_LIM_HEART_BEAT_TIMEOUT"
+Var.SET \limmsgtype[0xD9]="SIR_LIM_PREAUTH_CLNUP_TIMEOUT"
+Var.SET \limmsgtype[0xDA]="SIR_LIM_CHANNEL_SCAN_TIMEOUT"
+Var.SET \limmsgtype[0xDB]="SIR_LIM_PROBE_HB_FAILURE_TIMEOUT"
+Var.SET \limmsgtype[0xDC]="SIR_LIM_ADDTS_RSP_TIMEOUT"
+Var.SET \limmsgtype[0xE0]="SIR_LIM_MEASUREMENT_IND_TIMEOUT"
+Var.SET \limmsgtype[0xE1]="SIR_LIM_LEARN_INTERVAL_TIMEOUT"
+Var.SET \limmsgtype[0xE2]="SIR_LIM_LEARN_DURATION_TIMEOUT"
+Var.SET \limmsgtype[0xE3]="SIR_LIM_LINK_TEST_DURATION_TIMEOUT"
+Var.SET \limmsgtype[0xE6]="SIR_LIM_HASH_MISS_THRES_TIMEOUT"
+Var.SET \limmsgtype[0xE7]="SIR_LIM_CNF_WAIT_TIMEOUT"
+Var.SET \limmsgtype[0xE8]="SIR_LIM_KEEPALIVE_TIMEOUT"
+Var.SET \limmsgtype[0xE9]="SIR_LIM_UPDATE_OLBC_CACHEL_TIMEOUT"
+Var.SET \limmsgtype[0xEA]="SIR_LIM_CHANNEL_SWITCH_TIMEOUT"
+Var.SET \limmsgtype[0xEB]="SIR_LIM_QUIET_TIMEOUT"
+Var.SET \limmsgtype[0xEC]="SIR_LIM_QUIET_BSS_TIMEOUT"
+Var.SET \limmsgtype[0xED]="SIR_LIM_WPS_OVERLAP_TIMEOUT"
+Var.SET \limmsgtype[0xEE]="SIR_LIM_FT_PREAUTH_RSP_TIMEOUT"
+Var.SET \limmsgtype[0xEF]="SIR_LIM_REMAIN_CHN_TIMEOUT"
+Var.SET \limmsgtype[0xF0]="SIR_LIM_INSERT_SINGLESHOT_NOA_TIMEOUT"
+Var.SET \limmsgtype[0xF1]="SIR_LIM_WMM_APSD_SP_START_MSG_TYPE"
+Var.SET \limmsgtype[0xF2]="SIR_LIM_WMM_APSD_SP_END_MSG_TYPE"
+Var.SET \limmsgtype[0xF3]="SIR_LIM_BEACON_GEN_IND"
+Var.SET \limmsgtype[0xF4]="SIR_LIM_PERIODIC_PROBE_REQ_TIMEOUT"
+Var.SET \limmsgtype[0xF5]="SIR_LIM_CCX_TSM_TIMEOUT"
+Var.SET \limmsgtype[0xF6]="SIR_LIM_DISASSOC_ACK_TIMEOUT"
+Var.SET \limmsgtype[0xF7]="SIR_LIM_DEAUTH_ACK_TIMEOUT"
+Var.SET \limmsgtype[0xF8]="SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT"
+Var.SET \limmsgtype[0xF9]="SIR_LIM_TDLS_DISCOVERY_RSP_WAIT"
+Var.SET \limmsgtype[0xFA]="SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT"
+Var.SET \limmsgtype[0xFB]="SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT"
+Var.SET \limmsgtype[0xFC]="SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE"
+Var.SET \limmsgtype[0xFF]="SIR_LIM_MSG_TYPES_END"
+
+
+Var.NEW char [256][50] \schmsgtype
+
+Var.SET \schmsgtype[0x0]="SIR_SCH_CHANNEL_SWITCH_REQUEST"
+Var.SET \schmsgtype[0x1]="SIR_SCH_START_SCAN_REQ"
+Var.SET \schmsgtype[0x2]="SIR_SCH_START_SCAN_RSP"
+Var.SET \schmsgtype[0x3]="SIR_SCH_END_SCAN_NTF"
+Var.SET \schmsgtype[0xFF]="SIR_SCH_MSG_TYPES_END"
+
+Var.NEW char [256][50] \pmmmsgtype
+
+Var.SET \pmmmsgtype[0x0]="SIR_PMM_CHANGE_PM_MODE"
+Var.SET \pmmmsgtype[0x1]="SIR_PMM_CHANGE_IMPS_MODE"
+Var.SET \pmmmsgtype[0xFF]="SIR_PMM_MSG_TYPES_END"
+
+
+Var.NEW char [256][50] \mntmsgtype
+
+Var.SET \mntmsgtype[0x0]="SIR_MNT_RELEASE_BD"
+Var.SET \mntmsgtype[0xFF]="SIR_MNT_MSG_TYPES_END"
+
+Var.NEW char [256][50] \dvtmsgtype
+
+Var.SET \dvtmsgtype[0xF]="SIR_DVT_ITC_MSG_TYPES_BEGIN"
+
+Var.NEW char [0x301][50] \pttmsgtype
+
+Var.SET \pttmsgtype[0x0]="SIR_PTT_MSG_TYPES_BEGIN"
+Var.SET \pttmsgtype[0x300]="SIR_PTT_MSG_TYPES_END"
+
+
+Var.NEW char [18][50] \code
+
+Var.SET \code[0]="TRACE_CODE_MLM_STATE"
+Var.SET \code[1]="TRACE_CODE_SME_STATE"
+Var.SET \code[2]="TRACE_CODE_TX_MGMT"
+Var.SET \code[3]="TRACE_CODE_RX_MGMT"
+Var.SET \code[4]="TRACE_CODE_RX_MGMT_TSF"
+Var.SET \code[5]="TRACE_CODE_TX_COMPLETE"
+Var.SET \code[6]="TRACE_CODE_TX_SME_MSG"
+Var.SET \code[7]="TRACE_CODE_RX_SME_MSG"
+Var.SET \code[8]="TRACE_CODE_TX_WDA_MSG"
+Var.SET \code[9]="TRACE_CODE_RX_WDA_MSG"
+Var.SET \code[10]="TRACE_CODE_TX_LIM_MSG"
+Var.SET \code[11]="TRACE_CODE_RX_LIM_MSG"
+Var.SET \code[12]="TRACE_CODE_TX_CFG_MSG"
+Var.SET \code[13]="TRACE_CODE_RX_CFG_MSG"
+Var.SET \code[14]="TRACE_CODE_RX_MGMT_DROP"
+Var.SET \code[15]="TRACE_CODE_TIMER_ACTIVATE"
+Var.SET \code[16]="TRACE_CODE_TIMER_DEACTIVATE"
+Var.SET \code[17]="TRACE_CODE_INFO_LOG"
+
+
+Var.NEW char [13][50] \module
+
+
+Var.SET \module[0]="VOS_MODULE_ID_BAP"
+Var.SET \module[1]="VOS_MODULE_ID_TL"
+Var.SET \module[3]="VOS_MODULE_ID_SAL"
+Var.SET \module[4]="VOS_MODULE_ID_SSC"
+Var.SET \module[2]="VOS_MODULE_ID_WDI"
+Var.SET \module[5]="VOS_MODULE_ID_HDD"
+Var.SET \module[6]="VOS_MODULE_ID_SME"
+Var.SET \module[7]="VOS_MODULE_ID_PE"
+Var.SET \module[8]="VOS_MODULE_ID_WDA"
+Var.SET \module[9]="VOS_MODULE_ID_SYS"
+Var.SET \module[10]="VOS_MODULE_ID_VOSS"
+Var.SET \module[11]="VOS_MODULE_ID_SAP"
+Var.SET \module[12]="VOS_MODULE_ID_HDD_SOFTAP"
+
+Var.NEW char [16][50] \mgmttype
+
+Var.SET \mgmttype[0]="SIR_MAC_MGMT_ASSOC_REQ"
+Var.SET \mgmttype[1]="SIR_MAC_MGMT_ASSOC_RSP"
+Var.SET \mgmttype[2]="SIR_MAC_MGMT_REASSOC_REQ"
+Var.SET \mgmttype[3]="SIR_MAC_MGMT_REASSOC_RSP"
+Var.SET \mgmttype[4]="SIR_MAC_MGMT_PROBE_REQ"
+Var.SET \mgmttype[5]="SIR_MAC_MGMT_PROBE_RSP"
+Var.SET \mgmttype[8]="SIR_MAC_MGMT_BEACON"
+Var.SET \mgmttype[9]="SIR_MAC_MGMT_ATIM"
+Var.SET \mgmttype[10]="SIR_MAC_MGMT_DISASSOC"
+Var.SET \mgmttype[11]="SIR_MAC_MGMT_AUTH"
+Var.SET \mgmttype[12]="SIR_MAC_MGMT_DEAUTH"
+Var.SET \mgmttype[13]="SIR_MAC_MGMT_ACTION"
+Var.SET \mgmttype[15]="SIR_MAC_MGMT_RESERVED15"
+
+Var.NEW char [30][50] \limtimertype
+
+Var.SET \limtimertype[0]="eLIM_MIN_CHANNEL_TIMER"
+Var.SET \limtimertype[1]="eLIM_MAX_CHANNEL_TIMER"
+Var.SET \limtimertype[2]="eLIM_JOIN_FAIL_TIMER"
+Var.SET \limtimertype[3]="eLIM_AUTH_FAIL_TIMER"
+Var.SET \limtimertype[4]="eLIM_AUTH_RESP_TIMER"
+Var.SET \limtimertype[5]="eLIM_ASSOC_FAIL_TIMER"
+Var.SET \limtimertype[6]="eLIM_REASSOC_FAIL_TIMER"
+Var.SET \limtimertype[7]="eLIM_PRE_AUTH_CLEANUP_TIMER"
+Var.SET \limtimertype[8]="eLIM_HEART_BEAT_TIMER"
+Var.SET \limtimertype[9]="eLIM_BACKGROUND_SCAN_TIMER"
+Var.SET \limtimertype[10]="eLIM_KEEPALIVE_TIMER"
+Var.SET \limtimertype[11]="eLIM_CNF_WAIT_TIMER"
+Var.SET \limtimertype[12]="eLIM_AUTH_RSP_TIMER"
+Var.SET \limtimertype[13]="eLIM_UPDATE_OLBC_CACHE_TIMER"
+Var.SET \limtimertype[14]="eLIM_PROBE_AFTER_HB_TIMER"
+Var.SET \limtimertype[15]="eLIM_ADDTS_RSP_TIMER"
+Var.SET \limtimertype[16]="eLIM_CHANNEL_SWITCH_TIMER"
+Var.SET \limtimertype[17]="eLIM_LEARN_DURATION_TIMER"
+Var.SET \limtimertype[18]="eLIM_QUIET_TIMER"
+Var.SET \limtimertype[19]="eLIM_QUIET_BSS_TIMER"
+Var.SET \limtimertype[20]="eLIM_WPS_OVERLAP_TIMER"
+Var.SET \limtimertype[21]="eLIM_FT_PREAUTH_RSP_TIMER"
+Var.SET \limtimertype[22]="eLIM_REMAIN_CHN_TIMER"
+Var.SET \limtimertype[23]="eLIM_PERIODIC_PROBE_REQ_TIMER"
+;#ifdef FEATURE_WLAN_CCX
+;Var.SET \limtimertype[0]="eLIM_TSM_TIMER"
+;#endif
+;#ifdef FEATURE_WLAN_TDLS_INTERNAL
+;Var.SET \limtimertype[0]="eLIM_TDLS_DISCOVERY_RSP_WAIT"
+;Var.SET \limtimertype[0]="eLIM_TDLS_LINK_SETUP_RSP_TIMEOUT"
+;Var.SET \limtimertype[0]="eLIM_TDLS_LINK_SETUP_CNF_TIMEOUT"
+;#endif
+Var.SET \limtimertype[25]="eLIM_DISASSOC_ACK_TIMER"
+Var.SET \limtimertype[26]="eLIM_DEAUTH_ACK_TIMER"
+Var.SET \limtimertype[27]="eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER"
+Var.SET \limtimertype[28]="eLIM_INSERT_SINGLESHOT_NOA_TIMER"
+Var.SET \limtimertype[29]="eLIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE"
+
+
+
+Var.NEW char [256][100] \hddcodetype
+
+Var.SET \hddcodetype[0x00]="TRACE_CODE_HDD_OPEN_REQUEST"
+Var.SET \hddcodetype[0x01]="TRACE_CODE_HDD_STOP_REQUEST"
+Var.SET \hddcodetype[0x02]="TRACE_CODE_HDD_TX_TIMEOUT"
+Var.SET \hddcodetype[0x03]="TRACE_CODE_HDD_P2P_DEV_ADDR_IOCTL"
+Var.SET \hddcodetype[0x04]="TRACE_CODE_HDD_SETSUSPENDMODE_IOCTL"
+Var.SET \hddcodetype[0x05]="TRACE_CODE_HDD_SETROAMTRIGGER_IOCTL"
+Var.SET \hddcodetype[0x06]="TRACE_CODE_HDD_GETROAMTRIGGER_IOCTL"
+Var.SET \hddcodetype[0x07]="TRACE_CODE_HDD_SETROAMSCANPERIOD_IOCTL"
+Var.SET \hddcodetype[0x08]="TRACE_CODE_HDD_GETROAMSCANPERIOD_IOCTL"
+Var.SET \hddcodetype[0x09]="TRACE_CODE_HDD_SETROAMDELTA_IOCTL"
+Var.SET \hddcodetype[0x0A]="TRACE_CODE_HDD_GETROAMDELTA_IOCTL"
+Var.SET \hddcodetype[0x0B]="TRACE_CODE_HDD_GETBAND_IOCTL"
+Var.SET \hddcodetype[0x0C]="TRACE_CODE_HDD_GETCOUNTRYREV_IOCTL"
+Var.SET \hddcodetype[0x0D]="TRACE_CODE_HDD_SETROAMSCANCHANNELS_IOCTL"
+Var.SET \hddcodetype[0x0E]="TRACE_CODE_HDD_GETROAMSCANCHANNELS_IOCTL"
+Var.SET \hddcodetype[0x0F]="TRACE_CODE_HDD_HOSTAPD_OPEN_REQUEST"
+Var.SET \hddcodetype[0x10]="TRACE_CODE_HDD_HOSTAPD_STOP_REQUEST"
+Var.SET \hddcodetype[0x11]="TRACE_CODE_HDD_HOSTAPD_UNINIT_REQUEST"
+Var.SET \hddcodetype[0x12]="TRACE_CODE_HDD_SOFTAP_TX_TIMEOUT"
+Var.SET \hddcodetype[0x13]="TRACE_CODE_HDD_HOSTAPD_SET_MAC_ADDR"
+Var.SET \hddcodetype[0x14]="TRACE_CODE_HDD_HOSTAPD_P2P_SET_NOA_IOCTL"
+Var.SET \hddcodetype[0x15]="TRACE_CODE_HDD_HOSTAPD_P2P_SET_PS_IOCTL"
+Var.SET \hddcodetype[0x16]="TRACE_CODE_HDD_HOSTAPD_SET_SAP_CHANNEL_LIST_IOCTL"
+Var.SET \hddcodetype[0x17]="TRACE_CODE_HDD_ADD_VIRTUAL_INTF"
+Var.SET \hddcodetype[0x18]="TRACE_CODE_HDD_DEL_VIRTUAL_INTF"
+Var.SET \hddcodetype[0x19]="TRACE_CODE_HDD_CHANGE_VIRTUAL_INTF"
+Var.SET \hddcodetype[0x1A]="TRACE_CODE_HDD_CFG80211_START_AP"
+Var.SET \hddcodetype[0x1B]="TRACE_CODE_HDD_CFG80211_CHANGE_BEACON"
+Var.SET \hddcodetype[0x1C]="TRACE_CODE_HDD_CFG80211_STOP_AP"
+Var.SET \hddcodetype[0x1D]="TRACE_CODE_HDD_CFG80211_CHANGE_BSS"
+Var.SET \hddcodetype[0x1E]="TRACE_CODE_HDD_CFG80211_ADD_KEY"
+Var.SET \hddcodetype[0x1F]="TRACE_CODE_HDD_CFG80211_GET_KEY"
+Var.SET \hddcodetype[0x20]="TRACE_CODE_HDD_CFG80211_SET_DEFAULT_KEY"
+Var.SET \hddcodetype[0x21]="TRACE_CODE_HDD_CFG80211_CONNECT"
+Var.SET \hddcodetype[0x22]="TRACE_CODE_HDD_CFG80211_DISCONNECT"
+Var.SET \hddcodetype[0x23]="TRACE_CODE_HDD_CFG80211_JOIN_IBSS"
+Var.SET \hddcodetype[0x24]="TRACE_CODE_HDD_CFG80211_LEAVE_IBSS"
+Var.SET \hddcodetype[0x25]="TRACE_CODE_HDD_CFG80211_SET_WIPHY_PARAMS"
+Var.SET \hddcodetype[0x26]="TRACE_CODE_HDD_CFG80211_SET_TXPOWER"
+Var.SET \hddcodetype[0x27]="TRACE_CODE_HDD_CFG80211_GET_TXPOWER"
+Var.SET \hddcodetype[0x28]="TRACE_CODE_HDD_CFG80211_SET_CHANNEL"
+Var.SET \hddcodetype[0x29]="TRACE_CODE_HDD_CFG80211_ADD_BEACON"
+Var.SET \hddcodetype[0x2A]="TRACE_CODE_HDD_CFG80211_SET_BEACON"
+Var.SET \hddcodetype[0x2B]="TRACE_CODE_HDD_CFG80211_CHANGE_IFACE"
+Var.SET \hddcodetype[0x2C]="TRACE_CODE_HDD_CHANGE_STATION"
+Var.SET \hddcodetype[0x2D]="TRACE_CODE_HDD_CFG80211_UPDATE_BSS"
+Var.SET \hddcodetype[0x2E]="TRACE_CODE_HDD_CFG80211_SCAN"
+Var.SET \hddcodetype[0x2F]="TRACE_CODE_HDD_REMAIN_ON_CHANNEL"
+Var.SET \hddcodetype[0x30]="TRACE_CODE_HDD_REMAINCHANREADYHANDLER"
+Var.SET \hddcodetype[0x31]="TRACE_CODE_HDD_CFG80211_CANCEL_REMAIN_ON_CHANNEL"
+Var.SET \hddcodetype[0x32]="TRACE_CODE_HDD_ACTION"
+Var.SET \hddcodetype[0x33]="TRACE_CODE_HDD_MGMT_TX_CANCEL_WAIT"
+Var.SET \hddcodetype[0x34]="TRACE_CODE_HDD_CFG80211_GET_STA"
+Var.SET \hddcodetype[0x35]="TRACE_CODE_HDD_CFG80211_SET_POWER_MGMT"
+Var.SET \hddcodetype[0x36]="TRACE_CODE_HDD_CFG80211_DEL_STA"
+Var.SET \hddcodetype[0x37]="TRACE_CODE_HDD_CFG80211_ADD_STA"
+Var.SET \hddcodetype[0x38]="TRACE_CODE_HDD_CFG80211_SET_PMKSA"
+Var.SET \hddcodetype[0x39]="TRACE_CODE_HDD_CFG80211_UPDATE_FT_IES"
+Var.SET \hddcodetype[0x3A]="TRACE_CODE_HDD_CFG80211_TDLS_MGMT"
+Var.SET \hddcodetype[0x3B]="TRACE_CODE_HDD_CFG80211_TDLS_OPER"
+Var.SET \hddcodetype[0x3C]="TRACE_CODE_HDD_CFG80211_SET_REKEY_DATA"
+Var.SET \hddcodetype[0x3D]="TRACE_CODE_HDD_UNSUPPORTED_IOCTL"
+Var.SET \hddcodetype[0x3E]="TRACE_CODE_HDD_SETROAMSCANCHANNELMINTIME_IOCTL"
+Var.SET \hddcodetype[0x3F]="TRACE_CODE_HDD_GETROAMSCANCHANNELMINTIME_IOCTL"
+Var.SET \hddcodetype[0x40]="TRACE_CODE_HDD_STOP_NETDEV"
+Var.SET \hddcodetype[0x41]="TRACE_CODE_HDD_WAKE_NETDEV"
+Var.SET \hddcodetype[0x42]="TRACE_CODE_HDD_FLUSH_TX_QUEUES"
+Var.SET \hddcodetype[0x43]="TRACE_CODE_HDD_CFG80211_RESUME_WLAN"
+Var.SET \hddcodetype[0x44]="TRACE_CODE_HDD_CFG80211_SUSPEND_WLAN"
+Var.SET \hddcodetype[0x45]="TRACE_CODE_HDD_CFG80211_SET_MAC_ACL"
+Var.SET \hddcodetype[0x46]="TRACE_CODE_HDD_CFG80211_TESTMODE"
+Var.SET \hddcodetype[0x47]="TRACE_CODE_HDD_CFG80211_DUMP_SURVEY"
+Var.SET \hddcodetype[0x48]="TRACE_CODE_HDD_CFG80211_SCHED_SCAN_START"
+Var.SET \hddcodetype[0x49]="TRACE_CODE_HDD_CFG80211_SCHED_SCAN_STOP"
+Var.SET \hddcodetype[0x4A]="TRACE_CODE_HDD_CFG80211_DEL_PMKSA"
+
+&TRACETYPESIZE=v.value(sizeof(tvosTraceRecord))
+&TRACESIZE=v.value(sizeof(gvosTraceTbl))
+&TRACEMAXINDEX=v.value(&TRACESIZE/&TRACETYPESIZE)
+
+&HEAD=v.value(gvosTraceData.head)
+&TAIL=v.value(gvosTraceData.tail)
+
+IF ((&HEAD>&TRACEMAXINDEX)||(&TAIL>&TRACEMAXINDEX)||(&TAIL==&HEAD))
+(
+ GOTO ENDSCRIPT
+)
+
+&INDEX=&HEAD
+
+TRACESTART:
+
+&TIME=v.value(gvosTraceTbl[&INDEX].time)
+&MODULE=v.value(gvosTraceTbl[&INDEX].module)
+&CODE=v.value(gvosTraceTbl[&INDEX].code)
+&SESSION=v.value(gvosTraceTbl[&INDEX].session)
+&DATA=v.value(gvosTraceTbl[&INDEX].data)
+
+
+ WRITE #1 "TIME: " &TIME
+ Var.Write #1 %STRING \module[&MODULE]
+
+IF (&MODULE==0x7)
+(
+if (&CODE>=0)&&(&CODE<=0x12)
+(
+ Var.Write #1 %STRING \code[&CODE] " [" %Hex &CODE "]"
+)
+
+ IF (&SESSION==0xFF)
+ (
+ WRITE #1 "NO SESSION"
+ )
+ ELSE
+ (
+ WRITE #1 "SESSION: " &SESSION
+ )
+
+
+;0 TRACE_CODE_MLM_STATE
+IF (&CODE==0x0)
+(
+ Var.NEW tLimMlmStates \mlmstate
+ Var.Set \mlmstate=&DATA
+ ;Var.Write #1 \mlmstate %Hex &DATA
+)
+
+;1 TRACE_CODE_SME_STATE
+IF (&CODE==0x1)
+(
+ Var.NEW tLimSmeStates \smestate
+ Var.Set \smestate=&DATA
+ Var.Write #1 \smestate %Hex &DATA
+)
+
+;2 TRACE_CODE_TX_MGMT
+IF (&CODE==0x2)
+(
+ WRITE #1 "DATA: " &DATA
+)
+
+;3 TRACE_CODE_RX_MGMT
+IF (&CODE==0x3)
+(
+ &SERIAL=v.value(&DATA>>16)
+ &SUBTYPE=v.value(&DATA&0xFF)
+ if (&SUBTYPE<=0xF)
+ (
+ Var.Write #1 %STRING \mgmttype[&SUBTYPE]
+ WRITE #1 "SEQ NUM: " &SERIAL
+ )
+ else
+ (
+ WRITE #1 "INCORRECT DATA"
+ )
+)
+
+;4 TRACE_CODE_RX_MGMT_TSF
+IF (&CODE==0x4)
+(
+ WRITE #1 "BEACON TS: " &DATA
+)
+
+;5 TRACE_CODE_TX_COMPLETE
+IF (&CODE==0x5)
+(
+ Var.Write #1 %STRING \mgmttype[&DATA] %Hex &DATA
+)
+
+;14 TRACE_CODE_RX_MGMT_DROP
+IF (&CODE==0xE)
+(
+ Var.NEW tMgmtFrmDropReason \dropreason
+ Var.Set \dropreason=&DATA
+ Var.Write #1 \dropreason %Hex &DATA
+)
+
+
+;15 TRACE_CODE_TIMER_ACTIVATE/DEACTIVATE
+IF (&CODE==0xF)||(&CODE==0x10)
+(
+ Var.Write #1 %STRING \limtimertype[&DATA] %Hex &DATA
+)
+
+;6 TRACE_CODE_TX_SME_MSG
+IF (&CODE==0x6)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x12)&&(&DATA>=0x12B0)
+(
+Var.Write #1 %STRING \limmsgtype[&MSG] %Hex &MSG
+)
+IF (&DATA>=0x1500)
+(
+ Var.NEW enum eWniMsgTypes \smemsg
+ Var.Set \smemsg=&DATA
+ Var.Write #1 \smemsg %Hex &DATA
+ )
+)
+
+;7 TRACE_CODE_RX_SME_MSG
+IF (&CODE==0x7)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x12)&&(&DATA>=0x12B0)
+(
+Var.Write #1 %STRING \limmsgtype[&MSG] %Hex &MSG
+)
+IF (&DATA>=0x1500)
+(
+ Var.NEW enum eWniMsgTypes \smemsg
+ Var.Set \smemsg=&DATA
+ Var.Write #1 \smemsg %Hex &DATA
+)
+)
+
+;8 TRACE_CODE_TX_WDA_MSG
+IF (&CODE==0x8)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x10)
+(
+Var.Write #1 %STRING \halmsgtype[&MSG] %Hex &MSG
+)
+)
+
+;9 TRACE_CODE_RX_WDA_MSG
+IF (&CODE==0x9)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x10)
+(
+Var.Write #1 %STRING \halmsgtype[&MSG] %Hex &MSG
+)
+)
+
+;10 TRACE_CODE_TX_LIM_MSG
+IF (&CODE==0xA)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x12)&&(&DATA>=0x12B0)
+(
+Var.Write #1 %STRING \limmsgtype[&MSG] %Hex &MSG
+)
+IF (&DATA>=0x1500)
+(
+ Var.NEW enum eWniMsgTypes \smemsg
+ Var.Set \smemsg=&DATA
+ Var.Write #1 \smemsg %Hex &DATA
+)
+)
+
+;11 TRACE_CODE_RX_LIM_MSG
+IF (&CODE==0xB)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x12)&&(&DATA>=0x12B0)
+(
+Var.Write #1 %STRING \limmsgtype[&MSG] %Hex &MSG
+)
+IF (&DATA>=0x1500)
+(
+ Var.NEW enum eWniMsgTypes \smemsg
+ &DATA=v.value(&DATA&0xFFFF)
+ Var.Set \smemsg=&DATA
+ Var.Write #1 \smemsg %Hex &DATA
+)
+)
+
+;12 TRACE_CODE_TX_CFG_MSG
+IF (&CODE==0xC)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x11)&&(&DATA>=0x11B0)
+(
+Var.Write #1 %STRING \cfgmsgtype[&MSG] %Hex &MSG
+)
+)
+
+;13 TRACE_CODE_RX_CFG_MSG
+IF (&CODE==0xD)
+(
+&MOD=v.value(&DATA>>8)
+&MSG=v.value(&DATA&0xFF)
+IF (&MOD==0x11)&&(&DATA>=0x11B0)
+(
+Var.Write #1 %STRING \cfgmsgtype[&MSG] %Hex &MSG
+)
+)
+
+IF (&DATA>=0x1500)
+(
+ Var.NEW enum eWniMsgTypes \smemsg
+ &DATA=v.value(&DATA&0xFFFF)
+ Var.Set \smemsg=&DATA
+ Var.Write #1 \smemsg %Hex &DATA
+)
+
+)
+
+IF (&MODULE==0x1)
+(
+ Var.Write #1 %STRING \tlcodetype[&CODE] %Hex &CODE
+ WRITE #1 "DATA: " &DATA
+
+ IF (&SESSION==0xFF)
+ (
+ WRITE #1 "NO SESSION"
+ )
+ ELSE
+ (
+ WRITE #1 "SESSION: " &SESSION
+ )
+)
+
+
+IF (&MODULE==0x6)
+(
+
+ IF ((&CODE>=0x0)&&(&CODE<=0x62))
+ (
+ Var.Write #1 %STRING \smecodetype[&CODE] %Hex &CODE
+ )
+ ELSE
+ (
+ IF ((&CODE>=0xFA)&&(&CODE<=0xFC))
+ (
+ Var.Write #1 %STRING \smecodetype[&CODE] %Hex &CODE
+ )
+ ELSE
+ (
+ WRITE #1 "CODE: " &CODE
+ )
+ )
+ WRITE #1 "DATA: " &DATA
+
+ IF (&SESSION==0xFF)
+ (
+ WRITE #1 "NO SESSION"
+ )
+ ELSE
+ (
+ WRITE #1 "SESSION: " &SESSION
+ )
+)
+
+IF (&MODULE==0x5)
+(
+
+ IF ((&CODE>=0x0)&&(&CODE<=0x4A))
+ (
+ Var.Write #1 %STRING \hddcodetype[&CODE] %Hex &CODE
+ )
+ ELSE
+ (
+ WRITE #1 "CODE: " &CODE
+ )
+ WRITE #1 "DATA: " &DATA
+
+ IF (&SESSION==0xFF)
+ (
+ WRITE #1 "NO SESSION"
+ )
+ ELSE
+ (
+ WRITE #1 "SESSION: " &SESSION
+ )
+)
+
+WRITE #1 " "
+
+&INDEX=v.value((&INDEX+1)%(&TRACEMAXINDEX))
+
+ IF (&INDEX!=&HEAD)
+ (
+ GOTO TRACESTART
+ )
+
+
+
+ENDSCRIPT:
+CLOSE #1
+ENDDO
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index c59e062ba082..3be21920eb4f 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -1241,6 +1241,12 @@ PopulateDot11fExtCap(tpAniSirGlobal pMac,
#endif
p_ext_cap->extChanSwitch = 1;
+ if (pDot11f->present)
+ {
+ /* Need to compute the num_bytes based on bits set */
+ pDot11f->num_bytes = lim_compute_ext_cap_ie_length(pDot11f);
+ }
+
return eSIR_SUCCESS;
}
@@ -2750,10 +2756,8 @@ sirConvertAssocReqFrame2Struct(tpAniSirGlobal pMac,
if (ar->ExtCap.present)
{
struct s_ext_cap *p_ext_cap;
-
- vos_mem_copy(&pAssocReq->ExtCap.bytes, &ar->ExtCap.bytes,
- ar->ExtCap.num_bytes);
-
+ vos_mem_copy( &pAssocReq->ExtCap, &ar->ExtCap,
+ sizeof(tDot11fIEExtCap));
p_ext_cap = (struct s_ext_cap *)&pAssocReq->ExtCap.bytes;
limLog(pMac, LOG1,
FL("ExtCap present, timingMeas: %d Initiator: %d Responder: %d"),
@@ -2965,9 +2969,8 @@ sirConvertAssocRespFrame2Struct(tpAniSirGlobal pMac,
if (ar.ExtCap.present)
{
struct s_ext_cap *p_ext_cap;
-
- vos_mem_copy(&pAssocRsp->ExtCap.bytes, &ar.ExtCap.bytes,
- ar.ExtCap.num_bytes);
+ vos_mem_copy( &pAssocRsp->ExtCap, &ar.ExtCap,
+ sizeof(tDot11fIEExtCap));
p_ext_cap = (struct s_ext_cap *)&pAssocRsp->ExtCap.bytes;
limLog(pMac, LOG1,
FL("ExtCap present, timingMeas: %d Initiator: %d Responder: %d"),
@@ -3191,8 +3194,8 @@ sirConvertReassocReqFrame2Struct(tpAniSirGlobal pMac,
{
struct s_ext_cap *p_ext_cap = (struct s_ext_cap *)
&ar.ExtCap.bytes;
- vos_mem_copy(&pAssocReq->ExtCap.bytes, &ar.ExtCap.bytes,
- ar.ExtCap.num_bytes);
+ vos_mem_copy( &pAssocReq->ExtCap, &ar.ExtCap,
+ sizeof(tDot11fIEExtCap));
limLog(pMac, LOG1,
FL("ExtCap present, timingMeas: %d Initiator: %d Responder: %d"),
p_ext_cap->timingMeas, p_ext_cap->fine_time_meas_initiator,
@@ -3234,6 +3237,8 @@ sirFillBeaconMandatoryIEforEseBcnReport(tpAniSirGlobal pMac,
limLog(pMac, LOGE, FL("Failed to allocate memory"));
return eSIR_FAILURE;
}
+ vos_mem_zero(pBies, sizeof(tDot11fBeaconIEs));
+
// delegate to the framesc-generated code,
status = dot11fUnpackBeaconIEs( pMac, pPayload, nPayload, pBies );
@@ -3542,6 +3547,8 @@ sirParseBeaconIE(tpAniSirGlobal pMac,
limLog(pMac, LOGE, FL("Failed to allocate memory"));
return eSIR_FAILURE;
}
+ vos_mem_zero(pBies, sizeof(tDot11fBeaconIEs));
+
// delegate to the framesc-generated code,
status = dot11fUnpackBeaconIEs( pMac, pPayload, nPayload, pBies );
@@ -3775,7 +3782,6 @@ sirParseBeaconIE(tpAniSirGlobal pMac,
pBeaconStruct->Vendor1IEPresent = pBies->Vendor1IE.present;
pBeaconStruct->Vendor3IEPresent = pBies->Vendor3IE.present;
if (pBies->ExtCap.present) {
- pBeaconStruct->ExtCap.present = 1;
vos_mem_copy( &pBeaconStruct->ExtCap, &pBies->ExtCap,
sizeof(tDot11fIEExtCap));
}
diff --git a/CORE/UTILS/PKTLOG/pktlog_internal.c b/CORE/UTILS/PKTLOG/pktlog_internal.c
index 3db0b8758af2..e4262bd747a5 100644
--- a/CORE/UTILS/PKTLOG/pktlog_internal.c
+++ b/CORE/UTILS/PKTLOG/pktlog_internal.c
@@ -35,6 +35,7 @@
#include "pktlog_ac_i.h"
#include "wma_api.h"
#include "wlan_logging_sock_svc.h"
+#include "ol_txrx.h"
#define TX_DESC_ID_LOW_MASK 0xffff
#define TX_DESC_ID_LOW_SHIFT 0
@@ -208,6 +209,14 @@ static void process_ieee_hdr(void *data)
}
}
+static inline uint16_t get_desc_pool_size(struct ol_txrx_pdev_t *txrx_pdev)
+{
+ if (txrx_pdev->cfg.is_high_latency)
+ return ol_tx_desc_pool_size_hl(txrx_pdev->ctrl_pdev);
+ else
+ return ol_cfg_target_tx_credit(txrx_pdev->ctrl_pdev);
+}
+
A_STATUS
process_tx_info(struct ol_txrx_pdev_t *txrx_pdev,
void *data)
@@ -374,7 +383,7 @@ process_tx_info(struct ol_txrx_pdev_t *txrx_pdev,
>> TX_DESC_ID_HIGH_SHIFT);
msdu_id += 1;
}
- if (tx_desc_id >= ol_cfg_target_tx_credit(txrx_pdev->ctrl_pdev)) {
+ if (tx_desc_id >= get_desc_pool_size(txrx_pdev)) {
adf_os_print("%s: drop due to invalid msdu id = %x\n",
__func__, tx_desc_id);
return A_ERROR;
diff --git a/CORE/VOSS/inc/i_vos_diag_core_log.h b/CORE/VOSS/inc/i_vos_diag_core_log.h
index 04f4c349d3a3..8e8a3390a607 100644
--- a/CORE/VOSS/inc/i_vos_diag_core_log.h
+++ b/CORE/VOSS/inc/i_vos_diag_core_log.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -44,9 +44,7 @@
#include <vos_types.h>
#include <vos_memory.h>
-#ifdef FEATURE_WLAN_DIAG_SUPPORT
#include <log_codes.h>
-#endif
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
@@ -128,6 +126,22 @@ void vos_log_submit(v_VOID_t *plog_hdr_ptr);
#define WLAN_VOS_DIAG_LOG_REPORT( payload_ptr )
#define WLAN_VOS_DIAG_LOG_FREE( payload_ptr )
+static inline void vos_log_set_code (v_VOID_t *ptr, v_U16_t code)
+{
+}
+
+static inline void vos_log_set_length (v_VOID_t *ptr, v_U16_t length)
+{
+}
+
+static inline void vos_log_set_timestamp (v_VOID_t *plog_hdr_ptr)
+{
+}
+
+static inline void vos_log_submit(v_VOID_t *plog_hdr_ptr)
+{
+}
+
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
diff --git a/CORE/VOSS/inc/vos_types.h b/CORE/VOSS/inc/vos_types.h
index a9198201600a..623b37333989 100644
--- a/CORE/VOSS/inc/vos_types.h
+++ b/CORE/VOSS/inc/vos_types.h
@@ -160,8 +160,26 @@ typedef enum
#ifdef WLAN_OPEN_P2P_INTERFACE
#define VOS_MAX_CONCURRENCY_PERSONA 4 // This should match with WLAN_MAX_INTERFACES
#else
+/*
+ * This should match with WLAN_MAX_INTERFACES
+ */
+#ifdef WLAN_4SAP_CONCURRENCY
+#define VOS_MAX_CONCURRENCY_PERSONA 4
+#else
#define VOS_MAX_CONCURRENCY_PERSONA 3
#endif
+#endif
+
+/*
+ * MAX concurrency channel count in MCC
+ */
+#define MAX_CONCURRENCY_CHAN_COUNT 2
+
+/*
+ * MAX Session count per channel in MCC
+ */
+#define MAX_SESSSION_PER_CHAN_MCC 2
+
//This is a bit pattern to be set for each mode
//bit 0 - sta mode
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 5e8450e13169..eb4b20f1f0e8 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -2101,7 +2101,6 @@ vos_fetch_tl_cfg_parms
VOS_STATUS vos_shutdown(v_CONTEXT_t vosContext)
{
VOS_STATUS vosStatus;
- tpAniSirGlobal pMac = (((pVosContextType)vosContext)->pMACContext);
vosStatus = WLANTL_Close(vosContext);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
@@ -2119,16 +2118,6 @@ VOS_STATUS vos_shutdown(v_CONTEXT_t vosContext)
VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
}
- /* CAC timer will be initiated and started only when SAP starts on
- * DFS channel and it will be stopped and destroyed immediately once the
- * radar detected or timedout. So as per design CAC timer should be
- * destroyed after stop.*/
- if (pMac->sap.SapDfsInfo.is_dfs_cac_timer_running) {
- vos_timer_stop(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer);
- pMac->sap.SapDfsInfo.is_dfs_cac_timer_running = 0;
- vos_timer_destroy(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer);
- }
-
vosStatus = macClose( ((pVosContextType)vosContext)->pMACContext);
if (!VOS_IS_STATUS_SUCCESS(vosStatus))
{
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index 53d2ebd92d7c..1e80f159b685 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -1495,6 +1495,7 @@ VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain,
hdd_context_t *pHddCtx = NULL;
struct wiphy *wiphy = NULL;
int i;
+ int wait_result;
/* sanity checks */
if (NULL == pRegDomain)
@@ -1600,11 +1601,37 @@ VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain,
}
} else if (COUNTRY_IE == source || COUNTRY_USER == source) {
+ INIT_COMPLETION(pHddCtx->reg_init);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) || defined(WITH_BACKPORTS)
regulatory_hint_user(country_code, NL80211_USER_REG_HINT_USER);
#else
regulatory_hint_user(country_code);
#endif
+ wait_result = wait_for_completion_interruptible_timeout(
+ &pHddCtx->reg_init,
+ msecs_to_jiffies(REG_WAIT_TIME));
+ /*
+ * if the country information does not exist with the kernel,
+ * then the driver callback would not be called
+ */
+
+ if (wait_result >= 0)
+ {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
+ "runtime country code : %c%c is found in kernel db",
+ country_code[0], country_code[1]);
+ *pRegDomain = temp_reg_domain;
+ }
+
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_WARN,
+ "runtime country code : %c%c is not found"
+ " in kernel db",
+ country_code[0], country_code[1]);
+
+ return VOS_STATUS_E_EXISTS;
+ }
}
*pRegDomain = temp_reg_domain;
@@ -2252,9 +2279,6 @@ int __wlan_hdd_linux_reg_notifier(struct wiphy *wiphy,
if (pHddCtx->isVHT80Allowed != isVHT80Allowed)
hdd_checkandupdate_phymode( pHddCtx);
- if (NL80211_REGDOM_SET_BY_DRIVER == request->initiator)
- complete(&pHddCtx->reg_init);
-
/* now pass the new country information to sme */
if (request->alpha2[0] == '0' && request->alpha2[1] == '0')
{
@@ -2275,6 +2299,10 @@ int __wlan_hdd_linux_reg_notifier(struct wiphy *wiphy,
regdmn_set_dfs_region(&pHddCtx->reg);
+ if ((NL80211_REGDOM_SET_BY_DRIVER == request->initiator) ||
+ (NL80211_REGDOM_SET_BY_USER == request->initiator))
+ complete(&pHddCtx->reg_init);
+
default:
break;
}
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 180f6dafc61d..9e05a8caf9d0 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -896,6 +896,8 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_UPDATE_CHAN_LIST_REQ SIR_HAL_UPDATE_CHAN_LIST_REQ
#define WDA_UPDATE_CHAN_LIST_RSP SIR_HAL_UPDATE_CHAN_LIST_RSP
#define WDA_RX_SCAN_EVENT SIR_HAL_RX_SCAN_EVENT
+#define WDA_RX_CHN_STATUS_EVENT SIR_HAL_RX_CHN_STATUS_EVENT
+
#define WDA_IBSS_PEER_INACTIVITY_IND SIR_HAL_IBSS_PEER_INACTIVITY_IND
#define WDA_CLI_SET_CMD SIR_HAL_CLI_SET_CMD
@@ -1078,6 +1080,8 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_SET_WOW_PULSE_CMD SIR_HAL_SET_WOW_PULSE_CMD
+#define WDA_SET_WAKEUP_GPIO_CMD SIR_HAL_SET_WAKEUP_GPIO_CMD
+
#define WDA_UPDATE_WEP_DEFAULT_KEY SIR_HAL_UPDATE_WEP_DEFAULT_KEY
#define WDA_SET_CTS2SELF_FOR_STA SIR_HAL_SET_CTS2SELF_FOR_STA
diff --git a/Kbuild b/Kbuild
index fd695111e241..b6608fd2908d 100644
--- a/Kbuild
+++ b/Kbuild
@@ -207,6 +207,7 @@ ifeq ($(CONFIG_ROME_IF),pci)
endif
ifeq ($(CONFIG_ROME_IF),usb)
CONFIG_PER_VDEV_TX_DESC_POOL := 1
+ CONFIG_QCA_LL_TX_FLOW_CT := 1
endif
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
CONFIG_PER_VDEV_TX_DESC_POOL := 0
@@ -630,7 +631,6 @@ SME_CMN_OBJS := $(SME_SRC_DIR)/sme_common/sme_Api.o \
$(SME_SRC_DIR)/sme_common/sme_FTApi.o \
$(SME_SRC_DIR)/sme_common/sme_Trace.o
-SME_BTC_OBJS := $(SME_SRC_DIR)/btc/btcApi.o
SME_OEM_DATA_OBJS := $(SME_SRC_DIR)/oemData/oemDataApi.o
@@ -646,8 +646,7 @@ ifeq ($(CONFIG_WLAN_FEATURE_NAN_DATAPATH),y)
SME_NDP_OBJS += $(SME_SRC_DIR)/nan/nan_datapath_api.o
endif
-SME_OBJS := $(SME_BTC_OBJS) \
- $(SME_CCM_OBJS) \
+SME_OBJS := $(SME_CCM_OBJS) \
$(SME_CMN_OBJS) \
$(SME_CSR_OBJS) \
$(SME_OEM_DATA_OBJS) \
@@ -666,9 +665,6 @@ SVC_SRC_DIR := $(SVC_DIR)/src
SVC_INC := -I$(WLAN_ROOT)/$(SVC_INC_DIR) \
-I$(WLAN_ROOT)/$(SVC_DIR)/external
-BTC_SRC_DIR := $(SVC_SRC_DIR)/btc
-BTC_OBJS := $(BTC_SRC_DIR)/wlan_btc_svc.o
-
NLINK_SRC_DIR := $(SVC_SRC_DIR)/nlink
NLINK_OBJS := $(NLINK_SRC_DIR)/wlan_nlink_srv.o
@@ -678,8 +674,7 @@ PTT_OBJS := $(PTT_SRC_DIR)/wlan_ptt_sock_svc.o
WLAN_LOGGING_SRC_DIR := $(SVC_SRC_DIR)/logging
WLAN_LOGGING_OBJS := $(WLAN_LOGGING_SRC_DIR)/wlan_logging_sock_svc.o
-SVC_OBJS := $(BTC_OBJS) \
- $(NLINK_OBJS) \
+SVC_OBJS := $(NLINK_OBJS) \
$(PTT_OBJS) \
$(WLAN_LOGGING_OBJS)
@@ -1020,7 +1015,8 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \
-DFEATURE_WLAN_LFR \
-DFEATURE_WLAN_CH144 \
-DHTC_CRP_DEBUG \
- -DWLAN_VOWIFI_DEBUG
+ -DWLAN_VOWIFI_DEBUG \
+ -DATH_SUPPORT_DFS
ifeq ($(CONFIG_SCPC_FEATURE), y)
CDEFINES += -DWLAN_SCPC_FEATURE
@@ -1040,7 +1036,20 @@ CDEFINES += -DCONFIG_HL_SUPPORT \
-DHIF_SDIO \
-DCONFIG_ATH_PROCFS_DIAG_SUPPORT \
-DFEATURE_HL_GROUP_CREDIT_FLOW_CONTROL \
- -DHIF_MBOX_SLEEP_WAR
+ -DHIF_MBOX_SLEEP_WAR \
+ -DDEBUG_HL_LOGGING
+endif
+
+ifeq ($(CONFIG_WLAN_FEATURE_DSRC), y)
+CDEFINES += -DWLAN_FEATURE_DSRC
+endif
+
+ifeq ($(CONFIG_ARCH_MDMCALIFORNIUM), y)
+ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
+ifeq ($(CONFIG_WCNSS_SKB_PRE_ALLOC), y)
+CDEFINES += -DFEATURE_SKB_PRE_ALLOC
+endif
+endif
endif
ifeq ($(CONFIG_WLAN_FEATURE_DSRC), y)
@@ -1057,7 +1066,6 @@ endif
ifeq ($(CONFIG_ARCH_MDM9607), y)
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
-CDEFINES += -DDEBUG_HL_LOGGING
CDEFINES += -DHIF_SYNC_READ
endif
endif
@@ -1260,6 +1268,11 @@ ifeq ($(CONFIG_PER_VDEV_TX_DESC_POOL), 1)
CDEFINES += -DCONFIG_PER_VDEV_TX_DESC_POOL
endif
+#Enable tx flow control
+ifeq ($(CONFIG_QCA_LL_TX_FLOW_CT), 1)
+CDEFINES += -DQCA_LL_TX_FLOW_CT
+endif
+
#Enable Tx mgmt desc reserve
ifeq ($(CONFIG_TX_DESC_HI_PRIO_RESERVE), 1)
CDEFINES += -DCONFIG_TX_DESC_HI_PRIO_RESERVE