1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2/* Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
3
4#undef TRACE_SYSTEM
5#define TRACE_SYSTEM mlx5
6
7#if !defined(_MLX5_SF_TP_) || defined(TRACE_HEADER_MULTI_READ)
8#define _MLX5_SF_TP_
9
10#include <linux/tracepoint.h>
11#include <linux/mlx5/driver.h>
12#include "sf/vhca_event.h"
13
14TRACE_EVENT(mlx5_sf_add,
15	    TP_PROTO(const struct mlx5_core_dev *dev,
16		     unsigned int port_index,
17		     u32 controller,
18		     u16 hw_fn_id,
19		     u32 sfnum),
20	    TP_ARGS(dev, port_index, controller, hw_fn_id, sfnum),
21	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
22			     __field(unsigned int, port_index)
23			     __field(u32, controller)
24			     __field(u16, hw_fn_id)
25			     __field(u32, sfnum)
26			    ),
27	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
28		    __entry->port_index = port_index;
29		    __entry->controller = controller;
30		    __entry->hw_fn_id = hw_fn_id;
31		    __entry->sfnum = sfnum;
32	    ),
33	    TP_printk("(%s) port_index=%u controller=%u hw_id=0x%x sfnum=%u\n",
34		      __get_str(devname), __entry->port_index, __entry->controller,
35		      __entry->hw_fn_id, __entry->sfnum)
36);
37
38TRACE_EVENT(mlx5_sf_free,
39	    TP_PROTO(const struct mlx5_core_dev *dev,
40		     unsigned int port_index,
41		     u32 controller,
42		     u16 hw_fn_id),
43	    TP_ARGS(dev, port_index, controller, hw_fn_id),
44	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
45			     __field(unsigned int, port_index)
46			     __field(u32, controller)
47			     __field(u16, hw_fn_id)
48			    ),
49	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
50		    __entry->port_index = port_index;
51		    __entry->controller = controller;
52		    __entry->hw_fn_id = hw_fn_id;
53	    ),
54	    TP_printk("(%s) port_index=%u controller=%u hw_id=0x%x\n",
55		      __get_str(devname), __entry->port_index, __entry->controller,
56		      __entry->hw_fn_id)
57);
58
59TRACE_EVENT(mlx5_sf_hwc_alloc,
60	    TP_PROTO(const struct mlx5_core_dev *dev,
61		     u32 controller,
62		     u16 hw_fn_id,
63		     u32 sfnum),
64	    TP_ARGS(dev, controller, hw_fn_id, sfnum),
65	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
66			     __field(u32, controller)
67			     __field(u16, hw_fn_id)
68			     __field(u32, sfnum)
69			    ),
70	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
71		    __entry->controller = controller;
72		    __entry->hw_fn_id = hw_fn_id;
73		    __entry->sfnum = sfnum;
74	    ),
75	    TP_printk("(%s) controller=%u hw_id=0x%x sfnum=%u\n",
76		      __get_str(devname), __entry->controller, __entry->hw_fn_id,
77		      __entry->sfnum)
78);
79
80TRACE_EVENT(mlx5_sf_hwc_free,
81	    TP_PROTO(const struct mlx5_core_dev *dev,
82		     u16 hw_fn_id),
83	    TP_ARGS(dev, hw_fn_id),
84	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
85			     __field(u16, hw_fn_id)
86			    ),
87	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
88		    __entry->hw_fn_id = hw_fn_id;
89	    ),
90	    TP_printk("(%s) hw_id=0x%x\n", __get_str(devname), __entry->hw_fn_id)
91);
92
93TRACE_EVENT(mlx5_sf_hwc_deferred_free,
94	    TP_PROTO(const struct mlx5_core_dev *dev,
95		     u16 hw_fn_id),
96	    TP_ARGS(dev, hw_fn_id),
97	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
98			     __field(u16, hw_fn_id)
99			    ),
100	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
101		    __entry->hw_fn_id = hw_fn_id;
102	    ),
103	    TP_printk("(%s) hw_id=0x%x\n", __get_str(devname), __entry->hw_fn_id)
104);
105
106DECLARE_EVENT_CLASS(mlx5_sf_state_template,
107		    TP_PROTO(const struct mlx5_core_dev *dev,
108			     u32 port_index,
109			     u32 controller,
110			     u16 hw_fn_id),
111		    TP_ARGS(dev, port_index, controller, hw_fn_id),
112		    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
113				     __field(unsigned int, port_index)
114				     __field(u32, controller)
115				     __field(u16, hw_fn_id)),
116		    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
117				   __entry->port_index = port_index;
118				   __entry->controller = controller;
119				   __entry->hw_fn_id = hw_fn_id;
120		    ),
121		    TP_printk("(%s) port_index=%u controller=%u hw_id=0x%x\n",
122			      __get_str(devname), __entry->port_index, __entry->controller,
123			      __entry->hw_fn_id)
124);
125
126DEFINE_EVENT(mlx5_sf_state_template, mlx5_sf_activate,
127	     TP_PROTO(const struct mlx5_core_dev *dev,
128		      u32 port_index,
129		      u32 controller,
130		      u16 hw_fn_id),
131	     TP_ARGS(dev, port_index, controller, hw_fn_id)
132	     );
133
134DEFINE_EVENT(mlx5_sf_state_template, mlx5_sf_deactivate,
135	     TP_PROTO(const struct mlx5_core_dev *dev,
136		      u32 port_index,
137		      u32 controller,
138		      u16 hw_fn_id),
139	     TP_ARGS(dev, port_index, controller, hw_fn_id)
140	     );
141
142TRACE_EVENT(mlx5_sf_update_state,
143	    TP_PROTO(const struct mlx5_core_dev *dev,
144		     unsigned int port_index,
145		     u32 controller,
146		     u16 hw_fn_id,
147		     u8 state),
148	    TP_ARGS(dev, port_index, controller, hw_fn_id, state),
149	    TP_STRUCT__entry(__string(devname, dev_name(dev->device))
150			     __field(unsigned int, port_index)
151			     __field(u32, controller)
152			     __field(u16, hw_fn_id)
153			     __field(u8, state)
154			    ),
155	    TP_fast_assign(__assign_str(devname, dev_name(dev->device));
156		    __entry->port_index = port_index;
157		    __entry->controller = controller;
158		    __entry->hw_fn_id = hw_fn_id;
159		    __entry->state = state;
160	    ),
161	    TP_printk("(%s) port_index=%u controller=%u hw_id=0x%x state=%u\n",
162		      __get_str(devname), __entry->port_index, __entry->controller,
163		      __entry->hw_fn_id, __entry->state)
164);
165
166#endif /* _MLX5_SF_TP_ */
167
168/* This part must be outside protection */
169#undef TRACE_INCLUDE_PATH
170#define TRACE_INCLUDE_PATH sf/diag
171#undef TRACE_INCLUDE_FILE
172#define TRACE_INCLUDE_FILE sf_tracepoint
173#include <trace/define_trace.h>
174