162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Tracepoint header for the s390 Common I/O layer (CIO)
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright IBM Corp. 2015
662306a36Sopenharmony_ci * Author(s): Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/kernel.h>
1062306a36Sopenharmony_ci#include <asm/crw.h>
1162306a36Sopenharmony_ci#include <uapi/asm/chpid.h>
1262306a36Sopenharmony_ci#include <uapi/asm/schid.h>
1362306a36Sopenharmony_ci#include "cio.h"
1462306a36Sopenharmony_ci#include "orb.h"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#undef TRACE_SYSTEM
1762306a36Sopenharmony_ci#define TRACE_SYSTEM s390
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#if !defined(_TRACE_S390_CIO_H) || defined(TRACE_HEADER_MULTI_READ)
2062306a36Sopenharmony_ci#define _TRACE_S390_CIO_H
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#include <linux/tracepoint.h>
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(s390_class_schib,
2562306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
2662306a36Sopenharmony_ci	TP_ARGS(schid, schib, cc),
2762306a36Sopenharmony_ci	TP_STRUCT__entry(
2862306a36Sopenharmony_ci		__field(u8, cssid)
2962306a36Sopenharmony_ci		__field(u8, ssid)
3062306a36Sopenharmony_ci		__field(u16, schno)
3162306a36Sopenharmony_ci		__field(u16, devno)
3262306a36Sopenharmony_ci		__field_struct(struct schib, schib)
3362306a36Sopenharmony_ci		__field(u8, pmcw_ena)
3462306a36Sopenharmony_ci		__field(u8, pmcw_st)
3562306a36Sopenharmony_ci		__field(u8, pmcw_dnv)
3662306a36Sopenharmony_ci		__field(u16, pmcw_dev)
3762306a36Sopenharmony_ci		__field(u8, pmcw_lpm)
3862306a36Sopenharmony_ci		__field(u8, pmcw_pnom)
3962306a36Sopenharmony_ci		__field(u8, pmcw_lpum)
4062306a36Sopenharmony_ci		__field(u8, pmcw_pim)
4162306a36Sopenharmony_ci		__field(u8, pmcw_pam)
4262306a36Sopenharmony_ci		__field(u8, pmcw_pom)
4362306a36Sopenharmony_ci		__field(u64, pmcw_chpid)
4462306a36Sopenharmony_ci		__field(int, cc)
4562306a36Sopenharmony_ci	),
4662306a36Sopenharmony_ci	TP_fast_assign(
4762306a36Sopenharmony_ci		__entry->cssid = schid.cssid;
4862306a36Sopenharmony_ci		__entry->ssid = schid.ssid;
4962306a36Sopenharmony_ci		__entry->schno = schid.sch_no;
5062306a36Sopenharmony_ci		__entry->devno = schib->pmcw.dev;
5162306a36Sopenharmony_ci		__entry->schib = *schib;
5262306a36Sopenharmony_ci		__entry->pmcw_ena = schib->pmcw.ena;
5362306a36Sopenharmony_ci		__entry->pmcw_st = schib->pmcw.ena;
5462306a36Sopenharmony_ci		__entry->pmcw_dnv = schib->pmcw.dnv;
5562306a36Sopenharmony_ci		__entry->pmcw_dev = schib->pmcw.dev;
5662306a36Sopenharmony_ci		__entry->pmcw_lpm = schib->pmcw.lpm;
5762306a36Sopenharmony_ci		__entry->pmcw_pnom = schib->pmcw.pnom;
5862306a36Sopenharmony_ci		__entry->pmcw_lpum = schib->pmcw.lpum;
5962306a36Sopenharmony_ci		__entry->pmcw_pim = schib->pmcw.pim;
6062306a36Sopenharmony_ci		__entry->pmcw_pam = schib->pmcw.pam;
6162306a36Sopenharmony_ci		__entry->pmcw_pom = schib->pmcw.pom;
6262306a36Sopenharmony_ci		memcpy(&__entry->pmcw_chpid, &schib->pmcw.chpid, 8);
6362306a36Sopenharmony_ci		__entry->cc = cc;
6462306a36Sopenharmony_ci	),
6562306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x cc=%d ena=%d st=%d dnv=%d dev=%04x "
6662306a36Sopenharmony_ci		  "lpm=0x%02x pnom=0x%02x lpum=0x%02x pim=0x%02x pam=0x%02x "
6762306a36Sopenharmony_ci		  "pom=0x%02x chpids=%016llx",
6862306a36Sopenharmony_ci		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
6962306a36Sopenharmony_ci		  __entry->pmcw_ena, __entry->pmcw_st,
7062306a36Sopenharmony_ci		  __entry->pmcw_dnv, __entry->pmcw_dev,
7162306a36Sopenharmony_ci		  __entry->pmcw_lpm, __entry->pmcw_pnom,
7262306a36Sopenharmony_ci		  __entry->pmcw_lpum, __entry->pmcw_pim,
7362306a36Sopenharmony_ci		  __entry->pmcw_pam, __entry->pmcw_pom,
7462306a36Sopenharmony_ci		  __entry->pmcw_chpid
7562306a36Sopenharmony_ci	)
7662306a36Sopenharmony_ci);
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci/**
7962306a36Sopenharmony_ci * s390_cio_stsch -  Store Subchannel instruction (STSCH) was performed
8062306a36Sopenharmony_ci * @schid: Subchannel ID
8162306a36Sopenharmony_ci * @schib: Subchannel-Information block
8262306a36Sopenharmony_ci * @cc: Condition code
8362306a36Sopenharmony_ci */
8462306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schib, s390_cio_stsch,
8562306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
8662306a36Sopenharmony_ci	TP_ARGS(schid, schib, cc)
8762306a36Sopenharmony_ci);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci/**
9062306a36Sopenharmony_ci * s390_cio_msch -  Modify Subchannel instruction (MSCH) was performed
9162306a36Sopenharmony_ci * @schid: Subchannel ID
9262306a36Sopenharmony_ci * @schib: Subchannel-Information block
9362306a36Sopenharmony_ci * @cc: Condition code
9462306a36Sopenharmony_ci */
9562306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schib, s390_cio_msch,
9662306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, struct schib *schib, int cc),
9762306a36Sopenharmony_ci	TP_ARGS(schid, schib, cc)
9862306a36Sopenharmony_ci);
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci/**
10162306a36Sopenharmony_ci * s390_cio_tsch - Test Subchannel instruction (TSCH) was performed
10262306a36Sopenharmony_ci * @schid: Subchannel ID
10362306a36Sopenharmony_ci * @irb: Interruption-Response Block
10462306a36Sopenharmony_ci * @cc: Condition code
10562306a36Sopenharmony_ci */
10662306a36Sopenharmony_ciTRACE_EVENT(s390_cio_tsch,
10762306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, struct irb *irb, int cc),
10862306a36Sopenharmony_ci	TP_ARGS(schid, irb, cc),
10962306a36Sopenharmony_ci	TP_STRUCT__entry(
11062306a36Sopenharmony_ci		__field(u8, cssid)
11162306a36Sopenharmony_ci		__field(u8, ssid)
11262306a36Sopenharmony_ci		__field(u16, schno)
11362306a36Sopenharmony_ci		__field_struct(struct irb, irb)
11462306a36Sopenharmony_ci		__field(u8, scsw_dcc)
11562306a36Sopenharmony_ci		__field(u8, scsw_pno)
11662306a36Sopenharmony_ci		__field(u8, scsw_fctl)
11762306a36Sopenharmony_ci		__field(u8, scsw_actl)
11862306a36Sopenharmony_ci		__field(u8, scsw_stctl)
11962306a36Sopenharmony_ci		__field(u8, scsw_dstat)
12062306a36Sopenharmony_ci		__field(u8, scsw_cstat)
12162306a36Sopenharmony_ci		__field(int, cc)
12262306a36Sopenharmony_ci	),
12362306a36Sopenharmony_ci	TP_fast_assign(
12462306a36Sopenharmony_ci		__entry->cssid = schid.cssid;
12562306a36Sopenharmony_ci		__entry->ssid = schid.ssid;
12662306a36Sopenharmony_ci		__entry->schno = schid.sch_no;
12762306a36Sopenharmony_ci		__entry->irb = *irb;
12862306a36Sopenharmony_ci		__entry->scsw_dcc = scsw_cc(&irb->scsw);
12962306a36Sopenharmony_ci		__entry->scsw_pno = scsw_pno(&irb->scsw);
13062306a36Sopenharmony_ci		__entry->scsw_fctl = scsw_fctl(&irb->scsw);
13162306a36Sopenharmony_ci		__entry->scsw_actl = scsw_actl(&irb->scsw);
13262306a36Sopenharmony_ci		__entry->scsw_stctl = scsw_stctl(&irb->scsw);
13362306a36Sopenharmony_ci		__entry->scsw_dstat = scsw_dstat(&irb->scsw);
13462306a36Sopenharmony_ci		__entry->scsw_cstat = scsw_cstat(&irb->scsw);
13562306a36Sopenharmony_ci		__entry->cc = cc;
13662306a36Sopenharmony_ci	),
13762306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x cc=%d dcc=%d pno=%d fctl=0x%x actl=0x%x "
13862306a36Sopenharmony_ci		  "stctl=0x%x dstat=0x%x cstat=0x%x",
13962306a36Sopenharmony_ci		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
14062306a36Sopenharmony_ci		  __entry->scsw_dcc, __entry->scsw_pno,
14162306a36Sopenharmony_ci		  __entry->scsw_fctl, __entry->scsw_actl,
14262306a36Sopenharmony_ci		  __entry->scsw_stctl,
14362306a36Sopenharmony_ci		  __entry->scsw_dstat, __entry->scsw_cstat
14462306a36Sopenharmony_ci	)
14562306a36Sopenharmony_ci);
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci/**
14862306a36Sopenharmony_ci * s390_cio_tpi - Test Pending Interruption instruction (TPI) was performed
14962306a36Sopenharmony_ci * @addr: Address of the I/O interruption code or %NULL
15062306a36Sopenharmony_ci * @cc: Condition code
15162306a36Sopenharmony_ci */
15262306a36Sopenharmony_ciTRACE_EVENT(s390_cio_tpi,
15362306a36Sopenharmony_ci	TP_PROTO(struct tpi_info *addr, int cc),
15462306a36Sopenharmony_ci	TP_ARGS(addr, cc),
15562306a36Sopenharmony_ci	TP_STRUCT__entry(
15662306a36Sopenharmony_ci		__field(int, cc)
15762306a36Sopenharmony_ci		__field_struct(struct tpi_info, tpi_info)
15862306a36Sopenharmony_ci		__field(u8, cssid)
15962306a36Sopenharmony_ci		__field(u8, ssid)
16062306a36Sopenharmony_ci		__field(u16, schno)
16162306a36Sopenharmony_ci		__field(u8, adapter_IO)
16262306a36Sopenharmony_ci		__field(u8, isc)
16362306a36Sopenharmony_ci		__field(u8, type)
16462306a36Sopenharmony_ci	),
16562306a36Sopenharmony_ci	TP_fast_assign(
16662306a36Sopenharmony_ci		__entry->cc = cc;
16762306a36Sopenharmony_ci		if (cc != 0)
16862306a36Sopenharmony_ci			memset(&__entry->tpi_info, 0, sizeof(struct tpi_info));
16962306a36Sopenharmony_ci		else if (addr)
17062306a36Sopenharmony_ci			__entry->tpi_info = *addr;
17162306a36Sopenharmony_ci		else
17262306a36Sopenharmony_ci			__entry->tpi_info = S390_lowcore.tpi_info;
17362306a36Sopenharmony_ci		__entry->cssid = __entry->tpi_info.schid.cssid;
17462306a36Sopenharmony_ci		__entry->ssid = __entry->tpi_info.schid.ssid;
17562306a36Sopenharmony_ci		__entry->schno = __entry->tpi_info.schid.sch_no;
17662306a36Sopenharmony_ci		__entry->adapter_IO = __entry->tpi_info.adapter_IO;
17762306a36Sopenharmony_ci		__entry->isc = __entry->tpi_info.isc;
17862306a36Sopenharmony_ci		__entry->type = __entry->tpi_info.type;
17962306a36Sopenharmony_ci	),
18062306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x cc=%d a=%d isc=%d type=%d",
18162306a36Sopenharmony_ci		  __entry->cssid, __entry->ssid, __entry->schno, __entry->cc,
18262306a36Sopenharmony_ci		  __entry->adapter_IO, __entry->isc,
18362306a36Sopenharmony_ci		  __entry->type
18462306a36Sopenharmony_ci	)
18562306a36Sopenharmony_ci);
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci/**
18862306a36Sopenharmony_ci * s390_cio_ssch - Start Subchannel instruction (SSCH) was performed
18962306a36Sopenharmony_ci * @schid: Subchannel ID
19062306a36Sopenharmony_ci * @orb: Operation-Request Block
19162306a36Sopenharmony_ci * @cc: Condition code
19262306a36Sopenharmony_ci */
19362306a36Sopenharmony_ciTRACE_EVENT(s390_cio_ssch,
19462306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, union orb *orb, int cc),
19562306a36Sopenharmony_ci	TP_ARGS(schid, orb, cc),
19662306a36Sopenharmony_ci	TP_STRUCT__entry(
19762306a36Sopenharmony_ci		__field(u8, cssid)
19862306a36Sopenharmony_ci		__field(u8, ssid)
19962306a36Sopenharmony_ci		__field(u16, schno)
20062306a36Sopenharmony_ci		__field_struct(union orb, orb)
20162306a36Sopenharmony_ci		__field(int, cc)
20262306a36Sopenharmony_ci	),
20362306a36Sopenharmony_ci	TP_fast_assign(
20462306a36Sopenharmony_ci		__entry->cssid = schid.cssid;
20562306a36Sopenharmony_ci		__entry->ssid = schid.ssid;
20662306a36Sopenharmony_ci		__entry->schno = schid.sch_no;
20762306a36Sopenharmony_ci		__entry->orb = *orb;
20862306a36Sopenharmony_ci		__entry->cc = cc;
20962306a36Sopenharmony_ci	),
21062306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
21162306a36Sopenharmony_ci		  __entry->schno, __entry->cc
21262306a36Sopenharmony_ci	)
21362306a36Sopenharmony_ci);
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(s390_class_schid,
21662306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, int cc),
21762306a36Sopenharmony_ci	TP_ARGS(schid, cc),
21862306a36Sopenharmony_ci	TP_STRUCT__entry(
21962306a36Sopenharmony_ci		__field(u8, cssid)
22062306a36Sopenharmony_ci		__field(u8, ssid)
22162306a36Sopenharmony_ci		__field(u16, schno)
22262306a36Sopenharmony_ci		__field(int, cc)
22362306a36Sopenharmony_ci	),
22462306a36Sopenharmony_ci	TP_fast_assign(
22562306a36Sopenharmony_ci		__entry->cssid = schid.cssid;
22662306a36Sopenharmony_ci		__entry->ssid = schid.ssid;
22762306a36Sopenharmony_ci		__entry->schno = schid.sch_no;
22862306a36Sopenharmony_ci		__entry->cc = cc;
22962306a36Sopenharmony_ci	),
23062306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x cc=%d", __entry->cssid, __entry->ssid,
23162306a36Sopenharmony_ci		  __entry->schno, __entry->cc
23262306a36Sopenharmony_ci	)
23362306a36Sopenharmony_ci);
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci/**
23662306a36Sopenharmony_ci * s390_cio_csch - Clear Subchannel instruction (CSCH) was performed
23762306a36Sopenharmony_ci * @schid: Subchannel ID
23862306a36Sopenharmony_ci * @cc: Condition code
23962306a36Sopenharmony_ci */
24062306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schid, s390_cio_csch,
24162306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, int cc),
24262306a36Sopenharmony_ci	TP_ARGS(schid, cc)
24362306a36Sopenharmony_ci);
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci/**
24662306a36Sopenharmony_ci * s390_cio_hsch - Halt Subchannel instruction (HSCH) was performed
24762306a36Sopenharmony_ci * @schid: Subchannel ID
24862306a36Sopenharmony_ci * @cc: Condition code
24962306a36Sopenharmony_ci */
25062306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schid, s390_cio_hsch,
25162306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, int cc),
25262306a36Sopenharmony_ci	TP_ARGS(schid, cc)
25362306a36Sopenharmony_ci);
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_ci/**
25662306a36Sopenharmony_ci * s390_cio_xsch - Cancel Subchannel instruction (XSCH) was performed
25762306a36Sopenharmony_ci * @schid: Subchannel ID
25862306a36Sopenharmony_ci * @cc: Condition code
25962306a36Sopenharmony_ci */
26062306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schid, s390_cio_xsch,
26162306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, int cc),
26262306a36Sopenharmony_ci	TP_ARGS(schid, cc)
26362306a36Sopenharmony_ci);
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci/**
26662306a36Sopenharmony_ci * s390_cio_rsch - Resume Subchannel instruction (RSCH) was performed
26762306a36Sopenharmony_ci * @schid: Subchannel ID
26862306a36Sopenharmony_ci * @cc: Condition code
26962306a36Sopenharmony_ci */
27062306a36Sopenharmony_ciDEFINE_EVENT(s390_class_schid, s390_cio_rsch,
27162306a36Sopenharmony_ci	TP_PROTO(struct subchannel_id schid, int cc),
27262306a36Sopenharmony_ci	TP_ARGS(schid, cc)
27362306a36Sopenharmony_ci);
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci#define CHSC_MAX_REQUEST_LEN		64
27662306a36Sopenharmony_ci#define CHSC_MAX_RESPONSE_LEN		64
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci/**
27962306a36Sopenharmony_ci * s390_cio_chsc - Channel Subsystem Call (CHSC) instruction was performed
28062306a36Sopenharmony_ci * @chsc: CHSC block
28162306a36Sopenharmony_ci * @cc: Condition code
28262306a36Sopenharmony_ci */
28362306a36Sopenharmony_ciTRACE_EVENT(s390_cio_chsc,
28462306a36Sopenharmony_ci	TP_PROTO(struct chsc_header *chsc, int cc),
28562306a36Sopenharmony_ci	TP_ARGS(chsc, cc),
28662306a36Sopenharmony_ci	TP_STRUCT__entry(
28762306a36Sopenharmony_ci		__field(int, cc)
28862306a36Sopenharmony_ci		__field(u16, code)
28962306a36Sopenharmony_ci		__field(u16, rcode)
29062306a36Sopenharmony_ci		__array(u8, request, CHSC_MAX_REQUEST_LEN)
29162306a36Sopenharmony_ci		__array(u8, response, CHSC_MAX_RESPONSE_LEN)
29262306a36Sopenharmony_ci	),
29362306a36Sopenharmony_ci	TP_fast_assign(
29462306a36Sopenharmony_ci		__entry->cc = cc;
29562306a36Sopenharmony_ci		__entry->code = chsc->code;
29662306a36Sopenharmony_ci		memcpy(&entry->request, chsc,
29762306a36Sopenharmony_ci		       min_t(u16, chsc->length, CHSC_MAX_REQUEST_LEN));
29862306a36Sopenharmony_ci		chsc = (struct chsc_header *) ((char *) chsc + chsc->length);
29962306a36Sopenharmony_ci		__entry->rcode = chsc->code;
30062306a36Sopenharmony_ci		memcpy(&entry->response, chsc,
30162306a36Sopenharmony_ci		       min_t(u16, chsc->length, CHSC_MAX_RESPONSE_LEN));
30262306a36Sopenharmony_ci	),
30362306a36Sopenharmony_ci	TP_printk("code=0x%04x cc=%d rcode=0x%04x", __entry->code,
30462306a36Sopenharmony_ci		  __entry->cc, __entry->rcode)
30562306a36Sopenharmony_ci);
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci/**
30862306a36Sopenharmony_ci * s390_cio_interrupt - An I/O interrupt occurred
30962306a36Sopenharmony_ci * @tpi_info: Address of the I/O interruption code
31062306a36Sopenharmony_ci */
31162306a36Sopenharmony_ciTRACE_EVENT(s390_cio_interrupt,
31262306a36Sopenharmony_ci	TP_PROTO(struct tpi_info *tpi_info),
31362306a36Sopenharmony_ci	TP_ARGS(tpi_info),
31462306a36Sopenharmony_ci	TP_STRUCT__entry(
31562306a36Sopenharmony_ci		__field_struct(struct tpi_info, tpi_info)
31662306a36Sopenharmony_ci		__field(u8, cssid)
31762306a36Sopenharmony_ci		__field(u8, ssid)
31862306a36Sopenharmony_ci		__field(u16, schno)
31962306a36Sopenharmony_ci		__field(u8, isc)
32062306a36Sopenharmony_ci		__field(u8, type)
32162306a36Sopenharmony_ci	),
32262306a36Sopenharmony_ci	TP_fast_assign(
32362306a36Sopenharmony_ci		__entry->tpi_info = *tpi_info;
32462306a36Sopenharmony_ci		__entry->cssid = tpi_info->schid.cssid;
32562306a36Sopenharmony_ci		__entry->ssid = tpi_info->schid.ssid;
32662306a36Sopenharmony_ci		__entry->schno = tpi_info->schid.sch_no;
32762306a36Sopenharmony_ci		__entry->isc = tpi_info->isc;
32862306a36Sopenharmony_ci		__entry->type = tpi_info->type;
32962306a36Sopenharmony_ci	),
33062306a36Sopenharmony_ci	TP_printk("schid=%x.%x.%04x isc=%d type=%d",
33162306a36Sopenharmony_ci		  __entry->cssid, __entry->ssid, __entry->schno,
33262306a36Sopenharmony_ci		  __entry->isc, __entry->type
33362306a36Sopenharmony_ci	)
33462306a36Sopenharmony_ci);
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci/**
33762306a36Sopenharmony_ci * s390_cio_adapter_int - An adapter interrupt occurred
33862306a36Sopenharmony_ci * @tpi_info: Address of the I/O interruption code
33962306a36Sopenharmony_ci */
34062306a36Sopenharmony_ciTRACE_EVENT(s390_cio_adapter_int,
34162306a36Sopenharmony_ci	TP_PROTO(struct tpi_info *tpi_info),
34262306a36Sopenharmony_ci	TP_ARGS(tpi_info),
34362306a36Sopenharmony_ci	TP_STRUCT__entry(
34462306a36Sopenharmony_ci		__field_struct(struct tpi_info, tpi_info)
34562306a36Sopenharmony_ci		__field(u8, isc)
34662306a36Sopenharmony_ci	),
34762306a36Sopenharmony_ci	TP_fast_assign(
34862306a36Sopenharmony_ci		__entry->tpi_info = *tpi_info;
34962306a36Sopenharmony_ci		__entry->isc = tpi_info->isc;
35062306a36Sopenharmony_ci	),
35162306a36Sopenharmony_ci	TP_printk("isc=%d", __entry->isc)
35262306a36Sopenharmony_ci);
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci/**
35562306a36Sopenharmony_ci * s390_cio_stcrw - Store Channel Report Word (STCRW) was performed
35662306a36Sopenharmony_ci * @crw: Channel Report Word
35762306a36Sopenharmony_ci * @cc: Condition code
35862306a36Sopenharmony_ci */
35962306a36Sopenharmony_ciTRACE_EVENT(s390_cio_stcrw,
36062306a36Sopenharmony_ci	TP_PROTO(struct crw *crw, int cc),
36162306a36Sopenharmony_ci	TP_ARGS(crw, cc),
36262306a36Sopenharmony_ci	TP_STRUCT__entry(
36362306a36Sopenharmony_ci		__field_struct(struct crw, crw)
36462306a36Sopenharmony_ci		__field(int, cc)
36562306a36Sopenharmony_ci		__field(u8, slct)
36662306a36Sopenharmony_ci		__field(u8, oflw)
36762306a36Sopenharmony_ci		__field(u8, chn)
36862306a36Sopenharmony_ci		__field(u8, rsc)
36962306a36Sopenharmony_ci		__field(u8, anc)
37062306a36Sopenharmony_ci		__field(u8, erc)
37162306a36Sopenharmony_ci		__field(u16, rsid)
37262306a36Sopenharmony_ci	),
37362306a36Sopenharmony_ci	TP_fast_assign(
37462306a36Sopenharmony_ci		__entry->crw = *crw;
37562306a36Sopenharmony_ci		__entry->cc = cc;
37662306a36Sopenharmony_ci		__entry->slct = crw->slct;
37762306a36Sopenharmony_ci		__entry->oflw = crw->oflw;
37862306a36Sopenharmony_ci		__entry->chn = crw->chn;
37962306a36Sopenharmony_ci		__entry->rsc = crw->rsc;
38062306a36Sopenharmony_ci		__entry->anc = crw->anc;
38162306a36Sopenharmony_ci		__entry->erc = crw->erc;
38262306a36Sopenharmony_ci		__entry->rsid = crw->rsid;
38362306a36Sopenharmony_ci	),
38462306a36Sopenharmony_ci	TP_printk("cc=%d slct=%d oflw=%d chn=%d rsc=%d anc=%d erc=0x%x "
38562306a36Sopenharmony_ci		  "rsid=0x%x",
38662306a36Sopenharmony_ci		  __entry->cc, __entry->slct, __entry->oflw,
38762306a36Sopenharmony_ci		  __entry->chn, __entry->rsc,  __entry->anc,
38862306a36Sopenharmony_ci		  __entry->erc, __entry->rsid
38962306a36Sopenharmony_ci	)
39062306a36Sopenharmony_ci);
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_ci#endif /* _TRACE_S390_CIO_H */
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_ci/* This part must be outside protection */
39562306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
39662306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
39962306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ci#include <trace/define_trace.h>
402