summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-05-11 16:25:59 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-05-11 16:25:59 -0700
commit6ba301a7a1d44ec13a7a0278ef39ddad6445e24e (patch)
tree16ee0b6822004bf4651ca48d0c2f9f055b7f2a2a
parent4f1e6304a44b79c676e5788100f9ae6f98c20518 (diff)
parent62a9947459ab860e7cc6395a4f42934a94adce79 (diff)
Promotion of wlan-cld2.driver.lnx.1.0-00011.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 962367 I5553deee159dfa3e99a1bbe7db1c336c978e02ff qcacld-2.0: Fix NAN data path vendor event length calcul 1010915 Iafbd416026c9a0e4b05654ec810b0e0f3546beba qcacld-2.0: Fix TDLS peer QoS capability in transport la 1007555 I913748bf11f9362e5faaaf29c26fc39fda85f4a9 qcacld-2.0: Fix IBSS peer info handling when no peers ar 972009 I4d28876f206cb155f2d0df51628347e6f3493262 qcacld-2.0: Reduce unnecessary logging in HL Datapath 1012936 I6fcbc1df7c7ddad51e21643a70dfc63168df4794 qcacld-2.0: Fix compilation error on x86 platform for 3- 1011361 I053108babfaa9ac2629cdb107ceb507c2f8891e5 qcacld-2.0: By default set thermal power limit to 30dbm 688141 Ic549f072932dc1b02c585e324927a09d12cfd49b Release 4.0.11.75 762816 I726d5b0c1409fe26b4c150af6876a3d8766c6970 qcacld-2.0: Update Kbuild to support 3port concurrency 977773 I8876a4d4b99948cd9ab3ccec403cf5e4050b1cff qcacld-2.0: Fix layering violation while handling manage 1011996 I7d2df8337f9feed352430774907aa095affa5a69 qcacld-2.0: Initialize spinlocks used for STA and SAP in 978742 I61367d8843fb4f913df11e210c68feea93baec8b qcacld-2.0: Skip Rx packet aggregation logic for ICMP pa 1000853 I8881abde0b543d7b1562968ecbb6240a0ca552a3 qcacld-2.0: Resolve buffer overflow issue while processi 688141 Icf50bc87317a9c8a3add387a55c6cee76817a71c Release 4.0.11.77 775717 I3e2fc921e1f9991faa4e19286f12f7e16e809c0c qcacld-2.0: Update Kbuild by adding frequency avoidance 1012547 I0dd3acb236b270839649d2becfdc007e7aae9fdd qcacld-2.0: Send p2p ack indication directly to HDD from 1013359 Id3ad752fe3e4c6f6fec18febb1c839003bef3df0 qcacld-2.0: Validate session Id in sme_QosInternalReleas 962367 I545662de41d4a22a3f1a9f5e037eeaa4050b9d42 qcacld-2.0: Update NAN HDD APIs as per vendor definition 1012400 Ie0a58b759d1da80d38e41910c88251776d8e4ea6 Revert "qcacld-2.0: Synchronize fwpath_change_handler an 1009456 I3649bfdf4381f49483a3ffe2c80d5339b52a3764 qcacld-2.0: Add support to handle TDLS event in WOW mode 1005808 I67bcdb7453e8232dc711499ee66793877697582b qcacld-2.0: Fix check for adapter device_mode while chan 1012569 Ie59044c4f1bc9b40de9c3574607cb6d9a73caee3 qcacld-2.0: Prevent wlan exit in wrong state 962367 I731b520fde226c351464d94033a1ced2888a4d18 qcacld-2.0: Add NDP reason codes in deferred rsp sent fo 688141 Id1fe1445fb9dddeb746e33114f515e12e2df00ca Release 4.0.11.76 1010564 I64f05c8b41cf3d360819122a08eca72f3a2c1aed qcacld-2.0: Add cfg ini parameter tgt_gtx_usr_cfg Change-Id: Ie3e96cc28ca76c01ef06671b2d28fe7403aa1ead CRs-Fixed: 1010564, 688141, 1013359, 1009456, 978742, 1012569, 1011361, 1012400, 775717, 1005808, 1007555, 977773, 1012936, 1010915, 1000853, 962367, 1011996, 972009, 762816, 1012547
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c93
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.h3
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c7
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx_types.h3
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h12
-rw-r--r--CORE/HDD/inc/wlan_hdd_p2p.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c22
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c10
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c22
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c125
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.c157
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.h16
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c42
-rw-r--r--CORE/MAC/inc/aniGlobal.h1
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h78
-rw-r--r--CORE/MAC/inc/wniApi.h2
-rw-r--r--CORE/MAC/inc/wniCfgAp.h15
-rw-r--r--CORE/MAC/inc/wniCfgSta.h11
-rw-r--r--CORE/MAC/src/cfg/cfgProcMsg.c10
-rw-r--r--CORE/MAC/src/pe/include/limApi.h4
-rw-r--r--CORE/MAC/src/pe/lim/limApi.c138
-rw-r--r--CORE/MAC/src/pe/lim/limP2P.c25
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c8
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c29
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.h2
-rw-r--r--CORE/SAP/inc/sapApi.h3
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c10
-rw-r--r--CORE/SAP/src/sapFsm.c7
-rw-r--r--CORE/SERVICES/COMMON/wlan_tgt_def_config.h4
-rw-r--r--CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h5
-rw-r--r--CORE/SERVICES/WMA/wma.c38
-rw-r--r--CORE/SERVICES/WMA/wma_nan_datapath.c33
-rw-r--r--CORE/SME/inc/csrApi.h6
-rw-r--r--CORE/SME/inc/sme_Api.h2
-rw-r--r--CORE/SME/inc/sme_nan_datapath.h17
-rw-r--r--CORE/SME/src/QoS/sme_Qos.c8
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c6
-rw-r--r--CORE/SME/src/csr/csrUtil.c1
-rw-r--r--CORE/SME/src/nan/nan_datapath_api.c69
-rw-r--r--CORE/SME/src/p2p/p2p_Api.c20
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c53
-rw-r--r--CORE/SYS/legacy/src/system/src/sysEntryFunc.c58
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c2
-rw-r--r--CORE/VOSS/src/vos_sched.c69
-rw-r--r--CORE/VOSS/src/vos_sched.h4
-rw-r--r--Kbuild10
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini4
53 files changed, 781 insertions, 510 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index a4243388e8d6..71592ebfcd20 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -462,6 +462,94 @@ is_ccmp_pn_replay_attack(void *vos_ctx, struct ieee80211_frame *wh,
}
#endif
+/**
+ * tlshim_is_pkt_drop_candidate() - check if the mgmt frame should be droppped
+ * @wma_handle: wma handle
+ * @peer_addr: peer MAC address
+ * @subtype: Management frame subtype
+ *
+ * This function is used to decide if a particular management frame should be
+ * dropped to prevent DOS attack. Timestamp is used to decide the DOS attack.
+ *
+ * Return: true if the packet should be dropped and false oterwise
+ */
+static bool tlshim_is_pkt_drop_candidate(tp_wma_handle wma_handle,
+ uint8_t *peer_addr, uint8_t subtype)
+{
+ struct ol_txrx_peer_t *peer;
+ struct ol_txrx_pdev_t *pdev_ctx;
+ uint8_t peer_id;
+ tANI_BOOLEAN should_drop = eANI_BOOLEAN_FALSE;
+
+ /*
+ * Currently this function handles only Disassoc,
+ * Deauth and Assoc req frames. Return false for all other frames.
+ */
+ if (subtype != IEEE80211_FC0_SUBTYPE_DISASSOC &&
+ subtype != IEEE80211_FC0_SUBTYPE_DEAUTH &&
+ subtype != IEEE80211_FC0_SUBTYPE_ASSOC_REQ) {
+ should_drop = FALSE;
+ goto end;
+ }
+
+ pdev_ctx = vos_get_context(VOS_MODULE_ID_TXRX, wma_handle->vos_context);
+ if (!pdev_ctx) {
+ TLSHIM_LOGE(FL("Failed to get the context"));
+ should_drop = TRUE;
+ goto end;
+ }
+
+ peer = ol_txrx_find_peer_by_addr(pdev_ctx, peer_addr, &peer_id);
+ if (!peer) {
+ if (SIR_MAC_MGMT_ASSOC_REQ != subtype) {
+ TLSHIM_LOGE(FL("Received mgmt frame: %0x from unknow peer: %pM"),
+ subtype, peer_addr);
+ should_drop = TRUE;
+ }
+ goto end;
+ }
+
+ switch (subtype) {
+ case SIR_MAC_MGMT_ASSOC_REQ:
+ if (peer->last_assoc_rcvd) {
+ if (adf_os_gettimestamp() - peer->last_assoc_rcvd <
+ TLSHIM_MGMT_FRAME_DETECT_DOS_TIMER) {
+ TLSHIM_LOGD(FL("Dropping Assoc Req received"));
+ should_drop = TRUE;
+ }
+ }
+ peer->last_assoc_rcvd = adf_os_gettimestamp();
+ break;
+ case SIR_MAC_MGMT_DISASSOC:
+ if (peer->last_disassoc_rcvd) {
+ if (adf_os_gettimestamp() -
+ peer->last_disassoc_rcvd <
+ TLSHIM_MGMT_FRAME_DETECT_DOS_TIMER) {
+ TLSHIM_LOGD(FL("Dropping DisAssoc received"));
+ should_drop = TRUE;
+ }
+ }
+ peer->last_disassoc_rcvd = adf_os_gettimestamp();
+ break;
+ case SIR_MAC_MGMT_DEAUTH:
+ if (peer->last_deauth_rcvd) {
+ if (adf_os_gettimestamp() -
+ peer->last_deauth_rcvd <
+ TLSHIM_MGMT_FRAME_DETECT_DOS_TIMER) {
+ TLSHIM_LOGD(FL("Dropping Deauth received"));
+ should_drop = TRUE;
+ }
+ }
+ peer->last_deauth_rcvd = adf_os_gettimestamp();
+ break;
+ default:
+ break;
+ }
+
+end:
+ return should_drop;
+}
+
static int tlshim_mgmt_rx_process(void *context, u_int8_t *data,
u_int32_t data_len, bool saved_beacon, u_int32_t vdev_id)
{
@@ -764,6 +852,11 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data,
}
}
#endif /* WLAN_FEATURE_11W */
+ if (tlshim_is_pkt_drop_candidate(wma_handle, wh->i_addr2,
+ mgt_subtype)) {
+ vos_pkt_return_packet(rx_pkt);
+ return -EINVAL;
+ }
return tl_shim->mgmt_rx(vos_ctx, rx_pkt);
}
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.h b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
index 984c155eee41..6a93553dfc51 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.h
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
@@ -34,6 +34,9 @@
#include <adf_os_atomic.h>
#include <vos_sched.h>
+/* Time(in ms) to detect DOS attack */
+#define TLSHIM_MGMT_FRAME_DETECT_DOS_TIMER 1000
+
#ifdef FEATURE_WLAN_ESE
typedef struct deferred_iapp_work {
pVosContextType pVosGCtx;
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index 366b69bbf394..769e72b522b0 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -1144,6 +1144,10 @@ ol_rx_peer_init(struct ol_txrx_pdev_t *pdev, struct ol_txrx_peer_t *peer)
peer->security[txrx_sec_ucast].sec_type =
peer->security[txrx_sec_mcast].sec_type = htt_sec_type_none;
peer->keyinstalled = 0;
+ peer->last_assoc_rcvd = 0;
+ peer->last_disassoc_rcvd = 0;
+ peer->last_deauth_rcvd = 0;
+
adf_os_atomic_init(&peer->fw_pn_check);
}
@@ -1151,6 +1155,9 @@ void
ol_rx_peer_cleanup(struct ol_txrx_vdev_t *vdev, struct ol_txrx_peer_t *peer)
{
peer->keyinstalled = 0;
+ peer->last_assoc_rcvd = 0;
+ peer->last_disassoc_rcvd = 0;
+ peer->last_deauth_rcvd = 0;
ol_rx_reorder_peer_cleanup(vdev, peer);
adf_os_mem_free(peer->reorder_history);
peer->reorder_history = NULL;
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index cb78aa61d5b0..0cc3eb446896 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -827,7 +827,7 @@ ol_tx_pdev_reset_bundle_require(void* pdev_handle)
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
vdev->bundling_reqired = false;
- TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ TXRX_PRINT(TXRX_PRINT_LEVEL_INFO1,
"vdev_id %d bundle_require %d\n",
vdev->vdev_id, vdev->bundling_reqired);
}
@@ -860,7 +860,7 @@ ol_tx_vdev_set_bundle_require(uint8_t vdev_id, unsigned long tx_bytes,
vdev->bundling_reqired = false;
if (old_bundle_required != vdev->bundling_reqired)
- TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ TXRX_PRINT(TXRX_PRINT_LEVEL_INFO1,
"vdev_id %d bundle_require %d tx_bytes %ld time_in_ms %d high_th %d low_th %d\n",
vdev->vdev_id, vdev->bundling_reqired, tx_bytes,
time_in_ms, high_th, low_th);
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
index b529e852deee..37894217dd8d 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
@@ -1138,6 +1138,9 @@ struct ol_txrx_peer_t {
u_int16_t tx_limit_flag;
u_int16_t tx_pause_flag;
#endif
+ adf_os_time_t last_assoc_rcvd;
+ adf_os_time_t last_disassoc_rcvd;
+ adf_os_time_t last_deauth_rcvd;
struct ol_rx_reorder_history * reorder_history;
};
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 774a3bbeba04..9a76ddfde313 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2726,12 +2726,12 @@ This feature requires the dependent cfg.ini "gRoamPrefer5GHz" set to 1 */
#define CFG_SET_TXPOWER_LIMIT2G_NAME "TxPower2g"
#define CFG_SET_TXPOWER_LIMIT2G_MIN ( 0 )
#define CFG_SET_TXPOWER_LIMIT2G_MAX ( 30 )
-#define CFG_SET_TXPOWER_LIMIT2G_DEFAULT ( 15 )
+#define CFG_SET_TXPOWER_LIMIT2G_DEFAULT ( 30 )
#define CFG_SET_TXPOWER_LIMIT5G_NAME "TxPower5g"
#define CFG_SET_TXPOWER_LIMIT5G_MIN ( 0 )
#define CFG_SET_TXPOWER_LIMIT5G_MAX ( 30 )
-#define CFG_SET_TXPOWER_LIMIT5G_DEFAULT ( 15 )
+#define CFG_SET_TXPOWER_LIMIT5G_DEFAULT ( 30 )
#ifdef QCA_LL_TX_FLOW_CT
/* Default, single interface case flow control parameters */
@@ -3816,6 +3816,11 @@ enum dot11p_mode {
#define CFG_EDCA_BE_AIFS_VALUE_MAX (15)
#define CFG_EDCA_BE_AIFS_VALUE_DEFAULT (3)
+#define CFG_TGT_GTX_USR_CFG_NAME "tgt_gtx_usr_cfg"
+#define CFG_TGT_GTX_USR_CFG_MIN (0)
+#define CFG_TGT_GTX_USR_CFG_MAX (32)
+#define CFG_TGT_GTX_USR_CFG_DEFAULT (32)
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -4570,6 +4575,9 @@ struct hdd_config {
uint32_t edca_bk_aifs;
uint32_t edca_be_aifs;
bool enable_dynamic_sta_chainmask;
+
+ /* parameter to control GTX */
+ uint32_t tgt_gtx_usr_cfg;
};
typedef struct hdd_config hdd_config_t;
diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h
index cfafdca3695a..c4443a8716a0 100644
--- a/CORE/HDD/inc/wlan_hdd_p2p.h
+++ b/CORE/HDD/inc/wlan_hdd_p2p.h
@@ -134,6 +134,7 @@ void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter );
void hdd_sendActionCnf( hdd_adapter_t *pAdapter, tANI_BOOLEAN actionSendSuccess );
+void hdd_send_action_cnf_cb(uint32_t session_id, bool status);
int wlan_hdd_check_remain_on_channel(hdd_adapter_t *pAdapter);
void wlan_hdd_cancel_existing_remain_on_channel(hdd_adapter_t *pAdapter);
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 7443c2660928..3e5814a34e07 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -4086,10 +4086,6 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
case eCSR_ROAM_REMAIN_CHAN_READY:
hdd_remainChanReadyHandler( pAdapter );
break;
- case eCSR_ROAM_SEND_ACTION_CNF:
- hdd_sendActionCnf( pAdapter,
- (roamResult == eCSR_ROAM_RESULT_NONE) ? TRUE : FALSE );
- break;
#ifdef FEATURE_WLAN_TDLS
case eCSR_ROAM_TDLS_STATUS_UPDATE:
halStatus = hdd_RoamTdlsStatusUpdateHandler( pAdapter, pRoamInfo,
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 3f243341dd7f..710e9c3528b1 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4561,6 +4561,13 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_EDCA_BE_AIFS_VALUE_DEFAULT,
CFG_EDCA_BE_AIFS_VALUE_MIN,
CFG_EDCA_BE_AIFS_VALUE_MAX),
+
+ REG_VARIABLE(CFG_TGT_GTX_USR_CFG_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, tgt_gtx_usr_cfg,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_TGT_GTX_USR_CFG_DEFAULT,
+ CFG_TGT_GTX_USR_CFG_MIN,
+ CFG_TGT_GTX_USR_CFG_MAX),
};
@@ -5370,6 +5377,10 @@ void print_hdd_cfg(hdd_context_t *pHddCtx)
CFG_ENABLE_VHT_DYNAMIC_STA_CHAINMASK,
pHddCtx->cfg_ini->enable_dynamic_sta_chainmask);
+ hddLog(LOG2, "Name = [%s] Value = [%u]",
+ CFG_TGT_GTX_USR_CFG_NAME,
+ pHddCtx->cfg_ini->tgt_gtx_usr_cfg);
+
hdd_ndp_print_ini_config(pHddCtx);
}
@@ -5448,7 +5459,7 @@ static VOS_STATUS hdd_cfg_get_config(REG_TABLE_ENTRY *reg_table,
// ideally we want to return the config to the application
// however the config is too big so we just printk() for now
#ifdef RETURN_IN_BUFFER
- if (curlen <= buflen)
+ if (curlen < buflen)
{
// copy string + '\0'
memcpy(pCur, configStr, curlen+1);
@@ -6925,6 +6936,15 @@ v_BOOL_t hdd_update_config_dat( hdd_context_t *pHddCtx )
fStatus = FALSE;
hddLog(LOGE, "Could not pass on WNI_CFG_IBSS_ATIM_WIN_SIZE to CCM");
}
+
+ if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_TGT_GTX_USR_CFG,
+ pConfig->tgt_gtx_usr_cfg, NULL,
+ eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+ {
+ fStatus = FALSE;
+ hddLog(LOGE, "Could not pass on WNI_CFG_TGT_GTX_USR_CFG to CCM");
+ }
+
return fStatus;
}
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 454f7f8d9ef3..d427b5aa77e4 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -10813,7 +10813,7 @@ __wlan_hdd_cfg80211_avoid_freq(struct wiphy *wiphy,
ret = wlan_hdd_validate_context(hdd_ctx);
if (0 != ret)
return -EINVAL;
- cnss_get_wlan_unsafe_channel(hdd_ctx->unsafe_channel_list,
+ vos_get_wlan_unsafe_channel(hdd_ctx->unsafe_channel_list,
&(hdd_ctx->unsafe_channel_count),
sizeof(hdd_ctx->unsafe_channel_list));
@@ -11841,6 +11841,9 @@ void wlan_hdd_cfg80211_register_frames(hdd_adapter_t* pAdapter)
/* Register frame indication call back */
sme_register_mgmt_frame_ind_callback(hHal, hdd_indicate_mgmt_frame);
+ /* Register for p2p ack indication */
+ sme_register_p2p_ack_ind_callback(hHal, hdd_send_action_cnf_cb);
+
/* Right now we are registering these frame when driver is getting
initialized. Once we will move to 2.6.37 kernel, in which we have
frame register ops, we will move this code as a part of that */
@@ -14578,7 +14581,8 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
if ((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) ||
(pAdapter->device_mode == WLAN_HDD_P2P_CLIENT) ||
- (pAdapter->device_mode == WLAN_HDD_P2P_DEVICE)) {
+ (pAdapter->device_mode == WLAN_HDD_P2P_DEVICE) ||
+ (pAdapter->device_mode == WLAN_HDD_IBSS)) {
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
pRoamProfile = &pWextState->roamProfile;
@@ -22139,7 +22143,7 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy,
status = hdd_roamRegisterTDLSSTA(pAdapter, peer,
pTdlsPeer->staId,
pTdlsPeer->signature,
- tdlsLinkEstablishParams.qos);
+ pTdlsPeer->qos);
if (VOS_STATUS_SUCCESS == status)
{
tANI_U8 i;
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index cbf51899b763..9b9f21c98123 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -74,6 +74,7 @@
#include <wlan_hdd_ipa.h>
#endif
#include <wlan_logging_sock_svc.h>
+#include <wlan_hdd_p2p.h>
/**-----------------------------------------------------------------------------
* Preprocessor definitions and constants
@@ -2321,6 +2322,9 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
sme_register_mgmt_frame_ind_callback(pHddCtx->hHal, hdd_indicate_mgmt_frame);
+ /* Register for p2p ack indication */
+ sme_register_p2p_ack_ind_callback(pHddCtx->hHal, hdd_send_action_cnf_cb);
+
#ifdef FEATURE_WLAN_EXTSCAN
sme_ExtScanRegisterCallback(pHddCtx->hHal,
wlan_hdd_cfg80211_extscan_callback);
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index e004de69be22..53d82a8eecc9 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -2059,12 +2059,6 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
case eSAP_REMAIN_CHAN_READY:
hdd_remainChanReadyHandler( pHostapdAdapter );
return VOS_STATUS_SUCCESS;
- case eSAP_SEND_ACTION_CNF:
- hdd_sendActionCnf( pHostapdAdapter,
- ( eSAP_STATUS_SUCCESS ==
- pSapEvent->sapevt.sapActionCnf.actionSendSuccess ) ?
- TRUE : FALSE );
- return VOS_STATUS_SUCCESS;
case eSAP_UNKNOWN_STA_JOIN:
snprintf(unknownSTAEvent, IW_CUSTOM_MAX, "JOIN_UNKNOWN_STA-%02x:%02x:%02x:%02x:%02x:%02x",
pSapEvent->sapevt.sapUnknownSTAJoin.macaddr.bytes[0],
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index bace00000884..e85dbe551c1c 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -2754,8 +2754,8 @@ static void hdd_ipa_destory_rm_resource(struct hdd_ipa_priv *hdd_ipa)
static void hdd_ipa_send_skb_to_network(adf_nbuf_t skb, hdd_adapter_t *adapter)
{
int result;
-
#ifndef QCA_CONFIG_SMP
+ struct iphdr* ip_h;
static atomic_t softirq_mitigation_cntr =
ATOMIC_INIT(IPA_WLAN_RX_SOFTIRQ_THRESH);
#endif
@@ -2787,15 +2787,21 @@ static void hdd_ipa_send_skb_to_network(adf_nbuf_t skb, hdd_adapter_t *adapter)
#ifdef QCA_CONFIG_SMP
result = netif_rx_ni(skb);
#else
- /* Call netif_rx_ni for every IPA_WLAN_RX_SOFTIRQ_THRESH packets to
- * avoid excessive softirq's.
- */
- if (atomic_dec_and_test(&softirq_mitigation_cntr)) {
+ ip_h = (struct iphdr*)((uint8_t*)skb->data);
+ if ((skb->protocol == htons(ETH_P_IP)) &&
+ (ip_h->protocol == IPPROTO_ICMP)) {
result = netif_rx_ni(skb);
- atomic_set(&softirq_mitigation_cntr,
- IPA_WLAN_RX_SOFTIRQ_THRESH);
} else {
- result = netif_rx(skb);
+ /* Call netif_rx_ni for every IPA_WLAN_RX_SOFTIRQ_THRESH packets
+ * to avoid excessive softirq's.
+ */
+ if (atomic_dec_and_test(&softirq_mitigation_cntr)){
+ result = netif_rx_ni(skb);
+ atomic_set(&softirq_mitigation_cntr,
+ IPA_WLAN_RX_SOFTIRQ_THRESH);
+ } else {
+ result = netif_rx(skb);
+ }
}
#endif
if (result == NET_RX_SUCCESS)
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index e7f487671a0c..5466e894d7fc 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -171,12 +171,6 @@ extern int hdd_hostapd_stop (struct net_device *dev);
#define WLAN_TFC_IPAUC_TX_DESC_RESERVE 100
#endif /* IPA_UC_OFFLOAD */
-/*
- * Mutex lock to synchronize hdd_stop and fwpath_change_handler
- * called from two separate user space threads.
- */
-static DEFINE_MUTEX(fwp_lock);
-
/* the Android framework expects this param even though we don't use it */
#define BUF_LEN 20
static char fwpath_buffer[BUF_LEN];
@@ -191,6 +185,7 @@ static int enable_dfs_chan_scan = -1;
#ifndef MODULE
static int wlan_hdd_inited;
+static char fwpath_mode_local[BUF_LEN];
#endif
/*
@@ -1475,24 +1470,30 @@ hdd_get_ibss_peer_info_cb(v_VOID_t *pUserData,
}
pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+
if (NULL != pPeerInfo && eHAL_STATUS_SUCCESS == pPeerInfo->status) {
/* validate number of peers */
- if (pPeerInfo->numPeers < HDD_MAX_NUM_IBSS_STA) {
- pStaCtx->ibss_peer_info.status = pPeerInfo->status;
- pStaCtx->ibss_peer_info.numPeers = pPeerInfo->numPeers;
+ if (pPeerInfo->numPeers > HDD_MAX_NUM_IBSS_STA) {
+ hddLog(LOGW,
+ FL("Limiting num_peers %u to %u"),
+ pPeerInfo->numPeers, HDD_MAX_NUM_IBSS_STA);
+ pPeerInfo->numPeers = HDD_MAX_NUM_IBSS_STA;
+ }
- for (i = 0; i < pPeerInfo->numPeers; i++) {
- pStaCtx->ibss_peer_info.peerInfoParams[i] =
+ pStaCtx->ibss_peer_info.status = pPeerInfo->status;
+ pStaCtx->ibss_peer_info.numPeers = pPeerInfo->numPeers;
+
+ for (i = 0; i < pPeerInfo->numPeers; i++) {
+ pStaCtx->ibss_peer_info.peerInfoParams[i] =
pPeerInfo->peerInfoParams[i];
- }
- hddLog(LOG1, FL("Peer Info copied in HDD"));
- } else {
- hddLog(LOG1,
- FL("Number of peers %d returned is more than limit %d"),
- pPeerInfo->numPeers, HDD_MAX_NUM_IBSS_STA);
}
} else {
- hddLog(LOG1, FL("peerInfo returned is NULL"));
+ hddLog(LOGE, FL("peerInfo %s: status %u, numPeers %u"),
+ pPeerInfo ? "valid" : "null",
+ pPeerInfo ? pPeerInfo->status : eHAL_STATUS_FAILURE,
+ pPeerInfo ? pPeerInfo->numPeers : 0);
+ pStaCtx->ibss_peer_info.numPeers = 0;
+ pStaCtx->ibss_peer_info.status = eHAL_STATUS_FAILURE;
}
complete(&pAdapter->ibss_peer_info_comp);
@@ -9139,8 +9140,18 @@ static inline int wlan_hdd_stop_can_enter_lowpower(hdd_adapter_t *adapter)
*/
static void kickstart_driver_handler(struct work_struct *work)
{
+ bool ready;
+
+ ready = vos_is_load_unload_ready(__func__);
+ if (!ready) {
+ VOS_ASSERT(0);
+ return;
+ }
+
+ vos_load_unload_protect(__func__);
hdd_driver_exit();
wlan_hdd_inited = 0;
+ vos_load_unload_unprotect(__func__);
}
static DECLARE_WORK(kickstart_driver_work, kickstart_driver_handler);
@@ -9148,6 +9159,7 @@ static DECLARE_WORK(kickstart_driver_work, kickstart_driver_handler);
/**
* kickstart_driver() - Initialize and Clean-up driver
* @load: True: initialize, False: Clean-up driver
+ * @mode_change: tell if last mode and current mode is same or not
*
* Delayed driver initialization when driver is statically linked and Clean-up
* when all the interfaces are down or any other condition which requires to
@@ -9159,12 +9171,13 @@ static DECLARE_WORK(kickstart_driver_work, kickstart_driver_handler);
*
* Return: 0 on success, non zero on failure
*/
-static int kickstart_driver(bool load)
+static int kickstart_driver(bool load, bool mode_change)
{
int ret_status;
- pr_info("%s: load: %d wlan_hdd_inited: %d, caller: %pf\n", __func__,
- load, wlan_hdd_inited, (void *)_RET_IP_);
+ pr_info("%s: load: %d wlan_hdd_inited: %d, mode_change: %d caller: %pf\n",
+ __func__, load, wlan_hdd_inited,
+ mode_change, (void *)_RET_IP_);
/* Make sure unload and load are synchronized */
flush_work(&kickstart_driver_work);
@@ -9185,12 +9198,20 @@ static int kickstart_driver(bool load)
return ret_status;
}
- hdd_driver_exit();
+ if (load && wlan_hdd_inited && !mode_change) {
+ /* Error condition */
+ hdd_driver_exit();
+ wlan_hdd_inited = 0;
+ ret_status = -EINVAL;
+ } else {
+ hdd_driver_exit();
+
+ msleep(200);
- msleep(200);
+ ret_status = hdd_driver_init();
+ wlan_hdd_inited = ret_status ? 0 : 1;
+ }
- ret_status = hdd_driver_init();
- wlan_hdd_inited = ret_status ? 0 : 1;
return ret_status;
}
@@ -9203,11 +9224,22 @@ static int kickstart_driver(bool load)
*/
static inline void wlan_hdd_stop_enter_lowpower(hdd_context_t *hdd_ctx)
{
+ bool ready;
+
/* Do not clean up n/w ifaces if we are in DRIVER STOP phase or else
* DRIVER START will fail and Wi-Fi will not resume successfully
*/
- if (hdd_ctx && !hdd_ctx->driver_being_stopped)
- kickstart_driver(false);
+ if (hdd_ctx && !hdd_ctx->driver_being_stopped) {
+ ready = vos_is_load_unload_ready(__func__);
+ if (!ready) {
+ VOS_ASSERT(0);
+ return;
+ }
+
+ vos_load_unload_protect(__func__);
+ kickstart_driver(false, false);
+ vos_load_unload_unprotect(__func__);
+ }
}
/**
@@ -9351,9 +9383,7 @@ static int hdd_stop (struct net_device *dev)
int ret;
vos_ssr_protect(__func__);
- mutex_lock(&fwp_lock);
ret = __hdd_stop(dev);
- mutex_unlock(&fwp_lock);
vos_ssr_unprotect(__func__);
return ret;
@@ -14508,6 +14538,8 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
}
spin_lock_init(&pHddCtx->dfs_lock);
+ spin_lock_init(&pHddCtx->sap_update_info_lock);
+ spin_lock_init(&pHddCtx->sta_update_info_lock);
hdd_init_offloaded_packets_ctx(pHddCtx);
// Load all config first as TL config is needed during vos_open
pHddCtx->cfg_ini = (hdd_config_t*) kmalloc(sizeof(hdd_config_t), GFP_KERNEL);
@@ -15854,16 +15886,35 @@ static int fwpath_changed_handler(const char *kmessage,
struct kernel_param *kp)
{
int ret;
+ bool mode_change;
- ENTER();
-
- mutex_lock(&fwp_lock);
ret = param_set_copystring(kmessage, kp);
- if (0 == ret)
- ret = kickstart_driver(true);
- mutex_unlock(&fwp_lock);
- EXIT();
+ if (!ret) {
+ bool ready;
+
+ ret = strncmp(fwpath_mode_local, kmessage , 3);
+ mode_change = ret ? true : false;
+
+
+ pr_info("%s : new_mode : %s, present_mode : %s\n", __func__,
+ kmessage, fwpath_mode_local);
+
+ strlcpy(fwpath_mode_local, kmessage,
+ sizeof(fwpath_mode_local));
+
+ ready = vos_is_load_unload_ready(__func__);
+
+ if (!ready) {
+ VOS_ASSERT(0);
+ return -EINVAL;
+ }
+
+ vos_load_unload_protect(__func__);
+ ret = kickstart_driver(true, mode_change);
+ vos_load_unload_unprotect(__func__);
+ }
+
return ret;
}
@@ -15887,7 +15938,7 @@ static int con_mode_handler(const char *kmessage, struct kernel_param *kp)
ret = param_set_int(kmessage, kp);
if (0 == ret)
- ret = kickstart_driver(true);
+ ret = kickstart_driver(true, false);
return ret;
}
#endif
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c
index e41d9c0ae6b4..449ad944f750 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.c
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c
@@ -58,6 +58,8 @@ qca_wlan_vendor_ndp_policy[QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = {
.len = VOS_MAC_ADDR_SIZE },
[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY] = { .type = NLA_BINARY,
.len = NDP_NUM_INSTANCE_ID },
+ [QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE] = { .type = NLA_U32 },
+ [QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE] = { .type = NLA_U32 },
};
/**
@@ -731,20 +733,6 @@ static int hdd_ndp_end_req_handler(hdd_context_t *hdd_ctx, struct nlattr **tb)
}
/**
- * hdd_ndp_schedule_req_handler() - NDP schedule request handler
- * @hdd_ctx: hdd context
- * @tb: parsed NL attribute list
- *
- * Return: 0 on success or error code on failure
- */
-static int hdd_ndp_schedule_req_handler(hdd_context_t *hdd_ctx,
- struct nlattr **tb)
-{
- return 0;
-}
-
-
-/**
* hdd_ndp_iface_create_rsp_handler() - NDP iface create response handler
* @adapter: pointer to adapter context
* @rsp_params: response parameters
@@ -752,6 +740,13 @@ static int hdd_ndp_schedule_req_handler(hdd_context_t *hdd_ctx,
* The function is expected to send a response back to the user space
* even if the creation of BSS has failed
*
+ * Following vendor event is sent to cfg80211:
+ * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes)
+ *
* Return: none
*/
static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
@@ -760,12 +755,12 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
struct sk_buff *vendor_event;
hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
struct ndi_create_rsp *ndi_rsp = (struct ndi_create_rsp *)rsp_params;
- uint32_t data_len = (2 * sizeof(uint32_t)) + sizeof(uint16_t) +
- NLMSG_HDRLEN + (3 * NLA_HDRLEN);
+ uint32_t data_len = (3 * sizeof(uint32_t)) + sizeof(uint16_t) +
+ NLMSG_HDRLEN + (4 * NLA_HDRLEN);
struct nan_datapath_ctx *ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter);
bool create_fail = false;
uint8_t create_transaction_id = 0;
- uint8_t create_status = 0;
+ uint32_t create_status = 0;
ENTER();
@@ -823,7 +818,8 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
/* Status return value */
if (nla_put_u32(vendor_event,
- QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE, 0xA5)) {
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
+ ndi_rsp->reason)) {
hddLog(LOGE, FL("VENDOR_ATTR_NDP_DRV_RETURN_VALUE put fail"));
goto nla_put_failure;
}
@@ -837,7 +833,8 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter,
hddLog(LOG2, FL("status code: %d, value: %d"),
QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE, create_status);
hddLog(LOG2, FL("Return value: %d, value: %d"),
- QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE, 0xA5);
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
+ ndi_rsp->reason);
cfg80211_vendor_event(vendor_event, GFP_KERNEL);
@@ -880,6 +877,7 @@ static void hdd_ndp_iface_delete_rsp_handler(hdd_adapter_t *adapter,
{
hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
struct ndi_delete_rsp *ndi_rsp = rsp_params;
+ struct nan_datapath_ctx *ndp_ctx;
if (wlan_hdd_validate_context(hdd_ctx))
return;
@@ -889,13 +887,17 @@ static void hdd_ndp_iface_delete_rsp_handler(hdd_adapter_t *adapter,
return;
}
- if (ndi_rsp->status == VOS_STATUS_SUCCESS)
+ if (ndi_rsp->status == NDP_RSP_STATUS_SUCCESS)
hddLog(LOGE, FL("NDI BSS successfully stopped"));
else
hddLog(LOGE,
FL("NDI BSS stop failed with reason %d"),
ndi_rsp->reason);
+ ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter);
+ ndp_ctx->ndi_delete_rsp_reason = ndi_rsp->reason;
+ ndp_ctx->ndi_delete_rsp_status = ndi_rsp->status;
+
wlan_hdd_netif_queue_control(adapter,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
WLAN_CONTROL_PATH);
@@ -907,6 +909,13 @@ static void hdd_ndp_iface_delete_rsp_handler(hdd_adapter_t *adapter,
* hdd_ndp_session_end_handler() - NDI session termination handler
* @adapter: pointer to adapter context
*
+ * Following vendor event is sent to cfg80211:
+ * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes)
+ *
* Return: none
*/
void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
@@ -914,8 +923,8 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
struct sk_buff *vendor_event;
struct nan_datapath_ctx *ndp_ctx;
- uint32_t data_len = sizeof(uint32_t) * 2 + sizeof(uint16_t) +
- NLA_HDRLEN * 3 + NLMSG_HDRLEN;
+ uint32_t data_len = sizeof(uint32_t) * 3 + sizeof(uint16_t) +
+ NLA_HDRLEN * 4 + NLMSG_HDRLEN;
ENTER();
@@ -973,14 +982,16 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
/* Status code */
if (nla_put_u32(vendor_event,
- QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE, 0x0)) {
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE,
+ ndp_ctx->ndi_delete_rsp_status)) {
hddLog(LOGE, FL("VENDOR_ATTR_NDP_DRV_RETURN_TYPE put fail"));
goto failure;
}
/* Status return value */
if (nla_put_u32(vendor_event,
- QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE, 0x0)) {
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
+ ndp_ctx->ndi_delete_rsp_reason)) {
hddLog(LOGE, FL("VENDOR_ATTR_NDP_DRV_RETURN_VALUE put fail"));
goto failure;
}
@@ -993,9 +1004,10 @@ void hdd_ndp_session_end_handler(hdd_adapter_t *adapter)
ndp_ctx->ndp_delete_transaction_id);
hddLog(LOG2, FL("status code: %d, value: %d"),
QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE,
- true);
+ ndp_ctx->ndi_delete_rsp_status);
hddLog(LOG2, FL("Return value: %d, value: %d"),
- QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE, 0x5A);
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
+ ndp_ctx->ndi_delete_rsp_reason);
ndp_ctx->ndp_delete_transaction_id = 0;
ndp_ctx->state = NAN_DATA_NDI_DELETED_STATE;
@@ -1015,6 +1027,14 @@ failure:
* @adapter: pointer to adapter context
* @rsp_params: response parameters
*
+ * Following vendor event is sent to cfg80211:
+ * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes)
+ *
* Return: none
*/
static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter,
@@ -1023,7 +1043,7 @@ static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter,
struct sk_buff *vendor_event;
hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
struct ndp_initiator_rsp *rsp = rsp_params;
- uint32_t data_len = (3 * sizeof(uint32_t)) + (2 * sizeof(uint16_t)) +
+ uint32_t data_len = (4 * sizeof(uint32_t)) + (1 * sizeof(uint16_t)) +
NLMSG_HDRLEN + (5 * NLA_HDRLEN);
ENTER();
@@ -1052,22 +1072,22 @@ static void hdd_ndp_initiator_rsp_handler(hdd_adapter_t *adapter,
rsp->transaction_id))
goto ndp_initiator_rsp_nla_failed;
- if (nla_put_u16(vendor_event,
- QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID,
+ if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID,
rsp->ndp_instance_id))
goto ndp_initiator_rsp_nla_failed;
if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE,
- rsp->status))
+ rsp->status))
goto ndp_initiator_rsp_nla_failed;
if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
- 0))
+ rsp->reason))
goto ndp_initiator_rsp_nla_failed;
hddLog(LOG1,
- FL("NDP Initiator rsp sent, tid:%d, instance id:%d, status:%d"),
- rsp->transaction_id, rsp->ndp_instance_id, rsp->status);
+ FL("NDP Initiator rsp sent, tid:%d, instance id:%d, status:%d, reason: %d"),
+ rsp->transaction_id, rsp->ndp_instance_id, rsp->status,
+ rsp->reason);
cfg80211_vendor_event(vendor_event, GFP_KERNEL);
EXIT();
return;
@@ -1169,6 +1189,16 @@ static void hdd_ndp_peer_departed_ind_handler(hdd_adapter_t *adapter,
* @adapter: pointer to adapter context
* @ind_params: indication parameters
*
+ * Following vendor event is sent to cfg80211:
+ * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR (6 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR (IFNAMSIZ)
+ * QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO (ndp_app_info_len size)
+ * QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_RETURN_VALUE (4 bytes)
+ *
* Return: none
*/
static void hdd_ndp_confirm_ind_handler(hdd_adapter_t *adapter,
@@ -1201,9 +1231,11 @@ static void hdd_ndp_confirm_ind_handler(hdd_adapter_t *adapter,
else if (ndp_confirm->rsp_code == NDP_RESPONSE_ACCEPT)
ndp_ctx->active_ndp_sessions[idx]++;
- data_len = (3 * sizeof(uint32_t)) + VOS_MAC_ADDR_SIZE + IFNAMSIZ +
- sizeof(uint16_t) + NLMSG_HDRLEN + (7 * NLA_HDRLEN) +
- ndp_confirm->ndp_info.ndp_app_info_len;
+ data_len = (4 * sizeof(uint32_t)) + VOS_MAC_ADDR_SIZE + IFNAMSIZ +
+ NLMSG_HDRLEN + (6 * NLA_HDRLEN);
+
+ if (ndp_confirm->ndp_info.ndp_app_info_len)
+ data_len += NLA_HDRLEN + ndp_confirm->ndp_info.ndp_app_info_len;
vendor_event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, NULL,
data_len, QCA_NL80211_VENDOR_SUBCMD_NDP_INDEX,
@@ -1230,9 +1262,9 @@ static void hdd_ndp_confirm_ind_handler(hdd_adapter_t *adapter,
goto ndp_confirm_nla_failed;
if (ndp_confirm->ndp_info.ndp_app_info_len && nla_put(vendor_event,
- QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO,
- ndp_confirm->ndp_info.ndp_app_info_len,
- ndp_confirm->ndp_info.ndp_app_info))
+ QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO,
+ ndp_confirm->ndp_info.ndp_app_info_len,
+ ndp_confirm->ndp_info.ndp_app_info))
goto ndp_confirm_nla_failed;
if (nla_put_u32(vendor_event,
@@ -1240,6 +1272,11 @@ static void hdd_ndp_confirm_ind_handler(hdd_adapter_t *adapter,
ndp_confirm->rsp_code))
goto ndp_confirm_nla_failed;
+ if (nla_put_u32(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE,
+ ndp_confirm->reason_code))
+ goto ndp_confirm_nla_failed;
+
cfg80211_vendor_event(vendor_event, GFP_KERNEL);
hddLog(LOG1, FL("NDP confim sent, ndp instance id: %d, peer addr: %pM, ndp_cfg: %d, rsp_code: %d, reason_code: %d"),
ndp_confirm->ndp_instance_id,
@@ -1266,7 +1303,7 @@ ndp_confirm_nla_failed:
*
* Following vendor event is sent to cfg80211:
* QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
- * QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND (4 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR (IFNAMSIZ)
* QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID (2 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR (6 bytes)
@@ -1329,9 +1366,9 @@ static void hdd_ndp_indication_handler(hdd_adapter_t *adapter,
return;
}
- data_len = 3 * sizeof(uint32_t) + 2 * sizeof(uint16_t) +
+ data_len = 3 * sizeof(uint32_t) + sizeof(uint16_t) +
2 * VOS_MAC_ADDR_SIZE + IFNAMSIZ +
- event->ndp_info.ndp_app_info_len + 9 * NLA_HDRLEN +
+ event->ndp_info.ndp_app_info_len + 8 * NLA_HDRLEN +
NLMSG_HDRLEN;
/* notify response to the upper layer */
@@ -1402,7 +1439,7 @@ ndp_indication_nla_failed:
*
* Following vendor event is sent to cfg80211:
* QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
- * QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE (4 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE (4 bytes)
@@ -1476,8 +1513,9 @@ ndp_responder_rsp_nla_failed:
*
* Following vendor event is sent to cfg80211:
* QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE (4 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_TYPE (4 bytes)
- * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VELUE (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE (4 bytes)
* QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID (2 bytes)
*
* Return: none
@@ -1573,8 +1611,9 @@ ndp_end_rsp_nla_failed:
* @ind_params: indication parameters
*
* Following vendor event is sent to cfg80211:
- * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD = QCA_WLAN_VENDOR_ATTR_NDP_END_IND (4 bytes)
- * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY (4 * NUM_INSTANCE_ID bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD =
+ * QCA_WLAN_VENDOR_ATTR_NDP_END_IND (4 bytes)
+ * QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY (4 * no. of NDP instances)
*
* Return: none
*/
@@ -1625,7 +1664,7 @@ static void hdd_ndp_end_ind_handler(hdd_adapter_t *adapter,
end_ind->ndp_map[i].num_active_ndp_sessions;
}
- data_len = (sizeof(uint32_t)) + NLMSG_HDRLEN + (2 * NLA_HDRLEN) +
+ data_len = NLMSG_HDRLEN + (2 * NLA_HDRLEN) +
end_ind->num_ndp_ids * sizeof(*ndp_instance_array);
vendor_event = cfg80211_vendor_event_alloc(hdd_ctx->wiphy, NULL,
@@ -1658,19 +1697,6 @@ ndp_end_ind_nla_failed:
}
/**
- * hdd_ndp_schedule_update_rsp_handler() - NDP schedule update response handler
- * @adapter: pointer to adapter context
- * @rsp_params: response parameters
- *
- * Return: none
- */
-static void hdd_ndp_schedule_update_rsp_handler(
- hdd_adapter_t *adapter, void *rsp_params)
-{
- return;
-}
-
-/**
* hdd_ndp_event_handler() - ndp response and indication handler
* @adapter: adapter context
* @roam_info: pointer to roam_info structure
@@ -1686,11 +1712,11 @@ void hdd_ndp_event_handler(hdd_adapter_t *adapter,
{
if (roam_status == eCSR_ROAM_NDP_STATUS_UPDATE) {
switch (roam_result) {
- case eCSR_ROAM_RESULT_NDP_CREATE_RSP:
+ case eCSR_ROAM_RESULT_NDI_CREATE_RSP:
hdd_ndp_iface_create_rsp_handler(adapter,
&roam_info->ndp.ndi_create_params);
break;
- case eCSR_ROAM_RESULT_NDP_DELETE_RSP:
+ case eCSR_ROAM_RESULT_NDI_DELETE_RSP:
hdd_ndp_iface_delete_rsp_handler(adapter,
&roam_info->ndp.ndi_delete_params);
break;
@@ -1710,10 +1736,6 @@ void hdd_ndp_event_handler(hdd_adapter_t *adapter,
hdd_ndp_indication_handler(adapter,
&roam_info->ndp.ndp_indication_params);
break;
- case eCSR_ROAM_RESULT_NDP_SCHED_UPDATE_RSP:
- hdd_ndp_schedule_update_rsp_handler(adapter,
- &roam_info->ndp.ndp_sched_upd_rsp_params);
- break;
case eCSR_ROAM_RESULT_NDP_RESPONDER_RSP:
hdd_ndp_responder_rsp_handler(adapter,
&roam_info->ndp.ndp_responder_rsp_params);
@@ -1821,9 +1843,6 @@ static int __wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
case QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST:
ret_val = hdd_ndp_end_req_handler(hdd_ctx, tb);
break;
- case QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST:
- ret_val = hdd_ndp_schedule_req_handler(hdd_ctx, tb);
- break;
default:
hddLog(LOGE, FL("Unrecognized NDP vendor cmd %d"),
ndp_cmd_type);
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.h b/CORE/HDD/src/wlan_hdd_nan_datapath.h
index cf72826f0599..0ee46a119eac 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.h
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.h
@@ -125,11 +125,8 @@ enum qca_wlan_vendor_attr_ndp_qos {
* @QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE: NDP responder response
* @QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: NDP end request
* @QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE: NDP end response
- * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST: NDP update request
- * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_RESPONSE: NDP update response
* @QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND: NDP request indication
* @QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: NDP confirm indication
- * @QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_IND: NDP sched update indication
* @QCA_WLAN_VENDOR_ATTR_NDP_END_IND: NDP End indication
*/
enum qca_wlan_vendor_attr_ndp_sub_cmd_value {
@@ -142,12 +139,9 @@ enum qca_wlan_vendor_attr_ndp_sub_cmd_value {
QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE = 6,
QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST = 7,
QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE = 8,
- QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST = 9,
- QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_RESPONSE = 10,
- QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND = 11,
- QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 12,
- QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_IND = 13,
- QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 14
+ QCA_WLAN_VENDOR_ATTR_NDP_REQUEST_IND = 9,
+ QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 10,
+ QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 11
};
/** enum nan_datapath_state - NAN datapath states
@@ -185,6 +179,8 @@ enum nan_datapath_state {
* @ndp_key_installed: NDP security key installed
* @ndp_enc_key: NDP encryption key info
* @ndp_debug_state: debug state info
+ * @ndi_delete_rsp_reason: reason code for ndi_delete rsp
+ * @ndi_delete_rsp_status: status for ndi_delete rsp
*/
struct nan_datapath_ctx {
enum nan_datapath_state state;
@@ -196,6 +192,8 @@ struct nan_datapath_ctx {
bool ndp_key_installed;
tCsrRoamSetKey ndp_enc_key;
uint32_t ndp_debug_state;
+ uint32_t ndi_delete_rsp_reason;
+ uint32_t ndi_delete_rsp_status;
};
#ifdef WLAN_FEATURE_NAN_DATAPATH
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 9d03f00dea52..d2df4b827adc 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -1892,6 +1892,48 @@ void hdd_sendActionCnf( hdd_adapter_t *pAdapter, tANI_BOOLEAN actionSendSuccess
}
/**
+ * hdd_send_action_cnf_cb - action confirmation callback
+ * @session_id: SME session ID
+ * @tx_completed: ack status
+ *
+ * This function invokes hdd_sendActionCnf to update ack status to
+ * supplicant.
+ */
+void hdd_send_action_cnf_cb(uint32_t session_id, bool tx_completed)
+{
+ v_CONTEXT_t vos_context;
+ hdd_context_t *hdd_ctx;
+ hdd_adapter_t *adapter;
+
+ ENTER();
+
+ /* Get the global VOSS context */
+ vos_context = vos_get_global_context(VOS_MODULE_ID_SYS, NULL);
+ if (!vos_context) {
+ hddLog(LOGE, FL("Global VOS context is Null"));
+ return;
+ }
+
+ /* Get the HDD context.*/
+ hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD, vos_context);
+ if (0 != wlan_hdd_validate_context(hdd_ctx))
+ return;
+
+ adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx, session_id);
+ if (NULL == adapter) {
+ hddLog(LOGE, FL("adapter not found"));
+ return;
+ }
+
+ if (WLAN_HDD_ADAPTER_MAGIC != adapter->magic) {
+ hddLog(LOGE, FL("adapter has invalid magic"));
+ return;
+ }
+
+ hdd_sendActionCnf(adapter, tx_completed) ;
+}
+
+/**
* hdd_setP2pNoa
*
*FUNCTION:
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index 609054461c9f..af55de9950a1 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -1268,6 +1268,7 @@ typedef struct sAniSirGlobal
bool first_scan_done;
int8_t first_scan_bucket_threshold;
sir_mgmt_frame_ind_callback mgmt_frame_ind_cb;
+ sir_p2p_ack_ind_callback p2p_ack_ind_cb;
} tAniSirGlobal;
typedef enum
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 5ebf655ce88b..3a9101bd0047 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 74
+#define QWLAN_VERSION_BUILD 77
-#define QWLAN_VERSIONSTR "4.0.11.74"
+#define QWLAN_VERSIONSTR "4.0.11.77"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index bdbfe5d92cd2..e73e4754d35b 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3551,6 +3551,21 @@ struct sir_sme_mgmt_frame_cb_req {
sir_mgmt_frame_ind_callback callback;
};
+typedef void (*sir_p2p_ack_ind_callback)(uint32_t session_id,
+ bool tx_completion_status);
+
+/**
+ * struct sir_p2p_ack_ind_cb_req - Register a p2p ack ind callback req
+ * @message_type: message id
+ * @length: msg length
+ * @callback: callback for p2p ack indication
+ */
+struct sir_sme_p2p_ack_ind_cb_req {
+ uint16_t message_type;
+ uint16_t length;
+ sir_p2p_ack_ind_callback callback;
+};
+
#ifdef WLAN_FEATURE_11W
typedef struct sSirSmeUnprotMgmtFrameInd
{
@@ -7076,6 +7091,53 @@ enum ndp_end_reason_code {
};
/**
+ * enum nan_status_type - NDP status type
+ * @NDP_RSP_STATUS_SUCCESS: request was successful
+ * @NDP_RSP_STATUS_ERROR: request failed
+ */
+enum nan_status_type {
+ NDP_RSP_STATUS_SUCCESS = 0x00,
+ NDP_RSP_STATUS_ERROR = 0x01,
+};
+
+/**
+ * enum nan_reason_code - NDP command rsp reason code value
+ * @NDP_UNSUPPORTED_CONCURRENCY: Will be used in unsupported concurrency cases
+ * @NDP_NAN_DATA_IFACE_CREATE_FAILED: ndi create failed
+ * @NDP_NAN_DATA_IFACE_DELETE_FAILED: ndi delete failed
+ * @NDP_DATA_INITIATOR_REQ_FAILED: data initiator request failed
+ * @NDP_DATA_RESPONDER_REQ_FAILED: data responder request failed
+ * @NDP_INVALID_SERVICE_INSTANCE_ID: invalid service instance id
+ * @NDP_INVALID_NDP_INSTANCE_ID: invalid ndp instance id
+ * @NDP_INVALID_RSP_CODE: invalid response code in ndp responder request
+ * @NDP_INVALID_APP_INFO_LEN: invalid app info length
+ * @NDP_NMF_REQ_FAIL: OTA nan mgmt frame failure for data request
+ * @NDP_NMF_RSP_FAIL: OTA nan mgmt frame failure for data response
+ * @NDP_NMF_CNF_FAIL: OTA nan mgmt frame failure for confirm
+ * @NDP_END_FAILED: ndp end failed
+ * @NDP_NMF_END_REQ_FAIL: OTA nan mgmt frame failure for data end
+ * @NDP_VENDOR_SPECIFIC_ERROR: other vendor specific failures
+ */
+enum nan_reason_code {
+ NDP_UNSUPPORTED_CONCURRENCY = 9000,
+ NDP_NAN_DATA_IFACE_CREATE_FAILED = 9001,
+ NDP_NAN_DATA_IFACE_DELETE_FAILED = 9002,
+ NDP_DATA_INITIATOR_REQ_FAILED = 9003,
+ NDP_DATA_RESPONDER_REQ_FAILED = 9004,
+ NDP_INVALID_SERVICE_INSTANCE_ID = 9005,
+ NDP_INVALID_NDP_INSTANCE_ID = 9006,
+ NDP_INVALID_RSP_CODE = 9007,
+ NDP_INVALID_APP_INFO_LEN = 9008,
+ NDP_NMF_REQ_FAIL = 9009,
+ NDP_NMF_RSP_FAIL = 9010,
+ NDP_NMF_CNF_FAIL = 9011,
+ NDP_END_FAILED = 9012,
+ NDP_NMF_END_REQ_FAIL = 9013,
+ /* 9500 onwards vendor specific error codes */
+ NDP_VENDOR_SPECIFIC_ERROR = 9500,
+};
+
+/**
* struct ndp_cfg - ndp configuration
* @tag: unique identifier
* @ndp_cfg_len: ndp configuration length
@@ -7127,37 +7189,22 @@ struct ndp_app_info {
/**
* struct ndi_create_rsp - ndi create response params
- * @transaction_id: unique identifier
* @status: request status
* @reason: reason if any
*
*/
struct ndi_create_rsp {
- uint32_t transaction_id;
uint32_t status;
uint32_t reason;
};
/**
- * struct ndi_delete_req - ndi delete request params
- * @transaction_id: unique identifier
- * @iface_name: interface name
- *
- */
- struct ndi_delete_req {
- uint32_t transaction_id;
- char iface_name[IFACE_NAME_SIZE];
-};
-
-/**
* struct ndi_delete_rsp - ndi delete response params
- * @transaction_id: unique identifier
* @status: request status
* @reason: reason if any
*
*/
struct ndi_delete_rsp {
- uint32_t transaction_id;
uint32_t status;
uint32_t reason;
};
@@ -7199,6 +7246,7 @@ struct ndp_initiator_rsp {
uint32_t vdev_id;
uint32_t ndp_instance_id;
uint32_t status;
+ uint32_t reason;
};
/**
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 29c1f5ac2a7a..3fc70f4f59f0 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -205,7 +205,6 @@ enum eWniMsgTypes
eWNI_SME_REMAIN_ON_CHN_RSP,
eWNI_SME_REMAIN_ON_CHN_RDY_IND,
eWNI_SME_SEND_ACTION_FRAME_IND,
- eWNI_SME_ACTION_FRAME_SEND_CNF,
eWNI_SME_ABORT_REMAIN_ON_CHAN_IND,
eWNI_SME_UPDATE_NOA,
eWNI_SME_CLEAR_DFS_CHANNEL_LIST,
@@ -418,6 +417,7 @@ enum eWniMsgTypes
eWNI_SME_NDP_END_RSP,
eWNI_SME_NDP_PEER_DEPARTED_IND,
eWNI_SME_NDP_END_IND,
+ eWNI_SME_REGISTER_P2P_ACK_CB,
eWNI_SME_MSG_TYPES_END
};
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 268d7496066a..a99db6140104 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.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.
*
@@ -342,6 +342,7 @@
#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
/*
* String parameter lengths
@@ -2507,10 +2508,18 @@
#define WNI_CFG_TDLS_WMM_MODE_ENABLED_APMAX 1
#define WNI_CFG_TDLS_WMM_MODE_ENABLED_APDEF 0
-#define CFG_PARAM_MAX_NUM 298
+#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 CFG_PARAM_MAX_NUM 299
#define CFG_AP_IBUF_MAX_SIZE 246
#define CFG_AP_SBUF_MAX_SIZE 3233
-#define CFG_STA_IBUF_MAX_SIZE 241
+#define CFG_STA_IBUF_MAX_SIZE 242
#define CFG_STA_SBUF_MAX_SIZE 3199
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index d0ff9c25de60..cfeafbc91051 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.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.
*
@@ -336,6 +336,7 @@
#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
/*
* String parameter lengths
@@ -1604,8 +1605,12 @@
#define WNI_CFG_TDLS_WMM_MODE_ENABLED_STAMAX 1
#define WNI_CFG_TDLS_WMM_MODE_ENABLED_STADEF 0
-#define CFG_PARAM_MAX_NUM 298
-#define CFG_STA_IBUF_MAX_SIZE 241
+#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 CFG_PARAM_MAX_NUM 299
+#define CFG_STA_IBUF_MAX_SIZE 242
#define CFG_STA_SBUF_MAX_SIZE 3199
#define CFG_SEM_MAX_NUM 19
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index 43ecf7b3b825..f81af89754ca 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -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.
*
@@ -1899,7 +1899,13 @@ struct cgstatic cfg_static[CFG_PARAM_MAX_NUM] = {
CFG_CTL_NTF_LIM,
WNI_CFG_TDLS_WMM_MODE_ENABLED_STAMIN,
WNI_CFG_TDLS_WMM_MODE_ENABLED_STAMAX,
- WNI_CFG_TDLS_WMM_MODE_ENABLED_STADEF}
+ WNI_CFG_TDLS_WMM_MODE_ENABLED_STADEF},
+
+ {WNI_CFG_TGT_GTX_USR_CFG,
+ CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT,
+ WNI_CFG_TGT_GTX_USR_CFG_STAMIN,
+ WNI_CFG_TGT_GTX_USR_CFG_STAMAX,
+ WNI_CFG_TGT_GTX_USR_CFG_STADEF}
};
struct cfgstatic_string cfg_static_string[CFG_MAX_STATIC_STRING] = {
diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h
index 83301a4230de..5c9fc02e4a1c 100644
--- a/CORE/MAC/src/pe/include/limApi.h
+++ b/CORE/MAC/src/pe/include/limApi.h
@@ -181,10 +181,6 @@ void limPsOffloadHandleMissedBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
void
limSendHeartBeatTimeoutInd(tpAniSirGlobal pMac, tpPESession psessionEntry);
tMgmtFrmDropReason limIsPktCandidateForDrop(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U32 subType);
-bool lim_is_deauth_diassoc_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info);
-#ifdef WLAN_FEATURE_11W
-bool lim_is_assoc_req_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info);
-#endif
void limMicFailureInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
void limRoamOffloadSynchInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 6fae207129c8..068620d8d6c0 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -811,133 +811,6 @@ limCleanup(tpAniSirGlobal pMac)
} /*** end limCleanup() ***/
-
-#ifdef WLAN_FEATURE_11W
-/**
- * lim_is_assoc_req_for_drop()- function to decides to drop assoc\reassoc
- * frames.
- * @mac: pointer to global mac structure
- * @rx_pkt_info: rx packet meta information
- *
- * This function is called before enqueuing the frame to PE queue to
- * drop flooded assoc/reassoc frames getting into PE Queue.
- *
- * Return: true for dropping the frame otherwise false
- */
-
-bool lim_is_assoc_req_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info)
-{
- uint8_t session_id;
- uint16_t aid;
- tpPESession session_entry;
- tpSirMacMgmtHdr mac_hdr;
- tpDphHashNode sta_ds;
-
- mac_hdr = WDA_GET_RX_MAC_HEADER(rx_pkt_info);
- session_entry = peFindSessionByBssid(mac, mac_hdr->bssId, &session_id);
- if (!session_entry) {
- PELOG1(limLog(mac, LOG1,
- FL("session does not exist for given STA [%pM]"),
- mac_hdr->sa););
- return false;
- }
-
- sta_ds = dphLookupHashEntry(mac, mac_hdr->sa, &aid,
- &session_entry->dph.dphHashTable);
- if (!sta_ds) {
- PELOG1(limLog(mac, LOG1, FL("pStaDs is NULL")););
- return false;
- }
-
- if (!sta_ds->rmfEnabled)
- return false;
-
- if (sta_ds->pmfSaQueryState == DPH_SA_QUERY_IN_PROGRESS)
- return true;
-
- if (sta_ds->last_assoc_received_time &&
- ((vos_timer_get_system_time() -
- sta_ds->last_assoc_received_time) < 1000))
- return true;
-
- sta_ds->last_assoc_received_time = vos_timer_get_system_time();
- return false;
-}
-#endif
-/**
- * lim_is_deauth_diassoc_for_drop()- function to decides to drop deauth\diassoc
- * frames.
- * @mac: pointer to global mac structure
- * @rx_pkt_info: rx packet meta information
- *
- * This function is called before enqueuing the frame to PE queue to
- * drop flooded deauth/diassoc frames getting into PE Queue.
- *
- * Return: true for dropping the frame otherwise false
- */
-
-bool lim_is_deauth_diassoc_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info)
-{
- uint8_t session_id;
- uint16_t aid;
- tpPESession session_entry;
- tpSirMacMgmtHdr mac_hdr;
- tpDphHashNode sta_ds;
-
- mac_hdr = WDA_GET_RX_MAC_HEADER(rx_pkt_info);
- session_entry = peFindSessionByBssid(mac, mac_hdr->bssId, &session_id);
- if (!session_entry) {
- PELOG1(limLog(mac, LOG1,
- FL("session does not exist for given STA [%pM]"),
- mac_hdr->sa););
- return true;
- }
-
- sta_ds = dphLookupHashEntry(mac, mac_hdr->sa, &aid,
- &session_entry->dph.dphHashTable);
- if (!sta_ds) {
- PELOG1(limLog(mac, LOG1,FL("pStaDs is NULL")););
- return true;
- }
-
-#ifdef WLAN_FEATURE_11W
- if (session_entry->limRmfEnabled) {
- if ((WDA_GET_RX_DPU_FEEDBACK(rx_pkt_info) &
- DPU_FEEDBACK_UNPROTECTED_ERROR)) {
- /* It may be possible that deauth/diassoc frames from a
- * spoofy AP is received. So if all further
- * deauth/diassoc frmaes are dropped, then it may
- * result in lossing deauth/diassoc frames from genuine
- * AP. So process all deauth/diassoc frames with
- * a time difference of 1 sec.
- */
- if ((vos_timer_get_system_time() -
- sta_ds->last_unprot_deauth_disassoc) < 1000)
- return true;
-
- sta_ds->last_unprot_deauth_disassoc =
- vos_timer_get_system_time();
- } else {
- /* PMF enabed, Management frames are protected */
- if (sta_ds->proct_deauh_disassoc_cnt)
- return true;
- else
- sta_ds->proct_deauh_disassoc_cnt++;
- }
- }
- else
-#endif
- /* PMF disabled */
- {
- if (sta_ds->isDisassocDeauthInProgress)
- return true;
- else
- sta_ds->isDisassocDeauthInProgress++;
- }
-
- return false;
-}
-
/**
* lim_state_info_dump() - print state information of lim layer
* @buf: buffer pointer
@@ -2660,17 +2533,6 @@ tMgmtFrmDropReason limIsPktCandidateForDrop(tpAniSirGlobal pMac, tANI_U8 *pRxPac
framelen = WDA_GET_RX_PAYLOAD_LEN(pRxPacketInfo);
pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
- if ((subType == SIR_MAC_MGMT_DEAUTH ||
- subType == SIR_MAC_MGMT_DISASSOC) &&
- lim_is_deauth_diassoc_for_drop(pMac, pRxPacketInfo))
- return eMGMT_DROP_SPURIOUS_FRAME;
-
-#ifdef WLAN_FEATURE_11W
- if ((subType == SIR_MAC_MGMT_ASSOC_REQ ||
- subType == SIR_MAC_MGMT_REASSOC_REQ) &&
- lim_is_assoc_req_for_drop(pMac, pRxPacketInfo))
- return eMGMT_DROP_SPURIOUS_FRAME;
-#endif
//Drop INFRA Beacons and Probe Responses in IBSS Mode
if( (subType == SIR_MAC_MGMT_BEACON) ||
(subType == SIR_MAC_MGMT_PROBE_RSP))
diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c
index b3af825c60bd..3f124e8b3688 100644
--- a/CORE/MAC/src/pe/lim/limP2P.c
+++ b/CORE/MAC/src/pe/lim/limP2P.c
@@ -80,7 +80,6 @@ extern tSirRetStatus limSetLinkState(
tpSetLinkStateCallback callback, void *callbackArg);
static tSirRetStatus limCreateSessionForRemainOnChn(tpAniSirGlobal pMac, tPESession **ppP2pSession);
-eHalStatus limP2PActionCnf(tpAniSirGlobal pMac, tANI_U32 txCompleteSuccess);
/*------------------------------------------------------------------
*
* Below function is callback function, it is called when
@@ -603,7 +602,7 @@ void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data)
* indicaiton confirmation with status failure */
if (pMac->lim.mgmtFrameSessionId != 0xff)
{
- limP2PActionCnf(pMac, 0);
+ limP2PActionCnf(pMac, false);
}
return;
@@ -725,9 +724,9 @@ eHalStatus limP2PActionCnf(tpAniSirGlobal pMac, tANI_U32 txCompleteSuccess)
{
/* The session entry might be invalid(0xff) action confirmation received after
* remain on channel timer expired */
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- (txCompleteSuccess ? eSIR_SME_SUCCESS : eSIR_SME_SEND_ACTION_FAIL),
- pMac->lim.mgmtFrameSessionId, 0);
+ if (pMac->p2p_ack_ind_cb)
+ pMac->p2p_ack_ind_cb(pMac->lim.mgmtFrameSessionId,
+ txCompleteSuccess);
pMac->lim.mgmtFrameSessionId = 0xff;
}
@@ -769,8 +768,7 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
{
limLog(pMac, LOGE,
FL("Remain on channel is not running"));
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- eHAL_STATUS_FAILURE, pMbMsg->sessionId, 0);
+ limP2PActionCnf(pMac, false);
return;
}
smeSessionId = pMbMsg->sessionId;
@@ -807,8 +805,7 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
}
if( !isSessionActive )
{
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- eHAL_STATUS_FAILURE, pMbMsg->sessionId, 0);
+ limP2PActionCnf(pMac, false);
return;
}
}
@@ -966,8 +963,7 @@ send_action_frame:
{
limLog(pMac, LOGE,
FL("Failed to Send Action frame"));
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- eHAL_STATUS_FAILURE, pMbMsg->sessionId, 0);
+ limP2PActionCnf(pMac, false);
return;
}
}
@@ -1048,8 +1044,8 @@ send_frame1:
if (!pMbMsg->noack)
{
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- halstatus, pMbMsg->sessionId, 0);
+ limP2PActionCnf(pMac, (HAL_STATUS_SUCCESS(halstatus)) ?
+ true : false);
}
pMac->lim.mgmtFrameSessionId = 0xff;
}
@@ -1064,8 +1060,7 @@ send_frame1:
if ( ! HAL_STATUS_SUCCESS ( halstatus ) )
{
limLog( pMac, LOGE, FL("could not send action frame!" ));
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF, halstatus,
- pMbMsg->sessionId, 0);
+ limP2PActionCnf(pMac, false);
pMac->lim.mgmtFrameSessionId = 0xff;
}
else
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index ce9517ac3c57..2b7eb3f7830e 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -718,6 +718,13 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg)
fcOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(pRxPacketInfo);
fc = pHdr->fc;
+ if (pMac->sap.SapDfsInfo.is_dfs_cac_timer_running) {
+ psessionEntry = peFindSessionByBssid(pMac, pHdr->bssId, &sessionId);
+ if (psessionEntry && (VOS_STA_SAP_MODE == psessionEntry->pePersona)) {
+ limLog(pMac, LOG1, FL("CAC timer running - drop the frame"));
+ goto end;
+ }
+ }
#ifdef WLAN_DUMP_MGMTFRAMES
limLog( pMac, LOGE, FL("ProtVersion %d, Type %d, Subtype %d rateIndex=%d"),
fc.protVer, fc.type, fc.subType,
@@ -1460,6 +1467,7 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
case eWNI_SME_NDP_INITIATOR_REQ:
case eWNI_SME_NDP_RESPONDER_REQ:
case eWNI_SME_NDP_END_REQ:
+ case eWNI_SME_REGISTER_P2P_ACK_CB:
// These messages are from HDD
limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd
break;
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index 4af824983398..6df6229e675e 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -5087,9 +5087,7 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf)
* pending then indicate confirmation with status failure
*/
if (pMac->lim.mgmtFrameSessionId != 0xff) {
- limSendSmeRsp(pMac, eWNI_SME_ACTION_FRAME_SEND_CNF,
- eSIR_SME_SEND_ACTION_FAIL,
- pMac->lim.mgmtFrameSessionId, 0);
+ limP2PActionCnf(pMac, false);
pMac->lim.mgmtFrameSessionId = 0xff;
}
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index ca029e7894ce..61fb63a11f16 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -5755,6 +5755,32 @@ __limProcessSmeResetApCapsChange(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
}
/**
+ * lim_register_p2p_ack_ind_cb() - Save the p2p ack indication callback.
+ * @mac_ctx: Mac pointer
+ * @msg_buf: Msg pointer containing the callback
+ *
+ * This function is used to save the p2p ack indication callback in PE.
+ *
+ * Return: None
+ */
+static void lim_register_p2p_ack_ind_cb(tpAniSirGlobal mac_ctx,
+ uint32_t *msg_buf)
+{
+ struct sir_sme_p2p_ack_ind_cb_req *sme_req =
+ (struct sir_sme_p2p_ack_ind_cb_req *)msg_buf;
+
+ if (NULL == msg_buf) {
+ limLog(mac_ctx, LOGE, FL("msg_buf is null"));
+ return;
+ }
+ if (sme_req->callback)
+ mac_ctx->p2p_ack_ind_cb =
+ sme_req->callback;
+ else
+ limLog(mac_ctx, LOGE, FL("sme_req->callback is null"));
+}
+
+/**
* lim_register_mgmt_frame_ind_cb() - Save the Management frame
* indication callback in PE.
* @mac_ctx: Mac pointer
@@ -6194,6 +6220,9 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
case eWNI_SME_NDP_END_REQ:
lim_handle_ndp_request_message(pMac, pMsg);
break;
+ case eWNI_SME_REGISTER_P2P_ACK_CB:
+ lim_register_p2p_ack_ind_cb(pMac, pMsgBuf);
+ break;
default:
vos_mem_free((v_VOID_t*)pMsg->bodyptr);
pMsg->bodyptr = NULL;
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index e9d760975575..7c9635653462 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -672,5 +672,7 @@ void lim_update_caps_info_for_bss(tpAniSirGlobal mac_ctx,
uint16_t *caps, uint16_t bss_caps);
void lim_parse_beacon_for_tim(tpAniSirGlobal mac_ctx, uint8_t* rx_packet_info,
tpPESession session);
+eHalStatus limP2PActionCnf(tpAniSirGlobal mac_ctx,
+ uint32_t tx_complete_success);
#endif /* __LIM_UTILS_H */
diff --git a/CORE/SAP/inc/sapApi.h b/CORE/SAP/inc/sapApi.h
index dd37c2ecca1c..c3ce85ac3791 100644
--- a/CORE/SAP/inc/sapApi.h
+++ b/CORE/SAP/inc/sapApi.h
@@ -174,7 +174,6 @@ typedef enum {
eSAP_GET_WPSPBC_SESSION_EVENT, /* Event send when user call WLANSAP_getWpsSessionOverlap */
eSAP_WPS_PBC_PROBE_REQ_EVENT, /* Event send on WPS PBC probe request is received */
eSAP_REMAIN_CHAN_READY,
- eSAP_SEND_ACTION_CNF,
eSAP_DISCONNECT_ALL_P2P_CLIENT,
eSAP_MAC_TRIG_STOP_BSS_EVENT,
eSAP_UNKNOWN_STA_JOIN, /* Event send when a STA in neither white list or black list tries to associate in softap mode */
@@ -412,7 +411,7 @@ typedef struct sap_Event_s {
tSap_AssocStaListEvent sapAssocStaListEvent; /*SAP_ASSOC_STA_CALLBACK_EVENT */
tSap_GetWPSPBCSessionEvent sapGetWPSPBCSessionEvent; /*SAP_GET_WPSPBC_SESSION_EVENT */
tSap_WPSPBCProbeReqEvent sapPBCProbeReqEvent; /*eSAP_WPS_PBC_PROBE_REQ_EVENT */
- tSap_SendActionCnf sapActionCnf; /* eSAP_SEND_ACTION_CNF */
+ tSap_SendActionCnf sapActionCnf;
tSap_UnknownSTAJoinEvent sapUnknownSTAJoin; /* eSAP_UNKNOWN_STA_JOIN */
tSap_MaxAssocExceededEvent sapMaxAssocExceeded; /* eSAP_MAX_ASSOC_EXCEEDED */
tSap_DfsNolInfo sapDfsNolInfo; /*eSAP_DFS_NOL_XXX */
diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c
index 0f258668e840..71b5432b6335 100644
--- a/CORE/SAP/src/sapApiLinkCntl.c
+++ b/CORE/SAP/src/sapApiLinkCntl.c
@@ -691,16 +691,6 @@ WLANSAP_RoamCallback
eSAP_REMAIN_CHAN_READY,
(v_PVOID_t) eSAP_STATUS_SUCCESS);
break;
- case eCSR_ROAM_SEND_ACTION_CNF:
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- FL("CSR roamStatus = %s (%d)"),
- "eCSR_ROAM_SEND_ACTION_CNF", roamStatus);
- sapSignalHDDevent(sapContext, pCsrRoamInfo,
- eSAP_SEND_ACTION_CNF,
- (v_PVOID_t)((eSapStatus)((roamResult == eCSR_ROAM_RESULT_NONE)
- ? eSAP_STATUS_SUCCESS : eSAP_STATUS_FAILURE)));
- break;
-
case eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS:
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
FL("CSR roamStatus = %s (%d)"),
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 8d549448f615..1c85a2665b3e 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -2946,13 +2946,6 @@ sapSignalHDDevent
"eSAP_REMAIN_CHAN_READY");
sapApAppEvent.sapHddEventCode = eSAP_REMAIN_CHAN_READY;
break;
- case eSAP_SEND_ACTION_CNF:
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- FL("SAP event callback event = %s"),
- "eSAP_SEND_ACTION_CNF");
- sapApAppEvent.sapHddEventCode = eSAP_SEND_ACTION_CNF;
- sapApAppEvent.sapevt.sapActionCnf.actionSendSuccess = (eSapStatus)context;
- break;
case eSAP_DISCONNECT_ALL_P2P_CLIENT:
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
index eff2611613a0..f34ec615ad91 100644
--- a/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
+++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config.h
@@ -219,10 +219,6 @@
*/
#define CFG_TGT_DEFAULT_GTX_VHT_MASK 0x80200
/*
- * resv for furture use, bit 30 is used for fix tpc, bit0-3 for Power save balance
- */
-#define CFG_TGT_DEFAULT_GTX_USR_CFG 0xa
-/*
* threshold to enable GTX
*/
#define CFG_TGT_DEFAULT_GTX_PER_THRESHOLD 3
diff --git a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
index a7e1c29259e1..620dbbd0be58 100644
--- a/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
+++ b/CORE/SERVICES/COMMON/wlan_tgt_def_config_hl.h
@@ -257,11 +257,6 @@
*/
#define CFG_TGT_DEFAULT_GTX_VHT_MASK 0x80200
/*
- * resv for furture use, bit 30 is used for fix tpc, bit0-3 for Power save
- * balance
- */
-#define CFG_TGT_DEFAULT_GTX_USR_CFG 0xa
-/*
* threshold to enable GTX
*/
#define CFG_TGT_DEFAULT_GTX_PER_THRESHOLD 3
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 10a87b648316..0b0a97f8efb0 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -12086,8 +12086,15 @@ VOS_STATUS wma_switch_channel(tp_wma_handle wma, struct wma_vdev_start_req *req)
CFG_TGT_DEFAULT_GTX_HT_MASK;
intr[req->vdev_id].config.gtx_info.gtxRTMask[1] =
CFG_TGT_DEFAULT_GTX_VHT_MASK;
- intr[req->vdev_id].config.gtx_info.gtxUsrcfg =
- CFG_TGT_DEFAULT_GTX_USR_CFG;
+
+ if (wlan_cfgGetInt(pmac, WNI_CFG_TGT_GTX_USR_CFG,
+ &intr[req->vdev_id].config.gtx_info.gtxUsrcfg)
+ != eSIR_SUCCESS) {
+ WMA_LOGE("Failed to read target gtx user config");
+ intr[req->vdev_id].config.gtx_info.gtxUsrcfg =
+ WNI_CFG_TGT_GTX_USR_CFG_STADEF;
+ }
+
intr[req->vdev_id].config.gtx_info.gtxPERThreshold =
CFG_TGT_DEFAULT_GTX_PER_THRESHOLD;
intr[req->vdev_id].config.gtx_info.gtxPERMargin =
@@ -12205,7 +12212,15 @@ VOS_STATUS wma_vdev_start(tp_wma_handle wma,
intr[cmd->vdev_id].vht_capable = req->vht_capable;
intr[cmd->vdev_id].config.gtx_info.gtxRTMask[0] = CFG_TGT_DEFAULT_GTX_HT_MASK;
intr[cmd->vdev_id].config.gtx_info.gtxRTMask[1] = CFG_TGT_DEFAULT_GTX_VHT_MASK;
- intr[cmd->vdev_id].config.gtx_info.gtxUsrcfg = CFG_TGT_DEFAULT_GTX_USR_CFG;
+
+ if (wlan_cfgGetInt(pmac, WNI_CFG_TGT_GTX_USR_CFG,
+ &intr[cmd->vdev_id].config.gtx_info.gtxUsrcfg)
+ != eSIR_SUCCESS) {
+ WMA_LOGE("Failed to read target gtx user config");
+ intr[cmd->vdev_id].config.gtx_info.gtxUsrcfg =
+ WNI_CFG_TGT_GTX_USR_CFG_STADEF;
+ }
+
intr[cmd->vdev_id].config.gtx_info.gtxPERThreshold = CFG_TGT_DEFAULT_GTX_PER_THRESHOLD;
intr[cmd->vdev_id].config.gtx_info.gtxPERMargin = CFG_TGT_DEFAULT_GTX_PER_MARGIN;
intr[cmd->vdev_id].config.gtx_info.gtxTPCstep = CFG_TGT_DEFAULT_GTX_TPC_STEP;
@@ -20763,6 +20778,9 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event,
tp_wma_handle wma = (tp_wma_handle) handle;
WMI_WOW_WAKEUP_HOST_EVENTID_param_tlvs *param_buf;
WOW_EVENT_INFO_fixed_param *wake_info;
+#ifdef FEATURE_WLAN_TDLS
+ WMI_TDLS_PEER_EVENTID_param_tlvs tdls_param;
+#endif
#ifdef FEATURE_WLAN_SCAN_PNO
struct wma_txrx_node *node;
#endif
@@ -21033,6 +21051,20 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event,
WMA_LOGE(FL("wow_packet_buffer is empty"));
}
break;
+#ifdef FEATURE_WLAN_TDLS
+ case WOW_REASON_TDLS_CONN_TRACKER_EVENT:
+ if (param_buf->wow_packet_buffer) {
+ WMA_LOGD("Host woken up because of TDLS event");
+ tdls_param.fixed_param =
+ (wmi_tdls_peer_event_fixed_param *)
+ (param_buf->wow_packet_buffer + 4);
+ wma_tdls_event_handler(handle,
+ (u_int8_t *)&tdls_param, sizeof(tdls_param));
+ } else {
+ WMA_LOGD("No wow_packet_buffer present");
+ }
+ break;
+#endif
default:
break;
}
diff --git a/CORE/SERVICES/WMA/wma_nan_datapath.c b/CORE/SERVICES/WMA/wma_nan_datapath.c
index a25c6f507731..2295f9f485b5 100644
--- a/CORE/SERVICES/WMA/wma_nan_datapath.c
+++ b/CORE/SERVICES/WMA/wma_nan_datapath.c
@@ -55,18 +55,18 @@ VOS_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req)
if (NULL == ndp_req) {
WMA_LOGE(FL("Invalid ndp_req."));
- goto send_ndi_initiator_fail;
+ goto send_ndp_initiator_fail;
}
vdev_id = ndp_req->vdev_id;
vdev = wma_find_vdev_by_id(wma_handle, vdev_id);
if (!vdev) {
WMA_LOGE(FL("vdev not found for vdev id %d."), vdev_id);
- goto send_ndi_initiator_fail;
+ goto send_ndp_initiator_fail;
}
if (!WMA_IS_VDEV_IN_NDI_MODE(wma_handle->interfaces, vdev_id)) {
WMA_LOGE(FL("vdev :%d, not in NDI mode"), vdev_id);
- goto send_ndi_initiator_fail;
+ goto send_ndp_initiator_fail;
}
/*
@@ -81,7 +81,7 @@ VOS_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req)
buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
if (!buf) {
WMA_LOGE(FL("wmi_buf_alloc failed"));
- goto send_ndi_initiator_fail;
+ goto send_ndp_initiator_fail;
}
cmd = (wmi_ndp_initiator_req_fixed_param *) wmi_buf_data(buf);
WMITLV_SET_HDR(&cmd->tlv_header,
@@ -140,12 +140,12 @@ VOS_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req)
WMA_LOGE(FL("WMI_NDP_INITIATOR_REQ_CMDID failed, ret: %d"),
ret);
wmi_buf_free(buf);
- goto send_ndi_initiator_fail;
+ goto send_ndp_initiator_fail;
}
return VOS_STATUS_SUCCESS;
-send_ndi_initiator_fail:
+send_ndp_initiator_fail:
status = VOS_STATUS_E_FAILURE;
if (ndp_req) {
rsp = vos_mem_malloc(sizeof(*rsp));
@@ -158,7 +158,8 @@ send_ndi_initiator_fail:
rsp->vdev_id = ndp_req->vdev_id;
rsp->transaction_id = ndp_req->transaction_id;
rsp->ndp_instance_id = ndp_req->service_instance_id;
- rsp->status = NDP_CMD_RSP_STATUS_ERROR;
+ rsp->status = NDP_RSP_STATUS_ERROR;
+ rsp->reason = NDP_DATA_INITIATOR_REQ_FAILED;
}
} else {
/* unblock SME queue, but do not send rsp to HDD */
@@ -249,12 +250,12 @@ VOS_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle,
vdev = wma_find_vdev_by_id(wma_handle, vdev_id);
if (!vdev) {
WMA_LOGE(FL("vdev not found for vdev id %d."), vdev_id);
- goto send_ndi_responder_fail;
+ goto send_ndp_responder_fail;
}
if (!WMA_IS_VDEV_IN_NDI_MODE(wma_handle->interfaces, vdev_id)) {
WMA_LOGE(FL("vdev :$%d, not in NDI mode"), vdev_id);
- goto send_ndi_responder_fail;
+ goto send_ndp_responder_fail;
}
/*
@@ -269,7 +270,7 @@ VOS_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle,
buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
if (!buf) {
WMA_LOGE(FL("wmi_buf_alloc failed"));
- goto send_ndi_responder_fail;
+ goto send_ndp_responder_fail;
}
cmd = (wmi_ndp_responder_req_fixed_param *) wmi_buf_data(buf);
WMITLV_SET_HDR(&cmd->tlv_header,
@@ -315,14 +316,15 @@ VOS_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle,
WMA_LOGE(FL("WMI_NDP_RESPONDER_REQ_CMDID failed, ret: %d"),
ret);
wmi_buf_free(buf);
- goto send_ndi_responder_fail;
+ goto send_ndp_responder_fail;
}
return VOS_STATUS_SUCCESS;
-send_ndi_responder_fail:
+send_ndp_responder_fail:
vos_mem_zero(&rsp, sizeof(rsp));
rsp.vdev_id = req_params->vdev_id;
rsp.transaction_id = req_params->transaction_id;
- rsp.status = VOS_STATUS_E_FAILURE;
+ rsp.status = NDP_RSP_STATUS_ERROR;
+ rsp.reason = NDP_DATA_RESPONDER_REQ_FAILED;
wma_send_ndp_responder_rsp(&rsp);
return VOS_STATUS_E_FAILURE;
}
@@ -401,7 +403,8 @@ send_ndp_end_fail:
pe_msg.bodyval = true;
} else {
vos_mem_zero(end_rsp, sizeof(*end_rsp));
- end_rsp->status = NDP_CMD_RSP_STATUS_ERROR;
+ end_rsp->status = NDP_RSP_STATUS_ERROR;
+ end_rsp->reason = NDP_END_FAILED;
end_rsp->transaction_id = req->transaction_id;
pe_msg.bodyptr = end_rsp;
}
@@ -685,6 +688,7 @@ static int wma_ndp_end_response_event_handler(void *handle,
if (end_rsp->num_peers == 0) {
WMA_LOGE(FL("num_peers in NDP rsp should not be 0."));
end_rsp->status = NDP_CMD_RSP_STATUS_ERROR;
+ end_rsp->reason = NDP_END_FAILED;
goto send_ndp_end_rsp;
}
/* copy per peer response to return path buffer */
@@ -828,6 +832,7 @@ static int wma_ndp_initiator_rsp_event_handler(void *handle,
rsp->transaction_id = fixed_params->transaction_id;
rsp->ndp_instance_id = fixed_params->ndp_instance_id;
rsp->status = fixed_params->rsp_status;
+ rsp->reason = fixed_params->reason_code;
pe_msg.type = SIR_HAL_NDP_INITIATOR_RSP;
pe_msg.bodyptr = rsp;
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 8e16ac07d31a..0fe9739937d3 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -499,7 +499,6 @@ typedef enum
#endif
eCSR_ROAM_FT_START,
eCSR_ROAM_REMAIN_CHAN_READY,
- eCSR_ROAM_SEND_ACTION_CNF,
//this mean error happens before association_start or roaming_start is called.
eCSR_ROAM_SESSION_OPENED,
eCSR_ROAM_FT_REASSOC_FAILED,
@@ -644,13 +643,12 @@ typedef enum
eCSR_ROAM_RESULT_DFS_CHANSW_UPDATE_FAILURE,
eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND,
- eCSR_ROAM_RESULT_NDP_CREATE_RSP,
- eCSR_ROAM_RESULT_NDP_DELETE_RSP,
+ eCSR_ROAM_RESULT_NDI_CREATE_RSP,
+ eCSR_ROAM_RESULT_NDI_DELETE_RSP,
eCSR_ROAM_RESULT_NDP_INITIATOR_RSP,
eCSR_ROAM_RESULT_NDP_NEW_PEER_IND,
eCSR_ROAM_RESULT_NDP_CONFIRM_IND,
eCSR_ROAM_RESULT_NDP_INDICATION,
- eCSR_ROAM_RESULT_NDP_SCHED_UPDATE_RSP,
eCSR_ROAM_RESULT_NDP_RESPONDER_RSP,
eCSR_ROAM_RESULT_NDP_END_RSP,
eCSR_ROAM_RESULT_NDP_PEER_DEPARTED_IND,
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 72828571d3f4..fad5c7fe15b8 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4573,4 +4573,6 @@ 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);
+eHalStatus sme_register_p2p_ack_ind_callback(tHalHandle hal,
+ sir_p2p_ack_ind_callback callback);
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/inc/sme_nan_datapath.h b/CORE/SME/inc/sme_nan_datapath.h
index be1b285fb67d..43681c8250b7 100644
--- a/CORE/SME/inc/sme_nan_datapath.h
+++ b/CORE/SME/inc/sme_nan_datapath.h
@@ -99,13 +99,6 @@ void sme_ndp_message_processor(tpAniSirGlobal mac_ctx, uint16_t msg_type,
VOS_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx, uint32_t session_id,
tCsrRoamProfile *profile);
-void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx,
- tCsrRoamInfo *roam_info,
- eCsrRoamResult roam_result,
- tSirResultCodes status_code,
- uint32_t reason_code,
- uint32_t transaction_id);
-
void csr_roam_save_ndi_connected_info(tpAniSirGlobal mac_ctx,
tANI_U32 session_id,
tCsrRoamProfile *roam_profile,
@@ -140,16 +133,6 @@ static inline VOS_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx,
return VOS_STATUS_SUCCESS;
}
-/* Fill in ndp information in roam_info */
-static inline void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx,
- tCsrRoamInfo *roam_info,
- eCsrRoamResult roam_result,
- tSirResultCodes status_code,
- uint32_t reason_code,
- uint32_t transaction_id)
-{
-}
-
static inline void csr_roam_save_ndi_connected_info(tpAniSirGlobal mac_ctx,
tANI_U32 session_id,
tCsrRoamProfile *roam_profile,
diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c
index b45f62b3e5ae..0d3e783cbddf 100644
--- a/CORE/SME/src/QoS/sme_Qos.c
+++ b/CORE/SME/src/QoS/sme_Qos.c
@@ -2315,11 +2315,19 @@ sme_QosStatusType sme_QosInternalReleaseReq(tpAniSirGlobal pMac,
v_BOOL_t uplinkFlowsPresent = VOS_FALSE;
v_BOOL_t downlinkFlowsPresent = VOS_FALSE;
tListElem *pResult= NULL;
+
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH,
"%s: %d: invoked for flow %d",
__func__, __LINE__,
QosFlowID);
+ if (!CSR_IS_SESSION_VALID(pMac, sessionId)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: %d: Session Id:%d is invalid",
+ __func__, __LINE__, sessionId);
+ return status;
+ }
+
vos_mem_zero(&search_key, sizeof(sme_QosSearchInfo));
//set the key type & the key to be searched in the Flow List
search_key.key.QosFlowID = QosFlowID;
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 20dc67c6b2b3..20ddeffd19b6 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -6383,9 +6383,6 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
if (CSR_IS_NDI(pProfile)) {
csr_roam_update_ndp_return_params(pMac, Result,
&roamStatus, &roamResult, &roamInfo);
- csr_roam_fill_roaminfo_ndp(pMac, &roamInfo, roamResult,
- pSmeStartBssRsp->statusCode,
- 0, 0);
}
//Only tell upper layer is we start the BSS because Vista doesn't like multiple connection
@@ -6476,9 +6473,6 @@ static tANI_BOOLEAN csrRoamProcessResults( tpAniSirGlobal pMac, tSmeCmd *pComman
if (CSR_IS_NDI(pProfile)) {
csr_roam_update_ndp_return_params(pMac, Result,
&roamStatus, &roamResult, &roamInfo);
- csr_roam_fill_roaminfo_ndp(pMac, &roamInfo, roamResult,
- (pSmeStartBssRsp) ? pSmeStartBssRsp->statusCode :
- eHAL_STATUS_FAILURE, 0, 0);
}
if(Context)
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 409aaf1bc8ac..87cdfee1d7f0 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -456,7 +456,6 @@ get_eRoamCmdStatus_str(eRoamCmdStatus val)
#endif
CASE_RETURN_STR(eCSR_ROAM_FT_START);
CASE_RETURN_STR(eCSR_ROAM_REMAIN_CHAN_READY);
- CASE_RETURN_STR(eCSR_ROAM_SEND_ACTION_CNF);
CASE_RETURN_STR(eCSR_ROAM_SESSION_OPENED);
CASE_RETURN_STR(eCSR_ROAM_FT_REASSOC_FAILED);
#ifdef FEATURE_WLAN_LFR
diff --git a/CORE/SME/src/nan/nan_datapath_api.c b/CORE/SME/src/nan/nan_datapath_api.c
index 1764a916c690..47fb63846fe5 100644
--- a/CORE/SME/src/nan/nan_datapath_api.c
+++ b/CORE/SME/src/nan/nan_datapath_api.c
@@ -302,36 +302,6 @@ VOS_STATUS csr_roam_start_ndi(tpAniSirGlobal mac_ctx, uint32_t session,
}
/**
- * csr_roam_fill_roaminfo_ndp() - fill the ndi create struct inside roam info
- * @mac_ctx: Global MAC context
- * @roam_info: roam info to be updated with ndi create params
- * @roam_result: roam result to update
- * @status_code: status code to update
- * @reason_code: reason code to update
- * @transaction_id: transcation id to update
- *
- * Return: Nothing
- */
-void csr_roam_fill_roaminfo_ndp(tpAniSirGlobal mac_ctx,
- tCsrRoamInfo *roam_info,
- eCsrRoamResult roam_result,
- tSirResultCodes status_code,
- uint32_t reason_code,
- uint32_t transaction_id)
-{
- struct ndi_create_rsp *rsp_params;
-
- smsLog(mac_ctx, LOG1,
- FL("reason 0x%x, status 0x%x, transaction_id %d"),
- reason_code, status_code, transaction_id);
- rsp_params = (struct ndi_create_rsp *)
- &roam_info->ndp.ndi_create_params;
- rsp_params->reason = reason_code;
- rsp_params->status = status_code;
- rsp_params->transaction_id = transaction_id;
-}
-
-/**
* csr_roam_save_ndi_connected_info() - Save connected profile parameters
* @mac_ctx: Global MAC context
* @session_id: Session ID
@@ -404,19 +374,32 @@ 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.status =
+ NDP_RSP_STATUS_SUCCESS;
+ *roam_status = eCSR_ROAM_NDP_STATUS_UPDATE;
+ *roam_result = eCSR_ROAM_RESULT_NDI_CREATE_RSP;
+ break;
case eCsrStartBssFailure:
+ roam_info->ndp.ndi_create_params.status = NDP_RSP_STATUS_ERROR;
+ roam_info->ndp.ndi_create_params.reason =
+ NDP_NAN_DATA_IFACE_CREATE_FAILED;
*roam_status = eCSR_ROAM_NDP_STATUS_UPDATE;
- *roam_result = eCSR_ROAM_RESULT_NDP_CREATE_RSP;
+ *roam_result = eCSR_ROAM_RESULT_NDI_CREATE_RSP;
break;
case eCsrStopBssSuccess:
+ roam_info->ndp.ndi_delete_params.reason = 0;
+ roam_info->ndp.ndi_delete_params.status =
+ NDP_RSP_STATUS_SUCCESS;
*roam_status = eCSR_ROAM_NDP_STATUS_UPDATE;
- *roam_result = eCSR_ROAM_RESULT_NDP_DELETE_RSP;
- roam_info->ndp.ndi_delete_params.status = VOS_STATUS_SUCCESS;
+ *roam_result = eCSR_ROAM_RESULT_NDI_DELETE_RSP;
break;
case eCsrStopBssFailure:
+ roam_info->ndp.ndi_delete_params.status = NDP_RSP_STATUS_ERROR;
+ roam_info->ndp.ndi_delete_params.reason =
+ NDP_NAN_DATA_IFACE_DELETE_FAILED;
*roam_status = eCSR_ROAM_NDP_STATUS_UPDATE;
- *roam_result = eCSR_ROAM_RESULT_NDP_DELETE_RSP;
- roam_info->ndp.ndi_delete_params.status = VOS_STATUS_E_FAILURE;
+ *roam_result = eCSR_ROAM_RESULT_NDI_DELETE_RSP;
break;
default:
smsLog(mac_ctx, LOGE,
@@ -435,6 +418,7 @@ void csr_roam_update_ndp_return_params(tpAniSirGlobal mac_ctx,
eHalStatus csr_process_ndp_initiator_request(tpAniSirGlobal mac_ctx,
tSmeCmd *cmd)
{
+ eHalStatus status;
struct sir_sme_ndp_initiator_req *lim_msg;
uint16_t msg_len;
uint8_t *self_mac_addr = NULL;
@@ -467,7 +451,20 @@ eHalStatus csr_process_ndp_initiator_request(tpAniSirGlobal mac_ctx,
smsLog(mac_ctx, LOG1, FL("selfMac = "MAC_ADDRESS_STR),
MAC_ADDR_ARRAY(self_mac_addr));
- return palSendMBMessage(mac_ctx->hHdd, lim_msg);
+ status = palSendMBMessage(mac_ctx->hHdd, lim_msg);
+ if (!HAL_STATUS_SUCCESS(status)) {
+ /*
+ * If fail, free up the ndp_cfg and ndp_app_info
+ * allocated in sme.
+ */
+ vos_mem_free(cmd->u.initiator_req.ndp_info.ndp_app_info);
+ vos_mem_free(cmd->u.initiator_req.ndp_config.ndp_cfg);
+ cmd->u.initiator_req.ndp_info.ndp_app_info_len = 0;
+ cmd->u.initiator_req.ndp_config.ndp_cfg_len = 0;
+ cmd->u.initiator_req.ndp_config.ndp_cfg = NULL;
+ cmd->u.initiator_req.ndp_info.ndp_app_info = NULL;
+ }
+ return status;
}
/**
diff --git a/CORE/SME/src/p2p/p2p_Api.c b/CORE/SME/src/p2p/p2p_Api.c
index 7bee2bde0ce4..b86fbb841235 100644
--- a/CORE/SME/src/p2p/p2p_Api.c
+++ b/CORE/SME/src/p2p/p2p_Api.c
@@ -221,26 +221,6 @@ eHalStatus sme_remainOnChnReady( tHalHandle hHal, tANI_U8* pMsg)
return status;
}
-
-eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
- eHalStatus status = eHAL_STATUS_SUCCESS;
- tCsrRoamInfo RoamInfo;
- tSirSmeRsp* pSmeRsp = (tSirSmeRsp*)pMsg;
-
- /* forward the indication to HDD */
- //RoamInfo can be passed as NULL....todo
- csrRoamCallCallback(pMac, pSmeRsp->sessionId, &RoamInfo, 0,
- eCSR_ROAM_SEND_ACTION_CNF,
- (pSmeRsp->statusCode == eSIR_SME_SUCCESS) ? 0:
- eCSR_ROAM_RESULT_SEND_ACTION_FAIL);
- return status;
-}
-
-
-
-
eHalStatus sme_p2pOpen( tHalHandle hHal )
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 559622b0b43d..30eb9d09794d 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -96,7 +96,6 @@ extern void csr_release_roc_req_cmd(tpAniSirGlobal mac_ctx);
extern eHalStatus p2pProcessRemainOnChannelCmd(tpAniSirGlobal pMac, tSmeCmd *p2pRemainonChn);
extern eHalStatus sme_remainOnChnRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg);
extern eHalStatus sme_remainOnChnReady( tHalHandle hHal, tANI_U8* pMsg);
-extern eHalStatus sme_sendActionCnf( tHalHandle hHal, tANI_U8* pMsg);
extern eHalStatus p2pProcessNoAReq(tpAniSirGlobal pMac, tSmeCmd *pNoACmd);
static eHalStatus initSmeCmdList(tpAniSirGlobal pMac);
@@ -2927,17 +2926,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_ACTION_FRAME_SEND_CNF:
- if(pMsg->bodyptr)
- {
- status = sme_sendActionCnf(pMac, pMsg->bodyptr);
- vos_mem_free(pMsg->bodyptr);
- }
- else
- {
- smsLog( pMac, LOGE, "Empty rsp message for meas (eWNI_SME_ACTION_FRAME_SEND_CNF), 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));
@@ -7855,6 +7843,47 @@ eHalStatus sme_GetOperationChannel(tHalHandle hHal, tANI_U32 *pChannel, tANI_U8
return eHAL_STATUS_FAILURE;
}// sme_GetOperationChannel ends here
+
+/**
+ * sme_register_p2p_ack_ind_callback() - p2p ack indication callback
+ * @hal: hal pointer
+ * @callback: callback pointer to be registered
+ *
+ * This function is used to register a callback to PE for p2p ack
+ * indication
+ *
+ * Return: Success if msg is posted to PE else Failure.
+ */
+eHalStatus sme_register_p2p_ack_ind_callback(tHalHandle hal,
+ sir_p2p_ack_ind_callback callback)
+{
+ tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
+ struct sir_sme_p2p_ack_ind_cb_req *msg;
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ smsLog(mac_ctx, LOG1, FL(": ENTER"));
+
+ if (eHAL_STATUS_SUCCESS ==
+ sme_AcquireGlobalLock(&mac_ctx->sme)) {
+ msg = vos_mem_malloc(sizeof(*msg));
+ if (NULL == msg) {
+ smsLog(mac_ctx, LOGE,
+ FL("Failed to allocate memory"));
+ sme_ReleaseGlobalLock(&mac_ctx->sme);
+ return eHAL_STATUS_FAILURE;
+ }
+ vos_mem_set(msg, sizeof(*msg), 0);
+ msg->message_type = eWNI_SME_REGISTER_P2P_ACK_CB;
+ msg->length = sizeof(*msg);
+
+ msg->callback = callback;
+ status = palSendMBMessage(mac_ctx->hHdd, msg);
+ sme_ReleaseGlobalLock(&mac_ctx->sme);
+ return status;
+ }
+ return eHAL_STATUS_FAILURE;
+}
+
/**
* sme_register_mgmt_frame_ind_callback() - Register a callback for
* management frame indication to PE.
diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
index d75166d5695c..988801b74a9c 100644
--- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
+++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c
@@ -121,9 +121,6 @@ sysBbtProcessMessageCore(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tANI_U32 type,
vos_pkt_t *pVosPkt = (vos_pkt_t *)pMsg->bodyptr;
VOS_STATUS vosStatus =
WDA_DS_PeekRxPacketInfo( pVosPkt, (v_PVOID_t *)&pBd, VOS_FALSE );
- tANI_U8 sessionId;
- tpPESession psessionEntry;
- tpSirMacMgmtHdr pMacHdr;
pMac->sys.gSysBbtReceived++;
@@ -141,20 +138,7 @@ sysBbtProcessMessageCore(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tANI_U32 type,
if(type == SIR_MAC_MGMT_FRAME)
{
- if (VOS_TRUE == pMac->sap.SapDfsInfo.is_dfs_cac_timer_running)
- {
- pMacHdr = WDA_GET_RX_MAC_HEADER(pBd);
- psessionEntry = peFindSessionByBssid(pMac,
- pMacHdr->bssId, &sessionId);
- if (psessionEntry &&
- (psessionEntry->pePersona == VOS_STA_SAP_MODE))
- {
- sysLog(pMac, LOG1,
- FL("CAC timer is running, dropping the mgmt frame"));
- goto fail;
- }
- }
-
+ tpSirMacMgmtHdr mac_hdr;
/*
* Drop beacon frames in deferred state to avoid VOSS run out of
* message wrappers.
@@ -177,32 +161,32 @@ sysBbtProcessMessageCore(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tANI_U32 type,
goto fail;
}
+ mac_hdr = WDA_GET_RX_MAC_HEADER(pBd);
+ if (subType == SIR_MAC_MGMT_ASSOC_REQ) {
+ sysLog(pMac, LOG1,
+ FL("ASSOC REQ frame allowed: da: " MAC_ADDRESS_STR ", sa: " MAC_ADDRESS_STR ", bssid: " MAC_ADDRESS_STR ", Assoc Req count so far: %d\n"),
+ MAC_ADDR_ARRAY(mac_hdr->da),
+ MAC_ADDR_ARRAY(mac_hdr->sa),
+ MAC_ADDR_ARRAY(mac_hdr->bssId),
+ pMac->sys.gSysFrameCount[type][subType]);
+ }
+
if (subType == SIR_MAC_MGMT_DEAUTH)
{
- tpSirMacMgmtHdr pMacHdr = WDA_GET_RX_MAC_HEADER(pBd);
- sysLog(pMac, LOGE,
- FL("DEAUTH frame allowed: "
- "da: " MAC_ADDRESS_STR ", "
- "sa: " MAC_ADDRESS_STR ", "
- "bssid: " MAC_ADDRESS_STR ", "
- "DEAUTH count so far: %d\n"),
- MAC_ADDR_ARRAY(pMacHdr->da),
- MAC_ADDR_ARRAY(pMacHdr->sa),
- MAC_ADDR_ARRAY(pMacHdr->bssId),
+ sysLog(pMac, LOG1,
+ FL("DEAUTH frame allowed: da: " MAC_ADDRESS_STR ", sa: " MAC_ADDRESS_STR ", bssid: " MAC_ADDRESS_STR ", DEAUTH count so far: %d\n"),
+ MAC_ADDR_ARRAY(mac_hdr->da),
+ MAC_ADDR_ARRAY(mac_hdr->sa),
+ MAC_ADDR_ARRAY(mac_hdr->bssId),
pMac->sys.gSysFrameCount[type][subType]);
}
if (subType == SIR_MAC_MGMT_DISASSOC)
{
- tpSirMacMgmtHdr pMacHdr = WDA_GET_RX_MAC_HEADER(pBd);
- sysLog(pMac, LOGE,
- FL("DISASSOC frame allowed: "
- "da: " MAC_ADDRESS_STR ", "
- "sa: " MAC_ADDRESS_STR ", "
- "bssid: " MAC_ADDRESS_STR ", "
- "DISASSOC count so far: %d\n"),
- MAC_ADDR_ARRAY(pMacHdr->da),
- MAC_ADDR_ARRAY(pMacHdr->sa),
- MAC_ADDR_ARRAY(pMacHdr->bssId),
+ sysLog(pMac, LOG1,
+ FL("DISASSOC frame allowed: da: " MAC_ADDRESS_STR ", sa: " MAC_ADDRESS_STR ", bssid: " MAC_ADDRESS_STR ", DISASSOC count so far: %d\n"),
+ MAC_ADDR_ARRAY(mac_hdr->da),
+ MAC_ADDR_ARRAY(mac_hdr->sa),
+ MAC_ADDR_ARRAY(mac_hdr->bssId),
pMac->sys.gSysFrameCount[type][subType]);
}
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 7dc98daf3187..6258e6309002 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -432,7 +432,6 @@ tANI_U8* macTraceGetSmeMsgString(tANI_U16 smeMsg)
CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHN_RSP);
CASE_RETURN_STRING(eWNI_SME_REMAIN_ON_CHN_RDY_IND);
CASE_RETURN_STRING(eWNI_SME_SEND_ACTION_FRAME_IND);
- CASE_RETURN_STRING(eWNI_SME_ACTION_FRAME_SEND_CNF);
CASE_RETURN_STRING(eWNI_SME_ABORT_REMAIN_ON_CHAN_IND);
CASE_RETURN_STRING(eWNI_SME_UPDATE_NOA);
CASE_RETURN_STRING(eWNI_SME_CLEAR_DFS_CHANNEL_LIST);
@@ -585,6 +584,7 @@ tANI_U8* macTraceGetSmeMsgString(tANI_U16 smeMsg)
#ifdef WLAN_FEATURE_NAN
CASE_RETURN_STRING(eWNI_SME_NAN_EVENT);
#endif
+ CASE_RETURN_STRING(eWNI_SME_REGISTER_P2P_ACK_CB);
CASE_RETURN_STRING(eWNI_SME_MSG_TYPES_END);
default:
return((tANI_U8*)"UNKNOWN");
diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
index a15a6acba23b..b76963a44f8f 100644
--- a/CORE/VOSS/src/vos_sched.c
+++ b/CORE/VOSS/src/vos_sched.c
@@ -67,16 +67,19 @@
#define VOS_SCHED_THREAD_HEART_BEAT INFINITE
/* Milli seconds to delay SSR thread when an Entry point is Active */
#define SSR_WAIT_SLEEP_TIME 200
+#define LOAD_UNLOAD_WAIT_SLEEP_TIME 200
/* MAX iteration count to wait for Entry point to exit before
* we proceed with SSR in WD Thread
*/
#define MAX_SSR_WAIT_ITERATIONS 200
+#define MAX_LOAD_UNLOAD_WAIT_ITERATIONS 50
#define MAX_SSR_PROTECT_LOG (16)
/* Timer value for detecting thread stuck issues */
#define THREAD_STUCK_TIMER_VAL 5000 /* 5 seconds */
static atomic_t ssr_protect_entry_count;
+static atomic_t load_unload_protect_count;
struct ssr_protect {
const char* func;
@@ -2017,6 +2020,72 @@ static void vos_print_external_threads(void)
/**
+ * vos_is_load_unload_ready() - check load/unload ready
+ * @caller_func: Pointer to caller function
+ *
+ * This function will check if calling execution can call
+ * kickstart driver for load/unload
+ *
+ * Return: true if ready else false.
+ */
+bool vos_is_load_unload_ready(const char *caller_func)
+{
+ int count = MAX_LOAD_UNLOAD_WAIT_ITERATIONS;
+
+ while (count) {
+ if (!atomic_read(&load_unload_protect_count))
+ break;
+
+ if (--count) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: Waiting for load/unload active entry points to exit",
+ __func__);
+ msleep(LOAD_UNLOAD_WAIT_SLEEP_TIME);
+ }
+ }
+ /* at least one external thread is executing */
+ if (!count) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s : Thread stuck for load/unload", __func__);
+ return false;
+ }
+
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ "Allowing load/Unload for %s", caller_func);
+
+ return true;
+}
+
+
+/**
+ * vos_load_unload_protect () - Protect load/Unload
+ * @caller_func : Pointer to caller function
+ *
+ * This function will protect the atomic variable by incrementing
+ * its value
+ *
+ * Return: void
+ */
+
+void vos_load_unload_protect(const char *caller_func)
+{
+ atomic_inc(&load_unload_protect_count);
+}
+
+/**
+ * vos_load_unload_unprotect () - Unprotect load/unload
+ * @caller_func : Pointer to caller_func
+ *
+ * This function will decrement the atomic variable value
+ *
+ * Return: void
+ */
+void vos_load_unload_unprotect(const char *caller_func)
+{
+ atomic_dec(&load_unload_protect_count);
+}
+
+/**
@brief vos_ssr_protect()
This function is called to keep track of active driver entry points
diff --git a/CORE/VOSS/src/vos_sched.h b/CORE/VOSS/src/vos_sched.h
index 974e2cb0b804..733da4f60a53 100644
--- a/CORE/VOSS/src/vos_sched.h
+++ b/CORE/VOSS/src/vos_sched.h
@@ -637,6 +637,10 @@ void vos_ssr_protect_init(void);
void vos_ssr_protect(const char *caller_func);
void vos_ssr_unprotect(const char *caller_func);
bool vos_is_ssr_ready(const char *caller_func);
+
+void vos_load_unload_protect(const char *caller_func);
+void vos_load_unload_unprotect(const char *caller_func);
+bool vos_is_load_unload_ready(const char *caller_func);
int vos_get_gfp_flags(void);
void vos_wd_reset_thread_stuck_count(int thread_id);
bool vos_is_wd_thread(int thread_id);
diff --git a/Kbuild b/Kbuild
index fa92b6f43c29..b8a64f1b8d1d 100644
--- a/Kbuild
+++ b/Kbuild
@@ -138,6 +138,9 @@ ifeq ($(KERNEL_BUILD), 0)
#Flag to enable offload packets feature
CONFIG_WLAN_OFFLOAD_PACKETS := y
endif
+
+ #Flag to enable 3 port concurrency feature
+ CONFIG_QCA_WIFI_AUTOMOTIVE_CONC := y
endif
ifdef CPTCFG_QCA_CLD_WLAN
@@ -1012,6 +1015,13 @@ ifeq ($(CONFIG_SCPC_FEATURE), y)
CDEFINES += -DWLAN_SCPC_FEATURE
endif
+ifeq ($(CONFIG_QCA_WIFI_AUTOMOTIVE_CONC), y)
+CDEFINES += -DWLAN_FEATURE_MBSSID \
+ -DFEATURE_WLAN_MCC_TO_SCC_SWITCH \
+ -DFEATURE_WLAN_CH_AVOID \
+ -DFEATURE_WLAN_STA_AP_MODE_DFS_DISABLE
+endif
+
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
CDEFINES += -DCONFIG_HL_SUPPORT \
-DCONFIG_AR6320_SUPPORT \
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index 418419f15a35..51345ffb4e15 100755
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -501,10 +501,6 @@ rxhandle=2
# This allows use of CPU1-CPU3 but not CPU0 for 4 RX queues
rpsRxQueueCpuMapList=c
-# Set Thermal Power limit
-TxPower2g=10
-TxPower5g=10
-
# Remove Overlap channel restriction
gEnableOverLapCh=0