From 998f05d337627699cfe46cfae8b526a136e6dc25 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 6 Feb 2023 20:39:33 +0000 Subject: [PATCH] memblock: add functions to convert allocated pointers between virt/phys --- include/socks/memblock.h | 14 ++++++++++++++ vm/memblock.c | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/socks/memblock.h b/include/socks/memblock.h index 0f5cdf7..977f13e 100644 --- a/include/socks/memblock.h +++ b/include/socks/memblock.h @@ -301,6 +301,20 @@ extern int memblock_free(void *addr, size_t size); */ extern int memblock_free_phys(phys_addr_t addr, size_t size); +/* convert a virtual pointer returned by memblock + to a physical address. + + @param p the pointer to convert. +*/ +extern phys_addr_t memblock_virt_to_phys(void *p); + +/* convert a physical address returned by memblock + to a virtual pointer. + + @param p the address to convert. +*/ +extern void *memblock_phys_to_virt(phys_addr_t p); + extern void __next_memory_region(memblock_iter_t *it, \ memblock_type_t *type_a, memblock_type_t *type_b, phys_addr_t start, phys_addr_t end); diff --git a/vm/memblock.c b/vm/memblock.c index 0a87167..32b4223 100644 --- a/vm/memblock.c +++ b/vm/memblock.c @@ -404,3 +404,13 @@ void __next_memory_region(memblock_iter_t *it, memblock_type_t *type_a, memblock /* ULLONG_MAX signals the end of the iteration */ it->__idx = ITER_END; } + +phys_addr_t memblock_virt_to_phys(void *p) +{ + return (phys_addr_t)p - memblock.m_voffset; +} + +void *memblock_phys_to_virt(phys_addr_t p) +{ + return (void *)(p + memblock.m_voffset); +}