1 // SPDX-License-Identifier: GPL-2.0-or-later
2 // Copyright (c) 2024 Takashi Sakamoto
5 #define TRACE_SYSTEM firewire_ohci
7 #if !defined(_FIREWIRE_OHCI_TRACE_EVENT_H) || defined(TRACE_HEADER_MULTI_READ)
8 #define _FIREWIRE_OHCI_TRACE_EVENT_H
10 #include <linux/tracepoint.h>
12 // Some macros and helper functions are defined in 'drivers/firewire/ohci.c'.
15 TP_PROTO(unsigned int card_index
, u32 events
),
16 TP_ARGS(card_index
, events
),
18 __field(u8
, card_index
)
22 __entry
->card_index
= card_index
;
23 __entry
->events
= events
;
26 "card_index=%u events=%s",
28 __print_flags(__entry
->events
, "|",
29 { OHCI1394_selfIDComplete
, "selfIDComplete" },
30 { OHCI1394_RQPkt
, "RQPkt" },
31 { OHCI1394_RSPkt
, "RSPkt" },
32 { OHCI1394_reqTxComplete
, "reqTxComplete" },
33 { OHCI1394_respTxComplete
, "respTxComplete" },
34 { OHCI1394_isochRx
, "isochRx" },
35 { OHCI1394_isochTx
, "isochTx" },
36 { OHCI1394_postedWriteErr
, "postedWriteErr" },
37 { OHCI1394_cycleTooLong
, "cycleTooLong" },
38 { OHCI1394_cycle64Seconds
, "cycle64Seconds" },
39 { OHCI1394_cycleInconsistent
, "cycleInconsistent" },
40 { OHCI1394_regAccessFail
, "regAccessFail" },
41 { OHCI1394_unrecoverableError
, "unrecoverableError" },
42 { OHCI1394_busReset
, "busReset" }
47 #define QUADLET_SIZE 4
49 #define SELF_ID_COUNT_IS_ERROR(reg) \
50 (!!(((reg) & OHCI1394_SelfIDCount_selfIDError_MASK) >> OHCI1394_SelfIDCount_selfIDError_SHIFT))
52 #define SELF_ID_COUNT_GET_GENERATION(reg) \
53 (((reg) & OHCI1394_SelfIDCount_selfIDGeneration_MASK) >> OHCI1394_SelfIDCount_selfIDGeneration_SHIFT)
55 #define SELF_ID_RECEIVE_Q0_GET_GENERATION(quadlet) \
56 (((quadlet) & OHCI1394_SELF_ID_RECEIVE_Q0_GENERATION_MASK) >> OHCI1394_SELF_ID_RECEIVE_Q0_GENERATION_SHIFT)
58 #define SELF_ID_RECEIVE_Q0_GET_TIMESTAMP(quadlet) \
59 (((quadlet) & OHCI1394_SELF_ID_RECEIVE_Q0_TIMESTAMP_MASK) >> OHCI1394_SELF_ID_RECEIVE_Q0_TIMESTAMP_SHIFT)
61 TRACE_EVENT(self_id_complete
,
62 TP_PROTO(unsigned int card_index
, u32 reg
, const __le32
*self_id_receive
, bool has_be_header_quirk
),
63 TP_ARGS(card_index
, reg
, self_id_receive
, has_be_header_quirk
),
65 __field(u8
, card_index
)
67 __dynamic_array(u32
, self_id_receive
, ohci1394_self_id_count_get_size(reg
))
70 __entry
->card_index
= card_index
;
73 u32
*ptr
= __get_dynamic_array(self_id_receive
);
76 for (i
= 0; i
< __get_dynamic_array_len(self_id_receive
) / QUADLET_SIZE
; ++i
)
77 ptr
[i
] = cond_le32_to_cpu(self_id_receive
[i
], has_be_header_quirk
);
81 "card_index=%u is_error=%s generation_at_bus_reset=%u generation_at_completion=%u timestamp=0x%04x packet_data=%s",
83 SELF_ID_COUNT_IS_ERROR(__entry
->reg
) ? "true" : "false",
84 SELF_ID_COUNT_GET_GENERATION(__entry
->reg
),
85 SELF_ID_RECEIVE_Q0_GET_GENERATION(((const u32
*)__get_dynamic_array(self_id_receive
))[0]),
86 SELF_ID_RECEIVE_Q0_GET_TIMESTAMP(((const u32
*)__get_dynamic_array(self_id_receive
))[0]),
87 __print_array(((const u32
*)__get_dynamic_array(self_id_receive
)) + 1,
88 (__get_dynamic_array_len(self_id_receive
) / QUADLET_SIZE
) - 1, QUADLET_SIZE
)
92 #undef SELF_ID_COUNT_IS_ERROR
93 #undef SELF_ID_COUNT_GET_GENERATION
94 #undef SELF_ID_RECEIVE_Q0_GET_GENERATION
95 #undef SELF_ID_RECEIVE_Q0_GET_TIMESTAMP
99 #endif // _FIREWIRE_OHCI_TRACE_EVENT_H
101 #include <trace/define_trace.h>