qcacmn: Add infrastructure to log roam events in DPTRACE

Add infrastructure to log all roam related commands and
events in DPTRACE.

Change-Id: I66773fc23dfeacf3a63688819e099bf44676d95b
CRs-Fixed: 1081851
此提交包含在:
Himanshu Agarwal
2016-09-20 15:10:55 +05:30
提交者 qcabuildsw
父節點 04dc129aa6
當前提交 c0b7145916
共有 3 個檔案被更改,包括 86 行新增0 行删除

查看文件

@@ -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
};

查看文件

@@ -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,

查看文件

@@ -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