os/kernelhwsrv/kernel/eka/include/memmodel/epoc/mmubase/mmubase.inl
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\include\memmodel\epoc\mmubase\mmubase.inl
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#ifndef __MMUBASE_INL__
sl@0
    19
#define __MMUBASE_INL__
sl@0
    20
sl@0
    21
#include <mmboot.h>
sl@0
    22
sl@0
    23
const TInt KPageInfosPerPageShift = KPageShift-KPageInfoShift;
sl@0
    24
const TInt KPageInfosPerPage = 1<<KPageInfosPerPageShift;
sl@0
    25
const TInt KNumPageInfoPagesShift = 32-KPageShift-KPageInfosPerPageShift;
sl@0
    26
const TInt KNumPageInfoPages = 1<<KNumPageInfoPagesShift;
sl@0
    27
sl@0
    28
inline SPageInfo* SPageInfo::FromPhysAddr(TPhysAddr aAddress)
sl@0
    29
	{
sl@0
    30
	return ((SPageInfo*)KPageInfoLinearBase)+(aAddress>>KPageShift);
sl@0
    31
	}
sl@0
    32
sl@0
    33
inline TPhysAddr SPageInfo::PhysAddr()
sl@0
    34
	{
sl@0
    35
	return ((TPhysAddr)this)<<KPageInfosPerPageShift;
sl@0
    36
	}
sl@0
    37
sl@0
    38
sl@0
    39
//
sl@0
    40
// M class implementations of ram allocator and defrag methods
sl@0
    41
// Make these inline as they are just memory model independent interface
sl@0
    42
// for the ram allocator and defrag classes.
sl@0
    43
//
sl@0
    44
sl@0
    45
inline TInt M::PageShift()
sl@0
    46
	{
sl@0
    47
	return KPageShift;
sl@0
    48
	}
sl@0
    49
sl@0
    50
sl@0
    51
inline void M::RamAllocLock()
sl@0
    52
	{
sl@0
    53
	MmuBase::Wait();
sl@0
    54
	}
sl@0
    55
sl@0
    56
sl@0
    57
inline void M::RamAllocUnlock()
sl@0
    58
	{
sl@0
    59
	MmuBase::Signal();
sl@0
    60
	}
sl@0
    61
sl@0
    62
sl@0
    63
inline void M::RamAllocIsLocked()
sl@0
    64
	{
sl@0
    65
#ifdef _DEBUG
sl@0
    66
	if (!K::Initialising) 
sl@0
    67
		__ASSERT_MUTEX(MmuBase::RamAllocatorMutex);
sl@0
    68
#endif
sl@0
    69
	}
sl@0
    70
sl@0
    71
sl@0
    72
inline TUint M::NumberOfFreeDpPages()
sl@0
    73
	{
sl@0
    74
	return Mmu::Get().NumberOfFreeDpPages();
sl@0
    75
	}
sl@0
    76
sl@0
    77
sl@0
    78
inline TUint M::NumberOfDirtyDpPages()
sl@0
    79
	{// This memory model doesn't support data paging so can't get dirty paged pages.
sl@0
    80
	return 0;
sl@0
    81
	}
sl@0
    82
sl@0
    83
sl@0
    84
inline TInt M::MovePage(TPhysAddr aOld, TPhysAddr& aNew, TUint aBlockZoneId, TBool aBlockRest)
sl@0
    85
	{
sl@0
    86
	return Mmu::Get().MovePage(aOld, aNew, aBlockZoneId, aBlockRest);
sl@0
    87
	}
sl@0
    88
sl@0
    89
sl@0
    90
inline TInt M::DiscardPage(TPhysAddr aAddr, TUint aBlockZoneId, TBool aBlockRest)
sl@0
    91
	{
sl@0
    92
	return Mmu::Get().DiscardPage(aAddr, aBlockZoneId, aBlockRest);
sl@0
    93
	}
sl@0
    94
#endif
sl@0
    95
sl@0
    96