Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * I2C slave tracepoints
0004  *
0005  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
0006  */
0007 #undef TRACE_SYSTEM
0008 #define TRACE_SYSTEM i2c_slave
0009 
0010 #if !defined(_TRACE_I2C_SLAVE_H) || defined(TRACE_HEADER_MULTI_READ)
0011 #define _TRACE_I2C_SLAVE_H
0012 
0013 #include <linux/i2c.h>
0014 #include <linux/tracepoint.h>
0015 
0016 TRACE_DEFINE_ENUM(I2C_SLAVE_READ_REQUESTED);
0017 TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_REQUESTED);
0018 TRACE_DEFINE_ENUM(I2C_SLAVE_READ_PROCESSED);
0019 TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_RECEIVED);
0020 TRACE_DEFINE_ENUM(I2C_SLAVE_STOP);
0021 
0022 #define show_event_type(type)                       \
0023     __print_symbolic(type,                      \
0024         { I2C_SLAVE_READ_REQUESTED, "RD_REQ" },     \
0025         { I2C_SLAVE_WRITE_REQUESTED,    "WR_REQ" },     \
0026         { I2C_SLAVE_READ_PROCESSED, "RD_PRO" },     \
0027         { I2C_SLAVE_WRITE_RECEIVED, "WR_RCV" },     \
0028         { I2C_SLAVE_STOP,       "  STOP" })
0029 
0030 TRACE_EVENT(i2c_slave,
0031     TP_PROTO(const struct i2c_client *client, enum i2c_slave_event event,
0032          __u8 *val, int cb_ret),
0033     TP_ARGS(client, event, val, cb_ret),
0034     TP_STRUCT__entry(
0035         __field(int,                adapter_nr  )
0036         __field(int,                ret     )
0037         __field(__u16,              addr        )
0038         __field(__u16,              len     )
0039         __field(enum i2c_slave_event,       event       )
0040         __array(__u8,               buf,    1)  ),
0041 
0042     TP_fast_assign(
0043         __entry->adapter_nr = client->adapter->nr;
0044         __entry->addr = client->addr;
0045         __entry->event = event;
0046         __entry->ret = cb_ret;
0047         switch (event) {
0048         case I2C_SLAVE_READ_REQUESTED:
0049         case I2C_SLAVE_READ_PROCESSED:
0050         case I2C_SLAVE_WRITE_RECEIVED:
0051             __entry->len = 1;
0052             memcpy(__entry->buf, val, __entry->len);
0053             break;
0054         default:
0055             __entry->len = 0;
0056             break;
0057         }
0058         ),
0059     TP_printk("i2c-%d a=%03x ret=%d %s [%*phD]",
0060         __entry->adapter_nr, __entry->addr, __entry->ret,
0061         show_event_type(__entry->event), __entry->len, __entry->buf
0062         ));
0063 
0064 #endif /* _TRACE_I2C_SLAVE_H */
0065 
0066 /* This part must be outside protection */
0067 #include <trace/define_trace.h>