diff options
| author | Himanshu Agarwal <himanaga@codeaurora.org> | 2017-01-04 15:53:21 +0530 |
|---|---|---|
| committer | Ashish kumar goswami <agoswa@codeaurora.org> | 2017-01-09 15:03:24 +0530 |
| commit | 8d1d5b6e40784f13daab6d64c287dab0fc9b1b40 (patch) | |
| tree | fc8b2427ec354aadf1247469fcf80b628aaa4e6a | |
| parent | aaa0c4fbd79d0931c35cb15eb46c7b460beda8d5 (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.h | 8 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_trace.c | 43 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_trace.h | 36 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 11 |
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, |
