diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 9c6533af1bc1..4949b2856bcf 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -205,12 +205,14 @@ struct mon_rx_status { * @QDF_PROTO_TYPE_EAPOL - EAPOL * @QDF_PROTO_TYPE_ARP - ARP * @QDF_PROTO_TYPE_MGMT - MGMT + * QDF_PROTO_TYPE_EVENT - EVENT */ enum qdf_proto_type { QDF_PROTO_TYPE_DHCP, QDF_PROTO_TYPE_EAPOL, QDF_PROTO_TYPE_ARP, QDF_PROTO_TYPE_MGMT, + QDF_PROTO_TYPE_EVENT, QDF_PROTO_TYPE_MAX }; @@ -242,6 +244,9 @@ enum qdf_proto_type { * @QDF_PROTO_MGMT_DISASSOC - disassoc * @QDF_PROTO_MGMT_AUTH - auth * @QDF_PROTO_MGMT_DEAUTH - deauth + * QDF_ROAM_SYNCH - roam synch indication from fw + * QDF_ROAM_COMPLETE - roam complete cmd to fw + * QDF_ROAM_EVENTID - roam eventid from fw */ enum qdf_proto_subtype { QDF_PROTO_INVALID, @@ -271,6 +276,9 @@ enum qdf_proto_subtype { QDF_PROTO_MGMT_DISASSOC, QDF_PROTO_MGMT_AUTH, QDF_PROTO_MGMT_DEAUTH, + QDF_ROAM_SYNCH, + QDF_ROAM_COMPLETE, + QDF_ROAM_EVENTID, QDF_PROTO_SUBTYPE_MAX }; diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index f113e558c29a..6070d973d200 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -180,6 +180,7 @@ typedef struct s_qdf_trace_data { * @QDF_DP_TRACE_DHCP_PACKET_RECORD - record DHCP packet * @QDF_DP_TRACE_ARP_PACKET_RECORD - record ARP packet * @QDF_DP_TRACE_MGMT_PACKET_RECORD - record MGMT pacekt + * QDF_DP_TRACE_EVENT_RECORD - record events * @QDF_DP_TRACE_DEFAULT_VERBOSITY - below this are part of default verbosity * @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout * @QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout @@ -209,6 +210,7 @@ enum QDF_DP_TRACE_ID { QDF_DP_TRACE_DHCP_PACKET_RECORD, QDF_DP_TRACE_ARP_PACKET_RECORD, QDF_DP_TRACE_MGMT_PACKET_RECORD, + QDF_DP_TRACE_EVENT_RECORD, QDF_DP_TRACE_DEFAULT_VERBOSITY, QDF_DP_TRACE_HDD_TX_TIMEOUT, QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT, @@ -287,6 +289,18 @@ struct qdf_dp_trace_mgmt_buf { uint8_t subtype; }; +/** + * struct qdf_dp_trace_event_buf - event buffer + * @vdev_id : vdev id + * @type: packet type + * @subtype: packet subtype + */ +struct qdf_dp_trace_event_buf { + uint8_t vdev_id; + uint8_t type; + uint8_t subtype; +}; + /** * struct qdf_dp_trace_record_s - Describes a record in DP trace * @time: time when it got stored @@ -410,6 +424,10 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, enum qdf_proto_type type, enum qdf_proto_subtype subtype); void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record, uint16_t index); +void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, + uint16_t index); +void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, + enum qdf_proto_type type, enum qdf_proto_subtype subtype); #else static inline void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 445ffed20dd9..df3b9753e381 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -821,6 +821,8 @@ void qdf_dp_trace_init(void) qdf_dp_display_proto_pkt; qdf_dp_trace_cb_table[QDF_DP_TRACE_MGMT_PACKET_RECORD] = qdf_dp_display_mgmt_pkt; + qdf_dp_trace_cb_table[QDF_DP_TRACE_EVENT_RECORD] = + qdf_dp_display_event_record; qdf_dp_trace_cb_table[QDF_DP_TRACE_MAX] = qdf_dp_unused; } @@ -967,6 +969,8 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code) return "ARP:"; case QDF_DP_TRACE_MGMT_PACKET_RECORD: return "MGMT:"; + case QDF_DP_TRACE_EVENT_RECORD: + return "EVENT:"; case QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: return "HDD: TX: PTR:"; case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: @@ -1041,6 +1045,8 @@ static const char *qdf_dp_type_to_str(enum qdf_proto_type type) return "ARP"; case QDF_PROTO_TYPE_MGMT: return "MGMT"; + case QDF_PROTO_TYPE_EVENT: + return "EVENT"; default: return "invalid"; } @@ -1091,6 +1097,12 @@ static const char *qdf_dp_subtype_to_str(enum qdf_proto_subtype subtype) return "AUTH"; case QDF_PROTO_MGMT_DEAUTH: return "DEAUTH"; + case QDF_ROAM_SYNCH: + return "ROAM SYNCH"; + case QDF_ROAM_COMPLETE: + return "ROAM COMPLETE"; + case QDF_ROAM_EVENTID: + return "ROAM EVENTID"; default: return "invalid"; } @@ -1353,6 +1365,54 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, } EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt); +/** + * qdf_dp_display_event_record() - display event records + * @record: dptrace record + * @index: index + * + * Return: none + */ +void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, + uint16_t index) +{ + struct qdf_dp_trace_event_buf *buf = + (struct qdf_dp_trace_event_buf *)record->data; + + qdf_print("DPT: %04d: %012llu: %s vdev_id %d", index, + record->time, qdf_dp_code_to_string(record->code), + buf->vdev_id); + qdf_print("DPT: Type %s Subtype %s", qdf_dp_type_to_str(buf->type), + qdf_dp_subtype_to_str(buf->subtype)); +} +EXPORT_SYMBOL(qdf_dp_display_event_record); + +/** + * qdf_dp_trace_record_event() - record events + * @code: dptrace code + * @vdev_id: vdev id + * @type: proto type + * @subtype: proto subtype + * + * Return: none + */ +void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, + enum qdf_proto_type type, enum qdf_proto_subtype subtype) +{ + struct qdf_dp_trace_event_buf buf; + int buf_size = sizeof(struct qdf_dp_trace_event_buf); + + if (qdf_dp_enable_check(NULL, code, QDF_NA) == false) + return; + + if (buf_size > QDF_DP_TRACE_RECORD_SIZE) + QDF_BUG(0); + + buf.type = type; + buf.subtype = subtype; + buf.vdev_id = vdev_id; + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); +} +EXPORT_SYMBOL(qdf_dp_trace_record_event); /** * qdf_dp_display_proto_pkt() - display proto packet