134ff6846SIoana Radulescu /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
234ff6846SIoana Radulescu /* Copyright 2014-2015 Freescale Semiconductor Inc.
334ff6846SIoana Radulescu  */
434ff6846SIoana Radulescu 
534ff6846SIoana Radulescu #undef TRACE_SYSTEM
634ff6846SIoana Radulescu #define TRACE_SYSTEM	dpaa2_eth
734ff6846SIoana Radulescu 
834ff6846SIoana Radulescu #if !defined(_DPAA2_ETH_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
934ff6846SIoana Radulescu #define _DPAA2_ETH_TRACE_H
1034ff6846SIoana Radulescu 
1134ff6846SIoana Radulescu #include <linux/skbuff.h>
1234ff6846SIoana Radulescu #include <linux/netdevice.h>
1334ff6846SIoana Radulescu #include "dpaa2-eth.h"
1434ff6846SIoana Radulescu #include <linux/tracepoint.h>
1534ff6846SIoana Radulescu 
1634ff6846SIoana Radulescu #define TR_FMT "[%s] fd: addr=0x%llx, len=%u, off=%u"
1734ff6846SIoana Radulescu /* trace_printk format for raw buffer event class */
1834ff6846SIoana Radulescu #define TR_BUF_FMT "[%s] vaddr=%p size=%zu dma_addr=%pad map_size=%zu bpid=%d"
1934ff6846SIoana Radulescu 
2034ff6846SIoana Radulescu /* This is used to declare a class of events.
2134ff6846SIoana Radulescu  * individual events of this type will be defined below.
2234ff6846SIoana Radulescu  */
2334ff6846SIoana Radulescu 
2434ff6846SIoana Radulescu /* Store details about a frame descriptor */
2534ff6846SIoana Radulescu DECLARE_EVENT_CLASS(dpaa2_eth_fd,
2634ff6846SIoana Radulescu 		    /* Trace function prototype */
2734ff6846SIoana Radulescu 		    TP_PROTO(struct net_device *netdev,
2834ff6846SIoana Radulescu 			     const struct dpaa2_fd *fd),
2934ff6846SIoana Radulescu 
3034ff6846SIoana Radulescu 		    /* Repeat argument list here */
3134ff6846SIoana Radulescu 		    TP_ARGS(netdev, fd),
3234ff6846SIoana Radulescu 
3334ff6846SIoana Radulescu 		    /* A structure containing the relevant information we want
3434ff6846SIoana Radulescu 		     * to record. Declare name and type for each normal element,
3534ff6846SIoana Radulescu 		     * name, type and size for arrays. Use __string for variable
3634ff6846SIoana Radulescu 		     * length strings.
3734ff6846SIoana Radulescu 		     */
3834ff6846SIoana Radulescu 		    TP_STRUCT__entry(
3934ff6846SIoana Radulescu 				     __field(u64, fd_addr)
4034ff6846SIoana Radulescu 				     __field(u32, fd_len)
4134ff6846SIoana Radulescu 				     __field(u16, fd_offset)
4234ff6846SIoana Radulescu 				     __string(name, netdev->name)
4334ff6846SIoana Radulescu 		    ),
4434ff6846SIoana Radulescu 
4534ff6846SIoana Radulescu 		    /* The function that assigns values to the above declared
4634ff6846SIoana Radulescu 		     * fields
4734ff6846SIoana Radulescu 		     */
4834ff6846SIoana Radulescu 		    TP_fast_assign(
4934ff6846SIoana Radulescu 				   __entry->fd_addr = dpaa2_fd_get_addr(fd);
5034ff6846SIoana Radulescu 				   __entry->fd_len = dpaa2_fd_get_len(fd);
5134ff6846SIoana Radulescu 				   __entry->fd_offset = dpaa2_fd_get_offset(fd);
5234ff6846SIoana Radulescu 				   __assign_str(name, netdev->name);
5334ff6846SIoana Radulescu 		    ),
5434ff6846SIoana Radulescu 
5534ff6846SIoana Radulescu 		    /* This is what gets printed when the trace event is
5634ff6846SIoana Radulescu 		     * triggered.
5734ff6846SIoana Radulescu 		     */
5834ff6846SIoana Radulescu 		    TP_printk(TR_FMT,
5934ff6846SIoana Radulescu 			      __get_str(name),
6034ff6846SIoana Radulescu 			      __entry->fd_addr,
6134ff6846SIoana Radulescu 			      __entry->fd_len,
6234ff6846SIoana Radulescu 			      __entry->fd_offset)
6334ff6846SIoana Radulescu );
6434ff6846SIoana Radulescu 
6534ff6846SIoana Radulescu /* Now declare events of the above type. Format is:
6634ff6846SIoana Radulescu  * DEFINE_EVENT(class, name, proto, args), with proto and args same as for class
6734ff6846SIoana Radulescu  */
6834ff6846SIoana Radulescu 
6934ff6846SIoana Radulescu /* Tx (egress) fd */
7034ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_fd,
7134ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
7234ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
7334ff6846SIoana Radulescu 
7434ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
7534ff6846SIoana Radulescu );
7634ff6846SIoana Radulescu 
7734ff6846SIoana Radulescu /* Rx fd */
7834ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_fd,
7934ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
8034ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
8134ff6846SIoana Radulescu 
8234ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
8334ff6846SIoana Radulescu );
8434ff6846SIoana Radulescu 
8534ff6846SIoana Radulescu /* Tx confirmation fd */
8634ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_conf_fd,
8734ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
8834ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
8934ff6846SIoana Radulescu 
9034ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
9134ff6846SIoana Radulescu );
9234ff6846SIoana Radulescu 
9334ff6846SIoana Radulescu /* Log data about raw buffers. Useful for tracing DPBP content. */
9434ff6846SIoana Radulescu TRACE_EVENT(dpaa2_eth_buf_seed,
9534ff6846SIoana Radulescu 	    /* Trace function prototype */
9634ff6846SIoana Radulescu 	    TP_PROTO(struct net_device *netdev,
9734ff6846SIoana Radulescu 		     /* virtual address and size */
9834ff6846SIoana Radulescu 		     void *vaddr,
9934ff6846SIoana Radulescu 		     size_t size,
10034ff6846SIoana Radulescu 		     /* dma map address and size */
10134ff6846SIoana Radulescu 		     dma_addr_t dma_addr,
10234ff6846SIoana Radulescu 		     size_t map_size,
10334ff6846SIoana Radulescu 		     /* buffer pool id, if relevant */
10434ff6846SIoana Radulescu 		     u16 bpid),
10534ff6846SIoana Radulescu 
10634ff6846SIoana Radulescu 	    /* Repeat argument list here */
10734ff6846SIoana Radulescu 	    TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid),
10834ff6846SIoana Radulescu 
10934ff6846SIoana Radulescu 	    /* A structure containing the relevant information we want
11034ff6846SIoana Radulescu 	     * to record. Declare name and type for each normal element,
11134ff6846SIoana Radulescu 	     * name, type and size for arrays. Use __string for variable
11234ff6846SIoana Radulescu 	     * length strings.
11334ff6846SIoana Radulescu 	     */
11434ff6846SIoana Radulescu 	    TP_STRUCT__entry(
11534ff6846SIoana Radulescu 			     __field(void *, vaddr)
11634ff6846SIoana Radulescu 			     __field(size_t, size)
11734ff6846SIoana Radulescu 			     __field(dma_addr_t, dma_addr)
11834ff6846SIoana Radulescu 			     __field(size_t, map_size)
11934ff6846SIoana Radulescu 			     __field(u16, bpid)
12034ff6846SIoana Radulescu 			     __string(name, netdev->name)
12134ff6846SIoana Radulescu 	    ),
12234ff6846SIoana Radulescu 
12334ff6846SIoana Radulescu 	    /* The function that assigns values to the above declared
12434ff6846SIoana Radulescu 	     * fields
12534ff6846SIoana Radulescu 	     */
12634ff6846SIoana Radulescu 	    TP_fast_assign(
12734ff6846SIoana Radulescu 			   __entry->vaddr = vaddr;
12834ff6846SIoana Radulescu 			   __entry->size = size;
12934ff6846SIoana Radulescu 			   __entry->dma_addr = dma_addr;
13034ff6846SIoana Radulescu 			   __entry->map_size = map_size;
13134ff6846SIoana Radulescu 			   __entry->bpid = bpid;
13234ff6846SIoana Radulescu 			   __assign_str(name, netdev->name);
13334ff6846SIoana Radulescu 	    ),
13434ff6846SIoana Radulescu 
13534ff6846SIoana Radulescu 	    /* This is what gets printed when the trace event is
13634ff6846SIoana Radulescu 	     * triggered.
13734ff6846SIoana Radulescu 	     */
13834ff6846SIoana Radulescu 	    TP_printk(TR_BUF_FMT,
13934ff6846SIoana Radulescu 		      __get_str(name),
14034ff6846SIoana Radulescu 		      __entry->vaddr,
14134ff6846SIoana Radulescu 		      __entry->size,
14234ff6846SIoana Radulescu 		      &__entry->dma_addr,
14334ff6846SIoana Radulescu 		      __entry->map_size,
14434ff6846SIoana Radulescu 		      __entry->bpid)
14534ff6846SIoana Radulescu );
14634ff6846SIoana Radulescu 
14734ff6846SIoana Radulescu /* If only one event of a certain type needs to be declared, use TRACE_EVENT().
14834ff6846SIoana Radulescu  * The syntax is the same as for DECLARE_EVENT_CLASS().
14934ff6846SIoana Radulescu  */
15034ff6846SIoana Radulescu 
15134ff6846SIoana Radulescu #endif /* _DPAA2_ETH_TRACE_H */
15234ff6846SIoana Radulescu 
15334ff6846SIoana Radulescu /* This must be outside ifdef _DPAA2_ETH_TRACE_H */
15434ff6846SIoana Radulescu #undef TRACE_INCLUDE_PATH
15534ff6846SIoana Radulescu #define TRACE_INCLUDE_PATH .
15634ff6846SIoana Radulescu #undef TRACE_INCLUDE_FILE
15734ff6846SIoana Radulescu #define TRACE_INCLUDE_FILE	dpaa2-eth-trace
15834ff6846SIoana Radulescu #include <trace/define_trace.h>
159