88 return vdev->
device->get_status(vdev);
103 vdev->
device->reset(vdev);
116 return vdev->
device->get_features(vdev);
121 unsigned char dev_status;
137 dev_status = vdev->
device->get_status(vdev);
139 DPrintf(0,
"virtio: device refuses features: %x\n", dev_status);
150 u32 old, gen = vdev->
device->get_config_generation ?
151 vdev->
device->get_config_generation(vdev) : 0;
162 gen = vdev->
device->get_config_generation ?
163 vdev->
device->get_config_generation(vdev) : 0;
164 }
while (gen != old);
217 unsigned short *pNumEntries,
218 unsigned long *pRingSize,
219 unsigned long *pHeapSize)
221 return vdev->
device->query_queue_alloc(vdev,
index, pNumEntries, pRingSize, pHeapSize);
236 vdev->
info = new_info;
284 msix_vec = vdev->
device->set_config_vector(vdev, msix_vec);
293 for (
i = 0;
i < nvqs;
i++) {
366 BAR.
LowPart = pPCIHeader->u.type0.BaseAddresses[
i];
376 BAR.
HighPart = pPCIHeader->u.type0.BaseAddresses[++
i];
398 DPrintf(6,
"virtio: vp_notify vq->index = %x\n", vq->
index);
void virtio_device_ready(VirtIODevice *vdev)
#define PCI_TYPE0_ADDRESSES
static void virtio_cwrite_many(VirtIODevice *vdev, unsigned int offset, void *buf, size_t count, size_t bytes)
#define PCI_ADDRESS_IO_ADDRESS_MASK
#define vdev_get_msix_vector(vdev, queue)
#define STATUS_INSUFFICIENT_RESOURCES
void(* notification_cb)(struct virtqueue *vq)
void virtqueue_notify(struct virtqueue *vq)
u8 virtio_get_status(VirtIODevice *vdev)
#define STATUS_INVALID_PARAMETER
NTSTATUS virtio_find_queue(VirtIODevice *vdev, unsigned index, struct virtqueue **vq)
#define PCI_MULTIFUNCTION
GLuint GLuint GLsizei count
#define ioread8(vdev, addr)
NTSTATUS virtio_reserve_queue_memory(VirtIODevice *vdev, unsigned nvqs)
NTSTATUS virtio_find_queues(VirtIODevice *vdev, unsigned nvqs, struct virtqueue *vqs[])
#define PCI_ADDRESS_MEMORY_TYPE_MASK
static ULONG FORCEINLINE virtio_get_queue_descriptor_size()
static bool virtqueue_kick_prepare(struct virtqueue *vq)
NTSTATUS vio_modern_initialize(VirtIODevice *vdev)
#define VIRTIO_F_RING_PACKED
u32 virtio_get_queue_size(struct virtqueue *vq)
void virtio_add_status(VirtIODevice *vdev, u8 status)
#define VIRTIO_CONFIG_S_FEATURES_OK
GLenum GLuint GLenum GLsizei const GLchar * buf
void virtio_set_status(VirtIODevice *vdev, u8 status)
#define mem_alloc_nonpaged_block(vdev, size)
NTSTATUS virtio_set_features(VirtIODevice *vdev, u64 features)
static unsigned char bytes[4]
#define PCI_ADDRESS_MEMORY_ADDRESS_MASK
VirtIOQueueInfo inline_info[MAX_QUEUES_PER_DEVICE_DEFAULT]
const struct virtio_device_ops * device
void virtio_delete_queues(VirtIODevice *vdev)
#define virtio_is_feature_enabled(FeaturesList, Feature)
#define VIRTIO_CONFIG_S_DRIVER
#define DPrintf(Level, Fmt)
void virtqueue_kick(struct virtqueue *vq)
#define STATUS_DEVICE_NOT_CONNECTED
NTSTATUS virtio_device_initialize(VirtIODevice *vdev, const VirtIOSystemOps *pSystemOps, PVOID DeviceContext, bool msix_used)
#define VIRTIO_CONFIG_S_ACKNOWLEDGE
#define VIRTIO_RING_F_EVENT_IDX
#define NT_SUCCESS(StatCode)
const struct virtio_system_ops * system
#define mem_free_nonpaged_block(vdev, addr)
_In_ PNDIS_STRING _In_opt_ NDIS_HANDLE DeviceContext
void virtio_delete_queue(struct virtqueue *vq)
u8 virtio_read_isr_status(VirtIODevice *vdev)
u64 virtio_get_features(VirtIODevice *vdev)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
u16 virtio_set_queue_vector(struct virtqueue *vq, u16 vector)
#define STATUS_DEVICE_BUSY
#define VIRTIO_MSI_NO_VECTOR
void virtio_get_config(VirtIODevice *vdev, unsigned offset, void *buf, unsigned len)
static void virtio_cread_many(VirtIODevice *vdev, unsigned int offset, void *buf, size_t count, size_t bytes)
int virtio_get_bar_index(PPCI_COMMON_HEADER pPCIHeader, PHYSICAL_ADDRESS BasePA)
void virtio_device_reset(VirtIODevice *vdev)
void virtio_device_shutdown(VirtIODevice *vdev)
bool event_suppression_enabled
#define iowrite16(vdev, val, addr)
#define RtlZeroMemory(Destination, Length)
#define VIRTIO_CONFIG_S_DRIVER_OK
NTSTATUS vio_legacy_initialize(VirtIODevice *vdev)
void virtio_set_config(VirtIODevice *vdev, unsigned offset, void *buf, unsigned len)
#define VIRTIO_F_VERSION_1
#define PCI_ADDRESS_IO_SPACE
static SERVICE_STATUS status
NTSTATUS virtio_query_queue_allocation(VirtIODevice *vdev, unsigned index, unsigned short *pNumEntries, unsigned long *pRingSize, unsigned long *pHeapSize)
static NTSTATUS vp_setup_vq(struct virtqueue **queue, VirtIODevice *vdev, unsigned index, u16 msix_vec)
void vp_notify(struct virtqueue *vq)
u16 virtio_set_config_vector(VirtIODevice *vdev, u16 vector)