1 /* SPDX-License-Identifier: LGPL-2.1 */ 2 /* 3 * Copyright (C) 2012 Red Hat Inc, Steven Rostedt <[email protected]> 4 * 5 */ 6 #ifndef _KBUFFER_H 7 #define _KBUFFER_H 8 9 #ifndef TS_SHIFT 10 #define TS_SHIFT 27 11 #endif 12 13 enum kbuffer_endian { 14 KBUFFER_ENDIAN_BIG, 15 KBUFFER_ENDIAN_LITTLE, 16 KBUFFER_ENDIAN_SAME_AS_HOST, 17 }; 18 19 enum kbuffer_long_size { 20 KBUFFER_LSIZE_4, 21 KBUFFER_LSIZE_8, 22 KBUFFER_LSIZE_SAME_AS_HOST, 23 }; 24 25 enum { 26 KBUFFER_TYPE_PADDING = 29, 27 KBUFFER_TYPE_TIME_EXTEND = 30, 28 KBUFFER_TYPE_TIME_STAMP = 31, 29 }; 30 31 struct kbuffer; 32 33 struct kbuffer *kbuffer_alloc(enum kbuffer_long_size size, enum kbuffer_endian endian); 34 struct kbuffer *kbuffer_dup(struct kbuffer *kbuf); 35 void kbuffer_free(struct kbuffer *kbuf); 36 int kbuffer_load_subbuffer(struct kbuffer *kbuf, void *subbuffer); 37 int kbuffer_refresh(struct kbuffer *kbuf); 38 void *kbuffer_read_event(struct kbuffer *kbuf, unsigned long long *ts); 39 void *kbuffer_next_event(struct kbuffer *kbuf, unsigned long long *ts); 40 unsigned long long kbuffer_timestamp(struct kbuffer *kbuf); 41 unsigned long long kbuffer_subbuf_timestamp(struct kbuffer *kbuf, void *subbuf); 42 unsigned int kbuffer_ptr_delta(struct kbuffer *kbuf, void *ptr); 43 44 void *kbuffer_translate_data(int swap, void *data, unsigned int *size); 45 46 void *kbuffer_read_at_offset(struct kbuffer *kbuf, int offset, unsigned long long *ts); 47 int kbuffer_read_buffer(struct kbuffer *kbuf, void *buffer, int len); 48 49 int kbuffer_curr_index(struct kbuffer *kbuf); 50 51 int kbuffer_curr_offset(struct kbuffer *kbuf); 52 int kbuffer_curr_size(struct kbuffer *kbuf); 53 int kbuffer_event_size(struct kbuffer *kbuf); 54 int kbuffer_missed_events(struct kbuffer *kbuf); 55 int kbuffer_subbuffer_size(struct kbuffer *kbuf); 56 void *kbuffer_subbuffer(struct kbuffer *kbuf); 57 58 void kbuffer_set_old_format(struct kbuffer *kbuf); 59 int kbuffer_start_of_data(struct kbuffer *kbuf); 60 61 /* Debugging */ 62 63 struct kbuffer_raw_info { 64 int type; 65 int length; 66 unsigned long long delta; 67 void *next; 68 }; 69 70 /* Read raw data */ 71 struct kbuffer_raw_info *kbuffer_raw_get(struct kbuffer *kbuf, void *subbuf, 72 struct kbuffer_raw_info *info); 73 74 #endif /* _K_BUFFER_H */ 75