]> git.sur5r.net Git - freertos/blob
481798e4aca59ba1b2a4a8d37b2208194c69b0a2
[freertos] /
1 // $Id: profile.h,v 1.1.2.2 2011/05/30 06:46:18 svemula Exp $
2 /******************************************************************************
3 *
4 * Copyright (C) 2002 - 2014 Xilinx, Inc.  All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * Use of the Software is limited solely to applications:
17 * (a) running on a Xilinx device, or
18 * (b) that interact with a Xilinx device through a bus or interconnect.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
25 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 * SOFTWARE.
27 *
28 * Except as contained in this notice, the name of the Xilinx shall not be used
29 * in advertising or otherwise to promote the sale, use or other dealings in
30 * this Software without prior written authorization from Xilinx.
31 *
32 ******************************************************************************/
33
34 #ifndef _PROFILE_H
35 #define _PROFILE_H      1
36
37 #include <stdio.h>
38 #include "profile_config.h"
39
40 #ifdef PROC_MICROBLAZE
41 #include "mblaze_nt_types.h"
42 #endif
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48 void _system_init( void ) ;
49 void _system_clean( void ) ;
50 void mcount(unsigned long frompc, unsigned long selfpc);
51 void profile_intr_handler( void ) ;
52
53
54
55 /****************************************************************************
56  * Profiling on hardware - Hash table maintained on hardware and data sent
57  * to xmd for gmon.out generation.
58  ****************************************************************************/
59 /*
60  * histogram counters are unsigned shorts (according to the kernel).
61  */
62 #define HISTCOUNTER     unsigned short
63
64 struct tostruct {
65         unsigned long  selfpc;
66         long           count;
67         short          link;
68         unsigned short pad;
69 };
70
71 struct fromstruct {
72         unsigned long frompc ;
73         short link ;
74         unsigned short pad ;
75 } ;
76
77 /*
78  * general rounding functions.
79  */
80 #define ROUNDDOWN(x,y)  (((x)/(y))*(y))
81 #define ROUNDUP(x,y)    ((((x)+(y)-1)/(y))*(y))
82
83 /*
84  * The profiling data structures are housed in this structure.
85  */
86 struct gmonparam {
87         long int                state;
88
89         // Histogram Information
90         unsigned short          *kcount;        /* No. of bins in histogram */
91         unsigned long           kcountsize;     /* Histogram samples */
92
93         // Call-graph Information
94         struct fromstruct       *froms;
95         unsigned long           fromssize;
96         struct tostruct         *tos;
97         unsigned long           tossize;
98
99         // Initialization I/Ps
100         unsigned long           lowpc;
101         unsigned long           highpc;
102         unsigned long           textsize;
103         //unsigned long                 cg_froms;
104         //unsigned long                 cg_tos;
105 };
106 extern struct gmonparam *_gmonparam;
107 extern int n_gmon_sections;
108
109 /*
110  * Possible states of profiling.
111  */
112 #define GMON_PROF_ON    0
113 #define GMON_PROF_BUSY  1
114 #define GMON_PROF_ERROR 2
115 #define GMON_PROF_OFF   3
116
117 /*
118  * Sysctl definitions for extracting profiling information from the kernel.
119  */
120 #define GPROF_STATE     0       /* int: profiling enabling variable */
121 #define GPROF_COUNT     1       /* struct: profile tick count buffer */
122 #define GPROF_FROMS     2       /* struct: from location hash bucket */
123 #define GPROF_TOS       3       /* struct: destination/count structure */
124 #define GPROF_GMONPARAM 4       /* struct: profiling parameters (see above) */
125
126 #ifdef __cplusplus
127 }
128 #endif
129
130 #endif          /* _PROFILE_H */
131
132
133
134
135
136
137
138
139
140
141
142