summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2015-04-03 17:03:14 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2015-04-03 17:03:14 -0700
commit1ea533e1e2d83a5be4d925dbe0d8dba461e46a5e (patch)
tree4d6ae86e056a139ea0de19a25504faa2e31a53fe
parent10d2193c8ccb9e223fcf4a512815f800063b9ffa (diff)
parent01b86eeaa9be0ca14c2197a461f0a743d4267733 (diff)
Merge "Release 4.0.10.67 QCACLD WLAN Driver."
-rw-r--r--CORE/CLD_TXRX/HTT/htt.h30
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c239
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c2
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h2
-rw-r--r--CORE/SERVICES/COMMON/dbglog.h4
-rw-r--r--CORE/SERVICES/COMMON/wlan_module_ids.h2
-rw-r--r--CORE/SERVICES/COMMON/wma_api.h3
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h18
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h45
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/WMA/wma.c9
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c1
-rw-r--r--CORE/SME/inc/sme_Api.h3
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c57
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;
+}