1/*
2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef KERNEL_ARCH_M68K_M68K_VM_TRANSLATION_MAP_H
6#define KERNEL_ARCH_M68K_M68K_VM_TRANSLATION_MAP_H
7
8
9#include <vm/VMTranslationMap.h>
10
11
12#define PAGE_INVALIDATE_CACHE_SIZE 64
13
14
15struct M68KPagingStructures;
16class TranslationMapPhysicalPageMapper;
17
18
19struct M68KVMTranslationMap : VMTranslationMap {
20								M68KVMTranslationMap();
21	virtual						~M68KVMTranslationMap();
22
23			status_t			Init(bool kernel);
24
25	virtual	bool 				Lock();
26	virtual	void				Unlock();
27
28	virtual	addr_t				MappedSize() const;
29
30	virtual	void				Flush();
31
32	virtual	M68KPagingStructures* PagingStructures() const = 0;
33
34	inline	void				InvalidatePage(addr_t address);
35
36protected:
37			TranslationMapPhysicalPageMapper* fPageMapper;
38			int					fInvalidPagesCount;
39			addr_t				fInvalidPages[PAGE_INVALIDATE_CACHE_SIZE];
40			bool				fIsKernelMap;
41};
42
43
44void
45M68KVMTranslationMap::InvalidatePage(addr_t address)
46{
47	if (fInvalidPagesCount < PAGE_INVALIDATE_CACHE_SIZE)
48		fInvalidPages[fInvalidPagesCount] = address;
49
50	fInvalidPagesCount++;
51}
52
53
54#endif	// KERNEL_ARCH_M68K_M68K_VM_TRANSLATION_MAP_H
55