Add probe registry
[lttng-modules.git] / ltt-events.h
1 #ifndef _LTT_EVENTS_H
2 #define _LTT_EVENTS_H
3
4 /*
5 * ltt-events.h
6 *
7 * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 *
9 * Holds LTTng per-session event registry.
10 */
11
12 #include <linux/list.h>
13 #include "ltt-debugfs-abi.h"
14
15 struct ltt_channel;
16 struct ltt_session;
17 struct lib_ring_buffer_ctx;
18
19 /*
20 * ltt_event structure is referred to by the tracing fast path. It must be
21 * kept small.
22 */
23 struct ltt_event {
24 unsigned int id;
25 struct ltt_channel *chan;
26 void *probe;
27 void *filter;
28 char *name;
29 enum instrum_type itype;
30 struct list_head list; /* Event list */
31 };
32
33 struct ltt_channel_ops {
34 struct channel *(*channel_create)(const char *name,
35 struct ltt_session *session,
36 void *buf_addr,
37 size_t subbuf_size, size_t num_subbuf,
38 unsigned int switch_timer_interval,
39 unsigned int read_timer_interval);
40 void (*channel_destroy)(struct channel *chan);
41 struct lib_ring_buffer *(*buffer_read_open)(struct channel *chan);
42 void (*buffer_read_close)(struct lib_ring_buffer *buf);
43 int (*event_reserve)(struct lib_ring_buffer_ctx *ctx);
44 void (*event_commit)(struct lib_ring_buffer_ctx *ctx);
45 void (*event_write)(struct lib_ring_buffer_ctx *ctx, const void *src,
46 size_t len);
47 };
48
49 struct ltt_channel {
50 struct channel *chan; /* Channel buffers */
51 /* Event ID management */
52 struct ltt_session *session;
53 struct file *file; /* File associated to channel */
54 unsigned int free_event_id; /* Next event ID to allocate */
55 struct list_head list; /* Channel list */
56 wait_queue_head_t notify_wait; /* Channel addition notif. waitqueue */
57 struct ltt_channel_ops *ops;
58 };
59
60 struct ltt_session {
61 int active; /* Is trace session active ? */
62 struct file *file; /* File associated to session */
63 struct list_head chan; /* Channel list head */
64 struct list_head events; /* Event list head */
65 struct list_head list; /* Session list */
66 };
67
68 struct ltt_transport {
69 char *name;
70 struct module *owner;
71 struct list_head node;
72 struct ltt_channel_ops ops;
73 };
74
75 struct ltt_session *ltt_session_create(void);
76 int ltt_session_start(struct ltt_session *session);
77 int ltt_session_stop(struct ltt_session *session);
78 void ltt_session_destroy(struct ltt_session *session);
79
80 struct ltt_channel *ltt_channel_create(struct ltt_session *session,
81 int overwrite, void *buf_addr,
82 size_t subbuf_size, size_t num_subbuf,
83 unsigned int switch_timer_interval,
84 unsigned int read_timer_interval);
85 void _ltt_channel_destroy(struct ltt_channel *chan);
86
87 struct ltt_event *ltt_event_create(struct ltt_channel *chan,
88 char *name,
89 enum instrum_type itype,
90 void *probe, void *filter);
91 int _ltt_event_destroy(struct ltt_event *event);
92
93 void ltt_transport_register(struct ltt_transport *transport);
94 void ltt_transport_unregister(struct ltt_transport *transport);
95
96 int ltt_debugfs_abi_init(void);
97 void ltt_debugfs_abi_exit(void);
98
99 int ltt_probe_register(const char *name, void *cb);
100 void ltt_probe_unregister(const char *name);
101 void *ltt_probe_get(const char *name);
102 void ltt_probe_put(void *cb);
103 int ltt_probes_init(void);
104 void ltt_probes_exit(void);
105
106 #endif /* _LTT_EVENTS_H */
This page took 0.03447 seconds and 4 git commands to generate.