Virtio-solaris.h revision 1a9a76385f412e8c5762baadaa30afe308b1cd12
/* $Id$ */
/** @file
* VirtualBox Guest Additions: Virtio Driver for Solaris, header.
*/
/*
* Copyright (C) 2010 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*/
#ifndef ___Virtio_solaris_h
#define ___Virtio_solaris_h
/** Release log descriptive prefix. */
#define VIRTIOLOGNAME "Virtio"
/** Buffer continues via the Next field */
#define VIRTIO_FLAGS_RING_DESC_NEXT RT_BIT(0)
/** Buffer is write-only, else is read-only. */
/** Indirect buffer (buffer contains list of buffer descriptors) */
/* Values from our Virtio.h */
#define VIRTIO_PCI_STATUS_ACK 0x01
#define VIRTIO_PCI_STATUS_DRV 0x02
#define VIRTIO_PCI_STATUS_DRV_OK 0x04
#define VIRTIO_PCI_STATUS_FAILED 0x80
/**
* The ring descriptor table refers to the buffers the guest is using for the
* device.
*/
struct VirtioRingDesc
{
};
typedef struct VirtioRingDesc VIRTIORINGDESC;
typedef VIRTIORINGDESC *PVIRTIORINGDESC;
/**
* The available ring refers to what descriptors are being offered to the
* device.
*/
struct VirtioRingAvail
{
};
typedef struct VirtioRingAvail VIRTIORINGAVAIL;
typedef VIRTIORINGAVAIL *PVIRTIORINGAVAIL;
/**
* The used ring refers to the buffers the device is done using them. The
* element is a pair-descriptor refers to the buffer once the device is done
* with the buffer.
*/
struct VirtioRingUsedElem
{
};
typedef struct VirtioRingUsedElem VIRTIORINGUSEDELEM;
typedef VIRTIORINGUSEDELEM *PVIRTIORINGUSEDELEM;
/**
* The Virtio Ring which contains the descriptors.
*/
struct VirtioRing
{
};
typedef struct VirtioRing VIRTIORING;
typedef VIRTIORING *PVIRTIORING;
struct VirtioDevice;
struct VirtioQueue;
/**
* Virtio device operations.
*/
struct VirtioDeviceOps
{
};
typedef struct VirtioDeviceOps VIRTIODEVICEOPS;
typedef VIRTIODEVICEOPS *PVIRTIODEVICEOPS;
/**
* Hypervisor access operations.
*/
struct VirtioHyperOps
{
};
typedef struct VirtioHyperOps VIRTIOHYPEROPS;
typedef VIRTIOHYPEROPS *PVIRTIOHYPEROPS;
/**
* Virtio Queue into which buffers are posted.
*/
struct VirtioQueue
{
void *pvData; /* Queue private data. */
};
typedef struct VirtioQueue VIRTIOQUEUE;
typedef VIRTIOQUEUE *PVIRTIOQUEUE;
/**
* Virtio device descriptor, common to all Virtio devices.
*/
struct VirtioDevice
{
void *pvDevice; /* Device opaque data. */
void *pvHyper; /* Hypervisor opaque data. */
};
typedef struct VirtioDevice VIRTIODEVICE;
typedef VIRTIODEVICE *PVIRTIODEVICE;
int VirtioAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd, PVIRTIODEVICEOPS pDeviceOps, PVIRTIOHYPEROPS pHyperOps);
#endif