#undef TRACE_SYSTEM
#define TRACE_SYSTEM hda_controller
#define TRACE_INCLUDE_FILE hda_controller_trace

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

#include <linux/tracepoint.h>

struct azx;
struct azx_dev;

TRACE_EVENT(azx_pcm_trigger,

	TP_PROTO(struct azx *chip, struct azx_dev *dev, int cmd),

	TP_ARGS(chip, dev, cmd),

	TP_STRUCT__entry(
		__field( int, card )
		__field( int, idx )
		__field( int, cmd )
	),

	TP_fast_assign(
		__entry->card = (chip)->card->number;
		__entry->idx = (dev)->core.index;
		__entry->cmd = cmd;
	),

	TP_printk("[%d:%d] cmd=%d", __entry->card, __entry->idx, __entry->cmd)
);

TRACE_EVENT(azx_get_position,

    TP_PROTO(struct azx *chip, struct azx_dev *dev, unsigned int pos, unsigned int delay),

	    TP_ARGS(chip, dev, pos, delay),

	TP_STRUCT__entry(
		__field( int, card )
		__field( int, idx )
		__field( unsigned int, pos )
		__field( unsigned int, delay )
	),

	TP_fast_assign(
		__entry->card = (chip)->card->number;
		__entry->idx = (dev)->core.index;
		__entry->pos = pos;
		__entry->delay = delay;
	),

	TP_printk("[%d:%d] pos=%u, delay=%u", __entry->card, __entry->idx, __entry->pos, __entry->delay)
);

DECLARE_EVENT_CLASS(azx_pcm,
	TP_PROTO(struct azx *chip, struct azx_dev *azx_dev),

	TP_ARGS(chip, azx_dev),

	TP_STRUCT__entry(
		__field( unsigned char, stream_tag )
	),

	TP_fast_assign(
		__entry->stream_tag = (azx_dev)->core.stream_tag;
	),

	TP_printk("stream_tag: %d", __entry->stream_tag)
);

DEFINE_EVENT(azx_pcm, azx_pcm_open,
	TP_PROTO(struct azx *chip, struct azx_dev *azx_dev),
	TP_ARGS(chip, azx_dev)
);

DEFINE_EVENT(azx_pcm, azx_pcm_close,
	TP_PROTO(struct azx *chip, struct azx_dev *azx_dev),
	TP_ARGS(chip, azx_dev)
);

DEFINE_EVENT(azx_pcm, azx_pcm_hw_params,
	TP_PROTO(struct azx *chip, struct azx_dev *azx_dev),
	TP_ARGS(chip, azx_dev)
);

DEFINE_EVENT(azx_pcm, azx_pcm_prepare,
	TP_PROTO(struct azx *chip, struct azx_dev *azx_dev),
	TP_ARGS(chip, azx_dev)
);

#endif /* _TRACE_HDA_CONTROLLER_H */

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