diff options
| author | Prakash Dhavali <pdhavali@codeaurora.org> | 2016-10-28 18:18:10 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-11-01 11:05:44 +0530 |
| commit | 460b0972186afaf4006b314f0d3658d3019653a8 (patch) | |
| tree | b37cff52f1209f540d537034a7008cf0d808c6f6 | |
| parent | 41a7ff210daaf4266b82eba5e07034eb1d69b8ec (diff) | |
| parent | f9b3052d869d91c598c4a8c05dacf944a20e71be (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
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 @@ -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 |
