|
@@ -32,6 +32,7 @@
|
|
|
*
|
|
|
* Copyright Rusty Russell IBM Corporation 2007. */
|
|
|
#include <linux/types.h>
|
|
|
+#include <linux/virtio_types.h>
|
|
|
|
|
|
/* This marks a buffer as continuing via the next field. */
|
|
|
#define VRING_DESC_F_NEXT 1
|
|
@@ -61,32 +62,32 @@
|
|
|
/* Virtio ring descriptors: 16 bytes. These can chain together via "next". */
|
|
|
struct vring_desc {
|
|
|
/* Address (guest-physical). */
|
|
|
- __u64 addr;
|
|
|
+ __virtio64 addr;
|
|
|
/* Length. */
|
|
|
- __u32 len;
|
|
|
+ __virtio32 len;
|
|
|
/* The flags as indicated above. */
|
|
|
- __u16 flags;
|
|
|
+ __virtio16 flags;
|
|
|
/* We chain unused descriptors via this, too */
|
|
|
- __u16 next;
|
|
|
+ __virtio16 next;
|
|
|
};
|
|
|
|
|
|
struct vring_avail {
|
|
|
- __u16 flags;
|
|
|
- __u16 idx;
|
|
|
- __u16 ring[];
|
|
|
+ __virtio16 flags;
|
|
|
+ __virtio16 idx;
|
|
|
+ __virtio16 ring[];
|
|
|
};
|
|
|
|
|
|
/* u32 is used here for ids for padding reasons. */
|
|
|
struct vring_used_elem {
|
|
|
/* Index of start of used descriptor chain. */
|
|
|
- __u32 id;
|
|
|
+ __virtio32 id;
|
|
|
/* Total length of the descriptor chain which was used (written to) */
|
|
|
- __u32 len;
|
|
|
+ __virtio32 len;
|
|
|
};
|
|
|
|
|
|
struct vring_used {
|
|
|
- __u16 flags;
|
|
|
- __u16 idx;
|
|
|
+ __virtio16 flags;
|
|
|
+ __virtio16 idx;
|
|
|
struct vring_used_elem ring[];
|
|
|
};
|
|
|
|
|
@@ -109,25 +110,25 @@ struct vring {
|
|
|
* struct vring_desc desc[num];
|
|
|
*
|
|
|
* // A ring of available descriptor heads with free-running index.
|
|
|
- * __u16 avail_flags;
|
|
|
- * __u16 avail_idx;
|
|
|
- * __u16 available[num];
|
|
|
- * __u16 used_event_idx;
|
|
|
+ * __virtio16 avail_flags;
|
|
|
+ * __virtio16 avail_idx;
|
|
|
+ * __virtio16 available[num];
|
|
|
+ * __virtio16 used_event_idx;
|
|
|
*
|
|
|
* // Padding to the next align boundary.
|
|
|
* char pad[];
|
|
|
*
|
|
|
* // A ring of used descriptor heads with free-running index.
|
|
|
- * __u16 used_flags;
|
|
|
- * __u16 used_idx;
|
|
|
+ * __virtio16 used_flags;
|
|
|
+ * __virtio16 used_idx;
|
|
|
* struct vring_used_elem used[num];
|
|
|
- * __u16 avail_event_idx;
|
|
|
+ * __virtio16 avail_event_idx;
|
|
|
* };
|
|
|
*/
|
|
|
/* We publish the used event index at the end of the available ring, and vice
|
|
|
* versa. They are at the end for backwards compatibility. */
|
|
|
#define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
|
|
|
-#define vring_avail_event(vr) (*(__u16 *)&(vr)->used->ring[(vr)->num])
|
|
|
+#define vring_avail_event(vr) (*(__virtio16 *)&(vr)->used->ring[(vr)->num])
|
|
|
|
|
|
static inline void vring_init(struct vring *vr, unsigned int num, void *p,
|
|
|
unsigned long align)
|
|
@@ -135,15 +136,15 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p,
|
|
|
vr->num = num;
|
|
|
vr->desc = p;
|
|
|
vr->avail = p + num*sizeof(struct vring_desc);
|
|
|
- vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__u16)
|
|
|
+ vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__virtio16)
|
|
|
+ align-1) & ~(align - 1));
|
|
|
}
|
|
|
|
|
|
static inline unsigned vring_size(unsigned int num, unsigned long align)
|
|
|
{
|
|
|
- return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num)
|
|
|
+ return ((sizeof(struct vring_desc) * num + sizeof(__virtio16) * (3 + num)
|
|
|
+ align - 1) & ~(align - 1))
|
|
|
- + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
|
|
|
+ + sizeof(__virtio16) * 3 + sizeof(struct vring_used_elem) * num;
|
|
|
}
|
|
|
|
|
|
/* The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX */
|