Lines Matching refs:kbuf

57 	unsigned long long (*read_long)(struct kbuffer *kbuf, void *ptr);
58 int (*next_event)(struct kbuffer *kbuf);
75 static int do_swap(struct kbuffer *kbuf) in do_swap() argument
77 return ((kbuf->flags & KBUFFER_FL_HOST_BIG_ENDIAN) + kbuf->flags) & in do_swap()
125 static unsigned long long read_8(struct kbuffer *kbuf, void *ptr) in read_8() argument
127 return kbuf->read_8(ptr); in read_8()
130 static unsigned int read_4(struct kbuffer *kbuf, void *ptr) in read_4() argument
132 return kbuf->read_4(ptr); in read_4()
135 static unsigned long long __read_long_8(struct kbuffer *kbuf, void *ptr) in __read_long_8() argument
137 return kbuf->read_8(ptr); in __read_long_8()
140 static unsigned long long __read_long_4(struct kbuffer *kbuf, void *ptr) in __read_long_4() argument
142 return kbuf->read_4(ptr); in __read_long_4()
145 static unsigned long long read_long(struct kbuffer *kbuf, void *ptr) in read_long() argument
147 return kbuf->read_long(kbuf, ptr); in read_long()
150 static int calc_index(struct kbuffer *kbuf, void *ptr) in calc_index() argument
152 return (unsigned long)ptr - (unsigned long)kbuf->data; in calc_index()
155 static int __next_event(struct kbuffer *kbuf);
167 struct kbuffer *kbuf; in kbuffer_alloc() local
190 kbuf = zmalloc(sizeof(*kbuf)); in kbuffer_alloc()
191 if (!kbuf) in kbuffer_alloc()
194 kbuf->flags = flags; in kbuffer_alloc()
197 kbuf->flags |= KBUFFER_FL_HOST_BIG_ENDIAN; in kbuffer_alloc()
199 if (do_swap(kbuf)) { in kbuffer_alloc()
200 kbuf->read_8 = __read_8_sw; in kbuffer_alloc()
201 kbuf->read_4 = __read_4_sw; in kbuffer_alloc()
203 kbuf->read_8 = __read_8; in kbuffer_alloc()
204 kbuf->read_4 = __read_4; in kbuffer_alloc()
207 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_alloc()
208 kbuf->read_long = __read_long_8; in kbuffer_alloc()
210 kbuf->read_long = __read_long_4; in kbuffer_alloc()
213 kbuf->next_event = __next_event; in kbuffer_alloc()
215 return kbuf; in kbuffer_alloc()
223 void kbuffer_free(struct kbuffer *kbuf) in kbuffer_free() argument
225 free(kbuf); in kbuffer_free()
228 static unsigned int type4host(struct kbuffer *kbuf, in type4host() argument
231 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in type4host()
237 static unsigned int len4host(struct kbuffer *kbuf, in len4host() argument
240 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in len4host()
246 static unsigned int type_len4host(struct kbuffer *kbuf, in type_len4host() argument
249 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in type_len4host()
255 static unsigned int ts4host(struct kbuffer *kbuf, in ts4host() argument
258 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in ts4host()
275 static unsigned int old_update_pointers(struct kbuffer *kbuf) in old_update_pointers() argument
283 void *ptr = kbuf->data + kbuf->curr; in old_update_pointers()
285 type_len_ts = read_4(kbuf, ptr); in old_update_pointers()
288 type = type4host(kbuf, type_len_ts); in old_update_pointers()
289 len = len4host(kbuf, type_len_ts); in old_update_pointers()
290 delta = ts4host(kbuf, type_len_ts); in old_update_pointers()
294 kbuf->next = kbuf->size; in old_update_pointers()
298 extend = read_4(kbuf, ptr); in old_update_pointers()
308 kbuf->curr = kbuf->size; in old_update_pointers()
309 kbuf->next = kbuf->size; in old_update_pointers()
310 kbuf->index = kbuf->size; in old_update_pointers()
316 length = read_4(kbuf, ptr); in old_update_pointers()
323 kbuf->timestamp += delta; in old_update_pointers()
324 kbuf->index = calc_index(kbuf, ptr); in old_update_pointers()
325 kbuf->next = kbuf->index + length; in old_update_pointers()
330 static int __old_next_event(struct kbuffer *kbuf) in __old_next_event() argument
335 kbuf->curr = kbuf->next; in __old_next_event()
336 if (kbuf->next >= kbuf->size) in __old_next_event()
338 type = old_update_pointers(kbuf); in __old_next_event()
345 translate_data(struct kbuffer *kbuf, void *data, void **rptr, in translate_data() argument
352 type_len_ts = read_4(kbuf, data); in translate_data()
355 type_len = type_len4host(kbuf, type_len_ts); in translate_data()
356 *delta = ts4host(kbuf, type_len_ts); in translate_data()
360 *length = read_4(kbuf, data); in translate_data()
365 extend = read_4(kbuf, data); in translate_data()
374 *length = read_4(kbuf, data) - 4; in translate_data()
388 static unsigned int update_pointers(struct kbuffer *kbuf) in update_pointers() argument
393 void *ptr = kbuf->data + kbuf->curr; in update_pointers()
395 type_len = translate_data(kbuf, ptr, &ptr, &delta, &length); in update_pointers()
398 kbuf->timestamp = delta; in update_pointers()
400 kbuf->timestamp += delta; in update_pointers()
402 kbuf->index = calc_index(kbuf, ptr); in update_pointers()
403 kbuf->next = kbuf->index + length; in update_pointers()
421 struct kbuffer kbuf; in kbuffer_translate_data() local
427 kbuf.read_8 = __read_8_sw; in kbuffer_translate_data()
428 kbuf.read_4 = __read_4_sw; in kbuffer_translate_data()
429 kbuf.flags = host_is_bigendian() ? 0 : KBUFFER_FL_BIG_ENDIAN; in kbuffer_translate_data()
431 kbuf.read_8 = __read_8; in kbuffer_translate_data()
432 kbuf.read_4 = __read_4; in kbuffer_translate_data()
433 kbuf.flags = host_is_bigendian() ? KBUFFER_FL_BIG_ENDIAN: 0; in kbuffer_translate_data()
436 type_len = translate_data(&kbuf, data, &ptr, &delta, &length); in kbuffer_translate_data()
449 static int __next_event(struct kbuffer *kbuf) in __next_event() argument
454 kbuf->curr = kbuf->next; in __next_event()
455 if (kbuf->next >= kbuf->size) in __next_event()
457 type = update_pointers(kbuf); in __next_event()
465 static int next_event(struct kbuffer *kbuf) in next_event() argument
467 return kbuf->next_event(kbuf); in next_event()
482 void *kbuffer_next_event(struct kbuffer *kbuf, unsigned long long *ts) in kbuffer_next_event() argument
486 if (!kbuf || !kbuf->subbuffer) in kbuffer_next_event()
489 ret = next_event(kbuf); in kbuffer_next_event()
494 *ts = kbuf->timestamp; in kbuffer_next_event()
496 return kbuf->data + kbuf->index; in kbuffer_next_event()
510 int kbuffer_load_subbuffer(struct kbuffer *kbuf, void *subbuffer) in kbuffer_load_subbuffer() argument
515 if (!kbuf || !subbuffer) in kbuffer_load_subbuffer()
518 kbuf->subbuffer = subbuffer; in kbuffer_load_subbuffer()
520 kbuf->timestamp = read_8(kbuf, ptr); in kbuffer_load_subbuffer()
523 kbuf->curr = 0; in kbuffer_load_subbuffer()
525 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_load_subbuffer()
526 kbuf->start = 16; in kbuffer_load_subbuffer()
528 kbuf->start = 12; in kbuffer_load_subbuffer()
530 kbuf->data = subbuffer + kbuf->start; in kbuffer_load_subbuffer()
532 flags = read_long(kbuf, ptr); in kbuffer_load_subbuffer()
533 kbuf->size = (unsigned int)flags & COMMIT_MASK; in kbuffer_load_subbuffer()
537 ptr = kbuf->data + kbuf->size; in kbuffer_load_subbuffer()
538 kbuf->lost_events = read_long(kbuf, ptr); in kbuffer_load_subbuffer()
540 kbuf->lost_events = -1; in kbuffer_load_subbuffer()
542 kbuf->lost_events = 0; in kbuffer_load_subbuffer()
544 kbuf->index = 0; in kbuffer_load_subbuffer()
545 kbuf->next = 0; in kbuffer_load_subbuffer()
547 next_event(kbuf); in kbuffer_load_subbuffer()
559 unsigned long long kbuffer_subbuf_timestamp(struct kbuffer *kbuf, void *subbuf) in kbuffer_subbuf_timestamp() argument
561 return kbuf->read_8(subbuf); in kbuffer_subbuf_timestamp()
571 unsigned int kbuffer_ptr_delta(struct kbuffer *kbuf, void *ptr) in kbuffer_ptr_delta() argument
575 type_len_ts = read_4(kbuf, ptr); in kbuffer_ptr_delta()
576 return ts4host(kbuf, type_len_ts); in kbuffer_ptr_delta()
588 void *kbuffer_read_event(struct kbuffer *kbuf, unsigned long long *ts) in kbuffer_read_event() argument
590 if (!kbuf || !kbuf->subbuffer) in kbuffer_read_event()
593 if (kbuf->curr >= kbuf->size) in kbuffer_read_event()
597 *ts = kbuf->timestamp; in kbuffer_read_event()
598 return kbuf->data + kbuf->index; in kbuffer_read_event()
607 unsigned long long kbuffer_timestamp(struct kbuffer *kbuf) in kbuffer_timestamp() argument
609 return kbuf->timestamp; in kbuffer_timestamp()
630 void *kbuffer_read_at_offset(struct kbuffer *kbuf, int offset, in kbuffer_read_at_offset() argument
635 if (offset < kbuf->start) in kbuffer_read_at_offset()
638 offset -= kbuf->start; in kbuffer_read_at_offset()
641 kbuffer_load_subbuffer(kbuf, kbuf->subbuffer); in kbuffer_read_at_offset()
642 data = kbuffer_read_event(kbuf, ts); in kbuffer_read_at_offset()
644 while (kbuf->curr < offset) { in kbuffer_read_at_offset()
645 data = kbuffer_next_event(kbuf, ts); in kbuffer_read_at_offset()
661 int kbuffer_subbuffer_size(struct kbuffer *kbuf) in kbuffer_subbuffer_size() argument
663 return kbuf->size; in kbuffer_subbuffer_size()
676 int kbuffer_curr_index(struct kbuffer *kbuf) in kbuffer_curr_index() argument
678 return kbuf->curr; in kbuffer_curr_index()
688 int kbuffer_curr_offset(struct kbuffer *kbuf) in kbuffer_curr_offset() argument
690 return kbuf->curr + kbuf->start; in kbuffer_curr_offset()
700 int kbuffer_event_size(struct kbuffer *kbuf) in kbuffer_event_size() argument
702 return kbuf->next - kbuf->index; in kbuffer_event_size()
712 int kbuffer_curr_size(struct kbuffer *kbuf) in kbuffer_curr_size() argument
714 return kbuf->next - kbuf->curr; in kbuffer_curr_size()
726 int kbuffer_missed_events(struct kbuffer *kbuf) in kbuffer_missed_events() argument
729 if (kbuf->curr) in kbuffer_missed_events()
732 return kbuf->lost_events; in kbuffer_missed_events()
744 void kbuffer_set_old_format(struct kbuffer *kbuf) in kbuffer_set_old_format() argument
746 kbuf->flags |= KBUFFER_FL_OLD_FORMAT; in kbuffer_set_old_format()
748 kbuf->next_event = __old_next_event; in kbuffer_set_old_format()
757 int kbuffer_start_of_data(struct kbuffer *kbuf) in kbuffer_start_of_data() argument
759 return kbuf->start; in kbuffer_start_of_data()
776 kbuffer_raw_get(struct kbuffer *kbuf, void *subbuf, struct kbuffer_raw_info *info) in kbuffer_raw_get() argument
786 if (!kbuf || !subbuf) in kbuffer_raw_get()
789 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_raw_get()
794 flags = read_long(kbuf, subbuf + 8); in kbuffer_raw_get()
800 type_len = translate_data(kbuf, ptr, &ptr, &delta, &length); in kbuffer_raw_get()