xref: /OK3568_Linux_fs/kernel/drivers/s390/cio/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Tracepoint header for the s390 Common I/O layer (CIO)
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright IBM Corp. 2015
6*4882a593Smuzhiyun  * Author(s): Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/kernel.h>
10*4882a593Smuzhiyun #include <asm/crw.h>
11*4882a593Smuzhiyun #include <uapi/asm/chpid.h>
12*4882a593Smuzhiyun #include <uapi/asm/schid.h>
13*4882a593Smuzhiyun #include "cio.h"
14*4882a593Smuzhiyun #include "orb.h"
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #undef TRACE_SYSTEM
17*4882a593Smuzhiyun #define TRACE_SYSTEM s390
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #if !defined(_TRACE_S390_CIO_H) || defined(TRACE_HEADER_MULTI_READ)
20*4882a593Smuzhiyun #define _TRACE_S390_CIO_H
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include <linux/tracepoint.h>
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun DECLARE_EVENT_CLASS(s390_class_schib,
25*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
26*4882a593Smuzhiyun 	TP_ARGS(schid, schib, cc),
27*4882a593Smuzhiyun 	TP_STRUCT__entry(
28*4882a593Smuzhiyun 		__field(u8, cssid)
29*4882a593Smuzhiyun 		__field(u8, ssid)
30*4882a593Smuzhiyun 		__field(u16, schno)
31*4882a593Smuzhiyun 		__field(u16, devno)
32*4882a593Smuzhiyun 		__field_struct(struct schib, schib)
33*4882a593Smuzhiyun 		__field(u8, pmcw_ena)
34*4882a593Smuzhiyun 		__field(u8, pmcw_st)
35*4882a593Smuzhiyun 		__field(u8, pmcw_dnv)
36*4882a593Smuzhiyun 		__field(u16, pmcw_dev)
37*4882a593Smuzhiyun 		__field(u8, pmcw_lpm)
38*4882a593Smuzhiyun 		__field(u8, pmcw_pnom)
39*4882a593Smuzhiyun 		__field(u8, pmcw_lpum)
40*4882a593Smuzhiyun 		__field(u8, pmcw_pim)
41*4882a593Smuzhiyun 		__field(u8, pmcw_pam)
42*4882a593Smuzhiyun 		__field(u8, pmcw_pom)
43*4882a593Smuzhiyun 		__field(u64, pmcw_chpid)
44*4882a593Smuzhiyun 		__field(int, cc)
45*4882a593Smuzhiyun 	),
46*4882a593Smuzhiyun 	TP_fast_assign(
47*4882a593Smuzhiyun 		__entry->cssid = schid.cssid;
48*4882a593Smuzhiyun 		__entry->ssid = schid.ssid;
49*4882a593Smuzhiyun 		__entry->schno = schid.sch_no;
50*4882a593Smuzhiyun 		__entry->devno = schib->pmcw.dev;
51*4882a593Smuzhiyun 		__entry->schib = *schib;
52*4882a593Smuzhiyun 		__entry->pmcw_ena = schib->pmcw.ena;
53*4882a593Smuzhiyun 		__entry->pmcw_st = schib->pmcw.ena;
54*4882a593Smuzhiyun 		__entry->pmcw_dnv = schib->pmcw.dnv;
55*4882a593Smuzhiyun 		__entry->pmcw_dev = schib->pmcw.dev;
56*4882a593Smuzhiyun 		__entry->pmcw_lpm = schib->pmcw.lpm;
57*4882a593Smuzhiyun 		__entry->pmcw_pnom = schib->pmcw.pnom;
58*4882a593Smuzhiyun 		__entry->pmcw_lpum = schib->pmcw.lpum;
59*4882a593Smuzhiyun 		__entry->pmcw_pim = schib->pmcw.pim;
60*4882a593Smuzhiyun 		__entry->pmcw_pam = schib->pmcw.pam;
61*4882a593Smuzhiyun 		__entry->pmcw_pom = schib->pmcw.pom;
62*4882a593Smuzhiyun 		memcpy(&__entry->pmcw_chpid, &schib->pmcw.chpid, 8);
63*4882a593Smuzhiyun 		__entry->cc = cc;
64*4882a593Smuzhiyun 	),
65*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x cc=%d ena=%d st=%d dnv=%d dev=%04x "
66*4882a593Smuzhiyun 		  "lpm=0x%02x pnom=0x%02x lpum=0x%02x pim=0x%02x pam=0x%02x "
67*4882a593Smuzhiyun 		  "pom=0x%02x chpids=%016llx",
68*4882a593Smuzhiyun 		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
69*4882a593Smuzhiyun 		  __entry->pmcw_ena, __entry->pmcw_st,
70*4882a593Smuzhiyun 		  __entry->pmcw_dnv, __entry->pmcw_dev,
71*4882a593Smuzhiyun 		  __entry->pmcw_lpm, __entry->pmcw_pnom,
72*4882a593Smuzhiyun 		  __entry->pmcw_lpum, __entry->pmcw_pim,
73*4882a593Smuzhiyun 		  __entry->pmcw_pam, __entry->pmcw_pom,
74*4882a593Smuzhiyun 		  __entry->pmcw_chpid
75*4882a593Smuzhiyun 	)
76*4882a593Smuzhiyun );
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /**
79*4882a593Smuzhiyun  * s390_cio_stsch -  Store Subchannel instruction (STSCH) was performed
80*4882a593Smuzhiyun  * @schid: Subchannel ID
81*4882a593Smuzhiyun  * @schib: Subchannel-Information block
82*4882a593Smuzhiyun  * @cc: Condition code
83*4882a593Smuzhiyun  */
84*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schib, s390_cio_stsch,
85*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
86*4882a593Smuzhiyun 	TP_ARGS(schid, schib, cc)
87*4882a593Smuzhiyun );
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun /**
90*4882a593Smuzhiyun  * s390_cio_msch -  Modify Subchannel instruction (MSCH) was performed
91*4882a593Smuzhiyun  * @schid: Subchannel ID
92*4882a593Smuzhiyun  * @schib: Subchannel-Information block
93*4882a593Smuzhiyun  * @cc: Condition code
94*4882a593Smuzhiyun  */
95*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schib, s390_cio_msch,
96*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
97*4882a593Smuzhiyun 	TP_ARGS(schid, schib, cc)
98*4882a593Smuzhiyun );
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /**
101*4882a593Smuzhiyun  * s390_cio_tsch - Test Subchannel instruction (TSCH) was performed
102*4882a593Smuzhiyun  * @schid: Subchannel ID
103*4882a593Smuzhiyun  * @irb: Interruption-Response Block
104*4882a593Smuzhiyun  * @cc: Condition code
105*4882a593Smuzhiyun  */
106*4882a593Smuzhiyun TRACE_EVENT(s390_cio_tsch,
107*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, struct irb *irb, int cc),
108*4882a593Smuzhiyun 	TP_ARGS(schid, irb, cc),
109*4882a593Smuzhiyun 	TP_STRUCT__entry(
110*4882a593Smuzhiyun 		__field(u8, cssid)
111*4882a593Smuzhiyun 		__field(u8, ssid)
112*4882a593Smuzhiyun 		__field(u16, schno)
113*4882a593Smuzhiyun 		__field_struct(struct irb, irb)
114*4882a593Smuzhiyun 		__field(u8, scsw_dcc)
115*4882a593Smuzhiyun 		__field(u8, scsw_pno)
116*4882a593Smuzhiyun 		__field(u8, scsw_fctl)
117*4882a593Smuzhiyun 		__field(u8, scsw_actl)
118*4882a593Smuzhiyun 		__field(u8, scsw_stctl)
119*4882a593Smuzhiyun 		__field(u8, scsw_dstat)
120*4882a593Smuzhiyun 		__field(u8, scsw_cstat)
121*4882a593Smuzhiyun 		__field(int, cc)
122*4882a593Smuzhiyun 	),
123*4882a593Smuzhiyun 	TP_fast_assign(
124*4882a593Smuzhiyun 		__entry->cssid = schid.cssid;
125*4882a593Smuzhiyun 		__entry->ssid = schid.ssid;
126*4882a593Smuzhiyun 		__entry->schno = schid.sch_no;
127*4882a593Smuzhiyun 		__entry->irb = *irb;
128*4882a593Smuzhiyun 		__entry->scsw_dcc = scsw_cc(&irb->scsw);
129*4882a593Smuzhiyun 		__entry->scsw_pno = scsw_pno(&irb->scsw);
130*4882a593Smuzhiyun 		__entry->scsw_fctl = scsw_fctl(&irb->scsw);
131*4882a593Smuzhiyun 		__entry->scsw_actl = scsw_actl(&irb->scsw);
132*4882a593Smuzhiyun 		__entry->scsw_stctl = scsw_stctl(&irb->scsw);
133*4882a593Smuzhiyun 		__entry->scsw_dstat = scsw_dstat(&irb->scsw);
134*4882a593Smuzhiyun 		__entry->scsw_cstat = scsw_cstat(&irb->scsw);
135*4882a593Smuzhiyun 		__entry->cc = cc;
136*4882a593Smuzhiyun 	),
137*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x cc=%d dcc=%d pno=%d fctl=0x%x actl=0x%x "
138*4882a593Smuzhiyun 		  "stctl=0x%x dstat=0x%x cstat=0x%x",
139*4882a593Smuzhiyun 		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
140*4882a593Smuzhiyun 		  __entry->scsw_dcc, __entry->scsw_pno,
141*4882a593Smuzhiyun 		  __entry->scsw_fctl, __entry->scsw_actl,
142*4882a593Smuzhiyun 		  __entry->scsw_stctl,
143*4882a593Smuzhiyun 		  __entry->scsw_dstat, __entry->scsw_cstat
144*4882a593Smuzhiyun 	)
145*4882a593Smuzhiyun );
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /**
148*4882a593Smuzhiyun  * s390_cio_tpi - Test Pending Interruption instruction (TPI) was performed
149*4882a593Smuzhiyun  * @addr: Address of the I/O interruption code or %NULL
150*4882a593Smuzhiyun  * @cc: Condition code
151*4882a593Smuzhiyun  */
152*4882a593Smuzhiyun TRACE_EVENT(s390_cio_tpi,
153*4882a593Smuzhiyun 	TP_PROTO(struct tpi_info *addr, int cc),
154*4882a593Smuzhiyun 	TP_ARGS(addr, cc),
155*4882a593Smuzhiyun 	TP_STRUCT__entry(
156*4882a593Smuzhiyun 		__field(int, cc)
157*4882a593Smuzhiyun 		__field_struct(struct tpi_info, tpi_info)
158*4882a593Smuzhiyun 		__field(u8, cssid)
159*4882a593Smuzhiyun 		__field(u8, ssid)
160*4882a593Smuzhiyun 		__field(u16, schno)
161*4882a593Smuzhiyun 		__field(u8, adapter_IO)
162*4882a593Smuzhiyun 		__field(u8, isc)
163*4882a593Smuzhiyun 		__field(u8, type)
164*4882a593Smuzhiyun 	),
165*4882a593Smuzhiyun 	TP_fast_assign(
166*4882a593Smuzhiyun 		__entry->cc = cc;
167*4882a593Smuzhiyun 		if (cc != 0)
168*4882a593Smuzhiyun 			memset(&__entry->tpi_info, 0, sizeof(struct tpi_info));
169*4882a593Smuzhiyun 		else if (addr)
170*4882a593Smuzhiyun 			__entry->tpi_info = *addr;
171*4882a593Smuzhiyun 		else {
172*4882a593Smuzhiyun 			memcpy(&__entry->tpi_info, &S390_lowcore.subchannel_id,
173*4882a593Smuzhiyun 			       sizeof(struct tpi_info));
174*4882a593Smuzhiyun 		}
175*4882a593Smuzhiyun 		__entry->cssid = __entry->tpi_info.schid.cssid;
176*4882a593Smuzhiyun 		__entry->ssid = __entry->tpi_info.schid.ssid;
177*4882a593Smuzhiyun 		__entry->schno = __entry->tpi_info.schid.sch_no;
178*4882a593Smuzhiyun 		__entry->adapter_IO = __entry->tpi_info.adapter_IO;
179*4882a593Smuzhiyun 		__entry->isc = __entry->tpi_info.isc;
180*4882a593Smuzhiyun 		__entry->type = __entry->tpi_info.type;
181*4882a593Smuzhiyun 	),
182*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x cc=%d a=%d isc=%d type=%d",
183*4882a593Smuzhiyun 		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
184*4882a593Smuzhiyun 		  __entry->adapter_IO, __entry->isc,
185*4882a593Smuzhiyun 		  __entry->type
186*4882a593Smuzhiyun 	)
187*4882a593Smuzhiyun );
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun /**
190*4882a593Smuzhiyun  * s390_cio_ssch - Start Subchannel instruction (SSCH) was performed
191*4882a593Smuzhiyun  * @schid: Subchannel ID
192*4882a593Smuzhiyun  * @orb: Operation-Request Block
193*4882a593Smuzhiyun  * @cc: Condition code
194*4882a593Smuzhiyun  */
195*4882a593Smuzhiyun TRACE_EVENT(s390_cio_ssch,
196*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, union orb *orb, int cc),
197*4882a593Smuzhiyun 	TP_ARGS(schid, orb, cc),
198*4882a593Smuzhiyun 	TP_STRUCT__entry(
199*4882a593Smuzhiyun 		__field(u8, cssid)
200*4882a593Smuzhiyun 		__field(u8, ssid)
201*4882a593Smuzhiyun 		__field(u16, schno)
202*4882a593Smuzhiyun 		__field_struct(union orb, orb)
203*4882a593Smuzhiyun 		__field(int, cc)
204*4882a593Smuzhiyun 	),
205*4882a593Smuzhiyun 	TP_fast_assign(
206*4882a593Smuzhiyun 		__entry->cssid = schid.cssid;
207*4882a593Smuzhiyun 		__entry->ssid = schid.ssid;
208*4882a593Smuzhiyun 		__entry->schno = schid.sch_no;
209*4882a593Smuzhiyun 		__entry->orb = *orb;
210*4882a593Smuzhiyun 		__entry->cc = cc;
211*4882a593Smuzhiyun 	),
212*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
213*4882a593Smuzhiyun 		  __entry->schno, __entry->cc
214*4882a593Smuzhiyun 	)
215*4882a593Smuzhiyun );
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun DECLARE_EVENT_CLASS(s390_class_schid,
218*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, int cc),
219*4882a593Smuzhiyun 	TP_ARGS(schid, cc),
220*4882a593Smuzhiyun 	TP_STRUCT__entry(
221*4882a593Smuzhiyun 		__field(u8, cssid)
222*4882a593Smuzhiyun 		__field(u8, ssid)
223*4882a593Smuzhiyun 		__field(u16, schno)
224*4882a593Smuzhiyun 		__field(int, cc)
225*4882a593Smuzhiyun 	),
226*4882a593Smuzhiyun 	TP_fast_assign(
227*4882a593Smuzhiyun 		__entry->cssid = schid.cssid;
228*4882a593Smuzhiyun 		__entry->ssid = schid.ssid;
229*4882a593Smuzhiyun 		__entry->schno = schid.sch_no;
230*4882a593Smuzhiyun 		__entry->cc = cc;
231*4882a593Smuzhiyun 	),
232*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
233*4882a593Smuzhiyun 		  __entry->schno, __entry->cc
234*4882a593Smuzhiyun 	)
235*4882a593Smuzhiyun );
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun /**
238*4882a593Smuzhiyun  * s390_cio_csch - Clear Subchannel instruction (CSCH) was performed
239*4882a593Smuzhiyun  * @schid: Subchannel ID
240*4882a593Smuzhiyun  * @cc: Condition code
241*4882a593Smuzhiyun  */
242*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schid, s390_cio_csch,
243*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, int cc),
244*4882a593Smuzhiyun 	TP_ARGS(schid, cc)
245*4882a593Smuzhiyun );
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun /**
248*4882a593Smuzhiyun  * s390_cio_hsch - Halt Subchannel instruction (HSCH) was performed
249*4882a593Smuzhiyun  * @schid: Subchannel ID
250*4882a593Smuzhiyun  * @cc: Condition code
251*4882a593Smuzhiyun  */
252*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schid, s390_cio_hsch,
253*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, int cc),
254*4882a593Smuzhiyun 	TP_ARGS(schid, cc)
255*4882a593Smuzhiyun );
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun /**
258*4882a593Smuzhiyun  * s390_cio_xsch - Cancel Subchannel instruction (XSCH) was performed
259*4882a593Smuzhiyun  * @schid: Subchannel ID
260*4882a593Smuzhiyun  * @cc: Condition code
261*4882a593Smuzhiyun  */
262*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schid, s390_cio_xsch,
263*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, int cc),
264*4882a593Smuzhiyun 	TP_ARGS(schid, cc)
265*4882a593Smuzhiyun );
266*4882a593Smuzhiyun 
267*4882a593Smuzhiyun /**
268*4882a593Smuzhiyun  * s390_cio_rsch - Resume Subchannel instruction (RSCH) was performed
269*4882a593Smuzhiyun  * @schid: Subchannel ID
270*4882a593Smuzhiyun  * @cc: Condition code
271*4882a593Smuzhiyun  */
272*4882a593Smuzhiyun DEFINE_EVENT(s390_class_schid, s390_cio_rsch,
273*4882a593Smuzhiyun 	TP_PROTO(struct subchannel_id schid, int cc),
274*4882a593Smuzhiyun 	TP_ARGS(schid, cc)
275*4882a593Smuzhiyun );
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun #define CHSC_MAX_REQUEST_LEN		64
278*4882a593Smuzhiyun #define CHSC_MAX_RESPONSE_LEN		64
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun /**
281*4882a593Smuzhiyun  * s390_cio_chsc - Channel Subsystem Call (CHSC) instruction was performed
282*4882a593Smuzhiyun  * @chsc: CHSC block
283*4882a593Smuzhiyun  * @cc: Condition code
284*4882a593Smuzhiyun  */
285*4882a593Smuzhiyun TRACE_EVENT(s390_cio_chsc,
286*4882a593Smuzhiyun 	TP_PROTO(struct chsc_header *chsc, int cc),
287*4882a593Smuzhiyun 	TP_ARGS(chsc, cc),
288*4882a593Smuzhiyun 	TP_STRUCT__entry(
289*4882a593Smuzhiyun 		__field(int, cc)
290*4882a593Smuzhiyun 		__field(u16, code)
291*4882a593Smuzhiyun 		__field(u16, rcode)
292*4882a593Smuzhiyun 		__array(u8, request, CHSC_MAX_REQUEST_LEN)
293*4882a593Smuzhiyun 		__array(u8, response, CHSC_MAX_RESPONSE_LEN)
294*4882a593Smuzhiyun 	),
295*4882a593Smuzhiyun 	TP_fast_assign(
296*4882a593Smuzhiyun 		__entry->cc = cc;
297*4882a593Smuzhiyun 		__entry->code = chsc->code;
298*4882a593Smuzhiyun 		memcpy(&entry->request, chsc,
299*4882a593Smuzhiyun 		       min_t(u16, chsc->length, CHSC_MAX_REQUEST_LEN));
300*4882a593Smuzhiyun 		chsc = (struct chsc_header *) ((char *) chsc + chsc->length);
301*4882a593Smuzhiyun 		__entry->rcode = chsc->code;
302*4882a593Smuzhiyun 		memcpy(&entry->response, chsc,
303*4882a593Smuzhiyun 		       min_t(u16, chsc->length, CHSC_MAX_RESPONSE_LEN));
304*4882a593Smuzhiyun 	),
305*4882a593Smuzhiyun 	TP_printk("code=0x%04x cc=%d rcode=0x%04x", __entry->code,
306*4882a593Smuzhiyun 		  __entry->cc, __entry->rcode)
307*4882a593Smuzhiyun );
308*4882a593Smuzhiyun 
309*4882a593Smuzhiyun /**
310*4882a593Smuzhiyun  * s390_cio_interrupt - An I/O interrupt occurred
311*4882a593Smuzhiyun  * @tpi_info: Address of the I/O interruption code
312*4882a593Smuzhiyun  */
313*4882a593Smuzhiyun TRACE_EVENT(s390_cio_interrupt,
314*4882a593Smuzhiyun 	TP_PROTO(struct tpi_info *tpi_info),
315*4882a593Smuzhiyun 	TP_ARGS(tpi_info),
316*4882a593Smuzhiyun 	TP_STRUCT__entry(
317*4882a593Smuzhiyun 		__field_struct(struct tpi_info, tpi_info)
318*4882a593Smuzhiyun 		__field(u8, cssid)
319*4882a593Smuzhiyun 		__field(u8, ssid)
320*4882a593Smuzhiyun 		__field(u16, schno)
321*4882a593Smuzhiyun 		__field(u8, isc)
322*4882a593Smuzhiyun 		__field(u8, type)
323*4882a593Smuzhiyun 	),
324*4882a593Smuzhiyun 	TP_fast_assign(
325*4882a593Smuzhiyun 		__entry->tpi_info = *tpi_info;
326*4882a593Smuzhiyun 		__entry->cssid = tpi_info->schid.cssid;
327*4882a593Smuzhiyun 		__entry->ssid = tpi_info->schid.ssid;
328*4882a593Smuzhiyun 		__entry->schno = tpi_info->schid.sch_no;
329*4882a593Smuzhiyun 		__entry->isc = tpi_info->isc;
330*4882a593Smuzhiyun 		__entry->type = tpi_info->type;
331*4882a593Smuzhiyun 	),
332*4882a593Smuzhiyun 	TP_printk("schid=%x.%x.%04x isc=%d type=%d",
333*4882a593Smuzhiyun 		  __entry->cssid, __entry->ssid, __entry->schno,
334*4882a593Smuzhiyun 		  __entry->isc, __entry->type
335*4882a593Smuzhiyun 	)
336*4882a593Smuzhiyun );
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun /**
339*4882a593Smuzhiyun  * s390_cio_adapter_int - An adapter interrupt occurred
340*4882a593Smuzhiyun  * @tpi_info: Address of the I/O interruption code
341*4882a593Smuzhiyun  */
342*4882a593Smuzhiyun TRACE_EVENT(s390_cio_adapter_int,
343*4882a593Smuzhiyun 	TP_PROTO(struct tpi_info *tpi_info),
344*4882a593Smuzhiyun 	TP_ARGS(tpi_info),
345*4882a593Smuzhiyun 	TP_STRUCT__entry(
346*4882a593Smuzhiyun 		__field_struct(struct tpi_info, tpi_info)
347*4882a593Smuzhiyun 		__field(u8, isc)
348*4882a593Smuzhiyun 	),
349*4882a593Smuzhiyun 	TP_fast_assign(
350*4882a593Smuzhiyun 		__entry->tpi_info = *tpi_info;
351*4882a593Smuzhiyun 		__entry->isc = tpi_info->isc;
352*4882a593Smuzhiyun 	),
353*4882a593Smuzhiyun 	TP_printk("isc=%d", __entry->isc)
354*4882a593Smuzhiyun );
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun /**
357*4882a593Smuzhiyun  * s390_cio_stcrw - Store Channel Report Word (STCRW) was performed
358*4882a593Smuzhiyun  * @crw: Channel Report Word
359*4882a593Smuzhiyun  * @cc: Condition code
360*4882a593Smuzhiyun  */
361*4882a593Smuzhiyun TRACE_EVENT(s390_cio_stcrw,
362*4882a593Smuzhiyun 	TP_PROTO(struct crw *crw, int cc),
363*4882a593Smuzhiyun 	TP_ARGS(crw, cc),
364*4882a593Smuzhiyun 	TP_STRUCT__entry(
365*4882a593Smuzhiyun 		__field_struct(struct crw, crw)
366*4882a593Smuzhiyun 		__field(int, cc)
367*4882a593Smuzhiyun 		__field(u8, slct)
368*4882a593Smuzhiyun 		__field(u8, oflw)
369*4882a593Smuzhiyun 		__field(u8, chn)
370*4882a593Smuzhiyun 		__field(u8, rsc)
371*4882a593Smuzhiyun 		__field(u8, anc)
372*4882a593Smuzhiyun 		__field(u8, erc)
373*4882a593Smuzhiyun 		__field(u16, rsid)
374*4882a593Smuzhiyun 	),
375*4882a593Smuzhiyun 	TP_fast_assign(
376*4882a593Smuzhiyun 		__entry->crw = *crw;
377*4882a593Smuzhiyun 		__entry->cc = cc;
378*4882a593Smuzhiyun 		__entry->slct = crw->slct;
379*4882a593Smuzhiyun 		__entry->oflw = crw->oflw;
380*4882a593Smuzhiyun 		__entry->chn = crw->chn;
381*4882a593Smuzhiyun 		__entry->rsc = crw->rsc;
382*4882a593Smuzhiyun 		__entry->anc = crw->anc;
383*4882a593Smuzhiyun 		__entry->erc = crw->erc;
384*4882a593Smuzhiyun 		__entry->rsid = crw->rsid;
385*4882a593Smuzhiyun 	),
386*4882a593Smuzhiyun 	TP_printk("cc=%d slct=%d oflw=%d chn=%d rsc=%d anc=%d erc=0x%x "
387*4882a593Smuzhiyun 		  "rsid=0x%x",
388*4882a593Smuzhiyun 		  __entry->cc, __entry->slct, __entry->oflw,
389*4882a593Smuzhiyun 		  __entry->chn, __entry->rsc,  __entry->anc,
390*4882a593Smuzhiyun 		  __entry->erc, __entry->rsid
391*4882a593Smuzhiyun 	)
392*4882a593Smuzhiyun );
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun #endif /* _TRACE_S390_CIO_H */
395*4882a593Smuzhiyun 
396*4882a593Smuzhiyun /* This part must be outside protection */
397*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
398*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE
401*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun #include <trace/define_trace.h>
404