Rev 362 | Rev 364 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
352 | giacomo | 1 | #include <stdlib.h> |
2 | #include <tracer.h> |
||
3 | |||
362 | giacomo | 4 | void *StartTracerBuffer; // Buffer Start |
5 | void *EndTracerBuffer; // Buffer End |
||
6 | void *LastBeforeEndTracerBuffer; |
||
7 | void *CurrentTracerBuffer; //The Actual Write Point For The Next Event |
||
8 | void *FirstTracerBuffer; //The First Valid Event |
||
9 | |||
352 | giacomo | 10 | int TracerActive = 0; |
11 | unsigned long long TracerEventsRecorded; |
||
12 | extern unsigned int clk_per_msec; |
||
13 | |||
14 | /* Initialize the tracer |
||
15 | * |
||
16 | * Return 0 => Success |
||
17 | * Return 1 => Fail |
||
18 | */ |
||
19 | int tracer_initialize(int OutputType, int MemorySize) |
||
20 | { |
||
21 | |||
22 | SYS_FLAGS f; |
||
23 | |||
24 | f = ll_fsave(); |
||
25 | |||
26 | StartTracerBuffer = malloc(MemorySize); |
||
27 | if (!StartTracerBuffer) { |
||
28 | ll_frestore(f); |
||
29 | return 1; |
||
30 | } |
||
31 | |||
32 | EndTracerBuffer = StartTracerBuffer + MemorySize - 1; |
||
33 | CurrentTracerBuffer = StartTracerBuffer; |
||
362 | giacomo | 34 | FirstTracerBuffer = StartTracerBuffer; |
35 | LastBeforeEndTracerBuffer = EndTracerBuffer; |
||
352 | giacomo | 36 | |
37 | TracerActive = 0; |
||
38 | TracerEventsRecorded = 0; |
||
39 | |||
40 | ll_frestore(f); |
||
41 | return 0; |
||
42 | |||
43 | } |
||
44 | |||
45 | void tracer_enable() { |
||
46 | |||
47 | SYS_FLAGS f; |
||
48 | |||
49 | f = ll_fsave(); |
||
50 | |||
51 | TracerActive = 1; |
||
52 | |||
53 | ll_frestore(f); |
||
54 | |||
55 | } |
||
56 | |||
57 | void tracer_disable() { |
||
58 | |||
59 | SYS_FLAGS f; |
||
60 | |||
61 | f = ll_fsave(); |
||
62 | |||
63 | TracerActive = 0; |
||
64 | |||
65 | ll_frestore(f); |
||
66 | |||
67 | } |
||
68 | |||
69 | void tracer_print_statistics() { |
||
70 | |||
71 | SYS_FLAGS f; |
||
72 | void *p; |
||
363 | giacomo | 73 | int i,t,s; |
352 | giacomo | 74 | |
362 | giacomo | 75 | f = ll_fsave(); |
352 | giacomo | 76 | |
363 | giacomo | 77 | cprintf("\nStart Tracer Buffer: %08x\n",(int)StartTracerBuffer); |
362 | giacomo | 78 | cprintf("End Tracer Buffer: %08x\n",(int)EndTracerBuffer); |
79 | cprintf("Current Tracer Buffer: %08x\n",(int)CurrentTracerBuffer); |
||
80 | cprintf("First Tracer Buffer: %08x\n",(int)FirstTracerBuffer); |
||
81 | cprintf("Last Before End Tracer Buffer: %08x\n\n",(int)LastBeforeEndTracerBuffer); |
||
352 | giacomo | 82 | |
362 | giacomo | 83 | cprintf("Total Events: %d\n",(int)TracerEventsRecorded); |
352 | giacomo | 84 | |
85 | for (i=0; i<0xFF; i++) { |
||
362 | giacomo | 86 | p = FirstTracerBuffer; |
352 | giacomo | 87 | t = 0; |
363 | giacomo | 88 | s = 0; |
89 | while((p == CurrentTracerBuffer && s == 0) || p != CurrentTracerBuffer) { |
||
90 | s++; |
||
352 | giacomo | 91 | if (*(BYTE *)p == i) t++; |
363 | giacomo | 92 | p += *(BYTE *)(p + 9); |
93 | if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer; |
||
352 | giacomo | 94 | } |
95 | if (t != 0) |
||
96 | cprintf("Event type %02x => %d\n",i,t); |
||
97 | } |
||
98 | |||
363 | giacomo | 99 | cprintf("Total Saved Events: %d\n",s); |
100 | |||
352 | giacomo | 101 | ll_frestore(f); |
102 | |||
103 | } |