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