#ifndef _VIRTIO_RING_H_ # define _VIRTIO_RING_H_ #define PAGE_SHIFT (12) #define PAGE_SIZE (1<num = num; /* physical address of desc must be page aligned */ pa = virt_to_phys(queue); pa = (pa + PAGE_MASK) & ~PAGE_MASK; vr->desc = phys_to_virt(pa); vr->avail = (struct vring_avail *)&vr->desc[num]; /* physical address of used must be page aligned */ pa = virt_to_phys(&vr->avail->ring[num]); pa = (pa + PAGE_MASK) & ~PAGE_MASK; vr->used = phys_to_virt(pa); for (i = 0; i < num - 1; i++) vr->desc[i].next = i + 1; vr->desc[i].next = 0; } #define vring_size(num) \ (((((sizeof(struct vring_desc) * num) + \ (sizeof(struct vring_avail) + sizeof(u16) * num)) \ + PAGE_MASK) & ~PAGE_MASK) + \ (sizeof(struct vring_used) + sizeof(struct vring_used_elem) * num)) #endif /* _VIRTIO_RING_H_ */