diff options
| author | Akash Patel <akashp@codeaurora.org> | 2014-04-01 18:20:40 -0700 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2014-04-01 18:22:53 -0700 |
| commit | b2dc8bff32e7e4714408317486206e1d402b1c83 (patch) | |
| tree | a76cca7bc09225f6363667fd53ad5701100a6dff | |
| parent | 209edfb429ee63bb6ace73b942686beab0d4d2d8 (diff) | |
| parent | 4c21f962dd2eac150643b9d7a8b37e24551c5816 (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.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 21 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tdls.c | 62 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 2 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limLogDump.c | 6 | ||||
| -rw-r--r-- | CORE/UTILS/FWLOG/dbglog_host.c | 105 |
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); |
