|
|
1.1 ! root 1: #ifndef _LINUX_VHOST_H ! 2: #define _LINUX_VHOST_H ! 3: /* Userspace interface for in-kernel virtio accelerators. */ ! 4: ! 5: /* vhost is used to reduce the number of system calls involved in virtio. ! 6: * ! 7: * Existing virtio net code is used in the guest without modification. ! 8: * ! 9: * This header includes interface used by userspace hypervisor for ! 10: * device configuration. ! 11: */ ! 12: ! 13: #include <linux/types.h> ! 14: ! 15: #include <linux/ioctl.h> ! 16: #include <linux/virtio_config.h> ! 17: #include <linux/virtio_ring.h> ! 18: ! 19: struct vhost_vring_state { ! 20: unsigned int index; ! 21: unsigned int num; ! 22: }; ! 23: ! 24: struct vhost_vring_file { ! 25: unsigned int index; ! 26: int fd; /* Pass -1 to unbind from file. */ ! 27: ! 28: }; ! 29: ! 30: struct vhost_vring_addr { ! 31: unsigned int index; ! 32: /* Option flags. */ ! 33: unsigned int flags; ! 34: /* Flag values: */ ! 35: /* Whether log address is valid. If set enables logging. */ ! 36: #define VHOST_VRING_F_LOG 0 ! 37: ! 38: /* Start of array of descriptors (virtually contiguous) */ ! 39: __u64 desc_user_addr; ! 40: /* Used structure address. Must be 32 bit aligned */ ! 41: __u64 used_user_addr; ! 42: /* Available structure address. Must be 16 bit aligned */ ! 43: __u64 avail_user_addr; ! 44: /* Logging support. */ ! 45: /* Log writes to used structure, at offset calculated from specified ! 46: * address. Address must be 32 bit aligned. */ ! 47: __u64 log_guest_addr; ! 48: }; ! 49: ! 50: struct vhost_memory_region { ! 51: __u64 guest_phys_addr; ! 52: __u64 memory_size; /* bytes */ ! 53: __u64 userspace_addr; ! 54: __u64 flags_padding; /* No flags are currently specified. */ ! 55: }; ! 56: ! 57: /* All region addresses and sizes must be 4K aligned. */ ! 58: #define VHOST_PAGE_SIZE 0x1000 ! 59: ! 60: struct vhost_memory { ! 61: __u32 nregions; ! 62: __u32 padding; ! 63: struct vhost_memory_region regions[0]; ! 64: }; ! 65: ! 66: /* ioctls */ ! 67: ! 68: #define VHOST_VIRTIO 0xAF ! 69: ! 70: /* Features bitmask for forward compatibility. Transport bits are used for ! 71: * vhost specific features. */ ! 72: #define VHOST_GET_FEATURES _IOR(VHOST_VIRTIO, 0x00, __u64) ! 73: #define VHOST_SET_FEATURES _IOW(VHOST_VIRTIO, 0x00, __u64) ! 74: ! 75: /* Set current process as the (exclusive) owner of this file descriptor. This ! 76: * must be called before any other vhost command. Further calls to ! 77: * VHOST_OWNER_SET fail until VHOST_OWNER_RESET is called. */ ! 78: #define VHOST_SET_OWNER _IO(VHOST_VIRTIO, 0x01) ! 79: /* Give up ownership, and reset the device to default values. ! 80: * Allows subsequent call to VHOST_OWNER_SET to succeed. */ ! 81: #define VHOST_RESET_OWNER _IO(VHOST_VIRTIO, 0x02) ! 82: ! 83: /* Set up/modify memory layout */ ! 84: #define VHOST_SET_MEM_TABLE _IOW(VHOST_VIRTIO, 0x03, struct vhost_memory) ! 85: ! 86: /* Write logging setup. */ ! 87: /* Memory writes can optionally be logged by setting bit at an offset ! 88: * (calculated from the physical address) from specified log base. ! 89: * The bit is set using an atomic 32 bit operation. */ ! 90: /* Set base address for logging. */ ! 91: #define VHOST_SET_LOG_BASE _IOW(VHOST_VIRTIO, 0x04, __u64) ! 92: /* Specify an eventfd file descriptor to signal on log write. */ ! 93: #define VHOST_SET_LOG_FD _IOW(VHOST_VIRTIO, 0x07, int) ! 94: ! 95: /* Ring setup. */ ! 96: /* Set number of descriptors in ring. This parameter can not ! 97: * be modified while ring is running (bound to a device). */ ! 98: #define VHOST_SET_VRING_NUM _IOW(VHOST_VIRTIO, 0x10, struct vhost_vring_state) ! 99: /* Set addresses for the ring. */ ! 100: #define VHOST_SET_VRING_ADDR _IOW(VHOST_VIRTIO, 0x11, struct vhost_vring_addr) ! 101: /* Base value where queue looks for available descriptors */ ! 102: #define VHOST_SET_VRING_BASE _IOW(VHOST_VIRTIO, 0x12, struct vhost_vring_state) ! 103: /* Get accessor: reads index, writes value in num */ ! 104: #define VHOST_GET_VRING_BASE _IOWR(VHOST_VIRTIO, 0x12, struct vhost_vring_state) ! 105: ! 106: /* The following ioctls use eventfd file descriptors to signal and poll ! 107: * for events. */ ! 108: ! 109: /* Set eventfd to poll for added buffers */ ! 110: #define VHOST_SET_VRING_KICK _IOW(VHOST_VIRTIO, 0x20, struct vhost_vring_file) ! 111: /* Set eventfd to signal when buffers have beed used */ ! 112: #define VHOST_SET_VRING_CALL _IOW(VHOST_VIRTIO, 0x21, struct vhost_vring_file) ! 113: /* Set eventfd to signal an error */ ! 114: #define VHOST_SET_VRING_ERR _IOW(VHOST_VIRTIO, 0x22, struct vhost_vring_file) ! 115: ! 116: /* VHOST_NET specific defines */ ! 117: ! 118: /* Attach virtio net ring to a raw socket, or tap device. ! 119: * The socket must be already bound to an ethernet device, this device will be ! 120: * used for transmit. Pass fd -1 to unbind from the socket and the transmit ! 121: * device. This can be used to stop the ring (e.g. for migration). */ ! 122: #define VHOST_NET_SET_BACKEND _IOW(VHOST_VIRTIO, 0x30, struct vhost_vring_file) ! 123: ! 124: /* Feature bits */ ! 125: /* Log all write descriptors. Can be changed while device is active. */ ! 126: #define VHOST_F_LOG_ALL 26 ! 127: /* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */ ! 128: #define VHOST_NET_F_VIRTIO_NET_HDR 27 ! 129: ! 130: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.