kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdio/sdiocard.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/drivers/pbus/mmc/sdcard/sdcard3c/sdio/sdiocard.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2003 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:
+*
+*/
+
+/** 
+  @file sdiocard.h
+  @internalTechnology
+  Class definitions for SDIO Card and Card Array objects
+*/
+
+#ifndef __SDIOCARD_H__
+#define __SDIOCARD_H__
+
+#include <kernel/kern_priv.h>
+
+#include <drivers/sdio/interrupt.h>
+#include <drivers/sdio/sdio.h>
+#include <drivers/sdio/sdiopsu.h>
+#include <drivers/sdio/function.h>
+
+// Constants
+
+const TUint32 KSDIOCardIsIOCard = KSDCardFirstCustomFlag;
+const TUint32 KSDIOCardIsComboCard = KSDCardIsSDCard | KSDIOCardIsIOCard;
+
+/**	
+    @publishedPartner
+	@released 
+*/
+const TUint32 KMaxSDIOFunctions = 7;
+
+// Forward class declerations
+
+class DSDIORegisterInterface;
+class TSDIOFunction;
+class TSDIOFunctionCaps;
+
+// Classes
+
+class TSDIOCardConfig
+/** 
+  TSDIOCardConfig Class
+  Contains the information on the card as obtained from the CCCR and CIS
+*/
+	{
+public:
+	IMPORT_C TSDIOCardConfig();
+	
+	inline TUint MaxTranSpeedInKilohertz() const;
+	inline TUint16 ManufacturerID() const;
+	inline TUint16 CardID() const;
+	inline TUint16 Fn0MaxBlockSize() const;
+	inline TUint CisPtr() const;
+	inline TBool SupportsFullBusWidth() const;
+	inline TBool IsLowSpeedCard() const;
+	inline TBool SupportsInterruptBetweenBlocks() const;
+	inline TBool SupportsSuspendResume() const;
+	inline TBool SupportsReadWait() const;
+	inline TBool SupportsMultiBlock() const;
+	inline TBool SupportsDirectCommandsDuringMultiBlock() const;
+	inline TBool SupportsHighSpeed() const;
+	
+private:
+	inline void Reset();
+
+private:
+	TUint16 iManufacturerID;	// The Manufacturer ID
+	TUint16 iCardID;			// The Card ID
+	TUint16 iFn0MaxBlockSize;	// The maximum block size for Function 0
+	TUint8  iMaxTranSpeed;		// The maximum transfer rate (encoded)
+	TUint16 iCurrentBlockSize;	// The current block size (of function 0)
+private:
+	TUint8 iRevision;			// SDIO/CCCR Revision	(as CCCR offset 0x00)
+	TUint8 iSDFormatVer;		// SD Format Version	(as CCCR offset 0x01)
+	TUint8 iCardCaps;			// Card Capabilities	(as CCCR offset 0x08)
+	TUint32 iCommonCisP;		// Common CIS Pointer	(as CCCR offset 0x09:0x0B)
+	TUint8 iHighSpeed;			// Contains the contents of the high speed register
+
+	friend class DSDIOStack;	// These friends have responsibility
+	friend class TSDIOCard;		// for maintaining the consistency
+	friend class TCisReader;	// of these configuration parameters
+
+    //
+    // Reserved members to maintain binary compatibility
+    TInt iReserved[4];
+	};
+
+
+class TSDIOCard : public TSDCard
+/** 
+  TSDIOCard Class
+*/
+	{
+private:
+	enum TSDIOCardState
+		{
+		ECardNotReady,		// Card is absent or is powered down
+		ECardInitialising,	// Card is initialising
+		ECardReady			// Card is initialised and ready for use
+		};
+	enum TSDIOCisState
+		{
+		ECisNotReady,		// CIS has not been parsed
+		ECisParsing,		// CIS is being parsed	(To be used in Asynchronous Reader)
+		ECisCorrupt,		// The CIS is corrupt
+		ECisReady			// The CIS is ready and valid
+		};
+public:
+	TSDIOCard();
+	virtual ~TSDIOCard();
+
+	inline TBool IsIOCard() const;
+	inline TBool IsComboCard() const;
+	inline TUint8 FunctionCount() const;
+	inline TSDIOFunction* IoFunction(TUint8 aFunctionNo) const;	
+	inline DSDIORegisterInterface* CommonRegisterInterface() const;	
+	inline TSDIOInterruptController& InterruptController();
+	inline TBool IsReady();
+	inline const TSDIOCardConfig& CommonConfig() const;
+	
+	virtual TUint MaxTranSpeedInKilohertz() const;
+	
+	IMPORT_C TSDIOFunction* FindFunction(TSDIOFunctionCaps& aCaps, TUint32 aMatchFlags, TSDIOFunction* aFunctionP = NULL) const;
+	
+	IMPORT_C TInt CheckCIS();
+	
+private:
+	TInt Create(DMMCStack* aStackP);
+
+	TInt Open(TUint8 aFunctionCount);
+	TInt Close();
+
+	TInt CreateFunction(TUint8 aFunctionNumber);
+	
+	inline void ClientRegistered();
+	inline void ClientDeregistered();
+
+private:
+	TUint8 iFunctionCount;
+	TSDIOFunction* iFunctions[KMaxSDIOFunctions];
+	DSDIORegisterInterface* iCommonRegIfcP;	// Common Register Interface (for function 0)
+	DMutex* iMutexLock;						// Critical Access Mutex Lock
+	TSDIOInterruptController iInterruptController;
+	TSDIOCardState iCardState;	// The state of the Card
+	TBool iCisState;			// The state of the CIS
+	TInt  iClientCount;			// Keeps track of the number of registered clients
+	
+	TSDIOCardConfig iCommonConfig;
+
+protected:
+	DMMCStack* iStackP;
+
+	friend class TSDIOCardArray;
+	friend class DSDIOStack;
+	friend class DSDIORegisterInterface;
+	friend class TSDIOFunction;
+	friend class TSDIOInterruptController;
+	
+private:
+	//
+    // Reserved members to maintain binary compatibility
+    TInt iReserved[4];
+	};
+
+class TSDIOCardArray : public TSDCardArray
+/** 
+  TSDIOCardArray Class
+*/
+	{
+public:
+	inline TSDIOCardArray(DSDIOStack* aOwningStack);
+	IMPORT_C virtual TInt AllocCards();
+
+	inline TSDIOCard& Card(TUint aCardNumber) const;
+	inline TSDIOCard& NewCard(TUint aCardNumber) const;
+
+	TInt AddSDIOCard(TUint aCardNumber, TRCA& anRCA, TUint8 aFunctionCount);
+	TInt AddSDCard(TUint aCardNumber, TRCA& anRCA);
+
+	IMPORT_C virtual void DeclareCardAsGone(TUint aCardNumber);
+	};
+
+#include <drivers/sdio/sdiocard.inl>
+
+#endif	// #ifndef __SDIOCARD_H__