/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ORDERED_EVENTS_H
#define __ORDERED_EVENTS_H

#include <linux/types.h>

struct perf_sample;

struct ordered_event {
	u64			timestamp;
	u64			file_offset;
	union perf_event	*event;
	struct list_head	list;
};

enum oe_flush {
	OE_FLUSH__NONE,
	OE_FLUSH__FINAL,
	OE_FLUSH__ROUND,
	OE_FLUSH__HALF,
	OE_FLUSH__TOP,
	OE_FLUSH__TIME,
};

struct ordered_events;

typedef int (*ordered_events__deliver_t)(struct ordered_events *oe,
					 struct ordered_event *event);

struct ordered_events_buffer {
	struct list_head	list;
	struct ordered_event	event[0];
};

struct ordered_events {
	u64				 last_flush;
	u64				 next_flush;
	u64				 max_timestamp;
	u64				 max_alloc_size;
	u64				 cur_alloc_size;
	struct list_head		 events;
	struct list_head		 cache;
	struct list_head		 to_free;
	struct ordered_events_buffer	*buffer;
	struct ordered_event		*last;
	ordered_events__deliver_t	 deliver;
	int				 buffer_idx;
	unsigned int			 nr_events;
	enum oe_flush			 last_flush_type;
	u32				 nr_unordered_events;
	bool				 copy_on_queue;
	void				*data;
};

int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
			  u64 timestamp, u64 file_offset);
void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
int ordered_events__flush_time(struct ordered_events *oe, u64 timestamp);
void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t deliver,
			  void *data);
void ordered_events__free(struct ordered_events *oe);
void ordered_events__reinit(struct ordered_events *oe);
u64 ordered_events__first_time(struct ordered_events *oe);

static inline
void ordered_events__set_alloc_size(struct ordered_events *oe, u64 size)
{
	oe->max_alloc_size = size;
}

static inline
void ordered_events__set_copy_on_queue(struct ordered_events *oe, bool copy)
{
	oe->copy_on_queue = copy;
}
#endif /* __ORDERED_EVENTS_H */
