xref: /OK3568_Linux_fs/kernel/drivers/infiniband/hw/hfi1/trace_ibhdrs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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