1 | /* |
2 | * Copyright (c) 2015-2016 Apple Inc. All rights reserved. |
3 | * |
4 | * @APPLE_APACHE_LICENSE_HEADER_START@ |
5 | * |
6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | * you may not use this file except in compliance with the License. |
8 | * You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, software |
13 | * distributed under the License is distributed on an "AS IS" BASIS, |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | * See the License for the specific language governing permissions and |
16 | * limitations under the License. |
17 | * |
18 | * @APPLE_APACHE_LICENSE_HEADER_END@ |
19 | */ |
20 | |
21 | #ifndef __FIREHOSE_TYPES_PRIVATE__ |
22 | #define __FIREHOSE_TYPES_PRIVATE__ |
23 | |
24 | #include <mach/mach_types.h> |
25 | #include <mach/std_types.h> |
26 | #include <os/base.h> |
27 | |
28 | OS_ASSUME_NONNULL_BEGIN |
29 | |
30 | __BEGIN_DECLS |
31 | |
32 | /*! |
33 | * @enum firehose_activity_flags_t |
34 | * |
35 | * @discussion |
36 | * The lower 8 bits are or-ed in the upper 8 bits of Activity ID and propagated |
37 | * to children activities |
38 | */ |
39 | OS_OPTIONS(firehose_activity_flags, unsigned long, |
40 | firehose_activity_flags_default = 0x0000, |
41 | |
42 | firehose_activity_flags_info_mode = 0x0001, |
43 | firehose_activity_flags_debug_mode = 0x0002, |
44 | firehose_activity_flags_stream_live_mode = 0x0004, |
45 | |
46 | firehose_activity_flags_precise_timestamp = 0x0080, |
47 | ); |
48 | |
49 | /*! |
50 | * @typedef firehose_activity_id_t |
51 | * |
52 | * @abstract |
53 | * Opaque activity identifier. |
54 | * |
55 | * @discussion |
56 | * Scalar value type, not reference counted. |
57 | */ |
58 | typedef uint64_t firehose_activity_id_t; |
59 | #define FIREHOSE_ACTIVITY_ID_NULL ((firehose_activity_id_t)0) |
60 | #define FIREHOSE_ACTIVITY_ID_INVALID ((firehose_activity_id_t)~0ULL) |
61 | #define FIREHOSE_ACTIVITY_ID_FLAGS_SHIFT 56 |
62 | #define FIREHOSE_ACTIVITY_ID_FLAGS(aid) \ |
63 | ((firehose_activity_flags_t)((aid) >> FIREHOSE_ACTIVITY_ID_FLAGS_SHIFT)) |
64 | #define FIREHOSE_ACTIVITY_ID_MERGE_FLAGS(aid, flags) (\ |
65 | ((firehose_activity_id_t)(aid)) | \ |
66 | ((firehose_activity_id_t)(flags) << FIREHOSE_ACTIVITY_ID_FLAGS_SHIFT)) |
67 | |
68 | /*! |
69 | * @enum firehose_stream_t |
70 | */ |
71 | OS_ENUM(firehose_stream, uint8_t, |
72 | firehose_stream_persist = 0, |
73 | firehose_stream_special = 1, |
74 | firehose_stream_memory = 2, |
75 | firehose_stream_metadata = 3, |
76 | firehose_stream_signpost = 4, |
77 | firehose_stream_memory_wifi = 5, |
78 | firehose_stream_memory_baseband = 6, |
79 | |
80 | _firehose_stream_max, |
81 | _firehose_stream_disabled = (uint8_t)-1, |
82 | ); |
83 | |
84 | /*! |
85 | * @enum firehose_tracepoint_namespace_t |
86 | * |
87 | * @abstract |
88 | * Namespaces of tracepoints. |
89 | */ |
90 | OS_ENUM(firehose_tracepoint_namespace, uint8_t, |
91 | firehose_tracepoint_namespace_activity = 0x02, |
92 | firehose_tracepoint_namespace_trace = 0x03, |
93 | firehose_tracepoint_namespace_log = 0x04, |
94 | firehose_tracepoint_namespace_metadata = 0x05, |
95 | firehose_tracepoint_namespace_signpost = 0x06, |
96 | firehose_tracepoint_namespace_loss = 0x07, |
97 | ); |
98 | |
99 | /*! |
100 | * @enum firehose_tracepoint_code_t |
101 | * |
102 | * @abstract |
103 | * Codes of tracepoints. |
104 | */ |
105 | OS_ENUM(firehose_tracepoint_code, uint32_t, |
106 | firehose_tracepoint_code_invalid = 0x00, |
107 | firehose_tracepoint_code_load = 0x01, |
108 | firehose_tracepoint_code_unload = 0x02, |
109 | firehose_tracepoint_code_load_memory = 0x08, |
110 | firehose_tracepoint_code_load_filesystem_ftab = 0x10, |
111 | ); |
112 | |
113 | /*! |
114 | * @typedef firehose_tracepoint_type_t |
115 | * |
116 | * @abstract |
117 | * Type of tracepoints. |
118 | */ |
119 | typedef uint8_t firehose_tracepoint_type_t; |
120 | |
121 | /*! |
122 | * @typedef firehose_tracepoint_flags_t |
123 | * |
124 | * @abstract |
125 | * Flags for tracepoints. |
126 | */ |
127 | OS_OPTIONS(firehose_tracepoint_flags, uint16_t, |
128 | _firehose_tracepoint_flags_base_has_current_aid = 0x0001, |
129 | #define _firehose_tracepoint_flags_pc_style_mask (0x0007 << 1) |
130 | _firehose_tracepoint_flags_pc_style_none = 0x0000 << 1, |
131 | _firehose_tracepoint_flags_pc_style_main_exe = 0x0001 << 1, |
132 | _firehose_tracepoint_flags_pc_style_shared_cache = 0x0002 << 1, |
133 | _firehose_tracepoint_flags_pc_style_main_plugin = 0x0003 << 1, |
134 | _firehose_tracepoint_flags_pc_style_absolute = 0x0004 << 1, |
135 | _firehose_tracepoint_flags_pc_style_uuid_relative = 0x0005 << 1, |
136 | _firehose_tracepoint_flags_pc_style_large_shared_cache = 0x0006 << 1, |
137 | _firehose_tracepoint_flags_pc_style__unused7 = 0x0007 << 1, |
138 | _firehose_tracepoint_flags_base_has_unique_pid = 0x0010, |
139 | _firehose_tracepoint_flags_base_has_large_offset = 0x0020, |
140 | ); |
141 | |
142 | /* |
143 | * Same as _OS_TRACE_DYNAMIC_BIT defined in libtrace/tracepoint_internal.h. |
144 | * This bit is used by logd to know how to evaluate the format |
145 | * string. |
146 | * If it is set, logd assumes that the format is "%s" and the content of the |
147 | * whole string is passed with the firehose_tracepoint. |
148 | * Otherwise it tries to find the unformatted string within the text |
149 | * section of the executable and expects only the content of the variables |
150 | * on the firehose_tracepoint. |
151 | */ |
152 | #define FIREHOSE_TRACEPOINT_PC_DYNAMIC_BIT 0x80000000 |
153 | |
154 | /* |
155 | * Same as KERNEL_MASK defined in logd/logd_main.c |
156 | * It is used by logd to mask the pc before calling |
157 | * OSKextCopyUUIDForAddress. |
158 | */ |
159 | #define FIREHOSE_TRACEPOINT_PC_KERNEL_MASK 0xffff000000000000 |
160 | |
161 | /*! |
162 | * @typedef firehose_tracepoint_id_t |
163 | * |
164 | * @abstract |
165 | * Opaque tracepoint identifier. |
166 | */ |
167 | typedef uint64_t firehose_tracepoint_id_t; |
168 | |
169 | /*! |
170 | * @enum _firehose_tracepoint_type_activity_t |
171 | * |
172 | * @abstract |
173 | * Types of Activity tracepoints (namespace activity). |
174 | */ |
175 | OS_ENUM(_firehose_tracepoint_type_activity, firehose_tracepoint_type_t, |
176 | _firehose_tracepoint_type_activity_create = 0x01, |
177 | _firehose_tracepoint_type_activity_swap = 0x02, |
178 | _firehose_tracepoint_type_activity_useraction = 0x03, |
179 | ); |
180 | |
181 | /*! |
182 | * @enum firehose_tracepoint_flags_activity_t |
183 | * |
184 | * @abstract |
185 | * Flags for Activity tracepoints (namespace activity). |
186 | */ |
187 | OS_OPTIONS(_firehose_tracepoint_flags_activity, uint16_t, |
188 | _firehose_tracepoint_flags_activity_user_interface = 0x0100, |
189 | _firehose_tracepoint_flags_activity_has_other_aid = 0x0200, |
190 | ); |
191 | |
192 | /*! |
193 | * @enum firehose_tracepoint_type_trace_t |
194 | * |
195 | * @abstract |
196 | * Types of trace tracepoints (namespace trace). |
197 | */ |
198 | OS_ENUM(_firehose_tracepoint_type_trace, firehose_tracepoint_type_t, |
199 | _firehose_tracepoint_type_trace_default = 0x00, |
200 | _firehose_tracepoint_type_trace_info = 0x01, |
201 | _firehose_tracepoint_type_trace_debug = 0x02, |
202 | _firehose_tracepoint_type_trace_error = 0x10, |
203 | _firehose_tracepoint_type_trace_fault = 0x11, |
204 | ); |
205 | |
206 | /*! |
207 | * @enum firehose_tracepoint_type_log_t |
208 | * |
209 | * @abstract |
210 | * Types of Log tracepoints (namespace log). |
211 | */ |
212 | OS_ENUM(_firehose_tracepoint_type_log, firehose_tracepoint_type_t, |
213 | _firehose_tracepoint_type_log_default = 0x00, |
214 | _firehose_tracepoint_type_log_info = 0x01, |
215 | _firehose_tracepoint_type_log_debug = 0x02, |
216 | _firehose_tracepoint_type_log_error = 0x10, |
217 | _firehose_tracepoint_type_log_fault = 0x11, |
218 | ); |
219 | |
220 | /*! |
221 | * @enum firehose_tracepoint_flags_log_t |
222 | * |
223 | * @abstract |
224 | * Flags for Log tracepoints (namespace log). |
225 | */ |
226 | OS_OPTIONS(_firehose_tracepoint_flags_log, uint16_t, |
227 | _firehose_tracepoint_flags_log_has_private_data = 0x0100, |
228 | _firehose_tracepoint_flags_log_has_subsystem = 0x0200, |
229 | _firehose_tracepoint_flags_log_has_rules = 0x0400, |
230 | _firehose_tracepoint_flags_log_has_oversize = 0x0800, |
231 | _firehose_tracepoint_flags_log_has_context_data = 0x1000, |
232 | ); |
233 | |
234 | /*! |
235 | * @enum _firehose_tracepoint_type_metadata_t |
236 | * |
237 | * @abstract |
238 | * Types for metadata tracepoints (namespace metadata). |
239 | */ |
240 | OS_ENUM(_firehose_tracepoint_type_metadata, firehose_tracepoint_type_t, |
241 | _firehose_tracepoint_type_metadata_dyld = 0x01, |
242 | _firehose_tracepoint_type_metadata_subsystem = 0x02, |
243 | _firehose_tracepoint_type_metadata_kext = 0x03, |
244 | _firehose_tracepoint_type_metadata_coprocessor = 0x04, |
245 | ); |
246 | |
247 | /*! |
248 | * @enum firehose_tracepoint_type_signpost_t |
249 | * |
250 | * @abstract |
251 | * Types of Log tracepoints (namespace signpost). |
252 | */ |
253 | OS_ENUM(_firehose_tracepoint_type_signpost, firehose_tracepoint_type_t, |
254 | _firehose_tracepoint_type_signpost_event = 0x00, |
255 | _firehose_tracepoint_type_signpost_interval_begin = 0x01, |
256 | _firehose_tracepoint_type_signpost_interval_end = 0x02, |
257 | |
258 | _firehose_tracepoint_type_signpost_scope_mask = 0xc0, |
259 | _firehose_tracepoint_type_signpost_scope_thread = 0x40, |
260 | _firehose_tracepoint_type_signpost_scope_process = 0x80, |
261 | _firehose_tracepoint_type_signpost_scope_system = 0xc0, |
262 | ); |
263 | |
264 | /*! |
265 | * @enum firehose_tracepoint_flags_signpost_t |
266 | * |
267 | * @abstract |
268 | * Flags for Log tracepoints (namespace signpost). |
269 | * |
270 | * When flags are shared with the log type, they should have the same values. |
271 | */ |
272 | OS_OPTIONS(_firehose_tracepoint_flags_signpost, uint16_t, |
273 | // shared with log |
274 | _firehose_tracepoint_flags_signpost_has_private_data = 0x0100, |
275 | _firehose_tracepoint_flags_signpost_has_subsystem = 0x0200, |
276 | _firehose_tracepoint_flags_signpost_has_rules = 0x0400, |
277 | _firehose_tracepoint_flags_signpost_has_oversize = 0x0800, |
278 | _firehose_tracepoint_flags_signpost_has_context_data = 0x1000, |
279 | |
280 | // specific to signpost |
281 | _firehose_tracepoint_flags_signpost_has_name = 0x8000, |
282 | ); |
283 | |
284 | /* MIG firehose push reply structure */ |
285 | typedef struct firehose_push_reply_s { |
286 | uint64_t fpr_mem_flushed_pos; |
287 | uint64_t fpr_io_flushed_pos; |
288 | } firehose_push_reply_t; |
289 | |
290 | typedef struct firehose_buffer_map_info_s { |
291 | mach_vm_address_t fbmi_addr; |
292 | mach_vm_size_t fbmi_size; |
293 | } firehose_buffer_map_info_t; |
294 | |
295 | #define FIREHOSE_PUSH_REPLY_CORRUPTED ((firehose_push_reply_t){ ~0ULL, ~0ULL }) |
296 | |
297 | typedef union firehose_buffer_u *firehose_buffer_t; |
298 | |
299 | __END_DECLS |
300 | |
301 | OS_ASSUME_NONNULL_END |
302 | |
303 | #endif // __FIREHOSE_TYPES_PRIVATE__ |
304 | |