root/src/system/boot/platform/riscv/mmu.h
/*
 * Copyright 2021, Haiku, Inc.
 * Distributed under the terms of the MIT License.
 */


#ifndef MMU_H
#define MMU_H


#include <SupportDefs.h>

#include <boot/platform.h>
#include <util/FixedWidthPointer.h>


extern uint8* gMemBase;
extern size_t gTotalMem;


void mmu_init();
void mmu_init_for_kernel(addr_t& satp);


inline addr_t
fix_address(addr_t address)
{
        addr_t result;
        if (platform_bootloader_address_to_kernel_address((void *)address, &result)
                != B_OK)
                return address;

        return result;
}


template<typename Type>
inline void
fix_address(FixedWidthPointer<Type>& p)
{
        if (p != NULL)
                p.SetTo(fix_address(p.Get()));
}


#endif  /* MMU_H */