/* SPDX-License-Identifier: GPL-2.0+ */ /* * Trace points for SSAM/SSH. * * Copyright (C) 2020-2022 Maximilian Luz */ #undef TRACE_SYSTEM #define TRACE_SYSTEM surface_aggregator #if !defined(_SURFACE_AGGREGATOR_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) #define _SURFACE_AGGREGATOR_TRACE_H #include #include #include TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_SEQ); TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_NSQ); TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_ACK); TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_NAK); TRACE_DEFINE_ENUM(SSH_PACKET_SF_LOCKED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_QUEUED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_PENDING_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTING_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_ACKED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_CANCELED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_SF_COMPLETED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_TY_FLUSH_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_TY_SEQUENCED_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_TY_BLOCKING_BIT); TRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_SF_MASK); TRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_TY_MASK); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_LOCKED_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_QUEUED_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_PENDING_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTING_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTED_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_RSPRCVD_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_CANCELED_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_SF_COMPLETED_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_TY_FLUSH_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_TY_HAS_RESPONSE_BIT); TRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_SF_MASK); TRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_TY_MASK); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SAM); TRACE_DEFINE_ENUM(SSAM_SSH_TC_BAT); TRACE_DEFINE_ENUM(SSAM_SSH_TC_TMP); TRACE_DEFINE_ENUM(SSAM_SSH_TC_PMC); TRACE_DEFINE_ENUM(SSAM_SSH_TC_FAN); TRACE_DEFINE_ENUM(SSAM_SSH_TC_PoM); TRACE_DEFINE_ENUM(SSAM_SSH_TC_DBG); TRACE_DEFINE_ENUM(SSAM_SSH_TC_KBD); TRACE_DEFINE_ENUM(SSAM_SSH_TC_FWU); TRACE_DEFINE_ENUM(SSAM_SSH_TC_UNI); TRACE_DEFINE_ENUM(SSAM_SSH_TC_LPC); TRACE_DEFINE_ENUM(SSAM_SSH_TC_TCL); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SFL); TRACE_DEFINE_ENUM(SSAM_SSH_TC_KIP); TRACE_DEFINE_ENUM(SSAM_SSH_TC_EXT); TRACE_DEFINE_ENUM(SSAM_SSH_TC_BLD); TRACE_DEFINE_ENUM(SSAM_SSH_TC_BAS); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SEN); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SRQ); TRACE_DEFINE_ENUM(SSAM_SSH_TC_MCU); TRACE_DEFINE_ENUM(SSAM_SSH_TC_HID); TRACE_DEFINE_ENUM(SSAM_SSH_TC_TCH); TRACE_DEFINE_ENUM(SSAM_SSH_TC_BKL); TRACE_DEFINE_ENUM(SSAM_SSH_TC_TAM); TRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC0); TRACE_DEFINE_ENUM(SSAM_SSH_TC_UFI); TRACE_DEFINE_ENUM(SSAM_SSH_TC_USC); TRACE_DEFINE_ENUM(SSAM_SSH_TC_PEN); TRACE_DEFINE_ENUM(SSAM_SSH_TC_VID); TRACE_DEFINE_ENUM(SSAM_SSH_TC_AUD); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SMC); TRACE_DEFINE_ENUM(SSAM_SSH_TC_KPD); TRACE_DEFINE_ENUM(SSAM_SSH_TC_REG); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SPT); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SYS); TRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC1); TRACE_DEFINE_ENUM(SSAM_SSH_TC_SHB); TRACE_DEFINE_ENUM(SSAM_SSH_TC_POS); #define SSAM_PTR_UID_LEN 9 #define SSAM_U8_FIELD_NOT_APPLICABLE ((u16)-1) #define SSAM_SEQ_NOT_APPLICABLE ((u16)-1) #define SSAM_RQID_NOT_APPLICABLE ((u32)-1) #define SSAM_SSH_TC_NOT_APPLICABLE 0 #ifndef _SURFACE_AGGREGATOR_TRACE_HELPERS #define _SURFACE_AGGREGATOR_TRACE_HELPERS /** * ssam_trace_ptr_uid() - Convert the pointer to a non-pointer UID string. * @ptr: The pointer to convert. * @uid_str: A buffer of length SSAM_PTR_UID_LEN where the UID will be stored. * * Converts the given pointer into a UID string that is safe to be shared * with userspace and logs, i.e. doesn't give away the real memory location. */ static inline void ssam_trace_ptr_uid(const void *ptr, char *uid_str) { char buf[2 * sizeof(void *) + 1]; BUILD_BUG_ON(ARRAY_SIZE(buf) < SSAM_PTR_UID_LEN); snprintf(buf, ARRAY_SIZE(buf), "%p", ptr); memcpy(uid_str, &buf[ARRAY_SIZE(buf) - SSAM_PTR_UID_LEN], SSAM_PTR_UID_LEN); } /** * ssam_trace_get_packet_seq() - Read the packet's sequence ID. * @p: The packet. * * Return: Returns the packet's sequence ID (SEQ) field if present, or * %SSAM_SEQ_NOT_APPLICABLE if not (e.g. flush packet). */ static inline u16 ssam_trace_get_packet_seq(const struct ssh_packet *p) { if (!p->data.ptr || p->data.len < SSH_MESSAGE_LENGTH(0)) return SSAM_SEQ_NOT_APPLICABLE; return p->data.ptr[SSH_MSGOFFSET_FRAME(seq)]; } /** * ssam_trace_get_request_id() - Read the packet's request ID. * @p: The packet. * * Return: Returns the packet's request ID (RQID) field if the packet * represents a request with command data, or %SSAM_RQID_NOT_APPLICABLE if not * (e.g. flush request, control packet). */ static inline u32 ssam_trace_get_request_id(const struct ssh_packet *p) { if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0)) return SSAM_RQID_NOT_APPLICABLE; return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(rqid)]); } /** * ssam_trace_get_request_tc() - Read the packet's request target category. * @p: The packet. * * Return: Returns the packet's request target category (TC) field if the * packet represents a request with command data, or %SSAM_TC_NOT_APPLICABLE * if not (e.g. flush request, control packet). */ static inline u32 ssam_trace_get_request_tc(const struct ssh_packet *p) { if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0)) return SSAM_SSH_TC_NOT_APPLICABLE; return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tc)]); } #endif /* _SURFACE_AGGREGATOR_TRACE_HELPERS */ #define ssam_trace_get_command_field_u8(packet, field) \ ((!(packet) || (packet)->data.len < SSH_COMMAND_MESSAGE_LENGTH(0)) \ ? 0 : (packet)->data.ptr[SSH_MSGOFFSET_COMMAND(field)]) #define ssam_show_generic_u8_field(value) \ __print_symbolic(value, \ { SSAM_U8_FIELD_NOT_APPLICABLE, "N/A" } \ ) #define ssam_show_frame_type(ty) \ __print_symbolic(ty, \ { SSH_FRAME_TYPE_DATA_SEQ, "DSEQ" }, \ { SSH_FRAME_TYPE_DATA_NSQ, "DNSQ" }, \ { SSH_FRAME_TYPE_ACK, "ACK" }, \ { SSH_FRAME_TYPE_NAK, "NAK" } \ ) #define ssam_show_packet_type(type) \ __print_flags(flags & SSH_PACKET_FLAGS_TY_MASK, "", \ { BIT(SSH_PACKET_TY_FLUSH_BIT), "F" }, \ { BIT(SSH_PACKET_TY_SEQUENCED_BIT), "S" }, \ { BIT(SSH_PACKET_TY_BLOCKING_BIT), "B" } \ ) #define ssam_show_packet_state(state) \ __print_flags(flags & SSH_PACKET_FLAGS_SF_MASK, "", \ { BIT(SSH_PACKET_SF_LOCKED_BIT), "L" }, \ { BIT(SSH_PACKET_SF_QUEUED_BIT), "Q" }, \ { BIT(SSH_PACKET_SF_PENDING_BIT), "P" }, \ { BIT(SSH_PACKET_SF_TRANSMITTING_BIT), "S" }, \ { BIT(SSH_PACKET_SF_TRANSMITTED_BIT), "T" }, \ { BIT(SSH_PACKET_SF_ACKED_BIT), "A" }, \ { BIT(SSH_PACKET_SF_CANCELED_BIT), "C" }, \ { BIT(SSH_PACKET_SF_COMPLETED_BIT), "F" } \ ) #define ssam_show_packet_seq(seq) \ __print_symbolic(seq, \ { SSAM_SEQ_NOT_APPLICABLE, "N/A" } \ ) #define ssam_show_request_type(flags) \ __print_flags((flags) & SSH_REQUEST_FLAGS_TY_MASK, "", \ { BIT(SSH_REQUEST_TY_FLUSH_BIT), "F" }, \ { BIT(SSH_REQUEST_TY_HAS_RESPONSE_BIT), "R" } \ ) #define ssam_show_request_state(flags) \ __print_flags((flags) & SSH_REQUEST_FLAGS_SF_MASK, "", \ { BIT(SSH_REQUEST_SF_LOCKED_BIT), "L" }, \ { BIT(SSH_REQUEST_SF_QUEUED_BIT), "Q" }, \ { BIT(SSH_REQUEST_SF_PENDING_BIT), "P" }, \ { BIT(SSH_REQUEST_SF_TRANSMITTING_BIT), "S" }, \ { BIT(SSH_REQUEST_SF_TRANSMITTED_BIT), "T" }, \ { BIT(SSH_REQUEST_SF_RSPRCVD_BIT), "A" }, \ { BIT(SSH_REQUEST_SF_CANCELED_BIT), "C" }, \ { BIT(SSH_REQUEST_SF_COMPLETED_BIT), "F" } \ ) #define ssam_show_request_id(rqid) \ __print_symbolic(rqid, \ { SSAM_RQID_NOT_APPLICABLE, "N/A" } \ ) #define ssam_show_ssh_tc(rqid) \ __print_symbolic(rqid, \ { SSAM_SSH_TC_NOT_APPLICABLE, "N/A" }, \ { SSAM_SSH_TC_SAM, "SAM" }, \ { SSAM_SSH_TC_BAT, "BAT" }, \ { SSAM_SSH_TC_TMP, "TMP" }, \ { SSAM_SSH_TC_PMC, "PMC" }, \ { SSAM_SSH_TC_FAN, "FAN" }, \ { SSAM_SSH_TC_PoM, "PoM" }, \ { SSAM_SSH_TC_DBG, "DBG" }, \ { SSAM_SSH_TC_KBD, "KBD" }, \ { SSAM_SSH_TC_FWU, "FWU" }, \ { SSAM_SSH_TC_UNI, "UNI" }, \ { SSAM_SSH_TC_LPC, "LPC" }, \ { SSAM_SSH_TC_TCL, "TCL" }, \ { SSAM_SSH_TC_SFL, "SFL" }, \ { SSAM_SSH_TC_KIP, "KIP" }, \ { SSAM_SSH_TC_EXT, "EXT" }, \ { SSAM_SSH_TC_BLD, "BLD" }, \ { SSAM_SSH_TC_BAS, "BAS" }, \ { SSAM_SSH_TC_SEN, "SEN" }, \ { SSAM_SSH_TC_SRQ, "SRQ" }, \ { SSAM_SSH_TC_MCU, "MCU" }, \ { SSAM_SSH_TC_HID, "HID" }, \ { SSAM_SSH_TC_TCH, "TCH" }, \ { SSAM_SSH_TC_BKL, "BKL" }, \ { SSAM_SSH_TC_TAM, "TAM" }, \ { SSAM_SSH_TC_ACC0, "ACC0" }, \ { SSAM_SSH_TC_UFI, "UFI" }, \ { SSAM_SSH_TC_USC, "USC" }, \ { SSAM_SSH_TC_PEN, "PEN" }, \ { SSAM_SSH_TC_VID, "VID" }, \ { SSAM_SSH_TC_AUD, "AUD" }, \ { SSAM_SSH_TC_SMC, "SMC" }, \ { SSAM_SSH_TC_KPD, "KPD" }, \ { SSAM_SSH_TC_REG, "REG" }, \ { SSAM_SSH_TC_SPT, "SPT" }, \ { SSAM_SSH_TC_SYS, "SYS" }, \ { SSAM_SSH_TC_ACC1, "ACC1" }, \ { SSAM_SSH_TC_SHB, "SMB" }, \ { SSAM_SSH_TC_POS, "POS" } \ ) DECLARE_EVENT_CLASS(ssam_frame_class, TP_PROTO(const struct ssh_frame *frame), TP_ARGS(frame), TP_STRUCT__entry( __field(u8, type) __field(u8, seq) __field(u16, len) ), TP_fast_assign( __entry->type = frame->type; __entry->seq = frame->seq; __entry->len = get_unaligned_le16(&frame->len); ), TP_printk("ty=%s, seq=%#04x, len=%u", ssam_show_frame_type(__entry->type), __entry->seq, __entry->len ) ); #define DEFINE_SSAM_FRAME_EVENT(name) \ DEFINE_EVENT(ssam_frame_class, ssam_##name, \ TP_PROTO(const struct ssh_frame *frame), \ TP_ARGS(frame) \ ) DECLARE_EVENT_CLASS(ssam_command_class, TP_PROTO(const struct ssh_command *cmd, u16 len), TP_ARGS(cmd, len), TP_STRUCT__entry( __field(u16, rqid) __field(u16, len) __field(u8, tc) __field(u8, cid) __field(u8, iid) ), TP_fast_assign( __entry->rqid = get_unaligned_le16(&cmd->rqid); __entry->tc = cmd->tc; __entry->cid = cmd->cid; __entry->iid = cmd->iid; __entry->len = len; ), TP_printk("rqid=%#06x, tc=%s, cid=%#04x, iid=%#04x, len=%u", __entry->rqid, ssam_show_ssh_tc(__entry->tc), __entry->cid, __entry->iid, __entry->len ) ); #define DEFINE_SSAM_COMMAND_EVENT(name) \ DEFINE_EVENT(ssam_command_class, ssam_##name, \ TP_PROTO(const struct ssh_command *cmd, u16 len), \ TP_ARGS(cmd, len) \ ) DECLARE_EVENT_CLASS(ssam_packet_class, TP_PROTO(const struct ssh_packet *packet), TP_ARGS(packet), TP_STRUCT__entry( __field(unsigned long, state) __array(char, uid, SSAM_PTR_UID_LEN) __field(u8, priority) __field(u16, length) __field(u16, seq) ), TP_fast_assign( __entry->state = READ_ONCE(packet->state); ssam_trace_ptr_uid(packet, __entry->uid); __entry->priority = READ_ONCE(packet->priority); __entry->length = packet->data.len; __entry->seq = ssam_trace_get_packet_seq(packet); ), TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s", __entry->uid, ssam_show_packet_seq(__entry->seq), ssam_show_packet_type(__entry->state), __entry->priority, __entry->length, ssam_show_packet_state(__entry->state) ) ); #define DEFINE_SSAM_PACKET_EVENT(name) \ DEFINE_EVENT(ssam_packet_class, ssam_##name, \ TP_PROTO(const struct ssh_packet *packet), \ TP_ARGS(packet) \ ) DECLARE_EVENT_CLASS(ssam_packet_status_class, TP_PROTO(const struct ssh_packet *packet, int status), TP_ARGS(packet, status), TP_STRUCT__entry( __field(unsigned long, state) __field(int, status) __array(char, uid, SSAM_PTR_UID_LEN) __field(u8, priority) __field(u16, length) __field(u16, seq) ), TP_fast_assign( __entry->state = READ_ONCE(packet->state); __entry->status = status; ssam_trace_ptr_uid(packet, __entry->uid); __entry->priority = READ_ONCE(packet->priority); __entry->length = packet->data.len; __entry->seq = ssam_trace_get_packet_seq(packet); ), TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s, status=%d", __entry->uid, ssam_show_packet_seq(__entry->seq), ssam_show_packet_type(__entry->state), __entry->priority, __entry->length, ssam_show_packet_state(__entry->state), __entry->status ) ); #define DEFINE_SSAM_PACKET_STATUS_EVENT(name) \ DEFINE_EVENT(ssam_packet_status_class, ssam_##name, \ TP_PROTO(const struct ssh_packet *packet, int status), \ TP_ARGS(packet, status) \ ) DECLARE_EVENT_CLASS(ssam_request_class, TP_PROTO(const struct ssh_request *request), TP_ARGS(request), TP_STRUCT__entry( __field(unsigned long, state) __field(u32, rqid) __array(char, uid, SSAM_PTR_UID_LEN) __field(u8, tc) __field(u16, cid) __field(u16, iid) ), TP_fast_assign( const struct ssh_packet *p = &request->packet; /* Use packet for UID so we can match requests to packets. */ __entry->state = READ_ONCE(request->state); __entry->rqid = ssam_trace_get_request_id(p); ssam_trace_ptr_uid(p, __entry->uid); __entry->tc = ssam_trace_get_request_tc(p); __entry->cid = ssam_trace_get_command_field_u8(p, cid); __entry->iid = ssam_trace_get_command_field_u8(p, iid); ), TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tc=%s, cid=%s, iid=%s", __entry->uid, ssam_show_request_id(__entry->rqid), ssam_show_request_type(__entry->state), ssam_show_request_state(__entry->state), ssam_show_ssh_tc(__entry->tc), ssam_show_generic_u8_field(__entry->cid), ssam_show_generic_u8_field(__entry->iid) ) ); #define DEFINE_SSAM_REQUEST_EVENT(name) \ DEFINE_EVENT(ssam_request_class, ssam_##name, \ TP_PROTO(const struct ssh_request *request), \ TP_ARGS(request) \ ) DECLARE_EVENT_CLASS(ssam_request_status_class, TP_PROTO(const struct ssh_request *request, int status), TP_ARGS(request, status), TP_STRUCT__entry( __field(unsigned long, state) __field(u32, rqid) __field(int, status) __array(char, uid, SSAM_PTR_UID_LEN) __field(u8, tc) __field(u16, cid) __field(u16, iid) ), TP_fast_assign( const struct ssh_packet *p = &request->packet; /* Use packet for UID so we can match requests to packets. */ __entry->state = READ_ONCE(request->state); __entry->rqid = ssam_trace_get_request_id(p); __entry->status = status; ssam_trace_ptr_uid(p, __entry->uid); __entry->tc = ssam_trace_get_request_tc(p); __entry->cid = ssam_trace_get_command_field_u8(p, cid); __entry->iid = ssam_trace_get_command_field_u8(p, iid); ), TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tc=%s, cid=%s, iid=%s, status=%d", __entry->uid, ssam_show_request_id(__entry->rqid), ssam_show_request_type(__entry->state), ssam_show_request_state(__entry->state), ssam_show_ssh_tc(__entry->tc), ssam_show_generic_u8_field(__entry->cid), ssam_show_generic_u8_field(__entry->iid), __entry->status ) ); #define DEFINE_SSAM_REQUEST_STATUS_EVENT(name) \ DEFINE_EVENT(ssam_request_status_class, ssam_##name, \ TP_PROTO(const struct ssh_request *request, int status),\ TP_ARGS(request, status) \ ) DECLARE_EVENT_CLASS(ssam_alloc_class, TP_PROTO(void *ptr, size_t len), TP_ARGS(ptr, len), TP_STRUCT__entry( __field(size_t, len) __array(char, uid, SSAM_PTR_UID_LEN) ), TP_fast_assign( __entry->len = len; ssam_trace_ptr_uid(ptr, __entry->uid); ), TP_printk("uid=%s, len=%zu", __entry->uid, __entry->len) ); #define DEFINE_SSAM_ALLOC_EVENT(name) \ DEFINE_EVENT(ssam_alloc_class, ssam_##name, \ TP_PROTO(void *ptr, size_t len), \ TP_ARGS(ptr, len) \ ) DECLARE_EVENT_CLASS(ssam_free_class, TP_PROTO(void *ptr), TP_ARGS(ptr), TP_STRUCT__entry( __array(char, uid, SSAM_PTR_UID_LEN) ), TP_fast_assign( ssam_trace_ptr_uid(ptr, __entry->uid); ), TP_printk("uid=%s", __entry->uid) ); #define DEFINE_SSAM_FREE_EVENT(name) \ DEFINE_EVENT(ssam_free_class, ssam_##name, \ TP_PROTO(void *ptr), \ TP_ARGS(ptr) \ ) DECLARE_EVENT_CLASS(ssam_pending_class, TP_PROTO(unsigned int pending), TP_ARGS(pending), TP_STRUCT__entry( __field(unsigned int, pending) ), TP_fast_assign( __entry->pending = pending; ), TP_printk("pending=%u", __entry->pending) ); #define DEFINE_SSAM_PENDING_EVENT(name) \ DEFINE_EVENT(ssam_pending_class, ssam_##name, \ TP_PROTO(unsigned int pending), \ TP_ARGS(pending) \ ) DECLARE_EVENT_CLASS(ssam_data_class, TP_PROTO(size_t length), TP_ARGS(length), TP_STRUCT__entry( __field(size_t, length) ), TP_fast_assign( __entry->length = length; ), TP_printk("length=%zu", __entry->length) ); #define DEFINE_SSAM_DATA_EVENT(name) \ DEFINE_EVENT(ssam_data_class, ssam_##name, \ TP_PROTO(size_t length), \ TP_ARGS(length) \ ) DEFINE_SSAM_FRAME_EVENT(rx_frame_received); DEFINE_SSAM_COMMAND_EVENT(rx_response_received); DEFINE_SSAM_COMMAND_EVENT(rx_event_received); DEFINE_SSAM_PACKET_EVENT(packet_release); DEFINE_SSAM_PACKET_EVENT(packet_submit); DEFINE_SSAM_PACKET_EVENT(packet_resubmit); DEFINE_SSAM_PACKET_EVENT(packet_timeout); DEFINE_SSAM_PACKET_EVENT(packet_cancel); DEFINE_SSAM_PACKET_STATUS_EVENT(packet_complete); DEFINE_SSAM_PENDING_EVENT(ptl_timeout_reap); DEFINE_SSAM_REQUEST_EVENT(request_submit); DEFINE_SSAM_REQUEST_EVENT(request_timeout); DEFINE_SSAM_REQUEST_EVENT(request_cancel); DEFINE_SSAM_REQUEST_STATUS_EVENT(request_complete); DEFINE_SSAM_PENDING_EVENT(rtl_timeout_reap); DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_ack_packet); DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_nak_packet); DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_dsq_packet); DEFINE_SSAM_PACKET_STATUS_EVENT(ei_tx_fail_write); DEFINE_SSAM_PACKET_EVENT(ei_tx_corrupt_data); DEFINE_SSAM_DATA_EVENT(ei_rx_corrupt_syn); DEFINE_SSAM_FRAME_EVENT(ei_rx_corrupt_data); DEFINE_SSAM_REQUEST_EVENT(ei_rx_drop_response); DEFINE_SSAM_ALLOC_EVENT(ctrl_packet_alloc); DEFINE_SSAM_FREE_EVENT(ctrl_packet_free); DEFINE_SSAM_ALLOC_EVENT(event_item_alloc); DEFINE_SSAM_FREE_EVENT(event_item_free); #endif /* _SURFACE_AGGREGATOR_TRACE_H */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_PATH . #define TRACE_INCLUDE_FILE trace #include