| 216 | return VirtMapping(vaddr, size, paddrs, aspace=aspace, uncached=uncached, snooped=snooped) |
| 217 | |
| 218 | def unmap_range(self, vaddr:int, size:int): |
| 219 | if getenv("MM_DEBUG", 0): print(f"mm {self.dev.devfmt}: unmapping {vaddr=:#x} ({size=:#x})") |
| 220 | |
| 221 | ctx = PageTableTraverseContext(self.dev, self.root_page_table, vaddr, free_pts=True) |
| 222 | for _, pt, pte_idx, pte_cnt, _ in ctx.next(size): |
| 223 | for pte_id in range(pte_idx, pte_idx + pte_cnt): |
| 224 | assert pt.valid(pte_id), f"PTE not mapped: {pt.entry(pte_id):#x}" |
| 225 | pt.set_entry(pte_id, paddr=0x0, valid=False) |
| 226 | |
| 227 | def on_range_mapped(self): pass |
| 228 | |