288{
291 void *vq_addr;
293 unsigned long ring_size, heap_size;
295
296
300 }
301
302
304
305
309 } else {
311 }
312 }
313
315 if (vq_addr ==
NULL) {
317 }
318
319
324 } else {
328 }
329
330 if (!vq) {
332 goto err_new_queue;
333 }
334
335
343
345
349 "%p: bad notification offset %u (x %u) "
350 "for queue %u > %zd",
355 goto err_map_notify;
356 }
359 } else {
364 }
365
368 goto err_map_notify;
369 }
370
372 msix_vec =
vdev->
device->set_queue_vector(vq, msix_vec);
375 goto err_assign_vector;
376 }
377 }
378
379
381
384
385err_assign_vector:
386err_map_notify:
388err_new_queue:
392}
static NTSTATUS vio_modern_query_vq_alloc(VirtIODevice *vdev, unsigned index, unsigned short *pNumEntries, unsigned long *pRingSize, unsigned long *pHeapSize)
struct virtqueue * vring_new_virtqueue_packed(unsigned int index, unsigned int num, unsigned int vring_align, VirtIODevice *vdev, void *pages, void(*notify)(struct virtqueue *), void *control)
struct virtqueue * vring_new_virtqueue_split(unsigned int index, unsigned int num, unsigned int vring_align, VirtIODevice *vdev, void *pages, void(*notify)(struct virtqueue *), void *control)
#define NT_SUCCESS(StatCode)
#define STATUS_DEVICE_BUSY
#define STATUS_INSUFFICIENT_RESOURCES
#define mem_get_physical_address(vdev, virt)
#define mem_alloc_nonpaged_block(vdev, size)
#define iowrite64_twopart(vdev, val, lo_addr, hi_addr)
#define mem_alloc_contiguous_pages(vdev, size)
void vp_notify(struct virtqueue *vq)