kernel/eka/memmodel/epoc/flexible/mmu/mm.cpp
changeset 121 661475905584
parent 90 947f0dc9f7a8
equal deleted inserted replaced
120:b42b9ce90ea9 121:661475905584
   392 	aMemory->iManager->Free(aMemory,aIndex,aCount);
   392 	aMemory->iManager->Free(aMemory,aIndex,aCount);
   393 	MemoryObjectLock::Unlock(aMemory);
   393 	MemoryObjectLock::Unlock(aMemory);
   394 	}
   394 	}
   395 
   395 
   396 
   396 
   397 TInt MM::MemoryAddPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, TPhysAddr* aPages)
   397 TInt MM::MemoryAddPages(DMemoryObject* aMemory, TUint aIndex, TUint aCount, const TPhysAddr* aPages)
   398 	{
   398 	{
   399 	TRACE(("MM::MemoryAddPages(0x%08x,0x%08x,0x%08x,?)",aMemory,aIndex,aCount));
   399 	TRACE(("MM::MemoryAddPages(0x%08x,0x%08x,0x%08x,?)",aMemory,aIndex,aCount));
   400 	MemoryObjectLock::Lock(aMemory);
   400 	MemoryObjectLock::Lock(aMemory);
   401 	TInt r;
   401 	TInt r;
   402 	if(!aMemory->CheckRegion(aIndex,aCount))
   402 	if(!aMemory->CheckRegion(aIndex,aCount))
   783 	process->CloseOsAsid();
   783 	process->CloseOsAsid();
   784 	return r;
   784 	return r;
   785 	}
   785 	}
   786 
   786 
   787 
   787 
       
   788 DMemoryMapping* MM::FindMappingInProcess(DMemModelProcess* aProcess, TLinAddr aAddr, TUint aSize, 
       
   789 										 TUint& aOffsetInMapping, TUint& aInstanceCount)
       
   790 	{
       
   791 	if(aAddr>=KGlobalMemoryBase)
       
   792 		{
       
   793 		// Address in global region, so look it up in kernel's address space...
       
   794 		return MM::FindMappingInAddressSpace(KKernelOsAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount);
       
   795 		}
       
   796 
       
   797 	// Address in thread's process address space so open a reference to its os asid
       
   798 	// so that it remains valid for FindMappingInAddressSpace() call.
       
   799 	TInt osAsid = aProcess->TryOpenOsAsid();
       
   800 	if (osAsid < 0)
       
   801 		{// The process no longer owns an address space so can't have any mappings.
       
   802 		return NULL;
       
   803 		}
       
   804 
       
   805 	DMemoryMapping* r = MM::FindMappingInAddressSpace(osAsid, aAddr, aSize, aOffsetInMapping, aInstanceCount);
       
   806 
       
   807 	aProcess->CloseOsAsid();
       
   808 	return r;
       
   809 	}
       
   810 
       
   811 
   788 DMemoryMapping* MM::FindMappingInAddressSpace(	TUint aOsAsid, TLinAddr aAddr, TUint aSize, 
   812 DMemoryMapping* MM::FindMappingInAddressSpace(	TUint aOsAsid, TLinAddr aAddr, TUint aSize, 
   789 												TUint& aOffsetInMapping, TUint& aInstanceCount)
   813 												TUint& aOffsetInMapping, TUint& aInstanceCount)
   790 	{
   814 	{
   791 	return AddressSpace[aOsAsid]->FindMapping(aAddr, aSize, aOffsetInMapping, aInstanceCount);
   815 	return AddressSpace[aOsAsid]->FindMapping(aAddr, aSize, aOffsetInMapping, aInstanceCount);
   792 	}
   816 	}
  1115 		aPermissions&EExecute,
  1139 		aPermissions&EExecute,
  1116 		attr&EMemoryAttributeShareable,
  1140 		attr&EMemoryAttributeShareable,
  1117 		attr&EMemoryAttributeUseECC
  1141 		attr&EMemoryAttributeUseECC
  1118 		);
  1142 		);
  1119 	}
  1143 	}
  1120 
       
  1121