* Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef KERNEL_ARCH_PPC_PAGING_460_PPC_VM_TRANSLATION_MAP_460_H
#define KERNEL_ARCH_PPC_PAGING_460_PPC_VM_TRANSLATION_MAP_460_H
#include "paging/PPCVMTranslationMap.h"
#include <arch_mmu.h>
struct PPCPagingStructures460;
struct PPCVMTranslationMap460 : PPCVMTranslationMap {
PPCVMTranslationMap460();
virtual ~PPCVMTranslationMap460();
status_t Init(bool kernel);
inline int VSIDBase() const { return fVSIDBase; }
virtual void ChangeASID();
page_table_entry* LookupPageTableEntry(addr_t virtualAddress);
bool RemovePageTableEntry(addr_t virtualAddress);
virtual size_t MaxPagesNeededToMap(addr_t start,
addr_t end) const;
virtual status_t Map(addr_t virtualAddress,
phys_addr_t physicalAddress,
uint32 attributes, uint32 memoryType,
vm_page_reservation* reservation);
virtual status_t Unmap(addr_t start, addr_t end);
virtual status_t RemapAddressRange(addr_t *_virtualAddress,
size_t size, bool unmap);
virtual status_t UnmapPage(VMArea* area, addr_t address,
bool updatePageQueue,
bool deletingAddressSpace, uint32* _flags);
virtual void UnmapPages(VMArea* area, addr_t base,
size_t size, bool updatePageQueue,
bool deletingAddressSpace);
virtual status_t Query(addr_t virtualAddress,
phys_addr_t* _physicalAddress,
uint32* _flags);
virtual status_t QueryInterrupt(addr_t virtualAddress,
phys_addr_t* _physicalAddress,
uint32* _flags);
virtual status_t Protect(addr_t base, addr_t top,
uint32 attributes, uint32 memoryType);
virtual status_t ClearFlags(addr_t virtualAddress,
uint32 flags);
virtual bool ClearAccessedAndModified(
VMArea* area, addr_t address,
bool unmapIfUnaccessed,
bool& _modified);
virtual PPCPagingStructures* PagingStructures() const;
inline PPCPagingStructures460* PagingStructures460() const
{ return fPagingStructures; }
private:
PPCPagingStructures460* fPagingStructures;
int fVSIDBase;
};
#endif