1*145eba1aSCai Huoqing /* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
2462b6b21SSebastian Sanchez /*
3442e5566SMike Marciniszyn  * Copyright(c) 2015 - 2017 Intel Corporation.
4462b6b21SSebastian Sanchez  */
5*145eba1aSCai Huoqing 
6462b6b21SSebastian Sanchez #if !defined(__HFI1_TRACE_IBHDRS_H) || defined(TRACE_HEADER_MULTI_READ)
7462b6b21SSebastian Sanchez #define __HFI1_TRACE_IBHDRS_H
8462b6b21SSebastian Sanchez 
9462b6b21SSebastian Sanchez #include <linux/tracepoint.h>
10462b6b21SSebastian Sanchez #include <linux/trace_seq.h>
11462b6b21SSebastian Sanchez 
12462b6b21SSebastian Sanchez #include "hfi.h"
13462b6b21SSebastian Sanchez 
14462b6b21SSebastian Sanchez #undef TRACE_SYSTEM
15462b6b21SSebastian Sanchez #define TRACE_SYSTEM hfi1_ibhdrs
16462b6b21SSebastian Sanchez 
17228d2af1SDon Hiatt #define ib_opcode_name(opcode) { IB_OPCODE_##opcode, #opcode  }
18228d2af1SDon Hiatt #define show_ib_opcode(opcode)                             \
19228d2af1SDon Hiatt __print_symbolic(opcode,                                   \
20228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_FIRST),                     \
21228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_MIDDLE),                    \
22228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_LAST),                      \
23228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_LAST_WITH_IMMEDIATE),       \
24228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_ONLY),                      \
25228d2af1SDon Hiatt 	ib_opcode_name(RC_SEND_ONLY_WITH_IMMEDIATE),       \
26228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_FIRST),               \
27228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_MIDDLE),              \
28228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_LAST),                \
29228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
30228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_ONLY),                \
31228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
32228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_READ_REQUEST),              \
33228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_READ_RESPONSE_FIRST),       \
34228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_READ_RESPONSE_MIDDLE),      \
35228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_READ_RESPONSE_LAST),        \
36228d2af1SDon Hiatt 	ib_opcode_name(RC_RDMA_READ_RESPONSE_ONLY),        \
37228d2af1SDon Hiatt 	ib_opcode_name(RC_ACKNOWLEDGE),                    \
38228d2af1SDon Hiatt 	ib_opcode_name(RC_ATOMIC_ACKNOWLEDGE),             \
39228d2af1SDon Hiatt 	ib_opcode_name(RC_COMPARE_SWAP),                   \
40228d2af1SDon Hiatt 	ib_opcode_name(RC_FETCH_ADD),                      \
41aa9b79ecSMike Marciniszyn 	ib_opcode_name(RC_SEND_LAST_WITH_INVALIDATE),      \
42aa9b79ecSMike Marciniszyn 	ib_opcode_name(RC_SEND_ONLY_WITH_INVALIDATE),      \
43a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_WRITE_REQ),	           \
44a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_WRITE_RESP),	           \
45a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_WRITE_DATA),	           \
46a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_WRITE_DATA_LAST),          \
473ce5daa2SKaike Wan 	ib_opcode_name(TID_RDMA_READ_REQ),	           \
483ce5daa2SKaike Wan 	ib_opcode_name(TID_RDMA_READ_RESP),	           \
49a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_RESYNC),	           \
50a05c9bdcSKaike Wan 	ib_opcode_name(TID_RDMA_ACK),                      \
51228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_FIRST),                     \
52228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_MIDDLE),                    \
53228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_LAST),                      \
54228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_LAST_WITH_IMMEDIATE),       \
55228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_ONLY),                      \
56228d2af1SDon Hiatt 	ib_opcode_name(UC_SEND_ONLY_WITH_IMMEDIATE),       \
57228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_FIRST),               \
58228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_MIDDLE),              \
59228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_LAST),                \
60228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
61228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_ONLY),                \
62228d2af1SDon Hiatt 	ib_opcode_name(UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
63228d2af1SDon Hiatt 	ib_opcode_name(UD_SEND_ONLY),                      \
64228d2af1SDon Hiatt 	ib_opcode_name(UD_SEND_ONLY_WITH_IMMEDIATE),       \
65228d2af1SDon Hiatt 	ib_opcode_name(CNP))
66228d2af1SDon Hiatt 
67863cf89dSDon Hiatt u8 ibhdr_exhdr_len(struct ib_header *hdr);
6843a68c35SDon Hiatt const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode,
6943a68c35SDon Hiatt 			      u8 l4, u32 dest_qpn, u32 src_qpn,
7043a68c35SDon Hiatt 			      void *ehdrs);
71863cf89dSDon Hiatt u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opah);
72863cf89dSDon Hiatt u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet);
73442e5566SMike Marciniszyn const char *hfi1_trace_get_packet_l4_str(u8 l4);
74863cf89dSDon Hiatt void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
75ca85bb1cSSebastian Sanchez 			     u8 *ack, bool *becn, bool *fecn, u8 *mig,
76228d2af1SDon Hiatt 			     u8 *se, u8 *pad, u8 *opcode, u8 *tver,
77228d2af1SDon Hiatt 			     u16 *pkey, u32 *psn, u32 *qpn);
78228d2af1SDon Hiatt void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
79228d2af1SDon Hiatt 			     u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
80228d2af1SDon Hiatt 			     u16 *len, u32 *dlid, u32 *slid);
81863cf89dSDon Hiatt void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr,
82863cf89dSDon Hiatt 			      u8 *ack, u8 *mig, u8 *opcode,
83863cf89dSDon Hiatt 			      u8 *pad, u8 *se, u8 *tver,
84863cf89dSDon Hiatt 			      u32 *psn, u32 *qpn);
85863cf89dSDon Hiatt void hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr,
86ca85bb1cSSebastian Sanchez 			      u8 *age, bool *becn, bool *fecn,
87863cf89dSDon Hiatt 			      u8 *l4, u8 *rc, u8 *sc,
88863cf89dSDon Hiatt 			      u16 *entropy, u16 *len, u16 *pkey,
89863cf89dSDon Hiatt 			      u32 *dlid, u32 *slid);
90863cf89dSDon Hiatt 
91863cf89dSDon Hiatt const char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass,
92ca85bb1cSSebastian Sanchez 			       u8 age, bool becn, bool fecn, u8 l4,
93863cf89dSDon Hiatt 			       u8 lnh, const char *lnh_name, u8 lver,
94863cf89dSDon Hiatt 			       u8 rc, u8 sc, u8 sl, u16 entropy,
95863cf89dSDon Hiatt 			       u16 len, u16 pkey, u32 dlid, u32 slid);
96863cf89dSDon Hiatt 
9743a68c35SDon Hiatt const char *hfi1_trace_fmt_rest(struct trace_seq *p, bool bypass, u8 l4,
98ca85bb1cSSebastian Sanchez 				u8 ack, bool becn, bool fecn, u8 mig,
99863cf89dSDon Hiatt 				u8 se, u8 pad, u8 opcode, const char *opname,
10043a68c35SDon Hiatt 				u8 tver, u16 pkey, u32 psn, u32 qpn,
10143a68c35SDon Hiatt 				u32 dest_qpn, u32 src_qpn);
102462b6b21SSebastian Sanchez 
103442e5566SMike Marciniszyn const char *hfi1_trace_get_packet_l2_str(u8 l2);
104442e5566SMike Marciniszyn 
10543a68c35SDon Hiatt #define __parse_ib_ehdrs(op, l4, dest_qpn, src_qpn, ehdrs) \
10643a68c35SDon Hiatt 			 parse_everbs_hdrs(p, op, l4, dest_qpn, src_qpn, ehdrs)
107462b6b21SSebastian Sanchez 
108462b6b21SSebastian Sanchez #define lrh_name(lrh) { HFI1_##lrh, #lrh }
109462b6b21SSebastian Sanchez #define show_lnh(lrh)                    \
110462b6b21SSebastian Sanchez __print_symbolic(lrh,                    \
111462b6b21SSebastian Sanchez 	lrh_name(LRH_BTH),               \
112462b6b21SSebastian Sanchez 	lrh_name(LRH_GRH))
113462b6b21SSebastian Sanchez 
114228d2af1SDon Hiatt DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
115462b6b21SSebastian Sanchez 		    TP_PROTO(struct hfi1_devdata *dd,
116228d2af1SDon Hiatt 			     struct hfi1_packet *packet,
117228d2af1SDon Hiatt 			     bool sc5),
118228d2af1SDon Hiatt 		    TP_ARGS(dd, packet, sc5),
119462b6b21SSebastian Sanchez 		    TP_STRUCT__entry(
120462b6b21SSebastian Sanchez 			DD_DEV_ENTRY(dd)
121442e5566SMike Marciniszyn 			__field(u8, etype)
122863cf89dSDon Hiatt 			__field(u8, ack)
123863cf89dSDon Hiatt 			__field(u8, age)
124ca85bb1cSSebastian Sanchez 			__field(bool, becn)
125ca85bb1cSSebastian Sanchez 			__field(bool, fecn)
126442e5566SMike Marciniszyn 			__field(u8, l2)
127863cf89dSDon Hiatt 			__field(u8, l4)
128228d2af1SDon Hiatt 			__field(u8, lnh)
129462b6b21SSebastian Sanchez 			__field(u8, lver)
130228d2af1SDon Hiatt 			__field(u8, mig)
131863cf89dSDon Hiatt 			__field(u8, opcode)
132462b6b21SSebastian Sanchez 			__field(u8, pad)
133863cf89dSDon Hiatt 			__field(u8, rc)
134863cf89dSDon Hiatt 			__field(u8, sc)
135863cf89dSDon Hiatt 			__field(u8, se)
136863cf89dSDon Hiatt 			__field(u8, sl)
137462b6b21SSebastian Sanchez 			__field(u8, tver)
138863cf89dSDon Hiatt 			__field(u16, entropy)
139863cf89dSDon Hiatt 			__field(u16, len)
140462b6b21SSebastian Sanchez 			__field(u16, pkey)
141863cf89dSDon Hiatt 			__field(u32, dlid)
142462b6b21SSebastian Sanchez 			__field(u32, psn)
143863cf89dSDon Hiatt 			__field(u32, qpn)
144863cf89dSDon Hiatt 			__field(u32, slid)
14543a68c35SDon Hiatt 			__field(u32, dest_qpn)
14643a68c35SDon Hiatt 			__field(u32, src_qpn)
147462b6b21SSebastian Sanchez 			/* extended headers */
148228d2af1SDon Hiatt 			__dynamic_array(u8, ehdrs,
149863cf89dSDon Hiatt 					hfi1_trace_packet_hdr_len(packet))
150462b6b21SSebastian Sanchez 			),
151462b6b21SSebastian Sanchez 		    TP_fast_assign(
152462b6b21SSebastian Sanchez 			DD_DEV_ASSIGN(dd);
153228d2af1SDon Hiatt 
154442e5566SMike Marciniszyn 			__entry->etype = packet->etype;
155442e5566SMike Marciniszyn 			__entry->l2 = hfi1_16B_get_l2(packet->hdr);
15643a68c35SDon Hiatt 			__entry->dest_qpn = 0;
15743a68c35SDon Hiatt 			__entry->src_qpn = 0;
158442e5566SMike Marciniszyn 			if (__entry->etype == RHF_RCV_TYPE_BYPASS) {
159863cf89dSDon Hiatt 				hfi1_trace_parse_16b_hdr(packet->hdr,
160863cf89dSDon Hiatt 							 &__entry->age,
161863cf89dSDon Hiatt 							 &__entry->becn,
162863cf89dSDon Hiatt 							 &__entry->fecn,
163863cf89dSDon Hiatt 							 &__entry->l4,
164863cf89dSDon Hiatt 							 &__entry->rc,
165863cf89dSDon Hiatt 							 &__entry->sc,
166863cf89dSDon Hiatt 							 &__entry->entropy,
167863cf89dSDon Hiatt 							 &__entry->len,
168863cf89dSDon Hiatt 							 &__entry->pkey,
169863cf89dSDon Hiatt 							 &__entry->dlid,
170863cf89dSDon Hiatt 							 &__entry->slid);
171863cf89dSDon Hiatt 
17243a68c35SDon Hiatt 				if (__entry->l4 == OPA_16B_L4_FM) {
17343a68c35SDon Hiatt 					__entry->opcode = IB_OPCODE_UD_SEND_ONLY;
17443a68c35SDon Hiatt 					__entry->dest_qpn = hfi1_16B_get_dest_qpn(packet->mgmt);
17543a68c35SDon Hiatt 					__entry->src_qpn = hfi1_16B_get_src_qpn(packet->mgmt);
17643a68c35SDon Hiatt 				}  else {
177863cf89dSDon Hiatt 					hfi1_trace_parse_16b_bth(packet->ohdr,
178863cf89dSDon Hiatt 								 &__entry->ack,
179863cf89dSDon Hiatt 								 &__entry->mig,
180863cf89dSDon Hiatt 								 &__entry->opcode,
181863cf89dSDon Hiatt 								 &__entry->pad,
182863cf89dSDon Hiatt 								 &__entry->se,
183863cf89dSDon Hiatt 								 &__entry->tver,
184863cf89dSDon Hiatt 								 &__entry->psn,
185863cf89dSDon Hiatt 								 &__entry->qpn);
18643a68c35SDon Hiatt 				}
187863cf89dSDon Hiatt 			} else {
18843a68c35SDon Hiatt 				__entry->l4 = OPA_16B_L4_9B;
189228d2af1SDon Hiatt 				hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
190228d2af1SDon Hiatt 							&__entry->lnh,
191228d2af1SDon Hiatt 							&__entry->lver,
192228d2af1SDon Hiatt 							&__entry->sl,
193228d2af1SDon Hiatt 							&__entry->sc,
194228d2af1SDon Hiatt 							&__entry->len,
195228d2af1SDon Hiatt 							&__entry->dlid,
196228d2af1SDon Hiatt 							&__entry->slid);
197228d2af1SDon Hiatt 
198863cf89dSDon Hiatt 				  hfi1_trace_parse_9b_bth(packet->ohdr,
199863cf89dSDon Hiatt 							  &__entry->ack,
200863cf89dSDon Hiatt 							  &__entry->becn,
201863cf89dSDon Hiatt 							  &__entry->fecn,
202863cf89dSDon Hiatt 							  &__entry->mig,
203863cf89dSDon Hiatt 							  &__entry->se,
204863cf89dSDon Hiatt 							  &__entry->pad,
205863cf89dSDon Hiatt 							  &__entry->opcode,
206863cf89dSDon Hiatt 							  &__entry->tver,
207863cf89dSDon Hiatt 							  &__entry->pkey,
208863cf89dSDon Hiatt 							  &__entry->psn,
209863cf89dSDon Hiatt 							  &__entry->qpn);
210863cf89dSDon Hiatt 			}
211462b6b21SSebastian Sanchez 			/* extended headers */
21243a68c35SDon Hiatt 			if (__entry->l4 != OPA_16B_L4_FM)
213863cf89dSDon Hiatt 				memcpy(__get_dynamic_array(ehdrs),
214863cf89dSDon Hiatt 				       &packet->ohdr->u,
215228d2af1SDon Hiatt 				       __get_dynamic_array_len(ehdrs));
216462b6b21SSebastian Sanchez 			 ),
217863cf89dSDon Hiatt 		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
218462b6b21SSebastian Sanchez 			      __get_str(dev),
219442e5566SMike Marciniszyn 			      __entry->etype != RHF_RCV_TYPE_BYPASS ?
220442e5566SMike Marciniszyn 					show_packettype(__entry->etype) :
221442e5566SMike Marciniszyn 					hfi1_trace_get_packet_l2_str(
222442e5566SMike Marciniszyn 						__entry->l2),
223863cf89dSDon Hiatt 			      hfi1_trace_fmt_lrh(p,
224442e5566SMike Marciniszyn 						 __entry->etype ==
225442e5566SMike Marciniszyn 							RHF_RCV_TYPE_BYPASS,
226863cf89dSDon Hiatt 						 __entry->age,
227863cf89dSDon Hiatt 						 __entry->becn,
228863cf89dSDon Hiatt 						 __entry->fecn,
229863cf89dSDon Hiatt 						 __entry->l4,
230863cf89dSDon Hiatt 						 __entry->lnh,
231863cf89dSDon Hiatt 						 show_lnh(__entry->lnh),
232462b6b21SSebastian Sanchez 						 __entry->lver,
233863cf89dSDon Hiatt 						 __entry->rc,
234863cf89dSDon Hiatt 						 __entry->sc,
235462b6b21SSebastian Sanchez 						 __entry->sl,
236863cf89dSDon Hiatt 						 __entry->entropy,
237863cf89dSDon Hiatt 						 __entry->len,
238863cf89dSDon Hiatt 						 __entry->pkey,
239863cf89dSDon Hiatt 						 __entry->dlid,
240863cf89dSDon Hiatt 						 __entry->slid),
24143a68c35SDon Hiatt 			      hfi1_trace_fmt_rest(p,
242442e5566SMike Marciniszyn 						  __entry->etype ==
243442e5566SMike Marciniszyn 							RHF_RCV_TYPE_BYPASS,
24443a68c35SDon Hiatt 						  __entry->l4,
245863cf89dSDon Hiatt 						  __entry->ack,
246863cf89dSDon Hiatt 						  __entry->becn,
247863cf89dSDon Hiatt 						  __entry->fecn,
248228d2af1SDon Hiatt 						  __entry->mig,
249863cf89dSDon Hiatt 						  __entry->se,
250462b6b21SSebastian Sanchez 						  __entry->pad,
251863cf89dSDon Hiatt 						  __entry->opcode,
252863cf89dSDon Hiatt 						  show_ib_opcode(__entry->opcode),
253462b6b21SSebastian Sanchez 						  __entry->tver,
254462b6b21SSebastian Sanchez 						  __entry->pkey,
255462b6b21SSebastian Sanchez 						  __entry->psn,
25643a68c35SDon Hiatt 						  __entry->qpn,
25743a68c35SDon Hiatt 						  __entry->dest_qpn,
25843a68c35SDon Hiatt 						  __entry->src_qpn),
259462b6b21SSebastian Sanchez 			      /* extended headers */
260228d2af1SDon Hiatt 			      __get_dynamic_array_len(ehdrs),
261462b6b21SSebastian Sanchez 			      __parse_ib_ehdrs(
262462b6b21SSebastian Sanchez 					__entry->opcode,
26343a68c35SDon Hiatt 					__entry->l4,
26443a68c35SDon Hiatt 					__entry->dest_qpn,
26543a68c35SDon Hiatt 					__entry->src_qpn,
266462b6b21SSebastian Sanchez 					(void *)__get_dynamic_array(ehdrs))
267462b6b21SSebastian Sanchez 			     )
268462b6b21SSebastian Sanchez );
269462b6b21SSebastian Sanchez 
270228d2af1SDon Hiatt DEFINE_EVENT(hfi1_input_ibhdr_template, input_ibhdr,
271228d2af1SDon Hiatt 	     TP_PROTO(struct hfi1_devdata *dd,
272228d2af1SDon Hiatt 		      struct hfi1_packet *packet, bool sc5),
273228d2af1SDon Hiatt 	     TP_ARGS(dd, packet, sc5));
274462b6b21SSebastian Sanchez 
275228d2af1SDon Hiatt DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
276228d2af1SDon Hiatt 		    TP_PROTO(struct hfi1_devdata *dd,
277863cf89dSDon Hiatt 			     struct hfi1_opa_header *opah, bool sc5),
27830e07416SDon Hiatt 		    TP_ARGS(dd, opah, sc5),
279228d2af1SDon Hiatt 		    TP_STRUCT__entry(
280228d2af1SDon Hiatt 			DD_DEV_ENTRY(dd)
281442e5566SMike Marciniszyn 			__field(u8, hdr_type)
282863cf89dSDon Hiatt 			__field(u8, ack)
283863cf89dSDon Hiatt 			__field(u8, age)
284ca85bb1cSSebastian Sanchez 			__field(bool, becn)
285ca85bb1cSSebastian Sanchez 			__field(bool, fecn)
286863cf89dSDon Hiatt 			__field(u8, l4)
287228d2af1SDon Hiatt 			__field(u8, lnh)
288228d2af1SDon Hiatt 			__field(u8, lver)
289228d2af1SDon Hiatt 			__field(u8, mig)
290863cf89dSDon Hiatt 			__field(u8, opcode)
291228d2af1SDon Hiatt 			__field(u8, pad)
292863cf89dSDon Hiatt 			__field(u8, rc)
293863cf89dSDon Hiatt 			__field(u8, sc)
294863cf89dSDon Hiatt 			__field(u8, se)
295863cf89dSDon Hiatt 			__field(u8, sl)
296228d2af1SDon Hiatt 			__field(u8, tver)
297863cf89dSDon Hiatt 			__field(u16, entropy)
298863cf89dSDon Hiatt 			__field(u16, len)
299228d2af1SDon Hiatt 			__field(u16, pkey)
300863cf89dSDon Hiatt 			__field(u32, dlid)
301228d2af1SDon Hiatt 			__field(u32, psn)
302863cf89dSDon Hiatt 			__field(u32, qpn)
303863cf89dSDon Hiatt 			__field(u32, slid)
30443a68c35SDon Hiatt 			__field(u32, dest_qpn)
30543a68c35SDon Hiatt 			__field(u32, src_qpn)
306228d2af1SDon Hiatt 			/* extended headers */
307228d2af1SDon Hiatt 			__dynamic_array(u8, ehdrs,
308863cf89dSDon Hiatt 					hfi1_trace_opa_hdr_len(opah))
309228d2af1SDon Hiatt 			),
310228d2af1SDon Hiatt 		    TP_fast_assign(
311228d2af1SDon Hiatt 			struct ib_other_headers *ohdr;
312462b6b21SSebastian Sanchez 
313228d2af1SDon Hiatt 			DD_DEV_ASSIGN(dd);
314462b6b21SSebastian Sanchez 
315442e5566SMike Marciniszyn 			__entry->hdr_type = opah->hdr_type;
31643a68c35SDon Hiatt 			__entry->dest_qpn = 0;
31743a68c35SDon Hiatt 			__entry->src_qpn = 0;
318442e5566SMike Marciniszyn 			if (__entry->hdr_type)  {
319863cf89dSDon Hiatt 				hfi1_trace_parse_16b_hdr(&opah->opah,
320863cf89dSDon Hiatt 							 &__entry->age,
321863cf89dSDon Hiatt 							 &__entry->becn,
322863cf89dSDon Hiatt 							 &__entry->fecn,
323863cf89dSDon Hiatt 							 &__entry->l4,
324863cf89dSDon Hiatt 							 &__entry->rc,
325863cf89dSDon Hiatt 							 &__entry->sc,
326863cf89dSDon Hiatt 							 &__entry->entropy,
327863cf89dSDon Hiatt 							 &__entry->len,
328863cf89dSDon Hiatt 							 &__entry->pkey,
329863cf89dSDon Hiatt 							 &__entry->dlid,
330863cf89dSDon Hiatt 							 &__entry->slid);
331228d2af1SDon Hiatt 
33243a68c35SDon Hiatt 				if (__entry->l4 == OPA_16B_L4_FM) {
33343a68c35SDon Hiatt 					ohdr = NULL;
33443a68c35SDon Hiatt 					__entry->opcode = IB_OPCODE_UD_SEND_ONLY;
33543a68c35SDon Hiatt 					__entry->dest_qpn = hfi1_16B_get_dest_qpn(&opah->opah.u.mgmt);
33643a68c35SDon Hiatt 					__entry->src_qpn = hfi1_16B_get_src_qpn(&opah->opah.u.mgmt);
33743a68c35SDon Hiatt 				} else {
338e08aa594SMike Marciniszyn 					if (__entry->l4 == OPA_16B_L4_IB_LOCAL)
339863cf89dSDon Hiatt 						ohdr = &opah->opah.u.oth;
340863cf89dSDon Hiatt 					else
341863cf89dSDon Hiatt 						ohdr = &opah->opah.u.l.oth;
342863cf89dSDon Hiatt 					hfi1_trace_parse_16b_bth(ohdr,
343863cf89dSDon Hiatt 								 &__entry->ack,
344863cf89dSDon Hiatt 								 &__entry->mig,
345863cf89dSDon Hiatt 								 &__entry->opcode,
346863cf89dSDon Hiatt 								 &__entry->pad,
347863cf89dSDon Hiatt 								 &__entry->se,
348863cf89dSDon Hiatt 								 &__entry->tver,
349863cf89dSDon Hiatt 								 &__entry->psn,
350863cf89dSDon Hiatt 								 &__entry->qpn);
35143a68c35SDon Hiatt 				}
352863cf89dSDon Hiatt 			} else {
353e08aa594SMike Marciniszyn 				__entry->l4 = OPA_16B_L4_9B;
354863cf89dSDon Hiatt 				hfi1_trace_parse_9b_hdr(&opah->ibh, sc5,
355863cf89dSDon Hiatt 							&__entry->lnh,
356863cf89dSDon Hiatt 							&__entry->lver,
357863cf89dSDon Hiatt 							&__entry->sl,
358863cf89dSDon Hiatt 							&__entry->sc,
359863cf89dSDon Hiatt 							&__entry->len,
360863cf89dSDon Hiatt 							&__entry->dlid,
361863cf89dSDon Hiatt 							&__entry->slid);
362e08aa594SMike Marciniszyn 				if (__entry->lnh == HFI1_LRH_BTH)
363863cf89dSDon Hiatt 					ohdr = &opah->ibh.u.oth;
364863cf89dSDon Hiatt 				else
365863cf89dSDon Hiatt 					ohdr = &opah->ibh.u.l.oth;
366863cf89dSDon Hiatt 				hfi1_trace_parse_9b_bth(ohdr,
367863cf89dSDon Hiatt 							&__entry->ack,
368863cf89dSDon Hiatt 							&__entry->becn,
369863cf89dSDon Hiatt 							&__entry->fecn,
370863cf89dSDon Hiatt 							&__entry->mig,
371863cf89dSDon Hiatt 							&__entry->se,
372863cf89dSDon Hiatt 							&__entry->pad,
373863cf89dSDon Hiatt 							&__entry->opcode,
374863cf89dSDon Hiatt 							&__entry->tver,
375863cf89dSDon Hiatt 							&__entry->pkey,
376863cf89dSDon Hiatt 							&__entry->psn,
377863cf89dSDon Hiatt 							&__entry->qpn);
378863cf89dSDon Hiatt 			}
379228d2af1SDon Hiatt 
380228d2af1SDon Hiatt 			/* extended headers */
38143a68c35SDon Hiatt 			if (__entry->l4 != OPA_16B_L4_FM)
382228d2af1SDon Hiatt 				memcpy(__get_dynamic_array(ehdrs),
383228d2af1SDon Hiatt 				       &ohdr->u, __get_dynamic_array_len(ehdrs));
384228d2af1SDon Hiatt 		    ),
385863cf89dSDon Hiatt 		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
386228d2af1SDon Hiatt 			      __get_str(dev),
387442e5566SMike Marciniszyn 			      hfi1_trace_get_packet_l4_str(__entry->l4),
388863cf89dSDon Hiatt 			      hfi1_trace_fmt_lrh(p,
389442e5566SMike Marciniszyn 						 !!__entry->hdr_type,
390863cf89dSDon Hiatt 						 __entry->age,
391863cf89dSDon Hiatt 						 __entry->becn,
392863cf89dSDon Hiatt 						 __entry->fecn,
393863cf89dSDon Hiatt 						 __entry->l4,
394863cf89dSDon Hiatt 						 __entry->lnh,
395863cf89dSDon Hiatt 						 show_lnh(__entry->lnh),
396228d2af1SDon Hiatt 						 __entry->lver,
397863cf89dSDon Hiatt 						 __entry->rc,
398863cf89dSDon Hiatt 						 __entry->sc,
399228d2af1SDon Hiatt 						 __entry->sl,
400863cf89dSDon Hiatt 						 __entry->entropy,
401863cf89dSDon Hiatt 						 __entry->len,
402863cf89dSDon Hiatt 						 __entry->pkey,
403863cf89dSDon Hiatt 						 __entry->dlid,
404863cf89dSDon Hiatt 						 __entry->slid),
40543a68c35SDon Hiatt 			      hfi1_trace_fmt_rest(p,
406442e5566SMike Marciniszyn 						  !!__entry->hdr_type,
40743a68c35SDon Hiatt 						  __entry->l4,
408863cf89dSDon Hiatt 						  __entry->ack,
409863cf89dSDon Hiatt 						  __entry->becn,
410863cf89dSDon Hiatt 						  __entry->fecn,
411228d2af1SDon Hiatt 						  __entry->mig,
412863cf89dSDon Hiatt 						  __entry->se,
413228d2af1SDon Hiatt 						  __entry->pad,
414863cf89dSDon Hiatt 						  __entry->opcode,
415863cf89dSDon Hiatt 						  show_ib_opcode(__entry->opcode),
416228d2af1SDon Hiatt 						  __entry->tver,
417228d2af1SDon Hiatt 						  __entry->pkey,
418228d2af1SDon Hiatt 						  __entry->psn,
41943a68c35SDon Hiatt 						  __entry->qpn,
42043a68c35SDon Hiatt 						  __entry->dest_qpn,
42143a68c35SDon Hiatt 						  __entry->src_qpn),
422228d2af1SDon Hiatt 			      /* extended headers */
423228d2af1SDon Hiatt 			      __get_dynamic_array_len(ehdrs),
424228d2af1SDon Hiatt 			      __parse_ib_ehdrs(
425228d2af1SDon Hiatt 					__entry->opcode,
42643a68c35SDon Hiatt 					__entry->l4,
42743a68c35SDon Hiatt 					__entry->dest_qpn,
42843a68c35SDon Hiatt 					__entry->src_qpn,
429228d2af1SDon Hiatt 					(void *)__get_dynamic_array(ehdrs))
430228d2af1SDon Hiatt 			     )
431228d2af1SDon Hiatt );
432228d2af1SDon Hiatt 
433228d2af1SDon Hiatt DEFINE_EVENT(hfi1_output_ibhdr_template, pio_output_ibhdr,
434228d2af1SDon Hiatt 	     TP_PROTO(struct hfi1_devdata *dd,
43530e07416SDon Hiatt 		      struct hfi1_opa_header *opah, bool sc5),
43630e07416SDon Hiatt 	     TP_ARGS(dd, opah, sc5));
437228d2af1SDon Hiatt 
438228d2af1SDon Hiatt DEFINE_EVENT(hfi1_output_ibhdr_template, ack_output_ibhdr,
439228d2af1SDon Hiatt 	     TP_PROTO(struct hfi1_devdata *dd,
44030e07416SDon Hiatt 		      struct hfi1_opa_header *opah, bool sc5),
44130e07416SDon Hiatt 	     TP_ARGS(dd, opah, sc5));
442228d2af1SDon Hiatt 
443228d2af1SDon Hiatt DEFINE_EVENT(hfi1_output_ibhdr_template, sdma_output_ibhdr,
444228d2af1SDon Hiatt 	     TP_PROTO(struct hfi1_devdata *dd,
44530e07416SDon Hiatt 		      struct hfi1_opa_header *opah, bool sc5),
44630e07416SDon Hiatt 	     TP_ARGS(dd, opah, sc5));
447228d2af1SDon Hiatt 
448462b6b21SSebastian Sanchez 
449462b6b21SSebastian Sanchez #endif /* __HFI1_TRACE_IBHDRS_H */
450462b6b21SSebastian Sanchez 
451462b6b21SSebastian Sanchez #undef TRACE_INCLUDE_PATH
452462b6b21SSebastian Sanchez #undef TRACE_INCLUDE_FILE
453462b6b21SSebastian Sanchez #define TRACE_INCLUDE_PATH .
454462b6b21SSebastian Sanchez #define TRACE_INCLUDE_FILE trace_ibhdrs
455462b6b21SSebastian Sanchez #include <trace/define_trace.h>
456