|
1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // PP_MMC.H |
|
15 // |
|
16 // |
|
17 |
|
18 #ifndef __PP_MMC_H__ |
|
19 |
|
20 #if defined(_UNICODE) && !defined(UNICODE) |
|
21 #define UNICODE |
|
22 #endif |
|
23 |
|
24 #include <mmc.h> |
|
25 #include <emulator.h> |
|
26 |
|
27 // MultiMedia Card Controller - platform specific layer. |
|
28 |
|
29 GLREF_C TInt MapLastErrorEpoc(); |
|
30 GLREF_C TMMCErr MapLastErrorMmc(); |
|
31 |
|
32 const TInt KMediaChangeTickInterval=20000; // Units 1uS |
|
33 |
|
34 |
|
35 const TInt KMax_TotalWinsCardSlots=8; ///< Maximal number of MMC cards supported by the emulator |
|
36 const TInt KMax_TotalWinsCards=(KMax_TotalWinsCardSlots+1); ///< Maximal number of MMC slots, supported by the emulator. Need 2 cards for slot 0 |
|
37 |
|
38 const TInt KDefault_TotalWinsCardSlots=2; ///< Default number of MMC cards supported by the emulator |
|
39 const TInt KDefault_TotalWinsCards=(KDefault_TotalWinsCardSlots+1); ///< Default number of MMC slots, supported by the emulator. Need 2 cards for slot 0 |
|
40 |
|
41 |
|
42 const TUint32 KMMCWinsCardOCRValue = 0x00FFFF00; |
|
43 |
|
44 class TWinsCardInfo |
|
45 { |
|
46 public: |
|
47 void GetCSD(TUint8* aResp) const; |
|
48 public: |
|
49 TCID iCID; |
|
50 TMediaPassword* iPWD; // PWD_LEN calculated from PWD. |
|
51 TBool iIsLocked; // Could use iCurrentCardIsLocked |
|
52 TMMCardStateEnum iState; // Simulation of card's current state |
|
53 HANDLE iWinHandle; |
|
54 TRCA iRCA; |
|
55 }; |
|
56 |
|
57 class DWinsMMCStack : public DMMCStack |
|
58 { |
|
59 private: |
|
60 DWinsMMCStack(TInt aBus, DMMCSocket* aSocket); |
|
61 TInt Init(); |
|
62 private: |
|
63 virtual void MachineInfo(TMMCMachineInfo& aMachineInfo); |
|
64 public: |
|
65 virtual void AdjustPartialRead(const TMMCard* aCard, TUint32 aStart, TUint32 aEnd, TUint32* aPhysStart, TUint32* aPhysEnd) const; |
|
66 virtual void GetBufferInfo(TUint8** aMDBuf, TInt* aMDBufLen); |
|
67 |
|
68 enum TWinsMMCPanic |
|
69 { |
|
70 EWinsMMCLidOpenIntBind=0, |
|
71 EWinsMMCBadMachineInfo=1, |
|
72 EWinsMMCMediaChangeTickFault = 2, |
|
73 EWinsMMCCorruptCommand = 3, |
|
74 EWinsMMCLockAttempt = 4, |
|
75 EWinsMMCAPRNotSupp = 5, |
|
76 EWinsMMCAPRRange = 6, |
|
77 EWinsMMCAPRBoundary = 7, |
|
78 |
|
79 EStkFFCNotSelCard = 0x010, EStkFFCNoneSel, |
|
80 EStkFOCNotSelCard = 0x011, EStkFOCMultiSel, EStkFOCNoneSel |
|
81 }; |
|
82 |
|
83 static TInt TotalMDiskSize; // mmc card size for emulator |
|
84 static TUint CSIZE; // mmc card size field |
|
85 static TUint CSIZE_MULT; // mmc card size field |
|
86 |
|
87 static TInt TotalWinsMMC_CardSlots; // total number of MMC card slots for the emulator |
|
88 static TInt TotalWinsMMC_Cards; // total number of MMC cards for the emulator |
|
89 |
|
90 static void Panic(TWinsMMCPanic aPanic); |
|
91 |
|
92 private: |
|
93 TUint8* iMDBuf; |
|
94 TInt iMDBufLen; |
|
95 |
|
96 private: |
|
97 // Stack service provided by ASSP layer |
|
98 void SetBusConfigDefaults(TMMCBusConfig&, TUint aClock); |
|
99 void InitClockOff(); |
|
100 void ASSPReset(); |
|
101 void ASSPDisengage(); |
|
102 void DoPowerDown(); |
|
103 // State Machine functions implemented in ASSP layer |
|
104 TMMCErr DoPowerUpSM(); |
|
105 TMMCErr InitClockOnSM(); |
|
106 TMMCErr IssueMMCCommandSM(); |
|
107 TMMCErr ModifyCardCapabilitySM(); |
|
108 private: |
|
109 TInt SetupSimulatedCard(TInt aCardNum); // init |
|
110 TInt CreateBinFileForCard(TInt aCardNum, HANDLE* aHandle, TBool aCreateNew = EFalse); |
|
111 TInt GetTargetSlotNumber(TBool anRCASupplied, const TRCA& anRCA); |
|
112 TInt FindAnyCardInStack(TMMCardStateEnum aState); |
|
113 TInt FindFirstCardInStack(TMMCardStateEnum aState); |
|
114 TInt FindOneCardInStack(TMMCardStateEnum aState); |
|
115 void SetupDiskParms(TUint); |
|
116 TMMCErr ReadWriteData(TInt aCardIdx, TUint8* aDataP, TUint32 aLength, TMMCCmdDirEnum aDir); |
|
117 private: |
|
118 TWinsCardInfo* iCardPool[KMax_TotalWinsCards]; // All the cards created |
|
119 TWinsCardInfo* iCardInfo[KMax_TotalWinsCardSlots]; // Cards currently present (1 per slot) |
|
120 TBool iCMD42Failed; |
|
121 TUint32 iBytesToTransfer; |
|
122 friend class DWinsMMCMediaChange; |
|
123 friend class TMMCardControllerInterfaceWins; |
|
124 }; |
|
125 |
|
126 class DWinsMMCStack; |
|
127 class DWinsMMCMediaChange : public DMMCMediaChange |
|
128 { |
|
129 public: |
|
130 DWinsMMCMediaChange(TInt aMediaChangeNum); |
|
131 virtual TInt Create(); |
|
132 virtual void ForceMediaChange(); |
|
133 virtual void DoDoorOpen(); |
|
134 virtual void DoDoorClosed(); |
|
135 virtual TMediaState MediaState(); |
|
136 inline void SetStackP(DWinsMMCStack* aStackP) {iStackP=aStackP;} |
|
137 protected: |
|
138 void DoorOpenService(); |
|
139 private: |
|
140 static void Tick(TAny *aPtr); |
|
141 void TickService(); |
|
142 void Enable(); |
|
143 void Disable(); |
|
144 static void MediaChangeCallBack(TAny *aPtr); |
|
145 static void MediaChangeDFC(TAny* aPtr); |
|
146 private: |
|
147 TTickLink iTickLink; |
|
148 TInt iDoorClosedCount; |
|
149 TBool iMediaChangeEnable; |
|
150 TInt iMediaDoorCloseReload; // Units: In theory-20ms, Actual-100ms |
|
151 DWinsMMCStack* iStackP; |
|
152 friend class DWinsMMCStack; |
|
153 }; |
|
154 |
|
155 class DWinsMMCPsu : public DMMCPsu |
|
156 { |
|
157 public: |
|
158 DWinsMMCPsu(TInt aVccNum, TInt aMcId); |
|
159 virtual TInt DoCreate(); |
|
160 virtual void DoSetState(TPBusPsuState aState); |
|
161 virtual TInt VoltageInMilliVolts(); |
|
162 private: |
|
163 virtual void DoCheckVoltage(); |
|
164 virtual void PsuInfo(TPBusPsuInfo &anInfo); |
|
165 }; |
|
166 |
|
167 #endif // #ifndef __PP_MMC_H__ |