| /* 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 <linux/i2c.h> | 
 | #include <linux/tracepoint.h> | 
 |  | 
 | 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 <trace/define_trace.h> |