summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshu Agarwal <himanaga@qti.qualcomm.com>2016-08-02 18:39:25 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-08-03 14:17:19 +0530
commit9e9d6e79857b0fdb6617f95ad4fca17c21875116 (patch)
tree05b028f71d8e2cedbee3b1dccfed386aa245a8b9
parenta871186f19aec619b0acf8e478456389a1903e40 (diff)
qcacld-2.0: Correct wow wakeup counters
Correct the updation of various wow wakeup counts. Change wow_icmpv6_uc_bc_count to wow_icmpv6_count as there is no broadcast in case of ipv6. Change-Id: Iceaf1226edbf909ca3881e049c33f7d121860ef2 CRs-fixed: 1049254
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c12
-rw-r--r--CORE/MAC/inc/sirApi.h4
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.c25
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.h17
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h1
-rw-r--r--CORE/SERVICES/WMA/wma.c46
-rw-r--r--CORE/SERVICES/WMA/wma.h2
7 files changed, 72 insertions, 35 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index c0cb32393105..bbcb44a4f31a 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -10523,19 +10523,13 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx,
hddLog(LOG1, "wow_ipv6_mcast_na_stats %d",
data->wow_ipv6_mcast_na_stats);
hddLog(LOG1, "wow_icmpv4_count %d", data->wow_icmpv4_count);
- hddLog(LOG1, "wow_icmpv6_uc_bc_count %d", data->wow_icmpv6_uc_bc_count);
+ hddLog(LOG1, "wow_icmpv6_count %d", data->wow_icmpv6_count);
ipv6_rx_multicast_addr_cnt =
- data->wow_ipv6_mcast_wake_up_count +
- data->wow_ipv6_mcast_ra_stats +
- data->wow_ipv6_mcast_ns_stats +
- data->wow_ipv6_mcast_na_stats;
+ data->wow_ipv6_mcast_wake_up_count;
icmpv6_cnt =
- data->wow_icmpv6_uc_bc_count +
- data->wow_ipv6_mcast_ra_stats +
- data->wow_ipv6_mcast_ns_stats +
- data->wow_ipv6_mcast_na_stats;
+ data->wow_icmpv6_count;
rx_multicast_cnt =
data->wow_ipv4_mcast_wake_up_count +
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 2a6ca39bf1fa..5329514e18b4 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -6849,7 +6849,7 @@ struct sir_bpf_get_offload {
* @wow_ipv6_mcast_ns_stats: ipv6 multicast ns stats
* @wow_ipv6_mcast_na_stats: ipv6 multicast na stats
* @wow_icmpv4_count: ipv4 icmp packet count
- * @wow_icmpv6_uc_bc_count: ipv6 icmp packet count for unicast and broadcast
+ * @wow_icmpv6_count: ipv6 icmp packet count
*/
struct sir_wake_lock_stats {
uint32_t wow_ucast_wake_up_count;
@@ -6860,7 +6860,7 @@ struct sir_wake_lock_stats {
uint32_t wow_ipv6_mcast_ns_stats;
uint32_t wow_ipv6_mcast_na_stats;
uint32_t wow_icmpv4_count;
- uint32_t wow_icmpv6_uc_bc_count;
+ uint32_t wow_icmpv6_count;
};
/**
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
index 3c26c0fc008d..e549f1a49d6b 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
@@ -896,6 +896,31 @@ bool __adf_nbuf_data_is_ipv4_pkt(uint8_t *data)
}
/**
+ * __adf_nbuf_data_is_ipv4_mcast_pkt() - check if it is IPV4 multicast packet.
+ * @data: Pointer to IPV4 packet data buffer
+ *
+ * This func. checks whether it is a IPV4 muticast packet or not.
+ *
+ * Return: TRUE if it is a IPV4 multicast packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data)
+{
+ uint8_t *dst_addr =
+ (uint8_t *)(data + ADF_NBUF_TRAC_IPV4_DEST_ADDR_OFFSET);
+
+ /*
+ * Check first byte of the IP address and if it
+ * from 224 to 239, then it can represent multicast IP.
+ */
+ if (dst_addr[0] >= 224 && dst_addr[0] <= 239)
+ return true;
+ else
+ return false;
+}
+
+
+/**
* __adf_nbuf_data_is_ipv6_pkt() - check if it is IPV6 packet.
* @data: Pointer to IPV6 packet data buffer
*
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
index 43923d582613..7e5cb39c13c7 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
@@ -69,6 +69,7 @@
#define ADF_NBUF_DEST_MAC_OFFSET 0
#define ADF_NBUF_SRC_MAC_OFFSET 6
#define ADF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET 23
+#define ADF_NBUF_TRAC_IPV4_DEST_ADDR_OFFSET 30
#define ADF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET 20
#define ADF_NBUF_TRAC_ICMP_TYPE 1
#define ADF_NBUF_TRAC_TCP_TYPE 6
@@ -1630,6 +1631,22 @@ bool adf_nbuf_data_is_ipv4_pkt(uint8_t *data)
}
/**
+ * adf_nbuf_data_is_ipv4_mcast_pkt() - check if it is IPV4 multicast packet.
+ * @data: Pointer to IPV4 packet data buffer
+ *
+ * This func. checks whether it is a IPV4 multicast packet or not.
+ *
+ * Return: TRUE if it is a IPV4 multicast packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv4_mcast_pkt(data);
+}
+
+
+/**
* adf_nbuf_is_ipv6_pkt() - check if it is IPV6 packet.
* @buf: Pointer to IPV6 packet buffer
*
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
index d19bec300b67..5dc78bf74519 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
@@ -389,6 +389,7 @@ void __adf_nbuf_frag_info(struct sk_buff *skb, adf_os_sglist_t *sg);
void __adf_nbuf_dmamap_set_cb(__adf_os_dma_map_t dmap, void *cb, void *arg);
void __adf_nbuf_reg_trace_cb(adf_nbuf_trace_update_t cb_func_ptr);
bool __adf_nbuf_data_is_ipv4_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv4_mcast_pkt(uint8_t *data);
bool __adf_nbuf_data_is_ipv6_pkt(uint8_t *data);
bool __adf_nbuf_data_is_icmp_pkt(uint8_t *data);
bool __adf_nbuf_data_is_icmpv6_pkt(uint8_t *data);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 1114d68076be..5c4fd2b7e52f 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -20849,7 +20849,7 @@ static void wma_extscan_wow_event_callback(void *handle, void *event,
*/
static void wma_wow_wake_up_stats_display(tp_wma_handle wma)
{
- WMA_LOGA("uc %d bc %d v4_mc %d v6_mc %d ra %d ns %d na %d pno_match %d pno_complete %d gscan %d low_rssi %d rssi_breach %d icmp %d icmpv6_uc_bc %d oem %d",
+ WMA_LOGA("uc %d bc %d v4_mc %d v6_mc %d ra %d ns %d na %d pno_match %d pno_complete %d gscan %d low_rssi %d rssi_breach %d icmp %d icmpv6 %d oem %d",
wma->wow_ucast_wake_up_count,
wma->wow_bcast_wake_up_count,
wma->wow_ipv4_mcast_wake_up_count,
@@ -20863,7 +20863,7 @@ static void wma_wow_wake_up_stats_display(tp_wma_handle wma)
wma->wow_low_rssi_wake_up_count,
wma->wow_rssi_breach_wake_up_count,
wma->wow_icmpv4_count,
- wma->wow_icmpv6_uc_bc_count,
+ wma->wow_icmpv6_count,
wma->wow_oem_response_wake_up_count);
return;
@@ -20878,12 +20878,13 @@ static void wma_wow_wake_up_stats_display(tp_wma_handle wma)
*/
static void wma_wow_ipv6_mcast_stats(tp_wma_handle wma, uint8_t *data)
{
- static const uint8_t ipv6_mcast[] = {0x86, 0xDD};
+ static const uint8_t ipv6_ether_type[] = {0x86, 0xDD};
- if (!memcmp(ipv6_mcast, (data + WMA_ETHER_TYPE_OFFSET),
- sizeof(ipv6_mcast))) {
+ if (!memcmp(ipv6_ether_type, (data + WMA_ETHER_TYPE_OFFSET),
+ sizeof(ipv6_ether_type))) {
if (WMA_ICMP_V6_HEADER_TYPE ==
*(data + WMA_ICMP_V6_HEADER_OFFSET)) {
+ wma->wow_icmpv6_count++;
if (WMA_ICMP_V6_RA_TYPE ==
*(data + WMA_ICMP_V6_TYPE_OFFSET))
wma->wow_ipv6_mcast_ra_stats++;
@@ -20930,14 +20931,11 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data,
case WOW_REASON_PATTERN_MATCH_FOUND:
if (WMA_BCAST_MAC_ADDR == *data) {
wma->wow_bcast_wake_up_count++;
- if (adf_nbuf_data_is_ipv4_pkt(data) &&
- (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)))
+ if (adf_nbuf_data_is_icmp_pkt(data))
wma->wow_icmpv4_count++;
- else if (adf_nbuf_data_is_ipv6_pkt(data) &&
- (len > WMA_ICMP_V6_TYPE_OFFSET) &&
- (WMA_ICMP_V6_HEADER_TYPE ==
- *(data + WMA_ICMP_V6_HEADER_OFFSET)))
- wma->wow_icmpv6_uc_bc_count++;
+ else if ((len > WMA_ICMP_V6_TYPE_OFFSET) &&
+ adf_nbuf_data_is_icmpv6_pkt(data))
+ wma->wow_icmpv6_count++;
} else if (WMA_MCAST_IPV4_MAC_ADDR == *data) {
wma->wow_ipv4_mcast_wake_up_count++;
if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL))
@@ -20950,18 +20948,20 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data,
WMA_LOGA("ICMP_V6 data len %d", len);
} else {
wma->wow_ucast_wake_up_count++;
- if (adf_nbuf_data_is_ipv4_pkt(data) &&
- (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)))
- wma->wow_icmpv4_count++;
- else if (adf_nbuf_data_is_ipv6_pkt(data) &&
- (len > WMA_ICMP_V6_TYPE_OFFSET) &&
- (WMA_ICMP_V6_HEADER_TYPE ==
- *(data + WMA_ICMP_V6_HEADER_OFFSET)))
- wma->wow_icmpv6_uc_bc_count++;
+ if (adf_nbuf_data_is_ipv4_pkt(data)) {
+ if (adf_nbuf_data_is_ipv4_mcast_pkt(data))
+ wma->wow_ipv4_mcast_wake_up_count++;
+ if (WMA_ICMP_PROTOCOL ==
+ *(data + WMA_IPV4_PROTOCOL))
+ wma->wow_icmpv4_count++;
+ } else if ((len > WMA_ICMP_V6_TYPE_OFFSET) &&
+ adf_nbuf_data_is_icmpv6_pkt(data))
+ wma->wow_icmpv6_count++;
}
break;
case WOW_REASON_RA_MATCH:
+ wma->wow_icmpv6_count++;
wma->wow_ipv6_mcast_ra_stats++;
wma->wow_ipv6_mcast_wake_up_count++;
break;
@@ -21362,7 +21362,7 @@ static void wma_wow_parse_data_pkt_buffer(uint8_t *data,
default:
end:
WMA_LOGE("wow_buf_pkt_len: %u", buf_len);
- WMA_LOGE("Invalid Packet Type or Smaller WOW packet buffer than expected");
+ WMA_LOGE("Unknown Packet or Insufficient packet buffer");
break;
}
}
@@ -30101,8 +30101,8 @@ VOS_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats)
wake_lock_stats->wow_ipv6_mcast_na_stats =
wma_handle->wow_ipv6_mcast_na_stats;
wake_lock_stats->wow_icmpv4_count = wma_handle->wow_icmpv4_count;
- wake_lock_stats->wow_icmpv6_uc_bc_count =
- wma_handle->wow_icmpv6_uc_bc_count;
+ wake_lock_stats->wow_icmpv6_count =
+ wma_handle->wow_icmpv6_count;
return VOS_STATUS_SUCCESS;
}
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 7d05540d5c31..1af29a40e791 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -912,7 +912,7 @@ typedef struct wma_handle {
uint32_t wow_ipv6_mcast_ns_stats;
uint32_t wow_ipv6_mcast_na_stats;
uint32_t wow_icmpv4_count;
- uint32_t wow_icmpv6_uc_bc_count;
+ uint32_t wow_icmpv6_count;
uint32_t wow_oem_response_wake_up_count;
uint32_t wow_wakeup_enable_mask;
uint32_t wow_wakeup_disable_mask;