xref: /linux/drivers/usb/typec/ucsi/trace.h (revision 4eee1520ea845a6d6d82e85498d9412419560871)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #undef TRACE_SYSTEM
4 #define TRACE_SYSTEM ucsi
5 
6 #if !defined(__UCSI_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
7 #define __UCSI_TRACE_H
8 
9 #include <linux/tracepoint.h>
10 #include <linux/usb/typec_altmode.h>
11 
12 const char *ucsi_cmd_str(u64 raw_cmd);
13 const char *ucsi_recipient_str(u8 recipient);
14 
15 DECLARE_EVENT_CLASS(ucsi_log_command,
16 	TP_PROTO(u64 command, int ret),
17 	TP_ARGS(command, ret),
18 	TP_STRUCT__entry(
19 		__field(u64, ctrl)
20 		__field(int, ret)
21 	),
22 	TP_fast_assign(
23 		__entry->ctrl = command;
24 		__entry->ret = ret;
25 	),
26 	TP_printk("%s -> %s (err=%d)", ucsi_cmd_str(__entry->ctrl),
27 		__entry->ret < 0 ? "FAIL" : "OK",
28 		__entry->ret < 0 ? __entry->ret : 0)
29 );
30 
31 DEFINE_EVENT(ucsi_log_command, ucsi_run_command,
32 	TP_PROTO(u64 command, int ret),
33 	TP_ARGS(command, ret)
34 );
35 
36 DEFINE_EVENT(ucsi_log_command, ucsi_reset_ppm,
37 	TP_PROTO(u64 command, int ret),
38 	TP_ARGS(command, ret)
39 );
40 
41 DECLARE_EVENT_CLASS(ucsi_log_connector_status,
42 	TP_PROTO(int port, struct ucsi_connector *con),
43 	TP_ARGS(port, con),
44 	TP_STRUCT__entry(
45 		__field(int, port)
46 		__field(u16, change)
47 		__field(u8, opmode)
48 		__field(u8, connected)
49 		__field(u8, pwr_dir)
50 		__field(u8, partner_flags)
51 		__field(u8, partner_type)
52 		__field(u32, request_data_obj)
53 		__field(u8, bc_status)
54 	),
55 	TP_fast_assign(
56 		__entry->port = port - 1;
57 		__entry->change = UCSI_CONSTAT(con, CHANGE);
58 		__entry->opmode = UCSI_CONSTAT(con, PWR_OPMODE);
59 		__entry->connected = UCSI_CONSTAT(con, CONNECTED);
60 		__entry->pwr_dir = UCSI_CONSTAT(con, PWR_DIR);
61 		__entry->partner_flags = UCSI_CONSTAT(con, PARTNER_FLAGS);
62 		__entry->partner_type = UCSI_CONSTAT(con, PARTNER_TYPE);
63 		__entry->request_data_obj = UCSI_CONSTAT(con, RDO);
64 		__entry->bc_status = UCSI_CONSTAT(con, BC_STATUS);
65 	),
66 	TP_printk("port%d status: change=%04x, opmode=%x, connected=%d, "
67 		"sourcing=%d, partner_flags=%x, partner_type=%x, "
68 		"request_data_obj=%08x, BC status=%x", __entry->port,
69 		__entry->change, __entry->opmode, __entry->connected,
70 		__entry->pwr_dir, __entry->partner_flags, __entry->partner_type,
71 		__entry->request_data_obj, __entry->bc_status)
72 );
73 
74 DEFINE_EVENT(ucsi_log_connector_status, ucsi_connector_change,
75 	TP_PROTO(int port, struct ucsi_connector *con),
76 	TP_ARGS(port, con)
77 );
78 
79 DEFINE_EVENT(ucsi_log_connector_status, ucsi_register_port,
80 	TP_PROTO(int port, struct ucsi_connector *con),
81 	TP_ARGS(port, con)
82 );
83 
84 DECLARE_EVENT_CLASS(ucsi_log_register_altmode,
85 	TP_PROTO(u8 recipient, struct typec_altmode *alt),
86 	TP_ARGS(recipient, alt),
87 	TP_STRUCT__entry(
88 		__field(u8, recipient)
89 		__field(u16, svid)
90 		__field(u8, mode)
91 		__field(u32, vdo)
92 	),
93 	TP_fast_assign(
94 		__entry->recipient = recipient;
95 		__entry->svid = alt->svid;
96 		__entry->mode = alt->mode;
97 		__entry->vdo = alt->vdo;
98 	),
99 	TP_printk("%s alt mode: svid %04x, mode %d vdo %x",
100 		  ucsi_recipient_str(__entry->recipient), __entry->svid,
101 		  __entry->mode, __entry->vdo)
102 );
103 
104 DEFINE_EVENT(ucsi_log_register_altmode, ucsi_register_altmode,
105 	TP_PROTO(u8 recipient, struct typec_altmode *alt),
106 	TP_ARGS(recipient, alt)
107 );
108 
109 #endif /* __UCSI_TRACE_H */
110 
111 /* This part must be outside protection */
112 
113 #undef TRACE_INCLUDE_PATH
114 #define TRACE_INCLUDE_PATH .
115 
116 #undef TRACE_INCLUDE_FILE
117 #define TRACE_INCLUDE_FILE trace
118 
119 #include <trace/define_trace.h>
120