--- /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__