diff options
| author | Himanshu Agarwal <himanaga@qti.qualcomm.com> | 2016-08-02 18:39:25 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-08-03 14:17:19 +0530 |
| commit | 9e9d6e79857b0fdb6617f95ad4fca17c21875116 (patch) | |
| tree | 05b028f71d8e2cedbee3b1dccfed386aa245a8b9 | |
| parent | a871186f19aec619b0acf8e478456389a1903e40 (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.c | 12 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_nbuf.c | 25 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_nbuf.h | 17 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 46 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 2 |
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; |
