/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * I2C slave tracepoints * * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM i2c_slave #if !defined(_TRACE_I2C_SLAVE_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_I2C_SLAVE_H #include #include TRACE_DEFINE_ENUM(I2C_SLAVE_READ_REQUESTED); TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_REQUESTED); TRACE_DEFINE_ENUM(I2C_SLAVE_READ_PROCESSED); TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_RECEIVED); TRACE_DEFINE_ENUM(I2C_SLAVE_STOP); #define show_event_type(type) \ __print_symbolic(type, \ { I2C_SLAVE_READ_REQUESTED, "RD_REQ" }, \ { I2C_SLAVE_WRITE_REQUESTED, "WR_REQ" }, \ { I2C_SLAVE_READ_PROCESSED, "RD_PRO" }, \ { I2C_SLAVE_WRITE_RECEIVED, "WR_RCV" }, \ { I2C_SLAVE_STOP, " STOP" }) TRACE_EVENT(i2c_slave, TP_PROTO(const struct i2c_client *client, enum i2c_slave_event event, __u8 *val, int cb_ret), TP_ARGS(client, event, val, cb_ret), TP_STRUCT__entry( __field(int, adapter_nr ) __field(int, ret ) __field(__u16, addr ) __field(__u16, len ) __field(enum i2c_slave_event, event ) __array(__u8, buf, 1) ), TP_fast_assign( __entry->adapter_nr = client->adapter->nr; __entry->addr = client->addr; __entry->event = event; __entry->ret = cb_ret; switch (event) { case I2C_SLAVE_READ_REQUESTED: case I2C_SLAVE_READ_PROCESSED: case I2C_SLAVE_WRITE_RECEIVED: __entry->len = 1; memcpy(__entry->buf, val, __entry->len); break; default: __entry->len = 0; break; } ), TP_printk("i2c-%d a=%03x ret=%d %s [%*phD]", __entry->adapter_nr, __entry->addr, __entry->ret, show_event_type(__entry->event), __entry->len, __entry->buf )); #endif /* _TRACE_I2C_SLAVE_H */ /* This part must be outside protection */ #include