brintos

brintos / linux-shallow public Read only

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