xref: /openbmc/linux/drivers/infiniband/hw/hfi1/trace.c (revision 5d18ee67)
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