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