2 * ltt/ltt-event-header.c
4 * (C) Copyright 2010 - Mathieu Desnoyers (mathieu.desnoyers@efficios.com)
9 * Mathieu Desnoyers (mathieu.desnoyers@efficios.com)
11 * Dual LGPL v2.1/GPL v2 license.
14 #include <linux/module.h>
16 #include "ltt-tracer.h"
17 #include "ltt-relay.h"
19 size_t ltt_write_event_header_slow(struct ltt_chanbuf_alloc
*bufa
,
20 struct ltt_chan_alloc
*chana
,
21 long buf_offset
, u16 eID
, u32 event_size
,
22 u64 tsc
, unsigned int rflags
)
24 struct ltt_event_header header
;
28 case LTT_RFLAG_ID_SIZE_TSC
:
29 header
.id_time
= 29 << LTT_TSC_BITS
;
31 case LTT_RFLAG_ID_SIZE
:
32 header
.id_time
= 30 << LTT_TSC_BITS
;
35 header
.id_time
= 31 << LTT_TSC_BITS
;
42 header
.id_time
|= (u32
)tsc
& LTT_TSC_MASK
;
43 ltt_relay_write(bufa
, chana
, buf_offset
, &header
, sizeof(header
));
44 buf_offset
+= sizeof(header
);
47 case LTT_RFLAG_ID_SIZE_TSC
:
48 small_size
= (u16
)min_t(u32
, event_size
, LTT_MAX_SMALL_SIZE
);
49 ltt_relay_write(bufa
, chana
, buf_offset
,
51 buf_offset
+= sizeof(u16
);
52 ltt_relay_write(bufa
, chana
, buf_offset
,
53 &small_size
, sizeof(u16
));
54 buf_offset
+= sizeof(u16
);
55 if (small_size
== LTT_MAX_SMALL_SIZE
) {
56 ltt_relay_write(bufa
, chana
, buf_offset
,
57 &event_size
, sizeof(u32
));
58 buf_offset
+= sizeof(u32
);
60 buf_offset
+= ltt_align(buf_offset
, sizeof(u64
));
61 ltt_relay_write(bufa
, chana
, buf_offset
,
63 buf_offset
+= sizeof(u64
);
65 case LTT_RFLAG_ID_SIZE
:
66 small_size
= (u16
)min_t(u32
, event_size
, LTT_MAX_SMALL_SIZE
);
67 ltt_relay_write(bufa
, chana
, buf_offset
,
69 buf_offset
+= sizeof(u16
);
70 ltt_relay_write(bufa
, chana
, buf_offset
,
71 &small_size
, sizeof(u16
));
72 buf_offset
+= sizeof(u16
);
73 if (small_size
== LTT_MAX_SMALL_SIZE
) {
74 ltt_relay_write(bufa
, chana
, buf_offset
,
75 &event_size
, sizeof(u32
));
76 buf_offset
+= sizeof(u32
);
80 ltt_relay_write(bufa
, chana
, buf_offset
,
82 buf_offset
+= sizeof(u16
);
88 EXPORT_SYMBOL_GPL(ltt_write_event_header_slow
);
90 MODULE_LICENSE("GPL and additional rights");
91 MODULE_AUTHOR("Mathieu Desnoyers");
92 MODULE_DESCRIPTION("Linux Trace Toolkit Next Generation Event Header");