Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  FUJITSU Extended Socket Network Device driver
0004  *  Copyright (c) 2015-2016 FUJITSU LIMITED
0005  */
0006 
0007 #if !defined(FJES_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
0008 #define FJES_TRACE_H_
0009 
0010 #include <linux/types.h>
0011 #include <linux/tracepoint.h>
0012 
0013 #undef TRACE_SYSTEM
0014 #define TRACE_SYSTEM fjes
0015 
0016 /* tracepoints for fjes_hw.c */
0017 
0018 TRACE_EVENT(fjes_hw_issue_request_command,
0019     TP_PROTO(union REG_CR *cr, union REG_CS *cs, int timeout,
0020          enum fjes_dev_command_response_e ret),
0021     TP_ARGS(cr, cs, timeout, ret),
0022     TP_STRUCT__entry(
0023         __field(u16, cr_req)
0024         __field(u8, cr_error)
0025         __field(u16, cr_err_info)
0026         __field(u8, cr_req_start)
0027         __field(u16, cs_req)
0028         __field(u8, cs_busy)
0029         __field(u8, cs_complete)
0030         __field(int, timeout)
0031         __field(int, ret)
0032     ),
0033     TP_fast_assign(
0034         __entry->cr_req = cr->bits.req_code;
0035         __entry->cr_error = cr->bits.error;
0036         __entry->cr_err_info = cr->bits.err_info;
0037         __entry->cr_req_start = cr->bits.req_start;
0038         __entry->cs_req = cs->bits.req_code;
0039         __entry->cs_busy = cs->bits.busy;
0040         __entry->cs_complete = cs->bits.complete;
0041         __entry->timeout = timeout;
0042         __entry->ret = ret;
0043     ),
0044     TP_printk("CR=[req=%04x, error=%u, err_info=%04x, req_start=%u], CS=[req=%04x, busy=%u, complete=%u], timeout=%d, ret=%d",
0045           __entry->cr_req, __entry->cr_error, __entry->cr_err_info,
0046           __entry->cr_req_start, __entry->cs_req, __entry->cs_busy,
0047           __entry->cs_complete, __entry->timeout, __entry->ret)
0048 );
0049 
0050 TRACE_EVENT(fjes_hw_request_info,
0051     TP_PROTO(struct fjes_hw *hw, union fjes_device_command_res *res_buf),
0052     TP_ARGS(hw, res_buf),
0053     TP_STRUCT__entry(
0054         __field(int, length)
0055         __field(int, code)
0056         __dynamic_array(u8, zone, hw->max_epid)
0057         __dynamic_array(u8, status, hw->max_epid)
0058     ),
0059     TP_fast_assign(
0060         int x;
0061 
0062         __entry->length = res_buf->info.length;
0063         __entry->code = res_buf->info.code;
0064         for (x = 0; x < hw->max_epid; x++) {
0065             *((u8 *)__get_dynamic_array(zone) + x) =
0066                     res_buf->info.info[x].zone;
0067             *((u8 *)__get_dynamic_array(status) + x) =
0068                     res_buf->info.info[x].es_status;
0069         }
0070     ),
0071     TP_printk("res_buf=[length=%d, code=%d, es_zones=%s, es_status=%s]",
0072           __entry->length, __entry->code,
0073           __print_array(__get_dynamic_array(zone),
0074                 __get_dynamic_array_len(zone) / sizeof(u8),
0075                 sizeof(u8)),
0076           __print_array(__get_dynamic_array(status),
0077                 __get_dynamic_array_len(status) / sizeof(u8),
0078                 sizeof(u8)))
0079 );
0080 
0081 TRACE_EVENT(fjes_hw_request_info_err,
0082     TP_PROTO(char *err),
0083     TP_ARGS(err),
0084     TP_STRUCT__entry(
0085         __string(err, err)
0086     ),
0087     TP_fast_assign(
0088         __assign_str(err, err);
0089     ),
0090     TP_printk("%s", __get_str(err))
0091 );
0092 
0093 TRACE_EVENT(fjes_hw_register_buff_addr_req,
0094     TP_PROTO(union fjes_device_command_req *req_buf,
0095          struct ep_share_mem_info *buf_pair),
0096     TP_ARGS(req_buf, buf_pair),
0097     TP_STRUCT__entry(
0098         __field(int, length)
0099         __field(int, epid)
0100         __field(u64, tx)
0101         __field(size_t, tx_size)
0102         __field(u64, rx)
0103         __field(size_t, rx_size)
0104     ),
0105     TP_fast_assign(
0106         void *tx, *rx;
0107 
0108         tx = (void *)buf_pair->tx.buffer;
0109         rx = (void *)buf_pair->rx.buffer;
0110         __entry->length = req_buf->share_buffer.length;
0111         __entry->epid = req_buf->share_buffer.epid;
0112         __entry->tx_size = buf_pair->tx.size;
0113         __entry->rx_size = buf_pair->rx.size;
0114         __entry->tx = page_to_phys(vmalloc_to_page(tx)) +
0115                 offset_in_page(tx);
0116         __entry->rx = page_to_phys(vmalloc_to_page(rx)) +
0117                 offset_in_page(rx);
0118     ),
0119     TP_printk("req_buf=[length=%d, epid=%d], TX=[phy=0x%016llx, size=%zu], RX=[phy=0x%016llx, size=%zu]",
0120           __entry->length, __entry->epid, __entry->tx, __entry->tx_size,
0121           __entry->rx, __entry->rx_size)
0122 );
0123 
0124 TRACE_EVENT(fjes_hw_register_buff_addr,
0125     TP_PROTO(union fjes_device_command_res *res_buf, int timeout),
0126     TP_ARGS(res_buf, timeout),
0127     TP_STRUCT__entry(
0128         __field(int, length)
0129         __field(int, code)
0130         __field(int, timeout)
0131     ),
0132     TP_fast_assign(
0133         __entry->length = res_buf->share_buffer.length;
0134         __entry->code = res_buf->share_buffer.code;
0135         __entry->timeout = timeout;
0136     ),
0137     TP_printk("res_buf=[length=%d, code=%d], timeout=%d",
0138           __entry->length, __entry->code, __entry->timeout)
0139 );
0140 
0141 TRACE_EVENT(fjes_hw_register_buff_addr_err,
0142     TP_PROTO(char *err),
0143     TP_ARGS(err),
0144     TP_STRUCT__entry(
0145         __string(err, err)
0146     ),
0147     TP_fast_assign(
0148         __assign_str(err, err);
0149     ),
0150     TP_printk("%s", __get_str(err))
0151 );
0152 
0153 TRACE_EVENT(fjes_hw_unregister_buff_addr_req,
0154     TP_PROTO(union fjes_device_command_req *req_buf),
0155     TP_ARGS(req_buf),
0156     TP_STRUCT__entry(
0157         __field(int, length)
0158         __field(int, epid)
0159     ),
0160     TP_fast_assign(
0161         __entry->length = req_buf->unshare_buffer.length;
0162         __entry->epid = req_buf->unshare_buffer.epid;
0163     ),
0164     TP_printk("req_buf=[length=%d, epid=%d]",
0165           __entry->length, __entry->epid)
0166 );
0167 
0168 TRACE_EVENT(fjes_hw_unregister_buff_addr,
0169     TP_PROTO(union fjes_device_command_res *res_buf, int timeout),
0170     TP_ARGS(res_buf, timeout),
0171     TP_STRUCT__entry(
0172         __field(int, length)
0173         __field(int, code)
0174         __field(int, timeout)
0175     ),
0176     TP_fast_assign(
0177         __entry->length = res_buf->unshare_buffer.length;
0178         __entry->code = res_buf->unshare_buffer.code;
0179         __entry->timeout = timeout;
0180     ),
0181     TP_printk("res_buf=[length=%d, code=%d], timeout=%d",
0182           __entry->length, __entry->code, __entry->timeout)
0183 );
0184 
0185 TRACE_EVENT(fjes_hw_unregister_buff_addr_err,
0186     TP_PROTO(char *err),
0187     TP_ARGS(err),
0188     TP_STRUCT__entry(
0189         __string(err, err)
0190     ),
0191     TP_fast_assign(
0192         __assign_str(err, err);
0193     ),
0194     TP_printk("%s", __get_str(err))
0195 );
0196 
0197 TRACE_EVENT(fjes_hw_start_debug_req,
0198     TP_PROTO(union fjes_device_command_req *req_buf),
0199     TP_ARGS(req_buf),
0200     TP_STRUCT__entry(
0201         __field(int, length)
0202         __field(int, mode)
0203         __field(phys_addr_t, buffer)
0204     ),
0205     TP_fast_assign(
0206         __entry->length = req_buf->start_trace.length;
0207         __entry->mode = req_buf->start_trace.mode;
0208         __entry->buffer = req_buf->start_trace.buffer[0];
0209     ),
0210     TP_printk("req_buf=[length=%d, mode=%d, buffer=%pap]",
0211           __entry->length, __entry->mode, &__entry->buffer)
0212 );
0213 
0214 TRACE_EVENT(fjes_hw_start_debug,
0215     TP_PROTO(union fjes_device_command_res *res_buf),
0216     TP_ARGS(res_buf),
0217     TP_STRUCT__entry(
0218         __field(int, length)
0219         __field(int, code)
0220     ),
0221     TP_fast_assign(
0222         __entry->length = res_buf->start_trace.length;
0223         __entry->code = res_buf->start_trace.code;
0224     ),
0225     TP_printk("res_buf=[length=%d, code=%d]", __entry->length, __entry->code)
0226 );
0227 
0228 TRACE_EVENT(fjes_hw_start_debug_err,
0229     TP_PROTO(char *err),
0230     TP_ARGS(err),
0231     TP_STRUCT__entry(
0232          __string(err, err)
0233     ),
0234     TP_fast_assign(
0235         __assign_str(err, err);
0236     ),
0237     TP_printk("%s", __get_str(err))
0238 );
0239 
0240 TRACE_EVENT(fjes_hw_stop_debug,
0241     TP_PROTO(union fjes_device_command_res *res_buf),
0242     TP_ARGS(res_buf),
0243     TP_STRUCT__entry(
0244         __field(int, length)
0245         __field(int, code)
0246     ),
0247     TP_fast_assign(
0248         __entry->length = res_buf->stop_trace.length;
0249         __entry->code = res_buf->stop_trace.code;
0250     ),
0251     TP_printk("res_buf=[length=%d, code=%d]", __entry->length, __entry->code)
0252 );
0253 
0254 TRACE_EVENT(fjes_hw_stop_debug_err,
0255     TP_PROTO(char *err),
0256     TP_ARGS(err),
0257     TP_STRUCT__entry(
0258          __string(err, err)
0259     ),
0260     TP_fast_assign(
0261         __assign_str(err, err);
0262     ),
0263     TP_printk("%s", __get_str(err))
0264 );
0265 
0266 /* tracepoints for fjes_main.c */
0267 
0268 TRACE_EVENT(fjes_txrx_stop_req_irq_pre,
0269     TP_PROTO(struct fjes_hw *hw, int src_epid,
0270          enum ep_partner_status status),
0271     TP_ARGS(hw, src_epid, status),
0272     TP_STRUCT__entry(
0273         __field(int, src_epid)
0274         __field(enum ep_partner_status, status)
0275         __field(u8, ep_status)
0276         __field(unsigned long, txrx_stop_req_bit)
0277         __field(u16, rx_status)
0278     ),
0279     TP_fast_assign(
0280         __entry->src_epid = src_epid;
0281         __entry->status = status;
0282         __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
0283         __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
0284         __entry->rx_status =
0285             hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
0286     ),
0287     TP_printk("epid=%d, partner_status=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
0288           __entry->src_epid, __entry->status, __entry->ep_status,
0289           __entry->txrx_stop_req_bit, __entry->rx_status)
0290 );
0291 
0292 TRACE_EVENT(fjes_txrx_stop_req_irq_post,
0293     TP_PROTO(struct fjes_hw *hw, int src_epid),
0294     TP_ARGS(hw, src_epid),
0295     TP_STRUCT__entry(
0296         __field(int, src_epid)
0297         __field(u8, ep_status)
0298         __field(unsigned long, txrx_stop_req_bit)
0299         __field(u16, rx_status)
0300     ),
0301     TP_fast_assign(
0302         __entry->src_epid = src_epid;
0303         __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
0304         __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
0305         __entry->rx_status = hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
0306     ),
0307     TP_printk("epid=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
0308           __entry->src_epid, __entry->ep_status,
0309           __entry->txrx_stop_req_bit, __entry->rx_status)
0310 );
0311 
0312 TRACE_EVENT(fjes_stop_req_irq_pre,
0313     TP_PROTO(struct fjes_hw *hw, int src_epid,
0314          enum ep_partner_status status),
0315     TP_ARGS(hw, src_epid, status),
0316     TP_STRUCT__entry(
0317         __field(int, src_epid)
0318         __field(enum ep_partner_status, status)
0319         __field(u8, ep_status)
0320         __field(unsigned long, txrx_stop_req_bit)
0321         __field(u16, rx_status)
0322     ),
0323     TP_fast_assign(
0324         __entry->src_epid = src_epid;
0325         __entry->status = status;
0326         __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
0327         __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
0328         __entry->rx_status =
0329             hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
0330     ),
0331     TP_printk("epid=%d, partner_status=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
0332           __entry->src_epid, __entry->status, __entry->ep_status,
0333           __entry->txrx_stop_req_bit, __entry->rx_status)
0334 );
0335 
0336 TRACE_EVENT(fjes_stop_req_irq_post,
0337     TP_PROTO(struct fjes_hw *hw, int src_epid),
0338     TP_ARGS(hw, src_epid),
0339     TP_STRUCT__entry(
0340         __field(int, src_epid)
0341         __field(u8, ep_status)
0342         __field(unsigned long, txrx_stop_req_bit)
0343         __field(u16, rx_status)
0344     ),
0345     TP_fast_assign(
0346         __entry->src_epid = src_epid;
0347         __entry->ep_status = hw->hw_info.share->ep_status[src_epid];
0348         __entry->txrx_stop_req_bit = hw->txrx_stop_req_bit;
0349         __entry->rx_status =
0350             hw->ep_shm_info[src_epid].tx.info->v1i.rx_status;
0351     ),
0352     TP_printk("epid=%d, ep_status=%x, txrx_stop_req_bit=%016lx, tx.rx_status=%08x",
0353           __entry->src_epid, __entry->ep_status,
0354           __entry->txrx_stop_req_bit, __entry->rx_status)
0355 );
0356 
0357 #endif /* FJES_TRACE_H_ */
0358 
0359 #undef TRACE_INCLUDE_PATH
0360 #undef TRACE_INCLUDE_FILE
0361 #define TRACE_INCLUDE_PATH ../../../drivers/net/fjes
0362 #define TRACE_INCLUDE_FILE fjes_trace
0363 
0364 /* This part must be outside protection */
0365 #include <trace/define_trace.h>