Ejemplo n.º 1
0
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;
	}
}
Ejemplo n.º 2
0
static int kfileblock_flush(struct KFile *fd)
{
	KFileBlock *fb = KFILEBLOCK_CAST(fd);
	return kblock_flush(fb->blk);
}