10 #if GFX_USE_GFILE && GFILE_NEED_FATFS && GFX_USE_OS_CHIBIOS && !GFILE_FATFS_EXTERNAL_LIB
14 #if HAL_USE_MMC_SPI && HAL_USE_SDC
15 #error "cannot specify both MMC_SPI and SDC drivers"
19 extern MMCDriver MMCD1;
21 extern SDCDriver SDCD1;
23 #error "MMC_SPI or SDC driver must be specified"
43 #if CH_KERNEL_MAJOR > 2
44 #define CPU_CACHE_LINE_SIZE 32
45 #define CACHE_FLUSH(buf, sz) dmaBufferFlush((buf), (sz)+(CPU_CACHE_LINE_SIZE-1))
46 #define CACHE_INVALIDATE(buf, sz) dmaBufferInvalidate((buf), (sz)+(CPU_CACHE_LINE_SIZE-1))
48 #define CACHE_FLUSH(buf, sz)
49 #define CACHE_INVALIDATE(buf, sz)
53 DSTATUS disk_initialize (
64 if (blkGetDriverState(&MMCD1) != BLK_READY)
66 if (mmcIsWriteProtected(&MMCD1))
73 if (blkGetDriverState(&SDCD1) != BLK_READY)
75 if (sdcIsWriteProtected(&SDCD1))
99 if (blkGetDriverState(&MMCD1) != BLK_READY)
101 if (mmcIsWriteProtected(&MMCD1))
108 if (blkGetDriverState(&SDCD1) != BLK_READY)
110 if (sdcIsWriteProtected(&SDCD1))
133 if (blkGetDriverState(&MMCD1) != BLK_READY)
135 if (mmcStartSequentialRead(&MMCD1, sector))
137 CACHE_FLUSH(buff, MMCSD_BLOCK_SIZE*count);
139 if (mmcSequentialRead(&MMCD1, buff))
141 buff += MMCSD_BLOCK_SIZE;
144 if (mmcStopSequentialRead(&MMCD1))
146 CACHE_INVALIDATE(buff, MMCSD_BLOCK_SIZE*count);
150 if (blkGetDriverState(&SDCD1) != BLK_READY)
152 CACHE_FLUSH(buff, MMCSD_BLOCK_SIZE*count);
153 if (sdcRead(&SDCD1, sector, buff, count))
155 CACHE_INVALIDATE(buff, MMCSD_BLOCK_SIZE*count);
178 if (blkGetDriverState(&MMCD1) != BLK_READY)
180 if (mmcIsWriteProtected(&MMCD1))
182 if (mmcStartSequentialWrite(&MMCD1, sector))
184 CACHE_FLUSH(buff, MMCSD_BLOCK_SIZE*count);
186 if (mmcSequentialWrite(&MMCD1, buff))
188 buff += MMCSD_BLOCK_SIZE;
191 if (mmcStopSequentialWrite(&MMCD1))
196 if (blkGetDriverState(&SDCD1) != BLK_READY)
198 CACHE_FLUSH(buff, MMCSD_BLOCK_SIZE*count);
199 if (sdcWrite(&SDCD1, sector, buff, count))
225 case GET_SECTOR_SIZE:
226 *((WORD *)buff) = MMCSD_BLOCK_SIZE;
229 case CTRL_ERASE_SECTOR:
230 mmcErase(&MMCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
241 case GET_SECTOR_COUNT:
242 *((DWORD *)buff) = mmcsdGetCardCapacity(&SDCD1);
244 case GET_SECTOR_SIZE:
245 *((WORD *)buff) = MMCSD_BLOCK_SIZE;
248 *((DWORD *)buff) = 256;
251 case CTRL_ERASE_SECTOR:
252 sdcErase(&SDCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
264 extern RTCDriver RTCD1;
266 DWORD get_fattime(
void) {
267 RTCDateTime timespec;
269 rtcGetTime(&RTCD1, ×pec);
270 return rtcConvertDateTimeToFAT(×pec);
273 DWORD get_fattime(
void) {
274 return ((gU32)0 | (1 << 16)) | (1 << 21);