1/*
2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef KERNEL_ARCH_PPC_PAGING_460_PPC_VM_TRANSLATION_MAP_460_H
6#define KERNEL_ARCH_PPC_PAGING_460_PPC_VM_TRANSLATION_MAP_460_H
7
8
9#include "paging/PPCVMTranslationMap.h"
10#include <arch_mmu.h>
11
12
13struct PPCPagingStructures460;
14
15
16struct PPCVMTranslationMap460 : PPCVMTranslationMap {
17								PPCVMTranslationMap460();
18	virtual						~PPCVMTranslationMap460();
19
20			status_t			Init(bool kernel);
21
22	inline	int					VSIDBase() const	{ return fVSIDBase; }
23
24	virtual void				ChangeASID();
25
26			page_table_entry*	LookupPageTableEntry(addr_t virtualAddress);
27			bool				RemovePageTableEntry(addr_t virtualAddress);
28
29	virtual	size_t				MaxPagesNeededToMap(addr_t start,
30									addr_t end) const;
31
32	virtual	status_t			Map(addr_t virtualAddress,
33									phys_addr_t physicalAddress,
34									uint32 attributes, uint32 memoryType,
35									vm_page_reservation* reservation);
36	virtual	status_t			Unmap(addr_t start, addr_t end);
37
38	virtual status_t			RemapAddressRange(addr_t *_virtualAddress,
39									size_t size, bool unmap);
40
41	virtual	status_t			DebugMarkRangePresent(addr_t start, addr_t end,
42									bool markPresent);
43
44	virtual	status_t			UnmapPage(VMArea* area, addr_t address,
45									bool updatePageQueue);
46	virtual	void				UnmapPages(VMArea* area, addr_t base,
47									size_t size, bool updatePageQueue);
48	virtual	void				UnmapArea(VMArea* area,
49									bool deletingAddressSpace,
50									bool ignoreTopCachePageFlags);
51
52	virtual	status_t			Query(addr_t virtualAddress,
53									phys_addr_t* _physicalAddress,
54									uint32* _flags);
55	virtual	status_t			QueryInterrupt(addr_t virtualAddress,
56									phys_addr_t* _physicalAddress,
57									uint32* _flags);
58
59	virtual	status_t			Protect(addr_t base, addr_t top,
60									uint32 attributes, uint32 memoryType);
61
62	virtual	status_t			ClearFlags(addr_t virtualAddress,
63									uint32 flags);
64
65	virtual	bool				ClearAccessedAndModified(
66									VMArea* area, addr_t address,
67									bool unmapIfUnaccessed,
68									bool& _modified);
69
70	virtual	PPCPagingStructures* PagingStructures() const;
71	inline	PPCPagingStructures460* PagingStructures460() const
72									{ return fPagingStructures; }
73
74private:
75			PPCPagingStructures460* fPagingStructures;
76			//XXX:move to fPagingStructures?
77			int					fVSIDBase;
78};
79
80
81#endif	// KERNEL_ARCH_PPC_PAGING_460_PPC_VM_TRANSLATION_MAP_460_H
82