#include "osdep.h"
#include "virtio_pci.h"
#include "VirtIO.h"
#include "kdebugprint.h"
#include <stddef.h>
#include "virtio_pci_common.h"
Go to the source code of this file.
|
NTSTATUS | virtio_device_initialize (VirtIODevice *vdev, const VirtIOSystemOps *pSystemOps, PVOID DeviceContext, bool msix_used) |
|
void | virtio_device_shutdown (VirtIODevice *vdev) |
|
u8 | virtio_get_status (VirtIODevice *vdev) |
|
void | virtio_set_status (VirtIODevice *vdev, u8 status) |
|
void | virtio_add_status (VirtIODevice *vdev, u8 status) |
|
void | virtio_device_reset (VirtIODevice *vdev) |
|
void | virtio_device_ready (VirtIODevice *vdev) |
|
u64 | virtio_get_features (VirtIODevice *vdev) |
|
NTSTATUS | virtio_set_features (VirtIODevice *vdev, u64 features) |
|
static void | virtio_cread_many (VirtIODevice *vdev, unsigned int offset, void *buf, size_t count, size_t bytes) |
|
void | virtio_get_config (VirtIODevice *vdev, unsigned offset, void *buf, unsigned len) |
|
static void | virtio_cwrite_many (VirtIODevice *vdev, unsigned int offset, void *buf, size_t count, size_t bytes) |
|
void | virtio_set_config (VirtIODevice *vdev, unsigned offset, void *buf, unsigned len) |
|
NTSTATUS | virtio_query_queue_allocation (VirtIODevice *vdev, unsigned index, unsigned short *pNumEntries, unsigned long *pRingSize, unsigned long *pHeapSize) |
|
NTSTATUS | virtio_reserve_queue_memory (VirtIODevice *vdev, unsigned nvqs) |
|
static NTSTATUS | vp_setup_vq (struct virtqueue **queue, VirtIODevice *vdev, unsigned index, u16 msix_vec) |
|
NTSTATUS | virtio_find_queue (VirtIODevice *vdev, unsigned index, struct virtqueue **vq) |
|
NTSTATUS | virtio_find_queues (VirtIODevice *vdev, unsigned nvqs, struct virtqueue *vqs[]) |
|
void | virtio_delete_queue (struct virtqueue *vq) |
|
void | virtio_delete_queues (VirtIODevice *vdev) |
|
u32 | virtio_get_queue_size (struct virtqueue *vq) |
|
u16 | virtio_set_config_vector (VirtIODevice *vdev, u16 vector) |
|
u16 | virtio_set_queue_vector (struct virtqueue *vq, u16 vector) |
|
u8 | virtio_read_isr_status (VirtIODevice *vdev) |
|
int | virtio_get_bar_index (PPCI_COMMON_HEADER pPCIHeader, PHYSICAL_ADDRESS BasePA) |
|
void | vp_notify (struct virtqueue *vq) |
|
void | virtqueue_notify (struct virtqueue *vq) |
|
void | virtqueue_kick (struct virtqueue *vq) |
|
◆ virtio_add_status()
◆ virtio_cread_many()
Definition at line 146 of file VirtIOPCICommon.c.
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);
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
static unsigned char bytes[4]
const struct virtio_device_ops * device
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
Referenced by virtio_get_config().
◆ virtio_cwrite_many()
Definition at line 186 of file VirtIOPCICommon.c.
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
static unsigned char bytes[4]
const struct virtio_device_ops * device
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
Referenced by virtio_set_config().
◆ virtio_delete_queue()
Definition at line 311 of file VirtIOPCICommon.c.
const struct virtio_device_ops * device
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
◆ virtio_delete_queues()
Definition at line 320 of file VirtIOPCICommon.c.
const struct virtio_device_ops * device
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
Referenced by DeleteNetQueues(), and virtio_find_queues().
◆ virtio_device_initialize()
Definition at line 44 of file VirtIOPCICommon.c.
NTSTATUS vio_modern_initialize(VirtIODevice *vdev)
void virtio_add_status(VirtIODevice *vdev, u8 status)
VirtIOQueueInfo inline_info[MAX_QUEUES_PER_DEVICE_DEFAULT]
#define VIRTIO_CONFIG_S_DRIVER
#define STATUS_DEVICE_NOT_CONNECTED
#define VIRTIO_CONFIG_S_ACKNOWLEDGE
#define NT_SUCCESS(StatCode)
const struct virtio_system_ops * system
_In_ PNDIS_STRING _In_opt_ NDIS_HANDLE DeviceContext
void virtio_device_reset(VirtIODevice *vdev)
#define RtlZeroMemory(Destination, Length)
NTSTATUS vio_legacy_initialize(VirtIODevice *vdev)
static SERVICE_STATUS status
◆ virtio_device_ready()
◆ virtio_device_reset()
◆ virtio_device_shutdown()
Definition at line 77 of file VirtIOPCICommon.c.
VirtIOQueueInfo inline_info[MAX_QUEUES_PER_DEVICE_DEFAULT]
#define mem_free_nonpaged_block(vdev, addr)
Referenced by VirtIONetRelease().
◆ virtio_find_queue()
Definition at line 256 of file VirtIOPCICommon.c.
#define vdev_get_msix_vector(vdev, queue)
static NTSTATUS vp_setup_vq(struct virtqueue **queue, VirtIODevice *vdev, unsigned index, u16 msix_vec)
◆ virtio_find_queues()
Definition at line 267 of file VirtIOPCICommon.c.
293 for (
i = 0;
i < nvqs;
i++) {
#define vdev_get_msix_vector(vdev, queue)
NTSTATUS virtio_reserve_queue_memory(VirtIODevice *vdev, unsigned nvqs)
const struct virtio_device_ops * device
void virtio_delete_queues(VirtIODevice *vdev)
#define NT_SUCCESS(StatCode)
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
#define STATUS_DEVICE_BUSY
#define VIRTIO_MSI_NO_VECTOR
static SERVICE_STATUS status
static NTSTATUS vp_setup_vq(struct virtqueue **queue, VirtIODevice *vdev, unsigned index, u16 msix_vec)
Referenced by FindNetQueues().
◆ virtio_get_bar_index()
Definition at line 357 of file VirtIOPCICommon.c.
366 BAR.
LowPart = pPCIHeader->u.type0.BaseAddresses[
i];
376 BAR.
HighPart = pPCIHeader->u.type0.BaseAddresses[++
i];
#define PCI_TYPE0_ADDRESSES
#define PCI_ADDRESS_IO_ADDRESS_MASK
#define PCI_MULTIFUNCTION
#define PCI_ADDRESS_MEMORY_TYPE_MASK
#define PCI_ADDRESS_MEMORY_ADDRESS_MASK
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
#define PCI_ADDRESS_IO_SPACE
Referenced by GetAdapterResources().
◆ virtio_get_config()
◆ virtio_get_features()
◆ virtio_get_queue_size()
◆ virtio_get_status()
◆ virtio_query_queue_allocation()
◆ virtio_read_isr_status()
◆ virtio_reserve_queue_memory()
Definition at line 224 of file VirtIOPCICommon.c.
#define STATUS_INSUFFICIENT_RESOURCES
static ULONG FORCEINLINE virtio_get_queue_descriptor_size()
#define mem_alloc_nonpaged_block(vdev, size)
VirtIOQueueInfo inline_info[MAX_QUEUES_PER_DEVICE_DEFAULT]
#define mem_free_nonpaged_block(vdev, addr)
Referenced by virtio_find_queues().
◆ virtio_set_config()
Definition at line 197 of file VirtIOPCICommon.c.
static void virtio_cwrite_many(VirtIODevice *vdev, unsigned int offset, void *buf, size_t count, size_t bytes)
GLenum GLuint GLenum GLsizei const GLchar * buf
const struct virtio_device_ops * device
◆ virtio_set_config_vector()
◆ virtio_set_features()
Definition at line 119 of file VirtIOPCICommon.c.
121 unsigned char dev_status;
139 DPrintf(0,
"virtio: device refuses features: %x\n", dev_status);
#define STATUS_INVALID_PARAMETER
#define VIRTIO_F_RING_PACKED
void virtio_add_status(VirtIODevice *vdev, u8 status)
#define VIRTIO_CONFIG_S_FEATURES_OK
const struct virtio_device_ops * device
#define virtio_is_feature_enabled(FeaturesList, Feature)
#define DPrintf(Level, Fmt)
#define VIRTIO_RING_F_EVENT_IDX
#define NT_SUCCESS(StatCode)
bool event_suppression_enabled
#define VIRTIO_F_VERSION_1
static SERVICE_STATUS status
Referenced by FinalizeFeatures().
◆ virtio_set_queue_vector()
◆ virtio_set_status()
◆ virtqueue_kick()
◆ virtqueue_notify()
◆ vp_notify()
◆ vp_setup_vq()