vd-plugin.h revision 5abf0158f194d8388e11eae66c36df1a96cf9469
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** @file
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VD: Plugin support API.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/*
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Copyright (C) 2006-2014 Oracle Corporation
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * available from http://www.virtualbox.org. This file is free software;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * you can redistribute it and/or modify it under the terms of the GNU
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * General Public License (GPL) as published by the Free Software
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * The contents of this file may alternatively be used under the terms
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * of the Common Development and Distribution License Version 1.0
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * VirtualBox OSE distribution, in which case the provisions of the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * CDDL are applicable instead of those of the GPL.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * You may elect to license modified versions of this file under the
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * terms and conditions of either the GPL or the CDDL or both.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#ifndef __vd_plugin_h__
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define __vd_plugin_h__
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <VBox/vd.h>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <VBox/vd-image-backend.h>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <VBox/vd-cache-backend.h>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#include <VBox/vd-filter-backend.h>
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Backend register callbacks structure.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef struct VDBACKENDREGISTER
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync{
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Registers a new image backend.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @returns VBox status code.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pvUser Opaque user data given in the plugin load callback.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pBackend The image backend to register.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DECLR3CALLBACKMEMBER(int, pfnRegisterImage, (void *pvUser, PCVBOXHDDBACKEND pBackend));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Registers a new cache backend.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @returns VBox status code.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pvUser Opaque user data given in the plugin load callback.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pBackend The cache backend to register.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DECLR3CALLBACKMEMBER(int, pfnRegisterCache, (void *pvUser, PCVDCACHEBACKEND pBackend));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync /**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Registers a new filter plugin.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pvUser Opaque user data given in the plugin load callback.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pBackend The filter backend to register.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync DECLR3CALLBACKMEMBER(int, pfnRegisterFilter, (void *pvUser, PCVDFILTERBACKEND pBackend));
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync} VDBACKENDREGISTER;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** Pointer to a backend register callbacks structure. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef VDBACKENDREGISTER *PVDBACKENDREGISTER;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/**
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * Initialization entry point called by the generic VD layer when
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * a plugin is loaded.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync *
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @returns VBox status code.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pvUser Opaque user data passed in the register callbacks.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync * @param pRegisterCallbacks Pointer to the register callbacks structure.
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef DECLCALLBACK(int) FNVDPLUGINLOAD(void *pvUser, PVDBACKENDREGISTER pRegisterCallbacks);
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsynctypedef FNVDPLUGINLOAD *PFNVDPLUGINLOAD;
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VD_PLUGIN_LOAD_NAME "VDPluginLoad"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** The prefix to identify Storage Plugins. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VD_PLUGIN_PREFIX "VDPlugin"
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync/** The size of the prefix excluding the '\\0' terminator. */
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#define VD_PLUGIN_PREFIX_LENGTH (sizeof(VD_PLUGIN_PREFIX)-1)
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync#endif
61cb83a8ccd1dd7f671f31fa93c9d8b7be09b4ccvboxsync