1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright(c) 2015 - 2017 Intel Corporation. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This file is provided under a dual BSD/GPLv2 license. When using or 5*4882a593Smuzhiyun * redistributing this file, you may do so under either license. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * GPL LICENSE SUMMARY 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 10*4882a593Smuzhiyun * it under the terms of version 2 of the GNU General Public License as 11*4882a593Smuzhiyun * published by the Free Software Foundation. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but 14*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 15*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16*4882a593Smuzhiyun * General Public License for more details. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * BSD LICENSE 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 21*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 22*4882a593Smuzhiyun * are met: 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * - Redistributions of source code must retain the above copyright 25*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 26*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above copyright 27*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 28*4882a593Smuzhiyun * the documentation and/or other materials provided with the 29*4882a593Smuzhiyun * distribution. 30*4882a593Smuzhiyun * - Neither the name of Intel Corporation nor the names of its 31*4882a593Smuzhiyun * contributors may be used to endorse or promote products derived 32*4882a593Smuzhiyun * from this software without specific prior written permission. 33*4882a593Smuzhiyun * 34*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35*4882a593Smuzhiyun * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36*4882a593Smuzhiyun * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37*4882a593Smuzhiyun * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38*4882a593Smuzhiyun * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39*4882a593Smuzhiyun * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40*4882a593Smuzhiyun * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41*4882a593Smuzhiyun * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42*4882a593Smuzhiyun * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44*4882a593Smuzhiyun * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45*4882a593Smuzhiyun * 46*4882a593Smuzhiyun */ 47*4882a593Smuzhiyun #if !defined(__HFI1_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ) 48*4882a593Smuzhiyun #define __HFI1_TRACE_TX_H 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #include <linux/tracepoint.h> 51*4882a593Smuzhiyun #include <linux/trace_seq.h> 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #include "hfi.h" 54*4882a593Smuzhiyun #include "mad.h" 55*4882a593Smuzhiyun #include "sdma.h" 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun const char *parse_sdma_flags(struct trace_seq *p, u64 desc0, u64 desc1); 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define __parse_sdma_flags(desc0, desc1) parse_sdma_flags(p, desc0, desc1) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #undef TRACE_SYSTEM 62*4882a593Smuzhiyun #define TRACE_SYSTEM hfi1_tx 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun TRACE_EVENT(hfi1_piofree, 65*4882a593Smuzhiyun TP_PROTO(struct send_context *sc, int extra), 66*4882a593Smuzhiyun TP_ARGS(sc, extra), 67*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sc->dd) 68*4882a593Smuzhiyun __field(u32, sw_index) 69*4882a593Smuzhiyun __field(u32, hw_context) 70*4882a593Smuzhiyun __field(int, extra) 71*4882a593Smuzhiyun ), 72*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sc->dd); 73*4882a593Smuzhiyun __entry->sw_index = sc->sw_index; 74*4882a593Smuzhiyun __entry->hw_context = sc->hw_context; 75*4882a593Smuzhiyun __entry->extra = extra; 76*4882a593Smuzhiyun ), 77*4882a593Smuzhiyun TP_printk("[%s] ctxt %u(%u) extra %d", 78*4882a593Smuzhiyun __get_str(dev), 79*4882a593Smuzhiyun __entry->sw_index, 80*4882a593Smuzhiyun __entry->hw_context, 81*4882a593Smuzhiyun __entry->extra 82*4882a593Smuzhiyun ) 83*4882a593Smuzhiyun ); 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun TRACE_EVENT(hfi1_wantpiointr, 86*4882a593Smuzhiyun TP_PROTO(struct send_context *sc, u32 needint, u64 credit_ctrl), 87*4882a593Smuzhiyun TP_ARGS(sc, needint, credit_ctrl), 88*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sc->dd) 89*4882a593Smuzhiyun __field(u32, sw_index) 90*4882a593Smuzhiyun __field(u32, hw_context) 91*4882a593Smuzhiyun __field(u32, needint) 92*4882a593Smuzhiyun __field(u64, credit_ctrl) 93*4882a593Smuzhiyun ), 94*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sc->dd); 95*4882a593Smuzhiyun __entry->sw_index = sc->sw_index; 96*4882a593Smuzhiyun __entry->hw_context = sc->hw_context; 97*4882a593Smuzhiyun __entry->needint = needint; 98*4882a593Smuzhiyun __entry->credit_ctrl = credit_ctrl; 99*4882a593Smuzhiyun ), 100*4882a593Smuzhiyun TP_printk("[%s] ctxt %u(%u) on %d credit_ctrl 0x%llx", 101*4882a593Smuzhiyun __get_str(dev), 102*4882a593Smuzhiyun __entry->sw_index, 103*4882a593Smuzhiyun __entry->hw_context, 104*4882a593Smuzhiyun __entry->needint, 105*4882a593Smuzhiyun (unsigned long long)__entry->credit_ctrl 106*4882a593Smuzhiyun ) 107*4882a593Smuzhiyun ); 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_qpsleepwakeup_template, 110*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, u32 flags), 111*4882a593Smuzhiyun TP_ARGS(qp, flags), 112*4882a593Smuzhiyun TP_STRUCT__entry( 113*4882a593Smuzhiyun DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 114*4882a593Smuzhiyun __field(u32, qpn) 115*4882a593Smuzhiyun __field(u32, flags) 116*4882a593Smuzhiyun __field(u32, s_flags) 117*4882a593Smuzhiyun __field(u32, ps_flags) 118*4882a593Smuzhiyun __field(unsigned long, iow_flags) 119*4882a593Smuzhiyun ), 120*4882a593Smuzhiyun TP_fast_assign( 121*4882a593Smuzhiyun DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 122*4882a593Smuzhiyun __entry->flags = flags; 123*4882a593Smuzhiyun __entry->qpn = qp->ibqp.qp_num; 124*4882a593Smuzhiyun __entry->s_flags = qp->s_flags; 125*4882a593Smuzhiyun __entry->ps_flags = 126*4882a593Smuzhiyun ((struct hfi1_qp_priv *)qp->priv)->s_flags; 127*4882a593Smuzhiyun __entry->iow_flags = 128*4882a593Smuzhiyun ((struct hfi1_qp_priv *)qp->priv)->s_iowait.flags; 129*4882a593Smuzhiyun ), 130*4882a593Smuzhiyun TP_printk( 131*4882a593Smuzhiyun "[%s] qpn 0x%x flags 0x%x s_flags 0x%x ps_flags 0x%x iow_flags 0x%lx", 132*4882a593Smuzhiyun __get_str(dev), 133*4882a593Smuzhiyun __entry->qpn, 134*4882a593Smuzhiyun __entry->flags, 135*4882a593Smuzhiyun __entry->s_flags, 136*4882a593Smuzhiyun __entry->ps_flags, 137*4882a593Smuzhiyun __entry->iow_flags 138*4882a593Smuzhiyun ) 139*4882a593Smuzhiyun ); 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun DEFINE_EVENT(hfi1_qpsleepwakeup_template, hfi1_qpwakeup, 142*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, u32 flags), 143*4882a593Smuzhiyun TP_ARGS(qp, flags)); 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun DEFINE_EVENT(hfi1_qpsleepwakeup_template, hfi1_qpsleep, 146*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, u32 flags), 147*4882a593Smuzhiyun TP_ARGS(qp, flags)); 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_descriptor, 150*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, 151*4882a593Smuzhiyun u64 desc0, 152*4882a593Smuzhiyun u64 desc1, 153*4882a593Smuzhiyun u16 e, 154*4882a593Smuzhiyun void *descp), 155*4882a593Smuzhiyun TP_ARGS(sde, desc0, desc1, e, descp), 156*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 157*4882a593Smuzhiyun __field(void *, descp) 158*4882a593Smuzhiyun __field(u64, desc0) 159*4882a593Smuzhiyun __field(u64, desc1) 160*4882a593Smuzhiyun __field(u16, e) 161*4882a593Smuzhiyun __field(u8, idx) 162*4882a593Smuzhiyun ), 163*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 164*4882a593Smuzhiyun __entry->desc0 = desc0; 165*4882a593Smuzhiyun __entry->desc1 = desc1; 166*4882a593Smuzhiyun __entry->idx = sde->this_idx; 167*4882a593Smuzhiyun __entry->descp = descp; 168*4882a593Smuzhiyun __entry->e = e; 169*4882a593Smuzhiyun ), 170*4882a593Smuzhiyun TP_printk( 171*4882a593Smuzhiyun "[%s] SDE(%u) flags:%s addr:0x%016llx gen:%u len:%u d0:%016llx d1:%016llx to %p,%u", 172*4882a593Smuzhiyun __get_str(dev), 173*4882a593Smuzhiyun __entry->idx, 174*4882a593Smuzhiyun __parse_sdma_flags(__entry->desc0, __entry->desc1), 175*4882a593Smuzhiyun (__entry->desc0 >> SDMA_DESC0_PHY_ADDR_SHIFT) & 176*4882a593Smuzhiyun SDMA_DESC0_PHY_ADDR_MASK, 177*4882a593Smuzhiyun (u8)((__entry->desc1 >> SDMA_DESC1_GENERATION_SHIFT) & 178*4882a593Smuzhiyun SDMA_DESC1_GENERATION_MASK), 179*4882a593Smuzhiyun (u16)((__entry->desc0 >> SDMA_DESC0_BYTE_COUNT_SHIFT) & 180*4882a593Smuzhiyun SDMA_DESC0_BYTE_COUNT_MASK), 181*4882a593Smuzhiyun __entry->desc0, 182*4882a593Smuzhiyun __entry->desc1, 183*4882a593Smuzhiyun __entry->descp, 184*4882a593Smuzhiyun __entry->e 185*4882a593Smuzhiyun ) 186*4882a593Smuzhiyun ); 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_engine_select, 189*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u32 sel, u8 vl, u8 idx), 190*4882a593Smuzhiyun TP_ARGS(dd, sel, vl, idx), 191*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 192*4882a593Smuzhiyun __field(u32, sel) 193*4882a593Smuzhiyun __field(u8, vl) 194*4882a593Smuzhiyun __field(u8, idx) 195*4882a593Smuzhiyun ), 196*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 197*4882a593Smuzhiyun __entry->sel = sel; 198*4882a593Smuzhiyun __entry->vl = vl; 199*4882a593Smuzhiyun __entry->idx = idx; 200*4882a593Smuzhiyun ), 201*4882a593Smuzhiyun TP_printk("[%s] selecting SDE %u sel 0x%x vl %u", 202*4882a593Smuzhiyun __get_str(dev), 203*4882a593Smuzhiyun __entry->idx, 204*4882a593Smuzhiyun __entry->sel, 205*4882a593Smuzhiyun __entry->vl 206*4882a593Smuzhiyun ) 207*4882a593Smuzhiyun ); 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_free_queues, 210*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt), 211*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt), 212*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 213*4882a593Smuzhiyun __field(u16, ctxt) 214*4882a593Smuzhiyun __field(u16, subctxt) 215*4882a593Smuzhiyun ), 216*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 217*4882a593Smuzhiyun __entry->ctxt = ctxt; 218*4882a593Smuzhiyun __entry->subctxt = subctxt; 219*4882a593Smuzhiyun ), 220*4882a593Smuzhiyun TP_printk("[%s] SDMA [%u:%u] Freeing user SDMA queues", 221*4882a593Smuzhiyun __get_str(dev), 222*4882a593Smuzhiyun __entry->ctxt, 223*4882a593Smuzhiyun __entry->subctxt 224*4882a593Smuzhiyun ) 225*4882a593Smuzhiyun ); 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_process_request, 228*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 229*4882a593Smuzhiyun u16 comp_idx), 230*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx), 231*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 232*4882a593Smuzhiyun __field(u16, ctxt) 233*4882a593Smuzhiyun __field(u16, subctxt) 234*4882a593Smuzhiyun __field(u16, comp_idx) 235*4882a593Smuzhiyun ), 236*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 237*4882a593Smuzhiyun __entry->ctxt = ctxt; 238*4882a593Smuzhiyun __entry->subctxt = subctxt; 239*4882a593Smuzhiyun __entry->comp_idx = comp_idx; 240*4882a593Smuzhiyun ), 241*4882a593Smuzhiyun TP_printk("[%s] SDMA [%u:%u] Using req/comp entry: %u", 242*4882a593Smuzhiyun __get_str(dev), 243*4882a593Smuzhiyun __entry->ctxt, 244*4882a593Smuzhiyun __entry->subctxt, 245*4882a593Smuzhiyun __entry->comp_idx 246*4882a593Smuzhiyun ) 247*4882a593Smuzhiyun ); 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun DECLARE_EVENT_CLASS( 250*4882a593Smuzhiyun hfi1_sdma_value_template, 251*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, u16 comp_idx, 252*4882a593Smuzhiyun u32 value), 253*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx, value), 254*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 255*4882a593Smuzhiyun __field(u16, ctxt) 256*4882a593Smuzhiyun __field(u16, subctxt) 257*4882a593Smuzhiyun __field(u16, comp_idx) 258*4882a593Smuzhiyun __field(u32, value) 259*4882a593Smuzhiyun ), 260*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 261*4882a593Smuzhiyun __entry->ctxt = ctxt; 262*4882a593Smuzhiyun __entry->subctxt = subctxt; 263*4882a593Smuzhiyun __entry->comp_idx = comp_idx; 264*4882a593Smuzhiyun __entry->value = value; 265*4882a593Smuzhiyun ), 266*4882a593Smuzhiyun TP_printk("[%s] SDMA [%u:%u:%u] value: %u", 267*4882a593Smuzhiyun __get_str(dev), 268*4882a593Smuzhiyun __entry->ctxt, 269*4882a593Smuzhiyun __entry->subctxt, 270*4882a593Smuzhiyun __entry->comp_idx, 271*4882a593Smuzhiyun __entry->value 272*4882a593Smuzhiyun ) 273*4882a593Smuzhiyun ); 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_initial_tidoffset, 276*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 277*4882a593Smuzhiyun u16 comp_idx, u32 tidoffset), 278*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx, tidoffset)); 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_data_length, 281*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 282*4882a593Smuzhiyun u16 comp_idx, u32 data_len), 283*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx, data_len)); 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_value_template, hfi1_sdma_user_compute_length, 286*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 287*4882a593Smuzhiyun u16 comp_idx, u32 data_len), 288*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx, data_len)); 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_tid_info, 291*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 292*4882a593Smuzhiyun u16 comp_idx, u32 tidoffset, u32 units, u8 shift), 293*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, comp_idx, tidoffset, units, shift), 294*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 295*4882a593Smuzhiyun __field(u16, ctxt) 296*4882a593Smuzhiyun __field(u16, subctxt) 297*4882a593Smuzhiyun __field(u16, comp_idx) 298*4882a593Smuzhiyun __field(u32, tidoffset) 299*4882a593Smuzhiyun __field(u32, units) 300*4882a593Smuzhiyun __field(u8, shift) 301*4882a593Smuzhiyun ), 302*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 303*4882a593Smuzhiyun __entry->ctxt = ctxt; 304*4882a593Smuzhiyun __entry->subctxt = subctxt; 305*4882a593Smuzhiyun __entry->comp_idx = comp_idx; 306*4882a593Smuzhiyun __entry->tidoffset = tidoffset; 307*4882a593Smuzhiyun __entry->units = units; 308*4882a593Smuzhiyun __entry->shift = shift; 309*4882a593Smuzhiyun ), 310*4882a593Smuzhiyun TP_printk("[%s] SDMA [%u:%u:%u] TID offset %ubytes %uunits om %u", 311*4882a593Smuzhiyun __get_str(dev), 312*4882a593Smuzhiyun __entry->ctxt, 313*4882a593Smuzhiyun __entry->subctxt, 314*4882a593Smuzhiyun __entry->comp_idx, 315*4882a593Smuzhiyun __entry->tidoffset, 316*4882a593Smuzhiyun __entry->units, 317*4882a593Smuzhiyun __entry->shift 318*4882a593Smuzhiyun ) 319*4882a593Smuzhiyun ); 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_request, 322*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u16 subctxt, 323*4882a593Smuzhiyun unsigned long dim), 324*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, dim), 325*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 326*4882a593Smuzhiyun __field(u16, ctxt) 327*4882a593Smuzhiyun __field(u16, subctxt) 328*4882a593Smuzhiyun __field(unsigned long, dim) 329*4882a593Smuzhiyun ), 330*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 331*4882a593Smuzhiyun __entry->ctxt = ctxt; 332*4882a593Smuzhiyun __entry->subctxt = subctxt; 333*4882a593Smuzhiyun __entry->dim = dim; 334*4882a593Smuzhiyun ), 335*4882a593Smuzhiyun TP_printk("[%s] SDMA from %u:%u (%lu)", 336*4882a593Smuzhiyun __get_str(dev), 337*4882a593Smuzhiyun __entry->ctxt, 338*4882a593Smuzhiyun __entry->subctxt, 339*4882a593Smuzhiyun __entry->dim 340*4882a593Smuzhiyun ) 341*4882a593Smuzhiyun ); 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_sdma_engine_class, 344*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, u64 status), 345*4882a593Smuzhiyun TP_ARGS(sde, status), 346*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 347*4882a593Smuzhiyun __field(u64, status) 348*4882a593Smuzhiyun __field(u8, idx) 349*4882a593Smuzhiyun ), 350*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 351*4882a593Smuzhiyun __entry->status = status; 352*4882a593Smuzhiyun __entry->idx = sde->this_idx; 353*4882a593Smuzhiyun ), 354*4882a593Smuzhiyun TP_printk("[%s] SDE(%u) status %llx", 355*4882a593Smuzhiyun __get_str(dev), 356*4882a593Smuzhiyun __entry->idx, 357*4882a593Smuzhiyun (unsigned long long)__entry->status 358*4882a593Smuzhiyun ) 359*4882a593Smuzhiyun ); 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_engine_class, hfi1_sdma_engine_interrupt, 362*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, u64 status), 363*4882a593Smuzhiyun TP_ARGS(sde, status) 364*4882a593Smuzhiyun ); 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_engine_class, hfi1_sdma_engine_progress, 367*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, u64 status), 368*4882a593Smuzhiyun TP_ARGS(sde, status) 369*4882a593Smuzhiyun ); 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_sdma_ahg_ad, 372*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, int aidx), 373*4882a593Smuzhiyun TP_ARGS(sde, aidx), 374*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 375*4882a593Smuzhiyun __field(int, aidx) 376*4882a593Smuzhiyun __field(u8, idx) 377*4882a593Smuzhiyun ), 378*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 379*4882a593Smuzhiyun __entry->idx = sde->this_idx; 380*4882a593Smuzhiyun __entry->aidx = aidx; 381*4882a593Smuzhiyun ), 382*4882a593Smuzhiyun TP_printk("[%s] SDE(%u) aidx %d", 383*4882a593Smuzhiyun __get_str(dev), 384*4882a593Smuzhiyun __entry->idx, 385*4882a593Smuzhiyun __entry->aidx 386*4882a593Smuzhiyun ) 387*4882a593Smuzhiyun ); 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_ahg_ad, hfi1_ahg_allocate, 390*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, int aidx), 391*4882a593Smuzhiyun TP_ARGS(sde, aidx)); 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_ahg_ad, hfi1_ahg_deallocate, 394*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, int aidx), 395*4882a593Smuzhiyun TP_ARGS(sde, aidx)); 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun #ifdef CONFIG_HFI1_DEBUG_SDMA_ORDER 398*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_progress, 399*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, 400*4882a593Smuzhiyun u16 hwhead, 401*4882a593Smuzhiyun u16 swhead, 402*4882a593Smuzhiyun struct sdma_txreq *txp 403*4882a593Smuzhiyun ), 404*4882a593Smuzhiyun TP_ARGS(sde, hwhead, swhead, txp), 405*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 406*4882a593Smuzhiyun __field(u64, sn) 407*4882a593Smuzhiyun __field(u16, hwhead) 408*4882a593Smuzhiyun __field(u16, swhead) 409*4882a593Smuzhiyun __field(u16, txnext) 410*4882a593Smuzhiyun __field(u16, tx_tail) 411*4882a593Smuzhiyun __field(u16, tx_head) 412*4882a593Smuzhiyun __field(u8, idx) 413*4882a593Smuzhiyun ), 414*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 415*4882a593Smuzhiyun __entry->hwhead = hwhead; 416*4882a593Smuzhiyun __entry->swhead = swhead; 417*4882a593Smuzhiyun __entry->tx_tail = sde->tx_tail; 418*4882a593Smuzhiyun __entry->tx_head = sde->tx_head; 419*4882a593Smuzhiyun __entry->txnext = txp ? txp->next_descq_idx : ~0; 420*4882a593Smuzhiyun __entry->idx = sde->this_idx; 421*4882a593Smuzhiyun __entry->sn = txp ? txp->sn : ~0; 422*4882a593Smuzhiyun ), 423*4882a593Smuzhiyun TP_printk( 424*4882a593Smuzhiyun "[%s] SDE(%u) sn %llu hwhead %u swhead %u next_descq_idx %u tx_head %u tx_tail %u", 425*4882a593Smuzhiyun __get_str(dev), 426*4882a593Smuzhiyun __entry->idx, 427*4882a593Smuzhiyun __entry->sn, 428*4882a593Smuzhiyun __entry->hwhead, 429*4882a593Smuzhiyun __entry->swhead, 430*4882a593Smuzhiyun __entry->txnext, 431*4882a593Smuzhiyun __entry->tx_head, 432*4882a593Smuzhiyun __entry->tx_tail 433*4882a593Smuzhiyun ) 434*4882a593Smuzhiyun ); 435*4882a593Smuzhiyun #else 436*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_progress, 437*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, 438*4882a593Smuzhiyun u16 hwhead, u16 swhead, 439*4882a593Smuzhiyun struct sdma_txreq *txp 440*4882a593Smuzhiyun ), 441*4882a593Smuzhiyun TP_ARGS(sde, hwhead, swhead, txp), 442*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 443*4882a593Smuzhiyun __field(u16, hwhead) 444*4882a593Smuzhiyun __field(u16, swhead) 445*4882a593Smuzhiyun __field(u16, txnext) 446*4882a593Smuzhiyun __field(u16, tx_tail) 447*4882a593Smuzhiyun __field(u16, tx_head) 448*4882a593Smuzhiyun __field(u8, idx) 449*4882a593Smuzhiyun ), 450*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 451*4882a593Smuzhiyun __entry->hwhead = hwhead; 452*4882a593Smuzhiyun __entry->swhead = swhead; 453*4882a593Smuzhiyun __entry->tx_tail = sde->tx_tail; 454*4882a593Smuzhiyun __entry->tx_head = sde->tx_head; 455*4882a593Smuzhiyun __entry->txnext = txp ? txp->next_descq_idx : ~0; 456*4882a593Smuzhiyun __entry->idx = sde->this_idx; 457*4882a593Smuzhiyun ), 458*4882a593Smuzhiyun TP_printk( 459*4882a593Smuzhiyun "[%s] SDE(%u) hwhead %u swhead %u next_descq_idx %u tx_head %u tx_tail %u", 460*4882a593Smuzhiyun __get_str(dev), 461*4882a593Smuzhiyun __entry->idx, 462*4882a593Smuzhiyun __entry->hwhead, 463*4882a593Smuzhiyun __entry->swhead, 464*4882a593Smuzhiyun __entry->txnext, 465*4882a593Smuzhiyun __entry->tx_head, 466*4882a593Smuzhiyun __entry->tx_tail 467*4882a593Smuzhiyun ) 468*4882a593Smuzhiyun ); 469*4882a593Smuzhiyun #endif 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_sdma_sn, 472*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, u64 sn), 473*4882a593Smuzhiyun TP_ARGS(sde, sn), 474*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 475*4882a593Smuzhiyun __field(u64, sn) 476*4882a593Smuzhiyun __field(u8, idx) 477*4882a593Smuzhiyun ), 478*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 479*4882a593Smuzhiyun __entry->sn = sn; 480*4882a593Smuzhiyun __entry->idx = sde->this_idx; 481*4882a593Smuzhiyun ), 482*4882a593Smuzhiyun TP_printk("[%s] SDE(%u) sn %llu", 483*4882a593Smuzhiyun __get_str(dev), 484*4882a593Smuzhiyun __entry->idx, 485*4882a593Smuzhiyun __entry->sn 486*4882a593Smuzhiyun ) 487*4882a593Smuzhiyun ); 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_sn, hfi1_sdma_out_sn, 490*4882a593Smuzhiyun TP_PROTO( 491*4882a593Smuzhiyun struct sdma_engine *sde, 492*4882a593Smuzhiyun u64 sn 493*4882a593Smuzhiyun ), 494*4882a593Smuzhiyun TP_ARGS(sde, sn) 495*4882a593Smuzhiyun ); 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun DEFINE_EVENT(hfi1_sdma_sn, hfi1_sdma_in_sn, 498*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, u64 sn), 499*4882a593Smuzhiyun TP_ARGS(sde, sn) 500*4882a593Smuzhiyun ); 501*4882a593Smuzhiyun 502*4882a593Smuzhiyun #define USDMA_HDR_FORMAT \ 503*4882a593Smuzhiyun "[%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" 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_header, 506*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 req, 507*4882a593Smuzhiyun struct hfi1_pkt_header *hdr, u32 tidval), 508*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, req, hdr, tidval), 509*4882a593Smuzhiyun TP_STRUCT__entry( 510*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 511*4882a593Smuzhiyun __field(u16, ctxt) 512*4882a593Smuzhiyun __field(u8, subctxt) 513*4882a593Smuzhiyun __field(u16, req) 514*4882a593Smuzhiyun __field(u32, pbc0) 515*4882a593Smuzhiyun __field(u32, pbc1) 516*4882a593Smuzhiyun __field(u32, lrh0) 517*4882a593Smuzhiyun __field(u32, lrh1) 518*4882a593Smuzhiyun __field(u32, bth0) 519*4882a593Smuzhiyun __field(u32, bth1) 520*4882a593Smuzhiyun __field(u32, bth2) 521*4882a593Smuzhiyun __field(u32, kdeth0) 522*4882a593Smuzhiyun __field(u32, kdeth1) 523*4882a593Smuzhiyun __field(u32, kdeth2) 524*4882a593Smuzhiyun __field(u32, kdeth3) 525*4882a593Smuzhiyun __field(u32, kdeth4) 526*4882a593Smuzhiyun __field(u32, kdeth5) 527*4882a593Smuzhiyun __field(u32, kdeth6) 528*4882a593Smuzhiyun __field(u32, kdeth7) 529*4882a593Smuzhiyun __field(u32, kdeth8) 530*4882a593Smuzhiyun __field(u32, tidval) 531*4882a593Smuzhiyun ), 532*4882a593Smuzhiyun TP_fast_assign( 533*4882a593Smuzhiyun __le32 *pbc = (__le32 *)hdr->pbc; 534*4882a593Smuzhiyun __be32 *lrh = (__be32 *)hdr->lrh; 535*4882a593Smuzhiyun __be32 *bth = (__be32 *)hdr->bth; 536*4882a593Smuzhiyun __le32 *kdeth = (__le32 *)&hdr->kdeth; 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 539*4882a593Smuzhiyun __entry->ctxt = ctxt; 540*4882a593Smuzhiyun __entry->subctxt = subctxt; 541*4882a593Smuzhiyun __entry->req = req; 542*4882a593Smuzhiyun __entry->pbc0 = le32_to_cpu(pbc[0]); 543*4882a593Smuzhiyun __entry->pbc1 = le32_to_cpu(pbc[1]); 544*4882a593Smuzhiyun __entry->lrh0 = be32_to_cpu(lrh[0]); 545*4882a593Smuzhiyun __entry->lrh1 = be32_to_cpu(lrh[1]); 546*4882a593Smuzhiyun __entry->bth0 = be32_to_cpu(bth[0]); 547*4882a593Smuzhiyun __entry->bth1 = be32_to_cpu(bth[1]); 548*4882a593Smuzhiyun __entry->bth2 = be32_to_cpu(bth[2]); 549*4882a593Smuzhiyun __entry->kdeth0 = le32_to_cpu(kdeth[0]); 550*4882a593Smuzhiyun __entry->kdeth1 = le32_to_cpu(kdeth[1]); 551*4882a593Smuzhiyun __entry->kdeth2 = le32_to_cpu(kdeth[2]); 552*4882a593Smuzhiyun __entry->kdeth3 = le32_to_cpu(kdeth[3]); 553*4882a593Smuzhiyun __entry->kdeth4 = le32_to_cpu(kdeth[4]); 554*4882a593Smuzhiyun __entry->kdeth5 = le32_to_cpu(kdeth[5]); 555*4882a593Smuzhiyun __entry->kdeth6 = le32_to_cpu(kdeth[6]); 556*4882a593Smuzhiyun __entry->kdeth7 = le32_to_cpu(kdeth[7]); 557*4882a593Smuzhiyun __entry->kdeth8 = le32_to_cpu(kdeth[8]); 558*4882a593Smuzhiyun __entry->tidval = tidval; 559*4882a593Smuzhiyun ), 560*4882a593Smuzhiyun TP_printk(USDMA_HDR_FORMAT, 561*4882a593Smuzhiyun __get_str(dev), 562*4882a593Smuzhiyun __entry->ctxt, 563*4882a593Smuzhiyun __entry->subctxt, 564*4882a593Smuzhiyun __entry->req, 565*4882a593Smuzhiyun __entry->pbc1, 566*4882a593Smuzhiyun __entry->pbc0, 567*4882a593Smuzhiyun __entry->lrh0, 568*4882a593Smuzhiyun __entry->lrh1, 569*4882a593Smuzhiyun __entry->bth0, 570*4882a593Smuzhiyun __entry->bth1, 571*4882a593Smuzhiyun __entry->bth2, 572*4882a593Smuzhiyun __entry->kdeth0, 573*4882a593Smuzhiyun __entry->kdeth1, 574*4882a593Smuzhiyun __entry->kdeth2, 575*4882a593Smuzhiyun __entry->kdeth3, 576*4882a593Smuzhiyun __entry->kdeth4, 577*4882a593Smuzhiyun __entry->kdeth5, 578*4882a593Smuzhiyun __entry->kdeth6, 579*4882a593Smuzhiyun __entry->kdeth7, 580*4882a593Smuzhiyun __entry->kdeth8, 581*4882a593Smuzhiyun __entry->tidval 582*4882a593Smuzhiyun ) 583*4882a593Smuzhiyun ); 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun #define SDMA_UREQ_FMT \ 586*4882a593Smuzhiyun "[%s:%u:%u] ver/op=0x%x, iovcnt=%u, npkts=%u, frag=%u, idx=%u" 587*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_reqinfo, 588*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 *i), 589*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, i), 590*4882a593Smuzhiyun TP_STRUCT__entry( 591*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 592*4882a593Smuzhiyun __field(u16, ctxt) 593*4882a593Smuzhiyun __field(u8, subctxt) 594*4882a593Smuzhiyun __field(u8, ver_opcode) 595*4882a593Smuzhiyun __field(u8, iovcnt) 596*4882a593Smuzhiyun __field(u16, npkts) 597*4882a593Smuzhiyun __field(u16, fragsize) 598*4882a593Smuzhiyun __field(u16, comp_idx) 599*4882a593Smuzhiyun ), 600*4882a593Smuzhiyun TP_fast_assign( 601*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 602*4882a593Smuzhiyun __entry->ctxt = ctxt; 603*4882a593Smuzhiyun __entry->subctxt = subctxt; 604*4882a593Smuzhiyun __entry->ver_opcode = i[0] & 0xff; 605*4882a593Smuzhiyun __entry->iovcnt = (i[0] >> 8) & 0xff; 606*4882a593Smuzhiyun __entry->npkts = i[1]; 607*4882a593Smuzhiyun __entry->fragsize = i[2]; 608*4882a593Smuzhiyun __entry->comp_idx = i[3]; 609*4882a593Smuzhiyun ), 610*4882a593Smuzhiyun TP_printk(SDMA_UREQ_FMT, 611*4882a593Smuzhiyun __get_str(dev), 612*4882a593Smuzhiyun __entry->ctxt, 613*4882a593Smuzhiyun __entry->subctxt, 614*4882a593Smuzhiyun __entry->ver_opcode, 615*4882a593Smuzhiyun __entry->iovcnt, 616*4882a593Smuzhiyun __entry->npkts, 617*4882a593Smuzhiyun __entry->fragsize, 618*4882a593Smuzhiyun __entry->comp_idx 619*4882a593Smuzhiyun ) 620*4882a593Smuzhiyun ); 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun #define usdma_complete_name(st) { st, #st } 623*4882a593Smuzhiyun #define show_usdma_complete_state(st) \ 624*4882a593Smuzhiyun __print_symbolic(st, \ 625*4882a593Smuzhiyun usdma_complete_name(FREE), \ 626*4882a593Smuzhiyun usdma_complete_name(QUEUED), \ 627*4882a593Smuzhiyun usdma_complete_name(COMPLETE), \ 628*4882a593Smuzhiyun usdma_complete_name(ERROR)) 629*4882a593Smuzhiyun 630*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_completion, 631*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 idx, 632*4882a593Smuzhiyun u8 state, int code), 633*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, idx, state, code), 634*4882a593Smuzhiyun TP_STRUCT__entry( 635*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 636*4882a593Smuzhiyun __field(u16, ctxt) 637*4882a593Smuzhiyun __field(u8, subctxt) 638*4882a593Smuzhiyun __field(u16, idx) 639*4882a593Smuzhiyun __field(u8, state) 640*4882a593Smuzhiyun __field(int, code) 641*4882a593Smuzhiyun ), 642*4882a593Smuzhiyun TP_fast_assign( 643*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 644*4882a593Smuzhiyun __entry->ctxt = ctxt; 645*4882a593Smuzhiyun __entry->subctxt = subctxt; 646*4882a593Smuzhiyun __entry->idx = idx; 647*4882a593Smuzhiyun __entry->state = state; 648*4882a593Smuzhiyun __entry->code = code; 649*4882a593Smuzhiyun ), 650*4882a593Smuzhiyun TP_printk("[%s:%u:%u:%u] SDMA completion state %s (%d)", 651*4882a593Smuzhiyun __get_str(dev), __entry->ctxt, __entry->subctxt, 652*4882a593Smuzhiyun __entry->idx, show_usdma_complete_state(__entry->state), 653*4882a593Smuzhiyun __entry->code) 654*4882a593Smuzhiyun ); 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun const char *print_u32_array(struct trace_seq *, u32 *, int); 657*4882a593Smuzhiyun #define __print_u32_hex(arr, len) print_u32_array(p, arr, len) 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_user_header_ahg, 660*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, u16 ctxt, u8 subctxt, u16 req, 661*4882a593Smuzhiyun u8 sde, u8 ahgidx, u32 *ahg, int len, u32 tidval), 662*4882a593Smuzhiyun TP_ARGS(dd, ctxt, subctxt, req, sde, ahgidx, ahg, len, tidval), 663*4882a593Smuzhiyun TP_STRUCT__entry( 664*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 665*4882a593Smuzhiyun __field(u16, ctxt) 666*4882a593Smuzhiyun __field(u8, subctxt) 667*4882a593Smuzhiyun __field(u16, req) 668*4882a593Smuzhiyun __field(u8, sde) 669*4882a593Smuzhiyun __field(u8, idx) 670*4882a593Smuzhiyun __field(int, len) 671*4882a593Smuzhiyun __field(u32, tidval) 672*4882a593Smuzhiyun __array(u32, ahg, 10) 673*4882a593Smuzhiyun ), 674*4882a593Smuzhiyun TP_fast_assign( 675*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 676*4882a593Smuzhiyun __entry->ctxt = ctxt; 677*4882a593Smuzhiyun __entry->subctxt = subctxt; 678*4882a593Smuzhiyun __entry->req = req; 679*4882a593Smuzhiyun __entry->sde = sde; 680*4882a593Smuzhiyun __entry->idx = ahgidx; 681*4882a593Smuzhiyun __entry->len = len; 682*4882a593Smuzhiyun __entry->tidval = tidval; 683*4882a593Smuzhiyun memcpy(__entry->ahg, ahg, len * sizeof(u32)); 684*4882a593Smuzhiyun ), 685*4882a593Smuzhiyun TP_printk("[%s:%u:%u:%u] (SDE%u/AHG%u) ahg[0-%d]=(%s) TIDVal=0x%x", 686*4882a593Smuzhiyun __get_str(dev), 687*4882a593Smuzhiyun __entry->ctxt, 688*4882a593Smuzhiyun __entry->subctxt, 689*4882a593Smuzhiyun __entry->req, 690*4882a593Smuzhiyun __entry->sde, 691*4882a593Smuzhiyun __entry->idx, 692*4882a593Smuzhiyun __entry->len - 1, 693*4882a593Smuzhiyun __print_u32_hex(__entry->ahg, __entry->len), 694*4882a593Smuzhiyun __entry->tidval 695*4882a593Smuzhiyun ) 696*4882a593Smuzhiyun ); 697*4882a593Smuzhiyun 698*4882a593Smuzhiyun TRACE_EVENT(hfi1_sdma_state, 699*4882a593Smuzhiyun TP_PROTO(struct sdma_engine *sde, 700*4882a593Smuzhiyun const char *cstate, 701*4882a593Smuzhiyun const char *nstate 702*4882a593Smuzhiyun ), 703*4882a593Smuzhiyun TP_ARGS(sde, cstate, nstate), 704*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(sde->dd) 705*4882a593Smuzhiyun __string(curstate, cstate) 706*4882a593Smuzhiyun __string(newstate, nstate) 707*4882a593Smuzhiyun ), 708*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(sde->dd); 709*4882a593Smuzhiyun __assign_str(curstate, cstate); 710*4882a593Smuzhiyun __assign_str(newstate, nstate); 711*4882a593Smuzhiyun ), 712*4882a593Smuzhiyun TP_printk("[%s] current state %s new state %s", 713*4882a593Smuzhiyun __get_str(dev), 714*4882a593Smuzhiyun __get_str(curstate), 715*4882a593Smuzhiyun __get_str(newstate) 716*4882a593Smuzhiyun ) 717*4882a593Smuzhiyun ); 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun #define BCT_FORMAT \ 720*4882a593Smuzhiyun "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]" 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun #define BCT(field) \ 723*4882a593Smuzhiyun be16_to_cpu( \ 724*4882a593Smuzhiyun ((struct buffer_control *)__get_dynamic_array(bct))->field \ 725*4882a593Smuzhiyun ) 726*4882a593Smuzhiyun 727*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_bct_template, 728*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 729*4882a593Smuzhiyun struct buffer_control *bc), 730*4882a593Smuzhiyun TP_ARGS(dd, bc), 731*4882a593Smuzhiyun TP_STRUCT__entry(DD_DEV_ENTRY(dd) 732*4882a593Smuzhiyun __dynamic_array(u8, bct, sizeof(*bc)) 733*4882a593Smuzhiyun ), 734*4882a593Smuzhiyun TP_fast_assign(DD_DEV_ASSIGN(dd); 735*4882a593Smuzhiyun memcpy(__get_dynamic_array(bct), bc, 736*4882a593Smuzhiyun sizeof(*bc)); 737*4882a593Smuzhiyun ), 738*4882a593Smuzhiyun TP_printk(BCT_FORMAT, 739*4882a593Smuzhiyun BCT(overall_shared_limit), 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun BCT(vl[0].dedicated), 742*4882a593Smuzhiyun BCT(vl[0].shared), 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun BCT(vl[1].dedicated), 745*4882a593Smuzhiyun BCT(vl[1].shared), 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun BCT(vl[2].dedicated), 748*4882a593Smuzhiyun BCT(vl[2].shared), 749*4882a593Smuzhiyun 750*4882a593Smuzhiyun BCT(vl[3].dedicated), 751*4882a593Smuzhiyun BCT(vl[3].shared), 752*4882a593Smuzhiyun 753*4882a593Smuzhiyun BCT(vl[4].dedicated), 754*4882a593Smuzhiyun BCT(vl[4].shared), 755*4882a593Smuzhiyun 756*4882a593Smuzhiyun BCT(vl[5].dedicated), 757*4882a593Smuzhiyun BCT(vl[5].shared), 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun BCT(vl[6].dedicated), 760*4882a593Smuzhiyun BCT(vl[6].shared), 761*4882a593Smuzhiyun 762*4882a593Smuzhiyun BCT(vl[7].dedicated), 763*4882a593Smuzhiyun BCT(vl[7].shared), 764*4882a593Smuzhiyun 765*4882a593Smuzhiyun BCT(vl[15].dedicated), 766*4882a593Smuzhiyun BCT(vl[15].shared) 767*4882a593Smuzhiyun ) 768*4882a593Smuzhiyun ); 769*4882a593Smuzhiyun 770*4882a593Smuzhiyun DEFINE_EVENT(hfi1_bct_template, bct_set, 771*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, struct buffer_control *bc), 772*4882a593Smuzhiyun TP_ARGS(dd, bc)); 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun DEFINE_EVENT(hfi1_bct_template, bct_get, 775*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, struct buffer_control *bc), 776*4882a593Smuzhiyun TP_ARGS(dd, bc)); 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun TRACE_EVENT( 779*4882a593Smuzhiyun hfi1_qp_send_completion, 780*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx), 781*4882a593Smuzhiyun TP_ARGS(qp, wqe, idx), 782*4882a593Smuzhiyun TP_STRUCT__entry( 783*4882a593Smuzhiyun DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 784*4882a593Smuzhiyun __field(struct rvt_swqe *, wqe) 785*4882a593Smuzhiyun __field(u64, wr_id) 786*4882a593Smuzhiyun __field(u32, qpn) 787*4882a593Smuzhiyun __field(u32, qpt) 788*4882a593Smuzhiyun __field(u32, length) 789*4882a593Smuzhiyun __field(u32, idx) 790*4882a593Smuzhiyun __field(u32, ssn) 791*4882a593Smuzhiyun __field(enum ib_wr_opcode, opcode) 792*4882a593Smuzhiyun __field(int, send_flags) 793*4882a593Smuzhiyun ), 794*4882a593Smuzhiyun TP_fast_assign( 795*4882a593Smuzhiyun DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 796*4882a593Smuzhiyun __entry->wqe = wqe; 797*4882a593Smuzhiyun __entry->wr_id = wqe->wr.wr_id; 798*4882a593Smuzhiyun __entry->qpn = qp->ibqp.qp_num; 799*4882a593Smuzhiyun __entry->qpt = qp->ibqp.qp_type; 800*4882a593Smuzhiyun __entry->length = wqe->length; 801*4882a593Smuzhiyun __entry->idx = idx; 802*4882a593Smuzhiyun __entry->ssn = wqe->ssn; 803*4882a593Smuzhiyun __entry->opcode = wqe->wr.opcode; 804*4882a593Smuzhiyun __entry->send_flags = wqe->wr.send_flags; 805*4882a593Smuzhiyun ), 806*4882a593Smuzhiyun TP_printk( 807*4882a593Smuzhiyun "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x", 808*4882a593Smuzhiyun __get_str(dev), 809*4882a593Smuzhiyun __entry->qpn, 810*4882a593Smuzhiyun __entry->qpt, 811*4882a593Smuzhiyun __entry->wqe, 812*4882a593Smuzhiyun __entry->idx, 813*4882a593Smuzhiyun __entry->wr_id, 814*4882a593Smuzhiyun __entry->length, 815*4882a593Smuzhiyun __entry->ssn, 816*4882a593Smuzhiyun __entry->opcode, 817*4882a593Smuzhiyun __entry->send_flags 818*4882a593Smuzhiyun ) 819*4882a593Smuzhiyun ); 820*4882a593Smuzhiyun 821*4882a593Smuzhiyun DECLARE_EVENT_CLASS( 822*4882a593Smuzhiyun hfi1_do_send_template, 823*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, bool flag), 824*4882a593Smuzhiyun TP_ARGS(qp, flag), 825*4882a593Smuzhiyun TP_STRUCT__entry( 826*4882a593Smuzhiyun DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 827*4882a593Smuzhiyun __field(u32, qpn) 828*4882a593Smuzhiyun __field(bool, flag) 829*4882a593Smuzhiyun ), 830*4882a593Smuzhiyun TP_fast_assign( 831*4882a593Smuzhiyun DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 832*4882a593Smuzhiyun __entry->qpn = qp->ibqp.qp_num; 833*4882a593Smuzhiyun __entry->flag = flag; 834*4882a593Smuzhiyun ), 835*4882a593Smuzhiyun TP_printk( 836*4882a593Smuzhiyun "[%s] qpn %x flag %d", 837*4882a593Smuzhiyun __get_str(dev), 838*4882a593Smuzhiyun __entry->qpn, 839*4882a593Smuzhiyun __entry->flag 840*4882a593Smuzhiyun ) 841*4882a593Smuzhiyun ); 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun DEFINE_EVENT( 844*4882a593Smuzhiyun hfi1_do_send_template, hfi1_rc_do_send, 845*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, bool flag), 846*4882a593Smuzhiyun TP_ARGS(qp, flag) 847*4882a593Smuzhiyun ); 848*4882a593Smuzhiyun 849*4882a593Smuzhiyun DEFINE_EVENT(/* event */ 850*4882a593Smuzhiyun hfi1_do_send_template, hfi1_rc_do_tid_send, 851*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, bool flag), 852*4882a593Smuzhiyun TP_ARGS(qp, flag) 853*4882a593Smuzhiyun ); 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun DEFINE_EVENT( 856*4882a593Smuzhiyun hfi1_do_send_template, hfi1_rc_expired_time_slice, 857*4882a593Smuzhiyun TP_PROTO(struct rvt_qp *qp, bool flag), 858*4882a593Smuzhiyun TP_ARGS(qp, flag) 859*4882a593Smuzhiyun ); 860*4882a593Smuzhiyun 861*4882a593Smuzhiyun #endif /* __HFI1_TRACE_TX_H */ 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 864*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 865*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 866*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace_tx 867*4882a593Smuzhiyun #include <trace/define_trace.h> 868