| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _LINUX_SIMPLE_RING_BUFFER_H |
| #define _LINUX_SIMPLE_RING_BUFFER_H |
| |
| #include <linux/list.h> |
| #include <linux/ring_buffer.h> |
| #include <linux/ring_buffer_types.h> |
| #include <linux/types.h> |
| |
| /* |
| * Ideally those struct would stay private but the caller needs to know |
| * the allocation size for simple_ring_buffer_init(). |
| */ |
| struct simple_buffer_page { |
| struct list_head link; |
| struct buffer_data_page *page; |
| u64 entries; |
| u32 write; |
| u32 id; |
| }; |
| |
| struct simple_rb_per_cpu { |
| struct simple_buffer_page *tail_page; |
| struct simple_buffer_page *reader_page; |
| struct simple_buffer_page *head_page; |
| struct simple_buffer_page *bpages; |
| struct trace_buffer_meta *meta; |
| u32 nr_pages; |
| |
| #define SIMPLE_RB_UNAVAILABLE 0 |
| #define SIMPLE_RB_READY 1 |
| #define SIMPLE_RB_WRITING 2 |
| u32 status; |
| |
| u64 last_overrun; |
| u64 write_stamp; |
| |
| struct simple_rb_cbs *cbs; |
| }; |
| |
| int simple_ring_buffer_init(struct simple_rb_per_cpu *cpu_buffer, struct simple_buffer_page *bpages, |
| const struct ring_buffer_desc *desc); |
| |
| void simple_ring_buffer_unload(struct simple_rb_per_cpu *cpu_buffer); |
| |
| void *simple_ring_buffer_reserve(struct simple_rb_per_cpu *cpu_buffer, unsigned long length, |
| u64 timestamp); |
| |
| void simple_ring_buffer_commit(struct simple_rb_per_cpu *cpu_buffer); |
| |
| int simple_ring_buffer_enable_tracing(struct simple_rb_per_cpu *cpu_buffer, bool enable); |
| |
| int simple_ring_buffer_reset(struct simple_rb_per_cpu *cpu_buffer); |
| |
| int simple_ring_buffer_swap_reader_page(struct simple_rb_per_cpu *cpu_buffer); |
| |
| int simple_ring_buffer_init_mm(struct simple_rb_per_cpu *cpu_buffer, |
| struct simple_buffer_page *bpages, |
| const struct ring_buffer_desc *desc, |
| void *(*load_page)(unsigned long va), |
| void (*unload_page)(void *va)); |
| |
| void simple_ring_buffer_unload_mm(struct simple_rb_per_cpu *cpu_buffer, |
| void (*unload_page)(void *)); |
| #endif |