~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/trace/events/smbus.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /* SMBUS message transfer tracepoints
  3  *
  4  * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.
  5  * Written by David Howells (dhowells@redhat.com)
  6  */
  7 #undef TRACE_SYSTEM
  8 #define TRACE_SYSTEM smbus
  9 
 10 #if !defined(_TRACE_SMBUS_H) || defined(TRACE_HEADER_MULTI_READ)
 11 #define _TRACE_SMBUS_H
 12 
 13 #include <linux/i2c.h>
 14 #include <linux/tracepoint.h>
 15 
 16 /*
 17  * drivers/i2c/i2c-core-smbus.c
 18  */
 19 
 20 /*
 21  * i2c_smbus_xfer() write data or procedure call request
 22  */
 23 TRACE_EVENT_CONDITION(smbus_write,
 24         TP_PROTO(const struct i2c_adapter *adap,
 25                  u16 addr, unsigned short flags,
 26                  char read_write, u8 command, int protocol,
 27                  const union i2c_smbus_data *data),
 28         TP_ARGS(adap, addr, flags, read_write, command, protocol, data),
 29         TP_CONDITION(read_write == I2C_SMBUS_WRITE ||
 30                      protocol == I2C_SMBUS_PROC_CALL ||
 31                      protocol == I2C_SMBUS_BLOCK_PROC_CALL),
 32         TP_STRUCT__entry(
 33                 __field(int,    adapter_nr              )
 34                 __field(__u16,  addr                    )
 35                 __field(__u16,  flags                   )
 36                 __field(__u8,   command                 )
 37                 __field(__u8,   len                     )
 38                 __field(__u32,  protocol                )
 39                 __array(__u8, buf, I2C_SMBUS_BLOCK_MAX + 2)     ),
 40         TP_fast_assign(
 41                 __entry->adapter_nr = adap->nr;
 42                 __entry->addr = addr;
 43                 __entry->flags = flags;
 44                 __entry->command = command;
 45                 __entry->protocol = protocol;
 46 
 47                 switch (protocol) {
 48                 case I2C_SMBUS_BYTE_DATA:
 49                         __entry->len = 1;
 50                         goto copy;
 51                 case I2C_SMBUS_WORD_DATA:
 52                 case I2C_SMBUS_PROC_CALL:
 53                         __entry->len = 2;
 54                         goto copy;
 55                 case I2C_SMBUS_BLOCK_DATA:
 56                 case I2C_SMBUS_BLOCK_PROC_CALL:
 57                 case I2C_SMBUS_I2C_BLOCK_DATA:
 58                         __entry->len = data->block[0] + 1;
 59                 copy:
 60                         memcpy(__entry->buf, data->block, __entry->len);
 61                         break;
 62                 case I2C_SMBUS_QUICK:
 63                 case I2C_SMBUS_BYTE:
 64                 case I2C_SMBUS_I2C_BLOCK_BROKEN:
 65                 default:
 66                         __entry->len = 0;
 67                 }
 68                        ),
 69         TP_printk("i2c-%d a=%03x f=%04x c=%x %s l=%u [%*phD]",
 70                   __entry->adapter_nr,
 71                   __entry->addr,
 72                   __entry->flags,
 73                   __entry->command,
 74                   __print_symbolic(__entry->protocol,
 75                                    { I2C_SMBUS_QUICK,           "QUICK" },
 76                                    { I2C_SMBUS_BYTE,            "BYTE"  },
 77                                    { I2C_SMBUS_BYTE_DATA,               "BYTE_DATA" },
 78                                    { I2C_SMBUS_WORD_DATA,               "WORD_DATA" },
 79                                    { I2C_SMBUS_PROC_CALL,               "PROC_CALL" },
 80                                    { I2C_SMBUS_BLOCK_DATA,              "BLOCK_DATA" },
 81                                    { I2C_SMBUS_I2C_BLOCK_BROKEN,        "I2C_BLOCK_BROKEN" },
 82                                    { I2C_SMBUS_BLOCK_PROC_CALL, "BLOCK_PROC_CALL" },
 83                                    { I2C_SMBUS_I2C_BLOCK_DATA,  "I2C_BLOCK_DATA" }),
 84                   __entry->len,
 85                   __entry->len, __entry->buf
 86                   ));
 87 
 88 /*
 89  * i2c_smbus_xfer() read data request
 90  */
 91 TRACE_EVENT_CONDITION(smbus_read,
 92         TP_PROTO(const struct i2c_adapter *adap,
 93                  u16 addr, unsigned short flags,
 94                  char read_write, u8 command, int protocol),
 95         TP_ARGS(adap, addr, flags, read_write, command, protocol),
 96         TP_CONDITION(!(read_write == I2C_SMBUS_WRITE ||
 97                        protocol == I2C_SMBUS_PROC_CALL ||
 98                        protocol == I2C_SMBUS_BLOCK_PROC_CALL)),
 99         TP_STRUCT__entry(
100                 __field(int,    adapter_nr              )
101                 __field(__u16,  flags                   )
102                 __field(__u16,  addr                    )
103                 __field(__u8,   command                 )
104                 __field(__u32,  protocol                )
105                 __array(__u8, buf, I2C_SMBUS_BLOCK_MAX + 2)     ),
106         TP_fast_assign(
107                 __entry->adapter_nr = adap->nr;
108                 __entry->addr = addr;
109                 __entry->flags = flags;
110                 __entry->command = command;
111                 __entry->protocol = protocol;
112                        ),
113         TP_printk("i2c-%d a=%03x f=%04x c=%x %s",
114                   __entry->adapter_nr,
115                   __entry->addr,
116                   __entry->flags,
117                   __entry->command,
118                   __print_symbolic(__entry->protocol,
119                                    { I2C_SMBUS_QUICK,           "QUICK" },
120                                    { I2C_SMBUS_BYTE,            "BYTE"  },
121                                    { I2C_SMBUS_BYTE_DATA,               "BYTE_DATA" },
122                                    { I2C_SMBUS_WORD_DATA,               "WORD_DATA" },
123                                    { I2C_SMBUS_PROC_CALL,               "PROC_CALL" },
124                                    { I2C_SMBUS_BLOCK_DATA,              "BLOCK_DATA" },
125                                    { I2C_SMBUS_I2C_BLOCK_BROKEN,        "I2C_BLOCK_BROKEN" },
126                                    { I2C_SMBUS_BLOCK_PROC_CALL, "BLOCK_PROC_CALL" },
127                                    { I2C_SMBUS_I2C_BLOCK_DATA,  "I2C_BLOCK_DATA" })
128                   ));
129 
130 /*
131  * i2c_smbus_xfer() read data or procedure call reply
132  */
133 TRACE_EVENT_CONDITION(smbus_reply,
134         TP_PROTO(const struct i2c_adapter *adap,
135                  u16 addr, unsigned short flags,
136                  char read_write, u8 command, int protocol,
137                  const union i2c_smbus_data *data, int res),
138         TP_ARGS(adap, addr, flags, read_write, command, protocol, data, res),
139         TP_CONDITION(res >= 0 && read_write == I2C_SMBUS_READ),
140         TP_STRUCT__entry(
141                 __field(int,    adapter_nr              )
142                 __field(__u16,  addr                    )
143                 __field(__u16,  flags                   )
144                 __field(__u8,   command                 )
145                 __field(__u8,   len                     )
146                 __field(__u32,  protocol                )
147                 __array(__u8, buf, I2C_SMBUS_BLOCK_MAX + 2)     ),
148         TP_fast_assign(
149                 __entry->adapter_nr = adap->nr;
150                 __entry->addr = addr;
151                 __entry->flags = flags;
152                 __entry->command = command;
153                 __entry->protocol = protocol;
154 
155                 switch (protocol) {
156                 case I2C_SMBUS_BYTE:
157                 case I2C_SMBUS_BYTE_DATA:
158                         __entry->len = 1;
159                         goto copy;
160                 case I2C_SMBUS_WORD_DATA:
161                 case I2C_SMBUS_PROC_CALL:
162                         __entry->len = 2;
163                         goto copy;
164                 case I2C_SMBUS_BLOCK_DATA:
165                 case I2C_SMBUS_BLOCK_PROC_CALL:
166                 case I2C_SMBUS_I2C_BLOCK_DATA:
167                         __entry->len = data->block[0] + 1;
168                 copy:
169                         memcpy(__entry->buf, data->block, __entry->len);
170                         break;
171                 case I2C_SMBUS_QUICK:
172                 case I2C_SMBUS_I2C_BLOCK_BROKEN:
173                 default:
174                         __entry->len = 0;
175                 }
176                        ),
177         TP_printk("i2c-%d a=%03x f=%04x c=%x %s l=%u [%*phD]",
178                   __entry->adapter_nr,
179                   __entry->addr,
180                   __entry->flags,
181                   __entry->command,
182                   __print_symbolic(__entry->protocol,
183                                    { I2C_SMBUS_QUICK,           "QUICK" },
184                                    { I2C_SMBUS_BYTE,            "BYTE"  },
185                                    { I2C_SMBUS_BYTE_DATA,               "BYTE_DATA" },
186                                    { I2C_SMBUS_WORD_DATA,               "WORD_DATA" },
187                                    { I2C_SMBUS_PROC_CALL,               "PROC_CALL" },
188                                    { I2C_SMBUS_BLOCK_DATA,              "BLOCK_DATA" },
189                                    { I2C_SMBUS_I2C_BLOCK_BROKEN,        "I2C_BLOCK_BROKEN" },
190                                    { I2C_SMBUS_BLOCK_PROC_CALL, "BLOCK_PROC_CALL" },
191                                    { I2C_SMBUS_I2C_BLOCK_DATA,  "I2C_BLOCK_DATA" }),
192                   __entry->len,
193                   __entry->len, __entry->buf
194                   ));
195 
196 /*
197  * i2c_smbus_xfer() result
198  */
199 TRACE_EVENT(smbus_result,
200             TP_PROTO(const struct i2c_adapter *adap,
201                      u16 addr, unsigned short flags,
202                      char read_write, u8 command, int protocol,
203                      int res),
204             TP_ARGS(adap, addr, flags, read_write, command, protocol, res),
205             TP_STRUCT__entry(
206                     __field(int,        adapter_nr              )
207                     __field(__u16,      addr                    )
208                     __field(__u16,      flags                   )
209                     __field(__u8,       read_write              )
210                     __field(__u8,       command                 )
211                     __field(__s16,      res                     )
212                     __field(__u32,      protocol                )
213                              ),
214             TP_fast_assign(
215                     __entry->adapter_nr = adap->nr;
216                     __entry->addr = addr;
217                     __entry->flags = flags;
218                     __entry->read_write = read_write;
219                     __entry->command = command;
220                     __entry->protocol = protocol;
221                     __entry->res = res;
222                            ),
223             TP_printk("i2c-%d a=%03x f=%04x c=%x %s %s res=%d",
224                       __entry->adapter_nr,
225                       __entry->addr,
226                       __entry->flags,
227                       __entry->command,
228                       __print_symbolic(__entry->protocol,
229                                        { I2C_SMBUS_QUICK,               "QUICK" },
230                                        { I2C_SMBUS_BYTE,                "BYTE"  },
231                                        { I2C_SMBUS_BYTE_DATA,           "BYTE_DATA" },
232                                        { I2C_SMBUS_WORD_DATA,           "WORD_DATA" },
233                                        { I2C_SMBUS_PROC_CALL,           "PROC_CALL" },
234                                        { I2C_SMBUS_BLOCK_DATA,          "BLOCK_DATA" },
235                                        { I2C_SMBUS_I2C_BLOCK_BROKEN,    "I2C_BLOCK_BROKEN" },
236                                        { I2C_SMBUS_BLOCK_PROC_CALL,     "BLOCK_PROC_CALL" },
237                                        { I2C_SMBUS_I2C_BLOCK_DATA,      "I2C_BLOCK_DATA" }),
238                       __entry->read_write == I2C_SMBUS_WRITE ? "wr" : "rd",
239                       __entry->res
240                       ));
241 
242 #endif /* _TRACE_SMBUS_H */
243 
244 /* This part must be outside protection */
245 #include <trace/define_trace.h>
246 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php