1/* 2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef KERNEL_ARCH_ARM_ARM_VM_TRANSLATION_MAP_H 6#define KERNEL_ARCH_ARM_ARM_VM_TRANSLATION_MAP_H 7 8 9#include <vm/VMTranslationMap.h> 10 11 12#define PAGE_INVALIDATE_CACHE_SIZE 64 13 14 15struct ARMPagingStructures; 16class TranslationMapPhysicalPageMapper; 17 18 19struct ARMVMTranslationMap : VMTranslationMap { 20 ARMVMTranslationMap(); 21 virtual ~ARMVMTranslationMap(); 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 ARMPagingStructures* 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 45ARMVMTranslationMap::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_ARM_ARM_VM_TRANSLATION_MAP_H 55