Subversion Repositories shark

Rev

Rev 352 | Rev 363 | 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;
362 giacomo 73
  int i,t;
352 giacomo 74
 
362 giacomo 75
  f = ll_fsave();
352 giacomo 76
 
362 giacomo 77
  cprintf("Start Tracer Buffer:           %08x\n",(int)StartTracerBuffer);
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;
362 giacomo 88
    while(p != CurrentTracerBuffer) {
352 giacomo 89
      if (*(BYTE *)p == i) t++;
362 giacomo 90
      if (*(BYTE *)p != 0) {
91
        p += *(BYTE *)(p + 9);
92
        if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer;
93
      } else {
94
        p = StartTracerBuffer;
95
      }
352 giacomo 96
    }
97
    if (t != 0)
98
      cprintf("Event type %02x => %d\n",i,t);
99
  }
100
 
101
  ll_frestore(f);
102
 
103
}