GNU Linux-libre 4.19.286-gnu1
[releases.git] / include / trace / events / i2c.h
1 /* I2C message transfer tracepoints
2  *
3  * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public Licence
8  * as published by the Free Software Foundation; either version
9  * 2 of the Licence, or (at your option) any later version.
10  */
11 #undef TRACE_SYSTEM
12 #define TRACE_SYSTEM i2c
13
14 #if !defined(_TRACE_I2C_H) || defined(TRACE_HEADER_MULTI_READ)
15 #define _TRACE_I2C_H
16
17 #include <linux/i2c.h>
18 #include <linux/tracepoint.h>
19
20 /*
21  * drivers/i2c/i2c-core-base.c
22  */
23 extern int i2c_transfer_trace_reg(void);
24 extern void i2c_transfer_trace_unreg(void);
25
26 /*
27  * __i2c_transfer() write request
28  */
29 TRACE_EVENT_FN(i2c_write,
30                TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
31                         int num),
32                TP_ARGS(adap, msg, num),
33                TP_STRUCT__entry(
34                        __field(int,     adapter_nr              )
35                        __field(__u16,   msg_nr                  )
36                        __field(__u16,   addr                    )
37                        __field(__u16,   flags                   )
38                        __field(__u16,   len                     )
39                        __dynamic_array(__u8, buf, msg->len)     ),
40                TP_fast_assign(
41                        __entry->adapter_nr = adap->nr;
42                        __entry->msg_nr = num;
43                        __entry->addr = msg->addr;
44                        __entry->flags = msg->flags;
45                        __entry->len = msg->len;
46                        memcpy(__get_dynamic_array(buf), msg->buf, msg->len);
47                               ),
48                TP_printk("i2c-%d #%u a=%03x f=%04x l=%u [%*phD]",
49                          __entry->adapter_nr,
50                          __entry->msg_nr,
51                          __entry->addr,
52                          __entry->flags,
53                          __entry->len,
54                          __entry->len, __get_dynamic_array(buf)
55                          ),
56                i2c_transfer_trace_reg,
57                i2c_transfer_trace_unreg);
58
59 /*
60  * __i2c_transfer() read request
61  */
62 TRACE_EVENT_FN(i2c_read,
63                TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
64                         int num),
65                TP_ARGS(adap, msg, num),
66                TP_STRUCT__entry(
67                        __field(int,     adapter_nr              )
68                        __field(__u16,   msg_nr                  )
69                        __field(__u16,   addr                    )
70                        __field(__u16,   flags                   )
71                        __field(__u16,   len                     )
72                                 ),
73                TP_fast_assign(
74                        __entry->adapter_nr = adap->nr;
75                        __entry->msg_nr = num;
76                        __entry->addr = msg->addr;
77                        __entry->flags = msg->flags;
78                        __entry->len = msg->len;
79                               ),
80                TP_printk("i2c-%d #%u a=%03x f=%04x l=%u",
81                          __entry->adapter_nr,
82                          __entry->msg_nr,
83                          __entry->addr,
84                          __entry->flags,
85                          __entry->len
86                          ),
87                i2c_transfer_trace_reg,
88                        i2c_transfer_trace_unreg);
89
90 /*
91  * __i2c_transfer() read reply
92  */
93 TRACE_EVENT_FN(i2c_reply,
94                TP_PROTO(const struct i2c_adapter *adap, const struct i2c_msg *msg,
95                         int num),
96                TP_ARGS(adap, msg, num),
97                TP_STRUCT__entry(
98                        __field(int,     adapter_nr              )
99                        __field(__u16,   msg_nr                  )
100                        __field(__u16,   addr                    )
101                        __field(__u16,   flags                   )
102                        __field(__u16,   len                     )
103                        __dynamic_array(__u8, buf, msg->len)     ),
104                TP_fast_assign(
105                        __entry->adapter_nr = adap->nr;
106                        __entry->msg_nr = num;
107                        __entry->addr = msg->addr;
108                        __entry->flags = msg->flags;
109                        __entry->len = msg->len;
110                        memcpy(__get_dynamic_array(buf), msg->buf, msg->len);
111                               ),
112                TP_printk("i2c-%d #%u a=%03x f=%04x l=%u [%*phD]",
113                          __entry->adapter_nr,
114                          __entry->msg_nr,
115                          __entry->addr,
116                          __entry->flags,
117                          __entry->len,
118                          __entry->len, __get_dynamic_array(buf)
119                          ),
120                i2c_transfer_trace_reg,
121                i2c_transfer_trace_unreg);
122
123 /*
124  * __i2c_transfer() result
125  */
126 TRACE_EVENT_FN(i2c_result,
127                TP_PROTO(const struct i2c_adapter *adap, int num, int ret),
128                TP_ARGS(adap, num, ret),
129                TP_STRUCT__entry(
130                        __field(int,     adapter_nr              )
131                        __field(__u16,   nr_msgs                 )
132                        __field(__s16,   ret                     )
133                                 ),
134                TP_fast_assign(
135                        __entry->adapter_nr = adap->nr;
136                        __entry->nr_msgs = num;
137                        __entry->ret = ret;
138                               ),
139                TP_printk("i2c-%d n=%u ret=%d",
140                          __entry->adapter_nr,
141                          __entry->nr_msgs,
142                          __entry->ret
143                          ),
144                i2c_transfer_trace_reg,
145                i2c_transfer_trace_unreg);
146
147 #endif /* _TRACE_I2C_H */
148
149 /* This part must be outside protection */
150 #include <trace/define_trace.h>