kernel/eka/euser/epoc/win32/uc_utl.cpp
changeset 0 a41df078684a
child 25 57330c35d3d7
child 177 a232af6b0b1f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/euser/epoc/win32/uc_utl.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,221 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\euser\epoc\win32\uc_utl.cpp
+// 
+//
+
+#include "u32std.h"
+#include <e32base.h>
+#include <e32base_private.h>
+#include <e32hashtab.h>
+#include <emulator.h>
+#include "uc_std.h"
+
+typedef void (*TBootEpoc)(TBool);
+
+#ifdef __LEAVE_EQUALS_THROW__
+
+// Stub versions of TTrap exports to keep X86 and WINS versions of euser.def
+// the same.
+
+class TTrap
+	{
+public:
+	IMPORT_C TInt Trap(TInt& aResult);
+	IMPORT_C static void UnTrap();
+	};
+
+EXPORT_C TInt TTrap::Trap(TInt&)
+	{
+	return 0;
+	}
+
+EXPORT_C void TTrap::UnTrap()
+	{
+	}
+
+#endif
+
+EXPORT_C void EmptyFunction()
+ //Function with an empty body 
+	{
+	}
+
+GLDEF_C void Panic(TCdtArchitecturePanic aPanic)
+//
+// Panic the process with USER as the category.
+//
+	{
+	_LIT(KCategory,"USER-Arch");
+	User::Panic(KCategory,aPanic);
+	}
+
+
+
+
+EXPORT_C TInt User::IsRomAddress(TBool& aBool, TAny* aPtr)
+//
+//  The FileServer loads ROM files as ReadOnly Memory Mapped Files
+//  We check the access rights of the given address for :
+//      Read access
+//      No write access
+//
+/**
+Tests whether the specified address is in the ROM.
+
+@param aBool True, if the address at aPtr is within the ROM; false, 
+             otherwise.
+@param aPtr  The address to be tested.
+
+@return Always KErrNone.
+*/
+    {
+	const TInt KRomMask = 0xFF;
+	const TInt KRomAccess = PAGE_READONLY;
+
+    aBool=EFalse;
+    MEMORY_BASIC_INFORMATION mi;
+	
+	__LOCK_HOST;
+    if (VirtualQuery(aPtr, &mi, sizeof(mi)) != 0 && (mi.Protect & KRomMask) == KRomAccess)
+		aBool=ETrue;
+    return KErrNone;
+    }
+
+
+
+   
+EXPORT_C void BootEpoc(TBool aAutoRun)
+	{
+	HINSTANCE epoc = LoadLibraryA("ekern.exe");
+	if (epoc)
+		{
+		TBootEpoc ep = (TBootEpoc)GetProcAddress(epoc, "_E32Startup");
+		if (ep)
+			ep(aAutoRun);
+		}
+	ExitProcess(102);
+	}
+
+EXPORT_C void RFastLock::Wait()
+	{
+	if (InterlockedDecrement((LPLONG)&iCount) < -1)
+		RSemaphore::Wait();
+	}
+
+EXPORT_C void RFastLock::Signal()
+	{
+	if (InterlockedIncrement((LPLONG)&iCount) < 0)
+		RSemaphore::Signal();
+	}
+
+// Hash an 8 bit string at aPtr, length aLen bytes.
+__NAKED__ TUint32 DefaultStringHash(const TUint8* /*aPtr*/, TInt /*aLen*/)
+	{
+	_asm push esi
+	_asm mov esi, [esp+8]
+	_asm mov ecx, [esp+12]
+	_asm xor eax, eax
+	_asm sub ecx, 4
+	_asm jb lt4
+	ge4:
+	_asm xor eax, [esi]
+	_asm add esi, 4
+	_asm mov edx, 9E3779B9h
+	_asm mul edx
+	_asm sub ecx, 4
+	_asm jae ge4
+	lt4:
+	_asm add ecx, 4
+	_asm jz done
+	_asm xor edx, edx
+	_asm cmp ecx, 2
+	_asm jbe le2
+	_asm mov dl, [esi+2]
+	_asm shl edx, 16
+	le2:
+	_asm cmp ecx, 2
+	_asm jb onemore
+	_asm mov dh, [esi+1]
+	onemore:
+	_asm mov dl, [esi]
+	_asm xor eax, edx
+	_asm mov edx, 9E3779B9h
+	_asm mul edx
+	done:
+	_asm pop esi
+	_asm ret
+	}
+
+// Hash a 16 bit string at aPtr, length aLen bytes.
+__NAKED__ TUint32 DefaultWStringHash(const TUint16* /*aPtr*/, TInt /*aLen*/)
+	{
+	_asm push esi
+	_asm mov esi, [esp+8]
+	_asm mov ecx, [esp+12]
+	_asm xor eax, eax
+	_asm sub ecx, 8
+	_asm jb lt8
+	ge8:
+	_asm mov edx, [esi+4]
+	_asm xor eax, [esi]
+	_asm add esi, 8
+	_asm rol edx, 8
+	_asm xor eax, edx
+	_asm mov edx, 9E3779B9h
+	_asm mul edx
+	_asm sub ecx, 8
+	_asm jae ge8
+	lt8:
+	_asm add ecx, 8
+	_asm jz done
+	_asm xor edx, edx
+	_asm cmp ecx, 4
+	_asm jbe le4
+	_asm mov dx, [esi+4]
+	_asm rol edx, 8
+	_asm xor eax, edx
+	_asm xor edx, edx
+	le4:
+	_asm cmp ecx, 4
+	_asm jb onemore
+	_asm mov dx, [esi+2]
+	_asm shl edx, 16
+	onemore:
+	_asm mov dx, [esi]
+	_asm xor eax, edx
+	_asm mov edx, 9E3779B9h
+	_asm mul edx
+	done:
+	_asm pop esi
+	_asm ret
+	}
+
+/**
+@publishedAll
+@released
+
+Calculate a 32 bit hash from a 32 bit integer.
+
+@param	aInt	The integer to be hashed.
+@return			The calculated 32 bit hash value.
+*/
+EXPORT_C __NAKED__ TUint32 DefaultHash::Integer(const TInt& /*aInt*/)
+	{
+	_asm mov edx, [esp+4]
+	_asm mov eax, 9E3779B9h
+	_asm mul dword ptr [edx]
+	_asm ret
+	}
+