static int heap_pa2va(struct vmm_heap_control *heap, physical_addr_t pa, virtual_addr_t *va) { int rc = VMM_OK; if ((heap->heap_start_pa <= pa) && (pa < (heap->heap_start_pa + heap->heap_size))) { *va = (virtual_addr_t)heap->heap_start + (pa - heap->heap_start_pa); } else { rc = vmm_host_pa2va(pa, va); } return rc; }
/* IOPTE accessors */ static arm_lpae_iopte *iopte_deref(arm_lpae_iopte pte, struct arm_lpae_io_pgtable *d) { int rc; virtual_addr_t va = 0x0; physical_addr_t pa = ((pte) & ((1ULL << ARM_LPAE_MAX_ADDR_BITS) - 1) & ~(ARM_LPAE_GRANULE(d) - 1ULL)); rc = vmm_host_pa2va(pa, &va); BUG_ON(rc); return (arm_lpae_iopte *)va; }