1f48ad614SDennis Dalessandro /* 25d18ee67SSebastian Sanchez * Copyright(c) 2015 - 2018 Intel Corporation. 3f48ad614SDennis Dalessandro * 4f48ad614SDennis Dalessandro * This file is provided under a dual BSD/GPLv2 license. When using or 5f48ad614SDennis Dalessandro * redistributing this file, you may do so under either license. 6f48ad614SDennis Dalessandro * 7f48ad614SDennis Dalessandro * GPL LICENSE SUMMARY 8f48ad614SDennis Dalessandro * 9f48ad614SDennis Dalessandro * This program is free software; you can redistribute it and/or modify 10f48ad614SDennis Dalessandro * it under the terms of version 2 of the GNU General Public License as 11f48ad614SDennis Dalessandro * published by the Free Software Foundation. 12f48ad614SDennis Dalessandro * 13f48ad614SDennis Dalessandro * This program is distributed in the hope that it will be useful, but 14f48ad614SDennis Dalessandro * WITHOUT ANY WARRANTY; without even the implied warranty of 15f48ad614SDennis Dalessandro * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16f48ad614SDennis Dalessandro * General Public License for more details. 17f48ad614SDennis Dalessandro * 18f48ad614SDennis Dalessandro * BSD LICENSE 19f48ad614SDennis Dalessandro * 20f48ad614SDennis Dalessandro * Redistribution and use in source and binary forms, with or without 21f48ad614SDennis Dalessandro * modification, are permitted provided that the following conditions 22f48ad614SDennis Dalessandro * are met: 23f48ad614SDennis Dalessandro * 24f48ad614SDennis Dalessandro * - Redistributions of source code must retain the above copyright 25f48ad614SDennis Dalessandro * notice, this list of conditions and the following disclaimer. 26f48ad614SDennis Dalessandro * - Redistributions in binary form must reproduce the above copyright 27f48ad614SDennis Dalessandro * notice, this list of conditions and the following disclaimer in 28f48ad614SDennis Dalessandro * the documentation and/or other materials provided with the 29f48ad614SDennis Dalessandro * distribution. 30f48ad614SDennis Dalessandro * - Neither the name of Intel Corporation nor the names of its 31f48ad614SDennis Dalessandro * contributors may be used to endorse or promote products derived 32f48ad614SDennis Dalessandro * from this software without specific prior written permission. 33f48ad614SDennis Dalessandro * 34f48ad614SDennis Dalessandro * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35f48ad614SDennis Dalessandro * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36f48ad614SDennis Dalessandro * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37f48ad614SDennis Dalessandro * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38f48ad614SDennis Dalessandro * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39f48ad614SDennis Dalessandro * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40f48ad614SDennis Dalessandro * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41f48ad614SDennis Dalessandro * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42f48ad614SDennis Dalessandro * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43f48ad614SDennis Dalessandro * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44f48ad614SDennis Dalessandro * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45f48ad614SDennis Dalessandro * 46f48ad614SDennis Dalessandro */ 47f48ad614SDennis Dalessandro #define CREATE_TRACE_POINTS 48f48ad614SDennis Dalessandro #include "trace.h" 49f48ad614SDennis Dalessandro 50863cf89dSDon Hiatt static u8 __get_ib_hdr_len(struct ib_header *hdr) 51f48ad614SDennis Dalessandro { 52261a4351SMike Marciniszyn struct ib_other_headers *ohdr; 53f48ad614SDennis Dalessandro u8 opcode; 54f48ad614SDennis Dalessandro 55cb427057SDon Hiatt if (ib_get_lnh(hdr) == HFI1_LRH_BTH) 56f48ad614SDennis Dalessandro ohdr = &hdr->u.oth; 57f48ad614SDennis Dalessandro else 58f48ad614SDennis Dalessandro ohdr = &hdr->u.l.oth; 59cb427057SDon Hiatt opcode = ib_bth_get_opcode(ohdr); 60f48ad614SDennis Dalessandro return hdr_len_by_opcode[opcode] == 0 ? 61f48ad614SDennis Dalessandro 0 : hdr_len_by_opcode[opcode] - (12 + 8); 62f48ad614SDennis Dalessandro } 63f48ad614SDennis Dalessandro 64863cf89dSDon Hiatt static u8 __get_16b_hdr_len(struct hfi1_16b_header *hdr) 65863cf89dSDon Hiatt { 66863cf89dSDon Hiatt struct ib_other_headers *ohdr; 67863cf89dSDon Hiatt u8 opcode; 68863cf89dSDon Hiatt 69863cf89dSDon Hiatt if (hfi1_16B_get_l4(hdr) == OPA_16B_L4_IB_LOCAL) 70863cf89dSDon Hiatt ohdr = &hdr->u.oth; 71863cf89dSDon Hiatt else 72863cf89dSDon Hiatt ohdr = &hdr->u.l.oth; 73863cf89dSDon Hiatt opcode = ib_bth_get_opcode(ohdr); 74863cf89dSDon Hiatt return hdr_len_by_opcode[opcode] == 0 ? 75863cf89dSDon Hiatt 0 : hdr_len_by_opcode[opcode] - (12 + 8 + 8); 76863cf89dSDon Hiatt } 77863cf89dSDon Hiatt 78863cf89dSDon Hiatt u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet) 79863cf89dSDon Hiatt { 80863cf89dSDon Hiatt if (packet->etype != RHF_RCV_TYPE_BYPASS) 81863cf89dSDon Hiatt return __get_ib_hdr_len(packet->hdr); 82863cf89dSDon Hiatt else 83863cf89dSDon Hiatt return __get_16b_hdr_len(packet->hdr); 84863cf89dSDon Hiatt } 85863cf89dSDon Hiatt 86863cf89dSDon Hiatt u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opa_hdr) 87863cf89dSDon Hiatt { 88863cf89dSDon Hiatt if (!opa_hdr->hdr_type) 89863cf89dSDon Hiatt return __get_ib_hdr_len(&opa_hdr->ibh); 90863cf89dSDon Hiatt else 91863cf89dSDon Hiatt return __get_16b_hdr_len(&opa_hdr->opah); 92863cf89dSDon Hiatt } 93863cf89dSDon Hiatt 94442e5566SMike Marciniszyn const char *hfi1_trace_get_packet_l4_str(u8 l4) 95228d2af1SDon Hiatt { 96442e5566SMike Marciniszyn if (l4) 97442e5566SMike Marciniszyn return "16B"; 98442e5566SMike Marciniszyn else 99442e5566SMike Marciniszyn return "9B"; 100442e5566SMike Marciniszyn } 101863cf89dSDon Hiatt 102442e5566SMike Marciniszyn const char *hfi1_trace_get_packet_l2_str(u8 l2) 103442e5566SMike Marciniszyn { 104442e5566SMike Marciniszyn switch (l2) { 105863cf89dSDon Hiatt case 0: 106863cf89dSDon Hiatt return "0"; 107863cf89dSDon Hiatt case 1: 108863cf89dSDon Hiatt return "1"; 109863cf89dSDon Hiatt case 2: 110863cf89dSDon Hiatt return "16B"; 111863cf89dSDon Hiatt case 3: 112863cf89dSDon Hiatt return "9B"; 113863cf89dSDon Hiatt } 114863cf89dSDon Hiatt return ""; 115863cf89dSDon Hiatt } 116863cf89dSDon Hiatt 117228d2af1SDon Hiatt #define IMM_PRN "imm:%d" 118228d2af1SDon Hiatt #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x" 119228d2af1SDon Hiatt #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x" 120228d2af1SDon Hiatt #define DETH_PRN "deth qkey:0x%.8x sqpn:0x%.6x" 121228d2af1SDon Hiatt #define IETH_PRN "ieth rkey:0x%.8x" 122228d2af1SDon Hiatt #define ATOMICACKETH_PRN "origdata:%llx" 123228d2af1SDon Hiatt #define ATOMICETH_PRN "vaddr:0x%llx rkey:0x%.8x sdata:%llx cdata:%llx" 124f48ad614SDennis Dalessandro 125f48ad614SDennis Dalessandro #define OP(transport, op) IB_OPCODE_## transport ## _ ## op 126f48ad614SDennis Dalessandro 127f48ad614SDennis Dalessandro static const char *parse_syndrome(u8 syndrome) 128f48ad614SDennis Dalessandro { 129f48ad614SDennis Dalessandro switch (syndrome >> 5) { 130f48ad614SDennis Dalessandro case 0: 131f48ad614SDennis Dalessandro return "ACK"; 132f48ad614SDennis Dalessandro case 1: 133f48ad614SDennis Dalessandro return "RNRNAK"; 134f48ad614SDennis Dalessandro case 3: 135f48ad614SDennis Dalessandro return "NAK"; 136f48ad614SDennis Dalessandro } 137f48ad614SDennis Dalessandro return ""; 138f48ad614SDennis Dalessandro } 139f48ad614SDennis Dalessandro 140863cf89dSDon Hiatt void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr, 141ca85bb1cSSebastian Sanchez u8 *ack, bool *becn, bool *fecn, u8 *mig, 142228d2af1SDon Hiatt u8 *se, u8 *pad, u8 *opcode, u8 *tver, 143228d2af1SDon Hiatt u16 *pkey, u32 *psn, u32 *qpn) 144228d2af1SDon Hiatt { 145228d2af1SDon Hiatt *ack = ib_bth_get_ackreq(ohdr); 146228d2af1SDon Hiatt *becn = ib_bth_get_becn(ohdr); 147228d2af1SDon Hiatt *fecn = ib_bth_get_fecn(ohdr); 148228d2af1SDon Hiatt *mig = ib_bth_get_migreq(ohdr); 149228d2af1SDon Hiatt *se = ib_bth_get_se(ohdr); 150228d2af1SDon Hiatt *pad = ib_bth_get_pad(ohdr); 151228d2af1SDon Hiatt *opcode = ib_bth_get_opcode(ohdr); 152228d2af1SDon Hiatt *tver = ib_bth_get_tver(ohdr); 153228d2af1SDon Hiatt *pkey = ib_bth_get_pkey(ohdr); 154d0a2f454SDon Hiatt *psn = mask_psn(ib_bth_get_psn(ohdr)); 155228d2af1SDon Hiatt *qpn = ib_bth_get_qpn(ohdr); 156228d2af1SDon Hiatt } 157228d2af1SDon Hiatt 158863cf89dSDon Hiatt void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr, 159863cf89dSDon Hiatt u8 *ack, u8 *mig, u8 *opcode, 160863cf89dSDon Hiatt u8 *pad, u8 *se, u8 *tver, 161863cf89dSDon Hiatt u32 *psn, u32 *qpn) 162863cf89dSDon Hiatt { 163863cf89dSDon Hiatt *ack = ib_bth_get_ackreq(ohdr); 164863cf89dSDon Hiatt *mig = ib_bth_get_migreq(ohdr); 165863cf89dSDon Hiatt *opcode = ib_bth_get_opcode(ohdr); 166863cf89dSDon Hiatt *pad = ib_bth_get_pad(ohdr); 167863cf89dSDon Hiatt *se = ib_bth_get_se(ohdr); 168863cf89dSDon Hiatt *tver = ib_bth_get_tver(ohdr); 169d0a2f454SDon Hiatt *psn = mask_psn(ib_bth_get_psn(ohdr)); 170863cf89dSDon Hiatt *qpn = ib_bth_get_qpn(ohdr); 171863cf89dSDon Hiatt } 172863cf89dSDon Hiatt 173228d2af1SDon Hiatt void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5, 174228d2af1SDon Hiatt u8 *lnh, u8 *lver, u8 *sl, u8 *sc, 175228d2af1SDon Hiatt u16 *len, u32 *dlid, u32 *slid) 176228d2af1SDon Hiatt { 177228d2af1SDon Hiatt *lnh = ib_get_lnh(hdr); 178228d2af1SDon Hiatt *lver = ib_get_lver(hdr); 179228d2af1SDon Hiatt *sl = ib_get_sl(hdr); 180228d2af1SDon Hiatt *sc = ib_get_sc(hdr) | (sc5 << 4); 181228d2af1SDon Hiatt *len = ib_get_len(hdr); 182228d2af1SDon Hiatt *dlid = ib_get_dlid(hdr); 183228d2af1SDon Hiatt *slid = ib_get_slid(hdr); 184863cf89dSDon Hiatt } 185228d2af1SDon Hiatt 186863cf89dSDon Hiatt void hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr, 187ca85bb1cSSebastian Sanchez u8 *age, bool *becn, bool *fecn, 188863cf89dSDon Hiatt u8 *l4, u8 *rc, u8 *sc, 189863cf89dSDon Hiatt u16 *entropy, u16 *len, u16 *pkey, 190863cf89dSDon Hiatt u32 *dlid, u32 *slid) 191863cf89dSDon Hiatt { 192863cf89dSDon Hiatt *age = hfi1_16B_get_age(hdr); 193863cf89dSDon Hiatt *becn = hfi1_16B_get_becn(hdr); 194863cf89dSDon Hiatt *fecn = hfi1_16B_get_fecn(hdr); 195863cf89dSDon Hiatt *l4 = hfi1_16B_get_l4(hdr); 196863cf89dSDon Hiatt *rc = hfi1_16B_get_rc(hdr); 197863cf89dSDon Hiatt *sc = hfi1_16B_get_sc(hdr); 198863cf89dSDon Hiatt *entropy = hfi1_16B_get_entropy(hdr); 199863cf89dSDon Hiatt *len = hfi1_16B_get_len(hdr); 200863cf89dSDon Hiatt *pkey = hfi1_16B_get_pkey(hdr); 201863cf89dSDon Hiatt *dlid = hfi1_16B_get_dlid(hdr); 202863cf89dSDon Hiatt *slid = hfi1_16B_get_slid(hdr); 203863cf89dSDon Hiatt } 204863cf89dSDon Hiatt 205863cf89dSDon Hiatt #define LRH_PRN "len:%d sc:%d dlid:0x%.4x slid:0x%.4x " 206863cf89dSDon Hiatt #define LRH_9B_PRN "lnh:%d,%s lver:%d sl:%d" 207863cf89dSDon Hiatt #define LRH_16B_PRN "age:%d becn:%d fecn:%d l4:%d " \ 208863cf89dSDon Hiatt "rc:%d sc:%d pkey:0x%.4x entropy:0x%.4x" 209863cf89dSDon Hiatt const char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass, 210ca85bb1cSSebastian Sanchez u8 age, bool becn, bool fecn, u8 l4, 211863cf89dSDon Hiatt u8 lnh, const char *lnh_name, u8 lver, 212863cf89dSDon Hiatt u8 rc, u8 sc, u8 sl, u16 entropy, 213863cf89dSDon Hiatt u16 len, u16 pkey, u32 dlid, u32 slid) 214863cf89dSDon Hiatt { 215863cf89dSDon Hiatt const char *ret = trace_seq_buffer_ptr(p); 216863cf89dSDon Hiatt 217863cf89dSDon Hiatt trace_seq_printf(p, LRH_PRN, len, sc, dlid, slid); 218863cf89dSDon Hiatt 219863cf89dSDon Hiatt if (bypass) 220863cf89dSDon Hiatt trace_seq_printf(p, LRH_16B_PRN, 221863cf89dSDon Hiatt age, becn, fecn, l4, rc, sc, pkey, entropy); 222863cf89dSDon Hiatt 223228d2af1SDon Hiatt else 224863cf89dSDon Hiatt trace_seq_printf(p, LRH_9B_PRN, 225863cf89dSDon Hiatt lnh, lnh_name, lver, sl); 226863cf89dSDon Hiatt trace_seq_putc(p, 0); 227863cf89dSDon Hiatt 228863cf89dSDon Hiatt return ret; 229863cf89dSDon Hiatt } 230863cf89dSDon Hiatt 231863cf89dSDon Hiatt #define BTH_9B_PRN \ 232863cf89dSDon Hiatt "op:0x%.2x,%s se:%d m:%d pad:%d tver:%d pkey:0x%.4x " \ 233863cf89dSDon Hiatt "f:%d b:%d qpn:0x%.6x a:%d psn:0x%.8x" 234863cf89dSDon Hiatt #define BTH_16B_PRN \ 235863cf89dSDon Hiatt "op:0x%.2x,%s se:%d m:%d pad:%d tver:%d " \ 236863cf89dSDon Hiatt "qpn:0x%.6x a:%d psn:0x%.8x" 237863cf89dSDon Hiatt const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass, 238ca85bb1cSSebastian Sanchez u8 ack, bool becn, bool fecn, u8 mig, 239863cf89dSDon Hiatt u8 se, u8 pad, u8 opcode, const char *opname, 240863cf89dSDon Hiatt u8 tver, u16 pkey, u32 psn, u32 qpn) 241863cf89dSDon Hiatt { 242863cf89dSDon Hiatt const char *ret = trace_seq_buffer_ptr(p); 243863cf89dSDon Hiatt 244863cf89dSDon Hiatt if (bypass) 245863cf89dSDon Hiatt trace_seq_printf(p, BTH_16B_PRN, 246863cf89dSDon Hiatt opcode, opname, 247863cf89dSDon Hiatt se, mig, pad, tver, qpn, ack, psn); 248863cf89dSDon Hiatt 249863cf89dSDon Hiatt else 250863cf89dSDon Hiatt trace_seq_printf(p, BTH_9B_PRN, 251863cf89dSDon Hiatt opcode, opname, 252863cf89dSDon Hiatt se, mig, pad, tver, pkey, fecn, becn, 253863cf89dSDon Hiatt qpn, ack, psn); 254863cf89dSDon Hiatt trace_seq_putc(p, 0); 255863cf89dSDon Hiatt 256863cf89dSDon Hiatt return ret; 257228d2af1SDon Hiatt } 258228d2af1SDon Hiatt 259f48ad614SDennis Dalessandro const char *parse_everbs_hdrs( 260f48ad614SDennis Dalessandro struct trace_seq *p, 261f48ad614SDennis Dalessandro u8 opcode, 262f48ad614SDennis Dalessandro void *ehdrs) 263f48ad614SDennis Dalessandro { 264f48ad614SDennis Dalessandro union ib_ehdrs *eh = ehdrs; 265f48ad614SDennis Dalessandro const char *ret = trace_seq_buffer_ptr(p); 266f48ad614SDennis Dalessandro 267f48ad614SDennis Dalessandro switch (opcode) { 268f48ad614SDennis Dalessandro /* imm */ 269f48ad614SDennis Dalessandro case OP(RC, SEND_LAST_WITH_IMMEDIATE): 270f48ad614SDennis Dalessandro case OP(UC, SEND_LAST_WITH_IMMEDIATE): 271f48ad614SDennis Dalessandro case OP(RC, SEND_ONLY_WITH_IMMEDIATE): 272f48ad614SDennis Dalessandro case OP(UC, SEND_ONLY_WITH_IMMEDIATE): 273f48ad614SDennis Dalessandro case OP(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE): 274f48ad614SDennis Dalessandro case OP(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE): 275f48ad614SDennis Dalessandro trace_seq_printf(p, IMM_PRN, 276f48ad614SDennis Dalessandro be32_to_cpu(eh->imm_data)); 277f48ad614SDennis Dalessandro break; 278f48ad614SDennis Dalessandro /* reth + imm */ 279f48ad614SDennis Dalessandro case OP(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE): 280f48ad614SDennis Dalessandro case OP(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE): 281f48ad614SDennis Dalessandro trace_seq_printf(p, RETH_PRN " " IMM_PRN, 282261a4351SMike Marciniszyn get_ib_reth_vaddr(&eh->rc.reth), 283f48ad614SDennis Dalessandro be32_to_cpu(eh->rc.reth.rkey), 284f48ad614SDennis Dalessandro be32_to_cpu(eh->rc.reth.length), 285f48ad614SDennis Dalessandro be32_to_cpu(eh->rc.imm_data)); 286f48ad614SDennis Dalessandro break; 287f48ad614SDennis Dalessandro /* reth */ 288f48ad614SDennis Dalessandro case OP(RC, RDMA_READ_REQUEST): 289f48ad614SDennis Dalessandro case OP(RC, RDMA_WRITE_FIRST): 290f48ad614SDennis Dalessandro case OP(UC, RDMA_WRITE_FIRST): 291f48ad614SDennis Dalessandro case OP(RC, RDMA_WRITE_ONLY): 292f48ad614SDennis Dalessandro case OP(UC, RDMA_WRITE_ONLY): 293f48ad614SDennis Dalessandro trace_seq_printf(p, RETH_PRN, 294261a4351SMike Marciniszyn get_ib_reth_vaddr(&eh->rc.reth), 295f48ad614SDennis Dalessandro be32_to_cpu(eh->rc.reth.rkey), 296f48ad614SDennis Dalessandro be32_to_cpu(eh->rc.reth.length)); 297f48ad614SDennis Dalessandro break; 298f48ad614SDennis Dalessandro case OP(RC, RDMA_READ_RESPONSE_FIRST): 299f48ad614SDennis Dalessandro case OP(RC, RDMA_READ_RESPONSE_LAST): 300f48ad614SDennis Dalessandro case OP(RC, RDMA_READ_RESPONSE_ONLY): 301f48ad614SDennis Dalessandro case OP(RC, ACKNOWLEDGE): 302f48ad614SDennis Dalessandro trace_seq_printf(p, AETH_PRN, be32_to_cpu(eh->aeth) >> 24, 303f48ad614SDennis Dalessandro parse_syndrome(be32_to_cpu(eh->aeth) >> 24), 304832666c1SDon Hiatt be32_to_cpu(eh->aeth) & IB_MSN_MASK); 305f48ad614SDennis Dalessandro break; 306f48ad614SDennis Dalessandro /* aeth + atomicacketh */ 307f48ad614SDennis Dalessandro case OP(RC, ATOMIC_ACKNOWLEDGE): 308f48ad614SDennis Dalessandro trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN, 309f48ad614SDennis Dalessandro be32_to_cpu(eh->at.aeth) >> 24, 310f48ad614SDennis Dalessandro parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24), 311832666c1SDon Hiatt be32_to_cpu(eh->at.aeth) & IB_MSN_MASK, 312261a4351SMike Marciniszyn ib_u64_get(&eh->at.atomic_ack_eth)); 313f48ad614SDennis Dalessandro break; 314f48ad614SDennis Dalessandro /* atomiceth */ 315f48ad614SDennis Dalessandro case OP(RC, COMPARE_SWAP): 316f48ad614SDennis Dalessandro case OP(RC, FETCH_ADD): 317f48ad614SDennis Dalessandro trace_seq_printf(p, ATOMICETH_PRN, 318261a4351SMike Marciniszyn get_ib_ateth_vaddr(&eh->atomic_eth), 319f48ad614SDennis Dalessandro eh->atomic_eth.rkey, 320261a4351SMike Marciniszyn get_ib_ateth_swap(&eh->atomic_eth), 321261a4351SMike Marciniszyn get_ib_ateth_compare(&eh->atomic_eth)); 322f48ad614SDennis Dalessandro break; 323f48ad614SDennis Dalessandro /* deth */ 324f48ad614SDennis Dalessandro case OP(UD, SEND_ONLY): 325f48ad614SDennis Dalessandro case OP(UD, SEND_ONLY_WITH_IMMEDIATE): 326f48ad614SDennis Dalessandro trace_seq_printf(p, DETH_PRN, 327f48ad614SDennis Dalessandro be32_to_cpu(eh->ud.deth[0]), 328f48ad614SDennis Dalessandro be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK); 329f48ad614SDennis Dalessandro break; 330bdd8a98cSJianxin Xiong /* ieth */ 331bdd8a98cSJianxin Xiong case OP(RC, SEND_LAST_WITH_INVALIDATE): 332bdd8a98cSJianxin Xiong case OP(RC, SEND_ONLY_WITH_INVALIDATE): 333bdd8a98cSJianxin Xiong trace_seq_printf(p, IETH_PRN, 334bdd8a98cSJianxin Xiong be32_to_cpu(eh->ieth)); 335bdd8a98cSJianxin Xiong break; 336f48ad614SDennis Dalessandro } 337f48ad614SDennis Dalessandro trace_seq_putc(p, 0); 338f48ad614SDennis Dalessandro return ret; 339f48ad614SDennis Dalessandro } 340f48ad614SDennis Dalessandro 341f48ad614SDennis Dalessandro const char *parse_sdma_flags( 342f48ad614SDennis Dalessandro struct trace_seq *p, 343f48ad614SDennis Dalessandro u64 desc0, u64 desc1) 344f48ad614SDennis Dalessandro { 345f48ad614SDennis Dalessandro const char *ret = trace_seq_buffer_ptr(p); 346f48ad614SDennis Dalessandro char flags[5] = { 'x', 'x', 'x', 'x', 0 }; 347f48ad614SDennis Dalessandro 348f48ad614SDennis Dalessandro flags[0] = (desc1 & SDMA_DESC1_INT_REQ_FLAG) ? 'I' : '-'; 349f48ad614SDennis Dalessandro flags[1] = (desc1 & SDMA_DESC1_HEAD_TO_HOST_FLAG) ? 'H' : '-'; 350f48ad614SDennis Dalessandro flags[2] = (desc0 & SDMA_DESC0_FIRST_DESC_FLAG) ? 'F' : '-'; 351f48ad614SDennis Dalessandro flags[3] = (desc0 & SDMA_DESC0_LAST_DESC_FLAG) ? 'L' : '-'; 352f48ad614SDennis Dalessandro trace_seq_printf(p, "%s", flags); 353f48ad614SDennis Dalessandro if (desc0 & SDMA_DESC0_FIRST_DESC_FLAG) 354f48ad614SDennis Dalessandro trace_seq_printf(p, " amode:%u aidx:%u alen:%u", 355f48ad614SDennis Dalessandro (u8)((desc1 >> SDMA_DESC1_HEADER_MODE_SHIFT) & 356f48ad614SDennis Dalessandro SDMA_DESC1_HEADER_MODE_MASK), 357f48ad614SDennis Dalessandro (u8)((desc1 >> SDMA_DESC1_HEADER_INDEX_SHIFT) & 358f48ad614SDennis Dalessandro SDMA_DESC1_HEADER_INDEX_MASK), 359f48ad614SDennis Dalessandro (u8)((desc1 >> SDMA_DESC1_HEADER_DWS_SHIFT) & 360f48ad614SDennis Dalessandro SDMA_DESC1_HEADER_DWS_MASK)); 361f48ad614SDennis Dalessandro return ret; 362f48ad614SDennis Dalessandro } 363f48ad614SDennis Dalessandro 364f48ad614SDennis Dalessandro const char *print_u32_array( 365f48ad614SDennis Dalessandro struct trace_seq *p, 366f48ad614SDennis Dalessandro u32 *arr, int len) 367f48ad614SDennis Dalessandro { 368f48ad614SDennis Dalessandro int i; 369f48ad614SDennis Dalessandro const char *ret = trace_seq_buffer_ptr(p); 370f48ad614SDennis Dalessandro 371f48ad614SDennis Dalessandro for (i = 0; i < len ; i++) 372f48ad614SDennis Dalessandro trace_seq_printf(p, "%s%#x", i == 0 ? "" : " ", arr[i]); 373f48ad614SDennis Dalessandro trace_seq_putc(p, 0); 374f48ad614SDennis Dalessandro return ret; 375f48ad614SDennis Dalessandro } 376f48ad614SDennis Dalessandro 3775d18ee67SSebastian Sanchez __hfi1_trace_fn(AFFINITY); 378f48ad614SDennis Dalessandro __hfi1_trace_fn(PKT); 379f48ad614SDennis Dalessandro __hfi1_trace_fn(PROC); 380f48ad614SDennis Dalessandro __hfi1_trace_fn(SDMA); 381f48ad614SDennis Dalessandro __hfi1_trace_fn(LINKVERB); 382f48ad614SDennis Dalessandro __hfi1_trace_fn(DEBUG); 383f48ad614SDennis Dalessandro __hfi1_trace_fn(SNOOP); 384f48ad614SDennis Dalessandro __hfi1_trace_fn(CNTR); 385f48ad614SDennis Dalessandro __hfi1_trace_fn(PIO); 386f48ad614SDennis Dalessandro __hfi1_trace_fn(DC8051); 387f48ad614SDennis Dalessandro __hfi1_trace_fn(FIRMWARE); 388f48ad614SDennis Dalessandro __hfi1_trace_fn(RCVCTRL); 389f48ad614SDennis Dalessandro __hfi1_trace_fn(TID); 390f48ad614SDennis Dalessandro __hfi1_trace_fn(MMU); 391f48ad614SDennis Dalessandro __hfi1_trace_fn(IOCTL); 392