1*d714fb25SJae Hyun Yoo /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*d714fb25SJae Hyun Yoo /* 3*d714fb25SJae Hyun Yoo * I2C slave tracepoints 4*d714fb25SJae Hyun Yoo * 5*d714fb25SJae Hyun Yoo * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. 6*d714fb25SJae Hyun Yoo */ 7*d714fb25SJae Hyun Yoo #undef TRACE_SYSTEM 8*d714fb25SJae Hyun Yoo #define TRACE_SYSTEM i2c_slave 9*d714fb25SJae Hyun Yoo 10*d714fb25SJae Hyun Yoo #if !defined(_TRACE_I2C_SLAVE_H) || defined(TRACE_HEADER_MULTI_READ) 11*d714fb25SJae Hyun Yoo #define _TRACE_I2C_SLAVE_H 12*d714fb25SJae Hyun Yoo 13*d714fb25SJae Hyun Yoo #include <linux/i2c.h> 14*d714fb25SJae Hyun Yoo #include <linux/tracepoint.h> 15*d714fb25SJae Hyun Yoo 16*d714fb25SJae Hyun Yoo TRACE_DEFINE_ENUM(I2C_SLAVE_READ_REQUESTED); 17*d714fb25SJae Hyun Yoo TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_REQUESTED); 18*d714fb25SJae Hyun Yoo TRACE_DEFINE_ENUM(I2C_SLAVE_READ_PROCESSED); 19*d714fb25SJae Hyun Yoo TRACE_DEFINE_ENUM(I2C_SLAVE_WRITE_RECEIVED); 20*d714fb25SJae Hyun Yoo TRACE_DEFINE_ENUM(I2C_SLAVE_STOP); 21*d714fb25SJae Hyun Yoo 22*d714fb25SJae Hyun Yoo #define show_event_type(type) \ 23*d714fb25SJae Hyun Yoo __print_symbolic(type, \ 24*d714fb25SJae Hyun Yoo { I2C_SLAVE_READ_REQUESTED, "RD_REQ" }, \ 25*d714fb25SJae Hyun Yoo { I2C_SLAVE_WRITE_REQUESTED, "WR_REQ" }, \ 26*d714fb25SJae Hyun Yoo { I2C_SLAVE_READ_PROCESSED, "RD_PRO" }, \ 27*d714fb25SJae Hyun Yoo { I2C_SLAVE_WRITE_RECEIVED, "WR_RCV" }, \ 28*d714fb25SJae Hyun Yoo { I2C_SLAVE_STOP, " STOP" }) 29*d714fb25SJae Hyun Yoo 30*d714fb25SJae Hyun Yoo TRACE_EVENT(i2c_slave, 31*d714fb25SJae Hyun Yoo TP_PROTO(const struct i2c_client *client, enum i2c_slave_event event, 32*d714fb25SJae Hyun Yoo __u8 *val, int cb_ret), 33*d714fb25SJae Hyun Yoo TP_ARGS(client, event, val, cb_ret), 34*d714fb25SJae Hyun Yoo TP_STRUCT__entry( 35*d714fb25SJae Hyun Yoo __field(int, adapter_nr ) 36*d714fb25SJae Hyun Yoo __field(int, ret ) 37*d714fb25SJae Hyun Yoo __field(__u16, addr ) 38*d714fb25SJae Hyun Yoo __field(__u16, len ) 39*d714fb25SJae Hyun Yoo __field(enum i2c_slave_event, event ) 40*d714fb25SJae Hyun Yoo __array(__u8, buf, 1) ), 41*d714fb25SJae Hyun Yoo 42*d714fb25SJae Hyun Yoo TP_fast_assign( 43*d714fb25SJae Hyun Yoo __entry->adapter_nr = client->adapter->nr; 44*d714fb25SJae Hyun Yoo __entry->addr = client->addr; 45*d714fb25SJae Hyun Yoo __entry->event = event; 46*d714fb25SJae Hyun Yoo __entry->ret = cb_ret; 47*d714fb25SJae Hyun Yoo switch (event) { 48*d714fb25SJae Hyun Yoo case I2C_SLAVE_READ_REQUESTED: 49*d714fb25SJae Hyun Yoo case I2C_SLAVE_READ_PROCESSED: 50*d714fb25SJae Hyun Yoo case I2C_SLAVE_WRITE_RECEIVED: 51*d714fb25SJae Hyun Yoo __entry->len = 1; 52*d714fb25SJae Hyun Yoo memcpy(__entry->buf, val, __entry->len); 53*d714fb25SJae Hyun Yoo break; 54*d714fb25SJae Hyun Yoo default: 55*d714fb25SJae Hyun Yoo __entry->len = 0; 56*d714fb25SJae Hyun Yoo break; 57*d714fb25SJae Hyun Yoo } 58*d714fb25SJae Hyun Yoo ), 59*d714fb25SJae Hyun Yoo TP_printk("i2c-%d a=%03x ret=%d %s [%*phD]", 60*d714fb25SJae Hyun Yoo __entry->adapter_nr, __entry->addr, __entry->ret, 61*d714fb25SJae Hyun Yoo show_event_type(__entry->event), __entry->len, __entry->buf 62*d714fb25SJae Hyun Yoo )); 63*d714fb25SJae Hyun Yoo 64*d714fb25SJae Hyun Yoo #endif /* _TRACE_I2C_SLAVE_H */ 65*d714fb25SJae Hyun Yoo 66*d714fb25SJae Hyun Yoo /* This part must be outside protection */ 67*d714fb25SJae Hyun Yoo #include <trace/define_trace.h> 68