diff --git a/devices/memctrl/memctrlbase.cpp b/devices/memctrl/memctrlbase.cpp index 02df57d..677dc8d 100644 --- a/devices/memctrl/memctrlbase.cpp +++ b/devices/memctrl/memctrlbase.cpp @@ -350,3 +350,14 @@ AddressMapEntry* MemCtrlBase::find_rom_region() return nullptr; } + +uint8_t *MemCtrlBase::get_region_hostmem_ptr(const uint32_t addr) { + AddressMapEntry *reg_desc = this->find_range(addr); + if (reg_desc == nullptr || reg_desc->type == RT_MMIO) + return nullptr; + + if (reg_desc->type == RT_MIRROR) + return (addr - reg_desc->mirror) + reg_desc->mem_ptr; + else + return (addr - reg_desc->start) + reg_desc->mem_ptr; +} diff --git a/devices/memctrl/memctrlbase.h b/devices/memctrl/memctrlbase.h index 15fc60e..717aa72 100644 --- a/devices/memctrl/memctrlbase.h +++ b/devices/memctrl/memctrlbase.h @@ -86,6 +86,8 @@ public: AddressMapEntry* find_rom_region(); + uint8_t *get_region_hostmem_ptr(const uint32_t addr); + protected: bool add_mem_region( uint32_t start_addr, uint32_t size, uint32_t dest_addr, uint32_t type,