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