162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Trace points for SSAM/SSH.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2020-2022 Maximilian Luz <luzmaximilian@gmail.com>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#undef TRACE_SYSTEM
962306a36Sopenharmony_ci#define TRACE_SYSTEM surface_aggregator
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#if !defined(_SURFACE_AGGREGATOR_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
1262306a36Sopenharmony_ci#define _SURFACE_AGGREGATOR_TRACE_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/surface_aggregator/serial_hub.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <asm/unaligned.h>
1762306a36Sopenharmony_ci#include <linux/tracepoint.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_SEQ);
2062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_NSQ);
2162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_FRAME_TYPE_ACK);
2262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_FRAME_TYPE_NAK);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_LOCKED_BIT);
2562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_QUEUED_BIT);
2662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_PENDING_BIT);
2762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTING_BIT);
2862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTED_BIT);
2962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_ACKED_BIT);
3062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_CANCELED_BIT);
3162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_SF_COMPLETED_BIT);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_TY_FLUSH_BIT);
3462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_TY_SEQUENCED_BIT);
3562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_TY_BLOCKING_BIT);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_SF_MASK);
3862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_TY_MASK);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_LOCKED_BIT);
4162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_QUEUED_BIT);
4262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_PENDING_BIT);
4362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTING_BIT);
4462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTED_BIT);
4562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_RSPRCVD_BIT);
4662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_CANCELED_BIT);
4762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_SF_COMPLETED_BIT);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_TY_FLUSH_BIT);
5062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_TY_HAS_RESPONSE_BIT);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_SF_MASK);
5362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_TY_MASK);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SAM);
5662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_BAT);
5762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_TMP);
5862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_PMC);
5962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_FAN);
6062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_PoM);
6162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_DBG);
6262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_KBD);
6362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_FWU);
6462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_UNI);
6562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_LPC);
6662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_TCL);
6762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SFL);
6862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_KIP);
6962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_EXT);
7062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_BLD);
7162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_BAS);
7262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SEN);
7362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SRQ);
7462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_MCU);
7562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_HID);
7662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_TCH);
7762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_BKL);
7862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_TAM);
7962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC0);
8062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_UFI);
8162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_USC);
8262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_PEN);
8362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_VID);
8462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_AUD);
8562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SMC);
8662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_KPD);
8762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_REG);
8862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SPT);
8962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SYS);
9062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC1);
9162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_SHB);
9262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(SSAM_SSH_TC_POS);
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci#define SSAM_PTR_UID_LEN		9
9562306a36Sopenharmony_ci#define SSAM_U8_FIELD_NOT_APPLICABLE	((u16)-1)
9662306a36Sopenharmony_ci#define SSAM_SEQ_NOT_APPLICABLE		((u16)-1)
9762306a36Sopenharmony_ci#define SSAM_RQID_NOT_APPLICABLE	((u32)-1)
9862306a36Sopenharmony_ci#define SSAM_SSH_TC_NOT_APPLICABLE	0
9962306a36Sopenharmony_ci#define SSAM_SSH_TID_NOT_APPLICABLE	((u8)-1)
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci#ifndef _SURFACE_AGGREGATOR_TRACE_HELPERS
10262306a36Sopenharmony_ci#define _SURFACE_AGGREGATOR_TRACE_HELPERS
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci/**
10562306a36Sopenharmony_ci * ssam_trace_ptr_uid() - Convert the pointer to a non-pointer UID string.
10662306a36Sopenharmony_ci * @ptr: The pointer to convert.
10762306a36Sopenharmony_ci * @uid_str: A buffer of length SSAM_PTR_UID_LEN where the UID will be stored.
10862306a36Sopenharmony_ci *
10962306a36Sopenharmony_ci * Converts the given pointer into a UID string that is safe to be shared
11062306a36Sopenharmony_ci * with userspace and logs, i.e. doesn't give away the real memory location.
11162306a36Sopenharmony_ci */
11262306a36Sopenharmony_cistatic inline void ssam_trace_ptr_uid(const void *ptr, char *uid_str)
11362306a36Sopenharmony_ci{
11462306a36Sopenharmony_ci	char buf[2 * sizeof(void *) + 1];
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci	BUILD_BUG_ON(ARRAY_SIZE(buf) < SSAM_PTR_UID_LEN);
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci	snprintf(buf, ARRAY_SIZE(buf), "%p", ptr);
11962306a36Sopenharmony_ci	memcpy(uid_str, &buf[ARRAY_SIZE(buf) - SSAM_PTR_UID_LEN],
12062306a36Sopenharmony_ci	       SSAM_PTR_UID_LEN);
12162306a36Sopenharmony_ci}
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci/**
12462306a36Sopenharmony_ci * ssam_trace_get_packet_seq() - Read the packet's sequence ID.
12562306a36Sopenharmony_ci * @p: The packet.
12662306a36Sopenharmony_ci *
12762306a36Sopenharmony_ci * Return: Returns the packet's sequence ID (SEQ) field if present, or
12862306a36Sopenharmony_ci * %SSAM_SEQ_NOT_APPLICABLE if not (e.g. flush packet).
12962306a36Sopenharmony_ci */
13062306a36Sopenharmony_cistatic inline u16 ssam_trace_get_packet_seq(const struct ssh_packet *p)
13162306a36Sopenharmony_ci{
13262306a36Sopenharmony_ci	if (!p->data.ptr || p->data.len < SSH_MESSAGE_LENGTH(0))
13362306a36Sopenharmony_ci		return SSAM_SEQ_NOT_APPLICABLE;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	return p->data.ptr[SSH_MSGOFFSET_FRAME(seq)];
13662306a36Sopenharmony_ci}
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci/**
13962306a36Sopenharmony_ci * ssam_trace_get_request_id() - Read the packet's request ID.
14062306a36Sopenharmony_ci * @p: The packet.
14162306a36Sopenharmony_ci *
14262306a36Sopenharmony_ci * Return: Returns the packet's request ID (RQID) field if the packet
14362306a36Sopenharmony_ci * represents a request with command data, or %SSAM_RQID_NOT_APPLICABLE if not
14462306a36Sopenharmony_ci * (e.g. flush request, control packet).
14562306a36Sopenharmony_ci */
14662306a36Sopenharmony_cistatic inline u32 ssam_trace_get_request_id(const struct ssh_packet *p)
14762306a36Sopenharmony_ci{
14862306a36Sopenharmony_ci	if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
14962306a36Sopenharmony_ci		return SSAM_RQID_NOT_APPLICABLE;
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci	return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(rqid)]);
15262306a36Sopenharmony_ci}
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci/**
15562306a36Sopenharmony_ci * ssam_trace_get_request_tid() - Read the packet's request target ID.
15662306a36Sopenharmony_ci * @p: The packet.
15762306a36Sopenharmony_ci *
15862306a36Sopenharmony_ci * Return: Returns the packet's request target ID (TID) field if the packet
15962306a36Sopenharmony_ci * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE
16062306a36Sopenharmony_ci * if not (e.g. flush request, control packet).
16162306a36Sopenharmony_ci */
16262306a36Sopenharmony_cistatic inline u32 ssam_trace_get_request_tid(const struct ssh_packet *p)
16362306a36Sopenharmony_ci{
16462306a36Sopenharmony_ci	if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
16562306a36Sopenharmony_ci		return SSAM_SSH_TID_NOT_APPLICABLE;
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tid)]);
16862306a36Sopenharmony_ci}
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci/**
17162306a36Sopenharmony_ci * ssam_trace_get_request_sid() - Read the packet's request source ID.
17262306a36Sopenharmony_ci * @p: The packet.
17362306a36Sopenharmony_ci *
17462306a36Sopenharmony_ci * Return: Returns the packet's request source ID (SID) field if the packet
17562306a36Sopenharmony_ci * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE
17662306a36Sopenharmony_ci * if not (e.g. flush request, control packet).
17762306a36Sopenharmony_ci */
17862306a36Sopenharmony_cistatic inline u32 ssam_trace_get_request_sid(const struct ssh_packet *p)
17962306a36Sopenharmony_ci{
18062306a36Sopenharmony_ci	if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
18162306a36Sopenharmony_ci		return SSAM_SSH_TID_NOT_APPLICABLE;
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci	return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(sid)]);
18462306a36Sopenharmony_ci}
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci/**
18762306a36Sopenharmony_ci * ssam_trace_get_request_tc() - Read the packet's request target category.
18862306a36Sopenharmony_ci * @p: The packet.
18962306a36Sopenharmony_ci *
19062306a36Sopenharmony_ci * Return: Returns the packet's request target category (TC) field if the
19162306a36Sopenharmony_ci * packet represents a request with command data, or %SSAM_SSH_TC_NOT_APPLICABLE
19262306a36Sopenharmony_ci * if not (e.g. flush request, control packet).
19362306a36Sopenharmony_ci */
19462306a36Sopenharmony_cistatic inline u32 ssam_trace_get_request_tc(const struct ssh_packet *p)
19562306a36Sopenharmony_ci{
19662306a36Sopenharmony_ci	if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))
19762306a36Sopenharmony_ci		return SSAM_SSH_TC_NOT_APPLICABLE;
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci	return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tc)]);
20062306a36Sopenharmony_ci}
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci#endif /* _SURFACE_AGGREGATOR_TRACE_HELPERS */
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ci#define ssam_trace_get_command_field_u8(packet, field) \
20562306a36Sopenharmony_ci	((!(packet) || (packet)->data.len < SSH_COMMAND_MESSAGE_LENGTH(0)) \
20662306a36Sopenharmony_ci	 ? 0 : (packet)->data.ptr[SSH_MSGOFFSET_COMMAND(field)])
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci#define ssam_show_generic_u8_field(value)				\
20962306a36Sopenharmony_ci	__print_symbolic(value,						\
21062306a36Sopenharmony_ci		{ SSAM_U8_FIELD_NOT_APPLICABLE,		"N/A" }		\
21162306a36Sopenharmony_ci	)
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci#define ssam_show_frame_type(ty)					\
21462306a36Sopenharmony_ci	__print_symbolic(ty,						\
21562306a36Sopenharmony_ci		{ SSH_FRAME_TYPE_DATA_SEQ,		"DSEQ" },	\
21662306a36Sopenharmony_ci		{ SSH_FRAME_TYPE_DATA_NSQ,		"DNSQ" },	\
21762306a36Sopenharmony_ci		{ SSH_FRAME_TYPE_ACK,			"ACK"  },	\
21862306a36Sopenharmony_ci		{ SSH_FRAME_TYPE_NAK,			"NAK"  }	\
21962306a36Sopenharmony_ci	)
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci#define ssam_show_packet_type(type)					\
22262306a36Sopenharmony_ci	__print_flags(flags & SSH_PACKET_FLAGS_TY_MASK, "",		\
22362306a36Sopenharmony_ci		{ BIT(SSH_PACKET_TY_FLUSH_BIT),		"F" },		\
22462306a36Sopenharmony_ci		{ BIT(SSH_PACKET_TY_SEQUENCED_BIT),	"S" },		\
22562306a36Sopenharmony_ci		{ BIT(SSH_PACKET_TY_BLOCKING_BIT),	"B" }		\
22662306a36Sopenharmony_ci	)
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ci#define ssam_show_packet_state(state)					\
22962306a36Sopenharmony_ci	__print_flags(flags & SSH_PACKET_FLAGS_SF_MASK, "",		\
23062306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_LOCKED_BIT),	"L" },		\
23162306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_QUEUED_BIT),	"Q" },		\
23262306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_PENDING_BIT),	"P" },		\
23362306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_TRANSMITTING_BIT),	"S" },		\
23462306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_TRANSMITTED_BIT),	"T" },		\
23562306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_ACKED_BIT),		"A" },		\
23662306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_CANCELED_BIT),	"C" },		\
23762306a36Sopenharmony_ci		{ BIT(SSH_PACKET_SF_COMPLETED_BIT),	"F" }		\
23862306a36Sopenharmony_ci	)
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci#define ssam_show_packet_seq(seq)					\
24162306a36Sopenharmony_ci	__print_symbolic(seq,						\
24262306a36Sopenharmony_ci		{ SSAM_SEQ_NOT_APPLICABLE,		"N/A" }		\
24362306a36Sopenharmony_ci	)
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci#define ssam_show_request_type(flags)					\
24662306a36Sopenharmony_ci	__print_flags((flags) & SSH_REQUEST_FLAGS_TY_MASK, "",		\
24762306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_TY_FLUSH_BIT),	"F" },		\
24862306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_TY_HAS_RESPONSE_BIT),	"R" }		\
24962306a36Sopenharmony_ci	)
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_ci#define ssam_show_request_state(flags)					\
25262306a36Sopenharmony_ci	__print_flags((flags) & SSH_REQUEST_FLAGS_SF_MASK, "",		\
25362306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_LOCKED_BIT),	"L" },		\
25462306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_QUEUED_BIT),	"Q" },		\
25562306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_PENDING_BIT),	"P" },		\
25662306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_TRANSMITTING_BIT),	"S" },		\
25762306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_TRANSMITTED_BIT),	"T" },		\
25862306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_RSPRCVD_BIT),	"A" },		\
25962306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_CANCELED_BIT),	"C" },		\
26062306a36Sopenharmony_ci		{ BIT(SSH_REQUEST_SF_COMPLETED_BIT),	"F" }		\
26162306a36Sopenharmony_ci	)
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ci#define ssam_show_request_id(rqid)					\
26462306a36Sopenharmony_ci	__print_symbolic(rqid,						\
26562306a36Sopenharmony_ci		{ SSAM_RQID_NOT_APPLICABLE,		"N/A" }		\
26662306a36Sopenharmony_ci	)
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ci#define ssam_show_ssh_tid(tid)						\
26962306a36Sopenharmony_ci	__print_symbolic(tid,						\
27062306a36Sopenharmony_ci		{ SSAM_SSH_TID_NOT_APPLICABLE,		"N/A"      },	\
27162306a36Sopenharmony_ci		{ SSAM_SSH_TID_HOST,			"Host"     },	\
27262306a36Sopenharmony_ci		{ SSAM_SSH_TID_SAM,			"SAM"      },	\
27362306a36Sopenharmony_ci		{ SSAM_SSH_TID_KIP,			"KIP"      },	\
27462306a36Sopenharmony_ci		{ SSAM_SSH_TID_DEBUG,			"Debug"    },	\
27562306a36Sopenharmony_ci		{ SSAM_SSH_TID_SURFLINK,		"SurfLink" }	\
27662306a36Sopenharmony_ci	)
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci#define ssam_show_ssh_tc(tc)						\
27962306a36Sopenharmony_ci	__print_symbolic(tc,						\
28062306a36Sopenharmony_ci		{ SSAM_SSH_TC_NOT_APPLICABLE,		"N/A"  },	\
28162306a36Sopenharmony_ci		{ SSAM_SSH_TC_SAM,			"SAM"  },	\
28262306a36Sopenharmony_ci		{ SSAM_SSH_TC_BAT,			"BAT"  },	\
28362306a36Sopenharmony_ci		{ SSAM_SSH_TC_TMP,			"TMP"  },	\
28462306a36Sopenharmony_ci		{ SSAM_SSH_TC_PMC,			"PMC"  },	\
28562306a36Sopenharmony_ci		{ SSAM_SSH_TC_FAN,			"FAN"  },	\
28662306a36Sopenharmony_ci		{ SSAM_SSH_TC_PoM,			"PoM"  },	\
28762306a36Sopenharmony_ci		{ SSAM_SSH_TC_DBG,			"DBG"  },	\
28862306a36Sopenharmony_ci		{ SSAM_SSH_TC_KBD,			"KBD"  },	\
28962306a36Sopenharmony_ci		{ SSAM_SSH_TC_FWU,			"FWU"  },	\
29062306a36Sopenharmony_ci		{ SSAM_SSH_TC_UNI,			"UNI"  },	\
29162306a36Sopenharmony_ci		{ SSAM_SSH_TC_LPC,			"LPC"  },	\
29262306a36Sopenharmony_ci		{ SSAM_SSH_TC_TCL,			"TCL"  },	\
29362306a36Sopenharmony_ci		{ SSAM_SSH_TC_SFL,			"SFL"  },	\
29462306a36Sopenharmony_ci		{ SSAM_SSH_TC_KIP,			"KIP"  },	\
29562306a36Sopenharmony_ci		{ SSAM_SSH_TC_EXT,			"EXT"  },	\
29662306a36Sopenharmony_ci		{ SSAM_SSH_TC_BLD,			"BLD"  },	\
29762306a36Sopenharmony_ci		{ SSAM_SSH_TC_BAS,			"BAS"  },	\
29862306a36Sopenharmony_ci		{ SSAM_SSH_TC_SEN,			"SEN"  },	\
29962306a36Sopenharmony_ci		{ SSAM_SSH_TC_SRQ,			"SRQ"  },	\
30062306a36Sopenharmony_ci		{ SSAM_SSH_TC_MCU,			"MCU"  },	\
30162306a36Sopenharmony_ci		{ SSAM_SSH_TC_HID,			"HID"  },	\
30262306a36Sopenharmony_ci		{ SSAM_SSH_TC_TCH,			"TCH"  },	\
30362306a36Sopenharmony_ci		{ SSAM_SSH_TC_BKL,			"BKL"  },	\
30462306a36Sopenharmony_ci		{ SSAM_SSH_TC_TAM,			"TAM"  },	\
30562306a36Sopenharmony_ci		{ SSAM_SSH_TC_ACC0,			"ACC0" },	\
30662306a36Sopenharmony_ci		{ SSAM_SSH_TC_UFI,			"UFI"  },	\
30762306a36Sopenharmony_ci		{ SSAM_SSH_TC_USC,			"USC"  },	\
30862306a36Sopenharmony_ci		{ SSAM_SSH_TC_PEN,			"PEN"  },	\
30962306a36Sopenharmony_ci		{ SSAM_SSH_TC_VID,			"VID"  },	\
31062306a36Sopenharmony_ci		{ SSAM_SSH_TC_AUD,			"AUD"  },	\
31162306a36Sopenharmony_ci		{ SSAM_SSH_TC_SMC,			"SMC"  },	\
31262306a36Sopenharmony_ci		{ SSAM_SSH_TC_KPD,			"KPD"  },	\
31362306a36Sopenharmony_ci		{ SSAM_SSH_TC_REG,			"REG"  },	\
31462306a36Sopenharmony_ci		{ SSAM_SSH_TC_SPT,			"SPT"  },	\
31562306a36Sopenharmony_ci		{ SSAM_SSH_TC_SYS,			"SYS"  },	\
31662306a36Sopenharmony_ci		{ SSAM_SSH_TC_ACC1,			"ACC1" },	\
31762306a36Sopenharmony_ci		{ SSAM_SSH_TC_SHB,			"SMB"  },	\
31862306a36Sopenharmony_ci		{ SSAM_SSH_TC_POS,			"POS"  }	\
31962306a36Sopenharmony_ci	)
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_frame_class,
32262306a36Sopenharmony_ci	TP_PROTO(const struct ssh_frame *frame),
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ci	TP_ARGS(frame),
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ci	TP_STRUCT__entry(
32762306a36Sopenharmony_ci		__field(u8, type)
32862306a36Sopenharmony_ci		__field(u8, seq)
32962306a36Sopenharmony_ci		__field(u16, len)
33062306a36Sopenharmony_ci	),
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci	TP_fast_assign(
33362306a36Sopenharmony_ci		__entry->type = frame->type;
33462306a36Sopenharmony_ci		__entry->seq = frame->seq;
33562306a36Sopenharmony_ci		__entry->len = get_unaligned_le16(&frame->len);
33662306a36Sopenharmony_ci	),
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci	TP_printk("ty=%s, seq=%#04x, len=%u",
33962306a36Sopenharmony_ci		ssam_show_frame_type(__entry->type),
34062306a36Sopenharmony_ci		__entry->seq,
34162306a36Sopenharmony_ci		__entry->len
34262306a36Sopenharmony_ci	)
34362306a36Sopenharmony_ci);
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci#define DEFINE_SSAM_FRAME_EVENT(name)				\
34662306a36Sopenharmony_ci	DEFINE_EVENT(ssam_frame_class, ssam_##name,		\
34762306a36Sopenharmony_ci		TP_PROTO(const struct ssh_frame *frame),	\
34862306a36Sopenharmony_ci		TP_ARGS(frame)					\
34962306a36Sopenharmony_ci	)
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_command_class,
35262306a36Sopenharmony_ci	TP_PROTO(const struct ssh_command *cmd, u16 len),
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_ci	TP_ARGS(cmd, len),
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ci	TP_STRUCT__entry(
35762306a36Sopenharmony_ci		__field(u16, rqid)
35862306a36Sopenharmony_ci		__field(u16, len)
35962306a36Sopenharmony_ci		__field(u8, tid)
36062306a36Sopenharmony_ci		__field(u8, sid)
36162306a36Sopenharmony_ci		__field(u8, tc)
36262306a36Sopenharmony_ci		__field(u8, cid)
36362306a36Sopenharmony_ci		__field(u8, iid)
36462306a36Sopenharmony_ci	),
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci	TP_fast_assign(
36762306a36Sopenharmony_ci		__entry->rqid = get_unaligned_le16(&cmd->rqid);
36862306a36Sopenharmony_ci		__entry->tid = cmd->tid;
36962306a36Sopenharmony_ci		__entry->sid = cmd->sid;
37062306a36Sopenharmony_ci		__entry->tc = cmd->tc;
37162306a36Sopenharmony_ci		__entry->cid = cmd->cid;
37262306a36Sopenharmony_ci		__entry->iid = cmd->iid;
37362306a36Sopenharmony_ci		__entry->len = len;
37462306a36Sopenharmony_ci	),
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ci	TP_printk("rqid=%#06x, tid=%s, sid=%s, tc=%s, cid=%#04x, iid=%#04x, len=%u",
37762306a36Sopenharmony_ci		__entry->rqid,
37862306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->tid),
37962306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->sid),
38062306a36Sopenharmony_ci		ssam_show_ssh_tc(__entry->tc),
38162306a36Sopenharmony_ci		__entry->cid,
38262306a36Sopenharmony_ci		__entry->iid,
38362306a36Sopenharmony_ci		__entry->len
38462306a36Sopenharmony_ci	)
38562306a36Sopenharmony_ci);
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci#define DEFINE_SSAM_COMMAND_EVENT(name)					\
38862306a36Sopenharmony_ci	DEFINE_EVENT(ssam_command_class, ssam_##name,			\
38962306a36Sopenharmony_ci		TP_PROTO(const struct ssh_command *cmd, u16 len),	\
39062306a36Sopenharmony_ci		TP_ARGS(cmd, len)					\
39162306a36Sopenharmony_ci	)
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_packet_class,
39462306a36Sopenharmony_ci	TP_PROTO(const struct ssh_packet *packet),
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_ci	TP_ARGS(packet),
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ci	TP_STRUCT__entry(
39962306a36Sopenharmony_ci		__field(unsigned long, state)
40062306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
40162306a36Sopenharmony_ci		__field(u8, priority)
40262306a36Sopenharmony_ci		__field(u16, length)
40362306a36Sopenharmony_ci		__field(u16, seq)
40462306a36Sopenharmony_ci	),
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ci	TP_fast_assign(
40762306a36Sopenharmony_ci		__entry->state = READ_ONCE(packet->state);
40862306a36Sopenharmony_ci		ssam_trace_ptr_uid(packet, __entry->uid);
40962306a36Sopenharmony_ci		__entry->priority = READ_ONCE(packet->priority);
41062306a36Sopenharmony_ci		__entry->length = packet->data.len;
41162306a36Sopenharmony_ci		__entry->seq = ssam_trace_get_packet_seq(packet);
41262306a36Sopenharmony_ci	),
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ci	TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s",
41562306a36Sopenharmony_ci		__entry->uid,
41662306a36Sopenharmony_ci		ssam_show_packet_seq(__entry->seq),
41762306a36Sopenharmony_ci		ssam_show_packet_type(__entry->state),
41862306a36Sopenharmony_ci		__entry->priority,
41962306a36Sopenharmony_ci		__entry->length,
42062306a36Sopenharmony_ci		ssam_show_packet_state(__entry->state)
42162306a36Sopenharmony_ci	)
42262306a36Sopenharmony_ci);
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_ci#define DEFINE_SSAM_PACKET_EVENT(name)				\
42562306a36Sopenharmony_ci	DEFINE_EVENT(ssam_packet_class, ssam_##name,		\
42662306a36Sopenharmony_ci		TP_PROTO(const struct ssh_packet *packet),	\
42762306a36Sopenharmony_ci		TP_ARGS(packet)					\
42862306a36Sopenharmony_ci	)
42962306a36Sopenharmony_ci
43062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_packet_status_class,
43162306a36Sopenharmony_ci	TP_PROTO(const struct ssh_packet *packet, int status),
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ci	TP_ARGS(packet, status),
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci	TP_STRUCT__entry(
43662306a36Sopenharmony_ci		__field(unsigned long, state)
43762306a36Sopenharmony_ci		__field(int, status)
43862306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
43962306a36Sopenharmony_ci		__field(u8, priority)
44062306a36Sopenharmony_ci		__field(u16, length)
44162306a36Sopenharmony_ci		__field(u16, seq)
44262306a36Sopenharmony_ci	),
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ci	TP_fast_assign(
44562306a36Sopenharmony_ci		__entry->state = READ_ONCE(packet->state);
44662306a36Sopenharmony_ci		__entry->status = status;
44762306a36Sopenharmony_ci		ssam_trace_ptr_uid(packet, __entry->uid);
44862306a36Sopenharmony_ci		__entry->priority = READ_ONCE(packet->priority);
44962306a36Sopenharmony_ci		__entry->length = packet->data.len;
45062306a36Sopenharmony_ci		__entry->seq = ssam_trace_get_packet_seq(packet);
45162306a36Sopenharmony_ci	),
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ci	TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s, status=%d",
45462306a36Sopenharmony_ci		__entry->uid,
45562306a36Sopenharmony_ci		ssam_show_packet_seq(__entry->seq),
45662306a36Sopenharmony_ci		ssam_show_packet_type(__entry->state),
45762306a36Sopenharmony_ci		__entry->priority,
45862306a36Sopenharmony_ci		__entry->length,
45962306a36Sopenharmony_ci		ssam_show_packet_state(__entry->state),
46062306a36Sopenharmony_ci		__entry->status
46162306a36Sopenharmony_ci	)
46262306a36Sopenharmony_ci);
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_ci#define DEFINE_SSAM_PACKET_STATUS_EVENT(name)				\
46562306a36Sopenharmony_ci	DEFINE_EVENT(ssam_packet_status_class, ssam_##name,		\
46662306a36Sopenharmony_ci		TP_PROTO(const struct ssh_packet *packet, int status),	\
46762306a36Sopenharmony_ci		TP_ARGS(packet, status)					\
46862306a36Sopenharmony_ci	)
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_request_class,
47162306a36Sopenharmony_ci	TP_PROTO(const struct ssh_request *request),
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ci	TP_ARGS(request),
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ci	TP_STRUCT__entry(
47662306a36Sopenharmony_ci		__field(unsigned long, state)
47762306a36Sopenharmony_ci		__field(u32, rqid)
47862306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
47962306a36Sopenharmony_ci		__field(u8, tc)
48062306a36Sopenharmony_ci		__field(u16, cid)
48162306a36Sopenharmony_ci		__field(u16, iid)
48262306a36Sopenharmony_ci		__field(u8, tid)
48362306a36Sopenharmony_ci		__field(u8, sid)
48462306a36Sopenharmony_ci	),
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ci	TP_fast_assign(
48762306a36Sopenharmony_ci		const struct ssh_packet *p = &request->packet;
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ci		/* Use packet for UID so we can match requests to packets. */
49062306a36Sopenharmony_ci		__entry->state = READ_ONCE(request->state);
49162306a36Sopenharmony_ci		__entry->rqid = ssam_trace_get_request_id(p);
49262306a36Sopenharmony_ci		ssam_trace_ptr_uid(p, __entry->uid);
49362306a36Sopenharmony_ci		__entry->tid = ssam_trace_get_request_tid(p);
49462306a36Sopenharmony_ci		__entry->sid = ssam_trace_get_request_sid(p);
49562306a36Sopenharmony_ci		__entry->tc = ssam_trace_get_request_tc(p);
49662306a36Sopenharmony_ci		__entry->cid = ssam_trace_get_command_field_u8(p, cid);
49762306a36Sopenharmony_ci		__entry->iid = ssam_trace_get_command_field_u8(p, iid);
49862306a36Sopenharmony_ci	),
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci	TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s",
50162306a36Sopenharmony_ci		__entry->uid,
50262306a36Sopenharmony_ci		ssam_show_request_id(__entry->rqid),
50362306a36Sopenharmony_ci		ssam_show_request_type(__entry->state),
50462306a36Sopenharmony_ci		ssam_show_request_state(__entry->state),
50562306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->tid),
50662306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->sid),
50762306a36Sopenharmony_ci		ssam_show_ssh_tc(__entry->tc),
50862306a36Sopenharmony_ci		ssam_show_generic_u8_field(__entry->cid),
50962306a36Sopenharmony_ci		ssam_show_generic_u8_field(__entry->iid)
51062306a36Sopenharmony_ci	)
51162306a36Sopenharmony_ci);
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci#define DEFINE_SSAM_REQUEST_EVENT(name)				\
51462306a36Sopenharmony_ci	DEFINE_EVENT(ssam_request_class, ssam_##name,		\
51562306a36Sopenharmony_ci		TP_PROTO(const struct ssh_request *request),	\
51662306a36Sopenharmony_ci		TP_ARGS(request)				\
51762306a36Sopenharmony_ci	)
51862306a36Sopenharmony_ci
51962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_request_status_class,
52062306a36Sopenharmony_ci	TP_PROTO(const struct ssh_request *request, int status),
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ci	TP_ARGS(request, status),
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_ci	TP_STRUCT__entry(
52562306a36Sopenharmony_ci		__field(unsigned long, state)
52662306a36Sopenharmony_ci		__field(u32, rqid)
52762306a36Sopenharmony_ci		__field(int, status)
52862306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
52962306a36Sopenharmony_ci		__field(u8, tc)
53062306a36Sopenharmony_ci		__field(u16, cid)
53162306a36Sopenharmony_ci		__field(u16, iid)
53262306a36Sopenharmony_ci		__field(u8, tid)
53362306a36Sopenharmony_ci		__field(u8, sid)
53462306a36Sopenharmony_ci	),
53562306a36Sopenharmony_ci
53662306a36Sopenharmony_ci	TP_fast_assign(
53762306a36Sopenharmony_ci		const struct ssh_packet *p = &request->packet;
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_ci		/* Use packet for UID so we can match requests to packets. */
54062306a36Sopenharmony_ci		__entry->state = READ_ONCE(request->state);
54162306a36Sopenharmony_ci		__entry->rqid = ssam_trace_get_request_id(p);
54262306a36Sopenharmony_ci		__entry->status = status;
54362306a36Sopenharmony_ci		ssam_trace_ptr_uid(p, __entry->uid);
54462306a36Sopenharmony_ci		__entry->tid = ssam_trace_get_request_tid(p);
54562306a36Sopenharmony_ci		__entry->sid = ssam_trace_get_request_sid(p);
54662306a36Sopenharmony_ci		__entry->tc = ssam_trace_get_request_tc(p);
54762306a36Sopenharmony_ci		__entry->cid = ssam_trace_get_command_field_u8(p, cid);
54862306a36Sopenharmony_ci		__entry->iid = ssam_trace_get_command_field_u8(p, iid);
54962306a36Sopenharmony_ci	),
55062306a36Sopenharmony_ci
55162306a36Sopenharmony_ci	TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s, status=%d",
55262306a36Sopenharmony_ci		__entry->uid,
55362306a36Sopenharmony_ci		ssam_show_request_id(__entry->rqid),
55462306a36Sopenharmony_ci		ssam_show_request_type(__entry->state),
55562306a36Sopenharmony_ci		ssam_show_request_state(__entry->state),
55662306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->tid),
55762306a36Sopenharmony_ci		ssam_show_ssh_tid(__entry->sid),
55862306a36Sopenharmony_ci		ssam_show_ssh_tc(__entry->tc),
55962306a36Sopenharmony_ci		ssam_show_generic_u8_field(__entry->cid),
56062306a36Sopenharmony_ci		ssam_show_generic_u8_field(__entry->iid),
56162306a36Sopenharmony_ci		__entry->status
56262306a36Sopenharmony_ci	)
56362306a36Sopenharmony_ci);
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci#define DEFINE_SSAM_REQUEST_STATUS_EVENT(name)				\
56662306a36Sopenharmony_ci	DEFINE_EVENT(ssam_request_status_class, ssam_##name,		\
56762306a36Sopenharmony_ci		TP_PROTO(const struct ssh_request *request, int status),\
56862306a36Sopenharmony_ci		TP_ARGS(request, status)				\
56962306a36Sopenharmony_ci	)
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_alloc_class,
57262306a36Sopenharmony_ci	TP_PROTO(void *ptr, size_t len),
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_ci	TP_ARGS(ptr, len),
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_ci	TP_STRUCT__entry(
57762306a36Sopenharmony_ci		__field(size_t, len)
57862306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
57962306a36Sopenharmony_ci	),
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_ci	TP_fast_assign(
58262306a36Sopenharmony_ci		__entry->len = len;
58362306a36Sopenharmony_ci		ssam_trace_ptr_uid(ptr, __entry->uid);
58462306a36Sopenharmony_ci	),
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_ci	TP_printk("uid=%s, len=%zu", __entry->uid, __entry->len)
58762306a36Sopenharmony_ci);
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_ci#define DEFINE_SSAM_ALLOC_EVENT(name)					\
59062306a36Sopenharmony_ci	DEFINE_EVENT(ssam_alloc_class, ssam_##name,			\
59162306a36Sopenharmony_ci		TP_PROTO(void *ptr, size_t len),			\
59262306a36Sopenharmony_ci		TP_ARGS(ptr, len)					\
59362306a36Sopenharmony_ci	)
59462306a36Sopenharmony_ci
59562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_free_class,
59662306a36Sopenharmony_ci	TP_PROTO(void *ptr),
59762306a36Sopenharmony_ci
59862306a36Sopenharmony_ci	TP_ARGS(ptr),
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_ci	TP_STRUCT__entry(
60162306a36Sopenharmony_ci		__array(char, uid, SSAM_PTR_UID_LEN)
60262306a36Sopenharmony_ci	),
60362306a36Sopenharmony_ci
60462306a36Sopenharmony_ci	TP_fast_assign(
60562306a36Sopenharmony_ci		ssam_trace_ptr_uid(ptr, __entry->uid);
60662306a36Sopenharmony_ci	),
60762306a36Sopenharmony_ci
60862306a36Sopenharmony_ci	TP_printk("uid=%s", __entry->uid)
60962306a36Sopenharmony_ci);
61062306a36Sopenharmony_ci
61162306a36Sopenharmony_ci#define DEFINE_SSAM_FREE_EVENT(name)					\
61262306a36Sopenharmony_ci	DEFINE_EVENT(ssam_free_class, ssam_##name,			\
61362306a36Sopenharmony_ci		TP_PROTO(void *ptr),					\
61462306a36Sopenharmony_ci		TP_ARGS(ptr)						\
61562306a36Sopenharmony_ci	)
61662306a36Sopenharmony_ci
61762306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_pending_class,
61862306a36Sopenharmony_ci	TP_PROTO(unsigned int pending),
61962306a36Sopenharmony_ci
62062306a36Sopenharmony_ci	TP_ARGS(pending),
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_ci	TP_STRUCT__entry(
62362306a36Sopenharmony_ci		__field(unsigned int, pending)
62462306a36Sopenharmony_ci	),
62562306a36Sopenharmony_ci
62662306a36Sopenharmony_ci	TP_fast_assign(
62762306a36Sopenharmony_ci		__entry->pending = pending;
62862306a36Sopenharmony_ci	),
62962306a36Sopenharmony_ci
63062306a36Sopenharmony_ci	TP_printk("pending=%u", __entry->pending)
63162306a36Sopenharmony_ci);
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci#define DEFINE_SSAM_PENDING_EVENT(name)					\
63462306a36Sopenharmony_ci	DEFINE_EVENT(ssam_pending_class, ssam_##name,			\
63562306a36Sopenharmony_ci		TP_PROTO(unsigned int pending),				\
63662306a36Sopenharmony_ci		TP_ARGS(pending)					\
63762306a36Sopenharmony_ci	)
63862306a36Sopenharmony_ci
63962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(ssam_data_class,
64062306a36Sopenharmony_ci	TP_PROTO(size_t length),
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ci	TP_ARGS(length),
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_ci	TP_STRUCT__entry(
64562306a36Sopenharmony_ci		__field(size_t, length)
64662306a36Sopenharmony_ci	),
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci	TP_fast_assign(
64962306a36Sopenharmony_ci		__entry->length = length;
65062306a36Sopenharmony_ci	),
65162306a36Sopenharmony_ci
65262306a36Sopenharmony_ci	TP_printk("length=%zu", __entry->length)
65362306a36Sopenharmony_ci);
65462306a36Sopenharmony_ci
65562306a36Sopenharmony_ci#define DEFINE_SSAM_DATA_EVENT(name)					\
65662306a36Sopenharmony_ci	DEFINE_EVENT(ssam_data_class, ssam_##name,			\
65762306a36Sopenharmony_ci		TP_PROTO(size_t length),				\
65862306a36Sopenharmony_ci		TP_ARGS(length)						\
65962306a36Sopenharmony_ci	)
66062306a36Sopenharmony_ci
66162306a36Sopenharmony_ciDEFINE_SSAM_FRAME_EVENT(rx_frame_received);
66262306a36Sopenharmony_ciDEFINE_SSAM_COMMAND_EVENT(rx_response_received);
66362306a36Sopenharmony_ciDEFINE_SSAM_COMMAND_EVENT(rx_event_received);
66462306a36Sopenharmony_ci
66562306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(packet_release);
66662306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(packet_submit);
66762306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(packet_resubmit);
66862306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(packet_timeout);
66962306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(packet_cancel);
67062306a36Sopenharmony_ciDEFINE_SSAM_PACKET_STATUS_EVENT(packet_complete);
67162306a36Sopenharmony_ciDEFINE_SSAM_PENDING_EVENT(ptl_timeout_reap);
67262306a36Sopenharmony_ci
67362306a36Sopenharmony_ciDEFINE_SSAM_REQUEST_EVENT(request_submit);
67462306a36Sopenharmony_ciDEFINE_SSAM_REQUEST_EVENT(request_timeout);
67562306a36Sopenharmony_ciDEFINE_SSAM_REQUEST_EVENT(request_cancel);
67662306a36Sopenharmony_ciDEFINE_SSAM_REQUEST_STATUS_EVENT(request_complete);
67762306a36Sopenharmony_ciDEFINE_SSAM_PENDING_EVENT(rtl_timeout_reap);
67862306a36Sopenharmony_ci
67962306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(ei_tx_drop_ack_packet);
68062306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(ei_tx_drop_nak_packet);
68162306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(ei_tx_drop_dsq_packet);
68262306a36Sopenharmony_ciDEFINE_SSAM_PACKET_STATUS_EVENT(ei_tx_fail_write);
68362306a36Sopenharmony_ciDEFINE_SSAM_PACKET_EVENT(ei_tx_corrupt_data);
68462306a36Sopenharmony_ciDEFINE_SSAM_DATA_EVENT(ei_rx_corrupt_syn);
68562306a36Sopenharmony_ciDEFINE_SSAM_FRAME_EVENT(ei_rx_corrupt_data);
68662306a36Sopenharmony_ciDEFINE_SSAM_REQUEST_EVENT(ei_rx_drop_response);
68762306a36Sopenharmony_ci
68862306a36Sopenharmony_ciDEFINE_SSAM_ALLOC_EVENT(ctrl_packet_alloc);
68962306a36Sopenharmony_ciDEFINE_SSAM_FREE_EVENT(ctrl_packet_free);
69062306a36Sopenharmony_ci
69162306a36Sopenharmony_ciDEFINE_SSAM_ALLOC_EVENT(event_item_alloc);
69262306a36Sopenharmony_ciDEFINE_SSAM_FREE_EVENT(event_item_free);
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_ci#endif /* _SURFACE_AGGREGATOR_TRACE_H */
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci/* This part must be outside protection */
69762306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
69862306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
69962306a36Sopenharmony_ci
70062306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
70162306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_ci#include <trace/define_trace.h>
704