blob: ee97375290f56e888eb1e9074d2399d07badd5ac [file] [log] [blame] [view]
# Pinned Memory Token
## NAME
pinned_memory_token - Representation of a device DMA grant
## SYNOPSIS
Pinned Memory Tokens (PMTs) represent an outstanding access grant to a device
for performing DMA.
## DESCRIPTION
PMTs are obtained by [pinning memory with a BTI object](/reference/syscalls/bti_pin.md).
It is valid for the device associated with the BTI to access the memory represented
by the PMT for as long as the PMT object is around. When the PMT object is
destroyed, either via [`zx_handle_close()`], [`zx_pmt_unpin()`], or process
termination, access to the represented memory becomes illegal (this is
enforced by hardware on systems with the capability to do so, such as IOMMUs).
If a PMT object is destroyed by means other than [`zx_pmt_unpin()`], the
underlying memory is *quarantined*. See
[bus_transaction_initiator](bus_transaction_initiator.md) for more details.
## SEE ALSO
- [bus_transaction_initiator](bus_transaction_initiator.md) - Bus Transaction Initiators
## SYSCALLS
- [`zx_bti_pin()`] - pin memory and grant access to it to the BTI
- [`zx_pmt_unpin()`] - revoke access and unpin memory
[`zx_bti_pin()`]: /reference/syscalls/bti_pin.md
[`zx_handle_close()`]: /reference/syscalls/handle_close.md
[`zx_pmt_unpin()`]: /reference/syscalls/pmt_unpin.md