| // 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; |
| |
| alias VmOption = uint32; |
| |
| // TODO(scottmg): bits for ZX_VM_xyz flags, and const for ZX_VM_ALIGN_xyz. |
| @transport("Syscall") |
| protocol vmar { |
| /// Allocate a new subregion. |
| /// Rights: If options & ZX_VM_CAN_MAP_READ, parent_vmar must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_READ. |
| /// Rights: If options & ZX_VM_CAN_MAP_WRITE, parent_vmar must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_WRITE. |
| /// Rights: If options & ZX_VM_CAN_MAP_EXECUTE, parent_vmar must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_EXECUTE. |
| vmar_allocate(resource struct { |
| parent_vmar handle:VMAR; |
| options VmOption; |
| offset usize; |
| size usize; |
| }) -> (resource struct { |
| status status; |
| child_vmar handle:VMAR; |
| child_addr vaddr; |
| }); |
| |
| // TODO(fxbug.dev/32803): handle No rights required? |
| /// Destroy a virtual memory address region. |
| vmar_destroy(resource struct { |
| handle handle:VMAR; |
| }) -> (struct { |
| status status; |
| }); |
| |
| // TODO(fxbug.dev/32253): TODO handle and vmo and options must all match, and options can't specify them. |
| /// Add a memory mapping. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_VMAR. |
| /// Rights: vmo must be of type ZX_OBJ_TYPE_VMO. |
| vmar_map(resource struct { |
| handle handle:VMAR; |
| options VmOption; |
| vmar_offset usize; |
| vmo handle:VMO; |
| vmo_offset uint64; |
| len usize; |
| }) -> (struct { |
| status status; |
| mapped_addr vaddr; |
| }); |
| |
| // TODO(fxbug.dev/32803): handle No rights required? |
| /// Unmap virtual memory pages. |
| vmar_unmap(resource struct { |
| handle handle:VMAR; |
| addr vaddr; |
| len usize; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Set protection of virtual memory pages. |
| /// Rights: If options & ZX_VM_PERM_READ, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_READ. |
| /// Rights: If options & ZX_VM_PERM_WRITE, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_WRITE. |
| /// Rights: If options & ZX_VM_PERM_EXECUTE, handle must be of type ZX_OBJ_TYPE_VMAR and have ZX_RIGHT_EXECUTE. |
| vmar_protect(resource struct { |
| handle handle:VMAR; |
| options VmOption; |
| addr vaddr; |
| len usize; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Perform an operation on VMOs mapped into this VMAR. |
| /// Rights: If op is ZX_VMAR_OP_DECOMMIT, handle must have ZX_RIGHT_WRITE. |
| /// Rights: If op is ZX_VMAR_OP_COMMIT, handle must have ZX_RIGHT_WRITE. |
| vmar_op_range(resource struct { |
| handle handle:VMAR; |
| op uint32; |
| address vaddr; |
| size usize; |
| buffer mutable_vector_void; |
| }) -> (struct { |
| status status; |
| }); |
| }; |