blob: f84b56aea6cc2b6adb0895a1d77ceee7556d05e4 [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.
// !!! THIS FILE IS NOT YET USED !!!
// See //zircon/system/public/zircon/syscalls.banjo.
// !!! THIS FILE IS NOT YET USED !!!
library zz;
[Transport="Syscall"]
protocol Vmo {
/// Create a VM object.
[Out1="handle<vmo>:acquire"]
Create(uint64 size, uint32 options) -> (status status, handle<vmo> out);
// TODO(scottmg): This syscall is very weird, it's currently:
// (handle, buffer, offset, buffer_size)
// rather than:
// (handle, buffer, buffer_size, offset)
// which means the vector<byte> buffer won't work. Unfortunately offset and
// buffer_size have the same underlying type, so moving them will be
// error-prone.
/// Read bytes from the VMO.
[Blocking,
In0="handle<vmo>:rights=READ",
In1="mutable<vector<byte>>"]
Read(handle<vmo> handle, vector<byte> buffer, uint64 offset) -> (status status);
// TODO(scottmg): Same probelm as Read() above.
/// Write bytes to the VMO.
[Blocking,
In0="handle<vmo>:rights=WRITE"]
Write(handle<vmo> handle, vector<byte> buffer, uint64 offset) -> (status status);
// TODO(ZX-2967): No rights required?
/// Read the current size of a VMO object.
GetSize(handle<vmo> handle) -> (status status, uint64 size);
/// Resize a VMO object.
[In0="handle<vmo>:rights=WRITE"]
SetSize(handle<vmo> handle, uint64 size) -> (status status);
/// Perform an operation on a range of a VMO.
[Blocking,
In4="mutable<vector<byte>>"]
OpRange(handle<vmo> handle, uint32 op, uint64 offset, uint64 size, vector<byte> buffer) ->
(status status);
/// Create a child of a VM Object.
[In0="handle<vmo>:rights=DUPLICATE,READ",
Out1="handle<vmo>:acquire"]
CreateChild(handle<vmo> handle, uint32 options, uint64 offset, uint64 size) ->
(status status, handle<vmo> out);
/// Set the caching policy for pages held by a VMO.
[In0="handle<vmo>:rights=MAP"]
SetCachePolicy(handle<vmo> handle, uint32 cache_policy) -> (status status);
// TODO(ZX-2967): handle: No rights required, ZX_RIGHT_EXECUTE added to dup out
// TODO(ZX-2967): vmex == ZX_HANDLE_INVALID also accepted.
/// Add execute rights to a VMO.
[In0="handle<vmo>:release_always",
In1="handle<resource>:kind=VMEX",
Out1="handle:acquire"]
ReplaceAsExecutable(handle<vmo> handle, handle<resource> vmex) ->
(status status, handle<vmo> out);
[In0="handle<bti>:rights=MAP",
Out1="handle<vmo>:acquire"]
CreateContiguous(handle<bti> bti, usize size, uint32 alignment_log2) ->
(status status, handle<vmo> out);
/// Create a VM object referring to a specific contiguous range of physical memory.
[In0="handle<resource>:kind=MMIO",
Out1="handle<vmo>:acquire"]
CreatePhysical(handle<resource> resource, paddr paddr, usize size) ->
(status status, handle<vmo> out);
};