qcacmn: Add credit tracking for HL Data Path
Add credit tracking for HL Data Path in DPTRACE. Change-Id: I6e2971209940c16a13a8ca7f1f0a3d7c1a26e305 CRs-Fixed: 2574057
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#define QDF_NBUF_PKT_TRAC_TYPE_ARP 0x10
|
||||
#define QDF_NBUF_PKT_TRAC_TYPE_ICMP 0x20
|
||||
#define QDF_NBUF_PKT_TRAC_TYPE_ICMPv6 0x40
|
||||
#define QDF_HL_CREDIT_TRACKING 0x80
|
||||
|
||||
#define QDF_NBUF_PKT_TRAC_MAX_STRING 12
|
||||
#define QDF_NBUF_PKT_TRAC_PROTO_STRING 4
|
||||
|
@@ -195,6 +195,7 @@ typedef struct s_qdf_trace_data {
|
||||
* @QDF_DP_TRACE_ICMPv6_PACKET_RECORD - record ICMPv6 packet
|
||||
* @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout
|
||||
* @QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout
|
||||
* @QDF_DP_TRACE_TX_CREDIT_RECORD - credit update record
|
||||
* @QDF_DP_TRACE_ULTRA_LOW_VERBOSITY - Below this is not logged for >4PPS
|
||||
* @QDF_DP_TRACE_TX_PACKET_RECORD - record 32 bytes of tx pkt at any layer
|
||||
* @QDF_DP_TRACE_RX_PACKET_RECORD - record 32 bytes of rx pkt at any layer
|
||||
@@ -241,6 +242,7 @@ enum QDF_DP_TRACE_ID {
|
||||
QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
|
||||
QDF_DP_TRACE_HDD_TX_TIMEOUT,
|
||||
QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
|
||||
QDF_DP_TRACE_TX_CREDIT_RECORD,
|
||||
QDF_DP_TRACE_ULTRA_LOW_VERBOSITY,
|
||||
QDF_DP_TRACE_TX_PACKET_RECORD,
|
||||
QDF_DP_TRACE_RX_PACKET_RECORD,
|
||||
@@ -285,6 +287,36 @@ enum qdf_proto_dir {
|
||||
QDF_NA
|
||||
};
|
||||
|
||||
/**
|
||||
* QDF_CREDIT_UPDATE_SOURCE - source of credit record
|
||||
* @QDF_TX_SCHED: Tx scheduler
|
||||
* @QDF_TX_COMP: TX completion
|
||||
* @QDF_TX_CREDIT_UPDATE: credit update indication
|
||||
* @QDF_HTT_ATTACH: HTT attach
|
||||
* @QDF_TX_HTT_MSG: HTT TX message
|
||||
*/
|
||||
enum QDF_CREDIT_UPDATE_SOURCE {
|
||||
QDF_TX_SCHED,
|
||||
QDF_TX_COMP,
|
||||
QDF_TX_CREDIT_UPDATE,
|
||||
QDF_HTT_ATTACH,
|
||||
QDF_TX_HTT_MSG
|
||||
};
|
||||
|
||||
/**
|
||||
* QDF_CREDIT_OPERATION - operation on credit
|
||||
* @QDF_CREDIT_INC: credit increment
|
||||
* @QDF_CREDIT_DEC: credit decrement
|
||||
* @QDF_CREDIT_ABS: Abosolute credit
|
||||
* @QDF_OP_NA: Not applicable
|
||||
*/
|
||||
enum QDF_CREDIT_OPERATION {
|
||||
QDF_CREDIT_INC,
|
||||
QDF_CREDIT_DEC,
|
||||
QDF_CREDIT_ABS,
|
||||
QDF_OP_NA
|
||||
};
|
||||
|
||||
/**
|
||||
* struct qdf_dp_trace_ptr_buf - pointer record buffer
|
||||
* @cookie: cookie value
|
||||
@@ -327,6 +359,24 @@ struct qdf_dp_trace_mgmt_buf {
|
||||
uint8_t subtype;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct qdf_dp_trace_credit_record - tx credit record
|
||||
* @source: credit record source
|
||||
* @operation: credit operation
|
||||
* @delta: delta of credit
|
||||
* @total_credits: total credit
|
||||
* @g0_credit: group 0 credit
|
||||
* @g1_credit: group 1 credit
|
||||
*/
|
||||
struct qdf_dp_trace_credit_record {
|
||||
enum QDF_CREDIT_UPDATE_SOURCE source;
|
||||
enum QDF_CREDIT_OPERATION operation;
|
||||
int delta;
|
||||
int total_credits;
|
||||
int g0_credit;
|
||||
int g1_credit;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct qdf_dp_trace_event_buf - event buffer
|
||||
* @vdev_id : vdev id
|
||||
@@ -414,7 +464,7 @@ struct s_qdf_dp_trace_data {
|
||||
uint32_t head;
|
||||
uint32_t tail;
|
||||
uint32_t num;
|
||||
uint8_t proto_bitmap;
|
||||
uint32_t proto_bitmap;
|
||||
uint8_t no_of_record;
|
||||
uint16_t num_records_to_dump;
|
||||
uint16_t dump_counter;
|
||||
@@ -608,10 +658,10 @@ bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
|
||||
void qdf_dp_trace_init(bool live_mode_config, uint8_t thresh,
|
||||
uint16_t time_limit, uint8_t verbosity,
|
||||
uint8_t proto_bitmap);
|
||||
uint32_t proto_bitmap);
|
||||
void qdf_dp_trace_deinit(void);
|
||||
void qdf_dp_trace_spin_lock_init(void);
|
||||
void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records,
|
||||
void qdf_dp_trace_set_value(uint32_t proto_bitmap, uint8_t no_of_records,
|
||||
uint8_t verbosity);
|
||||
void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir);
|
||||
void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id,
|
||||
@@ -737,7 +787,7 @@ void qdf_dp_trace_data_pkt(qdf_nbuf_t nbuf, uint8_t pdev_id,
|
||||
enum QDF_DP_TRACE_ID code, uint16_t msdu_id,
|
||||
enum qdf_proto_dir dir);
|
||||
|
||||
uint8_t qdf_dp_get_proto_bitmap(void);
|
||||
uint32_t qdf_dp_get_proto_bitmap(void);
|
||||
uint8_t qdf_dp_get_verbosity(void);
|
||||
uint8_t qdf_dp_get_no_of_record(void);
|
||||
|
||||
@@ -778,6 +828,20 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
|
||||
uint8_t pdev_id, enum qdf_proto_type type,
|
||||
enum qdf_proto_subtype subtype);
|
||||
|
||||
/**
|
||||
* qdf_dp_trace_credit_record() - record credit update
|
||||
* @source: source of record
|
||||
* @operation: credit operation
|
||||
* @delta: credit delta
|
||||
* @total_credits: total credit
|
||||
* @g0_credit: group 0 credit
|
||||
* @g1_credit: group 1 credit
|
||||
*/
|
||||
void qdf_dp_trace_credit_record(enum QDF_CREDIT_UPDATE_SOURCE source,
|
||||
enum QDF_CREDIT_OPERATION operation,
|
||||
int delta, int total_credits,
|
||||
int g0_credit, int g1_credit);
|
||||
|
||||
/**
|
||||
* qdf_dp_display_mgmt_pkt() - display proto packet
|
||||
* @record: dptrace record
|
||||
@@ -790,6 +854,17 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
|
||||
void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record,
|
||||
uint16_t index, uint8_t pdev_id, uint8_t info);
|
||||
|
||||
/**
|
||||
* qdf_dp_display_credit_record() - display credit record
|
||||
* @record: dptrace record
|
||||
* @index: index
|
||||
* @pdev_id: pdev id
|
||||
* @info: metadeta info
|
||||
*/
|
||||
void qdf_dp_display_credit_record(struct qdf_dp_trace_record_s *record,
|
||||
uint16_t index, uint8_t pdev_id,
|
||||
uint8_t info);
|
||||
|
||||
/**
|
||||
* qdf_dp_display_event_record() - display event records
|
||||
* @record: dptrace record
|
||||
@@ -815,7 +890,7 @@ bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
static inline
|
||||
void qdf_dp_trace_init(bool live_mode_config, uint8_t thresh,
|
||||
uint16_t time_limit, uint8_t verbosity,
|
||||
uint8_t proto_bitmap)
|
||||
uint32_t proto_bitmap)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -829,7 +904,7 @@ void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir)
|
||||
{
|
||||
}
|
||||
static inline
|
||||
void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records,
|
||||
void qdf_dp_trace_set_value(uint32_t proto_bitmap, uint8_t no_of_records,
|
||||
uint8_t verbosity)
|
||||
{
|
||||
}
|
||||
|
@@ -692,7 +692,7 @@ static void qdf_dp_unused(struct qdf_dp_trace_record_s *record,
|
||||
*/
|
||||
void qdf_dp_trace_init(bool live_mode_config, uint8_t thresh,
|
||||
uint16_t time_limit, uint8_t verbosity,
|
||||
uint8_t proto_bitmap)
|
||||
uint32_t proto_bitmap)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
@@ -739,6 +739,8 @@ void qdf_dp_trace_init(bool live_mode_config, uint8_t thresh,
|
||||
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_TX_CREDIT_RECORD] =
|
||||
qdf_dp_display_credit_record;
|
||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_EVENT_RECORD] =
|
||||
qdf_dp_display_event_record;
|
||||
|
||||
@@ -765,7 +767,7 @@ void qdf_dp_trace_deinit(void)
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record,
|
||||
void qdf_dp_trace_set_value(uint32_t proto_bitmap, uint8_t no_of_record,
|
||||
uint8_t verbosity)
|
||||
{
|
||||
g_qdf_dp_trace_data.proto_bitmap = proto_bitmap;
|
||||
@@ -879,7 +881,7 @@ static bool qdf_dp_trace_verbosity_check(enum QDF_DP_TRACE_ID code)
|
||||
*
|
||||
* Return: proto bitmap
|
||||
*/
|
||||
uint8_t qdf_dp_get_proto_bitmap(void)
|
||||
uint32_t qdf_dp_get_proto_bitmap(void)
|
||||
{
|
||||
if (g_qdf_dp_trace_data.enable)
|
||||
return g_qdf_dp_trace_data.proto_bitmap;
|
||||
@@ -980,6 +982,8 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
|
||||
return "ICMPv6:";
|
||||
case QDF_DP_TRACE_MGMT_PACKET_RECORD:
|
||||
return "MGMT:";
|
||||
case QDF_DP_TRACE_TX_CREDIT_RECORD:
|
||||
return "CREDIT:";
|
||||
case QDF_DP_TRACE_EVENT_RECORD:
|
||||
return "EVENT:";
|
||||
case QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD:
|
||||
@@ -1056,6 +1060,39 @@ static const char *qdf_dp_dir_to_str(enum qdf_proto_dir dir)
|
||||
}
|
||||
}
|
||||
|
||||
static const char *qdf_dp_credit_source_to_str(
|
||||
enum QDF_CREDIT_UPDATE_SOURCE source)
|
||||
{
|
||||
switch (source) {
|
||||
case QDF_TX_SCHED:
|
||||
return "TX SCHED";
|
||||
case QDF_TX_COMP:
|
||||
return "TX COMP";
|
||||
case QDF_TX_CREDIT_UPDATE:
|
||||
return "CREDIT UP";
|
||||
case QDF_TX_HTT_MSG:
|
||||
return "HTT TX MSG";
|
||||
case QDF_HTT_ATTACH:
|
||||
return "HTT ATTACH";
|
||||
default:
|
||||
return "invalid";
|
||||
}
|
||||
}
|
||||
|
||||
static const char *qdf_dp_operation_to_str(enum QDF_CREDIT_OPERATION op)
|
||||
{
|
||||
switch (op) {
|
||||
case QDF_CREDIT_INC:
|
||||
return "+";
|
||||
case QDF_CREDIT_DEC:
|
||||
return "-";
|
||||
case QDF_CREDIT_ABS:
|
||||
return "ABS";
|
||||
default:
|
||||
return "invalid";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_dp_type_to_str() - convert packet type to string
|
||||
* @type: type
|
||||
@@ -1696,6 +1733,91 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
|
||||
}
|
||||
qdf_export_symbol(qdf_dp_trace_mgmt_pkt);
|
||||
|
||||
static void
|
||||
qdf_dpt_display_credit_record_debugfs(qdf_debugfs_file_t file,
|
||||
struct qdf_dp_trace_record_s *record,
|
||||
uint32_t index)
|
||||
{
|
||||
int loc;
|
||||
char prepend_str[QDF_DP_TRACE_PREPEND_STR_SIZE];
|
||||
struct qdf_dp_trace_credit_record *buf =
|
||||
(struct qdf_dp_trace_credit_record *)record->data;
|
||||
|
||||
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
||||
index, 0, record);
|
||||
if (buf->operation == QDF_OP_NA)
|
||||
qdf_debugfs_printf(file, "%s [%s] [T: %d G0: %d G1: %d]\n",
|
||||
prepend_str,
|
||||
qdf_dp_credit_source_to_str(buf->source),
|
||||
buf->total_credits, buf->g0_credit,
|
||||
buf->g1_credit);
|
||||
else
|
||||
qdf_debugfs_printf(file,
|
||||
"%s [%s] [T: %d G0: %d G1: %d] [%s %d]\n",
|
||||
prepend_str,
|
||||
qdf_dp_credit_source_to_str(buf->source),
|
||||
buf->total_credits, buf->g0_credit,
|
||||
buf->g1_credit,
|
||||
qdf_dp_operation_to_str(buf->operation),
|
||||
buf->delta);
|
||||
}
|
||||
|
||||
void qdf_dp_display_credit_record(struct qdf_dp_trace_record_s *record,
|
||||
uint16_t index, uint8_t pdev_id, uint8_t info)
|
||||
{
|
||||
int loc;
|
||||
char prepend_str[QDF_DP_TRACE_PREPEND_STR_SIZE];
|
||||
struct qdf_dp_trace_credit_record *buf =
|
||||
(struct qdf_dp_trace_credit_record *)record->data;
|
||||
|
||||
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
||||
index, info, record);
|
||||
if (buf->operation == QDF_OP_NA)
|
||||
DPTRACE_PRINT("%s [%s] [T: %d G0: %d G1: %d]",
|
||||
prepend_str,
|
||||
qdf_dp_credit_source_to_str(buf->source),
|
||||
buf->total_credits, buf->g0_credit,
|
||||
buf->g1_credit);
|
||||
else
|
||||
DPTRACE_PRINT("%s [%s] [T: %d G0: %d G1: %d] [%s %d]",
|
||||
prepend_str,
|
||||
qdf_dp_credit_source_to_str(buf->source),
|
||||
buf->total_credits, buf->g0_credit,
|
||||
buf->g1_credit,
|
||||
qdf_dp_operation_to_str(buf->operation),
|
||||
buf->delta);
|
||||
}
|
||||
|
||||
void qdf_dp_trace_credit_record(enum QDF_CREDIT_UPDATE_SOURCE source,
|
||||
enum QDF_CREDIT_OPERATION operation,
|
||||
int delta, int total_credits,
|
||||
int g0_credit, int g1_credit)
|
||||
{
|
||||
struct qdf_dp_trace_credit_record buf;
|
||||
int buf_size = sizeof(struct qdf_dp_trace_credit_record);
|
||||
enum QDF_DP_TRACE_ID code = QDF_DP_TRACE_TX_CREDIT_RECORD;
|
||||
|
||||
if (qdf_dp_enable_check(NULL, code, QDF_NA) == false)
|
||||
return;
|
||||
|
||||
if (!(qdf_dp_get_proto_bitmap() & QDF_HL_CREDIT_TRACKING))
|
||||
return;
|
||||
|
||||
if (buf_size > QDF_DP_TRACE_RECORD_SIZE)
|
||||
QDF_BUG(0);
|
||||
|
||||
buf.source = source;
|
||||
buf.operation = operation;
|
||||
buf.delta = delta;
|
||||
buf.total_credits = total_credits;
|
||||
buf.g0_credit = g0_credit;
|
||||
buf.g1_credit = g1_credit;
|
||||
|
||||
qdf_dp_add_record(code, QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)&buf,
|
||||
buf_size, NULL, 0, false);
|
||||
}
|
||||
qdf_export_symbol(qdf_dp_trace_credit_record);
|
||||
|
||||
void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record,
|
||||
uint16_t index, uint8_t pdev_id, uint8_t info)
|
||||
{
|
||||
@@ -2350,6 +2472,11 @@ QDF_STATUS qdf_dpt_dump_stats_debugfs(qdf_debugfs_file_t file,
|
||||
qdf_dpt_display_proto_pkt_debugfs(file, &p_record, i);
|
||||
break;
|
||||
|
||||
case QDF_DP_TRACE_TX_CREDIT_RECORD:
|
||||
qdf_dpt_display_credit_record_debugfs(file, &p_record,
|
||||
i);
|
||||
break;
|
||||
|
||||
case QDF_DP_TRACE_MGMT_PACKET_RECORD:
|
||||
qdf_dpt_display_mgmt_pkt_debugfs(file, &p_record, i);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user