summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Patel <akashp@codeaurora.org>2014-04-01 18:20:40 -0700
committerAkash Patel <akashp@codeaurora.org>2014-04-01 18:22:53 -0700
commitb2dc8bff32e7e4714408317486206e1d402b1c83 (patch)
treea76cca7bc09225f6363667fd53ad5701100a6dff
parent209edfb429ee63bb6ace73b942686beab0d4d2d8 (diff)
parent4c21f962dd2eac150643b9d7a8b37e24551c5816 (diff)
Release 1.0.0.78 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.78 qcacld: CL 870075 - update FW interface debug log file wlan: HDD changes to process CCXPLMREQ from supplicant wlan: CCX S60 dump command to send PLM request. wlan: wext.c buffer over read fix. qcacld: Ignore TDLS discovery trigger when attempt reaches max value qcacld: Return set batch scan return value to user space Change-Id: Ib60097efb9a7196c02484c619ef90075da493d0c
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c21
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c62
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c2
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/pe/lim/limLogDump.c6
-rw-r--r--CORE/UTILS/FWLOG/dbglog_host.c105
7 files changed, 190 insertions, 12 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 8dfbfd3976c7..5b1ec92df677 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1876,7 +1876,7 @@ typedef enum
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT "gTDLSMaxDiscoveryAttempt"
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN ( 1 )
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX ( 100 )
-#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT ( 3 )
+#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT ( 5 )
#define CFG_TDLS_IDLE_TIMEOUT "gTDLSIdleTimeout"
#define CFG_TDLS_IDLE_TIMEOUT_MIN ( 2000 )
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 88102e73cd44..56309744750a 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -1752,6 +1752,10 @@ int hdd_handle_batch_scan_ioctl
if ( eHAL_STATUS_SUCCESS == halStatus )
{
+ char extra[32];
+ tANI_U8 len = 0;
+ tANI_U8 mScan = 0;
+
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"sme_SetBatchScanReq returned success halStatus %d",
halStatus);
@@ -1780,13 +1784,22 @@ int hdd_handle_batch_scan_ioctl
}
/*As per the Batch Scan Framework API we should return the MIN of
either MSCAN or the max # of scans firmware can cache*/
- ret = MIN(pReq->numberOfScansToBatch , pRsp->nScansToBatch);
+ mScan = MIN(pReq->numberOfScansToBatch , pRsp->nScansToBatch);
pAdapter->batchScanState = eHDD_BATCH_SCAN_STATE_STARTED;
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: request MSCAN %d response MSCAN %d ret %d",
- __func__, pReq->numberOfScansToBatch, pRsp->nScansToBatch, ret);
+ __func__, pReq->numberOfScansToBatch, pRsp->nScansToBatch, mScan);
+
+ len = scnprintf(extra, sizeof(extra), "%d", mScan);
+ if (copy_to_user(pPrivdata->buf, &extra, len + 1))
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: failed to copy MSCAN value to user buffer", __func__);
+ ret = -EFAULT;
+ goto exit;
+ }
}
else
{
@@ -1997,7 +2010,7 @@ static int hdd_parse_setrmcrate_command(tANI_U8 *pValue,
\brief hdd_parse_plm_cmd() - HDD Parse Plm command
This function parses the plm command passed in the format
- ESEPLMREQ<space><enable><space><dialog_token><space>
+ CCXPLMREQ<space><enable><space><dialog_token><space>
<meas_token><space><num_of_bursts><space><burst_int><space>
<measu duration><space><burst_len><space><desired_tx_pwr>
<space><multcast_addr><space><number_of_channels>
@@ -3786,7 +3799,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
}
#endif
#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
- else if (strncmp(command, "ESEPLMREQ", 9) == 0)
+ else if (strncmp(command, "CCXPLMREQ", 9) == 0)
{
tANI_U8 *value = command;
eHalStatus status = eHAL_STATUS_SUCCESS;
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index c719258bb2a7..e94369696743 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -77,8 +77,31 @@ static u8 wlan_hdd_tdls_hash_key (u8 *mac)
void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx,
hddTdlsPeer_t *curr_candidate)
{
+ if (!pHddTdlsCtx || !curr_candidate)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: either pHddTdlsCtx or curr_candidate is null",
+ __func__);
+ return;
+ }
+
if (TDLS_CTX_MAGIC != pHddTdlsCtx->magic)
{
+#ifdef QCA_WIFI_2_0
+ /* When TDLS discovery attempt for a peer reaches to max configured
+ * threshold then tdls support for that peer would be disabled and
+ * in that case, ignore discovery trigger from FW for that peer.
+ */
+ if (eTDLS_CAP_NOT_SUPPORTED == curr_candidate->tdls_support)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
+ "%s: tdls_support is marked disabled for peer: "
+ MAC_ADDRESS_STR ", ignore pre_setup_init_work",
+ __func__, MAC_ADDR_ARRAY(curr_candidate->peerMac));
+ return;
+ }
+#endif /* QCA_WIFI_2_0 */
+
pHddTdlsCtx->curr_candidate = curr_candidate;
pHddTdlsCtx->magic = TDLS_CTX_MAGIC;
@@ -1026,6 +1049,17 @@ void wlan_hdd_tdls_set_peer_link_status(hddTdlsPeer_t *curr_peer, tTDLSLinkStatu
curr_peer->link_status = status;
+#ifdef QCA_WIFI_2_0
+ /* If TDLS link status is already passed the discovery state
+ * then clear discovery attempt count
+ */
+ if (status >= eTDLS_LINK_DISCOVERED)
+ {
+ curr_peer->discovery_attempt = 0;
+ }
+#endif /* QCA_WIFI_2_0 */
+
+ return;
}
void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter,
@@ -1040,6 +1074,16 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter,
curr_peer->link_status= linkStatus;
+#ifdef QCA_WIFI_2_0
+ /* If TDLS link status is already passed the discovery state
+ * then clear discovery attempt count
+ */
+ if (linkStatus >= eTDLS_LINK_DISCOVERED)
+ {
+ curr_peer->discovery_attempt = 0;
+ }
+#endif /* QCA_WIFI_2_0 */
+
return;
}
@@ -2047,7 +2091,19 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work)
curr_peer->link_status = eTDLS_LINK_DISCOVERING;
#ifdef QCA_WIFI_2_0
- curr_peer->link_status = eTDLS_LINK_DISCOVERING;
+ if (curr_peer->discovery_attempt >=
+ pHddTdlsCtx->threshold_config.discovery_tries_n)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: discovery attempt (%d) reached max (%d) for peer "
+ MAC_ADDRESS_STR ", ignore discovery trigger from fw",
+ __func__, MAC_ADDR_ARRAY(curr_peer->peerMac),
+ curr_peer->discovery_attempt,
+ pHddTdlsCtx->threshold_config.discovery_tries_n);
+ curr_peer->tdls_support = eTDLS_CAP_NOT_SUPPORTED;
+ goto done;
+ }
+ curr_peer->link_status = eTDLS_LINK_DISCOVERING;
#endif
status = wlan_hdd_cfg80211_send_tdls_discover_req(pHddTdlsCtx->pAdapter->wdev.wiphy,
@@ -2065,6 +2121,10 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work)
pHddTdlsCtx->discovery_sent_cnt++;
+#ifdef QCA_WIFI_2_0
+ curr_peer->discovery_attempt++;
+#endif /* QCA_WIFI_2_0 */
+
mutex_lock(&pHddCtx->tdls_lock);
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index b4f43132ae36..ac3a649ac60e 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -2166,7 +2166,7 @@ static int iw_get_genie(struct net_device *dev,
hddLog(LOG1, "%s: failed to copy data to user buffer", __func__);
return -EFAULT;
}
- vos_mem_copy( extra, (v_VOID_t*)genIeBytes, wrqu->data.length);
+ vos_mem_copy( extra, (v_VOID_t*)genIeBytes, length);
wrqu->data.length = length;
hddLog(LOG1,"%s: RSN IE of %d bytes returned\n", __func__, wrqu->data.length );
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 99075fbbb1e1..df0cf6140646 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 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 77
+#define QWLAN_VERSION_BUILD 78
-#define QWLAN_VERSIONSTR "1.0.0.77"
+#define QWLAN_VERSIONSTR "1.0.0.78"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/src/pe/lim/limLogDump.c b/CORE/MAC/src/pe/lim/limLogDump.c
index 69b89ec90323..da093b5a79be 100644
--- a/CORE/MAC/src/pe/lim/limLogDump.c
+++ b/CORE/MAC/src/pe/lim/limLogDump.c
@@ -2391,7 +2391,7 @@ dump_lim_get_pkts_rcvd_per_rssi_values( tpAniSirGlobal pMac, tANI_U32 arg1, tANI
#endif
-#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD)
+#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
static char *
dump_send_plm_start(tpAniSirGlobal pMac, tANI_U32 arg1, tANI_U32 arg2,
tANI_U32 arg3, tANI_U32 arg4, char *p)
@@ -2529,8 +2529,8 @@ static tDumpFuncEntry limMenuDumpTable[] = {
#ifndef QCA_WIFI_2_0
{371, "PE.LIM: MAS RX stats MAC eff <MAC eff in percentage>", dump_limRateInfoBasedOnMacEff},
#endif /* QCA_WIFI_2_0 */
-#if defined(FEATURE_WLAN_CCX) && defined(FEATURE_WLAN_CCX_UPLOAD)
- {376, "PE.LIM: send PLM start command Usage: iwpriv wlan0 376", dump_send_plm_start },
+#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
+ {372, "PE.LIM: send PLM start command Usage: iwpriv wlan0 372", dump_send_plm_start },
#endif
};
diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
index f3ac6f46b1c0..13e16ff5a9d5 100644
--- a/CORE/UTILS/FWLOG/dbglog_host.c
+++ b/CORE/UTILS/FWLOG/dbglog_host.c
@@ -140,6 +140,8 @@ const char *dbglog_get_module_str(A_UINT32 module_id)
return "TDLS";
case WLAN_MODULE_P2P:
return "P2P";
+ case WLAN_MODULE_WOW:
+ return "WoW";
default:
return "UNKNOWN";
}
@@ -955,6 +957,16 @@ char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] =
"WOW_INIT",
"WOW_RECV_MAGIC_PKT",
"WOW_RECV_BITMAP_PATTERN",
+ "WOW_AP_VDEV_DISALLOW",
+ "WOW_STA_VDEV_DISALLOW",
+ "WOW_P2PGO_VDEV_DISALLOW",
+ "WOW_NS_OFLD_ENABLE",
+ "WOW_ARP_OFLD_ENABLE",
+ "WOW_NS_ARP_OFLD_DISABLE",
+ "WOW_NS_RECEIVED",
+ "WOW_NS_REPLIED",
+ "WOW_ARP_RECEIVED",
+ "WOW_ARP_REPLIED",
"WOW_DBGID_DEFINITION_END",
},
{ /* WAL VDEV */
@@ -3224,6 +3236,98 @@ void dbglog_netlink_deinit(wmi_unified_t wmi_handle)
netlink_kernel_release(nl_sk);
}
+A_BOOL
+dbglog_wow_print_handler(
+ A_UINT32 mod_id,
+ A_UINT16 vap_id,
+ A_UINT32 dbg_id,
+ A_UINT32 timestamp,
+ A_UINT16 numargs,
+ A_UINT32 *args)
+{
+
+ switch (dbg_id) {
+ case WOW_NS_OFLD_ENABLE:
+ if (4 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "Enable NS offload, for sender %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\
+ :%02x%02x:%02x%02x:%02x%02x",
+ *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
+ *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
+ *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
+ *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ case WOW_ARP_OFLD_ENABLE:
+ if (1 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "Enable ARP offload, for sender %d.%d.%d.%d",
+ *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ case WOW_NS_ARP_OFLD_DISABLE:
+ if (0 == numargs) {
+ dbglog_printf(timestamp, vap_id, "disable NS/ARP offload");
+ } else {
+ return FALSE;
+ }
+ break;
+ case WOW_NS_RECEIVED:
+ if (4 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "NS requested from %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\
+ :%02x%02x:%02x%02x:%02x%02x",
+ *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
+ *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
+ *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
+ *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ case WOW_NS_REPLIED:
+ if (4 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "NS replied to %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\
+ :%02x%02x:%02x%02x:%02x%02x",
+ *(A_UINT8*)&args[0], *((A_UINT8*)&args[0]+1), *((A_UINT8*)&args[0]+2), *((A_UINT8*)&args[0]+3),
+ *(A_UINT8*)&args[1], *((A_UINT8*)&args[1]+1), *((A_UINT8*)&args[1]+2), *((A_UINT8*)&args[1]+3),
+ *(A_UINT8*)&args[2], *((A_UINT8*)&args[2]+1), *((A_UINT8*)&args[2]+2), *((A_UINT8*)&args[2]+3),
+ *(A_UINT8*)&args[3], *((A_UINT8*)&args[3]+1), *((A_UINT8*)&args[3]+2), *((A_UINT8*)&args[3]+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ case WOW_ARP_RECEIVED:
+ if (1 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "ARP requested from %d.%d.%d.%d",
+ *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ break;
+ case WOW_ARP_REPLIED:
+ if (1 == numargs) {
+ dbglog_printf(timestamp, vap_id,
+ "ARP replied to %d.%d.%d.%d",
+ *(A_UINT8*)args, *((A_UINT8*)args+1), *((A_UINT8*)args+2), *((A_UINT8*)args+3));
+ } else {
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
int dbglog_parser_type_init(wmi_unified_t wmi_handle, int type)
{
if(type >= DBGLOG_PROCESS_MAX){
@@ -3249,6 +3353,7 @@ dbglog_init(wmi_unified_t wmi_handle)
dbglog_reg_modprint(WLAN_MODULE_ANI, dbglog_ani_print_handler);
dbglog_reg_modprint(WLAN_MODULE_COEX, dbglog_coex_print_handler);
dbglog_reg_modprint(WLAN_MODULE_BEACON,dbglog_beacon_print_handler);
+ dbglog_reg_modprint(WLAN_MODULE_WOW, dbglog_wow_print_handler);
dbglog_reg_modprint(WLAN_MODULE_DATA_TXRX,dbglog_data_txrx_print_handler);
dbglog_reg_modprint(WLAN_MODULE_STA_SMPS, dbglog_smps_print_handler);
dbglog_reg_modprint(WLAN_MODULE_P2P, dbglog_p2p_print_handler);