32 <li id="GUID-D1B3A73F-E3AC-55C6-84E4-11A2AA9C3A7F"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-65547330-E112-55F2-AD4A-9B9CA5617E33">DoPowerDown()</xref> </p> </li> |
32 <li id="GUID-D1B3A73F-E3AC-55C6-84E4-11A2AA9C3A7F"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-65547330-E112-55F2-AD4A-9B9CA5617E33">DoPowerDown()</xref> </p> </li> |
33 <li id="GUID-4117DD14-59D4-5257-AAAD-79498391979E"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C8C15101-4614-5DEC-A620-6EAE8EC463ED">DoPowerUpSM()</xref> </p> </li> |
33 <li id="GUID-4117DD14-59D4-5257-AAAD-79498391979E"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C8C15101-4614-5DEC-A620-6EAE8EC463ED">DoPowerUpSM()</xref> </p> </li> |
34 <li id="GUID-D93B8DEC-CFA0-5FC9-AF46-81A3B21F3545"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C976320E-80FF-50F8-A882-F89C74F76ED3">InitClockOnSM()</xref> </p> </li> |
34 <li id="GUID-D93B8DEC-CFA0-5FC9-AF46-81A3B21F3545"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C976320E-80FF-50F8-A882-F89C74F76ED3">InitClockOnSM()</xref> </p> </li> |
35 <li id="GUID-F6BB7D3C-8A9A-5228-88ED-2F28980373D8"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-FABAED76-FC63-577B-9436-DC7C8978E2AE">IssueMMCCommandSM()</xref> </p> </li> |
35 <li id="GUID-F6BB7D3C-8A9A-5228-88ED-2F28980373D8"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-FABAED76-FC63-577B-9436-DC7C8978E2AE">IssueMMCCommandSM()</xref> </p> </li> |
36 </ul> <p id="GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282"><b>Init()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-43A06EF7-FA7B-3653-97B4-B04336E3EB54"><apiname>DMMCStack::Init()</apiname></xref> </p> <p>The |
36 </ul> <p id="GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282"><b>Init()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-43A06EF7-FA7B-3653-97B4-B04336E3EB54"><apiname>DMMCStack::Init()</apiname></xref> </p> <p>The |
37 function is intended to initialise the stack, and is called during initialisation |
37 function is intended to initialize the stack, and is called during initialization |
38 of the MultiMediaCard controller Variant DLL from <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita#GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7/GUID-18825E56-F155-38D0-A4DF-A7C57D73C1EF"><apiname>DMMCSocket::Init()</apiname></xref>: </p> <p>You |
38 of the MultiMediaCard controller Variant DLL from <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita#GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7/GUID-18825E56-F155-38D0-A4DF-A7C57D73C1EF"><apiname>DMMCSocket::Init()</apiname></xref>: </p> <p>You |
39 will almost certainly need to provide your own implementation to perform any |
39 will almost certainly need to provide your own implementation to perform any |
40 platform-specific MultiMediaCard stack initialisation. Whatever your implementation |
40 platform-specific MultiMediaCard stack initialization. Whatever your implementation |
41 provides, <i>it is important that you call the base class function from within |
41 provides, <i>it is important that you call the base class function from within |
42 your derived version</i>. </p> <p>Return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if initialisation |
42 your derived version</i>. </p> <p>Return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if initialization |
43 is successful, otherwise return one of the system-wide error codes to indicate |
43 is successful, otherwise return one of the system-wide error codes to indicate |
44 initialisation failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
44 initialization failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
45 cause the kernel to panic and to fail to boot. </p> <p>You will allocate a |
45 cause the kernel to panic and to fail to boot. </p> <p>You will allocate a |
46 data transfer buffer here. The MultiMediaCard media driver needs a memory |
46 data transfer buffer here. The MultiMediaCard media driver needs a memory |
47 buffer to perform data transfer operations. Where supported, DMA is generally |
47 buffer to perform data transfer operations. Where supported, DMA is generally |
48 used to do this, and requires physically contiguous memory. However, the media |
48 used to do this, and requires physically contiguous memory. However, the media |
49 driver is created each time a card is inserted into a machine and destroyed |
49 driver is created each time a card is inserted into a machine and destroyed |
57 <li id="GUID-21E69407-DEB2-5DBE-9614-ADFF7DBF06B6"><p>a minor buffer which |
57 <li id="GUID-21E69407-DEB2-5DBE-9614-ADFF7DBF06B6"><p>a minor buffer which |
58 must have at least enough space for the MBR (512 bytes) </p> </li> |
58 must have at least enough space for the MBR (512 bytes) </p> </li> |
59 <li id="GUID-1FF25456-0CE3-582C-9FEC-B5913C1E437A"><p>a cache buffer to cache |
59 <li id="GUID-1FF25456-0CE3-582C-9FEC-B5913C1E437A"><p>a cache buffer to cache |
60 data blocks from the card. </p> </li> |
60 data blocks from the card. </p> </li> |
61 </ul> <p>The ideal size of the cache buffer depends on the characteristics |
61 </ul> <p>The ideal size of the cache buffer depends on the characteristics |
62 of the card present at the time, and it is possible to customise the MultiMediaCard |
62 of the card present at the time, and it is possible to customize the MultiMediaCard |
63 controller at the platform specific layer for a particular card. </p> <p>The |
63 controller at the platform specific layer for a particular card. </p> <p>The |
64 following example code allocates a physically contiguous buffer - a minor |
64 following example code allocates a physically contiguous buffer - a minor |
65 buffer size of one block is allocated together with a cache buffer size of |
65 buffer size of one block is allocated together with a cache buffer size of |
66 eight blocks. The whole buffer is then rounded up to a whole number of memory |
66 eight blocks. The whole buffer is then rounded up to a whole number of memory |
67 pages. </p> <codeblock id="GUID-B01B50BE-6574-5A81-BA25-8FDFEB2C5620" xml:space="preserve">// The constant calculations could be explicitly folded, but this illustrates |
67 pages. </p> <codeblock id="GUID-B01B50BE-6574-5A81-BA25-8FDFEB2C5620" xml:space="preserve">// The constant calculations could be explicitly folded, but this illustrates |
135 *aPhysEnd = (aEnd + KWordMask) & ~KWordMask; |
135 *aPhysEnd = (aEnd + KWordMask) & ~KWordMask; |
136 ... |
136 ... |
137 } |
137 } |
138 </codeblock> <p id="GUID-8A3E9782-C8D4-562D-9470-5CCE0ED1C303"><b>GetBufferInfo()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-EC9B740A-3A07-35AB-BACE-2EC1F96EEF0F"><apiname>DMMCStack::GetBufferInfo()</apiname></xref> </p> <p>The |
138 </codeblock> <p id="GUID-8A3E9782-C8D4-562D-9470-5CCE0ED1C303"><b>GetBufferInfo()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-EC9B740A-3A07-35AB-BACE-2EC1F96EEF0F"><apiname>DMMCStack::GetBufferInfo()</apiname></xref> </p> <p>The |
139 MultiMediaCard media driver needs a memory buffer to perform data transfer |
139 MultiMediaCard media driver needs a memory buffer to perform data transfer |
140 operations, and this is, typically, allocated once only by the <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282">Init()</xref> function when this stack object is initialised. </p> <p>The |
140 operations, and this is, typically, allocated once only by the <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282">Init()</xref> function when this stack object is initialized. </p> <p>The |
141 MultiMediaCard media driver is created each time a card is inserted into a |
141 MultiMediaCard media driver is created each time a card is inserted into a |
142 machine and destroyed when the card is removed, and it uses this function, |
142 machine and destroyed when the card is removed, and it uses this function, |
143 each time it is created to get a pointer to the memory buffer, and to get |
143 each time it is created to get a pointer to the memory buffer, and to get |
144 its length. The MultiMediaCard media driver then uses this buffer, over its |
144 its length. The MultiMediaCard media driver then uses this buffer, over its |
145 lifetime, for data transfer operations. </p> <p id="GUID-BC742EB6-7063-5D00-B422-96B3772605D5"><b>SetBusConfigDefaults()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-C7297E13-5F78-396D-842B-FB16D3424374"><apiname>DMMCStack::SetBusConfigDefaults()</apiname></xref> </p> <p>The function returns information about the MultiMediaCard bus configuration |
145 lifetime, for data transfer operations. </p> <p id="GUID-BC742EB6-7063-5D00-B422-96B3772605D5"><b>SetBusConfigDefaults()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-C7297E13-5F78-396D-842B-FB16D3424374"><apiname>DMMCStack::SetBusConfigDefaults()</apiname></xref> </p> <p>The function returns information about the MultiMediaCard bus configuration |
160 and the result is stored in <codeph>iConfig</codeph>. It is these merged bus |
160 and the result is stored in <codeph>iConfig</codeph>. It is these merged bus |
161 configuration settings that are used to configure the hardware interface. |
161 configuration settings that are used to configure the hardware interface. |
162 The platform specific layer can access these settings with a call to Master<xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-E0275614-109E-3803-A0AE-3313E1E0038B"><apiname>DMMCStack::BusConfig()</apiname></xref>. </p> <p> <codeph> SetBusConfigDefaults()</codeph> is called at two stages in the execution of the macro CIM_UPDATE_ACQ to |
162 The platform specific layer can access these settings with a call to Master<xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-E0275614-109E-3803-A0AE-3313E1E0038B"><apiname>DMMCStack::BusConfig()</apiname></xref>. </p> <p> <codeph> SetBusConfigDefaults()</codeph> is called at two stages in the execution of the macro CIM_UPDATE_ACQ to |
163 update the <codeph>iMasterConfig</codeph> object. </p> <ul> |
163 update the <codeph>iMasterConfig</codeph> object. </p> <ul> |
164 <li id="GUID-5C98DB8C-60AF-5333-A250-5D6509D754E5"><p>First, it is called |
164 <li id="GUID-5C98DB8C-60AF-5333-A250-5D6509D754E5"><p>First, it is called |
165 at the start of the card initialisation stage with the bus speed argument, <codeph>aClock</codeph>, |
165 at the start of the card initialization stage with the bus speed argument, <codeph>aClock</codeph>, |
166 set to the fOD rate (400kHz). </p> </li> |
166 set to the fOD rate (400kHz). </p> </li> |
167 <li id="GUID-0CD15184-15F8-5104-908F-612CCBCA953A"><p>Second, it is called |
167 <li id="GUID-0CD15184-15F8-5104-908F-612CCBCA953A"><p>Second, it is called |
168 after the CSD registers for each card have been read with the bus speed argument, <codeph>aClock</codeph>, |
168 after the CSD registers for each card have been read with the bus speed argument, <codeph>aClock</codeph>, |
169 set to the slowest maximum transfer rate (TRAN_SPEED) reported by any of the |
169 set to the slowest maximum transfer rate (TRAN_SPEED) reported by any of the |
170 CSD registers. </p> </li> |
170 CSD registers. </p> </li> |
195 any requested power requirements made on the power model, i.e. release any |
195 any requested power requirements made on the power model, i.e. release any |
196 power requirements made by <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C976320E-80FF-50F8-A882-F89C74F76ED3">InitClockOnSM()</xref>. </p> <p>At the end of your implementation, you must add a call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-3DFCBE96-E9F3-3FF3-97BC-A3A3024089BD"><apiname>DMMCStack::ReportASSPDisengaged()</apiname></xref> to |
196 power requirements made by <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-C976320E-80FF-50F8-A882-F89C74F76ED3">InitClockOnSM()</xref>. </p> <p>At the end of your implementation, you must add a call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-3DFCBE96-E9F3-3FF3-97BC-A3A3024089BD"><apiname>DMMCStack::ReportASSPDisengaged()</apiname></xref> to |
197 report to the platform independent layer that platform specific layer resources |
197 report to the platform independent layer that platform specific layer resources |
198 have been disengaged. </p> <p id="GUID-6EEE7EF6-4272-5116-BCEF-A852BB7B8FBD"><b>CardDetect()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-02C4D1A0-6149-389D-9F31-3E7EBF1DCA66"><apiname>DMMCStack::CardDetect()</apiname></xref> </p> <p>Implement |
198 have been disengaged. </p> <p id="GUID-6EEE7EF6-4272-5116-BCEF-A852BB7B8FBD"><b>CardDetect()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-02C4D1A0-6149-389D-9F31-3E7EBF1DCA66"><apiname>DMMCStack::CardDetect()</apiname></xref> </p> <p>Implement |
199 this function to report whether a card is present in a specified card socket. </p> <p>This |
199 this function to report whether a card is present in a specified card socket. </p> <p>This |
200 function takes a TUint value containing the card socket that is to be queried. </p> <p id="GUID-3F34865D-5B16-5F53-AF9E-9F52DB5D0FB5"><b>WriteProtected()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-E7E97501-10E7-38E6-9F8C-2A62F260BA46"><apiname>DMMCStack::WriteProtected()</apiname></xref> </p> <p>Implement |
200 function takes a <xref href="GUID-F9432D7B-41C9-3048-AC50-B5BCF8BE11D0.dita"><apiname>TUint</apiname></xref> value containing the card socket |
|
201 that is to be queried. </p> <p id="GUID-3F34865D-5B16-5F53-AF9E-9F52DB5D0FB5"><b>WriteProtected()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-E7E97501-10E7-38E6-9F8C-2A62F260BA46"><apiname>DMMCStack::WriteProtected()</apiname></xref> </p> <p>Implement |
201 this function to report whether a card in a specified card socket is mechanically |
202 this function to report whether a card in a specified card socket is mechanically |
202 write protected. </p> <p>This function takes a TUint value containing the |
203 write protected. </p> <p>This function takes a <xref href="GUID-F9432D7B-41C9-3048-AC50-B5BCF8BE11D0.dita"><apiname>TUint</apiname></xref> value |
203 card socket that is to be queried. </p> <p id="GUID-65547330-E112-55F2-AD4A-9B9CA5617E33"><b>DoPowerDown()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-3E90AF73-F4D3-34C5-B6D3-6BF69C6137C8"><apiname>DMMCStack::DoPowerDown()</apiname></xref> </p> <p>This |
204 containing the card socket that is to be queried. </p> <p id="GUID-65547330-E112-55F2-AD4A-9B9CA5617E33"><b>DoPowerDown()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-3E90AF73-F4D3-34C5-B6D3-6BF69C6137C8"><apiname>DMMCStack::DoPowerDown()</apiname></xref> </p> <p>This |
204 function is called as part of the bus power down sequence: </p> <ul> |
205 function is called as part of the bus power down sequence: </p> <ul> |
205 <li id="GUID-E9E072D3-A2F7-5DD2-B7D9-A89840BBA914"><p>by the power model, |
206 <li id="GUID-E9E072D3-A2F7-5DD2-B7D9-A89840BBA914"><p>by the power model, |
206 in power standby and power emergency standby situations </p> </li> |
207 in power standby and power emergency standby situations </p> </li> |
207 <li id="GUID-1EFB0616-45B9-5EC2-9456-54F7D10D2894"><p>when a door-open event |
208 <li id="GUID-1EFB0616-45B9-5EC2-9456-54F7D10D2894"><p>when a door-open event |
208 occurs </p> </li> |
209 occurs </p> </li> |
215 made on the power model. The function is very often implemented as a call |
216 made on the power model. The function is very often implemented as a call |
216 of <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-99AC4F3B-E273-515E-8690-983E98E17256">ASSPReset()</xref>. </p> <p>The |
217 of <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-99AC4F3B-E273-515E-8690-983E98E17256">ASSPReset()</xref>. </p> <p>The |
217 function should not turn off the MultiMediaCard power supply unit as this |
218 function should not turn off the MultiMediaCard power supply unit as this |
218 will be performed immediately afterwards by a call to the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-4DF0741F-B143-3B46-82BE-9CD0261C27E5"><apiname>DMMCPsu::DoSetState()</apiname></xref> derived |
219 will be performed immediately afterwards by a call to the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-4DF0741F-B143-3B46-82BE-9CD0261C27E5"><apiname>DMMCPsu::DoSetState()</apiname></xref> derived |
219 class function from the platform independent layer. </p> <p id="GUID-C8C15101-4614-5DEC-A620-6EAE8EC463ED"><b> DoPowerUpSM()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-791BCA03-61F3-3C1C-BA2D-D633A94AF299"><apiname>DMMCStack::DoPowerUpSM()</apiname></xref> </p> <p>This |
220 class function from the platform independent layer. </p> <p id="GUID-C8C15101-4614-5DEC-A620-6EAE8EC463ED"><b> DoPowerUpSM()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-791BCA03-61F3-3C1C-BA2D-D633A94AF299"><apiname>DMMCStack::DoPowerUpSM()</apiname></xref> </p> <p>This |
220 is a state machine function, called as a child function at the start of the |
221 is a state machine function, called as a child function at the start of the <codeph>CIM_UPDATE_ACQ</codeph> macro |
221 CIM_UPDATE_ACQ macro state machine. </p> <p>The function should perform the |
222 state machine. </p> <p>The function should perform the necessary platform |
222 necessary platform specific actions associated with powering up the bus. This |
223 specific actions associated with powering up the bus. This includes turning |
223 includes turning on the MultiMediaCard PSU. However, the hardware interface |
224 on the MultiMediaCard PSU. However, the hardware interface clock should <i>not</i> be |
224 clock should <i>not</i> be turned on as part of this function. </p> <p>If |
225 turned on as part of this function. </p> <p>If the controller has to request |
225 the controller has to request power resources from the power model, e.g. where |
226 power resources from the power model, e.g. where a fast system clock is required |
226 a fast system clock is required all the time the bus is powered, then this |
227 all the time the bus is powered, then this state machine function can be used |
227 state machine function can be used to wait asynchronously for this resource |
228 to wait asynchronously for this resource to become available. </p> <p>If the |
228 to become available. </p> <p>If the activity performed by this function completes |
229 activity performed by this function completes successfully: </p> <ul> |
229 successfully: </p> <ul> |
|
230 <li id="GUID-7C64DB32-139B-5F45-9F2C-6693F9E16F83"><p>it must call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-40973A35-3A73-3DBD-9EB7-99CE55E6D694"><apiname>DMMCStack::ReportPowerUp()</apiname></xref>. </p> </li> |
230 <li id="GUID-7C64DB32-139B-5F45-9F2C-6693F9E16F83"><p>it must call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-40973A35-3A73-3DBD-9EB7-99CE55E6D694"><apiname>DMMCStack::ReportPowerUp()</apiname></xref>. </p> </li> |
231 <li id="GUID-42E872B5-EA6A-5901-AD93-5F9B99C81D69"><p>it returns <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref>. </p> </li> |
231 <li id="GUID-42E872B5-EA6A-5901-AD93-5F9B99C81D69"><p>it returns <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref>. </p> </li> |
232 </ul> <p>The function should return <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref> if it completes |
232 </ul> <p>The function should return <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref> if it completes |
233 successfully or one of the other <xref href="GUID-FF4AB1CF-7A2C-3FC6-B123-D6819E1BCDCA.dita"><apiname>TMMCErr</apiname></xref> error codes. </p> <p>See |
233 successfully or one of the other <xref href="GUID-FF4AB1CF-7A2C-3FC6-B123-D6819E1BCDCA.dita"><apiname>TMMCErr</apiname></xref> error codes. </p> <p>See |
234 the general background information on <xref href="GUID-80E0DB93-A96A-54A8-A201-E11935418BE7.dita">the |
234 the general background information on <xref href="GUID-80E0DB93-A96A-54A8-A201-E11935418BE7.dita">the |
235 state machine</xref>. </p> <p id="GUID-C976320E-80FF-50F8-A882-F89C74F76ED3"><b>InitClockOnSM()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-7B91EF52-26E5-333C-A037-B142B492BCC4"><apiname>DMMCStack::InitClockOnSM()</apiname></xref> </p> <p>This |
235 state machine</xref>. </p> <p id="GUID-C976320E-80FF-50F8-A882-F89C74F76ED3"><b>InitClockOnSM()</b> </p> <p> <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-7B91EF52-26E5-333C-A037-B142B492BCC4"><apiname>DMMCStack::InitClockOnSM()</apiname></xref> </p> <p>This |
236 is a state machine function, called as part of the CIM_UPDATE_ACQ macro state |
236 is a state machine function, called as part of the <codeph>CIM_UPDATE_ACQ</codeph> macro |
237 machine. </p> <p>The function should turn on the clock to the hardware interface. |
237 state machine. </p> <p>The function should turn on the clock to the hardware |
238 The function is so named because this clock is always first turned on at the |
238 interface. The function is so named because this clock is always first turned |
239 identification mode frequency. </p> <p>The function is implemented as a state |
239 on at the identification mode frequency. </p> <p>The function is implemented |
240 machine function because it may be necessary to include a short delay after |
240 as a state machine function because it may be necessary to include a short |
241 the clock has been turned on to allow it to stabilise. </p> <p>If it is necessary |
241 delay after the clock has been turned on to allow it to stabilize. </p> <p>If |
242 for the MultiMediaCard controller to request any power resources from the |
242 it is necessary for the MultiMediaCard controller to request any power resources |
243 power model on this platform, for example, requesting a necessary system clock, |
243 from the power model on this platform, for example, requesting a necessary |
244 then it should be performed as part of this function. In some cases, it may |
244 system clock, then it should be performed as part of this function. In some |
245 be necessary to wait for this power resource to become available. </p> <p>At |
245 cases, it may be necessary to wait for this power resource to become available. </p> <p>At |
246 the <i>beginning</i> of your implementation, you must add a call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-D797747A-0AF6-36B1-BD92-3D6950A3B7B4"><apiname>DMMCStack::ReportASSPEngaged()</apiname></xref> to |
246 the <i>beginning</i> of your implementation, you must add a call <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-D797747A-0AF6-36B1-BD92-3D6950A3B7B4"><apiname>DMMCStack::ReportASSPEngaged()</apiname></xref> to |
247 report to the platform independent layer that platform specific layer resources |
247 report to the platform independent layer that platform specific layer resources |
248 have been engaged. </p> <p>The function should return <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref> if |
248 have been engaged. </p> <p>The function should return <xref href="GUID-E7D46003-E502-39D1-AF52-83B87AE6930B.dita"><apiname>KMMCErrNone</apiname></xref> if |
249 it completes successfully or one of the other <xref href="GUID-FF4AB1CF-7A2C-3FC6-B123-D6819E1BCDCA.dita"><apiname>TMMCErr</apiname></xref> error |
249 it completes successfully or one of the other <xref href="GUID-FF4AB1CF-7A2C-3FC6-B123-D6819E1BCDCA.dita"><apiname>TMMCErr</apiname></xref> error |
250 codes. </p> <p>Note: </p> <ul> |
250 codes. </p> <p>Note: </p> <ul> |
251 <li id="GUID-2474710D-C595-5331-9182-A2EF97A1EB27"><p>the function is only |
251 <li id="GUID-2474710D-C595-5331-9182-A2EF97A1EB27"><p>the function is only |
252 called once for each invocation of the CIM_UPDATE_ACQ macro and the important |
252 called once for each invocation of the CIM_UPDATE_ACQ macro and the important |
253 thing to stress is that the interface clock is being turned on after a period |
253 thing to stress is that the interface clock is being turned on after a period |
254 when it has been off, and therefore often requires time to stabilise. </p> </li> |
254 when it has been off, and therefore often requires time to stabilize. </p> </li> |
255 <li id="GUID-FE92334D-757D-5C08-AF98-9E0912BA2820"><p>In the course of executing |
255 <li id="GUID-FE92334D-757D-5C08-AF98-9E0912BA2820"><p>In the course of executing |
256 a session, the MultiMediaCard controller may switch the clock more than once |
256 a session, the MultiMediaCard controller may switch the clock more than once |
257 between the identification mode frequency and the data transfer mode frequency, |
257 between the identification mode frequency and the data transfer mode frequency, |
258 but this function only ever gets called once. </p> </li> |
258 but this function only ever gets called once. </p> </li> |
259 </ul> <p>See the general background information on <xref href="GUID-80E0DB93-A96A-54A8-A201-E11935418BE7.dita">the |
259 </ul> <p>See the general background information on <xref href="GUID-80E0DB93-A96A-54A8-A201-E11935418BE7.dita">the |
304 <li id="GUID-025272EF-9DE8-5975-8993-006EE4D56E80"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE">DoCreate()</xref> </p> </li> |
304 <li id="GUID-025272EF-9DE8-5975-8993-006EE4D56E80"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE">DoCreate()</xref> </p> </li> |
305 <li id="GUID-6BAFE3AA-6CCA-581B-A96C-D1FD89D1D8CD"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-99529E84-17E1-5F23-9A1B-EBE3976D9B14">PsuInfo()</xref> </p> </li> |
305 <li id="GUID-6BAFE3AA-6CCA-581B-A96C-D1FD89D1D8CD"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-99529E84-17E1-5F23-9A1B-EBE3976D9B14">PsuInfo()</xref> </p> </li> |
306 <li id="GUID-7419D681-D0CC-5CA7-8EE7-0D5A20779921"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-5809318D-E3E1-5261-AABA-604EBE72523F">DoSetState()</xref> </p> </li> |
306 <li id="GUID-7419D681-D0CC-5CA7-8EE7-0D5A20779921"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-5809318D-E3E1-5261-AABA-604EBE72523F">DoSetState()</xref> </p> </li> |
307 <li id="GUID-E570E830-B57E-5A39-9EF1-CF68F3853AFF"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-B5030D2E-A466-596C-A2C3-73F38CF9C1A7">DoCheckVoltage()</xref> </p> </li> |
307 <li id="GUID-E570E830-B57E-5A39-9EF1-CF68F3853AFF"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-B5030D2E-A466-596C-A2C3-73F38CF9C1A7">DoCheckVoltage()</xref> </p> </li> |
308 </ul> <p id="GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE"><b>DoCreate()</b> </p> <p> <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-32771B9D-D2B8-33F5-AFC5-4476165C0A76"><apiname>DMMCPsu::DoCreate()</apiname></xref> </p> <p>The |
308 </ul> <p id="GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE"><b>DoCreate()</b> </p> <p> <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-32771B9D-D2B8-33F5-AFC5-4476165C0A76"><apiname>DMMCPsu::DoCreate()</apiname></xref> </p> <p>The |
309 function is intended to perform hardware initialisation on the MultiMediaCard |
309 function is intended to perform hardware initialization on the MultiMediaCard |
310 power supply, for example, setting port direction registers. </p> <p>The function |
310 power supply, for example, setting port direction registers. </p> <p>The function |
311 is called after creation of the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita"><apiname>DMMCPsu</apiname></xref> derived class instance, |
311 is called after creation of the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita"><apiname>DMMCPsu</apiname></xref> derived class instance, |
312 which is done during kernel initialisation when the MultiMediaCard controller |
312 which is done during kernel initialization when the MultiMediaCard controller |
313 Variant DLL extension is loaded. </p> <p>The function has a default implementation |
313 Variant DLL extension is loaded. </p> <p>The function has a default implementation |
314 that just returns <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref>. </p> <p>Your implementation |
314 that just returns <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref>. </p> <p>Your implementation |
315 should <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if the hardware initialisation is successful, |
315 should <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if the hardware initialization is successful, |
316 otherwise it should return one of the system-wide error codes to indicate |
316 otherwise it should return one of the system-wide error codes to indicate |
317 initialisation failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
317 initialization failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
318 cause the kernel to panic and to fail to boot. </p> <p id="GUID-99529E84-17E1-5F23-9A1B-EBE3976D9B14"><b>PsuInfo()</b> </p> <p> <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-C7600EDA-B564-31E2-835C-9C580A29FC1D"><apiname>DMMCPsu::PsuInfo()</apiname></xref> </p> <p>The |
318 cause the kernel to panic and to fail to boot. </p> <p id="GUID-99529E84-17E1-5F23-9A1B-EBE3976D9B14"><b>PsuInfo()</b> </p> <p> <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita#GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B/GUID-C7600EDA-B564-31E2-835C-9C580A29FC1D"><apiname>DMMCPsu::PsuInfo()</apiname></xref> </p> <p>The |
319 function returns information about the MultiMediaCard power supply. </p> <p>The |
319 function returns information about the MultiMediaCard power supply. </p> <p>The |
320 function takes a reference to a <xref href="GUID-E3BB783F-423F-352A-9B6E-FD23EC80AA8D.dita"><apiname>TPBusPsuInfo</apiname></xref> object, and |
320 function takes a reference to a <xref href="GUID-E3BB783F-423F-352A-9B6E-FD23EC80AA8D.dita"><apiname>TPBusPsuInfo</apiname></xref> object, and |
321 your implementation must fill the public data members of the object. </p> <p>Note: </p> <ul> |
321 your implementation must fill the public data members of the object. </p> <p>Note: </p> <ul> |
322 <li id="GUID-B8527FE4-61BB-574A-A200-5EA083A76A6D"><p>You can use the constant <xref href="GUID-3B63FFD6-AE21-366A-B435-AE6213AA2EE0.dita"><apiname>KMMCAdjustableOpVoltage</apiname></xref> to |
322 <li id="GUID-B8527FE4-61BB-574A-A200-5EA083A76A6D"><p>You can use the constant <xref href="GUID-3B63FFD6-AE21-366A-B435-AE6213AA2EE0.dita"><apiname>KMMCAdjustableOpVoltage</apiname></xref> to |
341 Pass <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> to indicate a successful check; pass <xref href="GUID-A94AC24A-EADF-3913-8345-708ED637968E.dita"><apiname>KErrGeneral</apiname></xref> to |
341 Pass <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> to indicate a successful check; pass <xref href="GUID-A94AC24A-EADF-3913-8345-708ED637968E.dita"><apiname>KErrGeneral</apiname></xref> to |
342 indicate a failed check. </p> <p>Note that this function is not called as |
342 indicate a failed check. </p> <p>Note that this function is not called as |
343 part of <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-791BCA03-61F3-3C1C-BA2D-D633A94AF299"><apiname>DMMCStack::DoPowerUpSM()</apiname></xref> processing, which means |
343 part of <xref href="GUID-B5193656-9819-3E00-A335-EEF1726115A5.dita#GUID-B5193656-9819-3E00-A335-EEF1726115A5/GUID-791BCA03-61F3-3C1C-BA2D-D633A94AF299"><apiname>DMMCStack::DoPowerUpSM()</apiname></xref> processing, which means |
344 that it is not possible to use this function to introduce a delay until power |
344 that it is not possible to use this function to introduce a delay until power |
345 is stable when the PSU is turned on. If such a delay is required while the |
345 is stable when the PSU is turned on. If such a delay is required while the |
346 power lines stabilise, then it will be necessary to make this function part |
346 power lines stabilize, then it will be necessary to make this function part |
347 of the DoPowerUpSM state machine. </p> </section> |
347 of the DoPowerUpSM state machine. </p> </section> |
348 <section id="GUID-C80E57B1-933B-55D7-949B-E68DB9B96B94"><title>DMMCMediaChange |
348 <section id="GUID-C80E57B1-933B-55D7-949B-E68DB9B96B94"><title>DMMCMediaChange |
349 derived class</title> <p>This class provides support for dealing with media |
349 derived class</title> <p>This class provides support for dealing with media |
350 change events, i.e. the insertion and removal of removable media. </p> <p>A |
350 change events, i.e. the insertion and removal of removable media. </p> <p>A |
351 class needs to be derived from this in the platform specific layer to handle |
351 class needs to be derived from this in the platform specific layer to handle |
359 <li id="GUID-C1235A87-68BB-5AF4-80F6-DFB7DBA8432C"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-726A2A5F-18D3-55BD-9B92-0676266794C6">MediaState()</xref> </p> </li> |
359 <li id="GUID-C1235A87-68BB-5AF4-80F6-DFB7DBA8432C"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-726A2A5F-18D3-55BD-9B92-0676266794C6">MediaState()</xref> </p> </li> |
360 <li id="GUID-BBAEC56C-DBA7-586C-A9CC-1E4E70A81096"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-1ADD0F5A-B561-54AE-BB2F-81AC3E8D81A4">DoDoorOpen()</xref> </p> </li> |
360 <li id="GUID-BBAEC56C-DBA7-586C-A9CC-1E4E70A81096"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-1ADD0F5A-B561-54AE-BB2F-81AC3E8D81A4">DoDoorOpen()</xref> </p> </li> |
361 <li id="GUID-22D6992C-868B-5E18-9AA0-624EA51DB529"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-58829228-43A9-546B-8CFD-31DF8FBB0078">DoDoorClosed()</xref> </p> </li> |
361 <li id="GUID-22D6992C-868B-5E18-9AA0-624EA51DB529"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-58829228-43A9-546B-8CFD-31DF8FBB0078">DoDoorClosed()</xref> </p> </li> |
362 <li id="GUID-04B7E650-7DA8-5F61-9D8E-89FC2B93AE20"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-F91B9434-5B90-5221-B5E6-D57F50391D81">ForceMediaChange()</xref> </p> </li> |
362 <li id="GUID-04B7E650-7DA8-5F61-9D8E-89FC2B93AE20"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-F91B9434-5B90-5221-B5E6-D57F50391D81">ForceMediaChange()</xref> </p> </li> |
363 </ul> <p id="GUID-BFC23CC1-102F-5740-A608-CF91C2BC3897"><b>Create()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-F96EF34B-7B38-37DC-9B34-E0D4D1963622"><apiname>DMMCMediaChange::Create()</apiname></xref> </p> <p>The |
363 </ul> <p id="GUID-BFC23CC1-102F-5740-A608-CF91C2BC3897"><b>Create()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-F96EF34B-7B38-37DC-9B34-E0D4D1963622"><apiname>DMMCMediaChange::Create()</apiname></xref> </p> <p>The |
364 function is intended to perform hardware initialisation on the MultiMediaCard |
364 function is intended to perform hardware initialization on the MultiMediaCard |
365 media change hardware, for example, setting port direction registers, binding |
365 media change hardware, for example, setting port direction registers, binding |
366 to the door open interrupt etc. </p> <p>The function is called after creation |
366 to the door open interrupt etc. </p> <p>The function is called after creation |
367 of the <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita"><apiname>DMMCMediaChange</apiname></xref> derived class instance, which is |
367 of the <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita"><apiname>DMMCMediaChange</apiname></xref> derived class instance, which is |
368 done during kernel initialisation when the MultiMediaCard controller Variant |
368 done during kernel initialization when the MultiMediaCard controller Variant |
369 DLL extension is loaded. </p> <p>The function has a default implementation |
369 DLL extension is loaded. </p> <p>The function has a default implementation |
370 that just returns <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref>. </p> <p>Your implementation |
370 that just returns <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref>. </p> <p>Your implementation |
371 should return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if the hardware initialisation is |
371 should return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> if the hardware initialization is |
372 successful, otherwise it should return one of the system-wide error codes |
372 successful, otherwise it should return one of the system-wide error codes |
373 to indicate initialisation failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
373 to indicate initialization failure. Note that returning a value other than <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> will |
374 cause the kernel to panic and to fail to boot. </p> <p id="GUID-726A2A5F-18D3-55BD-9B92-0676266794C6"><b> MediaState()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-A951EF31-83F1-3E07-A5BD-5342B6125ACF"><apiname>DMMCMediaChange::MediaState()</apiname></xref> </p> <p>The |
374 cause the kernel to panic and to fail to boot. </p> <p id="GUID-726A2A5F-18D3-55BD-9B92-0676266794C6"><b> MediaState()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-A951EF31-83F1-3E07-A5BD-5342B6125ACF"><apiname>DMMCMediaChange::MediaState()</apiname></xref> </p> <p>The |
375 function should return the current state of the media, i.e. whether the media |
375 function should return the current state of the media, i.e. whether the media |
376 door is open or closed. To indicate the state, it should return one of the <xref href="GUID-49F96729-2DDB-37E0-AE39-9BEF2B7FF7F9.dita"><apiname>TMediaState</apiname></xref> enum |
376 door is open or closed. To indicate the state, it should return one of the <xref href="GUID-49F96729-2DDB-37E0-AE39-9BEF2B7FF7F9.dita"><apiname>TMediaState</apiname></xref> enum |
377 values. </p> <p id="GUID-1ADD0F5A-B561-54AE-BB2F-81AC3E8D81A4"><b>DoDoorOpen()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-6F734353-3458-3A8B-93E7-317674A1CAA4"><apiname>DMMCMediaChange::DoDoorOpen()</apiname></xref> </p> <p>This |
377 values. </p> <p id="GUID-1ADD0F5A-B561-54AE-BB2F-81AC3E8D81A4"><b>DoDoorOpen()</b> </p> <p> <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita#GUID-2F974AD8-551B-35F0-B72C-99122913714D/GUID-6F734353-3458-3A8B-93E7-317674A1CAA4"><apiname>DMMCMediaChange::DoDoorOpen()</apiname></xref> </p> <p>This |
378 function should handle a media door open event. What needs to be done depends |
378 function should handle a media door open event. What needs to be done depends |
430 identified by the specified peripheral bus socket number, is designated as |
430 identified by the specified peripheral bus socket number, is designated as |
431 a MultiMediaCard socket on this platform. It should return <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref> if |
431 a MultiMediaCard socket on this platform. It should return <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref> if |
432 the socket has been so designated, and return <xref href="GUID-A759CA2D-8327-348F-9337-4886E619D920.dita"><apiname>EFalse</apiname></xref> if |
432 the socket has been so designated, and return <xref href="GUID-A759CA2D-8327-348F-9337-4886E619D920.dita"><apiname>EFalse</apiname></xref> if |
433 not. </p> <p>The function is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>, |
433 not. </p> <p>The function is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>, |
434 which passes a socket number that can fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>. </p> <p>Internally, |
434 which passes a socket number that can fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>. </p> <p>Internally, |
435 Symbian OS reserves space for an array of pointers to <xref href="GUID-C988CAE6-9073-3851-A0B0-5479D1A34CFB.dita"><apiname>DPBusSocket</apiname></xref> objects, |
435 Symbian platform reserves space for an array of pointers to <xref href="GUID-C988CAE6-9073-3851-A0B0-5479D1A34CFB.dita"><apiname>DPBusSocket</apiname></xref> objects, |
436 and this function allows the platform specific layer to identify which slot |
436 and this function allows the platform specific layer to identify which slot |
437 is to be used for the <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> object. </p> <codeblock id="GUID-F1E0478A-8CE8-5E2F-87F8-AAFCCCE8A042" xml:space="preserve">GLDEF_D DPBusSocket* TheSockets[KMaxPBusSockets];</codeblock> <p>(This |
437 is to be used for the <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> object. </p> <codeblock id="GUID-F1E0478A-8CE8-5E2F-87F8-AAFCCCE8A042" xml:space="preserve">GLDEF_D DPBusSocket* TheSockets[KMaxPBusSockets];</codeblock> <p>(This |
438 array is internal to Symbian OS.) </p> <p>If, on this platform, a socket has |
438 array is internal to Symbian platform.) </p> <p>If, on this platform, a socket |
439 been designated as a MultiMediaCard stack, then the function not only returns <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>, |
439 has been designated as a MultiMediaCard stack, then the function not only |
440 but also provides the media information for that socket, by filling in the |
440 returns <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>, but also provides the media information |
441 members of the <xref href="GUID-FC0F974E-9ABB-348B-9AE9-778B3A1F413A.dita"><apiname>SMediaDeviceInfo</apiname></xref> object passed in. </p> <p id="GUID-829E686F-58F9-56A9-9EC4-CD59B14E127B"><b>NewSocket()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-90615A9A-BFC2-3E1B-B2AC-7D1CF322FC65"><apiname>TMMCardControllerInterface::NewSocket()</apiname></xref> </p> <p>Implement |
441 for that socket, by filling in the members of the <xref href="GUID-FC0F974E-9ABB-348B-9AE9-778B3A1F413A.dita"><apiname>SMediaDeviceInfo</apiname></xref> object |
|
442 passed in. </p> <p id="GUID-829E686F-58F9-56A9-9EC4-CD59B14E127B"><b>NewSocket()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-90615A9A-BFC2-3E1B-B2AC-7D1CF322FC65"><apiname>TMMCardControllerInterface::NewSocket()</apiname></xref> </p> <p>Implement |
442 this function to create, and return a pointer to, an instance of the <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> class. |
443 this function to create, and return a pointer to, an instance of the <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> class. |
443 This can be a class derived from <codeph>DMMCSocket</codeph>, but this should |
444 This can be a class derived from <codeph>DMMCSocket</codeph>, but this should |
444 rarely be necessary. </p> <p>The function is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>If |
445 rarely be necessary. </p> <p>The function is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>If |
445 you create a <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> object, simply forward the peripheral |
446 you create a <xref href="GUID-45B97680-1756-3559-8A2D-2F2E851AD6A7.dita"><apiname>DMMCSocket</apiname></xref> object, simply forward the peripheral |
446 bus socket number and pointer to the password store; there is no need to do |
447 bus socket number and pointer to the password store; there is no need to do |
469 </ul> <p id="GUID-33A9C3DE-80EF-5895-BC7D-EA2ED6EB083B"><b>MediaChangeID()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-10B49F15-8ED5-3CA9-873A-788B87078367"><apiname>TMMCardControllerInterface::MediaChangeID()</apiname></xref> </p> <p>Implement this function to report which media change object is to be |
470 </ul> <p id="GUID-33A9C3DE-80EF-5895-BC7D-EA2ED6EB083B"><b>MediaChangeID()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-10B49F15-8ED5-3CA9-873A-788B87078367"><apiname>TMMCardControllerInterface::MediaChangeID()</apiname></xref> </p> <p>Implement this function to report which media change object is to be |
470 associated with the specified peripheral bus socket number. </p> <p>The function |
471 associated with the specified peripheral bus socket number. </p> <p>The function |
471 is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>The |
472 is called from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>The |
472 media change object is represented by a number, which is simply an index value |
473 media change object is represented by a number, which is simply an index value |
473 that ranges from 0 to <xref href="GUID-92555AA1-73A5-3F88-8227-8D20C977F046.dita"><apiname>KMaxMediaChanges</apiname></xref>. Internally, Symbian |
474 that ranges from 0 to <xref href="GUID-92555AA1-73A5-3F88-8227-8D20C977F046.dita"><apiname>KMaxMediaChanges</apiname></xref>. Internally, Symbian |
474 OS reserves space for an array of pointers to <xref href="GUID-C122D579-BB08-3084-A30E-DC857D6E7282.dita"><apiname>DMediaChangeBase</apiname></xref> objects, |
475 platform reserves space for an array of pointers to <xref href="GUID-C122D579-BB08-3084-A30E-DC857D6E7282.dita"><apiname>DMediaChangeBase</apiname></xref> objects, |
475 and this function allows the platform specific layer to identify which slot |
476 and this function allows the platform specific layer to identify which slot |
476 is to be used for the <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita"><apiname>DMMCMediaChange</apiname></xref> object that will |
477 is to be used for the <xref href="GUID-2F974AD8-551B-35F0-B72C-99122913714D.dita"><apiname>DMMCMediaChange</apiname></xref> object that will |
477 correspond to the specified socket number. </p> <codeblock id="GUID-08AE1956-86E0-544A-A95C-0D16DE6694D3" xml:space="preserve">GLDEF_D DMediaChangeBase* TheMediaChanges[KMaxMediaChanges];</codeblock> <p>(This array is internal to Symbian OS.) </p> <p>Note: </p> <ul> |
478 correspond to the specified socket number. </p> <codeblock id="GUID-08AE1956-86E0-544A-A95C-0D16DE6694D3" xml:space="preserve">GLDEF_D DMediaChangeBase* TheMediaChanges[KMaxMediaChanges];</codeblock> <p>(This array is internal to Symbian platform.) </p> <p>Note: </p> <ul> |
478 <li id="GUID-1A4ED330-90E5-5215-8149-093987DD5D9B"><p>The socket number can |
479 <li id="GUID-1A4ED330-90E5-5215-8149-093987DD5D9B"><p>The socket number can |
479 fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>, and is a value |
480 fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>, and is a value |
480 for which <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref> returned <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>. </p> </li> |
481 for which <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref> returned <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>. </p> </li> |
481 <li id="GUID-5EA3662D-82B2-529B-8DF4-2EAA9429990A"><p>This function is only |
482 <li id="GUID-5EA3662D-82B2-529B-8DF4-2EAA9429990A"><p>This function is only |
482 called for sockets that are associated with MultiMediaCard devices as reported |
483 called for sockets that are associated with MultiMediaCard devices as reported |
495 </ul> <p id="GUID-E969F613-01A3-54A7-8CC6-67F4A8E9558F"><b>VccID()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-1553B339-4171-396B-89E6-6C47C539D21F"><apiname>TMMCardControllerInterface::VccID()</apiname></xref> </p> <p>Implement |
496 </ul> <p id="GUID-E969F613-01A3-54A7-8CC6-67F4A8E9558F"><b>VccID()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-1553B339-4171-396B-89E6-6C47C539D21F"><apiname>TMMCardControllerInterface::VccID()</apiname></xref> </p> <p>Implement |
496 this function to report which power supply unit (PSU) object is to be associated |
497 this function to report which power supply unit (PSU) object is to be associated |
497 with the specified peripheral bus socket number. </p> <p>The function is called |
498 with the specified peripheral bus socket number. </p> <p>The function is called |
498 from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>The |
499 from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-2C6EA849-1B62-3158-A328-DB2A7149346C"><apiname>TMMCardControllerInterface::Create()</apiname></xref>. </p> <p>The |
499 PSU object is represented by a number, which is simply an index value that |
500 PSU object is represented by a number, which is simply an index value that |
500 ranges from 0 to <xref href="GUID-E5DEB888-EC0E-3160-BA7D-76954B282D43.dita"><apiname>KMaxPBusVccs</apiname></xref>. Internally, Symbian OS reserves |
501 ranges from 0 to <xref href="GUID-E5DEB888-EC0E-3160-BA7D-76954B282D43.dita"><apiname>KMaxPBusVccs</apiname></xref>. Internally, Symbian platform |
501 space for an array of pointers to <xref href="GUID-A8B5FB5A-4709-3F29-B2CB-81FC5B0E7D63.dita"><apiname>DPBusPsuBase</apiname></xref> objects, |
502 reserves space for an array of pointers to <xref href="GUID-A8B5FB5A-4709-3F29-B2CB-81FC5B0E7D63.dita"><apiname>DPBusPsuBase</apiname></xref> objects, |
502 and this function allows the platform specific layer to identify which slot |
503 and this function allows the platform specific layer to identify which slot |
503 is to be used for the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita"><apiname>DMMCPsu</apiname></xref> object that will correspond |
504 is to be used for the <xref href="GUID-FBCEFDB6-28FF-3201-8E13-F12E3759E36B.dita"><apiname>DMMCPsu</apiname></xref> object that will correspond |
504 to the specified socket number. </p> <codeblock id="GUID-99CD9798-2CFB-533D-82E0-352B84FA5AC9" xml:space="preserve">GLDEF_D DPBusPsuBase* TheVccs[KMaxPBusVccs]; |
505 to the specified socket number. </p> <codeblock id="GUID-99CD9798-2CFB-533D-82E0-352B84FA5AC9" xml:space="preserve">GLDEF_D DPBusPsuBase* TheVccs[KMaxPBusVccs]; |
505 </codeblock> <p>(This array is internal to Symbian OS.) </p> <p>Note: </p> <ul> |
506 </codeblock> <p>(This array is internal to Symbian platform.) </p> <p>Note: </p> <ul> |
506 <li id="GUID-2C77F138-1444-5815-AB12-16D3ED6D908E"><p>The socket number can |
507 <li id="GUID-2C77F138-1444-5815-AB12-16D3ED6D908E"><p>The socket number can |
507 fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>, and is a value |
508 fall into the range 0 to <xref href="GUID-2C5A5F8F-381C-3B99-AADE-44474E629CC4.dita"><apiname>KMaxPBusSockets</apiname></xref>, and is a value |
508 for which <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref> returned <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>. </p> </li> |
509 for which <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref> returned <xref href="GUID-781E8158-805B-3784-8FED-D7A191822FC3.dita"><apiname>ETrue</apiname></xref>. </p> </li> |
509 <li id="GUID-F8F4E84D-C46D-5547-AD19-61FB30E2CC3F"><p>This function is only |
510 <li id="GUID-F8F4E84D-C46D-5547-AD19-61FB30E2CC3F"><p>This function is only |
510 called for sockets that are associated with MultiMediaCard devices as reported |
511 called for sockets that are associated with MultiMediaCard devices as reported |
522 value returned by <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-33A9C3DE-80EF-5895-BC7D-EA2ED6EB083B">MediaChangeID()</xref>. </p> </li> |
523 value returned by <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-33A9C3DE-80EF-5895-BC7D-EA2ED6EB083B">MediaChangeID()</xref>. </p> </li> |
523 <li id="GUID-A8908747-E292-5D01-91E2-045DE2F341B2"><p>This function is only |
524 <li id="GUID-A8908747-E292-5D01-91E2-045DE2F341B2"><p>This function is only |
524 called for sockets that are associated with MultiMediaCard devices as reported |
525 called for sockets that are associated with MultiMediaCard devices as reported |
525 by the function <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref>. </p> </li> |
526 by the function <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-2477BA25-2ADD-55CB-93F2-84F114221EBA">IsMMCSocket()</xref>. </p> </li> |
526 </ul> <p id="GUID-81A8BF8E-FB8B-596D-8C9A-690CD6449C12"><b>Init()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-1F0C99EC-D8A9-304A-A738-BACAB5C766A6"><apiname>TMMCardControllerInterface::Init()</apiname></xref> </p> <p>Implement |
527 </ul> <p id="GUID-81A8BF8E-FB8B-596D-8C9A-690CD6449C12"><b>Init()</b> </p> <p> <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita#GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A/GUID-1F0C99EC-D8A9-304A-A738-BACAB5C766A6"><apiname>TMMCardControllerInterface::Init()</apiname></xref> </p> <p>Implement |
527 this function to perform any initialisation that the platform specific layer |
528 this function to perform any initialization that the platform specific layer |
528 needs to do. </p> <p>It should return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> to indicate |
529 needs to do. </p> <p>It should return <xref href="GUID-6CA4F1ED-7947-3087-B618-D35858FAA3BC.dita"><apiname>KErrNone</apiname></xref> to indicate |
529 successful completion, or return one of the other system-wide error codes |
530 successful completion, or return one of the other system-wide error codes |
530 to indicate initialisation failure. </p> <p>Note that you should <i>not</i> do |
531 to indicate initialization failure. </p> <p>Note that you should <i>not</i> do |
531 any initialisation that is specifically associated with: </p> <ul> |
532 any initialization that is specifically associated with: </p> <ul> |
532 <li id="GUID-9D706630-C477-5163-B0B2-5745D5D04559"><p>the stack - use <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282">DMMCStack::Init()</xref> for |
533 <li id="GUID-9D706630-C477-5163-B0B2-5745D5D04559"><p>the stack - use <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-0B55A650-E9ED-56CB-B06F-B1113ACDF282">DMMCStack::Init()</xref> for |
533 this. </p> </li> |
534 this. </p> </li> |
534 <li id="GUID-99B883A6-FE47-5B7F-A9D1-01CCD7954DCD"><p>the power supply unit |
535 <li id="GUID-99B883A6-FE47-5B7F-A9D1-01CCD7954DCD"><p>the power supply unit |
535 - use <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE">DMMCPsu::DoCreate()</xref> for |
536 - use <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-6EB8EF1C-BCCB-54A1-8CBA-4E8A2A20CABE">DMMCPsu::DoCreate()</xref> for |
536 this. </p> </li> |
537 this. </p> </li> |
540 </ul> </section> |
541 </ul> </section> |
541 <section id="GUID-732EDE1D-452A-5A48-B5DB-1196C5F8BEBD"><title> Variant DLL |
542 <section id="GUID-732EDE1D-452A-5A48-B5DB-1196C5F8BEBD"><title> Variant DLL |
542 entry point code</title> <p>The platform-specific layer as implemented in |
543 entry point code</title> <p>The platform-specific layer as implemented in |
543 the Variant DLL is a standard kernel extension. The entry point for all standard |
544 the Variant DLL is a standard kernel extension. The entry point for all standard |
544 kernel extensions is declared by a </p> <codeblock id="GUID-8835A131-2CDC-51AC-9C59-D72BAD651EA6" xml:space="preserve">DECLARE_STANDARD_EXTENSION()</codeblock> <p>statement, |
545 kernel extensions is declared by a </p> <codeblock id="GUID-8835A131-2CDC-51AC-9C59-D72BAD651EA6" xml:space="preserve">DECLARE_STANDARD_EXTENSION()</codeblock> <p>statement, |
545 followed by the block of code that runs on entry to the DLL. </p> <p>Initialisation |
546 followed by the block of code that runs on entry to the DLL. </p> <p>Initialization |
546 of the MultiMediaCard DLL is done at this point, and follows the pattern shown |
547 of the MultiMediaCard DLL is done at this point, and follows the pattern shown |
547 below. It needs to create an instance of your <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> derived |
548 below. It needs to create an instance of your <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> derived |
548 class, followed by a call to <codeph>Create()</codeph> on this object. This |
549 class, followed by a call to <codeph>Create()</codeph> on this object. This |
549 starts a cascade of effects resulting in calls to your implementation of the <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> functions, |
550 starts a cascade of effects resulting in calls to your implementation of the <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> functions, |
550 which in turn result in the creation of the platform-specific layer objects |
551 which in turn result in the creation of the platform-specific layer objects |
568 } |
569 } |
569 </codeblock> <p>In this example, <codeph>TVARMMCardControllerInterface</codeph> is |
570 </codeblock> <p>In this example, <codeph>TVARMMCardControllerInterface</codeph> is |
570 your class derived from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> </p> </section> |
571 your class derived from <xref href="GUID-B1F2C60B-E098-395F-8ED0-FF33E3EC9E4A.dita"><apiname>TMMCardControllerInterface</apiname></xref> </p> </section> |
571 <section id="GUID-00F918D3-761B-5500-805F-AB4DEE72144E"><title>Direct memory |
572 <section id="GUID-00F918D3-761B-5500-805F-AB4DEE72144E"><title>Direct memory |
572 addressing</title> <p>To transfer data between a user side process and the |
573 addressing</title> <p>To transfer data between a user side process and the |
573 media device, the Platform Specific Layer allocates a DMA-safe buffer at initialisation. |
574 media device, the Platform Specific Layer allocates a DMA-safe buffer at initialization. |
574 This buffer is allocated from physical memory. The memory in the user side |
575 This buffer is allocated from physical memory. The memory in the user side |
575 process is virtual and you perform an inter-process copy of data between the |
576 process is virtual and you perform an inter-process copy of data between the |
576 user side process and the buffer allocated by the Platform Specific Layer. </p> <p>Data |
577 user side process and the buffer allocated by the Platform Specific Layer. </p> <p>Data |
577 transfer is faster if the MultiMediaCard controller knows that an address |
578 transfer is faster if the MultiMediaCard controller knows that an address |
578 passed in an I/O request is a physical address. The File caching and Demand |
579 passed in an I/O request is a physical address. The File caching and Demand |
579 Paging features in the file server and kernel can pass physical addresses. |
580 Paging features in the file server and kernel can pass physical addresses. |
580 A physical address avoids the need for an inter-process copy operation. </p> <p>If |
581 A physical address avoids the need for an inter-process copy operation. </p> <p>If |
581 you use a mechanism like <xref href="GUID-DF2F0439-AE1A-599C-91B9-6EF2177C3C7E.dita">DMA</xref> to |
582 you use a mechanism like <xref href="GUID-DF2F0439-AE1A-599C-91B9-6EF2177C3C7E.dita">DMA</xref> to |
582 transfer data, and your platform specific layer can deal with physical addesses, |
583 transfer data, and your platform specific layer can deal with physical addresses, |
583 you need to make changes to the platform specific layer listed below. </p> <ul> |
584 you need to make changes to the platform specific layer listed below. </p> <ul> |
584 <li id="GUID-04D498F3-F4BB-5A15-BE31-8DF6F11DB9BD"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-E50081BC-C923-5DAF-950C-9E1411916FED">Implement double buffers</xref> </p> </li> |
585 <li id="GUID-04D498F3-F4BB-5A15-BE31-8DF6F11DB9BD"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-E50081BC-C923-5DAF-950C-9E1411916FED">Implement double buffers</xref> </p> </li> |
585 <li id="GUID-39F10C4A-4291-579E-878B-E5BD2FB9C9D0"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-575211BC-BF66-5817-9825-EE402648D0CD">Register support for physical addresses</xref> </p> </li> |
586 <li id="GUID-39F10C4A-4291-579E-878B-E5BD2FB9C9D0"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-575211BC-BF66-5817-9825-EE402648D0CD">Register support for physical addresses</xref> </p> </li> |
586 <li id="GUID-5638CD98-469C-587C-87B2-CA470D76F474"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-27FCEF7D-0AAB-599C-8405-4BD284308314">Modify the data transfer phase to handle physical memory</xref> </p> </li> |
587 <li id="GUID-5638CD98-469C-587C-87B2-CA470D76F474"><p> <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-27FCEF7D-0AAB-599C-8405-4BD284308314">Modify the data transfer phase to handle physical memory</xref> </p> </li> |
587 </ul> <p id="GUID-E50081BC-C923-5DAF-950C-9E1411916FED"><b>Implement double buffers</b> </p> <p>If |
588 </ul> <p id="GUID-E50081BC-C923-5DAF-950C-9E1411916FED"><b>Implement double buffers</b> </p> <p>If |
588 you enable double buffer behaviour, the MultiMediaCard subsystem can perform |
589 you enable double buffer behavior, the MultiMediaCard subsystem can perform |
589 multiple data transfers in a single bus transaction. The double buffer implementation |
590 multiple data transfers in a single bus transaction. The double buffer implementation |
590 performs many data transfers in a single bus transaction. The MultiMediaCard |
591 performs many data transfers in a single bus transaction. The MultiMediaCard |
591 subsystem logically splits the buffer allocated by the platform specific layer |
592 subsystem logically splits the buffer allocated by the platform specific layer |
592 into two segments. Data transfer to the media device is in progress from one |
593 into two segments. Data transfer to the media device is in progress from one |
593 segment - this is the active segment. Concurrently, the media driver can prepare |
594 segment - this is the active segment. Concurrently, the media driver can prepare |
611 are not enabled, the value returned by this function is the same as <codeph>TMMCCommandDesc::iTotalLength</codeph>. </p> </li> |
612 are not enabled, the value returned by this function is the same as <codeph>TMMCCommandDesc::iTotalLength</codeph>. </p> </li> |
612 </ul> </li> |
613 </ul> </li> |
613 <li id="GUID-860835C7-D3FD-5727-9ADA-60E080EB1669"><p>You can use the function <xref href="GUID-6B3DDBFD-3A4A-3694-A058-7794700FEC7A.dita#GUID-6B3DDBFD-3A4A-3694-A058-7794700FEC7A/GUID-DFD121A5-0C03-31A3-AF20-6E693EDC8502"><apiname>TMMCCommandDesc::IsDoubleBuffered()</apiname></xref> to |
614 <li id="GUID-860835C7-D3FD-5727-9ADA-60E080EB1669"><p>You can use the function <xref href="GUID-6B3DDBFD-3A4A-3694-A058-7794700FEC7A.dita#GUID-6B3DDBFD-3A4A-3694-A058-7794700FEC7A/GUID-DFD121A5-0C03-31A3-AF20-6E693EDC8502"><apiname>TMMCCommandDesc::IsDoubleBuffered()</apiname></xref> to |
614 determine if the current transaction uses double buffers. </p> </li> |
615 determine if the current transaction uses double buffers. </p> </li> |
615 </ul> <p><b>Separate the command and data phases </b> </p> <p>Without double buffer |
616 </ul> <p><b>Separate the command and data phases </b> </p> <p>Without double buffer |
616 behaviour, a single MMC command is always associated with a single buffer |
617 behavior, a single MMC command is always associated with a single buffer into |
617 into which the hardware transfers data. With double buffer behaviour, multiple |
618 which the hardware transfers data. With double buffer behavior, multiple buffers |
618 buffers or segments are used to transfer data within a single command. You |
619 or segments are used to transfer data within a single command. You need to |
619 need to separate the command and data transfer phases. </p> <p>This code fragment |
620 separate the command and data transfer phases. </p> <p>This code fragment |
620 is a simplified example of a platform specific layer that sets up the command |
621 is a simplified example of a platform specific layer that sets up the command |
621 and the data transfers in separate stages: </p> <codeblock id="GUID-D349BEBB-E983-59AA-AA7F-29928D5491F5" xml:space="preserve"> |
622 and the data transfers in separate stages: </p> <codeblock id="GUID-D349BEBB-E983-59AA-AA7F-29928D5491F5" xml:space="preserve"> |
622 TMMCErr DExampleMMCStack::IssueMMCCommandSM() |
623 TMMCErr DExampleMMCStack::IssueMMCCommandSM() |
623 { |
624 { |
624 enum states |
625 enum states |
712 hardware is busy performing a DMA transfer for the current segment. This allows |
713 hardware is busy performing a DMA transfer for the current segment. This allows |
713 the MMC Media Driver to copy data to/from the client process ready for the |
714 the MMC Media Driver to copy data to/from the client process ready for the |
714 next transfer while the MMC card is transferring it’s current payload. </p> <p>This |
715 next transfer while the MMC card is transferring it’s current payload. </p> <p>This |
715 function sets the static <codeph>KMMCBlockOnMoreData</codeph> blocking condition. |
716 function sets the static <codeph>KMMCBlockOnMoreData</codeph> blocking condition. |
716 The platform specific layer must use <codeph>SMF_WAITS</codeph> (or equivalent) |
717 The platform specific layer must use <codeph>SMF_WAITS</codeph> (or equivalent) |
717 to suspend the platform sepcific layer state machineuntil the media driver |
718 to suspend the platform specific layer state machine until the media driver |
718 has processed the current segment. When finished, the command descriptor is |
719 has processed the current segment. When finished, the command descriptor is |
719 populated with the details of the next segment to be transferred. The <codeph>KMMCBlockOnMoreData</codeph> block |
720 populated with the details of the next segment to be transferred. The <codeph>KMMCBlockOnMoreData</codeph> block |
720 condition set by this function can be set with the <codeph>KMMCBlockOnASSPFunction</codeph> condition. |
721 condition set by this function can be set with the <codeph>KMMCBlockOnASSPFunction</codeph> condition. |
721 It allows the hardware to perform useful work, (for example, transfer the |
722 It allows the hardware to perform useful work, (for example, transfer the |
722 current buffer to or from the card) while the media driver is busy preparing |
723 current buffer to or from the card) while the media driver is busy preparing |
827 of buffer, you must perform benchmark tests on your system. A small buffer |
828 of buffer, you must perform benchmark tests on your system. A small buffer |
828 gives you a lower command setup latency, but DMA transfers and calls to the |
829 gives you a lower command setup latency, but DMA transfers and calls to the |
829 callback function <xref href="GUID-0186BEDE-8E28-3F8C-8CAE-A8B92F41F47A.dita#GUID-0186BEDE-8E28-3F8C-8CAE-A8B92F41F47A/GUID-32596EBB-4315-3EF7-8175-8579DE69F78B"><apiname>DMMCSession::RequestMoreData()</apiname></xref> occur |
830 callback function <xref href="GUID-0186BEDE-8E28-3F8C-8CAE-A8B92F41F47A.dita#GUID-0186BEDE-8E28-3F8C-8CAE-A8B92F41F47A/GUID-32596EBB-4315-3EF7-8175-8579DE69F78B"><apiname>DMMCSession::RequestMoreData()</apiname></xref> occur |
830 more frequently. The time taken to set up the DMA transfers can exceed the |
831 more frequently. The time taken to set up the DMA transfers can exceed the |
831 time taken to transfer the data into or out of the active segment. </p> <p><b>Testing </b> </p> <p>You need to do the standard E32 and F32 automated |
832 time taken to transfer the data into or out of the active segment. </p> <p><b>Testing </b> </p> <p>You need to do the standard E32 and F32 automated |
832 tests to check the operatiopn of the MMC subsystem. You also need to perform |
833 tests to check the operation of the MMC subsystem. You also need to perform |
833 the MMC specific manual test, T_MMCDRV. The test listed below performs data |
834 the MMC specific manual test, T_MMCDRV. The test listed below performs data |
834 transfers in excess of the PSL buffer size to make sure that double buffer |
835 transfers in excess of the PSL buffer size to make sure that double buffer |
835 behaviou is exercised. </p> <codeblock id="GUID-ED1D5B35-432C-5C54-9A13-92DD499316FD" xml:space="preserve"> |
836 behavior is exercised. </p> <codeblock id="GUID-ED1D5B35-432C-5C54-9A13-92DD499316FD" xml:space="preserve"> |
836 /** |
837 /** |
837 @SYMTestCaseID PBASE-T_MMCDRV-0558 |
838 @SYMTestCaseID PBASE-T_MMCDRV-0558 |
838 @SYMTestCaseDesc Test Long Read/Write Boundaries |
839 @SYMTestCaseDesc Test Long Read/Write Boundaries |
839 @SYMTestPriority High |
840 @SYMTestPriority High |
840 |
841 |
893 independent layer</xref> the maximum transfer length that you support. This |
894 independent layer</xref> the maximum transfer length that you support. This |
894 can be a limit imposed on you by the hardware. For example, if you use DMA, |
895 can be a limit imposed on you by the hardware. For example, if you use DMA, |
895 the DMA controller can impose a limit. You set one of the flags listed below |
896 the DMA controller can impose a limit. You set one of the flags listed below |
896 into the <codeph>iFlags</codeph> member of <xref href="GUID-3F9D89E8-44F0-35B3-9404-6CCAC79763E8.dita"><apiname>TMMCMachineInfo</apiname></xref> in |
897 into the <codeph>iFlags</codeph> member of <xref href="GUID-3F9D89E8-44F0-35B3-9404-6CCAC79763E8.dita"><apiname>TMMCMachineInfo</apiname></xref> in |
897 your implementation of <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-CEF0EDF7-4B33-5452-8635-51C5319F78AE">DMMCStack::MachineInfo()</xref>. </p> <p>Each flag represents a maximum transfer length. The MultiMediaCard |
898 your implementation of <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-CEF0EDF7-4B33-5452-8635-51C5319F78AE">DMMCStack::MachineInfo()</xref>. </p> <p>Each flag represents a maximum transfer length. The MultiMediaCard |
898 subsytem splits a data transfer request that is bigger than the maximum into |
899 subsystem splits a data transfer request that is bigger than the maximum into |
899 multiple data transfers. </p> <ul> |
900 multiple data transfers. </p> <ul> |
900 <li id="GUID-1BD38D21-6B02-5610-8495-4C7C194657CF"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-3375EE8E-49B8-3F24-BF40-D780AD8E1B0A"><apiname>THardwareConfig::EMaxTransferLength_256K</apiname></xref> </p> </li> |
901 <li id="GUID-1BD38D21-6B02-5610-8495-4C7C194657CF"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-3375EE8E-49B8-3F24-BF40-D780AD8E1B0A"><apiname>THardwareConfig::EMaxTransferLength_256K</apiname></xref> </p> </li> |
901 <li id="GUID-D4AB6165-036A-5259-922A-E9E1CB5749C8"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-F3BEFC8A-55F6-3B28-B383-6B33BAD2B5F7"><apiname>THardwareConfig::EMaxTransferLength_512K</apiname></xref> </p> </li> |
902 <li id="GUID-D4AB6165-036A-5259-922A-E9E1CB5749C8"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-F3BEFC8A-55F6-3B28-B383-6B33BAD2B5F7"><apiname>THardwareConfig::EMaxTransferLength_512K</apiname></xref> </p> </li> |
902 <li id="GUID-72380863-E20E-5478-98D8-FA342C14E80C"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-20FB2892-190F-31C4-9F58-66AAB02DC4E1"><apiname>THardwareConfig::EMaxTransferLength_1M</apiname></xref> </p> </li> |
903 <li id="GUID-72380863-E20E-5478-98D8-FA342C14E80C"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-20FB2892-190F-31C4-9F58-66AAB02DC4E1"><apiname>THardwareConfig::EMaxTransferLength_1M</apiname></xref> </p> </li> |
903 <li id="GUID-68C4292C-5D9D-5E23-8608-DFBA2846A8FA"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-45913568-5C4E-3A6F-A727-8734C303AC3D"><apiname>THardwareConfig::EMaxTransferLength_2M</apiname></xref> </p> </li> |
904 <li id="GUID-68C4292C-5D9D-5E23-8608-DFBA2846A8FA"><p> <xref href="GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6.dita#GUID-9E833DE8-E795-3EC8-B27B-CFB6D7E1C4C6/GUID-45913568-5C4E-3A6F-A727-8734C303AC3D"><apiname>THardwareConfig::EMaxTransferLength_2M</apiname></xref> </p> </li> |
957 do not <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-575211BC-BF66-5817-9825-EE402648D0CD">register |
958 do not <xref href="GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B.dita#GUID-E55B4FE5-517C-5A23-8ACA-E28EE202330B/GUID-575211BC-BF66-5817-9825-EE402648D0CD">register |
958 support for physical addresses</xref>, this function always returns <xref href="GUID-A759CA2D-8327-348F-9337-4886E619D920.dita"><apiname>EFalse</apiname></xref>. </p> </li> |
959 support for physical addresses</xref>, this function always returns <xref href="GUID-A759CA2D-8327-348F-9337-4886E619D920.dita"><apiname>EFalse</apiname></xref>. </p> </li> |
959 <li id="GUID-B9D101C4-FDD1-5233-9DCB-12DDA47073FC"><p>You do not need to perform |
960 <li id="GUID-B9D101C4-FDD1-5233-9DCB-12DDA47073FC"><p>You do not need to perform |
960 virtual address to physical address translation on physical addresses. </p> </li> |
961 virtual address to physical address translation on physical addresses. </p> </li> |
961 <li id="GUID-2382A7A0-B0EB-5E1F-9ADE-47389FABABBA"><p>you do not need to perform |
962 <li id="GUID-2382A7A0-B0EB-5E1F-9ADE-47389FABABBA"><p>you do not need to perform |
962 DMA synchronisation for physical addresses, because the local media subsystem |
963 DMA synchronization for physical addresses, because the local media subsystem |
963 performs DMA synchronisation for you. You need to perform DMA synchronisation |
964 performs DMA synchronization for you. You need to perform DMA synchronization |
964 for virtual addresses. DMA synchronisation is performed by calls to <xref href="GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F.dita#GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F/GUID-3FF3C567-C1BD-3D4E-97E1-B036456A374E"><apiname>Cache::SyncMemoryBeforeDmaRead()</apiname></xref> or <xref href="GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F.dita#GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F/GUID-5F08DEAA-1237-32DE-AE41-CE7B18230972"><apiname>Cache::SyncMemoryBeforeDmaWrite()</apiname></xref>. </p> </li> |
965 for virtual addresses. DMA synchronization is performed by calls to <xref href="GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F.dita#GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F/GUID-3FF3C567-C1BD-3D4E-97E1-B036456A374E"><apiname>Cache::SyncMemoryBeforeDmaRead()</apiname></xref> or <xref href="GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F.dita#GUID-4425E698-EE8A-369B-92CD-09B1CBD2911F/GUID-5F08DEAA-1237-32DE-AE41-CE7B18230972"><apiname>Cache::SyncMemoryBeforeDmaWrite()</apiname></xref>. </p> </li> |
965 </ul> <p>The following code is an example of the changes needed for a read |
966 </ul> <p>The following code is an example of the changes needed for a read |
966 operation. </p> <codeblock id="GUID-B92D3E0B-09F3-54C9-83AE-34DA544C0055" xml:space="preserve">TInt DMMCDmaRx::Start(const TMMCCommandDesc& aCmd) |
967 operation. </p> <codeblock id="GUID-B92D3E0B-09F3-54C9-83AE-34DA544C0055" xml:space="preserve">TInt DMMCDmaRx::Start(const TMMCCommandDesc& aCmd) |
967 /** |
968 /** |
968 * Queues a DMA request after checking the buffer alignment constraints. |
969 * Queues a DMA request after checking the buffer alignment constraints. |
969 * |
970 * |