baseport/syborg/ethernet/pdd/ethernet.cpp
changeset 2 d55eb581a87c
parent 0 ffa851df0825
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/ethernet/pdd/ethernet.cpp	Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+#include <ethernet.h>
+#include <e32hal.h>
+#include <system.h>
+#include "ethernet_device.h"
+
+#pragma diag_suppress 1441
+
+_LIT(KEthPddName, "Ethernet.Syborg");
+
+// needs ldd version..
+const TInt KMinimumLddMajorVersion	= 1;
+const TInt KMinimumLddMinorVersion	= 0;
+const TInt KMinimumLddBuild			= 122;
+
+//
+// Class to identify the driver as PDD
+//
+class DDriverEthernet : public DPhysicalDevice
+{
+public:
+	DDriverEthernet();
+	
+	//
+	// Functions that we must implement as we are inheriting from abstract base class
+	//
+	virtual TInt Install();
+	virtual void GetCaps(TDes8 &aDes) const;
+	virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+	virtual TInt Validate(TInt aUnit, const TDesC8* anInfo, const TVersion &aVer);
+};
+
+//////////////////////////////////////////
+// Implementation of DDriverEthernet class
+//////////////////////////////////////////
+
+DDriverEthernet::DDriverEthernet()
+{
+	DP("** (PDD) DDriverEthernet::DDriverEthernet()");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::DDriverEthernet()"));
+	
+	iUnitsMask=0x1;	
+	iVersion=TVersion(KEthernetMajorVersionNumber,
+					  KEthernetMinorVersionNumber,
+					  KEthernetBuildVersionNumber);
+}
+
+TInt DDriverEthernet::Install()
+{
+	DP("** (PDD) DDriverEthernet::Install()");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Install()"));
+	
+	return SetName(&KEthPddName);
+}
+
+void DDriverEthernet::GetCaps(TDes8 &aDes) const
+{
+	DP("** (PDD) DDriverEthernet::GetCaps");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::GetCaps"));
+	
+	TEthernetCaps capsBuf;
+
+	aDes.FillZ(aDes.MaxLength());
+	aDes=capsBuf.Left(Min(capsBuf.Length(),aDes.MaxLength()));
+}
+
+TInt DDriverEthernet::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
+{
+	DP("** (PDD) DDriverEthernet::Create");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Create"));
+	
+    TInt r = KErrNoMemory;
+
+	EthernetDevice	*VirtioEthernet = new EthernetDevice;
+	if(VirtioEthernet)
+		{
+		DP("** (PDD) DDriverEthernet:: EthernetDevice created successfully");
+		r = VirtioEthernet->DoCreate(aUnit, anInfo);
+		}
+	aChannel = VirtioEthernet;
+       return r;
+}
+
+TInt DDriverEthernet::Validate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
+{
+	DP("** (PDD) DDriverEthernet::Validate");
+	__KTRACE_OPT(KHARDWARE, Kern::Printf("DDriverEthernet::Validate"));
+	
+	if((!Kern::QueryVersionSupported(iVersion,aVer)) || 
+		(!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,
+													KMinimumLddMinorVersion,
+													KMinimumLddBuild))))
+	{
+		return KErrNotSupported;
+	}
+	if(aUnit != 0)
+	{
+		return KErrNotSupported;
+	}
+	return KErrNone;
+}
+
+DECLARE_STANDARD_PDD()
+{
+	DP("** (DPhysicalDevice) Ethernet PDD Factory created");
+	return new DDriverEthernet;
+}