| <!-- |
| Copyright 2022 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. |
| |
| DO NOT EDIT. Generated from FIDL library zx by zither, a Fuchsia platform tool. |
| |
| See //docs/reference/syscalls/README.md#documentation-generation for |
| regeneration instructions. |
| --> |
| |
| # zx_vmar_op_range |
| |
| ## Summary |
| |
| Perform an operation on VMOs mapped into this VMAR. |
| |
| ## Declaration |
| |
| ```c |
| #include <zircon/syscalls.h> |
| |
| zx_status_t zx_vmar_op_range(zx_handle_t handle, |
| uint32_t op, |
| zx_vaddr_t address, |
| size_t size, |
| void* buffer, |
| size_t buffer_size); |
| ``` |
| |
| ## Description |
| |
| `zx_vmar_op_range()` performs operation *op* on VMOs mapped in the range *address* to |
| *address*+*size*. |
| |
| *address* and *size* must fall entirely within this VMAR, and must meet the alignment requirements |
| specified for the corresponding VMO *op* (if there is one) by [`zx_vmo_op_range()`]. |
| |
| *buffer* and *buffer_size* are currently unused, and must be empty. |
| |
| The supported operations are: |
| |
| **ZX_VMAR_OP_COMMIT** - Requires that *handle*, and the VMO handles used to create any affected |
| mappings, have the **ZX_RIGHT_WRITE** right and that the address range must not have any child VMARs. |
| The operation's semantics are otherwise as described by |
| [`zx_vmo_op_range()`](/docs/reference/syscalls/vmo_op_range.md) **ZX_VMO_OP_COMMIT**. |
| |
| **ZX_VMO_OP_DECOMMIT** - Deprecated. Use **ZX_VMAR_OP_DECOMMIT** instead. |
| |
| **ZX_VMAR_OP_DECOMMIT** - Requires that *handle*, and the VMO handles used to create any affected |
| mappings, have the **ZX_RIGHT_WRITE** right and that the address range must not have any child VMARs. |
| The operation's semantics are otherwise as described by |
| [`zx_vmo_op_range()`](/docs/reference/syscalls/vmo_op_range.md) **ZX_VMO_OP_DECOMMIT**. |
| |
| **ZX_VMAR_OP_MAP_RANGE** - Populates entries in the CPU page tables (or architectural equivalent) |
| for committed pages in the given range. Entries for uncommitted pages in the range are not |
| populated. Skips entries that already exist for any page in the range. |
| |
| **ZX_VMAR_OP_DONT_NEED** - Hints that pages in the specified range are not needed anymore and should |
| be considered for memory reclamation. Intended to be used on mappings for VMOs created with |
| [`zx_pager_create_vmo()`](/docs/reference/syscalls/pager_create_vmo.md); trivially succeeds for |
| mappings for other VMO types. |
| |
| Please refer to [`zx_vmo_op_range()`](/docs/reference/syscalls/vmo_op_range.md) |
| **ZX_VMO_OP_DONT_NEED** for more details. |
| |
| **ZX_VMAR_OP_ALWAYS_NEED** - Hints that pages in the specified range are important and should be |
| protected from memory reclamation. Intended to be used on mappings for VMOs created with |
| [`zx_pager_create_vmo()`](/docs/reference/syscalls/pager_create_vmo.md); trivially succeeds for |
| mappings for other VMO types. |
| |
| Please refer to [`zx_vmo_op_range()`](/docs/reference/syscalls/vmo_op_range.md) |
| **ZX_VMO_OP_ALWAYS_NEED** for more details. |
| |
| ## Rights |
| |
| If *op* is **ZX_VMAR_OP_DECOMMIT**, *handle* must have **ZX_RIGHT_WRITE**. |
| |
| If *op* is **ZX_VMAR_OP_COMMIT**, *handle* must have **ZX_RIGHT_WRITE**. |
| |
| ## Return value |
| |
| `zx_vmar_op_range()` returns **ZX_OK** on success. In the event of failure, a negative error value |
| is returned. |
| |
| ## Errors |
| |
| **ZX_ERR_ACCESS_DENIED** *handle* does not have the proper rights for the requested change, or the |
| original VMO handle used to created one of the affected mappings did not have the rights for the |
| requested change, or the VMAR itself did not allow the requested change. |
| |
| **ZX_ERR_BAD_HANDLE** *handle* is not a valid handle. |
| |
| **ZX_ERR_BAD_STATE** *handle* is not a live VMAR, or the range specified by *address* and *size* |
| spans unmapped regions. |
| |
| **ZX_ERR_INVALID_ARGS** Returned for any of the following reasons: |
| |
| - *buffer* is non-null. |
| - *buffer_size* is non-zero. |
| - *size* is zero. |
| - *address* was not page-aligned. |
| - *op* is not a valid operation. |
| - *op* was one of **ZX_VMAR_OP_COMMIT** or **ZX_VMAR_OP_DECOMMIT** and the requested range |
| had subregions. |
| - the requested range overlapped a sub-region and *handle* did not have |
| **ZX_RIGHT_OP_CHILDREN**. |
| |
| **ZX_ERR_NOT_SUPPORTED** *op* was not **ZX_VMO_OP_DECOMMIT**, or one or more mapped VMOs do not |
| support the requested *op*. |
| |
| **ZX_ERR_OUT_OF_RANGE** The range specified by *address* and *size* is not wholly within the VM |
| address range specified by *handle*. |
| |
| **ZX_ERR_WRONG_TYPE** *handle* is not a VMAR handle. |
| |
| ## See also |
| |
| - [`zx_vmar_map()`] |
| - [`zx_vmar_unmap()`] |
| - [`zx_vmo_op_range()`] |
| |
| [`zx_pager_create_vmo()`]: pager_create_vmo.md |
| [`zx_vmar_map()`]: vmar_map.md |
| [`zx_vmar_unmap()`]: vmar_unmap.md |
| [`zx_vmo_op_range()`]: vmo_op_range.md |