18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci* Copyright(c) 2015, 2016, 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_RC_H) || defined(TRACE_HEADER_MULTI_READ) 488c2ecf20Sopenharmony_ci#define __HFI1_TRACE_RC_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_rc 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(hfi1_rc_template, 598c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 psn), 608c2ecf20Sopenharmony_ci TP_ARGS(qp, psn), 618c2ecf20Sopenharmony_ci TP_STRUCT__entry( 628c2ecf20Sopenharmony_ci DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 638c2ecf20Sopenharmony_ci __field(u32, qpn) 648c2ecf20Sopenharmony_ci __field(u32, s_flags) 658c2ecf20Sopenharmony_ci __field(u32, psn) 668c2ecf20Sopenharmony_ci __field(u32, s_psn) 678c2ecf20Sopenharmony_ci __field(u32, s_next_psn) 688c2ecf20Sopenharmony_ci __field(u32, s_sending_psn) 698c2ecf20Sopenharmony_ci __field(u32, s_sending_hpsn) 708c2ecf20Sopenharmony_ci __field(u32, r_psn) 718c2ecf20Sopenharmony_ci ), 728c2ecf20Sopenharmony_ci TP_fast_assign( 738c2ecf20Sopenharmony_ci DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 748c2ecf20Sopenharmony_ci __entry->qpn = qp->ibqp.qp_num; 758c2ecf20Sopenharmony_ci __entry->s_flags = qp->s_flags; 768c2ecf20Sopenharmony_ci __entry->psn = psn; 778c2ecf20Sopenharmony_ci __entry->s_psn = qp->s_psn; 788c2ecf20Sopenharmony_ci __entry->s_next_psn = qp->s_next_psn; 798c2ecf20Sopenharmony_ci __entry->s_sending_psn = qp->s_sending_psn; 808c2ecf20Sopenharmony_ci __entry->s_sending_hpsn = qp->s_sending_hpsn; 818c2ecf20Sopenharmony_ci __entry->r_psn = qp->r_psn; 828c2ecf20Sopenharmony_ci ), 838c2ecf20Sopenharmony_ci TP_printk( 848c2ecf20Sopenharmony_ci "[%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", 858c2ecf20Sopenharmony_ci __get_str(dev), 868c2ecf20Sopenharmony_ci __entry->qpn, 878c2ecf20Sopenharmony_ci __entry->s_flags, 888c2ecf20Sopenharmony_ci __entry->psn, 898c2ecf20Sopenharmony_ci __entry->s_psn, 908c2ecf20Sopenharmony_ci __entry->s_next_psn, 918c2ecf20Sopenharmony_ci __entry->s_sending_psn, 928c2ecf20Sopenharmony_ci __entry->s_sending_hpsn, 938c2ecf20Sopenharmony_ci __entry->r_psn 948c2ecf20Sopenharmony_ci ) 958c2ecf20Sopenharmony_ci); 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_rc_template, hfi1_sendcomplete, 988c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 psn), 998c2ecf20Sopenharmony_ci TP_ARGS(qp, psn) 1008c2ecf20Sopenharmony_ci); 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_rc_template, hfi1_ack, 1038c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 psn), 1048c2ecf20Sopenharmony_ci TP_ARGS(qp, psn) 1058c2ecf20Sopenharmony_ci); 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ciDEFINE_EVENT(hfi1_rc_template, hfi1_rcv_error, 1088c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 psn), 1098c2ecf20Sopenharmony_ci TP_ARGS(qp, psn) 1108c2ecf20Sopenharmony_ci); 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ciDEFINE_EVENT(/* event */ 1138c2ecf20Sopenharmony_ci hfi1_rc_template, hfi1_rc_completion, 1148c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 psn), 1158c2ecf20Sopenharmony_ci TP_ARGS(qp, psn) 1168c2ecf20Sopenharmony_ci); 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(/* rc_ack */ 1198c2ecf20Sopenharmony_ci hfi1_rc_ack_template, 1208c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 1218c2ecf20Sopenharmony_ci struct rvt_swqe *wqe), 1228c2ecf20Sopenharmony_ci TP_ARGS(qp, aeth, psn, wqe), 1238c2ecf20Sopenharmony_ci TP_STRUCT__entry(/* entry */ 1248c2ecf20Sopenharmony_ci DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 1258c2ecf20Sopenharmony_ci __field(u32, qpn) 1268c2ecf20Sopenharmony_ci __field(u32, aeth) 1278c2ecf20Sopenharmony_ci __field(u32, psn) 1288c2ecf20Sopenharmony_ci __field(u8, opcode) 1298c2ecf20Sopenharmony_ci __field(u32, spsn) 1308c2ecf20Sopenharmony_ci __field(u32, lpsn) 1318c2ecf20Sopenharmony_ci ), 1328c2ecf20Sopenharmony_ci TP_fast_assign(/* assign */ 1338c2ecf20Sopenharmony_ci DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 1348c2ecf20Sopenharmony_ci __entry->qpn = qp->ibqp.qp_num; 1358c2ecf20Sopenharmony_ci __entry->aeth = aeth; 1368c2ecf20Sopenharmony_ci __entry->psn = psn; 1378c2ecf20Sopenharmony_ci __entry->opcode = wqe->wr.opcode; 1388c2ecf20Sopenharmony_ci __entry->spsn = wqe->psn; 1398c2ecf20Sopenharmony_ci __entry->lpsn = wqe->lpsn; 1408c2ecf20Sopenharmony_ci ), 1418c2ecf20Sopenharmony_ci TP_printk(/* print */ 1428c2ecf20Sopenharmony_ci "[%s] qpn 0x%x aeth 0x%x psn 0x%x opcode 0x%x spsn 0x%x lpsn 0x%x", 1438c2ecf20Sopenharmony_ci __get_str(dev), 1448c2ecf20Sopenharmony_ci __entry->qpn, 1458c2ecf20Sopenharmony_ci __entry->aeth, 1468c2ecf20Sopenharmony_ci __entry->psn, 1478c2ecf20Sopenharmony_ci __entry->opcode, 1488c2ecf20Sopenharmony_ci __entry->spsn, 1498c2ecf20Sopenharmony_ci __entry->lpsn 1508c2ecf20Sopenharmony_ci ) 1518c2ecf20Sopenharmony_ci); 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ciDEFINE_EVENT(/* do_rc_ack */ 1548c2ecf20Sopenharmony_ci hfi1_rc_ack_template, hfi1_rc_ack_do, 1558c2ecf20Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 1568c2ecf20Sopenharmony_ci struct rvt_swqe *wqe), 1578c2ecf20Sopenharmony_ci TP_ARGS(qp, aeth, psn, wqe) 1588c2ecf20Sopenharmony_ci); 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci#endif /* __HFI1_TRACE_RC_H */ 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH 1638c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE 1648c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH . 1658c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_rc 1668c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 167