root/src/system/kernel/arch/x86/paging/nested/X86VMTranslationMapRVI.h
/*
 * Copyright 2026, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef KERNEL_ARCH_X86_PAGING_NESTED_X86_VM_TRANSLATION_MAP_RVI_H
#define KERNEL_ARCH_X86_PAGING_NESTED_X86_VM_TRANSLATION_MAP_RVI_H


#include "paging/64bit/X86VMTranslationMap64Bit.h"


struct X86VMTranslationMapRVI final : X86VMTranslationMap64Bit {
                                                                X86VMTranslationMapRVI();
        virtual                                         ~X86VMTranslationMapRVI();

                        status_t                        Init();

                        void                            SetFlushCallback(void (**callback)(void*), void* arg);
        virtual void                            Flush() final;

        virtual status_t                        Map(addr_t virtualAddress,
                                                                        phys_addr_t physicalAddress,
                                                                        uint32 attributes, uint32 memoryType,
                                                                        vm_page_reservation* reservation) override;

        virtual status_t                        Protect(addr_t base, addr_t top,
                                                                        uint32 attributes, uint32 memoryType) override;

private:
        void (**fFlushCallback)(void*);
        void* fFlushCallbackArg;
};


#endif  // KERNEL_ARCH_X86_PAGING_NESTED_X86_VM_TRANSLATION_MAP_RVI_H