#undef TRACE_SYSTEM
#define TRACE_SYSTEM iscsi

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

#include <linux/tracepoint.h>

/* max debug message length */
#define ISCSI_MSG_MAX	256

/*
 * Declare tracepoint helper function.
 */
void iscsi_dbg_trace(void (*trace)(struct device *dev, struct va_format *),
		     struct device *dev, const char *fmt, ...);

/*
 * Declare event class for iscsi debug messages.
 */
DECLARE_EVENT_CLASS(iscsi_log_msg,

	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf),

	TP_STRUCT__entry(
		__string(dname, 	dev_name(dev)		)
		__dynamic_array(char,	msg, ISCSI_MSG_MAX	)
	),

	TP_fast_assign(
		__assign_str(dname, dev_name(dev));
		vsnprintf(__get_str(msg), ISCSI_MSG_MAX, vaf->fmt, *vaf->va);
	),

	TP_printk("%s: %s",__get_str(dname),  __get_str(msg)
	)
);

/*
 * Define event to capture iscsi connection debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_conn,
	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi session debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_session,
	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi error handling debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_eh,
        TP_PROTO(struct device *dev, struct va_format *vaf),

        TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi tcp debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_tcp,
        TP_PROTO(struct device *dev, struct va_format *vaf),

        TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi sw tcp debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_sw_tcp,
	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi transport session debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_trans_session,
	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf)
);

/*
 * Define event to capture iscsi transport connection debug messages.
 */
DEFINE_EVENT(iscsi_log_msg, iscsi_dbg_trans_conn,
	TP_PROTO(struct device *dev, struct va_format *vaf),

	TP_ARGS(dev, vaf)
);

#endif /* _TRACE_ISCSI_H */

/* This part must be outside protection */
#include <trace/define_trace.h>
