Lines Matching +full:static +full:- +full:extend
1 // SPDX-License-Identifier: LGPL-2.1
18 #define COMMIT_MASK ((1 << 27) - 1)
33 * @timestamp - timestamp of current event
34 * @lost_events - # of lost events between this subbuffer and previous
35 * @flags - special flags of the kbuffer
36 * @subbuffer - pointer to the sub-buffer page
37 * @data - pointer to the start of data on the sub-buffer page
38 * @index - index from @data to the @curr event data
39 * @curr - offset from @data to the start of current event
41 * @next - offset from @data to the start of next event
42 * @size - The size of data on @data
43 * @start - The offset from @subbuffer where @data lives
44 * @first - The offset from @subbuffer where the first non time stamp event lives
46 * @read_4 - Function to read 4 raw bytes (may swap)
47 * @read_8 - Function to read 8 raw bytes (may swap)
48 * @read_long - Function to read a long word (4 or 8 bytes with needed swap)
69 static void *zmalloc(size_t size) in zmalloc()
74 static int host_is_bigendian(void) in host_is_bigendian()
83 static int do_swap(struct kbuffer *kbuf) in do_swap()
85 return ((kbuf->flags & KBUFFER_FL_HOST_BIG_ENDIAN) + kbuf->flags) & in do_swap()
89 static unsigned long long __read_8(void *ptr) in __read_8()
96 static unsigned long long __read_8_sw(void *ptr) in __read_8_sw()
113 static unsigned int __read_4(void *ptr) in __read_4()
120 static unsigned int __read_4_sw(void *ptr) in __read_4_sw()
133 static unsigned long long read_8(struct kbuffer *kbuf, void *ptr) in read_8()
135 return kbuf->read_8(ptr); in read_8()
138 static unsigned int read_4(struct kbuffer *kbuf, void *ptr) in read_4()
140 return kbuf->read_4(ptr); in read_4()
143 static unsigned long long __read_long_8(struct kbuffer *kbuf, void *ptr) in __read_long_8()
145 return kbuf->read_8(ptr); in __read_long_8()
148 static unsigned long long __read_long_4(struct kbuffer *kbuf, void *ptr) in __read_long_4()
150 return kbuf->read_4(ptr); in __read_long_4()
153 static unsigned long long read_long(struct kbuffer *kbuf, void *ptr) in read_long()
155 return kbuf->read_long(kbuf, ptr); in read_long()
158 static int calc_index(struct kbuffer *kbuf, void *ptr) in calc_index()
160 return (unsigned long)ptr - (unsigned long)kbuf->data; in calc_index()
163 static int __next_event(struct kbuffer *kbuf);
169 static bool host_is_32bit(void) in host_is_32bit()
184 * kbuffer_alloc - allocat a new kbuffer
225 kbuf->flags = flags; in kbuffer_alloc()
230 kbuf->flags |= KBUFFER_FL_HOST_BIG_ENDIAN; in kbuffer_alloc()
234 kbuf->read_8 = __read_8_sw; in kbuffer_alloc()
235 kbuf->read_4 = __read_4_sw; in kbuffer_alloc()
237 kbuf->read_8 = __read_8; in kbuffer_alloc()
238 kbuf->read_4 = __read_4; in kbuffer_alloc()
241 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_alloc()
242 kbuf->read_long = __read_long_8; in kbuffer_alloc()
244 kbuf->read_long = __read_long_4; in kbuffer_alloc()
247 kbuf->next_event = __next_event; in kbuffer_alloc()
252 /** kbuffer_free - free an allocated kbuffer
262 static unsigned int type4host(struct kbuffer *kbuf, in type4host()
265 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in type4host()
271 static unsigned int len4host(struct kbuffer *kbuf, in len4host()
274 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in len4host()
280 static unsigned int type_len4host(struct kbuffer *kbuf, in type_len4host()
283 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in type_len4host()
284 return (type_len_ts >> 27) & ((1 << 5) - 1); in type_len4host()
286 return type_len_ts & ((1 << 5) - 1); in type_len4host()
289 static unsigned int ts4host(struct kbuffer *kbuf, in ts4host()
292 if (kbuf->flags & KBUFFER_FL_BIG_ENDIAN) in ts4host()
293 return type_len_ts & ((1 << 27) - 1); in ts4host()
309 static unsigned int old_update_pointers(struct kbuffer *kbuf) in old_update_pointers()
311 unsigned long long extend; in old_update_pointers() local
317 void *ptr = kbuf->data + kbuf->curr; in old_update_pointers()
328 kbuf->next = kbuf->size; in old_update_pointers()
332 extend = read_4(kbuf, ptr); in old_update_pointers()
333 extend <<= TS_SHIFT; in old_update_pointers()
334 extend += delta; in old_update_pointers()
335 delta = extend; in old_update_pointers()
342 kbuf->curr = kbuf->size; in old_update_pointers()
343 kbuf->next = kbuf->size; in old_update_pointers()
344 kbuf->index = kbuf->size; in old_update_pointers()
345 return -1; in old_update_pointers()
351 length -= 4; in old_update_pointers()
357 kbuf->timestamp += delta; in old_update_pointers()
358 kbuf->index = calc_index(kbuf, ptr); in old_update_pointers()
359 kbuf->next = kbuf->index + length; in old_update_pointers()
364 static int __old_next_event(struct kbuffer *kbuf) in __old_next_event()
369 kbuf->curr = kbuf->next; in __old_next_event()
370 if (kbuf->next >= kbuf->size) in __old_next_event()
371 return -1; in __old_next_event()
378 static unsigned int
382 unsigned long long extend, msb = 0; in translate_data() local
398 msb = kbuf->timestamp & TS_MSB; in translate_data()
401 extend = read_4(kbuf, data); in translate_data()
403 extend <<= TS_SHIFT; in translate_data()
404 extend += *delta; in translate_data()
405 *delta = extend | msb; in translate_data()
410 *length = read_4(kbuf, data) - 4; in translate_data()
424 static unsigned int update_pointers(struct kbuffer *kbuf) in update_pointers()
429 void *ptr = kbuf->data + kbuf->curr; in update_pointers()
434 kbuf->timestamp = delta; in update_pointers()
436 kbuf->timestamp += delta; in update_pointers()
438 kbuf->index = calc_index(kbuf, ptr); in update_pointers()
439 kbuf->next = kbuf->index + length; in update_pointers()
445 * kbuffer_translate_data - read raw data to get a record
485 static int __next_event(struct kbuffer *kbuf) in __next_event()
490 kbuf->curr = kbuf->next; in __next_event()
491 if (kbuf->next >= kbuf->size) in __next_event()
492 return -1; in __next_event()
501 static int next_event(struct kbuffer *kbuf) in next_event()
503 return kbuf->next_event(kbuf); in next_event()
507 * kbuffer_next_event - increment the current pointer
522 if (!kbuf || !kbuf->subbuffer) in kbuffer_next_event()
530 *ts = kbuf->timestamp; in kbuffer_next_event()
532 return kbuf->data + kbuf->index; in kbuffer_next_event()
536 * kbuffer_load_subbuffer - load a new subbuffer into the kbuffer
544 * Returns 0 on succes, -1 otherwise.
552 return -1; in kbuffer_load_subbuffer()
554 kbuf->subbuffer = subbuffer; in kbuffer_load_subbuffer()
556 kbuf->timestamp = read_8(kbuf, ptr); in kbuffer_load_subbuffer()
559 kbuf->curr = 0; in kbuffer_load_subbuffer()
561 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_load_subbuffer()
562 kbuf->start = 16; in kbuffer_load_subbuffer()
564 kbuf->start = 12; in kbuffer_load_subbuffer()
566 kbuf->data = subbuffer + kbuf->start; in kbuffer_load_subbuffer()
569 kbuf->size = (unsigned int)flags & COMMIT_MASK; in kbuffer_load_subbuffer()
573 ptr = kbuf->data + kbuf->size; in kbuffer_load_subbuffer()
574 kbuf->lost_events = read_long(kbuf, ptr); in kbuffer_load_subbuffer()
576 kbuf->lost_events = -1; in kbuffer_load_subbuffer()
578 kbuf->lost_events = 0; in kbuffer_load_subbuffer()
580 kbuf->index = 0; in kbuffer_load_subbuffer()
581 kbuf->next = 0; in kbuffer_load_subbuffer()
586 kbuf->first = kbuf->curr; in kbuffer_load_subbuffer()
592 * kbuffer_subbuf_timestamp - read the timestamp from a sub buffer
600 return kbuf->read_8(subbuf); in kbuffer_subbuf_timestamp()
604 * kbuffer_ptr_delta - read the delta field from a record
620 * kbuffer_read_event - read the next event in the kbuffer subbuffer
629 if (!kbuf || !kbuf->subbuffer) in kbuffer_read_event()
632 if (kbuf->curr >= kbuf->size) in kbuffer_read_event()
636 *ts = kbuf->timestamp; in kbuffer_read_event()
637 return kbuf->data + kbuf->index; in kbuffer_read_event()
641 * kbuffer_timestamp - Return the timestamp of the current event
648 return kbuf->timestamp; in kbuffer_timestamp()
652 * kbuffer_read_at_offset - read the event that is at offset
674 if (offset < kbuf->start) in kbuffer_read_at_offset()
677 offset -= kbuf->start; in kbuffer_read_at_offset()
680 kbuffer_load_subbuffer(kbuf, kbuf->subbuffer); in kbuffer_read_at_offset()
683 while (kbuf->curr < offset) { in kbuffer_read_at_offset()
693 * kbuffer_subbuffer_size - the size of the loaded subbuffer
702 return kbuf->size; in kbuffer_subbuffer_size()
706 * kbuffer_curr_index - Return the index of the record
717 return kbuf->curr; in kbuffer_curr_index()
721 * kbuffer_curr_offset - Return the offset of the record
729 return kbuf->curr + kbuf->start; in kbuffer_curr_offset()
733 * kbuffer_event_size - return the size of the event data
741 return kbuf->next - kbuf->index; in kbuffer_event_size()
745 * kbuffer_curr_size - return the size of the entire record
753 return kbuf->next - kbuf->curr; in kbuffer_curr_size()
757 * kbuffer_missed_events - return the # of missed events from last event.
768 if (kbuf->curr) in kbuffer_missed_events()
771 return kbuf->lost_events; in kbuffer_missed_events()
775 * kbuffer_set_old_forma - set the kbuffer to use the old format parsing
785 kbuf->flags |= KBUFFER_FL_OLD_FORMAT; in kbuffer_set_old_format()
787 kbuf->next_event = __old_next_event; in kbuffer_set_old_format()
791 * kbuffer_start_of_data - return offset of where data starts on subbuffer
798 return kbuf->first + kbuf->start; in kbuffer_start_of_data()
802 * kbuffer_raw_get - get raw buffer info
808 * Expects to have info->next set to what it will read.
810 * @info->next will be updated to the next element.
823 void *ptr = info->next; in kbuffer_raw_get()
828 if (kbuf->flags & KBUFFER_FL_LONG_8) in kbuffer_raw_get()
841 info->next = ptr + length; in kbuffer_raw_get()
843 info->type = type_len; in kbuffer_raw_get()
844 info->delta = delta; in kbuffer_raw_get()
845 info->length = length; in kbuffer_raw_get()