|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | #undef TRACE_SYSTEM | 
|  | #define TRACE_SYSTEM spi | 
|  |  | 
|  | #if !defined(_TRACE_SPI_H) || defined(TRACE_HEADER_MULTI_READ) | 
|  | #define _TRACE_SPI_H | 
|  |  | 
|  | #include <linux/ktime.h> | 
|  | #include <linux/tracepoint.h> | 
|  |  | 
|  | DECLARE_EVENT_CLASS(spi_controller, | 
|  |  | 
|  | TP_PROTO(struct spi_controller *controller), | 
|  |  | 
|  | TP_ARGS(controller), | 
|  |  | 
|  | TP_STRUCT__entry( | 
|  | __field(        int,           bus_num             ) | 
|  | ), | 
|  |  | 
|  | TP_fast_assign( | 
|  | __entry->bus_num = controller->bus_num; | 
|  | ), | 
|  |  | 
|  | TP_printk("spi%d", (int)__entry->bus_num) | 
|  |  | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_controller, spi_controller_idle, | 
|  |  | 
|  | TP_PROTO(struct spi_controller *controller), | 
|  |  | 
|  | TP_ARGS(controller) | 
|  |  | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_controller, spi_controller_busy, | 
|  |  | 
|  | TP_PROTO(struct spi_controller *controller), | 
|  |  | 
|  | TP_ARGS(controller) | 
|  |  | 
|  | ); | 
|  |  | 
|  | DECLARE_EVENT_CLASS(spi_message, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg), | 
|  |  | 
|  | TP_ARGS(msg), | 
|  |  | 
|  | TP_STRUCT__entry( | 
|  | __field(        int,            bus_num         ) | 
|  | __field(        int,            chip_select     ) | 
|  | __field(        struct spi_message *,   msg     ) | 
|  | ), | 
|  |  | 
|  | TP_fast_assign( | 
|  | __entry->bus_num = msg->spi->controller->bus_num; | 
|  | __entry->chip_select = msg->spi->chip_select; | 
|  | __entry->msg = msg; | 
|  | ), | 
|  |  | 
|  | TP_printk("spi%d.%d %p", (int)__entry->bus_num, | 
|  | (int)__entry->chip_select, | 
|  | (struct spi_message *)__entry->msg) | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_message, spi_message_submit, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg), | 
|  |  | 
|  | TP_ARGS(msg) | 
|  |  | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_message, spi_message_start, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg), | 
|  |  | 
|  | TP_ARGS(msg) | 
|  |  | 
|  | ); | 
|  |  | 
|  | TRACE_EVENT(spi_message_done, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg), | 
|  |  | 
|  | TP_ARGS(msg), | 
|  |  | 
|  | TP_STRUCT__entry( | 
|  | __field(        int,            bus_num         ) | 
|  | __field(        int,            chip_select     ) | 
|  | __field(        struct spi_message *,   msg     ) | 
|  | __field(        unsigned,       frame           ) | 
|  | __field(        unsigned,       actual          ) | 
|  | ), | 
|  |  | 
|  | TP_fast_assign( | 
|  | __entry->bus_num = msg->spi->controller->bus_num; | 
|  | __entry->chip_select = msg->spi->chip_select; | 
|  | __entry->msg = msg; | 
|  | __entry->frame = msg->frame_length; | 
|  | __entry->actual = msg->actual_length; | 
|  | ), | 
|  |  | 
|  | TP_printk("spi%d.%d %p len=%u/%u", (int)__entry->bus_num, | 
|  | (int)__entry->chip_select, | 
|  | (struct spi_message *)__entry->msg, | 
|  | (unsigned)__entry->actual, (unsigned)__entry->frame) | 
|  | ); | 
|  |  | 
|  | DECLARE_EVENT_CLASS(spi_transfer, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer), | 
|  |  | 
|  | TP_ARGS(msg, xfer), | 
|  |  | 
|  | TP_STRUCT__entry( | 
|  | __field(        int,            bus_num         ) | 
|  | __field(        int,            chip_select     ) | 
|  | __field(        struct spi_transfer *,   xfer   ) | 
|  | __field(        int,            len             ) | 
|  | ), | 
|  |  | 
|  | TP_fast_assign( | 
|  | __entry->bus_num = msg->spi->controller->bus_num; | 
|  | __entry->chip_select = msg->spi->chip_select; | 
|  | __entry->xfer = xfer; | 
|  | __entry->len = xfer->len; | 
|  | ), | 
|  |  | 
|  | TP_printk("spi%d.%d %p len=%d", (int)__entry->bus_num, | 
|  | (int)__entry->chip_select, | 
|  | (struct spi_message *)__entry->xfer, | 
|  | (int)__entry->len) | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_transfer, spi_transfer_start, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer), | 
|  |  | 
|  | TP_ARGS(msg, xfer) | 
|  |  | 
|  | ); | 
|  |  | 
|  | DEFINE_EVENT(spi_transfer, spi_transfer_stop, | 
|  |  | 
|  | TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer), | 
|  |  | 
|  | TP_ARGS(msg, xfer) | 
|  |  | 
|  | ); | 
|  |  | 
|  | #endif /* _TRACE_POWER_H */ | 
|  |  | 
|  | /* This part must be outside protection */ | 
|  | #include <trace/define_trace.h> |