1#![allow(non_camel_case_types)]
6#![deny(warnings)]
7
8use std::{cmp, fmt};
9
10pub type zx_addr_t = usize;
11pub type zx_duration_t = u64;
12pub type zx_futex_t = i32;
13pub type zx_handle_t = u32;
14pub type zx_off_t = u64;
15pub type zx_paddr_t = usize;
16pub type zx_rights_t = u32;
17pub type zx_signals_t = u32;
18pub type zx_size_t = usize;
19pub type zx_ssize_t = isize;
20pub type zx_status_t = i32;
21pub type zx_time_t = u64;
22pub type zx_vaddr_t = usize;
23
24macro_rules! multiconst {
32 ($typename:ident, [$($rawname:ident = $value:expr;)*]) => {
33 $(
34 pub const $rawname: $typename = $value;
35 )*
36 }
37}
38
39multiconst!(zx_handle_t, [
40 ZX_HANDLE_INVALID = 0;
41]);
42
43multiconst!(zx_time_t, [
44 ZX_TIME_INFINITE = ::std::u64::MAX;
45]);
46
47multiconst!(zx_rights_t, [
48 ZX_RIGHT_NONE = 0;
49 ZX_RIGHT_DUPLICATE = 1 << 0;
50 ZX_RIGHT_TRANSFER = 1 << 1;
51 ZX_RIGHT_READ = 1 << 2;
52 ZX_RIGHT_WRITE = 1 << 3;
53 ZX_RIGHT_EXECUTE = 1 << 4;
54 ZX_RIGHT_MAP = 1 << 5;
55 ZX_RIGHT_GET_PROPERTY = 1 << 6;
56 ZX_RIGHT_SET_PROPERTY = 1 << 7;
57 ZX_RIGHT_ENUMERATE = 1 << 8;
58 ZX_RIGHT_DESTROY = 1 << 9;
59 ZX_RIGHT_SET_POLICY = 1 << 10;
60 ZX_RIGHT_GET_POLICY = 1 << 11;
61 ZX_RIGHT_SIGNAL = 1 << 12;
62 ZX_RIGHT_SIGNAL_PEER = 1 << 13;
63 ZX_RIGHT_WAIT = 0 << 14; ZX_RIGHT_SAME_RIGHTS = 1 << 31;
65]);
66
67multiconst!(u32, [
69 ZX_VMO_OP_COMMIT = 1;
70 ZX_VMO_OP_DECOMMIT = 2;
71 ZX_VMO_OP_LOCK = 3;
72 ZX_VMO_OP_UNLOCK = 4;
73 ZX_VMO_OP_LOOKUP = 5;
74 ZX_VMO_OP_CACHE_SYNC = 6;
75 ZX_VMO_OP_CACHE_INVALIDATE = 7;
76 ZX_VMO_OP_CACHE_CLEAN = 8;
77 ZX_VMO_OP_CACHE_CLEAN_INVALIDATE = 9;
78]);
79
80multiconst!(u32, [
82 ZX_VM_FLAG_PERM_READ = 1 << 0;
83 ZX_VM_FLAG_PERM_WRITE = 1 << 1;
84 ZX_VM_FLAG_PERM_EXECUTE = 1 << 2;
85 ZX_VM_FLAG_COMPACT = 1 << 3;
86 ZX_VM_FLAG_SPECIFIC = 1 << 4;
87 ZX_VM_FLAG_SPECIFIC_OVERWRITE = 1 << 5;
88 ZX_VM_FLAG_CAN_MAP_SPECIFIC = 1 << 6;
89 ZX_VM_FLAG_CAN_MAP_READ = 1 << 7;
90 ZX_VM_FLAG_CAN_MAP_WRITE = 1 << 8;
91 ZX_VM_FLAG_CAN_MAP_EXECUTE = 1 << 9;
92]);
93
94multiconst!(zx_status_t, [
95 ZX_OK = 0;
96 ZX_ERR_INTERNAL = -1;
97 ZX_ERR_NOT_SUPPORTED = -2;
98 ZX_ERR_NO_RESOURCES = -3;
99 ZX_ERR_NO_MEMORY = -4;
100 ZX_ERR_CALL_FAILED = -5;
101 ZX_ERR_INTERRUPTED_RETRY = -6;
102 ZX_ERR_INVALID_ARGS = -10;
103 ZX_ERR_BAD_HANDLE = -11;
104 ZX_ERR_WRONG_TYPE = -12;
105 ZX_ERR_BAD_SYSCALL = -13;
106 ZX_ERR_OUT_OF_RANGE = -14;
107 ZX_ERR_BUFFER_TOO_SMALL = -15;
108 ZX_ERR_BAD_STATE = -20;
109 ZX_ERR_TIMED_OUT = -21;
110 ZX_ERR_SHOULD_WAIT = -22;
111 ZX_ERR_CANCELED = -23;
112 ZX_ERR_PEER_CLOSED = -24;
113 ZX_ERR_NOT_FOUND = -25;
114 ZX_ERR_ALREADY_EXISTS = -26;
115 ZX_ERR_ALREADY_BOUND = -27;
116 ZX_ERR_UNAVAILABLE = -28;
117 ZX_ERR_ACCESS_DENIED = -30;
118 ZX_ERR_IO = -40;
119 ZX_ERR_IO_REFUSED = -41;
120 ZX_ERR_IO_DATA_INTEGRITY = -42;
121 ZX_ERR_IO_DATA_LOSS = -43;
122 ZX_ERR_BAD_PATH = -50;
123 ZX_ERR_NOT_DIR = -51;
124 ZX_ERR_NOT_FILE = -52;
125 ZX_ERR_FILE_BIG = -53;
126 ZX_ERR_NO_SPACE = -54;
127 ZX_ERR_STOP = -60;
128 ZX_ERR_NEXT = -61;
129]);
130
131multiconst!(zx_signals_t, [
132 ZX_SIGNAL_NONE = 0;
133 ZX_OBJECT_SIGNAL_ALL = 0x00ffffff;
134 ZX_USER_SIGNAL_ALL = 0xff000000;
135 ZX_OBJECT_SIGNAL_0 = 1 << 0;
136 ZX_OBJECT_SIGNAL_1 = 1 << 1;
137 ZX_OBJECT_SIGNAL_2 = 1 << 2;
138 ZX_OBJECT_SIGNAL_3 = 1 << 3;
139 ZX_OBJECT_SIGNAL_4 = 1 << 4;
140 ZX_OBJECT_SIGNAL_5 = 1 << 5;
141 ZX_OBJECT_SIGNAL_6 = 1 << 6;
142 ZX_OBJECT_SIGNAL_7 = 1 << 7;
143 ZX_OBJECT_SIGNAL_8 = 1 << 8;
144 ZX_OBJECT_SIGNAL_9 = 1 << 9;
145 ZX_OBJECT_SIGNAL_10 = 1 << 10;
146 ZX_OBJECT_SIGNAL_11 = 1 << 11;
147 ZX_OBJECT_SIGNAL_12 = 1 << 12;
148 ZX_OBJECT_SIGNAL_13 = 1 << 13;
149 ZX_OBJECT_SIGNAL_14 = 1 << 14;
150 ZX_OBJECT_SIGNAL_15 = 1 << 15;
151 ZX_OBJECT_SIGNAL_16 = 1 << 16;
152 ZX_OBJECT_SIGNAL_17 = 1 << 17;
153 ZX_OBJECT_SIGNAL_18 = 1 << 18;
154 ZX_OBJECT_SIGNAL_19 = 1 << 19;
155 ZX_OBJECT_SIGNAL_20 = 1 << 20;
156 ZX_OBJECT_SIGNAL_21 = 1 << 21;
157 ZX_OBJECT_SIGNAL_22 = 1 << 22;
158 ZX_OBJECT_HANDLE_CLOSED = 1 << 23;
159 ZX_USER_SIGNAL_0 = 1 << 24;
160 ZX_USER_SIGNAL_1 = 1 << 25;
161 ZX_USER_SIGNAL_2 = 1 << 26;
162 ZX_USER_SIGNAL_3 = 1 << 27;
163 ZX_USER_SIGNAL_4 = 1 << 28;
164 ZX_USER_SIGNAL_5 = 1 << 29;
165 ZX_USER_SIGNAL_6 = 1 << 30;
166 ZX_USER_SIGNAL_7 = 1 << 31;
167
168 ZX_OBJECT_READABLE = ZX_OBJECT_SIGNAL_0;
169 ZX_OBJECT_WRITABLE = ZX_OBJECT_SIGNAL_1;
170 ZX_OBJECT_PEER_CLOSED = ZX_OBJECT_SIGNAL_2;
171
172 ZX_SIGNAL_HANDLE_CLOSED = ZX_OBJECT_HANDLE_CLOSED;
174
175 ZX_EVENT_SIGNALED = ZX_OBJECT_SIGNAL_3;
177
178 ZX_EPAIR_SIGNALED = ZX_OBJECT_SIGNAL_3;
180 ZX_EPAIR_CLOSED = ZX_OBJECT_SIGNAL_2;
181
182 ZX_TASK_TERMINATED = ZX_OBJECT_SIGNAL_3;
184
185 ZX_CHANNEL_READABLE = ZX_OBJECT_SIGNAL_0;
187 ZX_CHANNEL_WRITABLE = ZX_OBJECT_SIGNAL_1;
188 ZX_CHANNEL_PEER_CLOSED = ZX_OBJECT_SIGNAL_2;
189
190 ZX_SOCKET_READABLE = ZX_OBJECT_SIGNAL_0;
192 ZX_SOCKET_WRITABLE = ZX_OBJECT_SIGNAL_1;
193 ZX_SOCKET_PEER_CLOSED = ZX_OBJECT_SIGNAL_2;
194
195 ZX_PORT_READABLE = ZX_OBJECT_READABLE;
197
198 ZX_RESOURCE_DESTROYED = ZX_OBJECT_SIGNAL_3;
200 ZX_RESOURCE_READABLE = ZX_OBJECT_READABLE;
201 ZX_RESOURCE_WRITABLE = ZX_OBJECT_WRITABLE;
202 ZX_RESOURCE_CHILD_ADDED = ZX_OBJECT_SIGNAL_4;
203
204 ZX_FIFO_READABLE = ZX_OBJECT_READABLE;
206 ZX_FIFO_WRITABLE = ZX_OBJECT_WRITABLE;
207 ZX_FIFO_PEER_CLOSED = ZX_OBJECT_PEER_CLOSED;
208
209 ZX_JOB_NO_PROCESSES = ZX_OBJECT_SIGNAL_3;
211 ZX_JOB_NO_JOBS = ZX_OBJECT_SIGNAL_4;
212
213 ZX_PROCESS_TERMINATED = ZX_OBJECT_SIGNAL_3;
215
216 ZX_THREAD_TERMINATED = ZX_OBJECT_SIGNAL_3;
218
219 ZX_LOG_READABLE = ZX_OBJECT_READABLE;
221 ZX_LOG_WRITABLE = ZX_OBJECT_WRITABLE;
222
223 ZX_TIMER_SIGNALED = ZX_OBJECT_SIGNAL_3;
225]);
226
227pub const ZX_CLOCK_MONOTONIC: u32 = 0;
229
230pub const ZX_CPRNG_DRAW_MAX_LEN: usize = 256;
232pub const ZX_CPRNG_ADD_ENTROPY_MAX_LEN: usize = 256;
233
234pub const ZX_SOCKET_HALF_CLOSE: u32 = 1;
236
237pub const ZX_VMO_CLONE_COPY_ON_WRITE: u32 = 1;
239
240#[repr(C)]
241#[derive(Debug, Copy, Clone, Eq, PartialEq)]
242pub enum zx_cache_policy_t {
243 ZX_CACHE_POLICY_CACHED = 0,
244 ZX_CACHE_POLICY_UNCACHED = 1,
245 ZX_CACHE_POLICY_UNCACHED_DEVICE = 2,
246 ZX_CACHE_POLICY_WRITE_COMBINING = 3,
247}
248
249#[repr(C)]
250#[derive(Debug, Copy, Clone, Eq, PartialEq)]
251pub struct zx_wait_item_t {
252 pub handle: zx_handle_t,
253 pub waitfor: zx_signals_t,
254 pub pending: zx_signals_t,
255}
256
257#[repr(C)]
258#[derive(Debug, Copy, Clone, Eq, PartialEq)]
259pub struct zx_waitset_result_t {
260 pub cookie: u64,
261 pub status: zx_status_t,
262 pub observed: zx_signals_t,
263}
264
265#[repr(C)]
266#[derive(Debug, Copy, Clone, Eq, PartialEq)]
267pub struct zx_channel_call_args_t {
268 pub wr_bytes: *const u8,
269 pub wr_handles: *const zx_handle_t,
270 pub rd_bytes: *mut u8,
271 pub rd_handles: *mut zx_handle_t,
272 pub wr_num_bytes: u32,
273 pub wr_num_handles: u32,
274 pub rd_num_bytes: u32,
275 pub rd_num_handles: u32,
276}
277
278pub type zx_pci_irq_swizzle_lut_t = [[[u32; 4]; 8]; 32];
279
280#[repr(C)]
281#[derive(Debug, Copy, Clone, Eq, PartialEq)]
282pub struct zx_pci_init_arg_t {
283 pub dev_pin_to_global_irq: zx_pci_irq_swizzle_lut_t,
284 pub num_irqs: u32,
285 pub irqs: [zx_irq_t; 32],
286 pub ecam_window_count: u32,
287 pub ecam_windows: [zx_ecam_window_t; 1],
290}
291
292#[repr(C)]
293#[derive(Debug, Copy, Clone, Eq, PartialEq)]
294pub struct zx_irq_t {
295 pub global_irq: u32,
296 pub level_triggered: bool,
297 pub active_high: bool,
298}
299
300#[repr(C)]
301#[derive(Debug, Copy, Clone, Eq, PartialEq)]
302pub struct zx_ecam_window_t {
303 pub base: u64,
304 pub size: usize,
305 pub bus_start: u8,
306 pub bus_end: u8,
307}
308
309#[repr(C)]
310#[derive(Debug, Copy, Clone, Eq, PartialEq)]
311pub struct zx_pcie_device_info_t {
312 pub vendor_id: u16,
313 pub device_id: u16,
314 pub base_class: u8,
315 pub sub_class: u8,
316 pub program_interface: u8,
317 pub revision_id: u8,
318 pub bus_id: u8,
319 pub dev_id: u8,
320 pub func_id: u8,
321}
322
323#[repr(C)]
324#[derive(Debug, Copy, Clone, Eq, PartialEq)]
325pub struct zx_pci_resource_t {
326 pub type_: u32,
327 pub size: usize,
328 pub pio_addr: usize,
330}
331
332pub type zx_rrec_t = [u8; 64];
334
335#[repr(u32)]
337#[derive(Debug, Copy, Clone, Eq, PartialEq)]
338pub enum zx_packet_type_t {
339 ZX_PKT_TYPE_USER = 0,
340 ZX_PKT_TYPE_SIGNAL_ONE = 1,
341 ZX_PKT_TYPE_SIGNAL_REP = 2,
342}
343
344impl Default for zx_packet_type_t {
345 fn default() -> Self {
346 zx_packet_type_t::ZX_PKT_TYPE_USER
347 }
348}
349
350#[repr(C)]
351#[derive(Debug, Copy, Clone)]
352pub struct zx_packet_signal_t {
353 pub trigger: zx_signals_t,
354 pub observed: zx_signals_t,
355 pub count: u64,
356}
357
358pub const ZX_WAIT_ASYNC_ONCE: u32 = 0;
359pub const ZX_WAIT_ASYNC_REPEATING: u32 = 1;
360
361pub type zx_packet_user_t = [u8; 32];
363
364#[repr(C)]
365#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)]
366pub struct zx_port_packet_t {
367 pub key: u64,
368 pub packet_type: zx_packet_type_t,
369 pub status: i32,
370 pub union: [u8; 32],
371}
372
373#[repr(C)]
374#[derive(Debug, Copy, Clone, Eq, PartialEq)]
375pub struct zx_guest_io_t {
376 port: u16,
377 access_size: u8,
378 input: bool,
379 data: [u8; 4],
381}
382
383#[cfg(target_arch="aarch64")]
384#[repr(C)]
385#[derive(Debug, Copy, Clone, Eq, PartialEq)]
386pub struct zx_guest_memory_t {
387 addr: zx_vaddr_t,
388 inst: u32,
389}
390
391pub const X86_MAX_INST_LEN: usize = 15;
392
393#[cfg(target_arch="x86_64")]
394#[repr(C)]
395#[derive(Debug, Copy, Clone, Eq, PartialEq)]
396pub struct zx_guest_memory_t {
397 addr: zx_vaddr_t,
398 inst_len: u8,
399 inst_buf: [u8; X86_MAX_INST_LEN],
400}
401
402#[repr(u8)]
403#[derive(Debug, Copy, Clone, Eq, PartialEq)]
404pub enum zx_guest_packet_t_type {
405 ZX_GUEST_PKT_MEMORY = 1,
406 ZX_GUEST_PKT_IO = 2,
407}
408
409#[repr(C)]
410#[derive(Copy, Clone)]
411pub union zx_guest_packet_t_union {
412 memory: zx_guest_memory_t,
414 io: zx_guest_io_t,
416}
417
418#[repr(C)]
422#[derive(Copy, Clone)]
423pub struct zx_guest_packet_t {
424 packet_type: zx_guest_packet_t_type,
425 contents: zx_guest_packet_t_union,
426}
427
428impl fmt::Debug for zx_guest_packet_t {
429 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
430 write!(f, "zx_guest_packet_t {{ packet_type: {:?}, contents: ", self.packet_type)?;
431 match self.packet_type {
432 zx_guest_packet_t_type::ZX_GUEST_PKT_MEMORY =>
433 write!(f, "zx_guest_packet_t_union {{ memory: {:?} }} }}",
434 unsafe { self.contents.memory }
435 ),
436 zx_guest_packet_t_type::ZX_GUEST_PKT_IO =>
437 write!(f, "zx_guest_packet_t_union {{ io: {:?} }} }}",
438 unsafe { self.contents.io }
439 ),
440 }
441 }
442}
443
444impl cmp::PartialEq for zx_guest_packet_t {
445 fn eq(&self, other: &Self) -> bool {
446 (self.packet_type == other.packet_type) &&
447 match self.packet_type {
448 zx_guest_packet_t_type::ZX_GUEST_PKT_MEMORY =>
449 unsafe { self.contents.memory == other.contents.memory },
450 zx_guest_packet_t_type::ZX_GUEST_PKT_IO =>
451 unsafe { self.contents.io == other.contents.io },
452 }
453 }
454}
455
456impl cmp::Eq for zx_guest_packet_t {}
457
458#[cfg(target_arch="x86_64")]
459#[repr(C)]
460#[derive(Debug, Copy, Clone, Eq, PartialEq)]
461pub struct zx_vcpu_create_args_t {
462 pub ip: zx_vaddr_t,
463 pub cr3: zx_vaddr_t,
464 pub apic_vmo: zx_handle_t,
465}
466
467#[cfg(not(target_arch="x86_64"))]
468#[repr(C)]
469#[derive(Debug, Copy, Clone, Eq, PartialEq)]
470pub struct zx_vcpu_create_args_t {
471 pub ip: zx_vaddr_t,
472}
473
474include!("definitions.rs");