Annotation of qemu/linux-headers/linux/vhost.h, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.