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