int main() { char *buf = (char*) 0x200000; if (initSdmmcDevice() < 0) { printf("error initializing card\n"); return -1; } // Read blocks in reverse order to verify address is set correctly. for (int i = TRANSFER_LENGTH - 1; i >= 0; i--) readSdmmcDevice(i, buf + i * BLOCK_SIZE); return 0; }
static int initFileSystem() { char superBlock[BLOCK_SIZE]; int numDirectoryBlocks; int blockNum; FsHeader *header; // SDMMC not supported on FPGA currently. Fall back to ramdisk if it fails. if (initSdmmcDevice() < 0) { printf("SDMMC init failed, using ramdisk\n"); gUseRamdisk = 1; } // Read directory if (readBlock(0, superBlock) <= 0) { errno = EIO; return -1; } header = (FsHeader*) superBlock; if (memcmp(header->magic, FS_MAGIC, 4) != 0) { printf("Bad filesystem: invalid magic value\n"); errno = EIO; return -1; } numDirectoryBlocks = ((header->numDirectoryEntries - 1) * sizeof(DirectoryEntry) + sizeof(FsHeader) + BLOCK_SIZE - 1) / BLOCK_SIZE; gDirectory = (FsHeader*) malloc(numDirectoryBlocks * BLOCK_SIZE); memcpy(gDirectory, superBlock, BLOCK_SIZE); for (blockNum = 1; blockNum < numDirectoryBlocks; blockNum++) { if (readBlock(blockNum, ((char*)gDirectory) + BLOCK_SIZE * blockNum) <= 0) { errno = EIO; return -1; } } return 0; }