Virtio.h revision fd8bc8bc503d0dd080a7658484e62f757ccb7a1c
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * Virtio.h - Virtio Declarations
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * Copyright (C) 2009-2013 Oracle Corporation
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * available from http://www.virtualbox.org. This file is free software;
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * you can redistribute it and/or modify it under the terms of the GNU
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * General Public License (GPL) as published by the Free Software
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync/** @name Saved state versions.
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync * The saved state version is changed if either common or any of specific
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * parts are changed. That is, it is perfectly possible that the version
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * of saved vnet state will increase as a result of change in vblk structure
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync * for example.
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsynctypedef struct VRingDesc
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsynctypedef struct VRingAvail
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsynctypedef struct VRingUsed
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef struct VRing
2cb52dd865592ea8e27b588beb22898d189646b1vboxsynctypedef struct VQueue
f2e1f71feb5d4ec79d46defcd71de0763234b1e2vboxsync void (*pfnCallback)(void *pvState, struct VQueue *pQueue);
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef struct VQueueElem
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * The core (/common) state of the VirtIO PCI device
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync * @implements PDMILEDPORTS
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef struct VPCIState_st
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync PDMCRITSECT cs; /**< Critical section - what is it protecting? */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync /* Read-only part, never changes after initialization. */
2f827df539da232220444c27f2b207a707a045b0vboxsync char szInstance[8]; /**< Instance name, e.g. VNet#1. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync /** Status LUN: Base interface. */
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync /** Status LUN: LED port interface. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync /** Status LUN: LED connector (peer). */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync PPDMDEVINSR3 pDevInsR3; /**< Device instance - R3. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync PPDMDEVINSR0 pDevInsR0; /**< Device instance - R0. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync PPDMDEVINSRC pDevInsRC; /**< Device instance - RC. */
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync /** TODO */
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync /** Base port of I/O space region. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync /* Read/write part, protected with critical section. */
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync /** Status LED. */
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync uint16_t uQueueSelector; /**< An index in aQueues array. */
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync uint8_t uStatus; /**< Device Status (bits are device-specific). */
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync uint32_t nQueues; /**< Actual number of queues used. */
2f827df539da232220444c27f2b207a707a045b0vboxsync#endif /* VBOX_WITH_STATISTICS */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync/** Pointer to the core (/common) state of a VirtIO PCI device. */
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsync/** @name Callbacks
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef uint32_t (*PFNGETHOSTFEATURES)(void *pState);
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef uint32_t (*PFNGETHOSTMINIMALFEATURES)(void *pState);
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsynctypedef void (*PFNSETHOSTFEATURES)(void *pState, uint32_t uFeatures);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsynctypedef int (*PFNGETCONFIG)(void *pState, uint32_t port, uint32_t cb, void *data);
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsynctypedef int (*PFNSETCONFIG)(void *pState, uint32_t port, uint32_t cb, void *data);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncint vpciRaiseInterrupt(VPCISTATE *pState, int rcBusy, uint8_t u8IntCause);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync PFNGETHOSTMINIMALFEATURES pfnGetHostMinimalFeatures,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncint vpciSaveExec(PVPCISTATE pState, PSSMHANDLE pSSM);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncint vpciLoadExec(PVPCISTATE pState, PSSMHANDLE pSSM,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncint vpciConstruct(PPDMDEVINS pDevIns, VPCISTATE *pState,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncvoid vpciRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncvoid *vpciQueryInterface(struct PDMIBASE *pInterface, const char *pszIID);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncPVQUEUE vpciAddQueue(VPCISTATE* pState, unsigned uSize,
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync void (*pfnCallback)(void *pvState, PVQUEUE pQueue),
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync const char *pcszName);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncDECLINLINE(int) vpciCsEnter(VPCISTATE *pState, int iBusyRc)
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncvoid vringSetNotification(PVPCISTATE pState, PVRING pVRing, bool fEnabled);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncDECLINLINE(uint16_t) vringReadAvailIndex(PVPCISTATE pState, PVRING pVRing)
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync pVRing->addrAvail + RT_OFFSETOF(VRINGAVAIL, uNextFreeIndex),
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsyncbool vqueueGet(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, bool fRemove = true);
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsyncvoid vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen, uint32_t uReserved = 0);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncvoid vqueueNotify(PVPCISTATE pState, PVQUEUE pQueue);
56f538fa476fdbd9cc3d60438083a3f0d5f3ff7fvboxsyncDECLINLINE(bool) vqueuePeek(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem)
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync return vqueueGet(pState, pQueue, pElem, /* fRemove */ false);
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncDECLINLINE(bool) vqueueIsReady(PVPCISTATE pState, PVQUEUE pQueue)
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsyncDECLINLINE(bool) vqueueIsEmpty(PVPCISTATE pState, PVQUEUE pQueue)
f46e7db81f80ea09725c6cc048fa0cad86573dc2vboxsync return (vringReadAvailIndex(pState, &pQueue->VRing) == pQueue->uNextAvailIndex);
b6517c5cc3b7a38889416706905a3cf2fd010785vboxsync#endif /* !___VBox_Virtio_h */