704 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/*3 * Trace points for SSAM/SSH.4 *5 * Copyright (C) 2020-2022 Maximilian Luz <luzmaximilian@gmail.com>6 */7 8#undef TRACE_SYSTEM9#define TRACE_SYSTEM surface_aggregator10 11#if !defined(_SURFACE_AGGREGATOR_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)12#define _SURFACE_AGGREGATOR_TRACE_H13 14#include <linux/surface_aggregator/serial_hub.h>15 16#include <linux/unaligned.h>17#include <linux/tracepoint.h>18 19TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_SEQ);20TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_DATA_NSQ);21TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_ACK);22TRACE_DEFINE_ENUM(SSH_FRAME_TYPE_NAK);23 24TRACE_DEFINE_ENUM(SSH_PACKET_SF_LOCKED_BIT);25TRACE_DEFINE_ENUM(SSH_PACKET_SF_QUEUED_BIT);26TRACE_DEFINE_ENUM(SSH_PACKET_SF_PENDING_BIT);27TRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTING_BIT);28TRACE_DEFINE_ENUM(SSH_PACKET_SF_TRANSMITTED_BIT);29TRACE_DEFINE_ENUM(SSH_PACKET_SF_ACKED_BIT);30TRACE_DEFINE_ENUM(SSH_PACKET_SF_CANCELED_BIT);31TRACE_DEFINE_ENUM(SSH_PACKET_SF_COMPLETED_BIT);32 33TRACE_DEFINE_ENUM(SSH_PACKET_TY_FLUSH_BIT);34TRACE_DEFINE_ENUM(SSH_PACKET_TY_SEQUENCED_BIT);35TRACE_DEFINE_ENUM(SSH_PACKET_TY_BLOCKING_BIT);36 37TRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_SF_MASK);38TRACE_DEFINE_ENUM(SSH_PACKET_FLAGS_TY_MASK);39 40TRACE_DEFINE_ENUM(SSH_REQUEST_SF_LOCKED_BIT);41TRACE_DEFINE_ENUM(SSH_REQUEST_SF_QUEUED_BIT);42TRACE_DEFINE_ENUM(SSH_REQUEST_SF_PENDING_BIT);43TRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTING_BIT);44TRACE_DEFINE_ENUM(SSH_REQUEST_SF_TRANSMITTED_BIT);45TRACE_DEFINE_ENUM(SSH_REQUEST_SF_RSPRCVD_BIT);46TRACE_DEFINE_ENUM(SSH_REQUEST_SF_CANCELED_BIT);47TRACE_DEFINE_ENUM(SSH_REQUEST_SF_COMPLETED_BIT);48 49TRACE_DEFINE_ENUM(SSH_REQUEST_TY_FLUSH_BIT);50TRACE_DEFINE_ENUM(SSH_REQUEST_TY_HAS_RESPONSE_BIT);51 52TRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_SF_MASK);53TRACE_DEFINE_ENUM(SSH_REQUEST_FLAGS_TY_MASK);54 55TRACE_DEFINE_ENUM(SSAM_SSH_TC_SAM);56TRACE_DEFINE_ENUM(SSAM_SSH_TC_BAT);57TRACE_DEFINE_ENUM(SSAM_SSH_TC_TMP);58TRACE_DEFINE_ENUM(SSAM_SSH_TC_PMC);59TRACE_DEFINE_ENUM(SSAM_SSH_TC_FAN);60TRACE_DEFINE_ENUM(SSAM_SSH_TC_PoM);61TRACE_DEFINE_ENUM(SSAM_SSH_TC_DBG);62TRACE_DEFINE_ENUM(SSAM_SSH_TC_KBD);63TRACE_DEFINE_ENUM(SSAM_SSH_TC_FWU);64TRACE_DEFINE_ENUM(SSAM_SSH_TC_UNI);65TRACE_DEFINE_ENUM(SSAM_SSH_TC_LPC);66TRACE_DEFINE_ENUM(SSAM_SSH_TC_TCL);67TRACE_DEFINE_ENUM(SSAM_SSH_TC_SFL);68TRACE_DEFINE_ENUM(SSAM_SSH_TC_KIP);69TRACE_DEFINE_ENUM(SSAM_SSH_TC_EXT);70TRACE_DEFINE_ENUM(SSAM_SSH_TC_BLD);71TRACE_DEFINE_ENUM(SSAM_SSH_TC_BAS);72TRACE_DEFINE_ENUM(SSAM_SSH_TC_SEN);73TRACE_DEFINE_ENUM(SSAM_SSH_TC_SRQ);74TRACE_DEFINE_ENUM(SSAM_SSH_TC_MCU);75TRACE_DEFINE_ENUM(SSAM_SSH_TC_HID);76TRACE_DEFINE_ENUM(SSAM_SSH_TC_TCH);77TRACE_DEFINE_ENUM(SSAM_SSH_TC_BKL);78TRACE_DEFINE_ENUM(SSAM_SSH_TC_TAM);79TRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC0);80TRACE_DEFINE_ENUM(SSAM_SSH_TC_UFI);81TRACE_DEFINE_ENUM(SSAM_SSH_TC_USC);82TRACE_DEFINE_ENUM(SSAM_SSH_TC_PEN);83TRACE_DEFINE_ENUM(SSAM_SSH_TC_VID);84TRACE_DEFINE_ENUM(SSAM_SSH_TC_AUD);85TRACE_DEFINE_ENUM(SSAM_SSH_TC_SMC);86TRACE_DEFINE_ENUM(SSAM_SSH_TC_KPD);87TRACE_DEFINE_ENUM(SSAM_SSH_TC_REG);88TRACE_DEFINE_ENUM(SSAM_SSH_TC_SPT);89TRACE_DEFINE_ENUM(SSAM_SSH_TC_SYS);90TRACE_DEFINE_ENUM(SSAM_SSH_TC_ACC1);91TRACE_DEFINE_ENUM(SSAM_SSH_TC_SHB);92TRACE_DEFINE_ENUM(SSAM_SSH_TC_POS);93 94#define SSAM_PTR_UID_LEN 995#define SSAM_U8_FIELD_NOT_APPLICABLE ((u16)-1)96#define SSAM_SEQ_NOT_APPLICABLE ((u16)-1)97#define SSAM_RQID_NOT_APPLICABLE ((u32)-1)98#define SSAM_SSH_TC_NOT_APPLICABLE 099#define SSAM_SSH_TID_NOT_APPLICABLE ((u8)-1)100 101#ifndef _SURFACE_AGGREGATOR_TRACE_HELPERS102#define _SURFACE_AGGREGATOR_TRACE_HELPERS103 104/**105 * ssam_trace_ptr_uid() - Convert the pointer to a non-pointer UID string.106 * @ptr: The pointer to convert.107 * @uid_str: A buffer of length SSAM_PTR_UID_LEN where the UID will be stored.108 *109 * Converts the given pointer into a UID string that is safe to be shared110 * with userspace and logs, i.e. doesn't give away the real memory location.111 */112static inline void ssam_trace_ptr_uid(const void *ptr, char *uid_str)113{114 char buf[2 * sizeof(void *) + 1];115 116 BUILD_BUG_ON(ARRAY_SIZE(buf) < SSAM_PTR_UID_LEN);117 118 snprintf(buf, ARRAY_SIZE(buf), "%p", ptr);119 memcpy(uid_str, &buf[ARRAY_SIZE(buf) - SSAM_PTR_UID_LEN],120 SSAM_PTR_UID_LEN);121}122 123/**124 * ssam_trace_get_packet_seq() - Read the packet's sequence ID.125 * @p: The packet.126 *127 * Return: Returns the packet's sequence ID (SEQ) field if present, or128 * %SSAM_SEQ_NOT_APPLICABLE if not (e.g. flush packet).129 */130static inline u16 ssam_trace_get_packet_seq(const struct ssh_packet *p)131{132 if (!p->data.ptr || p->data.len < SSH_MESSAGE_LENGTH(0))133 return SSAM_SEQ_NOT_APPLICABLE;134 135 return p->data.ptr[SSH_MSGOFFSET_FRAME(seq)];136}137 138/**139 * ssam_trace_get_request_id() - Read the packet's request ID.140 * @p: The packet.141 *142 * Return: Returns the packet's request ID (RQID) field if the packet143 * represents a request with command data, or %SSAM_RQID_NOT_APPLICABLE if not144 * (e.g. flush request, control packet).145 */146static inline u32 ssam_trace_get_request_id(const struct ssh_packet *p)147{148 if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))149 return SSAM_RQID_NOT_APPLICABLE;150 151 return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(rqid)]);152}153 154/**155 * ssam_trace_get_request_tid() - Read the packet's request target ID.156 * @p: The packet.157 *158 * Return: Returns the packet's request target ID (TID) field if the packet159 * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE160 * if not (e.g. flush request, control packet).161 */162static inline u32 ssam_trace_get_request_tid(const struct ssh_packet *p)163{164 if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))165 return SSAM_SSH_TID_NOT_APPLICABLE;166 167 return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tid)]);168}169 170/**171 * ssam_trace_get_request_sid() - Read the packet's request source ID.172 * @p: The packet.173 *174 * Return: Returns the packet's request source ID (SID) field if the packet175 * represents a request with command data, or %SSAM_SSH_TID_NOT_APPLICABLE176 * if not (e.g. flush request, control packet).177 */178static inline u32 ssam_trace_get_request_sid(const struct ssh_packet *p)179{180 if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))181 return SSAM_SSH_TID_NOT_APPLICABLE;182 183 return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(sid)]);184}185 186/**187 * ssam_trace_get_request_tc() - Read the packet's request target category.188 * @p: The packet.189 *190 * Return: Returns the packet's request target category (TC) field if the191 * packet represents a request with command data, or %SSAM_SSH_TC_NOT_APPLICABLE192 * if not (e.g. flush request, control packet).193 */194static inline u32 ssam_trace_get_request_tc(const struct ssh_packet *p)195{196 if (!p->data.ptr || p->data.len < SSH_COMMAND_MESSAGE_LENGTH(0))197 return SSAM_SSH_TC_NOT_APPLICABLE;198 199 return get_unaligned_le16(&p->data.ptr[SSH_MSGOFFSET_COMMAND(tc)]);200}201 202#endif /* _SURFACE_AGGREGATOR_TRACE_HELPERS */203 204#define ssam_trace_get_command_field_u8(packet, field) \205 ((!(packet) || (packet)->data.len < SSH_COMMAND_MESSAGE_LENGTH(0)) \206 ? 0 : (packet)->data.ptr[SSH_MSGOFFSET_COMMAND(field)])207 208#define ssam_show_generic_u8_field(value) \209 __print_symbolic(value, \210 { SSAM_U8_FIELD_NOT_APPLICABLE, "N/A" } \211 )212 213#define ssam_show_frame_type(ty) \214 __print_symbolic(ty, \215 { SSH_FRAME_TYPE_DATA_SEQ, "DSEQ" }, \216 { SSH_FRAME_TYPE_DATA_NSQ, "DNSQ" }, \217 { SSH_FRAME_TYPE_ACK, "ACK" }, \218 { SSH_FRAME_TYPE_NAK, "NAK" } \219 )220 221#define ssam_show_packet_type(type) \222 __print_flags(flags & SSH_PACKET_FLAGS_TY_MASK, "", \223 { BIT(SSH_PACKET_TY_FLUSH_BIT), "F" }, \224 { BIT(SSH_PACKET_TY_SEQUENCED_BIT), "S" }, \225 { BIT(SSH_PACKET_TY_BLOCKING_BIT), "B" } \226 )227 228#define ssam_show_packet_state(state) \229 __print_flags(flags & SSH_PACKET_FLAGS_SF_MASK, "", \230 { BIT(SSH_PACKET_SF_LOCKED_BIT), "L" }, \231 { BIT(SSH_PACKET_SF_QUEUED_BIT), "Q" }, \232 { BIT(SSH_PACKET_SF_PENDING_BIT), "P" }, \233 { BIT(SSH_PACKET_SF_TRANSMITTING_BIT), "S" }, \234 { BIT(SSH_PACKET_SF_TRANSMITTED_BIT), "T" }, \235 { BIT(SSH_PACKET_SF_ACKED_BIT), "A" }, \236 { BIT(SSH_PACKET_SF_CANCELED_BIT), "C" }, \237 { BIT(SSH_PACKET_SF_COMPLETED_BIT), "F" } \238 )239 240#define ssam_show_packet_seq(seq) \241 __print_symbolic(seq, \242 { SSAM_SEQ_NOT_APPLICABLE, "N/A" } \243 )244 245#define ssam_show_request_type(flags) \246 __print_flags((flags) & SSH_REQUEST_FLAGS_TY_MASK, "", \247 { BIT(SSH_REQUEST_TY_FLUSH_BIT), "F" }, \248 { BIT(SSH_REQUEST_TY_HAS_RESPONSE_BIT), "R" } \249 )250 251#define ssam_show_request_state(flags) \252 __print_flags((flags) & SSH_REQUEST_FLAGS_SF_MASK, "", \253 { BIT(SSH_REQUEST_SF_LOCKED_BIT), "L" }, \254 { BIT(SSH_REQUEST_SF_QUEUED_BIT), "Q" }, \255 { BIT(SSH_REQUEST_SF_PENDING_BIT), "P" }, \256 { BIT(SSH_REQUEST_SF_TRANSMITTING_BIT), "S" }, \257 { BIT(SSH_REQUEST_SF_TRANSMITTED_BIT), "T" }, \258 { BIT(SSH_REQUEST_SF_RSPRCVD_BIT), "A" }, \259 { BIT(SSH_REQUEST_SF_CANCELED_BIT), "C" }, \260 { BIT(SSH_REQUEST_SF_COMPLETED_BIT), "F" } \261 )262 263#define ssam_show_request_id(rqid) \264 __print_symbolic(rqid, \265 { SSAM_RQID_NOT_APPLICABLE, "N/A" } \266 )267 268#define ssam_show_ssh_tid(tid) \269 __print_symbolic(tid, \270 { SSAM_SSH_TID_NOT_APPLICABLE, "N/A" }, \271 { SSAM_SSH_TID_HOST, "Host" }, \272 { SSAM_SSH_TID_SAM, "SAM" }, \273 { SSAM_SSH_TID_KIP, "KIP" }, \274 { SSAM_SSH_TID_DEBUG, "Debug" }, \275 { SSAM_SSH_TID_SURFLINK, "SurfLink" } \276 )277 278#define ssam_show_ssh_tc(tc) \279 __print_symbolic(tc, \280 { SSAM_SSH_TC_NOT_APPLICABLE, "N/A" }, \281 { SSAM_SSH_TC_SAM, "SAM" }, \282 { SSAM_SSH_TC_BAT, "BAT" }, \283 { SSAM_SSH_TC_TMP, "TMP" }, \284 { SSAM_SSH_TC_PMC, "PMC" }, \285 { SSAM_SSH_TC_FAN, "FAN" }, \286 { SSAM_SSH_TC_PoM, "PoM" }, \287 { SSAM_SSH_TC_DBG, "DBG" }, \288 { SSAM_SSH_TC_KBD, "KBD" }, \289 { SSAM_SSH_TC_FWU, "FWU" }, \290 { SSAM_SSH_TC_UNI, "UNI" }, \291 { SSAM_SSH_TC_LPC, "LPC" }, \292 { SSAM_SSH_TC_TCL, "TCL" }, \293 { SSAM_SSH_TC_SFL, "SFL" }, \294 { SSAM_SSH_TC_KIP, "KIP" }, \295 { SSAM_SSH_TC_EXT, "EXT" }, \296 { SSAM_SSH_TC_BLD, "BLD" }, \297 { SSAM_SSH_TC_BAS, "BAS" }, \298 { SSAM_SSH_TC_SEN, "SEN" }, \299 { SSAM_SSH_TC_SRQ, "SRQ" }, \300 { SSAM_SSH_TC_MCU, "MCU" }, \301 { SSAM_SSH_TC_HID, "HID" }, \302 { SSAM_SSH_TC_TCH, "TCH" }, \303 { SSAM_SSH_TC_BKL, "BKL" }, \304 { SSAM_SSH_TC_TAM, "TAM" }, \305 { SSAM_SSH_TC_ACC0, "ACC0" }, \306 { SSAM_SSH_TC_UFI, "UFI" }, \307 { SSAM_SSH_TC_USC, "USC" }, \308 { SSAM_SSH_TC_PEN, "PEN" }, \309 { SSAM_SSH_TC_VID, "VID" }, \310 { SSAM_SSH_TC_AUD, "AUD" }, \311 { SSAM_SSH_TC_SMC, "SMC" }, \312 { SSAM_SSH_TC_KPD, "KPD" }, \313 { SSAM_SSH_TC_REG, "REG" }, \314 { SSAM_SSH_TC_SPT, "SPT" }, \315 { SSAM_SSH_TC_SYS, "SYS" }, \316 { SSAM_SSH_TC_ACC1, "ACC1" }, \317 { SSAM_SSH_TC_SHB, "SMB" }, \318 { SSAM_SSH_TC_POS, "POS" } \319 )320 321DECLARE_EVENT_CLASS(ssam_frame_class,322 TP_PROTO(const struct ssh_frame *frame),323 324 TP_ARGS(frame),325 326 TP_STRUCT__entry(327 __field(u8, type)328 __field(u8, seq)329 __field(u16, len)330 ),331 332 TP_fast_assign(333 __entry->type = frame->type;334 __entry->seq = frame->seq;335 __entry->len = get_unaligned_le16(&frame->len);336 ),337 338 TP_printk("ty=%s, seq=%#04x, len=%u",339 ssam_show_frame_type(__entry->type),340 __entry->seq,341 __entry->len342 )343);344 345#define DEFINE_SSAM_FRAME_EVENT(name) \346 DEFINE_EVENT(ssam_frame_class, ssam_##name, \347 TP_PROTO(const struct ssh_frame *frame), \348 TP_ARGS(frame) \349 )350 351DECLARE_EVENT_CLASS(ssam_command_class,352 TP_PROTO(const struct ssh_command *cmd, u16 len),353 354 TP_ARGS(cmd, len),355 356 TP_STRUCT__entry(357 __field(u16, rqid)358 __field(u16, len)359 __field(u8, tid)360 __field(u8, sid)361 __field(u8, tc)362 __field(u8, cid)363 __field(u8, iid)364 ),365 366 TP_fast_assign(367 __entry->rqid = get_unaligned_le16(&cmd->rqid);368 __entry->tid = cmd->tid;369 __entry->sid = cmd->sid;370 __entry->tc = cmd->tc;371 __entry->cid = cmd->cid;372 __entry->iid = cmd->iid;373 __entry->len = len;374 ),375 376 TP_printk("rqid=%#06x, tid=%s, sid=%s, tc=%s, cid=%#04x, iid=%#04x, len=%u",377 __entry->rqid,378 ssam_show_ssh_tid(__entry->tid),379 ssam_show_ssh_tid(__entry->sid),380 ssam_show_ssh_tc(__entry->tc),381 __entry->cid,382 __entry->iid,383 __entry->len384 )385);386 387#define DEFINE_SSAM_COMMAND_EVENT(name) \388 DEFINE_EVENT(ssam_command_class, ssam_##name, \389 TP_PROTO(const struct ssh_command *cmd, u16 len), \390 TP_ARGS(cmd, len) \391 )392 393DECLARE_EVENT_CLASS(ssam_packet_class,394 TP_PROTO(const struct ssh_packet *packet),395 396 TP_ARGS(packet),397 398 TP_STRUCT__entry(399 __field(unsigned long, state)400 __array(char, uid, SSAM_PTR_UID_LEN)401 __field(u8, priority)402 __field(u16, length)403 __field(u16, seq)404 ),405 406 TP_fast_assign(407 __entry->state = READ_ONCE(packet->state);408 ssam_trace_ptr_uid(packet, __entry->uid);409 __entry->priority = READ_ONCE(packet->priority);410 __entry->length = packet->data.len;411 __entry->seq = ssam_trace_get_packet_seq(packet);412 ),413 414 TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s",415 __entry->uid,416 ssam_show_packet_seq(__entry->seq),417 ssam_show_packet_type(__entry->state),418 __entry->priority,419 __entry->length,420 ssam_show_packet_state(__entry->state)421 )422);423 424#define DEFINE_SSAM_PACKET_EVENT(name) \425 DEFINE_EVENT(ssam_packet_class, ssam_##name, \426 TP_PROTO(const struct ssh_packet *packet), \427 TP_ARGS(packet) \428 )429 430DECLARE_EVENT_CLASS(ssam_packet_status_class,431 TP_PROTO(const struct ssh_packet *packet, int status),432 433 TP_ARGS(packet, status),434 435 TP_STRUCT__entry(436 __field(unsigned long, state)437 __field(int, status)438 __array(char, uid, SSAM_PTR_UID_LEN)439 __field(u8, priority)440 __field(u16, length)441 __field(u16, seq)442 ),443 444 TP_fast_assign(445 __entry->state = READ_ONCE(packet->state);446 __entry->status = status;447 ssam_trace_ptr_uid(packet, __entry->uid);448 __entry->priority = READ_ONCE(packet->priority);449 __entry->length = packet->data.len;450 __entry->seq = ssam_trace_get_packet_seq(packet);451 ),452 453 TP_printk("uid=%s, seq=%s, ty=%s, pri=%#04x, len=%u, sta=%s, status=%d",454 __entry->uid,455 ssam_show_packet_seq(__entry->seq),456 ssam_show_packet_type(__entry->state),457 __entry->priority,458 __entry->length,459 ssam_show_packet_state(__entry->state),460 __entry->status461 )462);463 464#define DEFINE_SSAM_PACKET_STATUS_EVENT(name) \465 DEFINE_EVENT(ssam_packet_status_class, ssam_##name, \466 TP_PROTO(const struct ssh_packet *packet, int status), \467 TP_ARGS(packet, status) \468 )469 470DECLARE_EVENT_CLASS(ssam_request_class,471 TP_PROTO(const struct ssh_request *request),472 473 TP_ARGS(request),474 475 TP_STRUCT__entry(476 __field(unsigned long, state)477 __field(u32, rqid)478 __array(char, uid, SSAM_PTR_UID_LEN)479 __field(u8, tc)480 __field(u16, cid)481 __field(u16, iid)482 __field(u8, tid)483 __field(u8, sid)484 ),485 486 TP_fast_assign(487 const struct ssh_packet *p = &request->packet;488 489 /* Use packet for UID so we can match requests to packets. */490 __entry->state = READ_ONCE(request->state);491 __entry->rqid = ssam_trace_get_request_id(p);492 ssam_trace_ptr_uid(p, __entry->uid);493 __entry->tid = ssam_trace_get_request_tid(p);494 __entry->sid = ssam_trace_get_request_sid(p);495 __entry->tc = ssam_trace_get_request_tc(p);496 __entry->cid = ssam_trace_get_command_field_u8(p, cid);497 __entry->iid = ssam_trace_get_command_field_u8(p, iid);498 ),499 500 TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s",501 __entry->uid,502 ssam_show_request_id(__entry->rqid),503 ssam_show_request_type(__entry->state),504 ssam_show_request_state(__entry->state),505 ssam_show_ssh_tid(__entry->tid),506 ssam_show_ssh_tid(__entry->sid),507 ssam_show_ssh_tc(__entry->tc),508 ssam_show_generic_u8_field(__entry->cid),509 ssam_show_generic_u8_field(__entry->iid)510 )511);512 513#define DEFINE_SSAM_REQUEST_EVENT(name) \514 DEFINE_EVENT(ssam_request_class, ssam_##name, \515 TP_PROTO(const struct ssh_request *request), \516 TP_ARGS(request) \517 )518 519DECLARE_EVENT_CLASS(ssam_request_status_class,520 TP_PROTO(const struct ssh_request *request, int status),521 522 TP_ARGS(request, status),523 524 TP_STRUCT__entry(525 __field(unsigned long, state)526 __field(u32, rqid)527 __field(int, status)528 __array(char, uid, SSAM_PTR_UID_LEN)529 __field(u8, tc)530 __field(u16, cid)531 __field(u16, iid)532 __field(u8, tid)533 __field(u8, sid)534 ),535 536 TP_fast_assign(537 const struct ssh_packet *p = &request->packet;538 539 /* Use packet for UID so we can match requests to packets. */540 __entry->state = READ_ONCE(request->state);541 __entry->rqid = ssam_trace_get_request_id(p);542 __entry->status = status;543 ssam_trace_ptr_uid(p, __entry->uid);544 __entry->tid = ssam_trace_get_request_tid(p);545 __entry->sid = ssam_trace_get_request_sid(p);546 __entry->tc = ssam_trace_get_request_tc(p);547 __entry->cid = ssam_trace_get_command_field_u8(p, cid);548 __entry->iid = ssam_trace_get_command_field_u8(p, iid);549 ),550 551 TP_printk("uid=%s, rqid=%s, ty=%s, sta=%s, tid=%s, sid=%s, tc=%s, cid=%s, iid=%s, status=%d",552 __entry->uid,553 ssam_show_request_id(__entry->rqid),554 ssam_show_request_type(__entry->state),555 ssam_show_request_state(__entry->state),556 ssam_show_ssh_tid(__entry->tid),557 ssam_show_ssh_tid(__entry->sid),558 ssam_show_ssh_tc(__entry->tc),559 ssam_show_generic_u8_field(__entry->cid),560 ssam_show_generic_u8_field(__entry->iid),561 __entry->status562 )563);564 565#define DEFINE_SSAM_REQUEST_STATUS_EVENT(name) \566 DEFINE_EVENT(ssam_request_status_class, ssam_##name, \567 TP_PROTO(const struct ssh_request *request, int status),\568 TP_ARGS(request, status) \569 )570 571DECLARE_EVENT_CLASS(ssam_alloc_class,572 TP_PROTO(void *ptr, size_t len),573 574 TP_ARGS(ptr, len),575 576 TP_STRUCT__entry(577 __field(size_t, len)578 __array(char, uid, SSAM_PTR_UID_LEN)579 ),580 581 TP_fast_assign(582 __entry->len = len;583 ssam_trace_ptr_uid(ptr, __entry->uid);584 ),585 586 TP_printk("uid=%s, len=%zu", __entry->uid, __entry->len)587);588 589#define DEFINE_SSAM_ALLOC_EVENT(name) \590 DEFINE_EVENT(ssam_alloc_class, ssam_##name, \591 TP_PROTO(void *ptr, size_t len), \592 TP_ARGS(ptr, len) \593 )594 595DECLARE_EVENT_CLASS(ssam_free_class,596 TP_PROTO(void *ptr),597 598 TP_ARGS(ptr),599 600 TP_STRUCT__entry(601 __array(char, uid, SSAM_PTR_UID_LEN)602 ),603 604 TP_fast_assign(605 ssam_trace_ptr_uid(ptr, __entry->uid);606 ),607 608 TP_printk("uid=%s", __entry->uid)609);610 611#define DEFINE_SSAM_FREE_EVENT(name) \612 DEFINE_EVENT(ssam_free_class, ssam_##name, \613 TP_PROTO(void *ptr), \614 TP_ARGS(ptr) \615 )616 617DECLARE_EVENT_CLASS(ssam_pending_class,618 TP_PROTO(unsigned int pending),619 620 TP_ARGS(pending),621 622 TP_STRUCT__entry(623 __field(unsigned int, pending)624 ),625 626 TP_fast_assign(627 __entry->pending = pending;628 ),629 630 TP_printk("pending=%u", __entry->pending)631);632 633#define DEFINE_SSAM_PENDING_EVENT(name) \634 DEFINE_EVENT(ssam_pending_class, ssam_##name, \635 TP_PROTO(unsigned int pending), \636 TP_ARGS(pending) \637 )638 639DECLARE_EVENT_CLASS(ssam_data_class,640 TP_PROTO(size_t length),641 642 TP_ARGS(length),643 644 TP_STRUCT__entry(645 __field(size_t, length)646 ),647 648 TP_fast_assign(649 __entry->length = length;650 ),651 652 TP_printk("length=%zu", __entry->length)653);654 655#define DEFINE_SSAM_DATA_EVENT(name) \656 DEFINE_EVENT(ssam_data_class, ssam_##name, \657 TP_PROTO(size_t length), \658 TP_ARGS(length) \659 )660 661DEFINE_SSAM_FRAME_EVENT(rx_frame_received);662DEFINE_SSAM_COMMAND_EVENT(rx_response_received);663DEFINE_SSAM_COMMAND_EVENT(rx_event_received);664 665DEFINE_SSAM_PACKET_EVENT(packet_release);666DEFINE_SSAM_PACKET_EVENT(packet_submit);667DEFINE_SSAM_PACKET_EVENT(packet_resubmit);668DEFINE_SSAM_PACKET_EVENT(packet_timeout);669DEFINE_SSAM_PACKET_EVENT(packet_cancel);670DEFINE_SSAM_PACKET_STATUS_EVENT(packet_complete);671DEFINE_SSAM_PENDING_EVENT(ptl_timeout_reap);672 673DEFINE_SSAM_REQUEST_EVENT(request_submit);674DEFINE_SSAM_REQUEST_EVENT(request_timeout);675DEFINE_SSAM_REQUEST_EVENT(request_cancel);676DEFINE_SSAM_REQUEST_STATUS_EVENT(request_complete);677DEFINE_SSAM_PENDING_EVENT(rtl_timeout_reap);678 679DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_ack_packet);680DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_nak_packet);681DEFINE_SSAM_PACKET_EVENT(ei_tx_drop_dsq_packet);682DEFINE_SSAM_PACKET_STATUS_EVENT(ei_tx_fail_write);683DEFINE_SSAM_PACKET_EVENT(ei_tx_corrupt_data);684DEFINE_SSAM_DATA_EVENT(ei_rx_corrupt_syn);685DEFINE_SSAM_FRAME_EVENT(ei_rx_corrupt_data);686DEFINE_SSAM_REQUEST_EVENT(ei_rx_drop_response);687 688DEFINE_SSAM_ALLOC_EVENT(ctrl_packet_alloc);689DEFINE_SSAM_FREE_EVENT(ctrl_packet_free);690 691DEFINE_SSAM_ALLOC_EVENT(event_item_alloc);692DEFINE_SSAM_FREE_EVENT(event_item_free);693 694#endif /* _SURFACE_AGGREGATOR_TRACE_H */695 696/* This part must be outside protection */697#undef TRACE_INCLUDE_PATH698#undef TRACE_INCLUDE_FILE699 700#define TRACE_INCLUDE_PATH .701#define TRACE_INCLUDE_FILE trace702 703#include <trace/define_trace.h>704