| // 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. |
| |
| // !!! THIS FILE IS NOT YET USED !!! |
| // See //zircon/system/public/zircon/syscalls.banjo. |
| // !!! THIS FILE IS NOT YET USED !!! |
| |
| library zz; |
| |
| // TODO(scottmg): Apply rights spec from WaitMany on |items| to |handle| here, |
| // somehow. |
| struct WaitItem { |
| handle handle; |
| signals waitfor; |
| signals pending; |
| }; |
| |
| [Transport="Syscall"] |
| protocol Object { |
| /// Wait for signals on an object. |
| [Blocking, |
| In0="handle:rights=WAIT", |
| Out1="optional<signals>"] |
| WaitOne(handle handle, signals signals, time deadline) -> (status status, signals observed); |
| |
| /// Wait for signals on multiple objects. |
| [Blocking, |
| In0="mutable<vector<WaitItem:rights=WAIT>>"] |
| WaitMany(vector<WaitItem> items, time deadline) -> (status status); |
| |
| /// Subscribe for signals on an object. |
| [In0="handle:rights=WAIT", |
| In1="handle<port>:rights=WRITE"] |
| WaitAsync(handle handle, handle<port> port, uint64 key, signals signals, uint32 options) -> |
| (status status); |
| |
| /// Signal an object. |
| [In0="handle:rights=SIGNAL"] |
| Signal(handle handle, uint32 clear_mask, uint32 set_mask) -> (status status); |
| |
| /// Signal an object's peer. |
| [In0="handle:rights=SIGNAL_PEER"] |
| SignalPeer(handle handle, uint32 clear_mask, uint32 set_mask) -> (status status); |
| |
| /// Ask for various properties of various kernel objects. |
| [In0="handle:rights=GET_PROPERTY", |
| In2="mutable<vector<byte>>"] |
| GetProperty(handle handle, uint32 property, vector<byte> value) -> (status status); |
| |
| /// Set various properties of various kernel objects. |
| [In0="handle:rights=SET_PROPERTY"] |
| SetProperty(handle handle, uint32 property, vector<byte> value) -> (status status); |
| |
| /// Query information about an object. |
| [In2="mutable<vector<buffer>>", |
| Out1="optional<usize>", |
| Out2="optional<usize>"] |
| GetInfo(handle handle, uint32 topic, vector<byte> buffer) -> |
| (status status, usize actual, usize avail); |
| |
| /// Given a kernel object with children objects, obtain a handle to the child specified by the provided kernel object id. |
| [In0="handle:rights=ENUMERATE"] |
| GetChild(handle handle, uint64 koid, rights rights) -> (status status, handle out); |
| |
| /// Apply a scheduling profile to a thread. |
| [In0="handle<thread>:rights=MANAGE_THREAD", |
| In1="handle<profile>:rights=APPLY_PROFILE"] |
| SetProfile(handle<thread> handle, handle<profile> profile, uint32 options) -> (status status); |
| }; |