summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGupta, Kapil <kapgupta@qti.qualcomm.com>2016-06-14 22:03:34 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-06-15 16:01:51 +0530
commit7df6f9c3302f8da9ab62a753f9e29945b513c19d (patch)
tree8b5ea13a51d95a9785fd506406106a103c045299
parenta6ec2567d2b7464f301f9d864fad990888798db4 (diff)
qcacld-2.0: Add support to print local time in proto trace buffer
To relate logcat messages and driver logs in bugreport both should have same time format. Add changes to print local time while printing proto trace buffer. Change-Id: Ib3210394ba4b43045edfcdbcf0a63da5c2ecd458 CRs-Fixed: 1025909
-rw-r--r--CORE/HDD/inc/wlan_hdd_tx_rx.h8
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c82
-rw-r--r--CORE/VOSS/src/vos_packet.c41
4 files changed, 117 insertions, 18 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_tx_rx.h b/CORE/HDD/inc/wlan_hdd_tx_rx.h
index 77d61f6e1b87..ecff8e20c566 100644
--- a/CORE/HDD/inc/wlan_hdd_tx_rx.h
+++ b/CORE/HDD/inc/wlan_hdd_tx_rx.h
@@ -80,6 +80,12 @@
#define HDD_BUG_REPORT_MIN_COUNT 3
#define HDD_BUG_REPORT_MIN_TIME 300000 /* 5 minutes */
+
+#define TX_PATH 1
+#define RX_PATH 0
+#define STA 1
+#define AP 0
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -259,4 +265,6 @@ const char *hdd_action_type_to_string(enum netif_action_type action);
void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
enum netif_action_type action, enum netif_reason_type reason);
+void hdd_dhcp_pkt_trace_buf_update(struct sk_buff *skb, int is_transmission,
+ int is_sta);
#endif // end #if !defined( WLAN_HDD_TX_RX_H )
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index abccb6fe25c6..e277a127232d 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -371,7 +371,7 @@ int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
else if (VOS_PKT_TRAC_TYPE_DHCP & proto_type)
{
- vos_pkt_trace_buf_update("HA:T:DHC");
+ hdd_dhcp_pkt_trace_buf_update(skb, TX_PATH, AP);
}
}
#endif /* QCA_PKT_PROTO_TRACE */
@@ -848,7 +848,7 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext,
if (VOS_PKT_TRAC_TYPE_EAPOL & proto_type)
vos_pkt_trace_buf_update("HA:R:EPL");
else if (VOS_PKT_TRAC_TYPE_DHCP & proto_type)
- vos_pkt_trace_buf_update("HA:R:DHC");
+ hdd_dhcp_pkt_trace_buf_update(skb, RX_PATH, AP);
}
#endif /* QCA_PKT_PROTO_TRACE */
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index f5df394f8927..9a8e0298b008 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -617,7 +617,7 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
else if (VOS_PKT_TRAC_TYPE_DHCP & proto_type)
{
- vos_pkt_trace_buf_update("ST:T:DHC");
+ hdd_dhcp_pkt_trace_buf_update(skb, TX_PATH, STA);
}
}
#endif /* QCA_PKT_PROTO_TRACE */
@@ -1241,7 +1241,7 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext,
if (VOS_PKT_TRAC_TYPE_EAPOL & proto_type)
vos_pkt_trace_buf_update("ST:R:EPL");
else if (VOS_PKT_TRAC_TYPE_DHCP & proto_type)
- vos_pkt_trace_buf_update("ST:R:DHC");
+ hdd_dhcp_pkt_trace_buf_update(skb, RX_PATH, STA);
}
#endif /* QCA_PKT_PROTO_TRACE */
@@ -1544,3 +1544,81 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
}
+/**
+ * hdd_dhcp_pkt_trace_buf_update() - Update protocol trace buffer with DHCP
+ * packet info.
+ * @skb: skb pointer
+ * @is_transmission: packet is in transmission or in rx
+ * @is_sta: tx/rx by STA mode
+ *
+ * Return: None
+ */
+void hdd_dhcp_pkt_trace_buf_update (struct sk_buff *skb, int is_transmission,
+ int is_sta)
+{
+ char tbuf[20];
+ if ((skb->data[DHCP_OPTION53_OFFSET] == DHCP_OPTION53) &&
+ (skb->data[DHCP_OPTION53_LENGTH_OFFSET] ==
+ DHCP_OPTION53_LENGTH)) {
+
+ switch (skb->data[DHCP_OPTION53_STATUS_OFFSET]) {
+ case DHCPDISCOVER:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP DIS",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPREQUEST:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP REQ",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPOFFER:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP OFF",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPACK:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP ACK",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPNAK:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP NAK",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPRELEASE:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP REL",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPINFORM:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP INF",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ case DHCPDECLINE:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP DELC",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ default:
+ snprintf(tbuf, sizeof(tbuf),
+ "%s:%s:DHCP INVL",
+ is_sta?"ST":"HA",
+ is_transmission?"T":"R");
+ break;
+ }
+ vos_pkt_trace_buf_update(tbuf);
+ VOS_TRACE(VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_INFO,
+ FL("%s"), tbuf);
+ }
+}
diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c
index 21fdc39bf64b..3844fbfd0975 100644
--- a/CORE/VOSS/src/vos_packet.c
+++ b/CORE/VOSS/src/vos_packet.c
@@ -48,6 +48,7 @@
#include "adf_nbuf.h"
#include "vos_memory.h"
#include "adf_os_mem.h"
+#include <linux/rtc.h>
/* Protocol specific packet tracking feature */
#define VOS_PKT_TRAC_ETH_TYPE_OFFSET 12
@@ -57,7 +58,7 @@
#define VOS_PKT_TRAC_DHCP_CLI_PORT 68
#define VOS_PKT_TRAC_EAPOL_ETH_TYPE 0x888E
#ifdef QCA_PKT_PROTO_TRACE
-#define VOS_PKT_TRAC_MAX_STRING_LEN 12
+#define VOS_PKT_TRAC_MAX_STRING_LEN 40
#define VOS_PKT_TRAC_MAX_TRACE_BUF 50
#define VOS_PKT_TRAC_MAX_STRING_BUF 64
@@ -65,7 +66,8 @@
typedef struct
{
v_U32_t order;
- v_TIME_t event_time;
+ v_TIME_t event_sec_time;
+ v_TIME_t event_msec_time;
char event_string[VOS_PKT_TRAC_MAX_STRING_LEN];
} vos_pkt_proto_trace_t;
@@ -308,19 +310,19 @@ void vos_pkt_trace_buf_update
)
{
v_U32_t slot;
+ struct timeval tv;
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
"%s %d, %s", __func__, __LINE__, event_string);
spin_lock_bh(&trace_buffer_lock);
slot = trace_buffer_order % VOS_PKT_TRAC_MAX_TRACE_BUF;
trace_buffer[slot].order = trace_buffer_order;
- trace_buffer[slot].event_time = vos_timer_get_system_time();
- vos_mem_zero(trace_buffer[slot].event_string,
- sizeof(trace_buffer[slot].event_string));
- vos_mem_copy(trace_buffer[slot].event_string,
- event_string,
- (VOS_PKT_TRAC_MAX_STRING_LEN < strlen(event_string))?
- VOS_PKT_TRAC_MAX_STRING_LEN:strlen(event_string));
+ do_gettimeofday(&tv);
+ trace_buffer[slot].event_sec_time = tv.tv_sec;
+ trace_buffer[slot].event_msec_time = tv.tv_usec;
+ strncpy(trace_buffer[slot].event_string, event_string,
+ (sizeof(trace_buffer[slot].event_string) < strlen(event_string)?
+ sizeof(trace_buffer[slot].event_string) : strlen(event_string)));
trace_buffer_order++;
spin_unlock_bh(&trace_buffer_lock);
@@ -336,21 +338,28 @@ void vos_pkt_trace_buf_dump
)
{
v_U32_t slot, idx;
+ struct rtc_time tm;
+ unsigned long local_time;
spin_lock_bh(&trace_buffer_lock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
"PACKET TRACE DUMP START Current Timestamp %u",
(unsigned int)vos_timer_get_system_time());
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "ORDER : TIME : EVT");
+ "ORDER : RTC TIME : EVT");
+
if (VOS_PKT_TRAC_MAX_TRACE_BUF > trace_buffer_order)
{
for (slot = 0 ; slot < trace_buffer_order; slot++)
{
+ local_time = (u32)(trace_buffer[slot].event_sec_time -
+ (sys_tz.tz_minuteswest * 60));
+ rtc_time_to_tm(local_time, &tm);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%5d :%12u : %s",
+ "%5d : [%02d:%02d:%02d.%06lu] : %s",
trace_buffer[slot].order,
- (unsigned int)trace_buffer[slot].event_time,
+ tm.tm_hour, tm.tm_min, tm.tm_sec,
+ trace_buffer[slot].event_sec_time,
trace_buffer[slot].event_string);
}
}
@@ -359,10 +368,14 @@ void vos_pkt_trace_buf_dump
for (idx = 0 ; idx < VOS_PKT_TRAC_MAX_TRACE_BUF; idx++)
{
slot = (trace_buffer_order + idx) % VOS_PKT_TRAC_MAX_TRACE_BUF;
+ local_time = (u32)(trace_buffer[slot].event_msec_time -
+ (sys_tz.tz_minuteswest * 60));
+ rtc_time_to_tm(local_time, &tm);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%5d :%12u : %s",
+ "%5d : [%02d:%02d:%02d.%06lu] : %s",
trace_buffer[slot].order,
- (unsigned int)trace_buffer[slot].event_time,
+ tm.tm_hour, tm.tm_min, tm.tm_sec,
+ trace_buffer[slot].event_msec_time,
trace_buffer[slot].event_string);
}
}