Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _LINUX_SIMPLE_RING_BUFFER_H
3#define _LINUX_SIMPLE_RING_BUFFER_H
4
5#include <linux/list.h>
6#include <linux/ring_buffer.h>
7#include <linux/ring_buffer_types.h>
8#include <linux/types.h>
9
10/*
11 * Ideally those struct would stay private but the caller needs to know
12 * the allocation size for simple_ring_buffer_init().
13 */
14struct simple_buffer_page {
15 struct list_head link;
16 struct buffer_data_page *page;
17 u64 entries;
18 u32 write;
19 u32 id;
20};
21
22struct simple_rb_per_cpu {
23 struct simple_buffer_page *tail_page;
24 struct simple_buffer_page *reader_page;
25 struct simple_buffer_page *head_page;
26 struct simple_buffer_page *bpages;
27 struct trace_buffer_meta *meta;
28 u32 nr_pages;
29
30#define SIMPLE_RB_UNAVAILABLE 0
31#define SIMPLE_RB_READY 1
32#define SIMPLE_RB_WRITING 2
33 u32 status;
34
35 u64 last_overrun;
36 u64 write_stamp;
37
38 struct simple_rb_cbs *cbs;
39};
40
41int simple_ring_buffer_init(struct simple_rb_per_cpu *cpu_buffer, struct simple_buffer_page *bpages,
42 const struct ring_buffer_desc *desc);
43
44void simple_ring_buffer_unload(struct simple_rb_per_cpu *cpu_buffer);
45
46void *simple_ring_buffer_reserve(struct simple_rb_per_cpu *cpu_buffer, unsigned long length,
47 u64 timestamp);
48
49void simple_ring_buffer_commit(struct simple_rb_per_cpu *cpu_buffer);
50
51int simple_ring_buffer_enable_tracing(struct simple_rb_per_cpu *cpu_buffer, bool enable);
52
53int simple_ring_buffer_reset(struct simple_rb_per_cpu *cpu_buffer);
54
55int simple_ring_buffer_swap_reader_page(struct simple_rb_per_cpu *cpu_buffer);
56
57int simple_ring_buffer_init_mm(struct simple_rb_per_cpu *cpu_buffer,
58 struct simple_buffer_page *bpages,
59 const struct ring_buffer_desc *desc,
60 void *(*load_page)(unsigned long va),
61 void (*unload_page)(void *va));
62
63void simple_ring_buffer_unload_mm(struct simple_rb_per_cpu *cpu_buffer,
64 void (*unload_page)(void *));
65#endif