linux/drivers/usb/musb/musb_trace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * musb_trace.h - MUSB Controller Trace Support
   4 *
   5 * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com
   6 *
   7 * Author: Bin Liu <b-liu@ti.com>
   8 */
   9
  10#undef TRACE_SYSTEM
  11#define TRACE_SYSTEM musb
  12
  13#if !defined(__MUSB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  14#define __MUSB_TRACE_H
  15
  16#include <linux/types.h>
  17#include <linux/tracepoint.h>
  18#include <linux/usb.h>
  19#include "musb_core.h"
  20#ifdef CONFIG_USB_TI_CPPI41_DMA
  21#include "cppi_dma.h"
  22#endif
  23
  24#define MUSB_MSG_MAX   500
  25
  26TRACE_EVENT(musb_log,
  27        TP_PROTO(struct musb *musb, struct va_format *vaf),
  28        TP_ARGS(musb, vaf),
  29        TP_STRUCT__entry(
  30                __string(name, dev_name(musb->controller))
  31                __dynamic_array(char, msg, MUSB_MSG_MAX)
  32        ),
  33        TP_fast_assign(
  34                __assign_str(name, dev_name(musb->controller));
  35                vsnprintf(__get_str(msg), MUSB_MSG_MAX, vaf->fmt, *vaf->va);
  36        ),
  37        TP_printk("%s: %s", __get_str(name), __get_str(msg))
  38);
  39
  40TRACE_EVENT(musb_state,
  41        TP_PROTO(struct musb *musb, u8 devctl, const char *desc),
  42        TP_ARGS(musb, devctl, desc),
  43        TP_STRUCT__entry(
  44                __string(name, dev_name(musb->controller))
  45                __field(u8, devctl)
  46                __string(desc, desc)
  47        ),
  48        TP_fast_assign(
  49                __assign_str(name, dev_name(musb->controller));
  50                __entry->devctl = devctl;
  51                __assign_str(desc, desc);
  52        ),
  53        TP_printk("%s: devctl: %02x %s", __get_str(name), __entry->devctl,
  54                  __get_str(desc))
  55);
  56
  57DECLARE_EVENT_CLASS(musb_regb,
  58        TP_PROTO(void *caller, const void  __iomem *addr,
  59                 unsigned int offset, u8 data),
  60        TP_ARGS(caller, addr, offset, data),
  61        TP_STRUCT__entry(
  62                __field(void *, caller)
  63                __field(const void __iomem *, addr)
  64                __field(unsigned int, offset)
  65                __field(u8, data)
  66        ),
  67        TP_fast_assign(
  68                __entry->caller = caller;
  69                __entry->addr = addr;
  70                __entry->offset = offset;
  71                __entry->data = data;
  72        ),
  73        TP_printk("%pS: %p + %04x: %02x",
  74                __entry->caller, __entry->addr, __entry->offset, __entry->data)
  75);
  76
  77DEFINE_EVENT(musb_regb, musb_readb,
  78        TP_PROTO(void *caller, const void __iomem *addr,
  79                 unsigned int offset, u8 data),
  80        TP_ARGS(caller, addr, offset, data)
  81);
  82
  83DEFINE_EVENT(musb_regb, musb_writeb,
  84        TP_PROTO(void *caller, const void __iomem *addr,
  85                 unsigned int offset, u8 data),
  86        TP_ARGS(caller, addr, offset, data)
  87);
  88
  89DECLARE_EVENT_CLASS(musb_regw,
  90        TP_PROTO(void *caller, const void __iomem *addr,
  91                 unsigned int offset, u16 data),
  92        TP_ARGS(caller, addr, offset, data),
  93        TP_STRUCT__entry(
  94                __field(void *, caller)
  95                __field(const void __iomem *, addr)
  96                __field(unsigned int, offset)
  97                __field(u16, data)
  98        ),
  99        TP_fast_assign(
 100                __entry->caller = caller;
 101                __entry->addr = addr;
 102                __entry->offset = offset;
 103                __entry->data = data;
 104        ),
 105        TP_printk("%pS: %p + %04x: %04x",
 106                __entry->caller, __entry->addr, __entry->offset, __entry->data)
 107);
 108
 109DEFINE_EVENT(musb_regw, musb_readw,
 110        TP_PROTO(void *caller, const void __iomem *addr,
 111                 unsigned int offset, u16 data),
 112        TP_ARGS(caller, addr, offset, data)
 113);
 114
 115DEFINE_EVENT(musb_regw, musb_writew,
 116        TP_PROTO(void *caller, const void __iomem *addr,
 117                 unsigned int offset, u16 data),
 118        TP_ARGS(caller, addr, offset, data)
 119);
 120
 121DECLARE_EVENT_CLASS(musb_regl,
 122        TP_PROTO(void *caller, const void __iomem *addr,
 123                 unsigned int offset, u32 data),
 124        TP_ARGS(caller, addr, offset, data),
 125        TP_STRUCT__entry(
 126                __field(void *, caller)
 127                __field(const void __iomem *, addr)
 128                __field(unsigned int, offset)
 129                __field(u32, data)
 130        ),
 131        TP_fast_assign(
 132                __entry->caller = caller;
 133                __entry->addr = addr;
 134                __entry->offset = offset;
 135                __entry->data = data;
 136        ),
 137        TP_printk("%pS: %p + %04x: %08x",
 138                __entry->caller, __entry->addr, __entry->offset, __entry->data)
 139);
 140
 141DEFINE_EVENT(musb_regl, musb_readl,
 142        TP_PROTO(void *caller, const void __iomem *addr,
 143                 unsigned int offset, u32 data),
 144        TP_ARGS(caller, addr, offset, data)
 145);
 146
 147DEFINE_EVENT(musb_regl, musb_writel,
 148        TP_PROTO(void *caller, const void __iomem *addr,
 149                 unsigned int offset, u32 data),
 150        TP_ARGS(caller, addr, offset, data)
 151);
 152
 153TRACE_EVENT(musb_isr,
 154        TP_PROTO(struct musb *musb),
 155        TP_ARGS(musb),
 156        TP_STRUCT__entry(
 157                __string(name, dev_name(musb->controller))
 158                __field(u8, int_usb)
 159                __field(u16, int_tx)
 160                __field(u16, int_rx)
 161        ),
 162        TP_fast_assign(
 163                __assign_str(name, dev_name(musb->controller));
 164                __entry->int_usb = musb->int_usb;
 165                __entry->int_tx = musb->int_tx;
 166                __entry->int_rx = musb->int_rx;
 167        ),
 168        TP_printk("%s: usb %02x, tx %04x, rx %04x",
 169                __get_str(name), __entry->int_usb,
 170                __entry->int_tx, __entry->int_rx
 171        )
 172);
 173
 174DECLARE_EVENT_CLASS(musb_urb,
 175        TP_PROTO(struct musb *musb, struct urb *urb),
 176        TP_ARGS(musb, urb),
 177        TP_STRUCT__entry(
 178                __string(name, dev_name(musb->controller))
 179                __field(struct urb *, urb)
 180                __field(unsigned int, pipe)
 181                __field(int, status)
 182                __field(unsigned int, flag)
 183                __field(u32, buf_len)
 184                __field(u32, actual_len)
 185        ),
 186        TP_fast_assign(
 187                __assign_str(name, dev_name(musb->controller));
 188                __entry->urb = urb;
 189                __entry->pipe = urb->pipe;
 190                __entry->status = urb->status;
 191                __entry->flag = urb->transfer_flags;
 192                __entry->buf_len = urb->transfer_buffer_length;
 193                __entry->actual_len = urb->actual_length;
 194        ),
 195        TP_printk("%s: %p, dev%d ep%d%s, flag 0x%x, len %d/%d, status %d",
 196                        __get_str(name), __entry->urb,
 197                        usb_pipedevice(__entry->pipe),
 198                        usb_pipeendpoint(__entry->pipe),
 199                        usb_pipein(__entry->pipe) ? "in" : "out",
 200                        __entry->flag,
 201                        __entry->actual_len, __entry->buf_len,
 202                        __entry->status
 203        )
 204);
 205
 206DEFINE_EVENT(musb_urb, musb_urb_start,
 207        TP_PROTO(struct musb *musb, struct urb *urb),
 208        TP_ARGS(musb, urb)
 209);
 210
 211DEFINE_EVENT(musb_urb, musb_urb_gb,
 212        TP_PROTO(struct musb *musb, struct urb *urb),
 213        TP_ARGS(musb, urb)
 214);
 215
 216DEFINE_EVENT(musb_urb, musb_urb_rx,
 217        TP_PROTO(struct musb *musb, struct urb *urb),
 218        TP_ARGS(musb, urb)
 219);
 220
 221DEFINE_EVENT(musb_urb, musb_urb_tx,
 222        TP_PROTO(struct musb *musb, struct urb *urb),
 223        TP_ARGS(musb, urb)
 224);
 225
 226DEFINE_EVENT(musb_urb, musb_urb_enq,
 227        TP_PROTO(struct musb *musb, struct urb *urb),
 228        TP_ARGS(musb, urb)
 229);
 230
 231DEFINE_EVENT(musb_urb, musb_urb_deq,
 232        TP_PROTO(struct musb *musb, struct urb *urb),
 233        TP_ARGS(musb, urb)
 234);
 235
 236DECLARE_EVENT_CLASS(musb_req,
 237        TP_PROTO(struct musb_request *req),
 238        TP_ARGS(req),
 239        TP_STRUCT__entry(
 240                __field(struct usb_request *, req)
 241                __field(u8, is_tx)
 242                __field(u8, epnum)
 243                __field(int, status)
 244                __field(unsigned int, buf_len)
 245                __field(unsigned int, actual_len)
 246                __field(unsigned int, zero)
 247                __field(unsigned int, short_not_ok)
 248                __field(unsigned int, no_interrupt)
 249        ),
 250        TP_fast_assign(
 251                __entry->req = &req->request;
 252                __entry->is_tx = req->tx;
 253                __entry->epnum = req->epnum;
 254                __entry->status = req->request.status;
 255                __entry->buf_len = req->request.length;
 256                __entry->actual_len = req->request.actual;
 257                __entry->zero = req->request.zero;
 258                __entry->short_not_ok = req->request.short_not_ok;
 259                __entry->no_interrupt = req->request.no_interrupt;
 260        ),
 261        TP_printk("%p, ep%d %s, %s%s%s, len %d/%d, status %d",
 262                        __entry->req, __entry->epnum,
 263                        __entry->is_tx ? "tx/IN" : "rx/OUT",
 264                        __entry->zero ? "Z" : "z",
 265                        __entry->short_not_ok ? "S" : "s",
 266                        __entry->no_interrupt ? "I" : "i",
 267                        __entry->actual_len, __entry->buf_len,
 268                        __entry->status
 269        )
 270);
 271
 272DEFINE_EVENT(musb_req, musb_req_gb,
 273        TP_PROTO(struct musb_request *req),
 274        TP_ARGS(req)
 275);
 276
 277DEFINE_EVENT(musb_req, musb_req_tx,
 278        TP_PROTO(struct musb_request *req),
 279        TP_ARGS(req)
 280);
 281
 282DEFINE_EVENT(musb_req, musb_req_rx,
 283        TP_PROTO(struct musb_request *req),
 284        TP_ARGS(req)
 285);
 286
 287DEFINE_EVENT(musb_req, musb_req_alloc,
 288        TP_PROTO(struct musb_request *req),
 289        TP_ARGS(req)
 290);
 291
 292DEFINE_EVENT(musb_req, musb_req_free,
 293        TP_PROTO(struct musb_request *req),
 294        TP_ARGS(req)
 295);
 296
 297DEFINE_EVENT(musb_req, musb_req_start,
 298        TP_PROTO(struct musb_request *req),
 299        TP_ARGS(req)
 300);
 301
 302DEFINE_EVENT(musb_req, musb_req_enq,
 303        TP_PROTO(struct musb_request *req),
 304        TP_ARGS(req)
 305);
 306
 307DEFINE_EVENT(musb_req, musb_req_deq,
 308        TP_PROTO(struct musb_request *req),
 309        TP_ARGS(req)
 310);
 311
 312#ifdef CONFIG_USB_TI_CPPI41_DMA
 313DECLARE_EVENT_CLASS(musb_cppi41,
 314        TP_PROTO(struct cppi41_dma_channel *ch),
 315        TP_ARGS(ch),
 316        TP_STRUCT__entry(
 317                __field(struct cppi41_dma_channel *, ch)
 318                __string(name, dev_name(ch->hw_ep->musb->controller))
 319                __field(u8, hwep)
 320                __field(u8, port)
 321                __field(u8, is_tx)
 322                __field(u32, len)
 323                __field(u32, prog_len)
 324                __field(u32, xferred)
 325        ),
 326        TP_fast_assign(
 327                __entry->ch = ch;
 328                __assign_str(name, dev_name(ch->hw_ep->musb->controller));
 329                __entry->hwep = ch->hw_ep->epnum;
 330                __entry->port = ch->port_num;
 331                __entry->is_tx = ch->is_tx;
 332                __entry->len = ch->total_len;
 333                __entry->prog_len = ch->prog_len;
 334                __entry->xferred = ch->transferred;
 335        ),
 336        TP_printk("%s: %p, hwep%d ch%d%s, prog_len %d, len %d/%d",
 337                        __get_str(name), __entry->ch, __entry->hwep,
 338                        __entry->port, __entry->is_tx ? "tx" : "rx",
 339                        __entry->prog_len, __entry->xferred, __entry->len
 340        )
 341);
 342
 343DEFINE_EVENT(musb_cppi41, musb_cppi41_done,
 344        TP_PROTO(struct cppi41_dma_channel *ch),
 345        TP_ARGS(ch)
 346);
 347
 348DEFINE_EVENT(musb_cppi41, musb_cppi41_gb,
 349        TP_PROTO(struct cppi41_dma_channel *ch),
 350        TP_ARGS(ch)
 351);
 352
 353DEFINE_EVENT(musb_cppi41, musb_cppi41_config,
 354        TP_PROTO(struct cppi41_dma_channel *ch),
 355        TP_ARGS(ch)
 356);
 357
 358DEFINE_EVENT(musb_cppi41, musb_cppi41_cont,
 359        TP_PROTO(struct cppi41_dma_channel *ch),
 360        TP_ARGS(ch)
 361);
 362
 363DEFINE_EVENT(musb_cppi41, musb_cppi41_alloc,
 364        TP_PROTO(struct cppi41_dma_channel *ch),
 365        TP_ARGS(ch)
 366);
 367
 368DEFINE_EVENT(musb_cppi41, musb_cppi41_abort,
 369        TP_PROTO(struct cppi41_dma_channel *ch),
 370        TP_ARGS(ch)
 371);
 372
 373DEFINE_EVENT(musb_cppi41, musb_cppi41_free,
 374        TP_PROTO(struct cppi41_dma_channel *ch),
 375        TP_ARGS(ch)
 376);
 377#endif /* CONFIG_USB_TI_CPPI41_DMA */
 378
 379#endif /* __MUSB_TRACE_H */
 380
 381/* this part has to be here */
 382
 383#undef TRACE_INCLUDE_PATH
 384#define TRACE_INCLUDE_PATH .
 385
 386#undef TRACE_INCLUDE_FILE
 387#define TRACE_INCLUDE_FILE musb_trace
 388
 389#include <trace/define_trace.h>
 390