Browse Source

qcacld-3.0: Correct wow wakeup counters

Propagation from qcacld-2.0 to qcacld-3.0.

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
Himanshu Agarwal 8 years ago
parent
commit
4574e28362
4 changed files with 31 additions and 36 deletions
  1. 4 10
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 2 2
      core/mac/inc/sir_api.h
  3. 2 2
      core/wma/inc/wma.h
  4. 23 22
      core/wma/src/wma_features.c

+ 4 - 10
core/hdd/src/wlan_hdd_cfg80211.c

@@ -6918,20 +6918,14 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx,
 	hdd_log(LOG1, "wow_ipv6_mcast_na_stats %d",
 			data->wow_ipv6_mcast_na_stats);
 	hdd_log(LOG1, "wow_icmpv4_count %d", data->wow_icmpv4_count);
-	hdd_log(LOG1, "wow_icmpv6_uc_bc_count %d",
-			data->wow_icmpv6_uc_bc_count);
+	hdd_log(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 +

+ 2 - 2
core/mac/inc/sir_api.h

@@ -5945,7 +5945,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;
@@ -5956,7 +5956,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;
 };
 
 /**

+ 2 - 2
core/wma/inc/wma.h

@@ -1267,7 +1267,7 @@ struct extended_caps {
  * @wow_ipv6_mcast_ns_stats: WoW IPV6 mcast NS packet wake up count
  * @wow_ipv6_mcast_na_stats: WoW IPV6 mcast NA packet wake up count
  * @wow_icmpv4_count: WoW ipv4 icmp packet wake up count
- * @wow_icmpv6_uc_bc_count: WoW ipv6 icmp packet count for unicast and broadcast
+ * @wow_icmpv6_count: WoW ipv6 icmp packet wake up count
  * @dual_mac_cfg: Dual mac configuration params for scan and fw mode
  *
  * @max_scan:  maximum scan requests than can be queued
@@ -1429,7 +1429,7 @@ typedef struct {
 	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;
 
 	/* OCB request contexts */

+ 23 - 22
core/wma/src/wma_features.c

@@ -2385,7 +2385,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;
@@ -2400,12 +2400,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++;
@@ -2448,14 +2449,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 (qdf_nbuf_data_is_ipv4_pkt(data) &&
-			    (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)))
+			if (qdf_nbuf_data_is_icmp_pkt(data))
 				wma->wow_icmpv4_count++;
-			else if (qdf_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) &&
+			    qdf_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))
@@ -2468,19 +2466,22 @@ 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 (qdf_nbuf_data_is_ipv4_pkt(data) &&
-			    (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)))
-				wma->wow_icmpv4_count++;
-			else if (qdf_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 (qdf_nbuf_data_is_ipv4_pkt(data)) {
+				if (qdf_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) &&
+			    qdf_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;
 
 	case WOW_REASON_NLOD:
@@ -2963,7 +2964,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;
 	}
 }
@@ -7967,8 +7968,8 @@ QDF_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 QDF_STATUS_SUCCESS;
 }