14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** $Id$ */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** @file
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * VBox HDD container test utility, async I/O backend
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/*
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Copyright (C) 2013 Oracle Corporation
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * available from http://www.virtualbox.org. This file is free software;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * you can redistribute it and/or modify it under the terms of the GNU
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * General Public License (GPL) as published by the Free Software
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync#ifndef __VDIoBackend_h__
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync#define __VDIoBackend_h__
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync#include <iprt/sg.h>
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync#include "VDDefs.h"
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** I/O backend handle. */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef struct VDIOBACKEND *PVDIOBACKEND;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** Pointer to a I/O backend handle. */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef PVDIOBACKEND *PPVDIOBACKEND;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** Storage handle. */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef struct VDIOSTORAGE *PVDIOSTORAGE;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** Pointer to a storage handle. */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef PVDIOSTORAGE *PPVDIOSTORAGE;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/**
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Completion handler.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @returns nothing.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param pvUser Opaque user data.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param rcReq Completion code for the request.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef DECLCALLBACK(int) FNVDIOCOMPLETE(void *pvUser, int rcReq);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/** Pointer to a completion handler. */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsynctypedef FNVDIOCOMPLETE *PFNVDIOCOMPLETE;
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/**
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Creates a new memory I/O backend.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @returns IPRT status code.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param ppIoBackend Where to store the handle on success.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncint VDIoBackendCreate(PPVDIOBACKEND ppIoBackend);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/**
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Destroys a memory I/O backend.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @returns nothing.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param pIoBackend The backend to destroy.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncvoid VDIoBackendDestroy(PVDIOBACKEND pIoBackend);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncint VDIoBackendStorageCreate(PVDIOBACKEND pIoBackend, const char *pszBackend,
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync const char *pszName, PFNVDIOCOMPLETE pfnComplete,
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync PPVDIOSTORAGE ppIoStorage);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncvoid VDIoBackendStorageDestroy(PVDIOSTORAGE pIoStorage);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncint VDIoBackendStorageSetSize(PVDIOSTORAGE pIoStorage, uint64_t cbSize);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncint VDIoBackendStorageGetSize(PVDIOSTORAGE pIoStorage, uint64_t *pcbSize);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
b24ec0830a8066f6baf834863144169b3eb21aafvboxsyncDECLHIDDEN(int) VDIoBackendDumpToFile(PVDIOSTORAGE pIoStorage, const char *pszPath);
b24ec0830a8066f6baf834863144169b3eb21aafvboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync/**
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * Enqueues a new I/O request.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @returns IPRT status code.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync *
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param pIoStorage Storage handle.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param enmTxDir The transfer direction.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param off Start offset of the transfer.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param cbTransfer Size of the transfer.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param pSgBuf S/G buffer to use.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param pvUser Opaque user data.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync * @param fSync Flag whether to wait for the operation to complete.
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync */
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsyncint VDIoBackendTransfer(PVDIOSTORAGE pIoStorage, VDIOTXDIR enmTxDir, uint64_t off,
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync size_t cbTransfer, PRTSGBUF pSgBuf, void *pvUser, bool fSync);
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync
14a9673ef19f6d8d49f83050d86cb444a55d4008vboxsync#endif /* __VDIoBackendMem_h__ */