0001
0002
0003
0004
0005
0006
0007 #undef TRACE_SYSTEM
0008 #define TRACE_SYSTEM i2c
0009
0010 #if !defined(_TRACE_I2C_H) || defined(TRACE_HEADER_MULTI_READ)
0011 #define _TRACE_I2C_H
0012
0013 #include <linux/i2c.h>
0014 #include <linux/tracepoint.h>
0015
0016
0017
0018
0019 extern int i2c_transfer_trace_reg(void);
0020 extern void i2c_transfer_trace_unreg(void);
0021
0022
0023
0024
0025 TRACE_EVENT_FN(i2c_write,
0026 TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
0027 int num),
0028 TP_ARGS(adap, msg, num),
0029 TP_STRUCT__entry(
0030 __field(int, adapter_nr )
0031 __field(__u16, msg_nr )
0032 __field(__u16, addr )
0033 __field(__u16, flags )
0034 __field(__u16, len )
0035 __dynamic_array(__u8, buf, msg->len) ),
0036 TP_fast_assign(
0037 __entry->adapter_nr = adap->nr;
0038 __entry->msg_nr = num;
0039 __entry->addr = msg->addr;
0040 __entry->flags = msg->flags;
0041 __entry->len = msg->len;
0042 memcpy(__get_dynamic_array(buf), msg->buf, msg->len);
0043 ),
0044 TP_printk("i2c-%d #%u a=%03x f=%04x l=%u [%*phD]",
0045 __entry->adapter_nr,
0046 __entry->msg_nr,
0047 __entry->addr,
0048 __entry->flags,
0049 __entry->len,
0050 __entry->len, __get_dynamic_array(buf)
0051 ),
0052 i2c_transfer_trace_reg,
0053 i2c_transfer_trace_unreg);
0054
0055
0056
0057
0058 TRACE_EVENT_FN(i2c_read,
0059 TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
0060 int num),
0061 TP_ARGS(adap, msg, num),
0062 TP_STRUCT__entry(
0063 __field(int, adapter_nr )
0064 __field(__u16, msg_nr )
0065 __field(__u16, addr )
0066 __field(__u16, flags )
0067 __field(__u16, len )
0068 ),
0069 TP_fast_assign(
0070 __entry->adapter_nr = adap->nr;
0071 __entry->msg_nr = num;
0072 __entry->addr = msg->addr;
0073 __entry->flags = msg->flags;
0074 __entry->len = msg->len;
0075 ),
0076 TP_printk("i2c-%d #%u a=%03x f=%04x l=%u",
0077 __entry->adapter_nr,
0078 __entry->msg_nr,
0079 __entry->addr,
0080 __entry->flags,
0081 __entry->len
0082 ),
0083 i2c_transfer_trace_reg,
0084 i2c_transfer_trace_unreg);
0085
0086
0087
0088
0089 TRACE_EVENT_FN(i2c_reply,
0090 TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
0091 int num),
0092 TP_ARGS(adap, msg, num),
0093 TP_STRUCT__entry(
0094 __field(int, adapter_nr )
0095 __field(__u16, msg_nr )
0096 __field(__u16, addr )
0097 __field(__u16, flags )
0098 __field(__u16, len )
0099 __dynamic_array(__u8, buf, msg->len) ),
0100 TP_fast_assign(
0101 __entry->adapter_nr = adap->nr;
0102 __entry->msg_nr = num;
0103 __entry->addr = msg->addr;
0104 __entry->flags = msg->flags;
0105 __entry->len = msg->len;
0106 memcpy(__get_dynamic_array(buf), msg->buf, msg->len);
0107 ),
0108 TP_printk("i2c-%d #%u a=%03x f=%04x l=%u [%*phD]",
0109 __entry->adapter_nr,
0110 __entry->msg_nr,
0111 __entry->addr,
0112 __entry->flags,
0113 __entry->len,
0114 __entry->len, __get_dynamic_array(buf)
0115 ),
0116 i2c_transfer_trace_reg,
0117 i2c_transfer_trace_unreg);
0118
0119
0120
0121
0122 TRACE_EVENT_FN(i2c_result,
0123 TP_PROTO(const struct i2c_adapter *adap, int num, int ret),
0124 TP_ARGS(adap, num, ret),
0125 TP_STRUCT__entry(
0126 __field(int, adapter_nr )
0127 __field(__u16, nr_msgs )
0128 __field(__s16, ret )
0129 ),
0130 TP_fast_assign(
0131 __entry->adapter_nr = adap->nr;
0132 __entry->nr_msgs = num;
0133 __entry->ret = ret;
0134 ),
0135 TP_printk("i2c-%d n=%u ret=%d",
0136 __entry->adapter_nr,
0137 __entry->nr_msgs,
0138 __entry->ret
0139 ),
0140 i2c_transfer_trace_reg,
0141 i2c_transfer_trace_unreg);
0142
0143 #endif
0144
0145
0146 #include <trace/define_trace.h>