Subversion Repositories shark

Rev

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