blob: 6ffddd81cd93092dc71d8bb13349770f338e1cf3 [file] [log] [blame] [view]
<!-- Generated by zircon/scripts/update-docs-from-fidl, do not edit! -->
# zx_vmo_create_physical
## SUMMARY
Create a VM object referring to a specific contiguous range of physical memory.
## Declaration
```c
#include <zircon/syscalls.h>
zx_status_t zx_vmo_create_physical(zx_handle_t resource,
zx_paddr_t paddr,
size_t size,
zx_handle_t* out);
```
## Description
`zx_vmo_create_physical()` creates a new [virtual memory
object](/docs/reference/kernel_objects/vm_object.md) (VMO), which represents the
*size* bytes of physical memory beginning at physical address *paddr*.
The content size of the VMO will be initialized to the given (unrounded) size.
Use [`zx_object_get_property()`] with **ZX_PROP_VMO_CONTENT_SIZE** to read the
content size of the VMO. Use [`zx_object_set_property()`] with
**ZX_PROP_VMO_CONTENT_SIZE** to set the content size of the VMO without
actually resizing the VMO.
One handle is returned on success, representing an object with the requested
size.
The following rights will be set on the handle by default:
- **ZX_RIGHT_DUPLICATE** - The handle may be duplicated.
- **ZX_RIGHT_TRANSFER** - The handle may be transferred to another process.
- **ZX_RIGHT_READ** - May be read from or mapped with read permissions.
- **ZX_RIGHT_WRITE** - May be written to or mapped with write permissions.
- **ZX_RIGHT_EXECUTE** - May be mapped with execute permissions.
- **ZX_RIGHT_MAP** - May be mapped.
- **ZX_RIGHT_GET_PROPERTY** - May get its properties using [`zx_object_get_property()`].
- **ZX_RIGHT_SET_PROPERTY** - May set its properties using [`zx_object_set_property()`].
The **ZX_VMO_ZERO_CHILDREN** signal is active on a newly created VMO. It becomes
inactive whenever a child of the VMO is created and becomes active again when
all children have been destroyed and no mappings of those children into address
spaces exist.
## Notes
The VMOs created by this syscall are not usable with [`zx_vmo_read()`] and
[`zx_vmo_write()`].
## Rights
*resource* must have resource kind **ZX_RSRC_KIND_MMIO**.
## Return value
`zx_vmo_create_physical()` returns **ZX_OK** on success. In the event
of failure, a negative error value is returned.
## Errors
**ZER_ERR_WRONG_TYPE** *resource* is not a handle to a Resource object.
**ZER_ERR_ACCESS_DENIED** *resource* does not grant access to the requested
range of memory.
**ZX_ERR_INVALID_ARGS** *out* is an invalid pointer or NULL, or *paddr* or
*size* are not page-aligned.
**ZX_ERR_NO_MEMORY** Failure due to lack of memory.
There is no good way for userspace to handle this (unlikely) error.
In a future build this error will no longer occur.
**ZX_ERR_OUT_OF_RANGE** Requested size is too large.
## See also
- [`zx_vmar_map()`]
[`zx_object_get_property()`]: object_get_property.md
[`zx_object_set_property()`]: object_set_property.md
[`zx_vmar_map()`]: vmar_map.md
[`zx_vmo_read()`]: vmo_read.md
[`zx_vmo_write()`]: vmo_write.md