Subversion Repositories shark

Rev

Rev 366 | Rev 369 | 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;
364 giacomo 11
int TracerOutputType = TRACER_NO_OUTPUT;
352 giacomo 12
unsigned long long TracerEventsRecorded;
364 giacomo 13
unsigned int TracerEventsSaved;
352 giacomo 14
extern unsigned int clk_per_msec;
15
 
16
/* Initialize the tracer
17
 *
18
 * Return 0 => Success
19
 * Return 1 => Fail
20
 */
365 giacomo 21
int tracer_initialize(int MemorySize)
352 giacomo 22
{
23
 
24
  SYS_FLAGS f;
25
 
26
  f = ll_fsave();
27
 
28
  StartTracerBuffer = malloc(MemorySize);
29
  if (!StartTracerBuffer) {
30
    ll_frestore(f);
31
    return 1;
32
  }
33
 
34
  EndTracerBuffer = StartTracerBuffer + MemorySize - 1;
35
  CurrentTracerBuffer = StartTracerBuffer;
362 giacomo 36
  FirstTracerBuffer = StartTracerBuffer;
37
  LastBeforeEndTracerBuffer = EndTracerBuffer;
352 giacomo 38
 
39
  TracerActive = 0;
40
  TracerEventsRecorded = 0;
364 giacomo 41
  TracerEventsSaved = 0;
352 giacomo 42
 
43
  ll_frestore(f);
44
  return 0;
45
 
46
}
47
 
48
void tracer_enable() {
49
 
50
  SYS_FLAGS f;
51
 
52
  f = ll_fsave();
53
 
54
  TracerActive = 1;
55
 
56
  ll_frestore(f);
57
 
58
}
59
 
60
void tracer_disable() {
61
 
62
  SYS_FLAGS f;
63
 
64
  f = ll_fsave();
65
 
66
  TracerActive = 0;
67
 
68
  ll_frestore(f);
69
 
70
}
71
 
364 giacomo 72
int send_udp_event(void *p, int size);
73
 
74
/* Send NumberOfEvents out of the system
75
 * If NumberOfEvents = -1 all the events will be sent */
366 giacomo 76
int tracer_send_logged_events(unsigned int NumberOfEvents) {
364 giacomo 77
 
78
  void *p;
79
  int s,err;
80
 
81
  SYS_FLAGS f;
82
 
83
  f = ll_fsave();
84
 
85
  if (NumberOfEvents == 0 || TracerEventsSaved == 0) {
86
    ll_frestore(f);
87
    return 0;
88
  }
89
 
90
  p = FirstTracerBuffer;
91
  s = 0;
92
  while(((p == CurrentTracerBuffer && s == 0) || p != CurrentTracerBuffer) && s != NumberOfEvents) {
93
 
94
    switch (TracerOutputType) {
95
      case TRACER_NO_OUTPUT:
366 giacomo 96
          cprintf("Event Type %02x Sent To NULL\n",*(BYTE *)(p));
364 giacomo 97
        break;
98
      case TRACER_UDP_OUTPUT:
99
          err = send_udp_event(p,*(BYTE *)(p + 9));
100
          if (err != 0) {
101
            ll_frestore(f);
102
            return s;
103
          }
104
        break;
105
      default:
106
          cprintf("Error: Tracer Output Not Defined\n");
107
          ll_frestore(f);
108
          return -1;
109
        break;
110
    }
111
 
112
    p += *(BYTE *)(p + 9);
113
    if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer;
114
 
115
    FirstTracerBuffer = p;
116
    TracerEventsSaved--;
117
 
118
    s++;
119
 
120
  }
121
 
122
  ll_frestore(f);
123
  return s;
124
 
125
}
126
 
352 giacomo 127
void tracer_print_statistics() {
128
 
129
  SYS_FLAGS f;
130
  void *p;
363 giacomo 131
  int i,t,s;
352 giacomo 132
 
362 giacomo 133
  f = ll_fsave();
352 giacomo 134
 
363 giacomo 135
  cprintf("\nStart Tracer Buffer:           %08x\n",(int)StartTracerBuffer);
362 giacomo 136
  cprintf("End Tracer Buffer:             %08x\n",(int)EndTracerBuffer);
137
  cprintf("Current Tracer Buffer:         %08x\n",(int)CurrentTracerBuffer);
138
  cprintf("First Tracer Buffer:           %08x\n",(int)FirstTracerBuffer);
139
  cprintf("Last Before End Tracer Buffer: %08x\n\n",(int)LastBeforeEndTracerBuffer);
352 giacomo 140
 
362 giacomo 141
  cprintf("Total Events: %d\n",(int)TracerEventsRecorded);
364 giacomo 142
  cprintf("Total Saved Events: %d\n",TracerEventsSaved);
352 giacomo 143
 
367 giacomo 144
  if (TracerEventsSaved == 0) return;
145
 
352 giacomo 146
  for (i=0; i<0xFF; i++) {
362 giacomo 147
    p = FirstTracerBuffer;
352 giacomo 148
    t = 0;
363 giacomo 149
    s = 0;
150
    while((p == CurrentTracerBuffer && s == 0) || p != CurrentTracerBuffer) {
151
      s++;
352 giacomo 152
      if (*(BYTE *)p == i) t++;
363 giacomo 153
      p += *(BYTE *)(p + 9);
154
      if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer;
352 giacomo 155
    }
156
    if (t != 0)
157
      cprintf("Event type %02x => %d\n",i,t);
158
  }
159
 
160
  ll_frestore(f);
161
 
162
}