lttv and lib ltt new compiles
[lttv.git] / ltt / branches / poly / ltt / ltt-private.h
CommitLineData
449cb9d7 1/* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Xiangxiu Yang
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
16 * MA 02111-1307, USA.
17 */
18
fcdf0ec2 19#ifndef LTT_PRIVATE_H
20#define LTT_PRIVATE_H
21
858bd80a 22#include <glib.h>
cbd41522 23#include <sys/types.h>
fcdf0ec2 24#include <ltt/ltt.h>
e3247aa5 25
eed2ef37 26
27#ifndef max
28#define max(a,b) ((a)>(b)?(a):(b))
29#endif
30
31
3aee1200 32#define LTT_MAGIC_NUMBER 0x00D6B7ED
33#define LTT_REV_MAGIC_NUMBER 0xEDB7D600
34
35#define NSEC_PER_USEC 1000
36
cbd41522 37#define LTT_PACKED_STRUCT __attribute__ ((packed))
38
3aee1200 39/* Hardcoded facilities */
40#define LTT_FACILITY_CORE 0
41
42/* Hardcoded core events */
43enum ltt_core_events {
44 LTT_EVENT_FACILITY_LOAD,
45 LTT_EVENT_FACILITY_UNLOAD,
46 LTT_EVENT_STATE_DUMP_FACILITY_LOAD,
47 LTT_EVENT_HEARTBEAT
48};
49
50
51#if 0
e3247aa5 52/* enumeration definition */
53
54typedef enum _BuildinEvent{
55 TRACE_FACILITY_LOAD = 0,
56 TRACE_BLOCK_START = 17,
57 TRACE_BLOCK_END = 18,
0d7aac52 58 TRACE_TIME_HEARTBEAT= 19
e3247aa5 59} BuildinEvent;
fcdf0ec2 60
7c6b3cd7 61
62/* structure definition */
63
e3247aa5 64typedef struct _FacilityLoad{
45e14832 65 gchar * name;
e3247aa5 66 LttChecksum checksum;
cbd41522 67 guint32 base_code;
e3247aa5 68} LTT_PACKED_STRUCT FacilityLoad;
69
70typedef struct _BlockStart {
3aee1200 71 LttTime time; //Time stamp of this block
e3247aa5 72 LttCycleCount cycle_count; //cycle count of the event
cbd41522 73 guint32 block_id; //block id
e3247aa5 74} LTT_PACKED_STRUCT BlockStart;
75
76typedef struct _BlockEnd {
3aee1200 77 LttTime time; //Time stamp of this block
e3247aa5 78 LttCycleCount cycle_count; //cycle count of the event
cbd41522 79 guint32 block_id; //block id
e3247aa5 80} LTT_PACKED_STRUCT BlockEnd;
3aee1200 81#endif //0
82
83
84typedef guint8 uint8_t;
85typedef guint16 uint16_t;
86typedef guint32 uint32_t;
87typedef guint64 uint64_t;
88
89/* Hardcoded facility load event : this plus an following "name" string */
90struct LttFacilityLoad {
91 guint32 checksum;
92 guint32 id;
93 guint32 long_size;
94 guint32 pointer_size;
95 guint32 size_t_size;
96 guint32 alignment;
97};
98
99struct LttFacilityUnload {
100 guint32 id;
101};
102
103struct LttStateDumpFacilityLoad {
104 guint32 checksum;
105 guint32 id;
106 guint32 long_size;
107 guint32 pointer_size;
108 guint32 size_t_size;
109 guint32 alignment;
110};
111
112
e3247aa5 113
114typedef struct _TimeHeartbeat {
3aee1200 115 LttTime time; //Time stamp of this block
116 uint64_t cycle_count; //cycle count of the event
e3247aa5 117} LTT_PACKED_STRUCT TimeHeartbeat;
118
3aee1200 119struct ltt_event_header_hb {
120 uint32_t timestamp;
121 unsigned char facility_id;
122 unsigned char event_id;
123 uint16_t event_size;
124} __attribute((aligned(8)));
125
126struct ltt_event_header_nohb {
127 uint64_t timestamp;
128 unsigned char facility_id;
129 unsigned char event_id;
130 uint16_t event_size;
131} __attribute((aligned(8)));
132
133struct ltt_trace_header {
134 uint32_t magic_number;
135 uint32_t arch_type;
136 uint32_t arch_variant;
137 uint8_t arch_size;
138 //uint32_t system_type;
139 uint8_t major_version;
140 uint8_t minor_version;
141 uint8_t flight_recorder;
142 uint8_t has_heartbeat;
143 uint8_t has_alignment; /* Event header alignment */
144 uint8_t has_tsc;
145} __attribute((aligned(8)));
146
147
148struct ltt_block_start_header {
149 struct {
150 struct timeval timestamp;
151 uint64_t cycle_count;
152 } begin;
153 struct {
154 struct timeval timestamp;
155 uint64_t cycle_count;
156 } end;
157 uint32_t lost_size; /* Size unused at the end of the buffer */
158 uint32_t buf_size; /* The size of this sub-buffer */
159 struct ltt_trace_header trace;
160} __attribute((aligned(8)));
161
e3247aa5 162
163struct _LttType{
3aee1200 164 GQuark type_name; //type name if it is a named type
165 GQuark element_name; //elements name of the struct
45e14832 166 gchar * fmt;
8d1e6362 167 unsigned int size;
e3247aa5 168 LttTypeEnum type_class; //which type
3aee1200 169 GQuark * enum_strings; //for enum labels
e3247aa5 170 struct _LttType ** element_type; //for array, sequence and struct
171 unsigned element_number; //the number of elements
172 //for enum, array, sequence and structure
7c6b3cd7 173};
174
e3247aa5 175struct _LttEventType{
3aee1200 176 GQuark name;
45e14832 177 gchar * description;
3aee1200 178 guint index; //id of the event type within the facility
e3247aa5 179 LttFacility * facility; //the facility that contains the event type
180 LttField * root_field; //root field
7c6b3cd7 181};
182
3aee1200 183/* Structure LttEvent and LttEventPosition must begin with the _exact_ same
184 * fields in the exact same order. LttEventPosition is a parent of LttEvent. */
c02ea99f 185struct _LttEvent{
3aee1200 186
187 /* Begin of LttEventPosition fields */
188 LttTracefile *tracefile;
189 unsigned int block;
eed2ef37 190 unsigned int offset;
3aee1200 191
192 /* Timekeeping */
193 uint64_t tsc; /* Current timestamp counter */
194
195 /* End of LttEventPosition fields */
196
197 union { /* choice by trace has_tsc */
198 guint32 timestamp; /* truncated timestamp */
199 LttTime delta;
200 } time;
201
202 unsigned char facility_id; /* facility ID are never reused. */
203 unsigned char event_id;
204
c02ea99f 205 LttTime event_time;
3aee1200 206
c02ea99f 207 void * data; //event data
77175651 208 guint data_size;
3aee1200 209
c02ea99f 210 int count; //the number of overflow of cycle count
2dee981d 211 gint64 overflow_nsec; //precalculated nsec for overflows
3aee1200 212};
dfb73233 213
3aee1200 214struct _LttEventPosition{
215 LttTracefile *tracefile;
216 unsigned int block;
eed2ef37 217 unsigned int offset;
3aee1200 218
219 /* Timekeeping */
220 uint64_t tsc; /* Current timestamp counter */
c02ea99f 221};
222
223
3aee1200 224enum field_status { FIELD_UNKNOWN, FIELD_VARIABLE, FIELD_FIXED };
225
e3247aa5 226struct _LttField{
3aee1200 227 //guint field_pos; //field position within its parent
e3247aa5 228 LttType * field_type; //field type, if it is root field
7c6b3cd7 229 //then it must be struct type
230
231 off_t offset_root; //offset from the root, -1:uninitialized
3aee1200 232 enum field_status fixed_root; //offset fixed according to the root
7c6b3cd7 233 //-1:uninitialized, 0:unfixed, 1:fixed
234 off_t offset_parent; //offset from the parent,-1:uninitialized
3aee1200 235 enum field_status fixed_parent; //offset fixed according to its parent
7c6b3cd7 236 //-1:uninitialized, 0:unfixed, 1:fixed
237 // void * base_address; //base address of the field ????
238
3aee1200 239 guint field_size; // //>0: size of the field,
240 // //0 : uncertain
241 // //-1: uninitialize
242 enum field_status fixed_size;
243
244 /* for sequence */
245 gint sequ_number_size; //the size of unsigned used to save the
0d7aac52 246 //number of elements in the sequence
247
3aee1200 248 gint element_size; //the element size of the sequence
249 //int field_fixed; //0: field has string or sequence
7c6b3cd7 250 //1: field has no string or sequenc
251 //-1: uninitialize
252
e3247aa5 253 struct _LttField * parent;
3aee1200 254 struct _LttField ** child; //for array, sequence, struct and union:
7c6b3cd7 255 //list of fields, it may have only one
3aee1200 256 //field if the element is not a struct or
257 //union
7c6b3cd7 258 unsigned current_element; //which element is currently processed
3aee1200 259 // Used for sequences and arrays.
7c6b3cd7 260};
261
7c6b3cd7 262
e3247aa5 263struct _LttFacility{
3aee1200 264 LttTrace *trace;
265 //gchar * name; //facility name
266 GQuark name;
267 guint32 checksum; //checksum of the facility
268 guint32 id; //id of the facility
269
270 guint32 pointer_size;
271 guint32 size_t_size;
272 guint32 alignment;
273
274
275 //LttEventType ** events; //array of event types
276 //unsigned int event_number; //number of events in the facility
277 //LttType ** named_types;
278 //unsigned int named_types_number;
279
280 GArray *events;
281 GData *events_by_name;
282 // GArray *named_types;
283 //GData *named_types_by_name;
284 GData *named_types;
285
286 unsigned char exists; /* 0 does not exist, 1 exists */
7c6b3cd7 287};
288
3aee1200 289typedef struct _LttBuffer {
290 void * head;
291 unsigned int index;
292
293 struct {
294 LttTime timestamp;
295 uint64_t cycle_count;
296 } begin;
297 struct {
298 LttTime timestamp;
299 uint64_t cycle_count;
300 } end;
301 uint32_t lost_size; /* Size unused at the end of the buffer */
302
303 /* Timekeeping */
304 uint64_t tsc; /* Current timestamp counter */
305 double nsecs_per_cycle;
306} LttBuffer;
307
e3247aa5 308struct _LttTracefile{
3aee1200 309 gboolean cpu_online; //is the cpu online ?
310 GQuark name; //tracefile name
311 guint cpu_num; //cpu number of the tracefile
e3247aa5 312 LttTrace * trace; //trace containing the tracefile
313 int fd; //file descriptor
314 off_t file_size; //file size
315 unsigned block_size; //block_size
3aee1200 316 unsigned int num_blocks; //number of blocks in the file
317 gboolean reverse_bo; //must we reverse byte order ?
318
319 /* Current event */
320 LttEvent event; //Event currently accessible in the trace
321
322 /* Current block */
323 LttBuffer buffer; //current buffer
324 guint32 buf_size; /* The size of blocks */
325
326 /* Time flow */
327 //unsigned int count; //the number of overflow of cycle count
328 //double nsec_per_cycle; //Nsec per cycle
329 //TimeHeartbeat * last_heartbeat; //last heartbeat
330
887208b7 331 //LttCycleCount cycles_per_nsec_reciprocal; // Optimisation for speed
3aee1200 332 //void * last_event_pos;
7c6b3cd7 333
3aee1200 334 //LttTime prev_block_end_time; //the end time of previous block
335 //LttTime prev_event_time; //the time of the previous event
336 //LttCycleCount pre_cycle_count; //previous cycle count of the event
e3247aa5 337};
7c6b3cd7 338
3aee1200 339struct _LttTrace{
340 GQuark pathname; //the pathname of the trace
341 //LttSystemDescription * system_description;//system description
342
343 GArray *facilities_by_num; /* fac_id as index in array */
344 GData *facilities_by_name; /* fac name (GQuark) as index */
345 /* Points to array of fac_id of all the
346 * facilities that has this name. */
347
348 guint8 ltt_major_version;
349 guint8 ltt_minor_version;
350 guint8 flight_recorder;
351 guint8 has_heartbeat;
352 // guint8 alignment;
353 guint8 has_tsc;
354
355 GData *tracefiles; //tracefiles groups
80da81ad 356};
7c6b3cd7 357
a5dcde2f 358/* The characteristics of the system on which the trace was obtained
359 is described in a LttSystemDescription structure. */
360
361struct _LttSystemDescription {
45e14832 362 gchar *description;
363 gchar *node_name;
364 gchar *domain_name;
a5dcde2f 365 unsigned nb_cpu;
366 LttArchSize size;
367 LttArchEndian endian;
45e14832 368 gchar *kernel_name;
369 gchar *kernel_release;
370 gchar *kernel_version;
371 gchar *machine;
372 gchar *processor;
373 gchar *hardware_platform;
374 gchar *operating_system;
a5dcde2f 375 LttTime trace_start;
376 LttTime trace_end;
377};
378
7c6b3cd7 379/*****************************************************************************
380 macro for size of some data types
381 *****************************************************************************/
3aee1200 382// alignment -> dynamic!
383
384//#define TIMESTAMP_SIZE sizeof(guint32)
385//#define EVENT_ID_SIZE sizeof(guint16)
386//#define EVENT_HEADER_SIZE (TIMESTAMP_SIZE + EVENT_ID_SIZE)
387
388#define LTT_GET_BO(t) ((t)->reverse_bo)
7c6b3cd7 389
390
fcdf0ec2 391#endif /* LTT_PRIVATE_H */
This page took 0.049138 seconds and 4 git commands to generate.