Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
0002 /* Copyright 2014-2015 Freescale Semiconductor Inc.
0003  */
0004 
0005 #undef TRACE_SYSTEM
0006 #define TRACE_SYSTEM    dpaa2_eth
0007 
0008 #if !defined(_DPAA2_ETH_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
0009 #define _DPAA2_ETH_TRACE_H
0010 
0011 #include <linux/skbuff.h>
0012 #include <linux/netdevice.h>
0013 #include <linux/tracepoint.h>
0014 
0015 #define TR_FMT "[%s] fd: addr=0x%llx, len=%u, off=%u"
0016 /* trace_printk format for raw buffer event class */
0017 #define TR_BUF_FMT "[%s] vaddr=%p size=%zu dma_addr=%pad map_size=%zu bpid=%d"
0018 
0019 /* This is used to declare a class of events.
0020  * individual events of this type will be defined below.
0021  */
0022 
0023 /* Store details about a frame descriptor */
0024 DECLARE_EVENT_CLASS(dpaa2_eth_fd,
0025             /* Trace function prototype */
0026             TP_PROTO(struct net_device *netdev,
0027                  const struct dpaa2_fd *fd),
0028 
0029             /* Repeat argument list here */
0030             TP_ARGS(netdev, fd),
0031 
0032             /* A structure containing the relevant information we want
0033              * to record. Declare name and type for each normal element,
0034              * name, type and size for arrays. Use __string for variable
0035              * length strings.
0036              */
0037             TP_STRUCT__entry(
0038                      __field(u64, fd_addr)
0039                      __field(u32, fd_len)
0040                      __field(u16, fd_offset)
0041                      __string(name, netdev->name)
0042             ),
0043 
0044             /* The function that assigns values to the above declared
0045              * fields
0046              */
0047             TP_fast_assign(
0048                    __entry->fd_addr = dpaa2_fd_get_addr(fd);
0049                    __entry->fd_len = dpaa2_fd_get_len(fd);
0050                    __entry->fd_offset = dpaa2_fd_get_offset(fd);
0051                    __assign_str(name, netdev->name);
0052             ),
0053 
0054             /* This is what gets printed when the trace event is
0055              * triggered.
0056              */
0057             TP_printk(TR_FMT,
0058                   __get_str(name),
0059                   __entry->fd_addr,
0060                   __entry->fd_len,
0061                   __entry->fd_offset)
0062 );
0063 
0064 /* Now declare events of the above type. Format is:
0065  * DEFINE_EVENT(class, name, proto, args), with proto and args same as for class
0066  */
0067 
0068 /* Tx (egress) fd */
0069 DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_fd,
0070          TP_PROTO(struct net_device *netdev,
0071               const struct dpaa2_fd *fd),
0072 
0073          TP_ARGS(netdev, fd)
0074 );
0075 
0076 /* Rx fd */
0077 DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_fd,
0078          TP_PROTO(struct net_device *netdev,
0079               const struct dpaa2_fd *fd),
0080 
0081          TP_ARGS(netdev, fd)
0082 );
0083 
0084 /* Tx confirmation fd */
0085 DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_conf_fd,
0086          TP_PROTO(struct net_device *netdev,
0087               const struct dpaa2_fd *fd),
0088 
0089          TP_ARGS(netdev, fd)
0090 );
0091 
0092 /* Log data about raw buffers. Useful for tracing DPBP content. */
0093 TRACE_EVENT(dpaa2_eth_buf_seed,
0094         /* Trace function prototype */
0095         TP_PROTO(struct net_device *netdev,
0096              /* virtual address and size */
0097              void *vaddr,
0098              size_t size,
0099              /* dma map address and size */
0100              dma_addr_t dma_addr,
0101              size_t map_size,
0102              /* buffer pool id, if relevant */
0103              u16 bpid),
0104 
0105         /* Repeat argument list here */
0106         TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid),
0107 
0108         /* A structure containing the relevant information we want
0109          * to record. Declare name and type for each normal element,
0110          * name, type and size for arrays. Use __string for variable
0111          * length strings.
0112          */
0113         TP_STRUCT__entry(
0114                  __field(void *, vaddr)
0115                  __field(size_t, size)
0116                  __field(dma_addr_t, dma_addr)
0117                  __field(size_t, map_size)
0118                  __field(u16, bpid)
0119                  __string(name, netdev->name)
0120         ),
0121 
0122         /* The function that assigns values to the above declared
0123          * fields
0124          */
0125         TP_fast_assign(
0126                __entry->vaddr = vaddr;
0127                __entry->size = size;
0128                __entry->dma_addr = dma_addr;
0129                __entry->map_size = map_size;
0130                __entry->bpid = bpid;
0131                __assign_str(name, netdev->name);
0132         ),
0133 
0134         /* This is what gets printed when the trace event is
0135          * triggered.
0136          */
0137         TP_printk(TR_BUF_FMT,
0138               __get_str(name),
0139               __entry->vaddr,
0140               __entry->size,
0141               &__entry->dma_addr,
0142               __entry->map_size,
0143               __entry->bpid)
0144 );
0145 
0146 /* If only one event of a certain type needs to be declared, use TRACE_EVENT().
0147  * The syntax is the same as for DECLARE_EVENT_CLASS().
0148  */
0149 
0150 #endif /* _DPAA2_ETH_TRACE_H */
0151 
0152 /* This must be outside ifdef _DPAA2_ETH_TRACE_H */
0153 #undef TRACE_INCLUDE_PATH
0154 #define TRACE_INCLUDE_PATH .
0155 #undef TRACE_INCLUDE_FILE
0156 #define TRACE_INCLUDE_FILE  dpaa2-eth-trace
0157 #include <trace/define_trace.h>