/* SPDX-License-Identifier: GPL-2.0 */
/* Tracepoints for vfio_ccw driver
 *
 * Copyright IBM Corp. 2018
 *
 * Author(s): Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
 *            Halil Pasic <pasic@linux.vnet.ibm.com>
 */

#include "cio.h"

#undef TRACE_SYSTEM
#define TRACE_SYSTEM vfio_ccw

#if !defined(_VFIO_CCW_TRACE_) || defined(TRACE_HEADER_MULTI_READ)
#define _VFIO_CCW_TRACE_

#include <linux/tracepoint.h>

TRACE_EVENT(vfio_ccw_chp_event,
	TP_PROTO(struct subchannel_id schid,
		 int mask,
		 int event),
	TP_ARGS(schid, mask, event),

	TP_STRUCT__entry(
		__field(u8, cssid)
		__field(u8, ssid)
		__field(u16, sch_no)
		__field(int, mask)
		__field(int, event)
	),

	TP_fast_assign(
		__entry->cssid = schid.cssid;
		__entry->ssid = schid.ssid;
		__entry->sch_no = schid.sch_no;
		__entry->mask = mask;
		__entry->event = event;
	),

	TP_printk("schid=%x.%x.%04x mask=0x%x event=%d",
		  __entry->cssid,
		  __entry->ssid,
		  __entry->sch_no,
		  __entry->mask,
		  __entry->event)
);

TRACE_EVENT(vfio_ccw_fsm_async_request,
	TP_PROTO(struct subchannel_id schid,
		 int command,
		 int errno),
	TP_ARGS(schid, command, errno),

	TP_STRUCT__entry(
		__field(u8, cssid)
		__field(u8, ssid)
		__field(u16, sch_no)
		__field(int, command)
		__field(int, errno)
	),

	TP_fast_assign(
		__entry->cssid = schid.cssid;
		__entry->ssid = schid.ssid;
		__entry->sch_no = schid.sch_no;
		__entry->command = command;
		__entry->errno = errno;
	),

	TP_printk("schid=%x.%x.%04x command=0x%x errno=%d",
		  __entry->cssid,
		  __entry->ssid,
		  __entry->sch_no,
		  __entry->command,
		  __entry->errno)
);

TRACE_EVENT(vfio_ccw_fsm_event,
	TP_PROTO(struct subchannel_id schid, int state, int event),
	TP_ARGS(schid, state, event),

	TP_STRUCT__entry(
		__field(u8, cssid)
		__field(u8, ssid)
		__field(u16, schno)
		__field(int, state)
		__field(int, event)
	),

	TP_fast_assign(
		__entry->cssid = schid.cssid;
		__entry->ssid = schid.ssid;
		__entry->schno = schid.sch_no;
		__entry->state = state;
		__entry->event = event;
	),

	TP_printk("schid=%x.%x.%04x state=%d event=%d",
		__entry->cssid, __entry->ssid, __entry->schno,
		__entry->state,
		__entry->event)
);

TRACE_EVENT(vfio_ccw_fsm_io_request,
	TP_PROTO(int fctl, struct subchannel_id schid, int errno, char *errstr),
	TP_ARGS(fctl, schid, errno, errstr),

	TP_STRUCT__entry(
		__field(u8, cssid)
		__field(u8, ssid)
		__field(u16, sch_no)
		__field(int, fctl)
		__field(int, errno)
		__field(char*, errstr)
	),

	TP_fast_assign(
		__entry->cssid = schid.cssid;
		__entry->ssid = schid.ssid;
		__entry->sch_no = schid.sch_no;
		__entry->fctl = fctl;
		__entry->errno = errno;
		__entry->errstr = errstr;
	),

	TP_printk("schid=%x.%x.%04x fctl=0x%x errno=%d info=%s",
		  __entry->cssid,
		  __entry->ssid,
		  __entry->sch_no,
		  __entry->fctl,
		  __entry->errno,
		  __entry->errstr)
);

#endif /* _VFIO_CCW_TRACE_ */

/* This part must be outside protection */

#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE vfio_ccw_trace

#include <trace/define_trace.h>
