| # 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 |