profileio.h revision 1.2 1 1.2 dholland /* $NetBSD: profileio.h,v 1.2 2015/09/07 03:49:45 dholland Exp $ */
2 1.1 thorpej
3 1.1 thorpej /*
4 1.1 thorpej * Copyright 1997
5 1.1 thorpej * Digital Equipment Corporation. All rights reserved.
6 1.1 thorpej *
7 1.1 thorpej * This software is furnished under license and may be used and
8 1.1 thorpej * copied only in accordance with the following terms and conditions.
9 1.1 thorpej * Subject to these conditions, you may download, copy, install,
10 1.1 thorpej * use, modify and distribute this software in source and/or binary
11 1.1 thorpej * form. No title or ownership is transferred hereby.
12 1.1 thorpej *
13 1.1 thorpej * 1) Any source code used, modified or distributed must reproduce
14 1.1 thorpej * and retain this copyright notice and list of conditions as
15 1.1 thorpej * they appear in the source file.
16 1.1 thorpej *
17 1.1 thorpej * 2) No right is granted to use any trade name, trademark, or logo of
18 1.1 thorpej * Digital Equipment Corporation. Neither the "Digital Equipment
19 1.1 thorpej * Corporation" name nor any trademark or logo of Digital Equipment
20 1.1 thorpej * Corporation may be used to endorse or promote products derived
21 1.1 thorpej * from this software without the prior written permission of
22 1.1 thorpej * Digital Equipment Corporation.
23 1.1 thorpej *
24 1.1 thorpej * 3) This software is provided "AS-IS" and any express or implied
25 1.1 thorpej * warranties, including but not limited to, any implied warranties
26 1.1 thorpej * of merchantability, fitness for a particular purpose, or
27 1.1 thorpej * non-infringement are disclaimed. In no event shall DIGITAL be
28 1.1 thorpej * liable for any damages whatsoever, and in particular, DIGITAL
29 1.1 thorpej * shall not be liable for special, indirect, consequential, or
30 1.1 thorpej * incidental damages or damages for lost profits, loss of
31 1.1 thorpej * revenue or loss of use, whether such damages arise in contract,
32 1.1 thorpej * negligence, tort, under statute, in equity, at law or otherwise,
33 1.1 thorpej * even if advised of the possibility of such damage.
34 1.1 thorpej */
35 1.1 thorpej
36 1.1 thorpej /*
37 1.1 thorpej * Remote profiler structures used to communicate between the
38 1.1 thorpej * target (SHARK) and the host (GUI'd) machine.
39 1.1 thorpej * Also has stuff used to talk between the profiling driver and
40 1.1 thorpej * profiling server function.
41 1.1 thorpej *
42 1.1 thorpej */
43 1.1 thorpej
44 1.1 thorpej #ifndef __PROFILE_IO_H__
45 1.1 thorpej #define __PROFILE_IO_H__
46 1.1 thorpej
47 1.1 thorpej #include <sys/types.h>
48 1.2 dholland #include <sys/ioccom.h>
49 1.1 thorpej
50 1.1 thorpej /* I have no idea what the 'P' group id means,
51 1.1 thorpej * I presume it isn't used for much.??
52 1.1 thorpej */
53 1.1 thorpej #define PROFIOSTART _IOWR('P', 0, struct profStartInfo) /* start profiling */
54 1.1 thorpej #define PROFIOSTOP _IO('P', 1) /* stop profiling */
55 1.1 thorpej
56 1.1 thorpej /* hash table stuff.
57 1.1 thorpej */
58 1.1 thorpej #define TABLE_ENTRY_SIZE (sizeof(struct hashEntry))
59 1.1 thorpej #define REDUNDANT_BITS 0x02
60 1.1 thorpej #define COUNT_BITS 0x02
61 1.1 thorpej #define COUNT_BIT_MASK 0x03
62 1.1 thorpej
63 1.1 thorpej /* sample mode flags.
64 1.1 thorpej */
65 1.1 thorpej #define SAMPLE_MODE_MASK 0x03
66 1.1 thorpej #define SAMPLE_PROC 0x01
67 1.1 thorpej #define SAMPLE_KERN 0x02
68 1.1 thorpej
69 1.1 thorpej /* an actual entry
70 1.1 thorpej */
71 1.1 thorpej struct profHashEntry
72 1.1 thorpej {
73 1.1 thorpej unsigned int pc; /* the pc, minus any redundant bits. */
74 1.1 thorpej unsigned int next; /* the next pointer as an entry index */
75 1.1 thorpej unsigned short counts[4]; /* the counts */
76 1.1 thorpej };
77 1.1 thorpej
78 1.1 thorpej /* table header.
79 1.1 thorpej */
80 1.1 thorpej struct profHashHeader
81 1.1 thorpej {
82 1.1 thorpej unsigned int tableSize; /* total table size in entries */
83 1.1 thorpej unsigned int entries; /* first level table size, in entries */
84 1.1 thorpej unsigned int samples; /* the number of samples in the table. */
85 1.1 thorpej unsigned int missed; /* the number of samples missed. */
86 1.1 thorpej unsigned int fiqs; /* the number of fiqs. */
87 1.1 thorpej unsigned int last; /* last entry in the overflow area */
88 1.1 thorpej pid_t pid; /* The pid being sampled */
89 1.1 thorpej int mode; /* kernel or user mode */
90 1.1 thorpej }
91 1.1 thorpej __attribute__ ((packed));
92 1.1 thorpej
93 1.1 thorpej /* actual table
94 1.1 thorpej */
95 1.1 thorpej struct profHashTable
96 1.1 thorpej {
97 1.1 thorpej struct profHashHeader hdr;
98 1.1 thorpej struct profHashEntry *entries;
99 1.1 thorpej };
100 1.1 thorpej
101 1.1 thorpej /* information passed to the start/stop ioctl.
102 1.1 thorpej */
103 1.1 thorpej struct profStartInfo
104 1.1 thorpej {
105 1.1 thorpej pid_t pid; /* if this is -1 sample no processes */
106 1.1 thorpej unsigned int tableSize; /* the total table size in entries */
107 1.1 thorpej unsigned int entries; /* number of entries to hash */
108 1.1 thorpej unsigned int mode; /* if set profile the kernel */
109 1.1 thorpej int status; /* status of command returned by driver. */
110 1.1 thorpej };
111 1.1 thorpej
112 1.1 thorpej
113 1.1 thorpej /* Communications Protocol stuff
114 1.1 thorpej * defines the messages that the host and
115 1.1 thorpej * target will use to communicate.
116 1.1 thorpej */
117 1.1 thorpej
118 1.1 thorpej struct packetHeader
119 1.1 thorpej {
120 1.1 thorpej int code; /* this will either be a command or a
121 1.1 thorpej * data specifier.
122 1.1 thorpej */
123 1.1 thorpej unsigned int size; /* size of data to follow,
124 1.1 thorpej * quantity depends on code.
125 1.1 thorpej */
126 1.1 thorpej }
127 1.1 thorpej __attribute__ ((packed));
128 1.1 thorpej
129 1.1 thorpej struct startSamplingCommand
130 1.1 thorpej {
131 1.1 thorpej pid_t pid; /* the pid to sample */
132 1.1 thorpej unsigned int tableSize; /* the total table size in entries */
133 1.1 thorpej unsigned int entries; /* number of entries to hash */
134 1.1 thorpej unsigned int mode; /* if set profile kernel also. */
135 1.1 thorpej }
136 1.1 thorpej __attribute__ ((packed));
137 1.1 thorpej
138 1.1 thorpej struct startSamplingResponse
139 1.1 thorpej {
140 1.1 thorpej int status; /* identifies the status of the command. */
141 1.1 thorpej int count; /* number of shared lib entries following. */
142 1.1 thorpej }
143 1.1 thorpej __attribute__ ((packed));
144 1.1 thorpej
145 1.1 thorpej struct stopSamplingCommand
146 1.1 thorpej {
147 1.1 thorpej int alert; /* if set then the daemon sends a SIGINT to
148 1.1 thorpej * the process.
149 1.1 thorpej */
150 1.1 thorpej }
151 1.1 thorpej __attribute__ ((packed));
152 1.1 thorpej
153 1.1 thorpej struct disassemble
154 1.1 thorpej {
155 1.1 thorpej unsigned int offset; /* offset into file to begin disassembling */
156 1.1 thorpej unsigned int length; /* length in arm words ie 32bits. */
157 1.1 thorpej }
158 1.1 thorpej __attribute__ ((packed));
159 1.1 thorpej
160 1.1 thorpej struct profStatus
161 1.1 thorpej {
162 1.1 thorpej unsigned int status; /* identifies the status. */
163 1.1 thorpej }
164 1.1 thorpej __attribute__ ((packed));
165 1.1 thorpej
166 1.1 thorpej
167 1.1 thorpej /* Command/Data Types
168 1.1 thorpej * Only one bit may be set for any one command.
169 1.1 thorpej * so these are not masks but distinct values.
170 1.1 thorpej */
171 1.1 thorpej #define START_SAMPLING 0x01
172 1.1 thorpej #define STOP_SAMPLING 0x02
173 1.1 thorpej #define READ_TABLE 0x03
174 1.1 thorpej #define DISASSEMBLY 0x04
175 1.1 thorpej #define SYMBOL_INFO 0x05
176 1.1 thorpej #define PROCESS_INFO 0x06
177 1.1 thorpej
178 1.1 thorpej /* Data Types */
179 1.1 thorpej #define TABLE_DATA 0x07
180 1.1 thorpej #define SYMBOL_DATA 0x08
181 1.1 thorpej #define DISAS_DATA 0x09
182 1.1 thorpej #define PROC_DATA 0x0a
183 1.1 thorpej #define STATUS_DATA 0x0b
184 1.1 thorpej #define START_DATA 0x0c
185 1.1 thorpej
186 1.1 thorpej /* Status Codes */
187 1.1 thorpej #define CMD_OK 0x00
188 1.1 thorpej #define ALREADY_SAMPLING 0x01
189 1.1 thorpej #define NOT_SAMPLING 0x02
190 1.1 thorpej #define NO_MEMORY 0x03
191 1.1 thorpej #define BAD_TABLE_SIZE 0x04
192 1.1 thorpej #define ILLEGAL_PACKET 0x05
193 1.1 thorpej #define ILLEGAL_COMMAND 0x06
194 1.1 thorpej #define BAD_OPTION 0x07
195 1.1 thorpej
196 1.1 thorpej #endif
197