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 <linux/tracepoint.h>
1434ff6846SIoana Radulescu 
1534ff6846SIoana Radulescu #define TR_FMT "[%s] fd: addr=0x%llx, len=%u, off=%u"
1634ff6846SIoana Radulescu /* trace_printk format for raw buffer event class */
1734ff6846SIoana Radulescu #define TR_BUF_FMT "[%s] vaddr=%p size=%zu dma_addr=%pad map_size=%zu bpid=%d"
1834ff6846SIoana Radulescu 
1934ff6846SIoana Radulescu /* This is used to declare a class of events.
2034ff6846SIoana Radulescu  * individual events of this type will be defined below.
2134ff6846SIoana Radulescu  */
2234ff6846SIoana Radulescu 
2334ff6846SIoana Radulescu /* Store details about a frame descriptor */
2434ff6846SIoana Radulescu DECLARE_EVENT_CLASS(dpaa2_eth_fd,
2534ff6846SIoana Radulescu 		    /* Trace function prototype */
2634ff6846SIoana Radulescu 		    TP_PROTO(struct net_device *netdev,
2734ff6846SIoana Radulescu 			     const struct dpaa2_fd *fd),
2834ff6846SIoana Radulescu 
2934ff6846SIoana Radulescu 		    /* Repeat argument list here */
3034ff6846SIoana Radulescu 		    TP_ARGS(netdev, fd),
3134ff6846SIoana Radulescu 
3234ff6846SIoana Radulescu 		    /* A structure containing the relevant information we want
3334ff6846SIoana Radulescu 		     * to record. Declare name and type for each normal element,
3434ff6846SIoana Radulescu 		     * name, type and size for arrays. Use __string for variable
3534ff6846SIoana Radulescu 		     * length strings.
3634ff6846SIoana Radulescu 		     */
3734ff6846SIoana Radulescu 		    TP_STRUCT__entry(
3834ff6846SIoana Radulescu 				     __field(u64, fd_addr)
3934ff6846SIoana Radulescu 				     __field(u32, fd_len)
4034ff6846SIoana Radulescu 				     __field(u16, fd_offset)
4134ff6846SIoana Radulescu 				     __string(name, netdev->name)
4234ff6846SIoana Radulescu 		    ),
4334ff6846SIoana Radulescu 
4434ff6846SIoana Radulescu 		    /* The function that assigns values to the above declared
4534ff6846SIoana Radulescu 		     * fields
4634ff6846SIoana Radulescu 		     */
4734ff6846SIoana Radulescu 		    TP_fast_assign(
4834ff6846SIoana Radulescu 				   __entry->fd_addr = dpaa2_fd_get_addr(fd);
4934ff6846SIoana Radulescu 				   __entry->fd_len = dpaa2_fd_get_len(fd);
5034ff6846SIoana Radulescu 				   __entry->fd_offset = dpaa2_fd_get_offset(fd);
5134ff6846SIoana Radulescu 				   __assign_str(name, netdev->name);
5234ff6846SIoana Radulescu 		    ),
5334ff6846SIoana Radulescu 
5434ff6846SIoana Radulescu 		    /* This is what gets printed when the trace event is
5534ff6846SIoana Radulescu 		     * triggered.
5634ff6846SIoana Radulescu 		     */
5734ff6846SIoana Radulescu 		    TP_printk(TR_FMT,
5834ff6846SIoana Radulescu 			      __get_str(name),
5934ff6846SIoana Radulescu 			      __entry->fd_addr,
6034ff6846SIoana Radulescu 			      __entry->fd_len,
6134ff6846SIoana Radulescu 			      __entry->fd_offset)
6234ff6846SIoana Radulescu );
6334ff6846SIoana Radulescu 
6434ff6846SIoana Radulescu /* Now declare events of the above type. Format is:
6534ff6846SIoana Radulescu  * DEFINE_EVENT(class, name, proto, args), with proto and args same as for class
6634ff6846SIoana Radulescu  */
6734ff6846SIoana Radulescu 
6834ff6846SIoana Radulescu /* Tx (egress) fd */
6934ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_fd,
7034ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
7134ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
7234ff6846SIoana Radulescu 
7334ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
7434ff6846SIoana Radulescu );
7534ff6846SIoana Radulescu 
76*3817b2acSRobert-Ionut Alexa /* Tx (egress) XSK fd */
77*3817b2acSRobert-Ionut Alexa DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_xsk_fd,
78*3817b2acSRobert-Ionut Alexa 	     TP_PROTO(struct net_device *netdev,
79*3817b2acSRobert-Ionut Alexa 		      const struct dpaa2_fd *fd),
80*3817b2acSRobert-Ionut Alexa 
81*3817b2acSRobert-Ionut Alexa 	     TP_ARGS(netdev, fd)
82*3817b2acSRobert-Ionut Alexa );
83*3817b2acSRobert-Ionut Alexa 
8434ff6846SIoana Radulescu /* Rx fd */
8534ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_fd,
8634ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
8734ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
8834ff6846SIoana Radulescu 
8934ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
9034ff6846SIoana Radulescu );
9134ff6846SIoana Radulescu 
92*3817b2acSRobert-Ionut Alexa /* Rx XSK fd */
93*3817b2acSRobert-Ionut Alexa DEFINE_EVENT(dpaa2_eth_fd, dpaa2_rx_xsk_fd,
94*3817b2acSRobert-Ionut Alexa 	     TP_PROTO(struct net_device *netdev,
95*3817b2acSRobert-Ionut Alexa 		      const struct dpaa2_fd *fd),
96*3817b2acSRobert-Ionut Alexa 
97*3817b2acSRobert-Ionut Alexa 	     TP_ARGS(netdev, fd)
98*3817b2acSRobert-Ionut Alexa );
99*3817b2acSRobert-Ionut Alexa 
10034ff6846SIoana Radulescu /* Tx confirmation fd */
10134ff6846SIoana Radulescu DEFINE_EVENT(dpaa2_eth_fd, dpaa2_tx_conf_fd,
10234ff6846SIoana Radulescu 	     TP_PROTO(struct net_device *netdev,
10334ff6846SIoana Radulescu 		      const struct dpaa2_fd *fd),
10434ff6846SIoana Radulescu 
10534ff6846SIoana Radulescu 	     TP_ARGS(netdev, fd)
10634ff6846SIoana Radulescu );
10734ff6846SIoana Radulescu 
10834ff6846SIoana Radulescu /* Log data about raw buffers. Useful for tracing DPBP content. */
109*3817b2acSRobert-Ionut Alexa DECLARE_EVENT_CLASS(dpaa2_eth_buf,
11034ff6846SIoana Radulescu 		    /* Trace function prototype */
11134ff6846SIoana Radulescu 		    TP_PROTO(struct net_device *netdev,
11234ff6846SIoana Radulescu 			     /* virtual address and size */
11334ff6846SIoana Radulescu 			    void *vaddr,
11434ff6846SIoana Radulescu 			    size_t size,
11534ff6846SIoana Radulescu 			    /* dma map address and size */
11634ff6846SIoana Radulescu 			    dma_addr_t dma_addr,
11734ff6846SIoana Radulescu 			    size_t map_size,
11834ff6846SIoana Radulescu 			    /* buffer pool id, if relevant */
11934ff6846SIoana Radulescu 			    u16 bpid),
12034ff6846SIoana Radulescu 
12134ff6846SIoana Radulescu 		    /* Repeat argument list here */
12234ff6846SIoana Radulescu 		    TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid),
12334ff6846SIoana Radulescu 
12434ff6846SIoana Radulescu 		    /* A structure containing the relevant information we want
12534ff6846SIoana Radulescu 		     * to record. Declare name and type for each normal element,
12634ff6846SIoana Radulescu 		     * name, type and size for arrays. Use __string for variable
12734ff6846SIoana Radulescu 		     * length strings.
12834ff6846SIoana Radulescu 		     */
12934ff6846SIoana Radulescu 		    TP_STRUCT__entry(
13034ff6846SIoana Radulescu 				      __field(void *, vaddr)
13134ff6846SIoana Radulescu 				      __field(size_t, size)
13234ff6846SIoana Radulescu 				      __field(dma_addr_t, dma_addr)
13334ff6846SIoana Radulescu 				      __field(size_t, map_size)
13434ff6846SIoana Radulescu 				      __field(u16, bpid)
13534ff6846SIoana Radulescu 				      __string(name, netdev->name)
13634ff6846SIoana Radulescu 		    ),
13734ff6846SIoana Radulescu 
13834ff6846SIoana Radulescu 		    /* The function that assigns values to the above declared
13934ff6846SIoana Radulescu 		     * fields
14034ff6846SIoana Radulescu 		     */
14134ff6846SIoana Radulescu 		    TP_fast_assign(
14234ff6846SIoana Radulescu 				   __entry->vaddr = vaddr;
14334ff6846SIoana Radulescu 				   __entry->size = size;
14434ff6846SIoana Radulescu 				   __entry->dma_addr = dma_addr;
14534ff6846SIoana Radulescu 				   __entry->map_size = map_size;
14634ff6846SIoana Radulescu 				   __entry->bpid = bpid;
14734ff6846SIoana Radulescu 				   __assign_str(name, netdev->name);
14834ff6846SIoana Radulescu 		    ),
14934ff6846SIoana Radulescu 
15034ff6846SIoana Radulescu 		    /* This is what gets printed when the trace event is
15134ff6846SIoana Radulescu 		     * triggered.
15234ff6846SIoana Radulescu 		     */
15334ff6846SIoana Radulescu 		    TP_printk(TR_BUF_FMT,
15434ff6846SIoana Radulescu 			      __get_str(name),
15534ff6846SIoana Radulescu 			      __entry->vaddr,
15634ff6846SIoana Radulescu 			      __entry->size,
15734ff6846SIoana Radulescu 			      &__entry->dma_addr,
15834ff6846SIoana Radulescu 			      __entry->map_size,
15934ff6846SIoana Radulescu 			      __entry->bpid)
16034ff6846SIoana Radulescu );
16134ff6846SIoana Radulescu 
162*3817b2acSRobert-Ionut Alexa /* Main memory buff seeding */
163*3817b2acSRobert-Ionut Alexa DEFINE_EVENT(dpaa2_eth_buf, dpaa2_eth_buf_seed,
164*3817b2acSRobert-Ionut Alexa 	     TP_PROTO(struct net_device *netdev,
165*3817b2acSRobert-Ionut Alexa 		      void *vaddr,
166*3817b2acSRobert-Ionut Alexa 		      size_t size,
167*3817b2acSRobert-Ionut Alexa 		      dma_addr_t dma_addr,
168*3817b2acSRobert-Ionut Alexa 		      size_t map_size,
169*3817b2acSRobert-Ionut Alexa 		      u16 bpid),
170*3817b2acSRobert-Ionut Alexa 
171*3817b2acSRobert-Ionut Alexa 	     TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid)
172*3817b2acSRobert-Ionut Alexa );
173*3817b2acSRobert-Ionut Alexa 
174*3817b2acSRobert-Ionut Alexa /* UMEM buff seeding on AF_XDP fast path */
175*3817b2acSRobert-Ionut Alexa DEFINE_EVENT(dpaa2_eth_buf, dpaa2_xsk_buf_seed,
176*3817b2acSRobert-Ionut Alexa 	     TP_PROTO(struct net_device *netdev,
177*3817b2acSRobert-Ionut Alexa 		      void *vaddr,
178*3817b2acSRobert-Ionut Alexa 		      size_t size,
179*3817b2acSRobert-Ionut Alexa 		      dma_addr_t dma_addr,
180*3817b2acSRobert-Ionut Alexa 		      size_t map_size,
181*3817b2acSRobert-Ionut Alexa 		      u16 bpid),
182*3817b2acSRobert-Ionut Alexa 
183*3817b2acSRobert-Ionut Alexa 	     TP_ARGS(netdev, vaddr, size, dma_addr, map_size, bpid)
184*3817b2acSRobert-Ionut Alexa );
185*3817b2acSRobert-Ionut Alexa 
18634ff6846SIoana Radulescu /* If only one event of a certain type needs to be declared, use TRACE_EVENT().
18734ff6846SIoana Radulescu  * The syntax is the same as for DECLARE_EVENT_CLASS().
18834ff6846SIoana Radulescu  */
18934ff6846SIoana Radulescu 
19034ff6846SIoana Radulescu #endif /* _DPAA2_ETH_TRACE_H */
19134ff6846SIoana Radulescu 
19234ff6846SIoana Radulescu /* This must be outside ifdef _DPAA2_ETH_TRACE_H */
19334ff6846SIoana Radulescu #undef TRACE_INCLUDE_PATH
19434ff6846SIoana Radulescu #define TRACE_INCLUDE_PATH .
19534ff6846SIoana Radulescu #undef TRACE_INCLUDE_FILE
19634ff6846SIoana Radulescu #define TRACE_INCLUDE_FILE	dpaa2-eth-trace
19734ff6846SIoana Radulescu #include <trace/define_trace.h>
198