10 #if GFX_USE_GFILE && GFILE_NEED_PETITFS && GFX_USE_OS_CHIBIOS && !GFILE_PETITFS_EXTERNAL_LIB
15 #if HAL_USE_MMC_SPI && HAL_USE_SDC
16 #error "cannot specify both MMC_SPI and SDC drivers"
20 extern MMCDriver MMCD1;
22 extern SDCDriver SDCD1;
24 #error "MMC_SPI or SDC driver must be specified"
38 #if CH_KERNEL_MAJOR > 2
39 #define CPU_CACHE_LINE_SIZE 32
40 #define CACHE_FLUSH(buf, sz) dmaBufferFlush((buf), (sz)+(CPU_CACHE_LINE_SIZE-1))
41 #define CACHE_INVALIDATE(buf, sz) dmaBufferInvalidate((buf), (sz)+(CPU_CACHE_LINE_SIZE-1))
43 #define CACHE_FLUSH(buf, sz)
44 #define CACHE_INVALIDATE(buf, sz)
50 DSTATUS disk_initialize (
void) {
53 if (blkGetDriverState(&MMCD1) != BLK_READY)
57 if (blkGetDriverState(&SDCD1) != BLK_READY)
67 static BYTE sectBuf[512];
68 static DWORD sectpos = -1;
77 if (sector != sectpos) {
79 if (blkGetDriverState(&MMCD1) != BLK_READY)
81 if (mmcStartSequentialRead(&MMCD1, sector))
83 if (mmcSequentialRead(&MMCD1, sectBuf))
85 if (mmcStopSequentialRead(&MMCD1))
88 if (blkGetDriverState(&SDCD1) != BLK_READY)
90 if (sdcRead(&SDCD1, sector, sectBuf, 1))
94 CACHE_INVALIDATE(sectBuf,
sizeof(sectBuf));
96 memcpy(buff, sectBuf + offset, count);