diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2015-04-03 17:03:14 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-04-03 17:03:14 -0700 |
| commit | 1ea533e1e2d83a5be4d925dbe0d8dba461e46a5e (patch) | |
| tree | 4d6ae86e056a139ea0de19a25504faa2e31a53fe | |
| parent | 10d2193c8ccb9e223fcf4a512815f800063b9ffa (diff) | |
| parent | 01b86eeaa9be0ca14c2197a461f0a743d4267733 (diff) | |
Merge "Release 4.0.10.67 QCACLD WLAN Driver."
| -rw-r--r-- | CORE/CLD_TXRX/HTT/htt.h | 30 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 239 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ipa.c | 2 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/dbglog.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wlan_module_ids.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wma_api.h | 3 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_tlv_defs.h | 18 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_unified.h | 45 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_version.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 9 | ||||
| -rw-r--r-- | CORE/SERVICES/WMI/wmi_unified.c | 1 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 3 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 57 |
15 files changed, 298 insertions, 123 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt.h b/CORE/CLD_TXRX/HTT/htt.h index a7713718d2dd..b28d30d8788f 100644 --- a/CORE/CLD_TXRX/HTT/htt.h +++ b/CORE/CLD_TXRX/HTT/htt.h @@ -1091,13 +1091,13 @@ PREPACK struct htt_tx_msdu_desc_ext_t { * bit 2 -> CCK 5.5 Mbps rate is allowed * bit 3 -> CCK 11 Mbps rate is allowed * bit 4 -> OFDM BPSK modulation, 1/2 coding rate is allowed - * bit 5 -> OFDM QPSK modulation, 1/2 coding rate is allowed - * bit 6 -> OFDM QPSK modulation, 3/4 coding rate is allowed - * bit 7 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed - * bit 8 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed - * bit 9 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed - * bit 10 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed - * bit 11 -> OFDM 64-QAM modulation, 5/6 coding rate is allowed + * bit 5 -> OFDM BPSK modulation, 3/4 coding rate is allowed + * bit 6 -> OFDM QPSK modulation, 1/2 coding rate is allowed + * bit 7 -> OFDM QPSK modulation, 3/4 coding rate is allowed + * bit 8 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed + * bit 9 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed + * bit 10 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed + * bit 11 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed * * The MCS index specification needs to be compatible with the * bandwidth mask specification. For example, a MCS index == 9 @@ -3271,14 +3271,14 @@ A_COMPILE_TIME_ASSERT(HTT_RX_IND_hdr_size_quantum, #define HTT_RX_IND_START_VALID_M 0x80000000 #define HTT_RX_IND_START_VALID_S 31 -#define HTT_RX_IND_RSSI_PRI20_S 0x000000ff -#define HTT_RX_IND_RSSI_PRI20_M 0 -#define HTT_RX_IND_RSSI_EXT20_S 0x0000ff00 -#define HTT_RX_IND_RSSI_EXT20_M 8 -#define HTT_RX_IND_RSSI_EXT40_S 0x00ff0000 -#define HTT_RX_IND_RSSI_EXT40_M 16 -#define HTT_RX_IND_RSSI_EXT80_S 0xff000000 -#define HTT_RX_IND_RSSI_EXT80_M 24 +#define HTT_RX_IND_RSSI_PRI20_M 0x000000ff +#define HTT_RX_IND_RSSI_PRI20_S 0 +#define HTT_RX_IND_RSSI_EXT20_M 0x0000ff00 +#define HTT_RX_IND_RSSI_EXT20_S 8 +#define HTT_RX_IND_RSSI_EXT40_M 0x00ff0000 +#define HTT_RX_IND_RSSI_EXT40_S 16 +#define HTT_RX_IND_RSSI_EXT80_M 0xff000000 +#define HTT_RX_IND_RSSI_EXT80_S 24 #define HTT_RX_IND_VHT_SIG_A1_M 0x00ffffff #define HTT_RX_IND_VHT_SIG_A1_S 0 diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index e8441913a948..6cc8fce6d685 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -2061,13 +2061,13 @@ static int wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, FL("Number of AP (%d)"), pReqMsg->numAp); /* Parse and fetch lost ap sample size */ - if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SIGNIFICANT_CHANGE_PARAMS_LOST_AP_SAMPLE_SIZE]) { + if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BSSID_HOTLIST_PARAMS_LOST_AP_SAMPLE_SIZE]) { hddLog(LOGE, FL("attr lost ap sample size failed")); goto fail; } pReqMsg->lost_ap_sample_size = nla_get_u32( - tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SIGNIFICANT_CHANGE_PARAMS_LOST_AP_SAMPLE_SIZE]); + tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BSSID_HOTLIST_PARAMS_LOST_AP_SAMPLE_SIZE]); hddLog(LOG1, FL("Lost ap sample size (%d)"), pReqMsg->lost_ap_sample_size); pReqMsg->sessionId = pAdapter->sessionId; @@ -2112,12 +2112,6 @@ static int wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy, tb2[QCA_WLAN_VENDOR_ATTR_EXTSCAN_AP_THRESHOLD_PARAM_RSSI_HIGH]); hddLog(VOS_TRACE_LEVEL_INFO, FL("RSSI High (%d)"), pReqMsg->ap[i].high); - - /* Parse and fetch channel */ - if (!tb2[QCA_WLAN_VENDOR_ATTR_EXTSCAN_AP_THRESHOLD_PARAM_CHANNEL]) { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr channel failed")); - goto fail; - } i++; } @@ -3837,8 +3831,6 @@ static bool put_wifi_iface_stats(tpSirWifiIfaceStat pWifiIfaceStat, average_tsf_offset = (average_tsf_offset << 32) | pWifiIfaceStat->avg_bcn_spread_offset_low ; - printk("putting interface values\n"); - if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_NUM_PEERS, num_peers) || @@ -6469,16 +6461,15 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = wiphy_priv(wiphy); struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1]; - int ret_val1 = 0; - int ret_val2 = 0; + int ret_val = 0; u32 dynamic_dtim; u16 stats_avg_factor; u32 guard_time; eHalStatus status; - if ((ret_val1 = wlan_hdd_validate_context(pHddCtx))) { + if ((ret_val = wlan_hdd_validate_context(pHddCtx))) { hddLog(LOGE, FL("HDD context is not valid")); - return ret_val1; + return ret_val; } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX, @@ -6492,6 +6483,13 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, dynamic_dtim = nla_get_u32( tb[QCA_WLAN_VENDOR_ATTR_CONFIG_DYNAMIC_DTIM]); pHddCtx->cfg_ini->enableDynamicDTIM = dynamic_dtim; + + status = sme_configure_dynamic_dtim(pHddCtx->hHal, + pAdapter->sessionId, + dynamic_dtim); + + if (eHAL_STATUS_SUCCESS != status) + ret_val = -EPERM; } if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR]) { @@ -6502,7 +6500,7 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, stats_avg_factor); if (eHAL_STATUS_SUCCESS != status) - ret_val1 = -EPERM; + ret_val = -EPERM; } @@ -6514,10 +6512,10 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, guard_time); if (eHAL_STATUS_SUCCESS != status) - ret_val2 = -EPERM; + ret_val = -EPERM; } - return (ret_val1 | ret_val2); + return ret_val; } const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = @@ -18721,8 +18719,12 @@ static void wlan_hdd_cfg80211_passpoint_match_found(void *ctx, struct wifi_passpoint_match *data) { - hdd_context_t *pHddCtx = (hdd_context_t *)ctx; + hdd_context_t *pHddCtx = ctx; struct sk_buff *skb = NULL; + uint32_t len, i, num_matches = 1, more_data = 0; + struct nlattr *nla_aps; + struct nlattr *nla_bss; + struct nlattr *nla_b; ENTER(); @@ -18732,6 +18734,12 @@ wlan_hdd_cfg80211_passpoint_match_found(void *ctx, return; } + len = sizeof(*data) + data->ap.ieLength + data->anqp_len; + if (len >= EXTSCAN_EVENT_BUF_SIZE) { + hddLog(LOGE, FL("Result exceeded NL size limitation, drop it")); + return; + } + skb = cfg80211_vendor_event_alloc(pHddCtx->wiphy, NULL, EXTSCAN_EVENT_BUF_SIZE + NLMSG_HDRLEN, @@ -18743,96 +18751,136 @@ wlan_hdd_cfg80211_passpoint_match_found(void *ctx, return; } - data->ap.channel = vos_chan_to_freq(data->ap.channel); - hddLog(LOG1, "Id (%u) ANQP length (%u)", - data->id, data->anqp_len); - hddLog(LOG1, "AP Info: Timestamp(0x%llX) Ssid (%s) " - "Bssid (" MAC_ADDRESS_STR ") " - "Channel (%u) " - "Rssi (%d) " - "RTT (%u) " - "RTT_SD (%u) " - "Bcn Period (%d) " - "Capability (0x%X) " - "IE Length (%d)", - data->ap.ts, - data->ap.ssid, - MAC_ADDR_ARRAY(data->ap.bssid), - data->ap.channel, - data->ap.rssi, - data->ap.rtt, - data->ap.rtt_sd, - data->ap.beaconPeriod, - data->ap.capability, - data->ap.ieLength); - hddLog(LOG1, "Beacon IE hexdump"); - VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - data->ap.ieData, data->ap.ieLength); - hddLog(LOG1, "ANQP blob hexdump"); - VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - data->anqp, data->anqp_len); + hddLog(LOG1, "Req Id (%u) Id (%u) ANQP length (%u) num_matches (%u)", + data->request_id, data->id, data->anqp_len, num_matches); + for (i = 0; i < num_matches; i++) { + data->ap.channel = vos_chan_to_freq(data->ap.channel); + hddLog(LOG1, "AP Info: Timestamp(0x%llX) Ssid (%s) " + "Bssid (" MAC_ADDRESS_STR ") " + "Channel (%u) " + "Rssi (%d) " + "RTT (%u) " + "RTT_SD (%u) " + "Bcn Period (%d) " + "Capability (0x%X) " + "IE Length (%d)", + data->ap.ts, + data->ap.ssid, + MAC_ADDR_ARRAY(data->ap.bssid), + data->ap.channel, + data->ap.rssi, + data->ap.rtt, + data->ap.rtt_sd, + data->ap.beaconPeriod, + data->ap.capability, + data->ap.ieLength); + hddLog(LOG1, "Beacon IE hexdump"); + VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + data->ap.ieData, data->ap.ieLength); + hddLog(LOG1, "ANQP blob hexdump"); + VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + data->anqp, data->anqp_len); + } if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID, data->request_id) || nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ID, - data->id) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP_LEN, - data->anqp_len) || - nla_put_u64(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, - data->ap.ts) || - nla_put(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID, - sizeof(data->ap.ssid), - data->ap.ssid) || - nla_put(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BSSID, - sizeof(data->ap.bssid), - data->ap.bssid) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CHANNEL, - data->ap.channel) || - nla_put_s32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RSSI, - data->ap.rssi) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT, - data->ap.rtt) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT_SD, - data->ap.rtt_sd) || - nla_put_u16(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BEACON_PERIOD, - data->ap.beaconPeriod) || - nla_put_u16(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CAPABILITY, - data->ap.capability) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_LENGTH, - data->ap.ieLength)) { + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_NETWORK_FOUND_NUM_MATCHES, + num_matches) || + nla_put_u8(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_MORE_DATA, + more_data)) { hddLog(LOGE, FL("nla put fail")); - goto nla_put_failure; + goto fail; } - if (data->ap.ieLength) { - if (nla_put(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_DATA, - data->ap.ieLength, data->ap.ieData)) - goto nla_put_failure; - } + nla_aps = nla_nest_start(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_RESULT_LIST); + if (!nla_aps) + goto fail; - if (data->anqp_len) { - if (nla_put(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP, - data->anqp_len, data->anqp)) - goto nla_put_failure; - } + for (i = 0; i < num_matches; i++) { + struct nlattr *nla_ap; + + nla_ap = nla_nest_start(skb, i); + if (!nla_ap) + goto fail; + if (nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ID, + data->id) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP_LEN, + data->anqp_len)) { + goto fail; + } + + if (data->anqp_len) + if (nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP, + data->anqp_len, data->anqp)) + goto fail; + + nla_bss = nla_nest_start(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_LIST); + if (!nla_bss) + goto fail; + + nla_b = nla_nest_start(skb, 0); + if (!nla_b) + goto fail; + + if (nla_put_u64(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, + data->ap.ts) || + nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID, + sizeof(data->ap.ssid), + data->ap.ssid) || + nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BSSID, + sizeof(data->ap.bssid), + data->ap.bssid) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CHANNEL, + data->ap.channel) || + nla_put_s32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RSSI, + data->ap.rssi) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT, + data->ap.rtt) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT_SD, + data->ap.rtt_sd) || + nla_put_u16(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BEACON_PERIOD, + data->ap.beaconPeriod) || + nla_put_u16(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CAPABILITY, + data->ap.capability) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_LENGTH, + data->ap.ieLength)) + goto fail; + + if (data->ap.ieLength) + if (nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_DATA, + data->ap.ieLength, + data->ap.ieData)) + goto fail; + + nla_nest_end(skb, nla_b); + nla_nest_end(skb, nla_bss); + nla_nest_end(skb, nla_ap); + } + nla_nest_end(skb, nla_aps); cfg80211_vendor_event(skb, GFP_KERNEL); return; -nla_put_failure: +fail: kfree_skb(skb); return; } @@ -18930,6 +18978,7 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType, case eSIR_PASSPOINT_NETWORK_FOUND_IND: wlan_hdd_cfg80211_passpoint_match_found(ctx, (struct wifi_passpoint_match *) pMsg); + break; case eSIR_EXTSCAN_HOTLIST_SSID_MATCH_IND: wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind(ctx, diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 0e4b7a18af02..0a4594ae15aa 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -3899,9 +3899,9 @@ VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) struct hdd_ipa_iface_context *iface_context = NULL; #ifdef IPA_UC_OFFLOAD struct ipa_wdi_uc_ready_params uc_ready_param; -#endif /* IPA_UC_OFFLOAD */ struct ipa_msg_meta meta; struct ipa_wlan_msg *ipa_msg; +#endif /* IPA_UC_OFFLOAD */ if (!hdd_ipa_is_enabled(hdd_ctx)) return VOS_STATUS_SUCCESS; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 663803a1645f..1ce4fec4d7ff 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 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 66 +#define QWLAN_VERSION_BUILD 67 -#define QWLAN_VERSIONSTR "4.0.10.66" +#define QWLAN_VERSIONSTR "4.0.10.67" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h index 855dd005b1da..5584698fe31a 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h @@ -64,7 +64,7 @@ printk(KERN_ERR "Assertion failed! %s:%s %s:%d\n", \ #expr, __FUNCTION__, __FILE__, __LINE__); \ dump_stack(); \ - panic("Take care of the assert first\n"); \ + BUG_ON(1); \ } \ }while(0) diff --git a/CORE/SERVICES/COMMON/dbglog.h b/CORE/SERVICES/COMMON/dbglog.h index c7ac9e963b31..327bd3c86467 100644 --- a/CORE/SERVICES/COMMON/dbglog.h +++ b/CORE/SERVICES/COMMON/dbglog.h @@ -63,8 +63,8 @@ extern "C" { #define DBGLOG_NUM_ARGS_OFFSET 26 #define DBGLOG_NUM_ARGS_MASK 0xFC000000 /* Bit 26-31 */ -#define DBGLOG_NUM_ARGS_MAX 5 /* it is limited bcoz of limitations - with Xtensa tool */ +#define DBGLOG_NUM_ARGS_MAX 9 /* it is bcoz of limitation + of corebsp MSG*() to accept max 9 arg */ #define DBGLOG_LOG_BUFFER_SIZE 1500 #define DBGLOG_DBGID_DEFINITION_LEN_MAX 90 diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h index 348085dc9b5c..8596a8c8afc3 100644 --- a/CORE/SERVICES/COMMON/wlan_module_ids.h +++ b/CORE/SERVICES/COMMON/wlan_module_ids.h @@ -86,6 +86,8 @@ typedef enum { WLAN_MODULE_UNIT_TEST, WLAN_MODULE_MLME, WLAN_MODULE_SUPPL, + WLAN_MODULE_ERE, + WLAN_MODULE_OCB, WLAN_MODULE_ID_MAX, WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX, } WLAN_MODULE_ID; diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h index ea84460cc083..f034959d76cd 100644 --- a/CORE/SERVICES/COMMON/wma_api.h +++ b/CORE/SERVICES/COMMON/wma_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -76,6 +76,7 @@ typedef enum { #ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG GEN_PARAM_DUMP_PCIE_ACCESS_LOG #endif + GEN_PARAM_DYNAMIC_DTIM } GEN_PARAM; #define VDEV_CMD 1 diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index 0ad0d817e24a..84114d44075a 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -555,6 +555,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_passpoint_event_hdr, WMITLV_TAG_STRUC_wmi_extscan_configure_hotlist_ssid_monitor_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param, } WMITLV_TAG_ID; /* @@ -766,7 +768,8 @@ typedef enum { OP(WMI_DCC_CLEAR_STATS_CMDID) \ OP(WMI_DCC_UPDATE_NDL_CMDID) \ OP(WMI_ROAM_FILTER_CMDID) \ - OP(WMI_PASSPOINT_LIST_CONFIG_CMDID) + OP(WMI_PASSPOINT_LIST_CONFIG_CMDID) \ + OP(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID) /* * IMPORTANT: Please add _ALL_ WMI Events Here. @@ -868,7 +871,8 @@ typedef enum { OP(WMI_DCC_GET_STATS_RESP_EVENTID) \ OP(WMI_DCC_UPDATE_NDL_RESP_EVENTID) \ OP(WMI_DCC_STATS_EVENTID) \ - OP(WMI_PASSPOINT_MATCH_EVENTID) + OP(WMI_PASSPOINT_MATCH_EVENTID) \ + OP(WMI_VDEV_TSF_REPORT_EVENTID) /* TLV definitions of WMI commands */ @@ -2149,6 +2153,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DCC_UPDATE_NDL_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, bssid_preferred_factor, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_FILTER_CMDID); +/* TSF timestamp action cmd */ +#define WMITLV_TABLE_WMI_VDEV_TSF_TSTAMP_ACTION_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param, wmi_vdev_tsf_tstamp_action_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID); + /************************** TLV definitions of WMI events *******************************/ /* Service Ready event */ @@ -2677,6 +2686,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DCC_UPDATE_NDL_RESP_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dcc_ndl_stats_per_channel, stats_per_channel_list, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_DCC_STATS_EVENTID); +/* Read TSF timer response event */ +#define WMITLV_TABLE_WMI_VDEV_TSF_REPORT_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param, wmi_vdev_tsf_report_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TSF_REPORT_EVENTID); + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index c5d2527a0fe3..675154afade4 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -329,6 +329,8 @@ typedef enum { WMI_VDEV_PLMREQ_START_CMDID, WMI_VDEV_PLMREQ_STOP_CMDID, + /* TSF timestamp action for specified vdev */ + WMI_VDEV_TSF_TSTAMP_ACTION_CMDID, /* peer specific commands */ @@ -825,6 +827,9 @@ typedef enum { This request is valid only for vdevs operating in soft AP or P2P GO mode */ WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID, + /* Return the TSF timestamp of specified vdev */ + WMI_VDEV_TSF_REPORT_EVENTID, + /* peer specific events */ /** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */ WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER), @@ -2064,6 +2069,15 @@ typedef struct { A_UINT32 flags; /** combined RSSI, i.e. the sum of the snr + noise floor (dBm units) */ A_INT32 rssi; + /** delta between local TSF(TSF timestamp when frame was RXd) + * and remote TSF(TSF timestamp in the IE for mgmt frame - + * beacon,proberesp for e.g). If remote TSF is not available, + * delta set to 0. + * Although tsf_delta is stored as A_UINT32, it can be negative, + * and thus would need to be sign-extended if added to a value + * larger than 32 bits. + */ + A_UINT32 tsf_delta; /* This TLV is followed by array of bytes: * // management frame buffer @@ -10498,6 +10512,37 @@ typedef struct { * END DEPRECATED */ + +/* Actions for TSF timestamp */ +typedef enum { + TSF_TSTAMP_CAPTURE_REQ = 1, + TSF_TSTAMP_CAPTURE_RESET = 2, + TSF_TSTAMP_READ_VALUE = 3, +} wmi_tsf_tstamp_action; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param */ + A_UINT32 tlv_header; + /** unique id identifying the VDEV, generated by the caller */ + A_UINT32 vdev_id; + /* action type, refer to wmi_tsf_tstamp_action */ + A_UINT32 tsf_action; +} wmi_vdev_tsf_tstamp_action_cmd_fixed_param; + +typedef struct { + /* TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param */ + A_UINT32 tlv_header; + /* VDEV identifier */ + A_UINT32 vdev_id; + /* low 32bit of tsf */ + A_UINT32 tsf_low; + /* high 32 bit of tsf */ + A_UINT32 tsf_high; +} wmi_vdev_tsf_report_event_fixed_param; + + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index 901e90e04c77..137f534213ea 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 102 +#define __WMI_REVISION_ 104 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 6fa478adb867..b8a614dd0dc6 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -12148,6 +12148,9 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, HTCDump(wma->htc_handle, PCIE_DUMP, false); break; #endif + case GEN_PARAM_DYNAMIC_DTIM: + wma->staDynamicDtim = privcmd->param_value; + break; default: WMA_LOGE("Invalid param id 0x%x", privcmd->param_id); break; @@ -29930,6 +29933,9 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, v_U8_t vdev_id) return; } + WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", + vdev_id, listen_interval); + ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, listen_interval); @@ -29939,9 +29945,6 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, v_U8_t vdev_id) vdev_id); } - WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", - vdev_id, listen_interval); - if (is_qpower_enabled) { WMA_LOGD("disable Qpower in suspend mode!"); ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index 51e996914268..f94d43e6d156 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -230,6 +230,7 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command) CASE_RETURN_STRING(WMI_VDEV_PLMREQ_START_CMDID); CASE_RETURN_STRING(WMI_VDEV_PLMREQ_STOP_CMDID); + CASE_RETURN_STRING(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID); /* peer specific commands */ diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 81ff03e395f4..b52ad8885b26 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4289,6 +4289,9 @@ bool sme_validate_sap_channel_switch(tHalHandle hal, uint8_t cc_switch_mode, uint32_t session_id); +eHalStatus sme_configure_dynamic_dtim(tHalHandle hHal, tANI_U8 session_id, + tANI_U32 dynamic_dtim); + eHalStatus sme_configure_stats_avg_factor(tHalHandle hHal, tANI_U8 session_id, tANI_U16 stats_avg_factor); diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 6c44635ecb71..a7cfa29ba79f 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -15657,3 +15657,60 @@ eHalStatus sme_update_roam_scan_hi_rssi_scan_params(tHalHandle hal_handle, return status; } +/** + * sme_configure_dynamic_dtim() - function to configure dynamic dtim + * @h_hal: SME API to enable/disable dynamic DTIM + * @session_id: session ID + * @dynamic_dtim: dynamic dtim value + * + * This function configures the guard time in firmware + * + * Return: eHalStatus + */ +eHalStatus sme_configure_dynamic_dtim(tHalHandle h_hal, tANI_U8 session_id, + tANI_U32 dynamic_dtim) +{ + vos_msg_t msg; + eHalStatus status = eHAL_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(h_hal); + wda_cli_set_cmd_t *iwcmd; + + iwcmd = vos_mem_malloc(sizeof(*iwcmd)); + if (NULL == iwcmd) { + VOS_TRACE(VOS_MODULE_ID_SME, + VOS_TRACE_LEVEL_FATAL, + "%s: vos_mem_alloc failed", __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + status = sme_AcquireGlobalLock(&pMac->sme); + + if (eHAL_STATUS_SUCCESS == status) { + + vos_mem_zero((void *)iwcmd, sizeof(*iwcmd)); + iwcmd->param_value = dynamic_dtim; + iwcmd->param_vdev_id = session_id; + iwcmd->param_id = GEN_PARAM_DYNAMIC_DTIM; + iwcmd->param_vp_dev = GEN_CMD; + msg.type = WDA_CLI_SET_CMD; + msg.reserved = 0; + msg.bodyptr = (void *)iwcmd; + + if (!VOS_IS_STATUS_SUCCESS( + vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to post SIR_HAL_CONFIG_GUARD_TIME to WDA!", + __func__); + vos_mem_free(iwcmd); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } else { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: sme_AcquireGlobalLock error!", + __func__); + vos_mem_free(iwcmd); + } + + return status; +} |
