0001
0002
0003 #if !defined(_NETVSC_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
0004 #define _NETVSC_TRACE_H
0005
0006 #include <linux/tracepoint.h>
0007
0008 #undef TRACE_SYSTEM
0009 #define TRACE_SYSTEM netvsc
0010 #define TRACE_INCLUDE_FILE netvsc_trace
0011
0012 TRACE_DEFINE_ENUM(RNDIS_MSG_PACKET);
0013 TRACE_DEFINE_ENUM(RNDIS_MSG_INDICATE);
0014 TRACE_DEFINE_ENUM(RNDIS_MSG_INIT);
0015 TRACE_DEFINE_ENUM(RNDIS_MSG_INIT_C);
0016 TRACE_DEFINE_ENUM(RNDIS_MSG_HALT);
0017 TRACE_DEFINE_ENUM(RNDIS_MSG_QUERY);
0018 TRACE_DEFINE_ENUM(RNDIS_MSG_QUERY_C);
0019 TRACE_DEFINE_ENUM(RNDIS_MSG_SET);
0020 TRACE_DEFINE_ENUM(RNDIS_MSG_SET_C);
0021 TRACE_DEFINE_ENUM(RNDIS_MSG_RESET);
0022 TRACE_DEFINE_ENUM(RNDIS_MSG_RESET_C);
0023 TRACE_DEFINE_ENUM(RNDIS_MSG_KEEPALIVE);
0024 TRACE_DEFINE_ENUM(RNDIS_MSG_KEEPALIVE_C);
0025
0026 #define show_rndis_type(type) \
0027 __print_symbolic(type, \
0028 { RNDIS_MSG_PACKET, "PACKET" }, \
0029 { RNDIS_MSG_INDICATE, "INDICATE", }, \
0030 { RNDIS_MSG_INIT, "INIT", }, \
0031 { RNDIS_MSG_INIT_C, "INIT_C", }, \
0032 { RNDIS_MSG_HALT, "HALT", }, \
0033 { RNDIS_MSG_QUERY, "QUERY", }, \
0034 { RNDIS_MSG_QUERY_C, "QUERY_C", }, \
0035 { RNDIS_MSG_SET, "SET", }, \
0036 { RNDIS_MSG_SET_C, "SET_C", }, \
0037 { RNDIS_MSG_RESET, "RESET", }, \
0038 { RNDIS_MSG_RESET_C, "RESET_C", }, \
0039 { RNDIS_MSG_KEEPALIVE, "KEEPALIVE", }, \
0040 { RNDIS_MSG_KEEPALIVE_C, "KEEPALIVE_C", })
0041
0042 DECLARE_EVENT_CLASS(rndis_msg_class,
0043 TP_PROTO(const struct net_device *ndev, u16 q,
0044 const struct rndis_message *msg),
0045 TP_ARGS(ndev, q, msg),
0046 TP_STRUCT__entry(
0047 __string( name, ndev->name )
0048 __field( u16, queue )
0049 __field( u32, req_id )
0050 __field( u32, msg_type )
0051 __field( u32, msg_len )
0052 ),
0053 TP_fast_assign(
0054 __assign_str(name, ndev->name);
0055 __entry->queue = q;
0056 __entry->req_id = msg->msg.init_req.req_id;
0057 __entry->msg_type = msg->ndis_msg_type;
0058 __entry->msg_len = msg->msg_len;
0059 ),
0060 TP_printk("dev=%s q=%u req=%#x type=%s msg_len=%u",
0061 __get_str(name), __entry->queue, __entry->req_id,
0062 show_rndis_type(__entry->msg_type), __entry->msg_len)
0063 );
0064
0065 DEFINE_EVENT(rndis_msg_class, rndis_send,
0066 TP_PROTO(const struct net_device *ndev, u16 q,
0067 const struct rndis_message *msg),
0068 TP_ARGS(ndev, q, msg)
0069 );
0070
0071 DEFINE_EVENT(rndis_msg_class, rndis_recv,
0072 TP_PROTO(const struct net_device *ndev, u16 q,
0073 const struct rndis_message *msg),
0074 TP_ARGS(ndev, q, msg)
0075 );
0076
0077 TRACE_DEFINE_ENUM(NVSP_MSG_TYPE_INIT);
0078 TRACE_DEFINE_ENUM(NVSP_MSG_TYPE_INIT_COMPLETE);
0079 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_NDIS_VER);
0080 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_RECV_BUF);
0081 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE);
0082 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_REVOKE_RECV_BUF);
0083 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_SEND_BUF);
0084 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE);
0085 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_REVOKE_SEND_BUF);
0086 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_RNDIS_PKT);
0087 TRACE_DEFINE_ENUM(NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE);
0088 TRACE_DEFINE_ENUM(NVSP_MSG2_TYPE_SEND_NDIS_CONFIG);
0089
0090 TRACE_DEFINE_ENUM(NVSP_MSG4_TYPE_SEND_VF_ASSOCIATION);
0091 TRACE_DEFINE_ENUM(NVSP_MSG4_TYPE_SWITCH_DATA_PATH);
0092
0093 TRACE_DEFINE_ENUM(NVSP_MSG5_TYPE_SUBCHANNEL);
0094 TRACE_DEFINE_ENUM(NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE);
0095
0096 #define show_nvsp_type(type) \
0097 __print_symbolic(type, \
0098 { NVSP_MSG_TYPE_INIT, "INIT" }, \
0099 { NVSP_MSG_TYPE_INIT_COMPLETE, "INIT_COMPLETE" }, \
0100 { NVSP_MSG1_TYPE_SEND_NDIS_VER, "SEND_NDIS_VER" }, \
0101 { NVSP_MSG1_TYPE_SEND_RECV_BUF, "SEND_RECV_BUF" }, \
0102 { NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE, "SEND_RECV_BUF_COMPLETE" }, \
0103 { NVSP_MSG1_TYPE_REVOKE_RECV_BUF, "REVOKE_RECV_BUF" }, \
0104 { NVSP_MSG1_TYPE_SEND_SEND_BUF, "SEND_SEND_BUF" }, \
0105 { NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE, "SEND_SEND_BUF_COMPLETE" }, \
0106 { NVSP_MSG1_TYPE_REVOKE_SEND_BUF, "REVOKE_SEND_BUF" }, \
0107 { NVSP_MSG1_TYPE_SEND_RNDIS_PKT, "SEND_RNDIS_PKT" }, \
0108 { NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE, "SEND_RNDIS_PKT_COMPLETE" },\
0109 { NVSP_MSG2_TYPE_SEND_NDIS_CONFIG, "SEND_NDIS_CONFIG" }, \
0110 { NVSP_MSG4_TYPE_SEND_VF_ASSOCIATION, "SEND_VF_ASSOCIATION" }, \
0111 { NVSP_MSG4_TYPE_SWITCH_DATA_PATH, "SWITCH_DATA_PATH" }, \
0112 { NVSP_MSG5_TYPE_SUBCHANNEL, "SUBCHANNEL" }, \
0113 { NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE, "SEND_INDIRECTION_TABLE" })
0114
0115 TRACE_EVENT(nvsp_send,
0116 TP_PROTO(const struct net_device *ndev,
0117 const struct nvsp_message *msg),
0118 TP_ARGS(ndev, msg),
0119 TP_STRUCT__entry(
0120 __string( name, ndev->name )
0121 __field( u32, msg_type )
0122 ),
0123 TP_fast_assign(
0124 __assign_str(name, ndev->name);
0125 __entry->msg_type = msg->hdr.msg_type;
0126 ),
0127 TP_printk("dev=%s type=%s",
0128 __get_str(name),
0129 show_nvsp_type(__entry->msg_type))
0130 );
0131
0132 TRACE_EVENT(nvsp_send_pkt,
0133 TP_PROTO(const struct net_device *ndev,
0134 const struct vmbus_channel *chan,
0135 const struct nvsp_1_message_send_rndis_packet *rpkt),
0136 TP_ARGS(ndev, chan, rpkt),
0137 TP_STRUCT__entry(
0138 __string( name, ndev->name )
0139 __field( u16, qid )
0140 __field( u32, channel_type )
0141 __field( u32, section_index )
0142 __field( u32, section_size )
0143 ),
0144 TP_fast_assign(
0145 __assign_str(name, ndev->name);
0146 __entry->qid = chan->offermsg.offer.sub_channel_index;
0147 __entry->channel_type = rpkt->channel_type;
0148 __entry->section_index = rpkt->send_buf_section_index;
0149 __entry->section_size = rpkt->send_buf_section_size;
0150 ),
0151 TP_printk("dev=%s qid=%u type=%s section=%u size=%d",
0152 __get_str(name), __entry->qid,
0153 __entry->channel_type ? "CONTROL" : "DATA",
0154 __entry->section_index, __entry->section_size)
0155 );
0156
0157 TRACE_EVENT(nvsp_recv,
0158 TP_PROTO(const struct net_device *ndev,
0159 const struct vmbus_channel *chan,
0160 const struct nvsp_message *msg),
0161 TP_ARGS(ndev, chan, msg),
0162 TP_STRUCT__entry(
0163 __string( name, ndev->name )
0164 __field( u16, qid )
0165 __field( u32, msg_type )
0166 ),
0167 TP_fast_assign(
0168 __assign_str(name, ndev->name);
0169 __entry->qid = chan->offermsg.offer.sub_channel_index;
0170 __entry->msg_type = msg->hdr.msg_type;
0171 ),
0172 TP_printk("dev=%s qid=%u type=%s",
0173 __get_str(name), __entry->qid,
0174 show_nvsp_type(__entry->msg_type))
0175 );
0176
0177 #endif
0178
0179
0180 #undef TRACE_INCLUDE_PATH
0181 #define TRACE_INCLUDE_PATH ../../drivers/net/hyperv
0182 #include <trace/define_trace.h>