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_IBHDRS_H) || defined(TRACE_HEADER_MULTI_READ) 48*4882a593Smuzhiyun #define __HFI1_TRACE_IBHDRS_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 55*4882a593Smuzhiyun #undef TRACE_SYSTEM 56*4882a593Smuzhiyun #define TRACE_SYSTEM hfi1_ibhdrs 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define ib_opcode_name(opcode) { IB_OPCODE_##opcode, #opcode } 59*4882a593Smuzhiyun #define show_ib_opcode(opcode) \ 60*4882a593Smuzhiyun __print_symbolic(opcode, \ 61*4882a593Smuzhiyun ib_opcode_name(RC_SEND_FIRST), \ 62*4882a593Smuzhiyun ib_opcode_name(RC_SEND_MIDDLE), \ 63*4882a593Smuzhiyun ib_opcode_name(RC_SEND_LAST), \ 64*4882a593Smuzhiyun ib_opcode_name(RC_SEND_LAST_WITH_IMMEDIATE), \ 65*4882a593Smuzhiyun ib_opcode_name(RC_SEND_ONLY), \ 66*4882a593Smuzhiyun ib_opcode_name(RC_SEND_ONLY_WITH_IMMEDIATE), \ 67*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_FIRST), \ 68*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_MIDDLE), \ 69*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_LAST), \ 70*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \ 71*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_ONLY), \ 72*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \ 73*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_READ_REQUEST), \ 74*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_READ_RESPONSE_FIRST), \ 75*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_READ_RESPONSE_MIDDLE), \ 76*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_READ_RESPONSE_LAST), \ 77*4882a593Smuzhiyun ib_opcode_name(RC_RDMA_READ_RESPONSE_ONLY), \ 78*4882a593Smuzhiyun ib_opcode_name(RC_ACKNOWLEDGE), \ 79*4882a593Smuzhiyun ib_opcode_name(RC_ATOMIC_ACKNOWLEDGE), \ 80*4882a593Smuzhiyun ib_opcode_name(RC_COMPARE_SWAP), \ 81*4882a593Smuzhiyun ib_opcode_name(RC_FETCH_ADD), \ 82*4882a593Smuzhiyun ib_opcode_name(RC_SEND_LAST_WITH_INVALIDATE), \ 83*4882a593Smuzhiyun ib_opcode_name(RC_SEND_ONLY_WITH_INVALIDATE), \ 84*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_WRITE_REQ), \ 85*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_WRITE_RESP), \ 86*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_WRITE_DATA), \ 87*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_WRITE_DATA_LAST), \ 88*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_READ_REQ), \ 89*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_READ_RESP), \ 90*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_RESYNC), \ 91*4882a593Smuzhiyun ib_opcode_name(TID_RDMA_ACK), \ 92*4882a593Smuzhiyun ib_opcode_name(UC_SEND_FIRST), \ 93*4882a593Smuzhiyun ib_opcode_name(UC_SEND_MIDDLE), \ 94*4882a593Smuzhiyun ib_opcode_name(UC_SEND_LAST), \ 95*4882a593Smuzhiyun ib_opcode_name(UC_SEND_LAST_WITH_IMMEDIATE), \ 96*4882a593Smuzhiyun ib_opcode_name(UC_SEND_ONLY), \ 97*4882a593Smuzhiyun ib_opcode_name(UC_SEND_ONLY_WITH_IMMEDIATE), \ 98*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_FIRST), \ 99*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_MIDDLE), \ 100*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_LAST), \ 101*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \ 102*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_ONLY), \ 103*4882a593Smuzhiyun ib_opcode_name(UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \ 104*4882a593Smuzhiyun ib_opcode_name(UD_SEND_ONLY), \ 105*4882a593Smuzhiyun ib_opcode_name(UD_SEND_ONLY_WITH_IMMEDIATE), \ 106*4882a593Smuzhiyun ib_opcode_name(CNP)) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun u8 ibhdr_exhdr_len(struct ib_header *hdr); 109*4882a593Smuzhiyun const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode, 110*4882a593Smuzhiyun u8 l4, u32 dest_qpn, u32 src_qpn, 111*4882a593Smuzhiyun void *ehdrs); 112*4882a593Smuzhiyun u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opah); 113*4882a593Smuzhiyun u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet); 114*4882a593Smuzhiyun const char *hfi1_trace_get_packet_l4_str(u8 l4); 115*4882a593Smuzhiyun void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr, 116*4882a593Smuzhiyun u8 *ack, bool *becn, bool *fecn, u8 *mig, 117*4882a593Smuzhiyun u8 *se, u8 *pad, u8 *opcode, u8 *tver, 118*4882a593Smuzhiyun u16 *pkey, u32 *psn, u32 *qpn); 119*4882a593Smuzhiyun void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5, 120*4882a593Smuzhiyun u8 *lnh, u8 *lver, u8 *sl, u8 *sc, 121*4882a593Smuzhiyun u16 *len, u32 *dlid, u32 *slid); 122*4882a593Smuzhiyun void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr, 123*4882a593Smuzhiyun u8 *ack, u8 *mig, u8 *opcode, 124*4882a593Smuzhiyun u8 *pad, u8 *se, u8 *tver, 125*4882a593Smuzhiyun u32 *psn, u32 *qpn); 126*4882a593Smuzhiyun void hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr, 127*4882a593Smuzhiyun u8 *age, bool *becn, bool *fecn, 128*4882a593Smuzhiyun u8 *l4, u8 *rc, u8 *sc, 129*4882a593Smuzhiyun u16 *entropy, u16 *len, u16 *pkey, 130*4882a593Smuzhiyun u32 *dlid, u32 *slid); 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun const char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass, 133*4882a593Smuzhiyun u8 age, bool becn, bool fecn, u8 l4, 134*4882a593Smuzhiyun u8 lnh, const char *lnh_name, u8 lver, 135*4882a593Smuzhiyun u8 rc, u8 sc, u8 sl, u16 entropy, 136*4882a593Smuzhiyun u16 len, u16 pkey, u32 dlid, u32 slid); 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun const char *hfi1_trace_fmt_rest(struct trace_seq *p, bool bypass, u8 l4, 139*4882a593Smuzhiyun u8 ack, bool becn, bool fecn, u8 mig, 140*4882a593Smuzhiyun u8 se, u8 pad, u8 opcode, const char *opname, 141*4882a593Smuzhiyun u8 tver, u16 pkey, u32 psn, u32 qpn, 142*4882a593Smuzhiyun u32 dest_qpn, u32 src_qpn); 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun const char *hfi1_trace_get_packet_l2_str(u8 l2); 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define __parse_ib_ehdrs(op, l4, dest_qpn, src_qpn, ehdrs) \ 147*4882a593Smuzhiyun parse_everbs_hdrs(p, op, l4, dest_qpn, src_qpn, ehdrs) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun #define lrh_name(lrh) { HFI1_##lrh, #lrh } 150*4882a593Smuzhiyun #define show_lnh(lrh) \ 151*4882a593Smuzhiyun __print_symbolic(lrh, \ 152*4882a593Smuzhiyun lrh_name(LRH_BTH), \ 153*4882a593Smuzhiyun lrh_name(LRH_GRH)) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, 156*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 157*4882a593Smuzhiyun struct hfi1_packet *packet, 158*4882a593Smuzhiyun bool sc5), 159*4882a593Smuzhiyun TP_ARGS(dd, packet, sc5), 160*4882a593Smuzhiyun TP_STRUCT__entry( 161*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 162*4882a593Smuzhiyun __field(u8, etype) 163*4882a593Smuzhiyun __field(u8, ack) 164*4882a593Smuzhiyun __field(u8, age) 165*4882a593Smuzhiyun __field(bool, becn) 166*4882a593Smuzhiyun __field(bool, fecn) 167*4882a593Smuzhiyun __field(u8, l2) 168*4882a593Smuzhiyun __field(u8, l4) 169*4882a593Smuzhiyun __field(u8, lnh) 170*4882a593Smuzhiyun __field(u8, lver) 171*4882a593Smuzhiyun __field(u8, mig) 172*4882a593Smuzhiyun __field(u8, opcode) 173*4882a593Smuzhiyun __field(u8, pad) 174*4882a593Smuzhiyun __field(u8, rc) 175*4882a593Smuzhiyun __field(u8, sc) 176*4882a593Smuzhiyun __field(u8, se) 177*4882a593Smuzhiyun __field(u8, sl) 178*4882a593Smuzhiyun __field(u8, tver) 179*4882a593Smuzhiyun __field(u16, entropy) 180*4882a593Smuzhiyun __field(u16, len) 181*4882a593Smuzhiyun __field(u16, pkey) 182*4882a593Smuzhiyun __field(u32, dlid) 183*4882a593Smuzhiyun __field(u32, psn) 184*4882a593Smuzhiyun __field(u32, qpn) 185*4882a593Smuzhiyun __field(u32, slid) 186*4882a593Smuzhiyun __field(u32, dest_qpn) 187*4882a593Smuzhiyun __field(u32, src_qpn) 188*4882a593Smuzhiyun /* extended headers */ 189*4882a593Smuzhiyun __dynamic_array(u8, ehdrs, 190*4882a593Smuzhiyun hfi1_trace_packet_hdr_len(packet)) 191*4882a593Smuzhiyun ), 192*4882a593Smuzhiyun TP_fast_assign( 193*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun __entry->etype = packet->etype; 196*4882a593Smuzhiyun __entry->l2 = hfi1_16B_get_l2(packet->hdr); 197*4882a593Smuzhiyun __entry->dest_qpn = 0; 198*4882a593Smuzhiyun __entry->src_qpn = 0; 199*4882a593Smuzhiyun if (__entry->etype == RHF_RCV_TYPE_BYPASS) { 200*4882a593Smuzhiyun hfi1_trace_parse_16b_hdr(packet->hdr, 201*4882a593Smuzhiyun &__entry->age, 202*4882a593Smuzhiyun &__entry->becn, 203*4882a593Smuzhiyun &__entry->fecn, 204*4882a593Smuzhiyun &__entry->l4, 205*4882a593Smuzhiyun &__entry->rc, 206*4882a593Smuzhiyun &__entry->sc, 207*4882a593Smuzhiyun &__entry->entropy, 208*4882a593Smuzhiyun &__entry->len, 209*4882a593Smuzhiyun &__entry->pkey, 210*4882a593Smuzhiyun &__entry->dlid, 211*4882a593Smuzhiyun &__entry->slid); 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun if (__entry->l4 == OPA_16B_L4_FM) { 214*4882a593Smuzhiyun __entry->opcode = IB_OPCODE_UD_SEND_ONLY; 215*4882a593Smuzhiyun __entry->dest_qpn = hfi1_16B_get_dest_qpn(packet->mgmt); 216*4882a593Smuzhiyun __entry->src_qpn = hfi1_16B_get_src_qpn(packet->mgmt); 217*4882a593Smuzhiyun } else { 218*4882a593Smuzhiyun hfi1_trace_parse_16b_bth(packet->ohdr, 219*4882a593Smuzhiyun &__entry->ack, 220*4882a593Smuzhiyun &__entry->mig, 221*4882a593Smuzhiyun &__entry->opcode, 222*4882a593Smuzhiyun &__entry->pad, 223*4882a593Smuzhiyun &__entry->se, 224*4882a593Smuzhiyun &__entry->tver, 225*4882a593Smuzhiyun &__entry->psn, 226*4882a593Smuzhiyun &__entry->qpn); 227*4882a593Smuzhiyun } 228*4882a593Smuzhiyun } else { 229*4882a593Smuzhiyun __entry->l4 = OPA_16B_L4_9B; 230*4882a593Smuzhiyun hfi1_trace_parse_9b_hdr(packet->hdr, sc5, 231*4882a593Smuzhiyun &__entry->lnh, 232*4882a593Smuzhiyun &__entry->lver, 233*4882a593Smuzhiyun &__entry->sl, 234*4882a593Smuzhiyun &__entry->sc, 235*4882a593Smuzhiyun &__entry->len, 236*4882a593Smuzhiyun &__entry->dlid, 237*4882a593Smuzhiyun &__entry->slid); 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun hfi1_trace_parse_9b_bth(packet->ohdr, 240*4882a593Smuzhiyun &__entry->ack, 241*4882a593Smuzhiyun &__entry->becn, 242*4882a593Smuzhiyun &__entry->fecn, 243*4882a593Smuzhiyun &__entry->mig, 244*4882a593Smuzhiyun &__entry->se, 245*4882a593Smuzhiyun &__entry->pad, 246*4882a593Smuzhiyun &__entry->opcode, 247*4882a593Smuzhiyun &__entry->tver, 248*4882a593Smuzhiyun &__entry->pkey, 249*4882a593Smuzhiyun &__entry->psn, 250*4882a593Smuzhiyun &__entry->qpn); 251*4882a593Smuzhiyun } 252*4882a593Smuzhiyun /* extended headers */ 253*4882a593Smuzhiyun if (__entry->l4 != OPA_16B_L4_FM) 254*4882a593Smuzhiyun memcpy(__get_dynamic_array(ehdrs), 255*4882a593Smuzhiyun &packet->ohdr->u, 256*4882a593Smuzhiyun __get_dynamic_array_len(ehdrs)); 257*4882a593Smuzhiyun ), 258*4882a593Smuzhiyun TP_printk("[%s] (%s) %s %s hlen:%d %s", 259*4882a593Smuzhiyun __get_str(dev), 260*4882a593Smuzhiyun __entry->etype != RHF_RCV_TYPE_BYPASS ? 261*4882a593Smuzhiyun show_packettype(__entry->etype) : 262*4882a593Smuzhiyun hfi1_trace_get_packet_l2_str( 263*4882a593Smuzhiyun __entry->l2), 264*4882a593Smuzhiyun hfi1_trace_fmt_lrh(p, 265*4882a593Smuzhiyun __entry->etype == 266*4882a593Smuzhiyun RHF_RCV_TYPE_BYPASS, 267*4882a593Smuzhiyun __entry->age, 268*4882a593Smuzhiyun __entry->becn, 269*4882a593Smuzhiyun __entry->fecn, 270*4882a593Smuzhiyun __entry->l4, 271*4882a593Smuzhiyun __entry->lnh, 272*4882a593Smuzhiyun show_lnh(__entry->lnh), 273*4882a593Smuzhiyun __entry->lver, 274*4882a593Smuzhiyun __entry->rc, 275*4882a593Smuzhiyun __entry->sc, 276*4882a593Smuzhiyun __entry->sl, 277*4882a593Smuzhiyun __entry->entropy, 278*4882a593Smuzhiyun __entry->len, 279*4882a593Smuzhiyun __entry->pkey, 280*4882a593Smuzhiyun __entry->dlid, 281*4882a593Smuzhiyun __entry->slid), 282*4882a593Smuzhiyun hfi1_trace_fmt_rest(p, 283*4882a593Smuzhiyun __entry->etype == 284*4882a593Smuzhiyun RHF_RCV_TYPE_BYPASS, 285*4882a593Smuzhiyun __entry->l4, 286*4882a593Smuzhiyun __entry->ack, 287*4882a593Smuzhiyun __entry->becn, 288*4882a593Smuzhiyun __entry->fecn, 289*4882a593Smuzhiyun __entry->mig, 290*4882a593Smuzhiyun __entry->se, 291*4882a593Smuzhiyun __entry->pad, 292*4882a593Smuzhiyun __entry->opcode, 293*4882a593Smuzhiyun show_ib_opcode(__entry->opcode), 294*4882a593Smuzhiyun __entry->tver, 295*4882a593Smuzhiyun __entry->pkey, 296*4882a593Smuzhiyun __entry->psn, 297*4882a593Smuzhiyun __entry->qpn, 298*4882a593Smuzhiyun __entry->dest_qpn, 299*4882a593Smuzhiyun __entry->src_qpn), 300*4882a593Smuzhiyun /* extended headers */ 301*4882a593Smuzhiyun __get_dynamic_array_len(ehdrs), 302*4882a593Smuzhiyun __parse_ib_ehdrs( 303*4882a593Smuzhiyun __entry->opcode, 304*4882a593Smuzhiyun __entry->l4, 305*4882a593Smuzhiyun __entry->dest_qpn, 306*4882a593Smuzhiyun __entry->src_qpn, 307*4882a593Smuzhiyun (void *)__get_dynamic_array(ehdrs)) 308*4882a593Smuzhiyun ) 309*4882a593Smuzhiyun ); 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun DEFINE_EVENT(hfi1_input_ibhdr_template, input_ibhdr, 312*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 313*4882a593Smuzhiyun struct hfi1_packet *packet, bool sc5), 314*4882a593Smuzhiyun TP_ARGS(dd, packet, sc5)); 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, 317*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 318*4882a593Smuzhiyun struct hfi1_opa_header *opah, bool sc5), 319*4882a593Smuzhiyun TP_ARGS(dd, opah, sc5), 320*4882a593Smuzhiyun TP_STRUCT__entry( 321*4882a593Smuzhiyun DD_DEV_ENTRY(dd) 322*4882a593Smuzhiyun __field(u8, hdr_type) 323*4882a593Smuzhiyun __field(u8, ack) 324*4882a593Smuzhiyun __field(u8, age) 325*4882a593Smuzhiyun __field(bool, becn) 326*4882a593Smuzhiyun __field(bool, fecn) 327*4882a593Smuzhiyun __field(u8, l4) 328*4882a593Smuzhiyun __field(u8, lnh) 329*4882a593Smuzhiyun __field(u8, lver) 330*4882a593Smuzhiyun __field(u8, mig) 331*4882a593Smuzhiyun __field(u8, opcode) 332*4882a593Smuzhiyun __field(u8, pad) 333*4882a593Smuzhiyun __field(u8, rc) 334*4882a593Smuzhiyun __field(u8, sc) 335*4882a593Smuzhiyun __field(u8, se) 336*4882a593Smuzhiyun __field(u8, sl) 337*4882a593Smuzhiyun __field(u8, tver) 338*4882a593Smuzhiyun __field(u16, entropy) 339*4882a593Smuzhiyun __field(u16, len) 340*4882a593Smuzhiyun __field(u16, pkey) 341*4882a593Smuzhiyun __field(u32, dlid) 342*4882a593Smuzhiyun __field(u32, psn) 343*4882a593Smuzhiyun __field(u32, qpn) 344*4882a593Smuzhiyun __field(u32, slid) 345*4882a593Smuzhiyun __field(u32, dest_qpn) 346*4882a593Smuzhiyun __field(u32, src_qpn) 347*4882a593Smuzhiyun /* extended headers */ 348*4882a593Smuzhiyun __dynamic_array(u8, ehdrs, 349*4882a593Smuzhiyun hfi1_trace_opa_hdr_len(opah)) 350*4882a593Smuzhiyun ), 351*4882a593Smuzhiyun TP_fast_assign( 352*4882a593Smuzhiyun struct ib_other_headers *ohdr; 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun DD_DEV_ASSIGN(dd); 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun __entry->hdr_type = opah->hdr_type; 357*4882a593Smuzhiyun __entry->dest_qpn = 0; 358*4882a593Smuzhiyun __entry->src_qpn = 0; 359*4882a593Smuzhiyun if (__entry->hdr_type) { 360*4882a593Smuzhiyun hfi1_trace_parse_16b_hdr(&opah->opah, 361*4882a593Smuzhiyun &__entry->age, 362*4882a593Smuzhiyun &__entry->becn, 363*4882a593Smuzhiyun &__entry->fecn, 364*4882a593Smuzhiyun &__entry->l4, 365*4882a593Smuzhiyun &__entry->rc, 366*4882a593Smuzhiyun &__entry->sc, 367*4882a593Smuzhiyun &__entry->entropy, 368*4882a593Smuzhiyun &__entry->len, 369*4882a593Smuzhiyun &__entry->pkey, 370*4882a593Smuzhiyun &__entry->dlid, 371*4882a593Smuzhiyun &__entry->slid); 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun if (__entry->l4 == OPA_16B_L4_FM) { 374*4882a593Smuzhiyun ohdr = NULL; 375*4882a593Smuzhiyun __entry->opcode = IB_OPCODE_UD_SEND_ONLY; 376*4882a593Smuzhiyun __entry->dest_qpn = hfi1_16B_get_dest_qpn(&opah->opah.u.mgmt); 377*4882a593Smuzhiyun __entry->src_qpn = hfi1_16B_get_src_qpn(&opah->opah.u.mgmt); 378*4882a593Smuzhiyun } else { 379*4882a593Smuzhiyun if (__entry->l4 == OPA_16B_L4_IB_LOCAL) 380*4882a593Smuzhiyun ohdr = &opah->opah.u.oth; 381*4882a593Smuzhiyun else 382*4882a593Smuzhiyun ohdr = &opah->opah.u.l.oth; 383*4882a593Smuzhiyun hfi1_trace_parse_16b_bth(ohdr, 384*4882a593Smuzhiyun &__entry->ack, 385*4882a593Smuzhiyun &__entry->mig, 386*4882a593Smuzhiyun &__entry->opcode, 387*4882a593Smuzhiyun &__entry->pad, 388*4882a593Smuzhiyun &__entry->se, 389*4882a593Smuzhiyun &__entry->tver, 390*4882a593Smuzhiyun &__entry->psn, 391*4882a593Smuzhiyun &__entry->qpn); 392*4882a593Smuzhiyun } 393*4882a593Smuzhiyun } else { 394*4882a593Smuzhiyun __entry->l4 = OPA_16B_L4_9B; 395*4882a593Smuzhiyun hfi1_trace_parse_9b_hdr(&opah->ibh, sc5, 396*4882a593Smuzhiyun &__entry->lnh, 397*4882a593Smuzhiyun &__entry->lver, 398*4882a593Smuzhiyun &__entry->sl, 399*4882a593Smuzhiyun &__entry->sc, 400*4882a593Smuzhiyun &__entry->len, 401*4882a593Smuzhiyun &__entry->dlid, 402*4882a593Smuzhiyun &__entry->slid); 403*4882a593Smuzhiyun if (__entry->lnh == HFI1_LRH_BTH) 404*4882a593Smuzhiyun ohdr = &opah->ibh.u.oth; 405*4882a593Smuzhiyun else 406*4882a593Smuzhiyun ohdr = &opah->ibh.u.l.oth; 407*4882a593Smuzhiyun hfi1_trace_parse_9b_bth(ohdr, 408*4882a593Smuzhiyun &__entry->ack, 409*4882a593Smuzhiyun &__entry->becn, 410*4882a593Smuzhiyun &__entry->fecn, 411*4882a593Smuzhiyun &__entry->mig, 412*4882a593Smuzhiyun &__entry->se, 413*4882a593Smuzhiyun &__entry->pad, 414*4882a593Smuzhiyun &__entry->opcode, 415*4882a593Smuzhiyun &__entry->tver, 416*4882a593Smuzhiyun &__entry->pkey, 417*4882a593Smuzhiyun &__entry->psn, 418*4882a593Smuzhiyun &__entry->qpn); 419*4882a593Smuzhiyun } 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* extended headers */ 422*4882a593Smuzhiyun if (__entry->l4 != OPA_16B_L4_FM) 423*4882a593Smuzhiyun memcpy(__get_dynamic_array(ehdrs), 424*4882a593Smuzhiyun &ohdr->u, __get_dynamic_array_len(ehdrs)); 425*4882a593Smuzhiyun ), 426*4882a593Smuzhiyun TP_printk("[%s] (%s) %s %s hlen:%d %s", 427*4882a593Smuzhiyun __get_str(dev), 428*4882a593Smuzhiyun hfi1_trace_get_packet_l4_str(__entry->l4), 429*4882a593Smuzhiyun hfi1_trace_fmt_lrh(p, 430*4882a593Smuzhiyun !!__entry->hdr_type, 431*4882a593Smuzhiyun __entry->age, 432*4882a593Smuzhiyun __entry->becn, 433*4882a593Smuzhiyun __entry->fecn, 434*4882a593Smuzhiyun __entry->l4, 435*4882a593Smuzhiyun __entry->lnh, 436*4882a593Smuzhiyun show_lnh(__entry->lnh), 437*4882a593Smuzhiyun __entry->lver, 438*4882a593Smuzhiyun __entry->rc, 439*4882a593Smuzhiyun __entry->sc, 440*4882a593Smuzhiyun __entry->sl, 441*4882a593Smuzhiyun __entry->entropy, 442*4882a593Smuzhiyun __entry->len, 443*4882a593Smuzhiyun __entry->pkey, 444*4882a593Smuzhiyun __entry->dlid, 445*4882a593Smuzhiyun __entry->slid), 446*4882a593Smuzhiyun hfi1_trace_fmt_rest(p, 447*4882a593Smuzhiyun !!__entry->hdr_type, 448*4882a593Smuzhiyun __entry->l4, 449*4882a593Smuzhiyun __entry->ack, 450*4882a593Smuzhiyun __entry->becn, 451*4882a593Smuzhiyun __entry->fecn, 452*4882a593Smuzhiyun __entry->mig, 453*4882a593Smuzhiyun __entry->se, 454*4882a593Smuzhiyun __entry->pad, 455*4882a593Smuzhiyun __entry->opcode, 456*4882a593Smuzhiyun show_ib_opcode(__entry->opcode), 457*4882a593Smuzhiyun __entry->tver, 458*4882a593Smuzhiyun __entry->pkey, 459*4882a593Smuzhiyun __entry->psn, 460*4882a593Smuzhiyun __entry->qpn, 461*4882a593Smuzhiyun __entry->dest_qpn, 462*4882a593Smuzhiyun __entry->src_qpn), 463*4882a593Smuzhiyun /* extended headers */ 464*4882a593Smuzhiyun __get_dynamic_array_len(ehdrs), 465*4882a593Smuzhiyun __parse_ib_ehdrs( 466*4882a593Smuzhiyun __entry->opcode, 467*4882a593Smuzhiyun __entry->l4, 468*4882a593Smuzhiyun __entry->dest_qpn, 469*4882a593Smuzhiyun __entry->src_qpn, 470*4882a593Smuzhiyun (void *)__get_dynamic_array(ehdrs)) 471*4882a593Smuzhiyun ) 472*4882a593Smuzhiyun ); 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun DEFINE_EVENT(hfi1_output_ibhdr_template, pio_output_ibhdr, 475*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 476*4882a593Smuzhiyun struct hfi1_opa_header *opah, bool sc5), 477*4882a593Smuzhiyun TP_ARGS(dd, opah, sc5)); 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun DEFINE_EVENT(hfi1_output_ibhdr_template, ack_output_ibhdr, 480*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 481*4882a593Smuzhiyun struct hfi1_opa_header *opah, bool sc5), 482*4882a593Smuzhiyun TP_ARGS(dd, opah, sc5)); 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun DEFINE_EVENT(hfi1_output_ibhdr_template, sdma_output_ibhdr, 485*4882a593Smuzhiyun TP_PROTO(struct hfi1_devdata *dd, 486*4882a593Smuzhiyun struct hfi1_opa_header *opah, bool sc5), 487*4882a593Smuzhiyun TP_ARGS(dd, opah, sc5)); 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun #endif /* __HFI1_TRACE_IBHDRS_H */ 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 493*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 494*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 495*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace_ibhdrs 496*4882a593Smuzhiyun #include <trace/define_trace.h> 497