blob: 40aba47f6028d28cf794ddabf956d4f29fbfcfbe [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library zx;
// TODO(scottmg): Apply rights spec from WaitMany on |items| to |handle| here,
// somehow.
type WaitItem = resource struct {
handle handle;
waitfor signals;
pending signals;
};
@transport("Syscall")
protocol object {
/// Wait for signals on an object.
/// Rights: handle must have ZX_RIGHT_WAIT.
@blocking
object_wait_one(resource struct {
handle handle;
signals signals;
deadline time;
}) -> (struct {
status status;
observed optional_signals;
});
/// Wait for signals on multiple objects.
/// Rights: Every entry of items must have a handle field with ZX_RIGHT_WAIT.
@blocking
object_wait_many(resource struct {
items mutable_vector_WaitItem;
deadline time;
}) -> (struct {
status status;
});
/// Subscribe for signals on an object.
/// Rights: handle must have ZX_RIGHT_WAIT.
/// Rights: port must be of type ZX_OBJ_TYPE_PORT and have ZX_RIGHT_WRITE.
object_wait_async(resource struct {
handle handle;
port handle:PORT;
key uint64;
signals signals;
options uint32;
}) -> (struct {
status status;
});
/// Signal an object.
/// Rights: handle must have ZX_RIGHT_SIGNAL.
object_signal(resource struct {
handle handle;
clear_mask uint32;
set_mask uint32;
}) -> (struct {
status status;
});
/// Signal an object's peer.
/// Rights: handle must have ZX_RIGHT_SIGNAL_PEER.
object_signal_peer(resource struct {
handle handle;
clear_mask uint32;
set_mask uint32;
}) -> (struct {
status status;
});
/// Ask for various properties of various kernel objects.
/// Rights: handle must have ZX_RIGHT_GET_PROPERTY.
/// Rights: If property is ZX_PROP_PROCESS_DEBUG_ADDR, handle must be of type ZX_OBJ_TYPE_PROCESS.
/// Rights: If property is ZX_PROP_PROCESS_BREAK_ON_LOAD, handle must be of type ZX_OBJ_TYPE_PROCESS.
/// Rights: If property is ZX_PROP_PROCESS_VDSO_BASE_ADDRESS, handle must be of type ZX_OBJ_TYPE_PROCESS.
/// Rights: If property is ZX_PROP_SOCKET_RX_THRESHOLD, handle must be of type ZX_OBJ_TYPE_SOCKET.
/// Rights: If property is ZX_PROP_SOCKET_TX_THRESHOLD, handle must be of type ZX_OBJ_TYPE_SOCKET.
object_get_property(resource struct {
handle handle;
property uint32;
}) -> (struct {
status status;
value vector_void;
});
/// Set various properties of various kernel objects.
/// Rights: handle must have ZX_RIGHT_SET_PROPERTY.
/// Rights: If property is ZX_PROP_PROCESS_DEBUG_ADDR, handle must be of type ZX_OBJ_TYPE_PROCESS.
/// Rights: If property is ZX_PROP_PROCESS_BREAK_ON_LOAD, handle must be of type ZX_OBJ_TYPE_PROCESS.
/// Rights: If property is ZX_PROP_SOCKET_RX_THRESHOLD, handle must be of type ZX_OBJ_TYPE_SOCKET.
/// Rights: If property is ZX_PROP_SOCKET_TX_THRESHOLD, handle must be of type ZX_OBJ_TYPE_SOCKET.
/// Rights: If property is ZX_PROP_JOB_KILL_ON_OOM, handle must be of type ZX_OBJ_TYPE_JOB.
object_set_property(resource struct {
handle handle;
property uint32;
value vector_void;
}) -> (struct {
status status;
});
/// Query information about an object.
/// Rights: If topic is ZX_INFO_PROCESS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_JOB, handle must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_PROCESS_THREADS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_ENUMERATE.
/// Rights: If topic is ZX_INFO_JOB_CHILDREN, handle must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_ENUMERATE.
/// Rights: If topic is ZX_INFO_JOB_PROCESSES, handle must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_ENUMERATE.
/// Rights: If topic is ZX_INFO_THREAD, handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_THREAD_EXCEPTION_REPORT, handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_THREAD_STATS, handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_TASK_STATS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_PROCESS_MAPS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_PROCESS_VMOS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_VMO, handle must be of type ZX_OBJ_TYPE_VMO.
/// TODO(fxbug.dev/32803), Should this require INSPECT?
/// Rights: If topic is ZX_INFO_VMAR, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_GUEST_STATS, handle must have resource kind ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_INFO_BASE.
/// Rights: If topic is ZX_INFO_CPU_STATS, handle must have resource kind ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_INFO_BASE.
/// Rights: If topic is ZX_INFO_KMEM_STATS, handle must have resource kind ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_INFO_BASE.
/// Rights: If topic is ZX_INFO_KMEM_STATS_EXTENDED, handle must have resource kind ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_INFO_BASE.
/// Rights: If topic is ZX_INFO_RESOURCE, handle must be of type ZX_OBJ_TYPE_RESOURCE and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_HANDLE_COUNT, handle must have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_BTI, handle must be of type ZX_OBJ_TYPE_BTI and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_PROCESS_HANDLE_STATS, handle must be of type ZX_OBJ_TYPE_PROCESS and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_SOCKET, handle must be of type ZX_OBJ_TYPE_SOCKET and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_MSI, handle must be of type ZX_OBJ_TYPE_MSI and have ZX_RIGHT_INSPECT.
/// Rights: If topic is ZX_INFO_TASK_RUNTIME, handle must be of type ZX_OBJ_TYPE_THREAD, ZX_OBJ_TYPE_PROCESS, or ZX_OBJ_TYPE_JOB, and have ZX_RIGHT_INSPECT.
object_get_info(resource struct {
handle handle;
topic uint32;
}) -> (struct {
status status;
buffer vector_void;
actual optional_usize;
avail optional_usize;
});
/// Given a kernel object with children objects, obtain a handle to the child specified by the provided kernel object id.
/// Rights: handle must have ZX_RIGHT_ENUMERATE.
object_get_child(resource struct {
handle handle;
koid uint64;
rights rights;
}) -> (resource struct {
status status;
out handle;
});
/// Apply a scheduling profile to a thread.
/// Rights: handle must be of type ZX_OBJ_TYPE_THREAD and have ZX_RIGHT_MANAGE_THREAD.
/// Rights: profile must be of type ZX_OBJ_TYPE_PROFILE and have ZX_RIGHT_APPLY_PROFILE.
object_set_profile(resource struct {
handle handle:THREAD;
profile handle:PROFILE;
options uint32;
}) -> (struct {
status status;
});
};