pdmqueue.h revision e7e589ca404045e288030a4151e57b63976cb39d
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * PDM - Pluggable Device Manager, Queues. (VMM)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * The contents of this file may alternatively be used under the terms
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * of the Common Development and Distribution License Version 1.0
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * VirtualBox OSE distribution, in which case the provisions of the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * CDDL are applicable instead of those of the GPL.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * You may elect to license modified versions of this file under the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * terms and conditions of either the GPL or the CDDL or both.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * additional information or have any questions.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef ___VBox_pdmqueue_h
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ___VBox_pdmqueue_h
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
48d60b042893290a747d3abeda71a3085d9133fdvboxsync#include <VBox/types.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncRT_C_DECLS_BEGIN
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @defgroup grp_pdm_queue The PDM Queues API
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @ingroup grp_pdm
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a PDM queue. Also called PDM queue handle. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct PDMQUEUE *PPDMQUEUE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a PDM queue item core. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct PDMQUEUEITEMCORE *PPDMQUEUEITEMCORE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * PDM queue item core.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct PDMQUEUEITEMCORE
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Pointer to the next item in the pending list - R3 Pointer. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync R3PTRTYPE(PPDMQUEUEITEMCORE) pNextR3;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Pointer to the next item in the pending list - R0 Pointer. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync R0PTRTYPE(PPDMQUEUEITEMCORE) pNextR0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Pointer to the next item in the pending list - RC Pointer. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RCPTRTYPE(PPDMQUEUEITEMCORE) pNextRC;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#if HC_ARCH_BITS == 64
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTRCPTR Alignment0;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} PDMQUEUEITEMCORE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync/**
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync * Queue consumer callback for devices.
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync *
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync * @returns Success indicator.
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync * If false the item will not be removed and the flushing will stop.
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync * @param pDevIns The device instance.
48d60b042893290a747d3abeda71a3085d9133fdvboxsync * @param pItem The item to consume. Upon return this item will be freed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef DECLCALLBACK(bool) FNPDMQUEUEDEV(PPDMDEVINS pDevIns, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a FNPDMQUEUEDEV(). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef FNPDMQUEUEDEV *PFNPDMQUEUEDEV;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Queue consumer callback for USB devices.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync * @returns Success indicator.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * If false the item will not be removed and the flushing will stop.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDevIns The USB device instance.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pItem The item to consume. Upon return this item will be freed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef DECLCALLBACK(bool) FNPDMQUEUEUSB(PPDMUSBINS pUsbIns, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a FNPDMQUEUEUSB(). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef FNPDMQUEUEUSB *PFNPDMQUEUEUSB;
10eaaac806009b8336cc5d746fe5072f6c9f58c0vboxsync
10eaaac806009b8336cc5d746fe5072f6c9f58c0vboxsync/**
c50100d1513854735d4e3593b3b385c007f6d8b6vboxsync * Queue consumer callback for drivers.
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns Success indicator.
6c83eb6b98d1dd1b1d9795c16801ee2f53d2cc31vboxsync * If false the item will not be removed and the flushing will stop.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pDrvIns The driver instance.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pItem The item to consume. Upon return this item will be freed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef DECLCALLBACK(bool) FNPDMQUEUEDRV(PPDMDRVINS pDrvIns, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a FNPDMQUEUEDRV(). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef FNPDMQUEUEDRV *PFNPDMQUEUEDRV;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Queue consumer callback for internal component.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns Success indicator.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * If false the item will not be removed and the flushing will stop.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pVM The VM handle.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pItem The item to consume. Upon return this item will be freed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef DECLCALLBACK(bool) FNPDMQUEUEINT(PVM pVM, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a FNPDMQUEUEINT(). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef FNPDMQUEUEINT *PFNPDMQUEUEINT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Queue consumer callback for external component.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns Success indicator.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * If false the item will not be removed and the flushing will stop.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvUser User argument.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pItem The item to consume. Upon return this item will be freed.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef DECLCALLBACK(bool) FNPDMQUEUEEXT(void *pvUser, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** Pointer to a FNPDMQUEUEEXT(). */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef FNPDMQUEUEEXT *PFNPDMQUEUEEXT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueCreateDevice(PVM pVM, PPDMDEVINS pDevIns, RTUINT cbItem, RTUINT cItems, uint32_t cMilliesInterval,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNPDMQUEUEDEV pfnCallback, bool fGCEnabled, const char *pszName, PPDMQUEUE *ppQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, RTUINT cbItem, RTUINT cItems, uint32_t cMilliesInterval,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNPDMQUEUEDRV pfnCallback, const char *pszName, PPDMQUEUE *ppQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueCreateInternal(PVM pVM, RTUINT cbItem, RTUINT cItems, uint32_t cMilliesInterval,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNPDMQUEUEINT pfnCallback, bool fGCEnabled, const char *pszName, PPDMQUEUE *ppQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueCreateExternal(PVM pVM, RTUINT cbItem, RTUINT cItems, uint32_t cMilliesInterval,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PFNPDMQUEUEEXT pfnCallback, void *pvUser, const char *pszName, PPDMQUEUE *ppQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueDestroy(PPDMQUEUE pQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(int) PDMR3QueueDestroyDevice(PVM pVM, PPDMDEVINS pDevIns);
5eca6b757429b1f1d768e16fba65c485af34319dvboxsyncVMMR3DECL(int) PDMR3QueueDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns);
5eca6b757429b1f1d768e16fba65c485af34319dvboxsyncVMMR3DECL(void) PDMR3QueueFlushAll(PVM pVM);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMR3DECL(void) PDMR3QueueFlushWorker(PVM pVM, PPDMQUEUE pQueue);
2a08e12d5dcc1bb5057a9620e87ad361d41a1c1fvboxsync
48d60b042893290a747d3abeda71a3085d9133fdvboxsyncVMMDECL(void) PDMQueueFlush(PPDMQUEUE pQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMDECL(PPDMQUEUEITEMCORE) PDMQueueAlloc(PPDMQUEUE pQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMDECL(void) PDMQueueInsert(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMDECL(void) PDMQueueInsertEx(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem, uint64_t NanoMaxDelay);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueRCPtr(PPDMQUEUE pQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVMMDECL(R0PTRTYPE(PPDMQUEUE)) PDMQueueR0Ptr(PPDMQUEUE pQueue);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncRT_C_DECLS_END
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync