summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshu Agarwal <himanaga@codeaurora.org>2017-01-04 15:53:21 +0530
committerAshish kumar goswami <agoswa@codeaurora.org>2017-01-09 15:03:24 +0530
commit8d1d5b6e40784f13daab6d64c287dab0fc9b1b40 (patch)
treefc8b2427ec354aadf1247469fcf80b628aaa4e6a
parentaaa0c4fbd79d0931c35cb15eb46c7b460beda8d5 (diff)
qcacld-2.0: Add support to log roam events in DPTRACE
Add support to log all the roam related commands and events in DPTRACE. Change-Id: I66773fc23dfeacf3a63688819e099bf44676d95b CRs-Fixed: 1081851
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.h8
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.c43
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.h36
-rw-r--r--CORE/SERVICES/WMA/wma.c11
4 files changed, 98 insertions, 0 deletions
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
index e14de34a1f46..048a34075f91 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
@@ -188,12 +188,14 @@ struct mon_rx_status {
* @ADF_PROTO_TYPE_EAPOL - EAPOL
* @ADF_PROTO_TYPE_ARP - ARP
* @ADF_PROTO_TYPE_MGMT - MGMT
+ * @ADF_PROTO_TYPE_EVENT - EVENT
*/
enum adf_proto_type {
ADF_PROTO_TYPE_DHCP = 0,
ADF_PROTO_TYPE_EAPOL,
ADF_PROTO_TYPE_ARP,
ADF_PROTO_TYPE_MGMT,
+ ADF_PROTO_TYPE_EVENT,
ADF_PROTO_TYPE_MAX
};
@@ -227,6 +229,9 @@ enum adf_proto_type {
* @ADF_PROTO_MGMT_DISASSOC - disassoc
* @ADF_PROTO_MGMT_AUTH - auth
* @ADF_PROTO_MGMT_DEAUTH - deauth
+ * @ADF_ROAM_SYNCH - roam synch indication from fw
+ * @ADF_ROAM_COMPLETE - roam complete cmd to fw
+ * @ADF_ROAM_EVENTID - roam eventid from fw
*/
enum adf_proto_subtype {
ADF_PROTO_INVALID = 0,
@@ -258,6 +263,9 @@ enum adf_proto_subtype {
ADF_PROTO_MGMT_DISASSOC,
ADF_PROTO_MGMT_AUTH,
ADF_PROTO_MGMT_DEAUTH,
+ ADF_ROAM_SYNCH,
+ ADF_ROAM_COMPLETE,
+ ADF_ROAM_EVENTID,
ADF_PROTO_SUBTYPE_MAX
};
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
index f5d6e8c263b7..66c780ff6d80 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
@@ -95,6 +95,8 @@ void adf_dp_trace_init(void)
adf_dp_display_proto_pkt;
adf_dp_trace_cb_table[ADF_DP_TRACE_MGMT_PACKET_RECORD] =
adf_dp_display_mgmt_pkt;
+ adf_dp_trace_cb_table[ADF_DP_TRACE_EVENT_RECORD] =
+ adf_dp_display_event_record;
}
/**
@@ -221,6 +223,8 @@ const char *adf_dp_code_to_string(enum ADF_DP_TRACE_ID code)
return "ARP:";
case ADF_DP_TRACE_MGMT_PACKET_RECORD:
return "MGMT:";
+ case ADF_DP_TRACE_EVENT_RECORD:
+ return "EVENT:";
case ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD:
return "HDD: TX: PTR:";
case ADF_DP_TRACE_HDD_TX_PACKET_RECORD:
@@ -293,6 +297,8 @@ const char *adf_dp_type_to_str(enum adf_proto_type type)
return "ARP";
case ADF_PROTO_TYPE_MGMT:
return "MGMT";
+ case ADF_PROTO_TYPE_EVENT:
+ return "EVENT";
default:
return "invalid";
}
@@ -343,6 +349,12 @@ const char *adf_dp_subtype_to_str(enum adf_proto_subtype subtype)
return "AUTH";
case ADF_PROTO_MGMT_DEAUTH:
return "DEAUTH";
+ case ADF_ROAM_SYNCH:
+ return "ROAM SYNCH";
+ case ADF_ROAM_COMPLETE:
+ return "ROAM COMPLETE";
+ case ADF_ROAM_EVENTID:
+ return "ROAM EVENTID";
default:
return "invalid";
}
@@ -652,6 +664,37 @@ void adf_dp_trace_mgmt_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
adf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
}
+void adf_dp_display_event_record(struct adf_dp_trace_record_s *record,
+ uint16_t index)
+{
+ struct adf_dp_trace_event_buf *buf =
+ (struct adf_dp_trace_event_buf *)record->data;
+
+ adf_os_print("DPT: %04d: %012llu: %s vdev_id %d", index,
+ record->time, adf_dp_code_to_string(record->code),
+ buf->vdev_id);
+ adf_os_print("DPT: Type %s Subtype %s", adf_dp_type_to_str(buf->type),
+ adf_dp_subtype_to_str(buf->subtype));
+}
+
+void adf_dp_trace_record_event(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
+ enum adf_proto_type type, enum adf_proto_subtype subtype)
+{
+ struct adf_dp_trace_event_buf buf;
+ int buf_size = sizeof(struct adf_dp_trace_event_buf);
+
+ if (adf_dp_enable_check(NULL, code, ADF_NA) == false)
+ return;
+
+ if (buf_size > ADF_DP_TRACE_RECORD_SIZE)
+ ADF_BUG(0);
+
+ buf.type = type;
+ buf.subtype = subtype;
+ buf.vdev_id = vdev_id;
+ adf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
+}
+
/**
* adf_dp_display_ptr_record() - display record
* @record: dptrace record
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.h b/CORE/SERVICES/COMMON/adf/adf_trace.h
index c853b4b57d8f..a19704b3ff41 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.h
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.h
@@ -77,6 +77,7 @@ struct adf_mac_addr {
* @ADF_DP_TRACE_DHCP_PACKET_RECORD - record DHCP packet
* @ADF_DP_TRACE_ARP_PACKET_RECORD - record ARP packet
* @ADF_DP_TRACE_MGMT_PACKET_RECORD - record MGMT pacekt
+ * @ADF_DP_TRACE_EVENT_RECORD - record events
* @ADF_DP_TRACE_DEFAULT_VERBOSITY - below this are part of default verbosity
* @ADF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout
* @ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout
@@ -105,6 +106,7 @@ enum ADF_DP_TRACE_ID {
ADF_DP_TRACE_DHCP_PACKET_RECORD,
ADF_DP_TRACE_ARP_PACKET_RECORD,
ADF_DP_TRACE_MGMT_PACKET_RECORD,
+ ADF_DP_TRACE_EVENT_RECORD,
ADF_DP_TRACE_DEFAULT_VERBOSITY,
ADF_DP_TRACE_HDD_TX_TIMEOUT,
ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
@@ -183,6 +185,18 @@ struct adf_dp_trace_mgmt_buf {
};
/**
+ * struct adf_dp_trace_event_buf - event buffer
+ * @vdev_id : vdev id
+ * @type: packet type
+ * @subtype: packet subtype
+ */
+struct adf_dp_trace_event_buf {
+ uint8_t vdev_id;
+ uint8_t type;
+ uint8_t subtype;
+};
+
+/**
* struct adf_dp_trace_record_s - Describes a record in DP trace
* @time: time when it got stored
* @code: Describes the particular event
@@ -274,6 +288,28 @@ void adf_dp_trace_mgmt_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
*/
void adf_dp_display_mgmt_pkt(struct adf_dp_trace_record_s *record,
uint16_t index);
+
+/**
+ * adf_dp_display_event_record() - display event records
+ * @record: dptrace record
+ * @index: index
+ *
+ * Return: none
+ */
+void adf_dp_display_event_record(struct adf_dp_trace_record_s *record,
+ uint16_t index);
+
+/**
+ * adf_dp_trace_record_event() - record events
+ * @code: dptrace code
+ * @vdev_id: vdev id
+ * @type: proto type
+ * @subtype: proto subtype
+ *
+ * Return: none
+ */
+void adf_dp_trace_record_event(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
+ enum adf_proto_type type, enum adf_proto_subtype subtype);
#else
static inline void adf_dp_trace_init(void)
{
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 47e3d5bbf798..b3000528e3df 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -111,6 +111,7 @@
#include "wma_ocb.h"
#include "wma_nan_datapath.h"
+#include "adf_trace.h"
/* ################### defines ################### */
/*
@@ -7453,6 +7454,9 @@ static int wma_roam_synch_event_handler(void *handle, u_int8_t *event, u_int32_t
return -EINVAL;
}
+ DPTRACE(adf_dp_trace_record_event(ADF_DP_TRACE_EVENT_RECORD,
+ synch_event->vdev_id, ADF_PROTO_TYPE_EVENT, ADF_ROAM_SYNCH));
+
if(wma->interfaces[synch_event->vdev_id].roam_synch_in_progress ==
VOS_TRUE) {
WMA_LOGE("%s: Ignoring RSI since one is already in progress",
@@ -33333,6 +33337,9 @@ static int wma_roam_event_callback(WMA_HANDLE handle, u_int8_t *event_buf,
WMA_LOGD("%s: Reason %x for vdevid %x, rssi %d",
__func__, wmi_event->reason, wmi_event->vdev_id, wmi_event->rssi);
+ DPTRACE(adf_dp_trace_record_event(ADF_DP_TRACE_EVENT_RECORD,
+ wmi_event->vdev_id, ADF_PROTO_TYPE_EVENT, ADF_ROAM_EVENTID));
+
switch(wmi_event->reason) {
case WMI_ROAM_REASON_BMISS:
WMA_LOGD("Beacon Miss for vdevid %x",
@@ -38629,6 +38636,10 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle,
wmi_buf_free(wmi_buf);
return;
}
+
+ DPTRACE(adf_dp_trace_record_event(ADF_DP_TRACE_EVENT_RECORD,
+ synchcnf->sessionId, ADF_PROTO_TYPE_EVENT, ADF_ROAM_COMPLETE));
+
return;
}
void wma_process_roam_synch_fail(WMA_HANDLE handle,