acrn-hypervisor/devicemodel/include/vhost.h
Liu Long 49426147aa ACRN: DM: Fix the virtio negotiated features bug.
The virtio feature bits is 64bits but the access will be split
as two times 32bits access. This patch fixes the bug which overwrites
another side 32bits, and causes feature bits are lost.

Tracked-On: #7456
Signed-off-by: Liu Long <long.liu@linux.intel.com>
Reviewed-by: Conghui <conghui.chen@intel.com>
Acked-by: Wang, Yu1 <yu1.wang@intel.com>
2022-05-12 16:15:24 +08:00

147 lines
3.0 KiB
C

/*
* Copyright (C) 2018 Intel Corporation.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
/**
* @file vhost.h
*
* @brief VHOST APIs for ACRN Project
*/
#ifndef __VHOST_H__
#define __VHOST_H__
#include "virtio.h"
/**
* @brief vhost APIs
*
* @addtogroup acrn_virtio
*
*/
struct vhost_vq {
int kick_fd; /**< fd of kick eventfd */
int call_fd; /**< fd of call eventfd */
int idx; /**< index of this vq in vhost dev */
struct vhost_dev *dev; /**< pointer to vhost_dev */
};
struct vhost_dev {
/**
* backpointer to virtio_base
*/
struct virtio_base *base;
/**
* pointer to vhost_vq array
*/
struct vhost_vq *vqs;
/**
* number of virtqueues
*/
int nvqs;
/**
* vhost chardev fd
*/
int fd;
/**
* first vq's index in virtio_vq_info
*/
int vq_idx;
/**
* supported virtio defined features
*/
uint64_t vhost_features;
/**
* vhost self-defined internal features bits used for
* communicate between vhost user-space and kernel-space modules
*/
uint64_t vhost_ext_features;
/**
* vq busyloop timeout in us
*/
uint32_t busyloop_timeout;
/**
* whether vhost is started
*/
bool started;
};
/**
* @brief vhost_dev initialization.
*
* This interface is called to initialize the vhost_dev. It must be called
* before the actual feature negotiation with the guest OS starts.
*
* @param vdev Pointer to struct vhost_dev.
* @param base Pointer to struct virtio_base.
* @param fd fd of the vhost chardev.
* @param vq_idx The first virtqueue which would be used by this vhost dev.
* @param vhost_features Subset of vhost features which would be enabled.
* @param vhost_ext_features Specific vhost internal features to be enabled.
* @param busyloop_timeout Busy loop timeout in us.
*
* @return 0 on success and -1 on failure.
*/
int vhost_dev_init(struct vhost_dev *vdev, struct virtio_base *base, int fd,
int vq_idx, uint64_t vhost_features,
uint64_t vhost_ext_features, uint32_t busyloop_timeout);
/**
* @brief vhost_dev cleanup.
*
* This interface is called to cleanup the vhost_dev.
*
* @param vdev Pointer to struct vhost_dev.
*
* @return 0 on success and -1 on failure.
*/
int vhost_dev_deinit(struct vhost_dev *vdev);
/**
* @brief start vhost data plane.
*
* This interface is called to start the data plane in vhost.
*
* @param vdev Pointer to struct vhost_dev.
*
* @return 0 on success and -1 on failure.
*/
int vhost_dev_start(struct vhost_dev *vdev);
/**
* @brief stop vhost data plane.
*
* This interface is called to stop the data plane in vhost.
*
* @param vdev Pointer to struct vhost_dev.
*
* @return 0 on success and -1 on failure.
*/
int vhost_dev_stop(struct vhost_dev *vdev);
/**
* @brief vhost kernel dev ioctrl function.
*
* This interface is used to operation the vhost dev kernel.
*
* @param vdev Pointer to struct vhost_dev.
* @param request to vhost kernel.
* @param arg of vhost kernel operation.
*
* @return 0 on success and -1 on failure.
*/
int vhost_kernel_ioctl(struct vhost_dev *vdev, unsigned long int request, void *arg);
#endif /* __VHOST_H__ */