root/src/system/kernel/arch/x86/paging/pae/X86PagingStructuresPAE.h
/*
 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef KERNEL_ARCH_X86_PAGING_PAE_X86_PAGING_STRUCTURES_PAE_H
#define KERNEL_ARCH_X86_PAGING_PAE_X86_PAGING_STRUCTURES_PAE_H


#include "paging/pae/paging.h"
#include "paging/X86PagingStructures.h"


#if B_HAIKU_PHYSICAL_BITS == 64


struct X86PagingStructuresPAE : X86PagingStructures {
                                                                X86PagingStructuresPAE();
        virtual                                         ~X86PagingStructuresPAE();

                        void                            Init(pae_page_directory_pointer_table_entry*
                                                                                virtualPDPT,
                                                                         phys_addr_t physicalPDPT, void* pdptHandle,
                                                                         pae_page_directory_entry* const*
                                                                                virtualPageDirs,
                                                                         const phys_addr_t* physicalPageDirs);

        virtual void                            Delete();

                        pae_page_directory_entry* const* VirtualPageDirs() const
                                                                        { return fVirtualPageDirs; }

private:
                        pae_page_directory_pointer_table_entry* fPageDirPointerTable;
                        void*                           fPageDirPointerTableHandle;
                        pae_page_directory_entry* fVirtualPageDirs[4];
                        phys_addr_t                     fPhysicalPageDirs[4];
};


#endif  // B_HAIKU_PHYSICAL_BITS == 64


#endif  // KERNEL_ARCH_X86_PAGING_PAE_X86_PAGING_STRUCTURES_PAE_H