diff options
-rw-r--r-- | external/trace/Makefile | 2 | ||||
-rw-r--r-- | external/trace/dump_trace.c | 33 | ||||
-rw-r--r-- | external/trace/trace.c | 39 |
3 files changed, 41 insertions, 33 deletions
diff --git a/external/trace/Makefile b/external/trace/Makefile index b4b0091..b397380 100644 --- a/external/trace/Makefile +++ b/external/trace/Makefile @@ -1,5 +1,5 @@ HOSTEND=$(shell uname -m | sed -e 's/^i.*86$$/LITTLE/' -e 's/^x86.*/LITTLE/' -e 's/^ppc.*/BIG/') -CFLAGS=-g -Wall -DHAVE_$(HOSTEND)_ENDIAN -I../include +CFLAGS=-g -Wall -DHAVE_$(HOSTEND)_ENDIAN -I../../include dump_trace: dump_trace.c diff --git a/external/trace/dump_trace.c b/external/trace/dump_trace.c index 9364601..db53d78 100644 --- a/external/trace/dump_trace.c +++ b/external/trace/dump_trace.c @@ -25,8 +25,8 @@ #include <stddef.h> #include <unistd.h> -#include "../ccan/endian/endian.h" -#include "../ccan/short_types/short_types.h" +#include "../../ccan/endian/endian.h" +#include "../../ccan/short_types/short_types.h" #include <trace_types.h> /* Handles trace from debugfs (one record at a time) or file */ @@ -57,39 +57,40 @@ static void display_header(const struct trace_hdr *h) u64 ts = be64_to_cpu(h->timestamp); printf("%16lx (+%8lx) [%03x] : ", - ts, prev_ts ? (ts - prev_ts) : 0, h->cpu); + ts, prev_ts ? (ts - prev_ts) : 0, be16_to_cpu(h->cpu)); prev_ts = ts; } static void dump_fsp_event(struct trace_fsp_event *t) { - printf("FSP_EVT [st=%d] ", t->fsp_state); + printf("FSP_EVT [st=%d] ", be16_to_cpu(t->fsp_state)); - switch(t->event) { + switch(be16_to_cpu(t->event)) { case TRACE_FSP_EVT_LINK_DOWN: printf("LINK DOWN"); break; case TRACE_FSP_EVT_DISR_CHG: - printf("DISR CHANGE (0x%08x)", t->data[0]); + printf("DISR CHANGE (0x%08x)", be32_to_cpu(t->data[0])); break; case TRACE_FSP_EVT_SOFT_RR: - printf("SOFT R&R (DISR=0x%08x)", t->data[0]); + printf("SOFT R&R (DISR=0x%08x)", be32_to_cpu(t->data[0])); break; case TRACE_FSP_EVT_RR_COMPL: printf("R&R COMPLETE"); break; case TRACE_FSP_EVT_HDES_CHG: - printf("HDES CHANGE (0x%08x)", t->data[0]); + printf("HDES CHANGE (0x%08x)", be32_to_cpu(t->data[0])); break; case TRACE_FSP_EVT_POLL_IRQ: printf("%s HDIR=%08x CTL=%08x PSI_IRQ=%d", - t->data[0] ? "IRQ " : "POLL", t->data[1], - t->data[2], t->data[3]); + t->data[0] ? "IRQ " : "POLL", be32_to_cpu(t->data[1]), + be32_to_cpu(t->data[2]), be32_to_cpu(t->data[3])); break; default: printf("Unknown %d (d: %08x %08x %08x %08x)", - t->event, t->data[0], t->data[1], - t->data[2], t->data[3]); + be16_to_cpu(t->event), be32_to_cpu(t->data[0]), + be32_to_cpu(t->data[1]), be32_to_cpu(t->data[2]), + be32_to_cpu(t->data[3])); } printf("\n"); } @@ -132,19 +133,19 @@ static void dump_uart(struct trace_uart *t) switch(t->ctx) { case TRACE_UART_CTX_IRQ: printf(": IRQ IRQEN=%d IN_CNT=%d\n", - !t->irq_state, t->in_count); + !t->irq_state, be16_to_cpu(t->in_count)); break; case TRACE_UART_CTX_POLL: printf(": POLL IRQEN=%d IN_CNT=%d\n", - !t->irq_state, t->in_count); + !t->irq_state, be16_to_cpu(t->in_count)); break; case TRACE_UART_CTX_READ: printf(": READ IRQEN=%d IN_CNT=%d READ=%d\n", - !t->irq_state, t->in_count, t->cnt); + !t->irq_state, be16_to_cpu(t->in_count), t->cnt); break; default: printf(": ???? IRQEN=%d IN_CNT=%d\n", - !t->irq_state, t->in_count); + !t->irq_state, be16_to_cpu(t->in_count)); break; } } diff --git a/external/trace/trace.c b/external/trace/trace.c index 6bf0a5a..7818ada 100644 --- a/external/trace/trace.c +++ b/external/trace/trace.c @@ -15,6 +15,8 @@ */ /* This example code shows how to read from the trace buffer. */ #include <external/trace/trace.h> +#include "../ccan/endian/endian.h" +#include "../ccan/short_types/short_types.h" #include <trace_types.h> #include <errno.h> @@ -30,14 +32,14 @@ bool trace_empty(const struct tracebuf *tb) * we've already seen every repeat for (yet which may be * incremented in future), we're also empty. */ - rep = (void *)tb->buf + (tb->rpos & tb->mask); - if (tb->end != tb->rpos + sizeof(*rep)) + rep = (void *)tb->buf + be64_to_cpu(tb->rpos & tb->mask); + if (be64_to_cpu(tb->end) != be64_to_cpu(tb->rpos) + sizeof(*rep)) return false; if (rep->type != TRACE_REPEAT) return false; - if (rep->num != tb->last_repeat) + if (be16_to_cpu(rep->num) != be32_to_cpu(tb->last_repeat)) return false; return true; @@ -46,8 +48,11 @@ bool trace_empty(const struct tracebuf *tb) /* You can't read in parallel, so some locking required in caller. */ bool trace_get(union trace *t, struct tracebuf *tb) { - u64 start; - size_t len = sizeof(*t) < tb->max_size ? sizeof(*t) : tb->max_size; + u64 start, rpos; + size_t len; + + len = sizeof(*t) < be32_to_cpu(tb->max_size) ? sizeof(*t) : + be32_to_cpu(tb->max_size); if (trace_empty(tb)) return false; @@ -57,32 +62,33 @@ again: * The actual buffer is slightly larger than tbsize, so this * memcpy is always valid. */ - memcpy(t, tb->buf + (tb->rpos & tb->mask), len); + memcpy(t, tb->buf + be64_to_cpu(tb->rpos & tb->mask), len); rmb(); /* read barrier, so we read tb->start after copying record. */ - start = tb->start; + start = be64_to_cpu(tb->start); + rpos = be64_to_cpu(tb->rpos); /* Now, was that overwritten? */ - if (tb->rpos < start) { + if (rpos < start) { /* Create overflow record. */ t->overflow.unused64 = 0; t->overflow.type = TRACE_OVERFLOW; t->overflow.len_div_8 = sizeof(t->overflow) / 8; - t->overflow.bytes_missed = start - tb->rpos; - tb->rpos += t->overflow.bytes_missed; + t->overflow.bytes_missed = cpu_to_be64(start - rpos); + tb->rpos = cpu_to_be64(start); return true; } /* Repeat entries need special handling */ if (t->hdr.type == TRACE_REPEAT) { - u32 num = t->repeat.num; + u32 num = be16_to_cpu(t->repeat.num); /* In case we've read some already... */ - t->repeat.num -= tb->last_repeat; + t->repeat.num = cpu_to_be16(num - tb->last_repeat); /* Record how many repeats we saw this time. */ - tb->last_repeat = num; + tb->last_repeat = cpu_to_be32(num); /* Don't report an empty repeat buffer. */ if (t->repeat.num == 0) { @@ -90,15 +96,16 @@ again: * This can't be the last buffer, otherwise * trace_empty would have returned true. */ - assert(tb->end > tb->rpos + t->hdr.len_div_8 * 8); + assert(be64_to_cpu(tb->end) > + rpos + t->hdr.len_div_8 * 8); /* Skip to next entry. */ - tb->rpos += t->hdr.len_div_8 * 8; + tb->rpos = cpu_to_be64(rpos + t->hdr.len_div_8 * 8); tb->last_repeat = 0; goto again; } } else { tb->last_repeat = 0; - tb->rpos += t->hdr.len_div_8 * 8; + tb->rpos = cpu_to_be64(rpos + t->hdr.len_div_8 * 8); } return true; |