]> git.saurik.com Git - apple/xnu.git/blob - libkern/firehose/firehose_types_private.h
785ac177debbf46a50ff1ed3d0f4358b4e4f4b14
[apple/xnu.git] / libkern / firehose / firehose_types_private.h
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_ENUM(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_memory_high_traffic = 4,
77 firehose_stream_memory_wifi = 5,
78 firehose_stream_memory_baseband = 6,
79
80 _firehose_stream_max,
81 );
82
83 /*!
84 * @enum firehose_tracepoint_namespace_t
85 *
86 * @abstract
87 * Namespaces of tracepoints.
88 */
89 OS_ENUM(firehose_tracepoint_namespace, uint8_t,
90 firehose_tracepoint_namespace_activity = 0x02,
91 firehose_tracepoint_namespace_trace = 0x03,
92 firehose_tracepoint_namespace_log = 0x04,
93 firehose_tracepoint_namespace_metadata = 0x05,
94 );
95
96 /*!
97 * @enum firehose_tracepoint_code_t
98 *
99 * @abstract
100 * Codes of tracepoints.
101 */
102 OS_ENUM(firehose_tracepoint_code, uint32_t,
103 firehose_tracepoint_code_load = 0x01,
104 firehose_tracepoint_code_unload = 0x02,
105 );
106
107 /*!
108 * @typedef firehose_tracepoint_type_t
109 *
110 * @abstract
111 * Type of tracepoints.
112 */
113 typedef uint8_t firehose_tracepoint_type_t;
114
115 /*!
116 * @typedef firehose_tracepoint_flags_t
117 *
118 * @abstract
119 * Flags for tracepoints.
120 */
121 OS_ENUM(firehose_tracepoint_flags, uint16_t,
122 _firehose_tracepoint_flags_base_has_current_aid = 0x0001,
123 #define _firehose_tracepoint_flags_pc_style_mask (0x0007 << 1)
124 _firehose_tracepoint_flags_pc_style_none = 0x0000 << 1,
125 _firehose_tracepoint_flags_pc_style_main_exe = 0x0001 << 1,
126 _firehose_tracepoint_flags_pc_style_shared_cache = 0x0002 << 1,
127 _firehose_tracepoint_flags_pc_style_main_plugin = 0x0003 << 1,
128 _firehose_tracepoint_flags_pc_style_absolute = 0x0004 << 1,
129 _firehose_tracepoint_flags_pc_style_uuid_relative = 0x0005 << 1,
130 _firehose_tracepoint_flags_pc_style__unused6 = 0x0006 << 1,
131 _firehose_tracepoint_flags_pc_style__unused7 = 0x0007 << 1,
132 _firehose_tracepoint_flags_base_has_unique_pid = 0x0010,
133
134 _firehose_tracepoint_flags_base_main_executable __deprecated =
135 _firehose_tracepoint_flags_pc_style_main_exe,
136 _firehose_tracepoint_flags_base_shared_cache __deprecated =
137 _firehose_tracepoint_flags_pc_style_shared_cache,
138 _firehose_tracepoint_flags_base_caller_pc __deprecated =
139 _firehose_tracepoint_flags_pc_style_absolute,
140 );
141
142 /*!
143 * @typedef firehose_tracepoint_id_t
144 *
145 * @abstract
146 * Opaque tracepoint identifier.
147 */
148 typedef uint64_t firehose_tracepoint_id_t;
149
150 /*!
151 * @enum _firehose_tracepoint_type_activity_t
152 *
153 * @abstract
154 * Types of Activity tracepoints (namespace activity).
155 */
156 OS_ENUM(_firehose_tracepoint_type_activity, firehose_tracepoint_type_t,
157 _firehose_tracepoint_type_activity_create = 0x01,
158 _firehose_tracepoint_type_activity_swap = 0x02,
159 _firehose_tracepoint_type_activity_useraction = 0x03,
160 );
161
162 /*!
163 * @enum firehose_tracepoint_flags_activity_t
164 *
165 * @abstract
166 * Flags for Activity tracepoints (namespace activity).
167 */
168 OS_ENUM(_firehose_tracepoint_flags_activity, uint16_t,
169 _firehose_tracepoint_flags_activity_user_interface = 0x0100,
170 _firehose_tracepoint_flags_activity_has_other_aid = 0x0200,
171 );
172
173 /*!
174 * @enum firehose_tracepoint_type_trace_t
175 *
176 * @abstract
177 * Types of trace tracepoints (namespace trace).
178 */
179 OS_ENUM(_firehose_tracepoint_type_trace, firehose_tracepoint_type_t,
180 _firehose_tracepoint_type_trace_default = 0x00,
181 _firehose_tracepoint_type_trace_info = 0x01,
182 _firehose_tracepoint_type_trace_debug = 0x02,
183 _firehose_tracepoint_type_trace_error = 0x10,
184 _firehose_tracepoint_type_trace_fault = 0x11,
185 );
186
187 /*!
188 * @enum firehose_tracepoint_type_log_t
189 *
190 * @abstract
191 * Types of Log tracepoints (namespace log).
192 */
193 OS_ENUM(_firehose_tracepoint_type_log, firehose_tracepoint_type_t,
194 _firehose_tracepoint_type_log_default = 0x00,
195 _firehose_tracepoint_type_log_info = 0x01,
196 _firehose_tracepoint_type_log_debug = 0x02,
197 _firehose_tracepoint_type_log_error = 0x10,
198 _firehose_tracepoint_type_log_fault = 0x11,
199 );
200
201 /*!
202 * @enum firehose_tracepoint_flags_log_t
203 *
204 * @abstract
205 * Flags for Log tracepoints (namespace log).
206 */
207 OS_ENUM(_firehose_tracepoint_flags_log, uint16_t,
208 _firehose_tracepoint_flags_log_has_private_data = 0x0100,
209 _firehose_tracepoint_flags_log_has_subsystem = 0x0200,
210 _firehose_tracepoint_flags_log_has_rules = 0x0400,
211 _firehose_tracepoint_flags_log_has_oversize = 0x0800,
212 );
213
214 /*!
215 * @enum _firehose_tracepoint_type_metadata_t
216 *
217 * @abstract
218 * Types for metadata tracepoints (namespace metadata).
219 */
220 OS_ENUM(_firehose_tracepoint_type_metadata, firehose_tracepoint_type_t,
221 _firehose_tracepoint_type_metadata_dyld = 0x01,
222 _firehose_tracepoint_type_metadata_subsystem = 0x02,
223 _firehose_tracepoint_type_metadata_kext = 0x03,
224 );
225
226 /* MIG firehose push reply structure */
227 typedef struct firehose_push_reply_s {
228 uint64_t fpr_mem_flushed_pos;
229 uint64_t fpr_io_flushed_pos;
230 } firehose_push_reply_t;
231
232 typedef struct firehose_buffer_map_info_s {
233 mach_vm_address_t fbmi_addr;
234 mach_vm_size_t fbmi_size;
235 } firehose_buffer_map_info_t;
236
237 #define FIREHOSE_PUSH_REPLY_CORRUPTED ((firehose_push_reply_t){ ~0ULL, ~0ULL })
238
239 typedef union firehose_buffer_u *firehose_buffer_t;
240
241 __END_DECLS
242
243 OS_ASSUME_NONNULL_END
244
245 #endif // __FIREHOSE_TYPES_PRIVATE__