kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdcard.cpp
branchRCL_3
changeset 43 c1f20ce4abcf
parent 42 a179b74831c9
child 44 3e88ff8f41d5
--- a/kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdcard.cpp	Thu Aug 19 11:14:22 2010 +0300
+++ b/kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdcard.cpp	Tue Aug 31 16:34:26 2010 +0300
@@ -29,6 +29,7 @@
 TSDCard::TSDCard()
 :	iProtectedAreaSize(0), iPARootDirEnd(KPARootDirEndUnknown), iClientCountSD(0)
 	{
+	// empty
 	}
 
 TInt64 TSDCard::DeviceSize64() const
@@ -423,6 +424,10 @@
 EXPORT_C TInt DSDStack::Init()
 	{
 	OstTraceFunctionEntry1( DSDSTACK_INIT_ENTRY, this );
+
+	if((iAddressCard = new DAddressCard(*this)) == NULL)
+        return KErrNoMemory;
+	
 	TInt ret = DMMCStack::Init();
 	OstTraceFunctionExitExt( DSDSTACK_INIT_EXIT, this, ret );
 	return ret;
@@ -1135,7 +1140,7 @@
 		    {
 			AddressCard(KBroadcastToAllCards);
 			__KTRACE_OPT(KPBUS1, Kern::Printf("<DSDStack::InitStackAfterUnlockSM()"));
-		    }
+ 		    }
 
 	SMF_END
 	
@@ -1653,6 +1658,31 @@
     }
 
 
+DAddressCard::DAddressCard(DSDStack& aStack) :iStack(aStack)
+	{
+	}
+
+void DAddressCard::AddressCard(TInt aCardNumber)
+	{
+	iStack.AddressCard(aCardNumber);
+	}
+
+/**
+Gets an interface from a derived class
+
+N.B the derived class should call this function if it does not support the specified interface
+*/
+EXPORT_C void DSDStack::GetInterface(TInterfaceId aInterfaceId, MInterface*& aInterfacePtr)
+	{
+	if (aInterfaceId == KInterfaceAddressCard)
+		{
+		aInterfacePtr = (DMMCStack::MInterface*) iAddressCard;
+		}
+	else
+		{
+		DMMCStack::GetInterface(aInterfaceId, aInterfacePtr);
+		}
+	}
+
 EXPORT_C void DSDStack::Dummy1() {}
 EXPORT_C void DSDStack::Dummy2() {}
-EXPORT_C void DSDStack::Dummy3() {}