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

greybus_trace.h (12381B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Greybus driver and device API
      4 *
      5 * Copyright 2015 Google Inc.
      6 * Copyright 2015 Linaro Ltd.
      7 */
      8#undef TRACE_SYSTEM
      9#define TRACE_SYSTEM greybus
     10
     11#if !defined(_TRACE_GREYBUS_H) || defined(TRACE_HEADER_MULTI_READ)
     12#define _TRACE_GREYBUS_H
     13
     14#include <linux/tracepoint.h>
     15
     16struct gb_message;
     17struct gb_operation;
     18struct gb_connection;
     19struct gb_bundle;
     20struct gb_host_device;
     21
     22DECLARE_EVENT_CLASS(gb_message,
     23
     24	TP_PROTO(struct gb_message *message),
     25
     26	TP_ARGS(message),
     27
     28	TP_STRUCT__entry(
     29		__field(u16, size)
     30		__field(u16, operation_id)
     31		__field(u8, type)
     32		__field(u8, result)
     33	),
     34
     35	TP_fast_assign(
     36		__entry->size = le16_to_cpu(message->header->size);
     37		__entry->operation_id =
     38			le16_to_cpu(message->header->operation_id);
     39		__entry->type = message->header->type;
     40		__entry->result = message->header->result;
     41	),
     42
     43	TP_printk("size=%u operation_id=0x%04x type=0x%02x result=0x%02x",
     44		  __entry->size, __entry->operation_id,
     45		  __entry->type, __entry->result)
     46);
     47
     48#define DEFINE_MESSAGE_EVENT(name)					\
     49		DEFINE_EVENT(gb_message, name,				\
     50				TP_PROTO(struct gb_message *message),	\
     51				TP_ARGS(message))
     52
     53/*
     54 * Occurs immediately before calling a host device's message_send()
     55 * method.
     56 */
     57DEFINE_MESSAGE_EVENT(gb_message_send);
     58
     59/*
     60 * Occurs after an incoming request message has been received
     61 */
     62DEFINE_MESSAGE_EVENT(gb_message_recv_request);
     63
     64/*
     65 * Occurs after an incoming response message has been received,
     66 * after its matching request has been found.
     67 */
     68DEFINE_MESSAGE_EVENT(gb_message_recv_response);
     69
     70/*
     71 * Occurs after an operation has been canceled, possibly before the
     72 * cancellation is complete.
     73 */
     74DEFINE_MESSAGE_EVENT(gb_message_cancel_outgoing);
     75
     76/*
     77 * Occurs when an incoming request is cancelled; if the response has
     78 * been queued for sending, this occurs after it is sent.
     79 */
     80DEFINE_MESSAGE_EVENT(gb_message_cancel_incoming);
     81
     82/*
     83 * Occurs in the host driver message_send() function just prior to
     84 * handing off the data to be processed by hardware.
     85 */
     86DEFINE_MESSAGE_EVENT(gb_message_submit);
     87
     88#undef DEFINE_MESSAGE_EVENT
     89
     90DECLARE_EVENT_CLASS(gb_operation,
     91
     92	TP_PROTO(struct gb_operation *operation),
     93
     94	TP_ARGS(operation),
     95
     96	TP_STRUCT__entry(
     97		__field(u16, cport_id)	/* CPort of HD side of connection */
     98		__field(u16, id)	/* Operation ID */
     99		__field(u8, type)
    100		__field(unsigned long, flags)
    101		__field(int, active)
    102		__field(int, waiters)
    103		__field(int, errno)
    104	),
    105
    106	TP_fast_assign(
    107		__entry->cport_id = operation->connection->hd_cport_id;
    108		__entry->id = operation->id;
    109		__entry->type = operation->type;
    110		__entry->flags = operation->flags;
    111		__entry->active = operation->active;
    112		__entry->waiters = atomic_read(&operation->waiters);
    113		__entry->errno = operation->errno;
    114	),
    115
    116	TP_printk("id=%04x type=0x%02x cport_id=%04x flags=0x%lx active=%d waiters=%d errno=%d",
    117		  __entry->id, __entry->cport_id, __entry->type, __entry->flags,
    118		  __entry->active, __entry->waiters, __entry->errno)
    119);
    120
    121#define DEFINE_OPERATION_EVENT(name)					\
    122		DEFINE_EVENT(gb_operation, name,			\
    123				TP_PROTO(struct gb_operation *operation), \
    124				TP_ARGS(operation))
    125
    126/*
    127 * Occurs after a new operation is created for an outgoing request
    128 * has been successfully created.
    129 */
    130DEFINE_OPERATION_EVENT(gb_operation_create);
    131
    132/*
    133 * Occurs after a new core operation has been created.
    134 */
    135DEFINE_OPERATION_EVENT(gb_operation_create_core);
    136
    137/*
    138 * Occurs after a new operation has been created for an incoming
    139 * request has been successfully created and initialized.
    140 */
    141DEFINE_OPERATION_EVENT(gb_operation_create_incoming);
    142
    143/*
    144 * Occurs when the last reference to an operation has been dropped,
    145 * prior to freeing resources.
    146 */
    147DEFINE_OPERATION_EVENT(gb_operation_destroy);
    148
    149/*
    150 * Occurs when an operation has been marked active, after updating
    151 * its active count.
    152 */
    153DEFINE_OPERATION_EVENT(gb_operation_get_active);
    154
    155/*
    156 * Occurs when an operation has been marked active, before updating
    157 * its active count.
    158 */
    159DEFINE_OPERATION_EVENT(gb_operation_put_active);
    160
    161#undef DEFINE_OPERATION_EVENT
    162
    163DECLARE_EVENT_CLASS(gb_connection,
    164
    165	TP_PROTO(struct gb_connection *connection),
    166
    167	TP_ARGS(connection),
    168
    169	TP_STRUCT__entry(
    170		__field(int, hd_bus_id)
    171		__field(u8, bundle_id)
    172		/* name contains "hd_cport_id/intf_id:cport_id" */
    173		__dynamic_array(char, name, sizeof(connection->name))
    174		__field(enum gb_connection_state, state)
    175		__field(unsigned long, flags)
    176	),
    177
    178	TP_fast_assign(
    179		__entry->hd_bus_id = connection->hd->bus_id;
    180		__entry->bundle_id = connection->bundle ?
    181				connection->bundle->id : BUNDLE_ID_NONE;
    182		memcpy(__get_str(name), connection->name,
    183					sizeof(connection->name));
    184		__entry->state = connection->state;
    185		__entry->flags = connection->flags;
    186	),
    187
    188	TP_printk("hd_bus_id=%d bundle_id=0x%02x name=\"%s\" state=%u flags=0x%lx",
    189		  __entry->hd_bus_id, __entry->bundle_id, __get_str(name),
    190		  (unsigned int)__entry->state, __entry->flags)
    191);
    192
    193#define DEFINE_CONNECTION_EVENT(name)					\
    194		DEFINE_EVENT(gb_connection, name,			\
    195				TP_PROTO(struct gb_connection *connection), \
    196				TP_ARGS(connection))
    197
    198/*
    199 * Occurs after a new connection is successfully created.
    200 */
    201DEFINE_CONNECTION_EVENT(gb_connection_create);
    202
    203/*
    204 * Occurs when the last reference to a connection has been dropped,
    205 * before its resources are freed.
    206 */
    207DEFINE_CONNECTION_EVENT(gb_connection_release);
    208
    209/*
    210 * Occurs when a new reference to connection is added, currently
    211 * only when a message over the connection is received.
    212 */
    213DEFINE_CONNECTION_EVENT(gb_connection_get);
    214
    215/*
    216 * Occurs when a new reference to connection is dropped, after a
    217 * a received message is handled, or when the connection is
    218 * destroyed.
    219 */
    220DEFINE_CONNECTION_EVENT(gb_connection_put);
    221
    222/*
    223 * Occurs when a request to enable a connection is made, either for
    224 * transmit only, or for both transmit and receive.
    225 */
    226DEFINE_CONNECTION_EVENT(gb_connection_enable);
    227
    228/*
    229 * Occurs when a request to disable a connection is made, either for
    230 * receive only, or for both transmit and receive.  Also occurs when
    231 * a request to forcefully disable a connection is made.
    232 */
    233DEFINE_CONNECTION_EVENT(gb_connection_disable);
    234
    235#undef DEFINE_CONNECTION_EVENT
    236
    237DECLARE_EVENT_CLASS(gb_bundle,
    238
    239	TP_PROTO(struct gb_bundle *bundle),
    240
    241	TP_ARGS(bundle),
    242
    243	TP_STRUCT__entry(
    244		__field(u8, intf_id)
    245		__field(u8, id)
    246		__field(u8, class)
    247		__field(size_t, num_cports)
    248	),
    249
    250	TP_fast_assign(
    251		__entry->intf_id = bundle->intf->interface_id;
    252		__entry->id = bundle->id;
    253		__entry->class = bundle->class;
    254		__entry->num_cports = bundle->num_cports;
    255	),
    256
    257	TP_printk("intf_id=0x%02x id=%02x class=0x%02x num_cports=%zu",
    258		  __entry->intf_id, __entry->id, __entry->class,
    259		  __entry->num_cports)
    260);
    261
    262#define DEFINE_BUNDLE_EVENT(name)					\
    263		DEFINE_EVENT(gb_bundle, name,			\
    264				TP_PROTO(struct gb_bundle *bundle), \
    265				TP_ARGS(bundle))
    266
    267/*
    268 * Occurs after a new bundle is successfully created.
    269 */
    270DEFINE_BUNDLE_EVENT(gb_bundle_create);
    271
    272/*
    273 * Occurs when the last reference to a bundle has been dropped,
    274 * before its resources are freed.
    275 */
    276DEFINE_BUNDLE_EVENT(gb_bundle_release);
    277
    278/*
    279 * Occurs when a bundle is added to an interface when the interface
    280 * is enabled.
    281 */
    282DEFINE_BUNDLE_EVENT(gb_bundle_add);
    283
    284/*
    285 * Occurs when a registered bundle gets destroyed, normally at the
    286 * time an interface is disabled.
    287 */
    288DEFINE_BUNDLE_EVENT(gb_bundle_destroy);
    289
    290#undef DEFINE_BUNDLE_EVENT
    291
    292DECLARE_EVENT_CLASS(gb_interface,
    293
    294	TP_PROTO(struct gb_interface *intf),
    295
    296	TP_ARGS(intf),
    297
    298	TP_STRUCT__entry(
    299		__field(u8, module_id)
    300		__field(u8, id)		/* Interface id */
    301		__field(u8, device_id)
    302		__field(int, disconnected)	/* bool */
    303		__field(int, ejected)		/* bool */
    304		__field(int, active)		/* bool */
    305		__field(int, enabled)		/* bool */
    306		__field(int, mode_switch)	/* bool */
    307	),
    308
    309	TP_fast_assign(
    310		__entry->module_id = intf->module->module_id;
    311		__entry->id = intf->interface_id;
    312		__entry->device_id = intf->device_id;
    313		__entry->disconnected = intf->disconnected;
    314		__entry->ejected = intf->ejected;
    315		__entry->active = intf->active;
    316		__entry->enabled = intf->enabled;
    317		__entry->mode_switch = intf->mode_switch;
    318	),
    319
    320	TP_printk("intf_id=%u device_id=%u module_id=%u D=%d J=%d A=%d E=%d M=%d",
    321		__entry->id, __entry->device_id, __entry->module_id,
    322		__entry->disconnected, __entry->ejected, __entry->active,
    323		__entry->enabled, __entry->mode_switch)
    324);
    325
    326#define DEFINE_INTERFACE_EVENT(name)					\
    327		DEFINE_EVENT(gb_interface, name,			\
    328				TP_PROTO(struct gb_interface *intf),	\
    329				TP_ARGS(intf))
    330
    331/*
    332 * Occurs after a new interface is successfully created.
    333 */
    334DEFINE_INTERFACE_EVENT(gb_interface_create);
    335
    336/*
    337 * Occurs after the last reference to an interface has been dropped.
    338 */
    339DEFINE_INTERFACE_EVENT(gb_interface_release);
    340
    341/*
    342 * Occurs after an interface been registerd.
    343 */
    344DEFINE_INTERFACE_EVENT(gb_interface_add);
    345
    346/*
    347 * Occurs when a registered interface gets deregisterd.
    348 */
    349DEFINE_INTERFACE_EVENT(gb_interface_del);
    350
    351/*
    352 * Occurs when a registered interface has been successfully
    353 * activated.
    354 */
    355DEFINE_INTERFACE_EVENT(gb_interface_activate);
    356
    357/*
    358 * Occurs when an activated interface is being deactivated.
    359 */
    360DEFINE_INTERFACE_EVENT(gb_interface_deactivate);
    361
    362/*
    363 * Occurs when an interface has been successfully enabled.
    364 */
    365DEFINE_INTERFACE_EVENT(gb_interface_enable);
    366
    367/*
    368 * Occurs when an enabled interface is being disabled.
    369 */
    370DEFINE_INTERFACE_EVENT(gb_interface_disable);
    371
    372#undef DEFINE_INTERFACE_EVENT
    373
    374DECLARE_EVENT_CLASS(gb_module,
    375
    376	TP_PROTO(struct gb_module *module),
    377
    378	TP_ARGS(module),
    379
    380	TP_STRUCT__entry(
    381		__field(int, hd_bus_id)
    382		__field(u8, module_id)
    383		__field(size_t, num_interfaces)
    384		__field(int, disconnected)	/* bool */
    385	),
    386
    387	TP_fast_assign(
    388		__entry->hd_bus_id = module->hd->bus_id;
    389		__entry->module_id = module->module_id;
    390		__entry->num_interfaces = module->num_interfaces;
    391		__entry->disconnected = module->disconnected;
    392	),
    393
    394	TP_printk("hd_bus_id=%d module_id=%u num_interfaces=%zu disconnected=%d",
    395		__entry->hd_bus_id, __entry->module_id,
    396		__entry->num_interfaces, __entry->disconnected)
    397);
    398
    399#define DEFINE_MODULE_EVENT(name)					\
    400		DEFINE_EVENT(gb_module, name,				\
    401				TP_PROTO(struct gb_module *module),	\
    402				TP_ARGS(module))
    403
    404/*
    405 * Occurs after a new module is successfully created, before
    406 * creating any of its interfaces.
    407 */
    408DEFINE_MODULE_EVENT(gb_module_create);
    409
    410/*
    411 * Occurs after the last reference to a module has been dropped.
    412 */
    413DEFINE_MODULE_EVENT(gb_module_release);
    414
    415/*
    416 * Occurs after a module is successfully created, before registering
    417 * any of its interfaces.
    418 */
    419DEFINE_MODULE_EVENT(gb_module_add);
    420
    421/*
    422 * Occurs when a module is deleted, before deregistering its
    423 * interfaces.
    424 */
    425DEFINE_MODULE_EVENT(gb_module_del);
    426
    427#undef DEFINE_MODULE_EVENT
    428
    429DECLARE_EVENT_CLASS(gb_host_device,
    430
    431	TP_PROTO(struct gb_host_device *hd),
    432
    433	TP_ARGS(hd),
    434
    435	TP_STRUCT__entry(
    436		__field(int, bus_id)
    437		__field(size_t, num_cports)
    438		__field(size_t, buffer_size_max)
    439	),
    440
    441	TP_fast_assign(
    442		__entry->bus_id = hd->bus_id;
    443		__entry->num_cports = hd->num_cports;
    444		__entry->buffer_size_max = hd->buffer_size_max;
    445	),
    446
    447	TP_printk("bus_id=%d num_cports=%zu mtu=%zu",
    448		__entry->bus_id, __entry->num_cports,
    449		__entry->buffer_size_max)
    450);
    451
    452#define DEFINE_HD_EVENT(name)						\
    453		DEFINE_EVENT(gb_host_device, name,			\
    454				TP_PROTO(struct gb_host_device *hd),	\
    455				TP_ARGS(hd))
    456
    457/*
    458 * Occurs after a new host device is successfully created, before
    459 * its SVC has been set up.
    460 */
    461DEFINE_HD_EVENT(gb_hd_create);
    462
    463/*
    464 * Occurs after the last reference to a host device has been
    465 * dropped.
    466 */
    467DEFINE_HD_EVENT(gb_hd_release);
    468
    469/*
    470 * Occurs after a new host device has been added, after the
    471 * connection to its SVC has been enabled.
    472 */
    473DEFINE_HD_EVENT(gb_hd_add);
    474
    475/*
    476 * Occurs when a host device is being disconnected from the AP USB
    477 * host controller.
    478 */
    479DEFINE_HD_EVENT(gb_hd_del);
    480
    481/*
    482 * Occurs when a host device has passed received data to the Greybus
    483 * core, after it has been determined it is destined for a valid
    484 * CPort.
    485 */
    486DEFINE_HD_EVENT(gb_hd_in);
    487
    488#undef DEFINE_HD_EVENT
    489
    490#endif /* _TRACE_GREYBUS_H */
    491
    492/* This part must be outside protection */
    493#undef TRACE_INCLUDE_PATH
    494#define TRACE_INCLUDE_PATH .
    495
    496/*
    497 * TRACE_INCLUDE_FILE is not needed if the filename and TRACE_SYSTEM are equal
    498 */
    499#undef TRACE_INCLUDE_FILE
    500#define TRACE_INCLUDE_FILE greybus_trace
    501#include <trace/define_trace.h>
    502