diff -r 2fb8b9db1c86 -r d55eb581a87c baseport/syborg/ethernet/pdd/ethernet.cpp --- /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 +#include +#include +#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; +}