Xenomai 3.3.2
Loading...
Searching...
No Matches
cobalt-rtdm.h
1/*
2 * Copyright (C) 2014 Jan Kiszka <jan.kiszka@siemens.com>.
3 * Copyright (C) 2014 Philippe Gerum <rpm@xenomai.org>.
4 *
5 * Xenomai is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published
7 * by the Free Software Foundation; either version 2 of the License,
8 * or (at your option) any later version.
9 *
10 * Xenomai is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with Xenomai; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
18 * 02111-1307, USA.
19 */
20#undef TRACE_SYSTEM
21#define TRACE_SYSTEM cobalt_rtdm
22
23#if !defined(_TRACE_COBALT_RTDM_H) || defined(TRACE_HEADER_MULTI_READ)
24#define _TRACE_COBALT_RTDM_H
25
26#include <linux/tracepoint.h>
27#include <linux/mman.h>
28#include <linux/sched.h>
29
30struct rtdm_fd;
31struct rtdm_event;
32struct rtdm_sem;
33struct rtdm_mutex;
34struct xnthread;
35struct rtdm_device;
36struct rtdm_dev_context;
37struct _rtdm_mmap_request;
38
39DECLARE_EVENT_CLASS(fd_event,
40 TP_PROTO(struct rtdm_fd *fd, int ufd),
41 TP_ARGS(fd, ufd),
42
43 TP_STRUCT__entry(
44 __field(struct rtdm_device *, dev)
45 __field(int, ufd)
46 ),
47
48 TP_fast_assign(
49 __entry->dev = rtdm_fd_to_context(fd)->device;
50 __entry->ufd = ufd;
51 ),
52
53 TP_printk("device=%p fd=%d",
54 __entry->dev, __entry->ufd)
55);
56
57DECLARE_EVENT_CLASS(fd_request,
58 TP_PROTO(struct task_struct *task,
59 struct rtdm_fd *fd, int ufd, unsigned long arg),
60 TP_ARGS(task, fd, ufd, arg),
61
62 TP_STRUCT__entry(
63 __array(char, comm, TASK_COMM_LEN)
64 __field(pid_t, pid)
65 __field(struct rtdm_device *, dev)
66 __field(int, ufd)
67 __field(unsigned long, arg)
68 ),
69
70 TP_fast_assign(
71 memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
72 __entry->pid = task_pid_nr(task);
73 __entry->dev = rtdm_fd_to_context(fd)->device;
74 __entry->ufd = ufd;
75 __entry->arg = arg;
76 ),
77
78 TP_printk("device=%p fd=%d arg=%#lx pid=%d comm=%s",
79 __entry->dev, __entry->ufd, __entry->arg,
80 __entry->pid, __entry->comm)
81);
82
83DECLARE_EVENT_CLASS(fd_request_status,
84 TP_PROTO(struct task_struct *task,
85 struct rtdm_fd *fd, int ufd, int status),
86 TP_ARGS(task, fd, ufd, status),
87
88 TP_STRUCT__entry(
89 __array(char, comm, TASK_COMM_LEN)
90 __field(pid_t, pid)
91 __field(struct rtdm_device *, dev)
92 __field(int, ufd)
93 ),
94
95 TP_fast_assign(
96 memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
97 __entry->pid = task_pid_nr(task);
98 __entry->dev =
99 !IS_ERR(fd) ? rtdm_fd_to_context(fd)->device : NULL;
100 __entry->ufd = ufd;
101 ),
102
103 TP_printk("device=%p fd=%d pid=%d comm=%s",
104 __entry->dev, __entry->ufd, __entry->pid, __entry->comm)
105);
106
107DECLARE_EVENT_CLASS(task_op,
108 TP_PROTO(struct xnthread *task),
109 TP_ARGS(task),
110
111 TP_STRUCT__entry(
112 __field(struct xnthread *, task)
113 __string(task_name, task->name)
114 ),
115
116 TP_fast_assign(
117 __entry->task = task;
118 __wrap_assign_str(task_name, task->name);
119 ),
120
121 TP_printk("task %p(%s)", __entry->task, __get_str(task_name))
122);
123
124DECLARE_EVENT_CLASS(event_op,
125 TP_PROTO(struct rtdm_event *ev),
126 TP_ARGS(ev),
127
128 TP_STRUCT__entry(
129 __field(struct rtdm_event *, ev)
130 ),
131
132 TP_fast_assign(
133 __entry->ev = ev;
134 ),
135
136 TP_printk("event=%p", __entry->ev)
137);
138
139DECLARE_EVENT_CLASS(sem_op,
140 TP_PROTO(struct rtdm_sem *sem),
141 TP_ARGS(sem),
142
143 TP_STRUCT__entry(
144 __field(struct rtdm_sem *, sem)
145 ),
146
147 TP_fast_assign(
148 __entry->sem = sem;
149 ),
150
151 TP_printk("sem=%p", __entry->sem)
152);
153
154DECLARE_EVENT_CLASS(mutex_op,
155 TP_PROTO(struct rtdm_mutex *mutex),
156 TP_ARGS(mutex),
157
158 TP_STRUCT__entry(
159 __field(struct rtdm_mutex *, mutex)
160 ),
161
162 TP_fast_assign(
163 __entry->mutex = mutex;
164 ),
165
166 TP_printk("mutex=%p", __entry->mutex)
167);
168
169TRACE_EVENT(cobalt_device_register,
170 TP_PROTO(struct rtdm_device *dev),
171 TP_ARGS(dev),
172
173 TP_STRUCT__entry(
174 __field(struct rtdm_device *, dev)
175 __string(device_name, dev->name)
176 __field(int, flags)
177 __field(int, class_id)
178 __field(int, subclass_id)
179 __field(int, profile_version)
180 ),
181
182 TP_fast_assign(
183 __entry->dev = dev;
184 __wrap_assign_str(device_name, dev->name);
185 __entry->flags = dev->driver->device_flags;
186 __entry->class_id = dev->driver->profile_info.class_id;
187 __entry->subclass_id = dev->driver->profile_info.subclass_id;
188 __entry->profile_version = dev->driver->profile_info.version;
189 ),
190
191 TP_printk("%s device %s=%p flags=0x%x, class=%d.%d profile=%d",
192 (__entry->flags & RTDM_DEVICE_TYPE_MASK)
193 == RTDM_NAMED_DEVICE ? "named" : "protocol",
194 __get_str(device_name), __entry->dev,
195 __entry->flags, __entry->class_id, __entry->subclass_id,
196 __entry->profile_version)
197);
198
199TRACE_EVENT(cobalt_device_unregister,
200 TP_PROTO(struct rtdm_device *dev),
201 TP_ARGS(dev),
202
203 TP_STRUCT__entry(
204 __field(struct rtdm_device *, dev)
205 __string(device_name, dev->name)
206 ),
207
208 TP_fast_assign(
209 __entry->dev = dev;
210 __wrap_assign_str(device_name, dev->name);
211 ),
212
213 TP_printk("device %s=%p",
214 __get_str(device_name), __entry->dev)
215);
216
217DEFINE_EVENT(fd_event, cobalt_fd_created,
218 TP_PROTO(struct rtdm_fd *fd, int ufd),
219 TP_ARGS(fd, ufd)
220);
221
222DEFINE_EVENT(fd_request, cobalt_fd_open,
223 TP_PROTO(struct task_struct *task,
224 struct rtdm_fd *fd, int ufd,
225 unsigned long oflags),
226 TP_ARGS(task, fd, ufd, oflags)
227);
228
229DEFINE_EVENT(fd_request, cobalt_fd_close,
230 TP_PROTO(struct task_struct *task,
231 struct rtdm_fd *fd, int ufd,
232 unsigned long lock_count),
233 TP_ARGS(task, fd, ufd, lock_count)
234);
235
236DEFINE_EVENT(fd_request, cobalt_fd_socket,
237 TP_PROTO(struct task_struct *task,
238 struct rtdm_fd *fd, int ufd,
239 unsigned long protocol_family),
240 TP_ARGS(task, fd, ufd, protocol_family)
241);
242
243DEFINE_EVENT(fd_request, cobalt_fd_read,
244 TP_PROTO(struct task_struct *task,
245 struct rtdm_fd *fd, int ufd,
246 unsigned long len),
247 TP_ARGS(task, fd, ufd, len)
248);
249
250DEFINE_EVENT(fd_request, cobalt_fd_write,
251 TP_PROTO(struct task_struct *task,
252 struct rtdm_fd *fd, int ufd,
253 unsigned long len),
254 TP_ARGS(task, fd, ufd, len)
255);
256
257DEFINE_EVENT(fd_request, cobalt_fd_ioctl,
258 TP_PROTO(struct task_struct *task,
259 struct rtdm_fd *fd, int ufd,
260 unsigned long request),
261 TP_ARGS(task, fd, ufd, request)
262);
263
264DEFINE_EVENT(fd_request, cobalt_fd_sendmsg,
265 TP_PROTO(struct task_struct *task,
266 struct rtdm_fd *fd, int ufd,
267 unsigned long flags),
268 TP_ARGS(task, fd, ufd, flags)
269);
270
271DEFINE_EVENT(fd_request, cobalt_fd_sendmmsg,
272 TP_PROTO(struct task_struct *task,
273 struct rtdm_fd *fd, int ufd,
274 unsigned long flags),
275 TP_ARGS(task, fd, ufd, flags)
276);
277
278DEFINE_EVENT(fd_request, cobalt_fd_recvmsg,
279 TP_PROTO(struct task_struct *task,
280 struct rtdm_fd *fd, int ufd,
281 unsigned long flags),
282 TP_ARGS(task, fd, ufd, flags)
283);
284
285DEFINE_EVENT(fd_request, cobalt_fd_recvmmsg,
286 TP_PROTO(struct task_struct *task,
287 struct rtdm_fd *fd, int ufd,
288 unsigned long flags),
289 TP_ARGS(task, fd, ufd, flags)
290);
291
292#define cobalt_print_protbits(__prot) \
293 __print_flags(__prot, "|", \
294 {PROT_EXEC, "exec"}, \
295 {PROT_READ, "read"}, \
296 {PROT_WRITE, "write"})
297
298#define cobalt_print_mapbits(__flags) \
299 __print_flags(__flags, "|", \
300 {MAP_SHARED, "shared"}, \
301 {MAP_PRIVATE, "private"}, \
302 {MAP_ANONYMOUS, "anon"}, \
303 {MAP_FIXED, "fixed"}, \
304 {MAP_HUGETLB, "huge"}, \
305 {MAP_NONBLOCK, "nonblock"}, \
306 {MAP_NORESERVE, "noreserve"}, \
307 {MAP_POPULATE, "populate"}, \
308 {MAP_UNINITIALIZED, "uninit"})
309
310TRACE_EVENT(cobalt_fd_mmap,
311 TP_PROTO(struct task_struct *task,
312 struct rtdm_fd *fd, int ufd, struct _rtdm_mmap_request *rma),
313 TP_ARGS(task, fd, ufd, rma),
314
315 TP_STRUCT__entry(
316 __array(char, comm, TASK_COMM_LEN)
317 __field(pid_t, pid)
318 __field(struct rtdm_device *, dev)
319 __field(int, ufd)
320 __field(size_t, length)
321 __field(off_t, offset)
322 __field(int, prot)
323 __field(int, flags)
324 ),
325
326 TP_fast_assign(
327 memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
328 __entry->pid = task_pid_nr(task);
329 __entry->dev = rtdm_fd_to_context(fd)->device;
330 __entry->ufd = ufd;
331 __entry->length = rma->length;
332 __entry->offset = rma->offset;
333 __entry->prot = rma->prot;
334 __entry->flags = rma->flags;
335 ),
336
337 TP_printk("device=%p fd=%d area={ len:%zu, off:%Lu }"
338 " prot=%#x(%s) flags=%#x(%s) pid=%d comm=%s",
339 __entry->dev, __entry->ufd, __entry->length,
340 (unsigned long long)__entry->offset,
341 __entry->prot, cobalt_print_protbits(__entry->prot),
342 __entry->flags, cobalt_print_mapbits(__entry->flags),
343 __entry->pid, __entry->comm)
344);
345
346DEFINE_EVENT(fd_request_status, cobalt_fd_ioctl_status,
347 TP_PROTO(struct task_struct *task,
348 struct rtdm_fd *fd, int ufd,
349 int status),
350 TP_ARGS(task, fd, ufd, status)
351);
352
353DEFINE_EVENT(fd_request_status, cobalt_fd_read_status,
354 TP_PROTO(struct task_struct *task,
355 struct rtdm_fd *fd, int ufd,
356 int status),
357 TP_ARGS(task, fd, ufd, status)
358);
359
360DEFINE_EVENT(fd_request_status, cobalt_fd_write_status,
361 TP_PROTO(struct task_struct *task,
362 struct rtdm_fd *fd, int ufd,
363 int status),
364 TP_ARGS(task, fd, ufd, status)
365);
366
367DEFINE_EVENT(fd_request_status, cobalt_fd_recvmsg_status,
368 TP_PROTO(struct task_struct *task,
369 struct rtdm_fd *fd, int ufd,
370 int status),
371 TP_ARGS(task, fd, ufd, status)
372);
373
374DEFINE_EVENT(fd_request_status, cobalt_fd_recvmmsg_status,
375 TP_PROTO(struct task_struct *task,
376 struct rtdm_fd *fd, int ufd,
377 int status),
378 TP_ARGS(task, fd, ufd, status)
379);
380
381DEFINE_EVENT(fd_request_status, cobalt_fd_sendmsg_status,
382 TP_PROTO(struct task_struct *task,
383 struct rtdm_fd *fd, int ufd,
384 int status),
385 TP_ARGS(task, fd, ufd, status)
386);
387
388DEFINE_EVENT(fd_request_status, cobalt_fd_sendmmsg_status,
389 TP_PROTO(struct task_struct *task,
390 struct rtdm_fd *fd, int ufd,
391 int status),
392 TP_ARGS(task, fd, ufd, status)
393);
394
395DEFINE_EVENT(fd_request_status, cobalt_fd_mmap_status,
396 TP_PROTO(struct task_struct *task,
397 struct rtdm_fd *fd, int ufd,
398 int status),
399 TP_ARGS(task, fd, ufd, status)
400);
401
402DEFINE_EVENT(task_op, cobalt_driver_task_join,
403 TP_PROTO(struct xnthread *task),
404 TP_ARGS(task)
405);
406
407TRACE_EVENT(cobalt_driver_event_init,
408 TP_PROTO(struct rtdm_event *ev, unsigned long pending),
409 TP_ARGS(ev, pending),
410
411 TP_STRUCT__entry(
412 __field(struct rtdm_event *, ev)
413 __field(unsigned long, pending)
414 ),
415
416 TP_fast_assign(
417 __entry->ev = ev;
418 __entry->pending = pending;
419 ),
420
421 TP_printk("event=%p pending=%#lx",
422 __entry->ev, __entry->pending)
423);
424
425TRACE_EVENT(cobalt_driver_event_wait,
426 TP_PROTO(struct rtdm_event *ev, struct xnthread *task),
427 TP_ARGS(ev, task),
428
429 TP_STRUCT__entry(
430 __field(struct xnthread *, task)
431 __string(task_name, task->name)
432 __field(struct rtdm_event *, ev)
433 ),
434
435 TP_fast_assign(
436 __entry->task = task;
437 __wrap_assign_str(task_name, task->name);
438 __entry->ev = ev;
439 ),
440
441 TP_printk("event=%p task=%p(%s)",
442 __entry->ev, __entry->task, __get_str(task_name))
443);
444
445DEFINE_EVENT(event_op, cobalt_driver_event_signal,
446 TP_PROTO(struct rtdm_event *ev),
447 TP_ARGS(ev)
448);
449
450DEFINE_EVENT(event_op, cobalt_driver_event_clear,
451 TP_PROTO(struct rtdm_event *ev),
452 TP_ARGS(ev)
453);
454
455DEFINE_EVENT(event_op, cobalt_driver_event_pulse,
456 TP_PROTO(struct rtdm_event *ev),
457 TP_ARGS(ev)
458);
459
460DEFINE_EVENT(event_op, cobalt_driver_event_destroy,
461 TP_PROTO(struct rtdm_event *ev),
462 TP_ARGS(ev)
463);
464
465TRACE_EVENT(cobalt_driver_sem_init,
466 TP_PROTO(struct rtdm_sem *sem, unsigned long value),
467 TP_ARGS(sem, value),
468
469 TP_STRUCT__entry(
470 __field(struct rtdm_sem *, sem)
471 __field(unsigned long, value)
472 ),
473
474 TP_fast_assign(
475 __entry->sem = sem;
476 __entry->value = value;
477 ),
478
479 TP_printk("sem=%p value=%lu",
480 __entry->sem, __entry->value)
481);
482
483TRACE_EVENT(cobalt_driver_sem_wait,
484 TP_PROTO(struct rtdm_sem *sem, struct xnthread *task),
485 TP_ARGS(sem, task),
486
487 TP_STRUCT__entry(
488 __field(struct xnthread *, task)
489 __string(task_name, task->name)
490 __field(struct rtdm_sem *, sem)
491 ),
492
493 TP_fast_assign(
494 __entry->task = task;
495 __wrap_assign_str(task_name, task->name);
496 __entry->sem = sem;
497 ),
498
499 TP_printk("sem=%p task=%p(%s)",
500 __entry->sem, __entry->task, __get_str(task_name))
501);
502
503DEFINE_EVENT(sem_op, cobalt_driver_sem_up,
504 TP_PROTO(struct rtdm_sem *sem),
505 TP_ARGS(sem)
506);
507
508DEFINE_EVENT(sem_op, cobalt_driver_sem_destroy,
509 TP_PROTO(struct rtdm_sem *sem),
510 TP_ARGS(sem)
511);
512
513DEFINE_EVENT(mutex_op, cobalt_driver_mutex_init,
514 TP_PROTO(struct rtdm_mutex *mutex),
515 TP_ARGS(mutex)
516);
517
518DEFINE_EVENT(mutex_op, cobalt_driver_mutex_release,
519 TP_PROTO(struct rtdm_mutex *mutex),
520 TP_ARGS(mutex)
521);
522
523DEFINE_EVENT(mutex_op, cobalt_driver_mutex_destroy,
524 TP_PROTO(struct rtdm_mutex *mutex),
525 TP_ARGS(mutex)
526);
527
528TRACE_EVENT(cobalt_driver_mutex_wait,
529 TP_PROTO(struct rtdm_mutex *mutex, struct xnthread *task),
530 TP_ARGS(mutex, task),
531
532 TP_STRUCT__entry(
533 __field(struct xnthread *, task)
534 __string(task_name, task->name)
535 __field(struct rtdm_mutex *, mutex)
536 ),
537
538 TP_fast_assign(
539 __entry->task = task;
540 __wrap_assign_str(task_name, task->name);
541 __entry->mutex = mutex;
542 ),
543
544 TP_printk("mutex=%p task=%p(%s)",
545 __entry->mutex, __entry->task, __get_str(task_name))
546);
547
548#endif /* _TRACE_COBALT_RTDM_H */
549
550/* This part must be outside protection */
551#undef TRACE_INCLUDE_PATH
552#undef TRACE_INCLUDE_FILE
553#define TRACE_INCLUDE_FILE cobalt-rtdm
554#include <trace/define_trace.h>
#define RTDM_NAMED_DEVICE
If set, the device is addressed via a clear-text name.
Definition driver.h:85
#define RTDM_DEVICE_TYPE_MASK
Mask selecting the device type.
Definition driver.h:92
Device context.
Definition driver.h:138
RTDM device.
Definition driver.h:340
struct rtdm_driver * driver
Device driver.
Definition driver.h:342
int device_flags
Device flags, see Device Flags for details .
Definition driver.h:262
struct rtdm_profile_info profile_info
Class profile information.
Definition driver.h:257
int version
Supported device profile version.
Definition driver.h:226
int subclass_id
Device sub-class, see RTDM_SUBCLASS_xxx definition in the Device Profiles.
Definition driver.h:224
int class_id
Device class ID, see RTDM_CLASS_xxx.
Definition driver.h:221