Subversion Repositories shark

Rev

Rev 364 | Rev 366 | 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 */
76
int send_logged_data(unsigned int NumberOfEvents) {
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:
96
        break;
97
      case TRACER_UDP_OUTPUT:
98
          err = send_udp_event(p,*(BYTE *)(p + 9));
99
          if (err != 0) {
100
            ll_frestore(f);
101
            return s;
102
          }
103
        break;
104
      default:
105
          cprintf("Error: Tracer Output Not Defined\n");
106
          ll_frestore(f);
107
          return -1;
108
        break;
109
    }
110
 
111
    p += *(BYTE *)(p + 9);
112
    if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer;
113
 
114
    FirstTracerBuffer = p;
115
    TracerEventsSaved--;
116
 
117
    s++;
118
 
119
  }
120
 
121
  ll_frestore(f);
122
  return s;
123
 
124
}
125
 
352 giacomo 126
void tracer_print_statistics() {
127
 
128
  SYS_FLAGS f;
129
  void *p;
363 giacomo 130
  int i,t,s;
352 giacomo 131
 
362 giacomo 132
  f = ll_fsave();
352 giacomo 133
 
363 giacomo 134
  cprintf("\nStart Tracer Buffer:           %08x\n",(int)StartTracerBuffer);
362 giacomo 135
  cprintf("End Tracer Buffer:             %08x\n",(int)EndTracerBuffer);
136
  cprintf("Current Tracer Buffer:         %08x\n",(int)CurrentTracerBuffer);
137
  cprintf("First Tracer Buffer:           %08x\n",(int)FirstTracerBuffer);
138
  cprintf("Last Before End Tracer Buffer: %08x\n\n",(int)LastBeforeEndTracerBuffer);
352 giacomo 139
 
362 giacomo 140
  cprintf("Total Events: %d\n",(int)TracerEventsRecorded);
364 giacomo 141
  cprintf("Total Saved Events: %d\n",TracerEventsSaved);
352 giacomo 142
 
143
  for (i=0; i<0xFF; i++) {
362 giacomo 144
    p = FirstTracerBuffer;
352 giacomo 145
    t = 0;
363 giacomo 146
    s = 0;
147
    while((p == CurrentTracerBuffer && s == 0) || p != CurrentTracerBuffer) {
148
      s++;
352 giacomo 149
      if (*(BYTE *)p == i) t++;
363 giacomo 150
      p += *(BYTE *)(p + 9);
151
      if (p >= LastBeforeEndTracerBuffer) p = StartTracerBuffer;
352 giacomo 152
    }
153
    if (t != 0)
154
      cprintf("Event type %02x => %d\n",i,t);
155
  }
156
 
157
  ll_frestore(f);
158
 
159
}