1/* 2* Copyright(c) 2015, 2016, 2017 Intel Corporation. 3* 4* This file is provided under a dual BSD/GPLv2 license. When using or 5* redistributing this file, you may do so under either license. 6* 7* GPL LICENSE SUMMARY 8* 9* This program is free software; you can redistribute it and/or modify 10* it under the terms of version 2 of the GNU General Public License as 11* published by the Free Software Foundation. 12* 13* This program is distributed in the hope that it will be useful, but 14* WITHOUT ANY WARRANTY; without even the implied warranty of 15* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16* General Public License for more details. 17* 18* BSD LICENSE 19* 20* Redistribution and use in source and binary forms, with or without 21* modification, are permitted provided that the following conditions 22* are met: 23* 24* - Redistributions of source code must retain the above copyright 25* notice, this list of conditions and the following disclaimer. 26* - Redistributions in binary form must reproduce the above copyright 27* notice, this list of conditions and the following disclaimer in 28* the documentation and/or other materials provided with the 29* distribution. 30* - Neither the name of Intel Corporation nor the names of its 31* contributors may be used to endorse or promote products derived 32* from this software without specific prior written permission. 33* 34* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45* 46*/ 47#if !defined(__HFI1_TRACE_RC_H) || defined(TRACE_HEADER_MULTI_READ) 48#define __HFI1_TRACE_RC_H 49 50#include <linux/tracepoint.h> 51#include <linux/trace_seq.h> 52 53#include "hfi.h" 54 55#undef TRACE_SYSTEM 56#define TRACE_SYSTEM hfi1_rc 57 58DECLARE_EVENT_CLASS(hfi1_rc_template, 59 TP_PROTO(struct rvt_qp *qp, u32 psn), 60 TP_ARGS(qp, psn), 61 TP_STRUCT__entry( 62 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 63 __field(u32, qpn) 64 __field(u32, s_flags) 65 __field(u32, psn) 66 __field(u32, s_psn) 67 __field(u32, s_next_psn) 68 __field(u32, s_sending_psn) 69 __field(u32, s_sending_hpsn) 70 __field(u32, r_psn) 71 ), 72 TP_fast_assign( 73 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 74 __entry->qpn = qp->ibqp.qp_num; 75 __entry->s_flags = qp->s_flags; 76 __entry->psn = psn; 77 __entry->s_psn = qp->s_psn; 78 __entry->s_next_psn = qp->s_next_psn; 79 __entry->s_sending_psn = qp->s_sending_psn; 80 __entry->s_sending_hpsn = qp->s_sending_hpsn; 81 __entry->r_psn = qp->r_psn; 82 ), 83 TP_printk( 84 "[%s] qpn 0x%x s_flags 0x%x psn 0x%x s_psn 0x%x s_next_psn 0x%x s_sending_psn 0x%x sending_hpsn 0x%x r_psn 0x%x", 85 __get_str(dev), 86 __entry->qpn, 87 __entry->s_flags, 88 __entry->psn, 89 __entry->s_psn, 90 __entry->s_next_psn, 91 __entry->s_sending_psn, 92 __entry->s_sending_hpsn, 93 __entry->r_psn 94 ) 95); 96 97DEFINE_EVENT(hfi1_rc_template, hfi1_sendcomplete, 98 TP_PROTO(struct rvt_qp *qp, u32 psn), 99 TP_ARGS(qp, psn) 100); 101 102DEFINE_EVENT(hfi1_rc_template, hfi1_ack, 103 TP_PROTO(struct rvt_qp *qp, u32 psn), 104 TP_ARGS(qp, psn) 105); 106 107DEFINE_EVENT(hfi1_rc_template, hfi1_rcv_error, 108 TP_PROTO(struct rvt_qp *qp, u32 psn), 109 TP_ARGS(qp, psn) 110); 111 112DEFINE_EVENT(/* event */ 113 hfi1_rc_template, hfi1_rc_completion, 114 TP_PROTO(struct rvt_qp *qp, u32 psn), 115 TP_ARGS(qp, psn) 116); 117 118DECLARE_EVENT_CLASS(/* rc_ack */ 119 hfi1_rc_ack_template, 120 TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 121 struct rvt_swqe *wqe), 122 TP_ARGS(qp, aeth, psn, wqe), 123 TP_STRUCT__entry(/* entry */ 124 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 125 __field(u32, qpn) 126 __field(u32, aeth) 127 __field(u32, psn) 128 __field(u8, opcode) 129 __field(u32, spsn) 130 __field(u32, lpsn) 131 ), 132 TP_fast_assign(/* assign */ 133 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 134 __entry->qpn = qp->ibqp.qp_num; 135 __entry->aeth = aeth; 136 __entry->psn = psn; 137 __entry->opcode = wqe->wr.opcode; 138 __entry->spsn = wqe->psn; 139 __entry->lpsn = wqe->lpsn; 140 ), 141 TP_printk(/* print */ 142 "[%s] qpn 0x%x aeth 0x%x psn 0x%x opcode 0x%x spsn 0x%x lpsn 0x%x", 143 __get_str(dev), 144 __entry->qpn, 145 __entry->aeth, 146 __entry->psn, 147 __entry->opcode, 148 __entry->spsn, 149 __entry->lpsn 150 ) 151); 152 153DEFINE_EVENT(/* do_rc_ack */ 154 hfi1_rc_ack_template, hfi1_rc_ack_do, 155 TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 156 struct rvt_swqe *wqe), 157 TP_ARGS(qp, aeth, psn, wqe) 158); 159 160#endif /* __HFI1_TRACE_RC_H */ 161 162#undef TRACE_INCLUDE_PATH 163#undef TRACE_INCLUDE_FILE 164#define TRACE_INCLUDE_PATH . 165#define TRACE_INCLUDE_FILE trace_rc 166#include <trace/define_trace.h> 167