Virtio.h revision abc1c143c7e4b1c81651e524ebf8ee3ccd794cdd
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * Virtio.h - Virtio Declarations
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * available from http://www.virtualbox.org. This file is free software;
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * General Public License (GPL) as published by the Free Software
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * additional information or have any questions.
e74d9df42b6616e049af024e644cf186d48f460cvboxsync#define VIRTIO_RELOCATE(p, o) *(RTHCUINTPTR *)&p += o
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * The saved state version is changed if either common or any of specific
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * parts are changed. That is, it is perfectly possible that the version
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * of saved vnet state will increase as a result of change in vblk structure
e74d9df42b6616e049af024e644cf186d48f460cvboxsync * for example.
e74d9df42b6616e049af024e644cf186d48f460cvboxsync void (*pfnCallback)(void *pvState, struct VQueue *pQueue);
e74d9df42b6616e049af024e644cf186d48f460cvboxsync PDMCRITSECT cs; /**< Critical section - what is it protecting? */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync /* Read-only part, never changes after initialization. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync char szInstance[8]; /**< Instance name, e.g. VNet#1. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync PPDMDEVINSR3 pDevInsR3; /**< Device instance - R3. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync PPDMDEVINSR0 pDevInsR0; /**< Device instance - R0. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync PPDMDEVINSRC pDevInsRC; /**< Device instance - RC. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync /** TODO */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync /** Base port of I/O space region. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync /* Read/write part, protected with critical section. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync /** Status LED. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync uint16_t uQueueSelector; /**< An index in aQueues array. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync uint8_t uStatus; /**< Device Status (bits are device-specific). */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync uint32_t nQueues; /**< Actual number of queues used. */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync#endif /* VBOX_WITH_STATISTICS */
e74d9df42b6616e049af024e644cf186d48f460cvboxsync/* Callbacks *****************************************************************/
e74d9df42b6616e049af024e644cf186d48f460cvboxsynctypedef uint32_t (*PFNGETHOSTFEATURES)(void *pState);
e74d9df42b6616e049af024e644cf186d48f460cvboxsynctypedef uint32_t (*PFNGETHOSTMINIMALFEATURES)(void *pState);
e74d9df42b6616e049af024e644cf186d48f460cvboxsynctypedef void (*PFNSETHOSTFEATURES)(void *pState, uint32_t uFeatures);
e74d9df42b6616e049af024e644cf186d48f460cvboxsynctypedef int (*PFNGETCONFIG)(void *pState, uint32_t port, uint32_t cb, void *data);
e74d9df42b6616e049af024e644cf186d48f460cvboxsynctypedef int (*PFNSETCONFIG)(void *pState, uint32_t port, uint32_t cb, void *data);
e74d9df42b6616e049af024e644cf186d48f460cvboxsync/*****************************************************************************/
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncint vpciRaiseInterrupt(VPCISTATE *pState, int rcBusy, uint8_t u8IntCause);
e74d9df42b6616e049af024e644cf186d48f460cvboxsync PFNGETHOSTMINIMALFEATURES pfnGetHostMinimalFeatures,
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncint vpciSaveExec(PVPCISTATE pState, PSSMHANDLE pSSM);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncint vpciLoadExec(PVPCISTATE pState, PSSMHANDLE pSSM,
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncint vpciConstruct(PPDMDEVINS pDevIns, VPCISTATE *pState,
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncvoid vpciRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncvoid *vpciQueryInterface(struct PDMIBASE *pInterface,
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncPVQUEUE vpciAddQueue(VPCISTATE* pState, unsigned uSize,
e74d9df42b6616e049af024e644cf186d48f460cvboxsync void (*pfnCallback)(void *pvState, PVQUEUE pQueue),
e74d9df42b6616e049af024e644cf186d48f460cvboxsync const char *pcszName);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncDECLINLINE(int) vpciCsEnter(VPCISTATE *pState, int iBusyRc)
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncvoid vringSetNotification(PVPCISTATE pState, PVRING pVRing, bool fEnabled);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncDECLINLINE(uint16_t) vringReadAvailIndex(PVPCISTATE pState, PVRING pVRing)
e74d9df42b6616e049af024e644cf186d48f460cvboxsync pVRing->addrAvail + RT_OFFSETOF(VRINGAVAIL, uNextFreeIndex),
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncbool vqueueGet(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncvoid vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncvoid vqueueNotify(PVPCISTATE pState, PVQUEUE pQueue);
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncDECLINLINE(bool) vqueueIsReady(PVPCISTATE pState, PVQUEUE pQueue)
e74d9df42b6616e049af024e644cf186d48f460cvboxsyncDECLINLINE(bool) vqueueIsEmpty(PVPCISTATE pState, PVQUEUE pQueue)
e74d9df42b6616e049af024e644cf186d48f460cvboxsync return (vringReadAvailIndex(pState, &pQueue->VRing) == pQueue->uNextAvailIndex);
e74d9df42b6616e049af024e644cf186d48f460cvboxsync#endif /* ___VBox_Virtio_h */