kernel/eka/nkernsmp/x86/ncutilf.cpp
changeset 0 a41df078684a
child 177 a232af6b0b1f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/nkernsmp/x86/ncutilf.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,70 @@
+// Copyright (c) 2005-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\nkernsmp\x86\ncutilf.cpp
+// 
+//
+
+#include <nkern.h>
+
+extern "C" {
+extern SVariantInterfaceBlock* VIB;
+}
+
+/******************************************************************************
+ * Spin lock
+ ******************************************************************************/
+/** Create a spin lock
+
+	@publishedPartner
+	@released
+*/
+EXPORT_C TSpinLock::TSpinLock(TUint aOrder)
+	{
+	(void)aOrder;
+	__NK_ASSERT_DEBUG( (aOrder==EOrderNone) || ((aOrder&0x7f)<0x20) );
+	if (aOrder>=0x80 && aOrder!=EOrderNone)
+		aOrder -= 0x60;
+	aOrder |= 0xFF00u;
+	iLock = TUint64(aOrder)<<48;	// byte 6 = 00-1F for interrupt, 20-3F for preemption
+									// byte 7 = FF if not held
+	}
+
+
+/******************************************************************************
+ * Read/Write Spin lock
+ ******************************************************************************/
+/** Create a spin lock
+
+	@publishedPartner
+	@released
+*/
+EXPORT_C TRWSpinLock::TRWSpinLock(TUint aOrder)
+	{
+	(void)aOrder;
+	__NK_ASSERT_DEBUG( (aOrder==TSpinLock::EOrderNone) || ((aOrder&0x7f)<0x20) );
+	if (aOrder>=0x80 && aOrder!=TSpinLock::EOrderNone)
+		aOrder -= 0x60;
+	aOrder |= 0xFF00u;
+	iLock = TUint64(aOrder)<<48;	// byte 6 = 00-1F for interrupt, 20-3F for preemption
+									// byte 7 = FF if not held
+	}
+
+
+/** Get the frequency of counter queried by NKern::Timestamp().
+*/
+EXPORT_C TUint32 NKern::TimestampFrequency()
+	{
+	return VIB->iTimestampFreq;
+	}
+