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