DRESULT disk_ioctl ( BYTE drv, /* Physical drive nmuber (0..) */ BYTE ctrl, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { KBlock *dev = devs[drv]; ASSERT(dev); switch (ctrl) { case CTRL_SYNC: if (kblock_flush(dev) == 0) return RES_OK; else return RES_ERROR; case GET_SECTOR_SIZE: *(WORD *)buff = dev->blk_size; return RES_OK; case GET_SECTOR_COUNT: *(DWORD *)buff = dev->blk_cnt; return RES_OK; case GET_BLOCK_SIZE: *(DWORD *)buff = 1; return RES_OK; default: LOG_ERR("unknown command: [%d]\n", ctrl); return RES_PARERR; } }
static int kfileblock_flush(struct KFile *fd) { KFileBlock *fb = KFILEBLOCK_CAST(fd); return kblock_flush(fb->blk); }