cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

spi.h (5951B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#undef TRACE_SYSTEM
      3#define TRACE_SYSTEM spi
      4
      5#if !defined(_TRACE_SPI_H) || defined(TRACE_HEADER_MULTI_READ)
      6#define _TRACE_SPI_H
      7
      8#include <linux/ktime.h>
      9#include <linux/tracepoint.h>
     10
     11DECLARE_EVENT_CLASS(spi_controller,
     12
     13	TP_PROTO(struct spi_controller *controller),
     14
     15	TP_ARGS(controller),
     16
     17	TP_STRUCT__entry(
     18		__field(        int,           bus_num             )
     19	),
     20
     21	TP_fast_assign(
     22		__entry->bus_num = controller->bus_num;
     23	),
     24
     25	TP_printk("spi%d", (int)__entry->bus_num)
     26
     27);
     28
     29DEFINE_EVENT(spi_controller, spi_controller_idle,
     30
     31	TP_PROTO(struct spi_controller *controller),
     32
     33	TP_ARGS(controller)
     34
     35);
     36
     37DEFINE_EVENT(spi_controller, spi_controller_busy,
     38
     39	TP_PROTO(struct spi_controller *controller),
     40
     41	TP_ARGS(controller)
     42
     43);
     44
     45TRACE_EVENT(spi_setup,
     46	TP_PROTO(struct spi_device *spi, int status),
     47	TP_ARGS(spi, status),
     48
     49	TP_STRUCT__entry(
     50		__field(int, bus_num)
     51		__field(int, chip_select)
     52		__field(unsigned long, mode)
     53		__field(unsigned int, bits_per_word)
     54		__field(unsigned int, max_speed_hz)
     55		__field(int, status)
     56	),
     57
     58	TP_fast_assign(
     59		__entry->bus_num = spi->controller->bus_num;
     60		__entry->chip_select = spi->chip_select;
     61		__entry->mode = spi->mode;
     62		__entry->bits_per_word = spi->bits_per_word;
     63		__entry->max_speed_hz = spi->max_speed_hz;
     64		__entry->status = status;
     65	),
     66
     67	TP_printk("spi%d.%d setup mode %lu, %s%s%s%s%u bits/w, %u Hz max --> %d",
     68		  __entry->bus_num, __entry->chip_select,
     69		  (__entry->mode & SPI_MODE_X_MASK),
     70		  (__entry->mode & SPI_CS_HIGH) ? "cs_high, " : "",
     71		  (__entry->mode & SPI_LSB_FIRST) ? "lsb, " : "",
     72		  (__entry->mode & SPI_3WIRE) ? "3wire, " : "",
     73		  (__entry->mode & SPI_LOOP) ? "loopback, " : "",
     74		  __entry->bits_per_word, __entry->max_speed_hz,
     75		  __entry->status)
     76);
     77
     78TRACE_EVENT(spi_set_cs,
     79	TP_PROTO(struct spi_device *spi, bool enable),
     80	TP_ARGS(spi, enable),
     81
     82	TP_STRUCT__entry(
     83		__field(int, bus_num)
     84		__field(int, chip_select)
     85		__field(unsigned long, mode)
     86		__field(bool, enable)
     87	),
     88
     89	TP_fast_assign(
     90		__entry->bus_num = spi->controller->bus_num;
     91		__entry->chip_select = spi->chip_select;
     92		__entry->mode = spi->mode;
     93		__entry->enable = enable;
     94	),
     95
     96	TP_printk("spi%d.%d %s%s",
     97		  __entry->bus_num, __entry->chip_select,
     98		  __entry->enable ? "activate" : "deactivate",
     99		  (__entry->mode & SPI_CS_HIGH) ? ", cs_high" : "")
    100);
    101
    102DECLARE_EVENT_CLASS(spi_message,
    103
    104	TP_PROTO(struct spi_message *msg),
    105
    106	TP_ARGS(msg),
    107
    108	TP_STRUCT__entry(
    109		__field(        int,            bus_num         )
    110		__field(        int,            chip_select     )
    111		__field(        struct spi_message *,   msg     )
    112	),
    113
    114	TP_fast_assign(
    115		__entry->bus_num = msg->spi->controller->bus_num;
    116		__entry->chip_select = msg->spi->chip_select;
    117		__entry->msg = msg;
    118	),
    119
    120        TP_printk("spi%d.%d %p", (int)__entry->bus_num,
    121		  (int)__entry->chip_select,
    122		  (struct spi_message *)__entry->msg)
    123);
    124
    125DEFINE_EVENT(spi_message, spi_message_submit,
    126
    127	TP_PROTO(struct spi_message *msg),
    128
    129	TP_ARGS(msg)
    130
    131);
    132
    133DEFINE_EVENT(spi_message, spi_message_start,
    134
    135	TP_PROTO(struct spi_message *msg),
    136
    137	TP_ARGS(msg)
    138
    139);
    140
    141TRACE_EVENT(spi_message_done,
    142
    143	TP_PROTO(struct spi_message *msg),
    144
    145	TP_ARGS(msg),
    146
    147	TP_STRUCT__entry(
    148		__field(        int,            bus_num         )
    149		__field(        int,            chip_select     )
    150		__field(        struct spi_message *,   msg     )
    151		__field(        unsigned,       frame           )
    152		__field(        unsigned,       actual          )
    153	),
    154
    155	TP_fast_assign(
    156		__entry->bus_num = msg->spi->controller->bus_num;
    157		__entry->chip_select = msg->spi->chip_select;
    158		__entry->msg = msg;
    159		__entry->frame = msg->frame_length;
    160		__entry->actual = msg->actual_length;
    161	),
    162
    163        TP_printk("spi%d.%d %p len=%u/%u", (int)__entry->bus_num,
    164		  (int)__entry->chip_select,
    165		  (struct spi_message *)__entry->msg,
    166                  (unsigned)__entry->actual, (unsigned)__entry->frame)
    167);
    168
    169/*
    170 * consider a buffer valid if non-NULL and if it doesn't match the dummy buffer
    171 * that only exist to work with controllers that have SPI_CONTROLLER_MUST_TX or
    172 * SPI_CONTROLLER_MUST_RX.
    173 */
    174#define spi_valid_txbuf(msg, xfer) \
    175	(xfer->tx_buf && xfer->tx_buf != msg->spi->controller->dummy_tx)
    176#define spi_valid_rxbuf(msg, xfer) \
    177	(xfer->rx_buf && xfer->rx_buf != msg->spi->controller->dummy_rx)
    178
    179DECLARE_EVENT_CLASS(spi_transfer,
    180
    181	TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
    182
    183	TP_ARGS(msg, xfer),
    184
    185	TP_STRUCT__entry(
    186		__field(        int,            bus_num         )
    187		__field(        int,            chip_select     )
    188		__field(        struct spi_transfer *,   xfer   )
    189		__field(        int,            len             )
    190		__dynamic_array(u8, rx_buf,
    191				spi_valid_rxbuf(msg, xfer) ?
    192					(xfer->len < 64 ? xfer->len : 64) : 0)
    193		__dynamic_array(u8, tx_buf,
    194				spi_valid_txbuf(msg, xfer) ?
    195					(xfer->len < 64 ? xfer->len : 64) : 0)
    196	),
    197
    198	TP_fast_assign(
    199		__entry->bus_num = msg->spi->controller->bus_num;
    200		__entry->chip_select = msg->spi->chip_select;
    201		__entry->xfer = xfer;
    202		__entry->len = xfer->len;
    203
    204		if (spi_valid_txbuf(msg, xfer))
    205			memcpy(__get_dynamic_array(tx_buf),
    206			       xfer->tx_buf, __get_dynamic_array_len(tx_buf));
    207
    208		if (spi_valid_rxbuf(msg, xfer))
    209			memcpy(__get_dynamic_array(rx_buf),
    210			       xfer->rx_buf, __get_dynamic_array_len(rx_buf));
    211	),
    212
    213	TP_printk("spi%d.%d %p len=%d tx=[%*phD] rx=[%*phD]",
    214		  __entry->bus_num, __entry->chip_select,
    215		  __entry->xfer, __entry->len,
    216		  __get_dynamic_array_len(tx_buf), __get_dynamic_array(tx_buf),
    217		  __get_dynamic_array_len(rx_buf), __get_dynamic_array(rx_buf))
    218);
    219
    220DEFINE_EVENT(spi_transfer, spi_transfer_start,
    221
    222	TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
    223
    224	TP_ARGS(msg, xfer)
    225
    226);
    227
    228DEFINE_EVENT(spi_transfer, spi_transfer_stop,
    229
    230	TP_PROTO(struct spi_message *msg, struct spi_transfer *xfer),
    231
    232	TP_ARGS(msg, xfer)
    233
    234);
    235
    236#endif /* _TRACE_POWER_H */
    237
    238/* This part must be outside protection */
    239#include <trace/define_trace.h>