18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * Copyright(c) 2015 - 2017 Intel Corporation.
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * This file is provided under a dual BSD/GPLv2 license.  When using or
58c2ecf20Sopenharmony_ci * redistributing this file, you may do so under either license.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * GPL LICENSE SUMMARY
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
108c2ecf20Sopenharmony_ci * it under the terms of version 2 of the GNU General Public License as
118c2ecf20Sopenharmony_ci * published by the Free Software Foundation.
128c2ecf20Sopenharmony_ci *
138c2ecf20Sopenharmony_ci * This program is distributed in the hope that it will be useful, but
148c2ecf20Sopenharmony_ci * WITHOUT ANY WARRANTY; without even the implied warranty of
158c2ecf20Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
168c2ecf20Sopenharmony_ci * General Public License for more details.
178c2ecf20Sopenharmony_ci *
188c2ecf20Sopenharmony_ci * BSD LICENSE
198c2ecf20Sopenharmony_ci *
208c2ecf20Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
218c2ecf20Sopenharmony_ci * modification, are permitted provided that the following conditions
228c2ecf20Sopenharmony_ci * are met:
238c2ecf20Sopenharmony_ci *
248c2ecf20Sopenharmony_ci *  - Redistributions of source code must retain the above copyright
258c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer.
268c2ecf20Sopenharmony_ci *  - Redistributions in binary form must reproduce the above copyright
278c2ecf20Sopenharmony_ci *    notice, this list of conditions and the following disclaimer in
288c2ecf20Sopenharmony_ci *    the documentation and/or other materials provided with the
298c2ecf20Sopenharmony_ci *    distribution.
308c2ecf20Sopenharmony_ci *  - Neither the name of Intel Corporation nor the names of its
318c2ecf20Sopenharmony_ci *    contributors may be used to endorse or promote products derived
328c2ecf20Sopenharmony_ci *    from this software without specific prior written permission.
338c2ecf20Sopenharmony_ci *
348c2ecf20Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
358c2ecf20Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
368c2ecf20Sopenharmony_ci * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
378c2ecf20Sopenharmony_ci * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
388c2ecf20Sopenharmony_ci * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
398c2ecf20Sopenharmony_ci * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
408c2ecf20Sopenharmony_ci * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
418c2ecf20Sopenharmony_ci * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
428c2ecf20Sopenharmony_ci * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
438c2ecf20Sopenharmony_ci * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
448c2ecf20Sopenharmony_ci * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
458c2ecf20Sopenharmony_ci *
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_ci#if !defined(__HFI1_TRACE_IBHDRS_H) || defined(TRACE_HEADER_MULTI_READ)
488c2ecf20Sopenharmony_ci#define __HFI1_TRACE_IBHDRS_H
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
518c2ecf20Sopenharmony_ci#include <linux/trace_seq.h>
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#include "hfi.h"
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
568c2ecf20Sopenharmony_ci#define TRACE_SYSTEM hfi1_ibhdrs
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#define ib_opcode_name(opcode) { IB_OPCODE_##opcode, #opcode  }
598c2ecf20Sopenharmony_ci#define show_ib_opcode(opcode)                             \
608c2ecf20Sopenharmony_ci__print_symbolic(opcode,                                   \
618c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_FIRST),                     \
628c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_MIDDLE),                    \
638c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_LAST),                      \
648c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_LAST_WITH_IMMEDIATE),       \
658c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_ONLY),                      \
668c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_ONLY_WITH_IMMEDIATE),       \
678c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_FIRST),               \
688c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_MIDDLE),              \
698c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_LAST),                \
708c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
718c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_ONLY),                \
728c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
738c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_READ_REQUEST),              \
748c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_READ_RESPONSE_FIRST),       \
758c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_READ_RESPONSE_MIDDLE),      \
768c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_READ_RESPONSE_LAST),        \
778c2ecf20Sopenharmony_ci	ib_opcode_name(RC_RDMA_READ_RESPONSE_ONLY),        \
788c2ecf20Sopenharmony_ci	ib_opcode_name(RC_ACKNOWLEDGE),                    \
798c2ecf20Sopenharmony_ci	ib_opcode_name(RC_ATOMIC_ACKNOWLEDGE),             \
808c2ecf20Sopenharmony_ci	ib_opcode_name(RC_COMPARE_SWAP),                   \
818c2ecf20Sopenharmony_ci	ib_opcode_name(RC_FETCH_ADD),                      \
828c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_LAST_WITH_INVALIDATE),      \
838c2ecf20Sopenharmony_ci	ib_opcode_name(RC_SEND_ONLY_WITH_INVALIDATE),      \
848c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_WRITE_REQ),	           \
858c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_WRITE_RESP),	           \
868c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_WRITE_DATA),	           \
878c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_WRITE_DATA_LAST),          \
888c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_READ_REQ),	           \
898c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_READ_RESP),	           \
908c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_RESYNC),	           \
918c2ecf20Sopenharmony_ci	ib_opcode_name(TID_RDMA_ACK),                      \
928c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_FIRST),                     \
938c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_MIDDLE),                    \
948c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_LAST),                      \
958c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_LAST_WITH_IMMEDIATE),       \
968c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_ONLY),                      \
978c2ecf20Sopenharmony_ci	ib_opcode_name(UC_SEND_ONLY_WITH_IMMEDIATE),       \
988c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_FIRST),               \
998c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_MIDDLE),              \
1008c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_LAST),                \
1018c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
1028c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_ONLY),                \
1038c2ecf20Sopenharmony_ci	ib_opcode_name(UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
1048c2ecf20Sopenharmony_ci	ib_opcode_name(UD_SEND_ONLY),                      \
1058c2ecf20Sopenharmony_ci	ib_opcode_name(UD_SEND_ONLY_WITH_IMMEDIATE),       \
1068c2ecf20Sopenharmony_ci	ib_opcode_name(CNP))
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ciu8 ibhdr_exhdr_len(struct ib_header *hdr);
1098c2ecf20Sopenharmony_ciconst char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode,
1108c2ecf20Sopenharmony_ci			      u8 l4, u32 dest_qpn, u32 src_qpn,
1118c2ecf20Sopenharmony_ci			      void *ehdrs);
1128c2ecf20Sopenharmony_ciu8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opah);
1138c2ecf20Sopenharmony_ciu8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet);
1148c2ecf20Sopenharmony_ciconst char *hfi1_trace_get_packet_l4_str(u8 l4);
1158c2ecf20Sopenharmony_civoid hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
1168c2ecf20Sopenharmony_ci			     u8 *ack, bool *becn, bool *fecn, u8 *mig,
1178c2ecf20Sopenharmony_ci			     u8 *se, u8 *pad, u8 *opcode, u8 *tver,
1188c2ecf20Sopenharmony_ci			     u16 *pkey, u32 *psn, u32 *qpn);
1198c2ecf20Sopenharmony_civoid hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
1208c2ecf20Sopenharmony_ci			     u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
1218c2ecf20Sopenharmony_ci			     u16 *len, u32 *dlid, u32 *slid);
1228c2ecf20Sopenharmony_civoid hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr,
1238c2ecf20Sopenharmony_ci			      u8 *ack, u8 *mig, u8 *opcode,
1248c2ecf20Sopenharmony_ci			      u8 *pad, u8 *se, u8 *tver,
1258c2ecf20Sopenharmony_ci			      u32 *psn, u32 *qpn);
1268c2ecf20Sopenharmony_civoid hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr,
1278c2ecf20Sopenharmony_ci			      u8 *age, bool *becn, bool *fecn,
1288c2ecf20Sopenharmony_ci			      u8 *l4, u8 *rc, u8 *sc,
1298c2ecf20Sopenharmony_ci			      u16 *entropy, u16 *len, u16 *pkey,
1308c2ecf20Sopenharmony_ci			      u32 *dlid, u32 *slid);
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ciconst char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass,
1338c2ecf20Sopenharmony_ci			       u8 age, bool becn, bool fecn, u8 l4,
1348c2ecf20Sopenharmony_ci			       u8 lnh, const char *lnh_name, u8 lver,
1358c2ecf20Sopenharmony_ci			       u8 rc, u8 sc, u8 sl, u16 entropy,
1368c2ecf20Sopenharmony_ci			       u16 len, u16 pkey, u32 dlid, u32 slid);
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ciconst char *hfi1_trace_fmt_rest(struct trace_seq *p, bool bypass, u8 l4,
1398c2ecf20Sopenharmony_ci				u8 ack, bool becn, bool fecn, u8 mig,
1408c2ecf20Sopenharmony_ci				u8 se, u8 pad, u8 opcode, const char *opname,
1418c2ecf20Sopenharmony_ci				u8 tver, u16 pkey, u32 psn, u32 qpn,
1428c2ecf20Sopenharmony_ci				u32 dest_qpn, u32 src_qpn);
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ciconst char *hfi1_trace_get_packet_l2_str(u8 l2);
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ci#define __parse_ib_ehdrs(op, l4, dest_qpn, src_qpn, ehdrs) \
1478c2ecf20Sopenharmony_ci			 parse_everbs_hdrs(p, op, l4, dest_qpn, src_qpn, ehdrs)
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci#define lrh_name(lrh) { HFI1_##lrh, #lrh }
1508c2ecf20Sopenharmony_ci#define show_lnh(lrh)                    \
1518c2ecf20Sopenharmony_ci__print_symbolic(lrh,                    \
1528c2ecf20Sopenharmony_ci	lrh_name(LRH_BTH),               \
1538c2ecf20Sopenharmony_ci	lrh_name(LRH_GRH))
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
1568c2ecf20Sopenharmony_ci		    TP_PROTO(struct hfi1_devdata *dd,
1578c2ecf20Sopenharmony_ci			     struct hfi1_packet *packet,
1588c2ecf20Sopenharmony_ci			     bool sc5),
1598c2ecf20Sopenharmony_ci		    TP_ARGS(dd, packet, sc5),
1608c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(
1618c2ecf20Sopenharmony_ci			DD_DEV_ENTRY(dd)
1628c2ecf20Sopenharmony_ci			__field(u8, etype)
1638c2ecf20Sopenharmony_ci			__field(u8, ack)
1648c2ecf20Sopenharmony_ci			__field(u8, age)
1658c2ecf20Sopenharmony_ci			__field(bool, becn)
1668c2ecf20Sopenharmony_ci			__field(bool, fecn)
1678c2ecf20Sopenharmony_ci			__field(u8, l2)
1688c2ecf20Sopenharmony_ci			__field(u8, l4)
1698c2ecf20Sopenharmony_ci			__field(u8, lnh)
1708c2ecf20Sopenharmony_ci			__field(u8, lver)
1718c2ecf20Sopenharmony_ci			__field(u8, mig)
1728c2ecf20Sopenharmony_ci			__field(u8, opcode)
1738c2ecf20Sopenharmony_ci			__field(u8, pad)
1748c2ecf20Sopenharmony_ci			__field(u8, rc)
1758c2ecf20Sopenharmony_ci			__field(u8, sc)
1768c2ecf20Sopenharmony_ci			__field(u8, se)
1778c2ecf20Sopenharmony_ci			__field(u8, sl)
1788c2ecf20Sopenharmony_ci			__field(u8, tver)
1798c2ecf20Sopenharmony_ci			__field(u16, entropy)
1808c2ecf20Sopenharmony_ci			__field(u16, len)
1818c2ecf20Sopenharmony_ci			__field(u16, pkey)
1828c2ecf20Sopenharmony_ci			__field(u32, dlid)
1838c2ecf20Sopenharmony_ci			__field(u32, psn)
1848c2ecf20Sopenharmony_ci			__field(u32, qpn)
1858c2ecf20Sopenharmony_ci			__field(u32, slid)
1868c2ecf20Sopenharmony_ci			__field(u32, dest_qpn)
1878c2ecf20Sopenharmony_ci			__field(u32, src_qpn)
1888c2ecf20Sopenharmony_ci			/* extended headers */
1898c2ecf20Sopenharmony_ci			__dynamic_array(u8, ehdrs,
1908c2ecf20Sopenharmony_ci					hfi1_trace_packet_hdr_len(packet))
1918c2ecf20Sopenharmony_ci			),
1928c2ecf20Sopenharmony_ci		    TP_fast_assign(
1938c2ecf20Sopenharmony_ci			DD_DEV_ASSIGN(dd);
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci			__entry->etype = packet->etype;
1968c2ecf20Sopenharmony_ci			__entry->l2 = hfi1_16B_get_l2(packet->hdr);
1978c2ecf20Sopenharmony_ci			__entry->dest_qpn = 0;
1988c2ecf20Sopenharmony_ci			__entry->src_qpn = 0;
1998c2ecf20Sopenharmony_ci			if (__entry->etype == RHF_RCV_TYPE_BYPASS) {
2008c2ecf20Sopenharmony_ci				hfi1_trace_parse_16b_hdr(packet->hdr,
2018c2ecf20Sopenharmony_ci							 &__entry->age,
2028c2ecf20Sopenharmony_ci							 &__entry->becn,
2038c2ecf20Sopenharmony_ci							 &__entry->fecn,
2048c2ecf20Sopenharmony_ci							 &__entry->l4,
2058c2ecf20Sopenharmony_ci							 &__entry->rc,
2068c2ecf20Sopenharmony_ci							 &__entry->sc,
2078c2ecf20Sopenharmony_ci							 &__entry->entropy,
2088c2ecf20Sopenharmony_ci							 &__entry->len,
2098c2ecf20Sopenharmony_ci							 &__entry->pkey,
2108c2ecf20Sopenharmony_ci							 &__entry->dlid,
2118c2ecf20Sopenharmony_ci							 &__entry->slid);
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_ci				if (__entry->l4 == OPA_16B_L4_FM) {
2148c2ecf20Sopenharmony_ci					__entry->opcode = IB_OPCODE_UD_SEND_ONLY;
2158c2ecf20Sopenharmony_ci					__entry->dest_qpn = hfi1_16B_get_dest_qpn(packet->mgmt);
2168c2ecf20Sopenharmony_ci					__entry->src_qpn = hfi1_16B_get_src_qpn(packet->mgmt);
2178c2ecf20Sopenharmony_ci				}  else {
2188c2ecf20Sopenharmony_ci					hfi1_trace_parse_16b_bth(packet->ohdr,
2198c2ecf20Sopenharmony_ci								 &__entry->ack,
2208c2ecf20Sopenharmony_ci								 &__entry->mig,
2218c2ecf20Sopenharmony_ci								 &__entry->opcode,
2228c2ecf20Sopenharmony_ci								 &__entry->pad,
2238c2ecf20Sopenharmony_ci								 &__entry->se,
2248c2ecf20Sopenharmony_ci								 &__entry->tver,
2258c2ecf20Sopenharmony_ci								 &__entry->psn,
2268c2ecf20Sopenharmony_ci								 &__entry->qpn);
2278c2ecf20Sopenharmony_ci				}
2288c2ecf20Sopenharmony_ci			} else {
2298c2ecf20Sopenharmony_ci				__entry->l4 = OPA_16B_L4_9B;
2308c2ecf20Sopenharmony_ci				hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
2318c2ecf20Sopenharmony_ci							&__entry->lnh,
2328c2ecf20Sopenharmony_ci							&__entry->lver,
2338c2ecf20Sopenharmony_ci							&__entry->sl,
2348c2ecf20Sopenharmony_ci							&__entry->sc,
2358c2ecf20Sopenharmony_ci							&__entry->len,
2368c2ecf20Sopenharmony_ci							&__entry->dlid,
2378c2ecf20Sopenharmony_ci							&__entry->slid);
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ci				  hfi1_trace_parse_9b_bth(packet->ohdr,
2408c2ecf20Sopenharmony_ci							  &__entry->ack,
2418c2ecf20Sopenharmony_ci							  &__entry->becn,
2428c2ecf20Sopenharmony_ci							  &__entry->fecn,
2438c2ecf20Sopenharmony_ci							  &__entry->mig,
2448c2ecf20Sopenharmony_ci							  &__entry->se,
2458c2ecf20Sopenharmony_ci							  &__entry->pad,
2468c2ecf20Sopenharmony_ci							  &__entry->opcode,
2478c2ecf20Sopenharmony_ci							  &__entry->tver,
2488c2ecf20Sopenharmony_ci							  &__entry->pkey,
2498c2ecf20Sopenharmony_ci							  &__entry->psn,
2508c2ecf20Sopenharmony_ci							  &__entry->qpn);
2518c2ecf20Sopenharmony_ci			}
2528c2ecf20Sopenharmony_ci			/* extended headers */
2538c2ecf20Sopenharmony_ci			if (__entry->l4 != OPA_16B_L4_FM)
2548c2ecf20Sopenharmony_ci				memcpy(__get_dynamic_array(ehdrs),
2558c2ecf20Sopenharmony_ci				       &packet->ohdr->u,
2568c2ecf20Sopenharmony_ci				       __get_dynamic_array_len(ehdrs));
2578c2ecf20Sopenharmony_ci			 ),
2588c2ecf20Sopenharmony_ci		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
2598c2ecf20Sopenharmony_ci			      __get_str(dev),
2608c2ecf20Sopenharmony_ci			      __entry->etype != RHF_RCV_TYPE_BYPASS ?
2618c2ecf20Sopenharmony_ci					show_packettype(__entry->etype) :
2628c2ecf20Sopenharmony_ci					hfi1_trace_get_packet_l2_str(
2638c2ecf20Sopenharmony_ci						__entry->l2),
2648c2ecf20Sopenharmony_ci			      hfi1_trace_fmt_lrh(p,
2658c2ecf20Sopenharmony_ci						 __entry->etype ==
2668c2ecf20Sopenharmony_ci							RHF_RCV_TYPE_BYPASS,
2678c2ecf20Sopenharmony_ci						 __entry->age,
2688c2ecf20Sopenharmony_ci						 __entry->becn,
2698c2ecf20Sopenharmony_ci						 __entry->fecn,
2708c2ecf20Sopenharmony_ci						 __entry->l4,
2718c2ecf20Sopenharmony_ci						 __entry->lnh,
2728c2ecf20Sopenharmony_ci						 show_lnh(__entry->lnh),
2738c2ecf20Sopenharmony_ci						 __entry->lver,
2748c2ecf20Sopenharmony_ci						 __entry->rc,
2758c2ecf20Sopenharmony_ci						 __entry->sc,
2768c2ecf20Sopenharmony_ci						 __entry->sl,
2778c2ecf20Sopenharmony_ci						 __entry->entropy,
2788c2ecf20Sopenharmony_ci						 __entry->len,
2798c2ecf20Sopenharmony_ci						 __entry->pkey,
2808c2ecf20Sopenharmony_ci						 __entry->dlid,
2818c2ecf20Sopenharmony_ci						 __entry->slid),
2828c2ecf20Sopenharmony_ci			      hfi1_trace_fmt_rest(p,
2838c2ecf20Sopenharmony_ci						  __entry->etype ==
2848c2ecf20Sopenharmony_ci							RHF_RCV_TYPE_BYPASS,
2858c2ecf20Sopenharmony_ci						  __entry->l4,
2868c2ecf20Sopenharmony_ci						  __entry->ack,
2878c2ecf20Sopenharmony_ci						  __entry->becn,
2888c2ecf20Sopenharmony_ci						  __entry->fecn,
2898c2ecf20Sopenharmony_ci						  __entry->mig,
2908c2ecf20Sopenharmony_ci						  __entry->se,
2918c2ecf20Sopenharmony_ci						  __entry->pad,
2928c2ecf20Sopenharmony_ci						  __entry->opcode,
2938c2ecf20Sopenharmony_ci						  show_ib_opcode(__entry->opcode),
2948c2ecf20Sopenharmony_ci						  __entry->tver,
2958c2ecf20Sopenharmony_ci						  __entry->pkey,
2968c2ecf20Sopenharmony_ci						  __entry->psn,
2978c2ecf20Sopenharmony_ci						  __entry->qpn,
2988c2ecf20Sopenharmony_ci						  __entry->dest_qpn,
2998c2ecf20Sopenharmony_ci						  __entry->src_qpn),
3008c2ecf20Sopenharmony_ci			      /* extended headers */
3018c2ecf20Sopenharmony_ci			      __get_dynamic_array_len(ehdrs),
3028c2ecf20Sopenharmony_ci			      __parse_ib_ehdrs(
3038c2ecf20Sopenharmony_ci					__entry->opcode,
3048c2ecf20Sopenharmony_ci					__entry->l4,
3058c2ecf20Sopenharmony_ci					__entry->dest_qpn,
3068c2ecf20Sopenharmony_ci					__entry->src_qpn,
3078c2ecf20Sopenharmony_ci					(void *)__get_dynamic_array(ehdrs))
3088c2ecf20Sopenharmony_ci			     )
3098c2ecf20Sopenharmony_ci);
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_input_ibhdr_template, input_ibhdr,
3128c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd,
3138c2ecf20Sopenharmony_ci		      struct hfi1_packet *packet, bool sc5),
3148c2ecf20Sopenharmony_ci	     TP_ARGS(dd, packet, sc5));
3158c2ecf20Sopenharmony_ci
3168c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
3178c2ecf20Sopenharmony_ci		    TP_PROTO(struct hfi1_devdata *dd,
3188c2ecf20Sopenharmony_ci			     struct hfi1_opa_header *opah, bool sc5),
3198c2ecf20Sopenharmony_ci		    TP_ARGS(dd, opah, sc5),
3208c2ecf20Sopenharmony_ci		    TP_STRUCT__entry(
3218c2ecf20Sopenharmony_ci			DD_DEV_ENTRY(dd)
3228c2ecf20Sopenharmony_ci			__field(u8, hdr_type)
3238c2ecf20Sopenharmony_ci			__field(u8, ack)
3248c2ecf20Sopenharmony_ci			__field(u8, age)
3258c2ecf20Sopenharmony_ci			__field(bool, becn)
3268c2ecf20Sopenharmony_ci			__field(bool, fecn)
3278c2ecf20Sopenharmony_ci			__field(u8, l4)
3288c2ecf20Sopenharmony_ci			__field(u8, lnh)
3298c2ecf20Sopenharmony_ci			__field(u8, lver)
3308c2ecf20Sopenharmony_ci			__field(u8, mig)
3318c2ecf20Sopenharmony_ci			__field(u8, opcode)
3328c2ecf20Sopenharmony_ci			__field(u8, pad)
3338c2ecf20Sopenharmony_ci			__field(u8, rc)
3348c2ecf20Sopenharmony_ci			__field(u8, sc)
3358c2ecf20Sopenharmony_ci			__field(u8, se)
3368c2ecf20Sopenharmony_ci			__field(u8, sl)
3378c2ecf20Sopenharmony_ci			__field(u8, tver)
3388c2ecf20Sopenharmony_ci			__field(u16, entropy)
3398c2ecf20Sopenharmony_ci			__field(u16, len)
3408c2ecf20Sopenharmony_ci			__field(u16, pkey)
3418c2ecf20Sopenharmony_ci			__field(u32, dlid)
3428c2ecf20Sopenharmony_ci			__field(u32, psn)
3438c2ecf20Sopenharmony_ci			__field(u32, qpn)
3448c2ecf20Sopenharmony_ci			__field(u32, slid)
3458c2ecf20Sopenharmony_ci			__field(u32, dest_qpn)
3468c2ecf20Sopenharmony_ci			__field(u32, src_qpn)
3478c2ecf20Sopenharmony_ci			/* extended headers */
3488c2ecf20Sopenharmony_ci			__dynamic_array(u8, ehdrs,
3498c2ecf20Sopenharmony_ci					hfi1_trace_opa_hdr_len(opah))
3508c2ecf20Sopenharmony_ci			),
3518c2ecf20Sopenharmony_ci		    TP_fast_assign(
3528c2ecf20Sopenharmony_ci			struct ib_other_headers *ohdr;
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ci			DD_DEV_ASSIGN(dd);
3558c2ecf20Sopenharmony_ci
3568c2ecf20Sopenharmony_ci			__entry->hdr_type = opah->hdr_type;
3578c2ecf20Sopenharmony_ci			__entry->dest_qpn = 0;
3588c2ecf20Sopenharmony_ci			__entry->src_qpn = 0;
3598c2ecf20Sopenharmony_ci			if (__entry->hdr_type)  {
3608c2ecf20Sopenharmony_ci				hfi1_trace_parse_16b_hdr(&opah->opah,
3618c2ecf20Sopenharmony_ci							 &__entry->age,
3628c2ecf20Sopenharmony_ci							 &__entry->becn,
3638c2ecf20Sopenharmony_ci							 &__entry->fecn,
3648c2ecf20Sopenharmony_ci							 &__entry->l4,
3658c2ecf20Sopenharmony_ci							 &__entry->rc,
3668c2ecf20Sopenharmony_ci							 &__entry->sc,
3678c2ecf20Sopenharmony_ci							 &__entry->entropy,
3688c2ecf20Sopenharmony_ci							 &__entry->len,
3698c2ecf20Sopenharmony_ci							 &__entry->pkey,
3708c2ecf20Sopenharmony_ci							 &__entry->dlid,
3718c2ecf20Sopenharmony_ci							 &__entry->slid);
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci				if (__entry->l4 == OPA_16B_L4_FM) {
3748c2ecf20Sopenharmony_ci					ohdr = NULL;
3758c2ecf20Sopenharmony_ci					__entry->opcode = IB_OPCODE_UD_SEND_ONLY;
3768c2ecf20Sopenharmony_ci					__entry->dest_qpn = hfi1_16B_get_dest_qpn(&opah->opah.u.mgmt);
3778c2ecf20Sopenharmony_ci					__entry->src_qpn = hfi1_16B_get_src_qpn(&opah->opah.u.mgmt);
3788c2ecf20Sopenharmony_ci				} else {
3798c2ecf20Sopenharmony_ci					if (__entry->l4 == OPA_16B_L4_IB_LOCAL)
3808c2ecf20Sopenharmony_ci						ohdr = &opah->opah.u.oth;
3818c2ecf20Sopenharmony_ci					else
3828c2ecf20Sopenharmony_ci						ohdr = &opah->opah.u.l.oth;
3838c2ecf20Sopenharmony_ci					hfi1_trace_parse_16b_bth(ohdr,
3848c2ecf20Sopenharmony_ci								 &__entry->ack,
3858c2ecf20Sopenharmony_ci								 &__entry->mig,
3868c2ecf20Sopenharmony_ci								 &__entry->opcode,
3878c2ecf20Sopenharmony_ci								 &__entry->pad,
3888c2ecf20Sopenharmony_ci								 &__entry->se,
3898c2ecf20Sopenharmony_ci								 &__entry->tver,
3908c2ecf20Sopenharmony_ci								 &__entry->psn,
3918c2ecf20Sopenharmony_ci								 &__entry->qpn);
3928c2ecf20Sopenharmony_ci				}
3938c2ecf20Sopenharmony_ci			} else {
3948c2ecf20Sopenharmony_ci				__entry->l4 = OPA_16B_L4_9B;
3958c2ecf20Sopenharmony_ci				hfi1_trace_parse_9b_hdr(&opah->ibh, sc5,
3968c2ecf20Sopenharmony_ci							&__entry->lnh,
3978c2ecf20Sopenharmony_ci							&__entry->lver,
3988c2ecf20Sopenharmony_ci							&__entry->sl,
3998c2ecf20Sopenharmony_ci							&__entry->sc,
4008c2ecf20Sopenharmony_ci							&__entry->len,
4018c2ecf20Sopenharmony_ci							&__entry->dlid,
4028c2ecf20Sopenharmony_ci							&__entry->slid);
4038c2ecf20Sopenharmony_ci				if (__entry->lnh == HFI1_LRH_BTH)
4048c2ecf20Sopenharmony_ci					ohdr = &opah->ibh.u.oth;
4058c2ecf20Sopenharmony_ci				else
4068c2ecf20Sopenharmony_ci					ohdr = &opah->ibh.u.l.oth;
4078c2ecf20Sopenharmony_ci				hfi1_trace_parse_9b_bth(ohdr,
4088c2ecf20Sopenharmony_ci							&__entry->ack,
4098c2ecf20Sopenharmony_ci							&__entry->becn,
4108c2ecf20Sopenharmony_ci							&__entry->fecn,
4118c2ecf20Sopenharmony_ci							&__entry->mig,
4128c2ecf20Sopenharmony_ci							&__entry->se,
4138c2ecf20Sopenharmony_ci							&__entry->pad,
4148c2ecf20Sopenharmony_ci							&__entry->opcode,
4158c2ecf20Sopenharmony_ci							&__entry->tver,
4168c2ecf20Sopenharmony_ci							&__entry->pkey,
4178c2ecf20Sopenharmony_ci							&__entry->psn,
4188c2ecf20Sopenharmony_ci							&__entry->qpn);
4198c2ecf20Sopenharmony_ci			}
4208c2ecf20Sopenharmony_ci
4218c2ecf20Sopenharmony_ci			/* extended headers */
4228c2ecf20Sopenharmony_ci			if (__entry->l4 != OPA_16B_L4_FM)
4238c2ecf20Sopenharmony_ci				memcpy(__get_dynamic_array(ehdrs),
4248c2ecf20Sopenharmony_ci				       &ohdr->u, __get_dynamic_array_len(ehdrs));
4258c2ecf20Sopenharmony_ci		    ),
4268c2ecf20Sopenharmony_ci		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
4278c2ecf20Sopenharmony_ci			      __get_str(dev),
4288c2ecf20Sopenharmony_ci			      hfi1_trace_get_packet_l4_str(__entry->l4),
4298c2ecf20Sopenharmony_ci			      hfi1_trace_fmt_lrh(p,
4308c2ecf20Sopenharmony_ci						 !!__entry->hdr_type,
4318c2ecf20Sopenharmony_ci						 __entry->age,
4328c2ecf20Sopenharmony_ci						 __entry->becn,
4338c2ecf20Sopenharmony_ci						 __entry->fecn,
4348c2ecf20Sopenharmony_ci						 __entry->l4,
4358c2ecf20Sopenharmony_ci						 __entry->lnh,
4368c2ecf20Sopenharmony_ci						 show_lnh(__entry->lnh),
4378c2ecf20Sopenharmony_ci						 __entry->lver,
4388c2ecf20Sopenharmony_ci						 __entry->rc,
4398c2ecf20Sopenharmony_ci						 __entry->sc,
4408c2ecf20Sopenharmony_ci						 __entry->sl,
4418c2ecf20Sopenharmony_ci						 __entry->entropy,
4428c2ecf20Sopenharmony_ci						 __entry->len,
4438c2ecf20Sopenharmony_ci						 __entry->pkey,
4448c2ecf20Sopenharmony_ci						 __entry->dlid,
4458c2ecf20Sopenharmony_ci						 __entry->slid),
4468c2ecf20Sopenharmony_ci			      hfi1_trace_fmt_rest(p,
4478c2ecf20Sopenharmony_ci						  !!__entry->hdr_type,
4488c2ecf20Sopenharmony_ci						  __entry->l4,
4498c2ecf20Sopenharmony_ci						  __entry->ack,
4508c2ecf20Sopenharmony_ci						  __entry->becn,
4518c2ecf20Sopenharmony_ci						  __entry->fecn,
4528c2ecf20Sopenharmony_ci						  __entry->mig,
4538c2ecf20Sopenharmony_ci						  __entry->se,
4548c2ecf20Sopenharmony_ci						  __entry->pad,
4558c2ecf20Sopenharmony_ci						  __entry->opcode,
4568c2ecf20Sopenharmony_ci						  show_ib_opcode(__entry->opcode),
4578c2ecf20Sopenharmony_ci						  __entry->tver,
4588c2ecf20Sopenharmony_ci						  __entry->pkey,
4598c2ecf20Sopenharmony_ci						  __entry->psn,
4608c2ecf20Sopenharmony_ci						  __entry->qpn,
4618c2ecf20Sopenharmony_ci						  __entry->dest_qpn,
4628c2ecf20Sopenharmony_ci						  __entry->src_qpn),
4638c2ecf20Sopenharmony_ci			      /* extended headers */
4648c2ecf20Sopenharmony_ci			      __get_dynamic_array_len(ehdrs),
4658c2ecf20Sopenharmony_ci			      __parse_ib_ehdrs(
4668c2ecf20Sopenharmony_ci					__entry->opcode,
4678c2ecf20Sopenharmony_ci					__entry->l4,
4688c2ecf20Sopenharmony_ci					__entry->dest_qpn,
4698c2ecf20Sopenharmony_ci					__entry->src_qpn,
4708c2ecf20Sopenharmony_ci					(void *)__get_dynamic_array(ehdrs))
4718c2ecf20Sopenharmony_ci			     )
4728c2ecf20Sopenharmony_ci);
4738c2ecf20Sopenharmony_ci
4748c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_output_ibhdr_template, pio_output_ibhdr,
4758c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd,
4768c2ecf20Sopenharmony_ci		      struct hfi1_opa_header *opah, bool sc5),
4778c2ecf20Sopenharmony_ci	     TP_ARGS(dd, opah, sc5));
4788c2ecf20Sopenharmony_ci
4798c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_output_ibhdr_template, ack_output_ibhdr,
4808c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd,
4818c2ecf20Sopenharmony_ci		      struct hfi1_opa_header *opah, bool sc5),
4828c2ecf20Sopenharmony_ci	     TP_ARGS(dd, opah, sc5));
4838c2ecf20Sopenharmony_ci
4848c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_output_ibhdr_template, sdma_output_ibhdr,
4858c2ecf20Sopenharmony_ci	     TP_PROTO(struct hfi1_devdata *dd,
4868c2ecf20Sopenharmony_ci		      struct hfi1_opa_header *opah, bool sc5),
4878c2ecf20Sopenharmony_ci	     TP_ARGS(dd, opah, sc5));
4888c2ecf20Sopenharmony_ci
4898c2ecf20Sopenharmony_ci
4908c2ecf20Sopenharmony_ci#endif /* __HFI1_TRACE_IBHDRS_H */
4918c2ecf20Sopenharmony_ci
4928c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH
4938c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
4948c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
4958c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_ibhdrs
4968c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
497