41
41
#include "sdmmc.h"
42
42
#include "memcpy.h"
43
43
44
- extern vu32 word_command ;
45
- extern vu32 word_params ;
46
- extern vu32 words_msg ;
47
-
48
- // Use the dldi remaining space as temporary buffer : 28k usually available
49
- extern vu32 * tmp_buf_addr ;
50
- extern vu8 allocated_space ;
51
-
52
- static char hexbuffer [9 ];
53
-
54
- char * tohex (u32 n )
55
- {
56
- unsigned size = 9 ;
57
- char * buffer = hexbuffer ;
58
- unsigned index = size - 2 ;
59
-
60
- for (int i = 0 ; i < size ; i ++ ) {
61
- buffer [i ] = '0' ;
62
- }
63
-
64
- while (n > 0 )
65
- {
66
- unsigned mod = n % 16 ;
67
-
68
- if (mod >= 10 )
69
- buffer [index -- ] = (mod - 10 ) + 'A' ;
70
- else
71
- buffer [index -- ] = mod + '0' ;
72
-
73
- n /= 16 ;
74
- }
75
- buffer [size - 1 ] = '\0' ;
76
- return buffer ;
77
- }
78
-
79
- void sendValue32 (u32 value32 ) {
80
- //nocashMessage("sendValue32");
81
- //nocashMessage(tohex(myMemUncached(&word_command)));
82
- * ((vu32 * )myMemUncached (& word_params )) = value32 ;
83
- * ((vu32 * )myMemUncached (& word_command )) = (vu32 )0x027FEE04 ;
84
- IPC_SendSync (0xEE24 );
85
- }
86
-
87
- void sendMsg (int size , u8 * msg ) {
88
- //nocashMessage("sendMsg");
89
- * ((vu32 * )myMemUncached (& word_params )) = size ;
90
- for (int i = 0 ;i < size ;i ++ ) {
91
- * ((u8 * )myMemUncached (& words_msg )+ i ) = msg [i ];
92
- }
93
- * ((vu32 * )myMemUncached (& word_command )) = (vu32 )0x027FEE05 ;
94
- IPC_SendSync (0xEE24 );
95
- }
96
-
97
- void waitValue32 () {
98
- nocashMessage ("waitValue32" );
99
- while (* ((vu32 * )myMemUncached (& word_command )) != (vu32 )0x027FEE08 );
100
- }
101
-
102
- u32 getValue32 () {
103
- nocashMessage ("getValue32" );
104
- return * ((vu32 * )myMemUncached (& word_params ));
105
- }
106
-
107
- void goodOldCopy32 (u32 * src , u32 * dst , int size ) {
108
- for (int i = 0 ; i < size /4 ; i ++ ) {
109
- dst [i ]= src [i ];
110
- }
111
- }
112
-
113
- void __custom_mpu_setup ();
114
- void __custom_mpu_restore ();
115
-
116
- //---------------------------------------------------------------------------------
117
- bool sd_Startup () {
118
- //---------------------------------------------------------------------------------
119
- nocashMessage ("sdio_Startup" );
120
- //if (!isSDAcessible()) return false;
121
-
122
- //REG_SCFG_EXT &= 0xC000;
123
-
124
- //__custom_mpu_setup();
125
-
126
- sendValue32 (SDMMC_HAVE_SD );
127
-
128
- waitValue32 ();
129
-
130
- int result = getValue32 ();
131
-
132
- if (result == 0 ) return false;
133
-
134
- sendValue32 (SDMMC_SD_START );
135
-
136
- waitValue32 ();
137
-
138
- result = getValue32 ();
139
-
140
- //__custom_mpu_restore();
141
-
142
- return result == 0 ;
143
- }
144
-
145
- //---------------------------------------------------------------------------------
146
- bool sd_IsInserted () {
147
- //---------------------------------------------------------------------------------
148
- /*if (!isSDAcessible()) return false;
149
-
150
- fifoSendValue32(FIFO_SDMMCDSI,SDMMC_SD_IS_INSERTED);
151
-
152
- fifoWaitValue32(FIFO_SDMMCDSI);
153
-
154
- int result = fifoGetValue32(FIFO_SDMMCDSI);*/
155
-
156
- return true;
157
- }
158
-
159
- //---------------------------------------------------------------------------------
160
- bool sd_ReadSectors (sec_t sector , sec_t numSectors ,void * buffer ) {
161
- //---------------------------------------------------------------------------------
162
- nocashMessage ("sd_ReadSectors" );
163
- //if (!isSDAcessible()) return false;
164
- FifoMessage msg ;
165
- int result = 0 ;
166
- sec_t startsector , readsectors ;
167
-
168
- //__custom_mpu_setup();
169
-
170
- int max_reads = ((1 << allocated_space ) / 512 ) - 11 ;
171
-
172
- for (int numreads = 0 ; numreads < numSectors ; numreads += max_reads ) {
173
- startsector = sector + numreads ;
174
- if (numSectors - numreads < max_reads ) readsectors = numSectors - numreads ;
175
- else readsectors = max_reads ;
176
-
177
- vu32 * mybuffer = myMemUncached (tmp_buf_addr );
178
-
179
- msg .type = SDMMC_SD_READ_SECTORS ;
180
- msg .sdParams .startsector = startsector ;
181
- msg .sdParams .numsectors = readsectors ;
182
- msg .sdParams .buffer = mybuffer ;
183
-
184
- sendMsg (sizeof (msg ), (u8 * )& msg );
185
-
186
- waitValue32 ();
187
-
188
- result = getValue32 ();
189
-
190
- memcpy (mybuffer , buffer + numreads * 512 , readsectors * 512 );
191
- }
192
-
193
- //__custom_mpu_restore();
194
-
195
- return result == 0 ;
196
- }
197
-
198
- //---------------------------------------------------------------------------------
199
- bool sd_WriteSectors (sec_t sector , sec_t numSectors ,const void * buffer ) {
200
- //---------------------------------------------------------------------------------
201
- nocashMessage ("sd_ReadSectors" );
202
- //if (!isSDAcessible()) return false;
203
- FifoMessage msg ;
204
- int result = 0 ;
205
- sec_t startsector , readsectors ;
206
-
207
- //__custom_mpu_setup();
208
-
209
- int max_reads = ((1 << allocated_space ) / 512 ) - 11 ;
210
-
211
- for (int numreads = 0 ; numreads < numSectors ; numreads += max_reads ) {
212
- startsector = sector + numreads ;
213
- if (numSectors - numreads < max_reads ) readsectors = numSectors - numreads ;
214
- else readsectors = max_reads ;
215
-
216
- vu32 * mybuffer = myMemUncached (tmp_buf_addr );
217
-
218
- memcpy (buffer + numreads * 512 , mybuffer , readsectors * 512 );
219
-
220
- msg .type = SDMMC_SD_WRITE_SECTORS ;
221
- msg .sdParams .startsector = startsector ;
222
- msg .sdParams .numsectors = readsectors ;
223
- msg .sdParams .buffer = mybuffer ;
224
-
225
- sendMsg (sizeof (msg ), (u8 * )& msg );
226
-
227
- waitValue32 ();
228
-
229
- result = getValue32 ();
230
- }
231
-
232
- //__custom_mpu_restore();
233
-
234
- return result == 0 ;
235
- }
236
-
237
44
bool isArm7 () {
238
45
return sdmmc_read16 (REG_SDSTATUS0 )!= 0 ;
239
46
}
240
47
241
48
242
- //---------------------------------------------------------------------------------
243
- bool sd_ClearStatus () {
244
- //---------------------------------------------------------------------------------
245
- //if (!isSDAcessible()) return false;
246
- return true;
247
- }
248
-
249
- //---------------------------------------------------------------------------------
250
- bool sd_Shutdown () {
251
- //---------------------------------------------------------------------------------
252
- //if (!isSDAcessible()) return false;
253
- return true;
254
- }
255
-
256
-
257
49
/*-----------------------------------------------------------------
258
50
startUp
259
51
Initialize the interface, geting it into an idle, ready state
@@ -265,7 +57,7 @@ bool startup(void) {
265
57
sdmmc_controller_init ();
266
58
return sdmmc_sdcard_init ()== 0 ;
267
59
} else {
268
- return sd_Startup () ;
60
+ return false ;
269
61
}
270
62
}
271
63
@@ -276,7 +68,7 @@ return true if a card is inserted and usable
276
68
-----------------------------------------------------------------*/
277
69
bool isInserted (void ) {
278
70
nocashMessage ("isInserted" );
279
- return sd_IsInserted () ;
71
+ return true ;
280
72
}
281
73
282
74
@@ -287,7 +79,7 @@ return true if the card is idle and ready
287
79
-----------------------------------------------------------------*/
288
80
bool clearStatus (void ) {
289
81
nocashMessage ("clearStatus" );
290
- return sd_ClearStatus () ;
82
+ return true ;
291
83
}
292
84
293
85
@@ -303,12 +95,10 @@ bool readSectors (u32 sector, u32 numSectors, void* buffer) {
303
95
if (isArm7 ()) {
304
96
return sdmmc_sdcard_readsectors (sector ,numSectors ,buffer )== 0 ;
305
97
} else {
306
- return sd_ReadSectors ( sector , numSectors , buffer ) ;
98
+ return false ;
307
99
}
308
100
}
309
101
310
-
311
-
312
102
/*-----------------------------------------------------------------
313
103
writeSectors
314
104
Write "numSectors" 512-byte sized sectors from "buffer" to the card,
@@ -321,7 +111,7 @@ bool writeSectors (u32 sector, u32 numSectors, void* buffer) {
321
111
if (isArm7 ()) {
322
112
return sdmmc_sdcard_writesectors (sector ,numSectors ,buffer )== 0 ;
323
113
} else {
324
- return sd_WriteSectors ( sector , numSectors , buffer ) ;
114
+ return false ;
325
115
}
326
116
}
327
117
@@ -334,5 +124,5 @@ return true if the card is no longer active
334
124
-----------------------------------------------------------------*/
335
125
bool shutdown (void ) {
336
126
nocashMessage ("shutdown" );
337
- return sd_Shutdown () ;
127
+ return true ;
338
128
}
0 commit comments