navienginebsp/ne1_tb/ethernet/shared_ethernet.cpp
changeset 0 5de814552237
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/navienginebsp/ne1_tb/ethernet/shared_ethernet.cpp	Tue Sep 28 18:00:05 2010 +0100
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  
+* ne1_tb\ethernet\shared_ethernet.cpp
+* Ethernet driver implementation.
+*
+*/
+
+
+
+/**
+ @addtogroup 
+ @ingroup 
+*/
+
+#include "shared_ethernet.h"
+
+
+/********************************************************************/
+/*  Class DEthernetPowerHandler implementation                      */
+/********************************************************************/
+
+/*
+ * Device power down modes
+ */
+enum TPowerDownMode
+	{
+	ENormalPowerDown,
+	EEmergencyPowerDown
+	};
+
+_LIT(KLitEthernet,"Ethernet");
+
+DEthernetPowerHandler::DEthernetPowerHandler()
+:DPowerHandler(KLitEthernet),
+iCurPoweredUp(EFalse),
+iCurPowerState(EPwActive)
+	{
+	}
+
+void DEthernetPowerHandler::RequestPower()
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+	KPROFILE_PRINT("DEthernetPowerHandler::RequestPower()");
+	#endif
+
+    // Do power up the Ethernet if not already powered up.
+    if(!iCurPoweredUp)
+		{
+	    iCurPoweredUp = ETrue;
+		}
+	}
+
+TInt DEthernetPowerHandler::SetEthernetPdd(DEthernetPdd* aEthernetPdd)
+	{
+   #if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPowerHandler::SetEthernetPdd()");
+   #endif
+
+	 iEthernetPdd = aEthernetPdd;
+	 return KErrNone;
+	}
+
+void DEthernetPowerHandler::PowerUp()
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPowerHandler::PowerUp()");	
+    #endif
+    iCurPowerState = EPwActive;
+	iEthernetPdd->Wakeup();
+    PowerUpDone();
+	}
+
+void DEthernetPowerHandler::PowerDown(TPowerState aState)
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPowerHandler::PowerDown()");	
+    #endif
+	iCurPowerState = aState;
+	// Stop recieving more frames.
+	iEthernetPdd->Stop(EStopNormal);
+
+    // Do power down on Ethernet
+	RelinquishPower();
+    PowerDownDone();
+	}
+
+void DEthernetPowerHandler::RelinquishPower()
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPowerHandler::RelinquishPower()");	
+    #endif
+
+    // Do power standby on Ethernet if it is powered up.
+    if(iCurPoweredUp)
+		{
+ 	    iCurPoweredUp = EFalse;
+		}
+	iEthernetPdd->Sleep();
+	}
+ 
+DEthernetPdd::DEthernetPdd()
+//Constructor
+	{
+	}
+
+DEthernetPdd::~DEthernetPdd()
+//Destructor
+	{
+	}
+
+TInt DEthernetPdd::Start()
+/**
+ * Start receiving frames
+ * @return KErrNone if driver started
+ */
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPdd::Start()");
+    #endif
+
+	if(iReady)
+		{
+		return KErrNone;
+		}
+	iReady = ETrue;
+	TInt r = Configure(iDefaultConfig);
+	return r;
+	}
+
+TInt DEthernetPdd::ValidateConfig(const TEthernetConfigV01& aConfig) const
+/**
+ * Validate a new config
+ * Validates a new configuration should be called before Configure
+ * @param aConfig is the configuration to be validated
+ * @return ETrue or EFalse if the Configuration is allowed
+ * @see Configure()
+ */
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPdd::ValidateConfig()");
+    #endif
+	switch(aConfig.iEthSpeed)
+		{
+	case KEthSpeedAuto:
+	case KEthSpeed10BaseT:
+	case KEthSpeed100BaseTX:
+		break;
+	case KEthSpeedUnknown:
+	default:
+		return KErrNotSupported;
+		}
+
+	switch(aConfig.iEthDuplex)
+		{
+	case KEthDuplexAuto:
+	case KEthDuplexFull:
+	case KEthDuplexHalf:
+		break;
+	default:
+	case KEthDuplexUnknown:
+		return KErrNotSupported;
+		}
+
+	return KErrNone;
+	}
+
+
+
+void DEthernetPdd::GetConfig(TEthernetConfigV01& aConfig) const
+/**
+ * Get the current config from the chip
+ * This returns the current configuration of the chip with the folling fields
+ * The Transmit Speed
+ * The Duplex Setting
+ * The MAC address
+ * @param aConfig is a TEthernetConfigV01 reference that will be filled in
+ */
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPdd::GetConfig()");
+    #endif
+	aConfig = iDefaultConfig;
+	return;
+	}
+
+
+void DEthernetPdd::CheckConfig(TEthernetConfigV01& /*aConfig*/)
+/**
+ * Check a configuration
+ * @param aConfig	a reference to the structure TEthernetConfigV01 with configuration to check
+ */
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPdd::CheckConfig()");
+    #endif
+	return;
+	}
+
+
+void DEthernetPdd::Caps(TDes8& /*aCaps*/) const
+/**
+ * Query the device's capabilities
+ * @param aCaps To be filled in with the capabilites
+ */
+	{	
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+    KPROFILE_PRINT("DEthernetPdd::Caps()");
+    #endif
+	return;
+	}
+
+TInt DEthernetPdd::DisableIrqs()
+/**
+ * Disables all IRQ's
+ * @return The IRQ level before it was changed
+ * @see RestoreIrqs()
+ */
+	{
+	return KErrNotSupported;
+	}
+
+void DEthernetPdd::RestoreIrqs(TInt /*aIrq*/)
+/**
+ * Restore the IRQ's to the supplied level
+ * @param aIrq The level to set the irqs to.
+ * @see DisableIrqs()
+ */
+	{
+	}
+
+TDfcQue* DEthernetPdd::DfcQ(TInt /*aUnit*/)
+/**
+ * Return the DFC Queue that this device should use
+ * @param aUnit The Channel number
+ * @return Then DFC Queue to use
+ */
+	{
+	#if defined(INSTR) && defined(KTRACE_SYNCH)
+	KPROFILE_PRINT("DEthernetPdd::DfcQ()");
+	#endif
+
+	return iDfcQ;
+	}