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