18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * Copyright(c) 2015 - 2017 Intel Corporation.
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * This file is provided under a dual BSD/GPLv2 license.  When using or
58c2ecf20Sopenharmony_ci * redistributing this file, you may do so under either license.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * GPL LICENSE SUMMARY
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
108c2ecf20Sopenharmony_ci * it under the terms of version 2 of the GNU General Public License as
118c2ecf20Sopenharmony_ci * published by the Free Software Foundation.
128c2ecf20Sopenharmony_ci *
138c2ecf20Sopenharmony_ci * This program is distributed in the hope that it will be useful, but
148c2ecf20Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of
158c2ecf20Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
168c2ecf20Sopenharmony_ci * General Public License for more details.
178c2ecf20Sopenharmony_ci *
188c2ecf20Sopenharmony_ci * BSD LICENSE
198c2ecf20Sopenharmony_ci *
208c2ecf20Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
218c2ecf20Sopenharmony_ci * modification, are permitted provided that the following conditions
228c2ecf20Sopenharmony_ci * are met:
238c2ecf20Sopenharmony_ci *
248c2ecf20Sopenharmony_ci *  - Redistributions of source code must retain the above copyright
258c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer.
268c2ecf20Sopenharmony_ci *  - Redistributions in binary form must reproduce the above copyright
278c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer in
288c2ecf20Sopenharmony_ci *    the documentation and/or other materials provided with the
298c2ecf20Sopenharmony_ci *    distribution.
308c2ecf20Sopenharmony_ci *  - Neither the name of Intel Corporation nor the names of its
318c2ecf20Sopenharmony_ci *    contributors may be used to endorse or promote products derived
328c2ecf20Sopenharmony_ci *    from this software without specific prior written permission.
338c2ecf20Sopenharmony_ci *
348c2ecf20Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
358c2ecf20Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
368c2ecf20Sopenharmony_ci * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
378c2ecf20Sopenharmony_ci * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
388c2ecf20Sopenharmony_ci * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
398c2ecf20Sopenharmony_ci * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
408c2ecf20Sopenharmony_ci * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
418c2ecf20Sopenharmony_ci * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
428c2ecf20Sopenharmony_ci * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
438c2ecf20Sopenharmony_ci * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
448c2ecf20Sopenharmony_ci * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
458c2ecf20Sopenharmony_ci *
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_ci#if !defined(__HFI1_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ)
488c2ecf20Sopenharmony_ci#define __HFI1_TRACE_TX_H
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
518c2ecf20Sopenharmony_ci#include <linux/trace_seq.h>
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#include "hfi.h"
548c2ecf20Sopenharmony_ci#include "mad.h"
558c2ecf20Sopenharmony_ci#include "sdma.h"
568c2ecf20Sopenharmony_ci#include "ipoib.h"
578c2ecf20Sopenharmony_ci#include "user_sdma.h"
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ciconst char *parse_sdma_flags(struct trace_seq *p, u64 desc0, u64 desc1);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci#define __parse_sdma_flags(desc0, desc1) parse_sdma_flags(p, desc0, desc1)
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
648c2ecf20Sopenharmony_ci#define TRACE_SYSTEM hfi1_tx
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_piofree,
678c2ecf20Sopenharmony_ci	    TP_PROTO(struct send_context *sc, int extra),
688c2ecf20Sopenharmony_ci	    TP_ARGS(sc, extra),
698c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(sc->dd)
708c2ecf20Sopenharmony_ci	    __field(u32, sw_index)
718c2ecf20Sopenharmony_ci	    __field(u32, hw_context)
728c2ecf20Sopenharmony_ci	    __field(int, extra)
738c2ecf20Sopenharmony_ci	    ),
748c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(sc->dd);
758c2ecf20Sopenharmony_ci	    __entry->sw_index = sc->sw_index;
768c2ecf20Sopenharmony_ci	    __entry->hw_context = sc->hw_context;
778c2ecf20Sopenharmony_ci	    __entry->extra = extra;
788c2ecf20Sopenharmony_ci	    ),
798c2ecf20Sopenharmony_ci	    TP_printk("[%s] ctxt %u(%u) extra %d",
808c2ecf20Sopenharmony_ci		      __get_str(dev),
818c2ecf20Sopenharmony_ci		      __entry->sw_index,
828c2ecf20Sopenharmony_ci		      __entry->hw_context,
838c2ecf20Sopenharmony_ci		      __entry->extra
848c2ecf20Sopenharmony_ci	    )
858c2ecf20Sopenharmony_ci);
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_wantpiointr,
888c2ecf20Sopenharmony_ci	    TP_PROTO(struct send_context *sc, u32 needint, u64 credit_ctrl),
898c2ecf20Sopenharmony_ci	    TP_ARGS(sc, needint, credit_ctrl),
908c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(sc->dd)
918c2ecf20Sopenharmony_ci			__field(u32, sw_index)
928c2ecf20Sopenharmony_ci			__field(u32, hw_context)
938c2ecf20Sopenharmony_ci			__field(u32, needint)
948c2ecf20Sopenharmony_ci			__field(u64, credit_ctrl)
958c2ecf20Sopenharmony_ci			),
968c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(sc->dd);
978c2ecf20Sopenharmony_ci			__entry->sw_index = sc->sw_index;
988c2ecf20Sopenharmony_ci			__entry->hw_context = sc->hw_context;
998c2ecf20Sopenharmony_ci			__entry->needint = needint;
1008c2ecf20Sopenharmony_ci			__entry->credit_ctrl = credit_ctrl;
1018c2ecf20Sopenharmony_ci			),
1028c2ecf20Sopenharmony_ci	    TP_printk("[%s] ctxt %u(%u) on %d credit_ctrl 0x%llx",
1038c2ecf20Sopenharmony_ci		      __get_str(dev),
1048c2ecf20Sopenharmony_ci		      __entry->sw_index,
1058c2ecf20Sopenharmony_ci		      __entry->hw_context,
1068c2ecf20Sopenharmony_ci		      __entry->needint,
1078c2ecf20Sopenharmony_ci		      (unsigned long long)__entry->credit_ctrl
1088c2ecf20Sopenharmony_ci		      )
1098c2ecf20Sopenharmony_ci);
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_qpsleepwakeup_template,
1128c2ecf20Sopenharmony_ci		    TP_PROTO(struct rvt_qp *qp, u32 flags),
1138c2ecf20Sopenharmony_ci		    TP_ARGS(qp, flags),
1148c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(
1158c2ecf20Sopenharmony_ci		    DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
1168c2ecf20Sopenharmony_ci		    __field(u32, qpn)
1178c2ecf20Sopenharmony_ci		    __field(u32, flags)
1188c2ecf20Sopenharmony_ci		    __field(u32, s_flags)
1198c2ecf20Sopenharmony_ci		    __field(u32, ps_flags)
1208c2ecf20Sopenharmony_ci		    __field(unsigned long, iow_flags)
1218c2ecf20Sopenharmony_ci		    ),
1228c2ecf20Sopenharmony_ci		    TP_fast_assign(
1238c2ecf20Sopenharmony_ci		    DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device))
1248c2ecf20Sopenharmony_ci		    __entry->flags = flags;
1258c2ecf20Sopenharmony_ci		    __entry->qpn = qp->ibqp.qp_num;
1268c2ecf20Sopenharmony_ci		    __entry->s_flags = qp->s_flags;
1278c2ecf20Sopenharmony_ci		    __entry->ps_flags =
1288c2ecf20Sopenharmony_ci			((struct hfi1_qp_priv *)qp->priv)->s_flags;
1298c2ecf20Sopenharmony_ci		    __entry->iow_flags =
1308c2ecf20Sopenharmony_ci			((struct hfi1_qp_priv *)qp->priv)->s_iowait.flags;
1318c2ecf20Sopenharmony_ci		    ),
1328c2ecf20Sopenharmony_ci		    TP_printk(
1338c2ecf20Sopenharmony_ci		    "[%s] qpn 0x%x flags 0x%x s_flags 0x%x ps_flags 0x%x iow_flags 0x%lx",
1348c2ecf20Sopenharmony_ci		    __get_str(dev),
1358c2ecf20Sopenharmony_ci		    __entry->qpn,
1368c2ecf20Sopenharmony_ci		    __entry->flags,
1378c2ecf20Sopenharmony_ci		    __entry->s_flags,
1388c2ecf20Sopenharmony_ci		    __entry->ps_flags,
1398c2ecf20Sopenharmony_ci		    __entry->iow_flags
1408c2ecf20Sopenharmony_ci		    )
1418c2ecf20Sopenharmony_ci);
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_qpsleepwakeup_template, hfi1_qpwakeup,
1448c2ecf20Sopenharmony_ci	     TP_PROTO(struct rvt_qp *qp, u32 flags),
1458c2ecf20Sopenharmony_ci	     TP_ARGS(qp, flags));
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_qpsleepwakeup_template, hfi1_qpsleep,
1488c2ecf20Sopenharmony_ci	     TP_PROTO(struct rvt_qp *qp, u32 flags),
1498c2ecf20Sopenharmony_ci	     TP_ARGS(qp, flags));
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_descriptor,
1528c2ecf20Sopenharmony_ci	    TP_PROTO(struct sdma_engine *sde,
1538c2ecf20Sopenharmony_ci		     u64 desc0,
1548c2ecf20Sopenharmony_ci		     u64 desc1,
1558c2ecf20Sopenharmony_ci		     u16 e,
1568c2ecf20Sopenharmony_ci		     void *descp),
1578c2ecf20Sopenharmony_ci		     TP_ARGS(sde, desc0, desc1, e, descp),
1588c2ecf20Sopenharmony_ci		     TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
1598c2ecf20Sopenharmony_ci		     __field(void *, descp)
1608c2ecf20Sopenharmony_ci		     __field(u64, desc0)
1618c2ecf20Sopenharmony_ci		     __field(u64, desc1)
1628c2ecf20Sopenharmony_ci		     __field(u16, e)
1638c2ecf20Sopenharmony_ci		     __field(u8, idx)
1648c2ecf20Sopenharmony_ci		     ),
1658c2ecf20Sopenharmony_ci		     TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
1668c2ecf20Sopenharmony_ci		     __entry->desc0 = desc0;
1678c2ecf20Sopenharmony_ci		     __entry->desc1 = desc1;
1688c2ecf20Sopenharmony_ci		     __entry->idx = sde->this_idx;
1698c2ecf20Sopenharmony_ci		     __entry->descp = descp;
1708c2ecf20Sopenharmony_ci		     __entry->e = e;
1718c2ecf20Sopenharmony_ci		     ),
1728c2ecf20Sopenharmony_ci	    TP_printk(
1738c2ecf20Sopenharmony_ci	    "[%s] SDE(%u) flags:%s addr:0x%016llx gen:%u len:%u d0:%016llx d1:%016llx to %p,%u",
1748c2ecf20Sopenharmony_ci	    __get_str(dev),
1758c2ecf20Sopenharmony_ci	    __entry->idx,
1768c2ecf20Sopenharmony_ci	    __parse_sdma_flags(__entry->desc0, __entry->desc1),
1778c2ecf20Sopenharmony_ci	    (__entry->desc0 >> SDMA_DESC0_PHY_ADDR_SHIFT) &
1788c2ecf20Sopenharmony_ci	    SDMA_DESC0_PHY_ADDR_MASK,
1798c2ecf20Sopenharmony_ci	    (u8)((__entry->desc1 >> SDMA_DESC1_GENERATION_SHIFT) &
1808c2ecf20Sopenharmony_ci	    SDMA_DESC1_GENERATION_MASK),
1818c2ecf20Sopenharmony_ci	    (u16)((__entry->desc0 >> SDMA_DESC0_BYTE_COUNT_SHIFT) &
1828c2ecf20Sopenharmony_ci	    SDMA_DESC0_BYTE_COUNT_MASK),
1838c2ecf20Sopenharmony_ci	    __entry->desc0,
1848c2ecf20Sopenharmony_ci	    __entry->desc1,
1858c2ecf20Sopenharmony_ci	    __entry->descp,
1868c2ecf20Sopenharmony_ci	    __entry->e
1878c2ecf20Sopenharmony_ci	    )
1888c2ecf20Sopenharmony_ci);
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_engine_select,
1918c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u32 sel, u8 vl, u8 idx),
1928c2ecf20Sopenharmony_ci	    TP_ARGS(dd, sel, vl, idx),
1938c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
1948c2ecf20Sopenharmony_ci	    __field(u32, sel)
1958c2ecf20Sopenharmony_ci	    __field(u8, vl)
1968c2ecf20Sopenharmony_ci	    __field(u8, idx)
1978c2ecf20Sopenharmony_ci	    ),
1988c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(dd);
1998c2ecf20Sopenharmony_ci	    __entry->sel = sel;
2008c2ecf20Sopenharmony_ci	    __entry->vl = vl;
2018c2ecf20Sopenharmony_ci	    __entry->idx = idx;
2028c2ecf20Sopenharmony_ci	    ),
2038c2ecf20Sopenharmony_ci	    TP_printk("[%s] selecting SDE %u sel 0x%x vl %u",
2048c2ecf20Sopenharmony_ci		      __get_str(dev),
2058c2ecf20Sopenharmony_ci		      __entry->idx,
2068c2ecf20Sopenharmony_ci		      __entry->sel,
2078c2ecf20Sopenharmony_ci		      __entry->vl
2088c2ecf20Sopenharmony_ci		      )
2098c2ecf20Sopenharmony_ci);
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_free_queues,
2128c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt),
2138c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt),
2148c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
2158c2ecf20Sopenharmony_ci			     __field(u16, ctxt)
2168c2ecf20Sopenharmony_ci			     __field(u16, subctxt)
2178c2ecf20Sopenharmony_ci			     ),
2188c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(dd);
2198c2ecf20Sopenharmony_ci			   __entry->ctxt = ctxt;
2208c2ecf20Sopenharmony_ci			   __entry->subctxt = subctxt;
2218c2ecf20Sopenharmony_ci			   ),
2228c2ecf20Sopenharmony_ci	    TP_printk("[%s] SDMA [%u:%u] Freeing user SDMA queues",
2238c2ecf20Sopenharmony_ci		      __get_str(dev),
2248c2ecf20Sopenharmony_ci		      __entry->ctxt,
2258c2ecf20Sopenharmony_ci		      __entry->subctxt
2268c2ecf20Sopenharmony_ci		      )
2278c2ecf20Sopenharmony_ci);
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_process_request,
2308c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
2318c2ecf20Sopenharmony_ci		     u16 comp_idx),
2328c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, comp_idx),
2338c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
2348c2ecf20Sopenharmony_ci			     __field(u16, ctxt)
2358c2ecf20Sopenharmony_ci			     __field(u16, subctxt)
2368c2ecf20Sopenharmony_ci			     __field(u16, comp_idx)
2378c2ecf20Sopenharmony_ci			     ),
2388c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(dd);
2398c2ecf20Sopenharmony_ci			   __entry->ctxt = ctxt;
2408c2ecf20Sopenharmony_ci			   __entry->subctxt = subctxt;
2418c2ecf20Sopenharmony_ci			   __entry->comp_idx = comp_idx;
2428c2ecf20Sopenharmony_ci			   ),
2438c2ecf20Sopenharmony_ci	    TP_printk("[%s] SDMA [%u:%u] Using req/comp entry: %u",
2448c2ecf20Sopenharmony_ci		      __get_str(dev),
2458c2ecf20Sopenharmony_ci		      __entry->ctxt,
2468c2ecf20Sopenharmony_ci		      __entry->subctxt,
2478c2ecf20Sopenharmony_ci		      __entry->comp_idx
2488c2ecf20Sopenharmony_ci		      )
2498c2ecf20Sopenharmony_ci);
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(
2528c2ecf20Sopenharmony_ci	hfi1_sdma_value_template,
2538c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, u16 comp_idx,
2548c2ecf20Sopenharmony_ci		 u32 value),
2558c2ecf20Sopenharmony_ci	TP_ARGS(dd, ctxt, subctxt, comp_idx, value),
2568c2ecf20Sopenharmony_ci	TP_STRUCT__entry(DD_DEV_ENTRY(dd)
2578c2ecf20Sopenharmony_ci			 __field(u16, ctxt)
2588c2ecf20Sopenharmony_ci			 __field(u16, subctxt)
2598c2ecf20Sopenharmony_ci			 __field(u16, comp_idx)
2608c2ecf20Sopenharmony_ci			 __field(u32, value)
2618c2ecf20Sopenharmony_ci		),
2628c2ecf20Sopenharmony_ci	TP_fast_assign(DD_DEV_ASSIGN(dd);
2638c2ecf20Sopenharmony_ci		       __entry->ctxt = ctxt;
2648c2ecf20Sopenharmony_ci		       __entry->subctxt = subctxt;
2658c2ecf20Sopenharmony_ci		       __entry->comp_idx = comp_idx;
2668c2ecf20Sopenharmony_ci		       __entry->value = value;
2678c2ecf20Sopenharmony_ci		),
2688c2ecf20Sopenharmony_ci	TP_printk("[%s] SDMA [%u:%u:%u] value: %u",
2698c2ecf20Sopenharmony_ci		  __get_str(dev),
2708c2ecf20Sopenharmony_ci		  __entry->ctxt,
2718c2ecf20Sopenharmony_ci		  __entry->subctxt,
2728c2ecf20Sopenharmony_ci		  __entry->comp_idx,
2738c2ecf20Sopenharmony_ci		  __entry->value
2748c2ecf20Sopenharmony_ci		)
2758c2ecf20Sopenharmony_ci);
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_initial_tidoffset,
2788c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
2798c2ecf20Sopenharmony_ci		      u16 comp_idx, u32 tidoffset),
2808c2ecf20Sopenharmony_ci	     TP_ARGS(dd, ctxt, subctxt, comp_idx, tidoffset));
2818c2ecf20Sopenharmony_ci
2828c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_data_length,
2838c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
2848c2ecf20Sopenharmony_ci		      u16 comp_idx, u32 data_len),
2858c2ecf20Sopenharmony_ci	     TP_ARGS(dd, ctxt, subctxt, comp_idx, data_len));
2868c2ecf20Sopenharmony_ci
2878c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_compute_length,
2888c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
2898c2ecf20Sopenharmony_ci		      u16 comp_idx, u32 data_len),
2908c2ecf20Sopenharmony_ci	     TP_ARGS(dd, ctxt, subctxt, comp_idx, data_len));
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_tid_info,
2938c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
2948c2ecf20Sopenharmony_ci		     u16 comp_idx, u32 tidoffset, u32 units, u8 shift),
2958c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, comp_idx, tidoffset, units, shift),
2968c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
2978c2ecf20Sopenharmony_ci			     __field(u16, ctxt)
2988c2ecf20Sopenharmony_ci			     __field(u16, subctxt)
2998c2ecf20Sopenharmony_ci			     __field(u16, comp_idx)
3008c2ecf20Sopenharmony_ci			     __field(u32, tidoffset)
3018c2ecf20Sopenharmony_ci			     __field(u32, units)
3028c2ecf20Sopenharmony_ci			     __field(u8, shift)
3038c2ecf20Sopenharmony_ci			     ),
3048c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(dd);
3058c2ecf20Sopenharmony_ci			   __entry->ctxt = ctxt;
3068c2ecf20Sopenharmony_ci			   __entry->subctxt = subctxt;
3078c2ecf20Sopenharmony_ci			   __entry->comp_idx = comp_idx;
3088c2ecf20Sopenharmony_ci			   __entry->tidoffset = tidoffset;
3098c2ecf20Sopenharmony_ci			   __entry->units = units;
3108c2ecf20Sopenharmony_ci			   __entry->shift = shift;
3118c2ecf20Sopenharmony_ci			   ),
3128c2ecf20Sopenharmony_ci	    TP_printk("[%s] SDMA [%u:%u:%u] TID offset %ubytes %uunits om %u",
3138c2ecf20Sopenharmony_ci		      __get_str(dev),
3148c2ecf20Sopenharmony_ci		      __entry->ctxt,
3158c2ecf20Sopenharmony_ci		      __entry->subctxt,
3168c2ecf20Sopenharmony_ci		      __entry->comp_idx,
3178c2ecf20Sopenharmony_ci		      __entry->tidoffset,
3188c2ecf20Sopenharmony_ci		      __entry->units,
3198c2ecf20Sopenharmony_ci		      __entry->shift
3208c2ecf20Sopenharmony_ci		      )
3218c2ecf20Sopenharmony_ci);
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_request,
3248c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt,
3258c2ecf20Sopenharmony_ci		     unsigned long dim),
3268c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, dim),
3278c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
3288c2ecf20Sopenharmony_ci			     __field(u16, ctxt)
3298c2ecf20Sopenharmony_ci			     __field(u16, subctxt)
3308c2ecf20Sopenharmony_ci			     __field(unsigned long, dim)
3318c2ecf20Sopenharmony_ci			     ),
3328c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(dd);
3338c2ecf20Sopenharmony_ci			   __entry->ctxt = ctxt;
3348c2ecf20Sopenharmony_ci			   __entry->subctxt = subctxt;
3358c2ecf20Sopenharmony_ci			   __entry->dim = dim;
3368c2ecf20Sopenharmony_ci			   ),
3378c2ecf20Sopenharmony_ci	    TP_printk("[%s] SDMA from %u:%u (%lu)",
3388c2ecf20Sopenharmony_ci		      __get_str(dev),
3398c2ecf20Sopenharmony_ci		      __entry->ctxt,
3408c2ecf20Sopenharmony_ci		      __entry->subctxt,
3418c2ecf20Sopenharmony_ci		      __entry->dim
3428c2ecf20Sopenharmony_ci		      )
3438c2ecf20Sopenharmony_ci);
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_sdma_engine_class,
3468c2ecf20Sopenharmony_ci		    TP_PROTO(struct sdma_engine *sde, u64 status),
3478c2ecf20Sopenharmony_ci		    TP_ARGS(sde, status),
3488c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
3498c2ecf20Sopenharmony_ci		    __field(u64, status)
3508c2ecf20Sopenharmony_ci		    __field(u8, idx)
3518c2ecf20Sopenharmony_ci		    ),
3528c2ecf20Sopenharmony_ci		    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
3538c2ecf20Sopenharmony_ci		    __entry->status = status;
3548c2ecf20Sopenharmony_ci		    __entry->idx = sde->this_idx;
3558c2ecf20Sopenharmony_ci		    ),
3568c2ecf20Sopenharmony_ci		    TP_printk("[%s] SDE(%u) status %llx",
3578c2ecf20Sopenharmony_ci			      __get_str(dev),
3588c2ecf20Sopenharmony_ci			      __entry->idx,
3598c2ecf20Sopenharmony_ci			      (unsigned long long)__entry->status
3608c2ecf20Sopenharmony_ci			      )
3618c2ecf20Sopenharmony_ci);
3628c2ecf20Sopenharmony_ci
3638c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_engine_class, hfi1_sdma_engine_interrupt,
3648c2ecf20Sopenharmony_ci	     TP_PROTO(struct sdma_engine *sde, u64 status),
3658c2ecf20Sopenharmony_ci	     TP_ARGS(sde, status)
3668c2ecf20Sopenharmony_ci);
3678c2ecf20Sopenharmony_ci
3688c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_engine_class, hfi1_sdma_engine_progress,
3698c2ecf20Sopenharmony_ci	     TP_PROTO(struct sdma_engine *sde, u64 status),
3708c2ecf20Sopenharmony_ci	     TP_ARGS(sde, status)
3718c2ecf20Sopenharmony_ci);
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_sdma_ahg_ad,
3748c2ecf20Sopenharmony_ci		    TP_PROTO(struct sdma_engine *sde, int aidx),
3758c2ecf20Sopenharmony_ci		    TP_ARGS(sde, aidx),
3768c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
3778c2ecf20Sopenharmony_ci		    __field(int, aidx)
3788c2ecf20Sopenharmony_ci		    __field(u8, idx)
3798c2ecf20Sopenharmony_ci		    ),
3808c2ecf20Sopenharmony_ci		    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
3818c2ecf20Sopenharmony_ci		    __entry->idx = sde->this_idx;
3828c2ecf20Sopenharmony_ci		    __entry->aidx = aidx;
3838c2ecf20Sopenharmony_ci		    ),
3848c2ecf20Sopenharmony_ci		    TP_printk("[%s] SDE(%u) aidx %d",
3858c2ecf20Sopenharmony_ci			      __get_str(dev),
3868c2ecf20Sopenharmony_ci			      __entry->idx,
3878c2ecf20Sopenharmony_ci			      __entry->aidx
3888c2ecf20Sopenharmony_ci			      )
3898c2ecf20Sopenharmony_ci);
3908c2ecf20Sopenharmony_ci
3918c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_ahg_ad, hfi1_ahg_allocate,
3928c2ecf20Sopenharmony_ci	     TP_PROTO(struct sdma_engine *sde, int aidx),
3938c2ecf20Sopenharmony_ci	     TP_ARGS(sde, aidx));
3948c2ecf20Sopenharmony_ci
3958c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_ahg_ad, hfi1_ahg_deallocate,
3968c2ecf20Sopenharmony_ci	     TP_PROTO(struct sdma_engine *sde, int aidx),
3978c2ecf20Sopenharmony_ci	     TP_ARGS(sde, aidx));
3988c2ecf20Sopenharmony_ci
3998c2ecf20Sopenharmony_ci#ifdef CONFIG_HFI1_DEBUG_SDMA_ORDER
4008c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_progress,
4018c2ecf20Sopenharmony_ci	    TP_PROTO(struct sdma_engine *sde,
4028c2ecf20Sopenharmony_ci		     u16 hwhead,
4038c2ecf20Sopenharmony_ci		     u16 swhead,
4048c2ecf20Sopenharmony_ci		     struct sdma_txreq *txp
4058c2ecf20Sopenharmony_ci		     ),
4068c2ecf20Sopenharmony_ci	    TP_ARGS(sde, hwhead, swhead, txp),
4078c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
4088c2ecf20Sopenharmony_ci	    __field(u64, sn)
4098c2ecf20Sopenharmony_ci	    __field(u16, hwhead)
4108c2ecf20Sopenharmony_ci	    __field(u16, swhead)
4118c2ecf20Sopenharmony_ci	    __field(u16, txnext)
4128c2ecf20Sopenharmony_ci	    __field(u16, tx_tail)
4138c2ecf20Sopenharmony_ci	    __field(u16, tx_head)
4148c2ecf20Sopenharmony_ci	    __field(u8, idx)
4158c2ecf20Sopenharmony_ci	    ),
4168c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
4178c2ecf20Sopenharmony_ci	    __entry->hwhead = hwhead;
4188c2ecf20Sopenharmony_ci	    __entry->swhead = swhead;
4198c2ecf20Sopenharmony_ci	    __entry->tx_tail = sde->tx_tail;
4208c2ecf20Sopenharmony_ci	    __entry->tx_head = sde->tx_head;
4218c2ecf20Sopenharmony_ci	    __entry->txnext = txp ? txp->next_descq_idx : ~0;
4228c2ecf20Sopenharmony_ci	    __entry->idx = sde->this_idx;
4238c2ecf20Sopenharmony_ci	    __entry->sn = txp ? txp->sn : ~0;
4248c2ecf20Sopenharmony_ci	    ),
4258c2ecf20Sopenharmony_ci	    TP_printk(
4268c2ecf20Sopenharmony_ci	    "[%s] SDE(%u) sn %llu hwhead %u swhead %u next_descq_idx %u tx_head %u tx_tail %u",
4278c2ecf20Sopenharmony_ci	    __get_str(dev),
4288c2ecf20Sopenharmony_ci	    __entry->idx,
4298c2ecf20Sopenharmony_ci	    __entry->sn,
4308c2ecf20Sopenharmony_ci	    __entry->hwhead,
4318c2ecf20Sopenharmony_ci	    __entry->swhead,
4328c2ecf20Sopenharmony_ci	    __entry->txnext,
4338c2ecf20Sopenharmony_ci	    __entry->tx_head,
4348c2ecf20Sopenharmony_ci	    __entry->tx_tail
4358c2ecf20Sopenharmony_ci	    )
4368c2ecf20Sopenharmony_ci);
4378c2ecf20Sopenharmony_ci#else
4388c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_progress,
4398c2ecf20Sopenharmony_ci	    TP_PROTO(struct sdma_engine *sde,
4408c2ecf20Sopenharmony_ci		     u16 hwhead, u16 swhead,
4418c2ecf20Sopenharmony_ci		     struct sdma_txreq *txp
4428c2ecf20Sopenharmony_ci		     ),
4438c2ecf20Sopenharmony_ci	    TP_ARGS(sde, hwhead, swhead, txp),
4448c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
4458c2ecf20Sopenharmony_ci		    __field(u16, hwhead)
4468c2ecf20Sopenharmony_ci		    __field(u16, swhead)
4478c2ecf20Sopenharmony_ci		    __field(u16, txnext)
4488c2ecf20Sopenharmony_ci		    __field(u16, tx_tail)
4498c2ecf20Sopenharmony_ci		    __field(u16, tx_head)
4508c2ecf20Sopenharmony_ci		    __field(u8, idx)
4518c2ecf20Sopenharmony_ci		    ),
4528c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
4538c2ecf20Sopenharmony_ci		    __entry->hwhead = hwhead;
4548c2ecf20Sopenharmony_ci		    __entry->swhead = swhead;
4558c2ecf20Sopenharmony_ci		    __entry->tx_tail = sde->tx_tail;
4568c2ecf20Sopenharmony_ci		    __entry->tx_head = sde->tx_head;
4578c2ecf20Sopenharmony_ci		    __entry->txnext = txp ? txp->next_descq_idx : ~0;
4588c2ecf20Sopenharmony_ci		    __entry->idx = sde->this_idx;
4598c2ecf20Sopenharmony_ci		    ),
4608c2ecf20Sopenharmony_ci	    TP_printk(
4618c2ecf20Sopenharmony_ci		    "[%s] SDE(%u) hwhead %u swhead %u next_descq_idx %u tx_head %u tx_tail %u",
4628c2ecf20Sopenharmony_ci		    __get_str(dev),
4638c2ecf20Sopenharmony_ci		    __entry->idx,
4648c2ecf20Sopenharmony_ci		    __entry->hwhead,
4658c2ecf20Sopenharmony_ci		    __entry->swhead,
4668c2ecf20Sopenharmony_ci		    __entry->txnext,
4678c2ecf20Sopenharmony_ci		    __entry->tx_head,
4688c2ecf20Sopenharmony_ci		    __entry->tx_tail
4698c2ecf20Sopenharmony_ci	    )
4708c2ecf20Sopenharmony_ci);
4718c2ecf20Sopenharmony_ci#endif
4728c2ecf20Sopenharmony_ci
4738c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_sdma_sn,
4748c2ecf20Sopenharmony_ci		    TP_PROTO(struct sdma_engine *sde, u64 sn),
4758c2ecf20Sopenharmony_ci		    TP_ARGS(sde, sn),
4768c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
4778c2ecf20Sopenharmony_ci		    __field(u64, sn)
4788c2ecf20Sopenharmony_ci		    __field(u8, idx)
4798c2ecf20Sopenharmony_ci		    ),
4808c2ecf20Sopenharmony_ci		    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
4818c2ecf20Sopenharmony_ci		    __entry->sn = sn;
4828c2ecf20Sopenharmony_ci		    __entry->idx = sde->this_idx;
4838c2ecf20Sopenharmony_ci		    ),
4848c2ecf20Sopenharmony_ci		    TP_printk("[%s] SDE(%u) sn %llu",
4858c2ecf20Sopenharmony_ci			      __get_str(dev),
4868c2ecf20Sopenharmony_ci			      __entry->idx,
4878c2ecf20Sopenharmony_ci			      __entry->sn
4888c2ecf20Sopenharmony_ci			      )
4898c2ecf20Sopenharmony_ci);
4908c2ecf20Sopenharmony_ci
4918c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_sn, hfi1_sdma_out_sn,
4928c2ecf20Sopenharmony_ci	     TP_PROTO(
4938c2ecf20Sopenharmony_ci	     struct sdma_engine *sde,
4948c2ecf20Sopenharmony_ci	     u64 sn
4958c2ecf20Sopenharmony_ci	     ),
4968c2ecf20Sopenharmony_ci	     TP_ARGS(sde, sn)
4978c2ecf20Sopenharmony_ci);
4988c2ecf20Sopenharmony_ci
4998c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_sdma_sn, hfi1_sdma_in_sn,
5008c2ecf20Sopenharmony_ci	     TP_PROTO(struct sdma_engine *sde, u64 sn),
5018c2ecf20Sopenharmony_ci	     TP_ARGS(sde, sn)
5028c2ecf20Sopenharmony_ci);
5038c2ecf20Sopenharmony_ci
5048c2ecf20Sopenharmony_ci#define USDMA_HDR_FORMAT \
5058c2ecf20Sopenharmony_ci	"[%s:%u:%u:%u] PBC=(0x%x 0x%x) LRH=(0x%x 0x%x) BTH=(0x%x 0x%x 0x%x) KDETH=(0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x) TIDVal=0x%x"
5068c2ecf20Sopenharmony_ci
5078c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_header,
5088c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 req,
5098c2ecf20Sopenharmony_ci		     struct hfi1_pkt_header *hdr, u32 tidval),
5108c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, req, hdr, tidval),
5118c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
5128c2ecf20Sopenharmony_ci		    DD_DEV_ENTRY(dd)
5138c2ecf20Sopenharmony_ci		    __field(u16, ctxt)
5148c2ecf20Sopenharmony_ci		    __field(u8, subctxt)
5158c2ecf20Sopenharmony_ci		    __field(u16, req)
5168c2ecf20Sopenharmony_ci		    __field(u32, pbc0)
5178c2ecf20Sopenharmony_ci		    __field(u32, pbc1)
5188c2ecf20Sopenharmony_ci		    __field(u32, lrh0)
5198c2ecf20Sopenharmony_ci		    __field(u32, lrh1)
5208c2ecf20Sopenharmony_ci		    __field(u32, bth0)
5218c2ecf20Sopenharmony_ci		    __field(u32, bth1)
5228c2ecf20Sopenharmony_ci		    __field(u32, bth2)
5238c2ecf20Sopenharmony_ci		    __field(u32, kdeth0)
5248c2ecf20Sopenharmony_ci		    __field(u32, kdeth1)
5258c2ecf20Sopenharmony_ci		    __field(u32, kdeth2)
5268c2ecf20Sopenharmony_ci		    __field(u32, kdeth3)
5278c2ecf20Sopenharmony_ci		    __field(u32, kdeth4)
5288c2ecf20Sopenharmony_ci		    __field(u32, kdeth5)
5298c2ecf20Sopenharmony_ci		    __field(u32, kdeth6)
5308c2ecf20Sopenharmony_ci		    __field(u32, kdeth7)
5318c2ecf20Sopenharmony_ci		    __field(u32, kdeth8)
5328c2ecf20Sopenharmony_ci		    __field(u32, tidval)
5338c2ecf20Sopenharmony_ci		    ),
5348c2ecf20Sopenharmony_ci		    TP_fast_assign(
5358c2ecf20Sopenharmony_ci		    __le32 *pbc = (__le32 *)hdr->pbc;
5368c2ecf20Sopenharmony_ci		    __be32 *lrh = (__be32 *)hdr->lrh;
5378c2ecf20Sopenharmony_ci		    __be32 *bth = (__be32 *)hdr->bth;
5388c2ecf20Sopenharmony_ci		    __le32 *kdeth = (__le32 *)&hdr->kdeth;
5398c2ecf20Sopenharmony_ci
5408c2ecf20Sopenharmony_ci		    DD_DEV_ASSIGN(dd);
5418c2ecf20Sopenharmony_ci		    __entry->ctxt = ctxt;
5428c2ecf20Sopenharmony_ci		    __entry->subctxt = subctxt;
5438c2ecf20Sopenharmony_ci		    __entry->req = req;
5448c2ecf20Sopenharmony_ci		    __entry->pbc0 = le32_to_cpu(pbc[0]);
5458c2ecf20Sopenharmony_ci		    __entry->pbc1 = le32_to_cpu(pbc[1]);
5468c2ecf20Sopenharmony_ci		    __entry->lrh0 = be32_to_cpu(lrh[0]);
5478c2ecf20Sopenharmony_ci		    __entry->lrh1 = be32_to_cpu(lrh[1]);
5488c2ecf20Sopenharmony_ci		    __entry->bth0 = be32_to_cpu(bth[0]);
5498c2ecf20Sopenharmony_ci		    __entry->bth1 = be32_to_cpu(bth[1]);
5508c2ecf20Sopenharmony_ci		    __entry->bth2 = be32_to_cpu(bth[2]);
5518c2ecf20Sopenharmony_ci		    __entry->kdeth0 = le32_to_cpu(kdeth[0]);
5528c2ecf20Sopenharmony_ci		    __entry->kdeth1 = le32_to_cpu(kdeth[1]);
5538c2ecf20Sopenharmony_ci		    __entry->kdeth2 = le32_to_cpu(kdeth[2]);
5548c2ecf20Sopenharmony_ci		    __entry->kdeth3 = le32_to_cpu(kdeth[3]);
5558c2ecf20Sopenharmony_ci		    __entry->kdeth4 = le32_to_cpu(kdeth[4]);
5568c2ecf20Sopenharmony_ci		    __entry->kdeth5 = le32_to_cpu(kdeth[5]);
5578c2ecf20Sopenharmony_ci		    __entry->kdeth6 = le32_to_cpu(kdeth[6]);
5588c2ecf20Sopenharmony_ci		    __entry->kdeth7 = le32_to_cpu(kdeth[7]);
5598c2ecf20Sopenharmony_ci		    __entry->kdeth8 = le32_to_cpu(kdeth[8]);
5608c2ecf20Sopenharmony_ci		    __entry->tidval = tidval;
5618c2ecf20Sopenharmony_ci	    ),
5628c2ecf20Sopenharmony_ci	    TP_printk(USDMA_HDR_FORMAT,
5638c2ecf20Sopenharmony_ci		      __get_str(dev),
5648c2ecf20Sopenharmony_ci		      __entry->ctxt,
5658c2ecf20Sopenharmony_ci		      __entry->subctxt,
5668c2ecf20Sopenharmony_ci		      __entry->req,
5678c2ecf20Sopenharmony_ci		      __entry->pbc1,
5688c2ecf20Sopenharmony_ci		      __entry->pbc0,
5698c2ecf20Sopenharmony_ci		      __entry->lrh0,
5708c2ecf20Sopenharmony_ci		      __entry->lrh1,
5718c2ecf20Sopenharmony_ci		      __entry->bth0,
5728c2ecf20Sopenharmony_ci		      __entry->bth1,
5738c2ecf20Sopenharmony_ci		      __entry->bth2,
5748c2ecf20Sopenharmony_ci		      __entry->kdeth0,
5758c2ecf20Sopenharmony_ci		      __entry->kdeth1,
5768c2ecf20Sopenharmony_ci		      __entry->kdeth2,
5778c2ecf20Sopenharmony_ci		      __entry->kdeth3,
5788c2ecf20Sopenharmony_ci		      __entry->kdeth4,
5798c2ecf20Sopenharmony_ci		      __entry->kdeth5,
5808c2ecf20Sopenharmony_ci		      __entry->kdeth6,
5818c2ecf20Sopenharmony_ci		      __entry->kdeth7,
5828c2ecf20Sopenharmony_ci		      __entry->kdeth8,
5838c2ecf20Sopenharmony_ci		      __entry->tidval
5848c2ecf20Sopenharmony_ci	    )
5858c2ecf20Sopenharmony_ci);
5868c2ecf20Sopenharmony_ci
5878c2ecf20Sopenharmony_ci#define SDMA_UREQ_FMT \
5888c2ecf20Sopenharmony_ci	"[%s:%u:%u] ver/op=0x%x, iovcnt=%u, npkts=%u, frag=%u, idx=%u"
5898c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_reqinfo,
5908c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 *i),
5918c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, i),
5928c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
5938c2ecf20Sopenharmony_ci		    DD_DEV_ENTRY(dd)
5948c2ecf20Sopenharmony_ci		    __field(u16, ctxt)
5958c2ecf20Sopenharmony_ci		    __field(u8, subctxt)
5968c2ecf20Sopenharmony_ci		    __field(u8, ver_opcode)
5978c2ecf20Sopenharmony_ci		    __field(u8, iovcnt)
5988c2ecf20Sopenharmony_ci		    __field(u16, npkts)
5998c2ecf20Sopenharmony_ci		    __field(u16, fragsize)
6008c2ecf20Sopenharmony_ci		    __field(u16, comp_idx)
6018c2ecf20Sopenharmony_ci	    ),
6028c2ecf20Sopenharmony_ci	    TP_fast_assign(
6038c2ecf20Sopenharmony_ci		    DD_DEV_ASSIGN(dd);
6048c2ecf20Sopenharmony_ci		    __entry->ctxt = ctxt;
6058c2ecf20Sopenharmony_ci		    __entry->subctxt = subctxt;
6068c2ecf20Sopenharmony_ci		    __entry->ver_opcode = i[0] & 0xff;
6078c2ecf20Sopenharmony_ci		    __entry->iovcnt = (i[0] >> 8) & 0xff;
6088c2ecf20Sopenharmony_ci		    __entry->npkts = i[1];
6098c2ecf20Sopenharmony_ci		    __entry->fragsize = i[2];
6108c2ecf20Sopenharmony_ci		    __entry->comp_idx = i[3];
6118c2ecf20Sopenharmony_ci	    ),
6128c2ecf20Sopenharmony_ci	    TP_printk(SDMA_UREQ_FMT,
6138c2ecf20Sopenharmony_ci		      __get_str(dev),
6148c2ecf20Sopenharmony_ci		      __entry->ctxt,
6158c2ecf20Sopenharmony_ci		      __entry->subctxt,
6168c2ecf20Sopenharmony_ci		      __entry->ver_opcode,
6178c2ecf20Sopenharmony_ci		      __entry->iovcnt,
6188c2ecf20Sopenharmony_ci		      __entry->npkts,
6198c2ecf20Sopenharmony_ci		      __entry->fragsize,
6208c2ecf20Sopenharmony_ci		      __entry->comp_idx
6218c2ecf20Sopenharmony_ci		      )
6228c2ecf20Sopenharmony_ci);
6238c2ecf20Sopenharmony_ci
6248c2ecf20Sopenharmony_ci#define usdma_complete_name(st) { st, #st }
6258c2ecf20Sopenharmony_ci#define show_usdma_complete_state(st)			\
6268c2ecf20Sopenharmony_ci	__print_symbolic(st,				\
6278c2ecf20Sopenharmony_ci			usdma_complete_name(FREE),	\
6288c2ecf20Sopenharmony_ci			usdma_complete_name(QUEUED),	\
6298c2ecf20Sopenharmony_ci			usdma_complete_name(COMPLETE), \
6308c2ecf20Sopenharmony_ci			usdma_complete_name(ERROR))
6318c2ecf20Sopenharmony_ci
6328c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_completion,
6338c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 idx,
6348c2ecf20Sopenharmony_ci		     u8 state, int code),
6358c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, idx, state, code),
6368c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
6378c2ecf20Sopenharmony_ci	    DD_DEV_ENTRY(dd)
6388c2ecf20Sopenharmony_ci	    __field(u16, ctxt)
6398c2ecf20Sopenharmony_ci	    __field(u8, subctxt)
6408c2ecf20Sopenharmony_ci	    __field(u16, idx)
6418c2ecf20Sopenharmony_ci	    __field(u8, state)
6428c2ecf20Sopenharmony_ci	    __field(int, code)
6438c2ecf20Sopenharmony_ci	    ),
6448c2ecf20Sopenharmony_ci	    TP_fast_assign(
6458c2ecf20Sopenharmony_ci	    DD_DEV_ASSIGN(dd);
6468c2ecf20Sopenharmony_ci	    __entry->ctxt = ctxt;
6478c2ecf20Sopenharmony_ci	    __entry->subctxt = subctxt;
6488c2ecf20Sopenharmony_ci	    __entry->idx = idx;
6498c2ecf20Sopenharmony_ci	    __entry->state = state;
6508c2ecf20Sopenharmony_ci	    __entry->code = code;
6518c2ecf20Sopenharmony_ci	    ),
6528c2ecf20Sopenharmony_ci	    TP_printk("[%s:%u:%u:%u] SDMA completion state %s (%d)",
6538c2ecf20Sopenharmony_ci		      __get_str(dev), __entry->ctxt, __entry->subctxt,
6548c2ecf20Sopenharmony_ci		      __entry->idx, show_usdma_complete_state(__entry->state),
6558c2ecf20Sopenharmony_ci		      __entry->code)
6568c2ecf20Sopenharmony_ci);
6578c2ecf20Sopenharmony_ci
6588c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_usdma_defer,
6598c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_user_sdma_pkt_q *pq,
6608c2ecf20Sopenharmony_ci		     struct sdma_engine *sde,
6618c2ecf20Sopenharmony_ci		     struct iowait *wait),
6628c2ecf20Sopenharmony_ci	    TP_ARGS(pq, sde, wait),
6638c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd)
6648c2ecf20Sopenharmony_ci			     __field(struct hfi1_user_sdma_pkt_q *, pq)
6658c2ecf20Sopenharmony_ci			     __field(struct sdma_engine *, sde)
6668c2ecf20Sopenharmony_ci			     __field(struct iowait *, wait)
6678c2ecf20Sopenharmony_ci			     __field(int, engine)
6688c2ecf20Sopenharmony_ci			     __field(int, empty)
6698c2ecf20Sopenharmony_ci			     ),
6708c2ecf20Sopenharmony_ci	     TP_fast_assign(DD_DEV_ASSIGN(pq->dd);
6718c2ecf20Sopenharmony_ci			    __entry->pq = pq;
6728c2ecf20Sopenharmony_ci			    __entry->sde = sde;
6738c2ecf20Sopenharmony_ci			    __entry->wait = wait;
6748c2ecf20Sopenharmony_ci			    __entry->engine = sde->this_idx;
6758c2ecf20Sopenharmony_ci			    __entry->empty = list_empty(&__entry->wait->list);
6768c2ecf20Sopenharmony_ci			    ),
6778c2ecf20Sopenharmony_ci	     TP_printk("[%s] pq %llx sde %llx wait %llx engine %d empty %d",
6788c2ecf20Sopenharmony_ci		       __get_str(dev),
6798c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->pq,
6808c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->sde,
6818c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->wait,
6828c2ecf20Sopenharmony_ci		       __entry->engine,
6838c2ecf20Sopenharmony_ci		       __entry->empty
6848c2ecf20Sopenharmony_ci		)
6858c2ecf20Sopenharmony_ci);
6868c2ecf20Sopenharmony_ci
6878c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_usdma_activate,
6888c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_user_sdma_pkt_q *pq,
6898c2ecf20Sopenharmony_ci		     struct iowait *wait,
6908c2ecf20Sopenharmony_ci		     int reason),
6918c2ecf20Sopenharmony_ci	    TP_ARGS(pq, wait, reason),
6928c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd)
6938c2ecf20Sopenharmony_ci			     __field(struct hfi1_user_sdma_pkt_q *, pq)
6948c2ecf20Sopenharmony_ci			     __field(struct iowait *, wait)
6958c2ecf20Sopenharmony_ci			     __field(int, reason)
6968c2ecf20Sopenharmony_ci			     ),
6978c2ecf20Sopenharmony_ci	     TP_fast_assign(DD_DEV_ASSIGN(pq->dd);
6988c2ecf20Sopenharmony_ci			    __entry->pq = pq;
6998c2ecf20Sopenharmony_ci			    __entry->wait = wait;
7008c2ecf20Sopenharmony_ci			    __entry->reason = reason;
7018c2ecf20Sopenharmony_ci			    ),
7028c2ecf20Sopenharmony_ci	     TP_printk("[%s] pq %llx wait %llx reason %d",
7038c2ecf20Sopenharmony_ci		       __get_str(dev),
7048c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->pq,
7058c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->wait,
7068c2ecf20Sopenharmony_ci		       __entry->reason
7078c2ecf20Sopenharmony_ci		)
7088c2ecf20Sopenharmony_ci);
7098c2ecf20Sopenharmony_ci
7108c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_usdma_we,
7118c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_user_sdma_pkt_q *pq,
7128c2ecf20Sopenharmony_ci		     int we_ret),
7138c2ecf20Sopenharmony_ci	    TP_ARGS(pq, we_ret),
7148c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(pq->dd)
7158c2ecf20Sopenharmony_ci			     __field(struct hfi1_user_sdma_pkt_q *, pq)
7168c2ecf20Sopenharmony_ci			     __field(int, state)
7178c2ecf20Sopenharmony_ci			     __field(int, we_ret)
7188c2ecf20Sopenharmony_ci			     ),
7198c2ecf20Sopenharmony_ci	     TP_fast_assign(DD_DEV_ASSIGN(pq->dd);
7208c2ecf20Sopenharmony_ci			    __entry->pq = pq;
7218c2ecf20Sopenharmony_ci			    __entry->state = pq->state;
7228c2ecf20Sopenharmony_ci			    __entry->we_ret = we_ret;
7238c2ecf20Sopenharmony_ci			    ),
7248c2ecf20Sopenharmony_ci	     TP_printk("[%s] pq %llx state %d we_ret %d",
7258c2ecf20Sopenharmony_ci		       __get_str(dev),
7268c2ecf20Sopenharmony_ci		       (unsigned long long)__entry->pq,
7278c2ecf20Sopenharmony_ci		       __entry->state,
7288c2ecf20Sopenharmony_ci		       __entry->we_ret
7298c2ecf20Sopenharmony_ci		)
7308c2ecf20Sopenharmony_ci);
7318c2ecf20Sopenharmony_ci
7328c2ecf20Sopenharmony_ciconst char *print_u32_array(struct trace_seq *, u32 *, int);
7338c2ecf20Sopenharmony_ci#define __print_u32_hex(arr, len) print_u32_array(p, arr, len)
7348c2ecf20Sopenharmony_ci
7358c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_user_header_ahg,
7368c2ecf20Sopenharmony_ci	    TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 req,
7378c2ecf20Sopenharmony_ci		     u8 sde, u8 ahgidx, u32 *ahg, int len, u32 tidval),
7388c2ecf20Sopenharmony_ci	    TP_ARGS(dd, ctxt, subctxt, req, sde, ahgidx, ahg, len, tidval),
7398c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
7408c2ecf20Sopenharmony_ci	    DD_DEV_ENTRY(dd)
7418c2ecf20Sopenharmony_ci	    __field(u16, ctxt)
7428c2ecf20Sopenharmony_ci	    __field(u8, subctxt)
7438c2ecf20Sopenharmony_ci	    __field(u16, req)
7448c2ecf20Sopenharmony_ci	    __field(u8, sde)
7458c2ecf20Sopenharmony_ci	    __field(u8, idx)
7468c2ecf20Sopenharmony_ci	    __field(int, len)
7478c2ecf20Sopenharmony_ci	    __field(u32, tidval)
7488c2ecf20Sopenharmony_ci	    __array(u32, ahg, 10)
7498c2ecf20Sopenharmony_ci	    ),
7508c2ecf20Sopenharmony_ci	    TP_fast_assign(
7518c2ecf20Sopenharmony_ci	    DD_DEV_ASSIGN(dd);
7528c2ecf20Sopenharmony_ci	    __entry->ctxt = ctxt;
7538c2ecf20Sopenharmony_ci	    __entry->subctxt = subctxt;
7548c2ecf20Sopenharmony_ci	    __entry->req = req;
7558c2ecf20Sopenharmony_ci	    __entry->sde = sde;
7568c2ecf20Sopenharmony_ci	    __entry->idx = ahgidx;
7578c2ecf20Sopenharmony_ci	    __entry->len = len;
7588c2ecf20Sopenharmony_ci	    __entry->tidval = tidval;
7598c2ecf20Sopenharmony_ci	    memcpy(__entry->ahg, ahg, len * sizeof(u32));
7608c2ecf20Sopenharmony_ci	    ),
7618c2ecf20Sopenharmony_ci	    TP_printk("[%s:%u:%u:%u] (SDE%u/AHG%u) ahg[0-%d]=(%s) TIDVal=0x%x",
7628c2ecf20Sopenharmony_ci		      __get_str(dev),
7638c2ecf20Sopenharmony_ci		      __entry->ctxt,
7648c2ecf20Sopenharmony_ci		      __entry->subctxt,
7658c2ecf20Sopenharmony_ci		      __entry->req,
7668c2ecf20Sopenharmony_ci		      __entry->sde,
7678c2ecf20Sopenharmony_ci		      __entry->idx,
7688c2ecf20Sopenharmony_ci		      __entry->len - 1,
7698c2ecf20Sopenharmony_ci		      __print_u32_hex(__entry->ahg, __entry->len),
7708c2ecf20Sopenharmony_ci		      __entry->tidval
7718c2ecf20Sopenharmony_ci		      )
7728c2ecf20Sopenharmony_ci);
7738c2ecf20Sopenharmony_ci
7748c2ecf20Sopenharmony_ciTRACE_EVENT(hfi1_sdma_state,
7758c2ecf20Sopenharmony_ci	    TP_PROTO(struct sdma_engine *sde,
7768c2ecf20Sopenharmony_ci		     const char *cstate,
7778c2ecf20Sopenharmony_ci		     const char *nstate
7788c2ecf20Sopenharmony_ci		     ),
7798c2ecf20Sopenharmony_ci	    TP_ARGS(sde, cstate, nstate),
7808c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd)
7818c2ecf20Sopenharmony_ci		__string(curstate, cstate)
7828c2ecf20Sopenharmony_ci		__string(newstate, nstate)
7838c2ecf20Sopenharmony_ci	    ),
7848c2ecf20Sopenharmony_ci	    TP_fast_assign(DD_DEV_ASSIGN(sde->dd);
7858c2ecf20Sopenharmony_ci		__assign_str(curstate, cstate);
7868c2ecf20Sopenharmony_ci		__assign_str(newstate, nstate);
7878c2ecf20Sopenharmony_ci	    ),
7888c2ecf20Sopenharmony_ci	    TP_printk("[%s] current state %s new state %s",
7898c2ecf20Sopenharmony_ci		      __get_str(dev),
7908c2ecf20Sopenharmony_ci		      __get_str(curstate),
7918c2ecf20Sopenharmony_ci		      __get_str(newstate)
7928c2ecf20Sopenharmony_ci	    )
7938c2ecf20Sopenharmony_ci);
7948c2ecf20Sopenharmony_ci
7958c2ecf20Sopenharmony_ci#define BCT_FORMAT \
7968c2ecf20Sopenharmony_ci	"shared_limit %x vls 0-7 [%x,%x][%x,%x][%x,%x][%x,%x][%x,%x][%x,%x][%x,%x][%x,%x] 15 [%x,%x]"
7978c2ecf20Sopenharmony_ci
7988c2ecf20Sopenharmony_ci#define BCT(field) \
7998c2ecf20Sopenharmony_ci	be16_to_cpu( \
8008c2ecf20Sopenharmony_ci	((struct buffer_control *)__get_dynamic_array(bct))->field \
8018c2ecf20Sopenharmony_ci	)
8028c2ecf20Sopenharmony_ci
8038c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_bct_template,
8048c2ecf20Sopenharmony_ci		    TP_PROTO(struct hfi1_devdata *dd,
8058c2ecf20Sopenharmony_ci			     struct buffer_control *bc),
8068c2ecf20Sopenharmony_ci		    TP_ARGS(dd, bc),
8078c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(DD_DEV_ENTRY(dd)
8088c2ecf20Sopenharmony_ci		    __dynamic_array(u8, bct, sizeof(*bc))
8098c2ecf20Sopenharmony_ci		    ),
8108c2ecf20Sopenharmony_ci		    TP_fast_assign(DD_DEV_ASSIGN(dd);
8118c2ecf20Sopenharmony_ci				   memcpy(__get_dynamic_array(bct), bc,
8128c2ecf20Sopenharmony_ci					  sizeof(*bc));
8138c2ecf20Sopenharmony_ci		    ),
8148c2ecf20Sopenharmony_ci		    TP_printk(BCT_FORMAT,
8158c2ecf20Sopenharmony_ci			      BCT(overall_shared_limit),
8168c2ecf20Sopenharmony_ci
8178c2ecf20Sopenharmony_ci			      BCT(vl[0].dedicated),
8188c2ecf20Sopenharmony_ci			      BCT(vl[0].shared),
8198c2ecf20Sopenharmony_ci
8208c2ecf20Sopenharmony_ci			      BCT(vl[1].dedicated),
8218c2ecf20Sopenharmony_ci			      BCT(vl[1].shared),
8228c2ecf20Sopenharmony_ci
8238c2ecf20Sopenharmony_ci			      BCT(vl[2].dedicated),
8248c2ecf20Sopenharmony_ci			      BCT(vl[2].shared),
8258c2ecf20Sopenharmony_ci
8268c2ecf20Sopenharmony_ci			      BCT(vl[3].dedicated),
8278c2ecf20Sopenharmony_ci			      BCT(vl[3].shared),
8288c2ecf20Sopenharmony_ci
8298c2ecf20Sopenharmony_ci			      BCT(vl[4].dedicated),
8308c2ecf20Sopenharmony_ci			      BCT(vl[4].shared),
8318c2ecf20Sopenharmony_ci
8328c2ecf20Sopenharmony_ci			      BCT(vl[5].dedicated),
8338c2ecf20Sopenharmony_ci			      BCT(vl[5].shared),
8348c2ecf20Sopenharmony_ci
8358c2ecf20Sopenharmony_ci			      BCT(vl[6].dedicated),
8368c2ecf20Sopenharmony_ci			      BCT(vl[6].shared),
8378c2ecf20Sopenharmony_ci
8388c2ecf20Sopenharmony_ci			      BCT(vl[7].dedicated),
8398c2ecf20Sopenharmony_ci			      BCT(vl[7].shared),
8408c2ecf20Sopenharmony_ci
8418c2ecf20Sopenharmony_ci			      BCT(vl[15].dedicated),
8428c2ecf20Sopenharmony_ci			      BCT(vl[15].shared)
8438c2ecf20Sopenharmony_ci		    )
8448c2ecf20Sopenharmony_ci);
8458c2ecf20Sopenharmony_ci
8468c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_bct_template, bct_set,
8478c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd, struct buffer_control *bc),
8488c2ecf20Sopenharmony_ci	     TP_ARGS(dd, bc));
8498c2ecf20Sopenharmony_ci
8508c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_bct_template, bct_get,
8518c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd, struct buffer_control *bc),
8528c2ecf20Sopenharmony_ci	     TP_ARGS(dd, bc));
8538c2ecf20Sopenharmony_ci
8548c2ecf20Sopenharmony_ciTRACE_EVENT(
8558c2ecf20Sopenharmony_ci	hfi1_qp_send_completion,
8568c2ecf20Sopenharmony_ci	TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
8578c2ecf20Sopenharmony_ci	TP_ARGS(qp, wqe, idx),
8588c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
8598c2ecf20Sopenharmony_ci		DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
8608c2ecf20Sopenharmony_ci		__field(struct rvt_swqe *, wqe)
8618c2ecf20Sopenharmony_ci		__field(u64, wr_id)
8628c2ecf20Sopenharmony_ci		__field(u32, qpn)
8638c2ecf20Sopenharmony_ci		__field(u32, qpt)
8648c2ecf20Sopenharmony_ci		__field(u32, length)
8658c2ecf20Sopenharmony_ci		__field(u32, idx)
8668c2ecf20Sopenharmony_ci		__field(u32, ssn)
8678c2ecf20Sopenharmony_ci		__field(enum ib_wr_opcode, opcode)
8688c2ecf20Sopenharmony_ci		__field(int, send_flags)
8698c2ecf20Sopenharmony_ci	),
8708c2ecf20Sopenharmony_ci	TP_fast_assign(
8718c2ecf20Sopenharmony_ci		DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device))
8728c2ecf20Sopenharmony_ci		__entry->wqe = wqe;
8738c2ecf20Sopenharmony_ci		__entry->wr_id = wqe->wr.wr_id;
8748c2ecf20Sopenharmony_ci		__entry->qpn = qp->ibqp.qp_num;
8758c2ecf20Sopenharmony_ci		__entry->qpt = qp->ibqp.qp_type;
8768c2ecf20Sopenharmony_ci		__entry->length = wqe->length;
8778c2ecf20Sopenharmony_ci		__entry->idx = idx;
8788c2ecf20Sopenharmony_ci		__entry->ssn = wqe->ssn;
8798c2ecf20Sopenharmony_ci		__entry->opcode = wqe->wr.opcode;
8808c2ecf20Sopenharmony_ci		__entry->send_flags = wqe->wr.send_flags;
8818c2ecf20Sopenharmony_ci	),
8828c2ecf20Sopenharmony_ci	TP_printk(
8838c2ecf20Sopenharmony_ci		"[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
8848c2ecf20Sopenharmony_ci		__get_str(dev),
8858c2ecf20Sopenharmony_ci		__entry->qpn,
8868c2ecf20Sopenharmony_ci		__entry->qpt,
8878c2ecf20Sopenharmony_ci		__entry->wqe,
8888c2ecf20Sopenharmony_ci		__entry->idx,
8898c2ecf20Sopenharmony_ci		__entry->wr_id,
8908c2ecf20Sopenharmony_ci		__entry->length,
8918c2ecf20Sopenharmony_ci		__entry->ssn,
8928c2ecf20Sopenharmony_ci		__entry->opcode,
8938c2ecf20Sopenharmony_ci		__entry->send_flags
8948c2ecf20Sopenharmony_ci	)
8958c2ecf20Sopenharmony_ci);
8968c2ecf20Sopenharmony_ci
8978c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(
8988c2ecf20Sopenharmony_ci	hfi1_do_send_template,
8998c2ecf20Sopenharmony_ci	TP_PROTO(struct rvt_qp *qp, bool flag),
9008c2ecf20Sopenharmony_ci	TP_ARGS(qp, flag),
9018c2ecf20Sopenharmony_ci	TP_STRUCT__entry(
9028c2ecf20Sopenharmony_ci		DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
9038c2ecf20Sopenharmony_ci		__field(u32, qpn)
9048c2ecf20Sopenharmony_ci		__field(bool, flag)
9058c2ecf20Sopenharmony_ci	),
9068c2ecf20Sopenharmony_ci	TP_fast_assign(
9078c2ecf20Sopenharmony_ci		DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device))
9088c2ecf20Sopenharmony_ci		__entry->qpn = qp->ibqp.qp_num;
9098c2ecf20Sopenharmony_ci		__entry->flag = flag;
9108c2ecf20Sopenharmony_ci	),
9118c2ecf20Sopenharmony_ci	TP_printk(
9128c2ecf20Sopenharmony_ci		"[%s] qpn %x flag %d",
9138c2ecf20Sopenharmony_ci		__get_str(dev),
9148c2ecf20Sopenharmony_ci		__entry->qpn,
9158c2ecf20Sopenharmony_ci		__entry->flag
9168c2ecf20Sopenharmony_ci	)
9178c2ecf20Sopenharmony_ci);
9188c2ecf20Sopenharmony_ci
9198c2ecf20Sopenharmony_ciDEFINE_EVENT(
9208c2ecf20Sopenharmony_ci	hfi1_do_send_template, hfi1_rc_do_send,
9218c2ecf20Sopenharmony_ci	TP_PROTO(struct rvt_qp *qp, bool flag),
9228c2ecf20Sopenharmony_ci	TP_ARGS(qp, flag)
9238c2ecf20Sopenharmony_ci);
9248c2ecf20Sopenharmony_ci
9258c2ecf20Sopenharmony_ciDEFINE_EVENT(/* event */
9268c2ecf20Sopenharmony_ci	hfi1_do_send_template, hfi1_rc_do_tid_send,
9278c2ecf20Sopenharmony_ci	TP_PROTO(struct rvt_qp *qp, bool flag),
9288c2ecf20Sopenharmony_ci	TP_ARGS(qp, flag)
9298c2ecf20Sopenharmony_ci);
9308c2ecf20Sopenharmony_ci
9318c2ecf20Sopenharmony_ciDEFINE_EVENT(
9328c2ecf20Sopenharmony_ci	hfi1_do_send_template, hfi1_rc_expired_time_slice,
9338c2ecf20Sopenharmony_ci	TP_PROTO(struct rvt_qp *qp, bool flag),
9348c2ecf20Sopenharmony_ci	TP_ARGS(qp, flag)
9358c2ecf20Sopenharmony_ci);
9368c2ecf20Sopenharmony_ci
9378c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(/* AIP  */
9388c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template,
9398c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
9408c2ecf20Sopenharmony_ci	TP_ARGS(txq),
9418c2ecf20Sopenharmony_ci	TP_STRUCT__entry(/* entry */
9428c2ecf20Sopenharmony_ci		DD_DEV_ENTRY(txq->priv->dd)
9438c2ecf20Sopenharmony_ci		__field(struct hfi1_ipoib_txq *, txq)
9448c2ecf20Sopenharmony_ci		__field(struct sdma_engine *, sde)
9458c2ecf20Sopenharmony_ci		__field(ulong, head)
9468c2ecf20Sopenharmony_ci		__field(ulong, tail)
9478c2ecf20Sopenharmony_ci		__field(uint, used)
9488c2ecf20Sopenharmony_ci		__field(uint, flow)
9498c2ecf20Sopenharmony_ci		__field(int, stops)
9508c2ecf20Sopenharmony_ci		__field(int, no_desc)
9518c2ecf20Sopenharmony_ci		__field(u8, idx)
9528c2ecf20Sopenharmony_ci		__field(u8, stopped)
9538c2ecf20Sopenharmony_ci	),
9548c2ecf20Sopenharmony_ci	TP_fast_assign(/* assign */
9558c2ecf20Sopenharmony_ci		DD_DEV_ASSIGN(txq->priv->dd)
9568c2ecf20Sopenharmony_ci		__entry->txq = txq;
9578c2ecf20Sopenharmony_ci		__entry->sde = txq->sde;
9588c2ecf20Sopenharmony_ci		__entry->head = txq->tx_ring.head;
9598c2ecf20Sopenharmony_ci		__entry->tail = txq->tx_ring.tail;
9608c2ecf20Sopenharmony_ci		__entry->idx = txq->q_idx;
9618c2ecf20Sopenharmony_ci		__entry->used =
9628c2ecf20Sopenharmony_ci			txq->sent_txreqs -
9638c2ecf20Sopenharmony_ci			atomic64_read(&txq->complete_txreqs);
9648c2ecf20Sopenharmony_ci		__entry->flow = txq->flow.as_int;
9658c2ecf20Sopenharmony_ci		__entry->stops = atomic_read(&txq->stops);
9668c2ecf20Sopenharmony_ci		__entry->no_desc = atomic_read(&txq->no_desc);
9678c2ecf20Sopenharmony_ci		__entry->stopped =
9688c2ecf20Sopenharmony_ci		 __netif_subqueue_stopped(txq->priv->netdev, txq->q_idx);
9698c2ecf20Sopenharmony_ci	),
9708c2ecf20Sopenharmony_ci	TP_printk(/* print  */
9718c2ecf20Sopenharmony_ci		"[%s] txq %llx idx %u sde %llx head %lx tail %lx flow %x used %u stops %d no_desc %d stopped %u",
9728c2ecf20Sopenharmony_ci		__get_str(dev),
9738c2ecf20Sopenharmony_ci		(unsigned long long)__entry->txq,
9748c2ecf20Sopenharmony_ci		__entry->idx,
9758c2ecf20Sopenharmony_ci		(unsigned long long)__entry->sde,
9768c2ecf20Sopenharmony_ci		__entry->head,
9778c2ecf20Sopenharmony_ci		__entry->tail,
9788c2ecf20Sopenharmony_ci		__entry->flow,
9798c2ecf20Sopenharmony_ci		__entry->used,
9808c2ecf20Sopenharmony_ci		__entry->stops,
9818c2ecf20Sopenharmony_ci		__entry->no_desc,
9828c2ecf20Sopenharmony_ci		__entry->stopped
9838c2ecf20Sopenharmony_ci	)
9848c2ecf20Sopenharmony_ci);
9858c2ecf20Sopenharmony_ci
9868c2ecf20Sopenharmony_ciDEFINE_EVENT(/* queue stop */
9878c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_stop,
9888c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
9898c2ecf20Sopenharmony_ci	TP_ARGS(txq)
9908c2ecf20Sopenharmony_ci);
9918c2ecf20Sopenharmony_ci
9928c2ecf20Sopenharmony_ciDEFINE_EVENT(/* queue wake */
9938c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_wake,
9948c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
9958c2ecf20Sopenharmony_ci	TP_ARGS(txq)
9968c2ecf20Sopenharmony_ci);
9978c2ecf20Sopenharmony_ci
9988c2ecf20Sopenharmony_ciDEFINE_EVENT(/* flow flush */
9998c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_flow_flush,
10008c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10018c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10028c2ecf20Sopenharmony_ci);
10038c2ecf20Sopenharmony_ci
10048c2ecf20Sopenharmony_ciDEFINE_EVENT(/* flow switch */
10058c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_flow_switch,
10068c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10078c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10088c2ecf20Sopenharmony_ci);
10098c2ecf20Sopenharmony_ci
10108c2ecf20Sopenharmony_ciDEFINE_EVENT(/* wakeup */
10118c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_wakeup,
10128c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10138c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10148c2ecf20Sopenharmony_ci);
10158c2ecf20Sopenharmony_ci
10168c2ecf20Sopenharmony_ciDEFINE_EVENT(/* full */
10178c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_full,
10188c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10198c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10208c2ecf20Sopenharmony_ci);
10218c2ecf20Sopenharmony_ci
10228c2ecf20Sopenharmony_ciDEFINE_EVENT(/* queued */
10238c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_queued,
10248c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10258c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10268c2ecf20Sopenharmony_ci);
10278c2ecf20Sopenharmony_ci
10288c2ecf20Sopenharmony_ciDEFINE_EVENT(/* xmit_stopped */
10298c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_xmit_stopped,
10308c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10318c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10328c2ecf20Sopenharmony_ci);
10338c2ecf20Sopenharmony_ci
10348c2ecf20Sopenharmony_ciDEFINE_EVENT(/* xmit_unstopped */
10358c2ecf20Sopenharmony_ci	hfi1_ipoib_txq_template, hfi1_txq_xmit_unstopped,
10368c2ecf20Sopenharmony_ci	TP_PROTO(struct hfi1_ipoib_txq *txq),
10378c2ecf20Sopenharmony_ci	TP_ARGS(txq)
10388c2ecf20Sopenharmony_ci);
10398c2ecf20Sopenharmony_ci
10408c2ecf20Sopenharmony_ci#endif /* __HFI1_TRACE_TX_H */
10418c2ecf20Sopenharmony_ci
10428c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH
10438c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
10448c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
10458c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_tx
10468c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
1047